@brainfish-ai/components 0.18.4-alpha.4 → 0.18.4-alpha.5
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/esm/chunks/{data-table.D3KPugly.js → data-table.DbcAYxMY.js} +2 -9
- package/dist/esm/chunks/data-table.DbcAYxMY.js.map +1 -0
- package/dist/esm/components/convos.js +25 -16
- package/dist/esm/components/convos.js.map +1 -1
- package/dist/esm/components/data-table.js +1 -1
- package/dist/esm/global.css +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/stats.html +1 -1
- package/package.json +1 -1
- package/dist/esm/chunks/data-table.D3KPugly.js.map +0 -1
|
@@ -74,14 +74,7 @@ function DataTable({
|
|
|
74
74
|
))));
|
|
75
75
|
}, [skeletonRowCount, columns]);
|
|
76
76
|
const renderTableRows = useCallback(() => {
|
|
77
|
-
return table.getRowModel().rows.map((row) => /* @__PURE__ */ React__default.createElement(React__default.Fragment, { key: row.original.id || row.id }, /* @__PURE__ */ React__default.createElement(
|
|
78
|
-
TableRow,
|
|
79
|
-
{
|
|
80
|
-
"data-state": row.getIsSelected() && "selected",
|
|
81
|
-
className: cn(row.getIsExpanded() && "border-b-0")
|
|
82
|
-
},
|
|
83
|
-
row.getVisibleCells().map((cell) => /* @__PURE__ */ React__default.createElement(TableCell, { key: cell.id, className: "first:pl-4 last:pr-4 py-4", style: { width: cell.column.getSize() } }, flexRender(cell.column.columnDef.cell, cell.getContext())))
|
|
84
|
-
), /* @__PURE__ */ React__default.createElement(AnimatePresence, { initial: false }, row.getIsExpanded() && (() => {
|
|
77
|
+
return table.getRowModel().rows.map((row) => /* @__PURE__ */ React__default.createElement(React__default.Fragment, { key: row.original.id || row.id }, /* @__PURE__ */ React__default.createElement(TableRow, { "data-state": row.getIsSelected() && "selected", className: cn(row.getIsExpanded() && "border-b-0") }, row.getVisibleCells().map((cell) => /* @__PURE__ */ React__default.createElement(TableCell, { key: cell.id, className: "first:pl-4 last:pr-4 py-4", style: { width: cell.column.getSize() } }, flexRender(cell.column.columnDef.cell, cell.getContext())))), /* @__PURE__ */ React__default.createElement(AnimatePresence, { initial: false }, row.getIsExpanded() && (() => {
|
|
85
78
|
const expandedColumn = columns.find((col) => col.expandedContent);
|
|
86
79
|
return expandedColumn?.expandedContent ? /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, /* @__PURE__ */ React__default.createElement(TableRow, { "aria-hidden": true, role: "presentation", className: "border-none" }, /* @__PURE__ */ React__default.createElement(TableCell, { colSpan: row.getVisibleCells().length, className: "p-0 inset-0 h-[1px] w-full" }, /* @__PURE__ */ React__default.createElement("div", { className: "custom-dashed-border-b absolute inset-0 h-[1px]" }))), /* @__PURE__ */ React__default.createElement(TableRow, { key: `${row.id}-expanded` }, /* @__PURE__ */ React__default.createElement(
|
|
87
80
|
TableCell,
|
|
@@ -106,4 +99,4 @@ function DataTable({
|
|
|
106
99
|
}
|
|
107
100
|
|
|
108
101
|
export { DataTable as D };
|
|
109
|
-
//# sourceMappingURL=data-table.
|
|
102
|
+
//# sourceMappingURL=data-table.DbcAYxMY.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-table.DbcAYxMY.js","sources":["../../../src/components/data-table/data-table.tsx"],"sourcesContent":["import React, { useCallback } from 'react';\nimport {\n ColumnDef,\n flexRender,\n getCoreRowModel,\n useReactTable,\n ExpandedState,\n SortingState,\n getPaginationRowModel,\n getFilteredRowModel,\n getExpandedRowModel,\n getSortedRowModel,\n Row,\n} from '@tanstack/react-table';\nimport { motion, AnimatePresence } from 'framer-motion';\n\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '../ui/table';\n\nimport { cn } from '@/lib/utils';\n\n// Skeleton component for loading state\nconst Skeleton = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn('animate-original-pulse rounded-md bg-muted', className)} {...props} />\n);\n\n// Framer Motion Accordion Variants for bouncy accordion effect\nconst accordionVariants = {\n initial: {\n height: 0,\n },\n animate: {\n height: 'auto',\n transition: {\n height: {\n type: 'spring',\n stiffness: 450, // increase to make it more stiff (less bouncy), therefore increasing the speed of the animation\n damping: 20, // increase to make it more dampened and slow\n },\n },\n },\n exit: {\n height: 0,\n transition: {\n height: {\n duration: 0.1,\n ease: 'linear',\n },\n },\n },\n};\n\nexport type ExtendedColumnDef<TData, TValue = unknown> = ColumnDef<TData, TValue> & {\n expandedContent?: (row: Row<TData>) => React.ReactNode;\n};\n\nexport interface DataTableProps<TData, TValue> extends React.HTMLAttributes<HTMLDivElement> {\n columns: ExtendedColumnDef<TData, TValue>[];\n data: TData[];\n getRowCanExpand?: (row: Row<TData>) => boolean;\n className?: string;\n expandeRowClassName?: string;\n isLoading?: boolean;\n skeletonRowCount?: number;\n}\n\nexport function DataTable<TData extends Record<string, any> & { id?: string | number }, TValue>({\n columns,\n data,\n getRowCanExpand = () => true,\n className,\n expandeRowClassName,\n isLoading = false,\n skeletonRowCount = 10,\n ...props\n}: DataTableProps<TData, TValue>) {\n const [expanded, setExpanded] = React.useState<ExpandedState>({});\n const [sorting, setSorting] = React.useState<SortingState>([]);\n\n // Reset expanded state when data changes. Collapse all rows when data changes.\n React.useEffect(() => {\n setExpanded({});\n }, [data]);\n\n const table = useReactTable({\n data,\n columns,\n getCoreRowModel: getCoreRowModel(),\n state: {\n expanded,\n sorting,\n },\n onExpandedChange: setExpanded,\n onSortingChange: setSorting,\n getRowCanExpand: columns.some((col) => col.expandedContent) ? getRowCanExpand : undefined,\n getPaginationRowModel: getPaginationRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n getExpandedRowModel: getExpandedRowModel(),\n getSortedRowModel: getSortedRowModel(),\n });\n\n // Render the skeleton rows for loading state\n const renderSkeletonRows = useCallback(() => {\n return Array.from({ length: skeletonRowCount }).map((_, index) => (\n <TableRow key={`skeleton-${index}`}>\n {columns.map((column, colIndex) => (\n <TableCell\n key={`skeleton-cell-${index}-${colIndex}`}\n className=\"first:pl-4 last:pr-4 py-4\"\n style={{ width: column.size }}\n >\n <Skeleton className=\"h-4 w-full\" />\n </TableCell>\n ))}\n </TableRow>\n ));\n }, [skeletonRowCount, columns]);\n\n // Render the table rows\n const renderTableRows = useCallback(() => {\n return table.getRowModel().rows.map((row) => (\n <React.Fragment key={row.original.id || row.id}>\n <TableRow data-state={row.getIsSelected() && 'selected'} className={cn(row.getIsExpanded() && 'border-b-0')}>\n {row.getVisibleCells().map((cell) => (\n <TableCell key={cell.id} className=\"first:pl-4 last:pr-4 py-4\" style={{ width: cell.column.getSize() }}>\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </TableCell>\n ))}\n </TableRow>\n <AnimatePresence initial={false}>\n {row.getIsExpanded() &&\n (() => {\n // Find the first column with expandedContent\n const expandedColumn = columns.find((col) => col.expandedContent);\n\n return expandedColumn?.expandedContent ? (\n <>\n <TableRow aria-hidden role=\"presentation\" className=\"border-none\">\n <TableCell colSpan={row.getVisibleCells().length} className=\"p-0 inset-0 h-[1px] w-full\">\n <div className=\"custom-dashed-border-b absolute inset-0 h-[1px]\" />\n </TableCell>\n </TableRow>\n <TableRow key={`${row.id}-expanded`}>\n <TableCell\n colSpan={row.getVisibleCells().length}\n className={cn('first:pl-4 last:pr-4 py-4 overflow-hidden', expandeRowClassName)}\n >\n <motion.div variants={accordionVariants} initial=\"initial\" animate=\"animate\" exit=\"exit\">\n {expandedColumn.expandedContent(row)}\n </motion.div>\n </TableCell>\n </TableRow>\n </>\n ) : null;\n })()}\n </AnimatePresence>\n </React.Fragment>\n ));\n }, [table, columns, expandeRowClassName]);\n\n const hasResults = table.getRowModel().rows?.length;\n\n return (\n <div className={cn('overflow-hidden rounded-md border border-border bg-card', className)} {...props}>\n <Table className=\"overflow-hidden\">\n <TableHeader>\n {table.getHeaderGroups().map((headerGroup) => (\n <TableRow key={headerGroup.id}>\n {headerGroup.headers.map((header) => (\n <TableHead\n key={header.id}\n className=\"space-x-4 first:pl-4 last:pr-4 py-4 text-current\"\n style={{ width: header.getSize() }}\n >\n {header.isPlaceholder ? null : flexRender(header.column.columnDef.header, header.getContext())}\n </TableHead>\n ))}\n </TableRow>\n ))}\n </TableHeader>\n <TableBody>\n {isLoading ? (\n renderSkeletonRows()\n ) : hasResults ? (\n renderTableRows()\n ) : (\n <TableRow>\n <TableCell colSpan={columns.length} className=\"h-24 text-center\">\n No results.\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n </Table>\n </div>\n );\n}\n"],"names":["React"],"mappings":"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"}
|
|
@@ -81,9 +81,11 @@ function DiscardForm({
|
|
|
81
81
|
setIsSelectOpenState(open);
|
|
82
82
|
if (selectOpenRef) selectOpenRef.current.isOpen = open;
|
|
83
83
|
};
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
84
|
+
useEffect(() => {
|
|
85
|
+
if (selectOpenRef) {
|
|
86
|
+
selectOpenRef.current.close = () => setIsSelectOpen(false);
|
|
87
|
+
}
|
|
88
|
+
}, [selectOpenRef]);
|
|
87
89
|
const {
|
|
88
90
|
control,
|
|
89
91
|
register,
|
|
@@ -308,17 +310,24 @@ function Message(props) {
|
|
|
308
310
|
})
|
|
309
311
|
},
|
|
310
312
|
/* @__PURE__ */ React__default.createElement("div", { className: "message-content-wrapper" }, /* @__PURE__ */ React__default.createElement(FormattedMessage, { message: { content } }), /* @__PURE__ */ React__default.createElement("div", { className: "flex gap-2 justify-end mt-2 items-center" }, /* @__PURE__ */ React__default.createElement(FeedbackDialog, { id, discarded, discardedMeta }), confidenceScore && /* @__PURE__ */ React__default.createElement(Tooltip, null, /* @__PURE__ */ React__default.createElement(TooltipTrigger, { asChild: true }, /* @__PURE__ */ React__default.createElement(DivButton, { variant: "outline", size: "sm", className: "text-xs p-1 h-auto" }, confidenceScore)), /* @__PURE__ */ React__default.createElement(TooltipContent, null, /* @__PURE__ */ React__default.createElement("p", null, "Answer score: ", confidenceScore))), /* @__PURE__ */ React__default.createElement("span", { className: "message-timestamp" }, formattedDate))),
|
|
311
|
-
!!relatedArticles?.length && /* @__PURE__ */ React__default.createElement(Accordion, { type: "single", collapsible: true, className: "p-0 custom-dashed-border-t-dark-300" }, /* @__PURE__ */ React__default.createElement(AccordionItem, { value: "related-articles" }, /* @__PURE__ */ React__default.createElement(AccordionTrigger, { className: "px-6" }, "Related articles"), /* @__PURE__ */ React__default.createElement(AccordionContent, null, /* @__PURE__ */ React__default.createElement("ul", { className: "message-article-list" }, relatedArticles.map((article) => /* @__PURE__ */ React__default.createElement(
|
|
312
|
-
"
|
|
313
|
+
!!relatedArticles?.length && /* @__PURE__ */ React__default.createElement(Accordion, { type: "single", collapsible: true, className: "p-0 custom-dashed-border-t-dark-300 w-full" }, /* @__PURE__ */ React__default.createElement(AccordionItem, { value: "related-articles" }, /* @__PURE__ */ React__default.createElement(AccordionTrigger, { className: "px-6" }, "Related articles"), /* @__PURE__ */ React__default.createElement(AccordionContent, null, /* @__PURE__ */ React__default.createElement("ul", { className: "message-article-list" }, relatedArticles.map((article) => /* @__PURE__ */ React__default.createElement(
|
|
314
|
+
"li",
|
|
313
315
|
{
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
rel: "noopener noreferrer",
|
|
317
|
-
className: "message-article-link group"
|
|
316
|
+
key: article.id,
|
|
317
|
+
className: "grid gap-2 grid-cols-[auto_1fr] items-center justify-items-start"
|
|
318
318
|
},
|
|
319
|
-
/* @__PURE__ */ React__default.createElement(
|
|
320
|
-
/* @__PURE__ */ React__default.createElement(
|
|
321
|
-
|
|
319
|
+
/* @__PURE__ */ React__default.createElement(Badge, { variant: "warning" }, Math.round(article.score * 100), "%"),
|
|
320
|
+
/* @__PURE__ */ React__default.createElement(
|
|
321
|
+
Button,
|
|
322
|
+
{
|
|
323
|
+
variant: "link",
|
|
324
|
+
size: "xs",
|
|
325
|
+
asChild: true,
|
|
326
|
+
className: "flex items-center gap-2 min-w-0 !justify-start w-full"
|
|
327
|
+
},
|
|
328
|
+
/* @__PURE__ */ React__default.createElement("a", { href: article.url, target: "_blank", rel: "noopener noreferrer" }, /* @__PURE__ */ React__default.createElement("span", { className: "truncate" }, article.title), /* @__PURE__ */ React__default.createElement(ArrowSquareOut, { className: "size-4 flex-shrink-0", weight: "regular" }))
|
|
329
|
+
)
|
|
330
|
+
))))))
|
|
322
331
|
)));
|
|
323
332
|
}
|
|
324
333
|
const feedback = isFeedback(props) ? props.feedback : null;
|
|
@@ -363,6 +372,9 @@ function AttributesDialog({ conversationId, ...args }) {
|
|
|
363
372
|
)), /* @__PURE__ */ React__default.createElement(SheetContent, { className: "space-y-4" }, /* @__PURE__ */ React__default.createElement(SheetHeader, null, /* @__PURE__ */ React__default.createElement(SheetTitle, { className: "heading-sm m-0" }, "Custom attributes"), /* @__PURE__ */ React__default.createElement(SheetDescription, { className: "sr-only" }, "Custom attributes are used to store additional information about the conversation.")), sortedAttributesKeys && /* @__PURE__ */ React__default.createElement(ScrollArea, { className: "h-[calc(100vh-8rem)]" }, " ", /* @__PURE__ */ React__default.createElement(Table, { className: "bg-surface", "data-test-id": "attributes-table" }, /* @__PURE__ */ React__default.createElement(TableHeader, null, /* @__PURE__ */ React__default.createElement(TableRow, null, sortedAttributesKeys.map((key) => /* @__PURE__ */ React__default.createElement(TableHead, { key, className: "capitalize font-bold" }, key)))), /* @__PURE__ */ React__default.createElement(TableBody, null, attributes.map((record) => /* @__PURE__ */ React__default.createElement(TableRow, { key: record?.id ?? createId(), className: "border-none" }, sortedAttributesKeys.map((key) => /* @__PURE__ */ React__default.createElement(TableCell, { key, "data-title": key }, record[key])))))))));
|
|
364
373
|
}
|
|
365
374
|
|
|
375
|
+
const EnrichedStatusBadge = ({ score, status, statusMessage }) => {
|
|
376
|
+
return score ? /* @__PURE__ */ React__default.createElement(Tooltip, null, /* @__PURE__ */ React__default.createElement(TooltipTrigger, null, /* @__PURE__ */ React__default.createElement(StatusBadge, { variant: status, suffix: score }, statusMessage)), /* @__PURE__ */ React__default.createElement(TooltipContent, null, /* @__PURE__ */ React__default.createElement("p", null, "Conversation score: ", score))) : /* @__PURE__ */ React__default.createElement(StatusBadge, { variant: status, suffix: score }, statusMessage);
|
|
377
|
+
};
|
|
366
378
|
function Convo({
|
|
367
379
|
locale: localeOverride,
|
|
368
380
|
value: queryId,
|
|
@@ -392,9 +404,6 @@ function Convo({
|
|
|
392
404
|
}
|
|
393
405
|
onClick?.();
|
|
394
406
|
};
|
|
395
|
-
const EnrichedStatusBadge = ({ score: score2 }) => {
|
|
396
|
-
return score2 ? /* @__PURE__ */ React__default.createElement(Tooltip, null, /* @__PURE__ */ React__default.createElement(TooltipTrigger, null, /* @__PURE__ */ React__default.createElement(StatusBadge, { variant: status, suffix: score2 }, statusMessage)), /* @__PURE__ */ React__default.createElement(TooltipContent, null, /* @__PURE__ */ React__default.createElement("p", null, "Conversation score: ", score2))) : /* @__PURE__ */ React__default.createElement(StatusBadge, { variant: status, suffix: score2 }, statusMessage);
|
|
397
|
-
};
|
|
398
407
|
return /* @__PURE__ */ React__default.createElement(
|
|
399
408
|
AccordionItem,
|
|
400
409
|
{
|
|
@@ -411,7 +420,7 @@ function Convo({
|
|
|
411
420
|
className: "flex-row-reverse px-4 gap-1 items-center [&[data-state=open]]:px-6",
|
|
412
421
|
onClick: handleAccordionClick
|
|
413
422
|
},
|
|
414
|
-
/* @__PURE__ */ React__default.createElement(Item, { size: "sm", className: "flex-1 p-0 justify-between" }, /* @__PURE__ */ React__default.createElement(ItemContent, { className: "max-w-[400px]" }, /* @__PURE__ */ React__default.createElement(ItemTitle, { className: "text-base text-default" }, question), /* @__PURE__ */ React__default.createElement(ItemDescription, { className: "text-xs text-default" }, description)), /* @__PURE__ */ React__default.createElement("div", { className: "flex items-center gap-0" }, hasAttributes && /* @__PURE__ */ React__default.createElement(AttributesDialog, { conversationId: queryId }), status && /* @__PURE__ */ React__default.createElement(EnrichedStatusBadge, { score })))
|
|
423
|
+
/* @__PURE__ */ React__default.createElement(Item, { size: "sm", className: "flex-1 p-0 justify-between" }, /* @__PURE__ */ React__default.createElement(ItemContent, { className: "max-w-[400px]" }, /* @__PURE__ */ React__default.createElement(ItemTitle, { className: "text-base text-default" }, question), /* @__PURE__ */ React__default.createElement(ItemDescription, { className: "text-xs text-default" }, description)), /* @__PURE__ */ React__default.createElement("div", { className: "flex items-center gap-0" }, hasAttributes && /* @__PURE__ */ React__default.createElement(AttributesDialog, { conversationId: queryId }), status && /* @__PURE__ */ React__default.createElement(EnrichedStatusBadge, { score, status, statusMessage })))
|
|
415
424
|
),
|
|
416
425
|
/* @__PURE__ */ React__default.createElement(AccordionContent, { className: "flex flex-col gap-4 text-balance px-5" }, isLoading ? /* @__PURE__ */ React__default.createElement("div", { className: "text-center text-subtle py-4" }, "Loading messages...") : /* @__PURE__ */ React__default.createElement("ul", { className: "list-none space-y-4" }, messages.slice(1).map((message) => /* @__PURE__ */ React__default.createElement(Message, { key: message.id, ...message }))))
|
|
417
426
|
);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convos.js","sources":["../../../src/components/convos/status-badge.tsx","../../../src/components/convos/answer-diagnostics.tsx","../../../src/components/convos/discard-form.tsx","../../../src/components/convos/feedback-dialog.tsx","../../../src/lib/formatDate.ts","../../../src/components/convos/message.tsx","../../../src/lib/sortAttributeKeys.ts","../../../src/components/convos/attributes-dialog.tsx","../../../src/components/convos/convo.tsx","../../../src/components/convos/convos.tsx"],"sourcesContent":["import React from 'react';\nimport { Circle } from '@phosphor-icons/react';\n\nimport { Badge } from '@/components/ui/badge';\nimport { cn } from '@/lib/utils';\n\ntype Props = React.ComponentPropsWithRef<typeof Badge> & {\n suffix?: React.ReactNode;\n};\n\nexport function StatusBadge({ className, suffix, children, ...props }: Props) {\n return (\n <div className={cn('flex items-center gap-1 rounded-md p-1', suffix && 'bg-dark-300', className)}>\n <Badge {...props}>\n <div className=\"flex items-center gap-1\">\n <Circle weight=\"fill\" size={8} className=\"size-2\" />\n {children}\n </div>\n </Badge>\n {suffix && <span className=\"text-xs text-default\">{suffix}</span>}\n </div>\n );\n}\n","import React, { useEffect, useState } from 'react';\nimport { ArrowSquareOut } from '@phosphor-icons/react';\n\nimport { Spinner } from '../ui/spinner';\nimport { useConvosContext } from './convos';\nimport { Button } from '../ui/button';\n\ntype ContextSufficiency = 'Sufficient' | 'Partially Sufficient' | 'Insufficient';\ntype AnswerGenerationType = 'Direct Extraction' | 'Summarization' | 'Inference' | 'Combination' | 'Cannot Answer';\ntype QueryContextRelevance = 'High' | 'Medium' | 'Low';\ninterface EvidenceFromContext {\n supporting_quote?: string;\n url?: string;\n}\nexport type AnswerDiagnostics = {\n confidence_score: string;\n answer_generation_type?: AnswerGenerationType;\n query_context_relevance?: QueryContextRelevance;\n context_sufficiency?: ContextSufficiency;\n confidence_justification?: string;\n evidence_from_context?: EvidenceFromContext[];\n};\n\ninterface AnswerDiagnosticsProps {\n messageId: string;\n}\n\nexport function AnswerDiagnosticsSection({ messageId }: AnswerDiagnosticsProps) {\n const { fetchAnswerDiagnostics } = useConvosContext();\n const [answerDiagnostics, setAnswerDiagnostics] = useState<AnswerDiagnostics | null>(null);\n const [isLoading, setIsLoading] = useState(true); // start loading when it mounts. It will start to fetch answer diagnostics on mount\n\n useEffect(() => {\n void fetchAnswerDiagnostics(messageId)\n .then((diagnostics) => setAnswerDiagnostics(diagnostics))\n .finally(() => setIsLoading(false));\n }, [fetchAnswerDiagnostics, messageId]);\n\n return (\n <div className=\"flex flex-col gap-4 px-4 flex-shrink-0 bg-surface\" data-name=\"discard-dialog-answer-diagnostic\">\n {isLoading ? (\n <div className=\"flex items-center justify-center h-full\">\n <Spinner />\n </div>\n ) : (\n <>\n {answerDiagnostics && (\n <>\n <dl className=\"grid grid-cols-[1fr_2fr] grid-rows-2 gap-5\">\n <div className=\"flex flex-col gap-1\">\n <dt className=\"heading-xs\">Confidence</dt>\n <dd className=\"text-sm\">{answerDiagnostics.confidence_score}</dd>\n </div>\n {answerDiagnostics.answer_generation_type && (\n <div className=\"flex flex-col gap-1\">\n <dt className=\"heading-xs\">Answer Type</dt>\n <dd className=\"text-sm\">{answerDiagnostics.answer_generation_type}</dd>\n </div>\n )}\n {answerDiagnostics.query_context_relevance && (\n <div className=\"flex flex-col gap-1\">\n <dt className=\"heading-xs\">Relevance</dt>\n <dd className=\"text-sm\">{answerDiagnostics.query_context_relevance}</dd>\n </div>\n )}\n {answerDiagnostics.context_sufficiency && (\n <div className=\"flex flex-col gap-1\">\n <dt className=\"heading-xs\">Context</dt>\n <dd className=\"text-sm\">{answerDiagnostics.context_sufficiency}</dd>\n </div>\n )}\n </dl>\n {answerDiagnostics.confidence_justification && (\n <div className=\"flex flex-col gap-2\" data-name=\"diagnostic-justification\">\n <span className=\"heading-xs\">Justification</span>\n <p className=\"text-sm my-0\">{answerDiagnostics.confidence_justification}</p>\n </div>\n )}\n {answerDiagnostics.evidence_from_context && answerDiagnostics.evidence_from_context.length > 0 && (\n <div className=\"flex flex-col gap-2\" data-name=\"diagnostic-evidence\">\n <span className=\"heading-xs\">Evidence (from Knowledge Base)</span>\n {answerDiagnostics.evidence_from_context.map((evidence, index) => (\n <div key={index} className=\"flex flex-col gap-1\">\n {evidence.supporting_quote && <p className=\"text-sm my-0\">{evidence.supporting_quote}</p>}\n {evidence.url && (\n <Button variant=\"link\" size=\"sm\" className=\"flex gap-1 text-sm self-end items-center\" asChild>\n <a href={evidence.url} target=\"_blank\" rel=\"noopener noreferrer\">\n <span>Source</span>\n <ArrowSquareOut size={16} />\n </a>\n </Button>\n )}\n </div>\n ))}\n </div>\n )}\n </>\n )}\n </>\n )}\n </div>\n );\n}\n","import React, { useEffect, useRef, useState } from 'react';\nimport { useForm, Controller } from 'react-hook-form';\nimport { ThumbsDown, ThumbsUp } from '@phosphor-icons/react';\n\nimport { Button } from '../ui/button';\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '../ui/select';\nimport { Label } from '../ui/label';\nimport { Textarea } from '../ui/textarea';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '../ui/tooltip';\nimport { Love } from '../love';\n\nimport { cn } from '@/lib/utils';\n\nexport enum DiscardReason {\n INCORRECT_ANSWER = 'incorrect_answer',\n HALLUCINATED_ANSWER = 'hallucinated_answer',\n OVERSHARING = 'oversharing',\n WRONG_ARTICLE_SURFACED = 'wrong_article_surfaced',\n OTHER = 'other',\n}\n\nexport const DiscardReasonLabels: Record<DiscardReason, string> = {\n [DiscardReason.INCORRECT_ANSWER]: 'Incorrect answer',\n [DiscardReason.HALLUCINATED_ANSWER]: 'Hallucinated answer',\n [DiscardReason.OVERSHARING]: 'Oversharing',\n [DiscardReason.WRONG_ARTICLE_SURFACED]: 'Wrong article surfaced',\n [DiscardReason.OTHER]: 'Other',\n};\n\nexport interface DiscardFormData {\n reason: DiscardReason;\n preferredAnswer?: string;\n}\n\nexport interface DiscardedMeta {\n reason: DiscardReason;\n suggestedAnswer?: string;\n}\n\nexport interface SelectOpenHandle {\n isOpen: boolean;\n close: () => void;\n}\n\ninterface DiscardFormProps {\n discarded?: boolean;\n discardedMeta?: DiscardedMeta;\n onSubmit: (data: DiscardFormData) => Promise<void>;\n onApprove: () => void;\n selectOpenRef?: React.MutableRefObject<SelectOpenHandle>;\n className?: string;\n}\n\nexport function DiscardForm({\n discarded,\n discardedMeta,\n onSubmit,\n onApprove,\n selectOpenRef,\n className,\n}: DiscardFormProps): React.ReactNode {\n const [isExpanded, setIsExpanded] = useState(discarded ?? false);\n const [isSelectOpen, setIsSelectOpenState] = useState(false);\n const formRef = useRef<HTMLFormElement>(null);\n const [showLove, setShowLove] = useState(false);\n\n const setIsSelectOpen = (open: boolean) => {\n setIsSelectOpenState(open);\n if (selectOpenRef) selectOpenRef.current.isOpen = open;\n };\n\n // Expose close method to parent via ref\n if (selectOpenRef) {\n selectOpenRef.current.close = () => setIsSelectOpen(false);\n }\n const {\n control,\n register,\n handleSubmit,\n reset,\n formState: { isSubmitting },\n } = useForm<DiscardFormData>({\n defaultValues: {\n reason: discardedMeta?.reason,\n preferredAnswer: discardedMeta?.suggestedAnswer || '',\n },\n });\n\n useEffect(() => {\n reset({\n reason: discardedMeta?.reason,\n preferredAnswer: discardedMeta?.suggestedAnswer || '',\n });\n }, [discardedMeta, reset]);\n\n useEffect(() => {\n if (formRef.current) {\n formRef.current.inert = !isExpanded;\n }\n }, [isExpanded]);\n\n const handleCancel = () => {\n setIsExpanded(false);\n setIsSelectOpen(false);\n reset();\n };\n\n const handleApprove = () => {\n setShowLove(true);\n setTimeout(() => setShowLove(false), 2000);\n onApprove();\n };\n\n const isResolved = discarded !== undefined && discarded !== null;\n\n return (\n <div className={cn('space-y-4', className)}>\n {/* Buttons */}\n <div className=\"flex gap-2 px-4\">\n <Love doAnimation={showLove}>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"shadow\"\n className={cn(\n 'size-8 text-default !opacity-100',\n { 'bg-surface': !isResolved },\n { 'bg-dark-300': discarded === true },\n { 'bg-green-600 text-dark-100': discarded === false },\n )}\n size=\"icon\"\n disabled={isResolved}\n onClick={handleApprove}\n >\n <ThumbsUp />\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <span>Approve the answer</span>\n </TooltipContent>\n </Tooltip>\n </Love>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"shadow\"\n className={cn(\n 'size-8 text-default !opacity-100',\n { 'bg-surface': !isResolved },\n { 'bg-dark-300': discarded === false },\n { 'bg-red-600 text-dark-100': discarded === true },\n )}\n size=\"icon\"\n disabled={isResolved}\n onClick={() => setIsExpanded(!isExpanded)}\n >\n <ThumbsDown />\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <span>Discard the answer</span>\n </TooltipContent>\n </Tooltip>\n </div>\n\n {/* Form */}\n <div\n className={cn(\n 'grid transition-[grid-template-rows] duration-300 ease-in-out',\n isExpanded ? 'grid-rows-[1fr]' : 'grid-rows-[0fr]',\n )}\n >\n {discarded ? (\n <div\n className={cn('overflow-hidden min-h-0 px-4 bg-dark-200 space-y-4', isExpanded ? 'py-4 mb-4' : 'py-0')}\n data-name=\"discard-dialog-reason\"\n >\n <div className=\"space-y-1\">\n <Label htmlFor=\"reason\" className=\"text-sm\">\n Reason\n </Label>\n <span className=\"text-sm block\">\n {discardedMeta?.reason && DiscardReasonLabels[discardedMeta.reason]}\n </span>\n </div>\n <div className=\"space-y-1\">\n <Label htmlFor=\"preferredAnswer\" className=\"text-sm\">\n Preferred answer\n </Label>\n <span className=\"text-sm block\">{discardedMeta?.suggestedAnswer}</span>\n </div>\n </div>\n ) : (\n <form\n ref={formRef}\n onSubmit={handleSubmit(onSubmit)}\n className={cn(\n 'overflow-hidden min-h-0 px-4 bg-dark-200 transition-all duration-300 ease-in-out',\n isExpanded ? 'py-4 mb-4' : 'py-0',\n )}\n >\n <fieldset className=\"space-y-4\" data-name=\"discard-dialog-reason\">\n <div className=\"space-y-1\">\n <Label htmlFor=\"reason\" className=\"heading-xs\">\n Reason\n </Label>\n <Controller\n control={control}\n name=\"reason\"\n rules={{ required: true }}\n render={({ field }) => (\n <Select\n value={field.value}\n onValueChange={field.onChange}\n open={isSelectOpen}\n onOpenChange={setIsSelectOpen}\n required\n >\n <SelectTrigger className=\"border-dark-300 bg-surface\">\n <SelectValue placeholder=\"Select a reason\" />\n </SelectTrigger>\n <SelectContent>\n {Object.values(DiscardReason).map((reason) => (\n <SelectItem key={reason} value={reason}>\n {DiscardReasonLabels[reason]}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n )}\n />\n <span className=\"text-xs text-subtle ml-1 hidden\">\n Give your ambient agent a descriptive name that reflects its purpose. This agent will learn from your\n content to provide personalized assistance.\n </span>\n </div>\n <div className=\"space-y-1\">\n <Label htmlFor=\"preferredAnswer\" className=\"heading-xs\">\n Preferred answer\n </Label>\n <Textarea\n id=\"preferredAnswer\"\n required\n minLength={10}\n placeholder=\"Explain what you'd like Brainfish to do next time in this case....\"\n rows={4}\n className=\"h-52 resize-none bg-surface\"\n {...register('preferredAnswer')}\n />\n <span className=\"text-xs text-subtle ml-1 hidden\">\n Tell Brainfish why this is the incorrect answer.\n </span>\n </div>\n <div className=\"flex gap-2 !mb-1 justify-end mr-1\">\n <Button variant=\"link\" size=\"sm\" type=\"button\" onClick={handleCancel}>\n Cancel\n </Button>\n <Button type=\"submit\" variant=\"shadow\" size=\"sm\" disabled={isSubmitting}>\n {isSubmitting ? 'Submitting...' : 'Submit'}\n </Button>\n </div>\n </fieldset>\n </form>\n )}\n </div>\n </div>\n );\n}\n","import React, { useRef, useState } from 'react';\nimport { DialogProps } from '@radix-ui/react-dialog';\nimport { Info } from '@phosphor-icons/react';\n\nimport { AnswerDiagnosticsSection } from './answer-diagnostics';\nimport { useConvosContext } from './convos';\nimport { DiscardForm, DiscardFormData, DiscardReason, SelectOpenHandle } from './discard-form';\nimport { DivButton } from '../ui/div-button';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '../ui/tooltip';\nimport { ScrollArea } from '../ui/scroll-area';\n\nimport { Sheet, SheetContent, SheetDescription, SheetHeader, SheetTitle, SheetTrigger } from '@/components/ui/sheet';\n\nexport { DiscardReason } from './discard-form';\n\ninterface FeedbackDialogProps extends DialogProps {\n id: string;\n discarded?: boolean;\n discardedMeta?: { reason: DiscardReason; suggestedAnswer?: string };\n className?: string;\n}\n\nexport function FeedbackDialog({\n id,\n discarded,\n discardedMeta,\n open: externalOpen,\n onOpenChange: externalOnOpenChange,\n ...args\n}: FeedbackDialogProps): React.ReactNode {\n const { onDiscard, onApprove } = useConvosContext();\n const [internalOpen, setInternalOpen] = useState(false);\n const selectOpenRef = useRef<SelectOpenHandle>({ isOpen: false, close: () => {} });\n\n // Use external state if provided, otherwise use internal state\n const isOpen = externalOpen ?? internalOpen;\n const setIsOpen = externalOnOpenChange ?? setInternalOpen;\n\n const onSubmitForm = async (data: DiscardFormData) => {\n await onDiscard(id, data.reason, data.preferredAnswer).then(() => setIsOpen(false));\n };\n\n const handleApprove = () => onApprove(id);\n\n return (\n <Sheet modal={false} open={isOpen} onOpenChange={setIsOpen} {...args}>\n <Tooltip>\n <TooltipTrigger asChild>\n <SheetTrigger asChild onClick={(e) => e.stopPropagation()} onKeyUp={(e) => e.stopPropagation()}>\n <DivButton variant=\"ghost\" className=\"size-7 [&_svg]:size-6 text-dark-600\" size=\"icon\">\n <Info />\n </DivButton>\n </SheetTrigger>\n </TooltipTrigger>\n <TooltipContent>\n <p>Answer information</p>\n </TooltipContent>\n </Tooltip>\n <SheetContent\n className=\"space-y-4 px-0\"\n onEscapeKeyDown={(e) => {\n if (selectOpenRef.current.isOpen) {\n e.preventDefault();\n selectOpenRef.current.close();\n }\n }}\n onInteractOutside={(e) => {\n if (selectOpenRef.current.isOpen) {\n e.preventDefault();\n }\n }}\n >\n <SheetHeader className=\"px-4\">\n <SheetTitle className=\"heading-sm m-0\">Answer information</SheetTitle>\n <SheetDescription className=\"sr-only\">\n Shows answer diagnostics and allows you to provide feedback.\n </SheetDescription>\n </SheetHeader>\n\n <ScrollArea className=\"h-[calc(100vh-4rem)] pb-4\">\n <DiscardForm\n discarded={discarded}\n discardedMeta={discardedMeta}\n onSubmit={onSubmitForm}\n onApprove={handleApprove}\n selectOpenRef={selectOpenRef}\n />\n <AnswerDiagnosticsSection messageId={id} />\n </ScrollArea>\n </SheetContent>\n </Sheet>\n );\n}\n","export function formatDate(date: Date, locale?: string) {\n const defaultLocale = 'en-US';\n if (!locale) {\n if (typeof navigator !== 'undefined') {\n locale = navigator.language;\n } else {\n locale = defaultLocale;\n }\n }\n\n return date.toLocaleDateString(locale, {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n hour: 'numeric',\n minute: '2-digit',\n hour12: true,\n });\n}\n","import React from 'react';\nimport { ArrowSquareOut, UserCircle } from '@phosphor-icons/react';\n\nimport { StatusBadge } from './status-badge';\nimport { FormattedMessage } from '../markdown';\nimport { useConvosContext } from './convos';\nimport { FeedbackDialog, DiscardReason } from './feedback-dialog';\nimport { DivButton } from '../ui/div-button';\n\nimport { GeneratingStar } from '@/components/generating-star';\nimport { Item, ItemHeader, ItemContent, ItemTitle } from '@/components/ui/item';\nimport { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from '@/components/ui/accordion';\nimport { cn } from '@/lib/utils';\nimport { Badge } from '@/components/ui/badge';\nimport { formatDate } from '@/lib/formatDate';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';\n\nimport './message.css';\n\nexport interface RelatedArticle {\n id: string;\n title: string;\n url: string;\n score: number;\n}\n\nexport enum MessageType {\n ACTION = 'action', // user action like 'Next Best Action clicks'\n FEEDBACK = 'feedback', // feedback for up/down vote\n QUESTION = 'question', // user question\n ANSWER = 'answer', // ai generated answer\n}\n\nexport enum Feedback {\n Positive = 'positive',\n Negative = 'negative',\n}\n\n// Shared base fields\ninterface BaseMessage {\n id: string;\n timestamp: Date;\n locale?: string; // only if not using en-US. For formatting dates (overrides context locale)\n}\n\n// AI Answer - has related articles, discard info, confidence\nexport interface AIAnswerMessage extends BaseMessage {\n type: MessageType.ANSWER;\n role: 'ai';\n content: string;\n relatedArticles?: RelatedArticle[];\n discarded?: boolean;\n discardedMeta?: {\n reason: DiscardReason;\n suggestedAnswer?: string;\n };\n confidenceScore?: number;\n}\n\n// User Question\nexport interface UserQuestionMessage extends BaseMessage {\n type: MessageType.QUESTION;\n role: 'user';\n content: string;\n}\n\n// User Feedback - requires feedback field\nexport interface UserFeedbackMessage extends BaseMessage {\n type: MessageType.FEEDBACK;\n role: 'user';\n content: string; // optional comment text\n feedback: Feedback;\n}\n\n// User Action\nexport interface UserActionMessage extends BaseMessage {\n type: MessageType.ACTION;\n role: 'user';\n content: string;\n}\n\n// Union type\nexport type MessageProps = AIAnswerMessage | UserQuestionMessage | UserFeedbackMessage | UserActionMessage;\n\n// Type guards for external use\nexport const isAIAnswer = (msg: MessageProps): msg is AIAnswerMessage => msg.type === MessageType.ANSWER;\n\nexport const isUserQuestion = (msg: MessageProps): msg is UserQuestionMessage => msg.type === MessageType.QUESTION;\n\nexport const isFeedback = (msg: MessageProps): msg is UserFeedbackMessage => msg.type === MessageType.FEEDBACK;\n\nexport const isAction = (msg: MessageProps): msg is UserActionMessage => msg.type === MessageType.ACTION;\n\nfunction Message(props: MessageProps) {\n const { id, content, timestamp, locale: localeOverride } = props;\n\n // Get locale from context, with override if provided\n const { locale: contextLocale } = useConvosContext();\n const locale = localeOverride || contextLocale;\n\n const formattedDate = formatDate(timestamp, locale);\n\n if (isAIAnswer(props)) {\n const { relatedArticles, discarded, discardedMeta, confidenceScore } = props;\n\n return (\n <li className=\"relative before-line after-line list-none\">\n <Item className=\"message-item\">\n <ItemHeader className=\"justify-start gap-0\">\n <GeneratingStar variant=\"gradient\" className=\"relative -left-[6px]\" />\n <ItemTitle className=\"text-xs font-bold\">{`Generated answer ${discarded ? '(Discarded)' : ''}`}</ItemTitle>\n </ItemHeader>\n <ItemContent\n className={cn('message-ai-content', {\n 'py-6': !relatedArticles?.length,\n 'pt-6 pb-0': relatedArticles?.length,\n })}\n >\n <div className=\"message-content-wrapper\">\n <FormattedMessage message={{ content }} />\n <div className=\"flex gap-2 justify-end mt-2 items-center\">\n <FeedbackDialog id={id} discarded={discarded} discardedMeta={discardedMeta} />\n {confidenceScore && (\n <Tooltip>\n <TooltipTrigger asChild>\n <DivButton variant=\"outline\" size=\"sm\" className=\"text-xs p-1 h-auto\">\n {confidenceScore}\n </DivButton>\n </TooltipTrigger>\n <TooltipContent>\n <p>Answer score: {confidenceScore}</p>\n </TooltipContent>\n </Tooltip>\n )}\n <span className=\"message-timestamp\">{formattedDate}</span>\n </div>\n </div>\n {!!relatedArticles?.length && (\n <Accordion type=\"single\" collapsible className=\"p-0 custom-dashed-border-t-dark-300\">\n <AccordionItem value=\"related-articles\">\n <AccordionTrigger className=\"px-6\">Related articles</AccordionTrigger>\n <AccordionContent>\n <ul className=\"message-article-list\">\n {relatedArticles.map((article) => (\n <li key={article.id} className=\"message-meta\">\n <Badge variant=\"warning\">{Math.round(article.score * 100)}%</Badge>\n <a\n href={article.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"message-article-link group\"\n >\n <span className=\"message-article-title group-hover:underline group-focus-visible:underline\">\n {article.title}\n </span>\n <ArrowSquareOut className=\"size-4 flex-shrink-0\" weight=\"regular\" />\n </a>\n </li>\n ))}\n </ul>\n </AccordionContent>\n </AccordionItem>\n </Accordion>\n )}\n </ItemContent>\n </Item>\n </li>\n );\n }\n\n // User messages (Question, Feedback, Action)\n const feedback = isFeedback(props) ? props.feedback : null;\n\n return (\n <li className=\"relative list-none before-line--user after-line--user\">\n <Item className=\"message-item\">\n <ItemHeader className=\"basis-0\">\n <UserCircle weight=\"fill\" size={24} />\n </ItemHeader>\n <ItemContent className=\"message-user-content\">\n {isUserQuestion(props) && (\n <div className=\"message-header\">\n <FormattedMessage message={{ content }} />\n <span className=\"message-timestamp\">{formattedDate}</span>\n </div>\n )}\n {isFeedback(props) && feedback && (\n <>\n <div className=\"message-header\">\n <div className=\"message-feedback-text\">\n {feedback === Feedback.Positive ? 'Upvoted as helpful' : 'Downvoted as not helpful'}\n </div>\n <div className=\"message-meta\">\n <span className=\"message-timestamp-simple\">{formattedDate}</span>\n <StatusBadge variant={feedback === Feedback.Positive ? 'success' : 'destructive'}>\n {feedback === Feedback.Positive ? 'Answered' : 'Unable to help'}\n </StatusBadge>\n </div>\n </div>\n {content && <div className=\"text-base\">{content}</div>}\n </>\n )}\n {isAction(props) && (\n <div className=\"message-header\">\n <span className=\"text-subtle text-sm italic\">{content}</span>\n <div className=\"message-meta\">\n <span className=\"message-timestamp-simple\">{formattedDate}</span>\n <StatusBadge variant=\"warning\">Action</StatusBadge>\n </div>\n </div>\n )}\n </ItemContent>\n </Item>\n </li>\n );\n}\n\nexport { Message };\n","// sort the attributes by key so the important ones are at the top\n// namely id, name, email, phone, followed by the rest as is\n// return the sorted keys\nexport function sortAttributeKeys(attributes: Record<string, any>[]): string[] {\n const PRIORITY_KEYS = ['id', 'name', 'email', 'phone'];\n\n if (attributes.length === 0) {\n return [];\n }\n\n const priority = (key: string) => {\n const idx = PRIORITY_KEYS.indexOf(key);\n\n // non-important keys should be at the end, so we return Infinity\n return idx === -1 ? Infinity : idx;\n };\n\n return Object.keys(attributes[0]).sort((a, b) => priority(a) - priority(b));\n}\n","import React, { useState, useEffect } from 'react';\nimport { UserFocus } from '@phosphor-icons/react';\nimport { DialogProps } from '@radix-ui/react-dialog';\nimport { createId } from '@paralleldrive/cuid2';\n\nimport { useConvosContext } from './convos';\nimport { Table, TableBody, TableCell, TableRow, TableHeader, TableHead } from '../ui/table';\nimport { ScrollArea } from '../ui/scroll-area';\n\nimport { Sheet, SheetContent, SheetDescription, SheetHeader, SheetTitle, SheetTrigger } from '@/components/ui/sheet';\nimport { DivButton } from '@/components/ui/div-button';\nimport { sortAttributeKeys } from '@/lib/sortAttributeKeys';\n\nimport './attributes-dialog.css';\n\ninterface Props extends DialogProps {\n conversationId: string;\n}\n\nexport function AttributesDialog({ conversationId, ...args }: Props) {\n const [attributes, setAttributes] = useState<Record<string, any>[]>();\n const [sortedAttributesKeys, setSortedAttributesKeys] = useState<string[]>();\n\n const { fetchAttributes } = useConvosContext();\n\n useEffect(() => {\n void fetchAttributes(conversationId)\n .then((attrs) => {\n setAttributes(attrs);\n setSortedAttributesKeys(sortAttributeKeys(attrs));\n })\n .catch(() => {\n // Error handling - could be extended with error reporting\n });\n }, [fetchAttributes, conversationId]);\n\n if (!attributes?.length) {\n return null;\n }\n\n return (\n <Sheet modal={false} {...args}>\n <SheetTrigger asChild onClick={(e) => e.stopPropagation()} onKeyUp={(e) => e.stopPropagation()}>\n <DivButton\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-7 [&_svg]:size-6 text-subtlest\"\n aria-label=\"Open Custom attributes dialog\"\n >\n <UserFocus size={24} />\n </DivButton>\n </SheetTrigger>\n <SheetContent className=\"space-y-4\">\n <SheetHeader>\n <SheetTitle className=\"heading-sm m-0\">Custom attributes</SheetTitle>\n <SheetDescription className=\"sr-only\">\n Custom attributes are used to store additional information about the conversation.\n </SheetDescription>\n </SheetHeader>\n {sortedAttributesKeys && (\n <ScrollArea className=\"h-[calc(100vh-8rem)]\">\n {' '}\n {/* 8rem is an approximation, accounting for header, padding, and close button */}\n <Table className=\"bg-surface\" data-test-id=\"attributes-table\">\n <TableHeader>\n <TableRow>\n {sortedAttributesKeys.map((key) => (\n <TableHead key={key} className=\"capitalize font-bold\">\n {key}\n </TableHead>\n ))}\n </TableRow>\n </TableHeader>\n <TableBody>\n {attributes.map((record) => (\n <TableRow key={record?.id ?? createId()} className=\"border-none\">\n {sortedAttributesKeys.map((key) => (\n <TableCell key={key} data-title={key}>\n {record[key]}\n </TableCell>\n ))}\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </ScrollArea>\n )}\n </SheetContent>\n </Sheet>\n );\n}\n","import React from 'react';\n\nimport { StatusBadge } from './status-badge';\nimport { Message } from './message';\nimport { useConvosContext } from './convos';\nimport { AttributesDialog } from './attributes-dialog';\n\nimport { AccordionContent, AccordionItem, AccordionTrigger } from '@/components/ui/accordion';\nimport { Item, ItemContent, ItemDescription, ItemTitle } from '@/components/ui/item';\nimport { cn } from '@/lib/utils';\nimport { formatDate } from '@/lib/formatDate';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/index';\n\ninterface Props {\n locale?: string; // only if not using en-US. For formatting dates (overrides context locale)\n question: string; // the initial query\n timestamp: Date; // created_at date of the conversation thread\n location?: string; // location of the user\n source?: string; // source of the conversation\n status?: React.ComponentProps<typeof StatusBadge>['variant'];\n statusMessage?: string; // status of the conversation - Answered | Article not found | Partial | Unanswered, etc\n hasAttributes?: boolean; // whether the conversation has attributes\n onClick?: () => void; // handler to fetch messages when accordion is clicked\n score?: number; // score of the conversation\n}\n\nexport type ConvoProps = React.ComponentPropsWithRef<typeof AccordionItem> & Props;\n\n/**\n * Convo component - A single conversation item in an accordion.\n * Displays conversation metadata and messages, with support for lazy loading.\n *\n * This is a presentational component - it receives messages and loading state as props\n * rather than managing fetching logic itself.\n */\nexport function Convo({\n locale: localeOverride,\n value: queryId,\n question,\n timestamp,\n location,\n source,\n status,\n statusMessage,\n hasAttributes,\n onClick,\n className,\n score,\n ...props\n}: ConvoProps) {\n const { getMessages, isLoading: isLoadingFromContext, locale: contextLocale } = useConvosContext();\n\n // Use locale override if provided, otherwise use context locale\n const locale = localeOverride || contextLocale;\n\n // Get messages and loading state from context\n const messages = getMessages(queryId);\n const isLoading = isLoadingFromContext(queryId);\n\n // Format date\n const formattedDate = formatDate(timestamp, locale);\n\n // Create description string: \"Nov 1, 2025, 11:00 AM • United States • Live Widget\"\n // Filters out undefined/null values and joins with bullet separator\n const description = [formattedDate, location, source].filter(Boolean).join(' • ');\n\n const handleAccordionClick = (e: React.MouseEvent) => {\n // Prevent accordion from toggling if click originated from within a dialog\n if ((e.target as HTMLElement).closest('[role=\"dialog\"]')) {\n e.preventDefault();\n e.stopPropagation();\n\n return;\n }\n onClick?.();\n };\n\n const EnrichedStatusBadge = ({ score }: { score?: number }) => {\n return score ? (\n <Tooltip>\n <TooltipTrigger>\n <StatusBadge variant={status} suffix={score}>\n {statusMessage}\n </StatusBadge>\n </TooltipTrigger>\n <TooltipContent>\n <p>Conversation score: {score}</p>\n </TooltipContent>\n </Tooltip>\n ) : (\n <StatusBadge variant={status} suffix={score}>\n {statusMessage}\n </StatusBadge>\n );\n };\n\n return (\n <AccordionItem\n value={queryId}\n className={cn(\n 'border-none rounded-lg bg-dark-100 [&[data-state=\"open\"]]:bg-surface hover:bg-surface [&[data-state=open]]:shadow-md [&[data-state=open]]:shadow-dark-300',\n className,\n )}\n {...props}\n >\n <AccordionTrigger\n className=\"flex-row-reverse px-4 gap-1 items-center [&[data-state=open]]:px-6\"\n onClick={handleAccordionClick}\n >\n <Item size=\"sm\" className=\"flex-1 p-0 justify-between\">\n <ItemContent className=\"max-w-[400px]\">\n <ItemTitle className=\"text-base text-default\">{question}</ItemTitle>\n <ItemDescription className=\"text-xs text-default\">{description}</ItemDescription>\n </ItemContent>\n <div className=\"flex items-center gap-0\">\n {hasAttributes && <AttributesDialog conversationId={queryId} />}\n {/* Add tooltip to say \"Conversation score\", only when there is a score */}\n {status && <EnrichedStatusBadge score={score} />}\n </div>\n </Item>\n </AccordionTrigger>\n <AccordionContent className=\"flex flex-col gap-4 text-balance px-5\">\n {isLoading ? (\n <div className=\"text-center text-subtle py-4\">Loading messages...</div>\n ) : (\n <ul className=\"list-none space-y-4\">\n {messages.slice(1).map((message) => (\n <Message key={message.id} {...message} />\n ))}\n </ul>\n )}\n </AccordionContent>\n </AccordionItem>\n );\n}\n","import React from 'react';\n\nimport { Convo, ConvoProps } from './convo';\nimport { MessageProps } from './message';\nimport { AnswerDiagnostics } from './answer-diagnostics';\nimport { DiscardReason } from './discard-form';\n\nimport { Accordion } from '@/components/ui/accordion';\n\n// Context types and implementation\ninterface ConvosContextValue {\n // Fetch functions\n fetchMessages: (conversationId: string) => Promise<MessageProps[]>;\n fetchAttributes: (conversationId: string) => Promise<Record<string, any>[]>;\n\n // Messages and loading state\n getMessages: (conversationId: string) => MessageProps[];\n isLoading: (conversationId: string) => boolean;\n handleFetchMessages: (conversationId: string) => void;\n\n // Locale for date formatting\n locale?: string;\n\n // Discard dialog functions\n fetchAnswerDiagnostics: (messageId: string) => Promise<AnswerDiagnostics>;\n onDiscard: (id: string, reason: DiscardReason, suggestedAnswer?: string) => Promise<void>;\n onApprove: (id: string) => Promise<void>;\n}\n\nconst ConvosContext = React.createContext<ConvosContextValue | undefined>(undefined);\n\nexport function useConvosContext() {\n const context = React.useContext(ConvosContext);\n if (context === undefined) {\n throw new Error('useConvosContext must be used within a ConvosProvider');\n }\n\n return context;\n}\n\ninterface ConvosProviderProps {\n children: React.ReactNode;\n value: ConvosContextValue;\n}\n\nexport function ConvosProvider({ children, value }: ConvosProviderProps) {\n return <ConvosContext.Provider value={value}>{children}</ConvosContext.Provider>;\n}\n\ninterface ConvosProps {\n convos: ConvoProps[];\n fetchMessages: (conversationId: string) => Promise<MessageProps[]>; // required fetch function for lazy loading\n fetchAttributes: (conversationId: string) => Promise<Record<string, any>[]>; // required fetch function for lazy loading\n fetchAnswerDiagnostics: (messageId: string) => Promise<AnswerDiagnostics>;\n onDiscard: (id: string, reason: DiscardReason, suggestedAnswer?: string) => Promise<void>;\n onApprove: (id: string) => Promise<void>;\n}\n\n/**\n * Convos component - Displays a list of conversations in an accordion.\n * Messages are always lazy loaded when accordion items are opened.\n *\n * @param convos - Array of conversation data\n * @param fetchMessages - Async function to fetch messages for a conversation\n */\nexport function Convos({\n convos,\n fetchMessages,\n fetchAttributes,\n fetchAnswerDiagnostics,\n onDiscard,\n onApprove,\n}: ConvosProps) {\n // Maps conversation IDs to their fetched messages\n const [messagesMap, setMessagesMap] = React.useState<Record<string, MessageProps[]>>({});\n\n // Tracks which conversations are currently loading messages\n const [loadingMap, setLoadingMap] = React.useState<Record<string, boolean>>({});\n\n // Refs used to check fetch status without causing re-renders\n // These are updated synchronously and don't trigger React re-renders\n const fetchedSetRef = React.useRef<Set<string>>(new Set());\n const loadingMapRef = React.useRef<Record<string, boolean>>({});\n\n /**\n * Handles fetching messages when an accordion item is clicked.\n * Prevents duplicate fetches by checking refs before making the request.\n * Updates both refs (for synchronous checks) and state (for UI updates).\n */\n const handleFetchMessages = React.useCallback(\n (conversationId: string) => {\n // Skip if already fetched or currently loading\n if (fetchedSetRef.current.has(conversationId) || loadingMapRef.current[conversationId]) {\n return;\n }\n\n // Set loading state in both ref (for quick checks) and state (for UI)\n loadingMapRef.current[conversationId] = true;\n setLoadingMap((prev) => ({ ...prev, [conversationId]: true }));\n\n fetchMessages(conversationId)\n .then((fetchedMessages) => {\n // Store fetched messages and mark as fetched\n setMessagesMap((prev) => ({ ...prev, [conversationId]: fetchedMessages }));\n fetchedSetRef.current.add(conversationId);\n })\n .catch(() => {\n // Error handling - could be extended with error reporting\n })\n .finally(() => {\n // Clear loading state from both ref and state\n delete loadingMapRef.current[conversationId];\n setLoadingMap((prev) => {\n const newMap = { ...prev };\n delete newMap[conversationId];\n\n return newMap;\n });\n });\n },\n [fetchMessages],\n );\n\n // Create context value - use the first convo's locale as default, or allow override\n const defaultLocale = convos[0]?.locale;\n\n const contextValue = React.useMemo(\n () => ({\n fetchMessages,\n fetchAttributes,\n getMessages: (conversationId: string) => messagesMap[conversationId] || [],\n isLoading: (conversationId: string) => loadingMap[conversationId] || false,\n handleFetchMessages,\n locale: defaultLocale,\n fetchAnswerDiagnostics: (messageId: string) => fetchAnswerDiagnostics(messageId),\n onDiscard,\n onApprove,\n }),\n [\n fetchMessages,\n fetchAttributes,\n messagesMap,\n loadingMap,\n handleFetchMessages,\n defaultLocale,\n fetchAnswerDiagnostics,\n onDiscard,\n onApprove,\n ],\n );\n\n return (\n <ConvosProvider value={contextValue}>\n <Accordion type=\"single\" collapsible className=\"w-full space-y-2\">\n {convos.map((convo) => (\n <Convo\n {...convo}\n key={convo.value}\n // Trigger fetch when accordion trigger is clicked\n onClick={() => handleFetchMessages(convo.value)}\n />\n ))}\n </Accordion>\n </ConvosProvider>\n );\n}\n"],"names":["React","DiscardReason","MessageType","Feedback","score"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAUO,SAAS,YAAY,EAAE,SAAA,EAAW,QAAQ,QAAA,EAAU,GAAG,OAAM,EAAU;AAC5E,EAAA,uBACEA,cAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,0CAA0C,MAAA,IAAU,aAAA,EAAe,SAAS,CAAA,EAAA,+CAC5F,KAAA,EAAA,EAAO,GAAG,KAAA,EAAA,kBACTA,cAAA,CAAA,aAAA,CAAC,SAAI,SAAA,EAAU,yBAAA,EAAA,kBACbA,cAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAO,QAAO,MAAA,EAAO,IAAA,EAAM,CAAA,EAAG,SAAA,EAAU,UAAS,CAAA,EACjD,QACH,CACF,CAAA,EACC,0BAAUA,cAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,sBAAA,EAAA,EAAwB,MAAO,CAC5D,CAAA;AAEJ;;ACKO,SAAS,wBAAA,CAAyB,EAAE,SAAA,EAAU,EAA2B;AAC9E,EAAA,MAAM,EAAE,sBAAA,EAAuB,GAAI,gBAAA,EAAiB;AACpD,EAAA,MAAM,CAAC,iBAAA,EAAmB,oBAAoB,CAAA,GAAI,SAAmC,IAAI,CAAA;AACzF,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAAS,IAAI,CAAA;AAE/C,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,KAAK,sBAAA,CAAuB,SAAS,CAAA,CAClC,IAAA,CAAK,CAAC,WAAA,KAAgB,oBAAA,CAAqB,WAAW,CAAC,CAAA,CACvD,OAAA,CAAQ,MAAM,YAAA,CAAa,KAAK,CAAC,CAAA;AAAA,EACtC,CAAA,EAAG,CAAC,sBAAA,EAAwB,SAAS,CAAC,CAAA;AAEtC,EAAA,uBACEA,cAAA,CAAA,aAAA,CAAC,SAAI,SAAA,EAAU,mDAAA,EAAoD,aAAU,kCAAA,EAAA,EAC1E,SAAA,gDACE,KAAA,EAAA,EAAI,SAAA,EAAU,6DACbA,cAAA,CAAA,aAAA,CAAC,OAAA,EAAA,IAAQ,CACX,CAAA,mBAEAA,cAAA,CAAA,aAAA,CAAAA,cAAA,CAAA,QAAA,EAAA,IAAA,EACG,qCACCA,cAAA,CAAA,aAAA,CAAAA,cAAA,CAAA,QAAA,EAAA,IAAA,kBACEA,cAAA,CAAA,aAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,4CAAA,EAAA,kBACZA,cAAA,CAAA,aAAA,CAAC,SAAI,SAAA,EAAU,qBAAA,EAAA,+CACZ,IAAA,EAAA,EAAG,SAAA,EAAU,gBAAa,YAAU,CAAA,+CACpC,IAAA,EAAA,EAAG,SAAA,EAAU,aAAW,iBAAA,CAAkB,gBAAiB,CAC9D,CAAA,EACC,iBAAA,CAAkB,0CACjBA,cAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qBAAA,EAAA,kBACbA,cAAA,CAAA,aAAA,CAAC,IAAA,EAAA,EAAG,WAAU,YAAA,EAAA,EAAa,aAAW,mBACtCA,cAAA,CAAA,aAAA,CAAC,IAAA,EAAA,EAAG,WAAU,SAAA,EAAA,EAAW,iBAAA,CAAkB,sBAAuB,CACpE,CAAA,EAED,kBAAkB,uBAAA,oBACjBA,cAAA,CAAA,aAAA,CAAC,SAAI,SAAA,EAAU,qBAAA,EAAA,+CACZ,IAAA,EAAA,EAAG,SAAA,EAAU,YAAA,EAAA,EAAa,WAAS,CAAA,kBACpCA,cAAA,CAAA,aAAA,CAAC,QAAG,SAAA,EAAU,SAAA,EAAA,EAAW,kBAAkB,uBAAwB,CACrE,GAED,iBAAA,CAAkB,mBAAA,oBACjBA,cAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qBAAA,EAAA,+CACZ,IAAA,EAAA,EAAG,SAAA,EAAU,gBAAa,SAAO,CAAA,+CACjC,IAAA,EAAA,EAAG,SAAA,EAAU,SAAA,EAAA,EAAW,iBAAA,CAAkB,mBAAoB,CACjE,CAEJ,CAAA,EACC,iBAAA,CAAkB,4CACjBA,cAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,WAAU,qBAAA,EAAsB,WAAA,EAAU,8CAC7CA,cAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAK,WAAU,YAAA,EAAA,EAAa,eAAa,mBAC1CA,cAAA,CAAA,aAAA,CAAC,GAAA,EAAA,EAAE,WAAU,cAAA,EAAA,EAAgB,iBAAA,CAAkB,wBAAyB,CAC1E,CAAA,EAED,iBAAA,CAAkB,yBAAyB,iBAAA,CAAkB,qBAAA,CAAsB,SAAS,CAAA,oBAC3FA,cAAA,CAAA,aAAA,CAAC,SAAI,SAAA,EAAU,qBAAA,EAAsB,aAAU,qBAAA,EAAA,kBAC7CA,cAAA,CAAA,aAAA,CAAC,UAAK,SAAA,EAAU,YAAA,EAAA,EAAa,gCAA8B,CAAA,EAC1D,iBAAA,CAAkB,sBAAsB,GAAA,CAAI,CAAC,QAAA,EAAU,KAAA,qBACtDA,cAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,KAAK,KAAA,EAAO,SAAA,EAAU,yBACxB,QAAA,CAAS,gBAAA,iDAAqB,GAAA,EAAA,EAAE,SAAA,EAAU,kBAAgB,QAAA,CAAS,gBAAiB,GACpF,QAAA,CAAS,GAAA,iDACP,MAAA,EAAA,EAAO,OAAA,EAAQ,QAAO,IAAA,EAAK,IAAA,EAAK,SAAA,EAAU,0CAAA,EAA2C,OAAA,EAAO,IAAA,EAAA,+CAC1F,GAAA,EAAA,EAAE,IAAA,EAAM,SAAS,GAAA,EAAK,MAAA,EAAO,UAAS,GAAA,EAAI,qBAAA,EAAA,kBACzCA,cAAA,CAAA,aAAA,CAAC,MAAA,EAAA,IAAA,EAAK,QAAM,CAAA,+CACX,cAAA,EAAA,EAAe,IAAA,EAAM,IAAI,CAC5B,CACF,CAEJ,CACD,CACH,CAEJ,CAEJ,CAEJ,CAAA;AAEJ;;ACzFO,IAAK,aAAA,qBAAAC,cAAAA,KAAL;AACL,EAAAA,eAAA,kBAAA,CAAA,GAAmB,kBAAA;AACnB,EAAAA,eAAA,qBAAA,CAAA,GAAsB,qBAAA;AACtB,EAAAA,eAAA,aAAA,CAAA,GAAc,aAAA;AACd,EAAAA,eAAA,wBAAA,CAAA,GAAyB,wBAAA;AACzB,EAAAA,eAAA,OAAA,CAAA,GAAQ,OAAA;AALE,EAAA,OAAAA,cAAAA;AAAA,CAAA,EAAA,aAAA,IAAA,EAAA,CAAA;AAQL,MAAM,mBAAA,GAAqD;AAAA,EAChE,CAAC,4CAAiC,kBAAA;AAAA,EAClC,CAAC,kDAAoC,qBAAA;AAAA,EACrC,CAAC,kCAA4B,aAAA;AAAA,EAC7B,CAAC,wDAAuC,wBAAA;AAAA,EACxC,CAAC,sBAAsB;AACzB,CAAA;AA0BO,SAAS,WAAA,CAAY;AAAA,EAC1B,SAAA;AAAA,EACA,aAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,aAAA;AAAA,EACA;AACF,CAAA,EAAsC;AACpC,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,QAAA,CAAS,aAAa,KAAK,CAAA;AAC/D,EAAA,MAAM,CAAC,YAAA,EAAc,oBAAoB,CAAA,GAAI,SAAS,KAAK,CAAA;AAC3D,EAAA,MAAM,OAAA,GAAU,OAAwB,IAAI,CAAA;AAC5C,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,SAAS,KAAK,CAAA;AAE9C,EAAA,MAAM,eAAA,GAAkB,CAAC,IAAA,KAAkB;AACzC,IAAA,oBAAA,CAAqB,IAAI,CAAA;AACzB,IAAA,IAAI,aAAA,EAAe,aAAA,CAAc,OAAA,CAAQ,MAAA,GAAS,IAAA;AAAA,EACpD,CAAA;AAGA,EAAA,IAAI,aAAA,EAAe;AACjB,IAAA,aAAA,CAAc,OAAA,CAAQ,KAAA,GAAQ,MAAM,eAAA,CAAgB,KAAK,CAAA;AAAA,EAC3D;AACA,EAAA,MAAM;AAAA,IACJ,OAAA;AAAA,IACA,QAAA;AAAA,IACA,YAAA;AAAA,IACA,KAAA;AAAA,IACA,SAAA,EAAW,EAAE,YAAA;AAAa,MACxB,OAAA,CAAyB;AAAA,IAC3B,aAAA,EAAe;AAAA,MACb,QAAQ,aAAA,EAAe,MAAA;AAAA,MACvB,eAAA,EAAiB,eAAe,eAAA,IAAmB;AAAA;AACrD,GACD,CAAA;AAED,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,KAAA,CAAM;AAAA,MACJ,QAAQ,aAAA,EAAe,MAAA;AAAA,MACvB,eAAA,EAAiB,eAAe,eAAA,IAAmB;AAAA,KACpD,CAAA;AAAA,EACH,CAAA,EAAG,CAAC,aAAA,EAAe,KAAK,CAAC,CAAA;AAEzB,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,MAAA,OAAA,CAAQ,OAAA,CAAQ,QAAQ,CAAC,UAAA;AAAA,IAC3B;AAAA,EACF,CAAA,EAAG,CAAC,UAAU,CAAC,CAAA;AAEf,EAAA,MAAM,eAAe,MAAM;AACzB,IAAA,aAAA,CAAc,KAAK,CAAA;AACnB,IAAA,eAAA,CAAgB,KAAK,CAAA;AACrB,IAAA,KAAA,EAAM;AAAA,EACR,CAAA;AAEA,EAAA,MAAM,gBAAgB,MAAM;AAC1B,IAAA,WAAA,CAAY,IAAI,CAAA;AAChB,IAAA,UAAA,CAAW,MAAM,WAAA,CAAY,KAAK,CAAA,EAAG,GAAI,CAAA;AACzC,IAAA,SAAA,EAAU;AAAA,EACZ,CAAA;AAEA,EAAA,MAAM,UAAA,GAAa,SAAA,KAAc,MAAA,IAAa,SAAA,KAAc,IAAA;AAE5D,EAAA,uBACED,cAAA,CAAA,aAAA,CAAC,SAAI,SAAA,EAAW,EAAA,CAAG,aAAa,SAAS,CAAA,EAAA,+CAEtC,KAAA,EAAA,EAAI,SAAA,EAAU,qCACbA,cAAA,CAAA,aAAA,CAAC,IAAA,EAAA,EAAK,aAAa,QAAA,EAAA,kBACjBA,cAAA,CAAA,aAAA,CAAC,+BACCA,cAAA,CAAA,aAAA,CAAC,cAAA,EAAA,EAAe,SAAO,IAAA,EAAA,kBACrBA,cAAA,CAAA,aAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAQ,QAAA;AAAA,MACR,SAAA,EAAW,EAAA;AAAA,QACT,kCAAA;AAAA,QACA,EAAE,YAAA,EAAc,CAAC,UAAA,EAAW;AAAA,QAC5B,EAAE,aAAA,EAAe,SAAA,KAAc,IAAA,EAAK;AAAA,QACpC,EAAE,4BAAA,EAA8B,SAAA,KAAc,KAAA;AAAM,OACtD;AAAA,MACA,IAAA,EAAK,MAAA;AAAA,MACL,QAAA,EAAU,UAAA;AAAA,MACV,OAAA,EAAS;AAAA,KAAA;AAAA,iDAER,QAAA,EAAA,IAAS;AAAA,GAEd,CAAA,kBACAA,cAAA,CAAA,aAAA,CAAC,cAAA,EAAA,IAAA,kBACCA,cAAA,CAAA,aAAA,CAAC,cAAK,oBAAkB,CAC1B,CACF,CACF,mBACAA,cAAA,CAAA,aAAA,CAAC,OAAA,EAAA,IAAA,kBACCA,cAAA,CAAA,aAAA,CAAC,cAAA,EAAA,EAAe,SAAO,IAAA,EAAA,kBACrBA,cAAA,CAAA,aAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAQ,QAAA;AAAA,MACR,SAAA,EAAW,EAAA;AAAA,QACT,kCAAA;AAAA,QACA,EAAE,YAAA,EAAc,CAAC,UAAA,EAAW;AAAA,QAC5B,EAAE,aAAA,EAAe,SAAA,KAAc,KAAA,EAAM;AAAA,QACrC,EAAE,0BAAA,EAA4B,SAAA,KAAc,IAAA;AAAK,OACnD;AAAA,MACA,IAAA,EAAK,MAAA;AAAA,MACL,QAAA,EAAU,UAAA;AAAA,MACV,OAAA,EAAS,MAAM,aAAA,CAAc,CAAC,UAAU;AAAA,KAAA;AAAA,iDAEvC,UAAA,EAAA,IAAW;AAAA,GAEhB,CAAA,kBACAA,cAAA,CAAA,aAAA,CAAC,cAAA,EAAA,IAAA,kBACCA,cAAA,CAAA,aAAA,CAAC,cAAK,oBAAkB,CAC1B,CACF,CACF,CAAA,kBAGAA,cAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,+DAAA;AAAA,QACA,aAAa,iBAAA,GAAoB;AAAA;AACnC,KAAA;AAAA,IAEC,SAAA,mBACCA,cAAA,CAAA,aAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,EAAA,CAAG,oDAAA,EAAsD,UAAA,GAAa,cAAc,MAAM,CAAA;AAAA,QACrG,WAAA,EAAU;AAAA,OAAA;AAAA,sBAEVA,cAAA,CAAA,aAAA,CAAC,SAAI,SAAA,EAAU,WAAA,EAAA,+CACZ,KAAA,EAAA,EAAM,OAAA,EAAQ,QAAA,EAAS,SAAA,EAAU,SAAA,EAAA,EAAU,QAE5C,mBACAA,cAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAK,WAAU,eAAA,EAAA,EACb,aAAA,EAAe,UAAU,mBAAA,CAAoB,aAAA,CAAc,MAAM,CACpE,CACF,CAAA;AAAA,mDACC,KAAA,EAAA,EAAI,SAAA,EAAU,+BACbA,cAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAM,SAAQ,iBAAA,EAAkB,SAAA,EAAU,SAAA,EAAA,EAAU,kBAErD,mBACAA,cAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAK,WAAU,eAAA,EAAA,EAAiB,aAAA,EAAe,eAAgB,CAClE;AAAA,KACF,mBAEAA,cAAA,CAAA,aAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAK,OAAA;AAAA,QACL,QAAA,EAAU,aAAa,QAAQ,CAAA;AAAA,QAC/B,SAAA,EAAW,EAAA;AAAA,UACT,kFAAA;AAAA,UACA,aAAa,WAAA,GAAc;AAAA;AAC7B,OAAA;AAAA,mDAEC,UAAA,EAAA,EAAS,SAAA,EAAU,WAAA,EAAY,WAAA,EAAU,2CACxCA,cAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EAAA,+CACZ,KAAA,EAAA,EAAM,OAAA,EAAQ,UAAS,SAAA,EAAU,YAAA,EAAA,EAAa,QAE/C,CAAA,kBACAA,cAAA,CAAA,aAAA;AAAA,QAAC,UAAA;AAAA,QAAA;AAAA,UACC,OAAA;AAAA,UACA,IAAA,EAAK,QAAA;AAAA,UACL,KAAA,EAAO,EAAE,QAAA,EAAU,IAAA,EAAK;AAAA,UACxB,MAAA,EAAQ,CAAC,EAAE,KAAA,EAAM,qBACfA,cAAA,CAAA,aAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,OAAO,KAAA,CAAM,KAAA;AAAA,cACb,eAAe,KAAA,CAAM,QAAA;AAAA,cACrB,IAAA,EAAM,YAAA;AAAA,cACN,YAAA,EAAc,eAAA;AAAA,cACd,QAAA,EAAQ;AAAA,aAAA;AAAA,4BAERA,cAAA,CAAA,aAAA,CAAC,iBAAc,SAAA,EAAU,4BAAA,EAAA,+CACtB,WAAA,EAAA,EAAY,WAAA,EAAY,mBAAkB,CAC7C,CAAA;AAAA,yDACC,aAAA,EAAA,IAAA,EACE,MAAA,CAAO,OAAO,aAAa,CAAA,CAAE,IAAI,CAAC,MAAA,kDAChC,UAAA,EAAA,EAAW,GAAA,EAAK,QAAQ,KAAA,EAAO,MAAA,EAAA,EAC7B,oBAAoB,MAAM,CAC7B,CACD,CACH;AAAA;AACF;AAAA,yBAGJA,cAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAK,WAAU,iCAAA,EAAA,EAAkC,mJAGlD,CACF,CAAA,kBACAA,cAAA,CAAA,aAAA,CAAC,SAAI,SAAA,EAAU,WAAA,EAAA,+CACZ,KAAA,EAAA,EAAM,OAAA,EAAQ,mBAAkB,SAAA,EAAU,YAAA,EAAA,EAAa,kBAExD,CAAA,kBACAA,cAAA,CAAA,aAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,EAAA,EAAG,iBAAA;AAAA,UACH,QAAA,EAAQ,IAAA;AAAA,UACR,SAAA,EAAW,EAAA;AAAA,UACX,WAAA,EAAY,oEAAA;AAAA,UACZ,IAAA,EAAM,CAAA;AAAA,UACN,SAAA,EAAU,6BAAA;AAAA,UACT,GAAG,SAAS,iBAAiB;AAAA;AAAA,yBAEhCA,cAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iCAAA,EAAA,EAAkC,kDAElD,CACF,CAAA,kBACAA,cAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,WAAU,mCAAA,EAAA,kBACbA,cAAA,CAAA,aAAA,CAAC,UAAO,OAAA,EAAQ,MAAA,EAAO,MAAK,IAAA,EAAK,IAAA,EAAK,QAAA,EAAS,OAAA,EAAS,gBAAc,QAEtE,CAAA,kBACAA,cAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAO,MAAK,QAAA,EAAS,OAAA,EAAQ,QAAA,EAAS,IAAA,EAAK,MAAK,QAAA,EAAU,YAAA,EAAA,EACxD,eAAe,eAAA,GAAkB,QACpC,CACF,CACF;AAAA;AACF,GAGN,CAAA;AAEJ;;ACrPO,SAAS,cAAA,CAAe;AAAA,EAC7B,EAAA;AAAA,EACA,SAAA;AAAA,EACA,aAAA;AAAA,EACA,IAAA,EAAM,YAAA;AAAA,EACN,YAAA,EAAc,oBAAA;AAAA,EACd,GAAG;AACL,CAAA,EAAyC;AACvC,EAAA,MAAM,EAAE,SAAA,EAAW,SAAA,EAAU,GAAI,gBAAA,EAAiB;AAClD,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAI,SAAS,KAAK,CAAA;AACtD,EAAA,MAAM,gBAAgB,MAAA,CAAyB,EAAE,MAAA,EAAQ,KAAA,EAAO,OAAO,MAAM;AAAA,EAAC,GAAG,CAAA;AAGjF,EAAA,MAAM,SAAS,YAAA,IAAgB,YAAA;AAC/B,EAAA,MAAM,YAAY,oBAAA,IAAwB,eAAA;AAE1C,EAAA,MAAM,YAAA,GAAe,OAAO,IAAA,KAA0B;AACpD,IAAA,MAAM,SAAA,CAAU,EAAA,EAAI,IAAA,CAAK,MAAA,EAAQ,IAAA,CAAK,eAAe,CAAA,CAAE,IAAA,CAAK,MAAM,SAAA,CAAU,KAAK,CAAC,CAAA;AAAA,EACpF,CAAA;AAEA,EAAA,MAAM,aAAA,GAAgB,MAAM,SAAA,CAAU,EAAE,CAAA;AAExC,EAAA,uBACEA,cAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAM,KAAA,EAAO,KAAA,EAAO,IAAA,EAAM,QAAQ,YAAA,EAAc,SAAA,EAAY,GAAG,IAAA,EAAA,kBAC9DA,cAAA,CAAA,aAAA,CAAC,OAAA,EAAA,IAAA,+CACE,cAAA,EAAA,EAAe,OAAA,EAAO,IAAA,EAAA,kBACrBA,cAAA,CAAA,aAAA,CAAC,YAAA,EAAA,EAAa,OAAA,EAAO,MAAC,OAAA,EAAS,CAAC,CAAA,KAAM,CAAA,CAAE,eAAA,EAAgB,EAAG,SAAS,CAAC,CAAA,KAAM,CAAA,CAAE,eAAA,EAAgB,EAAA,kBAC3FA,cAAA,CAAA,aAAA,CAAC,aAAU,OAAA,EAAQ,OAAA,EAAQ,SAAA,EAAU,qCAAA,EAAsC,IAAA,EAAK,MAAA,EAAA,+CAC7E,IAAA,EAAA,IAAK,CACR,CACF,CACF,CAAA,kBACAA,cAAA,CAAA,aAAA,CAAC,cAAA,EAAA,IAAA,kBACCA,cAAA,CAAA,aAAA,CAAC,GAAA,EAAA,IAAA,EAAE,oBAAkB,CACvB,CACF,CAAA,kBACAA,cAAA,CAAA,aAAA;AAAA,IAAC,YAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,gBAAA;AAAA,MACV,eAAA,EAAiB,CAAC,CAAA,KAAM;AACtB,QAAA,IAAI,aAAA,CAAc,QAAQ,MAAA,EAAQ;AAChC,UAAA,CAAA,CAAE,cAAA,EAAe;AACjB,UAAA,aAAA,CAAc,QAAQ,KAAA,EAAM;AAAA,QAC9B;AAAA,MACF,CAAA;AAAA,MACA,iBAAA,EAAmB,CAAC,CAAA,KAAM;AACxB,QAAA,IAAI,aAAA,CAAc,QAAQ,MAAA,EAAQ;AAChC,UAAA,CAAA,CAAE,cAAA,EAAe;AAAA,QACnB;AAAA,MACF;AAAA,KAAA;AAAA,oBAEAA,cAAA,CAAA,aAAA,CAAC,WAAA,EAAA,EAAY,SAAA,EAAU,MAAA,EAAA,+CACpB,UAAA,EAAA,EAAW,SAAA,EAAU,gBAAA,EAAA,EAAiB,oBAAkB,mBACzDA,cAAA,CAAA,aAAA,CAAC,gBAAA,EAAA,EAAiB,SAAA,EAAU,SAAA,EAAA,EAAU,8DAEtC,CACF,CAAA;AAAA,oBAEAA,cAAA,CAAA,aAAA,CAAC,UAAA,EAAA,EAAW,SAAA,EAAU,2BAAA,EAAA,kBACpBA,cAAA,CAAA,aAAA;AAAA,MAAC,WAAA;AAAA,MAAA;AAAA,QACC,SAAA;AAAA,QACA,aAAA;AAAA,QACA,QAAA,EAAU,YAAA;AAAA,QACV,SAAA,EAAW,aAAA;AAAA,QACX;AAAA;AAAA,KACF,kBACAA,cAAA,CAAA,aAAA,CAAC,wBAAA,EAAA,EAAyB,SAAA,EAAW,IAAI,CAC3C;AAAA,GAEJ,CAAA;AAEJ;;AC5FO,SAAS,UAAA,CAAW,MAAY,MAAA,EAAiB;AACtD,EAAA,MAAM,aAAA,GAAgB,OAAA;AACtB,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,IAAI,OAAO,cAAc,WAAA,EAAa;AACpC,MAAA,MAAA,GAAS,SAAA,CAAU,QAAA;AAAA,IACrB,CAAA,MAAO;AACL,MAAA,MAAA,GAAS,aAAA;AAAA,IACX;AAAA,EACF;AAEA,EAAA,OAAO,IAAA,CAAK,mBAAmB,MAAA,EAAQ;AAAA,IACrC,KAAA,EAAO,OAAA;AAAA,IACP,GAAA,EAAK,SAAA;AAAA,IACL,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,MAAA,EAAQ,SAAA;AAAA,IACR,MAAA,EAAQ;AAAA,GACT,CAAA;AACH;;ACQO,IAAK,WAAA,qBAAAE,YAAAA,KAAL;AACL,EAAAA,aAAA,QAAA,CAAA,GAAS,QAAA;AACT,EAAAA,aAAA,UAAA,CAAA,GAAW,UAAA;AACX,EAAAA,aAAA,UAAA,CAAA,GAAW,UAAA;AACX,EAAAA,aAAA,QAAA,CAAA,GAAS,QAAA;AAJC,EAAA,OAAAA,YAAAA;AAAA,CAAA,EAAA,WAAA,IAAA,EAAA;AAOL,IAAK,QAAA,qBAAAC,SAAAA,KAAL;AACL,EAAAA,UAAA,UAAA,CAAA,GAAW,UAAA;AACX,EAAAA,UAAA,UAAA,CAAA,GAAW,UAAA;AAFD,EAAA,OAAAA,SAAAA;AAAA,CAAA,EAAA,QAAA,IAAA,EAAA;AAoDL,MAAM,UAAA,GAAa,CAAC,GAAA,KAA8C,GAAA,CAAI,IAAA,KAAS,QAAA;AAE/E,MAAM,cAAA,GAAiB,CAAC,GAAA,KAAkD,GAAA,CAAI,IAAA,KAAS,UAAA;AAEvF,MAAM,UAAA,GAAa,CAAC,GAAA,KAAkD,GAAA,CAAI,IAAA,KAAS,UAAA;AAEnF,MAAM,QAAA,GAAW,CAAC,GAAA,KAAgD,GAAA,CAAI,IAAA,KAAS,QAAA;AAEtF,SAAS,QAAQ,KAAA,EAAqB;AACpC,EAAA,MAAM,EAAE,EAAA,EAAI,OAAA,EAAS,SAAA,EAAW,MAAA,EAAQ,gBAAe,GAAI,KAAA;AAG3D,EAAA,MAAM,EAAE,MAAA,EAAQ,aAAA,EAAc,GAAI,gBAAA,EAAiB;AACnD,EAAA,MAAM,SAAS,cAAA,IAAkB,aAAA;AAEjC,EAAA,MAAM,aAAA,GAAgB,UAAA,CAAW,SAAA,EAAW,MAAM,CAAA;AAElD,EAAA,IAAI,UAAA,CAAW,KAAK,CAAA,EAAG;AACrB,IAAA,MAAM,EAAE,eAAA,EAAiB,SAAA,EAAW,aAAA,EAAe,iBAAgB,GAAI,KAAA;AAEvE,IAAA,uBACEH,cAAA,CAAA,aAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,2CAAA,EAAA,kBACZA,cAAA,CAAA,aAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,cAAA,EAAA,kBACdA,cAAA,CAAA,aAAA,CAAC,UAAA,EAAA,EAAW,SAAA,EAAU,qBAAA,EAAA,kBACpBA,cAAA,CAAA,aAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAQ,UAAA,EAAW,SAAA,EAAU,sBAAA,EAAuB,CAAA,kBACpEA,cAAA,CAAA,aAAA,CAAC,SAAA,EAAA,EAAU,SAAA,EAAU,mBAAA,EAAA,EAAqB,CAAA,iBAAA,EAAoB,SAAA,GAAY,aAAA,GAAgB,EAAE,CAAA,CAAG,CACjG,CAAA,kBACAA,cAAA,CAAA,aAAA;AAAA,MAAC,WAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,GAAG,oBAAA,EAAsB;AAAA,UAClC,MAAA,EAAQ,CAAC,eAAA,EAAiB,MAAA;AAAA,UAC1B,aAAa,eAAA,EAAiB;AAAA,SAC/B;AAAA,OAAA;AAAA,sBAEDA,cAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EAAA,kBACbA,cAAA,CAAA,aAAA,CAAC,oBAAiB,OAAA,EAAS,EAAE,OAAA,EAAQ,EAAG,CAAA,kBACxCA,cAAA,CAAA,aAAA,CAAC,SAAI,SAAA,EAAU,0CAAA,EAAA,kBACbA,cAAA,CAAA,aAAA,CAAC,cAAA,EAAA,EAAe,EAAA,EAAQ,SAAA,EAAsB,aAAA,EAA8B,CAAA,EAC3E,eAAA,oBACCA,cAAA,CAAA,aAAA,CAAC,OAAA,EAAA,IAAA,kBACCA,cAAA,CAAA,aAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAO,wBACrBA,cAAA,CAAA,aAAA,CAAC,SAAA,EAAA,EAAU,OAAA,EAAQ,SAAA,EAAU,IAAA,EAAK,IAAA,EAAK,WAAU,oBAAA,EAAA,EAC9C,eACH,CACF,CAAA,kBACAA,cAAA,CAAA,aAAA,CAAC,cAAA,EAAA,IAAA,+CACE,GAAA,EAAA,IAAA,EAAE,gBAAA,EAAe,eAAgB,CACpC,CACF,CAAA,kBAEFA,cAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,mBAAA,EAAA,EAAqB,aAAc,CACrD,CACF,CAAA;AAAA,MACC,CAAC,CAAC,eAAA,EAAiB,MAAA,iDACjB,SAAA,EAAA,EAAU,IAAA,EAAK,QAAA,EAAS,WAAA,EAAW,IAAA,EAAC,SAAA,EAAU,yDAC7CA,cAAA,CAAA,aAAA,CAAC,aAAA,EAAA,EAAc,KAAA,EAAM,kBAAA,EAAA,kBACnBA,cAAA,CAAA,aAAA,CAAC,gBAAA,EAAA,EAAiB,WAAU,MAAA,EAAA,EAAO,kBAAgB,CAAA,kBACnDA,cAAA,CAAA,aAAA,CAAC,gBAAA,EAAA,IAAA,kBACCA,cAAA,CAAA,aAAA,CAAC,QAAG,SAAA,EAAU,sBAAA,EAAA,EACX,gBAAgB,GAAA,CAAI,CAAC,4BACpBA,cAAA,CAAA,aAAA,CAAC,IAAA,EAAA,EAAG,GAAA,EAAK,OAAA,CAAQ,EAAA,EAAI,SAAA,EAAU,kCAC7BA,cAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAM,OAAA,EAAQ,SAAA,EAAA,EAAW,IAAA,CAAK,KAAA,CAAM,QAAQ,KAAA,GAAQ,GAAG,CAAA,EAAE,GAAC,CAAA,kBAC3DA,cAAA,CAAA,aAAA;AAAA,QAAC,GAAA;AAAA,QAAA;AAAA,UACC,MAAM,OAAA,CAAQ,GAAA;AAAA,UACd,MAAA,EAAO,QAAA;AAAA,UACP,GAAA,EAAI,qBAAA;AAAA,UACJ,SAAA,EAAU;AAAA,SAAA;AAAA,wBAEVA,cAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,2EAAA,EAAA,EACb,QAAQ,KACX,CAAA;AAAA,wBACAA,cAAA,CAAA,aAAA,CAAC,cAAA,EAAA,EAAe,SAAA,EAAU,sBAAA,EAAuB,QAAO,SAAA,EAAU;AAAA,OAEtE,CACD,CACH,CACF,CACF,CACF;AAAA,KAGN,CACF,CAAA;AAAA,EAEJ;AAGA,EAAA,MAAM,QAAA,GAAW,UAAA,CAAW,KAAK,CAAA,GAAI,MAAM,QAAA,GAAW,IAAA;AAEtD,EAAA,uBACEA,cAAA,CAAA,aAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,uDAAA,EAAA,kBACZA,cAAA,CAAA,aAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,cAAA,EAAA,kBACdA,cAAA,CAAA,aAAA,CAAC,UAAA,EAAA,EAAW,SAAA,EAAU,SAAA,EAAA,kBACpBA,cAAA,CAAA,aAAA,CAAC,UAAA,EAAA,EAAW,MAAA,EAAO,MAAA,EAAO,IAAA,EAAM,EAAA,EAAI,CACtC,CAAA,kBACAA,cAAA,CAAA,aAAA,CAAC,WAAA,EAAA,EAAY,SAAA,EAAU,sBAAA,EAAA,EACpB,cAAA,CAAe,KAAK,CAAA,oBACnBA,cAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EAAA,kBACbA,cAAA,CAAA,aAAA,CAAC,gBAAA,EAAA,EAAiB,OAAA,EAAS,EAAE,OAAA,EAAQ,EAAG,CAAA,kBACxCA,cAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,mBAAA,EAAA,EAAqB,aAAc,CACrD,CAAA,EAED,UAAA,CAAW,KAAK,CAAA,IAAK,QAAA,oBACpBA,cAAA,CAAA,aAAA,CAAAA,cAAA,CAAA,QAAA,EAAA,IAAA,kBACEA,cAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EAAA,kBACbA,cAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uBAAA,EAAA,EACZ,QAAA,KAAa,UAAA,kBAAoB,uBAAuB,0BAC3D,CAAA,kBACAA,cAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,cAAA,EAAA,kBACbA,cAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,0BAAA,EAAA,EAA4B,aAAc,CAAA,kBAC1DA,cAAA,CAAA,aAAA,CAAC,WAAA,EAAA,EAAY,OAAA,EAAS,QAAA,KAAa,UAAA,kBAAoB,SAAA,GAAY,aAAA,EAAA,EAChE,QAAA,KAAa,UAAA,kBAAoB,UAAA,GAAa,gBACjD,CACF,CACF,CAAA,EACC,OAAA,oBAAWA,cAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EAAA,EAAa,OAAQ,CAClD,CAAA,EAED,QAAA,CAAS,KAAK,CAAA,oBACbA,cAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EAAA,kBACbA,cAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,4BAAA,EAAA,EAA8B,OAAQ,CAAA,kBACtDA,cAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,cAAA,EAAA,kBACbA,cAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,0BAAA,EAAA,EAA4B,aAAc,CAAA,kBAC1DA,cAAA,CAAA,aAAA,CAAC,WAAA,EAAA,EAAY,OAAA,EAAQ,SAAA,EAAA,EAAU,QAAM,CACvC,CACF,CAEJ,CACF,CACF,CAAA;AAEJ;;ACpNO,SAAS,kBAAkB,UAAA,EAA6C;AAC7E,EAAA,MAAM,aAAA,GAAgB,CAAC,IAAA,EAAM,MAAA,EAAQ,SAAS,OAAO,CAAA;AAErD,EAAA,IAAI,UAAA,CAAW,WAAW,CAAA,EAAG;AAC3B,IAAA,OAAO,EAAC;AAAA,EACV;AAEA,EAAA,MAAM,QAAA,GAAW,CAAC,GAAA,KAAgB;AAChC,IAAA,MAAM,GAAA,GAAM,aAAA,CAAc,OAAA,CAAQ,GAAG,CAAA;AAGrC,IAAA,OAAO,GAAA,KAAQ,KAAK,QAAA,GAAW,GAAA;AAAA,EACjC,CAAA;AAEA,EAAA,OAAO,MAAA,CAAO,IAAA,CAAK,UAAA,CAAW,CAAC,CAAC,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,MAAM,QAAA,CAAS,CAAC,CAAA,GAAI,QAAA,CAAS,CAAC,CAAC,CAAA;AAC5E;;ACCO,SAAS,gBAAA,CAAiB,EAAE,cAAA,EAAgB,GAAG,MAAK,EAAU;AACnE,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,QAAA,EAAgC;AACpE,EAAA,MAAM,CAAC,oBAAA,EAAsB,uBAAuB,CAAA,GAAI,QAAA,EAAmB;AAE3E,EAAA,MAAM,EAAE,eAAA,EAAgB,GAAI,gBAAA,EAAiB;AAE7C,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,KAAK,eAAA,CAAgB,cAAc,CAAA,CAChC,IAAA,CAAK,CAAC,KAAA,KAAU;AACf,MAAA,aAAA,CAAc,KAAK,CAAA;AACnB,MAAA,uBAAA,CAAwB,iBAAA,CAAkB,KAAK,CAAC,CAAA;AAAA,IAClD,CAAC,CAAA,CACA,KAAA,CAAM,MAAM;AAAA,IAEb,CAAC,CAAA;AAAA,EACL,CAAA,EAAG,CAAC,eAAA,EAAiB,cAAc,CAAC,CAAA;AAEpC,EAAA,IAAI,CAAC,YAAY,MAAA,EAAQ;AACvB,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,uBACEA,cAAA,CAAA,aAAA,CAAC,SAAM,KAAA,EAAO,KAAA,EAAQ,GAAG,IAAA,EAAA,kBACvBA,cAAA,CAAA,aAAA,CAAC,gBAAa,OAAA,EAAO,IAAA,EAAC,SAAS,CAAC,CAAA,KAAM,EAAE,eAAA,EAAgB,EAAG,SAAS,CAAC,CAAA,KAAM,CAAA,CAAE,eAAA,EAAgB,EAAA,kBAC3FA,cAAA,CAAA,aAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAQ,OAAA;AAAA,MACR,IAAA,EAAK,MAAA;AAAA,MACL,SAAA,EAAU,qCAAA;AAAA,MACV,YAAA,EAAW;AAAA,KAAA;AAAA,oBAEXA,cAAA,CAAA,aAAA,CAAC,SAAA,EAAA,EAAU,IAAA,EAAM,EAAA,EAAI;AAAA,GAEzB,CAAA,kBACAA,cAAA,CAAA,aAAA,CAAC,gBAAa,SAAA,EAAU,WAAA,EAAA,+CACrB,WAAA,EAAA,IAAA,kBACCA,cAAA,CAAA,aAAA,CAAC,UAAA,EAAA,EAAW,SAAA,EAAU,oBAAiB,mBAAiB,CAAA,+CACvD,gBAAA,EAAA,EAAiB,SAAA,EAAU,aAAU,oFAEtC,CACF,CAAA,EACC,oBAAA,iDACE,UAAA,EAAA,EAAW,SAAA,EAAU,0BACnB,GAAA,kBAEDA,cAAA,CAAA,aAAA,CAAC,SAAM,SAAA,EAAU,YAAA,EAAa,cAAA,EAAa,kBAAA,EAAA,+CACxC,WAAA,EAAA,IAAA,kBACCA,cAAA,CAAA,aAAA,CAAC,gBACE,oBAAA,CAAqB,GAAA,CAAI,CAAC,GAAA,qBACzBA,cAAA,CAAA,aAAA,CAAC,SAAA,EAAA,EAAU,GAAA,EAAU,WAAU,sBAAA,EAAA,EAC5B,GACH,CACD,CACH,CACF,mBACAA,cAAA,CAAA,aAAA,CAAC,SAAA,EAAA,IAAA,EACE,UAAA,CAAW,GAAA,CAAI,CAAC,MAAA,qBACfA,cAAA,CAAA,aAAA,CAAC,YAAS,GAAA,EAAK,MAAA,EAAQ,MAAM,QAAA,EAAS,EAAG,SAAA,EAAU,aAAA,EAAA,EAChD,qBAAqB,GAAA,CAAI,CAAC,wBACzBA,cAAA,CAAA,aAAA,CAAC,SAAA,EAAA,EAAU,KAAU,YAAA,EAAY,GAAA,EAAA,EAC9B,OAAO,GAAG,CACb,CACD,CACH,CACD,CACH,CACF,CACF,CAEJ,CACF,CAAA;AAEJ;;ACvDO,SAAS,KAAA,CAAM;AAAA,EACpB,MAAA,EAAQ,cAAA;AAAA,EACR,KAAA,EAAO,OAAA;AAAA,EACP,QAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,aAAA;AAAA,EACA,aAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAe;AACb,EAAA,MAAM,EAAE,WAAA,EAAa,SAAA,EAAW,sBAAsB,MAAA,EAAQ,aAAA,KAAkB,gBAAA,EAAiB;AAGjG,EAAA,MAAM,SAAS,cAAA,IAAkB,aAAA;AAGjC,EAAA,MAAM,QAAA,GAAW,YAAY,OAAO,CAAA;AACpC,EAAA,MAAM,SAAA,GAAY,qBAAqB,OAAO,CAAA;AAG9C,EAAA,MAAM,aAAA,GAAgB,UAAA,CAAW,SAAA,EAAW,MAAM,CAAA;AAIlD,EAAA,MAAM,WAAA,GAAc,CAAC,aAAA,EAAe,QAAA,EAAU,MAAM,EAAE,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,KAAK,CAAA;AAEhF,EAAA,MAAM,oBAAA,GAAuB,CAAC,CAAA,KAAwB;AAEpD,IAAA,IAAK,CAAA,CAAE,MAAA,CAAuB,OAAA,CAAQ,iBAAiB,CAAA,EAAG;AACxD,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,CAAA,CAAE,eAAA,EAAgB;AAElB,MAAA;AAAA,IACF;AACA,IAAA,OAAA,IAAU;AAAA,EACZ,CAAA;AAEA,EAAA,MAAM,mBAAA,GAAsB,CAAC,EAAE,KAAA,EAAAI,QAAM,KAA0B;AAC7D,IAAA,OAAOA,MAAAA,mBACLJ,cAAA,CAAA,aAAA,CAAC,OAAA,EAAA,IAAA,kBACCA,cAAA,CAAA,aAAA,CAAC,cAAA,EAAA,IAAA,kBACCA,cAAA,CAAA,aAAA,CAAC,WAAA,EAAA,EAAY,OAAA,EAAS,MAAA,EAAQ,MAAA,EAAQI,MAAAA,EAAAA,EACnC,aACH,CACF,CAAA,kBACAJ,cAAA,CAAA,aAAA,CAAC,cAAA,EAAA,IAAA,kBACCA,cAAA,CAAA,aAAA,CAAC,GAAA,EAAA,IAAA,EAAE,sBAAA,EAAqBI,MAAM,CAChC,CACF,CAAA,mBAEAJ,cAAA,CAAA,aAAA,CAAC,WAAA,EAAA,EAAY,OAAA,EAAS,MAAA,EAAQ,MAAA,EAAQI,UACnC,aACH,CAAA;AAAA,EAEJ,CAAA;AAEA,EAAA,uBACEJ,cAAA,CAAA,aAAA;AAAA,IAAC,aAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,OAAA;AAAA,MACP,SAAA,EAAW,EAAA;AAAA,QACT,2JAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA,KAAA;AAAA,oBAEJA,cAAA,CAAA,aAAA;AAAA,MAAC,gBAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,oEAAA;AAAA,QACV,OAAA,EAAS;AAAA,OAAA;AAAA,mDAER,IAAA,EAAA,EAAK,IAAA,EAAK,IAAA,EAAK,SAAA,EAAU,gDACxBA,cAAA,CAAA,aAAA,CAAC,WAAA,EAAA,EAAY,SAAA,EAAU,eAAA,EAAA,+CACpB,SAAA,EAAA,EAAU,SAAA,EAAU,4BAA0B,QAAS,CAAA,+CACvD,eAAA,EAAA,EAAgB,SAAA,EAAU,sBAAA,EAAA,EAAwB,WAAY,CACjE,CAAA,kBACAA,cAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6BACZ,aAAA,oBAAiBA,cAAA,CAAA,aAAA,CAAC,gBAAA,EAAA,EAAiB,cAAA,EAAgB,SAAS,CAAA,EAE5D,MAAA,iDAAW,mBAAA,EAAA,EAAoB,KAAA,EAAc,CAChD,CACF;AAAA,KACF;AAAA,oBACAA,cAAA,CAAA,aAAA,CAAC,gBAAA,EAAA,EAAiB,SAAA,EAAU,uCAAA,EAAA,EACzB,SAAA,mBACCA,cAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8BAAA,EAAA,EAA+B,qBAAmB,CAAA,mBAEjEA,cAAA,CAAA,aAAA,CAAC,QAAG,SAAA,EAAU,qBAAA,EAAA,EACX,QAAA,CAAS,KAAA,CAAM,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,4BACtBA,cAAA,CAAA,aAAA,CAAC,OAAA,EAAA,EAAQ,GAAA,EAAK,OAAA,CAAQ,EAAA,EAAK,GAAG,OAAA,EAAS,CACxC,CACH,CAEJ;AAAA,GACF;AAEJ;;ACzGA,MAAM,aAAA,GAAgBA,cAAA,CAAM,aAAA,CAA8C,MAAS,CAAA;AAE5E,SAAS,gBAAA,GAAmB;AACjC,EAAA,MAAM,OAAA,GAAUA,cAAA,CAAM,UAAA,CAAW,aAAa,CAAA;AAC9C,EAAA,IAAI,YAAY,MAAA,EAAW;AACzB,IAAA,MAAM,IAAI,MAAM,uDAAuD,CAAA;AAAA,EACzE;AAEA,EAAA,OAAO,OAAA;AACT;AAOO,SAAS,cAAA,CAAe,EAAE,QAAA,EAAU,KAAA,EAAM,EAAwB;AACvE,EAAA,uBAAOA,cAAA,CAAA,aAAA,CAAC,aAAA,CAAc,QAAA,EAAd,EAAuB,SAAe,QAAS,CAAA;AACzD;AAkBO,SAAS,MAAA,CAAO;AAAA,EACrB,MAAA;AAAA,EACA,aAAA;AAAA,EACA,eAAA;AAAA,EACA,sBAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,EAAgB;AAEd,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,IAAIA,cAAA,CAAM,QAAA,CAAyC,EAAE,CAAA;AAGvF,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,IAAIA,cAAA,CAAM,QAAA,CAAkC,EAAE,CAAA;AAI9E,EAAA,MAAM,aAAA,GAAgBA,cAAA,CAAM,MAAA,iBAAoB,IAAI,KAAK,CAAA;AACzD,EAAA,MAAM,aAAA,GAAgBA,cAAA,CAAM,MAAA,CAAgC,EAAE,CAAA;AAO9D,EAAA,MAAM,sBAAsBA,cAAA,CAAM,WAAA;AAAA,IAChC,CAAC,cAAA,KAA2B;AAE1B,MAAA,IAAI,aAAA,CAAc,QAAQ,GAAA,CAAI,cAAc,KAAK,aAAA,CAAc,OAAA,CAAQ,cAAc,CAAA,EAAG;AACtF,QAAA;AAAA,MACF;AAGA,MAAA,aAAA,CAAc,OAAA,CAAQ,cAAc,CAAA,GAAI,IAAA;AACxC,MAAA,aAAA,CAAc,CAAC,UAAU,EAAE,GAAG,MAAM,CAAC,cAAc,GAAG,IAAA,EAAK,CAAE,CAAA;AAE7D,MAAA,aAAA,CAAc,cAAc,CAAA,CACzB,IAAA,CAAK,CAAC,eAAA,KAAoB;AAEzB,QAAA,cAAA,CAAe,CAAC,UAAU,EAAE,GAAG,MAAM,CAAC,cAAc,GAAG,eAAA,EAAgB,CAAE,CAAA;AACzE,QAAA,aAAA,CAAc,OAAA,CAAQ,IAAI,cAAc,CAAA;AAAA,MAC1C,CAAC,CAAA,CACA,KAAA,CAAM,MAAM;AAAA,MAEb,CAAC,CAAA,CACA,OAAA,CAAQ,MAAM;AAEb,QAAA,OAAO,aAAA,CAAc,QAAQ,cAAc,CAAA;AAC3C,QAAA,aAAA,CAAc,CAAC,IAAA,KAAS;AACtB,UAAA,MAAM,MAAA,GAAS,EAAE,GAAG,IAAA,EAAK;AACzB,UAAA,OAAO,OAAO,cAAc,CAAA;AAE5B,UAAA,OAAO,MAAA;AAAA,QACT,CAAC,CAAA;AAAA,MACH,CAAC,CAAA;AAAA,IACL,CAAA;AAAA,IACA,CAAC,aAAa;AAAA,GAChB;AAGA,EAAA,MAAM,aAAA,GAAgB,MAAA,CAAO,CAAC,CAAA,EAAG,MAAA;AAEjC,EAAA,MAAM,eAAeA,cAAA,CAAM,OAAA;AAAA,IACzB,OAAO;AAAA,MACL,aAAA;AAAA,MACA,eAAA;AAAA,MACA,aAAa,CAAC,cAAA,KAA2B,WAAA,CAAY,cAAc,KAAK,EAAC;AAAA,MACzE,SAAA,EAAW,CAAC,cAAA,KAA2B,UAAA,CAAW,cAAc,CAAA,IAAK,KAAA;AAAA,MACrE,mBAAA;AAAA,MACA,MAAA,EAAQ,aAAA;AAAA,MACR,sBAAA,EAAwB,CAAC,SAAA,KAAsB,sBAAA,CAAuB,SAAS,CAAA;AAAA,MAC/E,SAAA;AAAA,MACA;AAAA,KACF,CAAA;AAAA,IACA;AAAA,MACE,aAAA;AAAA,MACA,eAAA;AAAA,MACA,WAAA;AAAA,MACA,UAAA;AAAA,MACA,mBAAA;AAAA,MACA,aAAA;AAAA,MACA,sBAAA;AAAA,MACA,SAAA;AAAA,MACA;AAAA;AACF,GACF;AAEA,EAAA,uBACEA,cAAA,CAAA,aAAA,CAAC,cAAA,EAAA,EAAe,KAAA,EAAO,YAAA,EAAA,+CACpB,SAAA,EAAA,EAAU,IAAA,EAAK,QAAA,EAAS,WAAA,EAAW,MAAC,SAAA,EAAU,kBAAA,EAAA,EAC5C,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,qBACXA,cAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACE,GAAG,KAAA;AAAA,MACJ,KAAK,KAAA,CAAM,KAAA;AAAA,MAEX,OAAA,EAAS,MAAM,mBAAA,CAAoB,KAAA,CAAM,KAAK;AAAA;AAAA,GAEjD,CACH,CACF,CAAA;AAEJ;;;;"}
|
|
1
|
+
{"version":3,"file":"convos.js","sources":["../../../src/components/convos/status-badge.tsx","../../../src/components/convos/answer-diagnostics.tsx","../../../src/components/convos/discard-form.tsx","../../../src/components/convos/feedback-dialog.tsx","../../../src/lib/formatDate.ts","../../../src/components/convos/message.tsx","../../../src/lib/sortAttributeKeys.ts","../../../src/components/convos/attributes-dialog.tsx","../../../src/components/convos/convo.tsx","../../../src/components/convos/convos.tsx"],"sourcesContent":["import React from 'react';\nimport { Circle } from '@phosphor-icons/react';\n\nimport { Badge } from '@/components/ui/badge';\nimport { cn } from '@/lib/utils';\n\ntype Props = React.ComponentPropsWithRef<typeof Badge> & {\n suffix?: React.ReactNode;\n};\n\nexport function StatusBadge({ className, suffix, children, ...props }: Props) {\n return (\n <div className={cn('flex items-center gap-1 rounded-md p-1', suffix && 'bg-dark-300', className)}>\n <Badge {...props}>\n <div className=\"flex items-center gap-1\">\n <Circle weight=\"fill\" size={8} className=\"size-2\" />\n {children}\n </div>\n </Badge>\n {suffix && <span className=\"text-xs text-default\">{suffix}</span>}\n </div>\n );\n}\n","import React, { useEffect, useState } from 'react';\nimport { ArrowSquareOut } from '@phosphor-icons/react';\n\nimport { Spinner } from '../ui/spinner';\nimport { useConvosContext } from './convos';\nimport { Button } from '../ui/button';\n\ntype ContextSufficiency = 'Sufficient' | 'Partially Sufficient' | 'Insufficient';\ntype AnswerGenerationType = 'Direct Extraction' | 'Summarization' | 'Inference' | 'Combination' | 'Cannot Answer';\ntype QueryContextRelevance = 'High' | 'Medium' | 'Low';\ninterface EvidenceFromContext {\n supporting_quote?: string;\n url?: string;\n}\nexport type AnswerDiagnostics = {\n confidence_score: string;\n answer_generation_type?: AnswerGenerationType;\n query_context_relevance?: QueryContextRelevance;\n context_sufficiency?: ContextSufficiency;\n confidence_justification?: string;\n evidence_from_context?: EvidenceFromContext[];\n};\n\ninterface AnswerDiagnosticsProps {\n messageId: string;\n}\n\nexport function AnswerDiagnosticsSection({ messageId }: AnswerDiagnosticsProps) {\n const { fetchAnswerDiagnostics } = useConvosContext();\n const [answerDiagnostics, setAnswerDiagnostics] = useState<AnswerDiagnostics | null>(null);\n const [isLoading, setIsLoading] = useState(true); // start loading when it mounts. It will start to fetch answer diagnostics on mount\n\n useEffect(() => {\n void fetchAnswerDiagnostics(messageId)\n .then((diagnostics) => setAnswerDiagnostics(diagnostics))\n .finally(() => setIsLoading(false));\n }, [fetchAnswerDiagnostics, messageId]);\n\n return (\n <div className=\"flex flex-col gap-4 px-4 flex-shrink-0 bg-surface\" data-name=\"discard-dialog-answer-diagnostic\">\n {isLoading ? (\n <div className=\"flex items-center justify-center h-full\">\n <Spinner />\n </div>\n ) : (\n <>\n {answerDiagnostics && (\n <>\n <dl className=\"grid grid-cols-[1fr_2fr] grid-rows-2 gap-5\">\n <div className=\"flex flex-col gap-1\">\n <dt className=\"heading-xs\">Confidence</dt>\n <dd className=\"text-sm\">{answerDiagnostics.confidence_score}</dd>\n </div>\n {answerDiagnostics.answer_generation_type && (\n <div className=\"flex flex-col gap-1\">\n <dt className=\"heading-xs\">Answer Type</dt>\n <dd className=\"text-sm\">{answerDiagnostics.answer_generation_type}</dd>\n </div>\n )}\n {answerDiagnostics.query_context_relevance && (\n <div className=\"flex flex-col gap-1\">\n <dt className=\"heading-xs\">Relevance</dt>\n <dd className=\"text-sm\">{answerDiagnostics.query_context_relevance}</dd>\n </div>\n )}\n {answerDiagnostics.context_sufficiency && (\n <div className=\"flex flex-col gap-1\">\n <dt className=\"heading-xs\">Context</dt>\n <dd className=\"text-sm\">{answerDiagnostics.context_sufficiency}</dd>\n </div>\n )}\n </dl>\n {answerDiagnostics.confidence_justification && (\n <div className=\"flex flex-col gap-2\" data-name=\"diagnostic-justification\">\n <span className=\"heading-xs\">Justification</span>\n <p className=\"text-sm my-0\">{answerDiagnostics.confidence_justification}</p>\n </div>\n )}\n {answerDiagnostics.evidence_from_context && answerDiagnostics.evidence_from_context.length > 0 && (\n <div className=\"flex flex-col gap-2\" data-name=\"diagnostic-evidence\">\n <span className=\"heading-xs\">Evidence (from Knowledge Base)</span>\n {answerDiagnostics.evidence_from_context.map((evidence, index) => (\n <div key={index} className=\"flex flex-col gap-1\">\n {evidence.supporting_quote && <p className=\"text-sm my-0\">{evidence.supporting_quote}</p>}\n {evidence.url && (\n <Button variant=\"link\" size=\"sm\" className=\"flex gap-1 text-sm self-end items-center\" asChild>\n <a href={evidence.url} target=\"_blank\" rel=\"noopener noreferrer\">\n <span>Source</span>\n <ArrowSquareOut size={16} />\n </a>\n </Button>\n )}\n </div>\n ))}\n </div>\n )}\n </>\n )}\n </>\n )}\n </div>\n );\n}\n","import React, { useEffect, useRef, useState } from 'react';\nimport { useForm, Controller } from 'react-hook-form';\nimport { ThumbsDown, ThumbsUp } from '@phosphor-icons/react';\n\nimport { Button } from '../ui/button';\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '../ui/select';\nimport { Label } from '../ui/label';\nimport { Textarea } from '../ui/textarea';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '../ui/tooltip';\nimport { Love } from '../love';\n\nimport { cn } from '@/lib/utils';\n\nexport enum DiscardReason {\n INCORRECT_ANSWER = 'incorrect_answer',\n HALLUCINATED_ANSWER = 'hallucinated_answer',\n OVERSHARING = 'oversharing',\n WRONG_ARTICLE_SURFACED = 'wrong_article_surfaced',\n OTHER = 'other',\n}\n\nexport const DiscardReasonLabels: Record<DiscardReason, string> = {\n [DiscardReason.INCORRECT_ANSWER]: 'Incorrect answer',\n [DiscardReason.HALLUCINATED_ANSWER]: 'Hallucinated answer',\n [DiscardReason.OVERSHARING]: 'Oversharing',\n [DiscardReason.WRONG_ARTICLE_SURFACED]: 'Wrong article surfaced',\n [DiscardReason.OTHER]: 'Other',\n};\n\nexport interface DiscardFormData {\n reason: DiscardReason;\n preferredAnswer?: string;\n}\n\nexport interface DiscardedMeta {\n reason: DiscardReason;\n suggestedAnswer?: string;\n}\n\nexport interface SelectOpenHandle {\n isOpen: boolean;\n close: () => void;\n}\n\ninterface DiscardFormProps {\n discarded?: boolean;\n discardedMeta?: DiscardedMeta;\n onSubmit: (data: DiscardFormData) => Promise<void>;\n onApprove: () => void;\n selectOpenRef?: React.MutableRefObject<SelectOpenHandle>;\n className?: string;\n}\n\nexport function DiscardForm({\n discarded,\n discardedMeta,\n onSubmit,\n onApprove,\n selectOpenRef,\n className,\n}: DiscardFormProps): React.ReactNode {\n const [isExpanded, setIsExpanded] = useState(discarded ?? false);\n const [isSelectOpen, setIsSelectOpenState] = useState(false);\n const formRef = useRef<HTMLFormElement>(null);\n const [showLove, setShowLove] = useState(false);\n\n const setIsSelectOpen = (open: boolean) => {\n setIsSelectOpenState(open);\n if (selectOpenRef) selectOpenRef.current.isOpen = open;\n };\n\n // Expose close method to parent via ref - must be in useEffect to avoid side effects during render\n useEffect(() => {\n if (selectOpenRef) {\n selectOpenRef.current.close = () => setIsSelectOpen(false);\n }\n }, [selectOpenRef]);\n\n const {\n control,\n register,\n handleSubmit,\n reset,\n formState: { isSubmitting },\n } = useForm<DiscardFormData>({\n defaultValues: {\n reason: discardedMeta?.reason,\n preferredAnswer: discardedMeta?.suggestedAnswer || '',\n },\n });\n\n useEffect(() => {\n reset({\n reason: discardedMeta?.reason,\n preferredAnswer: discardedMeta?.suggestedAnswer || '',\n });\n }, [discardedMeta, reset]);\n\n useEffect(() => {\n if (formRef.current) {\n formRef.current.inert = !isExpanded;\n }\n }, [isExpanded]);\n\n const handleCancel = () => {\n setIsExpanded(false);\n setIsSelectOpen(false);\n reset();\n };\n\n const handleApprove = () => {\n setShowLove(true);\n setTimeout(() => setShowLove(false), 2000);\n onApprove();\n };\n\n const isResolved = discarded !== undefined && discarded !== null;\n\n return (\n <div className={cn('space-y-4', className)}>\n {/* Buttons */}\n <div className=\"flex gap-2 px-4\">\n <Love doAnimation={showLove}>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"shadow\"\n className={cn(\n 'size-8 text-default !opacity-100',\n { 'bg-surface': !isResolved },\n { 'bg-dark-300': discarded === true },\n { 'bg-green-600 text-dark-100': discarded === false },\n )}\n size=\"icon\"\n disabled={isResolved}\n onClick={handleApprove}\n >\n <ThumbsUp />\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <span>Approve the answer</span>\n </TooltipContent>\n </Tooltip>\n </Love>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"shadow\"\n className={cn(\n 'size-8 text-default !opacity-100',\n { 'bg-surface': !isResolved },\n { 'bg-dark-300': discarded === false },\n { 'bg-red-600 text-dark-100': discarded === true },\n )}\n size=\"icon\"\n disabled={isResolved}\n onClick={() => setIsExpanded(!isExpanded)}\n >\n <ThumbsDown />\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <span>Discard the answer</span>\n </TooltipContent>\n </Tooltip>\n </div>\n\n {/* Form */}\n <div\n className={cn(\n 'grid transition-[grid-template-rows] duration-300 ease-in-out',\n isExpanded ? 'grid-rows-[1fr]' : 'grid-rows-[0fr]',\n )}\n >\n {discarded ? (\n <div\n className={cn('overflow-hidden min-h-0 px-4 bg-dark-200 space-y-4', isExpanded ? 'py-4 mb-4' : 'py-0')}\n data-name=\"discard-dialog-reason\"\n >\n <div className=\"space-y-1\">\n <Label htmlFor=\"reason\" className=\"text-sm\">\n Reason\n </Label>\n <span className=\"text-sm block\">\n {discardedMeta?.reason && DiscardReasonLabels[discardedMeta.reason]}\n </span>\n </div>\n <div className=\"space-y-1\">\n <Label htmlFor=\"preferredAnswer\" className=\"text-sm\">\n Preferred answer\n </Label>\n <span className=\"text-sm block\">{discardedMeta?.suggestedAnswer}</span>\n </div>\n </div>\n ) : (\n <form\n ref={formRef}\n onSubmit={handleSubmit(onSubmit)}\n className={cn(\n 'overflow-hidden min-h-0 px-4 bg-dark-200 transition-all duration-300 ease-in-out',\n isExpanded ? 'py-4 mb-4' : 'py-0',\n )}\n >\n <fieldset className=\"space-y-4\" data-name=\"discard-dialog-reason\">\n <div className=\"space-y-1\">\n <Label htmlFor=\"reason\" className=\"heading-xs\">\n Reason\n </Label>\n <Controller\n control={control}\n name=\"reason\"\n rules={{ required: true }}\n render={({ field }) => (\n <Select\n value={field.value}\n onValueChange={field.onChange}\n open={isSelectOpen}\n onOpenChange={setIsSelectOpen}\n required\n >\n <SelectTrigger className=\"border-dark-300 bg-surface\">\n <SelectValue placeholder=\"Select a reason\" />\n </SelectTrigger>\n <SelectContent>\n {Object.values(DiscardReason).map((reason) => (\n <SelectItem key={reason} value={reason}>\n {DiscardReasonLabels[reason]}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n )}\n />\n <span className=\"text-xs text-subtle ml-1 hidden\">\n Give your ambient agent a descriptive name that reflects its purpose. This agent will learn from your\n content to provide personalized assistance.\n </span>\n </div>\n <div className=\"space-y-1\">\n <Label htmlFor=\"preferredAnswer\" className=\"heading-xs\">\n Preferred answer\n </Label>\n <Textarea\n id=\"preferredAnswer\"\n required\n minLength={10}\n placeholder=\"Explain what you'd like Brainfish to do next time in this case....\"\n rows={4}\n className=\"h-52 resize-none bg-surface\"\n {...register('preferredAnswer')}\n />\n <span className=\"text-xs text-subtle ml-1 hidden\">\n Tell Brainfish why this is the incorrect answer.\n </span>\n </div>\n <div className=\"flex gap-2 !mb-1 justify-end mr-1\">\n <Button variant=\"link\" size=\"sm\" type=\"button\" onClick={handleCancel}>\n Cancel\n </Button>\n <Button type=\"submit\" variant=\"shadow\" size=\"sm\" disabled={isSubmitting}>\n {isSubmitting ? 'Submitting...' : 'Submit'}\n </Button>\n </div>\n </fieldset>\n </form>\n )}\n </div>\n </div>\n );\n}\n","import React, { useRef, useState } from 'react';\nimport { DialogProps } from '@radix-ui/react-dialog';\nimport { Info } from '@phosphor-icons/react';\n\nimport { AnswerDiagnosticsSection } from './answer-diagnostics';\nimport { useConvosContext } from './convos';\nimport { DiscardForm, DiscardFormData, DiscardReason, SelectOpenHandle } from './discard-form';\nimport { DivButton } from '../ui/div-button';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '../ui/tooltip';\nimport { ScrollArea } from '../ui/scroll-area';\n\nimport { Sheet, SheetContent, SheetDescription, SheetHeader, SheetTitle, SheetTrigger } from '@/components/ui/sheet';\n\nexport { DiscardReason } from './discard-form';\n\ninterface FeedbackDialogProps extends DialogProps {\n id: string;\n discarded?: boolean;\n discardedMeta?: { reason: DiscardReason; suggestedAnswer?: string };\n className?: string;\n}\n\nexport function FeedbackDialog({\n id,\n discarded,\n discardedMeta,\n open: externalOpen,\n onOpenChange: externalOnOpenChange,\n ...args\n}: FeedbackDialogProps): React.ReactNode {\n const { onDiscard, onApprove } = useConvosContext();\n const [internalOpen, setInternalOpen] = useState(false);\n const selectOpenRef = useRef<SelectOpenHandle>({ isOpen: false, close: () => {} });\n\n // Use external state if provided, otherwise use internal state\n const isOpen = externalOpen ?? internalOpen;\n const setIsOpen = externalOnOpenChange ?? setInternalOpen;\n\n const onSubmitForm = async (data: DiscardFormData) => {\n await onDiscard(id, data.reason, data.preferredAnswer).then(() => setIsOpen(false));\n };\n\n const handleApprove = () => onApprove(id);\n\n return (\n <Sheet modal={false} open={isOpen} onOpenChange={setIsOpen} {...args}>\n <Tooltip>\n <TooltipTrigger asChild>\n <SheetTrigger asChild onClick={(e) => e.stopPropagation()} onKeyUp={(e) => e.stopPropagation()}>\n <DivButton variant=\"ghost\" className=\"size-7 [&_svg]:size-6 text-dark-600\" size=\"icon\">\n <Info />\n </DivButton>\n </SheetTrigger>\n </TooltipTrigger>\n <TooltipContent>\n <p>Answer information</p>\n </TooltipContent>\n </Tooltip>\n <SheetContent\n className=\"space-y-4 px-0\"\n onEscapeKeyDown={(e) => {\n if (selectOpenRef.current.isOpen) {\n e.preventDefault();\n selectOpenRef.current.close();\n }\n }}\n onInteractOutside={(e) => {\n if (selectOpenRef.current.isOpen) {\n e.preventDefault();\n }\n }}\n >\n <SheetHeader className=\"px-4\">\n <SheetTitle className=\"heading-sm m-0\">Answer information</SheetTitle>\n <SheetDescription className=\"sr-only\">\n Shows answer diagnostics and allows you to provide feedback.\n </SheetDescription>\n </SheetHeader>\n\n <ScrollArea className=\"h-[calc(100vh-4rem)] pb-4\">\n <DiscardForm\n discarded={discarded}\n discardedMeta={discardedMeta}\n onSubmit={onSubmitForm}\n onApprove={handleApprove}\n selectOpenRef={selectOpenRef}\n />\n <AnswerDiagnosticsSection messageId={id} />\n </ScrollArea>\n </SheetContent>\n </Sheet>\n );\n}\n","export function formatDate(date: Date, locale?: string) {\n const defaultLocale = 'en-US';\n if (!locale) {\n if (typeof navigator !== 'undefined') {\n locale = navigator.language;\n } else {\n locale = defaultLocale;\n }\n }\n\n return date.toLocaleDateString(locale, {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n hour: 'numeric',\n minute: '2-digit',\n hour12: true,\n });\n}\n","import React from 'react';\nimport { ArrowSquareOut, UserCircle } from '@phosphor-icons/react';\n\nimport { StatusBadge } from './status-badge';\nimport { FormattedMessage } from '../markdown';\nimport { useConvosContext } from './convos';\nimport { FeedbackDialog, DiscardReason } from './feedback-dialog';\nimport { DivButton } from '../ui/div-button';\nimport { Button } from '../ui/button';\n\nimport { GeneratingStar } from '@/components/generating-star';\nimport { Item, ItemHeader, ItemContent, ItemTitle } from '@/components/ui/item';\nimport { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from '@/components/ui/accordion';\nimport { cn } from '@/lib/utils';\nimport { Badge } from '@/components/ui/badge';\nimport { formatDate } from '@/lib/formatDate';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';\n\nimport './message.css';\n\nexport interface RelatedArticle {\n id: string;\n title: string;\n url: string;\n score: number;\n}\n\nexport enum MessageType {\n ACTION = 'action', // user action like 'Next Best Action clicks'\n FEEDBACK = 'feedback', // feedback for up/down vote\n QUESTION = 'question', // user question\n ANSWER = 'answer', // ai generated answer\n}\n\nexport enum Feedback {\n Positive = 'positive',\n Negative = 'negative',\n}\n\n// Shared base fields\ninterface BaseMessage {\n id: string;\n timestamp: Date;\n locale?: string; // only if not using en-US. For formatting dates (overrides context locale)\n}\n\n// AI Answer - has related articles, discard info, confidence\nexport interface AIAnswerMessage extends BaseMessage {\n type: MessageType.ANSWER;\n role: 'ai';\n content: string;\n relatedArticles?: RelatedArticle[];\n discarded?: boolean;\n discardedMeta?: {\n reason: DiscardReason;\n suggestedAnswer?: string;\n };\n confidenceScore?: number;\n}\n\n// User Question\nexport interface UserQuestionMessage extends BaseMessage {\n type: MessageType.QUESTION;\n role: 'user';\n content: string;\n}\n\n// User Feedback - requires feedback field\nexport interface UserFeedbackMessage extends BaseMessage {\n type: MessageType.FEEDBACK;\n role: 'user';\n content: string; // optional comment text\n feedback: Feedback;\n}\n\n// User Action\nexport interface UserActionMessage extends BaseMessage {\n type: MessageType.ACTION;\n role: 'user';\n content: string;\n}\n\n// Union type\nexport type MessageProps = AIAnswerMessage | UserQuestionMessage | UserFeedbackMessage | UserActionMessage;\n\n// Type guards for external use\nexport const isAIAnswer = (msg: MessageProps): msg is AIAnswerMessage => msg.type === MessageType.ANSWER;\n\nexport const isUserQuestion = (msg: MessageProps): msg is UserQuestionMessage => msg.type === MessageType.QUESTION;\n\nexport const isFeedback = (msg: MessageProps): msg is UserFeedbackMessage => msg.type === MessageType.FEEDBACK;\n\nexport const isAction = (msg: MessageProps): msg is UserActionMessage => msg.type === MessageType.ACTION;\n\nfunction Message(props: MessageProps) {\n const { id, content, timestamp, locale: localeOverride } = props;\n\n // Get locale from context, with override if provided\n const { locale: contextLocale } = useConvosContext();\n const locale = localeOverride || contextLocale;\n\n const formattedDate = formatDate(timestamp, locale);\n\n if (isAIAnswer(props)) {\n const { relatedArticles, discarded, discardedMeta, confidenceScore } = props;\n\n return (\n <li className=\"relative before-line after-line list-none\">\n <Item className=\"message-item\">\n <ItemHeader className=\"justify-start gap-0\">\n <GeneratingStar variant=\"gradient\" className=\"relative -left-[6px]\" />\n <ItemTitle className=\"text-xs font-bold\">{`Generated answer ${discarded ? '(Discarded)' : ''}`}</ItemTitle>\n </ItemHeader>\n <ItemContent\n className={cn('message-ai-content', {\n 'py-6': !relatedArticles?.length,\n 'pt-6 pb-0': relatedArticles?.length,\n })}\n >\n <div className=\"message-content-wrapper\">\n <FormattedMessage message={{ content }} />\n <div className=\"flex gap-2 justify-end mt-2 items-center\">\n <FeedbackDialog id={id} discarded={discarded} discardedMeta={discardedMeta} />\n {confidenceScore && (\n <Tooltip>\n <TooltipTrigger asChild>\n <DivButton variant=\"outline\" size=\"sm\" className=\"text-xs p-1 h-auto\">\n {confidenceScore}\n </DivButton>\n </TooltipTrigger>\n <TooltipContent>\n <p>Answer score: {confidenceScore}</p>\n </TooltipContent>\n </Tooltip>\n )}\n <span className=\"message-timestamp\">{formattedDate}</span>\n </div>\n </div>\n {!!relatedArticles?.length && (\n <Accordion type=\"single\" collapsible className=\"p-0 custom-dashed-border-t-dark-300 w-full\">\n <AccordionItem value=\"related-articles\">\n <AccordionTrigger className=\"px-6\">Related articles</AccordionTrigger>\n <AccordionContent>\n <ul className=\"message-article-list\">\n {relatedArticles.map((article) => (\n <li\n key={article.id}\n className=\"grid gap-2 grid-cols-[auto_1fr] items-center justify-items-start\"\n >\n <Badge variant=\"warning\">{Math.round(article.score * 100)}%</Badge>\n <Button\n variant=\"link\"\n size=\"xs\"\n asChild\n className=\"flex items-center gap-2 min-w-0 !justify-start w-full\"\n >\n <a href={article.url} target=\"_blank\" rel=\"noopener noreferrer\">\n <span className=\"truncate\">{article.title}</span>\n <ArrowSquareOut className=\"size-4 flex-shrink-0\" weight=\"regular\" />\n </a>\n </Button>\n </li>\n ))}\n </ul>\n </AccordionContent>\n </AccordionItem>\n </Accordion>\n )}\n </ItemContent>\n </Item>\n </li>\n );\n }\n\n // User messages (Question, Feedback, Action)\n const feedback = isFeedback(props) ? props.feedback : null;\n\n return (\n <li className=\"relative list-none before-line--user after-line--user\">\n <Item className=\"message-item\">\n <ItemHeader className=\"basis-0\">\n <UserCircle weight=\"fill\" size={24} />\n </ItemHeader>\n <ItemContent className=\"message-user-content\">\n {isUserQuestion(props) && (\n <div className=\"message-header\">\n <FormattedMessage message={{ content }} />\n <span className=\"message-timestamp\">{formattedDate}</span>\n </div>\n )}\n {isFeedback(props) && feedback && (\n <>\n <div className=\"message-header\">\n <div className=\"message-feedback-text\">\n {feedback === Feedback.Positive ? 'Upvoted as helpful' : 'Downvoted as not helpful'}\n </div>\n <div className=\"message-meta\">\n <span className=\"message-timestamp-simple\">{formattedDate}</span>\n <StatusBadge variant={feedback === Feedback.Positive ? 'success' : 'destructive'}>\n {feedback === Feedback.Positive ? 'Answered' : 'Unable to help'}\n </StatusBadge>\n </div>\n </div>\n {content && <div className=\"text-base\">{content}</div>}\n </>\n )}\n {isAction(props) && (\n <div className=\"message-header\">\n <span className=\"text-subtle text-sm italic\">{content}</span>\n <div className=\"message-meta\">\n <span className=\"message-timestamp-simple\">{formattedDate}</span>\n <StatusBadge variant=\"warning\">Action</StatusBadge>\n </div>\n </div>\n )}\n </ItemContent>\n </Item>\n </li>\n );\n}\n\nexport { Message };\n","// sort the attributes by key so the important ones are at the top\n// namely id, name, email, phone, followed by the rest as is\n// return the sorted keys\nexport function sortAttributeKeys(attributes: Record<string, any>[]): string[] {\n const PRIORITY_KEYS = ['id', 'name', 'email', 'phone'];\n\n if (attributes.length === 0) {\n return [];\n }\n\n const priority = (key: string) => {\n const idx = PRIORITY_KEYS.indexOf(key);\n\n // non-important keys should be at the end, so we return Infinity\n return idx === -1 ? Infinity : idx;\n };\n\n return Object.keys(attributes[0]).sort((a, b) => priority(a) - priority(b));\n}\n","import React, { useState, useEffect } from 'react';\nimport { UserFocus } from '@phosphor-icons/react';\nimport { DialogProps } from '@radix-ui/react-dialog';\nimport { createId } from '@paralleldrive/cuid2';\n\nimport { useConvosContext } from './convos';\nimport { Table, TableBody, TableCell, TableRow, TableHeader, TableHead } from '../ui/table';\nimport { ScrollArea } from '../ui/scroll-area';\n\nimport { Sheet, SheetContent, SheetDescription, SheetHeader, SheetTitle, SheetTrigger } from '@/components/ui/sheet';\nimport { DivButton } from '@/components/ui/div-button';\nimport { sortAttributeKeys } from '@/lib/sortAttributeKeys';\n\nimport './attributes-dialog.css';\n\ninterface Props extends DialogProps {\n conversationId: string;\n}\n\nexport function AttributesDialog({ conversationId, ...args }: Props) {\n const [attributes, setAttributes] = useState<Record<string, any>[]>();\n const [sortedAttributesKeys, setSortedAttributesKeys] = useState<string[]>();\n\n const { fetchAttributes } = useConvosContext();\n\n useEffect(() => {\n void fetchAttributes(conversationId)\n .then((attrs) => {\n setAttributes(attrs);\n setSortedAttributesKeys(sortAttributeKeys(attrs));\n })\n .catch(() => {\n // Error handling - could be extended with error reporting\n });\n }, [fetchAttributes, conversationId]);\n\n if (!attributes?.length) {\n return null;\n }\n\n return (\n <Sheet modal={false} {...args}>\n <SheetTrigger asChild onClick={(e) => e.stopPropagation()} onKeyUp={(e) => e.stopPropagation()}>\n <DivButton\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-7 [&_svg]:size-6 text-subtlest\"\n aria-label=\"Open Custom attributes dialog\"\n >\n <UserFocus size={24} />\n </DivButton>\n </SheetTrigger>\n <SheetContent className=\"space-y-4\">\n <SheetHeader>\n <SheetTitle className=\"heading-sm m-0\">Custom attributes</SheetTitle>\n <SheetDescription className=\"sr-only\">\n Custom attributes are used to store additional information about the conversation.\n </SheetDescription>\n </SheetHeader>\n {sortedAttributesKeys && (\n <ScrollArea className=\"h-[calc(100vh-8rem)]\">\n {' '}\n {/* 8rem is an approximation, accounting for header, padding, and close button */}\n <Table className=\"bg-surface\" data-test-id=\"attributes-table\">\n <TableHeader>\n <TableRow>\n {sortedAttributesKeys.map((key) => (\n <TableHead key={key} className=\"capitalize font-bold\">\n {key}\n </TableHead>\n ))}\n </TableRow>\n </TableHeader>\n <TableBody>\n {attributes.map((record) => (\n <TableRow key={record?.id ?? createId()} className=\"border-none\">\n {sortedAttributesKeys.map((key) => (\n <TableCell key={key} data-title={key}>\n {record[key]}\n </TableCell>\n ))}\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </ScrollArea>\n )}\n </SheetContent>\n </Sheet>\n );\n}\n","import React from 'react';\n\nimport { StatusBadge } from './status-badge';\nimport { Message } from './message';\nimport { useConvosContext } from './convos';\nimport { AttributesDialog } from './attributes-dialog';\n\nimport { AccordionContent, AccordionItem, AccordionTrigger } from '@/components/ui/accordion';\nimport { Item, ItemContent, ItemDescription, ItemTitle } from '@/components/ui/item';\nimport { cn } from '@/lib/utils';\nimport { formatDate } from '@/lib/formatDate';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/index';\n\ninterface Props {\n locale?: string; // only if not using en-US. For formatting dates (overrides context locale)\n question: string; // the initial query\n timestamp: Date; // created_at date of the conversation thread\n location?: string; // location of the user\n source?: string; // source of the conversation\n status?: React.ComponentProps<typeof StatusBadge>['variant'];\n statusMessage?: string; // status of the conversation - Answered | Article not found | Partial | Unanswered, etc\n hasAttributes?: boolean; // whether the conversation has attributes\n onClick?: () => void; // handler to fetch messages when accordion is clicked\n score?: number; // score of the conversation\n}\n\nexport type ConvoProps = React.ComponentPropsWithRef<typeof AccordionItem> & Props;\n\ntype EnrichedStatusBadgeProps = Pick<ConvoProps, 'score' | 'status' | 'statusMessage'>;\nconst EnrichedStatusBadge = ({ score, status, statusMessage }: EnrichedStatusBadgeProps) => {\n return score ? (\n <Tooltip>\n <TooltipTrigger>\n <StatusBadge variant={status} suffix={score}>\n {statusMessage}\n </StatusBadge>\n </TooltipTrigger>\n <TooltipContent>\n <p>Conversation score: {score}</p>\n </TooltipContent>\n </Tooltip>\n ) : (\n <StatusBadge variant={status} suffix={score}>\n {statusMessage}\n </StatusBadge>\n );\n};\n\n/**\n * Convo component - A single conversation item in an accordion.\n * Displays conversation metadata and messages, with support for lazy loading.\n *\n * This is a presentational component - it receives messages and loading state as props\n * rather than managing fetching logic itself.\n */\nexport function Convo({\n locale: localeOverride,\n value: queryId,\n question,\n timestamp,\n location,\n source,\n status,\n statusMessage,\n hasAttributes,\n onClick,\n className,\n score,\n ...props\n}: ConvoProps) {\n const { getMessages, isLoading: isLoadingFromContext, locale: contextLocale } = useConvosContext();\n\n // Use locale override if provided, otherwise use context locale\n const locale = localeOverride || contextLocale;\n\n // Get messages and loading state from context\n const messages = getMessages(queryId);\n const isLoading = isLoadingFromContext(queryId);\n\n // Format date\n const formattedDate = formatDate(timestamp, locale);\n\n // Create description string: \"Nov 1, 2025, 11:00 AM • United States • Live Widget\"\n // Filters out undefined/null values and joins with bullet separator\n const description = [formattedDate, location, source].filter(Boolean).join(' • ');\n\n const handleAccordionClick = (e: React.MouseEvent) => {\n // Prevent accordion from toggling if click originated from within a dialog\n if ((e.target as HTMLElement).closest('[role=\"dialog\"]')) {\n e.preventDefault();\n e.stopPropagation();\n\n return;\n }\n onClick?.();\n };\n\n return (\n <AccordionItem\n value={queryId}\n className={cn(\n 'border-none rounded-lg bg-dark-100 [&[data-state=\"open\"]]:bg-surface hover:bg-surface [&[data-state=open]]:shadow-md [&[data-state=open]]:shadow-dark-300',\n className,\n )}\n {...props}\n >\n <AccordionTrigger\n className=\"flex-row-reverse px-4 gap-1 items-center [&[data-state=open]]:px-6\"\n onClick={handleAccordionClick}\n >\n <Item size=\"sm\" className=\"flex-1 p-0 justify-between\">\n <ItemContent className=\"max-w-[400px]\">\n <ItemTitle className=\"text-base text-default\">{question}</ItemTitle>\n <ItemDescription className=\"text-xs text-default\">{description}</ItemDescription>\n </ItemContent>\n <div className=\"flex items-center gap-0\">\n {hasAttributes && <AttributesDialog conversationId={queryId} />}\n {/* Add tooltip to say \"Conversation score\", only when there is a score */}\n {status && <EnrichedStatusBadge score={score} status={status} statusMessage={statusMessage} />}\n </div>\n </Item>\n </AccordionTrigger>\n <AccordionContent className=\"flex flex-col gap-4 text-balance px-5\">\n {isLoading ? (\n <div className=\"text-center text-subtle py-4\">Loading messages...</div>\n ) : (\n <ul className=\"list-none space-y-4\">\n {messages.slice(1).map((message) => (\n <Message key={message.id} {...message} />\n ))}\n </ul>\n )}\n </AccordionContent>\n </AccordionItem>\n );\n}\n","import React from 'react';\n\nimport { Convo, ConvoProps } from './convo';\nimport { MessageProps } from './message';\nimport { AnswerDiagnostics } from './answer-diagnostics';\nimport { DiscardReason } from './discard-form';\n\nimport { Accordion } from '@/components/ui/accordion';\n\n// Context types and implementation\ninterface ConvosContextValue {\n // Fetch functions\n fetchMessages: (conversationId: string) => Promise<MessageProps[]>;\n fetchAttributes: (conversationId: string) => Promise<Record<string, any>[]>;\n\n // Messages and loading state\n getMessages: (conversationId: string) => MessageProps[];\n isLoading: (conversationId: string) => boolean;\n handleFetchMessages: (conversationId: string) => void;\n\n // Locale for date formatting\n locale?: string;\n\n // Discard dialog functions\n fetchAnswerDiagnostics: (messageId: string) => Promise<AnswerDiagnostics>;\n onDiscard: (id: string, reason: DiscardReason, suggestedAnswer?: string) => Promise<void>;\n onApprove: (id: string) => Promise<void>;\n}\n\nconst ConvosContext = React.createContext<ConvosContextValue | undefined>(undefined);\n\nexport function useConvosContext() {\n const context = React.useContext(ConvosContext);\n if (context === undefined) {\n throw new Error('useConvosContext must be used within a ConvosProvider');\n }\n\n return context;\n}\n\ninterface ConvosProviderProps {\n children: React.ReactNode;\n value: ConvosContextValue;\n}\n\nexport function ConvosProvider({ children, value }: ConvosProviderProps) {\n return <ConvosContext.Provider value={value}>{children}</ConvosContext.Provider>;\n}\n\ninterface ConvosProps {\n convos: ConvoProps[];\n fetchMessages: (conversationId: string) => Promise<MessageProps[]>; // required fetch function for lazy loading\n fetchAttributes: (conversationId: string) => Promise<Record<string, any>[]>; // required fetch function for lazy loading\n fetchAnswerDiagnostics: (messageId: string) => Promise<AnswerDiagnostics>;\n onDiscard: (id: string, reason: DiscardReason, suggestedAnswer?: string) => Promise<void>;\n onApprove: (id: string) => Promise<void>;\n}\n\n/**\n * Convos component - Displays a list of conversations in an accordion.\n * Messages are always lazy loaded when accordion items are opened.\n *\n * @param convos - Array of conversation data\n * @param fetchMessages - Async function to fetch messages for a conversation\n */\nexport function Convos({\n convos,\n fetchMessages,\n fetchAttributes,\n fetchAnswerDiagnostics,\n onDiscard,\n onApprove,\n}: ConvosProps) {\n // Maps conversation IDs to their fetched messages\n const [messagesMap, setMessagesMap] = React.useState<Record<string, MessageProps[]>>({});\n\n // Tracks which conversations are currently loading messages\n const [loadingMap, setLoadingMap] = React.useState<Record<string, boolean>>({});\n\n // Refs used to check fetch status without causing re-renders\n // These are updated synchronously and don't trigger React re-renders\n const fetchedSetRef = React.useRef<Set<string>>(new Set());\n const loadingMapRef = React.useRef<Record<string, boolean>>({});\n\n /**\n * Handles fetching messages when an accordion item is clicked.\n * Prevents duplicate fetches by checking refs before making the request.\n * Updates both refs (for synchronous checks) and state (for UI updates).\n */\n const handleFetchMessages = React.useCallback(\n (conversationId: string) => {\n // Skip if already fetched or currently loading\n if (fetchedSetRef.current.has(conversationId) || loadingMapRef.current[conversationId]) {\n return;\n }\n\n // Set loading state in both ref (for quick checks) and state (for UI)\n loadingMapRef.current[conversationId] = true;\n setLoadingMap((prev) => ({ ...prev, [conversationId]: true }));\n\n fetchMessages(conversationId)\n .then((fetchedMessages) => {\n // Store fetched messages and mark as fetched\n setMessagesMap((prev) => ({ ...prev, [conversationId]: fetchedMessages }));\n fetchedSetRef.current.add(conversationId);\n })\n .catch(() => {\n // Error handling - could be extended with error reporting\n })\n .finally(() => {\n // Clear loading state from both ref and state\n delete loadingMapRef.current[conversationId];\n setLoadingMap((prev) => {\n const newMap = { ...prev };\n delete newMap[conversationId];\n\n return newMap;\n });\n });\n },\n [fetchMessages],\n );\n\n // Create context value - use the first convo's locale as default, or allow override\n const defaultLocale = convos[0]?.locale;\n\n const contextValue = React.useMemo(\n () => ({\n fetchMessages,\n fetchAttributes,\n getMessages: (conversationId: string) => messagesMap[conversationId] || [],\n isLoading: (conversationId: string) => loadingMap[conversationId] || false,\n handleFetchMessages,\n locale: defaultLocale,\n fetchAnswerDiagnostics: (messageId: string) => fetchAnswerDiagnostics(messageId),\n onDiscard,\n onApprove,\n }),\n [\n fetchMessages,\n fetchAttributes,\n messagesMap,\n loadingMap,\n handleFetchMessages,\n defaultLocale,\n fetchAnswerDiagnostics,\n onDiscard,\n onApprove,\n ],\n );\n\n return (\n <ConvosProvider value={contextValue}>\n <Accordion type=\"single\" collapsible className=\"w-full space-y-2\">\n {convos.map((convo) => (\n <Convo\n {...convo}\n key={convo.value}\n // Trigger fetch when accordion trigger is clicked\n onClick={() => handleFetchMessages(convo.value)}\n />\n ))}\n </Accordion>\n </ConvosProvider>\n );\n}\n"],"names":["React","DiscardReason","MessageType","Feedback"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAUO,SAAS,YAAY,EAAE,SAAA,EAAW,QAAQ,QAAA,EAAU,GAAG,OAAM,EAAU;AAC5E,EAAA,uBACEA,cAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,0CAA0C,MAAA,IAAU,aAAA,EAAe,SAAS,CAAA,EAAA,+CAC5F,KAAA,EAAA,EAAO,GAAG,KAAA,EAAA,kBACTA,cAAA,CAAA,aAAA,CAAC,SAAI,SAAA,EAAU,yBAAA,EAAA,kBACbA,cAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAO,QAAO,MAAA,EAAO,IAAA,EAAM,CAAA,EAAG,SAAA,EAAU,UAAS,CAAA,EACjD,QACH,CACF,CAAA,EACC,0BAAUA,cAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,sBAAA,EAAA,EAAwB,MAAO,CAC5D,CAAA;AAEJ;;ACKO,SAAS,wBAAA,CAAyB,EAAE,SAAA,EAAU,EAA2B;AAC9E,EAAA,MAAM,EAAE,sBAAA,EAAuB,GAAI,gBAAA,EAAiB;AACpD,EAAA,MAAM,CAAC,iBAAA,EAAmB,oBAAoB,CAAA,GAAI,SAAmC,IAAI,CAAA;AACzF,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAAS,IAAI,CAAA;AAE/C,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,KAAK,sBAAA,CAAuB,SAAS,CAAA,CAClC,IAAA,CAAK,CAAC,WAAA,KAAgB,oBAAA,CAAqB,WAAW,CAAC,CAAA,CACvD,OAAA,CAAQ,MAAM,YAAA,CAAa,KAAK,CAAC,CAAA;AAAA,EACtC,CAAA,EAAG,CAAC,sBAAA,EAAwB,SAAS,CAAC,CAAA;AAEtC,EAAA,uBACEA,cAAA,CAAA,aAAA,CAAC,SAAI,SAAA,EAAU,mDAAA,EAAoD,aAAU,kCAAA,EAAA,EAC1E,SAAA,gDACE,KAAA,EAAA,EAAI,SAAA,EAAU,6DACbA,cAAA,CAAA,aAAA,CAAC,OAAA,EAAA,IAAQ,CACX,CAAA,mBAEAA,cAAA,CAAA,aAAA,CAAAA,cAAA,CAAA,QAAA,EAAA,IAAA,EACG,qCACCA,cAAA,CAAA,aAAA,CAAAA,cAAA,CAAA,QAAA,EAAA,IAAA,kBACEA,cAAA,CAAA,aAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,4CAAA,EAAA,kBACZA,cAAA,CAAA,aAAA,CAAC,SAAI,SAAA,EAAU,qBAAA,EAAA,+CACZ,IAAA,EAAA,EAAG,SAAA,EAAU,gBAAa,YAAU,CAAA,+CACpC,IAAA,EAAA,EAAG,SAAA,EAAU,aAAW,iBAAA,CAAkB,gBAAiB,CAC9D,CAAA,EACC,iBAAA,CAAkB,0CACjBA,cAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qBAAA,EAAA,kBACbA,cAAA,CAAA,aAAA,CAAC,IAAA,EAAA,EAAG,WAAU,YAAA,EAAA,EAAa,aAAW,mBACtCA,cAAA,CAAA,aAAA,CAAC,IAAA,EAAA,EAAG,WAAU,SAAA,EAAA,EAAW,iBAAA,CAAkB,sBAAuB,CACpE,CAAA,EAED,kBAAkB,uBAAA,oBACjBA,cAAA,CAAA,aAAA,CAAC,SAAI,SAAA,EAAU,qBAAA,EAAA,+CACZ,IAAA,EAAA,EAAG,SAAA,EAAU,YAAA,EAAA,EAAa,WAAS,CAAA,kBACpCA,cAAA,CAAA,aAAA,CAAC,QAAG,SAAA,EAAU,SAAA,EAAA,EAAW,kBAAkB,uBAAwB,CACrE,GAED,iBAAA,CAAkB,mBAAA,oBACjBA,cAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qBAAA,EAAA,+CACZ,IAAA,EAAA,EAAG,SAAA,EAAU,gBAAa,SAAO,CAAA,+CACjC,IAAA,EAAA,EAAG,SAAA,EAAU,SAAA,EAAA,EAAW,iBAAA,CAAkB,mBAAoB,CACjE,CAEJ,CAAA,EACC,iBAAA,CAAkB,4CACjBA,cAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,WAAU,qBAAA,EAAsB,WAAA,EAAU,8CAC7CA,cAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAK,WAAU,YAAA,EAAA,EAAa,eAAa,mBAC1CA,cAAA,CAAA,aAAA,CAAC,GAAA,EAAA,EAAE,WAAU,cAAA,EAAA,EAAgB,iBAAA,CAAkB,wBAAyB,CAC1E,CAAA,EAED,iBAAA,CAAkB,yBAAyB,iBAAA,CAAkB,qBAAA,CAAsB,SAAS,CAAA,oBAC3FA,cAAA,CAAA,aAAA,CAAC,SAAI,SAAA,EAAU,qBAAA,EAAsB,aAAU,qBAAA,EAAA,kBAC7CA,cAAA,CAAA,aAAA,CAAC,UAAK,SAAA,EAAU,YAAA,EAAA,EAAa,gCAA8B,CAAA,EAC1D,iBAAA,CAAkB,sBAAsB,GAAA,CAAI,CAAC,QAAA,EAAU,KAAA,qBACtDA,cAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,KAAK,KAAA,EAAO,SAAA,EAAU,yBACxB,QAAA,CAAS,gBAAA,iDAAqB,GAAA,EAAA,EAAE,SAAA,EAAU,kBAAgB,QAAA,CAAS,gBAAiB,GACpF,QAAA,CAAS,GAAA,iDACP,MAAA,EAAA,EAAO,OAAA,EAAQ,QAAO,IAAA,EAAK,IAAA,EAAK,SAAA,EAAU,0CAAA,EAA2C,OAAA,EAAO,IAAA,EAAA,+CAC1F,GAAA,EAAA,EAAE,IAAA,EAAM,SAAS,GAAA,EAAK,MAAA,EAAO,UAAS,GAAA,EAAI,qBAAA,EAAA,kBACzCA,cAAA,CAAA,aAAA,CAAC,MAAA,EAAA,IAAA,EAAK,QAAM,CAAA,+CACX,cAAA,EAAA,EAAe,IAAA,EAAM,IAAI,CAC5B,CACF,CAEJ,CACD,CACH,CAEJ,CAEJ,CAEJ,CAAA;AAEJ;;ACzFO,IAAK,aAAA,qBAAAC,cAAAA,KAAL;AACL,EAAAA,eAAA,kBAAA,CAAA,GAAmB,kBAAA;AACnB,EAAAA,eAAA,qBAAA,CAAA,GAAsB,qBAAA;AACtB,EAAAA,eAAA,aAAA,CAAA,GAAc,aAAA;AACd,EAAAA,eAAA,wBAAA,CAAA,GAAyB,wBAAA;AACzB,EAAAA,eAAA,OAAA,CAAA,GAAQ,OAAA;AALE,EAAA,OAAAA,cAAAA;AAAA,CAAA,EAAA,aAAA,IAAA,EAAA,CAAA;AAQL,MAAM,mBAAA,GAAqD;AAAA,EAChE,CAAC,4CAAiC,kBAAA;AAAA,EAClC,CAAC,kDAAoC,qBAAA;AAAA,EACrC,CAAC,kCAA4B,aAAA;AAAA,EAC7B,CAAC,wDAAuC,wBAAA;AAAA,EACxC,CAAC,sBAAsB;AACzB,CAAA;AA0BO,SAAS,WAAA,CAAY;AAAA,EAC1B,SAAA;AAAA,EACA,aAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,aAAA;AAAA,EACA;AACF,CAAA,EAAsC;AACpC,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,QAAA,CAAS,aAAa,KAAK,CAAA;AAC/D,EAAA,MAAM,CAAC,YAAA,EAAc,oBAAoB,CAAA,GAAI,SAAS,KAAK,CAAA;AAC3D,EAAA,MAAM,OAAA,GAAU,OAAwB,IAAI,CAAA;AAC5C,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,SAAS,KAAK,CAAA;AAE9C,EAAA,MAAM,eAAA,GAAkB,CAAC,IAAA,KAAkB;AACzC,IAAA,oBAAA,CAAqB,IAAI,CAAA;AACzB,IAAA,IAAI,aAAA,EAAe,aAAA,CAAc,OAAA,CAAQ,MAAA,GAAS,IAAA;AAAA,EACpD,CAAA;AAGA,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,aAAA,EAAe;AACjB,MAAA,aAAA,CAAc,OAAA,CAAQ,KAAA,GAAQ,MAAM,eAAA,CAAgB,KAAK,CAAA;AAAA,IAC3D;AAAA,EACF,CAAA,EAAG,CAAC,aAAa,CAAC,CAAA;AAElB,EAAA,MAAM;AAAA,IACJ,OAAA;AAAA,IACA,QAAA;AAAA,IACA,YAAA;AAAA,IACA,KAAA;AAAA,IACA,SAAA,EAAW,EAAE,YAAA;AAAa,MACxB,OAAA,CAAyB;AAAA,IAC3B,aAAA,EAAe;AAAA,MACb,QAAQ,aAAA,EAAe,MAAA;AAAA,MACvB,eAAA,EAAiB,eAAe,eAAA,IAAmB;AAAA;AACrD,GACD,CAAA;AAED,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,KAAA,CAAM;AAAA,MACJ,QAAQ,aAAA,EAAe,MAAA;AAAA,MACvB,eAAA,EAAiB,eAAe,eAAA,IAAmB;AAAA,KACpD,CAAA;AAAA,EACH,CAAA,EAAG,CAAC,aAAA,EAAe,KAAK,CAAC,CAAA;AAEzB,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,MAAA,OAAA,CAAQ,OAAA,CAAQ,QAAQ,CAAC,UAAA;AAAA,IAC3B;AAAA,EACF,CAAA,EAAG,CAAC,UAAU,CAAC,CAAA;AAEf,EAAA,MAAM,eAAe,MAAM;AACzB,IAAA,aAAA,CAAc,KAAK,CAAA;AACnB,IAAA,eAAA,CAAgB,KAAK,CAAA;AACrB,IAAA,KAAA,EAAM;AAAA,EACR,CAAA;AAEA,EAAA,MAAM,gBAAgB,MAAM;AAC1B,IAAA,WAAA,CAAY,IAAI,CAAA;AAChB,IAAA,UAAA,CAAW,MAAM,WAAA,CAAY,KAAK,CAAA,EAAG,GAAI,CAAA;AACzC,IAAA,SAAA,EAAU;AAAA,EACZ,CAAA;AAEA,EAAA,MAAM,UAAA,GAAa,SAAA,KAAc,MAAA,IAAa,SAAA,KAAc,IAAA;AAE5D,EAAA,uBACED,cAAA,CAAA,aAAA,CAAC,SAAI,SAAA,EAAW,EAAA,CAAG,aAAa,SAAS,CAAA,EAAA,+CAEtC,KAAA,EAAA,EAAI,SAAA,EAAU,qCACbA,cAAA,CAAA,aAAA,CAAC,IAAA,EAAA,EAAK,aAAa,QAAA,EAAA,kBACjBA,cAAA,CAAA,aAAA,CAAC,+BACCA,cAAA,CAAA,aAAA,CAAC,cAAA,EAAA,EAAe,SAAO,IAAA,EAAA,kBACrBA,cAAA,CAAA,aAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAQ,QAAA;AAAA,MACR,SAAA,EAAW,EAAA;AAAA,QACT,kCAAA;AAAA,QACA,EAAE,YAAA,EAAc,CAAC,UAAA,EAAW;AAAA,QAC5B,EAAE,aAAA,EAAe,SAAA,KAAc,IAAA,EAAK;AAAA,QACpC,EAAE,4BAAA,EAA8B,SAAA,KAAc,KAAA;AAAM,OACtD;AAAA,MACA,IAAA,EAAK,MAAA;AAAA,MACL,QAAA,EAAU,UAAA;AAAA,MACV,OAAA,EAAS;AAAA,KAAA;AAAA,iDAER,QAAA,EAAA,IAAS;AAAA,GAEd,CAAA,kBACAA,cAAA,CAAA,aAAA,CAAC,cAAA,EAAA,IAAA,kBACCA,cAAA,CAAA,aAAA,CAAC,cAAK,oBAAkB,CAC1B,CACF,CACF,mBACAA,cAAA,CAAA,aAAA,CAAC,OAAA,EAAA,IAAA,kBACCA,cAAA,CAAA,aAAA,CAAC,cAAA,EAAA,EAAe,SAAO,IAAA,EAAA,kBACrBA,cAAA,CAAA,aAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAQ,QAAA;AAAA,MACR,SAAA,EAAW,EAAA;AAAA,QACT,kCAAA;AAAA,QACA,EAAE,YAAA,EAAc,CAAC,UAAA,EAAW;AAAA,QAC5B,EAAE,aAAA,EAAe,SAAA,KAAc,KAAA,EAAM;AAAA,QACrC,EAAE,0BAAA,EAA4B,SAAA,KAAc,IAAA;AAAK,OACnD;AAAA,MACA,IAAA,EAAK,MAAA;AAAA,MACL,QAAA,EAAU,UAAA;AAAA,MACV,OAAA,EAAS,MAAM,aAAA,CAAc,CAAC,UAAU;AAAA,KAAA;AAAA,iDAEvC,UAAA,EAAA,IAAW;AAAA,GAEhB,CAAA,kBACAA,cAAA,CAAA,aAAA,CAAC,cAAA,EAAA,IAAA,kBACCA,cAAA,CAAA,aAAA,CAAC,cAAK,oBAAkB,CAC1B,CACF,CACF,CAAA,kBAGAA,cAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,+DAAA;AAAA,QACA,aAAa,iBAAA,GAAoB;AAAA;AACnC,KAAA;AAAA,IAEC,SAAA,mBACCA,cAAA,CAAA,aAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,EAAA,CAAG,oDAAA,EAAsD,UAAA,GAAa,cAAc,MAAM,CAAA;AAAA,QACrG,WAAA,EAAU;AAAA,OAAA;AAAA,sBAEVA,cAAA,CAAA,aAAA,CAAC,SAAI,SAAA,EAAU,WAAA,EAAA,+CACZ,KAAA,EAAA,EAAM,OAAA,EAAQ,QAAA,EAAS,SAAA,EAAU,SAAA,EAAA,EAAU,QAE5C,mBACAA,cAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAK,WAAU,eAAA,EAAA,EACb,aAAA,EAAe,UAAU,mBAAA,CAAoB,aAAA,CAAc,MAAM,CACpE,CACF,CAAA;AAAA,mDACC,KAAA,EAAA,EAAI,SAAA,EAAU,+BACbA,cAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAM,SAAQ,iBAAA,EAAkB,SAAA,EAAU,SAAA,EAAA,EAAU,kBAErD,mBACAA,cAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAK,WAAU,eAAA,EAAA,EAAiB,aAAA,EAAe,eAAgB,CAClE;AAAA,KACF,mBAEAA,cAAA,CAAA,aAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAK,OAAA;AAAA,QACL,QAAA,EAAU,aAAa,QAAQ,CAAA;AAAA,QAC/B,SAAA,EAAW,EAAA;AAAA,UACT,kFAAA;AAAA,UACA,aAAa,WAAA,GAAc;AAAA;AAC7B,OAAA;AAAA,mDAEC,UAAA,EAAA,EAAS,SAAA,EAAU,WAAA,EAAY,WAAA,EAAU,2CACxCA,cAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EAAA,+CACZ,KAAA,EAAA,EAAM,OAAA,EAAQ,UAAS,SAAA,EAAU,YAAA,EAAA,EAAa,QAE/C,CAAA,kBACAA,cAAA,CAAA,aAAA;AAAA,QAAC,UAAA;AAAA,QAAA;AAAA,UACC,OAAA;AAAA,UACA,IAAA,EAAK,QAAA;AAAA,UACL,KAAA,EAAO,EAAE,QAAA,EAAU,IAAA,EAAK;AAAA,UACxB,MAAA,EAAQ,CAAC,EAAE,KAAA,EAAM,qBACfA,cAAA,CAAA,aAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,OAAO,KAAA,CAAM,KAAA;AAAA,cACb,eAAe,KAAA,CAAM,QAAA;AAAA,cACrB,IAAA,EAAM,YAAA;AAAA,cACN,YAAA,EAAc,eAAA;AAAA,cACd,QAAA,EAAQ;AAAA,aAAA;AAAA,4BAERA,cAAA,CAAA,aAAA,CAAC,iBAAc,SAAA,EAAU,4BAAA,EAAA,+CACtB,WAAA,EAAA,EAAY,WAAA,EAAY,mBAAkB,CAC7C,CAAA;AAAA,yDACC,aAAA,EAAA,IAAA,EACE,MAAA,CAAO,OAAO,aAAa,CAAA,CAAE,IAAI,CAAC,MAAA,kDAChC,UAAA,EAAA,EAAW,GAAA,EAAK,QAAQ,KAAA,EAAO,MAAA,EAAA,EAC7B,oBAAoB,MAAM,CAC7B,CACD,CACH;AAAA;AACF;AAAA,yBAGJA,cAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAK,WAAU,iCAAA,EAAA,EAAkC,mJAGlD,CACF,CAAA,kBACAA,cAAA,CAAA,aAAA,CAAC,SAAI,SAAA,EAAU,WAAA,EAAA,+CACZ,KAAA,EAAA,EAAM,OAAA,EAAQ,mBAAkB,SAAA,EAAU,YAAA,EAAA,EAAa,kBAExD,CAAA,kBACAA,cAAA,CAAA,aAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,EAAA,EAAG,iBAAA;AAAA,UACH,QAAA,EAAQ,IAAA;AAAA,UACR,SAAA,EAAW,EAAA;AAAA,UACX,WAAA,EAAY,oEAAA;AAAA,UACZ,IAAA,EAAM,CAAA;AAAA,UACN,SAAA,EAAU,6BAAA;AAAA,UACT,GAAG,SAAS,iBAAiB;AAAA;AAAA,yBAEhCA,cAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iCAAA,EAAA,EAAkC,kDAElD,CACF,CAAA,kBACAA,cAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,WAAU,mCAAA,EAAA,kBACbA,cAAA,CAAA,aAAA,CAAC,UAAO,OAAA,EAAQ,MAAA,EAAO,MAAK,IAAA,EAAK,IAAA,EAAK,QAAA,EAAS,OAAA,EAAS,gBAAc,QAEtE,CAAA,kBACAA,cAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAO,MAAK,QAAA,EAAS,OAAA,EAAQ,QAAA,EAAS,IAAA,EAAK,MAAK,QAAA,EAAU,YAAA,EAAA,EACxD,eAAe,eAAA,GAAkB,QACpC,CACF,CACF;AAAA;AACF,GAGN,CAAA;AAEJ;;ACxPO,SAAS,cAAA,CAAe;AAAA,EAC7B,EAAA;AAAA,EACA,SAAA;AAAA,EACA,aAAA;AAAA,EACA,IAAA,EAAM,YAAA;AAAA,EACN,YAAA,EAAc,oBAAA;AAAA,EACd,GAAG;AACL,CAAA,EAAyC;AACvC,EAAA,MAAM,EAAE,SAAA,EAAW,SAAA,EAAU,GAAI,gBAAA,EAAiB;AAClD,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAI,SAAS,KAAK,CAAA;AACtD,EAAA,MAAM,gBAAgB,MAAA,CAAyB,EAAE,MAAA,EAAQ,KAAA,EAAO,OAAO,MAAM;AAAA,EAAC,GAAG,CAAA;AAGjF,EAAA,MAAM,SAAS,YAAA,IAAgB,YAAA;AAC/B,EAAA,MAAM,YAAY,oBAAA,IAAwB,eAAA;AAE1C,EAAA,MAAM,YAAA,GAAe,OAAO,IAAA,KAA0B;AACpD,IAAA,MAAM,SAAA,CAAU,EAAA,EAAI,IAAA,CAAK,MAAA,EAAQ,IAAA,CAAK,eAAe,CAAA,CAAE,IAAA,CAAK,MAAM,SAAA,CAAU,KAAK,CAAC,CAAA;AAAA,EACpF,CAAA;AAEA,EAAA,MAAM,aAAA,GAAgB,MAAM,SAAA,CAAU,EAAE,CAAA;AAExC,EAAA,uBACEA,cAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAM,KAAA,EAAO,KAAA,EAAO,IAAA,EAAM,QAAQ,YAAA,EAAc,SAAA,EAAY,GAAG,IAAA,EAAA,kBAC9DA,cAAA,CAAA,aAAA,CAAC,OAAA,EAAA,IAAA,+CACE,cAAA,EAAA,EAAe,OAAA,EAAO,IAAA,EAAA,kBACrBA,cAAA,CAAA,aAAA,CAAC,YAAA,EAAA,EAAa,OAAA,EAAO,MAAC,OAAA,EAAS,CAAC,CAAA,KAAM,CAAA,CAAE,eAAA,EAAgB,EAAG,SAAS,CAAC,CAAA,KAAM,CAAA,CAAE,eAAA,EAAgB,EAAA,kBAC3FA,cAAA,CAAA,aAAA,CAAC,aAAU,OAAA,EAAQ,OAAA,EAAQ,SAAA,EAAU,qCAAA,EAAsC,IAAA,EAAK,MAAA,EAAA,+CAC7E,IAAA,EAAA,IAAK,CACR,CACF,CACF,CAAA,kBACAA,cAAA,CAAA,aAAA,CAAC,cAAA,EAAA,IAAA,kBACCA,cAAA,CAAA,aAAA,CAAC,GAAA,EAAA,IAAA,EAAE,oBAAkB,CACvB,CACF,CAAA,kBACAA,cAAA,CAAA,aAAA;AAAA,IAAC,YAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,gBAAA;AAAA,MACV,eAAA,EAAiB,CAAC,CAAA,KAAM;AACtB,QAAA,IAAI,aAAA,CAAc,QAAQ,MAAA,EAAQ;AAChC,UAAA,CAAA,CAAE,cAAA,EAAe;AACjB,UAAA,aAAA,CAAc,QAAQ,KAAA,EAAM;AAAA,QAC9B;AAAA,MACF,CAAA;AAAA,MACA,iBAAA,EAAmB,CAAC,CAAA,KAAM;AACxB,QAAA,IAAI,aAAA,CAAc,QAAQ,MAAA,EAAQ;AAChC,UAAA,CAAA,CAAE,cAAA,EAAe;AAAA,QACnB;AAAA,MACF;AAAA,KAAA;AAAA,oBAEAA,cAAA,CAAA,aAAA,CAAC,WAAA,EAAA,EAAY,SAAA,EAAU,MAAA,EAAA,+CACpB,UAAA,EAAA,EAAW,SAAA,EAAU,gBAAA,EAAA,EAAiB,oBAAkB,mBACzDA,cAAA,CAAA,aAAA,CAAC,gBAAA,EAAA,EAAiB,SAAA,EAAU,SAAA,EAAA,EAAU,8DAEtC,CACF,CAAA;AAAA,oBAEAA,cAAA,CAAA,aAAA,CAAC,UAAA,EAAA,EAAW,SAAA,EAAU,2BAAA,EAAA,kBACpBA,cAAA,CAAA,aAAA;AAAA,MAAC,WAAA;AAAA,MAAA;AAAA,QACC,SAAA;AAAA,QACA,aAAA;AAAA,QACA,QAAA,EAAU,YAAA;AAAA,QACV,SAAA,EAAW,aAAA;AAAA,QACX;AAAA;AAAA,KACF,kBACAA,cAAA,CAAA,aAAA,CAAC,wBAAA,EAAA,EAAyB,SAAA,EAAW,IAAI,CAC3C;AAAA,GAEJ,CAAA;AAEJ;;AC5FO,SAAS,UAAA,CAAW,MAAY,MAAA,EAAiB;AACtD,EAAA,MAAM,aAAA,GAAgB,OAAA;AACtB,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,IAAI,OAAO,cAAc,WAAA,EAAa;AACpC,MAAA,MAAA,GAAS,SAAA,CAAU,QAAA;AAAA,IACrB,CAAA,MAAO;AACL,MAAA,MAAA,GAAS,aAAA;AAAA,IACX;AAAA,EACF;AAEA,EAAA,OAAO,IAAA,CAAK,mBAAmB,MAAA,EAAQ;AAAA,IACrC,KAAA,EAAO,OAAA;AAAA,IACP,GAAA,EAAK,SAAA;AAAA,IACL,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,MAAA,EAAQ,SAAA;AAAA,IACR,MAAA,EAAQ;AAAA,GACT,CAAA;AACH;;ACSO,IAAK,WAAA,qBAAAE,YAAAA,KAAL;AACL,EAAAA,aAAA,QAAA,CAAA,GAAS,QAAA;AACT,EAAAA,aAAA,UAAA,CAAA,GAAW,UAAA;AACX,EAAAA,aAAA,UAAA,CAAA,GAAW,UAAA;AACX,EAAAA,aAAA,QAAA,CAAA,GAAS,QAAA;AAJC,EAAA,OAAAA,YAAAA;AAAA,CAAA,EAAA,WAAA,IAAA,EAAA;AAOL,IAAK,QAAA,qBAAAC,SAAAA,KAAL;AACL,EAAAA,UAAA,UAAA,CAAA,GAAW,UAAA;AACX,EAAAA,UAAA,UAAA,CAAA,GAAW,UAAA;AAFD,EAAA,OAAAA,SAAAA;AAAA,CAAA,EAAA,QAAA,IAAA,EAAA;AAoDL,MAAM,UAAA,GAAa,CAAC,GAAA,KAA8C,GAAA,CAAI,IAAA,KAAS,QAAA;AAE/E,MAAM,cAAA,GAAiB,CAAC,GAAA,KAAkD,GAAA,CAAI,IAAA,KAAS,UAAA;AAEvF,MAAM,UAAA,GAAa,CAAC,GAAA,KAAkD,GAAA,CAAI,IAAA,KAAS,UAAA;AAEnF,MAAM,QAAA,GAAW,CAAC,GAAA,KAAgD,GAAA,CAAI,IAAA,KAAS,QAAA;AAEtF,SAAS,QAAQ,KAAA,EAAqB;AACpC,EAAA,MAAM,EAAE,EAAA,EAAI,OAAA,EAAS,SAAA,EAAW,MAAA,EAAQ,gBAAe,GAAI,KAAA;AAG3D,EAAA,MAAM,EAAE,MAAA,EAAQ,aAAA,EAAc,GAAI,gBAAA,EAAiB;AACnD,EAAA,MAAM,SAAS,cAAA,IAAkB,aAAA;AAEjC,EAAA,MAAM,aAAA,GAAgB,UAAA,CAAW,SAAA,EAAW,MAAM,CAAA;AAElD,EAAA,IAAI,UAAA,CAAW,KAAK,CAAA,EAAG;AACrB,IAAA,MAAM,EAAE,eAAA,EAAiB,SAAA,EAAW,aAAA,EAAe,iBAAgB,GAAI,KAAA;AAEvE,IAAA,uBACEH,cAAA,CAAA,aAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,2CAAA,EAAA,kBACZA,cAAA,CAAA,aAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,cAAA,EAAA,kBACdA,cAAA,CAAA,aAAA,CAAC,UAAA,EAAA,EAAW,SAAA,EAAU,qBAAA,EAAA,kBACpBA,cAAA,CAAA,aAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAQ,UAAA,EAAW,SAAA,EAAU,sBAAA,EAAuB,CAAA,kBACpEA,cAAA,CAAA,aAAA,CAAC,SAAA,EAAA,EAAU,SAAA,EAAU,mBAAA,EAAA,EAAqB,CAAA,iBAAA,EAAoB,SAAA,GAAY,aAAA,GAAgB,EAAE,CAAA,CAAG,CACjG,CAAA,kBACAA,cAAA,CAAA,aAAA;AAAA,MAAC,WAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,GAAG,oBAAA,EAAsB;AAAA,UAClC,MAAA,EAAQ,CAAC,eAAA,EAAiB,MAAA;AAAA,UAC1B,aAAa,eAAA,EAAiB;AAAA,SAC/B;AAAA,OAAA;AAAA,sBAEDA,cAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EAAA,kBACbA,cAAA,CAAA,aAAA,CAAC,oBAAiB,OAAA,EAAS,EAAE,OAAA,EAAQ,EAAG,CAAA,kBACxCA,cAAA,CAAA,aAAA,CAAC,SAAI,SAAA,EAAU,0CAAA,EAAA,kBACbA,cAAA,CAAA,aAAA,CAAC,cAAA,EAAA,EAAe,EAAA,EAAQ,SAAA,EAAsB,aAAA,EAA8B,CAAA,EAC3E,eAAA,oBACCA,cAAA,CAAA,aAAA,CAAC,OAAA,EAAA,IAAA,kBACCA,cAAA,CAAA,aAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAO,wBACrBA,cAAA,CAAA,aAAA,CAAC,SAAA,EAAA,EAAU,OAAA,EAAQ,SAAA,EAAU,IAAA,EAAK,IAAA,EAAK,WAAU,oBAAA,EAAA,EAC9C,eACH,CACF,CAAA,kBACAA,cAAA,CAAA,aAAA,CAAC,cAAA,EAAA,IAAA,+CACE,GAAA,EAAA,IAAA,EAAE,gBAAA,EAAe,eAAgB,CACpC,CACF,CAAA,kBAEFA,cAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,mBAAA,EAAA,EAAqB,aAAc,CACrD,CACF,CAAA;AAAA,MACC,CAAC,CAAC,eAAA,EAAiB,MAAA,oBAClBA,cAAA,CAAA,aAAA,CAAC,SAAA,EAAA,EAAU,IAAA,EAAK,QAAA,EAAS,WAAA,EAAW,IAAA,EAAC,SAAA,EAAU,4CAAA,EAAA,+CAC5C,aAAA,EAAA,EAAc,KAAA,EAAM,kBAAA,EAAA,kBACnBA,cAAA,CAAA,aAAA,CAAC,gBAAA,EAAA,EAAiB,SAAA,EAAU,MAAA,EAAA,EAAO,kBAAgB,mBACnDA,cAAA,CAAA,aAAA,CAAC,gBAAA,EAAA,IAAA,kBACCA,cAAA,CAAA,aAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,sBAAA,EAAA,EACX,eAAA,CAAgB,GAAA,CAAI,CAAC,OAAA,qBACpBA,cAAA,CAAA,aAAA;AAAA,QAAC,IAAA;AAAA,QAAA;AAAA,UACC,KAAK,OAAA,CAAQ,EAAA;AAAA,UACb,SAAA,EAAU;AAAA,SAAA;AAAA,wBAEVA,cAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAM,OAAA,EAAQ,SAAA,EAAA,EAAW,IAAA,CAAK,MAAM,OAAA,CAAQ,KAAA,GAAQ,GAAG,CAAA,EAAE,GAAC,CAAA;AAAA,wBAC3DA,cAAA,CAAA,aAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAQ,MAAA;AAAA,YACR,IAAA,EAAK,IAAA;AAAA,YACL,OAAA,EAAO,IAAA;AAAA,YACP,SAAA,EAAU;AAAA,WAAA;AAAA,0BAEVA,cAAA,CAAA,aAAA,CAAC,OAAE,IAAA,EAAM,OAAA,CAAQ,KAAK,MAAA,EAAO,QAAA,EAAS,GAAA,EAAI,qBAAA,EAAA,kBACxCA,cAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAK,WAAU,UAAA,EAAA,EAAY,OAAA,CAAQ,KAAM,CAAA,kBAC1CA,cAAA,CAAA,aAAA,CAAC,kBAAe,SAAA,EAAU,sBAAA,EAAuB,MAAA,EAAO,SAAA,EAAU,CACpE;AAAA;AACF,OAEH,CACH,CACF,CACF,CACF;AAAA,KAGN,CACF,CAAA;AAAA,EAEJ;AAGA,EAAA,MAAM,QAAA,GAAW,UAAA,CAAW,KAAK,CAAA,GAAI,MAAM,QAAA,GAAW,IAAA;AAEtD,EAAA,uBACEA,cAAA,CAAA,aAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,uDAAA,EAAA,kBACZA,cAAA,CAAA,aAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,cAAA,EAAA,kBACdA,cAAA,CAAA,aAAA,CAAC,UAAA,EAAA,EAAW,SAAA,EAAU,SAAA,EAAA,kBACpBA,cAAA,CAAA,aAAA,CAAC,UAAA,EAAA,EAAW,MAAA,EAAO,MAAA,EAAO,IAAA,EAAM,EAAA,EAAI,CACtC,CAAA,kBACAA,cAAA,CAAA,aAAA,CAAC,WAAA,EAAA,EAAY,SAAA,EAAU,sBAAA,EAAA,EACpB,cAAA,CAAe,KAAK,CAAA,oBACnBA,cAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EAAA,kBACbA,cAAA,CAAA,aAAA,CAAC,gBAAA,EAAA,EAAiB,OAAA,EAAS,EAAE,OAAA,EAAQ,EAAG,CAAA,kBACxCA,cAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,mBAAA,EAAA,EAAqB,aAAc,CACrD,CAAA,EAED,UAAA,CAAW,KAAK,CAAA,IAAK,QAAA,oBACpBA,cAAA,CAAA,aAAA,CAAAA,cAAA,CAAA,QAAA,EAAA,IAAA,kBACEA,cAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EAAA,kBACbA,cAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uBAAA,EAAA,EACZ,QAAA,KAAa,UAAA,kBAAoB,uBAAuB,0BAC3D,CAAA,kBACAA,cAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,cAAA,EAAA,kBACbA,cAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,0BAAA,EAAA,EAA4B,aAAc,CAAA,kBAC1DA,cAAA,CAAA,aAAA,CAAC,WAAA,EAAA,EAAY,OAAA,EAAS,QAAA,KAAa,UAAA,kBAAoB,SAAA,GAAY,aAAA,EAAA,EAChE,QAAA,KAAa,UAAA,kBAAoB,UAAA,GAAa,gBACjD,CACF,CACF,CAAA,EACC,OAAA,oBAAWA,cAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EAAA,EAAa,OAAQ,CAClD,CAAA,EAED,QAAA,CAAS,KAAK,CAAA,oBACbA,cAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EAAA,kBACbA,cAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,4BAAA,EAAA,EAA8B,OAAQ,CAAA,kBACtDA,cAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,cAAA,EAAA,kBACbA,cAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,0BAAA,EAAA,EAA4B,aAAc,CAAA,kBAC1DA,cAAA,CAAA,aAAA,CAAC,WAAA,EAAA,EAAY,OAAA,EAAQ,SAAA,EAAA,EAAU,QAAM,CACvC,CACF,CAEJ,CACF,CACF,CAAA;AAEJ;;ACxNO,SAAS,kBAAkB,UAAA,EAA6C;AAC7E,EAAA,MAAM,aAAA,GAAgB,CAAC,IAAA,EAAM,MAAA,EAAQ,SAAS,OAAO,CAAA;AAErD,EAAA,IAAI,UAAA,CAAW,WAAW,CAAA,EAAG;AAC3B,IAAA,OAAO,EAAC;AAAA,EACV;AAEA,EAAA,MAAM,QAAA,GAAW,CAAC,GAAA,KAAgB;AAChC,IAAA,MAAM,GAAA,GAAM,aAAA,CAAc,OAAA,CAAQ,GAAG,CAAA;AAGrC,IAAA,OAAO,GAAA,KAAQ,KAAK,QAAA,GAAW,GAAA;AAAA,EACjC,CAAA;AAEA,EAAA,OAAO,MAAA,CAAO,IAAA,CAAK,UAAA,CAAW,CAAC,CAAC,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,MAAM,QAAA,CAAS,CAAC,CAAA,GAAI,QAAA,CAAS,CAAC,CAAC,CAAA;AAC5E;;ACCO,SAAS,gBAAA,CAAiB,EAAE,cAAA,EAAgB,GAAG,MAAK,EAAU;AACnE,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,QAAA,EAAgC;AACpE,EAAA,MAAM,CAAC,oBAAA,EAAsB,uBAAuB,CAAA,GAAI,QAAA,EAAmB;AAE3E,EAAA,MAAM,EAAE,eAAA,EAAgB,GAAI,gBAAA,EAAiB;AAE7C,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,KAAK,eAAA,CAAgB,cAAc,CAAA,CAChC,IAAA,CAAK,CAAC,KAAA,KAAU;AACf,MAAA,aAAA,CAAc,KAAK,CAAA;AACnB,MAAA,uBAAA,CAAwB,iBAAA,CAAkB,KAAK,CAAC,CAAA;AAAA,IAClD,CAAC,CAAA,CACA,KAAA,CAAM,MAAM;AAAA,IAEb,CAAC,CAAA;AAAA,EACL,CAAA,EAAG,CAAC,eAAA,EAAiB,cAAc,CAAC,CAAA;AAEpC,EAAA,IAAI,CAAC,YAAY,MAAA,EAAQ;AACvB,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,uBACEA,cAAA,CAAA,aAAA,CAAC,SAAM,KAAA,EAAO,KAAA,EAAQ,GAAG,IAAA,EAAA,kBACvBA,cAAA,CAAA,aAAA,CAAC,gBAAa,OAAA,EAAO,IAAA,EAAC,SAAS,CAAC,CAAA,KAAM,EAAE,eAAA,EAAgB,EAAG,SAAS,CAAC,CAAA,KAAM,CAAA,CAAE,eAAA,EAAgB,EAAA,kBAC3FA,cAAA,CAAA,aAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAQ,OAAA;AAAA,MACR,IAAA,EAAK,MAAA;AAAA,MACL,SAAA,EAAU,qCAAA;AAAA,MACV,YAAA,EAAW;AAAA,KAAA;AAAA,oBAEXA,cAAA,CAAA,aAAA,CAAC,SAAA,EAAA,EAAU,IAAA,EAAM,EAAA,EAAI;AAAA,GAEzB,CAAA,kBACAA,cAAA,CAAA,aAAA,CAAC,gBAAa,SAAA,EAAU,WAAA,EAAA,+CACrB,WAAA,EAAA,IAAA,kBACCA,cAAA,CAAA,aAAA,CAAC,UAAA,EAAA,EAAW,SAAA,EAAU,oBAAiB,mBAAiB,CAAA,+CACvD,gBAAA,EAAA,EAAiB,SAAA,EAAU,aAAU,oFAEtC,CACF,CAAA,EACC,oBAAA,iDACE,UAAA,EAAA,EAAW,SAAA,EAAU,0BACnB,GAAA,kBAEDA,cAAA,CAAA,aAAA,CAAC,SAAM,SAAA,EAAU,YAAA,EAAa,cAAA,EAAa,kBAAA,EAAA,+CACxC,WAAA,EAAA,IAAA,kBACCA,cAAA,CAAA,aAAA,CAAC,gBACE,oBAAA,CAAqB,GAAA,CAAI,CAAC,GAAA,qBACzBA,cAAA,CAAA,aAAA,CAAC,SAAA,EAAA,EAAU,GAAA,EAAU,WAAU,sBAAA,EAAA,EAC5B,GACH,CACD,CACH,CACF,mBACAA,cAAA,CAAA,aAAA,CAAC,SAAA,EAAA,IAAA,EACE,UAAA,CAAW,GAAA,CAAI,CAAC,MAAA,qBACfA,cAAA,CAAA,aAAA,CAAC,YAAS,GAAA,EAAK,MAAA,EAAQ,MAAM,QAAA,EAAS,EAAG,SAAA,EAAU,aAAA,EAAA,EAChD,qBAAqB,GAAA,CAAI,CAAC,wBACzBA,cAAA,CAAA,aAAA,CAAC,SAAA,EAAA,EAAU,KAAU,YAAA,EAAY,GAAA,EAAA,EAC9B,OAAO,GAAG,CACb,CACD,CACH,CACD,CACH,CACF,CACF,CAEJ,CACF,CAAA;AAEJ;;AC7DA,MAAM,sBAAsB,CAAC,EAAE,KAAA,EAAO,MAAA,EAAQ,eAAc,KAAgC;AAC1F,EAAA,OAAO,KAAA,mBACLA,cAAA,CAAA,aAAA,CAAC,OAAA,EAAA,IAAA,kBACCA,cAAA,CAAA,aAAA,CAAC,cAAA,EAAA,IAAA,kBACCA,cAAA,CAAA,aAAA,CAAC,WAAA,EAAA,EAAY,OAAA,EAAS,MAAA,EAAQ,MAAA,EAAQ,KAAA,EAAA,EACnC,aACH,CACF,CAAA,kBACAA,cAAA,CAAA,aAAA,CAAC,cAAA,EAAA,IAAA,kBACCA,cAAA,CAAA,aAAA,CAAC,GAAA,EAAA,IAAA,EAAE,sBAAA,EAAqB,KAAM,CAChC,CACF,CAAA,mBAEAA,cAAA,CAAA,aAAA,CAAC,WAAA,EAAA,EAAY,OAAA,EAAS,MAAA,EAAQ,MAAA,EAAQ,SACnC,aACH,CAAA;AAEJ,CAAA;AASO,SAAS,KAAA,CAAM;AAAA,EACpB,MAAA,EAAQ,cAAA;AAAA,EACR,KAAA,EAAO,OAAA;AAAA,EACP,QAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,aAAA;AAAA,EACA,aAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAe;AACb,EAAA,MAAM,EAAE,WAAA,EAAa,SAAA,EAAW,sBAAsB,MAAA,EAAQ,aAAA,KAAkB,gBAAA,EAAiB;AAGjG,EAAA,MAAM,SAAS,cAAA,IAAkB,aAAA;AAGjC,EAAA,MAAM,QAAA,GAAW,YAAY,OAAO,CAAA;AACpC,EAAA,MAAM,SAAA,GAAY,qBAAqB,OAAO,CAAA;AAG9C,EAAA,MAAM,aAAA,GAAgB,UAAA,CAAW,SAAA,EAAW,MAAM,CAAA;AAIlD,EAAA,MAAM,WAAA,GAAc,CAAC,aAAA,EAAe,QAAA,EAAU,MAAM,EAAE,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,KAAK,CAAA;AAEhF,EAAA,MAAM,oBAAA,GAAuB,CAAC,CAAA,KAAwB;AAEpD,IAAA,IAAK,CAAA,CAAE,MAAA,CAAuB,OAAA,CAAQ,iBAAiB,CAAA,EAAG;AACxD,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,CAAA,CAAE,eAAA,EAAgB;AAElB,MAAA;AAAA,IACF;AACA,IAAA,OAAA,IAAU;AAAA,EACZ,CAAA;AAEA,EAAA,uBACEA,cAAA,CAAA,aAAA;AAAA,IAAC,aAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,OAAA;AAAA,MACP,SAAA,EAAW,EAAA;AAAA,QACT,2JAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA,KAAA;AAAA,oBAEJA,cAAA,CAAA,aAAA;AAAA,MAAC,gBAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,oEAAA;AAAA,QACV,OAAA,EAAS;AAAA,OAAA;AAAA,mDAER,IAAA,EAAA,EAAK,IAAA,EAAK,MAAK,SAAA,EAAU,4BAAA,EAAA,+CACvB,WAAA,EAAA,EAAY,SAAA,EAAU,eAAA,EAAA,kBACrBA,cAAA,CAAA,aAAA,CAAC,aAAU,SAAA,EAAU,wBAAA,EAAA,EAA0B,QAAS,CAAA,kBACxDA,cAAA,CAAA,aAAA,CAAC,mBAAgB,SAAA,EAAU,sBAAA,EAAA,EAAwB,WAAY,CACjE,mBACAA,cAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yBAAA,EAAA,EACZ,aAAA,iDAAkB,gBAAA,EAAA,EAAiB,cAAA,EAAgB,OAAA,EAAS,CAAA,EAE5D,0BAAUA,cAAA,CAAA,aAAA,CAAC,mBAAA,EAAA,EAAoB,OAAc,MAAA,EAAgB,aAAA,EAA8B,CAC9F,CACF;AAAA,KACF;AAAA,oBACAA,cAAA,CAAA,aAAA,CAAC,gBAAA,EAAA,EAAiB,SAAA,EAAU,uCAAA,EAAA,EACzB,SAAA,mBACCA,cAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8BAAA,EAAA,EAA+B,qBAAmB,CAAA,mBAEjEA,cAAA,CAAA,aAAA,CAAC,QAAG,SAAA,EAAU,qBAAA,EAAA,EACX,QAAA,CAAS,KAAA,CAAM,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,4BACtBA,cAAA,CAAA,aAAA,CAAC,OAAA,EAAA,EAAQ,GAAA,EAAK,OAAA,CAAQ,EAAA,EAAK,GAAG,OAAA,EAAS,CACxC,CACH,CAEJ;AAAA,GACF;AAEJ;;AC1GA,MAAM,aAAA,GAAgBA,cAAA,CAAM,aAAA,CAA8C,MAAS,CAAA;AAE5E,SAAS,gBAAA,GAAmB;AACjC,EAAA,MAAM,OAAA,GAAUA,cAAA,CAAM,UAAA,CAAW,aAAa,CAAA;AAC9C,EAAA,IAAI,YAAY,MAAA,EAAW;AACzB,IAAA,MAAM,IAAI,MAAM,uDAAuD,CAAA;AAAA,EACzE;AAEA,EAAA,OAAO,OAAA;AACT;AAOO,SAAS,cAAA,CAAe,EAAE,QAAA,EAAU,KAAA,EAAM,EAAwB;AACvE,EAAA,uBAAOA,cAAA,CAAA,aAAA,CAAC,aAAA,CAAc,QAAA,EAAd,EAAuB,SAAe,QAAS,CAAA;AACzD;AAkBO,SAAS,MAAA,CAAO;AAAA,EACrB,MAAA;AAAA,EACA,aAAA;AAAA,EACA,eAAA;AAAA,EACA,sBAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,EAAgB;AAEd,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,IAAIA,cAAA,CAAM,QAAA,CAAyC,EAAE,CAAA;AAGvF,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,IAAIA,cAAA,CAAM,QAAA,CAAkC,EAAE,CAAA;AAI9E,EAAA,MAAM,aAAA,GAAgBA,cAAA,CAAM,MAAA,iBAAoB,IAAI,KAAK,CAAA;AACzD,EAAA,MAAM,aAAA,GAAgBA,cAAA,CAAM,MAAA,CAAgC,EAAE,CAAA;AAO9D,EAAA,MAAM,sBAAsBA,cAAA,CAAM,WAAA;AAAA,IAChC,CAAC,cAAA,KAA2B;AAE1B,MAAA,IAAI,aAAA,CAAc,QAAQ,GAAA,CAAI,cAAc,KAAK,aAAA,CAAc,OAAA,CAAQ,cAAc,CAAA,EAAG;AACtF,QAAA;AAAA,MACF;AAGA,MAAA,aAAA,CAAc,OAAA,CAAQ,cAAc,CAAA,GAAI,IAAA;AACxC,MAAA,aAAA,CAAc,CAAC,UAAU,EAAE,GAAG,MAAM,CAAC,cAAc,GAAG,IAAA,EAAK,CAAE,CAAA;AAE7D,MAAA,aAAA,CAAc,cAAc,CAAA,CACzB,IAAA,CAAK,CAAC,eAAA,KAAoB;AAEzB,QAAA,cAAA,CAAe,CAAC,UAAU,EAAE,GAAG,MAAM,CAAC,cAAc,GAAG,eAAA,EAAgB,CAAE,CAAA;AACzE,QAAA,aAAA,CAAc,OAAA,CAAQ,IAAI,cAAc,CAAA;AAAA,MAC1C,CAAC,CAAA,CACA,KAAA,CAAM,MAAM;AAAA,MAEb,CAAC,CAAA,CACA,OAAA,CAAQ,MAAM;AAEb,QAAA,OAAO,aAAA,CAAc,QAAQ,cAAc,CAAA;AAC3C,QAAA,aAAA,CAAc,CAAC,IAAA,KAAS;AACtB,UAAA,MAAM,MAAA,GAAS,EAAE,GAAG,IAAA,EAAK;AACzB,UAAA,OAAO,OAAO,cAAc,CAAA;AAE5B,UAAA,OAAO,MAAA;AAAA,QACT,CAAC,CAAA;AAAA,MACH,CAAC,CAAA;AAAA,IACL,CAAA;AAAA,IACA,CAAC,aAAa;AAAA,GAChB;AAGA,EAAA,MAAM,aAAA,GAAgB,MAAA,CAAO,CAAC,CAAA,EAAG,MAAA;AAEjC,EAAA,MAAM,eAAeA,cAAA,CAAM,OAAA;AAAA,IACzB,OAAO;AAAA,MACL,aAAA;AAAA,MACA,eAAA;AAAA,MACA,aAAa,CAAC,cAAA,KAA2B,WAAA,CAAY,cAAc,KAAK,EAAC;AAAA,MACzE,SAAA,EAAW,CAAC,cAAA,KAA2B,UAAA,CAAW,cAAc,CAAA,IAAK,KAAA;AAAA,MACrE,mBAAA;AAAA,MACA,MAAA,EAAQ,aAAA;AAAA,MACR,sBAAA,EAAwB,CAAC,SAAA,KAAsB,sBAAA,CAAuB,SAAS,CAAA;AAAA,MAC/E,SAAA;AAAA,MACA;AAAA,KACF,CAAA;AAAA,IACA;AAAA,MACE,aAAA;AAAA,MACA,eAAA;AAAA,MACA,WAAA;AAAA,MACA,UAAA;AAAA,MACA,mBAAA;AAAA,MACA,aAAA;AAAA,MACA,sBAAA;AAAA,MACA,SAAA;AAAA,MACA;AAAA;AACF,GACF;AAEA,EAAA,uBACEA,cAAA,CAAA,aAAA,CAAC,cAAA,EAAA,EAAe,KAAA,EAAO,YAAA,EAAA,+CACpB,SAAA,EAAA,EAAU,IAAA,EAAK,QAAA,EAAS,WAAA,EAAW,MAAC,SAAA,EAAU,kBAAA,EAAA,EAC5C,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,qBACXA,cAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACE,GAAG,KAAA;AAAA,MACJ,KAAK,KAAA,CAAM,KAAA;AAAA,MAEX,OAAA,EAAS,MAAM,mBAAA,CAAoB,KAAA,CAAM,KAAK;AAAA;AAAA,GAEjD,CACH,CACF,CAAA;AAEJ;;;;"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { D as DataTable } from '../chunks/data-table.
|
|
1
|
+
export { D as DataTable } from '../chunks/data-table.DbcAYxMY.js';
|
|
2
2
|
//# sourceMappingURL=data-table.js.map
|