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.
Files changed (106) hide show
  1. package/dist/.release-verified.json +6 -0
  2. package/dist/ai.js +22 -0
  3. package/dist/components/Card/Metric2.js +11 -11
  4. package/dist/components/Card/Metric2.js.map +1 -1
  5. package/dist/components/Card/index.d.ts +20 -0
  6. package/dist/components/Card/index.js +184 -179
  7. package/dist/components/Card/index.js.map +1 -1
  8. package/dist/components/GroupButton/index.js +4 -4
  9. package/dist/components/GroupButton/index.js.map +1 -1
  10. package/dist/components/GroupedTable/index.js +10 -10
  11. package/dist/components/GroupedTable/index.js.map +1 -1
  12. package/dist/components/NavigationList/index.js +9 -9
  13. package/dist/components/NavigationList/index.js.map +1 -1
  14. package/dist/components/Section/index.js +11 -11
  15. package/dist/components/Section/index.js.map +1 -1
  16. package/dist/components/Skeleton/index.js +1 -1
  17. package/dist/components/Skeleton/index.js.map +1 -1
  18. package/dist/components/Table/index.d.ts +23 -2
  19. package/dist/components/Table/index.js +153 -101
  20. package/dist/components/Table/index.js.map +1 -1
  21. package/dist/components/ai/AgentChat/index.d.ts +54 -0
  22. package/dist/components/ai/AgentChat/index.js +176 -0
  23. package/dist/components/ai/AgentChat/index.js.map +1 -0
  24. package/dist/components/ai/AgentScreen/index.d.ts +50 -0
  25. package/dist/components/ai/AgentScreen/index.js +233 -0
  26. package/dist/components/ai/AgentScreen/index.js.map +1 -0
  27. package/dist/components/ai/ApprovalCard/index.d.ts +26 -0
  28. package/dist/components/ai/ApprovalCard/index.js +89 -0
  29. package/dist/components/ai/ApprovalCard/index.js.map +1 -0
  30. package/dist/components/ai/CodeView/index.d.ts +30 -0
  31. package/dist/components/ai/CodeView/index.js +149 -0
  32. package/dist/components/ai/CodeView/index.js.map +1 -0
  33. package/dist/components/ai/CommandSearch/index.d.ts +39 -0
  34. package/dist/components/ai/CommandSearch/index.js +217 -0
  35. package/dist/components/ai/CommandSearch/index.js.map +1 -0
  36. package/dist/components/ai/ContextCards/index.d.ts +42 -0
  37. package/dist/components/ai/ContextCards/index.js +106 -0
  38. package/dist/components/ai/ContextCards/index.js.map +1 -0
  39. package/dist/components/ai/DiffTable/index.d.ts +70 -0
  40. package/dist/components/ai/DiffTable/index.js +235 -0
  41. package/dist/components/ai/DiffTable/index.js.map +1 -0
  42. package/dist/components/ai/FilterTable/index.d.ts +35 -0
  43. package/dist/components/ai/FilterTable/index.js +86 -0
  44. package/dist/components/ai/FilterTable/index.js.map +1 -0
  45. package/dist/components/ai/FineTuneCard/index.d.ts +24 -0
  46. package/dist/components/ai/FineTuneCard/index.js +75 -0
  47. package/dist/components/ai/FineTuneCard/index.js.map +1 -0
  48. package/dist/components/ai/InsightCards/index.d.ts +23 -0
  49. package/dist/components/ai/InsightCards/index.js +64 -0
  50. package/dist/components/ai/InsightCards/index.js.map +1 -0
  51. package/dist/components/ai/LoadingState/index.d.ts +22 -0
  52. package/dist/components/ai/LoadingState/index.js +80 -0
  53. package/dist/components/ai/LoadingState/index.js.map +1 -0
  54. package/dist/components/ai/PromptBar/index.d.ts +26 -0
  55. package/dist/components/ai/PromptBar/index.js +117 -0
  56. package/dist/components/ai/PromptBar/index.js.map +1 -0
  57. package/dist/components/ai/RecommendationCard/index.d.ts +44 -0
  58. package/dist/components/ai/RecommendationCard/index.js +142 -0
  59. package/dist/components/ai/RecommendationCard/index.js.map +1 -0
  60. package/dist/components/ai/RecordsTable/index.d.ts +65 -0
  61. package/dist/components/ai/RecordsTable/index.js +334 -0
  62. package/dist/components/ai/RecordsTable/index.js.map +1 -0
  63. package/dist/components/ai/SelectionActions/index.d.ts +19 -0
  64. package/dist/components/ai/SelectionActions/index.js +40 -0
  65. package/dist/components/ai/SelectionActions/index.js.map +1 -0
  66. package/dist/components/ai/StateFlow/index.d.ts +24 -0
  67. package/dist/components/ai/StateFlow/index.js +50 -0
  68. package/dist/components/ai/StateFlow/index.js.map +1 -0
  69. package/dist/components/ai/StreamingText/index.d.ts +44 -0
  70. package/dist/components/ai/StreamingText/index.js +211 -0
  71. package/dist/components/ai/StreamingText/index.js.map +1 -0
  72. package/dist/components/ai/TaskRows/index.d.ts +53 -0
  73. package/dist/components/ai/TaskRows/index.js +186 -0
  74. package/dist/components/ai/TaskRows/index.js.map +1 -0
  75. package/dist/components/ai/Thinking/index.d.ts +47 -0
  76. package/dist/components/ai/Thinking/index.js +197 -0
  77. package/dist/components/ai/Thinking/index.js.map +1 -0
  78. package/dist/components/ai/ToolChips/index.d.ts +21 -0
  79. package/dist/components/ai/ToolChips/index.js +63 -0
  80. package/dist/components/ai/ToolChips/index.js.map +1 -0
  81. package/dist/components/ai/index.d.ts +50 -0
  82. package/dist/components/ai/shared.d.ts +13 -0
  83. package/dist/components/ai/shared.js +25 -0
  84. package/dist/components/ai/shared.js.map +1 -0
  85. package/dist/components/pro/DataTable/DataTable.js +70 -51
  86. package/dist/components/pro/DataTable/DataTable.js.map +1 -1
  87. package/dist/components/pro/DataTable/components/TableBody.d.ts +3 -1
  88. package/dist/components/pro/DataTable/components/TableBody.js +41 -39
  89. package/dist/components/pro/DataTable/components/TableBody.js.map +1 -1
  90. package/dist/components/pro/DataTable/components/TableToolbar.d.ts +2 -1
  91. package/dist/components/pro/DataTable/components/TableToolbar.js +25 -19
  92. package/dist/components/pro/DataTable/components/TableToolbar.js.map +1 -1
  93. package/dist/components/pro/DataTable/index.d.ts +1 -1
  94. package/dist/components/pro/DataTable/rowDetailExtension.js +1 -1
  95. package/dist/components/pro/DataTable/rowDetailExtension.js.map +1 -1
  96. package/dist/components/pro/DataTable/types.d.ts +19 -0
  97. package/dist/data-table.js.map +1 -1
  98. package/dist/dishui.css +1 -1
  99. package/dist/index.d.ts +5 -4
  100. package/dist/index.js +128 -107
  101. package/dist/layouts/Sidebar.d.ts +16 -0
  102. package/dist/layouts/Sidebar.js +85 -52
  103. package/dist/layouts/Sidebar.js.map +1 -1
  104. package/dist/lite.d.ts +2 -0
  105. package/dist/lite.js +22 -21
  106. 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
