@customercity/react 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (205) hide show
  1. package/dist/components/agent-activity.d.ts +11 -0
  2. package/dist/components/agent-activity.d.ts.map +1 -0
  3. package/dist/components/agent-activity.js +9 -0
  4. package/dist/components/agent-activity.js.map +1 -0
  5. package/dist/components/agent-card.d.ts +11 -0
  6. package/dist/components/agent-card.d.ts.map +1 -0
  7. package/dist/components/agent-card.js +8 -0
  8. package/dist/components/agent-card.js.map +1 -0
  9. package/dist/components/agent-message.d.ts +14 -0
  10. package/dist/components/agent-message.d.ts.map +1 -0
  11. package/dist/components/agent-message.js +15 -0
  12. package/dist/components/agent-message.js.map +1 -0
  13. package/dist/components/alert.d.ts +12 -0
  14. package/dist/components/alert.d.ts.map +1 -0
  15. package/dist/components/alert.js +27 -0
  16. package/dist/components/alert.js.map +1 -0
  17. package/dist/components/avatar.d.ts +11 -0
  18. package/dist/components/avatar.d.ts.map +1 -0
  19. package/dist/components/avatar.js +25 -0
  20. package/dist/components/avatar.js.map +1 -0
  21. package/dist/components/breadcrumbs.d.ts +10 -0
  22. package/dist/components/breadcrumbs.d.ts.map +1 -0
  23. package/dist/components/breadcrumbs.js +10 -0
  24. package/dist/components/breadcrumbs.js.map +1 -0
  25. package/dist/components/button.d.ts +17 -0
  26. package/dist/components/button.d.ts.map +1 -0
  27. package/dist/components/button.js +34 -0
  28. package/dist/components/button.js.map +1 -0
  29. package/dist/components/card.d.ts +19 -0
  30. package/dist/components/card.d.ts.map +1 -0
  31. package/dist/components/card.js +22 -0
  32. package/dist/components/card.js.map +1 -0
  33. package/dist/components/checkbox.d.ts +8 -0
  34. package/dist/components/checkbox.d.ts.map +1 -0
  35. package/dist/components/checkbox.js +16 -0
  36. package/dist/components/checkbox.js.map +1 -0
  37. package/dist/components/chip.d.ts +12 -0
  38. package/dist/components/chip.d.ts.map +1 -0
  39. package/dist/components/chip.js +14 -0
  40. package/dist/components/chip.js.map +1 -0
  41. package/dist/components/citations.d.ts +18 -0
  42. package/dist/components/citations.d.ts.map +1 -0
  43. package/dist/components/citations.js +22 -0
  44. package/dist/components/citations.js.map +1 -0
  45. package/dist/components/code-block.d.ts +9 -0
  46. package/dist/components/code-block.d.ts.map +1 -0
  47. package/dist/components/code-block.js +20 -0
  48. package/dist/components/code-block.js.map +1 -0
  49. package/dist/components/combobox.d.ts +17 -0
  50. package/dist/components/combobox.d.ts.map +1 -0
  51. package/dist/components/combobox.js +41 -0
  52. package/dist/components/combobox.js.map +1 -0
  53. package/dist/components/confidence-meter.d.ts +12 -0
  54. package/dist/components/confidence-meter.d.ts.map +1 -0
  55. package/dist/components/confidence-meter.js +15 -0
  56. package/dist/components/confidence-meter.js.map +1 -0
  57. package/dist/components/data-table.d.ts +17 -0
  58. package/dist/components/data-table.d.ts.map +1 -0
  59. package/dist/components/data-table.js +8 -0
  60. package/dist/components/data-table.js.map +1 -0
  61. package/dist/components/date-picker.d.ts +11 -0
  62. package/dist/components/date-picker.d.ts.map +1 -0
  63. package/dist/components/date-picker.js +6 -0
  64. package/dist/components/date-picker.js.map +1 -0
  65. package/dist/components/dialog.d.ts +10 -0
  66. package/dist/components/dialog.d.ts.map +1 -0
  67. package/dist/components/dialog.js +21 -0
  68. package/dist/components/dialog.js.map +1 -0
  69. package/dist/components/drawer.d.ts +11 -0
  70. package/dist/components/drawer.d.ts.map +1 -0
  71. package/dist/components/drawer.js +18 -0
  72. package/dist/components/drawer.js.map +1 -0
  73. package/dist/components/dropdown-menu.d.ts +10 -0
  74. package/dist/components/dropdown-menu.d.ts.map +1 -0
  75. package/dist/components/dropdown-menu.js +19 -0
  76. package/dist/components/dropdown-menu.js.map +1 -0
  77. package/dist/components/empty-state.d.ts +11 -0
  78. package/dist/components/empty-state.d.ts.map +1 -0
  79. package/dist/components/empty-state.js +6 -0
  80. package/dist/components/empty-state.js.map +1 -0
  81. package/dist/components/epistemic-badge.d.ts +10 -0
  82. package/dist/components/epistemic-badge.d.ts.map +1 -0
  83. package/dist/components/epistemic-badge.js +38 -0
  84. package/dist/components/epistemic-badge.js.map +1 -0
  85. package/dist/components/field.d.ts +25 -0
  86. package/dist/components/field.d.ts.map +1 -0
  87. package/dist/components/field.js +52 -0
  88. package/dist/components/field.js.map +1 -0
  89. package/dist/components/input.d.ts +6 -0
  90. package/dist/components/input.d.ts.map +1 -0
  91. package/dist/components/input.js +6 -0
  92. package/dist/components/input.js.map +1 -0
  93. package/dist/components/insight-callout.d.ts +10 -0
  94. package/dist/components/insight-callout.d.ts.map +1 -0
  95. package/dist/components/insight-callout.js +7 -0
  96. package/dist/components/insight-callout.js.map +1 -0
  97. package/dist/components/link.d.ts +6 -0
  98. package/dist/components/link.d.ts.map +1 -0
  99. package/dist/components/link.js +7 -0
  100. package/dist/components/link.js.map +1 -0
  101. package/dist/components/logo.d.ts +31 -0
  102. package/dist/components/logo.d.ts.map +1 -0
  103. package/dist/components/logo.js +94 -0
  104. package/dist/components/logo.js.map +1 -0
  105. package/dist/components/markdown.d.ts +7 -0
  106. package/dist/components/markdown.d.ts.map +1 -0
  107. package/dist/components/markdown.js +31 -0
  108. package/dist/components/markdown.js.map +1 -0
  109. package/dist/components/memory-reference.d.ts +12 -0
  110. package/dist/components/memory-reference.d.ts.map +1 -0
  111. package/dist/components/memory-reference.js +21 -0
  112. package/dist/components/memory-reference.js.map +1 -0
  113. package/dist/components/menu.d.ts +18 -0
  114. package/dist/components/menu.d.ts.map +1 -0
  115. package/dist/components/menu.js +11 -0
  116. package/dist/components/menu.js.map +1 -0
  117. package/dist/components/motion.d.ts +38 -0
  118. package/dist/components/motion.d.ts.map +1 -0
  119. package/dist/components/motion.js +67 -0
  120. package/dist/components/motion.js.map +1 -0
  121. package/dist/components/pagination.d.ts +10 -0
  122. package/dist/components/pagination.d.ts.map +1 -0
  123. package/dist/components/pagination.js +23 -0
  124. package/dist/components/pagination.js.map +1 -0
  125. package/dist/components/popover.d.ts +7 -0
  126. package/dist/components/popover.d.ts.map +1 -0
  127. package/dist/components/popover.js +11 -0
  128. package/dist/components/popover.js.map +1 -0
  129. package/dist/components/progress.d.ts +11 -0
  130. package/dist/components/progress.d.ts.map +1 -0
  131. package/dist/components/progress.js +13 -0
  132. package/dist/components/progress.js.map +1 -0
  133. package/dist/components/prompt-input.d.ts +14 -0
  134. package/dist/components/prompt-input.d.ts.map +1 -0
  135. package/dist/components/prompt-input.js +29 -0
  136. package/dist/components/prompt-input.js.map +1 -0
  137. package/dist/components/radio.d.ts +9 -0
  138. package/dist/components/radio.d.ts.map +1 -0
  139. package/dist/components/radio.js +17 -0
  140. package/dist/components/radio.js.map +1 -0
  141. package/dist/components/score-badge.d.ts +21 -0
  142. package/dist/components/score-badge.d.ts.map +1 -0
  143. package/dist/components/score-badge.js +36 -0
  144. package/dist/components/score-badge.js.map +1 -0
  145. package/dist/components/select.d.ts +18 -0
  146. package/dist/components/select.d.ts.map +1 -0
  147. package/dist/components/select.js +9 -0
  148. package/dist/components/select.js.map +1 -0
  149. package/dist/components/skeleton.d.ts +4 -0
  150. package/dist/components/skeleton.d.ts.map +1 -0
  151. package/dist/components/skeleton.js +7 -0
  152. package/dist/components/skeleton.js.map +1 -0
  153. package/dist/components/slider.d.ts +4 -0
  154. package/dist/components/slider.d.ts.map +1 -0
  155. package/dist/components/slider.js +11 -0
  156. package/dist/components/slider.js.map +1 -0
  157. package/dist/components/sparkle-badge.d.ts +27 -0
  158. package/dist/components/sparkle-badge.d.ts.map +1 -0
  159. package/dist/components/sparkle-badge.js +23 -0
  160. package/dist/components/sparkle-badge.js.map +1 -0
  161. package/dist/components/spinner.d.ts +9 -0
  162. package/dist/components/spinner.d.ts.map +1 -0
  163. package/dist/components/spinner.js +8 -0
  164. package/dist/components/spinner.js.map +1 -0
  165. package/dist/components/streaming-text.d.ts +13 -0
  166. package/dist/components/streaming-text.d.ts.map +1 -0
  167. package/dist/components/streaming-text.js +26 -0
  168. package/dist/components/streaming-text.js.map +1 -0
  169. package/dist/components/switch.d.ts +8 -0
  170. package/dist/components/switch.d.ts.map +1 -0
  171. package/dist/components/switch.js +15 -0
  172. package/dist/components/switch.js.map +1 -0
  173. package/dist/components/tabs.d.ts +18 -0
  174. package/dist/components/tabs.d.ts.map +1 -0
  175. package/dist/components/tabs.js +29 -0
  176. package/dist/components/tabs.js.map +1 -0
  177. package/dist/components/textarea.d.ts +8 -0
  178. package/dist/components/textarea.d.ts.map +1 -0
  179. package/dist/components/textarea.js +12 -0
  180. package/dist/components/textarea.js.map +1 -0
  181. package/dist/components/toast.d.ts +8 -0
  182. package/dist/components/toast.d.ts.map +1 -0
  183. package/dist/components/toast.js +20 -0
  184. package/dist/components/toast.js.map +1 -0
  185. package/dist/components/tooltip.d.ts +13 -0
  186. package/dist/components/tooltip.d.ts.map +1 -0
  187. package/dist/components/tooltip.js +10 -0
  188. package/dist/components/tooltip.js.map +1 -0
  189. package/dist/components/verified-badge.d.ts +14 -0
  190. package/dist/components/verified-badge.d.ts.map +1 -0
  191. package/dist/components/verified-badge.js +20 -0
  192. package/dist/components/verified-badge.js.map +1 -0
  193. package/dist/index.d.ts +51 -0
  194. package/dist/index.d.ts.map +1 -0
  195. package/dist/index.js +55 -0
  196. package/dist/index.js.map +1 -0
  197. package/dist/lib/types.d.ts +20 -0
  198. package/dist/lib/types.d.ts.map +1 -0
  199. package/dist/lib/types.js +7 -0
  200. package/dist/lib/types.js.map +1 -0
  201. package/dist/lib/utils.d.ts +4 -0
  202. package/dist/lib/utils.d.ts.map +1 -0
  203. package/dist/lib/utils.js +7 -0
  204. package/dist/lib/utils.js.map +1 -0
  205. package/package.json +70 -0
