@supyagent/sdk 0.1.11 → 0.1.12
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/react.cjs +787 -769
- package/dist/react.cjs.map +1 -1
- package/dist/react.d.cts +71 -39
- package/dist/react.d.ts +71 -39
- package/dist/react.js +761 -754
- package/dist/react.js.map +1 -1
- package/package.json +1 -1
package/dist/react.js
CHANGED
|
@@ -1,37 +1,5 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
-
// src/ui/tool-call.tsx
|
|
4
|
-
import { useState } from "react";
|
|
5
|
-
import { ChevronDown, ChevronRight, Check, AlertCircle, Loader2 } from "lucide-react";
|
|
6
|
-
|
|
7
|
-
// src/ui/provider-icon.tsx
|
|
8
|
-
import {
|
|
9
|
-
Mail,
|
|
10
|
-
Calendar,
|
|
11
|
-
HardDrive,
|
|
12
|
-
MessageSquare,
|
|
13
|
-
Github,
|
|
14
|
-
Wrench,
|
|
15
|
-
Bell,
|
|
16
|
-
FileText,
|
|
17
|
-
Table2,
|
|
18
|
-
Presentation,
|
|
19
|
-
Search,
|
|
20
|
-
Terminal,
|
|
21
|
-
Send,
|
|
22
|
-
CircleDot,
|
|
23
|
-
Briefcase,
|
|
24
|
-
Users,
|
|
25
|
-
CreditCard,
|
|
26
|
-
SquareKanban,
|
|
27
|
-
Cloud,
|
|
28
|
-
CalendarClock,
|
|
29
|
-
Phone,
|
|
30
|
-
MessageCircle,
|
|
31
|
-
UserCircle,
|
|
32
|
-
Monitor
|
|
33
|
-
} from "lucide-react";
|
|
34
|
-
|
|
35
3
|
// src/ui/utils.ts
|
|
36
4
|
function getProviderFromToolName(toolName) {
|
|
37
5
|
const idx = toolName.indexOf("_");
|
|
@@ -151,7 +119,37 @@ function getFormatterType(toolName) {
|
|
|
151
119
|
}
|
|
152
120
|
}
|
|
153
121
|
|
|
122
|
+
// src/ui/collapsible-result.tsx
|
|
123
|
+
import { useState } from "react";
|
|
124
|
+
import { ChevronDown, ChevronRight } from "lucide-react";
|
|
125
|
+
|
|
154
126
|
// src/ui/provider-icon.tsx
|
|
127
|
+
import {
|
|
128
|
+
Mail,
|
|
129
|
+
Calendar,
|
|
130
|
+
HardDrive,
|
|
131
|
+
MessageSquare,
|
|
132
|
+
Github,
|
|
133
|
+
Wrench,
|
|
134
|
+
Bell,
|
|
135
|
+
FileText,
|
|
136
|
+
Table2,
|
|
137
|
+
Presentation,
|
|
138
|
+
Search,
|
|
139
|
+
Terminal,
|
|
140
|
+
Send,
|
|
141
|
+
CircleDot,
|
|
142
|
+
Briefcase,
|
|
143
|
+
Users,
|
|
144
|
+
CreditCard,
|
|
145
|
+
SquareKanban,
|
|
146
|
+
Cloud,
|
|
147
|
+
CalendarClock,
|
|
148
|
+
Phone,
|
|
149
|
+
MessageCircle,
|
|
150
|
+
UserCircle,
|
|
151
|
+
Monitor
|
|
152
|
+
} from "lucide-react";
|
|
155
153
|
import { jsx } from "react/jsx-runtime";
|
|
156
154
|
var ICON_MAP = {
|
|
157
155
|
gmail: Mail,
|
|
@@ -190,78 +188,8 @@ function ProviderIcon({ toolName, className = "h-4 w-4" }) {
|
|
|
190
188
|
return /* @__PURE__ */ jsx(Icon, { className });
|
|
191
189
|
}
|
|
192
190
|
|
|
193
|
-
// src/ui/tool-call.tsx
|
|
194
|
-
import { jsx as jsx2, jsxs } from "react/jsx-runtime";
|
|
195
|
-
function extractToolName(part) {
|
|
196
|
-
if (part.type.startsWith("tool-") && part.type !== "tool-invocation") {
|
|
197
|
-
return part.type.slice(5);
|
|
198
|
-
}
|
|
199
|
-
if (part.type === "dynamic-tool" && part.toolName) {
|
|
200
|
-
return part.toolName;
|
|
201
|
-
}
|
|
202
|
-
if (part.toolName) return part.toolName;
|
|
203
|
-
if (part.toolInvocation?.toolName) return part.toolInvocation.toolName;
|
|
204
|
-
return "unknown";
|
|
205
|
-
}
|
|
206
|
-
function extractState(part) {
|
|
207
|
-
return part.state || part.toolInvocation?.state || "input-available";
|
|
208
|
-
}
|
|
209
|
-
function extractArgs(part) {
|
|
210
|
-
return part.input || part.args || part.toolInvocation?.args;
|
|
211
|
-
}
|
|
212
|
-
function SupyagentToolCall({ part }) {
|
|
213
|
-
const [expanded, setExpanded] = useState(false);
|
|
214
|
-
const toolName = extractToolName(part);
|
|
215
|
-
const state = extractState(part);
|
|
216
|
-
const args = extractArgs(part);
|
|
217
|
-
const provider = getProviderFromToolName(toolName);
|
|
218
|
-
const providerLabel = getProviderLabel(provider);
|
|
219
|
-
const actionLabel = humanizeToolName(toolName);
|
|
220
|
-
const isStreaming = state === "input-streaming";
|
|
221
|
-
const isError = state === "output-error";
|
|
222
|
-
const isDone = state === "output-available";
|
|
223
|
-
return /* @__PURE__ */ jsxs(
|
|
224
|
-
"div",
|
|
225
|
-
{
|
|
226
|
-
className: "rounded-lg border border-border bg-card overflow-hidden",
|
|
227
|
-
"data-state": isDone ? "done" : isError ? "error" : isStreaming ? "streaming" : "pending",
|
|
228
|
-
children: [
|
|
229
|
-
/* @__PURE__ */ jsxs(
|
|
230
|
-
"button",
|
|
231
|
-
{
|
|
232
|
-
type: "button",
|
|
233
|
-
onClick: () => args && setExpanded(!expanded),
|
|
234
|
-
className: "flex items-center gap-2 w-full px-3 py-2 text-left hover:bg-muted transition-colors",
|
|
235
|
-
children: [
|
|
236
|
-
/* @__PURE__ */ jsxs("div", { className: "relative", children: [
|
|
237
|
-
/* @__PURE__ */ jsx2(ProviderIcon, { toolName, className: "h-4 w-4 text-muted-foreground" }),
|
|
238
|
-
isStreaming && /* @__PURE__ */ jsx2(Loader2, { className: "absolute -top-1 -right-1 h-3 w-3 text-primary animate-spin" })
|
|
239
|
-
] }),
|
|
240
|
-
/* @__PURE__ */ jsx2("span", { className: "text-xs text-muted-foreground", children: providerLabel }),
|
|
241
|
-
/* @__PURE__ */ jsx2("span", { className: "text-sm text-foreground flex-1", children: actionLabel }),
|
|
242
|
-
isDone && /* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-1 rounded-full bg-green-500/10 px-2 py-0.5 text-xs text-green-500", children: [
|
|
243
|
-
/* @__PURE__ */ jsx2(Check, { className: "h-3 w-3" }),
|
|
244
|
-
"Completed"
|
|
245
|
-
] }),
|
|
246
|
-
isError && /* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-1 rounded-full bg-destructive/10 px-2 py-0.5 text-xs text-destructive", children: [
|
|
247
|
-
/* @__PURE__ */ jsx2(AlertCircle, { className: "h-3 w-3" }),
|
|
248
|
-
"Error"
|
|
249
|
-
] }),
|
|
250
|
-
isStreaming && /* @__PURE__ */ jsx2("span", { className: "inline-flex items-center gap-1 rounded-full bg-primary/10 px-2 py-0.5 text-xs text-primary animate-pulse", children: "Calling..." }),
|
|
251
|
-
args && (expanded ? /* @__PURE__ */ jsx2(ChevronDown, { className: "h-3.5 w-3.5 text-muted-foreground" }) : /* @__PURE__ */ jsx2(ChevronRight, { className: "h-3.5 w-3.5 text-muted-foreground" }))
|
|
252
|
-
]
|
|
253
|
-
}
|
|
254
|
-
),
|
|
255
|
-
expanded && args && /* @__PURE__ */ jsx2("div", { className: "border-t border-border px-3 py-2", children: /* @__PURE__ */ jsx2("pre", { className: "text-xs text-muted-foreground overflow-x-auto", children: JSON.stringify(args, null, 2) }) })
|
|
256
|
-
]
|
|
257
|
-
}
|
|
258
|
-
);
|
|
259
|
-
}
|
|
260
|
-
|
|
261
191
|
// src/ui/collapsible-result.tsx
|
|
262
|
-
import {
|
|
263
|
-
import { ChevronDown as ChevronDown2, ChevronRight as ChevronRight2 } from "lucide-react";
|
|
264
|
-
import { jsx as jsx3, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
192
|
+
import { jsx as jsx2, jsxs } from "react/jsx-runtime";
|
|
265
193
|
var BADGE_STYLES = {
|
|
266
194
|
default: "bg-muted text-muted-foreground",
|
|
267
195
|
success: "bg-green-500/10 text-green-500",
|
|
@@ -275,37 +203,37 @@ function CollapsibleResult({
|
|
|
275
203
|
defaultExpanded = false,
|
|
276
204
|
children
|
|
277
205
|
}) {
|
|
278
|
-
const [expanded, setExpanded] =
|
|
206
|
+
const [expanded, setExpanded] = useState(defaultExpanded);
|
|
279
207
|
const provider = getProviderFromToolName(toolName);
|
|
280
208
|
const providerLabel = getProviderLabel(provider);
|
|
281
|
-
return /* @__PURE__ */
|
|
282
|
-
/* @__PURE__ */
|
|
209
|
+
return /* @__PURE__ */ jsxs("div", { className: "rounded-lg border border-border bg-card overflow-hidden", children: [
|
|
210
|
+
/* @__PURE__ */ jsxs(
|
|
283
211
|
"button",
|
|
284
212
|
{
|
|
285
213
|
type: "button",
|
|
286
214
|
onClick: () => setExpanded(!expanded),
|
|
287
215
|
className: "flex items-center gap-2 w-full px-3 py-2 text-left hover:bg-muted transition-colors",
|
|
288
216
|
children: [
|
|
289
|
-
/* @__PURE__ */
|
|
290
|
-
/* @__PURE__ */
|
|
291
|
-
/* @__PURE__ */
|
|
292
|
-
badge && /* @__PURE__ */
|
|
217
|
+
/* @__PURE__ */ jsx2(ProviderIcon, { toolName, className: "h-4 w-4 text-muted-foreground" }),
|
|
218
|
+
/* @__PURE__ */ jsx2("span", { className: "text-xs text-muted-foreground", children: providerLabel }),
|
|
219
|
+
/* @__PURE__ */ jsx2("span", { className: "text-sm text-foreground flex-1 truncate", children: summary }),
|
|
220
|
+
badge && /* @__PURE__ */ jsx2(
|
|
293
221
|
"span",
|
|
294
222
|
{
|
|
295
223
|
className: `inline-flex items-center rounded-full px-2 py-0.5 text-xs font-medium ${BADGE_STYLES[badge.variant || "default"]}`,
|
|
296
224
|
children: badge.text
|
|
297
225
|
}
|
|
298
226
|
),
|
|
299
|
-
expanded ? /* @__PURE__ */
|
|
227
|
+
expanded ? /* @__PURE__ */ jsx2(ChevronDown, { className: "h-3.5 w-3.5 text-muted-foreground shrink-0" }) : /* @__PURE__ */ jsx2(ChevronRight, { className: "h-3.5 w-3.5 text-muted-foreground shrink-0" })
|
|
300
228
|
]
|
|
301
229
|
}
|
|
302
230
|
),
|
|
303
|
-
/* @__PURE__ */
|
|
231
|
+
/* @__PURE__ */ jsx2(
|
|
304
232
|
"div",
|
|
305
233
|
{
|
|
306
234
|
className: "grid transition-[grid-template-rows] duration-200 ease-out",
|
|
307
235
|
style: { gridTemplateRows: expanded ? "1fr" : "0fr" },
|
|
308
|
-
children: /* @__PURE__ */
|
|
236
|
+
children: /* @__PURE__ */ jsx2("div", { className: "overflow-hidden", children: /* @__PURE__ */ jsx2("div", { className: "border-t border-border px-3 py-2", children }) })
|
|
309
237
|
}
|
|
310
238
|
)
|
|
311
239
|
] });
|
|
@@ -742,7 +670,7 @@ function normalizeMicrosoftDrive(data) {
|
|
|
742
670
|
|
|
743
671
|
// src/ui/formatters/email.tsx
|
|
744
672
|
import { Mail as Mail2, Paperclip, Tag } from "lucide-react";
|
|
745
|
-
import { jsx as
|
|
673
|
+
import { jsx as jsx3, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
746
674
|
function isEmailData(data) {
|
|
747
675
|
return typeof data === "object" && data !== null && ("subject" in data || "from" in data || "snippet" in data);
|
|
748
676
|
}
|
|
@@ -783,44 +711,44 @@ function resolveLabels(email) {
|
|
|
783
711
|
function EmailCard({ email }) {
|
|
784
712
|
const recipients = formatRecipients(email.to);
|
|
785
713
|
const labels = resolveLabels(email);
|
|
786
|
-
return /* @__PURE__ */
|
|
787
|
-
/* @__PURE__ */
|
|
788
|
-
/* @__PURE__ */
|
|
789
|
-
/* @__PURE__ */
|
|
790
|
-
/* @__PURE__ */
|
|
791
|
-
email.from && /* @__PURE__ */
|
|
792
|
-
recipients && /* @__PURE__ */
|
|
714
|
+
return /* @__PURE__ */ jsxs2("div", { className: "rounded-lg border border-border bg-card p-3 space-y-2", children: [
|
|
715
|
+
/* @__PURE__ */ jsxs2("div", { className: "flex items-start gap-2", children: [
|
|
716
|
+
/* @__PURE__ */ jsx3(Mail2, { className: "h-4 w-4 text-muted-foreground mt-0.5 shrink-0" }),
|
|
717
|
+
/* @__PURE__ */ jsxs2("div", { className: "min-w-0 flex-1", children: [
|
|
718
|
+
/* @__PURE__ */ jsx3("p", { className: "text-sm font-medium text-foreground truncate", children: email.subject || "No subject" }),
|
|
719
|
+
email.from && /* @__PURE__ */ jsx3("p", { className: "text-xs text-muted-foreground truncate", children: email.from }),
|
|
720
|
+
recipients && /* @__PURE__ */ jsxs2("p", { className: "text-xs text-muted-foreground truncate", children: [
|
|
793
721
|
"To: ",
|
|
794
722
|
recipients
|
|
795
723
|
] })
|
|
796
724
|
] }),
|
|
797
|
-
/* @__PURE__ */
|
|
798
|
-
email.hasAttachments && /* @__PURE__ */
|
|
799
|
-
email.date && /* @__PURE__ */
|
|
725
|
+
/* @__PURE__ */ jsxs2("div", { className: "flex items-center gap-1.5 shrink-0", children: [
|
|
726
|
+
email.hasAttachments && /* @__PURE__ */ jsx3(Paperclip, { className: "h-3.5 w-3.5 text-muted-foreground" }),
|
|
727
|
+
email.date && /* @__PURE__ */ jsx3("span", { className: "text-xs text-muted-foreground", children: formatRelativeDate(email.date) })
|
|
800
728
|
] })
|
|
801
729
|
] }),
|
|
802
|
-
labels.length > 0 && /* @__PURE__ */
|
|
730
|
+
labels.length > 0 && /* @__PURE__ */ jsx3("div", { className: "flex items-center gap-1.5 flex-wrap", children: labels.map((label) => /* @__PURE__ */ jsxs2(
|
|
803
731
|
"span",
|
|
804
732
|
{
|
|
805
733
|
className: "inline-flex items-center gap-1 rounded-full bg-muted px-2 py-0.5 text-xs text-muted-foreground",
|
|
806
734
|
children: [
|
|
807
|
-
/* @__PURE__ */
|
|
735
|
+
/* @__PURE__ */ jsx3(Tag, { className: "h-2.5 w-2.5" }),
|
|
808
736
|
label
|
|
809
737
|
]
|
|
810
738
|
},
|
|
811
739
|
label
|
|
812
740
|
)) }),
|
|
813
|
-
(email.snippet || email.body) && /* @__PURE__ */
|
|
741
|
+
(email.snippet || email.body) && /* @__PURE__ */ jsx3("p", { className: "text-xs text-muted-foreground line-clamp-3", children: email.snippet || email.body })
|
|
814
742
|
] });
|
|
815
743
|
}
|
|
816
744
|
function EmailFormatter({ data }) {
|
|
817
745
|
if (isEmailData(data)) {
|
|
818
|
-
return /* @__PURE__ */
|
|
746
|
+
return /* @__PURE__ */ jsx3(EmailCard, { email: data });
|
|
819
747
|
}
|
|
820
748
|
if (Array.isArray(data)) {
|
|
821
749
|
const emails = data.filter(isEmailData);
|
|
822
750
|
if (emails.length > 0) {
|
|
823
|
-
return /* @__PURE__ */
|
|
751
|
+
return /* @__PURE__ */ jsx3("div", { className: "space-y-2", children: emails.map((email, i) => /* @__PURE__ */ jsx3(EmailCard, { email }, email.id || i)) });
|
|
824
752
|
}
|
|
825
753
|
}
|
|
826
754
|
if (typeof data === "object" && data !== null && "messages" in data) {
|
|
@@ -828,16 +756,16 @@ function EmailFormatter({ data }) {
|
|
|
828
756
|
if (Array.isArray(messages)) {
|
|
829
757
|
const emails = messages.filter(isEmailData);
|
|
830
758
|
if (emails.length > 0) {
|
|
831
|
-
return /* @__PURE__ */
|
|
759
|
+
return /* @__PURE__ */ jsx3("div", { className: "space-y-2", children: emails.map((email, i) => /* @__PURE__ */ jsx3(EmailCard, { email }, email.id || i)) });
|
|
832
760
|
}
|
|
833
761
|
}
|
|
834
762
|
}
|
|
835
|
-
return /* @__PURE__ */
|
|
763
|
+
return /* @__PURE__ */ jsx3("pre", { className: "rounded-lg border border-border bg-background p-3 text-xs text-foreground overflow-x-auto max-h-96 overflow-y-auto", children: JSON.stringify(data, null, 2) });
|
|
836
764
|
}
|
|
837
765
|
|
|
838
766
|
// src/ui/formatters/calendar-event.tsx
|
|
839
|
-
import { Calendar as Calendar2, MapPin, Users as Users2, Check
|
|
840
|
-
import { jsx as
|
|
767
|
+
import { Calendar as Calendar2, MapPin, Users as Users2, Check, X, HelpCircle } from "lucide-react";
|
|
768
|
+
import { jsx as jsx4, jsxs as jsxs3 } from "react/jsx-runtime";
|
|
841
769
|
function isCalendarEvent(data) {
|
|
842
770
|
return typeof data === "object" && data !== null && ("summary" in data || "start" in data);
|
|
843
771
|
}
|
|
@@ -872,37 +800,37 @@ function formatRelativeDateTime(dt) {
|
|
|
872
800
|
function ResponseStatusIcon({ status }) {
|
|
873
801
|
switch (status) {
|
|
874
802
|
case "accepted":
|
|
875
|
-
return /* @__PURE__ */
|
|
803
|
+
return /* @__PURE__ */ jsx4(Check, { className: "h-3 w-3 text-green-500" });
|
|
876
804
|
case "declined":
|
|
877
|
-
return /* @__PURE__ */
|
|
805
|
+
return /* @__PURE__ */ jsx4(X, { className: "h-3 w-3 text-destructive" });
|
|
878
806
|
case "tentative":
|
|
879
|
-
return /* @__PURE__ */
|
|
807
|
+
return /* @__PURE__ */ jsx4(HelpCircle, { className: "h-3 w-3 text-yellow-500" });
|
|
880
808
|
default:
|
|
881
|
-
return /* @__PURE__ */
|
|
809
|
+
return /* @__PURE__ */ jsx4(HelpCircle, { className: "h-3 w-3 text-muted-foreground" });
|
|
882
810
|
}
|
|
883
811
|
}
|
|
884
812
|
function EventCard({ event }) {
|
|
885
813
|
const startStr = formatRelativeDateTime(event.start);
|
|
886
814
|
const endStr = formatRelativeDateTime(event.end);
|
|
887
|
-
return /* @__PURE__ */
|
|
888
|
-
/* @__PURE__ */
|
|
889
|
-
/* @__PURE__ */
|
|
890
|
-
/* @__PURE__ */
|
|
891
|
-
/* @__PURE__ */
|
|
892
|
-
startStr && /* @__PURE__ */
|
|
815
|
+
return /* @__PURE__ */ jsxs3("div", { className: "rounded-lg border border-border bg-card p-3 space-y-2", children: [
|
|
816
|
+
/* @__PURE__ */ jsxs3("div", { className: "flex items-start gap-2", children: [
|
|
817
|
+
/* @__PURE__ */ jsx4(Calendar2, { className: "h-4 w-4 text-muted-foreground mt-0.5 shrink-0" }),
|
|
818
|
+
/* @__PURE__ */ jsxs3("div", { className: "min-w-0 flex-1", children: [
|
|
819
|
+
/* @__PURE__ */ jsx4("p", { className: "text-sm font-medium text-foreground", children: event.summary || "Untitled event" }),
|
|
820
|
+
startStr && /* @__PURE__ */ jsxs3("p", { className: "text-xs text-muted-foreground", children: [
|
|
893
821
|
startStr,
|
|
894
822
|
endStr ? ` \u2192 ${endStr}` : ""
|
|
895
823
|
] })
|
|
896
824
|
] })
|
|
897
825
|
] }),
|
|
898
|
-
event.location && /* @__PURE__ */
|
|
899
|
-
/* @__PURE__ */
|
|
900
|
-
/* @__PURE__ */
|
|
826
|
+
event.location && /* @__PURE__ */ jsxs3("div", { className: "flex items-center gap-1.5 text-xs text-muted-foreground", children: [
|
|
827
|
+
/* @__PURE__ */ jsx4(MapPin, { className: "h-3 w-3 shrink-0" }),
|
|
828
|
+
/* @__PURE__ */ jsx4("span", { className: "truncate", children: event.location })
|
|
901
829
|
] }),
|
|
902
|
-
event.attendees && event.attendees.length > 0 && /* @__PURE__ */
|
|
903
|
-
/* @__PURE__ */
|
|
904
|
-
/* @__PURE__ */
|
|
905
|
-
/* @__PURE__ */
|
|
830
|
+
event.attendees && event.attendees.length > 0 && /* @__PURE__ */ jsxs3("div", { className: "flex items-start gap-1.5 text-xs text-muted-foreground", children: [
|
|
831
|
+
/* @__PURE__ */ jsx4(Users2, { className: "h-3 w-3 shrink-0 mt-0.5" }),
|
|
832
|
+
/* @__PURE__ */ jsx4("div", { className: "flex flex-wrap gap-x-3 gap-y-1", children: event.attendees.map((a, i) => /* @__PURE__ */ jsxs3("span", { className: "inline-flex items-center gap-1", children: [
|
|
833
|
+
/* @__PURE__ */ jsx4(ResponseStatusIcon, { status: a.responseStatus }),
|
|
906
834
|
a.displayName || a.email
|
|
907
835
|
] }, i)) })
|
|
908
836
|
] })
|
|
@@ -910,12 +838,12 @@ function EventCard({ event }) {
|
|
|
910
838
|
}
|
|
911
839
|
function CalendarEventFormatter({ data }) {
|
|
912
840
|
if (isCalendarEvent(data)) {
|
|
913
|
-
return /* @__PURE__ */
|
|
841
|
+
return /* @__PURE__ */ jsx4(EventCard, { event: data });
|
|
914
842
|
}
|
|
915
843
|
if (Array.isArray(data)) {
|
|
916
844
|
const events = data.filter(isCalendarEvent);
|
|
917
845
|
if (events.length > 0) {
|
|
918
|
-
return /* @__PURE__ */
|
|
846
|
+
return /* @__PURE__ */ jsx4("div", { className: "space-y-2", children: events.map((event, i) => /* @__PURE__ */ jsx4(EventCard, { event }, event.id || i)) });
|
|
919
847
|
}
|
|
920
848
|
}
|
|
921
849
|
if (typeof data === "object" && data !== null && "events" in data) {
|
|
@@ -923,16 +851,16 @@ function CalendarEventFormatter({ data }) {
|
|
|
923
851
|
if (Array.isArray(events)) {
|
|
924
852
|
const calEvents = events.filter(isCalendarEvent);
|
|
925
853
|
if (calEvents.length > 0) {
|
|
926
|
-
return /* @__PURE__ */
|
|
854
|
+
return /* @__PURE__ */ jsx4("div", { className: "space-y-2", children: calEvents.map((event, i) => /* @__PURE__ */ jsx4(EventCard, { event }, event.id || i)) });
|
|
927
855
|
}
|
|
928
856
|
}
|
|
929
857
|
}
|
|
930
|
-
return /* @__PURE__ */
|
|
858
|
+
return /* @__PURE__ */ jsx4("pre", { className: "rounded-lg border border-border bg-background p-3 text-xs text-foreground overflow-x-auto max-h-96 overflow-y-auto", children: JSON.stringify(data, null, 2) });
|
|
931
859
|
}
|
|
932
860
|
|
|
933
861
|
// src/ui/formatters/slack-message.tsx
|
|
934
862
|
import { MessageSquare as MessageSquare2, Hash, Reply } from "lucide-react";
|
|
935
|
-
import { jsx as
|
|
863
|
+
import { jsx as jsx5, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
936
864
|
function isSlackMessage(data) {
|
|
937
865
|
return typeof data === "object" && data !== null && ("text" in data || "channel" in data);
|
|
938
866
|
}
|
|
@@ -940,21 +868,21 @@ function isChannelList(data) {
|
|
|
940
868
|
return typeof data === "object" && data !== null && "channels" in data && Array.isArray(data.channels);
|
|
941
869
|
}
|
|
942
870
|
function MessageBubble({ message }) {
|
|
943
|
-
return /* @__PURE__ */
|
|
944
|
-
/* @__PURE__ */
|
|
945
|
-
/* @__PURE__ */
|
|
946
|
-
message.channel && /* @__PURE__ */
|
|
947
|
-
/* @__PURE__ */
|
|
871
|
+
return /* @__PURE__ */ jsxs4("div", { className: "rounded-lg border border-border bg-card p-3 space-y-1.5", children: [
|
|
872
|
+
/* @__PURE__ */ jsxs4("div", { className: "flex items-center gap-2", children: [
|
|
873
|
+
/* @__PURE__ */ jsx5(MessageSquare2, { className: "h-4 w-4 text-muted-foreground shrink-0" }),
|
|
874
|
+
message.channel && /* @__PURE__ */ jsxs4("span", { className: "flex items-center gap-0.5 text-xs text-muted-foreground", children: [
|
|
875
|
+
/* @__PURE__ */ jsx5(Hash, { className: "h-3 w-3" }),
|
|
948
876
|
message.channel
|
|
949
877
|
] }),
|
|
950
|
-
message.user && /* @__PURE__ */
|
|
951
|
-
message.thread_ts && /* @__PURE__ */
|
|
952
|
-
/* @__PURE__ */
|
|
878
|
+
message.user && /* @__PURE__ */ jsx5("span", { className: "text-xs font-medium text-foreground", children: message.user }),
|
|
879
|
+
message.thread_ts && /* @__PURE__ */ jsxs4("span", { className: "flex items-center gap-1 text-xs text-muted-foreground", children: [
|
|
880
|
+
/* @__PURE__ */ jsx5(Reply, { className: "h-3 w-3" }),
|
|
953
881
|
message.reply_count ? `${message.reply_count} replies` : "Thread"
|
|
954
882
|
] })
|
|
955
883
|
] }),
|
|
956
|
-
message.text && /* @__PURE__ */
|
|
957
|
-
message.reactions && message.reactions.length > 0 && /* @__PURE__ */
|
|
884
|
+
message.text && /* @__PURE__ */ jsx5("p", { className: "text-sm text-foreground", children: message.text }),
|
|
885
|
+
message.reactions && message.reactions.length > 0 && /* @__PURE__ */ jsx5("div", { className: "flex flex-wrap gap-1.5 pt-1", children: message.reactions.map((reaction) => /* @__PURE__ */ jsxs4(
|
|
958
886
|
"span",
|
|
959
887
|
{
|
|
960
888
|
className: "inline-flex items-center gap-1 rounded-full bg-muted px-2 py-0.5 text-xs text-muted-foreground",
|
|
@@ -962,7 +890,7 @@ function MessageBubble({ message }) {
|
|
|
962
890
|
":",
|
|
963
891
|
reaction.name,
|
|
964
892
|
":",
|
|
965
|
-
reaction.count && reaction.count > 1 && /* @__PURE__ */
|
|
893
|
+
reaction.count && reaction.count > 1 && /* @__PURE__ */ jsx5("span", { className: "font-medium", children: reaction.count })
|
|
966
894
|
]
|
|
967
895
|
},
|
|
968
896
|
reaction.name
|
|
@@ -971,10 +899,10 @@ function MessageBubble({ message }) {
|
|
|
971
899
|
}
|
|
972
900
|
function ChannelCard({ channel }) {
|
|
973
901
|
const members = channel.num_members ?? channel.memberCount;
|
|
974
|
-
return /* @__PURE__ */
|
|
975
|
-
/* @__PURE__ */
|
|
976
|
-
/* @__PURE__ */
|
|
977
|
-
members !== void 0 && /* @__PURE__ */
|
|
902
|
+
return /* @__PURE__ */ jsxs4("div", { className: "flex items-center gap-2 rounded-lg border border-border bg-card p-3", children: [
|
|
903
|
+
/* @__PURE__ */ jsx5(Hash, { className: "h-4 w-4 text-muted-foreground shrink-0" }),
|
|
904
|
+
/* @__PURE__ */ jsx5("span", { className: "text-sm text-foreground flex-1", children: channel.name || channel.id }),
|
|
905
|
+
members !== void 0 && /* @__PURE__ */ jsxs4("span", { className: "text-xs text-muted-foreground", children: [
|
|
978
906
|
members,
|
|
979
907
|
" members"
|
|
980
908
|
] })
|
|
@@ -983,15 +911,15 @@ function ChannelCard({ channel }) {
|
|
|
983
911
|
function SlackMessageFormatter({ data }) {
|
|
984
912
|
if (isChannelList(data)) {
|
|
985
913
|
const channels = data.channels;
|
|
986
|
-
return /* @__PURE__ */
|
|
914
|
+
return /* @__PURE__ */ jsx5("div", { className: "space-y-1.5", children: channels.map((ch, i) => /* @__PURE__ */ jsx5(ChannelCard, { channel: ch }, ch.id || i)) });
|
|
987
915
|
}
|
|
988
916
|
if (isSlackMessage(data)) {
|
|
989
|
-
return /* @__PURE__ */
|
|
917
|
+
return /* @__PURE__ */ jsx5(MessageBubble, { message: data });
|
|
990
918
|
}
|
|
991
919
|
if (Array.isArray(data)) {
|
|
992
920
|
const messages = data.filter(isSlackMessage);
|
|
993
921
|
if (messages.length > 0) {
|
|
994
|
-
return /* @__PURE__ */
|
|
922
|
+
return /* @__PURE__ */ jsx5("div", { className: "space-y-2", children: messages.map((msg, i) => /* @__PURE__ */ jsx5(MessageBubble, { message: msg }, msg.ts || i)) });
|
|
995
923
|
}
|
|
996
924
|
}
|
|
997
925
|
if (typeof data === "object" && data !== null && "messages" in data) {
|
|
@@ -999,16 +927,16 @@ function SlackMessageFormatter({ data }) {
|
|
|
999
927
|
if (Array.isArray(messages)) {
|
|
1000
928
|
const slackMsgs = messages.filter(isSlackMessage);
|
|
1001
929
|
if (slackMsgs.length > 0) {
|
|
1002
|
-
return /* @__PURE__ */
|
|
930
|
+
return /* @__PURE__ */ jsx5("div", { className: "space-y-2", children: slackMsgs.map((msg, i) => /* @__PURE__ */ jsx5(MessageBubble, { message: msg }, msg.ts || i)) });
|
|
1003
931
|
}
|
|
1004
932
|
}
|
|
1005
933
|
}
|
|
1006
|
-
return /* @__PURE__ */
|
|
934
|
+
return /* @__PURE__ */ jsx5("pre", { className: "rounded-lg border border-border bg-background p-3 text-xs text-foreground overflow-x-auto max-h-96 overflow-y-auto", children: JSON.stringify(data, null, 2) });
|
|
1007
935
|
}
|
|
1008
936
|
|
|
1009
937
|
// src/ui/formatters/github.tsx
|
|
1010
938
|
import { CircleDot as CircleDot2, GitPullRequest, GitMerge, Clock } from "lucide-react";
|
|
1011
|
-
import { jsx as
|
|
939
|
+
import { jsx as jsx6, jsxs as jsxs5 } from "react/jsx-runtime";
|
|
1012
940
|
function isGithubItem(data) {
|
|
1013
941
|
return typeof data === "object" && data !== null && ("title" in data || "number" in data);
|
|
1014
942
|
}
|
|
@@ -1046,28 +974,28 @@ function getStateInfo(item) {
|
|
|
1046
974
|
}
|
|
1047
975
|
function GithubCard({ item }) {
|
|
1048
976
|
const { icon: StateIcon, color: stateColor, label: stateLabel } = getStateInfo(item);
|
|
1049
|
-
return /* @__PURE__ */
|
|
1050
|
-
/* @__PURE__ */
|
|
1051
|
-
/* @__PURE__ */
|
|
1052
|
-
/* @__PURE__ */
|
|
1053
|
-
/* @__PURE__ */
|
|
1054
|
-
item.html_url ? /* @__PURE__ */
|
|
1055
|
-
item.number && /* @__PURE__ */
|
|
977
|
+
return /* @__PURE__ */ jsxs5("div", { className: "rounded-lg border border-border bg-card p-3 space-y-1.5", children: [
|
|
978
|
+
/* @__PURE__ */ jsxs5("div", { className: "flex items-start gap-2", children: [
|
|
979
|
+
/* @__PURE__ */ jsx6(StateIcon, { className: `h-4 w-4 mt-0.5 shrink-0 ${stateColor}` }),
|
|
980
|
+
/* @__PURE__ */ jsxs5("div", { className: "min-w-0 flex-1", children: [
|
|
981
|
+
/* @__PURE__ */ jsxs5("p", { className: "text-sm font-medium text-foreground", children: [
|
|
982
|
+
item.html_url ? /* @__PURE__ */ jsx6("a", { href: item.html_url, target: "_blank", rel: "noopener noreferrer", className: "hover:underline", children: item.title }) : item.title,
|
|
983
|
+
item.number && /* @__PURE__ */ jsxs5("span", { className: "text-muted-foreground font-normal", children: [
|
|
1056
984
|
" #",
|
|
1057
985
|
item.number
|
|
1058
986
|
] })
|
|
1059
987
|
] }),
|
|
1060
|
-
/* @__PURE__ */
|
|
1061
|
-
/* @__PURE__ */
|
|
1062
|
-
item.user?.login && /* @__PURE__ */
|
|
1063
|
-
item.created_at && /* @__PURE__ */
|
|
1064
|
-
/* @__PURE__ */
|
|
988
|
+
/* @__PURE__ */ jsxs5("div", { className: "flex items-center gap-2 mt-0.5", children: [
|
|
989
|
+
/* @__PURE__ */ jsx6("span", { className: `text-xs ${stateColor}`, children: stateLabel }),
|
|
990
|
+
item.user?.login && /* @__PURE__ */ jsx6("span", { className: "text-xs text-muted-foreground", children: item.user.login }),
|
|
991
|
+
item.created_at && /* @__PURE__ */ jsxs5("span", { className: "flex items-center gap-1 text-xs text-muted-foreground", children: [
|
|
992
|
+
/* @__PURE__ */ jsx6(Clock, { className: "h-3 w-3" }),
|
|
1065
993
|
formatRelativeDate2(item.created_at)
|
|
1066
994
|
] })
|
|
1067
995
|
] })
|
|
1068
996
|
] })
|
|
1069
997
|
] }),
|
|
1070
|
-
item.labels && item.labels.length > 0 && /* @__PURE__ */
|
|
998
|
+
item.labels && item.labels.length > 0 && /* @__PURE__ */ jsx6("div", { className: "flex flex-wrap gap-1.5", children: item.labels.map((label) => /* @__PURE__ */ jsx6(
|
|
1071
999
|
"span",
|
|
1072
1000
|
{
|
|
1073
1001
|
className: "rounded-full border border-border px-2 py-0.5 text-xs text-muted-foreground",
|
|
@@ -1076,25 +1004,25 @@ function GithubCard({ item }) {
|
|
|
1076
1004
|
},
|
|
1077
1005
|
label.name
|
|
1078
1006
|
)) }),
|
|
1079
|
-
item.body && /* @__PURE__ */
|
|
1007
|
+
item.body && /* @__PURE__ */ jsx6("p", { className: "text-xs text-muted-foreground line-clamp-2", children: item.body })
|
|
1080
1008
|
] });
|
|
1081
1009
|
}
|
|
1082
1010
|
function GithubFormatter({ data }) {
|
|
1083
1011
|
if (isGithubItem(data)) {
|
|
1084
|
-
return /* @__PURE__ */
|
|
1012
|
+
return /* @__PURE__ */ jsx6(GithubCard, { item: data });
|
|
1085
1013
|
}
|
|
1086
1014
|
if (Array.isArray(data)) {
|
|
1087
1015
|
const items = data.filter(isGithubItem);
|
|
1088
1016
|
if (items.length > 0) {
|
|
1089
|
-
return /* @__PURE__ */
|
|
1017
|
+
return /* @__PURE__ */ jsx6("div", { className: "space-y-2", children: items.map((item, i) => /* @__PURE__ */ jsx6(GithubCard, { item }, item.number || i)) });
|
|
1090
1018
|
}
|
|
1091
1019
|
}
|
|
1092
|
-
return /* @__PURE__ */
|
|
1020
|
+
return /* @__PURE__ */ jsx6("pre", { className: "rounded-lg border border-border bg-background p-3 text-xs text-foreground overflow-x-auto max-h-96 overflow-y-auto", children: JSON.stringify(data, null, 2) });
|
|
1093
1021
|
}
|
|
1094
1022
|
|
|
1095
1023
|
// src/ui/formatters/drive-file.tsx
|
|
1096
1024
|
import { FileText as FileText2, Folder, Image, Film, FileSpreadsheet, ExternalLink, Users as UsersIcon } from "lucide-react";
|
|
1097
|
-
import { jsx as
|
|
1025
|
+
import { jsx as jsx7, jsxs as jsxs6 } from "react/jsx-runtime";
|
|
1098
1026
|
function isDriveFile(data) {
|
|
1099
1027
|
return typeof data === "object" && data !== null && ("name" in data || "mimeType" in data);
|
|
1100
1028
|
}
|
|
@@ -1118,29 +1046,29 @@ function formatFileSize(size) {
|
|
|
1118
1046
|
function FileCard({ file }) {
|
|
1119
1047
|
const Icon = getFileIcon(file.mimeType);
|
|
1120
1048
|
const sizeStr = formatFileSize(file.size);
|
|
1121
|
-
return /* @__PURE__ */
|
|
1122
|
-
/* @__PURE__ */
|
|
1123
|
-
/* @__PURE__ */
|
|
1124
|
-
/* @__PURE__ */
|
|
1125
|
-
/* @__PURE__ */
|
|
1126
|
-
file.modifiedTime && /* @__PURE__ */
|
|
1127
|
-
sizeStr && /* @__PURE__ */
|
|
1049
|
+
return /* @__PURE__ */ jsxs6("div", { className: "flex items-center gap-3 rounded-lg border border-border bg-card p-3", children: [
|
|
1050
|
+
/* @__PURE__ */ jsx7(Icon, { className: "h-4 w-4 text-muted-foreground shrink-0" }),
|
|
1051
|
+
/* @__PURE__ */ jsxs6("div", { className: "min-w-0 flex-1", children: [
|
|
1052
|
+
/* @__PURE__ */ jsx7("p", { className: "text-sm text-foreground truncate", children: file.webViewLink ? /* @__PURE__ */ jsx7("a", { href: file.webViewLink, target: "_blank", rel: "noopener noreferrer", className: "hover:underline", children: file.name || "Untitled" }) : file.name || "Untitled" }),
|
|
1053
|
+
/* @__PURE__ */ jsxs6("div", { className: "flex items-center gap-2", children: [
|
|
1054
|
+
file.modifiedTime && /* @__PURE__ */ jsx7("span", { className: "text-xs text-muted-foreground", children: new Date(file.modifiedTime).toLocaleDateString() }),
|
|
1055
|
+
sizeStr && /* @__PURE__ */ jsx7("span", { className: "text-xs text-muted-foreground", children: sizeStr })
|
|
1128
1056
|
] })
|
|
1129
1057
|
] }),
|
|
1130
|
-
/* @__PURE__ */
|
|
1131
|
-
file.shared && /* @__PURE__ */
|
|
1132
|
-
file.webViewLink && /* @__PURE__ */
|
|
1058
|
+
/* @__PURE__ */ jsxs6("div", { className: "flex items-center gap-1.5 shrink-0", children: [
|
|
1059
|
+
file.shared && /* @__PURE__ */ jsx7("span", { title: "Shared", children: /* @__PURE__ */ jsx7(UsersIcon, { className: "h-3.5 w-3.5 text-muted-foreground" }) }),
|
|
1060
|
+
file.webViewLink && /* @__PURE__ */ jsx7("a", { href: file.webViewLink, target: "_blank", rel: "noopener noreferrer", className: "text-muted-foreground hover:text-foreground", children: /* @__PURE__ */ jsx7(ExternalLink, { className: "h-3.5 w-3.5" }) })
|
|
1133
1061
|
] })
|
|
1134
1062
|
] });
|
|
1135
1063
|
}
|
|
1136
1064
|
function DriveFileFormatter({ data }) {
|
|
1137
1065
|
if (isDriveFile(data)) {
|
|
1138
|
-
return /* @__PURE__ */
|
|
1066
|
+
return /* @__PURE__ */ jsx7(FileCard, { file: data });
|
|
1139
1067
|
}
|
|
1140
1068
|
if (Array.isArray(data)) {
|
|
1141
1069
|
const files = data.filter(isDriveFile);
|
|
1142
1070
|
if (files.length > 0) {
|
|
1143
|
-
return /* @__PURE__ */
|
|
1071
|
+
return /* @__PURE__ */ jsx7("div", { className: "space-y-1.5", children: files.map((file, i) => /* @__PURE__ */ jsx7(FileCard, { file }, file.id || i)) });
|
|
1144
1072
|
}
|
|
1145
1073
|
}
|
|
1146
1074
|
if (typeof data === "object" && data !== null && "files" in data) {
|
|
@@ -1148,16 +1076,16 @@ function DriveFileFormatter({ data }) {
|
|
|
1148
1076
|
if (Array.isArray(files)) {
|
|
1149
1077
|
const driveFiles = files.filter(isDriveFile);
|
|
1150
1078
|
if (driveFiles.length > 0) {
|
|
1151
|
-
return /* @__PURE__ */
|
|
1079
|
+
return /* @__PURE__ */ jsx7("div", { className: "space-y-1.5", children: driveFiles.map((file, i) => /* @__PURE__ */ jsx7(FileCard, { file }, file.id || i)) });
|
|
1152
1080
|
}
|
|
1153
1081
|
}
|
|
1154
1082
|
}
|
|
1155
|
-
return /* @__PURE__ */
|
|
1083
|
+
return /* @__PURE__ */ jsx7("pre", { className: "rounded-lg border border-border bg-background p-3 text-xs text-foreground overflow-x-auto max-h-96 overflow-y-auto", children: JSON.stringify(data, null, 2) });
|
|
1156
1084
|
}
|
|
1157
1085
|
|
|
1158
1086
|
// src/ui/formatters/search.tsx
|
|
1159
1087
|
import { ExternalLink as ExternalLink2, Search as Search2 } from "lucide-react";
|
|
1160
|
-
import { jsx as
|
|
1088
|
+
import { jsx as jsx8, jsxs as jsxs7 } from "react/jsx-runtime";
|
|
1161
1089
|
function isSearchData(data) {
|
|
1162
1090
|
if (typeof data !== "object" || data === null) return false;
|
|
1163
1091
|
return "results" in data || "organic" in data || "answer" in data || "answerBox" in data;
|
|
@@ -1175,10 +1103,10 @@ function getDomain(url) {
|
|
|
1175
1103
|
function ResultCard({ result }) {
|
|
1176
1104
|
const href = result.link || result.url;
|
|
1177
1105
|
const snippet = result.snippet || result.description;
|
|
1178
|
-
return /* @__PURE__ */
|
|
1179
|
-
/* @__PURE__ */
|
|
1180
|
-
/* @__PURE__ */
|
|
1181
|
-
href ? /* @__PURE__ */
|
|
1106
|
+
return /* @__PURE__ */ jsxs7("div", { className: "rounded-lg border border-border bg-card p-3 space-y-1", children: [
|
|
1107
|
+
/* @__PURE__ */ jsxs7("div", { className: "flex items-start gap-2", children: [
|
|
1108
|
+
/* @__PURE__ */ jsxs7("div", { className: "min-w-0 flex-1", children: [
|
|
1109
|
+
href ? /* @__PURE__ */ jsx8(
|
|
1182
1110
|
"a",
|
|
1183
1111
|
{
|
|
1184
1112
|
href,
|
|
@@ -1187,12 +1115,12 @@ function ResultCard({ result }) {
|
|
|
1187
1115
|
className: "text-sm font-medium text-primary hover:underline",
|
|
1188
1116
|
children: result.title || href
|
|
1189
1117
|
}
|
|
1190
|
-
) : /* @__PURE__ */
|
|
1191
|
-
href && /* @__PURE__ */
|
|
1118
|
+
) : /* @__PURE__ */ jsx8("p", { className: "text-sm font-medium text-foreground", children: result.title }),
|
|
1119
|
+
href && /* @__PURE__ */ jsx8("p", { className: "text-xs text-muted-foreground truncate", children: getDomain(href) })
|
|
1192
1120
|
] }),
|
|
1193
|
-
href && /* @__PURE__ */
|
|
1121
|
+
href && /* @__PURE__ */ jsx8("a", { href, target: "_blank", rel: "noopener noreferrer", className: "shrink-0 text-muted-foreground hover:text-foreground", children: /* @__PURE__ */ jsx8(ExternalLink2, { className: "h-3.5 w-3.5" }) })
|
|
1194
1122
|
] }),
|
|
1195
|
-
snippet && /* @__PURE__ */
|
|
1123
|
+
snippet && /* @__PURE__ */ jsx8("p", { className: "text-xs text-muted-foreground line-clamp-2", children: snippet })
|
|
1196
1124
|
] });
|
|
1197
1125
|
}
|
|
1198
1126
|
function SearchFormatter({ data }) {
|
|
@@ -1200,18 +1128,18 @@ function SearchFormatter({ data }) {
|
|
|
1200
1128
|
const results = data.results || data.organic || [];
|
|
1201
1129
|
const answerText = data.answer || data.answerBox?.answer || data.answerBox?.snippet;
|
|
1202
1130
|
const related = data.relatedSearches || data.related_searches;
|
|
1203
|
-
return /* @__PURE__ */
|
|
1204
|
-
answerText && /* @__PURE__ */
|
|
1205
|
-
/* @__PURE__ */
|
|
1206
|
-
data.answerBox?.title && /* @__PURE__ */
|
|
1131
|
+
return /* @__PURE__ */ jsxs7("div", { className: "space-y-3", children: [
|
|
1132
|
+
answerText && /* @__PURE__ */ jsxs7("div", { className: "rounded-lg border border-border bg-card p-3", children: [
|
|
1133
|
+
/* @__PURE__ */ jsx8("p", { className: "text-sm text-foreground", children: answerText }),
|
|
1134
|
+
data.answerBox?.title && /* @__PURE__ */ jsx8("p", { className: "text-xs text-muted-foreground mt-1", children: data.answerBox.title })
|
|
1207
1135
|
] }),
|
|
1208
|
-
results.length > 0 && /* @__PURE__ */
|
|
1209
|
-
related && related.length > 0 && /* @__PURE__ */
|
|
1136
|
+
results.length > 0 && /* @__PURE__ */ jsx8("div", { className: "space-y-2", children: results.filter(isSearchResult).map((result, i) => /* @__PURE__ */ jsx8(ResultCard, { result }, result.link || result.url || i)) }),
|
|
1137
|
+
related && related.length > 0 && /* @__PURE__ */ jsx8("div", { className: "flex flex-wrap gap-1.5", children: related.map((r, i) => /* @__PURE__ */ jsxs7(
|
|
1210
1138
|
"span",
|
|
1211
1139
|
{
|
|
1212
1140
|
className: "inline-flex items-center gap-1 rounded-full bg-muted px-2.5 py-1 text-xs text-muted-foreground",
|
|
1213
1141
|
children: [
|
|
1214
|
-
/* @__PURE__ */
|
|
1142
|
+
/* @__PURE__ */ jsx8(Search2, { className: "h-3 w-3" }),
|
|
1215
1143
|
r.query
|
|
1216
1144
|
]
|
|
1217
1145
|
},
|
|
@@ -1222,15 +1150,15 @@ function SearchFormatter({ data }) {
|
|
|
1222
1150
|
if (Array.isArray(data)) {
|
|
1223
1151
|
const results = data.filter(isSearchResult);
|
|
1224
1152
|
if (results.length > 0) {
|
|
1225
|
-
return /* @__PURE__ */
|
|
1153
|
+
return /* @__PURE__ */ jsx8("div", { className: "space-y-2", children: results.map((result, i) => /* @__PURE__ */ jsx8(ResultCard, { result }, result.link || result.url || i)) });
|
|
1226
1154
|
}
|
|
1227
1155
|
}
|
|
1228
|
-
return /* @__PURE__ */
|
|
1156
|
+
return /* @__PURE__ */ jsx8("pre", { className: "rounded-lg border border-border bg-background p-3 text-xs text-foreground overflow-x-auto max-h-96 overflow-y-auto", children: JSON.stringify(data, null, 2) });
|
|
1229
1157
|
}
|
|
1230
1158
|
|
|
1231
1159
|
// src/ui/formatters/docs.tsx
|
|
1232
1160
|
import { FileText as FileText3, ExternalLink as ExternalLink3 } from "lucide-react";
|
|
1233
|
-
import { jsx as
|
|
1161
|
+
import { jsx as jsx9, jsxs as jsxs8 } from "react/jsx-runtime";
|
|
1234
1162
|
function isDocData(data) {
|
|
1235
1163
|
return typeof data === "object" && data !== null && ("documentId" in data || "title" in data);
|
|
1236
1164
|
}
|
|
@@ -1253,31 +1181,31 @@ function extractTextContent(body) {
|
|
|
1253
1181
|
function DocCard({ doc }) {
|
|
1254
1182
|
const docUrl = doc.url || (doc.documentId ? `https://docs.google.com/document/d/${doc.documentId}` : null);
|
|
1255
1183
|
const textContent = doc.content || extractTextContent(doc.body);
|
|
1256
|
-
return /* @__PURE__ */
|
|
1257
|
-
/* @__PURE__ */
|
|
1258
|
-
/* @__PURE__ */
|
|
1259
|
-
/* @__PURE__ */
|
|
1260
|
-
docUrl && /* @__PURE__ */
|
|
1184
|
+
return /* @__PURE__ */ jsxs8("div", { className: "rounded-lg border border-border bg-card p-3 space-y-2", children: [
|
|
1185
|
+
/* @__PURE__ */ jsxs8("div", { className: "flex items-start gap-2", children: [
|
|
1186
|
+
/* @__PURE__ */ jsx9(FileText3, { className: "h-4 w-4 text-muted-foreground mt-0.5 shrink-0" }),
|
|
1187
|
+
/* @__PURE__ */ jsx9("div", { className: "min-w-0 flex-1", children: /* @__PURE__ */ jsx9("p", { className: "text-sm font-medium text-foreground", children: docUrl ? /* @__PURE__ */ jsx9("a", { href: docUrl, target: "_blank", rel: "noopener noreferrer", className: "hover:underline", children: doc.title || "Untitled document" }) : doc.title || "Untitled document" }) }),
|
|
1188
|
+
docUrl && /* @__PURE__ */ jsx9("a", { href: docUrl, target: "_blank", rel: "noopener noreferrer", className: "shrink-0 text-muted-foreground hover:text-foreground", children: /* @__PURE__ */ jsx9(ExternalLink3, { className: "h-3.5 w-3.5" }) })
|
|
1261
1189
|
] }),
|
|
1262
|
-
textContent && /* @__PURE__ */
|
|
1190
|
+
textContent && /* @__PURE__ */ jsx9("p", { className: "text-xs text-muted-foreground line-clamp-4 whitespace-pre-wrap", children: textContent })
|
|
1263
1191
|
] });
|
|
1264
1192
|
}
|
|
1265
1193
|
function DocsFormatter({ data }) {
|
|
1266
1194
|
if (isDocData(data)) {
|
|
1267
|
-
return /* @__PURE__ */
|
|
1195
|
+
return /* @__PURE__ */ jsx9(DocCard, { doc: data });
|
|
1268
1196
|
}
|
|
1269
1197
|
if (Array.isArray(data)) {
|
|
1270
1198
|
const docs = data.filter(isDocData);
|
|
1271
1199
|
if (docs.length > 0) {
|
|
1272
|
-
return /* @__PURE__ */
|
|
1200
|
+
return /* @__PURE__ */ jsx9("div", { className: "space-y-2", children: docs.map((doc, i) => /* @__PURE__ */ jsx9(DocCard, { doc }, doc.documentId || i)) });
|
|
1273
1201
|
}
|
|
1274
1202
|
}
|
|
1275
|
-
return /* @__PURE__ */
|
|
1203
|
+
return /* @__PURE__ */ jsx9("pre", { className: "rounded-lg border border-border bg-background p-3 text-xs text-foreground overflow-x-auto max-h-96 overflow-y-auto", children: JSON.stringify(data, null, 2) });
|
|
1276
1204
|
}
|
|
1277
1205
|
|
|
1278
1206
|
// src/ui/formatters/sheets.tsx
|
|
1279
1207
|
import { Table2 as Table22, ExternalLink as ExternalLink4 } from "lucide-react";
|
|
1280
|
-
import { jsx as
|
|
1208
|
+
import { jsx as jsx10, jsxs as jsxs9 } from "react/jsx-runtime";
|
|
1281
1209
|
function isSheetsData(data) {
|
|
1282
1210
|
return typeof data === "object" && data !== null && ("spreadsheetId" in data || "values" in data || "range" in data || "updatedRange" in data);
|
|
1283
1211
|
}
|
|
@@ -1285,67 +1213,67 @@ function SheetsTable({ values }) {
|
|
|
1285
1213
|
if (values.length === 0) return null;
|
|
1286
1214
|
const headers = values[0];
|
|
1287
1215
|
const rows = values.slice(1);
|
|
1288
|
-
return /* @__PURE__ */
|
|
1289
|
-
/* @__PURE__ */
|
|
1290
|
-
/* @__PURE__ */
|
|
1216
|
+
return /* @__PURE__ */ jsx10("div", { className: "overflow-x-auto rounded-lg border border-border", children: /* @__PURE__ */ jsxs9("table", { className: "w-full text-xs", children: [
|
|
1217
|
+
/* @__PURE__ */ jsx10("thead", { children: /* @__PURE__ */ jsx10("tr", { className: "border-b border-border bg-muted", children: headers.map((header, i) => /* @__PURE__ */ jsx10("th", { className: "px-3 py-2 text-left font-medium text-foreground whitespace-nowrap", children: String(header) }, i)) }) }),
|
|
1218
|
+
/* @__PURE__ */ jsx10("tbody", { children: rows.map((row, rowIdx) => /* @__PURE__ */ jsx10("tr", { className: "border-b border-border last:border-0", children: headers.map((_, colIdx) => /* @__PURE__ */ jsx10("td", { className: "px-3 py-1.5 text-muted-foreground whitespace-nowrap", children: String(row[colIdx] ?? "") }, colIdx)) }, rowIdx)) })
|
|
1291
1219
|
] }) });
|
|
1292
1220
|
}
|
|
1293
1221
|
function SheetsCard({ sheet }) {
|
|
1294
1222
|
const sheetUrl = sheet.url || (sheet.spreadsheetId ? `https://docs.google.com/spreadsheets/d/${sheet.spreadsheetId}` : null);
|
|
1295
|
-
return /* @__PURE__ */
|
|
1296
|
-
/* @__PURE__ */
|
|
1297
|
-
/* @__PURE__ */
|
|
1298
|
-
/* @__PURE__ */
|
|
1299
|
-
/* @__PURE__ */
|
|
1300
|
-
(sheet.updatedRange || sheet.range) && /* @__PURE__ */
|
|
1223
|
+
return /* @__PURE__ */ jsxs9("div", { className: "space-y-2", children: [
|
|
1224
|
+
/* @__PURE__ */ jsx10("div", { className: "rounded-lg border border-border bg-card p-3", children: /* @__PURE__ */ jsxs9("div", { className: "flex items-start gap-2", children: [
|
|
1225
|
+
/* @__PURE__ */ jsx10(Table22, { className: "h-4 w-4 text-muted-foreground mt-0.5 shrink-0" }),
|
|
1226
|
+
/* @__PURE__ */ jsxs9("div", { className: "min-w-0 flex-1", children: [
|
|
1227
|
+
/* @__PURE__ */ jsx10("p", { className: "text-sm font-medium text-foreground", children: sheetUrl ? /* @__PURE__ */ jsx10("a", { href: sheetUrl, target: "_blank", rel: "noopener noreferrer", className: "hover:underline", children: sheet.title || "Spreadsheet" }) : sheet.title || "Spreadsheet" }),
|
|
1228
|
+
(sheet.updatedRange || sheet.range) && /* @__PURE__ */ jsxs9("p", { className: "text-xs text-muted-foreground", children: [
|
|
1301
1229
|
sheet.updatedRange || sheet.range,
|
|
1302
1230
|
sheet.updatedCells !== void 0 && ` \xB7 ${sheet.updatedCells} cells updated`
|
|
1303
1231
|
] })
|
|
1304
1232
|
] }),
|
|
1305
|
-
sheetUrl && /* @__PURE__ */
|
|
1233
|
+
sheetUrl && /* @__PURE__ */ jsx10("a", { href: sheetUrl, target: "_blank", rel: "noopener noreferrer", className: "shrink-0 text-muted-foreground hover:text-foreground", children: /* @__PURE__ */ jsx10(ExternalLink4, { className: "h-3.5 w-3.5" }) })
|
|
1306
1234
|
] }) }),
|
|
1307
|
-
sheet.values && sheet.values.length > 0 && /* @__PURE__ */
|
|
1235
|
+
sheet.values && sheet.values.length > 0 && /* @__PURE__ */ jsx10(SheetsTable, { values: sheet.values })
|
|
1308
1236
|
] });
|
|
1309
1237
|
}
|
|
1310
1238
|
function SheetsFormatter({ data }) {
|
|
1311
1239
|
if (isSheetsData(data)) {
|
|
1312
|
-
return /* @__PURE__ */
|
|
1240
|
+
return /* @__PURE__ */ jsx10(SheetsCard, { sheet: data });
|
|
1313
1241
|
}
|
|
1314
|
-
return /* @__PURE__ */
|
|
1242
|
+
return /* @__PURE__ */ jsx10("pre", { className: "rounded-lg border border-border bg-background p-3 text-xs text-foreground overflow-x-auto max-h-96 overflow-y-auto", children: JSON.stringify(data, null, 2) });
|
|
1315
1243
|
}
|
|
1316
1244
|
|
|
1317
1245
|
// src/ui/formatters/slides.tsx
|
|
1318
1246
|
import { Presentation as Presentation2, ExternalLink as ExternalLink5 } from "lucide-react";
|
|
1319
|
-
import { jsx as
|
|
1247
|
+
import { jsx as jsx11, jsxs as jsxs10 } from "react/jsx-runtime";
|
|
1320
1248
|
function isSlidesData(data) {
|
|
1321
1249
|
return typeof data === "object" && data !== null && ("presentationId" in data || "title" in data && "slides" in data);
|
|
1322
1250
|
}
|
|
1323
1251
|
function SlidesCard({ presentation }) {
|
|
1324
1252
|
const slideUrl = presentation.url || (presentation.presentationId ? `https://docs.google.com/presentation/d/${presentation.presentationId}` : null);
|
|
1325
1253
|
const slideCount = presentation.slides?.length;
|
|
1326
|
-
return /* @__PURE__ */
|
|
1327
|
-
/* @__PURE__ */
|
|
1328
|
-
/* @__PURE__ */
|
|
1329
|
-
/* @__PURE__ */
|
|
1330
|
-
slideCount !== void 0 && /* @__PURE__ */
|
|
1254
|
+
return /* @__PURE__ */ jsx11("div", { className: "rounded-lg border border-border bg-card p-3", children: /* @__PURE__ */ jsxs10("div", { className: "flex items-start gap-2", children: [
|
|
1255
|
+
/* @__PURE__ */ jsx11(Presentation2, { className: "h-4 w-4 text-muted-foreground mt-0.5 shrink-0" }),
|
|
1256
|
+
/* @__PURE__ */ jsxs10("div", { className: "min-w-0 flex-1", children: [
|
|
1257
|
+
/* @__PURE__ */ jsx11("p", { className: "text-sm font-medium text-foreground", children: slideUrl ? /* @__PURE__ */ jsx11("a", { href: slideUrl, target: "_blank", rel: "noopener noreferrer", className: "hover:underline", children: presentation.title || "Presentation" }) : presentation.title || "Presentation" }),
|
|
1258
|
+
slideCount !== void 0 && /* @__PURE__ */ jsxs10("p", { className: "text-xs text-muted-foreground", children: [
|
|
1331
1259
|
slideCount,
|
|
1332
1260
|
" ",
|
|
1333
1261
|
slideCount === 1 ? "slide" : "slides"
|
|
1334
1262
|
] })
|
|
1335
1263
|
] }),
|
|
1336
|
-
slideUrl && /* @__PURE__ */
|
|
1264
|
+
slideUrl && /* @__PURE__ */ jsx11("a", { href: slideUrl, target: "_blank", rel: "noopener noreferrer", className: "shrink-0 text-muted-foreground hover:text-foreground", children: /* @__PURE__ */ jsx11(ExternalLink5, { className: "h-3.5 w-3.5" }) })
|
|
1337
1265
|
] }) });
|
|
1338
1266
|
}
|
|
1339
1267
|
function SlidesFormatter({ data }) {
|
|
1340
1268
|
if (isSlidesData(data)) {
|
|
1341
|
-
return /* @__PURE__ */
|
|
1269
|
+
return /* @__PURE__ */ jsx11(SlidesCard, { presentation: data });
|
|
1342
1270
|
}
|
|
1343
|
-
return /* @__PURE__ */
|
|
1271
|
+
return /* @__PURE__ */ jsx11("pre", { className: "rounded-lg border border-border bg-background p-3 text-xs text-foreground overflow-x-auto max-h-96 overflow-y-auto", children: JSON.stringify(data, null, 2) });
|
|
1344
1272
|
}
|
|
1345
1273
|
|
|
1346
1274
|
// src/ui/formatters/hubspot.tsx
|
|
1347
1275
|
import { Users as Users3, Building2, Mail as Mail3, Phone as Phone2 } from "lucide-react";
|
|
1348
|
-
import { jsx as
|
|
1276
|
+
import { jsx as jsx12, jsxs as jsxs11 } from "react/jsx-runtime";
|
|
1349
1277
|
function isHubspotContact(data) {
|
|
1350
1278
|
if (typeof data !== "object" || data === null) return false;
|
|
1351
1279
|
const d = data;
|
|
@@ -1366,21 +1294,21 @@ function ContactCard({ contact }) {
|
|
|
1366
1294
|
const phone = contact.phone || p.phone;
|
|
1367
1295
|
const company = contact.company || p.company;
|
|
1368
1296
|
const name = [first, last].filter(Boolean).join(" ") || "Unknown contact";
|
|
1369
|
-
return /* @__PURE__ */
|
|
1370
|
-
/* @__PURE__ */
|
|
1371
|
-
/* @__PURE__ */
|
|
1372
|
-
/* @__PURE__ */
|
|
1373
|
-
/* @__PURE__ */
|
|
1374
|
-
company && /* @__PURE__ */
|
|
1297
|
+
return /* @__PURE__ */ jsxs11("div", { className: "rounded-lg border border-border bg-card p-3 space-y-1.5", children: [
|
|
1298
|
+
/* @__PURE__ */ jsxs11("div", { className: "flex items-start gap-2", children: [
|
|
1299
|
+
/* @__PURE__ */ jsx12(Users3, { className: "h-4 w-4 text-muted-foreground mt-0.5 shrink-0" }),
|
|
1300
|
+
/* @__PURE__ */ jsxs11("div", { className: "min-w-0 flex-1", children: [
|
|
1301
|
+
/* @__PURE__ */ jsx12("p", { className: "text-sm font-medium text-foreground", children: name }),
|
|
1302
|
+
company && /* @__PURE__ */ jsx12("p", { className: "text-xs text-muted-foreground", children: company })
|
|
1375
1303
|
] })
|
|
1376
1304
|
] }),
|
|
1377
|
-
/* @__PURE__ */
|
|
1378
|
-
email && /* @__PURE__ */
|
|
1379
|
-
/* @__PURE__ */
|
|
1305
|
+
/* @__PURE__ */ jsxs11("div", { className: "flex flex-wrap gap-x-4 gap-y-1 pl-6", children: [
|
|
1306
|
+
email && /* @__PURE__ */ jsxs11("span", { className: "flex items-center gap-1 text-xs text-muted-foreground", children: [
|
|
1307
|
+
/* @__PURE__ */ jsx12(Mail3, { className: "h-3 w-3" }),
|
|
1380
1308
|
email
|
|
1381
1309
|
] }),
|
|
1382
|
-
phone && /* @__PURE__ */
|
|
1383
|
-
/* @__PURE__ */
|
|
1310
|
+
phone && /* @__PURE__ */ jsxs11("span", { className: "flex items-center gap-1 text-xs text-muted-foreground", children: [
|
|
1311
|
+
/* @__PURE__ */ jsx12(Phone2, { className: "h-3 w-3" }),
|
|
1384
1312
|
phone
|
|
1385
1313
|
] })
|
|
1386
1314
|
] })
|
|
@@ -1388,18 +1316,18 @@ function ContactCard({ contact }) {
|
|
|
1388
1316
|
}
|
|
1389
1317
|
function CompanyCard({ company }) {
|
|
1390
1318
|
const p = company.properties || {};
|
|
1391
|
-
return /* @__PURE__ */
|
|
1392
|
-
/* @__PURE__ */
|
|
1393
|
-
/* @__PURE__ */
|
|
1394
|
-
/* @__PURE__ */
|
|
1395
|
-
/* @__PURE__ */
|
|
1396
|
-
p.industry && /* @__PURE__ */
|
|
1319
|
+
return /* @__PURE__ */ jsxs11("div", { className: "rounded-lg border border-border bg-card p-3 space-y-1.5", children: [
|
|
1320
|
+
/* @__PURE__ */ jsxs11("div", { className: "flex items-start gap-2", children: [
|
|
1321
|
+
/* @__PURE__ */ jsx12(Building2, { className: "h-4 w-4 text-muted-foreground mt-0.5 shrink-0" }),
|
|
1322
|
+
/* @__PURE__ */ jsxs11("div", { className: "min-w-0 flex-1", children: [
|
|
1323
|
+
/* @__PURE__ */ jsx12("p", { className: "text-sm font-medium text-foreground", children: p.name || "Unknown company" }),
|
|
1324
|
+
p.industry && /* @__PURE__ */ jsx12("p", { className: "text-xs text-muted-foreground", children: p.industry })
|
|
1397
1325
|
] })
|
|
1398
1326
|
] }),
|
|
1399
|
-
/* @__PURE__ */
|
|
1400
|
-
p.domain && /* @__PURE__ */
|
|
1401
|
-
p.phone && /* @__PURE__ */
|
|
1402
|
-
/* @__PURE__ */
|
|
1327
|
+
/* @__PURE__ */ jsxs11("div", { className: "flex flex-wrap gap-x-4 gap-y-1 pl-6", children: [
|
|
1328
|
+
p.domain && /* @__PURE__ */ jsx12("span", { className: "text-xs text-muted-foreground", children: p.domain }),
|
|
1329
|
+
p.phone && /* @__PURE__ */ jsxs11("span", { className: "flex items-center gap-1 text-xs text-muted-foreground", children: [
|
|
1330
|
+
/* @__PURE__ */ jsx12(Phone2, { className: "h-3 w-3" }),
|
|
1403
1331
|
p.phone
|
|
1404
1332
|
] })
|
|
1405
1333
|
] })
|
|
@@ -1407,19 +1335,19 @@ function CompanyCard({ company }) {
|
|
|
1407
1335
|
}
|
|
1408
1336
|
function HubspotFormatter({ data }) {
|
|
1409
1337
|
if (isHubspotContact(data)) {
|
|
1410
|
-
return /* @__PURE__ */
|
|
1338
|
+
return /* @__PURE__ */ jsx12(ContactCard, { contact: data });
|
|
1411
1339
|
}
|
|
1412
1340
|
if (isHubspotCompany(data)) {
|
|
1413
|
-
return /* @__PURE__ */
|
|
1341
|
+
return /* @__PURE__ */ jsx12(CompanyCard, { company: data });
|
|
1414
1342
|
}
|
|
1415
1343
|
if (Array.isArray(data)) {
|
|
1416
1344
|
const contacts = data.filter(isHubspotContact);
|
|
1417
1345
|
if (contacts.length > 0) {
|
|
1418
|
-
return /* @__PURE__ */
|
|
1346
|
+
return /* @__PURE__ */ jsx12("div", { className: "space-y-2", children: contacts.map((c, i) => /* @__PURE__ */ jsx12(ContactCard, { contact: c }, c.id || i)) });
|
|
1419
1347
|
}
|
|
1420
1348
|
const companies = data.filter(isHubspotCompany);
|
|
1421
1349
|
if (companies.length > 0) {
|
|
1422
|
-
return /* @__PURE__ */
|
|
1350
|
+
return /* @__PURE__ */ jsx12("div", { className: "space-y-2", children: companies.map((c, i) => /* @__PURE__ */ jsx12(CompanyCard, { company: c }, c.id || i)) });
|
|
1423
1351
|
}
|
|
1424
1352
|
}
|
|
1425
1353
|
if (typeof data === "object" && data !== null && "contacts" in data) {
|
|
@@ -1427,7 +1355,7 @@ function HubspotFormatter({ data }) {
|
|
|
1427
1355
|
if (Array.isArray(contacts)) {
|
|
1428
1356
|
const valid = contacts.filter(isHubspotContact);
|
|
1429
1357
|
if (valid.length > 0) {
|
|
1430
|
-
return /* @__PURE__ */
|
|
1358
|
+
return /* @__PURE__ */ jsx12("div", { className: "space-y-2", children: valid.map((c, i) => /* @__PURE__ */ jsx12(ContactCard, { contact: c }, c.id || i)) });
|
|
1431
1359
|
}
|
|
1432
1360
|
}
|
|
1433
1361
|
}
|
|
@@ -1436,20 +1364,20 @@ function HubspotFormatter({ data }) {
|
|
|
1436
1364
|
if (Array.isArray(results)) {
|
|
1437
1365
|
const contacts = results.filter(isHubspotContact);
|
|
1438
1366
|
if (contacts.length > 0) {
|
|
1439
|
-
return /* @__PURE__ */
|
|
1367
|
+
return /* @__PURE__ */ jsx12("div", { className: "space-y-2", children: contacts.map((c, i) => /* @__PURE__ */ jsx12(ContactCard, { contact: c }, c.id || i)) });
|
|
1440
1368
|
}
|
|
1441
1369
|
const companies = results.filter(isHubspotCompany);
|
|
1442
1370
|
if (companies.length > 0) {
|
|
1443
|
-
return /* @__PURE__ */
|
|
1371
|
+
return /* @__PURE__ */ jsx12("div", { className: "space-y-2", children: companies.map((c, i) => /* @__PURE__ */ jsx12(CompanyCard, { company: c }, c.id || i)) });
|
|
1444
1372
|
}
|
|
1445
1373
|
}
|
|
1446
1374
|
}
|
|
1447
|
-
return /* @__PURE__ */
|
|
1375
|
+
return /* @__PURE__ */ jsx12("pre", { className: "rounded-lg border border-border bg-background p-3 text-xs text-foreground overflow-x-auto max-h-96 overflow-y-auto", children: JSON.stringify(data, null, 2) });
|
|
1448
1376
|
}
|
|
1449
1377
|
|
|
1450
1378
|
// src/ui/formatters/linear.tsx
|
|
1451
1379
|
import { CircleDot as CircleDot3, FolderKanban } from "lucide-react";
|
|
1452
|
-
import { jsx as
|
|
1380
|
+
import { jsx as jsx13, jsxs as jsxs12 } from "react/jsx-runtime";
|
|
1453
1381
|
function isLinearIssue(data) {
|
|
1454
1382
|
if (typeof data !== "object" || data === null) return false;
|
|
1455
1383
|
return "title" in data && ("identifier" in data || "state" in data || "priority" in data);
|
|
@@ -1468,24 +1396,24 @@ var PRIORITY_LABELS = {
|
|
|
1468
1396
|
function IssueCard({ issue }) {
|
|
1469
1397
|
const priorityInfo = issue.priority !== void 0 ? PRIORITY_LABELS[issue.priority] : null;
|
|
1470
1398
|
const assigneeName = issue.assignee?.displayName || issue.assignee?.name;
|
|
1471
|
-
return /* @__PURE__ */
|
|
1472
|
-
/* @__PURE__ */
|
|
1399
|
+
return /* @__PURE__ */ jsx13("div", { className: "rounded-lg border border-border bg-card p-3 space-y-1.5", children: /* @__PURE__ */ jsxs12("div", { className: "flex items-start gap-2", children: [
|
|
1400
|
+
/* @__PURE__ */ jsx13(
|
|
1473
1401
|
CircleDot3,
|
|
1474
1402
|
{
|
|
1475
1403
|
className: "h-4 w-4 mt-0.5 shrink-0",
|
|
1476
1404
|
style: issue.state?.color ? { color: issue.state.color } : void 0
|
|
1477
1405
|
}
|
|
1478
1406
|
),
|
|
1479
|
-
/* @__PURE__ */
|
|
1480
|
-
/* @__PURE__ */
|
|
1481
|
-
issue.url ? /* @__PURE__ */
|
|
1482
|
-
issue.identifier && /* @__PURE__ */
|
|
1407
|
+
/* @__PURE__ */ jsxs12("div", { className: "min-w-0 flex-1", children: [
|
|
1408
|
+
/* @__PURE__ */ jsxs12("p", { className: "text-sm font-medium text-foreground", children: [
|
|
1409
|
+
issue.url ? /* @__PURE__ */ jsx13("a", { href: issue.url, target: "_blank", rel: "noopener noreferrer", className: "hover:underline", children: issue.title }) : issue.title,
|
|
1410
|
+
issue.identifier && /* @__PURE__ */ jsxs12("span", { className: "text-muted-foreground font-normal", children: [
|
|
1483
1411
|
" ",
|
|
1484
1412
|
issue.identifier
|
|
1485
1413
|
] })
|
|
1486
1414
|
] }),
|
|
1487
|
-
/* @__PURE__ */
|
|
1488
|
-
issue.state?.name && /* @__PURE__ */
|
|
1415
|
+
/* @__PURE__ */ jsxs12("div", { className: "flex items-center gap-2 mt-0.5 flex-wrap", children: [
|
|
1416
|
+
issue.state?.name && /* @__PURE__ */ jsx13(
|
|
1489
1417
|
"span",
|
|
1490
1418
|
{
|
|
1491
1419
|
className: "rounded-full bg-muted px-2 py-0.5 text-xs",
|
|
@@ -1493,31 +1421,31 @@ function IssueCard({ issue }) {
|
|
|
1493
1421
|
children: issue.state.name
|
|
1494
1422
|
}
|
|
1495
1423
|
),
|
|
1496
|
-
priorityInfo && /* @__PURE__ */
|
|
1497
|
-
assigneeName && /* @__PURE__ */
|
|
1424
|
+
priorityInfo && /* @__PURE__ */ jsx13("span", { className: `text-xs ${priorityInfo.style}`, children: issue.priorityLabel || priorityInfo.label }),
|
|
1425
|
+
assigneeName && /* @__PURE__ */ jsx13("span", { className: "text-xs text-muted-foreground", children: assigneeName })
|
|
1498
1426
|
] })
|
|
1499
1427
|
] })
|
|
1500
1428
|
] }) });
|
|
1501
1429
|
}
|
|
1502
1430
|
function ProjectCard({ project }) {
|
|
1503
1431
|
const progressPercent = project.progress !== void 0 ? Math.round(project.progress * 100) : null;
|
|
1504
|
-
return /* @__PURE__ */
|
|
1505
|
-
/* @__PURE__ */
|
|
1506
|
-
/* @__PURE__ */
|
|
1507
|
-
/* @__PURE__ */
|
|
1508
|
-
/* @__PURE__ */
|
|
1509
|
-
project.state && /* @__PURE__ */
|
|
1432
|
+
return /* @__PURE__ */ jsxs12("div", { className: "rounded-lg border border-border bg-card p-3 space-y-2", children: [
|
|
1433
|
+
/* @__PURE__ */ jsxs12("div", { className: "flex items-start gap-2", children: [
|
|
1434
|
+
/* @__PURE__ */ jsx13(FolderKanban, { className: "h-4 w-4 text-muted-foreground mt-0.5 shrink-0" }),
|
|
1435
|
+
/* @__PURE__ */ jsxs12("div", { className: "min-w-0 flex-1", children: [
|
|
1436
|
+
/* @__PURE__ */ jsx13("p", { className: "text-sm font-medium text-foreground", children: project.url ? /* @__PURE__ */ jsx13("a", { href: project.url, target: "_blank", rel: "noopener noreferrer", className: "hover:underline", children: project.name }) : project.name }),
|
|
1437
|
+
project.state && /* @__PURE__ */ jsx13("span", { className: "text-xs text-muted-foreground", children: project.state })
|
|
1510
1438
|
] })
|
|
1511
1439
|
] }),
|
|
1512
|
-
progressPercent !== null && /* @__PURE__ */
|
|
1513
|
-
/* @__PURE__ */
|
|
1440
|
+
progressPercent !== null && /* @__PURE__ */ jsxs12("div", { className: "space-y-1", children: [
|
|
1441
|
+
/* @__PURE__ */ jsx13("div", { className: "h-1.5 rounded-full bg-muted overflow-hidden", children: /* @__PURE__ */ jsx13(
|
|
1514
1442
|
"div",
|
|
1515
1443
|
{
|
|
1516
1444
|
className: "h-full rounded-full bg-primary transition-all",
|
|
1517
1445
|
style: { width: `${progressPercent}%` }
|
|
1518
1446
|
}
|
|
1519
1447
|
) }),
|
|
1520
|
-
/* @__PURE__ */
|
|
1448
|
+
/* @__PURE__ */ jsxs12("p", { className: "text-xs text-muted-foreground text-right", children: [
|
|
1521
1449
|
progressPercent,
|
|
1522
1450
|
"%"
|
|
1523
1451
|
] })
|
|
@@ -1526,19 +1454,19 @@ function ProjectCard({ project }) {
|
|
|
1526
1454
|
}
|
|
1527
1455
|
function LinearFormatter({ data }) {
|
|
1528
1456
|
if (isLinearIssue(data)) {
|
|
1529
|
-
return /* @__PURE__ */
|
|
1457
|
+
return /* @__PURE__ */ jsx13(IssueCard, { issue: data });
|
|
1530
1458
|
}
|
|
1531
1459
|
if (isLinearProject(data)) {
|
|
1532
|
-
return /* @__PURE__ */
|
|
1460
|
+
return /* @__PURE__ */ jsx13(ProjectCard, { project: data });
|
|
1533
1461
|
}
|
|
1534
1462
|
if (Array.isArray(data)) {
|
|
1535
1463
|
const issues = data.filter(isLinearIssue);
|
|
1536
1464
|
if (issues.length > 0) {
|
|
1537
|
-
return /* @__PURE__ */
|
|
1465
|
+
return /* @__PURE__ */ jsx13("div", { className: "space-y-2", children: issues.map((issue, i) => /* @__PURE__ */ jsx13(IssueCard, { issue }, issue.id || i)) });
|
|
1538
1466
|
}
|
|
1539
1467
|
const projects = data.filter(isLinearProject);
|
|
1540
1468
|
if (projects.length > 0) {
|
|
1541
|
-
return /* @__PURE__ */
|
|
1469
|
+
return /* @__PURE__ */ jsx13("div", { className: "space-y-2", children: projects.map((project, i) => /* @__PURE__ */ jsx13(ProjectCard, { project }, project.id || i)) });
|
|
1542
1470
|
}
|
|
1543
1471
|
}
|
|
1544
1472
|
if (typeof data === "object" && data !== null) {
|
|
@@ -1546,20 +1474,20 @@ function LinearFormatter({ data }) {
|
|
|
1546
1474
|
if (Array.isArray(arr)) {
|
|
1547
1475
|
const issues = arr.filter(isLinearIssue);
|
|
1548
1476
|
if (issues.length > 0) {
|
|
1549
|
-
return /* @__PURE__ */
|
|
1477
|
+
return /* @__PURE__ */ jsx13("div", { className: "space-y-2", children: issues.map((issue, i) => /* @__PURE__ */ jsx13(IssueCard, { issue }, issue.id || i)) });
|
|
1550
1478
|
}
|
|
1551
1479
|
const projects = arr.filter(isLinearProject);
|
|
1552
1480
|
if (projects.length > 0) {
|
|
1553
|
-
return /* @__PURE__ */
|
|
1481
|
+
return /* @__PURE__ */ jsx13("div", { className: "space-y-2", children: projects.map((project, i) => /* @__PURE__ */ jsx13(ProjectCard, { project }, project.id || i)) });
|
|
1554
1482
|
}
|
|
1555
1483
|
}
|
|
1556
1484
|
}
|
|
1557
|
-
return /* @__PURE__ */
|
|
1485
|
+
return /* @__PURE__ */ jsx13("pre", { className: "rounded-lg border border-border bg-background p-3 text-xs text-foreground overflow-x-auto max-h-96 overflow-y-auto", children: JSON.stringify(data, null, 2) });
|
|
1558
1486
|
}
|
|
1559
1487
|
|
|
1560
1488
|
// src/ui/formatters/pipedrive.tsx
|
|
1561
1489
|
import { Briefcase as Briefcase2, DollarSign } from "lucide-react";
|
|
1562
|
-
import { jsx as
|
|
1490
|
+
import { jsx as jsx14, jsxs as jsxs13 } from "react/jsx-runtime";
|
|
1563
1491
|
function isPipedriveDeal(data) {
|
|
1564
1492
|
return typeof data === "object" && data !== null && ("title" in data || "value" in data || "status" in data) && !("subject" in data);
|
|
1565
1493
|
}
|
|
@@ -1591,35 +1519,35 @@ function getStatusBadge(status) {
|
|
|
1591
1519
|
}
|
|
1592
1520
|
function DealCard({ deal }) {
|
|
1593
1521
|
const statusBadge = getStatusBadge(deal.status);
|
|
1594
|
-
return /* @__PURE__ */
|
|
1595
|
-
/* @__PURE__ */
|
|
1596
|
-
/* @__PURE__ */
|
|
1597
|
-
/* @__PURE__ */
|
|
1598
|
-
/* @__PURE__ */
|
|
1599
|
-
/* @__PURE__ */
|
|
1600
|
-
deal.value !== void 0 && /* @__PURE__ */
|
|
1601
|
-
/* @__PURE__ */
|
|
1522
|
+
return /* @__PURE__ */ jsxs13("div", { className: "rounded-lg border border-border bg-card p-3 space-y-1.5", children: [
|
|
1523
|
+
/* @__PURE__ */ jsxs13("div", { className: "flex items-start gap-2", children: [
|
|
1524
|
+
/* @__PURE__ */ jsx14(Briefcase2, { className: "h-4 w-4 text-muted-foreground mt-0.5 shrink-0" }),
|
|
1525
|
+
/* @__PURE__ */ jsxs13("div", { className: "min-w-0 flex-1", children: [
|
|
1526
|
+
/* @__PURE__ */ jsx14("p", { className: "text-sm font-medium text-foreground", children: deal.title || "Untitled deal" }),
|
|
1527
|
+
/* @__PURE__ */ jsxs13("div", { className: "flex items-center gap-2 mt-0.5 flex-wrap", children: [
|
|
1528
|
+
deal.value !== void 0 && /* @__PURE__ */ jsxs13("span", { className: "flex items-center gap-1 text-xs font-medium text-foreground", children: [
|
|
1529
|
+
/* @__PURE__ */ jsx14(DollarSign, { className: "h-3 w-3" }),
|
|
1602
1530
|
formatCurrency(deal.value, deal.currency)
|
|
1603
1531
|
] }),
|
|
1604
|
-
statusBadge && /* @__PURE__ */
|
|
1532
|
+
statusBadge && /* @__PURE__ */ jsx14("span", { className: `rounded-full px-2 py-0.5 text-xs ${statusBadge.className}`, children: statusBadge.label })
|
|
1605
1533
|
] })
|
|
1606
1534
|
] })
|
|
1607
1535
|
] }),
|
|
1608
|
-
/* @__PURE__ */
|
|
1609
|
-
deal.person_name && /* @__PURE__ */
|
|
1610
|
-
deal.org_name && /* @__PURE__ */
|
|
1611
|
-
deal.stage_name && /* @__PURE__ */
|
|
1536
|
+
/* @__PURE__ */ jsxs13("div", { className: "flex flex-wrap gap-x-4 gap-y-1 pl-6 text-xs text-muted-foreground", children: [
|
|
1537
|
+
deal.person_name && /* @__PURE__ */ jsx14("span", { children: deal.person_name }),
|
|
1538
|
+
deal.org_name && /* @__PURE__ */ jsx14("span", { children: deal.org_name }),
|
|
1539
|
+
deal.stage_name && /* @__PURE__ */ jsx14("span", { children: deal.stage_name })
|
|
1612
1540
|
] })
|
|
1613
1541
|
] });
|
|
1614
1542
|
}
|
|
1615
1543
|
function PipedriveFormatter({ data }) {
|
|
1616
1544
|
if (isPipedriveDeal(data)) {
|
|
1617
|
-
return /* @__PURE__ */
|
|
1545
|
+
return /* @__PURE__ */ jsx14(DealCard, { deal: data });
|
|
1618
1546
|
}
|
|
1619
1547
|
if (Array.isArray(data)) {
|
|
1620
1548
|
const deals = data.filter(isPipedriveDeal);
|
|
1621
1549
|
if (deals.length > 0) {
|
|
1622
|
-
return /* @__PURE__ */
|
|
1550
|
+
return /* @__PURE__ */ jsx14("div", { className: "space-y-2", children: deals.map((deal, i) => /* @__PURE__ */ jsx14(DealCard, { deal }, deal.id || i)) });
|
|
1623
1551
|
}
|
|
1624
1552
|
}
|
|
1625
1553
|
if (typeof data === "object" && data !== null && "deals" in data) {
|
|
@@ -1627,14 +1555,14 @@ function PipedriveFormatter({ data }) {
|
|
|
1627
1555
|
if (Array.isArray(items)) {
|
|
1628
1556
|
const deals = items.filter(isPipedriveDeal);
|
|
1629
1557
|
if (deals.length > 0) {
|
|
1630
|
-
return /* @__PURE__ */
|
|
1558
|
+
return /* @__PURE__ */ jsx14("div", { className: "space-y-2", children: deals.map((deal, i) => /* @__PURE__ */ jsx14(DealCard, { deal }, deal.id || i)) });
|
|
1631
1559
|
}
|
|
1632
1560
|
}
|
|
1633
1561
|
}
|
|
1634
1562
|
if (typeof data === "object" && data !== null && "deal" in data) {
|
|
1635
1563
|
const item = data.deal;
|
|
1636
1564
|
if (isPipedriveDeal(item)) {
|
|
1637
|
-
return /* @__PURE__ */
|
|
1565
|
+
return /* @__PURE__ */ jsx14(DealCard, { deal: item });
|
|
1638
1566
|
}
|
|
1639
1567
|
}
|
|
1640
1568
|
if (typeof data === "object" && data !== null && "data" in data) {
|
|
@@ -1642,19 +1570,19 @@ function PipedriveFormatter({ data }) {
|
|
|
1642
1570
|
if (Array.isArray(items)) {
|
|
1643
1571
|
const deals = items.filter(isPipedriveDeal);
|
|
1644
1572
|
if (deals.length > 0) {
|
|
1645
|
-
return /* @__PURE__ */
|
|
1573
|
+
return /* @__PURE__ */ jsx14("div", { className: "space-y-2", children: deals.map((deal, i) => /* @__PURE__ */ jsx14(DealCard, { deal }, deal.id || i)) });
|
|
1646
1574
|
}
|
|
1647
1575
|
}
|
|
1648
1576
|
if (isPipedriveDeal(items)) {
|
|
1649
|
-
return /* @__PURE__ */
|
|
1577
|
+
return /* @__PURE__ */ jsx14(DealCard, { deal: items });
|
|
1650
1578
|
}
|
|
1651
1579
|
}
|
|
1652
|
-
return /* @__PURE__ */
|
|
1580
|
+
return /* @__PURE__ */ jsx14("pre", { className: "rounded-lg border border-border bg-background p-3 text-xs text-foreground overflow-x-auto max-h-96 overflow-y-auto", children: JSON.stringify(data, null, 2) });
|
|
1653
1581
|
}
|
|
1654
1582
|
|
|
1655
1583
|
// src/ui/formatters/compute.tsx
|
|
1656
|
-
import { Terminal as Terminal2, AlertTriangle, Check as
|
|
1657
|
-
import { jsx as
|
|
1584
|
+
import { Terminal as Terminal2, AlertTriangle, Check as Check2, X as X2 } from "lucide-react";
|
|
1585
|
+
import { jsx as jsx15, jsxs as jsxs14 } from "react/jsx-runtime";
|
|
1658
1586
|
function isComputeData(data) {
|
|
1659
1587
|
if (typeof data !== "object" || data === null) return false;
|
|
1660
1588
|
return "stdout" in data || "stderr" in data || "exit_code" in data || "exitCode" in data || "output" in data;
|
|
@@ -1666,47 +1594,47 @@ function formatDuration(ms) {
|
|
|
1666
1594
|
}
|
|
1667
1595
|
function ComputeFormatter({ data }) {
|
|
1668
1596
|
if (!isComputeData(data)) {
|
|
1669
|
-
return /* @__PURE__ */
|
|
1597
|
+
return /* @__PURE__ */ jsx15("pre", { className: "rounded-lg border border-border bg-background p-3 text-xs text-foreground overflow-x-auto max-h-96 overflow-y-auto", children: JSON.stringify(data, null, 2) });
|
|
1670
1598
|
}
|
|
1671
1599
|
const exitCode = data.exit_code ?? data.exitCode;
|
|
1672
1600
|
const duration = data.duration_ms ?? data.duration;
|
|
1673
1601
|
const stdout = data.stdout || data.output || "";
|
|
1674
1602
|
const stderr = data.stderr || data.error || "";
|
|
1675
1603
|
const success = exitCode === void 0 || exitCode === 0;
|
|
1676
|
-
return /* @__PURE__ */
|
|
1677
|
-
/* @__PURE__ */
|
|
1678
|
-
/* @__PURE__ */
|
|
1679
|
-
/* @__PURE__ */
|
|
1680
|
-
/* @__PURE__ */
|
|
1681
|
-
/* @__PURE__ */
|
|
1682
|
-
duration !== void 0 && /* @__PURE__ */
|
|
1683
|
-
exitCode !== void 0 && /* @__PURE__ */
|
|
1684
|
-
success ? /* @__PURE__ */
|
|
1604
|
+
return /* @__PURE__ */ jsxs14("div", { className: "space-y-2", children: [
|
|
1605
|
+
/* @__PURE__ */ jsxs14("div", { className: "rounded-lg border border-border bg-background overflow-hidden", children: [
|
|
1606
|
+
/* @__PURE__ */ jsxs14("div", { className: "flex items-center gap-2 px-3 py-1.5 bg-muted border-b border-border", children: [
|
|
1607
|
+
/* @__PURE__ */ jsx15(Terminal2, { className: "h-3.5 w-3.5 text-muted-foreground" }),
|
|
1608
|
+
/* @__PURE__ */ jsx15("span", { className: "text-xs text-muted-foreground flex-1", children: "Output" }),
|
|
1609
|
+
/* @__PURE__ */ jsxs14("div", { className: "flex items-center gap-2", children: [
|
|
1610
|
+
duration !== void 0 && /* @__PURE__ */ jsx15("span", { className: "text-xs text-muted-foreground", children: formatDuration(duration) }),
|
|
1611
|
+
exitCode !== void 0 && /* @__PURE__ */ jsxs14("span", { className: `inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-xs ${success ? "text-green-500 bg-green-500/10" : "text-destructive bg-destructive/10"}`, children: [
|
|
1612
|
+
success ? /* @__PURE__ */ jsx15(Check2, { className: "h-3 w-3" }) : /* @__PURE__ */ jsx15(X2, { className: "h-3 w-3" }),
|
|
1685
1613
|
"exit ",
|
|
1686
1614
|
exitCode
|
|
1687
1615
|
] })
|
|
1688
1616
|
] })
|
|
1689
1617
|
] }),
|
|
1690
|
-
stdout && /* @__PURE__ */
|
|
1691
|
-
stderr && /* @__PURE__ */
|
|
1692
|
-
/* @__PURE__ */
|
|
1693
|
-
/* @__PURE__ */
|
|
1694
|
-
/* @__PURE__ */
|
|
1618
|
+
stdout && /* @__PURE__ */ jsx15("pre", { className: "p-3 text-xs text-foreground overflow-x-auto max-h-80 overflow-y-auto font-mono whitespace-pre-wrap", children: stdout }),
|
|
1619
|
+
stderr && /* @__PURE__ */ jsxs14("div", { className: "border-t border-border", children: [
|
|
1620
|
+
/* @__PURE__ */ jsxs14("div", { className: "flex items-center gap-1.5 px-3 py-1 bg-destructive/5", children: [
|
|
1621
|
+
/* @__PURE__ */ jsx15(AlertTriangle, { className: "h-3 w-3 text-destructive" }),
|
|
1622
|
+
/* @__PURE__ */ jsx15("span", { className: "text-xs text-destructive", children: "stderr" })
|
|
1695
1623
|
] }),
|
|
1696
|
-
/* @__PURE__ */
|
|
1624
|
+
/* @__PURE__ */ jsx15("pre", { className: "p-3 text-xs text-destructive overflow-x-auto max-h-40 overflow-y-auto font-mono whitespace-pre-wrap", children: stderr })
|
|
1697
1625
|
] }),
|
|
1698
|
-
!stdout && !stderr && /* @__PURE__ */
|
|
1626
|
+
!stdout && !stderr && /* @__PURE__ */ jsx15("p", { className: "p-3 text-xs text-muted-foreground italic", children: "No output" })
|
|
1699
1627
|
] }),
|
|
1700
|
-
data.files && data.files.length > 0 && /* @__PURE__ */
|
|
1701
|
-
/* @__PURE__ */
|
|
1702
|
-
file.url ? /* @__PURE__ */
|
|
1628
|
+
data.files && data.files.length > 0 && /* @__PURE__ */ jsx15("div", { className: "space-y-1", children: data.files.map((file, i) => /* @__PURE__ */ jsxs14("div", { className: "flex items-center gap-2 rounded-lg border border-border bg-card p-2", children: [
|
|
1629
|
+
/* @__PURE__ */ jsx15(Terminal2, { className: "h-3.5 w-3.5 text-muted-foreground shrink-0" }),
|
|
1630
|
+
file.url ? /* @__PURE__ */ jsx15("a", { href: file.url, target: "_blank", rel: "noopener noreferrer", className: "text-xs text-primary hover:underline truncate", children: file.name || file.url }) : /* @__PURE__ */ jsx15("span", { className: "text-xs text-foreground truncate", children: file.name })
|
|
1703
1631
|
] }, i)) })
|
|
1704
1632
|
] });
|
|
1705
1633
|
}
|
|
1706
1634
|
|
|
1707
1635
|
// src/ui/formatters/resend.tsx
|
|
1708
1636
|
import { Send as Send2, Clock as Clock2 } from "lucide-react";
|
|
1709
|
-
import { jsx as
|
|
1637
|
+
import { jsx as jsx16, jsxs as jsxs15 } from "react/jsx-runtime";
|
|
1710
1638
|
function isResendData(data) {
|
|
1711
1639
|
return typeof data === "object" && data !== null && ("id" in data || "to" in data) && ("subject" in data || "from" in data || "created_at" in data);
|
|
1712
1640
|
}
|
|
@@ -1724,49 +1652,49 @@ function formatTimestamp(dateStr) {
|
|
|
1724
1652
|
}
|
|
1725
1653
|
}
|
|
1726
1654
|
function ResendCard({ email }) {
|
|
1727
|
-
return /* @__PURE__ */
|
|
1728
|
-
/* @__PURE__ */
|
|
1729
|
-
/* @__PURE__ */
|
|
1730
|
-
/* @__PURE__ */
|
|
1731
|
-
/* @__PURE__ */
|
|
1732
|
-
email.subject && /* @__PURE__ */
|
|
1655
|
+
return /* @__PURE__ */ jsxs15("div", { className: "rounded-lg border border-border bg-card p-3 space-y-2", children: [
|
|
1656
|
+
/* @__PURE__ */ jsxs15("div", { className: "flex items-start gap-2", children: [
|
|
1657
|
+
/* @__PURE__ */ jsx16("div", { className: "flex h-8 w-8 items-center justify-center rounded-full bg-green-500/10 shrink-0", children: /* @__PURE__ */ jsx16(Send2, { className: "h-4 w-4 text-green-500" }) }),
|
|
1658
|
+
/* @__PURE__ */ jsxs15("div", { className: "min-w-0 flex-1", children: [
|
|
1659
|
+
/* @__PURE__ */ jsx16("p", { className: "text-sm font-medium text-foreground", children: "Email sent" }),
|
|
1660
|
+
email.subject && /* @__PURE__ */ jsx16("p", { className: "text-xs text-muted-foreground truncate", children: email.subject })
|
|
1733
1661
|
] })
|
|
1734
1662
|
] }),
|
|
1735
|
-
/* @__PURE__ */
|
|
1736
|
-
/* @__PURE__ */
|
|
1737
|
-
/* @__PURE__ */
|
|
1663
|
+
/* @__PURE__ */ jsxs15("div", { className: "pl-10 space-y-1 text-xs text-muted-foreground", children: [
|
|
1664
|
+
/* @__PURE__ */ jsxs15("p", { children: [
|
|
1665
|
+
/* @__PURE__ */ jsx16("span", { className: "text-foreground", children: "To:" }),
|
|
1738
1666
|
" ",
|
|
1739
1667
|
formatRecipients2(email.to)
|
|
1740
1668
|
] }),
|
|
1741
|
-
email.from && /* @__PURE__ */
|
|
1742
|
-
/* @__PURE__ */
|
|
1669
|
+
email.from && /* @__PURE__ */ jsxs15("p", { children: [
|
|
1670
|
+
/* @__PURE__ */ jsx16("span", { className: "text-foreground", children: "From:" }),
|
|
1743
1671
|
" ",
|
|
1744
1672
|
email.from
|
|
1745
1673
|
] }),
|
|
1746
|
-
email.created_at && /* @__PURE__ */
|
|
1747
|
-
/* @__PURE__ */
|
|
1674
|
+
email.created_at && /* @__PURE__ */ jsxs15("p", { className: "flex items-center gap-1", children: [
|
|
1675
|
+
/* @__PURE__ */ jsx16(Clock2, { className: "h-3 w-3" }),
|
|
1748
1676
|
formatTimestamp(email.created_at)
|
|
1749
1677
|
] }),
|
|
1750
|
-
email.last_event && /* @__PURE__ */
|
|
1678
|
+
email.last_event && /* @__PURE__ */ jsx16("span", { className: "inline-block rounded-full bg-muted px-2 py-0.5 text-xs text-muted-foreground capitalize", children: email.last_event })
|
|
1751
1679
|
] })
|
|
1752
1680
|
] });
|
|
1753
1681
|
}
|
|
1754
1682
|
function ResendFormatter({ data }) {
|
|
1755
1683
|
if (isResendData(data)) {
|
|
1756
|
-
return /* @__PURE__ */
|
|
1684
|
+
return /* @__PURE__ */ jsx16(ResendCard, { email: data });
|
|
1757
1685
|
}
|
|
1758
1686
|
if (typeof data === "object" && data !== null && "data" in data) {
|
|
1759
1687
|
const inner = data.data;
|
|
1760
1688
|
if (isResendData(inner)) {
|
|
1761
|
-
return /* @__PURE__ */
|
|
1689
|
+
return /* @__PURE__ */ jsx16(ResendCard, { email: inner });
|
|
1762
1690
|
}
|
|
1763
1691
|
}
|
|
1764
|
-
return /* @__PURE__ */
|
|
1692
|
+
return /* @__PURE__ */ jsx16("pre", { className: "rounded-lg border border-border bg-background p-3 text-xs text-foreground overflow-x-auto max-h-96 overflow-y-auto", children: JSON.stringify(data, null, 2) });
|
|
1765
1693
|
}
|
|
1766
1694
|
|
|
1767
1695
|
// src/ui/formatters/inbox.tsx
|
|
1768
1696
|
import { Bell as Bell2, Calendar as Calendar3, Mail as Mail4, MessageSquare as MessageSquare3 } from "lucide-react";
|
|
1769
|
-
import { jsx as
|
|
1697
|
+
import { jsx as jsx17, jsxs as jsxs16 } from "react/jsx-runtime";
|
|
1770
1698
|
function isInboxEvent(data) {
|
|
1771
1699
|
if (typeof data !== "object" || data === null) return false;
|
|
1772
1700
|
if ("event_type" in data || "summary" in data) return true;
|
|
@@ -1814,30 +1742,30 @@ function EventCard2({ event }) {
|
|
|
1814
1742
|
const source = event.provider || event.source;
|
|
1815
1743
|
const snippet = event.description || event.payload?.snippet || event.payload?.text;
|
|
1816
1744
|
const isUnread = event.status === "unread" || event.read === false;
|
|
1817
|
-
return /* @__PURE__ */
|
|
1818
|
-
/* @__PURE__ */
|
|
1819
|
-
/* @__PURE__ */
|
|
1820
|
-
/* @__PURE__ */
|
|
1821
|
-
/* @__PURE__ */
|
|
1822
|
-
eventType && /* @__PURE__ */
|
|
1823
|
-
source && /* @__PURE__ */
|
|
1824
|
-
isUnread && /* @__PURE__ */
|
|
1825
|
-
timestamp && /* @__PURE__ */
|
|
1745
|
+
return /* @__PURE__ */ jsxs16("div", { className: "rounded-lg border border-border bg-card p-3 space-y-1.5", children: [
|
|
1746
|
+
/* @__PURE__ */ jsxs16("div", { className: "flex items-start gap-2", children: [
|
|
1747
|
+
/* @__PURE__ */ jsx17(Icon, { className: "h-4 w-4 text-muted-foreground mt-0.5 shrink-0" }),
|
|
1748
|
+
/* @__PURE__ */ jsxs16("div", { className: "min-w-0 flex-1", children: [
|
|
1749
|
+
/* @__PURE__ */ jsxs16("div", { className: "flex items-center gap-2", children: [
|
|
1750
|
+
eventType && /* @__PURE__ */ jsx17("span", { className: "rounded-full bg-muted px-2 py-0.5 text-xs text-muted-foreground capitalize", children: eventType }),
|
|
1751
|
+
source && /* @__PURE__ */ jsx17("span", { className: "text-xs text-muted-foreground capitalize", children: source }),
|
|
1752
|
+
isUnread && /* @__PURE__ */ jsx17("span", { className: "h-1.5 w-1.5 rounded-full bg-primary shrink-0" }),
|
|
1753
|
+
timestamp && /* @__PURE__ */ jsx17("span", { className: "text-xs text-muted-foreground ml-auto shrink-0", children: formatTimestamp2(timestamp) })
|
|
1826
1754
|
] }),
|
|
1827
|
-
title && /* @__PURE__ */
|
|
1755
|
+
title && /* @__PURE__ */ jsx17("p", { className: "text-sm font-medium text-foreground mt-1 line-clamp-1", children: title })
|
|
1828
1756
|
] })
|
|
1829
1757
|
] }),
|
|
1830
|
-
snippet && /* @__PURE__ */
|
|
1758
|
+
snippet && /* @__PURE__ */ jsx17("p", { className: "text-xs text-muted-foreground line-clamp-2 pl-6", children: snippet })
|
|
1831
1759
|
] });
|
|
1832
1760
|
}
|
|
1833
1761
|
function InboxFormatter({ data }) {
|
|
1834
1762
|
if (isInboxEvent(data)) {
|
|
1835
|
-
return /* @__PURE__ */
|
|
1763
|
+
return /* @__PURE__ */ jsx17(EventCard2, { event: data });
|
|
1836
1764
|
}
|
|
1837
1765
|
if (Array.isArray(data)) {
|
|
1838
1766
|
const events = data.filter(isInboxEvent);
|
|
1839
1767
|
if (events.length > 0) {
|
|
1840
|
-
return /* @__PURE__ */
|
|
1768
|
+
return /* @__PURE__ */ jsx17("div", { className: "space-y-2", children: events.map((event, i) => /* @__PURE__ */ jsx17(EventCard2, { event }, event.id || i)) });
|
|
1841
1769
|
}
|
|
1842
1770
|
}
|
|
1843
1771
|
if (typeof data === "object" && data !== null && "events" in data) {
|
|
@@ -1845,16 +1773,16 @@ function InboxFormatter({ data }) {
|
|
|
1845
1773
|
if (Array.isArray(events)) {
|
|
1846
1774
|
const inboxEvents = events.filter(isInboxEvent);
|
|
1847
1775
|
if (inboxEvents.length > 0) {
|
|
1848
|
-
return /* @__PURE__ */
|
|
1776
|
+
return /* @__PURE__ */ jsx17("div", { className: "space-y-2", children: inboxEvents.map((event, i) => /* @__PURE__ */ jsx17(EventCard2, { event }, event.id || i)) });
|
|
1849
1777
|
}
|
|
1850
1778
|
}
|
|
1851
1779
|
}
|
|
1852
|
-
return /* @__PURE__ */
|
|
1780
|
+
return /* @__PURE__ */ jsx17("pre", { className: "rounded-lg border border-border bg-background p-3 text-xs text-foreground overflow-x-auto max-h-96 overflow-y-auto", children: JSON.stringify(data, null, 2) });
|
|
1853
1781
|
}
|
|
1854
1782
|
|
|
1855
1783
|
// src/ui/formatters/discord.tsx
|
|
1856
1784
|
import { MessageSquare as MessageSquare4, Hash as Hash2, Shield, Users as Users4 } from "lucide-react";
|
|
1857
|
-
import { jsx as
|
|
1785
|
+
import { jsx as jsx18, jsxs as jsxs17 } from "react/jsx-runtime";
|
|
1858
1786
|
function isGuildData(data) {
|
|
1859
1787
|
return typeof data === "object" && data !== null && "name" in data && ("owner" in data || "member_count" in data || "icon" in data);
|
|
1860
1788
|
}
|
|
@@ -1882,75 +1810,75 @@ function formatRelativeDate3(dateStr) {
|
|
|
1882
1810
|
}
|
|
1883
1811
|
}
|
|
1884
1812
|
function GuildCard({ guild }) {
|
|
1885
|
-
return /* @__PURE__ */
|
|
1886
|
-
/* @__PURE__ */
|
|
1887
|
-
/* @__PURE__ */
|
|
1888
|
-
/* @__PURE__ */
|
|
1889
|
-
guild.owner && /* @__PURE__ */
|
|
1813
|
+
return /* @__PURE__ */ jsxs17("div", { className: "rounded-lg border border-border bg-card p-3 space-y-1", children: [
|
|
1814
|
+
/* @__PURE__ */ jsxs17("div", { className: "flex items-center gap-2", children: [
|
|
1815
|
+
/* @__PURE__ */ jsx18(Shield, { className: "h-4 w-4 text-muted-foreground shrink-0" }),
|
|
1816
|
+
/* @__PURE__ */ jsx18("span", { className: "text-sm font-medium text-foreground flex-1", children: guild.name }),
|
|
1817
|
+
guild.owner && /* @__PURE__ */ jsx18("span", { className: "rounded-full bg-yellow-500/10 px-2 py-0.5 text-xs text-yellow-600", children: "Owner" })
|
|
1890
1818
|
] }),
|
|
1891
|
-
guild.member_count !== void 0 && /* @__PURE__ */
|
|
1892
|
-
/* @__PURE__ */
|
|
1819
|
+
guild.member_count !== void 0 && /* @__PURE__ */ jsxs17("div", { className: "flex items-center gap-1 pl-6 text-xs text-muted-foreground", children: [
|
|
1820
|
+
/* @__PURE__ */ jsx18(Users4, { className: "h-3 w-3" }),
|
|
1893
1821
|
guild.member_count,
|
|
1894
1822
|
" members"
|
|
1895
1823
|
] })
|
|
1896
1824
|
] });
|
|
1897
1825
|
}
|
|
1898
1826
|
function ChannelCard2({ channel }) {
|
|
1899
|
-
return /* @__PURE__ */
|
|
1900
|
-
/* @__PURE__ */
|
|
1901
|
-
/* @__PURE__ */
|
|
1902
|
-
channel.member_count !== void 0 && /* @__PURE__ */
|
|
1827
|
+
return /* @__PURE__ */ jsxs17("div", { className: "flex items-center gap-2 rounded-lg border border-border bg-card p-3", children: [
|
|
1828
|
+
/* @__PURE__ */ jsx18(Hash2, { className: "h-4 w-4 text-muted-foreground shrink-0" }),
|
|
1829
|
+
/* @__PURE__ */ jsx18("span", { className: "text-sm text-foreground flex-1", children: channel.name || channel.id }),
|
|
1830
|
+
channel.member_count !== void 0 && /* @__PURE__ */ jsxs17("span", { className: "text-xs text-muted-foreground", children: [
|
|
1903
1831
|
channel.member_count,
|
|
1904
1832
|
" members"
|
|
1905
1833
|
] })
|
|
1906
1834
|
] });
|
|
1907
1835
|
}
|
|
1908
1836
|
function MessageCard({ message }) {
|
|
1909
|
-
return /* @__PURE__ */
|
|
1910
|
-
/* @__PURE__ */
|
|
1911
|
-
/* @__PURE__ */
|
|
1912
|
-
message.author?.username && /* @__PURE__ */
|
|
1913
|
-
message.timestamp && /* @__PURE__ */
|
|
1837
|
+
return /* @__PURE__ */ jsxs17("div", { className: "rounded-lg border border-border bg-card p-3 space-y-1.5", children: [
|
|
1838
|
+
/* @__PURE__ */ jsxs17("div", { className: "flex items-center gap-2", children: [
|
|
1839
|
+
/* @__PURE__ */ jsx18(MessageSquare4, { className: "h-4 w-4 text-muted-foreground shrink-0" }),
|
|
1840
|
+
message.author?.username && /* @__PURE__ */ jsx18("span", { className: "text-xs font-medium text-foreground", children: message.author.username }),
|
|
1841
|
+
message.timestamp && /* @__PURE__ */ jsx18("span", { className: "text-xs text-muted-foreground ml-auto", children: formatRelativeDate3(message.timestamp) })
|
|
1914
1842
|
] }),
|
|
1915
|
-
message.content && /* @__PURE__ */
|
|
1843
|
+
message.content && /* @__PURE__ */ jsx18("p", { className: "text-sm text-foreground line-clamp-3", children: message.content })
|
|
1916
1844
|
] });
|
|
1917
1845
|
}
|
|
1918
1846
|
function DiscordFormatter({ data }) {
|
|
1919
1847
|
if (typeof data === "object" && data !== null && "guilds" in data) {
|
|
1920
1848
|
const guilds = data.guilds;
|
|
1921
1849
|
if (Array.isArray(guilds)) {
|
|
1922
|
-
return /* @__PURE__ */
|
|
1850
|
+
return /* @__PURE__ */ jsx18("div", { className: "space-y-1.5", children: guilds.filter(isGuildData).map((g, i) => /* @__PURE__ */ jsx18(GuildCard, { guild: g }, g.id || i)) });
|
|
1923
1851
|
}
|
|
1924
1852
|
}
|
|
1925
1853
|
if (typeof data === "object" && data !== null && "channels" in data) {
|
|
1926
1854
|
const channels = data.channels;
|
|
1927
1855
|
if (Array.isArray(channels)) {
|
|
1928
|
-
return /* @__PURE__ */
|
|
1856
|
+
return /* @__PURE__ */ jsx18("div", { className: "space-y-1.5", children: channels.filter(isChannelData).map((c, i) => /* @__PURE__ */ jsx18(ChannelCard2, { channel: c }, c.id || i)) });
|
|
1929
1857
|
}
|
|
1930
1858
|
}
|
|
1931
1859
|
if (typeof data === "object" && data !== null && "messages" in data) {
|
|
1932
1860
|
const messages = data.messages;
|
|
1933
1861
|
if (Array.isArray(messages)) {
|
|
1934
|
-
return /* @__PURE__ */
|
|
1862
|
+
return /* @__PURE__ */ jsx18("div", { className: "space-y-2", children: messages.filter(isMessageData).map((m, i) => /* @__PURE__ */ jsx18(MessageCard, { message: m }, m.id || i)) });
|
|
1935
1863
|
}
|
|
1936
1864
|
}
|
|
1937
|
-
if (isMessageData(data)) return /* @__PURE__ */
|
|
1865
|
+
if (isMessageData(data)) return /* @__PURE__ */ jsx18(MessageCard, { message: data });
|
|
1938
1866
|
if (Array.isArray(data)) {
|
|
1939
1867
|
const guilds = data.filter(isGuildData);
|
|
1940
1868
|
if (guilds.length > 0) {
|
|
1941
|
-
return /* @__PURE__ */
|
|
1869
|
+
return /* @__PURE__ */ jsx18("div", { className: "space-y-1.5", children: guilds.map((g, i) => /* @__PURE__ */ jsx18(GuildCard, { guild: g }, g.id || i)) });
|
|
1942
1870
|
}
|
|
1943
1871
|
const messages = data.filter(isMessageData);
|
|
1944
1872
|
if (messages.length > 0) {
|
|
1945
|
-
return /* @__PURE__ */
|
|
1873
|
+
return /* @__PURE__ */ jsx18("div", { className: "space-y-2", children: messages.map((m, i) => /* @__PURE__ */ jsx18(MessageCard, { message: m }, m.id || i)) });
|
|
1946
1874
|
}
|
|
1947
1875
|
}
|
|
1948
|
-
return /* @__PURE__ */
|
|
1876
|
+
return /* @__PURE__ */ jsx18("pre", { className: "rounded-lg border border-border bg-background p-3 text-xs text-foreground overflow-x-auto max-h-96 overflow-y-auto", children: JSON.stringify(data, null, 2) });
|
|
1949
1877
|
}
|
|
1950
1878
|
|
|
1951
1879
|
// src/ui/formatters/notion.tsx
|
|
1952
1880
|
import { FileText as FileText4, Database, ExternalLink as ExternalLink6, Clock as Clock3 } from "lucide-react";
|
|
1953
|
-
import { jsx as
|
|
1881
|
+
import { jsx as jsx19, jsxs as jsxs18 } from "react/jsx-runtime";
|
|
1954
1882
|
function isNotionPage(data) {
|
|
1955
1883
|
if (typeof data !== "object" || data === null) return false;
|
|
1956
1884
|
if ("properties" in data) return true;
|
|
@@ -2001,26 +1929,26 @@ function formatRelativeDate4(dateStr) {
|
|
|
2001
1929
|
}
|
|
2002
1930
|
function PageCard({ page }) {
|
|
2003
1931
|
const title = extractPageTitle(page);
|
|
2004
|
-
return /* @__PURE__ */
|
|
2005
|
-
/* @__PURE__ */
|
|
2006
|
-
/* @__PURE__ */
|
|
2007
|
-
/* @__PURE__ */
|
|
2008
|
-
(page.last_edited_time || page.lastEditedTime) && /* @__PURE__ */
|
|
2009
|
-
/* @__PURE__ */
|
|
1932
|
+
return /* @__PURE__ */ jsx19("div", { className: "rounded-lg border border-border bg-card p-3 space-y-1", children: /* @__PURE__ */ jsxs18("div", { className: "flex items-start gap-2", children: [
|
|
1933
|
+
/* @__PURE__ */ jsx19(FileText4, { className: "h-4 w-4 text-muted-foreground mt-0.5 shrink-0" }),
|
|
1934
|
+
/* @__PURE__ */ jsx19("div", { className: "min-w-0 flex-1", children: /* @__PURE__ */ jsx19("p", { className: "text-sm font-medium text-foreground truncate", children: page.url ? /* @__PURE__ */ jsx19("a", { href: page.url, target: "_blank", rel: "noopener noreferrer", className: "hover:underline", children: title }) : title }) }),
|
|
1935
|
+
/* @__PURE__ */ jsxs18("div", { className: "flex items-center gap-1.5 shrink-0", children: [
|
|
1936
|
+
(page.last_edited_time || page.lastEditedTime) && /* @__PURE__ */ jsxs18("span", { className: "flex items-center gap-1 text-xs text-muted-foreground", children: [
|
|
1937
|
+
/* @__PURE__ */ jsx19(Clock3, { className: "h-3 w-3" }),
|
|
2010
1938
|
formatRelativeDate4(page.last_edited_time || page.lastEditedTime)
|
|
2011
1939
|
] }),
|
|
2012
|
-
page.url && /* @__PURE__ */
|
|
1940
|
+
page.url && /* @__PURE__ */ jsx19("a", { href: page.url, target: "_blank", rel: "noopener noreferrer", className: "text-muted-foreground hover:text-foreground", children: /* @__PURE__ */ jsx19(ExternalLink6, { className: "h-3 w-3" }) })
|
|
2013
1941
|
] })
|
|
2014
1942
|
] }) });
|
|
2015
1943
|
}
|
|
2016
1944
|
function DatabaseCard({ db }) {
|
|
2017
1945
|
const title = typeof db.title === "string" ? db.title : Array.isArray(db.title) && db.title.length > 0 ? db.title.map((t) => t.plain_text || "").join("") : "Untitled database";
|
|
2018
1946
|
const desc = typeof db.description === "string" ? db.description : Array.isArray(db.description) && db.description.length > 0 ? db.description.map((d) => d.plain_text || "").join("") : null;
|
|
2019
|
-
return /* @__PURE__ */
|
|
2020
|
-
/* @__PURE__ */
|
|
2021
|
-
/* @__PURE__ */
|
|
2022
|
-
/* @__PURE__ */
|
|
2023
|
-
desc && /* @__PURE__ */
|
|
1947
|
+
return /* @__PURE__ */ jsx19("div", { className: "rounded-lg border border-border bg-card p-3 space-y-1", children: /* @__PURE__ */ jsxs18("div", { className: "flex items-start gap-2", children: [
|
|
1948
|
+
/* @__PURE__ */ jsx19(Database, { className: "h-4 w-4 text-muted-foreground mt-0.5 shrink-0" }),
|
|
1949
|
+
/* @__PURE__ */ jsxs18("div", { className: "min-w-0 flex-1", children: [
|
|
1950
|
+
/* @__PURE__ */ jsx19("p", { className: "text-sm font-medium text-foreground truncate", children: db.url ? /* @__PURE__ */ jsx19("a", { href: db.url, target: "_blank", rel: "noopener noreferrer", className: "hover:underline", children: title }) : title }),
|
|
1951
|
+
desc && /* @__PURE__ */ jsx19("p", { className: "text-xs text-muted-foreground line-clamp-2", children: desc })
|
|
2024
1952
|
] })
|
|
2025
1953
|
] }) });
|
|
2026
1954
|
}
|
|
@@ -2028,13 +1956,13 @@ function NotionFormatter({ data }) {
|
|
|
2028
1956
|
if (typeof data === "object" && data !== null && "pages" in data) {
|
|
2029
1957
|
const pages = data.pages;
|
|
2030
1958
|
if (Array.isArray(pages)) {
|
|
2031
|
-
return /* @__PURE__ */
|
|
1959
|
+
return /* @__PURE__ */ jsx19("div", { className: "space-y-1.5", children: pages.filter(isNotionPage).map((p, i) => /* @__PURE__ */ jsx19(PageCard, { page: p }, p.id || i)) });
|
|
2032
1960
|
}
|
|
2033
1961
|
}
|
|
2034
1962
|
if (typeof data === "object" && data !== null && "databases" in data) {
|
|
2035
1963
|
const dbs = data.databases;
|
|
2036
1964
|
if (Array.isArray(dbs)) {
|
|
2037
|
-
return /* @__PURE__ */
|
|
1965
|
+
return /* @__PURE__ */ jsx19("div", { className: "space-y-1.5", children: dbs.filter(isNotionDatabase).map((d, i) => /* @__PURE__ */ jsx19(DatabaseCard, { db: d }, d.id || i)) });
|
|
2038
1966
|
}
|
|
2039
1967
|
}
|
|
2040
1968
|
if (typeof data === "object" && data !== null && "results" in data) {
|
|
@@ -2042,28 +1970,28 @@ function NotionFormatter({ data }) {
|
|
|
2042
1970
|
if (Array.isArray(results)) {
|
|
2043
1971
|
const pages = results.filter(isNotionPage);
|
|
2044
1972
|
if (pages.length > 0) {
|
|
2045
|
-
return /* @__PURE__ */
|
|
1973
|
+
return /* @__PURE__ */ jsx19("div", { className: "space-y-1.5", children: pages.map((p, i) => /* @__PURE__ */ jsx19(PageCard, { page: p }, p.id || i)) });
|
|
2046
1974
|
}
|
|
2047
1975
|
const dbs = results.filter(isNotionDatabase);
|
|
2048
1976
|
if (dbs.length > 0) {
|
|
2049
|
-
return /* @__PURE__ */
|
|
1977
|
+
return /* @__PURE__ */ jsx19("div", { className: "space-y-1.5", children: dbs.map((d, i) => /* @__PURE__ */ jsx19(DatabaseCard, { db: d }, d.id || i)) });
|
|
2050
1978
|
}
|
|
2051
1979
|
}
|
|
2052
1980
|
}
|
|
2053
|
-
if (isNotionPage(data)) return /* @__PURE__ */
|
|
2054
|
-
if (isNotionDatabase(data)) return /* @__PURE__ */
|
|
1981
|
+
if (isNotionPage(data)) return /* @__PURE__ */ jsx19(PageCard, { page: data });
|
|
1982
|
+
if (isNotionDatabase(data)) return /* @__PURE__ */ jsx19(DatabaseCard, { db: data });
|
|
2055
1983
|
if (Array.isArray(data)) {
|
|
2056
1984
|
const pages = data.filter(isNotionPage);
|
|
2057
1985
|
if (pages.length > 0) {
|
|
2058
|
-
return /* @__PURE__ */
|
|
1986
|
+
return /* @__PURE__ */ jsx19("div", { className: "space-y-1.5", children: pages.map((p, i) => /* @__PURE__ */ jsx19(PageCard, { page: p }, p.id || i)) });
|
|
2059
1987
|
}
|
|
2060
1988
|
}
|
|
2061
|
-
return /* @__PURE__ */
|
|
1989
|
+
return /* @__PURE__ */ jsx19("pre", { className: "rounded-lg border border-border bg-background p-3 text-xs text-foreground overflow-x-auto max-h-96 overflow-y-auto", children: JSON.stringify(data, null, 2) });
|
|
2062
1990
|
}
|
|
2063
1991
|
|
|
2064
1992
|
// src/ui/formatters/twitter.tsx
|
|
2065
1993
|
import { MessageCircle as MessageCircle2, Heart, Repeat2, Clock as Clock4 } from "lucide-react";
|
|
2066
|
-
import { jsx as
|
|
1994
|
+
import { jsx as jsx20, jsxs as jsxs19 } from "react/jsx-runtime";
|
|
2067
1995
|
function isTweetData(data) {
|
|
2068
1996
|
return typeof data === "object" && data !== null && "text" in data;
|
|
2069
1997
|
}
|
|
@@ -2089,31 +2017,31 @@ function TweetCard({ tweet }) {
|
|
|
2089
2017
|
const likes = tweet.public_metrics?.like_count ?? tweet.like_count;
|
|
2090
2018
|
const retweets = tweet.public_metrics?.retweet_count ?? tweet.retweet_count;
|
|
2091
2019
|
const replies = tweet.public_metrics?.reply_count;
|
|
2092
|
-
return /* @__PURE__ */
|
|
2093
|
-
/* @__PURE__ */
|
|
2094
|
-
/* @__PURE__ */
|
|
2095
|
-
username && /* @__PURE__ */
|
|
2020
|
+
return /* @__PURE__ */ jsxs19("div", { className: "rounded-lg border border-border bg-card p-3 space-y-1.5", children: [
|
|
2021
|
+
/* @__PURE__ */ jsxs19("div", { className: "flex items-center gap-2", children: [
|
|
2022
|
+
/* @__PURE__ */ jsx20(MessageCircle2, { className: "h-4 w-4 text-muted-foreground shrink-0" }),
|
|
2023
|
+
username && /* @__PURE__ */ jsxs19("span", { className: "text-xs font-medium text-foreground", children: [
|
|
2096
2024
|
"@",
|
|
2097
2025
|
username
|
|
2098
2026
|
] }),
|
|
2099
|
-
tweet.author?.name && /* @__PURE__ */
|
|
2100
|
-
tweet.created_at && /* @__PURE__ */
|
|
2101
|
-
/* @__PURE__ */
|
|
2027
|
+
tweet.author?.name && /* @__PURE__ */ jsx20("span", { className: "text-xs text-muted-foreground", children: tweet.author.name }),
|
|
2028
|
+
tweet.created_at && /* @__PURE__ */ jsxs19("span", { className: "flex items-center gap-1 text-xs text-muted-foreground ml-auto", children: [
|
|
2029
|
+
/* @__PURE__ */ jsx20(Clock4, { className: "h-3 w-3" }),
|
|
2102
2030
|
formatRelativeDate5(tweet.created_at)
|
|
2103
2031
|
] })
|
|
2104
2032
|
] }),
|
|
2105
|
-
tweet.text && /* @__PURE__ */
|
|
2106
|
-
(likes !== void 0 || retweets !== void 0 || replies !== void 0) && /* @__PURE__ */
|
|
2107
|
-
likes !== void 0 && /* @__PURE__ */
|
|
2108
|
-
/* @__PURE__ */
|
|
2033
|
+
tweet.text && /* @__PURE__ */ jsx20("p", { className: "text-sm text-foreground line-clamp-4", children: tweet.text }),
|
|
2034
|
+
(likes !== void 0 || retweets !== void 0 || replies !== void 0) && /* @__PURE__ */ jsxs19("div", { className: "flex items-center gap-4 pt-0.5", children: [
|
|
2035
|
+
likes !== void 0 && /* @__PURE__ */ jsxs19("span", { className: "flex items-center gap-1 text-xs text-muted-foreground", children: [
|
|
2036
|
+
/* @__PURE__ */ jsx20(Heart, { className: "h-3 w-3" }),
|
|
2109
2037
|
likes
|
|
2110
2038
|
] }),
|
|
2111
|
-
retweets !== void 0 && /* @__PURE__ */
|
|
2112
|
-
/* @__PURE__ */
|
|
2039
|
+
retweets !== void 0 && /* @__PURE__ */ jsxs19("span", { className: "flex items-center gap-1 text-xs text-muted-foreground", children: [
|
|
2040
|
+
/* @__PURE__ */ jsx20(Repeat2, { className: "h-3 w-3" }),
|
|
2113
2041
|
retweets
|
|
2114
2042
|
] }),
|
|
2115
|
-
replies !== void 0 && /* @__PURE__ */
|
|
2116
|
-
/* @__PURE__ */
|
|
2043
|
+
replies !== void 0 && /* @__PURE__ */ jsxs19("span", { className: "flex items-center gap-1 text-xs text-muted-foreground", children: [
|
|
2044
|
+
/* @__PURE__ */ jsx20(MessageCircle2, { className: "h-3 w-3" }),
|
|
2117
2045
|
replies
|
|
2118
2046
|
] })
|
|
2119
2047
|
] })
|
|
@@ -2123,26 +2051,26 @@ function TwitterFormatter({ data }) {
|
|
|
2123
2051
|
if (typeof data === "object" && data !== null && "tweets" in data) {
|
|
2124
2052
|
const tweets = data.tweets;
|
|
2125
2053
|
if (Array.isArray(tweets)) {
|
|
2126
|
-
return /* @__PURE__ */
|
|
2054
|
+
return /* @__PURE__ */ jsx20("div", { className: "space-y-2", children: tweets.filter(isTweetData).map((t, i) => /* @__PURE__ */ jsx20(TweetCard, { tweet: t }, t.id || i)) });
|
|
2127
2055
|
}
|
|
2128
2056
|
}
|
|
2129
2057
|
if (typeof data === "object" && data !== null && "data" in data && Array.isArray(data.data)) {
|
|
2130
2058
|
const tweets = data.data;
|
|
2131
|
-
return /* @__PURE__ */
|
|
2059
|
+
return /* @__PURE__ */ jsx20("div", { className: "space-y-2", children: tweets.filter(isTweetData).map((t, i) => /* @__PURE__ */ jsx20(TweetCard, { tweet: t }, t.id || i)) });
|
|
2132
2060
|
}
|
|
2133
|
-
if (isTweetData(data)) return /* @__PURE__ */
|
|
2061
|
+
if (isTweetData(data)) return /* @__PURE__ */ jsx20(TweetCard, { tweet: data });
|
|
2134
2062
|
if (Array.isArray(data)) {
|
|
2135
2063
|
const tweets = data.filter(isTweetData);
|
|
2136
2064
|
if (tweets.length > 0) {
|
|
2137
|
-
return /* @__PURE__ */
|
|
2065
|
+
return /* @__PURE__ */ jsx20("div", { className: "space-y-2", children: tweets.map((t, i) => /* @__PURE__ */ jsx20(TweetCard, { tweet: t }, t.id || i)) });
|
|
2138
2066
|
}
|
|
2139
2067
|
}
|
|
2140
|
-
return /* @__PURE__ */
|
|
2068
|
+
return /* @__PURE__ */ jsx20("pre", { className: "rounded-lg border border-border bg-background p-3 text-xs text-foreground overflow-x-auto max-h-96 overflow-y-auto", children: JSON.stringify(data, null, 2) });
|
|
2141
2069
|
}
|
|
2142
2070
|
|
|
2143
2071
|
// src/ui/formatters/telegram.tsx
|
|
2144
2072
|
import { MessageSquare as MessageSquare5, User, Clock as Clock5 } from "lucide-react";
|
|
2145
|
-
import { jsx as
|
|
2073
|
+
import { jsx as jsx21, jsxs as jsxs20 } from "react/jsx-runtime";
|
|
2146
2074
|
function isTelegramMessage(data) {
|
|
2147
2075
|
return typeof data === "object" && data !== null && ("text" in data || "message_id" in data);
|
|
2148
2076
|
}
|
|
@@ -2165,27 +2093,27 @@ function formatUnixDate(ts) {
|
|
|
2165
2093
|
}
|
|
2166
2094
|
function MessageCard2({ message }) {
|
|
2167
2095
|
const fromName = message.from ? [message.from.first_name, message.from.last_name].filter(Boolean).join(" ") || message.from.username : void 0;
|
|
2168
|
-
return /* @__PURE__ */
|
|
2169
|
-
/* @__PURE__ */
|
|
2170
|
-
/* @__PURE__ */
|
|
2171
|
-
fromName && /* @__PURE__ */
|
|
2172
|
-
/* @__PURE__ */
|
|
2096
|
+
return /* @__PURE__ */ jsxs20("div", { className: "rounded-lg border border-border bg-card p-3 space-y-1.5", children: [
|
|
2097
|
+
/* @__PURE__ */ jsxs20("div", { className: "flex items-center gap-2", children: [
|
|
2098
|
+
/* @__PURE__ */ jsx21(MessageSquare5, { className: "h-4 w-4 text-muted-foreground shrink-0" }),
|
|
2099
|
+
fromName && /* @__PURE__ */ jsxs20("span", { className: "flex items-center gap-1 text-xs font-medium text-foreground", children: [
|
|
2100
|
+
/* @__PURE__ */ jsx21(User, { className: "h-3 w-3" }),
|
|
2173
2101
|
fromName
|
|
2174
2102
|
] }),
|
|
2175
|
-
message.chat?.title && /* @__PURE__ */
|
|
2176
|
-
message.date && /* @__PURE__ */
|
|
2177
|
-
/* @__PURE__ */
|
|
2103
|
+
message.chat?.title && /* @__PURE__ */ jsx21("span", { className: "text-xs text-muted-foreground", children: message.chat.title }),
|
|
2104
|
+
message.date && /* @__PURE__ */ jsxs20("span", { className: "flex items-center gap-1 text-xs text-muted-foreground ml-auto", children: [
|
|
2105
|
+
/* @__PURE__ */ jsx21(Clock5, { className: "h-3 w-3" }),
|
|
2178
2106
|
formatUnixDate(message.date)
|
|
2179
2107
|
] })
|
|
2180
2108
|
] }),
|
|
2181
|
-
message.text && /* @__PURE__ */
|
|
2109
|
+
message.text && /* @__PURE__ */ jsx21("p", { className: "text-sm text-foreground line-clamp-3", children: message.text })
|
|
2182
2110
|
] });
|
|
2183
2111
|
}
|
|
2184
2112
|
function TelegramFormatter({ data }) {
|
|
2185
2113
|
if (typeof data === "object" && data !== null && "messages" in data) {
|
|
2186
2114
|
const msgs = data.messages;
|
|
2187
2115
|
if (Array.isArray(msgs)) {
|
|
2188
|
-
return /* @__PURE__ */
|
|
2116
|
+
return /* @__PURE__ */ jsx21("div", { className: "space-y-2", children: msgs.filter(isTelegramMessage).map((m, i) => /* @__PURE__ */ jsx21(MessageCard2, { message: m }, m.message_id || i)) });
|
|
2189
2117
|
}
|
|
2190
2118
|
}
|
|
2191
2119
|
if (typeof data === "object" && data !== null && "result" in data) {
|
|
@@ -2193,23 +2121,23 @@ function TelegramFormatter({ data }) {
|
|
|
2193
2121
|
if (Array.isArray(result)) {
|
|
2194
2122
|
const msgs = result.filter(isTelegramMessage);
|
|
2195
2123
|
if (msgs.length > 0) {
|
|
2196
|
-
return /* @__PURE__ */
|
|
2124
|
+
return /* @__PURE__ */ jsx21("div", { className: "space-y-2", children: msgs.map((m, i) => /* @__PURE__ */ jsx21(MessageCard2, { message: m }, m.message_id || i)) });
|
|
2197
2125
|
}
|
|
2198
2126
|
}
|
|
2199
2127
|
}
|
|
2200
|
-
if (isTelegramMessage(data)) return /* @__PURE__ */
|
|
2128
|
+
if (isTelegramMessage(data)) return /* @__PURE__ */ jsx21(MessageCard2, { message: data });
|
|
2201
2129
|
if (Array.isArray(data)) {
|
|
2202
2130
|
const msgs = data.filter(isTelegramMessage);
|
|
2203
2131
|
if (msgs.length > 0) {
|
|
2204
|
-
return /* @__PURE__ */
|
|
2132
|
+
return /* @__PURE__ */ jsx21("div", { className: "space-y-2", children: msgs.map((m, i) => /* @__PURE__ */ jsx21(MessageCard2, { message: m }, m.message_id || i)) });
|
|
2205
2133
|
}
|
|
2206
2134
|
}
|
|
2207
|
-
return /* @__PURE__ */
|
|
2135
|
+
return /* @__PURE__ */ jsx21("pre", { className: "rounded-lg border border-border bg-background p-3 text-xs text-foreground overflow-x-auto max-h-96 overflow-y-auto", children: JSON.stringify(data, null, 2) });
|
|
2208
2136
|
}
|
|
2209
2137
|
|
|
2210
2138
|
// src/ui/formatters/stripe.tsx
|
|
2211
2139
|
import { CreditCard as CreditCard2, User as User2, FileText as FileText5, Clock as Clock6, RefreshCw } from "lucide-react";
|
|
2212
|
-
import { jsx as
|
|
2140
|
+
import { jsx as jsx22, jsxs as jsxs21 } from "react/jsx-runtime";
|
|
2213
2141
|
function isCustomer(data) {
|
|
2214
2142
|
return typeof data === "object" && data !== null && ("email" in data || "name" in data) && !("amount_due" in data) && !("plan" in data);
|
|
2215
2143
|
}
|
|
@@ -2248,106 +2176,106 @@ var STATUS_STYLES = {
|
|
|
2248
2176
|
trialing: "bg-yellow-500/10 text-yellow-600"
|
|
2249
2177
|
};
|
|
2250
2178
|
function StatusBadge({ status }) {
|
|
2251
|
-
return /* @__PURE__ */
|
|
2179
|
+
return /* @__PURE__ */ jsx22("span", { className: `rounded-full px-2 py-0.5 text-xs ${STATUS_STYLES[status] || "bg-muted text-muted-foreground"}`, children: status });
|
|
2252
2180
|
}
|
|
2253
2181
|
function CustomerCard({ customer }) {
|
|
2254
|
-
return /* @__PURE__ */
|
|
2255
|
-
/* @__PURE__ */
|
|
2256
|
-
/* @__PURE__ */
|
|
2257
|
-
/* @__PURE__ */
|
|
2258
|
-
customer.email && /* @__PURE__ */
|
|
2182
|
+
return /* @__PURE__ */ jsx22("div", { className: "rounded-lg border border-border bg-card p-3 space-y-1", children: /* @__PURE__ */ jsxs21("div", { className: "flex items-start gap-2", children: [
|
|
2183
|
+
/* @__PURE__ */ jsx22(User2, { className: "h-4 w-4 text-muted-foreground mt-0.5 shrink-0" }),
|
|
2184
|
+
/* @__PURE__ */ jsxs21("div", { className: "min-w-0 flex-1", children: [
|
|
2185
|
+
/* @__PURE__ */ jsx22("p", { className: "text-sm font-medium text-foreground", children: customer.name || "Unnamed customer" }),
|
|
2186
|
+
customer.email && /* @__PURE__ */ jsx22("p", { className: "text-xs text-muted-foreground", children: customer.email })
|
|
2259
2187
|
] })
|
|
2260
2188
|
] }) });
|
|
2261
2189
|
}
|
|
2262
2190
|
function InvoiceCard({ invoice }) {
|
|
2263
|
-
return /* @__PURE__ */
|
|
2264
|
-
/* @__PURE__ */
|
|
2265
|
-
/* @__PURE__ */
|
|
2266
|
-
/* @__PURE__ */
|
|
2267
|
-
invoice.customer_name && /* @__PURE__ */
|
|
2191
|
+
return /* @__PURE__ */ jsx22("div", { className: "rounded-lg border border-border bg-card p-3 space-y-1", children: /* @__PURE__ */ jsxs21("div", { className: "flex items-start gap-2", children: [
|
|
2192
|
+
/* @__PURE__ */ jsx22(FileText5, { className: "h-4 w-4 text-muted-foreground mt-0.5 shrink-0" }),
|
|
2193
|
+
/* @__PURE__ */ jsxs21("div", { className: "min-w-0 flex-1", children: [
|
|
2194
|
+
/* @__PURE__ */ jsx22("p", { className: "text-sm font-medium text-foreground", children: invoice.number || invoice.id }),
|
|
2195
|
+
invoice.customer_name && /* @__PURE__ */ jsx22("p", { className: "text-xs text-muted-foreground", children: invoice.customer_name })
|
|
2268
2196
|
] }),
|
|
2269
|
-
/* @__PURE__ */
|
|
2270
|
-
invoice.amount_due !== void 0 && invoice.currency && /* @__PURE__ */
|
|
2271
|
-
invoice.status && /* @__PURE__ */
|
|
2197
|
+
/* @__PURE__ */ jsxs21("div", { className: "flex items-center gap-1.5 shrink-0", children: [
|
|
2198
|
+
invoice.amount_due !== void 0 && invoice.currency && /* @__PURE__ */ jsx22("span", { className: "text-sm font-medium text-foreground", children: formatAmount(invoice.amount_due, invoice.currency) }),
|
|
2199
|
+
invoice.status && /* @__PURE__ */ jsx22(StatusBadge, { status: invoice.status })
|
|
2272
2200
|
] })
|
|
2273
2201
|
] }) });
|
|
2274
2202
|
}
|
|
2275
2203
|
function SubscriptionCard({ sub }) {
|
|
2276
|
-
return /* @__PURE__ */
|
|
2277
|
-
/* @__PURE__ */
|
|
2278
|
-
/* @__PURE__ */
|
|
2279
|
-
/* @__PURE__ */
|
|
2204
|
+
return /* @__PURE__ */ jsx22("div", { className: "rounded-lg border border-border bg-card p-3 space-y-1", children: /* @__PURE__ */ jsxs21("div", { className: "flex items-start gap-2", children: [
|
|
2205
|
+
/* @__PURE__ */ jsx22(RefreshCw, { className: "h-4 w-4 text-muted-foreground mt-0.5 shrink-0" }),
|
|
2206
|
+
/* @__PURE__ */ jsxs21("div", { className: "min-w-0 flex-1", children: [
|
|
2207
|
+
/* @__PURE__ */ jsxs21("p", { className: "text-sm font-medium text-foreground", children: [
|
|
2280
2208
|
sub.plan?.nickname || "Subscription",
|
|
2281
|
-
sub.plan?.amount !== void 0 && sub.plan?.currency && /* @__PURE__ */
|
|
2209
|
+
sub.plan?.amount !== void 0 && sub.plan?.currency && /* @__PURE__ */ jsxs21("span", { className: "text-muted-foreground font-normal", children: [
|
|
2282
2210
|
" ",
|
|
2283
2211
|
formatAmount(sub.plan.amount, sub.plan.currency),
|
|
2284
2212
|
"/",
|
|
2285
2213
|
sub.plan.interval
|
|
2286
2214
|
] })
|
|
2287
2215
|
] }),
|
|
2288
|
-
sub.current_period_end && /* @__PURE__ */
|
|
2289
|
-
/* @__PURE__ */
|
|
2216
|
+
sub.current_period_end && /* @__PURE__ */ jsxs21("p", { className: "flex items-center gap-1 text-xs text-muted-foreground", children: [
|
|
2217
|
+
/* @__PURE__ */ jsx22(Clock6, { className: "h-3 w-3" }),
|
|
2290
2218
|
"Renews ",
|
|
2291
2219
|
formatUnixDate2(sub.current_period_end)
|
|
2292
2220
|
] })
|
|
2293
2221
|
] }),
|
|
2294
|
-
sub.status && /* @__PURE__ */
|
|
2222
|
+
sub.status && /* @__PURE__ */ jsx22(StatusBadge, { status: sub.status })
|
|
2295
2223
|
] }) });
|
|
2296
2224
|
}
|
|
2297
2225
|
function BalanceDisplay({ balance }) {
|
|
2298
|
-
return /* @__PURE__ */
|
|
2299
|
-
/* @__PURE__ */
|
|
2300
|
-
/* @__PURE__ */
|
|
2301
|
-
/* @__PURE__ */
|
|
2226
|
+
return /* @__PURE__ */ jsxs21("div", { className: "rounded-lg border border-border bg-card p-3 space-y-2", children: [
|
|
2227
|
+
/* @__PURE__ */ jsxs21("div", { className: "flex items-center gap-2", children: [
|
|
2228
|
+
/* @__PURE__ */ jsx22(CreditCard2, { className: "h-4 w-4 text-muted-foreground" }),
|
|
2229
|
+
/* @__PURE__ */ jsx22("span", { className: "text-sm font-medium text-foreground", children: "Balance" })
|
|
2302
2230
|
] }),
|
|
2303
|
-
/* @__PURE__ */
|
|
2304
|
-
balance.available && balance.available.length > 0 && /* @__PURE__ */
|
|
2305
|
-
/* @__PURE__ */
|
|
2306
|
-
balance.available.map((b, i) => /* @__PURE__ */
|
|
2231
|
+
/* @__PURE__ */ jsxs21("div", { className: "grid grid-cols-2 gap-4 pl-6", children: [
|
|
2232
|
+
balance.available && balance.available.length > 0 && /* @__PURE__ */ jsxs21("div", { children: [
|
|
2233
|
+
/* @__PURE__ */ jsx22("p", { className: "text-xs text-muted-foreground", children: "Available" }),
|
|
2234
|
+
balance.available.map((b, i) => /* @__PURE__ */ jsx22("p", { className: "text-sm font-medium text-foreground", children: formatAmount(b.amount, b.currency) }, i))
|
|
2307
2235
|
] }),
|
|
2308
|
-
balance.pending && balance.pending.length > 0 && /* @__PURE__ */
|
|
2309
|
-
/* @__PURE__ */
|
|
2310
|
-
balance.pending.map((b, i) => /* @__PURE__ */
|
|
2236
|
+
balance.pending && balance.pending.length > 0 && /* @__PURE__ */ jsxs21("div", { children: [
|
|
2237
|
+
/* @__PURE__ */ jsx22("p", { className: "text-xs text-muted-foreground", children: "Pending" }),
|
|
2238
|
+
balance.pending.map((b, i) => /* @__PURE__ */ jsx22("p", { className: "text-sm font-medium text-foreground", children: formatAmount(b.amount, b.currency) }, i))
|
|
2311
2239
|
] })
|
|
2312
2240
|
] })
|
|
2313
2241
|
] });
|
|
2314
2242
|
}
|
|
2315
2243
|
function StripeFormatter({ data }) {
|
|
2316
|
-
if (isBalance(data)) return /* @__PURE__ */
|
|
2244
|
+
if (isBalance(data)) return /* @__PURE__ */ jsx22(BalanceDisplay, { balance: data });
|
|
2317
2245
|
if (typeof data === "object" && data !== null && "data" in data && Array.isArray(data.data)) {
|
|
2318
2246
|
const items = data.data;
|
|
2319
2247
|
const invoices = items.filter(isInvoice);
|
|
2320
2248
|
if (invoices.length > 0) {
|
|
2321
|
-
return /* @__PURE__ */
|
|
2249
|
+
return /* @__PURE__ */ jsx22("div", { className: "space-y-1.5", children: invoices.map((inv, i) => /* @__PURE__ */ jsx22(InvoiceCard, { invoice: inv }, inv.id || i)) });
|
|
2322
2250
|
}
|
|
2323
2251
|
const subs = items.filter(isSubscription);
|
|
2324
2252
|
if (subs.length > 0) {
|
|
2325
|
-
return /* @__PURE__ */
|
|
2253
|
+
return /* @__PURE__ */ jsx22("div", { className: "space-y-1.5", children: subs.map((s, i) => /* @__PURE__ */ jsx22(SubscriptionCard, { sub: s }, s.id || i)) });
|
|
2326
2254
|
}
|
|
2327
2255
|
const customers = items.filter(isCustomer);
|
|
2328
2256
|
if (customers.length > 0) {
|
|
2329
|
-
return /* @__PURE__ */
|
|
2257
|
+
return /* @__PURE__ */ jsx22("div", { className: "space-y-1.5", children: customers.map((c, i) => /* @__PURE__ */ jsx22(CustomerCard, { customer: c }, c.id || i)) });
|
|
2330
2258
|
}
|
|
2331
2259
|
}
|
|
2332
|
-
if (isInvoice(data)) return /* @__PURE__ */
|
|
2333
|
-
if (isSubscription(data)) return /* @__PURE__ */
|
|
2334
|
-
if (isCustomer(data)) return /* @__PURE__ */
|
|
2260
|
+
if (isInvoice(data)) return /* @__PURE__ */ jsx22(InvoiceCard, { invoice: data });
|
|
2261
|
+
if (isSubscription(data)) return /* @__PURE__ */ jsx22(SubscriptionCard, { sub: data });
|
|
2262
|
+
if (isCustomer(data)) return /* @__PURE__ */ jsx22(CustomerCard, { customer: data });
|
|
2335
2263
|
if (Array.isArray(data)) {
|
|
2336
2264
|
const invoices = data.filter(isInvoice);
|
|
2337
2265
|
if (invoices.length > 0) {
|
|
2338
|
-
return /* @__PURE__ */
|
|
2266
|
+
return /* @__PURE__ */ jsx22("div", { className: "space-y-1.5", children: invoices.map((inv, i) => /* @__PURE__ */ jsx22(InvoiceCard, { invoice: inv }, inv.id || i)) });
|
|
2339
2267
|
}
|
|
2340
2268
|
const customers = data.filter(isCustomer);
|
|
2341
2269
|
if (customers.length > 0) {
|
|
2342
|
-
return /* @__PURE__ */
|
|
2270
|
+
return /* @__PURE__ */ jsx22("div", { className: "space-y-1.5", children: customers.map((c, i) => /* @__PURE__ */ jsx22(CustomerCard, { customer: c }, c.id || i)) });
|
|
2343
2271
|
}
|
|
2344
2272
|
}
|
|
2345
|
-
return /* @__PURE__ */
|
|
2273
|
+
return /* @__PURE__ */ jsx22("pre", { className: "rounded-lg border border-border bg-background p-3 text-xs text-foreground overflow-x-auto max-h-96 overflow-y-auto", children: JSON.stringify(data, null, 2) });
|
|
2346
2274
|
}
|
|
2347
2275
|
|
|
2348
2276
|
// src/ui/formatters/jira.tsx
|
|
2349
2277
|
import { CircleDot as CircleDot4, SquareKanban as SquareKanban2, User as User3, ArrowUp, ArrowDown, Minus } from "lucide-react";
|
|
2350
|
-
import { jsx as
|
|
2278
|
+
import { jsx as jsx23, jsxs as jsxs22 } from "react/jsx-runtime";
|
|
2351
2279
|
function isJiraIssue(data) {
|
|
2352
2280
|
return typeof data === "object" && data !== null && "key" in data && "fields" in data;
|
|
2353
2281
|
}
|
|
@@ -2363,35 +2291,35 @@ var STATUS_COLORS = {
|
|
|
2363
2291
|
};
|
|
2364
2292
|
function PriorityIcon({ name }) {
|
|
2365
2293
|
const lower = (name || "").toLowerCase();
|
|
2366
|
-
if (lower === "highest" || lower === "critical") return /* @__PURE__ */
|
|
2367
|
-
if (lower === "high") return /* @__PURE__ */
|
|
2368
|
-
if (lower === "low") return /* @__PURE__ */
|
|
2369
|
-
if (lower === "lowest") return /* @__PURE__ */
|
|
2370
|
-
return /* @__PURE__ */
|
|
2294
|
+
if (lower === "highest" || lower === "critical") return /* @__PURE__ */ jsx23(ArrowUp, { className: "h-3 w-3 text-destructive" });
|
|
2295
|
+
if (lower === "high") return /* @__PURE__ */ jsx23(ArrowUp, { className: "h-3 w-3 text-orange-500" });
|
|
2296
|
+
if (lower === "low") return /* @__PURE__ */ jsx23(ArrowDown, { className: "h-3 w-3 text-blue-500" });
|
|
2297
|
+
if (lower === "lowest") return /* @__PURE__ */ jsx23(ArrowDown, { className: "h-3 w-3 text-green-500" });
|
|
2298
|
+
return /* @__PURE__ */ jsx23(Minus, { className: "h-3 w-3 text-muted-foreground" });
|
|
2371
2299
|
}
|
|
2372
2300
|
function IssueCard2({ issue }) {
|
|
2373
2301
|
const f = issue.fields || {};
|
|
2374
2302
|
const statusColor = f.status?.statusCategory?.colorName || "undefined";
|
|
2375
|
-
return /* @__PURE__ */
|
|
2376
|
-
/* @__PURE__ */
|
|
2377
|
-
/* @__PURE__ */
|
|
2378
|
-
/* @__PURE__ */
|
|
2379
|
-
/* @__PURE__ */
|
|
2303
|
+
return /* @__PURE__ */ jsx23("div", { className: "rounded-lg border border-border bg-card p-3 space-y-1.5", children: /* @__PURE__ */ jsxs22("div", { className: "flex items-start gap-2", children: [
|
|
2304
|
+
/* @__PURE__ */ jsx23(CircleDot4, { className: "h-4 w-4 text-muted-foreground mt-0.5 shrink-0" }),
|
|
2305
|
+
/* @__PURE__ */ jsxs22("div", { className: "min-w-0 flex-1", children: [
|
|
2306
|
+
/* @__PURE__ */ jsxs22("p", { className: "text-sm font-medium text-foreground", children: [
|
|
2307
|
+
/* @__PURE__ */ jsx23("span", { className: "text-muted-foreground font-normal", children: issue.key }),
|
|
2380
2308
|
" ",
|
|
2381
2309
|
f.summary
|
|
2382
2310
|
] }),
|
|
2383
|
-
/* @__PURE__ */
|
|
2384
|
-
f.status?.name && /* @__PURE__ */
|
|
2385
|
-
/* @__PURE__ */
|
|
2311
|
+
/* @__PURE__ */ jsxs22("div", { className: "flex items-center gap-2 mt-0.5 flex-wrap", children: [
|
|
2312
|
+
f.status?.name && /* @__PURE__ */ jsxs22("span", { className: "inline-flex items-center gap-1 text-xs text-muted-foreground", children: [
|
|
2313
|
+
/* @__PURE__ */ jsx23("span", { className: `h-1.5 w-1.5 rounded-full ${STATUS_COLORS[statusColor] || STATUS_COLORS.undefined}` }),
|
|
2386
2314
|
f.status.name
|
|
2387
2315
|
] }),
|
|
2388
|
-
f.priority?.name && /* @__PURE__ */
|
|
2389
|
-
/* @__PURE__ */
|
|
2316
|
+
f.priority?.name && /* @__PURE__ */ jsxs22("span", { className: "inline-flex items-center gap-1 text-xs text-muted-foreground", children: [
|
|
2317
|
+
/* @__PURE__ */ jsx23(PriorityIcon, { name: f.priority.name }),
|
|
2390
2318
|
f.priority.name
|
|
2391
2319
|
] }),
|
|
2392
|
-
f.issuetype?.name && /* @__PURE__ */
|
|
2393
|
-
f.assignee && /* @__PURE__ */
|
|
2394
|
-
/* @__PURE__ */
|
|
2320
|
+
f.issuetype?.name && /* @__PURE__ */ jsx23("span", { className: "text-xs text-muted-foreground", children: f.issuetype.name }),
|
|
2321
|
+
f.assignee && /* @__PURE__ */ jsxs22("span", { className: "flex items-center gap-1 text-xs text-muted-foreground", children: [
|
|
2322
|
+
/* @__PURE__ */ jsx23(User3, { className: "h-3 w-3" }),
|
|
2395
2323
|
f.assignee.displayName || f.assignee.name
|
|
2396
2324
|
] })
|
|
2397
2325
|
] })
|
|
@@ -2399,15 +2327,15 @@ function IssueCard2({ issue }) {
|
|
|
2399
2327
|
] }) });
|
|
2400
2328
|
}
|
|
2401
2329
|
function ProjectCard2({ project }) {
|
|
2402
|
-
return /* @__PURE__ */
|
|
2403
|
-
/* @__PURE__ */
|
|
2404
|
-
/* @__PURE__ */
|
|
2405
|
-
/* @__PURE__ */
|
|
2406
|
-
/* @__PURE__ */
|
|
2330
|
+
return /* @__PURE__ */ jsx23("div", { className: "rounded-lg border border-border bg-card p-3", children: /* @__PURE__ */ jsxs22("div", { className: "flex items-start gap-2", children: [
|
|
2331
|
+
/* @__PURE__ */ jsx23(SquareKanban2, { className: "h-4 w-4 text-muted-foreground mt-0.5 shrink-0" }),
|
|
2332
|
+
/* @__PURE__ */ jsxs22("div", { className: "min-w-0 flex-1", children: [
|
|
2333
|
+
/* @__PURE__ */ jsxs22("p", { className: "text-sm font-medium text-foreground", children: [
|
|
2334
|
+
/* @__PURE__ */ jsx23("span", { className: "text-muted-foreground font-normal", children: project.key }),
|
|
2407
2335
|
" ",
|
|
2408
2336
|
project.name
|
|
2409
2337
|
] }),
|
|
2410
|
-
project.projectTypeKey && /* @__PURE__ */
|
|
2338
|
+
project.projectTypeKey && /* @__PURE__ */ jsx23("p", { className: "text-xs text-muted-foreground", children: project.projectTypeKey })
|
|
2411
2339
|
] })
|
|
2412
2340
|
] }) });
|
|
2413
2341
|
}
|
|
@@ -2415,29 +2343,29 @@ function JiraFormatter({ data }) {
|
|
|
2415
2343
|
if (typeof data === "object" && data !== null && "issues" in data) {
|
|
2416
2344
|
const issues = data.issues;
|
|
2417
2345
|
if (Array.isArray(issues)) {
|
|
2418
|
-
return /* @__PURE__ */
|
|
2346
|
+
return /* @__PURE__ */ jsx23("div", { className: "space-y-1.5", children: issues.filter(isJiraIssue).map((iss, i) => /* @__PURE__ */ jsx23(IssueCard2, { issue: iss }, iss.key || i)) });
|
|
2419
2347
|
}
|
|
2420
2348
|
}
|
|
2421
2349
|
if (typeof data === "object" && data !== null && "projects" in data) {
|
|
2422
2350
|
const projects = data.projects;
|
|
2423
2351
|
if (Array.isArray(projects)) {
|
|
2424
|
-
return /* @__PURE__ */
|
|
2352
|
+
return /* @__PURE__ */ jsx23("div", { className: "space-y-1.5", children: projects.filter(isJiraProject).map((p, i) => /* @__PURE__ */ jsx23(ProjectCard2, { project: p }, p.key || i)) });
|
|
2425
2353
|
}
|
|
2426
2354
|
}
|
|
2427
|
-
if (isJiraIssue(data)) return /* @__PURE__ */
|
|
2428
|
-
if (isJiraProject(data)) return /* @__PURE__ */
|
|
2355
|
+
if (isJiraIssue(data)) return /* @__PURE__ */ jsx23(IssueCard2, { issue: data });
|
|
2356
|
+
if (isJiraProject(data)) return /* @__PURE__ */ jsx23(ProjectCard2, { project: data });
|
|
2429
2357
|
if (Array.isArray(data)) {
|
|
2430
2358
|
const issues = data.filter(isJiraIssue);
|
|
2431
2359
|
if (issues.length > 0) {
|
|
2432
|
-
return /* @__PURE__ */
|
|
2360
|
+
return /* @__PURE__ */ jsx23("div", { className: "space-y-1.5", children: issues.map((iss, i) => /* @__PURE__ */ jsx23(IssueCard2, { issue: iss }, iss.key || i)) });
|
|
2433
2361
|
}
|
|
2434
2362
|
}
|
|
2435
|
-
return /* @__PURE__ */
|
|
2363
|
+
return /* @__PURE__ */ jsx23("pre", { className: "rounded-lg border border-border bg-background p-3 text-xs text-foreground overflow-x-auto max-h-96 overflow-y-auto", children: JSON.stringify(data, null, 2) });
|
|
2436
2364
|
}
|
|
2437
2365
|
|
|
2438
2366
|
// src/ui/formatters/salesforce.tsx
|
|
2439
2367
|
import { User as User4, Briefcase as Briefcase3, Mail as Mail5, Phone as Phone3, Building2 as Building22, Calendar as Calendar4 } from "lucide-react";
|
|
2440
|
-
import { jsx as
|
|
2368
|
+
import { jsx as jsx24, jsxs as jsxs23 } from "react/jsx-runtime";
|
|
2441
2369
|
function isContact(data) {
|
|
2442
2370
|
if (typeof data !== "object" || data === null) return false;
|
|
2443
2371
|
return "Name" in data && ("Email" in data || "Phone" in data || "Title" in data);
|
|
@@ -2448,55 +2376,55 @@ function isOpportunity(data) {
|
|
|
2448
2376
|
}
|
|
2449
2377
|
function ContactCard2({ contact }) {
|
|
2450
2378
|
const account = contact.AccountName || contact.Account?.Name;
|
|
2451
|
-
return /* @__PURE__ */
|
|
2452
|
-
/* @__PURE__ */
|
|
2453
|
-
/* @__PURE__ */
|
|
2454
|
-
/* @__PURE__ */
|
|
2455
|
-
/* @__PURE__ */
|
|
2456
|
-
contact.Title && /* @__PURE__ */
|
|
2379
|
+
return /* @__PURE__ */ jsxs23("div", { className: "rounded-lg border border-border bg-card p-3 space-y-1.5", children: [
|
|
2380
|
+
/* @__PURE__ */ jsxs23("div", { className: "flex items-start gap-2", children: [
|
|
2381
|
+
/* @__PURE__ */ jsx24(User4, { className: "h-4 w-4 text-muted-foreground mt-0.5 shrink-0" }),
|
|
2382
|
+
/* @__PURE__ */ jsxs23("div", { className: "min-w-0 flex-1", children: [
|
|
2383
|
+
/* @__PURE__ */ jsx24("p", { className: "text-sm font-medium text-foreground", children: contact.Name }),
|
|
2384
|
+
contact.Title && /* @__PURE__ */ jsx24("p", { className: "text-xs text-muted-foreground", children: contact.Title })
|
|
2457
2385
|
] })
|
|
2458
2386
|
] }),
|
|
2459
|
-
/* @__PURE__ */
|
|
2460
|
-
contact.Email && /* @__PURE__ */
|
|
2461
|
-
/* @__PURE__ */
|
|
2387
|
+
/* @__PURE__ */ jsxs23("div", { className: "flex flex-wrap gap-x-4 gap-y-1 pl-6", children: [
|
|
2388
|
+
contact.Email && /* @__PURE__ */ jsxs23("span", { className: "flex items-center gap-1 text-xs text-muted-foreground", children: [
|
|
2389
|
+
/* @__PURE__ */ jsx24(Mail5, { className: "h-3 w-3" }),
|
|
2462
2390
|
contact.Email
|
|
2463
2391
|
] }),
|
|
2464
|
-
contact.Phone && /* @__PURE__ */
|
|
2465
|
-
/* @__PURE__ */
|
|
2392
|
+
contact.Phone && /* @__PURE__ */ jsxs23("span", { className: "flex items-center gap-1 text-xs text-muted-foreground", children: [
|
|
2393
|
+
/* @__PURE__ */ jsx24(Phone3, { className: "h-3 w-3" }),
|
|
2466
2394
|
contact.Phone
|
|
2467
2395
|
] }),
|
|
2468
|
-
account && /* @__PURE__ */
|
|
2469
|
-
/* @__PURE__ */
|
|
2396
|
+
account && /* @__PURE__ */ jsxs23("span", { className: "flex items-center gap-1 text-xs text-muted-foreground", children: [
|
|
2397
|
+
/* @__PURE__ */ jsx24(Building22, { className: "h-3 w-3" }),
|
|
2470
2398
|
account
|
|
2471
2399
|
] })
|
|
2472
2400
|
] })
|
|
2473
2401
|
] });
|
|
2474
2402
|
}
|
|
2475
2403
|
function OpportunityCard({ opp }) {
|
|
2476
|
-
return /* @__PURE__ */
|
|
2477
|
-
/* @__PURE__ */
|
|
2478
|
-
/* @__PURE__ */
|
|
2479
|
-
/* @__PURE__ */
|
|
2480
|
-
/* @__PURE__ */
|
|
2481
|
-
/* @__PURE__ */
|
|
2482
|
-
opp.Amount !== void 0 && /* @__PURE__ */
|
|
2483
|
-
opp.StageName && /* @__PURE__ */
|
|
2484
|
-
opp.CloseDate && /* @__PURE__ */
|
|
2485
|
-
/* @__PURE__ */
|
|
2404
|
+
return /* @__PURE__ */ jsxs23("div", { className: "rounded-lg border border-border bg-card p-3 space-y-1.5", children: [
|
|
2405
|
+
/* @__PURE__ */ jsxs23("div", { className: "flex items-start gap-2", children: [
|
|
2406
|
+
/* @__PURE__ */ jsx24(Briefcase3, { className: "h-4 w-4 text-muted-foreground mt-0.5 shrink-0" }),
|
|
2407
|
+
/* @__PURE__ */ jsxs23("div", { className: "min-w-0 flex-1", children: [
|
|
2408
|
+
/* @__PURE__ */ jsx24("p", { className: "text-sm font-medium text-foreground", children: opp.Name }),
|
|
2409
|
+
/* @__PURE__ */ jsxs23("div", { className: "flex items-center gap-2 mt-0.5 flex-wrap", children: [
|
|
2410
|
+
opp.Amount !== void 0 && /* @__PURE__ */ jsx24("span", { className: "text-xs font-medium text-foreground", children: new Intl.NumberFormat(void 0, { style: "currency", currency: "USD" }).format(opp.Amount) }),
|
|
2411
|
+
opp.StageName && /* @__PURE__ */ jsx24("span", { className: "rounded-full bg-muted px-2 py-0.5 text-xs text-muted-foreground", children: opp.StageName }),
|
|
2412
|
+
opp.CloseDate && /* @__PURE__ */ jsxs23("span", { className: "flex items-center gap-1 text-xs text-muted-foreground", children: [
|
|
2413
|
+
/* @__PURE__ */ jsx24(Calendar4, { className: "h-3 w-3" }),
|
|
2486
2414
|
opp.CloseDate
|
|
2487
2415
|
] })
|
|
2488
2416
|
] })
|
|
2489
2417
|
] })
|
|
2490
2418
|
] }),
|
|
2491
|
-
opp.Probability !== void 0 && /* @__PURE__ */
|
|
2492
|
-
/* @__PURE__ */
|
|
2493
|
-
/* @__PURE__ */
|
|
2494
|
-
/* @__PURE__ */
|
|
2419
|
+
opp.Probability !== void 0 && /* @__PURE__ */ jsxs23("div", { className: "pl-6 space-y-0.5", children: [
|
|
2420
|
+
/* @__PURE__ */ jsxs23("div", { className: "flex items-center justify-between", children: [
|
|
2421
|
+
/* @__PURE__ */ jsx24("span", { className: "text-xs text-muted-foreground", children: "Probability" }),
|
|
2422
|
+
/* @__PURE__ */ jsxs23("span", { className: "text-xs font-medium text-foreground", children: [
|
|
2495
2423
|
opp.Probability,
|
|
2496
2424
|
"%"
|
|
2497
2425
|
] })
|
|
2498
2426
|
] }),
|
|
2499
|
-
/* @__PURE__ */
|
|
2427
|
+
/* @__PURE__ */ jsx24("div", { className: "h-1.5 rounded-full bg-muted overflow-hidden", children: /* @__PURE__ */ jsx24(
|
|
2500
2428
|
"div",
|
|
2501
2429
|
{
|
|
2502
2430
|
className: "h-full rounded-full bg-primary transition-all",
|
|
@@ -2513,31 +2441,31 @@ function SalesforceFormatter({ data }) {
|
|
|
2513
2441
|
const contacts = records.filter(isContact);
|
|
2514
2442
|
const opps = records.filter(isOpportunity);
|
|
2515
2443
|
if (opps.length > 0 && contacts.length === 0) {
|
|
2516
|
-
return /* @__PURE__ */
|
|
2444
|
+
return /* @__PURE__ */ jsx24("div", { className: "space-y-1.5", children: opps.map((o, i) => /* @__PURE__ */ jsx24(OpportunityCard, { opp: o }, o.Id || i)) });
|
|
2517
2445
|
}
|
|
2518
2446
|
if (contacts.length > 0) {
|
|
2519
|
-
return /* @__PURE__ */
|
|
2447
|
+
return /* @__PURE__ */ jsx24("div", { className: "space-y-1.5", children: contacts.map((c, i) => /* @__PURE__ */ jsx24(ContactCard2, { contact: c }, c.Id || i)) });
|
|
2520
2448
|
}
|
|
2521
2449
|
}
|
|
2522
2450
|
}
|
|
2523
|
-
if (isOpportunity(data)) return /* @__PURE__ */
|
|
2524
|
-
if (isContact(data)) return /* @__PURE__ */
|
|
2451
|
+
if (isOpportunity(data)) return /* @__PURE__ */ jsx24(OpportunityCard, { opp: data });
|
|
2452
|
+
if (isContact(data)) return /* @__PURE__ */ jsx24(ContactCard2, { contact: data });
|
|
2525
2453
|
if (Array.isArray(data)) {
|
|
2526
2454
|
const contacts = data.filter(isContact);
|
|
2527
2455
|
if (contacts.length > 0) {
|
|
2528
|
-
return /* @__PURE__ */
|
|
2456
|
+
return /* @__PURE__ */ jsx24("div", { className: "space-y-1.5", children: contacts.map((c, i) => /* @__PURE__ */ jsx24(ContactCard2, { contact: c }, c.Id || i)) });
|
|
2529
2457
|
}
|
|
2530
2458
|
const opps = data.filter(isOpportunity);
|
|
2531
2459
|
if (opps.length > 0) {
|
|
2532
|
-
return /* @__PURE__ */
|
|
2460
|
+
return /* @__PURE__ */ jsx24("div", { className: "space-y-1.5", children: opps.map((o, i) => /* @__PURE__ */ jsx24(OpportunityCard, { opp: o }, o.Id || i)) });
|
|
2533
2461
|
}
|
|
2534
2462
|
}
|
|
2535
|
-
return /* @__PURE__ */
|
|
2463
|
+
return /* @__PURE__ */ jsx24("pre", { className: "rounded-lg border border-border bg-background p-3 text-xs text-foreground overflow-x-auto max-h-96 overflow-y-auto", children: JSON.stringify(data, null, 2) });
|
|
2536
2464
|
}
|
|
2537
2465
|
|
|
2538
2466
|
// src/ui/formatters/brevo.tsx
|
|
2539
2467
|
import { User as User5, Mail as Mail6, BarChart3 } from "lucide-react";
|
|
2540
|
-
import { jsx as
|
|
2468
|
+
import { jsx as jsx25, jsxs as jsxs24 } from "react/jsx-runtime";
|
|
2541
2469
|
function isBrevoContact(data) {
|
|
2542
2470
|
return typeof data === "object" && data !== null && "email" in data && ("attributes" in data || "id" in data);
|
|
2543
2471
|
}
|
|
@@ -2553,12 +2481,12 @@ var STATUS_STYLES2 = {
|
|
|
2553
2481
|
};
|
|
2554
2482
|
function ContactCard3({ contact }) {
|
|
2555
2483
|
const name = contact.attributes ? [contact.attributes.FIRSTNAME, contact.attributes.LASTNAME].filter(Boolean).join(" ") : void 0;
|
|
2556
|
-
return /* @__PURE__ */
|
|
2557
|
-
/* @__PURE__ */
|
|
2558
|
-
/* @__PURE__ */
|
|
2559
|
-
name && /* @__PURE__ */
|
|
2560
|
-
/* @__PURE__ */
|
|
2561
|
-
/* @__PURE__ */
|
|
2484
|
+
return /* @__PURE__ */ jsx25("div", { className: "rounded-lg border border-border bg-card p-3", children: /* @__PURE__ */ jsxs24("div", { className: "flex items-start gap-2", children: [
|
|
2485
|
+
/* @__PURE__ */ jsx25(User5, { className: "h-4 w-4 text-muted-foreground mt-0.5 shrink-0" }),
|
|
2486
|
+
/* @__PURE__ */ jsxs24("div", { className: "min-w-0 flex-1", children: [
|
|
2487
|
+
name && /* @__PURE__ */ jsx25("p", { className: "text-sm font-medium text-foreground", children: name }),
|
|
2488
|
+
/* @__PURE__ */ jsxs24("p", { className: "text-xs text-muted-foreground flex items-center gap-1", children: [
|
|
2489
|
+
/* @__PURE__ */ jsx25(Mail6, { className: "h-3 w-3" }),
|
|
2562
2490
|
contact.email
|
|
2563
2491
|
] })
|
|
2564
2492
|
] })
|
|
@@ -2566,26 +2494,26 @@ function ContactCard3({ contact }) {
|
|
|
2566
2494
|
}
|
|
2567
2495
|
function CampaignCard({ campaign }) {
|
|
2568
2496
|
const stats = campaign.statistics?.globalStats;
|
|
2569
|
-
return /* @__PURE__ */
|
|
2570
|
-
/* @__PURE__ */
|
|
2571
|
-
/* @__PURE__ */
|
|
2572
|
-
/* @__PURE__ */
|
|
2573
|
-
/* @__PURE__ */
|
|
2574
|
-
campaign.subject && /* @__PURE__ */
|
|
2497
|
+
return /* @__PURE__ */ jsxs24("div", { className: "rounded-lg border border-border bg-card p-3 space-y-1.5", children: [
|
|
2498
|
+
/* @__PURE__ */ jsxs24("div", { className: "flex items-start gap-2", children: [
|
|
2499
|
+
/* @__PURE__ */ jsx25(Mail6, { className: "h-4 w-4 text-muted-foreground mt-0.5 shrink-0" }),
|
|
2500
|
+
/* @__PURE__ */ jsxs24("div", { className: "min-w-0 flex-1", children: [
|
|
2501
|
+
/* @__PURE__ */ jsx25("p", { className: "text-sm font-medium text-foreground", children: campaign.name }),
|
|
2502
|
+
campaign.subject && /* @__PURE__ */ jsx25("p", { className: "text-xs text-muted-foreground", children: campaign.subject })
|
|
2575
2503
|
] }),
|
|
2576
|
-
campaign.status && /* @__PURE__ */
|
|
2504
|
+
campaign.status && /* @__PURE__ */ jsx25("span", { className: `rounded-full px-2 py-0.5 text-xs ${STATUS_STYLES2[campaign.status] || "bg-muted text-muted-foreground"}`, children: campaign.status })
|
|
2577
2505
|
] }),
|
|
2578
|
-
stats && /* @__PURE__ */
|
|
2579
|
-
/* @__PURE__ */
|
|
2580
|
-
/* @__PURE__ */
|
|
2506
|
+
stats && /* @__PURE__ */ jsxs24("div", { className: "flex items-center gap-4 pl-6", children: [
|
|
2507
|
+
/* @__PURE__ */ jsxs24("span", { className: "flex items-center gap-1 text-xs text-muted-foreground", children: [
|
|
2508
|
+
/* @__PURE__ */ jsx25(BarChart3, { className: "h-3 w-3" }),
|
|
2581
2509
|
stats.sent ?? 0,
|
|
2582
2510
|
" sent"
|
|
2583
2511
|
] }),
|
|
2584
|
-
stats.opened !== void 0 && /* @__PURE__ */
|
|
2512
|
+
stats.opened !== void 0 && /* @__PURE__ */ jsxs24("span", { className: "text-xs text-muted-foreground", children: [
|
|
2585
2513
|
stats.opened,
|
|
2586
2514
|
" opened"
|
|
2587
2515
|
] }),
|
|
2588
|
-
stats.clicked !== void 0 && /* @__PURE__ */
|
|
2516
|
+
stats.clicked !== void 0 && /* @__PURE__ */ jsxs24("span", { className: "text-xs text-muted-foreground", children: [
|
|
2589
2517
|
stats.clicked,
|
|
2590
2518
|
" clicked"
|
|
2591
2519
|
] })
|
|
@@ -2596,33 +2524,33 @@ function BrevoFormatter({ data }) {
|
|
|
2596
2524
|
if (typeof data === "object" && data !== null && "contacts" in data) {
|
|
2597
2525
|
const contacts = data.contacts;
|
|
2598
2526
|
if (Array.isArray(contacts)) {
|
|
2599
|
-
return /* @__PURE__ */
|
|
2527
|
+
return /* @__PURE__ */ jsx25("div", { className: "space-y-1.5", children: contacts.filter(isBrevoContact).map((c, i) => /* @__PURE__ */ jsx25(ContactCard3, { contact: c }, c.id || i)) });
|
|
2600
2528
|
}
|
|
2601
2529
|
}
|
|
2602
2530
|
if (typeof data === "object" && data !== null && "campaigns" in data) {
|
|
2603
2531
|
const campaigns = data.campaigns;
|
|
2604
2532
|
if (Array.isArray(campaigns)) {
|
|
2605
|
-
return /* @__PURE__ */
|
|
2533
|
+
return /* @__PURE__ */ jsx25("div", { className: "space-y-1.5", children: campaigns.filter(isBrevoCampaign).map((c, i) => /* @__PURE__ */ jsx25(CampaignCard, { campaign: c }, c.id || i)) });
|
|
2606
2534
|
}
|
|
2607
2535
|
}
|
|
2608
|
-
if (isBrevoContact(data)) return /* @__PURE__ */
|
|
2609
|
-
if (isBrevoCampaign(data)) return /* @__PURE__ */
|
|
2536
|
+
if (isBrevoContact(data)) return /* @__PURE__ */ jsx25(ContactCard3, { contact: data });
|
|
2537
|
+
if (isBrevoCampaign(data)) return /* @__PURE__ */ jsx25(CampaignCard, { campaign: data });
|
|
2610
2538
|
if (Array.isArray(data)) {
|
|
2611
2539
|
const contacts = data.filter(isBrevoContact);
|
|
2612
2540
|
if (contacts.length > 0) {
|
|
2613
|
-
return /* @__PURE__ */
|
|
2541
|
+
return /* @__PURE__ */ jsx25("div", { className: "space-y-1.5", children: contacts.map((c, i) => /* @__PURE__ */ jsx25(ContactCard3, { contact: c }, c.id || i)) });
|
|
2614
2542
|
}
|
|
2615
2543
|
const campaigns = data.filter(isBrevoCampaign);
|
|
2616
2544
|
if (campaigns.length > 0) {
|
|
2617
|
-
return /* @__PURE__ */
|
|
2545
|
+
return /* @__PURE__ */ jsx25("div", { className: "space-y-1.5", children: campaigns.map((c, i) => /* @__PURE__ */ jsx25(CampaignCard, { campaign: c }, c.id || i)) });
|
|
2618
2546
|
}
|
|
2619
2547
|
}
|
|
2620
|
-
return /* @__PURE__ */
|
|
2548
|
+
return /* @__PURE__ */ jsx25("pre", { className: "rounded-lg border border-border bg-background p-3 text-xs text-foreground overflow-x-auto max-h-96 overflow-y-auto", children: JSON.stringify(data, null, 2) });
|
|
2621
2549
|
}
|
|
2622
2550
|
|
|
2623
2551
|
// src/ui/formatters/calendly.tsx
|
|
2624
2552
|
import { Calendar as Calendar5, Clock as Clock7, MapPin as MapPin2 } from "lucide-react";
|
|
2625
|
-
import { jsx as
|
|
2553
|
+
import { jsx as jsx26, jsxs as jsxs25 } from "react/jsx-runtime";
|
|
2626
2554
|
function isCalendlyEvent(data) {
|
|
2627
2555
|
return typeof data === "object" && data !== null && "name" in data && ("start_time" in data || "status" in data);
|
|
2628
2556
|
}
|
|
@@ -2646,36 +2574,36 @@ var STATUS_STYLES3 = {
|
|
|
2646
2574
|
canceled: "bg-destructive/10 text-destructive"
|
|
2647
2575
|
};
|
|
2648
2576
|
function EventCard3({ event }) {
|
|
2649
|
-
return /* @__PURE__ */
|
|
2650
|
-
/* @__PURE__ */
|
|
2651
|
-
/* @__PURE__ */
|
|
2652
|
-
/* @__PURE__ */
|
|
2653
|
-
event.start_time && /* @__PURE__ */
|
|
2654
|
-
/* @__PURE__ */
|
|
2577
|
+
return /* @__PURE__ */ jsx26("div", { className: "rounded-lg border border-border bg-card p-3 space-y-1", children: /* @__PURE__ */ jsxs25("div", { className: "flex items-start gap-2", children: [
|
|
2578
|
+
/* @__PURE__ */ jsx26(Calendar5, { className: "h-4 w-4 text-muted-foreground mt-0.5 shrink-0" }),
|
|
2579
|
+
/* @__PURE__ */ jsxs25("div", { className: "min-w-0 flex-1", children: [
|
|
2580
|
+
/* @__PURE__ */ jsx26("p", { className: "text-sm font-medium text-foreground", children: event.name }),
|
|
2581
|
+
event.start_time && /* @__PURE__ */ jsxs25("p", { className: "flex items-center gap-1 text-xs text-muted-foreground", children: [
|
|
2582
|
+
/* @__PURE__ */ jsx26(Clock7, { className: "h-3 w-3" }),
|
|
2655
2583
|
formatDateTime(event.start_time),
|
|
2656
2584
|
event.end_time && ` - ${formatDateTime(event.end_time)}`
|
|
2657
2585
|
] }),
|
|
2658
|
-
event.location?.location && /* @__PURE__ */
|
|
2659
|
-
/* @__PURE__ */
|
|
2586
|
+
event.location?.location && /* @__PURE__ */ jsxs25("p", { className: "flex items-center gap-1 text-xs text-muted-foreground", children: [
|
|
2587
|
+
/* @__PURE__ */ jsx26(MapPin2, { className: "h-3 w-3" }),
|
|
2660
2588
|
event.location.location
|
|
2661
2589
|
] })
|
|
2662
2590
|
] }),
|
|
2663
|
-
event.status && /* @__PURE__ */
|
|
2591
|
+
event.status && /* @__PURE__ */ jsx26("span", { className: `rounded-full px-2 py-0.5 text-xs ${STATUS_STYLES3[event.status] || "bg-muted text-muted-foreground"}`, children: event.status })
|
|
2664
2592
|
] }) });
|
|
2665
2593
|
}
|
|
2666
2594
|
function EventTypeCard({ eventType }) {
|
|
2667
|
-
return /* @__PURE__ */
|
|
2668
|
-
/* @__PURE__ */
|
|
2669
|
-
/* @__PURE__ */
|
|
2670
|
-
/* @__PURE__ */
|
|
2671
|
-
eventType.description_plain && /* @__PURE__ */
|
|
2672
|
-
eventType.duration !== void 0 && /* @__PURE__ */
|
|
2673
|
-
/* @__PURE__ */
|
|
2595
|
+
return /* @__PURE__ */ jsx26("div", { className: "rounded-lg border border-border bg-card p-3", children: /* @__PURE__ */ jsxs25("div", { className: "flex items-start gap-2", children: [
|
|
2596
|
+
/* @__PURE__ */ jsx26(Calendar5, { className: "h-4 w-4 text-muted-foreground mt-0.5 shrink-0" }),
|
|
2597
|
+
/* @__PURE__ */ jsxs25("div", { className: "min-w-0 flex-1", children: [
|
|
2598
|
+
/* @__PURE__ */ jsx26("p", { className: "text-sm font-medium text-foreground", children: eventType.name }),
|
|
2599
|
+
eventType.description_plain && /* @__PURE__ */ jsx26("p", { className: "text-xs text-muted-foreground line-clamp-2", children: eventType.description_plain }),
|
|
2600
|
+
eventType.duration !== void 0 && /* @__PURE__ */ jsxs25("p", { className: "flex items-center gap-1 text-xs text-muted-foreground", children: [
|
|
2601
|
+
/* @__PURE__ */ jsx26(Clock7, { className: "h-3 w-3" }),
|
|
2674
2602
|
eventType.duration,
|
|
2675
2603
|
" min"
|
|
2676
2604
|
] })
|
|
2677
2605
|
] }),
|
|
2678
|
-
eventType.active !== void 0 && /* @__PURE__ */
|
|
2606
|
+
eventType.active !== void 0 && /* @__PURE__ */ jsx26("span", { className: `rounded-full px-2 py-0.5 text-xs ${eventType.active ? "bg-green-500/10 text-green-500" : "bg-muted text-muted-foreground"}`, children: eventType.active ? "Active" : "Inactive" })
|
|
2679
2607
|
] }) });
|
|
2680
2608
|
}
|
|
2681
2609
|
function CalendlyFormatter({ data }) {
|
|
@@ -2685,33 +2613,33 @@ function CalendlyFormatter({ data }) {
|
|
|
2685
2613
|
const events = d.collection.filter(isCalendlyEvent);
|
|
2686
2614
|
const types = d.collection.filter(isCalendlyEventType);
|
|
2687
2615
|
if (types.length > 0 && events.length === 0) {
|
|
2688
|
-
return /* @__PURE__ */
|
|
2616
|
+
return /* @__PURE__ */ jsx26("div", { className: "space-y-1.5", children: types.map((t, i) => /* @__PURE__ */ jsx26(EventTypeCard, { eventType: t }, t.uri || i)) });
|
|
2689
2617
|
}
|
|
2690
2618
|
if (events.length > 0) {
|
|
2691
|
-
return /* @__PURE__ */
|
|
2619
|
+
return /* @__PURE__ */ jsx26("div", { className: "space-y-1.5", children: events.map((e, i) => /* @__PURE__ */ jsx26(EventCard3, { event: e }, e.uri || i)) });
|
|
2692
2620
|
}
|
|
2693
2621
|
}
|
|
2694
2622
|
if (Array.isArray(d.scheduled_events)) {
|
|
2695
|
-
return /* @__PURE__ */
|
|
2623
|
+
return /* @__PURE__ */ jsx26("div", { className: "space-y-1.5", children: d.scheduled_events.filter(isCalendlyEvent).map((e, i) => /* @__PURE__ */ jsx26(EventCard3, { event: e }, e.uri || i)) });
|
|
2696
2624
|
}
|
|
2697
2625
|
if (Array.isArray(d.event_types)) {
|
|
2698
|
-
return /* @__PURE__ */
|
|
2626
|
+
return /* @__PURE__ */ jsx26("div", { className: "space-y-1.5", children: d.event_types.filter(isCalendlyEventType).map((t, i) => /* @__PURE__ */ jsx26(EventTypeCard, { eventType: t }, t.uri || i)) });
|
|
2699
2627
|
}
|
|
2700
2628
|
}
|
|
2701
|
-
if (isCalendlyEvent(data)) return /* @__PURE__ */
|
|
2702
|
-
if (isCalendlyEventType(data)) return /* @__PURE__ */
|
|
2629
|
+
if (isCalendlyEvent(data)) return /* @__PURE__ */ jsx26(EventCard3, { event: data });
|
|
2630
|
+
if (isCalendlyEventType(data)) return /* @__PURE__ */ jsx26(EventTypeCard, { eventType: data });
|
|
2703
2631
|
if (Array.isArray(data)) {
|
|
2704
2632
|
const events = data.filter(isCalendlyEvent);
|
|
2705
2633
|
if (events.length > 0) {
|
|
2706
|
-
return /* @__PURE__ */
|
|
2634
|
+
return /* @__PURE__ */ jsx26("div", { className: "space-y-1.5", children: events.map((e, i) => /* @__PURE__ */ jsx26(EventCard3, { event: e }, e.uri || i)) });
|
|
2707
2635
|
}
|
|
2708
2636
|
}
|
|
2709
|
-
return /* @__PURE__ */
|
|
2637
|
+
return /* @__PURE__ */ jsx26("pre", { className: "rounded-lg border border-border bg-background p-3 text-xs text-foreground overflow-x-auto max-h-96 overflow-y-auto", children: JSON.stringify(data, null, 2) });
|
|
2710
2638
|
}
|
|
2711
2639
|
|
|
2712
2640
|
// src/ui/formatters/twilio.tsx
|
|
2713
2641
|
import { Phone as Phone4, ArrowUpRight, ArrowDownLeft, Clock as Clock8 } from "lucide-react";
|
|
2714
|
-
import { jsx as
|
|
2642
|
+
import { jsx as jsx27, jsxs as jsxs26 } from "react/jsx-runtime";
|
|
2715
2643
|
function isTwilioMessage(data) {
|
|
2716
2644
|
return typeof data === "object" && data !== null && ("body" in data || "sid" in data) && ("from" in data || "to" in data);
|
|
2717
2645
|
}
|
|
@@ -2745,46 +2673,46 @@ function MessageCard3({ message }) {
|
|
|
2745
2673
|
const isInbound = message.direction?.includes("inbound");
|
|
2746
2674
|
const DirectionIcon = isInbound ? ArrowDownLeft : ArrowUpRight;
|
|
2747
2675
|
const dateStr = message.date_sent || message.date_created;
|
|
2748
|
-
return /* @__PURE__ */
|
|
2749
|
-
/* @__PURE__ */
|
|
2750
|
-
/* @__PURE__ */
|
|
2751
|
-
/* @__PURE__ */
|
|
2752
|
-
/* @__PURE__ */
|
|
2753
|
-
message.from && /* @__PURE__ */
|
|
2754
|
-
/* @__PURE__ */
|
|
2755
|
-
message.to && /* @__PURE__ */
|
|
2676
|
+
return /* @__PURE__ */ jsxs26("div", { className: "rounded-lg border border-border bg-card p-3 space-y-1.5", children: [
|
|
2677
|
+
/* @__PURE__ */ jsxs26("div", { className: "flex items-center gap-2", children: [
|
|
2678
|
+
/* @__PURE__ */ jsx27(Phone4, { className: "h-4 w-4 text-muted-foreground shrink-0" }),
|
|
2679
|
+
/* @__PURE__ */ jsx27(DirectionIcon, { className: "h-3 w-3 text-muted-foreground shrink-0" }),
|
|
2680
|
+
/* @__PURE__ */ jsxs26("div", { className: "flex items-center gap-1.5 flex-1 min-w-0", children: [
|
|
2681
|
+
message.from && /* @__PURE__ */ jsx27("span", { className: "text-xs text-muted-foreground", children: message.from }),
|
|
2682
|
+
/* @__PURE__ */ jsx27("span", { className: "text-xs text-muted-foreground", children: "\u2192" }),
|
|
2683
|
+
message.to && /* @__PURE__ */ jsx27("span", { className: "text-xs text-muted-foreground", children: message.to })
|
|
2756
2684
|
] }),
|
|
2757
|
-
/* @__PURE__ */
|
|
2758
|
-
message.status && /* @__PURE__ */
|
|
2759
|
-
dateStr && /* @__PURE__ */
|
|
2760
|
-
/* @__PURE__ */
|
|
2685
|
+
/* @__PURE__ */ jsxs26("div", { className: "flex items-center gap-1.5 shrink-0", children: [
|
|
2686
|
+
message.status && /* @__PURE__ */ jsx27("span", { className: `rounded-full px-2 py-0.5 text-xs ${STATUS_STYLES4[message.status] || "bg-muted text-muted-foreground"}`, children: message.status }),
|
|
2687
|
+
dateStr && /* @__PURE__ */ jsxs26("span", { className: "flex items-center gap-1 text-xs text-muted-foreground", children: [
|
|
2688
|
+
/* @__PURE__ */ jsx27(Clock8, { className: "h-3 w-3" }),
|
|
2761
2689
|
formatRelativeDate6(dateStr)
|
|
2762
2690
|
] })
|
|
2763
2691
|
] })
|
|
2764
2692
|
] }),
|
|
2765
|
-
message.body && /* @__PURE__ */
|
|
2693
|
+
message.body && /* @__PURE__ */ jsx27("p", { className: "text-sm text-foreground line-clamp-3", children: message.body })
|
|
2766
2694
|
] });
|
|
2767
2695
|
}
|
|
2768
2696
|
function TwilioFormatter({ data }) {
|
|
2769
2697
|
if (typeof data === "object" && data !== null && "messages" in data) {
|
|
2770
2698
|
const msgs = data.messages;
|
|
2771
2699
|
if (Array.isArray(msgs)) {
|
|
2772
|
-
return /* @__PURE__ */
|
|
2700
|
+
return /* @__PURE__ */ jsx27("div", { className: "space-y-1.5", children: msgs.filter(isTwilioMessage).map((m, i) => /* @__PURE__ */ jsx27(MessageCard3, { message: m }, m.sid || i)) });
|
|
2773
2701
|
}
|
|
2774
2702
|
}
|
|
2775
|
-
if (isTwilioMessage(data)) return /* @__PURE__ */
|
|
2703
|
+
if (isTwilioMessage(data)) return /* @__PURE__ */ jsx27(MessageCard3, { message: data });
|
|
2776
2704
|
if (Array.isArray(data)) {
|
|
2777
2705
|
const msgs = data.filter(isTwilioMessage);
|
|
2778
2706
|
if (msgs.length > 0) {
|
|
2779
|
-
return /* @__PURE__ */
|
|
2707
|
+
return /* @__PURE__ */ jsx27("div", { className: "space-y-1.5", children: msgs.map((m, i) => /* @__PURE__ */ jsx27(MessageCard3, { message: m }, m.sid || i)) });
|
|
2780
2708
|
}
|
|
2781
2709
|
}
|
|
2782
|
-
return /* @__PURE__ */
|
|
2710
|
+
return /* @__PURE__ */ jsx27("pre", { className: "rounded-lg border border-border bg-background p-3 text-xs text-foreground overflow-x-auto max-h-96 overflow-y-auto", children: JSON.stringify(data, null, 2) });
|
|
2783
2711
|
}
|
|
2784
2712
|
|
|
2785
2713
|
// src/ui/formatters/linkedin.tsx
|
|
2786
2714
|
import { User as User6, FileText as FileText6, ExternalLink as ExternalLink7, Clock as Clock9 } from "lucide-react";
|
|
2787
|
-
import { jsx as
|
|
2715
|
+
import { jsx as jsx28, jsxs as jsxs27 } from "react/jsx-runtime";
|
|
2788
2716
|
function isProfile(data) {
|
|
2789
2717
|
if (typeof data !== "object" || data === null) return false;
|
|
2790
2718
|
return "localizedFirstName" in data || "firstName" in data || "name" in data && "headline" in data;
|
|
@@ -2809,13 +2737,13 @@ function formatRelativeDate7(dateStr) {
|
|
|
2809
2737
|
}
|
|
2810
2738
|
function ProfileCard({ profile }) {
|
|
2811
2739
|
const name = profile.name || [profile.localizedFirstName || profile.firstName, profile.localizedLastName || profile.lastName].filter(Boolean).join(" ");
|
|
2812
|
-
return /* @__PURE__ */
|
|
2813
|
-
/* @__PURE__ */
|
|
2814
|
-
/* @__PURE__ */
|
|
2815
|
-
/* @__PURE__ */
|
|
2816
|
-
profile.headline && /* @__PURE__ */
|
|
2817
|
-
profile.vanityName && /* @__PURE__ */
|
|
2818
|
-
/* @__PURE__ */
|
|
2740
|
+
return /* @__PURE__ */ jsx28("div", { className: "rounded-lg border border-border bg-card p-3 space-y-1", children: /* @__PURE__ */ jsxs27("div", { className: "flex items-start gap-2", children: [
|
|
2741
|
+
/* @__PURE__ */ jsx28(User6, { className: "h-4 w-4 text-muted-foreground mt-0.5 shrink-0" }),
|
|
2742
|
+
/* @__PURE__ */ jsxs27("div", { className: "min-w-0 flex-1", children: [
|
|
2743
|
+
/* @__PURE__ */ jsx28("p", { className: "text-sm font-medium text-foreground", children: name || "LinkedIn Profile" }),
|
|
2744
|
+
profile.headline && /* @__PURE__ */ jsx28("p", { className: "text-xs text-muted-foreground line-clamp-2", children: profile.headline }),
|
|
2745
|
+
profile.vanityName && /* @__PURE__ */ jsxs27("p", { className: "flex items-center gap-1 text-xs text-muted-foreground", children: [
|
|
2746
|
+
/* @__PURE__ */ jsx28(ExternalLink7, { className: "h-3 w-3" }),
|
|
2819
2747
|
"linkedin.com/in/",
|
|
2820
2748
|
profile.vanityName
|
|
2821
2749
|
] })
|
|
@@ -2825,24 +2753,24 @@ function ProfileCard({ profile }) {
|
|
|
2825
2753
|
function PostCard({ post }) {
|
|
2826
2754
|
const content = post.text || post.commentary;
|
|
2827
2755
|
const time = post.created?.time || post.timestamp;
|
|
2828
|
-
return /* @__PURE__ */
|
|
2829
|
-
/* @__PURE__ */
|
|
2830
|
-
/* @__PURE__ */
|
|
2831
|
-
post.author && /* @__PURE__ */
|
|
2832
|
-
time && /* @__PURE__ */
|
|
2833
|
-
/* @__PURE__ */
|
|
2756
|
+
return /* @__PURE__ */ jsxs27("div", { className: "rounded-lg border border-border bg-card p-3 space-y-1.5", children: [
|
|
2757
|
+
/* @__PURE__ */ jsxs27("div", { className: "flex items-center gap-2", children: [
|
|
2758
|
+
/* @__PURE__ */ jsx28(FileText6, { className: "h-4 w-4 text-muted-foreground shrink-0" }),
|
|
2759
|
+
post.author && /* @__PURE__ */ jsx28("span", { className: "text-xs font-medium text-foreground", children: post.author }),
|
|
2760
|
+
time && /* @__PURE__ */ jsxs27("span", { className: "flex items-center gap-1 text-xs text-muted-foreground ml-auto", children: [
|
|
2761
|
+
/* @__PURE__ */ jsx28(Clock9, { className: "h-3 w-3" }),
|
|
2834
2762
|
formatRelativeDate7(time)
|
|
2835
2763
|
] })
|
|
2836
2764
|
] }),
|
|
2837
|
-
content && /* @__PURE__ */
|
|
2765
|
+
content && /* @__PURE__ */ jsx28("p", { className: "text-sm text-foreground line-clamp-4", children: content })
|
|
2838
2766
|
] });
|
|
2839
2767
|
}
|
|
2840
2768
|
function LinkedInFormatter({ data }) {
|
|
2841
|
-
if (isProfile(data)) return /* @__PURE__ */
|
|
2769
|
+
if (isProfile(data)) return /* @__PURE__ */ jsx28(ProfileCard, { profile: data });
|
|
2842
2770
|
if (typeof data === "object" && data !== null && "posts" in data) {
|
|
2843
2771
|
const posts = data.posts;
|
|
2844
2772
|
if (Array.isArray(posts)) {
|
|
2845
|
-
return /* @__PURE__ */
|
|
2773
|
+
return /* @__PURE__ */ jsx28("div", { className: "space-y-1.5", children: posts.filter(isPost).map((p, i) => /* @__PURE__ */ jsx28(PostCard, { post: p }, p.id || i)) });
|
|
2846
2774
|
}
|
|
2847
2775
|
}
|
|
2848
2776
|
if (typeof data === "object" && data !== null && "elements" in data) {
|
|
@@ -2850,32 +2778,32 @@ function LinkedInFormatter({ data }) {
|
|
|
2850
2778
|
if (Array.isArray(elements)) {
|
|
2851
2779
|
const posts = elements.filter(isPost);
|
|
2852
2780
|
if (posts.length > 0) {
|
|
2853
|
-
return /* @__PURE__ */
|
|
2781
|
+
return /* @__PURE__ */ jsx28("div", { className: "space-y-1.5", children: posts.map((p, i) => /* @__PURE__ */ jsx28(PostCard, { post: p }, p.id || i)) });
|
|
2854
2782
|
}
|
|
2855
2783
|
}
|
|
2856
2784
|
}
|
|
2857
|
-
if (isPost(data)) return /* @__PURE__ */
|
|
2785
|
+
if (isPost(data)) return /* @__PURE__ */ jsx28(PostCard, { post: data });
|
|
2858
2786
|
if (Array.isArray(data)) {
|
|
2859
2787
|
const posts = data.filter(isPost);
|
|
2860
2788
|
if (posts.length > 0) {
|
|
2861
|
-
return /* @__PURE__ */
|
|
2789
|
+
return /* @__PURE__ */ jsx28("div", { className: "space-y-1.5", children: posts.map((p, i) => /* @__PURE__ */ jsx28(PostCard, { post: p }, p.id || i)) });
|
|
2862
2790
|
}
|
|
2863
2791
|
}
|
|
2864
|
-
return /* @__PURE__ */
|
|
2792
|
+
return /* @__PURE__ */ jsx28("pre", { className: "rounded-lg border border-border bg-background p-3 text-xs text-foreground overflow-x-auto max-h-96 overflow-y-auto", children: JSON.stringify(data, null, 2) });
|
|
2865
2793
|
}
|
|
2866
2794
|
|
|
2867
2795
|
// src/ui/formatters/generic.tsx
|
|
2868
|
-
import { jsx as
|
|
2796
|
+
import { jsx as jsx29 } from "react/jsx-runtime";
|
|
2869
2797
|
function GenericFormatter({ data }) {
|
|
2870
2798
|
if (data === null || data === void 0) {
|
|
2871
|
-
return /* @__PURE__ */
|
|
2799
|
+
return /* @__PURE__ */ jsx29("p", { className: "text-sm text-muted-foreground italic", children: "No data returned" });
|
|
2872
2800
|
}
|
|
2873
|
-
return /* @__PURE__ */
|
|
2801
|
+
return /* @__PURE__ */ jsx29("pre", { className: "rounded-lg border border-border bg-background p-3 text-xs text-foreground overflow-x-auto max-h-96 overflow-y-auto", children: JSON.stringify(data, null, 2) });
|
|
2874
2802
|
}
|
|
2875
2803
|
|
|
2876
2804
|
// src/ui/tool-result.tsx
|
|
2877
|
-
import { jsx as
|
|
2878
|
-
function
|
|
2805
|
+
import { jsx as jsx30 } from "react/jsx-runtime";
|
|
2806
|
+
function extractToolName(part) {
|
|
2879
2807
|
if (part.type.startsWith("tool-") && part.type !== "tool-invocation") {
|
|
2880
2808
|
return part.type.slice(5);
|
|
2881
2809
|
}
|
|
@@ -2886,7 +2814,7 @@ function extractToolName2(part) {
|
|
|
2886
2814
|
if (part.toolInvocation?.toolName) return part.toolInvocation.toolName;
|
|
2887
2815
|
return "unknown";
|
|
2888
2816
|
}
|
|
2889
|
-
function
|
|
2817
|
+
function extractState(part) {
|
|
2890
2818
|
return part.state ?? part.toolInvocation?.state;
|
|
2891
2819
|
}
|
|
2892
2820
|
function unwrapSupyagentResult(result) {
|
|
@@ -2895,7 +2823,7 @@ function unwrapSupyagentResult(result) {
|
|
|
2895
2823
|
}
|
|
2896
2824
|
return result;
|
|
2897
2825
|
}
|
|
2898
|
-
function
|
|
2826
|
+
function extractArgs(part) {
|
|
2899
2827
|
if (part.input && typeof part.input === "object" && !Array.isArray(part.input)) {
|
|
2900
2828
|
return part.input;
|
|
2901
2829
|
}
|
|
@@ -2927,72 +2855,72 @@ function maybeNormalize(toolName, formatterType, data) {
|
|
|
2927
2855
|
function renderFormatter(formatterType, data) {
|
|
2928
2856
|
switch (formatterType) {
|
|
2929
2857
|
case "email":
|
|
2930
|
-
return /* @__PURE__ */
|
|
2858
|
+
return /* @__PURE__ */ jsx30(EmailFormatter, { data });
|
|
2931
2859
|
case "calendar":
|
|
2932
|
-
return /* @__PURE__ */
|
|
2860
|
+
return /* @__PURE__ */ jsx30(CalendarEventFormatter, { data });
|
|
2933
2861
|
case "slack":
|
|
2934
|
-
return /* @__PURE__ */
|
|
2862
|
+
return /* @__PURE__ */ jsx30(SlackMessageFormatter, { data });
|
|
2935
2863
|
case "github":
|
|
2936
|
-
return /* @__PURE__ */
|
|
2864
|
+
return /* @__PURE__ */ jsx30(GithubFormatter, { data });
|
|
2937
2865
|
case "drive":
|
|
2938
|
-
return /* @__PURE__ */
|
|
2866
|
+
return /* @__PURE__ */ jsx30(DriveFileFormatter, { data });
|
|
2939
2867
|
case "search":
|
|
2940
|
-
return /* @__PURE__ */
|
|
2868
|
+
return /* @__PURE__ */ jsx30(SearchFormatter, { data });
|
|
2941
2869
|
case "docs":
|
|
2942
|
-
return /* @__PURE__ */
|
|
2870
|
+
return /* @__PURE__ */ jsx30(DocsFormatter, { data });
|
|
2943
2871
|
case "sheets":
|
|
2944
|
-
return /* @__PURE__ */
|
|
2872
|
+
return /* @__PURE__ */ jsx30(SheetsFormatter, { data });
|
|
2945
2873
|
case "slides":
|
|
2946
|
-
return /* @__PURE__ */
|
|
2874
|
+
return /* @__PURE__ */ jsx30(SlidesFormatter, { data });
|
|
2947
2875
|
case "hubspot":
|
|
2948
|
-
return /* @__PURE__ */
|
|
2876
|
+
return /* @__PURE__ */ jsx30(HubspotFormatter, { data });
|
|
2949
2877
|
case "linear":
|
|
2950
|
-
return /* @__PURE__ */
|
|
2878
|
+
return /* @__PURE__ */ jsx30(LinearFormatter, { data });
|
|
2951
2879
|
case "pipedrive":
|
|
2952
|
-
return /* @__PURE__ */
|
|
2880
|
+
return /* @__PURE__ */ jsx30(PipedriveFormatter, { data });
|
|
2953
2881
|
case "compute":
|
|
2954
|
-
return /* @__PURE__ */
|
|
2882
|
+
return /* @__PURE__ */ jsx30(ComputeFormatter, { data });
|
|
2955
2883
|
case "resend":
|
|
2956
|
-
return /* @__PURE__ */
|
|
2884
|
+
return /* @__PURE__ */ jsx30(ResendFormatter, { data });
|
|
2957
2885
|
case "inbox":
|
|
2958
|
-
return /* @__PURE__ */
|
|
2886
|
+
return /* @__PURE__ */ jsx30(InboxFormatter, { data });
|
|
2959
2887
|
case "discord":
|
|
2960
|
-
return /* @__PURE__ */
|
|
2888
|
+
return /* @__PURE__ */ jsx30(DiscordFormatter, { data });
|
|
2961
2889
|
case "notion":
|
|
2962
|
-
return /* @__PURE__ */
|
|
2890
|
+
return /* @__PURE__ */ jsx30(NotionFormatter, { data });
|
|
2963
2891
|
case "twitter":
|
|
2964
|
-
return /* @__PURE__ */
|
|
2892
|
+
return /* @__PURE__ */ jsx30(TwitterFormatter, { data });
|
|
2965
2893
|
case "telegram":
|
|
2966
|
-
return /* @__PURE__ */
|
|
2894
|
+
return /* @__PURE__ */ jsx30(TelegramFormatter, { data });
|
|
2967
2895
|
case "stripe":
|
|
2968
|
-
return /* @__PURE__ */
|
|
2896
|
+
return /* @__PURE__ */ jsx30(StripeFormatter, { data });
|
|
2969
2897
|
case "jira":
|
|
2970
|
-
return /* @__PURE__ */
|
|
2898
|
+
return /* @__PURE__ */ jsx30(JiraFormatter, { data });
|
|
2971
2899
|
case "salesforce":
|
|
2972
|
-
return /* @__PURE__ */
|
|
2900
|
+
return /* @__PURE__ */ jsx30(SalesforceFormatter, { data });
|
|
2973
2901
|
case "brevo":
|
|
2974
|
-
return /* @__PURE__ */
|
|
2902
|
+
return /* @__PURE__ */ jsx30(BrevoFormatter, { data });
|
|
2975
2903
|
case "calendly":
|
|
2976
|
-
return /* @__PURE__ */
|
|
2904
|
+
return /* @__PURE__ */ jsx30(CalendlyFormatter, { data });
|
|
2977
2905
|
case "twilio":
|
|
2978
|
-
return /* @__PURE__ */
|
|
2906
|
+
return /* @__PURE__ */ jsx30(TwilioFormatter, { data });
|
|
2979
2907
|
case "linkedin":
|
|
2980
|
-
return /* @__PURE__ */
|
|
2908
|
+
return /* @__PURE__ */ jsx30(LinkedInFormatter, { data });
|
|
2981
2909
|
default:
|
|
2982
|
-
return /* @__PURE__ */
|
|
2910
|
+
return /* @__PURE__ */ jsx30(GenericFormatter, { data });
|
|
2983
2911
|
}
|
|
2984
2912
|
}
|
|
2985
2913
|
function SupyagentToolResult({ part }) {
|
|
2986
|
-
const state =
|
|
2914
|
+
const state = extractState(part);
|
|
2987
2915
|
const result = extractResult(part);
|
|
2988
|
-
const toolName =
|
|
2916
|
+
const toolName = extractToolName(part);
|
|
2989
2917
|
if (state !== "output-available" || result === void 0) {
|
|
2990
2918
|
return null;
|
|
2991
2919
|
}
|
|
2992
2920
|
const formatterType = getFormatterType(toolName);
|
|
2993
2921
|
const data = maybeNormalize(toolName, formatterType, result);
|
|
2994
2922
|
const summary = getSummary(formatterType, data, toolName);
|
|
2995
|
-
return /* @__PURE__ */
|
|
2923
|
+
return /* @__PURE__ */ jsx30(
|
|
2996
2924
|
CollapsibleResult,
|
|
2997
2925
|
{
|
|
2998
2926
|
toolName,
|
|
@@ -3003,13 +2931,9 @@ function SupyagentToolResult({ part }) {
|
|
|
3003
2931
|
);
|
|
3004
2932
|
}
|
|
3005
2933
|
|
|
3006
|
-
// src/ui/tool-action.tsx
|
|
3007
|
-
import { useState as useState3 } from "react";
|
|
3008
|
-
import { ChevronDown as ChevronDown3, ChevronRight as ChevronRight3, Check as Check4, AlertCircle as AlertCircle2, Loader2 as Loader22 } from "lucide-react";
|
|
3009
|
-
|
|
3010
2934
|
// src/ui/tool-input.tsx
|
|
3011
|
-
import
|
|
3012
|
-
import { jsx as
|
|
2935
|
+
import React2 from "react";
|
|
2936
|
+
import { jsx as jsx31, jsxs as jsxs28 } from "react/jsx-runtime";
|
|
3013
2937
|
function formatValue(value) {
|
|
3014
2938
|
if (value === null || value === void 0) {
|
|
3015
2939
|
return { text: "null", muted: true };
|
|
@@ -3043,17 +2967,19 @@ function formatValue(value) {
|
|
|
3043
2967
|
}
|
|
3044
2968
|
function ToolInput({ args }) {
|
|
3045
2969
|
if (!args || Object.keys(args).length === 0) return null;
|
|
3046
|
-
return /* @__PURE__ */
|
|
2970
|
+
return /* @__PURE__ */ jsx31("div", { className: "grid grid-cols-[auto_1fr] gap-x-4 gap-y-1 text-sm", children: Object.entries(args).map(([key, value]) => {
|
|
3047
2971
|
const formatted = formatValue(value);
|
|
3048
|
-
return /* @__PURE__ */
|
|
3049
|
-
/* @__PURE__ */
|
|
3050
|
-
/* @__PURE__ */
|
|
2972
|
+
return /* @__PURE__ */ jsxs28(React2.Fragment, { children: [
|
|
2973
|
+
/* @__PURE__ */ jsx31("span", { className: "text-muted-foreground select-none", children: key }),
|
|
2974
|
+
/* @__PURE__ */ jsx31("span", { className: formatted.muted ? "text-muted-foreground" : "text-foreground", children: formatted.text })
|
|
3051
2975
|
] }, key);
|
|
3052
2976
|
}) });
|
|
3053
2977
|
}
|
|
3054
2978
|
|
|
3055
2979
|
// src/ui/tool-action.tsx
|
|
3056
|
-
import {
|
|
2980
|
+
import { useState as useState2 } from "react";
|
|
2981
|
+
import { ChevronDown as ChevronDown2, ChevronRight as ChevronRight2, Check as Check3, AlertCircle, Loader2 } from "lucide-react";
|
|
2982
|
+
import { Fragment, jsx as jsx32, jsxs as jsxs29 } from "react/jsx-runtime";
|
|
3057
2983
|
var BADGE_STYLES2 = {
|
|
3058
2984
|
default: "bg-muted text-muted-foreground",
|
|
3059
2985
|
success: "bg-green-500/10 text-green-500",
|
|
@@ -3061,10 +2987,10 @@ var BADGE_STYLES2 = {
|
|
|
3061
2987
|
warning: "bg-yellow-500/10 text-yellow-600"
|
|
3062
2988
|
};
|
|
3063
2989
|
function SupyagentToolAction({ part, defaultExpanded = false }) {
|
|
3064
|
-
const [expanded, setExpanded] =
|
|
3065
|
-
const toolName =
|
|
3066
|
-
const state =
|
|
3067
|
-
const args =
|
|
2990
|
+
const [expanded, setExpanded] = useState2(defaultExpanded);
|
|
2991
|
+
const toolName = extractToolName(part);
|
|
2992
|
+
const state = extractState(part);
|
|
2993
|
+
const args = extractArgs(part);
|
|
3068
2994
|
const provider = getProviderFromToolName(toolName);
|
|
3069
2995
|
const providerLabel = getProviderLabel(provider);
|
|
3070
2996
|
const actionLabel = humanizeToolName(toolName);
|
|
@@ -3086,59 +3012,59 @@ function SupyagentToolAction({ part, defaultExpanded = false }) {
|
|
|
3086
3012
|
const hasArgs = args && Object.keys(args).length > 0;
|
|
3087
3013
|
const hasExpandableContent = hasArgs || formatterOutput;
|
|
3088
3014
|
const canExpand = !isStreaming && hasExpandableContent;
|
|
3089
|
-
return /* @__PURE__ */
|
|
3015
|
+
return /* @__PURE__ */ jsxs29(
|
|
3090
3016
|
"div",
|
|
3091
3017
|
{
|
|
3092
3018
|
className: "rounded-lg border border-border bg-card overflow-hidden",
|
|
3093
3019
|
"data-state": isDone ? "done" : isError ? "error" : isStreaming ? "streaming" : "pending",
|
|
3094
3020
|
children: [
|
|
3095
|
-
/* @__PURE__ */
|
|
3021
|
+
/* @__PURE__ */ jsxs29(
|
|
3096
3022
|
"button",
|
|
3097
3023
|
{
|
|
3098
3024
|
type: "button",
|
|
3099
3025
|
onClick: () => canExpand && setExpanded(!expanded),
|
|
3100
3026
|
className: `flex items-center gap-2 w-full px-3 py-2 text-left transition-colors ${canExpand ? "hover:bg-muted cursor-pointer" : "cursor-default"}`,
|
|
3101
3027
|
children: [
|
|
3102
|
-
/* @__PURE__ */
|
|
3103
|
-
/* @__PURE__ */
|
|
3104
|
-
isStreaming && /* @__PURE__ */
|
|
3028
|
+
/* @__PURE__ */ jsxs29("div", { className: "relative shrink-0", children: [
|
|
3029
|
+
/* @__PURE__ */ jsx32(ProviderIcon, { toolName, className: "h-4 w-4 text-muted-foreground" }),
|
|
3030
|
+
isStreaming && /* @__PURE__ */ jsx32(Loader2, { className: "absolute -top-1 -right-1 h-3 w-3 text-primary animate-spin" })
|
|
3105
3031
|
] }),
|
|
3106
|
-
/* @__PURE__ */
|
|
3107
|
-
/* @__PURE__ */
|
|
3108
|
-
summary && /* @__PURE__ */
|
|
3109
|
-
/* @__PURE__ */
|
|
3110
|
-
/* @__PURE__ */
|
|
3032
|
+
/* @__PURE__ */ jsx32("span", { className: "text-xs text-muted-foreground", children: providerLabel }),
|
|
3033
|
+
/* @__PURE__ */ jsx32("span", { className: "text-sm text-foreground", children: actionLabel }),
|
|
3034
|
+
summary && /* @__PURE__ */ jsxs29(Fragment, { children: [
|
|
3035
|
+
/* @__PURE__ */ jsx32("span", { className: "text-muted-foreground text-xs", children: "\xB7" }),
|
|
3036
|
+
/* @__PURE__ */ jsx32("span", { className: "text-sm text-muted-foreground flex-1 truncate", children: summary.text })
|
|
3111
3037
|
] }),
|
|
3112
|
-
!summary && /* @__PURE__ */
|
|
3113
|
-
summary?.badge && /* @__PURE__ */
|
|
3038
|
+
!summary && /* @__PURE__ */ jsx32("span", { className: "flex-1" }),
|
|
3039
|
+
summary?.badge && /* @__PURE__ */ jsx32(
|
|
3114
3040
|
"span",
|
|
3115
3041
|
{
|
|
3116
3042
|
className: `inline-flex items-center rounded-full px-2 py-0.5 text-xs font-medium shrink-0 ${BADGE_STYLES2[summary.badge.variant || "default"]}`,
|
|
3117
3043
|
children: summary.badge.text
|
|
3118
3044
|
}
|
|
3119
3045
|
),
|
|
3120
|
-
isDone && /* @__PURE__ */
|
|
3121
|
-
isError && /* @__PURE__ */
|
|
3122
|
-
/* @__PURE__ */
|
|
3046
|
+
isDone && /* @__PURE__ */ jsx32(Check3, { className: "h-3.5 w-3.5 text-green-500 shrink-0" }),
|
|
3047
|
+
isError && /* @__PURE__ */ jsxs29("span", { className: "inline-flex items-center gap-1 rounded-full bg-destructive/10 px-2 py-0.5 text-xs text-destructive shrink-0", children: [
|
|
3048
|
+
/* @__PURE__ */ jsx32(AlertCircle, { className: "h-3 w-3" }),
|
|
3123
3049
|
"Error"
|
|
3124
3050
|
] }),
|
|
3125
|
-
isStreaming && /* @__PURE__ */
|
|
3126
|
-
canExpand && (expanded ? /* @__PURE__ */
|
|
3051
|
+
isStreaming && /* @__PURE__ */ jsx32("span", { className: "inline-flex items-center gap-1 rounded-full bg-primary/10 px-2 py-0.5 text-xs text-primary animate-pulse shrink-0", children: "Calling..." }),
|
|
3052
|
+
canExpand && (expanded ? /* @__PURE__ */ jsx32(ChevronDown2, { className: "h-3.5 w-3.5 text-muted-foreground shrink-0" }) : /* @__PURE__ */ jsx32(ChevronRight2, { className: "h-3.5 w-3.5 text-muted-foreground shrink-0" }))
|
|
3127
3053
|
]
|
|
3128
3054
|
}
|
|
3129
3055
|
),
|
|
3130
|
-
/* @__PURE__ */
|
|
3056
|
+
/* @__PURE__ */ jsx32(
|
|
3131
3057
|
"div",
|
|
3132
3058
|
{
|
|
3133
3059
|
className: "grid transition-[grid-template-rows] duration-200 ease-out",
|
|
3134
3060
|
style: { gridTemplateRows: expanded ? "1fr" : "0fr" },
|
|
3135
|
-
children: /* @__PURE__ */
|
|
3136
|
-
args && Object.keys(args).length > 0 && /* @__PURE__ */
|
|
3137
|
-
/* @__PURE__ */
|
|
3138
|
-
/* @__PURE__ */
|
|
3061
|
+
children: /* @__PURE__ */ jsx32("div", { className: "overflow-hidden", children: /* @__PURE__ */ jsxs29("div", { className: "border-t border-border px-3 py-2 space-y-3", children: [
|
|
3062
|
+
args && Object.keys(args).length > 0 && /* @__PURE__ */ jsxs29("div", { children: [
|
|
3063
|
+
/* @__PURE__ */ jsx32("p", { className: "text-[10px] font-medium uppercase tracking-wider text-muted-foreground mb-1.5", children: "Input" }),
|
|
3064
|
+
/* @__PURE__ */ jsx32(ToolInput, { args })
|
|
3139
3065
|
] }),
|
|
3140
|
-
formatterOutput && /* @__PURE__ */
|
|
3141
|
-
/* @__PURE__ */
|
|
3066
|
+
formatterOutput && /* @__PURE__ */ jsxs29("div", { children: [
|
|
3067
|
+
/* @__PURE__ */ jsx32("p", { className: "text-[10px] font-medium uppercase tracking-wider text-muted-foreground mb-1.5", children: "Output" }),
|
|
3142
3068
|
formatterOutput
|
|
3143
3069
|
] })
|
|
3144
3070
|
] }) })
|
|
@@ -3148,6 +3074,76 @@ function SupyagentToolAction({ part, defaultExpanded = false }) {
|
|
|
3148
3074
|
}
|
|
3149
3075
|
);
|
|
3150
3076
|
}
|
|
3077
|
+
|
|
3078
|
+
// src/ui/tool-call.tsx
|
|
3079
|
+
import { useState as useState3 } from "react";
|
|
3080
|
+
import { ChevronDown as ChevronDown3, ChevronRight as ChevronRight3, Check as Check4, AlertCircle as AlertCircle2, Loader2 as Loader22 } from "lucide-react";
|
|
3081
|
+
import { jsx as jsx33, jsxs as jsxs30 } from "react/jsx-runtime";
|
|
3082
|
+
function extractToolName2(part) {
|
|
3083
|
+
if (part.type.startsWith("tool-") && part.type !== "tool-invocation") {
|
|
3084
|
+
return part.type.slice(5);
|
|
3085
|
+
}
|
|
3086
|
+
if (part.type === "dynamic-tool" && part.toolName) {
|
|
3087
|
+
return part.toolName;
|
|
3088
|
+
}
|
|
3089
|
+
if (part.toolName) return part.toolName;
|
|
3090
|
+
if (part.toolInvocation?.toolName) return part.toolInvocation.toolName;
|
|
3091
|
+
return "unknown";
|
|
3092
|
+
}
|
|
3093
|
+
function extractState2(part) {
|
|
3094
|
+
return part.state || part.toolInvocation?.state || "input-available";
|
|
3095
|
+
}
|
|
3096
|
+
function extractArgs2(part) {
|
|
3097
|
+
return part.input || part.args || part.toolInvocation?.args;
|
|
3098
|
+
}
|
|
3099
|
+
function SupyagentToolCall({ part }) {
|
|
3100
|
+
const [expanded, setExpanded] = useState3(false);
|
|
3101
|
+
const toolName = extractToolName2(part);
|
|
3102
|
+
const state = extractState2(part);
|
|
3103
|
+
const args = extractArgs2(part);
|
|
3104
|
+
const provider = getProviderFromToolName(toolName);
|
|
3105
|
+
const providerLabel = getProviderLabel(provider);
|
|
3106
|
+
const actionLabel = humanizeToolName(toolName);
|
|
3107
|
+
const isStreaming = state === "input-streaming";
|
|
3108
|
+
const isError = state === "output-error";
|
|
3109
|
+
const isDone = state === "output-available";
|
|
3110
|
+
return /* @__PURE__ */ jsxs30(
|
|
3111
|
+
"div",
|
|
3112
|
+
{
|
|
3113
|
+
className: "rounded-lg border border-border bg-card overflow-hidden",
|
|
3114
|
+
"data-state": isDone ? "done" : isError ? "error" : isStreaming ? "streaming" : "pending",
|
|
3115
|
+
children: [
|
|
3116
|
+
/* @__PURE__ */ jsxs30(
|
|
3117
|
+
"button",
|
|
3118
|
+
{
|
|
3119
|
+
type: "button",
|
|
3120
|
+
onClick: () => args && setExpanded(!expanded),
|
|
3121
|
+
className: "flex items-center gap-2 w-full px-3 py-2 text-left hover:bg-muted transition-colors",
|
|
3122
|
+
children: [
|
|
3123
|
+
/* @__PURE__ */ jsxs30("div", { className: "relative", children: [
|
|
3124
|
+
/* @__PURE__ */ jsx33(ProviderIcon, { toolName, className: "h-4 w-4 text-muted-foreground" }),
|
|
3125
|
+
isStreaming && /* @__PURE__ */ jsx33(Loader22, { className: "absolute -top-1 -right-1 h-3 w-3 text-primary animate-spin" })
|
|
3126
|
+
] }),
|
|
3127
|
+
/* @__PURE__ */ jsx33("span", { className: "text-xs text-muted-foreground", children: providerLabel }),
|
|
3128
|
+
/* @__PURE__ */ jsx33("span", { className: "text-sm text-foreground flex-1", children: actionLabel }),
|
|
3129
|
+
isDone && /* @__PURE__ */ jsxs30("span", { className: "inline-flex items-center gap-1 rounded-full bg-green-500/10 px-2 py-0.5 text-xs text-green-500", children: [
|
|
3130
|
+
/* @__PURE__ */ jsx33(Check4, { className: "h-3 w-3" }),
|
|
3131
|
+
"Completed"
|
|
3132
|
+
] }),
|
|
3133
|
+
isError && /* @__PURE__ */ jsxs30("span", { className: "inline-flex items-center gap-1 rounded-full bg-destructive/10 px-2 py-0.5 text-xs text-destructive", children: [
|
|
3134
|
+
/* @__PURE__ */ jsx33(AlertCircle2, { className: "h-3 w-3" }),
|
|
3135
|
+
"Error"
|
|
3136
|
+
] }),
|
|
3137
|
+
isStreaming && /* @__PURE__ */ jsx33("span", { className: "inline-flex items-center gap-1 rounded-full bg-primary/10 px-2 py-0.5 text-xs text-primary animate-pulse", children: "Calling..." }),
|
|
3138
|
+
args && (expanded ? /* @__PURE__ */ jsx33(ChevronDown3, { className: "h-3.5 w-3.5 text-muted-foreground" }) : /* @__PURE__ */ jsx33(ChevronRight3, { className: "h-3.5 w-3.5 text-muted-foreground" }))
|
|
3139
|
+
]
|
|
3140
|
+
}
|
|
3141
|
+
),
|
|
3142
|
+
expanded && args && /* @__PURE__ */ jsx33("div", { className: "border-t border-border px-3 py-2", children: /* @__PURE__ */ jsx33("pre", { className: "text-xs text-muted-foreground overflow-x-auto", children: JSON.stringify(args, null, 2) }) })
|
|
3143
|
+
]
|
|
3144
|
+
}
|
|
3145
|
+
);
|
|
3146
|
+
}
|
|
3151
3147
|
export {
|
|
3152
3148
|
BrevoFormatter,
|
|
3153
3149
|
CalendarEventFormatter,
|
|
@@ -3166,6 +3162,7 @@ export {
|
|
|
3166
3162
|
LinearFormatter,
|
|
3167
3163
|
LinkedInFormatter,
|
|
3168
3164
|
NotionFormatter,
|
|
3165
|
+
PROVIDER_LABELS,
|
|
3169
3166
|
PipedriveFormatter,
|
|
3170
3167
|
ProviderIcon,
|
|
3171
3168
|
ResendFormatter,
|
|
@@ -3182,9 +3179,19 @@ export {
|
|
|
3182
3179
|
ToolInput,
|
|
3183
3180
|
TwilioFormatter,
|
|
3184
3181
|
TwitterFormatter,
|
|
3182
|
+
extractArgs,
|
|
3183
|
+
extractResult,
|
|
3184
|
+
extractState,
|
|
3185
|
+
extractToolName,
|
|
3186
|
+
getFormatterType,
|
|
3185
3187
|
getProviderFromToolName,
|
|
3186
3188
|
getProviderLabel,
|
|
3187
3189
|
getSummary,
|
|
3188
|
-
humanizeToolName
|
|
3190
|
+
humanizeToolName,
|
|
3191
|
+
maybeNormalize,
|
|
3192
|
+
normalizeMicrosoftCalendar,
|
|
3193
|
+
normalizeMicrosoftDrive,
|
|
3194
|
+
normalizeMicrosoftMail,
|
|
3195
|
+
unwrapSupyagentResult
|
|
3189
3196
|
};
|
|
3190
3197
|
//# sourceMappingURL=react.js.map
|