dishui 0.0.89 → 0.0.97
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/.release-verified.json +6 -0
- package/dist/ai.js +22 -0
- package/dist/components/Card/Metric2.js +11 -11
- package/dist/components/Card/Metric2.js.map +1 -1
- package/dist/components/Card/index.d.ts +20 -0
- package/dist/components/Card/index.js +184 -179
- package/dist/components/Card/index.js.map +1 -1
- package/dist/components/GroupButton/index.js +4 -4
- package/dist/components/GroupButton/index.js.map +1 -1
- package/dist/components/GroupedTable/index.js +10 -10
- package/dist/components/GroupedTable/index.js.map +1 -1
- package/dist/components/NavigationList/index.js +9 -9
- package/dist/components/NavigationList/index.js.map +1 -1
- package/dist/components/Section/index.js +11 -11
- package/dist/components/Section/index.js.map +1 -1
- package/dist/components/Skeleton/index.js +1 -1
- package/dist/components/Skeleton/index.js.map +1 -1
- package/dist/components/Table/index.d.ts +23 -2
- package/dist/components/Table/index.js +153 -101
- package/dist/components/Table/index.js.map +1 -1
- package/dist/components/ai/AgentChat/index.d.ts +54 -0
- package/dist/components/ai/AgentChat/index.js +176 -0
- package/dist/components/ai/AgentChat/index.js.map +1 -0
- package/dist/components/ai/AgentScreen/index.d.ts +50 -0
- package/dist/components/ai/AgentScreen/index.js +233 -0
- package/dist/components/ai/AgentScreen/index.js.map +1 -0
- package/dist/components/ai/ApprovalCard/index.d.ts +26 -0
- package/dist/components/ai/ApprovalCard/index.js +89 -0
- package/dist/components/ai/ApprovalCard/index.js.map +1 -0
- package/dist/components/ai/CodeView/index.d.ts +30 -0
- package/dist/components/ai/CodeView/index.js +149 -0
- package/dist/components/ai/CodeView/index.js.map +1 -0
- package/dist/components/ai/CommandSearch/index.d.ts +39 -0
- package/dist/components/ai/CommandSearch/index.js +217 -0
- package/dist/components/ai/CommandSearch/index.js.map +1 -0
- package/dist/components/ai/ContextCards/index.d.ts +42 -0
- package/dist/components/ai/ContextCards/index.js +106 -0
- package/dist/components/ai/ContextCards/index.js.map +1 -0
- package/dist/components/ai/DiffTable/index.d.ts +70 -0
- package/dist/components/ai/DiffTable/index.js +235 -0
- package/dist/components/ai/DiffTable/index.js.map +1 -0
- package/dist/components/ai/FilterTable/index.d.ts +35 -0
- package/dist/components/ai/FilterTable/index.js +86 -0
- package/dist/components/ai/FilterTable/index.js.map +1 -0
- package/dist/components/ai/FineTuneCard/index.d.ts +24 -0
- package/dist/components/ai/FineTuneCard/index.js +75 -0
- package/dist/components/ai/FineTuneCard/index.js.map +1 -0
- package/dist/components/ai/InsightCards/index.d.ts +23 -0
- package/dist/components/ai/InsightCards/index.js +64 -0
- package/dist/components/ai/InsightCards/index.js.map +1 -0
- package/dist/components/ai/LoadingState/index.d.ts +22 -0
- package/dist/components/ai/LoadingState/index.js +80 -0
- package/dist/components/ai/LoadingState/index.js.map +1 -0
- package/dist/components/ai/PromptBar/index.d.ts +26 -0
- package/dist/components/ai/PromptBar/index.js +117 -0
- package/dist/components/ai/PromptBar/index.js.map +1 -0
- package/dist/components/ai/RecommendationCard/index.d.ts +44 -0
- package/dist/components/ai/RecommendationCard/index.js +142 -0
- package/dist/components/ai/RecommendationCard/index.js.map +1 -0
- package/dist/components/ai/RecordsTable/index.d.ts +65 -0
- package/dist/components/ai/RecordsTable/index.js +334 -0
- package/dist/components/ai/RecordsTable/index.js.map +1 -0
- package/dist/components/ai/SelectionActions/index.d.ts +19 -0
- package/dist/components/ai/SelectionActions/index.js +40 -0
- package/dist/components/ai/SelectionActions/index.js.map +1 -0
- package/dist/components/ai/StateFlow/index.d.ts +24 -0
- package/dist/components/ai/StateFlow/index.js +50 -0
- package/dist/components/ai/StateFlow/index.js.map +1 -0
- package/dist/components/ai/StreamingText/index.d.ts +44 -0
- package/dist/components/ai/StreamingText/index.js +211 -0
- package/dist/components/ai/StreamingText/index.js.map +1 -0
- package/dist/components/ai/TaskRows/index.d.ts +53 -0
- package/dist/components/ai/TaskRows/index.js +186 -0
- package/dist/components/ai/TaskRows/index.js.map +1 -0
- package/dist/components/ai/Thinking/index.d.ts +47 -0
- package/dist/components/ai/Thinking/index.js +197 -0
- package/dist/components/ai/Thinking/index.js.map +1 -0
- package/dist/components/ai/ToolChips/index.d.ts +21 -0
- package/dist/components/ai/ToolChips/index.js +63 -0
- package/dist/components/ai/ToolChips/index.js.map +1 -0
- package/dist/components/ai/index.d.ts +50 -0
- package/dist/components/ai/shared.d.ts +13 -0
- package/dist/components/ai/shared.js +25 -0
- package/dist/components/ai/shared.js.map +1 -0
- package/dist/components/pro/DataTable/DataTable.js +70 -51
- package/dist/components/pro/DataTable/DataTable.js.map +1 -1
- package/dist/components/pro/DataTable/components/TableBody.d.ts +3 -1
- package/dist/components/pro/DataTable/components/TableBody.js +41 -39
- package/dist/components/pro/DataTable/components/TableBody.js.map +1 -1
- package/dist/components/pro/DataTable/components/TableToolbar.d.ts +2 -1
- package/dist/components/pro/DataTable/components/TableToolbar.js +25 -19
- package/dist/components/pro/DataTable/components/TableToolbar.js.map +1 -1
- package/dist/components/pro/DataTable/index.d.ts +1 -1
- package/dist/components/pro/DataTable/rowDetailExtension.js +1 -1
- package/dist/components/pro/DataTable/rowDetailExtension.js.map +1 -1
- package/dist/components/pro/DataTable/types.d.ts +19 -0
- package/dist/data-table.js.map +1 -1
- package/dist/dishui.css +1 -1
- package/dist/index.d.ts +5 -4
- package/dist/index.js +128 -107
- package/dist/layouts/Sidebar.d.ts +16 -0
- package/dist/layouts/Sidebar.js +85 -52
- package/dist/layouts/Sidebar.js.map +1 -1
- package/dist/lite.d.ts +2 -0
- package/dist/lite.js +22 -21
- package/package.json +10 -3
|
@@ -1,11 +1,26 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
+
export type TableCardOptions = {
|
|
3
|
+
/** Applied to each Table.Body grid. */
|
|
4
|
+
gridClassName?: string;
|
|
5
|
+
gridStyle?: React.CSSProperties;
|
|
6
|
+
/** Applied to each body row card. */
|
|
7
|
+
className?: string;
|
|
8
|
+
style?: React.CSSProperties;
|
|
9
|
+
fieldClassName?: string;
|
|
10
|
+
fieldStyle?: React.CSSProperties;
|
|
11
|
+
labelClassName?: string;
|
|
12
|
+
labelStyle?: React.CSSProperties;
|
|
13
|
+
};
|
|
2
14
|
export type TableProps = {
|
|
3
15
|
children: React.ReactNode;
|
|
16
|
+
card?: boolean;
|
|
17
|
+
cardOptions?: TableCardOptions;
|
|
4
18
|
className?: string;
|
|
5
19
|
onClick?: (e: React.MouseEvent) => void;
|
|
6
20
|
onMouseEnter?: (e: React.MouseEvent) => void;
|
|
7
21
|
onMouseLeave?: (e: React.MouseEvent) => void;
|
|
8
22
|
} & React.TableHTMLAttributes<HTMLTableElement>;
|
|
23
|
+
declare const Table: ({ children, className, card, cardOptions, onClick, onMouseEnter, onMouseLeave, ...rest }: TableProps) => React.JSX.Element;
|
|
9
24
|
export type TableHeadProps = React.HTMLAttributes<HTMLTableSectionElement>;
|
|
10
25
|
export type TableBodyProps = React.HTMLAttributes<HTMLTableSectionElement>;
|
|
11
26
|
export type TableRowProps = {
|
|
@@ -19,6 +34,8 @@ export type TableRowProps = {
|
|
|
19
34
|
} & Omit<React.HTMLAttributes<HTMLTableRowElement>, 'className' | 'onClick' | 'onDoubleClick' | 'onMouseEnter' | 'onMouseLeave'>;
|
|
20
35
|
export type TableCellProps = {
|
|
21
36
|
children?: React.ReactNode;
|
|
37
|
+
/** Visible field label in card body cells only. */
|
|
38
|
+
label?: React.ReactNode;
|
|
22
39
|
className?: string;
|
|
23
40
|
onClick?: (e: React.MouseEvent) => void;
|
|
24
41
|
colSpan?: number;
|
|
@@ -42,7 +59,8 @@ export type TableHeaderCellProps = {
|
|
|
42
59
|
} & React.ThHTMLAttributes<HTMLTableCellElement>;
|
|
43
60
|
export type TableCaptionProps = React.HTMLAttributes<HTMLTableCaptionElement>;
|
|
44
61
|
export type TableFooterProps = React.HTMLAttributes<HTMLTableSectionElement>;
|
|
45
|
-
|
|
62
|
+
export type TableCardProps = Omit<TableProps, 'card'>;
|
|
63
|
+
interface TableSubcomponents {
|
|
46
64
|
Caption: React.FC<TableCaptionProps>;
|
|
47
65
|
Footer: React.FC<TableFooterProps>;
|
|
48
66
|
Head: React.FC<TableHeadProps>;
|
|
@@ -51,5 +69,8 @@ interface TableCompound extends React.FC<TableProps> {
|
|
|
51
69
|
Cell: React.FC<TableCellProps>;
|
|
52
70
|
HeaderCell: React.FC<TableHeaderCellProps>;
|
|
53
71
|
}
|
|
54
|
-
declare const
|
|
72
|
+
declare const TableCard: (props: TableCardProps) => React.JSX.Element;
|
|
73
|
+
declare const TableWithCompounds: typeof Table & TableSubcomponents & {
|
|
74
|
+
Card: typeof TableCard & TableSubcomponents;
|
|
75
|
+
};
|
|
55
76
|
export default TableWithCompounds;
|
|
@@ -1,117 +1,169 @@
|
|
|
1
1
|
import { cn as e } from "../../utils/cn.js";
|
|
2
|
-
|
|
3
|
-
import
|
|
2
|
+
/* empty css */
|
|
3
|
+
import t from "react";
|
|
4
|
+
import { jsx as n, jsxs as r } from "react/jsx-runtime";
|
|
4
5
|
//#region src/components/Table/index.tsx
|
|
5
|
-
var
|
|
6
|
-
let
|
|
7
|
-
return /* @__PURE__ */
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
6
|
+
var i = t.createContext(null), a = t.createContext(!1), o = {}, s = ({ children: t, className: r = "", card: s = !1, cardOptions: c = o, onClick: l, onMouseEnter: u, onMouseLeave: d, ...f }) => {
|
|
7
|
+
let p = e("table", s && "dishui-table-card", r);
|
|
8
|
+
return /* @__PURE__ */ n(i.Provider, {
|
|
9
|
+
value: s ? c : null,
|
|
10
|
+
children: /* @__PURE__ */ n(a.Provider, {
|
|
11
|
+
value: !1,
|
|
12
|
+
children: /* @__PURE__ */ n("table", {
|
|
13
|
+
role: s ? "table" : void 0,
|
|
14
|
+
...f,
|
|
15
|
+
className: p,
|
|
16
|
+
onClick: l,
|
|
17
|
+
onMouseEnter: u,
|
|
18
|
+
onMouseLeave: d,
|
|
19
|
+
children: t
|
|
20
|
+
})
|
|
21
|
+
})
|
|
14
22
|
});
|
|
15
|
-
},
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
23
|
+
}, c = {
|
|
24
|
+
Caption: (e) => /* @__PURE__ */ n("caption", { ...e }),
|
|
25
|
+
Footer: (e) => {
|
|
26
|
+
let r = t.useContext(i);
|
|
27
|
+
return /* @__PURE__ */ n("tfoot", {
|
|
28
|
+
role: r ? "rowgroup" : void 0,
|
|
29
|
+
...e
|
|
30
|
+
});
|
|
31
|
+
},
|
|
32
|
+
Head: ({ children: r, className: a = "", ...o }) => {
|
|
33
|
+
let s = t.useContext(i), c = e("table-header-group", a);
|
|
34
|
+
return /* @__PURE__ */ n("thead", {
|
|
35
|
+
role: s ? "rowgroup" : void 0,
|
|
36
|
+
...o,
|
|
37
|
+
className: c,
|
|
38
|
+
children: r
|
|
39
|
+
});
|
|
40
|
+
},
|
|
41
|
+
Body: ({ children: r, className: o = "", style: s, ...c }) => {
|
|
42
|
+
let l = t.useContext(i), u = e("table-row-group", l && "dishui-table-card__grid", l?.gridClassName, o);
|
|
43
|
+
return /* @__PURE__ */ n(a.Provider, {
|
|
44
|
+
value: !0,
|
|
45
|
+
children: /* @__PURE__ */ n("tbody", {
|
|
46
|
+
role: l ? "rowgroup" : void 0,
|
|
47
|
+
...c,
|
|
48
|
+
className: u,
|
|
49
|
+
style: l ? {
|
|
50
|
+
...l.gridStyle,
|
|
51
|
+
...s
|
|
52
|
+
} : s,
|
|
53
|
+
children: r
|
|
54
|
+
})
|
|
55
|
+
});
|
|
56
|
+
},
|
|
57
|
+
Row: ({ children: r, className: o = "", selected: s = !1, style: c, onClick: l, onDoubleClick: u, onMouseEnter: d, onMouseLeave: f, ...p }) => {
|
|
58
|
+
let m = t.useContext(i), h = t.useContext(a) ? m : null, g = e("table-row", s && "bg-base-200", "hover:bg-base-100", h && "dishui-table-card__row", h?.className, o);
|
|
59
|
+
return /* @__PURE__ */ n("tr", {
|
|
60
|
+
role: m ? "row" : void 0,
|
|
61
|
+
"data-card-selected": h && s ? "true" : void 0,
|
|
62
|
+
style: h ? {
|
|
63
|
+
...h.style,
|
|
64
|
+
...c
|
|
65
|
+
} : c,
|
|
66
|
+
className: g,
|
|
67
|
+
onClick: l,
|
|
68
|
+
onDoubleClick: u,
|
|
69
|
+
onMouseEnter: d,
|
|
70
|
+
onMouseLeave: f,
|
|
71
|
+
...p,
|
|
72
|
+
children: r
|
|
73
|
+
});
|
|
74
|
+
},
|
|
75
|
+
Cell: ({ children: o, label: s, className: c = "", onClick: l, colSpan: u, style: d, onDoubleClick: f, onMouseEnter: p, onMouseLeave: m, ...h }) => {
|
|
76
|
+
let g = t.useContext(i), _ = t.useContext(a) ? g : null, v = e("table-cell", _ && "dishui-table-card__field", _?.fieldClassName, c);
|
|
77
|
+
return /* @__PURE__ */ r("td", {
|
|
78
|
+
role: g ? "cell" : void 0,
|
|
79
|
+
...h,
|
|
80
|
+
className: v,
|
|
81
|
+
onClick: l,
|
|
82
|
+
colSpan: u,
|
|
83
|
+
style: _ ? {
|
|
84
|
+
..._.fieldStyle,
|
|
85
|
+
...d
|
|
86
|
+
} : d,
|
|
87
|
+
onDoubleClick: f,
|
|
88
|
+
onMouseEnter: p,
|
|
89
|
+
onMouseLeave: m,
|
|
90
|
+
children: [_ && s != null ? /* @__PURE__ */ n("div", {
|
|
91
|
+
className: e("dishui-table-card__label", _.labelClassName),
|
|
92
|
+
style: _.labelStyle,
|
|
93
|
+
children: s
|
|
94
|
+
}) : null, o]
|
|
95
|
+
});
|
|
96
|
+
},
|
|
97
|
+
HeaderCell: ({ children: o, className: s = "", style: c, onClick: l, sortable: u = !1, sortDirection: d = null, draggable: f, onDragStart: p, onDragOver: m, onDrop: h, onMouseEnter: g, onMouseLeave: _, ...v }) => {
|
|
98
|
+
let y = t.useContext(i), b = t.useContext(a), x = b ? y : null, S = e("table-cell font-medium", u && "cursor-pointer", x && "dishui-table-card__field", x?.fieldClassName, s);
|
|
99
|
+
return /* @__PURE__ */ n("th", {
|
|
100
|
+
role: y ? v.scope === "row" || v.scope === "rowgroup" || b && !v.scope ? "rowheader" : "columnheader" : void 0,
|
|
101
|
+
...v,
|
|
102
|
+
style: x ? {
|
|
103
|
+
...x.fieldStyle,
|
|
104
|
+
...c
|
|
105
|
+
} : c,
|
|
106
|
+
className: S,
|
|
107
|
+
onClick: l,
|
|
108
|
+
draggable: f,
|
|
109
|
+
onDragStart: p,
|
|
110
|
+
onDragOver: m,
|
|
111
|
+
onDrop: h,
|
|
112
|
+
onMouseEnter: g,
|
|
113
|
+
onMouseLeave: _,
|
|
114
|
+
children: u ? /* @__PURE__ */ r("div", {
|
|
115
|
+
className: "flex items-center gap-2",
|
|
116
|
+
children: [o, u && /* @__PURE__ */ n("div", {
|
|
117
|
+
className: "flex flex-col",
|
|
118
|
+
children: d === "asc" ? /* @__PURE__ */ n("svg", {
|
|
96
119
|
xmlns: "http://www.w3.org/2000/svg",
|
|
97
120
|
className: "h-4 w-4",
|
|
98
121
|
fill: "none",
|
|
99
122
|
viewBox: "0 0 24 24",
|
|
100
123
|
stroke: "currentColor",
|
|
101
|
-
children: /* @__PURE__ */
|
|
124
|
+
children: /* @__PURE__ */ n("path", {
|
|
102
125
|
strokeLinecap: "round",
|
|
103
126
|
strokeLinejoin: "round",
|
|
104
127
|
strokeWidth: "2",
|
|
105
|
-
d: "
|
|
128
|
+
d: "M5 15l7-7 7 7"
|
|
129
|
+
})
|
|
130
|
+
}) : d === "desc" ? /* @__PURE__ */ n("svg", {
|
|
131
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
132
|
+
className: "h-4 w-4",
|
|
133
|
+
fill: "none",
|
|
134
|
+
viewBox: "0 0 24 24",
|
|
135
|
+
stroke: "currentColor",
|
|
136
|
+
children: /* @__PURE__ */ n("path", {
|
|
137
|
+
strokeLinecap: "round",
|
|
138
|
+
strokeLinejoin: "round",
|
|
139
|
+
strokeWidth: "2",
|
|
140
|
+
d: "M19 9l-7 7-7-7"
|
|
141
|
+
})
|
|
142
|
+
}) : /* @__PURE__ */ n("div", {
|
|
143
|
+
className: "h-4 w-4 opacity-30",
|
|
144
|
+
children: /* @__PURE__ */ n("svg", {
|
|
145
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
146
|
+
className: "h-4 w-4",
|
|
147
|
+
fill: "none",
|
|
148
|
+
viewBox: "0 0 24 24",
|
|
149
|
+
stroke: "currentColor",
|
|
150
|
+
children: /* @__PURE__ */ n("path", {
|
|
151
|
+
strokeLinecap: "round",
|
|
152
|
+
strokeLinejoin: "round",
|
|
153
|
+
strokeWidth: "2",
|
|
154
|
+
d: "M7 16V4m0 0L3 8m4-4l4 4m6 0v12m0 0l4-4m-4 4l-4-4"
|
|
155
|
+
})
|
|
106
156
|
})
|
|
107
157
|
})
|
|
108
|
-
})
|
|
109
|
-
})
|
|
110
|
-
})
|
|
111
|
-
}
|
|
112
|
-
}, l = (
|
|
113
|
-
|
|
158
|
+
})]
|
|
159
|
+
}) : o
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
}, l = Object.assign(s, c, { Card: Object.assign((e) => /* @__PURE__ */ n(s, {
|
|
163
|
+
...e,
|
|
164
|
+
card: !0
|
|
165
|
+
}), c) });
|
|
114
166
|
//#endregion
|
|
115
|
-
export {
|
|
167
|
+
export { l as default };
|
|
116
168
|
|
|
117
169
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../../src/components/Table/index.tsx"],"sourcesContent":["import React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport type TableProps = {\n children: React.ReactNode;\n className?: string;\n onClick?: (e: React.MouseEvent) => void;\n onMouseEnter?: (e: React.MouseEvent) => void;\n onMouseLeave?: (e: React.MouseEvent) => void;\n} & React.TableHTMLAttributes<HTMLTableElement>;\n\nconst Table = ({\n children,\n className = '',\n onClick,\n onMouseEnter,\n onMouseLeave,\n ...rest\n}: TableProps) => {\n const baseClass = 'table';\n \n const tableClasses = cn(baseClass, className);\n\n return (\n <table \n {...rest}\n className={tableClasses}\n onClick={onClick}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n >\n {children}\n </table>\n );\n};\n\n// Table.Head 组件\nexport type TableHeadProps = React.HTMLAttributes<HTMLTableSectionElement>;\n\nconst TableHead = ({\n children,\n className = '',\n ...rest\n}: TableHeadProps) => {\n const baseClass = 'table-header-group';\n \n const headClasses = cn(baseClass, className);\n\n return (\n <thead {...rest} className={headClasses}>\n {children}\n </thead>\n );\n};\n\n// Table.Body 组件\nexport type TableBodyProps = React.HTMLAttributes<HTMLTableSectionElement>;\n\nconst TableBody = ({\n children,\n className = '',\n ...rest\n}: TableBodyProps) => {\n const baseClass = 'table-row-group';\n \n const bodyClasses = cn(baseClass, className);\n\n return (\n <tbody {...rest} className={bodyClasses}>\n {children}\n </tbody>\n );\n};\n\n// Table.Row 组件\nexport type TableRowProps = {\n children: React.ReactNode;\n className?: string;\n selected?: boolean;\n onClick?: (e: React.MouseEvent) => void;\n onDoubleClick?: (e: React.MouseEvent) => void;\n onMouseEnter?: (e: React.MouseEvent) => void;\n onMouseLeave?: (e: React.MouseEvent) => void;\n} & Omit<\n React.HTMLAttributes<HTMLTableRowElement>,\n 'className' | 'onClick' | 'onDoubleClick' | 'onMouseEnter' | 'onMouseLeave'\n>;\n\nconst TableRow = ({\n children,\n className = '',\n selected = false,\n onClick,\n onDoubleClick,\n onMouseEnter,\n onMouseLeave,\n ...rest\n}: TableRowProps) => {\n const baseClass = 'table-row';\n\n const rowClasses = cn(\n baseClass,\n selected && 'bg-base-200',\n 'hover:bg-base-100',\n className\n );\n\n return (\n <tr \n className={rowClasses}\n onClick={onClick}\n onDoubleClick={onDoubleClick}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n {...rest}\n >\n {children}\n </tr>\n );\n};\n\n// Table.Cell 组件\nexport type TableCellProps = {\n children?: React.ReactNode;\n className?: string;\n onClick?: (e: React.MouseEvent) => void;\n colSpan?: number;\n style?: React.CSSProperties;\n \n // 添加鼠标事件\n onDoubleClick?: (e: React.MouseEvent) => void;\n onMouseEnter?: (e: React.MouseEvent) => void;\n onMouseLeave?: (e: React.MouseEvent) => void;\n} & React.TdHTMLAttributes<HTMLTableCellElement>;\n\nconst TableCell = ({\n children,\n className = '',\n onClick,\n colSpan,\n style,\n onDoubleClick,\n onMouseEnter,\n onMouseLeave,\n ...rest\n}: TableCellProps) => {\n const baseClass = 'table-cell';\n \n const cellClasses = cn(baseClass, className);\n\n return (\n <td\n {...rest}\n className={cellClasses}\n onClick={onClick}\n colSpan={colSpan}\n style={style}\n onDoubleClick={onDoubleClick}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n >\n {children}\n </td>\n );\n};\n\n// Table.HeaderCell 组件\nexport type TableHeaderCellProps = {\n children: React.ReactNode;\n className?: string;\n onClick?: (e: React.MouseEvent) => void;\n sortable?: boolean;\n sortDirection?: 'asc' | 'desc' | null;\n \n // 拖拽相关属性\n draggable?: boolean;\n onDragStart?: (e: React.DragEvent) => void;\n onDragOver?: (e: React.DragEvent) => void;\n onDrop?: (e: React.DragEvent) => void;\n \n // 鼠标事件\n onMouseEnter?: (e: React.MouseEvent) => void;\n onMouseLeave?: (e: React.MouseEvent) => void;\n} & React.ThHTMLAttributes<HTMLTableCellElement>;\n\nconst TableHeaderCell = ({\n children,\n className = '',\n onClick,\n sortable = false,\n sortDirection = null,\n \n // 拖拽相关属性\n draggable,\n onDragStart,\n onDragOver,\n onDrop,\n \n // 鼠标事件\n onMouseEnter,\n onMouseLeave,\n ...rest\n}: TableHeaderCellProps) => {\n const baseClass = 'table-cell font-medium';\n \n const headerCellClasses = cn(\n baseClass,\n sortable && 'cursor-pointer',\n className\n );\n\n return (\n <th\n {...rest}\n className={headerCellClasses}\n onClick={onClick}\n draggable={draggable}\n onDragStart={onDragStart}\n onDragOver={onDragOver}\n onDrop={onDrop}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n >\n {sortable ? <div className=\"flex items-center gap-2\">\n {children}\n {sortable && (\n <div className=\"flex flex-col\">\n {sortDirection === 'asc' ? (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-4 w-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"M5 15l7-7 7 7\" />\n </svg>\n ) : sortDirection === 'desc' ? (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-4 w-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"M19 9l-7 7-7-7\" />\n </svg>\n ) : (\n <div className=\"h-4 w-4 opacity-30\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-4 w-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"M7 16V4m0 0L3 8m4-4l4 4m6 0v12m0 0l4-4m-4 4l-4-4\" />\n </svg>\n </div>\n )}\n </div>\n )}\n </div> : children}\n </th>\n );\n};\n\nexport type TableCaptionProps = React.HTMLAttributes<HTMLTableCaptionElement>;\nexport type TableFooterProps = React.HTMLAttributes<HTMLTableSectionElement>;\nconst TableCaption = (props: TableCaptionProps) => <caption {...props} />;\nconst TableFooter = (props: TableFooterProps) => <tfoot {...props} />;\n\n// 扩展Table组件,添加子组件\ninterface TableCompound extends React.FC<TableProps> {\n Caption: React.FC<TableCaptionProps>;\n Footer: React.FC<TableFooterProps>;\n Head: React.FC<TableHeadProps>;\n Body: React.FC<TableBodyProps>;\n Row: React.FC<TableRowProps>;\n Cell: React.FC<TableCellProps>;\n HeaderCell: React.FC<TableHeaderCellProps>;\n}\n\nconst TableWithCompounds = Table as TableCompound;\nTableWithCompounds.Caption = TableCaption;\nTableWithCompounds.Footer = TableFooter;\nTableWithCompounds.Head = TableHead;\nTableWithCompounds.Body = TableBody;\nTableWithCompounds.Row = TableRow;\nTableWithCompounds.Cell = TableCell;\nTableWithCompounds.HeaderCell = TableHeaderCell;\n\nexport default TableWithCompounds; "],"mappings":";;;;AAWA,IAAM,KAAS,EACb,aACA,eAAY,IACZ,YACA,iBACA,iBACA,GAAG,QACa;CAGhB,IAAM,IAAe,EAAG,SAAW,CAAS;CAE5C,OACE,kBAAC,SAAD;EACE,GAAI;EACJ,WAAW;EACF;EACK;EACA;EAEb;CACI,CAAA;AAEX,GAKM,KAAa,EACjB,aACA,eAAY,IACZ,GAAG,QACiB;CAGpB,IAAM,IAAc,EAAG,sBAAW,CAAS;CAE3C,OACE,kBAAC,SAAD;EAAO,GAAI;EAAM,WAAW;EACzB;CACI,CAAA;AAEX,GAKM,KAAa,EACjB,aACA,eAAY,IACZ,GAAG,QACiB;CAGpB,IAAM,IAAc,EAAG,mBAAW,CAAS;CAE3C,OACE,kBAAC,SAAD;EAAO,GAAI;EAAM,WAAW;EACzB;CACI,CAAA;AAEX,GAgBM,KAAY,EAChB,aACA,eAAY,IACZ,cAAW,IACX,YACA,kBACA,iBACA,iBACA,GAAG,QACgB;CAGnB,IAAM,IAAa,EACjB,aACA,KAAY,eACZ,qBACA,CACF;CAEA,OACE,kBAAC,MAAD;EACE,WAAW;EACF;EACM;EACD;EACA;EACd,GAAI;EAEH;CACC,CAAA;AAER,GAgBM,KAAa,EACjB,aACA,eAAY,IACZ,YACA,YACA,UACA,kBACA,iBACA,iBACA,GAAG,QACiB;CAGpB,IAAM,IAAc,EAAG,cAAW,CAAS;CAE3C,OACE,kBAAC,MAAD;EACE,GAAI;EACJ,WAAW;EACF;EACA;EACF;EACQ;EACD;EACA;EAEb;CACC,CAAA;AAER,GAqBM,KAAmB,EACvB,aACA,eAAY,IACZ,YACA,cAAW,IACX,mBAAgB,MAGhB,cACA,gBACA,eACA,WAGA,iBACA,iBACA,GAAG,QACuB;CAG1B,IAAM,IAAoB,EACxB,0BACA,KAAY,kBACZ,CACF;CAEA,OACE,kBAAC,MAAD;EACE,GAAI;EACJ,WAAW;EACF;EACE;EACE;EACD;EACJ;EACM;EACA;EAEb,UAAA,IAAW,kBAAC,OAAD;GAAK,WAAU;GAAf,UAAA,CACT,GACA,KACC,kBAAC,OAAD;IAAK,WAAU;IACZ,UAAA,MAAkB,QACjB,kBAAC,OAAD;KAAK,OAAM;KAA6B,WAAU;KAAU,MAAK;KAAO,SAAQ;KAAY,QAAO;KACjG,UAAA,kBAAC,QAAD;MAAM,eAAc;MAAQ,gBAAe;MAAQ,aAAY;MAAI,GAAE;KAAiB,CAAA;IACnF,CAAA,IACH,MAAkB,SACpB,kBAAC,OAAD;KAAK,OAAM;KAA6B,WAAU;KAAU,MAAK;KAAO,SAAQ;KAAY,QAAO;KACjG,UAAA,kBAAC,QAAD;MAAM,eAAc;MAAQ,gBAAe;MAAQ,aAAY;MAAI,GAAE;KAAkB,CAAA;IACpF,CAAA,IAEL,kBAAC,OAAD;KAAK,WAAU;KACb,UAAA,kBAAC,OAAD;MAAK,OAAM;MAA6B,WAAU;MAAU,MAAK;MAAO,SAAQ;MAAY,QAAO;MACjG,UAAA,kBAAC,QAAD;OAAM,eAAc;OAAQ,gBAAe;OAAQ,aAAY;OAAI,GAAE;MAAoD,CAAA;KACtH,CAAA;IACF,CAAA;GAEJ,CAAA,CAEJ;EAAI,CAAA,IAAA;CACP,CAAA;AAER,GAIM,KAAgB,MAA6B,kBAAC,WAAD,EAAS,GAAI,EAAQ,CAAA,GAClE,KAAe,MAA4B,kBAAC,SAAD,EAAO,GAAI,EAAQ,CAAA,GAa9D,IAAqB;AAC3B,EAAmB,UAAU,GAC7B,EAAmB,SAAS,GAC5B,EAAmB,OAAO,GAC1B,EAAmB,OAAO,GAC1B,EAAmB,MAAM,GACzB,EAAmB,OAAO,GAC1B,EAAmB,aAAa"}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../src/components/Table/index.tsx"],"sourcesContent":["import React from 'react';\nimport { cn } from '../../utils/cn';\nimport './Table.css';\n\nexport type TableCardOptions = {\n /** Applied to each Table.Body grid. */\n gridClassName?: string;\n gridStyle?: React.CSSProperties;\n /** Applied to each body row card. */\n className?: string;\n style?: React.CSSProperties;\n fieldClassName?: string;\n fieldStyle?: React.CSSProperties;\n labelClassName?: string;\n labelStyle?: React.CSSProperties;\n};\n\nconst CardContext = React.createContext<TableCardOptions | null>(null);\nconst BodyContext = React.createContext(false);\nconst defaultCardOptions: TableCardOptions = {};\n\nexport type TableProps = {\n children: React.ReactNode;\n card?: boolean;\n cardOptions?: TableCardOptions;\n className?: string;\n onClick?: (e: React.MouseEvent) => void;\n onMouseEnter?: (e: React.MouseEvent) => void;\n onMouseLeave?: (e: React.MouseEvent) => void;\n} & React.TableHTMLAttributes<HTMLTableElement>;\n\nconst Table = ({\n children,\n className = '',\n card = false,\n cardOptions = defaultCardOptions,\n onClick,\n onMouseEnter,\n onMouseLeave,\n ...rest\n}: TableProps) => {\n const baseClass = 'table';\n \n const tableClasses = cn(baseClass, card && 'dishui-table-card', className);\n\n return (\n <CardContext.Provider value={card ? cardOptions : null}>\n <BodyContext.Provider value={false}>\n <table\n role={card ? 'table' : undefined}\n {...rest}\n className={tableClasses}\n onClick={onClick}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n >\n {children}\n </table>\n </BodyContext.Provider>\n </CardContext.Provider>\n );\n};\n\n// Table.Head 组件\nexport type TableHeadProps = React.HTMLAttributes<HTMLTableSectionElement>;\n\nconst TableHead = ({\n children,\n className = '',\n ...rest\n}: TableHeadProps) => {\n const options = React.useContext(CardContext);\n const baseClass = 'table-header-group';\n \n const headClasses = cn(baseClass, className);\n\n return (\n <thead role={options ? 'rowgroup' : undefined} {...rest} className={headClasses}>\n {children}\n </thead>\n );\n};\n\n// Table.Body 组件\nexport type TableBodyProps = React.HTMLAttributes<HTMLTableSectionElement>;\n\nconst TableBody = ({\n children,\n className = '',\n style,\n ...rest\n}: TableBodyProps) => {\n const options = React.useContext(CardContext);\n const bodyClasses = cn('table-row-group', options && 'dishui-table-card__grid', options?.gridClassName, className);\n\n return (\n <BodyContext.Provider value={true}>\n <tbody\n role={options ? 'rowgroup' : undefined}\n {...rest}\n className={bodyClasses}\n style={options ? { ...options.gridStyle, ...style } : style}\n >\n {children}\n </tbody>\n </BodyContext.Provider>\n );\n};\n\n// Table.Row 组件\nexport type TableRowProps = {\n children: React.ReactNode;\n className?: string;\n selected?: boolean;\n onClick?: (e: React.MouseEvent) => void;\n onDoubleClick?: (e: React.MouseEvent) => void;\n onMouseEnter?: (e: React.MouseEvent) => void;\n onMouseLeave?: (e: React.MouseEvent) => void;\n} & Omit<\n React.HTMLAttributes<HTMLTableRowElement>,\n 'className' | 'onClick' | 'onDoubleClick' | 'onMouseEnter' | 'onMouseLeave'\n>;\n\nconst TableRow = ({\n children,\n className = '',\n selected = false,\n style,\n onClick,\n onDoubleClick,\n onMouseEnter,\n onMouseLeave,\n ...rest\n}: TableRowProps) => {\n const cardOptions = React.useContext(CardContext);\n const inBody = React.useContext(BodyContext);\n const options = inBody ? cardOptions : null;\n const baseClass = 'table-row';\n\n const rowClasses = cn(\n baseClass,\n selected && 'bg-base-200',\n 'hover:bg-base-100',\n options && 'dishui-table-card__row',\n options?.className,\n className\n );\n\n return (\n <tr\n role={cardOptions ? 'row' : undefined}\n data-card-selected={options && selected ? 'true' : undefined}\n style={options ? { ...options.style, ...style } : style}\n className={rowClasses}\n onClick={onClick}\n onDoubleClick={onDoubleClick}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n {...rest}\n >\n {children}\n </tr>\n );\n};\n\n// Table.Cell 组件\nexport type TableCellProps = {\n children?: React.ReactNode;\n /** Visible field label in card body cells only. */\n label?: React.ReactNode;\n className?: string;\n onClick?: (e: React.MouseEvent) => void;\n colSpan?: number;\n style?: React.CSSProperties;\n \n // 添加鼠标事件\n onDoubleClick?: (e: React.MouseEvent) => void;\n onMouseEnter?: (e: React.MouseEvent) => void;\n onMouseLeave?: (e: React.MouseEvent) => void;\n} & React.TdHTMLAttributes<HTMLTableCellElement>;\n\nconst TableCell = ({\n children,\n label,\n className = '',\n onClick,\n colSpan,\n style,\n onDoubleClick,\n onMouseEnter,\n onMouseLeave,\n ...rest\n}: TableCellProps) => {\n const cardOptions = React.useContext(CardContext);\n const inBody = React.useContext(BodyContext);\n const options = inBody ? cardOptions : null;\n const cellClasses = cn('table-cell', options && 'dishui-table-card__field', options?.fieldClassName, className);\n\n return (\n <td\n role={cardOptions ? 'cell' : undefined}\n {...rest}\n className={cellClasses}\n onClick={onClick}\n colSpan={colSpan}\n style={options ? { ...options.fieldStyle, ...style } : style}\n onDoubleClick={onDoubleClick}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n >\n {/* Keep children in a fixed slot so mode/label changes preserve local state. */}\n {options && label !== null && label !== undefined ? <div className={cn('dishui-table-card__label', options.labelClassName)} style={options.labelStyle}>{label}</div> : null}\n {children}\n </td>\n );\n};\n\n// Table.HeaderCell 组件\nexport type TableHeaderCellProps = {\n children: React.ReactNode;\n className?: string;\n onClick?: (e: React.MouseEvent) => void;\n sortable?: boolean;\n sortDirection?: 'asc' | 'desc' | null;\n \n // 拖拽相关属性\n draggable?: boolean;\n onDragStart?: (e: React.DragEvent) => void;\n onDragOver?: (e: React.DragEvent) => void;\n onDrop?: (e: React.DragEvent) => void;\n \n // 鼠标事件\n onMouseEnter?: (e: React.MouseEvent) => void;\n onMouseLeave?: (e: React.MouseEvent) => void;\n} & React.ThHTMLAttributes<HTMLTableCellElement>;\n\nconst TableHeaderCell = ({\n children,\n className = '',\n style,\n onClick,\n sortable = false,\n sortDirection = null,\n \n // 拖拽相关属性\n draggable,\n onDragStart,\n onDragOver,\n onDrop,\n \n // 鼠标事件\n onMouseEnter,\n onMouseLeave,\n ...rest\n}: TableHeaderCellProps) => {\n const cardOptions = React.useContext(CardContext);\n const inBody = React.useContext(BodyContext);\n const options = inBody ? cardOptions : null;\n const baseClass = 'table-cell font-medium';\n \n const headerCellClasses = cn(\n baseClass,\n sortable && 'cursor-pointer',\n options && 'dishui-table-card__field',\n options?.fieldClassName,\n className\n );\n\n return (\n <th\n role={cardOptions ? (rest.scope === 'row' || rest.scope === 'rowgroup' || (inBody && !rest.scope) ? 'rowheader' : 'columnheader') : undefined}\n {...rest}\n style={options ? { ...options.fieldStyle, ...style } : style}\n className={headerCellClasses}\n onClick={onClick}\n draggable={draggable}\n onDragStart={onDragStart}\n onDragOver={onDragOver}\n onDrop={onDrop}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n >\n {sortable ? <div className=\"flex items-center gap-2\">\n {children}\n {sortable && (\n <div className=\"flex flex-col\">\n {sortDirection === 'asc' ? (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-4 w-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"M5 15l7-7 7 7\" />\n </svg>\n ) : sortDirection === 'desc' ? (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-4 w-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"M19 9l-7 7-7-7\" />\n </svg>\n ) : (\n <div className=\"h-4 w-4 opacity-30\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-4 w-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"M7 16V4m0 0L3 8m4-4l4 4m6 0v12m0 0l4-4m-4 4l-4-4\" />\n </svg>\n </div>\n )}\n </div>\n )}\n </div> : children}\n </th>\n );\n};\n\nexport type TableCaptionProps = React.HTMLAttributes<HTMLTableCaptionElement>;\nexport type TableFooterProps = React.HTMLAttributes<HTMLTableSectionElement>;\nconst TableCaption = (props: TableCaptionProps) => <caption {...props} />;\nconst TableFooter = (props: TableFooterProps) => {\n const options = React.useContext(CardContext);\n return <tfoot role={options ? 'rowgroup' : undefined} {...props} />;\n};\n\n// 扩展Table组件,添加子组件\nexport type TableCardProps = Omit<TableProps, 'card'>;\n\ninterface TableSubcomponents {\n Caption: React.FC<TableCaptionProps>;\n Footer: React.FC<TableFooterProps>;\n Head: React.FC<TableHeadProps>;\n Body: React.FC<TableBodyProps>;\n Row: React.FC<TableRowProps>;\n Cell: React.FC<TableCellProps>;\n HeaderCell: React.FC<TableHeaderCellProps>;\n}\n\nconst subcomponents: TableSubcomponents = {\n Caption: TableCaption,\n Footer: TableFooter,\n Head: TableHead,\n Body: TableBody,\n Row: TableRow,\n Cell: TableCell,\n HeaderCell: TableHeaderCell,\n};\n\nconst TableCard = (props: TableCardProps) => <Table {...props} card />;\nconst TableWithCompounds = Object.assign(Table, subcomponents, {\n Card: Object.assign(TableCard, subcomponents),\n});\n\nexport default TableWithCompounds; "],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export type AgentChatReasoningStep = {
|
|
3
|
+
/** Tools used in this step, rendered as chips: `Sales History · Flavor Data`. */
|
|
4
|
+
tools?: string[];
|
|
5
|
+
/** Rendered as `for 4s` after the chips. */
|
|
6
|
+
durationMs?: number;
|
|
7
|
+
/** Plain-language result of the step. */
|
|
8
|
+
summary?: React.ReactNode;
|
|
9
|
+
};
|
|
10
|
+
export type AgentChatMessage = {
|
|
11
|
+
id: string;
|
|
12
|
+
role: 'user' | 'assistant';
|
|
13
|
+
content?: React.ReactNode | string;
|
|
14
|
+
/** Assistant-only: each step renders as a chips-and-duration line followed by its summary. */
|
|
15
|
+
reasoning?: AgentChatReasoningStep[];
|
|
16
|
+
/** Epoch milliseconds. */
|
|
17
|
+
createdAt?: number;
|
|
18
|
+
};
|
|
19
|
+
export type ChatThread = {
|
|
20
|
+
id: string;
|
|
21
|
+
label: string;
|
|
22
|
+
messages: AgentChatMessage[];
|
|
23
|
+
};
|
|
24
|
+
export type AgentChatLabels = {
|
|
25
|
+
send?: string;
|
|
26
|
+
thinking?: string;
|
|
27
|
+
threads?: string;
|
|
28
|
+
messages?: string;
|
|
29
|
+
};
|
|
30
|
+
export type AgentChatProps = Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> & {
|
|
31
|
+
threads: ChatThread[];
|
|
32
|
+
/** Controlled active thread id. */
|
|
33
|
+
activeThread?: string;
|
|
34
|
+
defaultActiveThread?: string;
|
|
35
|
+
onActiveThreadChange?: (threadId: string) => void;
|
|
36
|
+
/** Called with the trimmed composer text and the active thread id. */
|
|
37
|
+
onSend?: (text: string, threadId: string) => void;
|
|
38
|
+
/** Shows a thinking indicator under the last message and disables sending. */
|
|
39
|
+
busy?: boolean;
|
|
40
|
+
placeholder?: string;
|
|
41
|
+
/** Total panel height; number = px. */
|
|
42
|
+
height?: string | number;
|
|
43
|
+
/** Replace the default message renderer. */
|
|
44
|
+
renderMessage?: (message: AgentChatMessage) => React.ReactNode;
|
|
45
|
+
/** Shown when the active thread has no messages. */
|
|
46
|
+
emptyState?: React.ReactNode;
|
|
47
|
+
labels?: AgentChatLabels;
|
|
48
|
+
};
|
|
49
|
+
/**
|
|
50
|
+
* Tabbed chat panel: a `tablist` of threads, a scrollable log where user
|
|
51
|
+
* turns sit right in a muted bubble and assistant turns sit left as plain
|
|
52
|
+
* text with their reasoning lines, and a composer that auto-grows.
|
|
53
|
+
*/
|
|
54
|
+
export default function AgentChat({ threads, activeThread: activeProp, defaultActiveThread, onActiveThreadChange, onSend, busy, placeholder, height, renderMessage, emptyState, labels, className, style, ...rest }: AgentChatProps): React.JSX.Element;
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
import { cn as e } from "../../../utils/cn.js";
|
|
2
|
+
import { formatDuration as t } from "../shared.js";
|
|
3
|
+
import n from "../LoadingState/index.js";
|
|
4
|
+
/* empty css */
|
|
5
|
+
import r, { useCallback as i, useEffect as a, useId as o, useRef as s, useState as c } from "react";
|
|
6
|
+
import { Fragment as l, jsx as u, jsxs as d } from "react/jsx-runtime";
|
|
7
|
+
//#region src/components/ai/AgentChat/index.tsx
|
|
8
|
+
var f = {
|
|
9
|
+
send: "Send",
|
|
10
|
+
thinking: "Thinking",
|
|
11
|
+
threads: "Threads",
|
|
12
|
+
messages: "Messages"
|
|
13
|
+
}, p = (e) => {
|
|
14
|
+
e.style.height = "auto", e.style.height = `${Math.min(e.scrollHeight, 160)}px`;
|
|
15
|
+
}, m = () => /* @__PURE__ */ d("svg", {
|
|
16
|
+
width: "16",
|
|
17
|
+
height: "16",
|
|
18
|
+
viewBox: "0 0 24 24",
|
|
19
|
+
fill: "none",
|
|
20
|
+
stroke: "currentColor",
|
|
21
|
+
strokeWidth: "2",
|
|
22
|
+
strokeLinecap: "round",
|
|
23
|
+
strokeLinejoin: "round",
|
|
24
|
+
"aria-hidden": "true",
|
|
25
|
+
children: [/* @__PURE__ */ u("path", { d: "m5 12 7-7 7 7" }), /* @__PURE__ */ u("path", { d: "M12 19V5" })]
|
|
26
|
+
}), h = ({ steps: e }) => /* @__PURE__ */ u("ol", {
|
|
27
|
+
className: "dishui-ai-agent-chat__reasoning",
|
|
28
|
+
children: e.map((e) => /* @__PURE__ */ d("li", {
|
|
29
|
+
className: "dishui-ai-agent-chat__step",
|
|
30
|
+
children: [(e.tools?.length || e.durationMs !== void 0) && /* @__PURE__ */ d("div", {
|
|
31
|
+
className: "dishui-ai-agent-chat__tools",
|
|
32
|
+
children: [e.tools?.map((e, t) => /* @__PURE__ */ d(r.Fragment, { children: [t > 0 && /* @__PURE__ */ u("span", {
|
|
33
|
+
className: "dishui-ai-agent-chat__sep",
|
|
34
|
+
"aria-hidden": "true",
|
|
35
|
+
children: "·"
|
|
36
|
+
}), /* @__PURE__ */ u("span", {
|
|
37
|
+
className: "dishui-ai-agent-chat__chip",
|
|
38
|
+
children: e
|
|
39
|
+
})] }, e)), e.durationMs !== void 0 && /* @__PURE__ */ d(l, { children: [!!e.tools?.length && /* @__PURE__ */ u("span", {
|
|
40
|
+
className: "dishui-ai-agent-chat__sep",
|
|
41
|
+
"aria-hidden": "true",
|
|
42
|
+
children: "·"
|
|
43
|
+
}), /* @__PURE__ */ d("span", {
|
|
44
|
+
className: "dishui-ai-agent-chat__duration",
|
|
45
|
+
children: ["for ", t(e.durationMs)]
|
|
46
|
+
})] })]
|
|
47
|
+
}), e.summary !== void 0 && /* @__PURE__ */ u("div", {
|
|
48
|
+
className: "dishui-ai-agent-chat__summary",
|
|
49
|
+
children: e.summary
|
|
50
|
+
})]
|
|
51
|
+
}, `${e.durationMs ?? ""}-${e.tools?.join("-") ?? ""}-${String(e.summary ?? "")}`))
|
|
52
|
+
}), g = ({ message: t }) => /* @__PURE__ */ d("div", {
|
|
53
|
+
className: e("dishui-ai-agent-chat__message", `dishui-ai-agent-chat__message--${t.role}`),
|
|
54
|
+
children: [t.role === "assistant" && t.reasoning?.length ? /* @__PURE__ */ u(h, { steps: t.reasoning }) : null, t.content !== void 0 && t.content !== null && /* @__PURE__ */ u("div", {
|
|
55
|
+
className: "dishui-ai-agent-chat__content",
|
|
56
|
+
children: t.content
|
|
57
|
+
})]
|
|
58
|
+
});
|
|
59
|
+
function _({ threads: t, activeThread: l, defaultActiveThread: h, onActiveThreadChange: _, onSend: v, busy: y = !1, placeholder: b = "Ask the agent…", height: x = 480, renderMessage: S, emptyState: C, labels: w, className: T, style: E, ...D }) {
|
|
60
|
+
let O = o(), k = {
|
|
61
|
+
...f,
|
|
62
|
+
...w
|
|
63
|
+
}, [A, j] = c(h ?? t[0]?.id), M = l ?? A, N = t.find((e) => e.id === M) ?? t[0], P = i((e) => {
|
|
64
|
+
j(e), _?.(e);
|
|
65
|
+
}, [_]), F = s({}), I = (e, n) => {
|
|
66
|
+
let r;
|
|
67
|
+
if (e.key === "ArrowRight" ? r = (n + 1) % t.length : e.key === "ArrowLeft" ? r = (n - 1 + t.length) % t.length : e.key === "Home" ? r = 0 : e.key === "End" && (r = t.length - 1), r === void 0) return;
|
|
68
|
+
e.preventDefault();
|
|
69
|
+
let i = t[r];
|
|
70
|
+
P(i.id), F.current[i.id]?.focus();
|
|
71
|
+
}, L = s(null), R = N?.messages.length ?? 0;
|
|
72
|
+
a(() => {
|
|
73
|
+
let e = L.current;
|
|
74
|
+
e && (e.scrollTop = e.scrollHeight);
|
|
75
|
+
}, [R, y]);
|
|
76
|
+
let [z, B] = c(""), V = s(null), H = !y && z.trim().length > 0 && !!N, U = () => {
|
|
77
|
+
if (!H || !N) return;
|
|
78
|
+
v?.(z.trim(), N.id), B("");
|
|
79
|
+
let e = V.current;
|
|
80
|
+
e && (e.style.height = "auto");
|
|
81
|
+
}, W = (e) => {
|
|
82
|
+
e.key === "Enter" && !e.shiftKey && !e.nativeEvent.isComposing && (e.preventDefault(), U());
|
|
83
|
+
}, G = `${O}-panel`, K = (e) => `${O}-tab-${e}`;
|
|
84
|
+
return /* @__PURE__ */ d("div", {
|
|
85
|
+
...D,
|
|
86
|
+
className: e("dishui-ai-agent-chat", T),
|
|
87
|
+
style: {
|
|
88
|
+
...E,
|
|
89
|
+
height: typeof x == "number" ? `${x}px` : x
|
|
90
|
+
},
|
|
91
|
+
children: [
|
|
92
|
+
t.length > 1 && /* @__PURE__ */ u("div", {
|
|
93
|
+
className: "dishui-ai-agent-chat__tabs",
|
|
94
|
+
role: "tablist",
|
|
95
|
+
"aria-label": k.threads,
|
|
96
|
+
children: t.map((t, n) => {
|
|
97
|
+
let r = t.id === N?.id;
|
|
98
|
+
return /* @__PURE__ */ u("button", {
|
|
99
|
+
ref: (e) => {
|
|
100
|
+
F.current[t.id] = e;
|
|
101
|
+
},
|
|
102
|
+
id: K(t.id),
|
|
103
|
+
type: "button",
|
|
104
|
+
role: "tab",
|
|
105
|
+
"aria-selected": r,
|
|
106
|
+
"aria-controls": G,
|
|
107
|
+
tabIndex: r ? 0 : -1,
|
|
108
|
+
className: e("dishui-ai-agent-chat__tab", r && "dishui-ai-agent-chat__tab--active"),
|
|
109
|
+
onClick: () => P(t.id),
|
|
110
|
+
onKeyDown: (e) => I(e, n),
|
|
111
|
+
children: t.label
|
|
112
|
+
}, t.id);
|
|
113
|
+
})
|
|
114
|
+
}),
|
|
115
|
+
/* @__PURE__ */ u("div", {
|
|
116
|
+
ref: L,
|
|
117
|
+
id: G,
|
|
118
|
+
role: "tabpanel",
|
|
119
|
+
"aria-labelledby": N && t.length > 1 ? K(N.id) : void 0,
|
|
120
|
+
className: "dishui-ai-agent-chat__log",
|
|
121
|
+
children: /* @__PURE__ */ d("div", {
|
|
122
|
+
role: "log",
|
|
123
|
+
"aria-live": "polite",
|
|
124
|
+
"aria-label": k.messages,
|
|
125
|
+
className: "dishui-ai-agent-chat__messages",
|
|
126
|
+
children: [
|
|
127
|
+
R === 0 && !y && C !== void 0 && /* @__PURE__ */ u("div", {
|
|
128
|
+
className: "dishui-ai-agent-chat__empty",
|
|
129
|
+
children: C
|
|
130
|
+
}),
|
|
131
|
+
N?.messages.map((e) => /* @__PURE__ */ u(r.Fragment, { children: S ? S(e) : /* @__PURE__ */ u(g, { message: e }) }, e.id)),
|
|
132
|
+
y && /* @__PURE__ */ u("div", {
|
|
133
|
+
className: "dishui-ai-agent-chat__message dishui-ai-agent-chat__message--assistant",
|
|
134
|
+
children: /* @__PURE__ */ u(n, {
|
|
135
|
+
variant: "dots",
|
|
136
|
+
size: "sm",
|
|
137
|
+
label: k.thinking,
|
|
138
|
+
showElapsed: !1
|
|
139
|
+
})
|
|
140
|
+
})
|
|
141
|
+
]
|
|
142
|
+
})
|
|
143
|
+
}),
|
|
144
|
+
/* @__PURE__ */ d("form", {
|
|
145
|
+
className: "dishui-ai-agent-chat__composer",
|
|
146
|
+
onSubmit: (e) => {
|
|
147
|
+
e.preventDefault(), U();
|
|
148
|
+
},
|
|
149
|
+
children: [/* @__PURE__ */ u("textarea", {
|
|
150
|
+
ref: V,
|
|
151
|
+
className: "dishui-ai-agent-chat__input",
|
|
152
|
+
rows: 1,
|
|
153
|
+
value: z,
|
|
154
|
+
placeholder: b,
|
|
155
|
+
"aria-label": b,
|
|
156
|
+
disabled: !N,
|
|
157
|
+
onChange: (e) => {
|
|
158
|
+
B(e.target.value), p(e.target);
|
|
159
|
+
},
|
|
160
|
+
onKeyDown: W
|
|
161
|
+
}), /* @__PURE__ */ u("button", {
|
|
162
|
+
type: "submit",
|
|
163
|
+
className: "dishui-ai-agent-chat__send",
|
|
164
|
+
disabled: !H,
|
|
165
|
+
"aria-label": k.send,
|
|
166
|
+
title: k.send,
|
|
167
|
+
children: /* @__PURE__ */ u(m, {})
|
|
168
|
+
})]
|
|
169
|
+
})
|
|
170
|
+
]
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
//#endregion
|
|
174
|
+
export { _ as default };
|
|
175
|
+
|
|
176
|
+
//# sourceMappingURL=index.js.map
|