@fakeoai/ui 0.0.1 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/README.md +17 -62
  2. package/dist/components/filter.d.ts +21 -0
  3. package/dist/components/filter.d.ts.map +1 -0
  4. package/dist/components/filter.js +37 -0
  5. package/dist/components/filter.js.map +1 -0
  6. package/dist/components/input.d.ts +4 -0
  7. package/dist/components/input.d.ts.map +1 -0
  8. package/dist/components/input.js +12 -0
  9. package/dist/components/input.js.map +1 -0
  10. package/dist/components/loading.d.ts +3 -0
  11. package/dist/components/loading.d.ts.map +1 -0
  12. package/dist/components/loading.js +11 -0
  13. package/dist/components/loading.js.map +1 -0
  14. package/dist/components/nprogress.d.ts +2 -0
  15. package/dist/components/nprogress.d.ts.map +1 -0
  16. package/dist/components/nprogress.js +35 -0
  17. package/dist/components/nprogress.js.map +1 -0
  18. package/dist/components/pagination.d.ts +8 -0
  19. package/dist/components/pagination.d.ts.map +1 -0
  20. package/dist/components/pagination.js +14 -0
  21. package/dist/components/pagination.js.map +1 -0
  22. package/dist/components/sheet.d.ts +20 -0
  23. package/dist/components/sheet.d.ts.map +1 -0
  24. package/dist/components/sheet.js +38 -0
  25. package/dist/components/sheet.js.map +1 -0
  26. package/dist/components/table.d.ts +33 -0
  27. package/dist/components/table.d.ts.map +1 -0
  28. package/dist/components/table.js +156 -0
  29. package/dist/components/table.js.map +1 -0
  30. package/dist/components/tooltip.d.ts +5 -0
  31. package/dist/components/tooltip.d.ts.map +1 -0
  32. package/dist/components/tooltip.js +9 -0
  33. package/dist/components/tooltip.js.map +1 -0
  34. package/dist/hooks/use-confirm.d.ts +11 -0
  35. package/dist/hooks/use-confirm.d.ts.map +1 -0
  36. package/dist/hooks/use-confirm.js +35 -0
  37. package/dist/hooks/use-confirm.js.map +1 -0
  38. package/dist/hooks/use-page-store.d.ts +9 -0
  39. package/dist/hooks/use-page-store.d.ts.map +1 -0
  40. package/dist/hooks/use-page-store.js +8 -0
  41. package/dist/hooks/use-page-store.js.map +1 -0
  42. package/dist/hooks/use-table-selection.d.ts +9 -0
  43. package/dist/hooks/use-table-selection.d.ts.map +1 -0
  44. package/dist/hooks/use-table-selection.js +25 -0
  45. package/dist/hooks/use-table-selection.js.map +1 -0
  46. package/dist/index.d.ts +11 -0
  47. package/dist/index.d.ts.map +1 -0
  48. package/dist/index.js +11 -0
  49. package/dist/index.js.map +1 -0
  50. package/dist/types.d.ts +6 -0
  51. package/dist/types.d.ts.map +1 -0
  52. package/dist/types.js +2 -0
  53. package/dist/types.js.map +1 -0
  54. package/dist/utils/cn.d.ts +3 -0
  55. package/dist/utils/cn.d.ts.map +1 -0
  56. package/dist/utils/cn.js +6 -0
  57. package/dist/utils/cn.js.map +1 -0
  58. package/package.json +31 -36
  59. package/dist/index.d.mts +0 -14
  60. package/dist/index.mjs +0 -93
  61. package/dist/index.mjs.map +0 -1
  62. package/dist/style.css +0 -1
  63. package/dist/style.d.mts +0 -2
package/README.md CHANGED
@@ -1,82 +1,37 @@
1
- # My React Component Library
1
+ # tokens2-ui
2
2
 
3
- 一个现代化的 React 组件库,使用 TypeScript 构建。
3
+ `tokens2` 项目抽离出的可复用 UI 组件和公共逻辑。
4
4
 
5
5
  ## 安装
6
6
 
7
7
  ```bash
8
- npm install my-react-component-library
9
- # 或
10
- yarn add my-react-component-library
11
- # 或
12
- pnpm add my-react-component-library
8
+ pnpm add tokens2-ui
13
9
  ```
14
10
 
15
- ## 使用
16
-
17
- ```tsx
18
- import { Button, Card } from "my-react-component-library";
19
-
20
- function App() {
21
- return (
22
- <Card title="示例卡片">
23
- <Button variant="primary" size="md">
24
- 点击我
25
- </Button>
26
- </Card>
27
- );
28
- }
29
- ```
11
+ 同时安装 peer dependencies:
30
12
 
31
- ## 组件
32
-
33
- ### Button
34
-
35
- 按钮组件,支持多种样式和尺寸。
36
-
37
- ```tsx
38
- <Button variant="primary" size="md" onClick={() => console.log("clicked")}>
39
- 按钮文本
40
- </Button>
13
+ ```bash
14
+ pnpm add react react-dom antd @heroui/react @radix-ui/react-dialog @tanstack/react-query class-variance-authority lucide-react nprogress
41
15
  ```
42
16
 
43
- **Props:**
44
-
45
- - `variant`: 'primary' | 'secondary' | 'outline'
46
- - `size`: 'sm' | 'md' | 'lg'
47
- - `onClick`: () => void
48
- - `disabled`: boolean
49
- - `className`: string
50
-
51
- ### Card
52
-
53
- 卡片组件,用于展示内容。
17
+ ## 使用
54
18
 
55
19
  ```tsx
56
- <Card title="卡片标题" shadow="md">
57
- 卡片内容
58
- </Card>
20
+ import { Table, Input, Tooltip, useTableSelection } from "tokens2-ui";
59
21
  ```
60
22
 
61
- **Props:**
23
+ ## 说明
62
24
 
63
- - `title`: string (可选)
64
- - `shadow`: 'sm' | 'md' | 'lg'
65
- - `className`: string
25
+ - 组件使用了 Tailwind 类名,消费方需要具备对应样式体系。
26
+ - `Table` 依赖 `antd` `@heroui/react`。
27
+ - `useTableSelection` 适合替代页面里单独的选中行 store。
66
28
 
67
- ## 开发
29
+ ## 发布
68
30
 
69
31
  ```bash
