@surf-kit/agent 0.2.1 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +184 -12
- package/README.md +1 -1
- package/dist/agent-identity/index.cjs +1 -0
- package/dist/agent-identity/index.cjs.map +1 -1
- package/dist/agent-identity/index.js +2 -0
- package/dist/agent-identity/index.js.map +1 -1
- package/dist/chat/index.cjs +626 -204
- package/dist/chat/index.cjs.map +1 -1
- package/dist/chat/index.d.cts +11 -6
- package/dist/chat/index.d.ts +11 -6
- package/dist/chat/index.js +608 -185
- package/dist/chat/index.js.map +1 -1
- package/dist/{chat--OifhIRe.d.ts → chat-BIIDOGrD.d.ts} +10 -1
- package/dist/{chat-ChYl2XjV.d.cts → chat-CGamM7Mz.d.cts} +10 -1
- package/dist/confidence/index.cjs +1 -0
- package/dist/confidence/index.cjs.map +1 -1
- package/dist/confidence/index.js +2 -0
- package/dist/confidence/index.js.map +1 -1
- package/dist/feedback/index.cjs +1 -0
- package/dist/feedback/index.cjs.map +1 -1
- package/dist/feedback/index.js +2 -0
- package/dist/feedback/index.js.map +1 -1
- package/dist/{hooks-DLfF18IU.d.cts → hooks-B1NYoLLs.d.cts} +21 -5
- package/dist/{hooks-BGs8-4GK.d.ts → hooks-CTeEqnBQ.d.ts} +21 -5
- package/dist/hooks.cjs +127 -81
- package/dist/hooks.cjs.map +1 -1
- package/dist/hooks.d.cts +3 -3
- package/dist/hooks.d.ts +3 -3
- package/dist/hooks.js +128 -81
- package/dist/hooks.js.map +1 -1
- package/dist/index.cjs +687 -265
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +3 -3
- package/dist/index.d.ts +3 -3
- package/dist/index.js +647 -224
- package/dist/index.js.map +1 -1
- package/dist/layouts/index.cjs +647 -225
- package/dist/layouts/index.cjs.map +1 -1
- package/dist/layouts/index.d.cts +1 -1
- package/dist/layouts/index.d.ts +1 -1
- package/dist/layouts/index.js +624 -201
- package/dist/layouts/index.js.map +1 -1
- package/dist/mcp/index.cjs +2 -1
- package/dist/mcp/index.cjs.map +1 -1
- package/dist/mcp/index.js +4 -2
- package/dist/mcp/index.js.map +1 -1
- package/dist/response/index.cjs +67 -12
- package/dist/response/index.cjs.map +1 -1
- package/dist/response/index.d.cts +2 -2
- package/dist/response/index.d.ts +2 -2
- package/dist/response/index.js +66 -10
- package/dist/response/index.js.map +1 -1
- package/dist/sources/index.cjs +31 -1
- package/dist/sources/index.cjs.map +1 -1
- package/dist/sources/index.js +32 -1
- package/dist/sources/index.js.map +1 -1
- package/dist/streaming/index.cjs +203 -93
- package/dist/streaming/index.cjs.map +1 -1
- package/dist/streaming/index.d.cts +4 -3
- package/dist/streaming/index.d.ts +4 -3
- package/dist/streaming/index.js +174 -73
- package/dist/streaming/index.js.map +1 -1
- package/dist/{streaming-DbQxScpi.d.ts → streaming-Bx-ff2tt.d.ts} +1 -1
- package/dist/{streaming-DfT22A0z.d.cts → streaming-x7umFHoP.d.cts} +1 -1
- package/package.json +17 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/confidence/index.ts","../../src/confidence/ConfidenceBadge/ConfidenceBadge.tsx","../../src/confidence/ConfidenceBreakdown/ConfidenceBreakdown.tsx","../../src/confidence/ConfidenceMeter/ConfidenceMeter.tsx","../../src/confidence/VerificationBadge/VerificationBadge.tsx","../../src/confidence/VerificationDetail/VerificationDetail.tsx"],"sourcesContent":["export { ConfidenceBadge } from './ConfidenceBadge'\nexport type { ConfidenceBadgeProps } from './ConfidenceBadge'\n\nexport { ConfidenceBreakdown } from './ConfidenceBreakdown'\nexport type { ConfidenceBreakdownProps } from './ConfidenceBreakdown'\n\nexport { ConfidenceMeter } from './ConfidenceMeter'\nexport type { ConfidenceMeterProps } from './ConfidenceMeter'\n\nexport { VerificationBadge } from './VerificationBadge'\nexport type { VerificationBadgeProps } from './VerificationBadge'\n\nexport { VerificationDetail } from './VerificationDetail'\nexport type { VerificationDetailProps } from './VerificationDetail'\n","import React from 'react'\nimport { Badge } from '@surf-kit/core'\nimport type { ConfidenceBreakdown } from '../../types/agent'\n\nexport type ConfidenceBadgeProps = {\n confidence: ConfidenceBreakdown\n className?: string\n}\n\nconst intentMap = {\n high: 'success',\n medium: 'warning',\n low: 'error',\n} as const\n\nconst labelMap = {\n high: 'High confidence',\n medium: 'Medium confidence',\n low: 'Low confidence',\n} as const\n\nfunction ConfidenceBadge({ confidence, className }: ConfidenceBadgeProps) {\n const level = confidence.overall\n\n return (\n <Badge\n intent={intentMap[level]}\n size=\"sm\"\n role=\"status\"\n aria-label={labelMap[level]}\n className={className}\n >\n {level.charAt(0).toUpperCase() + level.slice(1)}\n </Badge>\n )\n}\n\nexport { ConfidenceBadge }\n","import React, { useState } from 'react'\nimport type { ConfidenceBreakdown as ConfidenceBreakdownType } from '../../types/agent'\nimport { ConfidenceBadge } from '../ConfidenceBadge'\nimport { ConfidenceMeter } from '../ConfidenceMeter'\n\nexport type ConfidenceBreakdownProps = {\n confidence: ConfidenceBreakdownType\n expandable?: boolean\n defaultExpanded?: boolean\n className?: string\n}\n\nconst dimensions: { key: keyof Pick<ConfidenceBreakdownType, 'retrieval_quality' | 'source_authority' | 'answer_groundedness' | 'recency'>; label: string }[] = [\n { key: 'retrieval_quality', label: 'Retrieval Quality' },\n { key: 'source_authority', label: 'Source Authority' },\n { key: 'answer_groundedness', label: 'Answer Groundedness' },\n { key: 'recency', label: 'Recency' },\n]\n\nfunction ConfidenceBreakdown({\n confidence,\n expandable = true,\n defaultExpanded = false,\n className,\n}: ConfidenceBreakdownProps) {\n const [expanded, setExpanded] = useState(defaultExpanded)\n\n const isExpanded = expandable ? expanded : true\n\n return (\n <div className={`rounded-xl border border-border bg-surface ${className ?? ''}`} data-testid=\"confidence-breakdown\">\n <button\n type=\"button\"\n className=\"flex w-full items-center justify-between px-4 py-3 text-left\"\n onClick={() => expandable && setExpanded((prev) => !prev)}\n aria-expanded={isExpanded}\n disabled={!expandable}\n >\n <span className=\"text-sm font-medium text-text-primary\">Confidence</span>\n <ConfidenceBadge confidence={confidence} />\n </button>\n\n {isExpanded && (\n <div\n className=\"border-t border-border px-4 py-3 space-y-3 animate-in fade-in slide-in-from-top-1 duration-200\"\n data-testid=\"confidence-breakdown-details\"\n >\n {dimensions.map((dim) => (\n <ConfidenceMeter\n key={dim.key}\n value={confidence[dim.key]}\n label={dim.label}\n />\n ))}\n {confidence.reasoning && (\n <p className=\"text-xs text-text-secondary mt-2\">{confidence.reasoning}</p>\n )}\n </div>\n )}\n </div>\n )\n}\n\nexport { ConfidenceBreakdown }\n","import React from 'react'\n\nexport type ConfidenceMeterProps = {\n value: number // 0-1\n label: string\n className?: string\n}\n\nfunction getBarColor(value: number): string {\n if (value >= 0.8) return 'bg-green-500'\n if (value >= 0.5) return 'bg-yellow-500'\n return 'bg-red-500'\n}\n\nfunction ConfidenceMeter({ value, label, className }: ConfidenceMeterProps) {\n const clamped = Math.max(0, Math.min(1, value))\n const pct = Math.round(clamped * 100)\n\n return (\n <div className={className} data-testid=\"confidence-meter\">\n <div className=\"flex items-center justify-between mb-1\">\n <span className=\"text-xs font-medium text-text-secondary\">{label}</span>\n <span className=\"text-xs text-text-secondary\">{pct}%</span>\n </div>\n <div\n className=\"h-2 w-full rounded-full bg-surface-secondary overflow-hidden\"\n role=\"progressbar\"\n aria-valuenow={pct}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-label={`${label}: ${pct}%`}\n >\n <div\n className={`h-full rounded-full transition-all duration-300 ${getBarColor(clamped)}`}\n style={{ width: `${pct}%` }}\n />\n </div>\n </div>\n )\n}\n\nexport { ConfidenceMeter }\n","import React from 'react'\nimport { Badge } from '@surf-kit/core'\nimport type { VerificationResult } from '../../types/agent'\n\nexport type VerificationBadgeProps = {\n verification: VerificationResult\n className?: string\n}\n\nconst config = {\n passed: {\n intent: 'success' as const,\n label: 'Verified',\n icon: '\\u2713',\n ariaLabel: 'Verification passed',\n },\n flagged: {\n intent: 'warning' as const,\n label: 'Flagged',\n icon: '\\u26A0',\n ariaLabel: 'Verification flagged',\n },\n failed: {\n intent: 'error' as const,\n label: 'Failed',\n icon: '\\u2717',\n ariaLabel: 'Verification failed',\n },\n} as const\n\nfunction VerificationBadge({ verification, className }: VerificationBadgeProps) {\n const { intent, label, icon, ariaLabel } = config[verification.status]\n\n return (\n <Badge\n intent={intent}\n size=\"sm\"\n role=\"status\"\n aria-label={ariaLabel}\n className={className}\n >\n <span aria-hidden=\"true\" className=\"mr-1\">{icon}</span>\n {label}\n </Badge>\n )\n}\n\nexport { VerificationBadge }\n","import React, { useState } from 'react'\nimport type { VerificationResult } from '../../types/agent'\nimport { VerificationBadge } from '../VerificationBadge'\n\nexport type VerificationDetailProps = {\n verification: VerificationResult\n expandable?: boolean\n defaultExpanded?: boolean\n className?: string\n}\n\nfunction VerificationDetail({\n verification,\n expandable = true,\n defaultExpanded = false,\n className,\n}: VerificationDetailProps) {\n const [expanded, setExpanded] = useState(defaultExpanded)\n\n const isExpanded = expandable ? expanded : true\n\n return (\n <div className={`rounded-xl border border-border bg-surface ${className ?? ''}`} data-testid=\"verification-detail\">\n <button\n type=\"button\"\n className=\"flex w-full items-center justify-between px-4 py-3 text-left\"\n onClick={() => expandable && setExpanded((prev) => !prev)}\n aria-expanded={isExpanded}\n disabled={!expandable}\n >\n <span className=\"text-sm font-medium text-text-primary\">Verification</span>\n <VerificationBadge verification={verification} />\n </button>\n\n {isExpanded && (\n <div\n className=\"border-t border-border px-4 py-3 space-y-2 animate-in fade-in slide-in-from-top-1 duration-200\"\n data-testid=\"verification-detail-content\"\n >\n <div className=\"flex gap-4 text-xs text-text-secondary\">\n <span data-testid=\"claims-checked\">\n Claims checked: <strong className=\"text-text-primary\">{verification.claims_checked}</strong>\n </span>\n <span data-testid=\"claims-verified\">\n Claims verified: <strong className=\"text-text-primary\">{verification.claims_verified}</strong>\n </span>\n </div>\n\n {verification.flags.length > 0 && (\n <ul className=\"mt-2 space-y-1\" data-testid=\"verification-flags\">\n {verification.flags.map((flag, i) => (\n <li key={i} className=\"flex items-start gap-2 text-xs text-text-secondary\">\n <span className=\"text-yellow-500 shrink-0\" aria-hidden=\"true\">{'\\u26A0'}</span>\n {flag}\n </li>\n ))}\n </ul>\n )}\n </div>\n )}\n </div>\n )\n}\n\nexport { VerificationDetail }\n"],"mappings":"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","names":["import_jsx_runtime","import_jsx_runtime","import_core","import_jsx_runtime","import_react","import_jsx_runtime"]}
|
|
1
|
+
{"version":3,"sources":["../../src/confidence/index.ts","../../src/confidence/ConfidenceBadge/ConfidenceBadge.tsx","../../src/confidence/ConfidenceBreakdown/ConfidenceBreakdown.tsx","../../src/confidence/ConfidenceMeter/ConfidenceMeter.tsx","../../src/confidence/VerificationBadge/VerificationBadge.tsx","../../src/confidence/VerificationDetail/VerificationDetail.tsx"],"sourcesContent":["export { ConfidenceBadge } from './ConfidenceBadge'\nexport type { ConfidenceBadgeProps } from './ConfidenceBadge'\n\nexport { ConfidenceBreakdown } from './ConfidenceBreakdown'\nexport type { ConfidenceBreakdownProps } from './ConfidenceBreakdown'\n\nexport { ConfidenceMeter } from './ConfidenceMeter'\nexport type { ConfidenceMeterProps } from './ConfidenceMeter'\n\nexport { VerificationBadge } from './VerificationBadge'\nexport type { VerificationBadgeProps } from './VerificationBadge'\n\nexport { VerificationDetail } from './VerificationDetail'\nexport type { VerificationDetailProps } from './VerificationDetail'\n","import React from 'react'\nimport { Badge } from '@surf-kit/core'\nimport type { ConfidenceBreakdown } from '../../types/agent'\n\nexport type ConfidenceBadgeProps = {\n confidence: ConfidenceBreakdown\n className?: string\n}\n\nconst intentMap = {\n high: 'success',\n medium: 'warning',\n low: 'error',\n} as const\n\nconst labelMap = {\n high: 'High confidence',\n medium: 'Medium confidence',\n low: 'Low confidence',\n} as const\n\nfunction ConfidenceBadge({ confidence, className }: ConfidenceBadgeProps) {\n const level = confidence.overall\n\n return (\n <Badge\n intent={intentMap[level]}\n size=\"sm\"\n role=\"status\"\n aria-label={labelMap[level]}\n className={className}\n >\n {level.charAt(0).toUpperCase() + level.slice(1)}\n </Badge>\n )\n}\n\nexport { ConfidenceBadge }\n","'use client'\n\nimport React, { useState } from 'react'\nimport type { ConfidenceBreakdown as ConfidenceBreakdownType } from '../../types/agent'\nimport { ConfidenceBadge } from '../ConfidenceBadge'\nimport { ConfidenceMeter } from '../ConfidenceMeter'\n\nexport type ConfidenceBreakdownProps = {\n confidence: ConfidenceBreakdownType\n expandable?: boolean\n defaultExpanded?: boolean\n className?: string\n}\n\nconst dimensions: { key: keyof Pick<ConfidenceBreakdownType, 'retrieval_quality' | 'source_authority' | 'answer_groundedness' | 'recency'>; label: string }[] = [\n { key: 'retrieval_quality', label: 'Retrieval Quality' },\n { key: 'source_authority', label: 'Source Authority' },\n { key: 'answer_groundedness', label: 'Answer Groundedness' },\n { key: 'recency', label: 'Recency' },\n]\n\nfunction ConfidenceBreakdown({\n confidence,\n expandable = true,\n defaultExpanded = false,\n className,\n}: ConfidenceBreakdownProps) {\n const [expanded, setExpanded] = useState(defaultExpanded)\n\n const isExpanded = expandable ? expanded : true\n\n return (\n <div className={`rounded-xl border border-border bg-surface ${className ?? ''}`} data-testid=\"confidence-breakdown\">\n <button\n type=\"button\"\n className=\"flex w-full items-center justify-between px-4 py-3 text-left\"\n onClick={() => expandable && setExpanded((prev) => !prev)}\n aria-expanded={isExpanded}\n disabled={!expandable}\n >\n <span className=\"text-sm font-medium text-text-primary\">Confidence</span>\n <ConfidenceBadge confidence={confidence} />\n </button>\n\n {isExpanded && (\n <div\n className=\"border-t border-border px-4 py-3 space-y-3 animate-in fade-in slide-in-from-top-1 duration-200\"\n data-testid=\"confidence-breakdown-details\"\n >\n {dimensions.map((dim) => (\n <ConfidenceMeter\n key={dim.key}\n value={confidence[dim.key]}\n label={dim.label}\n />\n ))}\n {confidence.reasoning && (\n <p className=\"text-xs text-text-secondary mt-2\">{confidence.reasoning}</p>\n )}\n </div>\n )}\n </div>\n )\n}\n\nexport { ConfidenceBreakdown }\n","import React from 'react'\n\nexport type ConfidenceMeterProps = {\n value: number // 0-1\n label: string\n className?: string\n}\n\nfunction getBarColor(value: number): string {\n if (value >= 0.8) return 'bg-green-500'\n if (value >= 0.5) return 'bg-yellow-500'\n return 'bg-red-500'\n}\n\nfunction ConfidenceMeter({ value, label, className }: ConfidenceMeterProps) {\n const clamped = Math.max(0, Math.min(1, value))\n const pct = Math.round(clamped * 100)\n\n return (\n <div className={className} data-testid=\"confidence-meter\">\n <div className=\"flex items-center justify-between mb-1\">\n <span className=\"text-xs font-medium text-text-secondary\">{label}</span>\n <span className=\"text-xs text-text-secondary\">{pct}%</span>\n </div>\n <div\n className=\"h-2 w-full rounded-full bg-surface-secondary overflow-hidden\"\n role=\"progressbar\"\n aria-valuenow={pct}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-label={`${label}: ${pct}%`}\n >\n <div\n className={`h-full rounded-full transition-all duration-300 ${getBarColor(clamped)}`}\n style={{ width: `${pct}%` }}\n />\n </div>\n </div>\n )\n}\n\nexport { ConfidenceMeter }\n","import React from 'react'\nimport { Badge } from '@surf-kit/core'\nimport type { VerificationResult } from '../../types/agent'\n\nexport type VerificationBadgeProps = {\n verification: VerificationResult\n className?: string\n}\n\nconst config = {\n passed: {\n intent: 'success' as const,\n label: 'Verified',\n icon: '\\u2713',\n ariaLabel: 'Verification passed',\n },\n flagged: {\n intent: 'warning' as const,\n label: 'Flagged',\n icon: '\\u26A0',\n ariaLabel: 'Verification flagged',\n },\n failed: {\n intent: 'error' as const,\n label: 'Failed',\n icon: '\\u2717',\n ariaLabel: 'Verification failed',\n },\n} as const\n\nfunction VerificationBadge({ verification, className }: VerificationBadgeProps) {\n const { intent, label, icon, ariaLabel } = config[verification.status]\n\n return (\n <Badge\n intent={intent}\n size=\"sm\"\n role=\"status\"\n aria-label={ariaLabel}\n className={className}\n >\n <span aria-hidden=\"true\" className=\"mr-1\">{icon}</span>\n {label}\n </Badge>\n )\n}\n\nexport { VerificationBadge }\n","'use client'\n\nimport React, { useState } from 'react'\nimport type { VerificationResult } from '../../types/agent'\nimport { VerificationBadge } from '../VerificationBadge'\n\nexport type VerificationDetailProps = {\n verification: VerificationResult\n expandable?: boolean\n defaultExpanded?: boolean\n className?: string\n}\n\nfunction VerificationDetail({\n verification,\n expandable = true,\n defaultExpanded = false,\n className,\n}: VerificationDetailProps) {\n const [expanded, setExpanded] = useState(defaultExpanded)\n\n const isExpanded = expandable ? expanded : true\n\n return (\n <div className={`rounded-xl border border-border bg-surface ${className ?? ''}`} data-testid=\"verification-detail\">\n <button\n type=\"button\"\n className=\"flex w-full items-center justify-between px-4 py-3 text-left\"\n onClick={() => expandable && setExpanded((prev) => !prev)}\n aria-expanded={isExpanded}\n disabled={!expandable}\n >\n <span className=\"text-sm font-medium text-text-primary\">Verification</span>\n <VerificationBadge verification={verification} />\n </button>\n\n {isExpanded && (\n <div\n className=\"border-t border-border px-4 py-3 space-y-2 animate-in fade-in slide-in-from-top-1 duration-200\"\n data-testid=\"verification-detail-content\"\n >\n <div className=\"flex gap-4 text-xs text-text-secondary\">\n <span data-testid=\"claims-checked\">\n Claims checked: <strong className=\"text-text-primary\">{verification.claims_checked}</strong>\n </span>\n <span data-testid=\"claims-verified\">\n Claims verified: <strong className=\"text-text-primary\">{verification.claims_verified}</strong>\n </span>\n </div>\n\n {verification.flags.length > 0 && (\n <ul className=\"mt-2 space-y-1\" data-testid=\"verification-flags\">\n {verification.flags.map((flag, i) => (\n <li key={i} className=\"flex items-start gap-2 text-xs text-text-secondary\">\n <span className=\"text-yellow-500 shrink-0\" aria-hidden=\"true\">{'\\u26A0'}</span>\n {flag}\n </li>\n ))}\n </ul>\n )}\n </div>\n )}\n </div>\n )\n}\n\nexport { VerificationDetail }\n"],"mappings":"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","names":["import_jsx_runtime","import_jsx_runtime","import_core","import_jsx_runtime","import_react","import_jsx_runtime"]}
|
package/dist/confidence/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/confidence/ConfidenceBadge/ConfidenceBadge.tsx","../../src/confidence/ConfidenceBreakdown/ConfidenceBreakdown.tsx","../../src/confidence/ConfidenceMeter/ConfidenceMeter.tsx","../../src/confidence/VerificationBadge/VerificationBadge.tsx","../../src/confidence/VerificationDetail/VerificationDetail.tsx"],"sourcesContent":["import React from 'react'\nimport { Badge } from '@surf-kit/core'\nimport type { ConfidenceBreakdown } from '../../types/agent'\n\nexport type ConfidenceBadgeProps = {\n confidence: ConfidenceBreakdown\n className?: string\n}\n\nconst intentMap = {\n high: 'success',\n medium: 'warning',\n low: 'error',\n} as const\n\nconst labelMap = {\n high: 'High confidence',\n medium: 'Medium confidence',\n low: 'Low confidence',\n} as const\n\nfunction ConfidenceBadge({ confidence, className }: ConfidenceBadgeProps) {\n const level = confidence.overall\n\n return (\n <Badge\n intent={intentMap[level]}\n size=\"sm\"\n role=\"status\"\n aria-label={labelMap[level]}\n className={className}\n >\n {level.charAt(0).toUpperCase() + level.slice(1)}\n </Badge>\n )\n}\n\nexport { ConfidenceBadge }\n","import React, { useState } from 'react'\nimport type { ConfidenceBreakdown as ConfidenceBreakdownType } from '../../types/agent'\nimport { ConfidenceBadge } from '../ConfidenceBadge'\nimport { ConfidenceMeter } from '../ConfidenceMeter'\n\nexport type ConfidenceBreakdownProps = {\n confidence: ConfidenceBreakdownType\n expandable?: boolean\n defaultExpanded?: boolean\n className?: string\n}\n\nconst dimensions: { key: keyof Pick<ConfidenceBreakdownType, 'retrieval_quality' | 'source_authority' | 'answer_groundedness' | 'recency'>; label: string }[] = [\n { key: 'retrieval_quality', label: 'Retrieval Quality' },\n { key: 'source_authority', label: 'Source Authority' },\n { key: 'answer_groundedness', label: 'Answer Groundedness' },\n { key: 'recency', label: 'Recency' },\n]\n\nfunction ConfidenceBreakdown({\n confidence,\n expandable = true,\n defaultExpanded = false,\n className,\n}: ConfidenceBreakdownProps) {\n const [expanded, setExpanded] = useState(defaultExpanded)\n\n const isExpanded = expandable ? expanded : true\n\n return (\n <div className={`rounded-xl border border-border bg-surface ${className ?? ''}`} data-testid=\"confidence-breakdown\">\n <button\n type=\"button\"\n className=\"flex w-full items-center justify-between px-4 py-3 text-left\"\n onClick={() => expandable && setExpanded((prev) => !prev)}\n aria-expanded={isExpanded}\n disabled={!expandable}\n >\n <span className=\"text-sm font-medium text-text-primary\">Confidence</span>\n <ConfidenceBadge confidence={confidence} />\n </button>\n\n {isExpanded && (\n <div\n className=\"border-t border-border px-4 py-3 space-y-3 animate-in fade-in slide-in-from-top-1 duration-200\"\n data-testid=\"confidence-breakdown-details\"\n >\n {dimensions.map((dim) => (\n <ConfidenceMeter\n key={dim.key}\n value={confidence[dim.key]}\n label={dim.label}\n />\n ))}\n {confidence.reasoning && (\n <p className=\"text-xs text-text-secondary mt-2\">{confidence.reasoning}</p>\n )}\n </div>\n )}\n </div>\n )\n}\n\nexport { ConfidenceBreakdown }\n","import React from 'react'\n\nexport type ConfidenceMeterProps = {\n value: number // 0-1\n label: string\n className?: string\n}\n\nfunction getBarColor(value: number): string {\n if (value >= 0.8) return 'bg-green-500'\n if (value >= 0.5) return 'bg-yellow-500'\n return 'bg-red-500'\n}\n\nfunction ConfidenceMeter({ value, label, className }: ConfidenceMeterProps) {\n const clamped = Math.max(0, Math.min(1, value))\n const pct = Math.round(clamped * 100)\n\n return (\n <div className={className} data-testid=\"confidence-meter\">\n <div className=\"flex items-center justify-between mb-1\">\n <span className=\"text-xs font-medium text-text-secondary\">{label}</span>\n <span className=\"text-xs text-text-secondary\">{pct}%</span>\n </div>\n <div\n className=\"h-2 w-full rounded-full bg-surface-secondary overflow-hidden\"\n role=\"progressbar\"\n aria-valuenow={pct}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-label={`${label}: ${pct}%`}\n >\n <div\n className={`h-full rounded-full transition-all duration-300 ${getBarColor(clamped)}`}\n style={{ width: `${pct}%` }}\n />\n </div>\n </div>\n )\n}\n\nexport { ConfidenceMeter }\n","import React from 'react'\nimport { Badge } from '@surf-kit/core'\nimport type { VerificationResult } from '../../types/agent'\n\nexport type VerificationBadgeProps = {\n verification: VerificationResult\n className?: string\n}\n\nconst config = {\n passed: {\n intent: 'success' as const,\n label: 'Verified',\n icon: '\\u2713',\n ariaLabel: 'Verification passed',\n },\n flagged: {\n intent: 'warning' as const,\n label: 'Flagged',\n icon: '\\u26A0',\n ariaLabel: 'Verification flagged',\n },\n failed: {\n intent: 'error' as const,\n label: 'Failed',\n icon: '\\u2717',\n ariaLabel: 'Verification failed',\n },\n} as const\n\nfunction VerificationBadge({ verification, className }: VerificationBadgeProps) {\n const { intent, label, icon, ariaLabel } = config[verification.status]\n\n return (\n <Badge\n intent={intent}\n size=\"sm\"\n role=\"status\"\n aria-label={ariaLabel}\n className={className}\n >\n <span aria-hidden=\"true\" className=\"mr-1\">{icon}</span>\n {label}\n </Badge>\n )\n}\n\nexport { VerificationBadge }\n","import React, { useState } from 'react'\nimport type { VerificationResult } from '../../types/agent'\nimport { VerificationBadge } from '../VerificationBadge'\n\nexport type VerificationDetailProps = {\n verification: VerificationResult\n expandable?: boolean\n defaultExpanded?: boolean\n className?: string\n}\n\nfunction VerificationDetail({\n verification,\n expandable = true,\n defaultExpanded = false,\n className,\n}: VerificationDetailProps) {\n const [expanded, setExpanded] = useState(defaultExpanded)\n\n const isExpanded = expandable ? expanded : true\n\n return (\n <div className={`rounded-xl border border-border bg-surface ${className ?? ''}`} data-testid=\"verification-detail\">\n <button\n type=\"button\"\n className=\"flex w-full items-center justify-between px-4 py-3 text-left\"\n onClick={() => expandable && setExpanded((prev) => !prev)}\n aria-expanded={isExpanded}\n disabled={!expandable}\n >\n <span className=\"text-sm font-medium text-text-primary\">Verification</span>\n <VerificationBadge verification={verification} />\n </button>\n\n {isExpanded && (\n <div\n className=\"border-t border-border px-4 py-3 space-y-2 animate-in fade-in slide-in-from-top-1 duration-200\"\n data-testid=\"verification-detail-content\"\n >\n <div className=\"flex gap-4 text-xs text-text-secondary\">\n <span data-testid=\"claims-checked\">\n Claims checked: <strong className=\"text-text-primary\">{verification.claims_checked}</strong>\n </span>\n <span data-testid=\"claims-verified\">\n Claims verified: <strong className=\"text-text-primary\">{verification.claims_verified}</strong>\n </span>\n </div>\n\n {verification.flags.length > 0 && (\n <ul className=\"mt-2 space-y-1\" data-testid=\"verification-flags\">\n {verification.flags.map((flag, i) => (\n <li key={i} className=\"flex items-start gap-2 text-xs text-text-secondary\">\n <span className=\"text-yellow-500 shrink-0\" aria-hidden=\"true\">{'\\u26A0'}</span>\n {flag}\n </li>\n ))}\n </ul>\n )}\n </div>\n )}\n </div>\n )\n}\n\nexport { VerificationDetail }\n"],"mappings":"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","names":["jsx","jsx","jsxs","Badge","jsx","jsxs","useState","jsx","jsxs","useState"]}
|
|
1
|
+
{"version":3,"sources":["../../src/confidence/ConfidenceBadge/ConfidenceBadge.tsx","../../src/confidence/ConfidenceBreakdown/ConfidenceBreakdown.tsx","../../src/confidence/ConfidenceMeter/ConfidenceMeter.tsx","../../src/confidence/VerificationBadge/VerificationBadge.tsx","../../src/confidence/VerificationDetail/VerificationDetail.tsx"],"sourcesContent":["import React from 'react'\nimport { Badge } from '@surf-kit/core'\nimport type { ConfidenceBreakdown } from '../../types/agent'\n\nexport type ConfidenceBadgeProps = {\n confidence: ConfidenceBreakdown\n className?: string\n}\n\nconst intentMap = {\n high: 'success',\n medium: 'warning',\n low: 'error',\n} as const\n\nconst labelMap = {\n high: 'High confidence',\n medium: 'Medium confidence',\n low: 'Low confidence',\n} as const\n\nfunction ConfidenceBadge({ confidence, className }: ConfidenceBadgeProps) {\n const level = confidence.overall\n\n return (\n <Badge\n intent={intentMap[level]}\n size=\"sm\"\n role=\"status\"\n aria-label={labelMap[level]}\n className={className}\n >\n {level.charAt(0).toUpperCase() + level.slice(1)}\n </Badge>\n )\n}\n\nexport { ConfidenceBadge }\n","'use client'\n\nimport React, { useState } from 'react'\nimport type { ConfidenceBreakdown as ConfidenceBreakdownType } from '../../types/agent'\nimport { ConfidenceBadge } from '../ConfidenceBadge'\nimport { ConfidenceMeter } from '../ConfidenceMeter'\n\nexport type ConfidenceBreakdownProps = {\n confidence: ConfidenceBreakdownType\n expandable?: boolean\n defaultExpanded?: boolean\n className?: string\n}\n\nconst dimensions: { key: keyof Pick<ConfidenceBreakdownType, 'retrieval_quality' | 'source_authority' | 'answer_groundedness' | 'recency'>; label: string }[] = [\n { key: 'retrieval_quality', label: 'Retrieval Quality' },\n { key: 'source_authority', label: 'Source Authority' },\n { key: 'answer_groundedness', label: 'Answer Groundedness' },\n { key: 'recency', label: 'Recency' },\n]\n\nfunction ConfidenceBreakdown({\n confidence,\n expandable = true,\n defaultExpanded = false,\n className,\n}: ConfidenceBreakdownProps) {\n const [expanded, setExpanded] = useState(defaultExpanded)\n\n const isExpanded = expandable ? expanded : true\n\n return (\n <div className={`rounded-xl border border-border bg-surface ${className ?? ''}`} data-testid=\"confidence-breakdown\">\n <button\n type=\"button\"\n className=\"flex w-full items-center justify-between px-4 py-3 text-left\"\n onClick={() => expandable && setExpanded((prev) => !prev)}\n aria-expanded={isExpanded}\n disabled={!expandable}\n >\n <span className=\"text-sm font-medium text-text-primary\">Confidence</span>\n <ConfidenceBadge confidence={confidence} />\n </button>\n\n {isExpanded && (\n <div\n className=\"border-t border-border px-4 py-3 space-y-3 animate-in fade-in slide-in-from-top-1 duration-200\"\n data-testid=\"confidence-breakdown-details\"\n >\n {dimensions.map((dim) => (\n <ConfidenceMeter\n key={dim.key}\n value={confidence[dim.key]}\n label={dim.label}\n />\n ))}\n {confidence.reasoning && (\n <p className=\"text-xs text-text-secondary mt-2\">{confidence.reasoning}</p>\n )}\n </div>\n )}\n </div>\n )\n}\n\nexport { ConfidenceBreakdown }\n","import React from 'react'\n\nexport type ConfidenceMeterProps = {\n value: number // 0-1\n label: string\n className?: string\n}\n\nfunction getBarColor(value: number): string {\n if (value >= 0.8) return 'bg-green-500'\n if (value >= 0.5) return 'bg-yellow-500'\n return 'bg-red-500'\n}\n\nfunction ConfidenceMeter({ value, label, className }: ConfidenceMeterProps) {\n const clamped = Math.max(0, Math.min(1, value))\n const pct = Math.round(clamped * 100)\n\n return (\n <div className={className} data-testid=\"confidence-meter\">\n <div className=\"flex items-center justify-between mb-1\">\n <span className=\"text-xs font-medium text-text-secondary\">{label}</span>\n <span className=\"text-xs text-text-secondary\">{pct}%</span>\n </div>\n <div\n className=\"h-2 w-full rounded-full bg-surface-secondary overflow-hidden\"\n role=\"progressbar\"\n aria-valuenow={pct}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-label={`${label}: ${pct}%`}\n >\n <div\n className={`h-full rounded-full transition-all duration-300 ${getBarColor(clamped)}`}\n style={{ width: `${pct}%` }}\n />\n </div>\n </div>\n )\n}\n\nexport { ConfidenceMeter }\n","import React from 'react'\nimport { Badge } from '@surf-kit/core'\nimport type { VerificationResult } from '../../types/agent'\n\nexport type VerificationBadgeProps = {\n verification: VerificationResult\n className?: string\n}\n\nconst config = {\n passed: {\n intent: 'success' as const,\n label: 'Verified',\n icon: '\\u2713',\n ariaLabel: 'Verification passed',\n },\n flagged: {\n intent: 'warning' as const,\n label: 'Flagged',\n icon: '\\u26A0',\n ariaLabel: 'Verification flagged',\n },\n failed: {\n intent: 'error' as const,\n label: 'Failed',\n icon: '\\u2717',\n ariaLabel: 'Verification failed',\n },\n} as const\n\nfunction VerificationBadge({ verification, className }: VerificationBadgeProps) {\n const { intent, label, icon, ariaLabel } = config[verification.status]\n\n return (\n <Badge\n intent={intent}\n size=\"sm\"\n role=\"status\"\n aria-label={ariaLabel}\n className={className}\n >\n <span aria-hidden=\"true\" className=\"mr-1\">{icon}</span>\n {label}\n </Badge>\n )\n}\n\nexport { VerificationBadge }\n","'use client'\n\nimport React, { useState } from 'react'\nimport type { VerificationResult } from '../../types/agent'\nimport { VerificationBadge } from '../VerificationBadge'\n\nexport type VerificationDetailProps = {\n verification: VerificationResult\n expandable?: boolean\n defaultExpanded?: boolean\n className?: string\n}\n\nfunction VerificationDetail({\n verification,\n expandable = true,\n defaultExpanded = false,\n className,\n}: VerificationDetailProps) {\n const [expanded, setExpanded] = useState(defaultExpanded)\n\n const isExpanded = expandable ? expanded : true\n\n return (\n <div className={`rounded-xl border border-border bg-surface ${className ?? ''}`} data-testid=\"verification-detail\">\n <button\n type=\"button\"\n className=\"flex w-full items-center justify-between px-4 py-3 text-left\"\n onClick={() => expandable && setExpanded((prev) => !prev)}\n aria-expanded={isExpanded}\n disabled={!expandable}\n >\n <span className=\"text-sm font-medium text-text-primary\">Verification</span>\n <VerificationBadge verification={verification} />\n </button>\n\n {isExpanded && (\n <div\n className=\"border-t border-border px-4 py-3 space-y-2 animate-in fade-in slide-in-from-top-1 duration-200\"\n data-testid=\"verification-detail-content\"\n >\n <div className=\"flex gap-4 text-xs text-text-secondary\">\n <span data-testid=\"claims-checked\">\n Claims checked: <strong className=\"text-text-primary\">{verification.claims_checked}</strong>\n </span>\n <span data-testid=\"claims-verified\">\n Claims verified: <strong className=\"text-text-primary\">{verification.claims_verified}</strong>\n </span>\n </div>\n\n {verification.flags.length > 0 && (\n <ul className=\"mt-2 space-y-1\" data-testid=\"verification-flags\">\n {verification.flags.map((flag, i) => (\n <li key={i} className=\"flex items-start gap-2 text-xs text-text-secondary\">\n <span className=\"text-yellow-500 shrink-0\" aria-hidden=\"true\">{'\\u26A0'}</span>\n {flag}\n </li>\n ))}\n </ul>\n )}\n </div>\n )}\n </div>\n )\n}\n\nexport { VerificationDetail }\n"],"mappings":"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","names":["jsx","jsx","jsxs","Badge","jsx","jsxs","useState","jsx","jsxs","useState"]}
|
package/dist/feedback/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/feedback/index.ts","../../src/feedback/ThumbsFeedback/ThumbsFeedback.tsx","../../src/feedback/FeedbackDialog/FeedbackDialog.tsx","../../src/feedback/FeedbackConfirmation/FeedbackConfirmation.tsx"],"sourcesContent":["export { ThumbsFeedback } from './ThumbsFeedback'\nexport type { ThumbsFeedbackProps, FeedbackRating } from './ThumbsFeedback'\n\nexport { FeedbackDialog } from './FeedbackDialog'\nexport type { FeedbackDialogProps } from './FeedbackDialog'\n\nexport { FeedbackConfirmation } from './FeedbackConfirmation'\nexport type { FeedbackConfirmationProps } from './FeedbackConfirmation'\n","
|
|
1
|
+
{"version":3,"sources":["../../src/feedback/index.ts","../../src/feedback/ThumbsFeedback/ThumbsFeedback.tsx","../../src/feedback/FeedbackDialog/FeedbackDialog.tsx","../../src/feedback/FeedbackConfirmation/FeedbackConfirmation.tsx"],"sourcesContent":["export { ThumbsFeedback } from './ThumbsFeedback'\nexport type { ThumbsFeedbackProps, FeedbackRating } from './ThumbsFeedback'\n\nexport { FeedbackDialog } from './FeedbackDialog'\nexport type { FeedbackDialogProps } from './FeedbackDialog'\n\nexport { FeedbackConfirmation } from './FeedbackConfirmation'\nexport type { FeedbackConfirmationProps } from './FeedbackConfirmation'\n","'use client'\n\nimport React, { useState } from 'react'\n\ntype FeedbackRating = 'positive' | 'negative'\n\ntype ThumbsFeedbackProps = {\n messageId: string\n onFeedback: (messageId: string, rating: FeedbackRating, comment?: string) => void\n state?: FeedbackRating | null\n onNegative?: () => void\n className?: string\n}\n\nfunction ThumbsFeedback({\n messageId,\n onFeedback,\n state = null,\n onNegative,\n className,\n}: ThumbsFeedbackProps) {\n const [selected, setSelected] = useState<FeedbackRating | null>(state)\n\n const handleClick = (rating: FeedbackRating) => {\n setSelected(rating)\n onFeedback(messageId, rating)\n if (rating === 'negative' && onNegative) {\n onNegative()\n }\n }\n\n return (\n <div\n className={`inline-flex items-center gap-0.5 ${className ?? ''}`}\n role=\"group\"\n aria-label=\"Rate this response\"\n data-testid=\"thumbs-feedback\"\n >\n <button\n type=\"button\"\n onClick={() => handleClick('positive')}\n aria-label=\"Thumbs up\"\n aria-pressed={selected === 'positive'}\n className={`p-1.5 rounded-md transition-colors duration-200 ${\n selected === 'positive'\n ? 'text-brand-cyan bg-brand-cyan/15'\n : 'text-brand-cream/30 hover:text-brand-cyan hover:bg-brand-cyan/10'\n }`}\n data-testid=\"thumbs-up\"\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M7 10v12\" />\n <path d=\"M15 5.88 14 10h5.83a2 2 0 0 1 1.92 2.56l-2.33 8A2 2 0 0 1 17.5 22H4a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2h2.76a2 2 0 0 0 1.79-1.11L12 2h0a3.13 3.13 0 0 1 3 3.88Z\" />\n </svg>\n </button>\n <button\n type=\"button\"\n onClick={() => handleClick('negative')}\n aria-label=\"Thumbs down\"\n aria-pressed={selected === 'negative'}\n className={`p-1.5 rounded-md transition-colors duration-200 ${\n selected === 'negative'\n ? 'text-brand-watermelon bg-brand-watermelon/15'\n : 'text-brand-cream/30 hover:text-brand-watermelon hover:bg-brand-watermelon/10'\n }`}\n data-testid=\"thumbs-down\"\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M17 14V2\" />\n <path d=\"M9 18.12 10 14H4.17a2 2 0 0 1-1.92-2.56l2.33-8A2 2 0 0 1 6.5 2H20a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-2.76a2 2 0 0 0-1.79 1.11L12 22h0a3.13 3.13 0 0 1-3-3.88Z\" />\n </svg>\n </button>\n </div>\n )\n}\n\nexport { ThumbsFeedback }\nexport type { ThumbsFeedbackProps, FeedbackRating }\n","'use client'\n\nimport React, { useState } from 'react'\nimport { Dialog, Button, TextArea } from '@surf-kit/core'\n\ntype FeedbackDialogProps = {\n isOpen: boolean\n onClose: () => void\n onSubmit: (comment: string) => void\n className?: string\n}\n\nfunction FeedbackDialog({ isOpen, onClose, onSubmit, className }: FeedbackDialogProps) {\n const [comment, setComment] = useState('')\n\n const handleSubmit = () => {\n onSubmit(comment)\n setComment('')\n onClose()\n }\n\n return (\n <Dialog\n isOpen={isOpen}\n onClose={onClose}\n title=\"Share your feedback\"\n size=\"sm\"\n className={className}\n footer={\n <>\n <Button intent=\"ghost\" onPress={onClose}>\n Cancel\n </Button>\n <Button intent=\"primary\" onPress={handleSubmit} isDisabled={comment.trim().length === 0}>\n Submit\n </Button>\n </>\n }\n >\n <TextArea\n label=\"What could be improved?\"\n value={comment}\n onChange={setComment}\n placeholder=\"Tell us what went wrong or how this response could be better...\"\n rows={4}\n data-testid=\"feedback-textarea\"\n />\n </Dialog>\n )\n}\n\nexport { FeedbackDialog }\nexport type { FeedbackDialogProps }\n","import React from 'react'\n\ntype FeedbackConfirmationProps = {\n variant?: 'inline' | 'toast'\n className?: string\n}\n\nfunction FeedbackConfirmation({ variant = 'inline', className }: FeedbackConfirmationProps) {\n if (variant === 'toast') {\n return (\n <div\n role=\"status\"\n className={`fixed bottom-4 right-4 bg-surface border border-border rounded-lg px-4 py-3 shadow-lg text-sm text-text-primary ${className ?? ''}`}\n data-testid=\"feedback-confirmation\"\n >\n Thanks for your feedback\n </div>\n )\n }\n\n return (\n <span\n role=\"status\"\n className={`text-sm text-text-secondary ${className ?? ''}`}\n data-testid=\"feedback-confirmation\"\n >\n Thanks for your feedback\n </span>\n )\n}\n\nexport { FeedbackConfirmation }\nexport type { FeedbackConfirmationProps }\n"],"mappings":"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","names":["import_react","import_jsx_runtime","import_jsx_runtime"]}
|
package/dist/feedback/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/feedback/ThumbsFeedback/ThumbsFeedback.tsx","../../src/feedback/FeedbackDialog/FeedbackDialog.tsx","../../src/feedback/FeedbackConfirmation/FeedbackConfirmation.tsx"],"sourcesContent":["
|
|
1
|
+
{"version":3,"sources":["../../src/feedback/ThumbsFeedback/ThumbsFeedback.tsx","../../src/feedback/FeedbackDialog/FeedbackDialog.tsx","../../src/feedback/FeedbackConfirmation/FeedbackConfirmation.tsx"],"sourcesContent":["'use client'\n\nimport React, { useState } from 'react'\n\ntype FeedbackRating = 'positive' | 'negative'\n\ntype ThumbsFeedbackProps = {\n messageId: string\n onFeedback: (messageId: string, rating: FeedbackRating, comment?: string) => void\n state?: FeedbackRating | null\n onNegative?: () => void\n className?: string\n}\n\nfunction ThumbsFeedback({\n messageId,\n onFeedback,\n state = null,\n onNegative,\n className,\n}: ThumbsFeedbackProps) {\n const [selected, setSelected] = useState<FeedbackRating | null>(state)\n\n const handleClick = (rating: FeedbackRating) => {\n setSelected(rating)\n onFeedback(messageId, rating)\n if (rating === 'negative' && onNegative) {\n onNegative()\n }\n }\n\n return (\n <div\n className={`inline-flex items-center gap-0.5 ${className ?? ''}`}\n role=\"group\"\n aria-label=\"Rate this response\"\n data-testid=\"thumbs-feedback\"\n >\n <button\n type=\"button\"\n onClick={() => handleClick('positive')}\n aria-label=\"Thumbs up\"\n aria-pressed={selected === 'positive'}\n className={`p-1.5 rounded-md transition-colors duration-200 ${\n selected === 'positive'\n ? 'text-brand-cyan bg-brand-cyan/15'\n : 'text-brand-cream/30 hover:text-brand-cyan hover:bg-brand-cyan/10'\n }`}\n data-testid=\"thumbs-up\"\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M7 10v12\" />\n <path d=\"M15 5.88 14 10h5.83a2 2 0 0 1 1.92 2.56l-2.33 8A2 2 0 0 1 17.5 22H4a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2h2.76a2 2 0 0 0 1.79-1.11L12 2h0a3.13 3.13 0 0 1 3 3.88Z\" />\n </svg>\n </button>\n <button\n type=\"button\"\n onClick={() => handleClick('negative')}\n aria-label=\"Thumbs down\"\n aria-pressed={selected === 'negative'}\n className={`p-1.5 rounded-md transition-colors duration-200 ${\n selected === 'negative'\n ? 'text-brand-watermelon bg-brand-watermelon/15'\n : 'text-brand-cream/30 hover:text-brand-watermelon hover:bg-brand-watermelon/10'\n }`}\n data-testid=\"thumbs-down\"\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M17 14V2\" />\n <path d=\"M9 18.12 10 14H4.17a2 2 0 0 1-1.92-2.56l2.33-8A2 2 0 0 1 6.5 2H20a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-2.76a2 2 0 0 0-1.79 1.11L12 22h0a3.13 3.13 0 0 1-3-3.88Z\" />\n </svg>\n </button>\n </div>\n )\n}\n\nexport { ThumbsFeedback }\nexport type { ThumbsFeedbackProps, FeedbackRating }\n","'use client'\n\nimport React, { useState } from 'react'\nimport { Dialog, Button, TextArea } from '@surf-kit/core'\n\ntype FeedbackDialogProps = {\n isOpen: boolean\n onClose: () => void\n onSubmit: (comment: string) => void\n className?: string\n}\n\nfunction FeedbackDialog({ isOpen, onClose, onSubmit, className }: FeedbackDialogProps) {\n const [comment, setComment] = useState('')\n\n const handleSubmit = () => {\n onSubmit(comment)\n setComment('')\n onClose()\n }\n\n return (\n <Dialog\n isOpen={isOpen}\n onClose={onClose}\n title=\"Share your feedback\"\n size=\"sm\"\n className={className}\n footer={\n <>\n <Button intent=\"ghost\" onPress={onClose}>\n Cancel\n </Button>\n <Button intent=\"primary\" onPress={handleSubmit} isDisabled={comment.trim().length === 0}>\n Submit\n </Button>\n </>\n }\n >\n <TextArea\n label=\"What could be improved?\"\n value={comment}\n onChange={setComment}\n placeholder=\"Tell us what went wrong or how this response could be better...\"\n rows={4}\n data-testid=\"feedback-textarea\"\n />\n </Dialog>\n )\n}\n\nexport { FeedbackDialog }\nexport type { FeedbackDialogProps }\n","import React from 'react'\n\ntype FeedbackConfirmationProps = {\n variant?: 'inline' | 'toast'\n className?: string\n}\n\nfunction FeedbackConfirmation({ variant = 'inline', className }: FeedbackConfirmationProps) {\n if (variant === 'toast') {\n return (\n <div\n role=\"status\"\n className={`fixed bottom-4 right-4 bg-surface border border-border rounded-lg px-4 py-3 shadow-lg text-sm text-text-primary ${className ?? ''}`}\n data-testid=\"feedback-confirmation\"\n >\n Thanks for your feedback\n </div>\n )\n }\n\n return (\n <span\n role=\"status\"\n className={`text-sm text-text-secondary ${className ?? ''}`}\n data-testid=\"feedback-confirmation\"\n >\n Thanks for your feedback\n </span>\n )\n}\n\nexport { FeedbackConfirmation }\nexport type { FeedbackConfirmationProps }\n"],"mappings":"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","names":["useState","jsx","jsxs","jsx"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { a as ChatMessage, C as ChatError, b as ConversationSummary } from './chat-
|
|
2
|
-
import { a as StreamState, S as StreamEvent } from './streaming-
|
|
1
|
+
import { A as Attachment, a as ChatMessage, C as ChatError, b as ConversationSummary } from './chat-CGamM7Mz.cjs';
|
|
2
|
+
import { a as StreamState, S as StreamEvent } from './streaming-x7umFHoP.cjs';
|
|
3
3
|
import { A as AgentInfo } from './agent-BNSmiexZ.cjs';
|
|
4
4
|
|
|
5
5
|
interface AgentChatConfig {
|
|
@@ -11,14 +11,29 @@ interface AgentChatConfig {
|
|
|
11
11
|
feedbackPath?: string;
|
|
12
12
|
/** Conversations endpoint path (appended to apiUrl) */
|
|
13
13
|
conversationsPath?: string;
|
|
14
|
-
/** Request headers (e.g. Authorization) */
|
|
15
|
-
headers?: Record<string, string
|
|
14
|
+
/** Request headers (e.g. Authorization). Can be a static object or an async function that returns headers (useful for refreshing auth tokens). */
|
|
15
|
+
headers?: Record<string, string> | (() => Promise<Record<string, string>>);
|
|
16
16
|
/** Request timeout in milliseconds */
|
|
17
17
|
timeout?: number;
|
|
18
18
|
/** Enable localStorage persistence for conversations */
|
|
19
19
|
persistConversations?: boolean;
|
|
20
20
|
/** Map of agent IDs to their display config */
|
|
21
21
|
agentThemes?: Record<string, AgentInfo>;
|
|
22
|
+
/** Extra fields merged into every request body (e.g. `{ agent: "research" }`).
|
|
23
|
+
* Keys here are shallow-merged after the default fields (message, conversation_id, attachments). */
|
|
24
|
+
bodyExtra?: Record<string, unknown>;
|
|
25
|
+
/** Custom stream reader for environments without ReadableStream (e.g. React Native).
|
|
26
|
+
* When provided, this function handles sending the request and parsing SSE events
|
|
27
|
+
* instead of the default fetch + getReader() approach. */
|
|
28
|
+
streamAdapter?: (url: string, options: {
|
|
29
|
+
method: string;
|
|
30
|
+
headers: Record<string, string>;
|
|
31
|
+
body: string;
|
|
32
|
+
signal: AbortSignal;
|
|
33
|
+
}, onEvent: (event: {
|
|
34
|
+
type: string;
|
|
35
|
+
[key: string]: unknown;
|
|
36
|
+
}) => void) => Promise<void>;
|
|
22
37
|
}
|
|
23
38
|
|
|
24
39
|
interface AgentChatState {
|
|
@@ -29,9 +44,10 @@ interface AgentChatState {
|
|
|
29
44
|
inputValue: string;
|
|
30
45
|
streamPhase: StreamState['phase'];
|
|
31
46
|
streamingContent: string;
|
|
47
|
+
streamingAgent: string | null;
|
|
32
48
|
}
|
|
33
49
|
interface AgentChatActions {
|
|
34
|
-
sendMessage: (content: string) => Promise<void>;
|
|
50
|
+
sendMessage: (content: string, attachments?: Attachment[]) => Promise<void>;
|
|
35
51
|
setInputValue: (value: string) => void;
|
|
36
52
|
loadConversation: (conversationId: string, messages: ChatMessage[]) => void;
|
|
37
53
|
submitFeedback: (messageId: string, rating: 'positive' | 'negative', comment?: string) => Promise<void>;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { a as ChatMessage, C as ChatError, b as ConversationSummary } from './chat
|
|
2
|
-
import { a as StreamState, S as StreamEvent } from './streaming-
|
|
1
|
+
import { A as Attachment, a as ChatMessage, C as ChatError, b as ConversationSummary } from './chat-BIIDOGrD.js';
|
|
2
|
+
import { a as StreamState, S as StreamEvent } from './streaming-Bx-ff2tt.js';
|
|
3
3
|
import { A as AgentInfo } from './agent-BNSmiexZ.js';
|
|
4
4
|
|
|
5
5
|
interface AgentChatConfig {
|
|
@@ -11,14 +11,29 @@ interface AgentChatConfig {
|
|
|
11
11
|
feedbackPath?: string;
|
|
12
12
|
/** Conversations endpoint path (appended to apiUrl) */
|
|
13
13
|
conversationsPath?: string;
|
|
14
|
-
/** Request headers (e.g. Authorization) */
|
|
15
|
-
headers?: Record<string, string
|
|
14
|
+
/** Request headers (e.g. Authorization). Can be a static object or an async function that returns headers (useful for refreshing auth tokens). */
|
|
15
|
+
headers?: Record<string, string> | (() => Promise<Record<string, string>>);
|
|
16
16
|
/** Request timeout in milliseconds */
|
|
17
17
|
timeout?: number;
|
|
18
18
|
/** Enable localStorage persistence for conversations */
|
|
19
19
|
persistConversations?: boolean;
|
|
20
20
|
/** Map of agent IDs to their display config */
|
|
21
21
|
agentThemes?: Record<string, AgentInfo>;
|
|
22
|
+
/** Extra fields merged into every request body (e.g. `{ agent: "research" }`).
|
|
23
|
+
* Keys here are shallow-merged after the default fields (message, conversation_id, attachments). */
|
|
24
|
+
bodyExtra?: Record<string, unknown>;
|
|
25
|
+
/** Custom stream reader for environments without ReadableStream (e.g. React Native).
|
|
26
|
+
* When provided, this function handles sending the request and parsing SSE events
|
|
27
|
+
* instead of the default fetch + getReader() approach. */
|
|
28
|
+
streamAdapter?: (url: string, options: {
|
|
29
|
+
method: string;
|
|
30
|
+
headers: Record<string, string>;
|
|
31
|
+
body: string;
|
|
32
|
+
signal: AbortSignal;
|
|
33
|
+
}, onEvent: (event: {
|
|
34
|
+
type: string;
|
|
35
|
+
[key: string]: unknown;
|
|
36
|
+
}) => void) => Promise<void>;
|
|
22
37
|
}
|
|
23
38
|
|
|
24
39
|
interface AgentChatState {
|
|
@@ -29,9 +44,10 @@ interface AgentChatState {
|
|
|
29
44
|
inputValue: string;
|
|
30
45
|
streamPhase: StreamState['phase'];
|
|
31
46
|
streamingContent: string;
|
|
47
|
+
streamingAgent: string | null;
|
|
32
48
|
}
|
|
33
49
|
interface AgentChatActions {
|
|
34
|
-
sendMessage: (content: string) => Promise<void>;
|
|
50
|
+
sendMessage: (content: string, attachments?: Attachment[]) => Promise<void>;
|
|
35
51
|
setInputValue: (value: string) => void;
|
|
36
52
|
loadConversation: (conversationId: string, messages: ChatMessage[]) => void;
|
|
37
53
|
submitFeedback: (messageId: string, rating: 'positive' | 'negative', comment?: string) => Promise<void>;
|