- interface TableCompound extends React.FC<TableProps> {
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 TableWithCompounds: TableCompound;
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
- import "react";
3
- import { jsx as t, jsxs as n } from "react/jsx-runtime";
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 r = ({ children: n, className: r = "", onClick: i, onMouseEnter: a, onMouseLeave: o, ...s }) => {
6
- let c = e("table", r);
7
- return /* @__PURE__ */ t("table", {
8
- ...s,
9
- className: c,
10
- onClick: i,
11
- onMouseEnter: a,
12
- onMouseLeave: o,
13
- children: n
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
- }, i = ({ children: n, className: r = "", ...i }) => {
16
- let a = e("table-header-group", r);
17
- return /* @__PURE__ */ t("thead", {
18
- ...i,
19
- className: a,
20
- children: n
21
- });
22
- }, a = ({ children: n, className: r = "", ...i }) => {
23
- let a = e("table-row-group", r);
24
- return /* @__PURE__ */ t("tbody", {
25
- ...i,
26
- className: a,
27
- children: n
28
- });
29
- }, o = ({ children: n, className: r = "", selected: i = !1, onClick: a, onDoubleClick: o, onMouseEnter: s, onMouseLeave: c, ...l }) => {
30
- let u = e("table-row", i && "bg-base-200", "hover:bg-base-100", r);
31
- return /* @__PURE__ */ t("tr", {
32
- className: u,
33
- onClick: a,
34
- onDoubleClick: o,
35
- onMouseEnter: s,
36
- onMouseLeave: c,
37
- ...l,
38
- children: n
39
- });
40
- }, s = ({ children: n, className: r = "", onClick: i, colSpan: a, style: o, onDoubleClick: s, onMouseEnter: c, onMouseLeave: l, ...u }) => {
41
- let d = e("table-cell", r);
42
- return /* @__PURE__ */ t("td", {
43
- ...u,
44
- className: d,
45
- onClick: i,
46
- colSpan: a,
47
- style: o,
48
- onDoubleClick: s,
49
- onMouseEnter: c,
50
- onMouseLeave: l,
51
- children: n
52
- });
53
- }, c = ({ children: r, className: i = "", onClick: a, sortable: o = !1, sortDirection: s = null, draggable: c, onDragStart: l, onDragOver: u, onDrop: d, onMouseEnter: f, onMouseLeave: p, ...m }) => {
54
- let h = e("table-cell font-medium", o && "cursor-pointer", i);
55
- return /* @__PURE__ */ t("th", {
56
- ...m,
57
- className: h,
58
- onClick: a,
59
- draggable: c,
60
- onDragStart: l,
61
- onDragOver: u,
62
- onDrop: d,
63
- onMouseEnter: f,
64
- onMouseLeave: p,
65
- children: o ? /* @__PURE__ */ n("div", {
66
- className: "flex items-center gap-2",
67
- children: [r, o && /* @__PURE__ */ t("div", {
68
- className: "flex flex-col",
69
- children: s === "asc" ? /* @__PURE__ */ t("svg", {
70
- xmlns: "http://www.w3.org/2000/svg",
71
- className: "h-4 w-4",
72
- fill: "none",
73
- viewBox: "0 0 24 24",
74
- stroke: "currentColor",
75
- children: /* @__PURE__ */ t("path", {
76
- strokeLinecap: "round",
77
- strokeLinejoin: "round",
78
- strokeWidth: "2",
79
- d: "M5 15l7-7 7 7"
80
- })
81
- }) : s === "desc" ? /* @__PURE__ */ t("svg", {
82
- xmlns: "http://www.w3.org/2000/svg",
83
- className: "h-4 w-4",
84
- fill: "none",
85
- viewBox: "0 0 24 24",
86
- stroke: "currentColor",
87
- children: /* @__PURE__ */ t("path", {
88
- strokeLinecap: "round",
89
- strokeLinejoin: "round",
90
- strokeWidth: "2",
91
- d: "M19 9l-7 7-7-7"
92
- })
93
- }) : /* @__PURE__ */ t("div", {
94
- className: "h-4 w-4 opacity-30",
95
- children: /* @__PURE__ */ t("svg", {
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__ */ t("path", {
124
+ children: /* @__PURE__ */ n("path", {
102
125
  strokeLinecap: "round",
103
126
  strokeLinejoin: "round",
104
127
  strokeWidth: "2",
105
- d: "M7 16V4m0 0L3 8m4-4l4 4m6 0v12m0 0l4-4m-4 4l-4-4"
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
- }) : r
111
- });
112
- }, l = (e) => /* @__PURE__ */ t("caption", { ...e }), u = (e) => /* @__PURE__ */ t("tfoot", { ...e }), d = r;
113
- d.Caption = l, d.Footer = u, d.Head = i, d.Body = a, d.Row = o, d.Cell = s, d.HeaderCell = c;
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 { d as default };
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