70
- # 安装依赖
71
- npm install
72
-
73
- # 开发模式
74
- npm run dev
75
-
76
- # 构建
77
- npm run build
32
+ pnpm --filter tokens2-ui build
33
+ cd packages/tokens-ui
34
+ npm publish --access public
78
35
  ```
79
36
 
80
- ## 许可证
81
-
82
- MIT
37
+ 发布前建议先修改 `package.json` 里的 `name`,确保 npm 包名可用且归你所有。
@@ -0,0 +1,21 @@
1
+ import type { ColumnType } from "antd/es/table";
2
+ import type React from "react";
3
+ export declare const searchFilter: (options: {
4
+ placeholder: string;
5
+ className?: string;
6
+ }) => Pick<ColumnType<any>, "filterDropdown" | "filterIcon">;
7
+ interface SelectFilterItem {
8
+ label: React.ReactNode;
9
+ text?: string;
10
+ value: string | number;
11
+ }
12
+ export declare const selectionFilter: (options: {
13
+ options: SelectFilterItem[];
14
+ renderValue?: (item: SelectFilterItem) => React.ReactNode;
15
+ placeholder: string;
16
+ className?: string;
17
+ multiple?: boolean;
18
+ }) => Pick<ColumnType<any>, "filterDropdown" | "filterIcon">;
19
+ export declare const dateRangePickerFilter: () => ColumnType<any>;
20
+ export {};
21
+ //# sourceMappingURL=filter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter.d.ts","sourceRoot":"","sources":["../../src/components/filter.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,eAAO,MAAM,YAAY,EAAE,CAAC,OAAO,EAAE;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,KAAK,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,gBAAgB,GAAG,YAAY,CA4CzD,CAAC;AAEH,UAAU,gBAAgB;IACxB,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;CACxB;AAED,eAAO,MAAM,eAAe,EAAE,CAAC,OAAO,EAAE;IACtC,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,KAAK,CAAC,SAAS,CAAC;IAC1D,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,KAAK,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,gBAAgB,GAAG,YAAY,CA2DzD,CAAC;AAEH,eAAO,MAAM,qBAAqB,QAAO,UAAU,CAAC,GAAG,CAmDrD,CAAC"}
@@ -0,0 +1,37 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Button, DateRangePicker, Input, Select, SelectItem, } from "@heroui/react";
3
+ import { parseDate } from "@internationalized/date";
4
+ import { Calendar, Search, SlidersHorizontal } from "lucide-react";
5
+ import { cn } from "../utils/cn";
6
+ export const searchFilter = ({ placeholder, className, }) => ({
7
+ filterDropdown: ({ setSelectedKeys, selectedKeys, confirm, clearFilters, }) => (_jsxs("div", { className: cn("flex flex-col gap-2 p-2 w-[250px]", className), children: [_jsx(Input, { size: "sm", variant: "bordered", placeholder: placeholder, value: selectedKeys[0] || "", onChange: (event) => setSelectedKeys(event.target.value ? [event.target.value] : []) }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Button, { variant: "light", className: "h-7 w-full", size: "sm", onPress: () => {
8
+ clearFilters?.();
9
+ confirm();
10
+ }, children: "\u6E05\u7A7A" }), _jsx(Button, { className: "h-7 w-full", size: "sm", color: "primary", onPress: () => confirm(), children: "\u67E5\u8BE2" })] })] })),
11
+ filterIcon: _jsx(Search, { className: "w-4 h-4" }),
12
+ });
13
+ export const selectionFilter = ({ placeholder, options, className, renderValue, multiple = false, }) => ({
14
+ filterDropdown: ({ selectedKeys, setSelectedKeys, confirm, clearFilters, }) => (_jsxs("div", { className: cn("flex flex-col gap-2 p-2 w-[250px]", className), children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Button, { variant: "light", className: "h-7 w-full", size: "sm", onPress: () => {
15
+ clearFilters?.();
16
+ confirm();
17
+ }, children: "\u6E05\u7A7A" }), _jsx(Button, { className: "h-7 w-full", size: "sm", color: "primary", onPress: () => confirm(), children: "\u67E5\u8BE2" })] }), _jsx(Select, { size: "sm", selectedKeys: new Set(selectedKeys), onSelectionChange: (keys) => setSelectedKeys(Array.from(keys)), placeholder: placeholder, selectionMode: multiple ? "multiple" : "single", variant: "bordered", items: options, renderValue: renderValue
18
+ ? (items) => items.map((item) => renderValue(item.data))
19
+ : undefined, children: (item) => (_jsx(SelectItem, { children: renderValue?.(item) ?? item.label }, item.value)) })] })),
20
+ filterIcon: _jsx(SlidersHorizontal, { className: "w-4 h-4" }),
21
+ });
22
+ export const dateRangePickerFilter = () => ({
23
+ filterDropdown: ({ selectedKeys, setSelectedKeys, confirm, clearFilters, }) => (_jsxs("div", { className: "flex flex-col gap-2 p-2 w-[280px]", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Button, { variant: "light", className: "h-7 w-full", size: "sm", onPress: () => {
24
+ clearFilters?.();
25
+ confirm();
26
+ }, children: "\u6E05\u7A7A" }), _jsx(Button, { className: "h-7 w-full", size: "sm", color: "primary", onPress: () => confirm(), children: "\u67E5\u8BE2" })] }), _jsx(DateRangePicker, { className: "max-w-xs", variant: "bordered", label: "\u9009\u62E9\u65E5\u671F\u8303\u56F4", value: selectedKeys.length
27
+ ? {
28
+ start: parseDate(selectedKeys[0]),
29
+ end: parseDate(selectedKeys[1]),
30
+ }
31
+ : null, onChange: (value) => setSelectedKeys([
32
+ value?.start.toString(),
33
+ value?.end.toString(),
34
+ ]) })] })),
35
+ filterIcon: _jsx(Calendar, { className: "w-4 h-4" }),
36
+ });
37
+ //# sourceMappingURL=filter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter.js","sourceRoot":"","sources":["../../src/components/filter.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { type InputProps } from "@heroui/react";
2
+ import React from "react";
3
+ export declare const Input: React.ForwardRefExoticComponent<Omit<InputProps, "ref"> & React.RefAttributes<HTMLInputElement>>;
4
+ //# sourceMappingURL=input.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../../src/components/input.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AACpE,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,eAAO,MAAM,KAAK,kGAiBjB,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Input as HeroInput } from "@heroui/react";
3
+ import React from "react";
4
+ import { cn } from "../utils/cn";
5
+ export const Input = React.forwardRef(function Input({ classNames, ...props }, ref) {
6
+ return (_jsx(HeroInput, { ref: ref, ...props, classNames: {
7
+ ...(classNames ?? {}),
8
+ label: cn("group-data-[filled-within=true]:!-translate-y-1/2 group-data-[filled-within=true]:top-0 bg-transparent group-data-[filled-within=true]:bg-white group-data-[filled-within=true]:dark:bg-black transition-[transform,color,left,opacity,background] px-1", classNames?.label),
9
+ input: cn("h-full", classNames?.input),
10
+ } }));
11
+ });
12
+ //# sourceMappingURL=input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input.js","sourceRoot":"","sources":["../../src/components/input.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,KAAK,IAAI,SAAS,EAAmB,MAAM,eAAe,CAAC;AACpE,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAEjC,MAAM,CAAC,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,CACnC,SAAS,KAAK,CAAC,EAAE,UAAU,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG;IAC1C,OAAO,CACL,KAAC,SAAS,IACR,GAAG,EAAE,GAAG,KACJ,KAAK,EACT,UAAU,EAAE;YACV,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC;YACrB,KAAK,EAAE,EAAE,CACP,yPAAyP,EACzP,UAAU,EAAE,KAAK,CAClB;YACD,KAAK,EAAE,EAAE,CAAC,QAAQ,EAAE,UAAU,EAAE,KAAK,CAAC;SACvC,GACD,CACH,CAAC;AACJ,CAAC,CACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type SpinnerProps } from "@heroui/react";
2
+ export declare function Loading({ className, ...props }: SpinnerProps): import("react/jsx-runtime").JSX.Element;
3
+ //# sourceMappingURL=loading.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loading.d.ts","sourceRoot":"","sources":["../../src/components/loading.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AAG3D,wBAAgB,OAAO,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,YAAY,2CAc5D"}
@@ -0,0 +1,11 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Spinner } from "@heroui/react";
3
+ import { cn } from "../utils/cn";
4
+ export function Loading({ className, ...props }) {
5
+ return (_jsx(Spinner, { color: "default", className: cn("absolute inset-0", className), label: "\u52A0\u8F7D\u4E2D...", classNames: {
6
+ circle2: "border-b-foreground",
7
+ circle1: "border-b-foreground",
8
+ label: "text-sm mt-2",
9
+ }, ...props }));
10
+ }
11
+ //# sourceMappingURL=loading.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loading.js","sourceRoot":"","sources":["../../src/components/loading.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAqB,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAEjC,MAAM,UAAU,OAAO,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAgB;IAC3D,OAAO,CACL,KAAC,OAAO,IACN,KAAK,EAAC,SAAS,EACf,SAAS,EAAE,EAAE,CAAC,kBAAkB,EAAE,SAAS,CAAC,EAC5C,KAAK,EAAC,uBAAQ,EACd,UAAU,EAAE;YACV,OAAO,EAAE,qBAAqB;YAC9B,OAAO,EAAE,qBAAqB;YAC9B,KAAK,EAAE,cAAc;SACtB,KACG,KAAK,GACT,CACH,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function Progress(): null;
2
+ //# sourceMappingURL=nprogress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nprogress.d.ts","sourceRoot":"","sources":["../../src/components/nprogress.tsx"],"names":[],"mappings":"AAKA,wBAAgB,QAAQ,SAqCvB"}
@@ -0,0 +1,35 @@
1
+ import { useEffect } from "react";
2
+ import NProgress from "nprogress";
3
+ NProgress.configure({ showSpinner: false });
4
+ export function Progress() {
5
+ useEffect(() => {
6
+ let lastHref = window.location.href;
7
+ const handleRouteChange = () => {
8
+ NProgress.start();
9
+ const timer = window.setTimeout(() => NProgress.done(), 100);
10
+ return () => {
11
+ window.clearTimeout(timer);
12
+ NProgress.done();
13
+ };
14
+ };
15
+ const observer = new MutationObserver(() => {
16
+ const currentHref = window.location.href;
17
+ if (currentHref !== lastHref) {
18
+ lastHref = currentHref;
19
+ handleRouteChange();
20
+ }
21
+ });
22
+ observer.observe(document, {
23
+ subtree: true,
24
+ childList: true,
25
+ });
26
+ window.addEventListener("popstate", handleRouteChange);
27
+ handleRouteChange();
28
+ return () => {
29
+ observer.disconnect();
30
+ window.removeEventListener("popstate", handleRouteChange);
31
+ };
32
+ }, []);
33
+ return null;
34
+ }
35
+ //# sourceMappingURL=nprogress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nprogress.js","sourceRoot":"","sources":["../../src/components/nprogress.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,SAAS,MAAM,WAAW,CAAC;AAElC,SAAS,CAAC,SAAS,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;AAE5C,MAAM,UAAU,QAAQ;IACtB,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;QAEpC,MAAM,iBAAiB,GAAG,GAAG,EAAE;YAC7B,SAAS,CAAC,KAAK,EAAE,CAAC;YAClB,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC;YAE7D,OAAO,GAAG,EAAE;gBACV,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;gBAC3B,SAAS,CAAC,IAAI,EAAE,CAAC;YACnB,CAAC,CAAC;QACJ,CAAC,CAAC;QAEF,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC,GAAG,EAAE;YACzC,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;YACzC,IAAI,WAAW,KAAK,QAAQ,EAAE,CAAC;gBAC7B,QAAQ,GAAG,WAAW,CAAC;gBACvB,iBAAiB,EAAE,CAAC;YACtB,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE;YACzB,OAAO,EAAE,IAAI;YACb,SAAS,EAAE,IAAI;SAChB,CAAC,CAAC;QAEH,MAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;QACvD,iBAAiB,EAAE,CAAC;QAEpB,OAAO,GAAG,EAAE;YACV,QAAQ,CAAC,UAAU,EAAE,CAAC;YACtB,MAAM,CAAC,mBAAmB,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;QAC5D,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,8 @@
1
+ export interface PaginationProps {
2
+ current: number;
3
+ total: number;
4
+ pageSize: number;
5
+ onChange: (page: number, pageSize: number) => void;
6
+ }
7
+ export declare function Pagination({ current, total, pageSize, onChange, }: PaginationProps): import("react/jsx-runtime").JSX.Element | null;
8
+ //# sourceMappingURL=pagination.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pagination.d.ts","sourceRoot":"","sources":["../../src/components/pagination.tsx"],"names":[],"mappings":"AASA,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;CACpD;AAED,wBAAgB,UAAU,CAAC,EACzB,OAAO,EACP,KAAK,EACL,QAAQ,EACR,QAAQ,GACT,EAAE,eAAe,kDAsCjB"}
@@ -0,0 +1,14 @@
1
+ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
+ import { Pagination as HeroPagination, Select, SelectItem, } from "@heroui/react";
3
+ import { useMemo } from "react";
4
+ const sizes = ["10", "20", "50", "100", "500", "1000", "10000"];
5
+ export function Pagination({ current, total, pageSize, onChange, }) {
6
+ const totalPages = useMemo(() => Math.ceil(total / Number(pageSize)), [total, pageSize]);
7
+ if (!totalPages)
8
+ return null;
9
+ return (_jsxs("div", { className: "flex w-full justify-center items-center gap-4 flex-wrap", children: [_jsxs("div", { className: "absolute hidden sm:block left-4 text-small text-default-400 justify-items-start", children: ["\u603B\u6570\uFF1A", total] }), _jsx(HeroPagination, { isCompact: true, size: "sm", showControls: true, showShadow: true, page: current, total: totalPages, onChange: (page) => onChange(page, pageSize) }), _jsx(Select, { size: "sm", className: "w-auto", classNames: {
10
+ innerWrapper: "w-full pr-6",
11
+ popoverContent: "w-fit",
12
+ }, selectedKeys: [String(pageSize)], onChange: (e) => onChange(1, Number(e.target.value || 20)), children: sizes.map((size) => (_jsx(SelectItem, { children: `${size} 条/页` }, size))) })] }));
13
+ }
14
+ //# sourceMappingURL=pagination.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pagination.js","sourceRoot":"","sources":["../../src/components/pagination.tsx"],"names":[],"mappings":";AAAA,OAAO,EACL,UAAU,IAAI,cAAc,EAC5B,MAAM,EACN,UAAU,GACX,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAEhC,MAAM,KAAK,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AAShE,MAAM,UAAU,UAAU,CAAC,EACzB,OAAO,EACP,KAAK,EACL,QAAQ,EACR,QAAQ,GACQ;IAChB,MAAM,UAAU,GAAG,OAAO,CACxB,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,EACzC,CAAC,KAAK,EAAE,QAAQ,CAAC,CAClB,CAAC;IAEF,IAAI,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC;IAE7B,OAAO,CACL,eAAK,SAAS,EAAC,yDAAyD,aACtE,eAAK,SAAS,EAAC,iFAAiF,mCAC1F,KAAK,IACL,EACN,KAAC,cAAc,IACb,SAAS,QACT,IAAI,EAAC,IAAI,EACT,YAAY,QACZ,UAAU,QACV,IAAI,EAAE,OAAO,EACb,KAAK,EAAE,UAAU,EACjB,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,GAC5C,EACF,KAAC,MAAM,IACL,IAAI,EAAC,IAAI,EACT,SAAS,EAAC,QAAQ,EAClB,UAAU,EAAE;oBACV,YAAY,EAAE,aAAa;oBAC3B,cAAc,EAAE,OAAO;iBACxB,EACD,YAAY,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAChC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,YAEzD,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CACnB,KAAC,UAAU,cAAa,GAAG,IAAI,MAAM,IAApB,IAAI,CAA8B,CACpD,CAAC,GACK,IACL,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,20 @@
1
+ import * as SheetPrimitive from "@radix-ui/react-dialog";
2
+ import { type VariantProps } from "class-variance-authority";
3
+ import * as React from "react";
4
+ declare const Sheet: React.FC<SheetPrimitive.DialogProps>;
5
+ declare const SheetTrigger: React.ForwardRefExoticComponent<SheetPrimitive.DialogTriggerProps & React.RefAttributes<HTMLButtonElement>>;
6
+ declare const SheetClose: React.ForwardRefExoticComponent<SheetPrimitive.DialogCloseProps & React.RefAttributes<HTMLButtonElement>>;
7
+ declare const SheetPortal: React.FC<SheetPrimitive.DialogPortalProps>;
8
+ declare const SheetOverlay: React.ForwardRefExoticComponent<Omit<SheetPrimitive.DialogOverlayProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
9
+ declare const sheetVariants: (props?: ({
10
+ side?: "top" | "bottom" | "left" | "right" | null | undefined;
11
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
12
+ interface SheetContentProps extends React.ComponentPropsWithoutRef<typeof SheetPrimitive.Content>, VariantProps<typeof sheetVariants> {
13
+ }
14
+ declare const SheetContent: React.ForwardRefExoticComponent<SheetContentProps & React.RefAttributes<HTMLDivElement>>;
15
+ declare function SheetHeader({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): import("react/jsx-runtime").JSX.Element;
16
+ declare function SheetFooter({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): import("react/jsx-runtime").JSX.Element;
17
+ declare const SheetTitle: React.ForwardRefExoticComponent<Omit<SheetPrimitive.DialogTitleProps & React.RefAttributes<HTMLHeadingElement>, "ref"> & React.RefAttributes<HTMLHeadingElement>>;
18
+ declare const SheetDescription: React.ForwardRefExoticComponent<Omit<SheetPrimitive.DialogDescriptionProps & React.RefAttributes<HTMLParagraphElement>, "ref"> & React.RefAttributes<HTMLParagraphElement>>;
19
+ export { Sheet, SheetPortal, SheetOverlay, SheetTrigger, SheetClose, SheetContent, SheetHeader, SheetFooter, SheetTitle, SheetDescription, };
20
+ //# sourceMappingURL=sheet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sheet.d.ts","sourceRoot":"","sources":["../../src/components/sheet.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,cAAc,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,QAAA,MAAM,KAAK,sCAAsB,CAAC;AAClC,QAAA,MAAM,YAAY,6GAAyB,CAAC;AAC5C,QAAA,MAAM,UAAU,2GAAuB,CAAC;AACxC,QAAA,MAAM,WAAW,4CAAwB,CAAC;AAE1C,QAAA,MAAM,YAAY,6JAYhB,CAAC;AAGH,QAAA,MAAM,aAAa;;8EAiBlB,CAAC;AAEF,UAAU,iBACR,SACE,KAAK,CAAC,wBAAwB,CAAC,OAAO,cAAc,CAAC,OAAO,CAAC,EAC7D,YAAY,CAAC,OAAO,aAAa,CAAC;CAAG;AAEzC,QAAA,MAAM,YAAY,0FAchB,CAAC;AAGH,iBAAS,WAAW,CAAC,EACnB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,2CAUtC;AAED,iBAAS,WAAW,CAAC,EACnB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,2CAUtC;AAED,QAAA,MAAM,UAAU,mKASd,CAAC;AAGH,QAAA,MAAM,gBAAgB,6KASpB,CAAC;AAGH,OAAO,EACL,KAAK,EACL,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,WAAW,EACX,WAAW,EACX,UAAU,EACV,gBAAgB,GACjB,CAAC"}
@@ -0,0 +1,38 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import * as SheetPrimitive from "@radix-ui/react-dialog";
3
+ import { cva } from "class-variance-authority";
4
+ import * as React from "react";
5
+ import { cn } from "../utils/cn";
6
+ const Sheet = SheetPrimitive.Root;
7
+ const SheetTrigger = SheetPrimitive.Trigger;
8
+ const SheetClose = SheetPrimitive.Close;
9
+ const SheetPortal = SheetPrimitive.Portal;
10
+ const SheetOverlay = React.forwardRef(({ className, ...props }, ref) => (_jsx(SheetPrimitive.Overlay, { ref: ref, className: cn("fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0", className), ...props })));
11
+ SheetOverlay.displayName = SheetPrimitive.Overlay.displayName;
12
+ const sheetVariants = cva("fixed z-50 gap-4 bg-background p-6 shadow-lg transition ease-in-out data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:duration-300 data-[state=open]:duration-500", {
13
+ variants: {
14
+ side: {
15
+ top: "inset-x-0 top-0 border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top",
16
+ bottom: "inset-x-0 bottom-0 border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom",
17
+ left: "inset-y-0 left-0 h-full w-3/4 border-r data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm",
18
+ right: "inset-y-0 right-0 h-full w-3/4 border-l data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-sm",
19
+ },
20
+ },
21
+ defaultVariants: {
22
+ side: "right",
23
+ },
24
+ });
25
+ const SheetContent = React.forwardRef(({ side = "right", className, children, ...props }, ref) => (_jsxs(SheetPortal, { children: [_jsx(SheetOverlay, {}), _jsx(SheetPrimitive.Content, { ref: ref, className: cn(sheetVariants({ side }), className), ...props, children: children })] })));
26
+ SheetContent.displayName = SheetPrimitive.Content.displayName;
27
+ function SheetHeader({ className, ...props }) {
28
+ return (_jsx("div", { className: cn("flex flex-col space-y-2 text-center sm:text-left", className), ...props }));
29
+ }
30
+ function SheetFooter({ className, ...props }) {
31
+ return (_jsx("div", { className: cn("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2", className), ...props }));
32
+ }
33
+ const SheetTitle = React.forwardRef(({ className, ...props }, ref) => (_jsx(SheetPrimitive.Title, { ref: ref, className: cn("text-lg font-semibold text-foreground", className), ...props })));
34
+ SheetTitle.displayName = SheetPrimitive.Title.displayName;
35
+ const SheetDescription = React.forwardRef(({ className, ...props }, ref) => (_jsx(SheetPrimitive.Description, { ref: ref, className: cn("text-sm text-muted-foreground", className), ...props })));
36
+ SheetDescription.displayName = SheetPrimitive.Description.displayName;
37
+ export { Sheet, SheetPortal, SheetOverlay, SheetTrigger, SheetClose, SheetContent, SheetHeader, SheetFooter, SheetTitle, SheetDescription, };
38
+ //# sourceMappingURL=sheet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sheet.js","sourceRoot":"","sources":["../../src/components/sheet.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import { TableProps } from "antd";
2
+ import React from "react";
3
+ import { UseQueryResult } from "@tanstack/react-query";
4
+ import { IPage } from "../types";
5
+ export interface TableAction<T> {
6
+ label?: string;
7
+ handler?: (record: T) => void;
8
+ render?: (record: T) => JSX.Element;
9
+ }
10
+ export type TableActionFunc<T> = (record: T) => TableAction<T>[];
11
+ export declare function Table<T>({ loading, dataSource, pagination, columns, buttons, children, actions, className, expandable, rowKey, ...props }: Omit<TableProps<T>, "pagination" | "loading"> & {
12
+ loading?: boolean;
13
+ buttons?: React.ReactNode;
14
+ children?: React.ReactNode;
15
+ actions?: TableAction<T>[] | TableActionFunc<T>;
16
+ pagination: {
17
+ current: number;
18
+ total: number;
19
+ pageSize: number;
20
+ onChange: (page: number, pageSize: number) => void;
21
+ };
22
+ }): import("react/jsx-runtime").JSX.Element;
23
+ export declare function getTableInstance<T>({ columns, expandable, actions, buttons, api, rowSelection, className, children, }: {
24
+ className?: string;
25
+ columns: TableProps<T>["columns"];
26
+ actions?: TableAction<T>[] | TableActionFunc<T>;
27
+ buttons?: React.ReactNode;
28
+ expandable?: NonNullable<TableProps<T>["expandable"]>;
29
+ rowSelection?: TableProps<T>["rowSelection"];
30
+ children?: React.ReactNode;
31
+ api: (params: any) => UseQueryResult<IPage<T>, Error>;
32
+ }): React.ReactElement<any, string | React.JSXElementConstructor<any>>;
33
+ //# sourceMappingURL=table.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../src/components/table.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAsB,UAAU,EAAE,MAAM,MAAM,CAAC;AAQtD,OAAO,KAMN,MAAM,OAAO,CAAC;AAIf,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAGvD,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAGjC,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,IAAI,CAAC;IAC9B,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,GAAG,CAAC,OAAO,CAAC;CACrC;AAED,MAAM,MAAM,eAAe,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;AAejE,wBAAgB,KAAK,CAAC,CAAC,EAAE,EACvB,OAAO,EACP,UAAU,EACV,UAAU,EACV,OAAO,EACP,OAAO,EACP,QAAQ,EACR,OAAO,EACP,SAAS,EACT,UAAU,EACV,MAAM,EACN,GAAG,KAAK,EACT,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,YAAY,GAAG,SAAS,CAAC,GAAG;IACjD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,OAAO,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;IAChD,UAAU,EAAE;QACV,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;KACpD,CAAC;CACH,2CAyIA;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,EAClC,OAAO,EACP,UAAU,EACV,OAAY,EACZ,OAAO,EACP,GAAG,EACH,YAAiB,EACjB,SAAS,EACT,QAAQ,GACT,EAAE;IACD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAClC,OAAO,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;IAChD,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,UAAU,CAAC,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;IACtD,YAAY,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;IAC7C,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,GAAG,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;CACvD,sEAiHA"}
@@ -0,0 +1,156 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Table as AntdTable } from "antd";
3
+ import { Button, Dropdown, DropdownItem, DropdownMenu, DropdownTrigger, } from "@heroui/react";
4
+ import { useCallback, useEffect, useMemo, useRef, useState, } from "react";
5
+ import { EllipsisVertical } from "lucide-react";
6
+ import { Pagination } from "./pagination";
7
+ import { Loading } from "./loading";
8
+ import { cn } from "..";
9
+ import { usePageStore } from "../hooks/use-page-store";
10
+ function getRecordKey(record, rowKey) {
11
+ if (typeof rowKey === "function")
12
+ return rowKey(record);
13
+ if (typeof rowKey === "string")
14
+ return record[rowKey];
15
+ return (record.key ??
16
+ record.id);
17
+ }
18
+ export function Table({ loading, dataSource, pagination, columns, buttons, children, actions, className, expandable, rowKey, ...props }) {
19
+ const [expandedRowKeys, setExpandedRowKeys] = useState([]);
20
+ const prevDataSourceRef = useRef(dataSource);
21
+ useEffect(() => {
22
+ if (dataSource !== prevDataSourceRef.current) {
23
+ prevDataSourceRef.current = dataSource;
24
+ setExpandedRowKeys([]);
25
+ }
26
+ }, [dataSource]);
27
+ const mergedExpandable = useMemo(() => {
28
+ if (!expandable)
29
+ return undefined;
30
+ const origOnExpand = expandable.onExpand;
31
+ return {
32
+ ...expandable,
33
+ expandedRowKeys,
34
+ onExpand: (expanded, record) => {
35
+ setExpandedRowKeys(expanded ? [getRecordKey(record, rowKey)] : []);
36
+ origOnExpand?.(expanded, record);
37
+ },
38
+ };
39
+ }, [expandable, expandedRowKeys, rowKey]);
40
+ const finalColumns = useMemo(() => {
41
+ return columns
42
+ ?.concat(actions
43
+ ? {
44
+ title: "操作",
45
+ key: "actions",
46
+ width: 60,
47
+ fixed: "right",
48
+ render: (_, record) => {
49
+ const as = typeof actions === "function" ? actions(record) : actions;
50
+ return (!!as.length && (_jsxs(Dropdown, { children: [_jsx(DropdownTrigger, { children: _jsx(Button, { isIconOnly: true, radius: "full", size: "sm", variant: "light", children: _jsx(EllipsisVertical, { className: "text-default-400" }) }) }), _jsx(DropdownMenu, { children: as.map((v, i) => (_jsx(DropdownItem, { onPress: () => v.handler?.(record), children: v.render ? v.render(record) : v.label }, i))) })] })));
51
+ },
52
+ }
53
+ : {})
54
+ .map((v) => ({
55
+ align: "center",
56
+ ellipsis: true,
57
+ width: 200,
58
+ ...v,
59
+ }));
60
+ }, [columns, actions]);
61
+ const [scrollY, setScrollY] = useState(300);
62
+ const containerRef = useRef(null);
63
+ const buttonsRef = useRef(null);
64
+ const paginationRef = useRef(null);
65
+ useEffect(() => {
66
+ const calculateScrollHeight = () => {
67
+ if (!containerRef.current)
68
+ return;
69
+ const containerRect = containerRef.current.getBoundingClientRect();
70
+ const buttonsHeight = buttonsRef.current?.offsetHeight || 0;
71
+ const paginationHeight = paginationRef.current?.offsetHeight || 0;
72
+ const availableHeight = containerRect.height - (buttonsHeight + paginationHeight + 6 * 16 + 50);
73
+ setScrollY(Math.max(availableHeight, 200));
74
+ };
75
+ calculateScrollHeight();
76
+ window.addEventListener("resize", calculateScrollHeight);
77
+ return () => {
78
+ window.removeEventListener("resize", calculateScrollHeight);
79
+ };
80
+ }, [buttons]);
81
+ return (_jsxs("div", { ref: containerRef, className: cn("flex flex-col gap-4 p-4 flex-1 overflow-hidden", className), children: [buttons && (_jsx("div", { ref: buttonsRef, className: "flex items-center sm:flex-row-reverse gap-4 flex-wrap", children: buttons })), _jsx(AntdTable, { className: "next-table", size: "small", loading: { indicator: _jsx(Loading, { label: "" }), spinning: loading }, rowClassName: (_, i) => (i % 2 === 1 ? "bg-default-50" : ""), dataSource: dataSource, pagination: false, virtual: true, columns: finalColumns, scroll: { y: scrollY }, rowKey: rowKey, expandable: mergedExpandable, ...props }), _jsx("div", { ref: paginationRef, children: _jsx(Pagination, { ...pagination }) }), children] }));
82
+ }
83
+ export function getTableInstance({ columns, expandable, actions = [], buttons, api, rowSelection = {}, className, children, }) {
84
+ const [o, setOffset] = useState(1);
85
+ const [l, setLimit] = useState(20);
86
+ const [order, setOrder] = useState({
87
+ updated_at: "descend",
88
+ });
89
+ const { selectedRowKeys, setSelectedRowKeys, setRow } = usePageStore();
90
+ const [filters, setFilters] = useState({});
91
+ const params = useMemo(() => ({
92
+ limit: l,
93
+ offset: l * (o - 1),
94
+ ...Object.fromEntries(Object.entries(filters)
95
+ .filter(([_, v]) => Array.isArray(v) && v.length)
96
+ .map(([k, v]) => [k, v.length > 1 ? v : v[0]])),
97
+ order: Object.fromEntries(Object.entries(order).map(([k, v]) => [
98
+ k,
99
+ v === "ascend" ? "asc" : "desc",
100
+ ])),
101
+ }), [l, o, filters, order]);
102
+ const rowSelectionProps = Object.assign({
103
+ selectedRowKeys,
104
+ onChange: setSelectedRowKeys,
105
+ preserveSelectedRowKeys: true,
106
+ columnWidth: 50,
107
+ fixed: false,
108
+ }, rowSelection);
109
+ const { data, isFetching } = api(params);
110
+ const onPageChange = useCallback((offset, limit) => {
111
+ setOffset(offset);
112
+ setLimit(limit);
113
+ }, []);
114
+ const onTableChange = useCallback((_, filter, sorter) => {
115
+ if (Object.entries(filter).some(([k, v]) => !Object.keys(filters).includes(k) || v !== filters[k])) {
116
+ setFilters(filter);
117
+ }
118
+ if (!Array.isArray(sorter)) {
119
+ if (sorter.field && sorter.order) {
120
+ const field = sorter.field;
121
+ if (field.endsWith("usage")) {
122
+ return;
123
+ }
124
+ setOrder({ [field]: sorter.order });
125
+ }
126
+ else {
127
+ setOrder({});
128
+ }
129
+ }
130
+ }, [filters]);
131
+ useEffect(() => {
132
+ return () => {
133
+ setSelectedRowKeys([]);
134
+ setRow(undefined);
135
+ };
136
+ }, []);
137
+ return useMemo(() => (_jsx(Table, { className: className, loading: isFetching, columns: columns, dataSource: data?.items, buttons: buttons, pagination: {
138
+ total: data?.total ?? 0,
139
+ onChange: onPageChange,
140
+ current: o,
141
+ pageSize: l,
142
+ }, children: children, expandable: expandable, rowSelection: rowSelectionProps, actions: actions, onChange: onTableChange, rowKey: "id" })), [
143
+ isFetching,
144
+ columns,
145
+ data,
146
+ o,
147
+ l,
148
+ onPageChange,
149
+ onTableChange,
150
+ actions,
151
+ rowSelection,
152
+ className,
153
+ children,
154
+ ]);
155
+ }
156
+ //# sourceMappingURL=table.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table.js","sourceRoot":"","sources":["../../src/components/table.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { type TooltipProps } from "@heroui/react";
2
+ export declare function Tooltip({ children, content, wrapperClass, }: TooltipProps & {
3
+ wrapperClass?: string;
4
+ }): import("react/jsx-runtime").JSX.Element;
5
+ //# sourceMappingURL=tooltip.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tooltip.d.ts","sourceRoot":"","sources":["../../src/components/tooltip.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,YAAY,EAIlB,MAAM,eAAe,CAAC;AAGvB,wBAAgB,OAAO,CAAC,EACtB,QAAQ,EACR,OAAO,EACP,YAAY,GACb,EAAE,YAAY,GAAG;IAAE,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,2CA0B1C"}
@@ -0,0 +1,9 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { Tooltip as HeroTooltip, Popover, PopoverContent, PopoverTrigger, } from "@heroui/react";
3
+ import { cn } from "../utils/cn";
4
+ export function Tooltip({ children, content, wrapperClass, }) {
5
+ return (_jsxs(_Fragment, { children: [_jsx(HeroTooltip, { classNames: { content: "max-w-[400px] break-all whitespace-pre-line" }, content: content, delay: 0, placement: "top", children: _jsx("div", { className: cn("hidden sm:block", wrapperClass), children: children }) }), _jsxs(Popover, { placement: "top", classNames: {
6
+ trigger: "aria-expanded:scale-100 aria-expanded:opacity-100 z-0",
7
+ }, children: [_jsx(PopoverTrigger, { children: _jsx("div", { className: cn("sm:hidden w-full", wrapperClass), children: children }) }), _jsx(PopoverContent, { className: "max-w-[400px] break-all whitespace-pre-line", children: content })] })] }));
8
+ }
9
+ //# sourceMappingURL=tooltip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tooltip.js","sourceRoot":"","sources":["../../src/components/tooltip.tsx"],"names":[],"mappings":";AAAA,OAAO,EACL,OAAO,IAAI,WAAW,EAEtB,OAAO,EACP,cAAc,EACd,cAAc,GACf,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAEjC,MAAM,UAAU,OAAO,CAAC,EACtB,QAAQ,EACR,OAAO,EACP,YAAY,GAC6B;IACzC,OAAO,CACL,8BACE,KAAC,WAAW,IACV,UAAU,EAAE,EAAE,OAAO,EAAE,6CAA6C,EAAE,EACtE,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,CAAC,EACR,SAAS,EAAC,KAAK,YAEf,cAAK,SAAS,EAAE,EAAE,CAAC,iBAAiB,EAAE,YAAY,CAAC,YAAG,QAAQ,GAAO,GACzD,EACd,MAAC,OAAO,IACN,SAAS,EAAC,KAAK,EACf,UAAU,EAAE;oBACV,OAAO,EAAE,uDAAuD;iBACjE,aAED,KAAC,cAAc,cACb,cAAK,SAAS,EAAE,EAAE,CAAC,kBAAkB,EAAE,YAAY,CAAC,YAAG,QAAQ,GAAO,GACvD,EACjB,KAAC,cAAc,IAAC,SAAS,EAAC,6CAA6C,YACpE,OAAO,GACO,IACT,IACT,CACJ,CAAC;AACJ,CAAC"}
@@ -0,0 +1,11 @@
1
+ type ConfirmOptions = {
2
+ title: string;
3
+ message: string;
4
+ portalContainer?: React.RefObject<HTMLElement>;
5
+ };
6
+ export declare const ConfirmProvider: ({ children, }: {
7
+ children: React.ReactNode;
8
+ }) => import("react/jsx-runtime").JSX.Element;
9
+ export declare const useConfirm: () => (e: ConfirmOptions) => Promise<any>;
10
+ export {};
11
+ //# sourceMappingURL=use-confirm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-confirm.d.ts","sourceRoot":"","sources":["../../src/hooks/use-confirm.tsx"],"names":[],"mappings":"AAWA,KAAK,cAAc,GAAG;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;CAChD,CAAC;AAMF,eAAO,MAAM,eAAe,GAAI,eAE7B;IACD,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,4CAqDA,CAAC;AAEF,eAAO,MAAM,UAAU,YA/DkB,cAAc,KAAK,OAAO,CAAC,GAAG,CA+Db,CAAC"}
@@ -0,0 +1,35 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Button, Modal, ModalBody, ModalContent, ModalFooter, ModalHeader, useDisclosure, } from "@heroui/react";
3
+ import { createContext, useContext, useState } from "react";
4
+ const ConfirmContext = createContext(() => Promise.resolve());
5
+ export const ConfirmProvider = ({ children, }) => {
6
+ const [message, setMessage] = useState("");
7
+ const [title, setTitle] = useState("");
8
+ const [portal, setPortal] = useState();
9
+ const [resolveCallback, setResolveCallback] = useState(() => { });
10
+ const [rejectCallback, setRejectCallback] = useState(() => { });
11
+ const { isOpen, onOpen, onOpenChange, onClose } = useDisclosure();
12
+ const openConfirm = ({ title, message, portalContainer }) => {
13
+ setMessage(message);
14
+ setTitle(title);
15
+ setPortal(portalContainer?.current || document.body);
16
+ onOpen();
17
+ return new Promise((resolve, reject) => {
18
+ setResolveCallback(() => resolve);
19
+ setRejectCallback(() => reject);
20
+ });
21
+ };
22
+ const handleConfirm = () => {
23
+ onClose();
24
+ if (resolveCallback)
25
+ resolveCallback(true);
26
+ };
27
+ const handleCancel = () => {
28
+ onClose();
29
+ if (rejectCallback)
30
+ rejectCallback(false);
31
+ };
32
+ return (_jsxs(ConfirmContext.Provider, { value: openConfirm, children: [children, _jsx(Modal, { isOpen: isOpen, placement: "center", onOpenChange: onOpenChange, portalContainer: portal, children: _jsxs(ModalContent, { children: [_jsx(ModalHeader, { children: title }), _jsx(ModalBody, { children: message }), _jsxs(ModalFooter, { children: [_jsx(Button, { variant: "light", onPress: handleCancel, children: "\u53D6\u6D88" }), _jsx(Button, { onPress: handleConfirm, color: "primary", children: "\u786E\u8BA4" })] })] }) })] }));
33
+ };
34
+ export const useConfirm = () => useContext(ConfirmContext);
35
+ //# sourceMappingURL=use-confirm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-confirm.js","sourceRoot":"","sources":["../../src/hooks/use-confirm.tsx"],"names":[],"mappings":";AAAA,OAAO,EACL,MAAM,EACN,KAAK,EACL,SAAS,EACT,YAAY,EACZ,WAAW,EACX,WAAW,EACX,aAAa,GACd,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAQ5D,MAAM,cAAc,GAAG,aAAa,CAAsC,GAAG,EAAE,CAC7E,OAAO,CAAC,OAAO,EAAE,CAClB,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,EAC9B,QAAQ,GAGT,EAAE,EAAE;IACH,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC3C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACvC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,EAA2B,CAAC;IAChE,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAAW,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAC3E,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAW,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACzE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,GAAG,aAAa,EAAE,CAAC;IAElE,MAAM,WAAW,GAAG,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,eAAe,EAAkB,EAAE,EAAE;QAC1E,UAAU,CAAC,OAAO,CAAC,CAAC;QACpB,QAAQ,CAAC,KAAK,CAAC,CAAC;QAChB,SAAS,CAAC,eAAe,EAAE,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC;QACrD,MAAM,EAAE,CAAC;QACT,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,kBAAkB,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC;YAClC,iBAAiB,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG,GAAG,EAAE;QACzB,OAAO,EAAE,CAAC;QACV,IAAI,eAAe;YAAE,eAAe,CAAC,IAAI,CAAC,CAAC;IAC7C,CAAC,CAAC;IAEF,MAAM,YAAY,GAAG,GAAG,EAAE;QACxB,OAAO,EAAE,CAAC;QACV,IAAI,cAAc;YAAE,cAAc,CAAC,KAAK,CAAC,CAAC;IAC5C,CAAC,CAAC;IAEF,OAAO,CACL,MAAC,cAAc,CAAC,QAAQ,IAAC,KAAK,EAAE,WAAW,aACxC,QAAQ,EACT,KAAC,KAAK,IACJ,MAAM,EAAE,MAAM,EACd,SAAS,EAAC,QAAQ,EAClB,YAAY,EAAE,YAAY,EAC1B,eAAe,EAAE,MAAM,YAEvB,MAAC,YAAY,eACX,KAAC,WAAW,cAAE,KAAK,GAAe,EAClC,KAAC,SAAS,cAAE,OAAO,GAAa,EAChC,MAAC,WAAW,eACV,KAAC,MAAM,IAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAE,YAAY,6BAEpC,EACT,KAAC,MAAM,IAAC,OAAO,EAAE,aAAa,EAAE,KAAK,EAAC,SAAS,6BAEtC,IACG,IACD,GACT,IACgB,CAC3B,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC"}
@@ -0,0 +1,9 @@
1
+ interface IUsePageStore {
2
+ row?: any;
3
+ setRow: (row?: any) => void;
4
+ selectedRowKeys: React.Key[];
5
+ setSelectedRowKeys: (selectedRowKeys: React.Key[]) => void;
6
+ }
7
+ export declare const usePageStore: import("zustand").UseBoundStore<import("zustand").StoreApi<IUsePageStore>>;
8
+ export {};
9
+ //# sourceMappingURL=use-page-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-page-store.d.ts","sourceRoot":"","sources":["../../src/hooks/use-page-store.ts"],"names":[],"mappings":"AAEA,UAAU,aAAa;IACrB,GAAG,CAAC,EAAE,GAAG,CAAC;IACV,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;IAC5B,eAAe,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC;IAC7B,kBAAkB,EAAE,CAAC,eAAe,EAAE,KAAK,CAAC,GAAG,EAAE,KAAK,IAAI,CAAC;CAC5D;AAED,eAAO,MAAM,YAAY,4EAKtB,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { create } from "zustand";
2
+ export const usePageStore = create((set) => ({
3
+ row: undefined,
4
+ setRow: (row) => set({ row }),
5
+ selectedRowKeys: [],
6
+ setSelectedRowKeys: (selectedRowKeys) => set({ selectedRowKeys }),
7
+ }));
8
+ //# sourceMappingURL=use-page-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-page-store.js","sourceRoot":"","sources":["../../src/hooks/use-page-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AASjC,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAgB,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAC1D,GAAG,EAAE,SAAS;IACd,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC;IAC7B,eAAe,EAAE,EAAE;IACnB,kBAAkB,EAAE,CAAC,eAAe,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,eAAe,EAAE,CAAC;CAClE,CAAC,CAAC,CAAC"}
@@ -0,0 +1,9 @@
1
+ export type RowKeyGetter<T> = keyof T | ((record: T) => React.Key);
2
+ export declare function useTableSelection<T extends Record<string, unknown>>(rows: T[] | undefined, rowKey?: RowKeyGetter<T>): {
3
+ selectedRowKeys: import("react").Key[];
4
+ setSelectedRowKeys: import("react").Dispatch<import("react").SetStateAction<import("react").Key[]>>;
5
+ selectedRows: T[];
6
+ selectedRow: T;
7
+ clearSelection: () => void;
8
+ };
9
+ //# sourceMappingURL=use-table-selection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-table-selection.d.ts","sourceRoot":"","sources":["../../src/hooks/use-table-selection.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,CAAA;AAWlE,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjE,IAAI,EAAE,CAAC,EAAE,GAAG,SAAS,EACrB,MAAM,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC;;;;;;EAiBzB"}
@@ -0,0 +1,25 @@
1
+ import { useMemo, useState } from 'react';
2
+ function getRowKey(record, rowKey) {
3
+ if (typeof rowKey === 'function')
4
+ return rowKey(record);
5
+ if (typeof rowKey === 'string')
6
+ return record[rowKey];
7
+ return (record.key ?? record.id) ?? '';
8
+ }
9
+ export function useTableSelection(rows, rowKey) {
10
+ const [selectedRowKeys, setSelectedRowKeys] = useState([]);
11
+ const selectedRows = useMemo(() => {
12
+ if (!rows?.length || !selectedRowKeys.length)
13
+ return [];
14
+ const keySet = new Set(selectedRowKeys);
15
+ return rows.filter(row => keySet.has(getRowKey(row, rowKey)));
16
+ }, [rowKey, rows, selectedRowKeys]);
17
+ return {
18
+ selectedRowKeys,
19
+ setSelectedRowKeys,
20
+ selectedRows,
21
+ selectedRow: selectedRows[0],
22
+ clearSelection: () => setSelectedRowKeys([]),
23
+ };
24
+ }
25
+ //# sourceMappingURL=use-table-selection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-table-selection.js","sourceRoot":"","sources":["../../src/hooks/use-table-selection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAIzC,SAAS,SAAS,CAChB,MAAS,EACT,MAAwB;IAExB,IAAI,OAAO,MAAM,KAAK,UAAU;QAAE,OAAO,MAAM,CAAC,MAAM,CAAC,CAAA;IACvD,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC,MAAM,CAAc,CAAA;IAClE,OAAQ,CAAC,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,EAAE,CAAe,IAAI,EAAE,CAAA;AACvD,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,IAAqB,EACrB,MAAwB;IAExB,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAAc,EAAE,CAAC,CAAA;IAEvE,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,EAAE;QAChC,IAAI,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM;YAAE,OAAO,EAAE,CAAA;QACvD,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,eAAe,CAAC,CAAA;QACvC,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAA;IAC/D,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC,CAAA;IAEnC,OAAO;QACL,eAAe;QACf,kBAAkB;QAClB,YAAY;QACZ,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC;QAC5B,cAAc,EAAE,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,CAAC;KAC7C,CAAA;AACH,CAAC"}
@@ -0,0 +1,11 @@
1
+ export * from "./components/filter";
2
+ export * from "./components/input";
3
+ export * from "./components/loading";
4
+ export * from "./components/nprogress";
5
+ export * from "./components/pagination";
6
+ export * from "./components/sheet";
7
+ export * from "./components/table";
8
+ export * from "./components/tooltip";
9
+ export * from "./utils/cn";
10
+ export * from "./types";
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,11 @@
1
+ export * from "./components/filter";
2
+ export * from "./components/input";
3
+ export * from "./components/loading";
4
+ export * from "./components/nprogress";
5
+ export * from "./components/pagination";
6
+ export * from "./components/sheet";
7
+ export * from "./components/table";
8
+ export * from "./components/tooltip";
9
+ export * from "./utils/cn";
10
+ export * from "./types";
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC"}
@@ -0,0 +1,6 @@
1
+ export interface IPage<T> {
2
+ items: T[];
3
+ total: number;
4
+ additional: Record<string, any>;
5
+ }
6
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,KAAK,CAAC,CAAC;IACtB,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CACjC"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ import { type ClassValue } from "clsx";
2
+ export declare function cn(...inputs: ClassValue[]): string;
3
+ //# sourceMappingURL=cn.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cn.d.ts","sourceRoot":"","sources":["../../src/utils/cn.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAQ,MAAM,MAAM,CAAC;AAG7C,wBAAgB,EAAE,CAAC,GAAG,MAAM,EAAE,UAAU,EAAE,UAEzC"}
@@ -0,0 +1,6 @@
1
+ import { clsx } from "clsx";
2
+ import { twMerge } from "tailwind-merge";
3
+ export function cn(...inputs) {
4
+ return twMerge(clsx(inputs));
5
+ }
6
+ //# sourceMappingURL=cn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cn.js","sourceRoot":"","sources":["../../src/utils/cn.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,IAAI,EAAE,MAAM,MAAM,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAEzC,MAAM,UAAU,EAAE,CAAC,GAAG,MAAoB;IACxC,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AAC/B,CAAC"}
package/package.json CHANGED
@@ -1,52 +1,47 @@
1
1
  {
2
2
  "name": "@fakeoai/ui",
3
- "version": "0.0.1",
4
- "description": "A modern React component library",
3
+ "version": "0.0.3",
4
+ "description": "Reusable UI components and common table logic extracted from tokens2.",
5
+ "type": "module",
5
6
  "main": "./dist/index.js",
6
- "module": "./dist/index.mjs",
7
+ "module": "./dist/index.js",
7
8
  "types": "./dist/index.d.ts",
8
- "exports": {
9
- ".": {
10
- "types": "./dist/index.d.ts",
11
- "import": "./dist/index.mjs",
12
- "require": "./dist/index.js"
13
- },
14
- "./style": "./dist/src/style.css"
15
- },
16
9
  "files": [
17
- "dist"
10
+ "dist",
11
+ "README.md"
18
12
  ],
13
+ "sideEffects": false,
19
14
  "scripts": {
20
- "format": "prettier --write .",
21
- "build": "tsup",
22
- "dev": "tsup --watch",
23
- "prepublishOnly": "npm run build"
15
+ "build": "tsc -p tsconfig.json",
16
+ "format": "prettier --write --cache .",
17
+ "prepublishOnly": "pnpm run build"
24
18
  },
25
- "keywords": [
26
- "react",
27
- "components",
28
- "ui",
29
- "typescript"
30
- ],
31
- "author": "Your Name",
32
- "license": "MIT",
33
19
  "peerDependencies": {
34
- "react": ">=16.8.0",
35
- "react-dom": ">=16.8.0"
20
+ "@heroui/react": "^2.7.8",
21
+ "@internationalized/date": "^3.8.0",
22
+ "@radix-ui/react-dialog": "^1.1.2",
23
+ "@tanstack/react-query": "^5.90.2",
24
+ "antd": "^5.22.7",
25
+ "class-variance-authority": "^0.7.0",
26
+ "lucide-react": "^0.468.0",
27
+ "nprogress": "^0.2.0",
28
+ "react": "^18.3.1",
29
+ "react-dom": "^18.3.1",
30
+ "zustand": "^4.5.5"
36
31
  },
37
32
  "dependencies": {
38
- "@heroui/react": "^2.8.4",
39
33
  "clsx": "^2.1.1",
40
- "nprogress": "^0.2.0",
41
- "tailwind-merge": "^3.3.1",
42
- "tsup": "^8.5.0",
43
- "tsx": "^4.20.5",
44
- "typescript": "^5.9.2"
34
+ "tailwind-merge": "^2.4.0"
45
35
  },
46
36
  "devDependencies": {
37
+ "@types/node": "^20.14.12",
47
38
  "@types/nprogress": "^0.2.3",
48
- "@types/react": "^19.1.13",
49
- "@types/react-dom": "^19.1.9",
50
- "prettier": "^3.6.2"
39
+ "@types/react": "^18.3.3",
40
+ "@types/react-dom": "^18.3.0",
41
+ "prettier": "^3.8.1",
42
+ "typescript": "^5.5.4"
43
+ },
44
+ "publishConfig": {
45
+ "access": "public"
51
46
  }
52
- }
47
+ }
package/dist/index.d.mts DELETED
@@ -1,14 +0,0 @@
1
- import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import { SpinnerProps, InputProps } from '@heroui/react';
3
- import React from 'react';
4
- import { ClassValue } from 'clsx';
5
-
6
- declare function Loading({ className, ...p }: SpinnerProps): react_jsx_runtime.JSX.Element;
7
-
8
- declare const Input: React.ForwardRefExoticComponent<Omit<InputProps, "ref"> & React.RefAttributes<HTMLInputElement>>;
9
-
10
- declare function Progress(): null;
11
-
12
- declare function cn(...inputs: ClassValue[]): string;
13
-
14
- export { Input, Loading, Progress, cn };
package/dist/index.mjs DELETED
@@ -1,93 +0,0 @@
1
- // src/components/loading.tsx
2
- import { Spinner } from "@heroui/react";
3
-
4
- // src/utils/clsx.ts
5
- import { clsx } from "clsx";
6
- import { twMerge } from "tailwind-merge";
7
- function cn(...inputs) {
8
- return twMerge(clsx(inputs));
9
- }
10
-
11
- // src/components/loading.tsx
12
- import { jsx } from "react/jsx-runtime";
13
- function Loading({ className, ...p }) {
14
- return /* @__PURE__ */ jsx(
15
- Spinner,
16
- {
17
- color: "default",
18
- className: cn("absolute inset-0", className),
19
- label: "\u52A0\u8F7D\u4E2D...",
20
- classNames: {
21
- circle2: "border-b-foreground",
22
- circle1: "border-b-foreground",
23
- label: "text-sm mt-2"
24
- },
25
- ...p
26
- }
27
- );
28
- }
29
-
30
- // src/components/input.tsx
31
- import { Input as NextInput } from "@heroui/react";
32
- import React from "react";
33
- import { jsx as jsx2 } from "react/jsx-runtime";
34
- var Input = React.forwardRef(function Input2({ classNames, ...props }, ref) {
35
- return /* @__PURE__ */ jsx2(
36
- NextInput,
37
- {
38
- ref,
39
- ...props,
40
- classNames: {
41
- ...classNames ?? {},
42
- label: cn(
43
- "group-data-[filled-within=true]:!-translate-y-1/2 group-data-[filled-within=true]:top-0 bg-transparent group-data-[filled-within=true]:bg-white group-data-[filled-within=true]:dark:bg-black transition-[transform,color,left,opacity,background] px-1",
44
- classNames?.label
45
- ),
46
- input: cn("h-full", classNames?.input)
47
- }
48
- }
49
- );
50
- });
51
-
52
- // src/components/nprogress.tsx
53
- import NProgress from "nprogress";
54
- import { useEffect } from "react";
55
- NProgress.configure({ showSpinner: false });
56
- function Progress() {
57
- useEffect(() => {
58
- let lastHref = window.location.href;
59
- const handleRouteChange = () => {
60
- NProgress.start();
61
- const timer = setTimeout(() => NProgress.done(), 100);
62
- return () => {
63
- clearTimeout(timer);
64
- NProgress.done();
65
- };
66
- };
67
- const observer = new MutationObserver(() => {
68
- const currentHref = window.location.href;
69
- if (currentHref !== lastHref) {
70
- lastHref = currentHref;
71
- handleRouteChange();
72
- }
73
- });
74
- observer.observe(document, {
75
- subtree: true,
76
- childList: true
77
- });
78
- window.addEventListener("popstate", handleRouteChange);
79
- handleRouteChange();
80
- return () => {
81
- observer.disconnect();
82
- window.removeEventListener("popstate", handleRouteChange);
83
- };
84
- }, []);
85
- return null;
86
- }
87
- export {
88
- Input,
89
- Loading,
90
- Progress,
91
- cn
92
- };
93
- //# sourceMappingURL=index.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/loading.tsx","../src/utils/clsx.ts","../src/components/input.tsx","../src/components/nprogress.tsx"],"sourcesContent":["import { Spinner, SpinnerProps } from \"@heroui/react\";\nimport { cn } from \"../utils/clsx\";\n\nexport function Loading({ className, ...p }: SpinnerProps) {\n return (\n <Spinner\n color=\"default\"\n className={cn(\"absolute inset-0\", className)}\n label=\"加载中...\"\n classNames={{\n circle2: \"border-b-foreground\",\n circle1: \"border-b-foreground\",\n label: \"text-sm mt-2\"\n }}\n {...p}\n />\n );\n}\n","import { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import { Input as NextInput, InputProps } from \"@heroui/react\";\nimport React from \"react\";\nimport { cn } from \"../utils/clsx\";\n\nexport const Input = React.forwardRef<HTMLInputElement, InputProps>(function Input(\n { classNames, ...props },\n ref\n) {\n return (\n <NextInput\n ref={ref}\n {...(props as any)}\n classNames={{\n ...(classNames ?? {}),\n label: cn(\n \"group-data-[filled-within=true]:!-translate-y-1/2 group-data-[filled-within=true]:top-0 bg-transparent group-data-[filled-within=true]:bg-white group-data-[filled-within=true]:dark:bg-black transition-[transform,color,left,opacity,background] px-1\",\n classNames?.label\n ),\n input: cn(\"h-full\", classNames?.input)\n }}\n />\n );\n});\n","import NProgress from \"nprogress\";\nimport { useEffect } from \"react\";\n\nNProgress.configure({ showSpinner: false });\n\nexport function Progress() {\n useEffect(() => {\n let lastHref = window.location.href;\n\n const handleRouteChange = () => {\n NProgress.start();\n const timer = setTimeout(() => NProgress.done(), 100);\n return () => {\n clearTimeout(timer);\n NProgress.done();\n };\n };\n\n const observer = new MutationObserver(() => {\n const currentHref = window.location.href;\n if (currentHref !== lastHref) {\n lastHref = currentHref;\n handleRouteChange();\n }\n });\n\n observer.observe(document, {\n subtree: true,\n childList: true\n });\n\n window.addEventListener(\"popstate\", handleRouteChange);\n\n handleRouteChange();\n\n return () => {\n observer.disconnect();\n window.removeEventListener(\"popstate\", handleRouteChange);\n };\n }, []);\n\n return null;\n}\n"],"mappings":";AAAA,SAAS,eAA6B;;;ACAtC,SAA0B,YAAY;AACtC,SAAS,eAAe;AAEjB,SAAS,MAAM,QAAsB;AAC1C,SAAO,QAAQ,KAAK,MAAM,CAAC;AAC7B;;;ADAI;AAFG,SAAS,QAAQ,EAAE,WAAW,GAAG,EAAE,GAAiB;AACzD,SACE;AAAA,IAAC;AAAA;AAAA,MACC,OAAM;AAAA,MACN,WAAW,GAAG,oBAAoB,SAAS;AAAA,MAC3C,OAAM;AAAA,MACN,YAAY;AAAA,QACV,SAAS;AAAA,QACT,SAAS;AAAA,QACT,OAAO;AAAA,MACT;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;;;AEjBA,SAAS,SAAS,iBAA6B;AAC/C,OAAO,WAAW;AAQd,gBAAAA,YAAA;AALG,IAAM,QAAQ,MAAM,WAAyC,SAASC,OAC3E,EAAE,YAAY,GAAG,MAAM,GACvB,KACA;AACA,SACE,gBAAAD;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACC,GAAI;AAAA,MACL,YAAY;AAAA,QACV,GAAI,cAAc,CAAC;AAAA,QACnB,OAAO;AAAA,UACL;AAAA,UACA,YAAY;AAAA,QACd;AAAA,QACA,OAAO,GAAG,UAAU,YAAY,KAAK;AAAA,MACvC;AAAA;AAAA,EACF;AAEJ,CAAC;;;ACtBD,OAAO,eAAe;AACtB,SAAS,iBAAiB;AAE1B,UAAU,UAAU,EAAE,aAAa,MAAM,CAAC;AAEnC,SAAS,WAAW;AACzB,YAAU,MAAM;AACd,QAAI,WAAW,OAAO,SAAS;AAE/B,UAAM,oBAAoB,MAAM;AAC9B,gBAAU,MAAM;AAChB,YAAM,QAAQ,WAAW,MAAM,UAAU,KAAK,GAAG,GAAG;AACpD,aAAO,MAAM;AACX,qBAAa,KAAK;AAClB,kBAAU,KAAK;AAAA,MACjB;AAAA,IACF;AAEA,UAAM,WAAW,IAAI,iBAAiB,MAAM;AAC1C,YAAM,cAAc,OAAO,SAAS;AACpC,UAAI,gBAAgB,UAAU;AAC5B,mBAAW;AACX,0BAAkB;AAAA,MACpB;AAAA,IACF,CAAC;AAED,aAAS,QAAQ,UAAU;AAAA,MACzB,SAAS;AAAA,MACT,WAAW;AAAA,IACb,CAAC;AAED,WAAO,iBAAiB,YAAY,iBAAiB;AAErD,sBAAkB;AAElB,WAAO,MAAM;AACX,eAAS,WAAW;AACpB,aAAO,oBAAoB,YAAY,iBAAiB;AAAA,IAC1D;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,SAAO;AACT;","names":["jsx","Input"]}
package/dist/style.css DELETED
@@ -1 +0,0 @@
1
- @import url("nprogress/nprogress.css");
package/dist/style.d.mts DELETED
@@ -1,2 +0,0 @@
1
-
2
- export { }