@@ -0,0 +1,11 @@
1
+ import * as React from "react";
2
+ interface AgentActivityProps {
3
+ status: string;
4
+ detail?: string;
5
+ state?: "working" | "done" | "idle";
6
+ className?: string;
7
+ }
8
+ /** Agent heartbeat / activity row: "Researching…", "Discovered 3 offices". */
9
+ export declare function AgentActivity({ status, detail, state, className }: AgentActivityProps): React.JSX.Element;
10
+ export {};
11
+ //# sourceMappingURL=agent-activity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-activity.d.ts","sourceRoot":"","sources":["../../src/components/agent-activity.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,UAAU,kBAAkB;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,8EAA8E;AAC9E,wBAAgB,aAAa,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,KAAiB,EAAE,SAAS,EAAE,EAAE,kBAAkB,qBAoBjG"}
@@ -0,0 +1,9 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Check } from "lucide-react";
3
+ import { MetaSparkle } from "./sparkle-badge";
4
+ import { cn } from "../lib/utils";
5
+ /** Agent heartbeat / activity row: "Researching…", "Discovered 3 offices". */
6
+ export function AgentActivity({ status, detail, state = "working", className }) {
7
+ return (_jsxs("div", { className: cn("inline-flex items-center gap-2.5 rounded-lg border border-sparkle-border bg-agent-card px-3 py-2", className), role: "status", "aria-live": "polite", children: [state === "done" ? (_jsx("span", { className: "flex h-5 w-5 items-center justify-center rounded-full bg-green-bg text-green", children: _jsx(Check, { className: "h-3 w-3", strokeWidth: 3 }) })) : (_jsx(MetaSparkle, { size: 16, className: state === "working" ? "sparkle-pulse" : "" })), _jsxs("div", { className: "min-w-0", children: [_jsx("span", { className: "text-[13px] font-medium text-foreground", children: status }), detail && _jsx("span", { className: "ml-1.5 text-[12px] text-muted", children: detail })] })] }));
8
+ }
9
+ //# sourceMappingURL=agent-activity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-activity.js","sourceRoot":"","sources":["../../src/components/agent-activity.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AASlC,8EAA8E;AAC9E,MAAM,UAAU,aAAa,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,GAAG,SAAS,EAAE,SAAS,EAAsB;IAChG,OAAO,CACL,eACE,SAAS,EAAE,EAAE,CAAC,kGAAkG,EAAE,SAAS,CAAC,EAC5H,IAAI,EAAC,QAAQ,eACH,QAAQ,aAEjB,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,CAClB,eAAM,SAAS,EAAC,8EAA8E,YAC5F,KAAC,KAAK,IAAC,SAAS,EAAC,SAAS,EAAC,WAAW,EAAE,CAAC,GAAI,GACxC,CACR,CAAC,CAAC,CAAC,CACF,KAAC,WAAW,IAAC,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,GAAI,CACjF,EACD,eAAK,SAAS,EAAC,SAAS,aACtB,eAAM,SAAS,EAAC,yCAAyC,YAAE,MAAM,GAAQ,EACxE,MAAM,IAAI,eAAM,SAAS,EAAC,+BAA+B,YAAE,MAAM,GAAQ,IACtE,IACF,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,11 @@
1
+ import * as React from "react";
2
+ interface AgentCardProps {
3
+ /** Eyebrow label shown next to the sparkle, e.g. "Agent Briefing". */
4
+ label?: string;
5
+ children: React.ReactNode;
6
+ className?: string;
7
+ }
8
+ /** Dedicated agent surface: tricolor glow + shimmer + sparkle header. */
9
+ export declare function AgentCard({ label, children, className }: AgentCardProps): React.JSX.Element;
10
+ export {};
11
+ //# sourceMappingURL=agent-card.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-card.d.ts","sourceRoot":"","sources":["../../src/components/agent-card.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,UAAU,cAAc;IACtB,sEAAsE;IACtE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,yEAAyE;AACzE,wBAAgB,SAAS,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,cAAc,qBAYvE"}
@@ -0,0 +1,8 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { MetaSparkle } from "./sparkle-badge";
3
+ import { cn } from "../lib/utils";
4
+ /** Dedicated agent surface: tricolor glow + shimmer + sparkle header. */
5
+ export function AgentCard({ label, children, className }) {
6
+ return (_jsxs("div", { className: cn("agent-card agent-shimmer rounded-lg p-5", className), children: [label && (_jsxs("div", { className: "mb-2.5 flex items-center gap-1.5", children: [_jsx(MetaSparkle, { size: 14 }), _jsx("span", { className: "text-[12px] font-bold uppercase tracking-[0.04em] text-sparkle", children: label })] })), children] }));
7
+ }
8
+ //# sourceMappingURL=agent-card.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-card.js","sourceRoot":"","sources":["../../src/components/agent-card.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AASlC,yEAAyE;AACzE,MAAM,UAAU,SAAS,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAkB;IACtE,OAAO,CACL,eAAK,SAAS,EAAE,EAAE,CAAC,yCAAyC,EAAE,SAAS,CAAC,aACrE,KAAK,IAAI,CACR,eAAK,SAAS,EAAC,kCAAkC,aAC/C,KAAC,WAAW,IAAC,IAAI,EAAE,EAAE,GAAI,EACzB,eAAM,SAAS,EAAC,gEAAgE,YAAE,KAAK,GAAQ,IAC3F,CACP,EACA,QAAQ,IACL,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,14 @@
1
+ import * as React from "react";
2
+ interface AgentMessageProps {
3
+ role: "user" | "agent";
4
+ children: React.ReactNode;
5
+ timestamp?: string;
6
+ sources?: string[];
7
+ className?: string;
8
+ }
9
+ /** Chat bubble for agent ↔ human conversation. Presentational. */
10
+ export declare function AgentMessage({ role, children, timestamp, sources, className }: AgentMessageProps): React.JSX.Element;
11
+ /** Three-dot bounce shown while the agent is composing. */
12
+ export declare function TypingIndicator(): React.JSX.Element;
13
+ export {};
14
+ //# sourceMappingURL=agent-message.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-message.d.ts","sourceRoot":"","sources":["../../src/components/agent-message.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,UAAU,iBAAiB;IACzB,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,kEAAkE;AAClE,wBAAgB,YAAY,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,iBAAiB,qBAiChG;AAED,2DAA2D;AAC3D,wBAAgB,eAAe,sBAY9B"}
@@ -0,0 +1,15 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { MetaSparkle } from "./sparkle-badge";
3
+ import { cn } from "../lib/utils";
4
+ /** Chat bubble for agent ↔ human conversation. Presentational. */
5
+ export function AgentMessage({ role, children, timestamp, sources, className }) {
6
+ const isAgent = role === "agent";
7
+ return (_jsx("div", { className: cn("flex w-full", isAgent ? "justify-start" : "justify-end", className), children: _jsxs("div", { className: cn("flex max-w-[85%] flex-col gap-1", isAgent ? "items-start" : "items-end"), children: [isAgent && (_jsxs("span", { className: "inline-flex items-center gap-1 text-[11px] font-semibold text-sparkle", children: [_jsx(MetaSparkle, { size: 12 }), " Agent"] })), _jsx("div", { className: cn("rounded-2xl px-3.5 py-2.5 text-[14px] leading-relaxed", isAgent
8
+ ? "rounded-bl-sm border border-sparkle-border bg-agent-card text-foreground"
9
+ : "rounded-br-sm bg-brand text-white"), children: children }), sources && sources.length > 0 && (_jsx("div", { className: "flex flex-wrap gap-1", children: sources.map((s) => (_jsx("span", { className: "rounded-md bg-accent px-1.5 py-0.5 text-[10px] font-medium text-muted", children: s }, s))) })), timestamp && _jsx("span", { className: "text-[11px] text-muted-foreground", children: timestamp })] }) }));
10
+ }
11
+ /** Three-dot bounce shown while the agent is composing. */
12
+ export function TypingIndicator() {
13
+ return (_jsx("div", { className: "inline-flex items-center gap-1 rounded-2xl rounded-bl-sm border border-sparkle-border bg-agent-card px-3.5 py-3", "aria-label": "Agent is typing", children: [0, 0.15, 0.3].map((delay, i) => (_jsx("span", { className: "h-1.5 w-1.5 rounded-full bg-sparkle", style: { animation: "sparkle-pulse 1.2s ease-in-out infinite", animationDelay: `${delay}s` } }, i))) }));
14
+ }
15
+ //# sourceMappingURL=agent-message.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-message.js","sourceRoot":"","sources":["../../src/components/agent-message.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAUlC,kEAAkE;AAClE,MAAM,UAAU,YAAY,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAqB;IAC/F,MAAM,OAAO,GAAG,IAAI,KAAK,OAAO,CAAC;IACjC,OAAO,CACL,cAAK,SAAS,EAAE,EAAE,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,aAAa,EAAE,SAAS,CAAC,YACrF,eAAK,SAAS,EAAE,EAAE,CAAC,iCAAiC,EAAE,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC,aACzF,OAAO,IAAI,CACV,gBAAM,SAAS,EAAC,uEAAuE,aACrF,KAAC,WAAW,IAAC,IAAI,EAAE,EAAE,GAAI,cACpB,CACR,EACD,cACE,SAAS,EAAE,EAAE,CACX,uDAAuD,EACvD,OAAO;wBACL,CAAC,CAAC,0EAA0E;wBAC5E,CAAC,CAAC,mCAAmC,CACxC,YAEA,QAAQ,GACL,EACL,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,CAChC,cAAK,SAAS,EAAC,sBAAsB,YAClC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAClB,eAAc,SAAS,EAAC,uEAAuE,YAC5F,CAAC,IADO,CAAC,CAEL,CACR,CAAC,GACE,CACP,EACA,SAAS,IAAI,eAAM,SAAS,EAAC,mCAAmC,YAAE,SAAS,GAAQ,IAChF,GACF,CACP,CAAC;AACJ,CAAC;AAED,2DAA2D;AAC3D,MAAM,UAAU,eAAe;IAC7B,OAAO,CACL,cAAK,SAAS,EAAC,iHAAiH,gBAAY,iBAAiB,YAC1J,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAChC,eAEE,SAAS,EAAC,qCAAqC,EAC/C,KAAK,EAAE,EAAE,SAAS,EAAE,yCAAyC,EAAE,cAAc,EAAE,GAAG,KAAK,GAAG,EAAE,IAFvF,CAAC,CAGN,CACH,CAAC,GACE,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,12 @@
1
+ import * as React from "react";
2
+ import { type VariantProps } from "class-variance-authority";
3
+ declare const alertVariants: (props?: ({
4
+ variant?: "info" | "success" | "warning" | "danger" | null | undefined;
5
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
6
+ export interface AlertProps extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof alertVariants> {
7
+ title?: string;
8
+ icon?: React.ReactNode;
9
+ }
10
+ export declare function Alert({ variant, title, icon, children, className, ...props }: AlertProps): React.JSX.Element;
11
+ export {};
12
+ //# sourceMappingURL=alert.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alert.d.ts","sourceRoot":"","sources":["../../src/components/alert.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAIlE,QAAA,MAAM,aAAa;;8EAUjB,CAAC;AASH,MAAM,WAAW,UACf,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAC1C,YAAY,CAAC,OAAO,aAAa,CAAC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CACxB;AAED,wBAAgB,KAAK,CAAC,EAAE,OAAgB,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,UAAU,qBAgBjG"}
@@ -0,0 +1,27 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { cva } from "class-variance-authority";
3
+ import { Info, CheckCircle2, AlertTriangle, XCircle } from "lucide-react";
4
+ import { cn } from "../lib/utils";
5
+ const alertVariants = cva("flex gap-3 rounded-lg border p-4", {
6
+ variants: {
7
+ variant: {
8
+ info: "border-brand/30 bg-brand-light text-foreground",
9
+ success: "border-green/30 bg-green-bg text-foreground",
10
+ warning: "border-orange/30 bg-orange-bg text-foreground",
11
+ danger: "border-red/30 bg-red-bg text-foreground",
12
+ },
13
+ },
14
+ defaultVariants: { variant: "info" },
15
+ });
16
+ const iconFor = {
17
+ info: { Icon: Info, color: "text-brand" },
18
+ success: { Icon: CheckCircle2, color: "text-green" },
19
+ warning: { Icon: AlertTriangle, color: "text-orange" },
20
+ danger: { Icon: XCircle, color: "text-red" },
21
+ };
22
+ export function Alert({ variant = "info", title, icon, children, className, ...props }) {
23
+ const v = variant ?? "info";
24
+ const { Icon, color } = iconFor[v];
25
+ return (_jsxs("div", { role: v === "danger" || v === "warning" ? "alert" : "status", className: cn(alertVariants({ variant }), className), ...props, children: [_jsx("span", { className: cn("mt-0.5 shrink-0", color), children: icon ?? _jsx(Icon, { className: "h-4 w-4" }) }), _jsxs("div", { className: "min-w-0", children: [title && _jsx("div", { className: "text-[13px] font-semibold text-foreground", children: title }), children && _jsx("div", { className: "text-[13px] text-muted", children: children })] })] }));
26
+ }
27
+ //# sourceMappingURL=alert.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alert.js","sourceRoot":"","sources":["../../src/components/alert.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAqB,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC1E,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAElC,MAAM,aAAa,GAAG,GAAG,CAAC,kCAAkC,EAAE;IAC5D,QAAQ,EAAE;QACR,OAAO,EAAE;YACP,IAAI,EAAE,gDAAgD;YACtD,OAAO,EAAE,6CAA6C;YACtD,OAAO,EAAE,+CAA+C;YACxD,MAAM,EAAE,yCAAyC;SAClD;KACF;IACD,eAAe,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE;CACrC,CAAC,CAAC;AAEH,MAAM,OAAO,GAAG;IACd,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE;IACzC,OAAO,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE;IACpD,OAAO,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,EAAE;IACtD,MAAM,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE;CAC7C,CAAC;AASF,MAAM,UAAU,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,KAAK,EAAc;IAChG,MAAM,CAAC,GAAG,OAAO,IAAI,MAAM,CAAC;IAC5B,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACnC,OAAO,CACL,eACE,IAAI,EAAE,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,EAC5D,SAAS,EAAE,EAAE,CAAC,aAAa,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,CAAC,KAChD,KAAK,aAET,eAAM,SAAS,EAAE,EAAE,CAAC,iBAAiB,EAAE,KAAK,CAAC,YAAG,IAAI,IAAI,KAAC,IAAI,IAAC,SAAS,EAAC,SAAS,GAAG,GAAQ,EAC5F,eAAK,SAAS,EAAC,SAAS,aACrB,KAAK,IAAI,cAAK,SAAS,EAAC,2CAA2C,YAAE,KAAK,GAAO,EACjF,QAAQ,IAAI,cAAK,SAAS,EAAC,wBAAwB,YAAE,QAAQ,GAAO,IACjE,IACF,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,11 @@
1
+ interface AvatarProps {
2
+ name: string;
3
+ src?: string | null;
4
+ size?: "xs" | "sm" | "md" | "lg" | "xl";
5
+ /** Optional colored ring (hex/CSS color) for status/tier. */
6
+ ring?: string;
7
+ className?: string;
8
+ }
9
+ export declare function Avatar({ name, src, size, ring, className }: AvatarProps): import("react").JSX.Element;
10
+ export {};
11
+ //# sourceMappingURL=avatar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"avatar.d.ts","sourceRoot":"","sources":["../../src/components/avatar.tsx"],"names":[],"mappings":"AAEA,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IACxC,6DAA6D;IAC7D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAmBD,wBAAgB,MAAM,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,IAAW,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,WAAW,+BA2B9E"}
@@ -0,0 +1,25 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { cn } from "../lib/utils";
3
+ const sizeClasses = {
4
+ xs: "h-6 w-6 text-[9px]",
5
+ sm: "h-8 w-8 text-xs",
6
+ md: "h-10 w-10 text-sm",
7
+ lg: "h-14 w-14 text-base",
8
+ xl: "h-20 w-20 text-lg",
9
+ };
10
+ const ringWidths = { xs: "2px", sm: "2px", md: "2px", lg: "3px", xl: "3px" };
11
+ function getInitials(name) {
12
+ const parts = name.split(" ").filter(Boolean);
13
+ if (parts.length === 0)
14
+ return "?";
15
+ if (parts.length === 1)
16
+ return parts[0][0].toUpperCase();
17
+ return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase();
18
+ }
19
+ export function Avatar({ name, src, size = "md", ring, className }) {
20
+ const ringStyle = ring ? { boxShadow: `0 0 0 ${ringWidths[size]} ${ring}` } : undefined;
21
+ return (_jsx("div", { className: cn("relative inline-flex shrink-0", className), children: src ? (
22
+ // eslint-disable-next-line @next/next/no-img-element
23
+ _jsx("img", { src: src, alt: name, className: cn("rounded-full border border-border object-cover", sizeClasses[size]), style: ringStyle })) : (_jsx("div", { className: cn("flex items-center justify-center rounded-full border border-border bg-gradient-to-br from-brand to-brand-hover font-semibold text-white", sizeClasses[size]), style: ringStyle, "aria-label": name, children: getInitials(name) })) }));
24
+ }
25
+ //# sourceMappingURL=avatar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"avatar.js","sourceRoot":"","sources":["../../src/components/avatar.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAWlC,MAAM,WAAW,GAAG;IAClB,EAAE,EAAE,oBAAoB;IACxB,EAAE,EAAE,iBAAiB;IACrB,EAAE,EAAE,mBAAmB;IACvB,EAAE,EAAE,qBAAqB;IACzB,EAAE,EAAE,mBAAmB;CACxB,CAAC;AAEF,MAAM,UAAU,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC;AAE7E,SAAS,WAAW,CAAC,IAAY;IAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC9C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC;IACnC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IACzD,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,EAAE,SAAS,EAAe;IAC7E,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAExF,OAAO,CACL,cAAK,SAAS,EAAE,EAAE,CAAC,+BAA+B,EAAE,SAAS,CAAC,YAC3D,GAAG,CAAC,CAAC,CAAC;QACL,qDAAqD;QACrD,cACE,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,IAAI,EACT,SAAS,EAAE,EAAE,CAAC,gDAAgD,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC,EAClF,KAAK,EAAE,SAAS,GAChB,CACH,CAAC,CAAC,CAAC,CACF,cACE,SAAS,EAAE,EAAE,CACX,yIAAyI,EACzI,WAAW,CAAC,IAAI,CAAC,CAClB,EACD,KAAK,EAAE,SAAS,gBACJ,IAAI,YAEf,WAAW,CAAC,IAAI,CAAC,GACd,CACP,GACG,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,10 @@
1
+ import * as React from "react";
2
+ export interface Crumb {
3
+ label: string;
4
+ href?: string;
5
+ }
6
+ export declare function Breadcrumbs({ items, className }: {
7
+ items: Crumb[];
8
+ className?: string;
9
+ }): React.JSX.Element;
10
+ //# sourceMappingURL=breadcrumbs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"breadcrumbs.d.ts","sourceRoot":"","sources":["../../src/components/breadcrumbs.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,MAAM,WAAW,KAAK;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;IAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,qBAwBvF"}
@@ -0,0 +1,10 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { ChevronRight } from "lucide-react";
3
+ import { cn } from "../lib/utils";
4
+ export function Breadcrumbs({ items, className }) {
5
+ return (_jsx("nav", { "aria-label": "Breadcrumb", className: className, children: _jsx("ol", { className: "flex flex-wrap items-center gap-1.5 text-[13px]", children: items.map((item, i) => {
6
+ const last = i === items.length - 1;
7
+ return (_jsxs("li", { className: "flex items-center gap-1.5", children: [item.href && !last ? (_jsx("a", { href: item.href, className: "text-muted hover:text-foreground hover:underline", children: item.label })) : (_jsx("span", { className: cn(last ? "font-medium text-foreground" : "text-muted"), "aria-current": last ? "page" : undefined, children: item.label })), !last && _jsx(ChevronRight, { className: "h-3.5 w-3.5 text-muted-foreground", "aria-hidden": true })] }, i));
8
+ }) }) }));
9
+ }
10
+ //# sourceMappingURL=breadcrumbs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"breadcrumbs.js","sourceRoot":"","sources":["../../src/components/breadcrumbs.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAOlC,MAAM,UAAU,WAAW,CAAC,EAAE,KAAK,EAAE,SAAS,EAA0C;IACtF,OAAO,CACL,4BAAgB,YAAY,EAAC,SAAS,EAAE,SAAS,YAC/C,aAAI,SAAS,EAAC,iDAAiD,YAC5D,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;gBACrB,MAAM,IAAI,GAAG,CAAC,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;gBACpC,OAAO,CACL,cAAY,SAAS,EAAC,2BAA2B,aAC9C,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CACpB,YAAG,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,EAAC,kDAAkD,YAC7E,IAAI,CAAC,KAAK,GACT,CACL,CAAC,CAAC,CAAC,CACF,eAAM,SAAS,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC,YAAY,CAAC,kBAAgB,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,YAC9G,IAAI,CAAC,KAAK,GACN,CACR,EACA,CAAC,IAAI,IAAI,KAAC,YAAY,IAAC,SAAS,EAAC,mCAAmC,wBAAe,KAV7E,CAAC,CAWL,CACN,CAAC;YACJ,CAAC,CAAC,GACC,GACD,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,17 @@
1
+ import * as React from "react";
2
+ import { type VariantProps } from "class-variance-authority";
3
+ declare const buttonVariants: (props?: ({
4
+ variant?: "danger" | "primary" | "secondary" | "ghost" | "outline" | null | undefined;
5
+ size?: "sm" | "md" | "lg" | null | undefined;
6
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
7
+ export interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {
8
+ asChild?: boolean;
9
+ loading?: boolean;
10
+ }
11
+ export declare const Button: React.ForwardRefExoticComponent<ButtonProps & React.RefAttributes<HTMLButtonElement>>;
12
+ export interface IconButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {
13
+ "aria-label": string;
14
+ }
15
+ export declare const IconButton: React.ForwardRefExoticComponent<IconButtonProps & React.RefAttributes<HTMLButtonElement>>;
16
+ export { buttonVariants };
17
+ //# sourceMappingURL=button.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"button.d.ts","sourceRoot":"","sources":["../../src/components/button.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAIlE,QAAA,MAAM,cAAc;;;8EAmBnB,CAAC;AAEF,MAAM,WAAW,WACf,SAAQ,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EACnD,YAAY,CAAC,OAAO,cAAc,CAAC;IACrC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,eAAO,MAAM,MAAM,uFAelB,CAAC;AAGF,MAAM,WAAW,eACf,SAAQ,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EACnD,YAAY,CAAC,OAAO,cAAc,CAAC;IACrC,YAAY,EAAE,MAAM,CAAC;CACtB;AAID,eAAO,MAAM,UAAU,2FAUtB,CAAC;AAGF,OAAO,EAAE,cAAc,EAAE,CAAC"}
@@ -0,0 +1,34 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ import { Slot } from "@radix-ui/react-slot";
5
+ import { cva } from "class-variance-authority";
6
+ import { Loader2 } from "lucide-react";
7
+ import { cn } from "../lib/utils";
8
+ const buttonVariants = cva("inline-flex items-center justify-center gap-2 rounded-md font-semibold transition-colors duration-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand focus-visible:ring-offset-1 focus-visible:ring-offset-background disabled:pointer-events-none disabled:opacity-50", {
9
+ variants: {
10
+ variant: {
11
+ primary: "bg-brand text-white hover:bg-brand-hover",
12
+ secondary: "bg-accent text-foreground hover:bg-border-light",
13
+ ghost: "bg-transparent text-foreground hover:bg-accent",
14
+ outline: "border border-border bg-card text-foreground hover:bg-accent",
15
+ danger: "bg-red text-white hover:opacity-90",
16
+ },
17
+ size: {
18
+ sm: "h-8 px-3 text-[13px]",
19
+ md: "h-10 px-4 text-sm",
20
+ lg: "h-11 px-5 text-[15px]",
21
+ },
22
+ },
23
+ defaultVariants: { variant: "primary", size: "md" },
24
+ });
25
+ export const Button = React.forwardRef(({ className, variant, size, asChild = false, loading = false, disabled, children, ...props }, ref) => {
26
+ const Comp = asChild ? Slot : "button";
27
+ return (_jsxs(Comp, { ref: ref, className: cn(buttonVariants({ variant, size }), className), disabled: disabled || loading, ...props, children: [loading && _jsx(Loader2, { className: "h-4 w-4 animate-spin", "aria-hidden": true }), children] }));
28
+ });
29
+ Button.displayName = "Button";
30
+ const iconSize = { sm: "h-8 w-8", md: "h-10 w-10", lg: "h-11 w-11" };
31
+ export const IconButton = React.forwardRef(({ className, variant = "ghost", size = "md", children, ...props }, ref) => (_jsx("button", { ref: ref, className: cn(buttonVariants({ variant, size }), "p-0", iconSize[size ?? "md"], className), ...props, children: children })));
32
+ IconButton.displayName = "IconButton";
33
+ export { buttonVariants };
34
+ //# sourceMappingURL=button.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"button.js","sourceRoot":"","sources":["../../src/components/button.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAE,GAAG,EAAqB,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAElC,MAAM,cAAc,GAAG,GAAG,CACxB,kSAAkS,EAClS;IACE,QAAQ,EAAE;QACR,OAAO,EAAE;YACP,OAAO,EAAE,0CAA0C;YACnD,SAAS,EAAE,iDAAiD;YAC5D,KAAK,EAAE,gDAAgD;YACvD,OAAO,EAAE,8DAA8D;YACvE,MAAM,EAAE,oCAAoC;SAC7C;QACD,IAAI,EAAE;YACJ,EAAE,EAAE,sBAAsB;YAC1B,EAAE,EAAE,mBAAmB;YACvB,EAAE,EAAE,uBAAuB;SAC5B;KACF;IACD,eAAe,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE;CACpD,CACF,CAAC;AASF,MAAM,CAAC,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,CACpC,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,GAAG,KAAK,EAAE,OAAO,GAAG,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE;IACpG,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC;IACvC,OAAO,CACL,MAAC,IAAI,IACH,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CAAC,cAAc,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,CAAC,EAC3D,QAAQ,EAAE,QAAQ,IAAI,OAAO,KACzB,KAAK,aAER,OAAO,IAAI,KAAC,OAAO,IAAC,SAAS,EAAC,sBAAsB,wBAAe,EACnE,QAAQ,IACJ,CACR,CAAC;AACJ,CAAC,CACF,CAAC;AACF,MAAM,CAAC,WAAW,GAAG,QAAQ,CAAC;AAQ9B,MAAM,QAAQ,GAAG,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC;AAErE,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CACxC,CAAC,EAAE,SAAS,EAAE,OAAO,GAAG,OAAO,EAAE,IAAI,GAAG,IAAI,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAC1E,iBACE,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CAAC,cAAc,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,SAAS,CAAC,KACtF,KAAK,YAER,QAAQ,GACF,CACV,CACF,CAAC;AACF,UAAU,CAAC,WAAW,GAAG,YAAY,CAAC;AAEtC,OAAO,EAAE,cAAc,EAAE,CAAC"}
@@ -0,0 +1,19 @@
1
+ interface CardProps extends React.HTMLAttributes<HTMLDivElement> {
2
+ children: React.ReactNode;
3
+ padding?: "none" | "sm" | "md" | "lg";
4
+ shadow?: "default" | "md" | "lg" | "none";
5
+ hover?: boolean;
6
+ agent?: boolean;
7
+ as?: "div" | "article";
8
+ }
9
+ export declare function Card({ children, padding, shadow, hover, agent, as: Component, className, ...props }: CardProps): import("react").JSX.Element;
10
+ interface CardHeaderProps {
11
+ title: string;
12
+ subtitle?: string;
13
+ action?: React.ReactNode;
14
+ uppercase?: boolean;
15
+ className?: string;
16
+ }
17
+ export declare function CardHeader({ title, subtitle, action, uppercase, className, }: CardHeaderProps): import("react").JSX.Element;
18
+ export {};
19
+ //# sourceMappingURL=card.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"card.d.ts","sourceRoot":"","sources":["../../src/components/card.tsx"],"names":[],"mappings":"AAEA,UAAU,SAAU,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IAC9D,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IACtC,MAAM,CAAC,EAAE,SAAS,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,CAAC;IAC1C,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,EAAE,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC;CACxB;AAED,wBAAgB,IAAI,CAAC,EACnB,QAAQ,EACR,OAAc,EACd,MAAkB,EAClB,KAAa,EACb,KAAa,EACb,EAAE,EAAE,SAAiB,EACrB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,SAAS,+BAgCX;AAED,UAAU,eAAe;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,QAAQ,EACR,MAAM,EACN,SAAiB,EACjB,SAAS,GACV,EAAE,eAAe,+BAgBjB"}
@@ -0,0 +1,22 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { cn } from "../lib/utils";
3
+ export function Card({ children, padding = "md", shadow = "default", hover = false, agent = false, as: Component = "div", className, ...props }) {
4
+ const paddingClasses = {
5
+ none: "",
6
+ sm: "p-4",
7
+ md: "p-5",
8
+ lg: "p-5 sm:p-6",
9
+ };
10
+ const shadowClasses = {
11
+ none: "",
12
+ default: "card-shadow",
13
+ md: "card-shadow-md",
14
+ lg: "card-shadow-lg",
15
+ };
16
+ return (_jsx(Component, { className: cn("rounded-lg border border-border", agent ? "agent-card agent-shimmer" : "bg-card", paddingClasses[padding], shadowClasses[shadow], hover &&
17
+ "transition-all duration-200 hover:card-shadow-md hover:-translate-y-px cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand", !hover && "transition-all duration-200", className), ...props, children: children }));
18
+ }
19
+ export function CardHeader({ title, subtitle, action, uppercase = false, className, }) {
20
+ return (_jsxs("div", { className: cn("flex items-center justify-between", className), children: [_jsxs("div", { children: [uppercase ? (_jsx("h3", { className: "text-[12px] font-bold uppercase tracking-[0.04em] text-muted-foreground", children: title })) : (_jsx("h3", { className: "text-[17px] font-bold text-foreground", children: title })), subtitle && _jsx("p", { className: "mt-0.5 text-[13px] text-muted", children: subtitle })] }), action] }));
21
+ }
22
+ //# sourceMappingURL=card.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"card.js","sourceRoot":"","sources":["../../src/components/card.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAWlC,MAAM,UAAU,IAAI,CAAC,EACnB,QAAQ,EACR,OAAO,GAAG,IAAI,EACd,MAAM,GAAG,SAAS,EAClB,KAAK,GAAG,KAAK,EACb,KAAK,GAAG,KAAK,EACb,EAAE,EAAE,SAAS,GAAG,KAAK,EACrB,SAAS,EACT,GAAG,KAAK,EACE;IACV,MAAM,cAAc,GAAG;QACrB,IAAI,EAAE,EAAE;QACR,EAAE,EAAE,KAAK;QACT,EAAE,EAAE,KAAK;QACT,EAAE,EAAE,YAAY;KACjB,CAAC;IAEF,MAAM,aAAa,GAAG;QACpB,IAAI,EAAE,EAAE;QACR,OAAO,EAAE,aAAa;QACtB,EAAE,EAAE,gBAAgB;QACpB,EAAE,EAAE,gBAAgB;KACrB,CAAC;IAEF,OAAO,CACL,KAAC,SAAS,IACR,SAAS,EAAE,EAAE,CACX,iCAAiC,EACjC,KAAK,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,SAAS,EAC9C,cAAc,CAAC,OAAO,CAAC,EACvB,aAAa,CAAC,MAAM,CAAC,EACrB,KAAK;YACH,gKAAgK,EAClK,CAAC,KAAK,IAAI,6BAA6B,EACvC,SAAS,CACV,KACG,KAAK,YAER,QAAQ,GACC,CACb,CAAC;AACJ,CAAC;AAUD,MAAM,UAAU,UAAU,CAAC,EACzB,KAAK,EACL,QAAQ,EACR,MAAM,EACN,SAAS,GAAG,KAAK,EACjB,SAAS,GACO;IAChB,OAAO,CACL,eAAK,SAAS,EAAE,EAAE,CAAC,mCAAmC,EAAE,SAAS,CAAC,aAChE,0BACG,SAAS,CAAC,CAAC,CAAC,CACX,aAAI,SAAS,EAAC,yEAAyE,YACpF,KAAK,GACH,CACN,CAAC,CAAC,CAAC,CACF,aAAI,SAAS,EAAC,uCAAuC,YAAE,KAAK,GAAM,CACnE,EACA,QAAQ,IAAI,YAAG,SAAS,EAAC,+BAA+B,YAAE,QAAQ,GAAK,IACpE,EACL,MAAM,IACH,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,8 @@
1
+ import * as React from "react";
2
+ import * as RC from "@radix-ui/react-checkbox";
3
+ interface CheckboxProps extends React.ComponentPropsWithoutRef<typeof RC.Root> {
4
+ label?: string;
5
+ }
6
+ export declare const Checkbox: React.ForwardRefExoticComponent<CheckboxProps & React.RefAttributes<HTMLButtonElement>>;
7
+ export {};
8
+ //# sourceMappingURL=checkbox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkbox.d.ts","sourceRoot":"","sources":["../../src/components/checkbox.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAI/C,UAAU,aAAc,SAAQ,KAAK,CAAC,wBAAwB,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC;IAC5E,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAGD,eAAO,MAAM,QAAQ,yFA6BpB,CAAC"}
@@ -0,0 +1,16 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ import * as RC from "@radix-ui/react-checkbox";
5
+ import { Check } from "lucide-react";
6
+ import { cn } from "../lib/utils";
7
+ let cbId = 0;
8
+ export const Checkbox = React.forwardRef(({ className, label, id, ...props }, ref) => {
9
+ const [autoId] = React.useState(() => id ?? `cb-${++cbId}`);
10
+ const box = (_jsx(RC.Root, { ref: ref, id: autoId, className: cn("flex h-[18px] w-[18px] shrink-0 items-center justify-center rounded border border-border bg-card transition-colors", "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand", "data-[state=checked]:border-brand data-[state=checked]:bg-brand", "disabled:cursor-not-allowed disabled:opacity-50", className), ...props, children: _jsx(RC.Indicator, { children: _jsx(Check, { className: "h-3 w-3 text-white", strokeWidth: 3 }) }) }));
11
+ if (!label)
12
+ return box;
13
+ return (_jsxs("label", { htmlFor: autoId, className: "inline-flex cursor-pointer items-center gap-2 text-sm text-foreground", children: [box, label] }));
14
+ });
15
+ Checkbox.displayName = "Checkbox";
16
+ //# sourceMappingURL=checkbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkbox.js","sourceRoot":"","sources":["../../src/components/checkbox.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAC/C,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAMlC,IAAI,IAAI,GAAG,CAAC,CAAC;AACb,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,CACtC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE;IAC1C,MAAM,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,MAAM,GAAG,GAAG,CACV,KAAC,EAAE,CAAC,IAAI,IACN,GAAG,EAAE,GAAG,EACR,EAAE,EAAE,MAAM,EACV,SAAS,EAAE,EAAE,CACX,oHAAoH,EACpH,0EAA0E,EAC1E,iEAAiE,EACjE,iDAAiD,EACjD,SAAS,CACV,KACG,KAAK,YAET,KAAC,EAAE,CAAC,SAAS,cACX,KAAC,KAAK,IAAC,SAAS,EAAC,oBAAoB,EAAC,WAAW,EAAE,CAAC,GAAI,GAC3C,GACP,CACX,CAAC;IACF,IAAI,CAAC,KAAK;QAAE,OAAO,GAAG,CAAC;IACvB,OAAO,CACL,iBAAO,OAAO,EAAE,MAAM,EAAE,SAAS,EAAC,uEAAuE,aACtG,GAAG,EACH,KAAK,IACA,CACT,CAAC;AACJ,CAAC,CACF,CAAC;AACF,QAAQ,CAAC,WAAW,GAAG,UAAU,CAAC"}
@@ -0,0 +1,12 @@
1
+ interface ChipProps {
2
+ label: string;
3
+ selected?: boolean;
4
+ removable?: boolean;
5
+ onRemove?: () => void;
6
+ onClick?: () => void;
7
+ className?: string;
8
+ }
9
+ /** Presentational chip / tag. Selectable and optionally removable. */
10
+ export declare function Chip({ label, selected, removable, onRemove, onClick, className }: ChipProps): import("react").JSX.Element;
11
+ export {};
12
+ //# sourceMappingURL=chip.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chip.d.ts","sourceRoot":"","sources":["../../src/components/chip.tsx"],"names":[],"mappings":"AAGA,UAAU,SAAS;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,sEAAsE;AACtE,wBAAgB,IAAI,CAAC,EAAE,KAAK,EAAE,QAAgB,EAAE,SAAiB,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,SAAS,+BA8B3G"}
@@ -0,0 +1,14 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { X } from "lucide-react";
3
+ import { cn } from "../lib/utils";
4
+ /** Presentational chip / tag. Selectable and optionally removable. */
5
+ export function Chip({ label, selected = false, removable = false, onRemove, onClick, className }) {
6
+ const interactive = Boolean(onClick);
7
+ return (_jsxs("span", { ...(interactive ? { role: "button", tabIndex: 0, onClick } : {}), className: cn("inline-flex items-center gap-1.5 rounded-full border px-3 py-1 text-[13px] font-medium transition-colors duration-100", interactive && "cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand", selected
8
+ ? "border-brand bg-brand-light text-brand"
9
+ : "border-border bg-card text-foreground hover:border-muted", className), children: [label, removable && (_jsx("button", { type: "button", "aria-label": `Remove ${label}`, onClick: (e) => {
10
+ e.stopPropagation();
11
+ onRemove?.();
12
+ }, className: "-mr-1 rounded-full p-0.5 text-muted hover:bg-accent hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand", children: _jsx(X, { className: "h-3 w-3" }) }))] }));
13
+ }
14
+ //# sourceMappingURL=chip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chip.js","sourceRoot":"","sources":["../../src/components/chip.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,cAAc,CAAC;AACjC,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAWlC,sEAAsE;AACtE,MAAM,UAAU,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,GAAG,KAAK,EAAE,SAAS,GAAG,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAa;IAC1G,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACrC,OAAO,CACL,mBACM,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EACjE,SAAS,EAAE,EAAE,CACX,uHAAuH,EACvH,WAAW,IAAI,yFAAyF,EACxG,QAAQ;YACN,CAAC,CAAC,wCAAwC;YAC1C,CAAC,CAAC,0DAA0D,EAC9D,SAAS,CACV,aAEA,KAAK,EACL,SAAS,IAAI,CACZ,iBACE,IAAI,EAAC,QAAQ,gBACD,UAAU,KAAK,EAAE,EAC7B,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;oBACb,CAAC,CAAC,eAAe,EAAE,CAAC;oBACpB,QAAQ,EAAE,EAAE,CAAC;gBACf,CAAC,EACD,SAAS,EAAC,oJAAoJ,YAE9J,KAAC,CAAC,IAAC,SAAS,EAAC,SAAS,GAAG,GAClB,CACV,IACI,CACR,CAAC;AACJ,CAAC"}
@@ -0,0 +1,18 @@
1
+ import * as React from "react";
2
+ export interface EvidenceSource {
3
+ name: string;
4
+ /** crm_data | public_data | platform_engagement | tool_integration | agent_analysis | … */
5
+ type: string;
6
+ dataPoints: number;
7
+ lastUpdated: string;
8
+ }
9
+ interface CitationsProps {
10
+ sources: EvidenceSource[];
11
+ /** 0–100 overall confidence for the summary bar. */
12
+ confidence?: number;
13
+ className?: string;
14
+ }
15
+ /** Agent evidence / sources display with a confidence summary bar. */
16
+ export declare function Citations({ sources, confidence, className }: CitationsProps): React.JSX.Element;
17
+ export {};
18
+ //# sourceMappingURL=citations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"citations.d.ts","sourceRoot":"","sources":["../../src/components/citations.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAe/B,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,2FAA2F;IAC3F,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAcD,UAAU,cAAc;IACtB,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,oDAAoD;IACpD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,sEAAsE;AACtE,wBAAgB,SAAS,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,cAAc,qBAmC3E"}
@@ -0,0 +1,22 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Database, Globe, Users, Wrench, Brain, UserCheck, BookOpen, MessageCircle, DollarSign, FileText, } from "lucide-react";
3
+ import { cn } from "../lib/utils";
4
+ const ICONS = {
5
+ crm_data: Database,
6
+ public_data: Globe,
7
+ platform_engagement: Users,
8
+ tool_integration: Wrench,
9
+ agent_analysis: Brain,
10
+ human_provided: UserCheck,
11
+ knowledge_base: BookOpen,
12
+ conversation_data: MessageCircle,
13
+ financial_data: DollarSign,
14
+ };
15
+ /** Agent evidence / sources display with a confidence summary bar. */
16
+ export function Citations({ sources, confidence, className }) {
17
+ return (_jsxs("div", { className: cn("rounded-lg border border-border bg-card p-4", className), children: [_jsx("p", { className: "mb-2 text-[11px] font-bold uppercase tracking-[0.06em] text-muted-foreground", children: "Sources" }), _jsx("ul", { className: "flex flex-col gap-2", children: sources.map((s) => {
18
+ const Icon = ICONS[s.type] ?? FileText;
19
+ return (_jsxs("li", { className: "flex items-center gap-2.5", children: [_jsx("span", { className: "flex h-7 w-7 shrink-0 items-center justify-center rounded-md bg-accent text-muted", children: _jsx(Icon, { className: "h-3.5 w-3.5" }) }), _jsx("span", { className: "min-w-0 flex-1 truncate text-[13px] text-foreground", children: s.name }), _jsxs("span", { className: "font-mono text-[11px] tabular-nums text-muted-foreground", children: [s.dataPoints, " pts"] }), _jsx("span", { className: "text-[11px] text-muted-foreground", children: s.lastUpdated })] }, s.name));
20
+ }) }), confidence !== undefined && (_jsxs("div", { className: "mt-3 border-t border-border-light pt-3", children: [_jsxs("div", { className: "mb-1 flex items-center justify-between text-[11px] text-muted", children: [_jsx("span", { children: "Overall confidence" }), _jsxs("span", { className: "font-mono font-semibold text-foreground tabular-nums", children: [confidence, "%"] })] }), _jsx("div", { className: "h-1.5 overflow-hidden rounded-full bg-border-light", children: _jsx("div", { className: "h-full rounded-full bg-brand", style: { width: `${Math.max(0, Math.min(100, confidence))}%` } }) }), _jsxs("p", { className: "mt-1.5 text-[11px] text-muted-foreground", children: ["Based on ", sources.length, " ", sources.length === 1 ? "source" : "sources", "."] })] }))] }));
21
+ }
22
+ //# sourceMappingURL=citations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"citations.js","sourceRoot":"","sources":["../../src/components/citations.tsx"],"names":[],"mappings":";AACA,OAAO,EACL,QAAQ,EACR,KAAK,EACL,KAAK,EACL,MAAM,EACN,KAAK,EACL,SAAS,EACT,QAAQ,EACR,aAAa,EACb,UAAU,EACV,QAAQ,GACT,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAUlC,MAAM,KAAK,GAAoC;IAC7C,QAAQ,EAAE,QAAQ;IAClB,WAAW,EAAE,KAAK;IAClB,mBAAmB,EAAE,KAAK;IAC1B,gBAAgB,EAAE,MAAM;IACxB,cAAc,EAAE,KAAK;IACrB,cAAc,EAAE,SAAS;IACzB,cAAc,EAAE,QAAQ;IACxB,iBAAiB,EAAE,aAAa;IAChC,cAAc,EAAE,UAAU;CAC3B,CAAC;AASF,sEAAsE;AACtE,MAAM,UAAU,SAAS,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAkB;IAC1E,OAAO,CACL,eAAK,SAAS,EAAE,EAAE,CAAC,6CAA6C,EAAE,SAAS,CAAC,aAC1E,YAAG,SAAS,EAAC,8EAA8E,wBAAY,EACvG,aAAI,SAAS,EAAC,qBAAqB,YAChC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;oBACjB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC;oBACvC,OAAO,CACL,cAAiB,SAAS,EAAC,2BAA2B,aACpD,eAAM,SAAS,EAAC,mFAAmF,YACjG,KAAC,IAAI,IAAC,SAAS,EAAC,aAAa,GAAG,GAC3B,EACP,eAAM,SAAS,EAAC,qDAAqD,YAAE,CAAC,CAAC,IAAI,GAAQ,EACrF,gBAAM,SAAS,EAAC,0DAA0D,aAAE,CAAC,CAAC,UAAU,YAAY,EACpG,eAAM,SAAS,EAAC,mCAAmC,YAAE,CAAC,CAAC,WAAW,GAAQ,KANnE,CAAC,CAAC,IAAI,CAOV,CACN,CAAC;gBACJ,CAAC,CAAC,GACC,EACJ,UAAU,KAAK,SAAS,IAAI,CAC3B,eAAK,SAAS,EAAC,wCAAwC,aACrD,eAAK,SAAS,EAAC,+DAA+D,aAC5E,gDAA+B,EAC/B,gBAAM,SAAS,EAAC,sDAAsD,aAAE,UAAU,SAAS,IACvF,EACN,cAAK,SAAS,EAAC,oDAAoD,YACjE,cAAK,SAAS,EAAC,8BAA8B,EAAC,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,GAAG,EAAE,GAAI,GAC5G,EACN,aAAG,SAAS,EAAC,0CAA0C,0BAC3C,OAAO,CAAC,MAAM,OAAG,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,SACpE,IACA,CACP,IACG,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ import * as React from "react";
2
+ interface CodeBlockProps {
3
+ code: string;
4
+ language?: string;
5
+ className?: string;
6
+ }
7
+ export declare function CodeBlock({ code, language, className }: CodeBlockProps): React.JSX.Element;
8
+ export {};
9
+ //# sourceMappingURL=code-block.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-block.d.ts","sourceRoot":"","sources":["../../src/components/code-block.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,UAAU,cAAc;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,SAAS,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,cAAc,qBA8BtE"}
@@ -0,0 +1,20 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ import { Copy, Check } from "lucide-react";
5
+ import { cn } from "../lib/utils";
6
+ export function CodeBlock({ code, language, className }) {
7
+ const [copied, setCopied] = React.useState(false);
8
+ const copy = async () => {
9
+ try {
10
+ await navigator.clipboard.writeText(code);
11
+ setCopied(true);
12
+ setTimeout(() => setCopied(false), 1500);
13
+ }
14
+ catch {
15
+ /* clipboard unavailable */
16
+ }
17
+ };
18
+ return (_jsxs("div", { className: cn("group relative overflow-hidden rounded-lg bg-navy", className), children: [_jsxs("div", { className: "flex items-center justify-between border-b border-white/10 px-3 py-1.5", children: [_jsx("span", { className: "font-mono text-[11px] uppercase tracking-wide text-white/50", children: language ?? "code" }), _jsxs("button", { type: "button", onClick: copy, "aria-label": "Copy code", className: "inline-flex items-center gap-1 rounded px-1.5 py-1 text-[11px] text-white/70 hover:bg-white/10 hover:text-white focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand", children: [copied ? _jsx(Check, { className: "h-3.5 w-3.5" }) : _jsx(Copy, { className: "h-3.5 w-3.5" }), copied ? "Copied" : "Copy"] })] }), _jsx("pre", { className: "overflow-x-auto p-3.5", children: _jsx("code", { className: "font-mono text-[12.5px] leading-relaxed text-white/90", children: code }) })] }));
19
+ }
20
+ //# sourceMappingURL=code-block.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-block.js","sourceRoot":"","sources":["../../src/components/code-block.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAQlC,MAAM,UAAU,SAAS,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAkB;IACrE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClD,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE;QACtB,IAAI,CAAC;YACH,MAAM,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAC1C,SAAS,CAAC,IAAI,CAAC,CAAC;YAChB,UAAU,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC;QAC3C,CAAC;QAAC,MAAM,CAAC;YACP,2BAA2B;QAC7B,CAAC;IACH,CAAC,CAAC;IACF,OAAO,CACL,eAAK,SAAS,EAAE,EAAE,CAAC,mDAAmD,EAAE,SAAS,CAAC,aAChF,eAAK,SAAS,EAAC,wEAAwE,aACrF,eAAM,SAAS,EAAC,6DAA6D,YAAE,QAAQ,IAAI,MAAM,GAAQ,EACzG,kBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,IAAI,gBACF,WAAW,EACtB,SAAS,EAAC,0LAA0L,aAEnM,MAAM,CAAC,CAAC,CAAC,KAAC,KAAK,IAAC,SAAS,EAAC,aAAa,GAAG,CAAC,CAAC,CAAC,KAAC,IAAI,IAAC,SAAS,EAAC,aAAa,GAAG,EAC7E,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,IACpB,IACL,EACN,cAAK,SAAS,EAAC,uBAAuB,YACpC,eAAM,SAAS,EAAC,uDAAuD,YAAE,IAAI,GAAQ,GACjF,IACF,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,17 @@
1
+ import * as React from "react";
2
+ export interface ComboboxOption {
3
+ value: string;
4
+ label: string;
5
+ }
6
+ interface ComboboxProps {
7
+ options: ComboboxOption[];
8
+ value?: string;
9
+ onChange?: (value: string) => void;
10
+ placeholder?: string;
11
+ emptyText?: string;
12
+ className?: string;
13
+ }
14
+ /** Searchable select: Radix Popover + filterable list with keyboard nav. */
15
+ export declare function Combobox({ options, value, onChange, placeholder, emptyText, className, }: ComboboxProps): React.JSX.Element;
16
+ export {};
17
+ //# sourceMappingURL=combobox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"combobox.d.ts","sourceRoot":"","sources":["../../src/components/combobox.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,UAAU,aAAa;IACrB,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,4EAA4E;AAC5E,wBAAgB,QAAQ,CAAC,EACvB,OAAO,EACP,KAAK,EACL,QAAQ,EACR,WAAuB,EACvB,SAAyB,EACzB,SAAS,GACV,EAAE,aAAa,qBAuFf"}