sa2kit 3.4.0 → 3.7.0
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/business/index.d.mts +2 -7
- package/dist/business/index.d.ts +2 -7
- package/dist/business/index.js +1761 -8045
- package/dist/business/index.js.map +1 -1
- package/dist/business/index.mjs +1169 -7452
- package/dist/business/index.mjs.map +1 -1
- package/dist/business/portfolio/index.d.mts +1 -2
- package/dist/business/portfolio/index.d.ts +1 -2
- package/dist/{chunk-KVYHCGRY.js → chunk-7Z3XR2Y4.js} +552 -263
- package/dist/chunk-7Z3XR2Y4.js.map +1 -0
- package/dist/chunk-XPY45Y75.js +1143 -0
- package/dist/chunk-XPY45Y75.js.map +1 -0
- package/dist/{chunk-YIRPPMCN.mjs → chunk-XSTMLLJV.mjs} +474 -198
- package/dist/chunk-XSTMLLJV.mjs.map +1 -0
- package/dist/chunk-ZJLS5JU5.mjs +1090 -0
- package/dist/chunk-ZJLS5JU5.mjs.map +1 -0
- package/dist/common/aiApi/client/index.d.mts +71 -0
- package/dist/common/aiApi/client/index.d.ts +71 -0
- package/dist/common/aiApi/client/index.js +165 -0
- package/dist/common/aiApi/client/index.js.map +1 -0
- package/dist/common/aiApi/client/index.mjs +151 -0
- package/dist/common/aiApi/client/index.mjs.map +1 -0
- package/dist/common/aiApi/index.d.mts +184 -0
- package/dist/common/aiApi/index.d.ts +184 -0
- package/dist/common/aiApi/index.js +217 -0
- package/dist/common/aiApi/index.mjs +4 -0
- package/dist/common/aiApi/server/index.d.mts +3 -0
- package/dist/common/aiApi/server/index.d.ts +3 -0
- package/dist/common/aiApi/server/index.js +217 -0
- package/dist/common/aiApi/server/index.mjs +4 -0
- package/dist/common/components/index.js +176 -177
- package/dist/common/components/index.mjs +1 -2
- package/dist/common/index.js +2 -3
- package/dist/common/index.mjs +1 -2
- package/dist/{index-BSmd4ikf.d.ts → index-B4wDXFL0.d.mts} +39 -2
- package/dist/{index-r2-zE3iC.d.mts → index-B4wDXFL0.d.ts} +39 -2
- package/dist/{index-DLLPTprx.d.mts → index-B9vXYzok.d.mts} +48 -13
- package/dist/{index-VFDbZxVM.d.ts → index-BZ0MhRau.d.ts} +48 -13
- package/dist/index.d.mts +703 -181
- package/dist/index.d.ts +703 -181
- package/dist/index.js +2921 -7257
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +2161 -6538
- package/dist/index.mjs.map +1 -1
- package/dist/types-CiqMQ-uu.d.mts +166 -0
- package/dist/types-CiqMQ-uu.d.ts +166 -0
- package/package.json +15 -60
- package/dist/CollisionBalls-DgKtscU2.d.mts +0 -41
- package/dist/CollisionBalls-DgKtscU2.d.ts +0 -41
- package/dist/business/calendar/index.d.mts +0 -6
- package/dist/business/calendar/index.d.ts +0 -6
- package/dist/business/calendar/index.js +0 -7433
- package/dist/business/calendar/index.js.map +0 -1
- package/dist/business/calendar/index.mjs +0 -7257
- package/dist/business/calendar/index.mjs.map +0 -1
- package/dist/business/calendar/routes/index.d.mts +0 -191
- package/dist/business/calendar/routes/index.d.ts +0 -191
- package/dist/business/calendar/routes/index.js +0 -844
- package/dist/business/calendar/routes/index.js.map +0 -1
- package/dist/business/calendar/routes/index.mjs +0 -826
- package/dist/business/calendar/routes/index.mjs.map +0 -1
- package/dist/chunk-3R6JHA6D.js +0 -120
- package/dist/chunk-3R6JHA6D.js.map +0 -1
- package/dist/chunk-4PJM4752.js +0 -4
- package/dist/chunk-4PJM4752.js.map +0 -1
- package/dist/chunk-7PMT4L4I.js +0 -324
- package/dist/chunk-7PMT4L4I.js.map +0 -1
- package/dist/chunk-FY2X3LYR.mjs +0 -3
- package/dist/chunk-FY2X3LYR.mjs.map +0 -1
- package/dist/chunk-GS4SAW25.mjs +0 -116
- package/dist/chunk-GS4SAW25.mjs.map +0 -1
- package/dist/chunk-HL4H2HF6.js +0 -279
- package/dist/chunk-HL4H2HF6.js.map +0 -1
- package/dist/chunk-IJIQUMAK.mjs +0 -272
- package/dist/chunk-IJIQUMAK.mjs.map +0 -1
- package/dist/chunk-KVYHCGRY.js.map +0 -1
- package/dist/chunk-MMDSZIXD.mjs +0 -286
- package/dist/chunk-MMDSZIXD.mjs.map +0 -1
- package/dist/chunk-N2O3OX5Y.mjs +0 -243
- package/dist/chunk-N2O3OX5Y.mjs.map +0 -1
- package/dist/chunk-RRQ2X26Z.js +0 -106
- package/dist/chunk-RRQ2X26Z.js.map +0 -1
- package/dist/chunk-RVNQI6BI.js +0 -249
- package/dist/chunk-RVNQI6BI.js.map +0 -1
- package/dist/chunk-UJUWDF7M.mjs +0 -336
- package/dist/chunk-UJUWDF7M.mjs.map +0 -1
- package/dist/chunk-VCKXK6V5.js +0 -345
- package/dist/chunk-VCKXK6V5.js.map +0 -1
- package/dist/chunk-VIEXDTNF.mjs +0 -100
- package/dist/chunk-VIEXDTNF.mjs.map +0 -1
- package/dist/chunk-YIRPPMCN.mjs.map +0 -1
- package/dist/common/ai/llm/core/index.d.mts +0 -70
- package/dist/common/ai/llm/core/index.d.ts +0 -70
- package/dist/common/ai/llm/core/index.js +0 -54
- package/dist/common/ai/llm/core/index.mjs +0 -5
- package/dist/common/ai/llm/electron/index.d.mts +0 -6
- package/dist/common/ai/llm/electron/index.d.ts +0 -6
- package/dist/common/ai/llm/electron/index.js +0 -67
- package/dist/common/ai/llm/electron/index.mjs +0 -10
- package/dist/common/ai/llm/index.d.mts +0 -3
- package/dist/common/ai/llm/index.d.ts +0 -3
- package/dist/common/ai/llm/index.js +0 -54
- package/dist/common/ai/llm/index.js.map +0 -1
- package/dist/common/ai/llm/index.mjs +0 -5
- package/dist/common/ai/llm/index.mjs.map +0 -1
- package/dist/common/ai/llm/miniapp/index.d.mts +0 -6
- package/dist/common/ai/llm/miniapp/index.d.ts +0 -6
- package/dist/common/ai/llm/miniapp/index.js +0 -59
- package/dist/common/ai/llm/miniapp/index.js.map +0 -1
- package/dist/common/ai/llm/miniapp/index.mjs +0 -6
- package/dist/common/ai/llm/miniapp/index.mjs.map +0 -1
- package/dist/common/ai/llm/rn/index.d.mts +0 -6
- package/dist/common/ai/llm/rn/index.d.ts +0 -6
- package/dist/common/ai/llm/rn/index.js +0 -59
- package/dist/common/ai/llm/rn/index.js.map +0 -1
- package/dist/common/ai/llm/rn/index.mjs +0 -6
- package/dist/common/ai/llm/rn/index.mjs.map +0 -1
- package/dist/common/ai/llm/ui/electron/index.d.mts +0 -5
- package/dist/common/ai/llm/ui/electron/index.d.ts +0 -5
- package/dist/common/ai/llm/ui/electron/index.js +0 -22
- package/dist/common/ai/llm/ui/electron/index.js.map +0 -1
- package/dist/common/ai/llm/ui/electron/index.mjs +0 -9
- package/dist/common/ai/llm/ui/electron/index.mjs.map +0 -1
- package/dist/common/ai/llm/ui/miniapp/index.d.mts +0 -9
- package/dist/common/ai/llm/ui/miniapp/index.d.ts +0 -9
- package/dist/common/ai/llm/ui/miniapp/index.js +0 -14
- package/dist/common/ai/llm/ui/miniapp/index.js.map +0 -1
- package/dist/common/ai/llm/ui/miniapp/index.mjs +0 -5
- package/dist/common/ai/llm/ui/miniapp/index.mjs.map +0 -1
- package/dist/common/ai/llm/ui/rn/index.d.mts +0 -9
- package/dist/common/ai/llm/ui/rn/index.d.ts +0 -9
- package/dist/common/ai/llm/ui/rn/index.js +0 -14
- package/dist/common/ai/llm/ui/rn/index.js.map +0 -1
- package/dist/common/ai/llm/ui/rn/index.mjs +0 -5
- package/dist/common/ai/llm/ui/rn/index.mjs.map +0 -1
- package/dist/common/ai/llm/ui/web/index.d.mts +0 -15
- package/dist/common/ai/llm/ui/web/index.d.ts +0 -15
- package/dist/common/ai/llm/ui/web/index.js +0 -21
- package/dist/common/ai/llm/ui/web/index.js.map +0 -1
- package/dist/common/ai/llm/ui/web/index.mjs +0 -8
- package/dist/common/ai/llm/ui/web/index.mjs.map +0 -1
- package/dist/common/ai/llm/web/index.d.mts +0 -6
- package/dist/common/ai/llm/web/index.d.ts +0 -6
- package/dist/common/ai/llm/web/index.js +0 -66
- package/dist/common/ai/llm/web/index.js.map +0 -1
- package/dist/common/ai/llm/web/index.mjs +0 -9
- package/dist/common/ai/llm/web/index.mjs.map +0 -1
- package/dist/index-BMgdH5dL.d.mts +0 -1716
- package/dist/index-IXMAeTtN.d.ts +0 -1716
- package/dist/types-B2rs_jq1.d.mts +0 -38
- package/dist/types-DgACCUpT.d.ts +0 -122
- package/dist/types-DwS2Eg0q.d.ts +0 -38
- package/dist/types-LU_BGSzk.d.mts +0 -122
- /package/dist/common/{ai/llm/core → aiApi}/index.js.map +0 -0
- /package/dist/common/{ai/llm/core → aiApi}/index.mjs.map +0 -0
- /package/dist/common/{ai/llm/electron → aiApi/server}/index.js.map +0 -0
- /package/dist/common/{ai/llm/electron → aiApi/server}/index.mjs.map +0 -0
package/dist/chunk-MMDSZIXD.mjs
DELETED
|
@@ -1,286 +0,0 @@
|
|
|
1
|
-
import { cn } from './chunk-FUA6ZGMI.mjs';
|
|
2
|
-
import * as React4 from 'react';
|
|
3
|
-
import { cva } from 'class-variance-authority';
|
|
4
|
-
import { X } from 'lucide-react';
|
|
5
|
-
import { createPortal } from 'react-dom';
|
|
6
|
-
|
|
7
|
-
var buttonVariants = cva(
|
|
8
|
-
"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
|
|
9
|
-
{
|
|
10
|
-
variants: {
|
|
11
|
-
variant: {
|
|
12
|
-
default: "bg-primary text-primary-foreground shadow hover:bg-primary/90",
|
|
13
|
-
destructive: "bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90",
|
|
14
|
-
outline: "border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground",
|
|
15
|
-
secondary: "bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80",
|
|
16
|
-
ghost: "hover:bg-accent hover:text-accent-foreground",
|
|
17
|
-
link: "text-primary underline-offset-4 hover:underline"
|
|
18
|
-
},
|
|
19
|
-
size: {
|
|
20
|
-
default: "h-9 px-4 py-2",
|
|
21
|
-
sm: "h-8 rounded-md px-3 text-xs",
|
|
22
|
-
lg: "h-10 rounded-md px-8",
|
|
23
|
-
icon: "h-9 w-9"
|
|
24
|
-
}
|
|
25
|
-
},
|
|
26
|
-
defaultVariants: {
|
|
27
|
-
variant: "default",
|
|
28
|
-
size: "default"
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
);
|
|
32
|
-
var Button = React4.forwardRef(
|
|
33
|
-
({ className, variant = "default", size = "default", asChild = false, children, ...props }, ref) => {
|
|
34
|
-
if (asChild && React4.isValidElement(children)) {
|
|
35
|
-
const childProps = children.props;
|
|
36
|
-
return React4.cloneElement(children, {
|
|
37
|
-
...props,
|
|
38
|
-
className: cn(buttonVariants({ variant, size, className }), childProps.className)
|
|
39
|
-
});
|
|
40
|
-
}
|
|
41
|
-
return /* @__PURE__ */ React4.createElement(
|
|
42
|
-
"button",
|
|
43
|
-
{
|
|
44
|
-
className: cn(buttonVariants({ variant, size, className })),
|
|
45
|
-
ref,
|
|
46
|
-
...props
|
|
47
|
-
},
|
|
48
|
-
children
|
|
49
|
-
);
|
|
50
|
-
}
|
|
51
|
-
);
|
|
52
|
-
Button.displayName = "Button";
|
|
53
|
-
var Input = React4.forwardRef(
|
|
54
|
-
({ className, type, ...props }, ref) => {
|
|
55
|
-
return /* @__PURE__ */ React4.createElement(
|
|
56
|
-
"input",
|
|
57
|
-
{
|
|
58
|
-
type,
|
|
59
|
-
className: cn(
|
|
60
|
-
"flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-base shadow-sm transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",
|
|
61
|
-
className
|
|
62
|
-
),
|
|
63
|
-
ref,
|
|
64
|
-
...props
|
|
65
|
-
}
|
|
66
|
-
);
|
|
67
|
-
}
|
|
68
|
-
);
|
|
69
|
-
Input.displayName = "Input";
|
|
70
|
-
function useControllableState({
|
|
71
|
-
value,
|
|
72
|
-
defaultValue,
|
|
73
|
-
onChange
|
|
74
|
-
}) {
|
|
75
|
-
const [internal, setInternal] = React4.useState(defaultValue);
|
|
76
|
-
const isControlled = value !== void 0;
|
|
77
|
-
const state = isControlled ? value : internal;
|
|
78
|
-
const setState = React4.useCallback(
|
|
79
|
-
(next) => {
|
|
80
|
-
if (!isControlled) setInternal(next);
|
|
81
|
-
onChange?.(next);
|
|
82
|
-
},
|
|
83
|
-
[isControlled, onChange]
|
|
84
|
-
);
|
|
85
|
-
return [state, setState];
|
|
86
|
-
}
|
|
87
|
-
function Portal({
|
|
88
|
-
children,
|
|
89
|
-
container
|
|
90
|
-
}) {
|
|
91
|
-
const [mounted, setMounted] = React4.useState(false);
|
|
92
|
-
React4.useEffect(() => {
|
|
93
|
-
setMounted(true);
|
|
94
|
-
}, []);
|
|
95
|
-
if (!mounted) return null;
|
|
96
|
-
return createPortal(children, container ?? document.body);
|
|
97
|
-
}
|
|
98
|
-
function useOnClickOutside(refs, handler, enabled) {
|
|
99
|
-
React4.useEffect(() => {
|
|
100
|
-
if (!enabled) return;
|
|
101
|
-
const listener = (event) => {
|
|
102
|
-
const target = event.target;
|
|
103
|
-
const clickedInside = refs.some((ref) => {
|
|
104
|
-
const el = ref.current;
|
|
105
|
-
return el && el.contains(target);
|
|
106
|
-
});
|
|
107
|
-
if (!clickedInside) {
|
|
108
|
-
handler(event);
|
|
109
|
-
}
|
|
110
|
-
};
|
|
111
|
-
document.addEventListener("mousedown", listener);
|
|
112
|
-
document.addEventListener("touchstart", listener);
|
|
113
|
-
return () => {
|
|
114
|
-
document.removeEventListener("mousedown", listener);
|
|
115
|
-
document.removeEventListener("touchstart", listener);
|
|
116
|
-
};
|
|
117
|
-
}, [refs, handler, enabled]);
|
|
118
|
-
}
|
|
119
|
-
function mergeRefs(...refs) {
|
|
120
|
-
return (value) => {
|
|
121
|
-
refs.forEach((ref) => {
|
|
122
|
-
if (!ref) return;
|
|
123
|
-
if (typeof ref === "function") {
|
|
124
|
-
ref(value);
|
|
125
|
-
} else {
|
|
126
|
-
ref.current = value;
|
|
127
|
-
}
|
|
128
|
-
});
|
|
129
|
-
};
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
// src/common/components/Dialog.tsx
|
|
133
|
-
var DialogContext = React4.createContext(null);
|
|
134
|
-
var Dialog = ({ open, defaultOpen = false, onOpenChange, children }) => {
|
|
135
|
-
const [isOpen, setIsOpen] = useControllableState({
|
|
136
|
-
value: open,
|
|
137
|
-
defaultValue: defaultOpen,
|
|
138
|
-
onChange: onOpenChange
|
|
139
|
-
});
|
|
140
|
-
const triggerRef = React4.useRef(null);
|
|
141
|
-
const contentRef = React4.useRef(null);
|
|
142
|
-
return /* @__PURE__ */ React4.createElement(DialogContext.Provider, { value: { open: isOpen, setOpen: setIsOpen, triggerRef, contentRef } }, children);
|
|
143
|
-
};
|
|
144
|
-
var DialogTrigger = React4.forwardRef(
|
|
145
|
-
({ children, onClick, ...props }, ref) => {
|
|
146
|
-
const ctx = React4.useContext(DialogContext);
|
|
147
|
-
if (!ctx) return null;
|
|
148
|
-
const mergedRef = mergeRefs(ctx.triggerRef, ref);
|
|
149
|
-
const handleClick = (e) => {
|
|
150
|
-
ctx.setOpen(true);
|
|
151
|
-
onClick?.(e);
|
|
152
|
-
};
|
|
153
|
-
return /* @__PURE__ */ React4.createElement("button", { ref: mergedRef, type: "button", onClick: handleClick, ...props }, children);
|
|
154
|
-
}
|
|
155
|
-
);
|
|
156
|
-
DialogTrigger.displayName = "DialogTrigger";
|
|
157
|
-
var DialogPortal = ({ children }) => {
|
|
158
|
-
const ctx = React4.useContext(DialogContext);
|
|
159
|
-
if (!ctx?.open) return null;
|
|
160
|
-
return /* @__PURE__ */ React4.createElement(Portal, null, children);
|
|
161
|
-
};
|
|
162
|
-
var DialogClose = React4.forwardRef(({ onClick, ...props }, ref) => {
|
|
163
|
-
const ctx = React4.useContext(DialogContext);
|
|
164
|
-
return /* @__PURE__ */ React4.createElement(
|
|
165
|
-
"button",
|
|
166
|
-
{
|
|
167
|
-
ref,
|
|
168
|
-
type: "button",
|
|
169
|
-
onClick: (e) => {
|
|
170
|
-
ctx?.setOpen(false);
|
|
171
|
-
onClick?.(e);
|
|
172
|
-
},
|
|
173
|
-
...props
|
|
174
|
-
}
|
|
175
|
-
);
|
|
176
|
-
});
|
|
177
|
-
DialogClose.displayName = "DialogClose";
|
|
178
|
-
var DialogOverlay = React4.forwardRef(({ className, ...props }, ref) => {
|
|
179
|
-
const ctx = React4.useContext(DialogContext);
|
|
180
|
-
if (!ctx?.open) return null;
|
|
181
|
-
return /* @__PURE__ */ React4.createElement(
|
|
182
|
-
"div",
|
|
183
|
-
{
|
|
184
|
-
ref,
|
|
185
|
-
className: cn("fixed inset-0 z-[9999] bg-black/80", className),
|
|
186
|
-
...props
|
|
187
|
-
}
|
|
188
|
-
);
|
|
189
|
-
});
|
|
190
|
-
DialogOverlay.displayName = "DialogOverlay";
|
|
191
|
-
var DialogContent = React4.forwardRef(
|
|
192
|
-
({ className, children, onPointerDownOutside, onEscapeKeyDown, showCloseButton = true, overlayClassName, ...props }, ref) => {
|
|
193
|
-
const ctx = React4.useContext(DialogContext);
|
|
194
|
-
const open = !!ctx?.open;
|
|
195
|
-
useOnClickOutside(
|
|
196
|
-
[ctx?.contentRef ?? { current: null }, ctx?.triggerRef ?? { current: null }],
|
|
197
|
-
(evt) => {
|
|
198
|
-
onPointerDownOutside?.(evt);
|
|
199
|
-
if (!evt.defaultPrevented) {
|
|
200
|
-
ctx?.setOpen(false);
|
|
201
|
-
}
|
|
202
|
-
},
|
|
203
|
-
open
|
|
204
|
-
);
|
|
205
|
-
React4.useEffect(() => {
|
|
206
|
-
if (!open) return;
|
|
207
|
-
const onKey = (e) => {
|
|
208
|
-
if (e.key !== "Escape") return;
|
|
209
|
-
onEscapeKeyDown?.(e);
|
|
210
|
-
if (!e.defaultPrevented) {
|
|
211
|
-
ctx?.setOpen(false);
|
|
212
|
-
}
|
|
213
|
-
};
|
|
214
|
-
document.addEventListener("keydown", onKey);
|
|
215
|
-
return () => document.removeEventListener("keydown", onKey);
|
|
216
|
-
}, [ctx, onEscapeKeyDown, open]);
|
|
217
|
-
if (!ctx || !open) return null;
|
|
218
|
-
return /* @__PURE__ */ React4.createElement(DialogPortal, null, /* @__PURE__ */ React4.createElement(DialogOverlay, { className: overlayClassName }), /* @__PURE__ */ React4.createElement(
|
|
219
|
-
"div",
|
|
220
|
-
{
|
|
221
|
-
ref: mergeRefs(ctx.contentRef, ref),
|
|
222
|
-
className: cn(
|
|
223
|
-
"fixed left-[50%] top-[50%] z-[10000] grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg sm:rounded-lg",
|
|
224
|
-
className
|
|
225
|
-
),
|
|
226
|
-
...props
|
|
227
|
-
},
|
|
228
|
-
children,
|
|
229
|
-
showCloseButton ? /* @__PURE__ */ React4.createElement(DialogClose, { className: "absolute right-4 top-4 rounded-sm opacity-70 transition-opacity hover:opacity-100" }, /* @__PURE__ */ React4.createElement(X, { className: "h-4 w-4" }), /* @__PURE__ */ React4.createElement("span", { className: "sr-only" }, "Close")) : null
|
|
230
|
-
));
|
|
231
|
-
}
|
|
232
|
-
);
|
|
233
|
-
DialogContent.displayName = "DialogContent";
|
|
234
|
-
var DialogHeader = ({
|
|
235
|
-
className,
|
|
236
|
-
...props
|
|
237
|
-
}) => /* @__PURE__ */ React4.createElement(
|
|
238
|
-
"div",
|
|
239
|
-
{
|
|
240
|
-
className: cn(
|
|
241
|
-
"flex flex-col space-y-1.5 text-center sm:text-left",
|
|
242
|
-
className
|
|
243
|
-
),
|
|
244
|
-
...props
|
|
245
|
-
}
|
|
246
|
-
);
|
|
247
|
-
DialogHeader.displayName = "DialogHeader";
|
|
248
|
-
var DialogFooter = ({
|
|
249
|
-
className,
|
|
250
|
-
...props
|
|
251
|
-
}) => /* @__PURE__ */ React4.createElement(
|
|
252
|
-
"div",
|
|
253
|
-
{
|
|
254
|
-
className: cn(
|
|
255
|
-
"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",
|
|
256
|
-
className
|
|
257
|
-
),
|
|
258
|
-
...props
|
|
259
|
-
}
|
|
260
|
-
);
|
|
261
|
-
DialogFooter.displayName = "DialogFooter";
|
|
262
|
-
var DialogTitle = React4.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React4.createElement(
|
|
263
|
-
"h2",
|
|
264
|
-
{
|
|
265
|
-
ref,
|
|
266
|
-
className: cn(
|
|
267
|
-
"text-lg font-semibold leading-none tracking-tight",
|
|
268
|
-
className
|
|
269
|
-
),
|
|
270
|
-
...props
|
|
271
|
-
}
|
|
272
|
-
));
|
|
273
|
-
DialogTitle.displayName = "DialogTitle";
|
|
274
|
-
var DialogDescription = React4.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React4.createElement(
|
|
275
|
-
"p",
|
|
276
|
-
{
|
|
277
|
-
ref,
|
|
278
|
-
className: cn("text-sm text-muted-foreground", className),
|
|
279
|
-
...props
|
|
280
|
-
}
|
|
281
|
-
));
|
|
282
|
-
DialogDescription.displayName = "DialogDescription";
|
|
283
|
-
|
|
284
|
-
export { Button, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, Input, Portal, buttonVariants, mergeRefs, useControllableState, useOnClickOutside };
|
|
285
|
-
//# sourceMappingURL=chunk-MMDSZIXD.mjs.map
|
|
286
|
-
//# sourceMappingURL=chunk-MMDSZIXD.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/common/components/Button.tsx","../src/common/components/Input.tsx","../src/common/components/internal/ui-core.tsx","../src/common/components/Dialog.tsx"],"names":["React","React2","React3"],"mappings":";;;;;;AAKA,IAAM,cAAA,GAAiB,GAAA;AAAA,EACrB,uSAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,OAAA,EAAS;AAAA,QACP,OAAA,EACE,+DAAA;AAAA,QACF,WAAA,EACE,8EAAA;AAAA,QACF,OAAA,EACE,0FAAA;AAAA,QACF,SAAA,EACE,wEAAA;AAAA,QACF,KAAA,EAAO,8CAAA;AAAA,QACP,IAAA,EAAM;AAAA,OACR;AAAA,MACA,IAAA,EAAM;AAAA,QACJ,OAAA,EAAS,eAAA;AAAA,QACT,EAAA,EAAI,6BAAA;AAAA,QACJ,EAAA,EAAI,sBAAA;AAAA,QACJ,IAAA,EAAM;AAAA;AACR,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,OAAA,EAAS,SAAA;AAAA,MACT,IAAA,EAAM;AAAA;AACR;AAEJ;AAQA,IAAM,MAAA,GAAeA,MAAA,CAAA,UAAA;AAAA,EACnB,CAAC,EAAE,SAAA,EAAW,OAAA,GAAU,SAAA,EAAW,IAAA,GAAO,SAAA,EAAW,OAAA,GAAU,KAAA,EAAO,QAAA,EAAU,GAAG,KAAA,IAAS,GAAA,KAAQ;AAClG,IAAA,IAAI,OAAA,IAAiBA,MAAA,CAAA,cAAA,CAAe,QAAQ,CAAA,EAAG;AAC7C,MAAA,MAAM,aAAa,QAAA,CAAS,KAAA;AAC5B,MAAA,OAAaA,oBAAa,QAAA,EAAU;AAAA,QAClC,GAAI,KAAA;AAAA,QACJ,SAAA,EAAW,EAAA,CAAG,cAAA,CAAe,EAAE,OAAA,EAAS,MAAM,SAAA,EAAW,CAAA,EAAG,UAAA,CAAW,SAAS;AAAA,OACjF,CAAA;AAAA,IACH;AAEA,IAAA,uBACEA,MAAA,CAAA,aAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,GAAG,cAAA,CAAe,EAAE,SAAS,IAAA,EAAM,SAAA,EAAW,CAAC,CAAA;AAAA,QAC1D,GAAA;AAAA,QACC,GAAG;AAAA,OAAA;AAAA,MAEH;AAAA,KACH;AAAA,EAEJ;AACF;AACA,MAAA,CAAO,WAAA,GAAc,QAAA;AC1DrB,IAAM,KAAA,GAAcC,MAAA,CAAA,UAAA;AAAA,EAClB,CAAC,EAAE,SAAA,EAAW,MAAM,GAAG,KAAA,IAAS,GAAA,KAAQ;AACtC,IAAA,uBACEA,MAAA,CAAA,aAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACC,IAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,yWAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,GAAA;AAAA,QACC,GAAI;AAAA;AAAA,KACP;AAAA,EAEJ;AACF;AACA,KAAA,CAAM,WAAA,GAAc,OAAA;ACdb,SAAS,oBAAA,CAAwB;AAAA,EACtC,KAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAA,EAIG;AACD,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAUC,gBAAY,YAAY,CAAA;AAC9D,EAAA,MAAM,eAAe,KAAA,KAAU,MAAA;AAC/B,EAAA,MAAM,KAAA,GAAQ,eAAgB,KAAA,GAAc,QAAA;AAE5C,EAAA,MAAM,QAAA,GAAiBA,MAAA,CAAA,WAAA;AAAA,IACrB,CAAC,IAAA,KAAY;AACX,MAAA,IAAI,CAAC,YAAA,EAAc,WAAA,CAAY,IAAI,CAAA;AACnC,MAAA,QAAA,GAAW,IAAI,CAAA;AAAA,IACjB,CAAA;AAAA,IACA,CAAC,cAAc,QAAQ;AAAA,GACzB;AAEA,EAAA,OAAO,CAAC,OAAO,QAAQ,CAAA;AACzB;AAEO,SAAS,MAAA,CAAO;AAAA,EACrB,QAAA;AAAA,EACA;AACF,CAAA,EAGG;AACD,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAUA,gBAAS,KAAK,CAAA;AAElD,EAAMA,iBAAU,MAAM;AACpB,IAAA,UAAA,CAAW,IAAI,CAAA;AAAA,EACjB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,IAAI,CAAC,SAAS,OAAO,IAAA;AACrB,EAAA,OAAO,YAAA,CAAa,QAAA,EAAU,SAAA,IAAa,QAAA,CAAS,IAAI,CAAA;AAC1D;AAEO,SAAS,iBAAA,CACd,IAAA,EACA,OAAA,EACA,OAAA,EACA;AACA,EAAMA,iBAAU,MAAM;AACpB,IAAA,IAAI,CAAC,OAAA,EAAS;AAEd,IAAA,MAAM,QAAA,GAAW,CAAC,KAAA,KAAmC;AACnD,MAAA,MAAM,SAAS,KAAA,CAAM,MAAA;AACrB,MAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,IAAA,CAAK,CAAC,GAAA,KAAQ;AACvC,QAAA,MAAM,KAAK,GAAA,CAAI,OAAA;AACf,QAAA,OAAO,EAAA,IAAM,EAAA,CAAG,QAAA,CAAS,MAAM,CAAA;AAAA,MACjC,CAAC,CAAA;AACD,MAAA,IAAI,CAAC,aAAA,EAAe;AAClB,QAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,MACf;AAAA,IACF,CAAA;AAEA,IAAA,QAAA,CAAS,gBAAA,CAAiB,aAAa,QAAQ,CAAA;AAC/C,IAAA,QAAA,CAAS,gBAAA,CAAiB,cAAc,QAAQ,CAAA;AAChD,IAAA,OAAO,MAAM;AACX,MAAA,QAAA,CAAS,mBAAA,CAAoB,aAAa,QAAQ,CAAA;AAClD,MAAA,QAAA,CAAS,mBAAA,CAAoB,cAAc,QAAQ,CAAA;AAAA,IACrD,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,IAAA,EAAM,OAAA,EAAS,OAAO,CAAC,CAAA;AAC7B;AAEO,SAAS,aACX,IAAA,EACmB;AACtB,EAAA,OAAO,CAAC,KAAA,KAAU;AAChB,IAAA,IAAA,CAAK,OAAA,CAAQ,CAAC,GAAA,KAAQ;AACpB,MAAA,IAAI,CAAC,GAAA,EAAK;AACV,MAAA,IAAI,OAAO,QAAQ,UAAA,EAAY;AAC7B,QAAA,GAAA,CAAI,KAAK,CAAA;AAAA,MACX,CAAA,MAAO;AACL,QAAC,IAAyC,OAAA,GAAU,KAAA;AAAA,MACtD;AAAA,IACF,CAAC,CAAA;AAAA,EACH,CAAA;AACF;;;ACxEA,IAAM,aAAA,GAAsB,qBAAyC,IAAI,CAAA;AASzE,IAAM,MAAA,GAAS,CAAC,EAAE,IAAA,EAAM,cAAc,KAAA,EAAO,YAAA,EAAc,UAAS,KAAmB;AACrF,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAI,oBAAA,CAAqB;AAAA,IAC/C,KAAA,EAAO,IAAA;AAAA,IACP,YAAA,EAAc,WAAA;AAAA,IACd,QAAA,EAAU;AAAA,GACX,CAAA;AACD,EAAA,MAAM,UAAA,GAAmB,cAA0B,IAAI,CAAA;AACvD,EAAA,MAAM,UAAA,GAAmB,cAAuB,IAAI,CAAA;AAEpD,EAAA,uBACE,MAAA,CAAA,aAAA,CAAC,aAAA,CAAc,QAAA,EAAd,EAAuB,KAAA,EAAO,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAA,EAAS,SAAA,EAAW,UAAA,EAAY,UAAA,MAC5E,QACH,CAAA;AAEJ;AAOA,IAAM,aAAA,GAAsB,MAAA,CAAA,UAAA;AAAA,EAC1B,CAAC,EAAE,QAAA,EAAU,SAAS,GAAG,KAAA,IAAS,GAAA,KAAQ;AACxC,IAAA,MAAM,GAAA,GAAY,kBAAW,aAAa,CAAA;AAC1C,IAAA,IAAI,CAAC,KAAK,OAAO,IAAA;AAEjB,IAAA,MAAM,SAAA,GAAY,SAAA,CAA6B,GAAA,CAAI,UAAA,EAAY,GAAG,CAAA;AAElE,IAAA,MAAM,WAAA,GAAc,CAAC,CAAA,KAA2C;AAC9D,MAAA,GAAA,CAAI,QAAQ,IAAI,CAAA;AAChB,MAAA,OAAA,GAAU,CAAC,CAAA;AAAA,IACb,CAAA;AAEA,IAAA,uBACE,MAAA,CAAA,aAAA,CAAC,QAAA,EAAA,EAAO,GAAA,EAAK,SAAA,EAAW,IAAA,EAAK,UAAS,OAAA,EAAS,WAAA,EAAc,GAAI,KAAA,EAAA,EAC9D,QACH,CAAA;AAAA,EAEJ;AACF;AACA,aAAA,CAAc,WAAA,GAAc,eAAA;AAE5B,IAAM,YAAA,GAAe,CAAC,EAAE,QAAA,EAAS,KAAqC;AACpE,EAAA,MAAM,GAAA,GAAY,kBAAW,aAAa,CAAA;AAC1C,EAAA,IAAI,CAAC,GAAA,EAAK,IAAA,EAAM,OAAO,IAAA;AACvB,EAAA,uBAAO,MAAA,CAAA,aAAA,CAAC,cAAQ,QAAS,CAAA;AAC3B;AAEA,IAAM,WAAA,GAAoB,kBAGxB,CAAC,EAAE,SAAS,GAAG,KAAA,IAAS,GAAA,KAAQ;AAChC,EAAA,MAAM,GAAA,GAAY,kBAAW,aAAa,CAAA;AAC1C,EAAA,uBACE,MAAA,CAAA,aAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,IAAA,EAAK,QAAA;AAAA,MACL,OAAA,EAAS,CAAC,CAAA,KAAM;AACd,QAAA,GAAA,EAAK,QAAQ,KAAK,CAAA;AAClB,QAAA,OAAA,GAAU,CAAC,CAAA;AAAA,MACb,CAAA;AAAA,MACC,GAAI;AAAA;AAAA,GACP;AAEJ,CAAC;AACD,WAAA,CAAY,WAAA,GAAc,aAAA;AAE1B,IAAM,aAAA,GAAsB,kBAG1B,CAAC,EAAE,WAAW,GAAG,KAAA,IAAS,GAAA,KAAQ;AAClC,EAAA,MAAM,GAAA,GAAY,kBAAW,aAAa,CAAA;AAC1C,EAAA,IAAI,CAAC,GAAA,EAAK,IAAA,EAAM,OAAO,IAAA;AACvB,EAAA,uBACE,MAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,EAAA,CAAG,oCAAA,EAAsC,SAAS,CAAA;AAAA,MAC5D,GAAI;AAAA;AAAA,GACP;AAEJ,CAAC;AACD,aAAA,CAAc,WAAA,GAAc,eAAA;AAS5B,IAAM,aAAA,GAAsB,MAAA,CAAA,UAAA;AAAA,EAC1B,CAAC,EAAE,SAAA,EAAW,QAAA,EAAU,oBAAA,EAAsB,eAAA,EAAiB,eAAA,GAAkB,IAAA,EAAM,gBAAA,EAAkB,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AAC3H,IAAA,MAAM,GAAA,GAAY,kBAAW,aAAa,CAAA;AAC1C,IAAA,MAAM,IAAA,GAAO,CAAC,CAAC,GAAA,EAAK,IAAA;AAEpB,IAAA,iBAAA;AAAA,MACE,CAAC,GAAA,EAAK,UAAA,IAAc,EAAE,OAAA,EAAS,IAAA,EAAK,EAAG,GAAA,EAAK,UAAA,IAAc,EAAE,OAAA,EAAS,IAAA,EAAM,CAAA;AAAA,MAC3E,CAAC,GAAA,KAAQ;AACP,QAAA,oBAAA,GAAuB,GAAmB,CAAA;AAC1C,QAAA,IAAI,CAAE,IAAc,gBAAA,EAAkB;AACpC,UAAA,GAAA,EAAK,QAAQ,KAAK,CAAA;AAAA,QACpB;AAAA,MACF,CAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAM,iBAAU,MAAM;AACpB,MAAA,IAAI,CAAC,IAAA,EAAM;AACX,MAAA,MAAM,KAAA,GAAQ,CAAC,CAAA,KAAqB;AAClC,QAAA,IAAI,CAAA,CAAE,QAAQ,QAAA,EAAU;AACxB,QAAA,eAAA,GAAkB,CAAC,CAAA;AACnB,QAAA,IAAI,CAAC,EAAE,gBAAA,EAAkB;AACvB,UAAA,GAAA,EAAK,QAAQ,KAAK,CAAA;AAAA,QACpB;AAAA,MACF,CAAA;AACA,MAAA,QAAA,CAAS,gBAAA,CAAiB,WAAW,KAAK,CAAA;AAC1C,MAAA,OAAO,MAAM,QAAA,CAAS,mBAAA,CAAoB,SAAA,EAAW,KAAK,CAAA;AAAA,IAC5D,CAAA,EAAG,CAAC,GAAA,EAAK,eAAA,EAAiB,IAAI,CAAC,CAAA;AAE/B,IAAA,IAAI,CAAC,GAAA,IAAO,CAAC,IAAA,EAAM,OAAO,IAAA;AAE1B,IAAA,4CACG,YAAA,EAAA,IAAA,kBACC,MAAA,CAAA,aAAA,CAAC,aAAA,EAAA,EAAc,SAAA,EAAW,kBAAkB,CAAA,kBAC5C,MAAA,CAAA,aAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAK,SAAA,CAAU,GAAA,CAAI,UAAA,EAAY,GAAG,CAAA;AAAA,QAClC,SAAA,EAAW,EAAA;AAAA,UACT,wJAAA;AAAA,UACA;AAAA,SACF;AAAA,QACC,GAAI;AAAA,OAAA;AAAA,MAEJ,QAAA;AAAA,MACA,kCACC,MAAA,CAAA,aAAA,CAAC,WAAA,EAAA,EAAY,SAAA,EAAU,mFAAA,EAAA,uCACpB,CAAA,EAAA,EAAE,SAAA,EAAU,SAAA,EAAU,CAAA,uCACtB,MAAA,EAAA,EAAK,SAAA,EAAU,SAAA,EAAA,EAAU,OAAK,CACjC,CAAA,GACE;AAAA,KAER,CAAA;AAAA,EAEJ;AACF;AACA,aAAA,CAAc,WAAA,GAAc,eAAA;AAE5B,IAAM,eAAe,CAAC;AAAA,EACpB,SAAA;AAAA,EACA,GAAG;AACL,CAAA,qBACE,MAAA,CAAA,aAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACC,SAAA,EAAW,EAAA;AAAA,MACT,oDAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAI;AAAA;AACP;AAEF,YAAA,CAAa,WAAA,GAAc,cAAA;AAE3B,IAAM,eAAe,CAAC;AAAA,EACpB,SAAA;AAAA,EACA,GAAG;AACL,CAAA,qBACE,MAAA,CAAA,aAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACC,SAAA,EAAW,EAAA;AAAA,MACT,+DAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAI;AAAA;AACP;AAEF,YAAA,CAAa,WAAA,GAAc,cAAA;AAE3B,IAAM,WAAA,GAAoB,kBAGxB,CAAC,EAAE,WAAW,GAAG,KAAA,IAAS,GAAA,qBAC1B,MAAA,CAAA,aAAA;AAAA,EAAC,IAAA;AAAA,EAAA;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA,MACT,mDAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAI;AAAA;AACP,CACD;AACD,WAAA,CAAY,WAAA,GAAc,aAAA;AAE1B,IAAM,iBAAA,GAA0B,kBAG9B,CAAC,EAAE,WAAW,GAAG,KAAA,IAAS,GAAA,qBAC1B,MAAA,CAAA,aAAA;AAAA,EAAC,GAAA;AAAA,EAAA;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA,CAAG,+BAAA,EAAiC,SAAS,CAAA;AAAA,IACvD,GAAI;AAAA;AACP,CACD;AACD,iBAAA,CAAkB,WAAA,GAAc,mBAAA","file":"chunk-MMDSZIXD.mjs","sourcesContent":["import * as React from \"react\"\nimport { cva } from \"class-variance-authority\"\n\nimport { cn } from \"../utils\"\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\n {\n variants: {\n variant: {\n default:\n \"bg-primary text-primary-foreground shadow hover:bg-primary/90\",\n destructive:\n \"bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90\",\n outline:\n \"border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground\",\n secondary:\n \"bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80\",\n ghost: \"hover:bg-accent hover:text-accent-foreground\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-9 px-4 py-2\",\n sm: \"h-8 rounded-md px-3 text-xs\",\n lg: \"h-10 rounded-md px-8\",\n icon: \"h-9 w-9\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nexport interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: 'default' | 'destructive' | 'outline' | 'secondary' | 'ghost' | 'link';\n size?: 'default' | 'sm' | 'lg' | 'icon';\n asChild?: boolean;\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant = 'default', size = 'default', asChild = false, children, ...props }, ref) => {\n if (asChild && React.isValidElement(children)) {\n const childProps = children.props as { className?: string }\n return React.cloneElement(children, {\n ...(props as object),\n className: cn(buttonVariants({ variant, size, className }), childProps.className),\n })\n }\n\n return (\n <button\n className={cn(buttonVariants({ variant, size, className }))}\n ref={ref}\n {...props}\n >\n {children}\n </button>\n )\n }\n)\nButton.displayName = \"Button\"\n\nexport { Button, buttonVariants }\n","import * as React from \"react\"\n\nimport { cn } from \"../utils\"\n\nconst Input = React.forwardRef<HTMLInputElement, React.ComponentProps<\"input\">>(\n ({ className, type, ...props }, ref) => {\n return (\n <input\n type={type}\n className={cn(\n \"flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-base shadow-sm transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n className\n )}\n ref={ref}\n {...(props as any)}\n />\n )\n }\n)\nInput.displayName = \"Input\"\n\nexport { Input }\n","\"use client\";\n\nimport * as React from \"react\";\nimport { createPortal } from \"react-dom\";\n\nexport function useControllableState<T>({\n value,\n defaultValue,\n onChange,\n}: {\n value?: T;\n defaultValue: T;\n onChange?: (next: T) => void;\n}) {\n const [internal, setInternal] = React.useState<T>(defaultValue);\n const isControlled = value !== undefined;\n const state = isControlled ? (value as T) : internal;\n\n const setState = React.useCallback(\n (next: T) => {\n if (!isControlled) setInternal(next);\n onChange?.(next);\n },\n [isControlled, onChange]\n );\n\n return [state, setState] as const;\n}\n\nexport function Portal({\n children,\n container,\n}: {\n children: React.ReactNode;\n container?: Element | null;\n}) {\n const [mounted, setMounted] = React.useState(false);\n\n React.useEffect(() => {\n setMounted(true);\n }, []);\n\n if (!mounted) return null;\n return createPortal(children, container ?? document.body);\n}\n\nexport function useOnClickOutside(\n refs: Array<React.RefObject<HTMLElement | null>>,\n handler: (event: MouseEvent | TouchEvent) => void,\n enabled: boolean\n) {\n React.useEffect(() => {\n if (!enabled) return;\n\n const listener = (event: MouseEvent | TouchEvent) => {\n const target = event.target as Node;\n const clickedInside = refs.some((ref) => {\n const el = ref.current;\n return el && el.contains(target);\n });\n if (!clickedInside) {\n handler(event);\n }\n };\n\n document.addEventListener(\"mousedown\", listener);\n document.addEventListener(\"touchstart\", listener);\n return () => {\n document.removeEventListener(\"mousedown\", listener);\n document.removeEventListener(\"touchstart\", listener);\n };\n }, [refs, handler, enabled]);\n}\n\nexport function mergeRefs<T>(\n ...refs: Array<React.Ref<T> | undefined>\n): React.RefCallback<T> {\n return (value) => {\n refs.forEach((ref) => {\n if (!ref) return;\n if (typeof ref === \"function\") {\n ref(value);\n } else {\n (ref as React.MutableRefObject<T | null>).current = value;\n }\n });\n };\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { X } from \"lucide-react\"\n\nimport { cn } from \"../utils\"\nimport { mergeRefs, Portal, useControllableState, useOnClickOutside } from \"./internal/ui-core\"\n\ninterface DialogContextValue {\n open: boolean\n setOpen: (open: boolean) => void\n triggerRef: React.RefObject<HTMLButtonElement>\n contentRef: React.RefObject<HTMLDivElement>\n}\n\nconst DialogContext = React.createContext<DialogContextValue | null>(null)\n\ninterface DialogProps {\n open?: boolean\n defaultOpen?: boolean\n onOpenChange?: (open: boolean) => void\n children: React.ReactNode\n}\n\nconst Dialog = ({ open, defaultOpen = false, onOpenChange, children }: DialogProps) => {\n const [isOpen, setIsOpen] = useControllableState({\n value: open,\n defaultValue: defaultOpen,\n onChange: onOpenChange,\n })\n const triggerRef = React.useRef<HTMLButtonElement>(null)\n const contentRef = React.useRef<HTMLDivElement>(null)\n\n return (\n <DialogContext.Provider value={{ open: isOpen, setOpen: setIsOpen, triggerRef, contentRef }}>\n {children}\n </DialogContext.Provider>\n )\n}\n\ninterface TriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n asChild?: boolean\n children: React.ReactNode\n}\n\nconst DialogTrigger = React.forwardRef<HTMLButtonElement, TriggerProps>(\n ({ children, onClick, ...props }, ref) => {\n const ctx = React.useContext(DialogContext)\n if (!ctx) return null\n\n const mergedRef = mergeRefs<HTMLButtonElement>(ctx.triggerRef, ref)\n\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n ctx.setOpen(true)\n onClick?.(e)\n }\n\n return (\n <button ref={mergedRef} type=\"button\" onClick={handleClick} {...(props as any)}>\n {children}\n </button>\n )\n }\n)\nDialogTrigger.displayName = \"DialogTrigger\"\n\nconst DialogPortal = ({ children }: { children: React.ReactNode }) => {\n const ctx = React.useContext(DialogContext)\n if (!ctx?.open) return null\n return <Portal>{children}</Portal>\n}\n\nconst DialogClose = React.forwardRef<\n HTMLButtonElement,\n React.ButtonHTMLAttributes<HTMLButtonElement>\n>(({ onClick, ...props }, ref) => {\n const ctx = React.useContext(DialogContext)\n return (\n <button\n ref={ref}\n type=\"button\"\n onClick={(e) => {\n ctx?.setOpen(false)\n onClick?.(e)\n }}\n {...(props as any)}\n />\n )\n})\nDialogClose.displayName = \"DialogClose\"\n\nconst DialogOverlay = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => {\n const ctx = React.useContext(DialogContext)\n if (!ctx?.open) return null\n return (\n <div\n ref={ref}\n className={cn(\"fixed inset-0 z-[9999] bg-black/80\", className)}\n {...(props as any)}\n />\n )\n})\nDialogOverlay.displayName = \"DialogOverlay\"\n\nexport interface DialogContentProps extends React.HTMLAttributes<HTMLDivElement> {\n onPointerDownOutside?: (event: PointerEvent) => void\n onEscapeKeyDown?: (event: KeyboardEvent) => void\n showCloseButton?: boolean\n overlayClassName?: string\n}\n\nconst DialogContent = React.forwardRef<HTMLDivElement, DialogContentProps>(\n ({ className, children, onPointerDownOutside, onEscapeKeyDown, showCloseButton = true, overlayClassName, ...props }, ref) => {\n const ctx = React.useContext(DialogContext)\n const open = !!ctx?.open\n\n useOnClickOutside(\n [ctx?.contentRef ?? { current: null }, ctx?.triggerRef ?? { current: null }],\n (evt) => {\n onPointerDownOutside?.(evt as PointerEvent)\n if (!(evt as Event).defaultPrevented) {\n ctx?.setOpen(false)\n }\n },\n open\n )\n\n React.useEffect(() => {\n if (!open) return\n const onKey = (e: KeyboardEvent) => {\n if (e.key !== \"Escape\") return\n onEscapeKeyDown?.(e)\n if (!e.defaultPrevented) {\n ctx?.setOpen(false)\n }\n }\n document.addEventListener(\"keydown\", onKey)\n return () => document.removeEventListener(\"keydown\", onKey)\n }, [ctx, onEscapeKeyDown, open])\n\n if (!ctx || !open) return null\n\n return (\n <DialogPortal>\n <DialogOverlay className={overlayClassName} />\n <div\n ref={mergeRefs(ctx.contentRef, ref)}\n className={cn(\n \"fixed left-[50%] top-[50%] z-[10000] grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg sm:rounded-lg\",\n className\n )}\n {...(props as any)}\n >\n {children}\n {showCloseButton ? (\n <DialogClose className=\"absolute right-4 top-4 rounded-sm opacity-70 transition-opacity hover:opacity-100\">\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogClose>\n ) : null}\n </div>\n </DialogPortal>\n )\n }\n)\nDialogContent.displayName = \"DialogContent\"\n\nconst DialogHeader = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col space-y-1.5 text-center sm:text-left\",\n className\n )}\n {...(props as any)}\n />\n)\nDialogHeader.displayName = \"DialogHeader\"\n\nconst DialogFooter = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2\",\n className\n )}\n {...(props as any)}\n />\n)\nDialogFooter.displayName = \"DialogFooter\"\n\nconst DialogTitle = React.forwardRef<\n HTMLHeadingElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <h2\n ref={ref}\n className={cn(\n \"text-lg font-semibold leading-none tracking-tight\",\n className\n )}\n {...(props as any)}\n />\n))\nDialogTitle.displayName = \"DialogTitle\"\n\nconst DialogDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <p\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...(props as any)}\n />\n))\nDialogDescription.displayName = \"DialogDescription\"\n\nexport {\n Dialog,\n DialogPortal,\n DialogOverlay,\n DialogTrigger,\n DialogClose,\n DialogContent,\n DialogHeader,\n DialogFooter,\n DialogTitle,\n DialogDescription,\n}\n"]}
|
package/dist/chunk-N2O3OX5Y.mjs
DELETED
|
@@ -1,243 +0,0 @@
|
|
|
1
|
-
import { useAiChat } from './chunk-GS4SAW25.mjs';
|
|
2
|
-
import { __require } from './chunk-MAI35PU6.mjs';
|
|
3
|
-
import React, { useState, useMemo, useEffect } from 'react';
|
|
4
|
-
|
|
5
|
-
var ReactNative = __require("react-native");
|
|
6
|
-
var {
|
|
7
|
-
Modal,
|
|
8
|
-
View,
|
|
9
|
-
Text,
|
|
10
|
-
TextInput,
|
|
11
|
-
Pressable,
|
|
12
|
-
ScrollView,
|
|
13
|
-
SafeAreaView,
|
|
14
|
-
KeyboardAvoidingView,
|
|
15
|
-
Platform,
|
|
16
|
-
StyleSheet
|
|
17
|
-
} = ReactNative;
|
|
18
|
-
var styles = StyleSheet.create({
|
|
19
|
-
overlay: {
|
|
20
|
-
flex: 1,
|
|
21
|
-
backgroundColor: "rgba(15, 23, 42, 0.45)",
|
|
22
|
-
justifyContent: "center",
|
|
23
|
-
padding: 16
|
|
24
|
-
},
|
|
25
|
-
container: {
|
|
26
|
-
backgroundColor: "#ffffff",
|
|
27
|
-
borderRadius: 16,
|
|
28
|
-
maxHeight: "90%",
|
|
29
|
-
overflow: "hidden"
|
|
30
|
-
},
|
|
31
|
-
header: {
|
|
32
|
-
paddingHorizontal: 16,
|
|
33
|
-
paddingVertical: 12,
|
|
34
|
-
borderBottomWidth: 1,
|
|
35
|
-
borderBottomColor: "#e2e8f0",
|
|
36
|
-
flexDirection: "row",
|
|
37
|
-
justifyContent: "space-between",
|
|
38
|
-
alignItems: "center"
|
|
39
|
-
},
|
|
40
|
-
title: {
|
|
41
|
-
fontSize: 16,
|
|
42
|
-
fontWeight: "600",
|
|
43
|
-
color: "#0f172a"
|
|
44
|
-
},
|
|
45
|
-
closeText: {
|
|
46
|
-
fontSize: 12,
|
|
47
|
-
color: "#64748b"
|
|
48
|
-
},
|
|
49
|
-
list: {
|
|
50
|
-
paddingHorizontal: 16,
|
|
51
|
-
paddingVertical: 12
|
|
52
|
-
},
|
|
53
|
-
placeholder: {
|
|
54
|
-
alignItems: "center",
|
|
55
|
-
paddingVertical: 24
|
|
56
|
-
},
|
|
57
|
-
placeholderText: {
|
|
58
|
-
fontSize: 12,
|
|
59
|
-
color: "#94a3b8"
|
|
60
|
-
},
|
|
61
|
-
bubbleUser: {
|
|
62
|
-
alignSelf: "flex-end",
|
|
63
|
-
backgroundColor: "#0f172a",
|
|
64
|
-
borderRadius: 16,
|
|
65
|
-
paddingHorizontal: 12,
|
|
66
|
-
paddingVertical: 8,
|
|
67
|
-
marginBottom: 8
|
|
68
|
-
},
|
|
69
|
-
bubbleAssistant: {
|
|
70
|
-
alignSelf: "flex-start",
|
|
71
|
-
backgroundColor: "#ffffff",
|
|
72
|
-
borderWidth: 1,
|
|
73
|
-
borderColor: "#e2e8f0",
|
|
74
|
-
borderRadius: 16,
|
|
75
|
-
paddingHorizontal: 12,
|
|
76
|
-
paddingVertical: 8,
|
|
77
|
-
marginBottom: 8
|
|
78
|
-
},
|
|
79
|
-
bubbleTextUser: {
|
|
80
|
-
color: "#ffffff",
|
|
81
|
-
fontSize: 12
|
|
82
|
-
},
|
|
83
|
-
bubbleText: {
|
|
84
|
-
color: "#1f2937",
|
|
85
|
-
fontSize: 12
|
|
86
|
-
},
|
|
87
|
-
loadingText: {
|
|
88
|
-
color: "#64748b",
|
|
89
|
-
fontSize: 12
|
|
90
|
-
},
|
|
91
|
-
inputContainer: {
|
|
92
|
-
padding: 12,
|
|
93
|
-
borderTopWidth: 1,
|
|
94
|
-
borderTopColor: "#e2e8f0"
|
|
95
|
-
},
|
|
96
|
-
textInput: {
|
|
97
|
-
minHeight: 96,
|
|
98
|
-
borderWidth: 1,
|
|
99
|
-
borderColor: "#e2e8f0",
|
|
100
|
-
borderRadius: 12,
|
|
101
|
-
padding: 10,
|
|
102
|
-
textAlignVertical: "top",
|
|
103
|
-
fontSize: 12,
|
|
104
|
-
color: "#0f172a"
|
|
105
|
-
},
|
|
106
|
-
helperRow: {
|
|
107
|
-
flexDirection: "row",
|
|
108
|
-
alignItems: "center",
|
|
109
|
-
justifyContent: "space-between",
|
|
110
|
-
marginTop: 8
|
|
111
|
-
},
|
|
112
|
-
helperText: {
|
|
113
|
-
flex: 1,
|
|
114
|
-
fontSize: 10,
|
|
115
|
-
color: "#94a3b8",
|
|
116
|
-
paddingRight: 8
|
|
117
|
-
},
|
|
118
|
-
sendButton: {
|
|
119
|
-
backgroundColor: "#0f172a",
|
|
120
|
-
paddingHorizontal: 14,
|
|
121
|
-
paddingVertical: 8,
|
|
122
|
-
borderRadius: 12
|
|
123
|
-
},
|
|
124
|
-
sendButtonDisabled: {
|
|
125
|
-
backgroundColor: "#94a3b8"
|
|
126
|
-
},
|
|
127
|
-
sendButtonText: {
|
|
128
|
-
color: "#ffffff",
|
|
129
|
-
fontSize: 12,
|
|
130
|
-
fontWeight: "600"
|
|
131
|
-
},
|
|
132
|
-
error: {
|
|
133
|
-
marginTop: 8,
|
|
134
|
-
borderWidth: 1,
|
|
135
|
-
borderColor: "#fecdd3",
|
|
136
|
-
backgroundColor: "#fff1f2",
|
|
137
|
-
padding: 8,
|
|
138
|
-
borderRadius: 8
|
|
139
|
-
},
|
|
140
|
-
errorText: {
|
|
141
|
-
color: "#e11d48",
|
|
142
|
-
fontSize: 10
|
|
143
|
-
}
|
|
144
|
-
});
|
|
145
|
-
var AiChatDialog = ({
|
|
146
|
-
open,
|
|
147
|
-
onOpenChange,
|
|
148
|
-
client,
|
|
149
|
-
title = "AI \u5BF9\u8BDD",
|
|
150
|
-
placeholder = "\u8F93\u5165\u4F60\u60F3\u54A8\u8BE2\u7684\u95EE\u9898...",
|
|
151
|
-
systemPrompt,
|
|
152
|
-
template,
|
|
153
|
-
templateVariables,
|
|
154
|
-
initialMessages,
|
|
155
|
-
requestOptions,
|
|
156
|
-
onResponse,
|
|
157
|
-
onError
|
|
158
|
-
}) => {
|
|
159
|
-
const { messages, sendMessage, isLoading, error } = useAiChat({
|
|
160
|
-
client,
|
|
161
|
-
systemPrompt,
|
|
162
|
-
template,
|
|
163
|
-
initialMessages
|
|
164
|
-
});
|
|
165
|
-
const [input, setInput] = useState("");
|
|
166
|
-
const helperText = useMemo(() => {
|
|
167
|
-
return template ? "\u6A21\u677F\u5DF2\u542F\u7528\uFF0C\u652F\u6301 {{input}} \u53D8\u91CF\u3002" : "\u76F4\u63A5\u8F93\u5165\u5373\u53EF\u5F00\u59CB\u5BF9\u8BDD\u3002";
|
|
168
|
-
}, [template]);
|
|
169
|
-
useEffect(() => {
|
|
170
|
-
if (!open) {
|
|
171
|
-
setInput("");
|
|
172
|
-
}
|
|
173
|
-
}, [open]);
|
|
174
|
-
const handleSend = async () => {
|
|
175
|
-
const content = input.trim();
|
|
176
|
-
if (!content || isLoading) return;
|
|
177
|
-
setInput("");
|
|
178
|
-
try {
|
|
179
|
-
const response = await sendMessage(content, {
|
|
180
|
-
...requestOptions,
|
|
181
|
-
template,
|
|
182
|
-
variables: templateVariables
|
|
183
|
-
});
|
|
184
|
-
onResponse?.(response);
|
|
185
|
-
} catch (err) {
|
|
186
|
-
const nextError = err instanceof Error ? err : new Error(String(err));
|
|
187
|
-
onError?.(nextError);
|
|
188
|
-
}
|
|
189
|
-
};
|
|
190
|
-
return /* @__PURE__ */ React.createElement(
|
|
191
|
-
Modal,
|
|
192
|
-
{
|
|
193
|
-
visible: open,
|
|
194
|
-
transparent: true,
|
|
195
|
-
animationType: "fade",
|
|
196
|
-
onRequestClose: () => onOpenChange?.(false)
|
|
197
|
-
},
|
|
198
|
-
/* @__PURE__ */ React.createElement(SafeAreaView, { style: styles.overlay }, /* @__PURE__ */ React.createElement(
|
|
199
|
-
KeyboardAvoidingView,
|
|
200
|
-
{
|
|
201
|
-
behavior: Platform.OS === "ios" ? "padding" : void 0,
|
|
202
|
-
style: styles.container
|
|
203
|
-
},
|
|
204
|
-
/* @__PURE__ */ React.createElement(View, { style: styles.header }, /* @__PURE__ */ React.createElement(Text, { style: styles.title }, title), /* @__PURE__ */ React.createElement(Pressable, { onPress: () => onOpenChange?.(false) }, /* @__PURE__ */ React.createElement(Text, { style: styles.closeText }, "\u5173\u95ED"))),
|
|
205
|
-
/* @__PURE__ */ React.createElement(ScrollView, { contentContainerStyle: styles.list }, messages.length === 0 && /* @__PURE__ */ React.createElement(View, { style: styles.placeholder }, /* @__PURE__ */ React.createElement(Text, { style: styles.placeholderText }, "\u6682\u65E0\u5BF9\u8BDD\u5185\u5BB9"), /* @__PURE__ */ React.createElement(Text, { style: styles.placeholderText }, "\u8F93\u5165\u6D88\u606F\u5F00\u59CB\u4F53\u9A8C AI \u5BF9\u8BDD\u3002")), messages.map((message, index) => {
|
|
206
|
-
const isUser = message.role === "user";
|
|
207
|
-
return /* @__PURE__ */ React.createElement(
|
|
208
|
-
View,
|
|
209
|
-
{
|
|
210
|
-
key: `${message.role}-${index}`,
|
|
211
|
-
style: isUser ? styles.bubbleUser : styles.bubbleAssistant
|
|
212
|
-
},
|
|
213
|
-
/* @__PURE__ */ React.createElement(Text, { style: isUser ? styles.bubbleTextUser : styles.bubbleText }, message.content)
|
|
214
|
-
);
|
|
215
|
-
}), isLoading && /* @__PURE__ */ React.createElement(View, { style: styles.bubbleAssistant }, /* @__PURE__ */ React.createElement(Text, { style: styles.loadingText }, "AI \u6B63\u5728\u601D\u8003..."))),
|
|
216
|
-
/* @__PURE__ */ React.createElement(View, { style: styles.inputContainer }, /* @__PURE__ */ React.createElement(
|
|
217
|
-
TextInput,
|
|
218
|
-
{
|
|
219
|
-
value: input,
|
|
220
|
-
onChangeText: setInput,
|
|
221
|
-
placeholder,
|
|
222
|
-
multiline: true,
|
|
223
|
-
style: styles.textInput
|
|
224
|
-
}
|
|
225
|
-
), /* @__PURE__ */ React.createElement(View, { style: styles.helperRow }, /* @__PURE__ */ React.createElement(Text, { style: styles.helperText }, helperText), /* @__PURE__ */ React.createElement(
|
|
226
|
-
Pressable,
|
|
227
|
-
{
|
|
228
|
-
onPress: handleSend,
|
|
229
|
-
disabled: !input.trim() || isLoading,
|
|
230
|
-
style: [
|
|
231
|
-
styles.sendButton,
|
|
232
|
-
(!input.trim() || isLoading) && styles.sendButtonDisabled
|
|
233
|
-
]
|
|
234
|
-
},
|
|
235
|
-
/* @__PURE__ */ React.createElement(Text, { style: styles.sendButtonText }, isLoading ? "\u53D1\u9001\u4E2D..." : "\u53D1\u9001")
|
|
236
|
-
)), error && /* @__PURE__ */ React.createElement(View, { style: styles.error }, /* @__PURE__ */ React.createElement(Text, { style: styles.errorText }, error.message || "\u5BF9\u8BDD\u51FA\u9519\uFF0C\u8BF7\u91CD\u8BD5\u3002")))
|
|
237
|
-
))
|
|
238
|
-
);
|
|
239
|
-
};
|
|
240
|
-
|
|
241
|
-
export { AiChatDialog };
|
|
242
|
-
//# sourceMappingURL=chunk-N2O3OX5Y.mjs.map
|
|
243
|
-
//# sourceMappingURL=chunk-N2O3OX5Y.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/common/ai/llm/ui/rn/components/AiChatDialog.tsx"],"names":[],"mappings":"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","file":"chunk-N2O3OX5Y.mjs","sourcesContent":["import React, { useEffect, useMemo, useState } from 'react';\nimport { useAiChat } from '../../../hooks/useAiChat';\nimport type { AiChatDialogProps } from '../../types';\n\n// @ts-ignore - react-native will be provided at runtime in RN environment\nconst ReactNative = require('react-native') as any;\nconst {\n Modal,\n View,\n Text,\n TextInput,\n Pressable,\n ScrollView,\n SafeAreaView,\n KeyboardAvoidingView,\n Platform,\n StyleSheet,\n} = ReactNative;\n\nconst styles = StyleSheet.create({\n overlay: {\n flex: 1,\n backgroundColor: 'rgba(15, 23, 42, 0.45)',\n justifyContent: 'center',\n padding: 16,\n },\n container: {\n backgroundColor: '#ffffff',\n borderRadius: 16,\n maxHeight: '90%',\n overflow: 'hidden',\n },\n header: {\n paddingHorizontal: 16,\n paddingVertical: 12,\n borderBottomWidth: 1,\n borderBottomColor: '#e2e8f0',\n flexDirection: 'row',\n justifyContent: 'space-between',\n alignItems: 'center',\n },\n title: {\n fontSize: 16,\n fontWeight: '600',\n color: '#0f172a',\n },\n closeText: {\n fontSize: 12,\n color: '#64748b',\n },\n list: {\n paddingHorizontal: 16,\n paddingVertical: 12,\n },\n placeholder: {\n alignItems: 'center',\n paddingVertical: 24,\n },\n placeholderText: {\n fontSize: 12,\n color: '#94a3b8',\n },\n bubbleUser: {\n alignSelf: 'flex-end',\n backgroundColor: '#0f172a',\n borderRadius: 16,\n paddingHorizontal: 12,\n paddingVertical: 8,\n marginBottom: 8,\n },\n bubbleAssistant: {\n alignSelf: 'flex-start',\n backgroundColor: '#ffffff',\n borderWidth: 1,\n borderColor: '#e2e8f0',\n borderRadius: 16,\n paddingHorizontal: 12,\n paddingVertical: 8,\n marginBottom: 8,\n },\n bubbleTextUser: {\n color: '#ffffff',\n fontSize: 12,\n },\n bubbleText: {\n color: '#1f2937',\n fontSize: 12,\n },\n loadingText: {\n color: '#64748b',\n fontSize: 12,\n },\n inputContainer: {\n padding: 12,\n borderTopWidth: 1,\n borderTopColor: '#e2e8f0',\n },\n textInput: {\n minHeight: 96,\n borderWidth: 1,\n borderColor: '#e2e8f0',\n borderRadius: 12,\n padding: 10,\n textAlignVertical: 'top',\n fontSize: 12,\n color: '#0f172a',\n },\n helperRow: {\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'space-between',\n marginTop: 8,\n },\n helperText: {\n flex: 1,\n fontSize: 10,\n color: '#94a3b8',\n paddingRight: 8,\n },\n sendButton: {\n backgroundColor: '#0f172a',\n paddingHorizontal: 14,\n paddingVertical: 8,\n borderRadius: 12,\n },\n sendButtonDisabled: {\n backgroundColor: '#94a3b8',\n },\n sendButtonText: {\n color: '#ffffff',\n fontSize: 12,\n fontWeight: '600',\n },\n error: {\n marginTop: 8,\n borderWidth: 1,\n borderColor: '#fecdd3',\n backgroundColor: '#fff1f2',\n padding: 8,\n borderRadius: 8,\n },\n errorText: {\n color: '#e11d48',\n fontSize: 10,\n },\n});\n\nexport const AiChatDialog: React.FC<AiChatDialogProps> = ({\n open,\n onOpenChange,\n client,\n title = 'AI 对话',\n placeholder = '输入你想咨询的问题...',\n systemPrompt,\n template,\n templateVariables,\n initialMessages,\n requestOptions,\n onResponse,\n onError,\n}) => {\n const { messages, sendMessage, isLoading, error } = useAiChat({\n client,\n systemPrompt,\n template,\n initialMessages,\n });\n const [input, setInput] = useState('');\n\n const helperText = useMemo(() => {\n return template ? '模板已启用,支持 {{input}} 变量。' : '直接输入即可开始对话。';\n }, [template]);\n\n useEffect(() => {\n if (!open) {\n setInput('');\n }\n }, [open]);\n\n const handleSend = async () => {\n const content = input.trim();\n if (!content || isLoading) return;\n setInput('');\n try {\n const response = await sendMessage(content, {\n ...requestOptions,\n template,\n variables: templateVariables,\n });\n onResponse?.(response);\n } catch (err) {\n const nextError = err instanceof Error ? err : new Error(String(err));\n onError?.(nextError);\n }\n };\n\n return (\n <Modal\n visible={open}\n transparent\n animationType=\"fade\"\n onRequestClose={() => onOpenChange?.(false)}\n >\n <SafeAreaView style={styles.overlay}>\n <KeyboardAvoidingView\n behavior={Platform.OS === 'ios' ? 'padding' : undefined}\n style={styles.container}\n >\n <View style={styles.header}>\n <Text style={styles.title}>{title}</Text>\n <Pressable onPress={() => onOpenChange?.(false)}>\n <Text style={styles.closeText}>关闭</Text>\n </Pressable>\n </View>\n\n <ScrollView contentContainerStyle={styles.list}>\n {messages.length === 0 && (\n <View style={styles.placeholder}>\n <Text style={styles.placeholderText}>暂无对话内容</Text>\n <Text style={styles.placeholderText}>输入消息开始体验 AI 对话。</Text>\n </View>\n )}\n {messages.map((message, index) => {\n const isUser = message.role === 'user';\n return (\n <View\n key={`${message.role}-${index}`}\n style={isUser ? styles.bubbleUser : styles.bubbleAssistant}\n >\n <Text style={isUser ? styles.bubbleTextUser : styles.bubbleText}>\n {message.content}\n </Text>\n </View>\n );\n })}\n {isLoading && (\n <View style={styles.bubbleAssistant}>\n <Text style={styles.loadingText}>AI 正在思考...</Text>\n </View>\n )}\n </ScrollView>\n\n <View style={styles.inputContainer}>\n <TextInput\n value={input}\n onChangeText={setInput}\n placeholder={placeholder}\n multiline\n style={styles.textInput}\n />\n <View style={styles.helperRow}>\n <Text style={styles.helperText}>{helperText}</Text>\n <Pressable\n onPress={handleSend}\n disabled={!input.trim() || isLoading}\n style={[\n styles.sendButton,\n (!input.trim() || isLoading) && styles.sendButtonDisabled,\n ]}\n >\n <Text style={styles.sendButtonText}>{isLoading ? '发送中...' : '发送'}</Text>\n </Pressable>\n </View>\n {error && (\n <View style={styles.error}>\n <Text style={styles.errorText}>{error.message || '对话出错,请重试。'}</Text>\n </View>\n )}\n </View>\n </KeyboardAvoidingView>\n </SafeAreaView>\n </Modal>\n );\n};\n"]}
|