@citron-systems/citron-ui 1.0.1 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.cts +110 -2
- package/dist/index.d.ts +110 -2
- package/dist/index.js +1 -1
- package/dist/index.mjs +1 -1
- package/package.json +14 -6
package/dist/index.d.cts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import * as react from 'react';
|
|
2
2
|
import { ButtonHTMLAttributes, ReactNode, Component, InputHTMLAttributes, HTMLAttributes } from 'react';
|
|
3
3
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
4
|
+
import { LucideIcon } from 'lucide-react';
|
|
4
5
|
|
|
5
6
|
type ButtonVariant = 'primary' | 'secondary';
|
|
6
7
|
interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
|
|
@@ -12,12 +13,15 @@ interface CommandInterfaceProps {
|
|
|
12
13
|
promptValue?: string;
|
|
13
14
|
onPromptChange?: (value: string) => void;
|
|
14
15
|
onPromptSubmit?: () => void;
|
|
16
|
+
onFilesAttach?: (files: File[]) => void;
|
|
15
17
|
isProcessing?: boolean;
|
|
16
18
|
response?: ReactNode;
|
|
17
19
|
placeholder?: string;
|
|
20
|
+
accept?: string;
|
|
21
|
+
multiple?: boolean;
|
|
18
22
|
className?: string;
|
|
19
23
|
}
|
|
20
|
-
declare function CommandInterface({ promptValue, onPromptChange, onPromptSubmit, isProcessing, response, placeholder, className, }: CommandInterfaceProps): react_jsx_runtime.JSX.Element;
|
|
24
|
+
declare function CommandInterface({ promptValue, onPromptChange, onPromptSubmit, onFilesAttach, isProcessing, response, placeholder, accept, multiple, className, }: CommandInterfaceProps): react_jsx_runtime.JSX.Element;
|
|
21
25
|
|
|
22
26
|
type EntityType = 'Person' | 'Organization' | 'Deal';
|
|
23
27
|
interface Edge {
|
|
@@ -64,11 +68,13 @@ declare class ErrorBoundary extends Component<ErrorBoundaryProps, ErrorBoundaryS
|
|
|
64
68
|
}
|
|
65
69
|
|
|
66
70
|
interface CitronEvent {
|
|
71
|
+
id?: string;
|
|
67
72
|
actor: string;
|
|
68
73
|
subject: string;
|
|
69
74
|
event_type: string;
|
|
70
75
|
timestamp: string;
|
|
71
76
|
confidence_score: number;
|
|
77
|
+
metadata?: Record<string, unknown>;
|
|
72
78
|
}
|
|
73
79
|
interface EventRowProps {
|
|
74
80
|
event: CitronEvent;
|
|
@@ -168,4 +174,106 @@ interface StatusBadgeProps {
|
|
|
168
174
|
}
|
|
169
175
|
declare function StatusBadge({ label, variant, className, }: StatusBadgeProps): react_jsx_runtime.JSX.Element;
|
|
170
176
|
|
|
171
|
-
|
|
177
|
+
interface GraphNode {
|
|
178
|
+
id: string;
|
|
179
|
+
type: EntityType;
|
|
180
|
+
name: string;
|
|
181
|
+
metadata?: Record<string, string>;
|
|
182
|
+
}
|
|
183
|
+
interface ChatMessage {
|
|
184
|
+
id: string;
|
|
185
|
+
role: 'user' | 'assistant';
|
|
186
|
+
content: string;
|
|
187
|
+
intent?: 'entity' | 'event' | 'general';
|
|
188
|
+
timestamp: string;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
interface ActivityStreamProps {
|
|
192
|
+
events: CitronEvent[];
|
|
193
|
+
onEntitySelect?: (entity: GraphNode) => void;
|
|
194
|
+
findEntity?: (name: string) => GraphNode | null;
|
|
195
|
+
emptyMessage?: string;
|
|
196
|
+
className?: string;
|
|
197
|
+
}
|
|
198
|
+
declare function ActivityStream({ events, onEntitySelect, findEntity, emptyMessage, className, }: ActivityStreamProps): react_jsx_runtime.JSX.Element;
|
|
199
|
+
|
|
200
|
+
interface AppNavigationRailItem {
|
|
201
|
+
id: string;
|
|
202
|
+
path: string;
|
|
203
|
+
icon: LucideIcon;
|
|
204
|
+
label: string;
|
|
205
|
+
}
|
|
206
|
+
interface AppNavigationRailProps {
|
|
207
|
+
items?: AppNavigationRailItem[];
|
|
208
|
+
brandLogo?: ReactNode;
|
|
209
|
+
brandTitle?: string;
|
|
210
|
+
className?: string;
|
|
211
|
+
}
|
|
212
|
+
declare function AppNavigationRail({ items, brandLogo, brandTitle, className, }: AppNavigationRailProps): react_jsx_runtime.JSX.Element;
|
|
213
|
+
|
|
214
|
+
interface ChatFeedProps {
|
|
215
|
+
entities: GraphNode[];
|
|
216
|
+
events: CitronEvent[];
|
|
217
|
+
onFocusEntity?: (entity: GraphNode) => void;
|
|
218
|
+
findEntity?: (name: string) => GraphNode | null;
|
|
219
|
+
placeholder?: string;
|
|
220
|
+
emptyMessage?: string;
|
|
221
|
+
className?: string;
|
|
222
|
+
}
|
|
223
|
+
declare function ChatFeed({ entities, events, onFocusEntity, findEntity, placeholder, emptyMessage, className, }: ChatFeedProps): react_jsx_runtime.JSX.Element;
|
|
224
|
+
|
|
225
|
+
interface CommandBarProps {
|
|
226
|
+
prompt: string;
|
|
227
|
+
onPromptChange: (value: string) => void;
|
|
228
|
+
onSubmit: () => void;
|
|
229
|
+
isProcessing: boolean;
|
|
230
|
+
placeholder?: string;
|
|
231
|
+
subtitle?: string;
|
|
232
|
+
className?: string;
|
|
233
|
+
}
|
|
234
|
+
declare function CommandBar({ prompt, onPromptChange, onSubmit, isProcessing, placeholder, subtitle, className, }: CommandBarProps): react_jsx_runtime.JSX.Element;
|
|
235
|
+
|
|
236
|
+
interface EventStreamSidebarProps {
|
|
237
|
+
events: CitronEvent[];
|
|
238
|
+
title?: string;
|
|
239
|
+
showLive?: boolean;
|
|
240
|
+
className?: string;
|
|
241
|
+
}
|
|
242
|
+
declare function EventStreamSidebar({ events, title, showLive, className, }: EventStreamSidebarProps): react_jsx_runtime.JSX.Element;
|
|
243
|
+
|
|
244
|
+
interface IntelligenceLabKpiCard {
|
|
245
|
+
label: string;
|
|
246
|
+
value: number;
|
|
247
|
+
subtext?: string;
|
|
248
|
+
trend?: 'up' | 'down';
|
|
249
|
+
}
|
|
250
|
+
interface IntelligenceLabInsight {
|
|
251
|
+
title: string;
|
|
252
|
+
description: string;
|
|
253
|
+
confidence: number;
|
|
254
|
+
}
|
|
255
|
+
interface IntelligenceLabProps {
|
|
256
|
+
entities: GraphNode[];
|
|
257
|
+
events: CitronEvent[];
|
|
258
|
+
focusEntity: GraphNode;
|
|
259
|
+
setFocusEntity: (entity: GraphNode) => void;
|
|
260
|
+
loading: boolean;
|
|
261
|
+
kpiCards?: IntelligenceLabKpiCard[];
|
|
262
|
+
aiInsights?: IntelligenceLabInsight[];
|
|
263
|
+
title?: string;
|
|
264
|
+
subtitle?: string;
|
|
265
|
+
className?: string;
|
|
266
|
+
}
|
|
267
|
+
declare function IntelligenceLab({ loading, kpiCards, aiInsights, title, subtitle, className, }: IntelligenceLabProps): react_jsx_runtime.JSX.Element;
|
|
268
|
+
|
|
269
|
+
interface MainShellProps {
|
|
270
|
+
navigation: ReactNode;
|
|
271
|
+
eventStream: ReactNode | null;
|
|
272
|
+
commandBar: ReactNode;
|
|
273
|
+
children: ReactNode;
|
|
274
|
+
className?: string;
|
|
275
|
+
eventStreamWidth?: string;
|
|
276
|
+
}
|
|
277
|
+
declare function MainShell({ navigation, eventStream, commandBar, children, className, eventStreamWidth, }: MainShellProps): react_jsx_runtime.JSX.Element;
|
|
278
|
+
|
|
279
|
+
export { ActivityStream, type ActivityStreamProps, AppNavigationRail, type AppNavigationRailItem, type AppNavigationRailProps, Button, type ButtonProps, type ButtonVariant, ChatFeed, type ChatFeedProps, type ChatMessage, type CitronEvent, CommandBar, type CommandBarProps, CommandInterface, type CommandInterfaceProps, type Edge, EntityCard, type EntityCardProps, EntityCommandCard, type EntityCommandCardProps, type EntityCommandCardStat, type EntityType, ErrorBoundary, type ErrorBoundaryProps, EventRow, type EventRowProps, type EventStreamEvent, EventStreamFeed, type EventStreamFeedProps, EventStreamSidebar, type EventStreamSidebarProps, type EventStreamStatus, type GraphNode, Input, type InputProps, IntelligenceLab, type IntelligenceLabInsight, type IntelligenceLabKpiCard, type IntelligenceLabProps, IntelligenceScoreCard, type IntelligenceScoreCardProps, MainShell, type MainShellProps, type MetricComparisonItem, MetricComparisonList, type MetricComparisonListProps, type MetricComparisonVariant, ModuleContainer, type ModuleContainerProps, ModuleErrorBoundary, type ModuleErrorBoundaryProps, ModuleSkeleton, type ModuleSkeletonProps, OSNavigationRail, type OSNavigationRailItem, type OSNavigationRailProps, Skeleton, type SkeletonProps, StatusBadge, type StatusBadgeProps, type StatusBadgeVariant };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import * as react from 'react';
|
|
2
2
|
import { ButtonHTMLAttributes, ReactNode, Component, InputHTMLAttributes, HTMLAttributes } from 'react';
|
|
3
3
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
4
|
+
import { LucideIcon } from 'lucide-react';
|
|
4
5
|
|
|
5
6
|
type ButtonVariant = 'primary' | 'secondary';
|
|
6
7
|
interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
|
|
@@ -12,12 +13,15 @@ interface CommandInterfaceProps {
|
|
|
12
13
|
promptValue?: string;
|
|
13
14
|
onPromptChange?: (value: string) => void;
|
|
14
15
|
onPromptSubmit?: () => void;
|
|
16
|
+
onFilesAttach?: (files: File[]) => void;
|
|
15
17
|
isProcessing?: boolean;
|
|
16
18
|
response?: ReactNode;
|
|
17
19
|
placeholder?: string;
|
|
20
|
+
accept?: string;
|
|
21
|
+
multiple?: boolean;
|
|
18
22
|
className?: string;
|
|
19
23
|
}
|
|
20
|
-
declare function CommandInterface({ promptValue, onPromptChange, onPromptSubmit, isProcessing, response, placeholder, className, }: CommandInterfaceProps): react_jsx_runtime.JSX.Element;
|
|
24
|
+
declare function CommandInterface({ promptValue, onPromptChange, onPromptSubmit, onFilesAttach, isProcessing, response, placeholder, accept, multiple, className, }: CommandInterfaceProps): react_jsx_runtime.JSX.Element;
|
|
21
25
|
|
|
22
26
|
type EntityType = 'Person' | 'Organization' | 'Deal';
|
|
23
27
|
interface Edge {
|
|
@@ -64,11 +68,13 @@ declare class ErrorBoundary extends Component<ErrorBoundaryProps, ErrorBoundaryS
|
|
|
64
68
|
}
|
|
65
69
|
|
|
66
70
|
interface CitronEvent {
|
|
71
|
+
id?: string;
|
|
67
72
|
actor: string;
|
|
68
73
|
subject: string;
|
|
69
74
|
event_type: string;
|
|
70
75
|
timestamp: string;
|
|
71
76
|
confidence_score: number;
|
|
77
|
+
metadata?: Record<string, unknown>;
|
|
72
78
|
}
|
|
73
79
|
interface EventRowProps {
|
|
74
80
|
event: CitronEvent;
|
|
@@ -168,4 +174,106 @@ interface StatusBadgeProps {
|
|
|
168
174
|
}
|
|
169
175
|
declare function StatusBadge({ label, variant, className, }: StatusBadgeProps): react_jsx_runtime.JSX.Element;
|
|
170
176
|
|
|
171
|
-
|
|
177
|
+
interface GraphNode {
|
|
178
|
+
id: string;
|
|
179
|
+
type: EntityType;
|
|
180
|
+
name: string;
|
|
181
|
+
metadata?: Record<string, string>;
|
|
182
|
+
}
|
|
183
|
+
interface ChatMessage {
|
|
184
|
+
id: string;
|
|
185
|
+
role: 'user' | 'assistant';
|
|
186
|
+
content: string;
|
|
187
|
+
intent?: 'entity' | 'event' | 'general';
|
|
188
|
+
timestamp: string;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
interface ActivityStreamProps {
|
|
192
|
+
events: CitronEvent[];
|
|
193
|
+
onEntitySelect?: (entity: GraphNode) => void;
|
|
194
|
+
findEntity?: (name: string) => GraphNode | null;
|
|
195
|
+
emptyMessage?: string;
|
|
196
|
+
className?: string;
|
|
197
|
+
}
|
|
198
|
+
declare function ActivityStream({ events, onEntitySelect, findEntity, emptyMessage, className, }: ActivityStreamProps): react_jsx_runtime.JSX.Element;
|
|
199
|
+
|
|
200
|
+
interface AppNavigationRailItem {
|
|
201
|
+
id: string;
|
|
202
|
+
path: string;
|
|
203
|
+
icon: LucideIcon;
|
|
204
|
+
label: string;
|
|
205
|
+
}
|
|
206
|
+
interface AppNavigationRailProps {
|
|
207
|
+
items?: AppNavigationRailItem[];
|
|
208
|
+
brandLogo?: ReactNode;
|
|
209
|
+
brandTitle?: string;
|
|
210
|
+
className?: string;
|
|
211
|
+
}
|
|
212
|
+
declare function AppNavigationRail({ items, brandLogo, brandTitle, className, }: AppNavigationRailProps): react_jsx_runtime.JSX.Element;
|
|
213
|
+
|
|
214
|
+
interface ChatFeedProps {
|
|
215
|
+
entities: GraphNode[];
|
|
216
|
+
events: CitronEvent[];
|
|
217
|
+
onFocusEntity?: (entity: GraphNode) => void;
|
|
218
|
+
findEntity?: (name: string) => GraphNode | null;
|
|
219
|
+
placeholder?: string;
|
|
220
|
+
emptyMessage?: string;
|
|
221
|
+
className?: string;
|
|
222
|
+
}
|
|
223
|
+
declare function ChatFeed({ entities, events, onFocusEntity, findEntity, placeholder, emptyMessage, className, }: ChatFeedProps): react_jsx_runtime.JSX.Element;
|
|
224
|
+
|
|
225
|
+
interface CommandBarProps {
|
|
226
|
+
prompt: string;
|
|
227
|
+
onPromptChange: (value: string) => void;
|
|
228
|
+
onSubmit: () => void;
|
|
229
|
+
isProcessing: boolean;
|
|
230
|
+
placeholder?: string;
|
|
231
|
+
subtitle?: string;
|
|
232
|
+
className?: string;
|
|
233
|
+
}
|
|
234
|
+
declare function CommandBar({ prompt, onPromptChange, onSubmit, isProcessing, placeholder, subtitle, className, }: CommandBarProps): react_jsx_runtime.JSX.Element;
|
|
235
|
+
|
|
236
|
+
interface EventStreamSidebarProps {
|
|
237
|
+
events: CitronEvent[];
|
|
238
|
+
title?: string;
|
|
239
|
+
showLive?: boolean;
|
|
240
|
+
className?: string;
|
|
241
|
+
}
|
|
242
|
+
declare function EventStreamSidebar({ events, title, showLive, className, }: EventStreamSidebarProps): react_jsx_runtime.JSX.Element;
|
|
243
|
+
|
|
244
|
+
interface IntelligenceLabKpiCard {
|
|
245
|
+
label: string;
|
|
246
|
+
value: number;
|
|
247
|
+
subtext?: string;
|
|
248
|
+
trend?: 'up' | 'down';
|
|
249
|
+
}
|
|
250
|
+
interface IntelligenceLabInsight {
|
|
251
|
+
title: string;
|
|
252
|
+
description: string;
|
|
253
|
+
confidence: number;
|
|
254
|
+
}
|
|
255
|
+
interface IntelligenceLabProps {
|
|
256
|
+
entities: GraphNode[];
|
|
257
|
+
events: CitronEvent[];
|
|
258
|
+
focusEntity: GraphNode;
|
|
259
|
+
setFocusEntity: (entity: GraphNode) => void;
|
|
260
|
+
loading: boolean;
|
|
261
|
+
kpiCards?: IntelligenceLabKpiCard[];
|
|
262
|
+
aiInsights?: IntelligenceLabInsight[];
|
|
263
|
+
title?: string;
|
|
264
|
+
subtitle?: string;
|
|
265
|
+
className?: string;
|
|
266
|
+
}
|
|
267
|
+
declare function IntelligenceLab({ loading, kpiCards, aiInsights, title, subtitle, className, }: IntelligenceLabProps): react_jsx_runtime.JSX.Element;
|
|
268
|
+
|
|
269
|
+
interface MainShellProps {
|
|
270
|
+
navigation: ReactNode;
|
|
271
|
+
eventStream: ReactNode | null;
|
|
272
|
+
commandBar: ReactNode;
|
|
273
|
+
children: ReactNode;
|
|
274
|
+
className?: string;
|
|
275
|
+
eventStreamWidth?: string;
|
|
276
|
+
}
|
|
277
|
+
declare function MainShell({ navigation, eventStream, commandBar, children, className, eventStreamWidth, }: MainShellProps): react_jsx_runtime.JSX.Element;
|
|
278
|
+
|
|
279
|
+
export { ActivityStream, type ActivityStreamProps, AppNavigationRail, type AppNavigationRailItem, type AppNavigationRailProps, Button, type ButtonProps, type ButtonVariant, ChatFeed, type ChatFeedProps, type ChatMessage, type CitronEvent, CommandBar, type CommandBarProps, CommandInterface, type CommandInterfaceProps, type Edge, EntityCard, type EntityCardProps, EntityCommandCard, type EntityCommandCardProps, type EntityCommandCardStat, type EntityType, ErrorBoundary, type ErrorBoundaryProps, EventRow, type EventRowProps, type EventStreamEvent, EventStreamFeed, type EventStreamFeedProps, EventStreamSidebar, type EventStreamSidebarProps, type EventStreamStatus, type GraphNode, Input, type InputProps, IntelligenceLab, type IntelligenceLabInsight, type IntelligenceLabKpiCard, type IntelligenceLabProps, IntelligenceScoreCard, type IntelligenceScoreCardProps, MainShell, type MainShellProps, type MetricComparisonItem, MetricComparisonList, type MetricComparisonListProps, type MetricComparisonVariant, ModuleContainer, type ModuleContainerProps, ModuleErrorBoundary, type ModuleErrorBoundaryProps, ModuleSkeleton, type ModuleSkeletonProps, OSNavigationRail, type OSNavigationRailItem, type OSNavigationRailProps, Skeleton, type SkeletonProps, StatusBadge, type StatusBadgeProps, type StatusBadgeVariant };
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var P=Object.defineProperty;var j=Object.getOwnPropertyDescriptor;var tt=Object.getOwnPropertyNames;var rt=Object.prototype.hasOwnProperty;var et=(t,e)=>{for(var r in e)P(t,r,{get:e[r],enumerable:!0})},ot=(t,e,r,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of tt(e))!rt.call(t,n)&&n!==r&&P(t,n,{get:()=>e[n],enumerable:!(a=j(e,n))||a.enumerable});return t};var at=t=>ot(P({},"__esModule",{value:!0}),t);var ut={};et(ut,{Button:()=>N,CommandInterface:()=>B,EntityCard:()=>R,EntityCommandCard:()=>I,ErrorBoundary:()=>C,EventRow:()=>T,EventStreamFeed:()=>V,Input:()=>h,IntelligenceScoreCard:()=>D,MetricComparisonList:()=>O,ModuleContainer:()=>A,ModuleErrorBoundary:()=>s,ModuleSkeleton:()=>w,OSNavigationRail:()=>z,Skeleton:()=>x,StatusBadge:()=>S});module.exports=at(ut);var W=require("react");var F=require("clsx"),K=require("tailwind-merge");function o(...t){return(0,K.twMerge)((0,F.clsx)(t))}var $=require("react/jsx-runtime"),nt={primary:"bg-[var(--inkblot-semantic-color-interactive-primary)] text-[var(--inkblot-semantic-color-text-primary)] hover:bg-[var(--inkblot-semantic-color-interactive-primary-hover)] active:bg-[var(--inkblot-semantic-color-interactive-primary-active)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--inkblot-semantic-color-border-focus)] focus-visible:outline-offset-2 disabled:opacity-[var(--inkblot-opacity-disabled)] disabled:pointer-events-none disabled:cursor-not-allowed",secondary:"bg-[var(--inkblot-semantic-color-interactive-secondary)] text-[var(--inkblot-semantic-color-text-primary)] border border-[var(--inkblot-semantic-color-border-default)] hover:bg-[var(--inkblot-semantic-color-interactive-secondary-hover)] hover:border-[var(--inkblot-semantic-color-border-strong)] active:bg-[var(--inkblot-semantic-color-interactive-secondary-hover)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--inkblot-semantic-color-border-focus)] focus-visible:outline-offset-2 disabled:opacity-[var(--inkblot-opacity-disabled)] disabled:pointer-events-none disabled:cursor-not-allowed"},N=(0,W.forwardRef)(({className:t,variant:e="primary",disabled:r,...a},n)=>(0,$.jsx)("button",{ref:n,disabled:r,className:o("inline-flex min-h-[var(--inkblot-size-touch-target-min)] items-center justify-center rounded-[var(--inkblot-radius-lg)] px-4 py-2 font-semibold transition-[background,border-color] duration-[var(--inkblot-duration-fast)] ease-[var(--inkblot-easing-default)]",nt[e],t),...a}));N.displayName="Button";var i=require("react/jsx-runtime");function q({className:t}){return(0,i.jsxs)("svg",{viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",className:o("h-8 w-8",t),"aria-hidden":!0,children:[(0,i.jsx)("circle",{cx:"12",cy:"12",r:"9",stroke:"currentColor",strokeWidth:"1.5",className:"text-[var(--inkblot-semantic-color-text-tertiary)]"}),(0,i.jsx)("path",{d:"M8 12h2v2H8v-2zm6 0h2v2h-2v-2zM10 8l2 4 2-4",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",className:"text-[var(--inkblot-semantic-color-text-secondary)]"})]})}function B({promptValue:t="",onPromptChange:e,onPromptSubmit:r,isProcessing:a=!1,response:n,placeholder:m="Ask Citron Intelligence...",className:b}){let M=p=>{p.key==="Enter"&&!p.shiftKey&&(p.preventDefault(),r?.())};return(0,i.jsxs)("div",{className:o("flex w-full max-w-2xl flex-col gap-8",b),children:[(0,i.jsx)("div",{className:"flex flex-col gap-4",children:(0,i.jsxs)("div",{className:"flex items-start gap-4",children:[(0,i.jsx)("div",{className:"flex shrink-0 items-center justify-center",children:(0,i.jsx)(q,{})}),(0,i.jsx)("div",{className:"flex flex-1 flex-col gap-4",children:(0,i.jsx)("textarea",{value:t,onChange:p=>e?.(p.target.value),onKeyDown:M,placeholder:m,rows:3,disabled:a,className:o("w-full resize-none rounded-[var(--inkblot-radius-xl)] bg-[var(--inkblot-semantic-color-background-primary)] p-4 text-[var(--inkblot-semantic-color-text-primary)] placeholder:text-[var(--inkblot-semantic-color-text-tertiary)] transition-shadow duration-[var(--inkblot-duration-fast)]","focus:outline-none focus:ring-2 focus:ring-[var(--inkblot-semantic-color-border-focus)] focus:ring-offset-2 focus:ring-offset-[var(--inkblot-semantic-color-background-primary)]","shadow-[0_1px_3px_0_rgba(0,0,0,0.08),0_1px_2px_-1px_rgba(0,0,0,0.08)]","disabled:cursor-not-allowed disabled:opacity-70")})})]})}),a?(0,i.jsx)("div",{className:o("min-h-[80px] animate-shimmer rounded-[var(--inkblot-radius-xl)] bg-[length:200%_100%] bg-[linear-gradient(90deg,var(--inkblot-semantic-color-background-secondary)_0%,var(--inkblot-semantic-color-background-tertiary)_50%,var(--inkblot-semantic-color-background-secondary)_100%)]")}):n?(0,i.jsx)("div",{className:"flex flex-col gap-4",children:(0,i.jsxs)("div",{className:"flex items-start gap-4",children:[(0,i.jsx)("div",{className:"shrink-0",children:(0,i.jsx)(q,{})}),(0,i.jsx)("div",{className:"min-w-0 flex-1 text-[var(--inkblot-semantic-color-text-primary)]",children:n})]})}):null]})}var c=require("react/jsx-runtime"),it={Person:"border-l-[var(--inkblot-semantic-color-status-info)] bg-[var(--inkblot-semantic-color-background-secondary)]",Organization:"border-l-[var(--inkblot-semantic-color-status-warning)] bg-[var(--inkblot-semantic-color-background-secondary)]",Deal:"border-l-[var(--inkblot-semantic-color-status-success)] bg-[var(--inkblot-semantic-color-background-secondary)]"};function R({name:t,entityType:e,metadata:r,edges:a=[],className:n}){return(0,c.jsxs)("article",{className:o("flex flex-col gap-4 rounded-[var(--inkblot-radius-lg)] border border-[var(--inkblot-semantic-color-border-default)] border-l-4 p-4",it[e],n),children:[(0,c.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,c.jsx)("span",{className:"text-xs font-medium uppercase tracking-wide text-[var(--inkblot-semantic-color-text-tertiary)]",children:e}),(0,c.jsx)("h3",{className:"text-base font-semibold text-[var(--inkblot-semantic-color-text-primary)]",children:t})]}),r&&Object.keys(r).length>0?(0,c.jsx)("dl",{className:"flex flex-col gap-1",children:Object.entries(r).map(([m,b])=>(0,c.jsxs)("div",{className:"flex gap-2",children:[(0,c.jsxs)("dt",{className:"text-sm text-[var(--inkblot-semantic-color-text-tertiary)]",children:[m,":"]}),(0,c.jsx)("dd",{className:"text-sm text-[var(--inkblot-semantic-color-text-secondary)]",children:b})]},m))}):null,a.length>0?(0,c.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,c.jsx)("h4",{className:"text-sm font-medium text-[var(--inkblot-semantic-color-text-secondary)]",children:"Edges"}),(0,c.jsx)("ul",{className:"flex flex-wrap gap-2",children:a.map((m,b)=>(0,c.jsxs)("li",{className:"rounded-[var(--inkblot-radius-md)] border border-[var(--inkblot-semantic-color-border-default)] bg-[var(--inkblot-semantic-color-background-tertiary)] px-2 py-1 text-xs text-[var(--inkblot-semantic-color-text-secondary)]",children:[m.type,m.target?` \u2192 ${m.target}`:""]},b))})]}):null]})}var G=require("react");var J=require("react/jsx-runtime"),h=(0,G.forwardRef)(({className:t,error:e,disabled:r,...a},n)=>(0,J.jsx)("input",{ref:n,disabled:r,"aria-invalid":e,"aria-disabled":r,className:o("min-h-[var(--inkblot-size-touch-target-min)] w-full rounded-[var(--inkblot-radius-md)] border bg-[var(--inkblot-semantic-color-background-secondary)] px-4 py-2 text-[var(--inkblot-semantic-color-text-primary)] placeholder:text-[var(--inkblot-semantic-color-text-tertiary)] transition-[border-color,box-shadow] duration-[var(--inkblot-duration-fast)] ease-[var(--inkblot-easing-default)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--inkblot-semantic-color-border-focus)] focus-visible:ring-offset-2 disabled:opacity-[var(--inkblot-opacity-disabled)] disabled:pointer-events-none disabled:cursor-not-allowed",e?"border-[var(--inkblot-semantic-color-status-error)] focus-visible:ring-[var(--inkblot-semantic-color-status-error)]":"border-[var(--inkblot-semantic-color-border-default)] hover:border-[var(--inkblot-semantic-color-border-strong)]",t),...a}));h.displayName="Input";var Q=require("react");var E=require("react/jsx-runtime"),s=class extends Q.Component{constructor(e){super(e),this.state={hasError:!1,error:null}}static getDerivedStateFromError(e){return{hasError:!0,error:e}}render(){return this.state.hasError&&this.state.error?(0,E.jsxs)("div",{role:"alert",className:o("flex flex-col gap-4 rounded-[var(--inkblot-radius-lg)] border border-[var(--inkblot-semantic-color-border-default)] bg-[var(--inkblot-semantic-color-background-secondary)] p-4",this.props.className),children:[(0,E.jsx)("p",{className:"text-base font-semibold text-[var(--inkblot-semantic-color-text-primary)]",children:"This module failed to load"}),(0,E.jsx)("p",{className:"text-sm text-[var(--inkblot-semantic-color-text-tertiary)]",children:this.state.error.message}),(0,E.jsx)(N,{variant:"secondary",onClick:this.props.onRetry,className:"w-fit border-[var(--inkblot-semantic-color-status-error)]",children:"Retry"})]}):this.props.children}};var d=require("react/jsx-runtime");function I({title:t,insights:e,stats:r=[],commandValue:a="",onCommandChange:n,onCommandSubmit:m,className:b}){let M=p=>{p.key==="Enter"&&(p.preventDefault(),m?.())};return(0,d.jsx)(s,{className:b,children:(0,d.jsxs)("div",{className:"flex flex-col gap-4 rounded-[var(--inkblot-radius-xl)] bg-[var(--inkblot-semantic-color-background-secondary)] p-4",children:[(0,d.jsx)("h2",{className:"text-xl font-semibold text-[var(--inkblot-semantic-color-text-primary)]",children:t}),e?(0,d.jsx)("div",{className:"rounded-[var(--inkblot-radius-md)] border border-[var(--inkblot-semantic-color-interactive-primary)] p-4",style:{boxShadow:"0 0 12px var(--inkblot-semantic-color-interactive-primary)"},children:e}):null,r.length>0?(0,d.jsxs)("div",{children:[(0,d.jsx)("h3",{className:"mb-2 text-sm font-medium text-[var(--inkblot-semantic-color-text-secondary)]",children:"Connected To"}),(0,d.jsx)("div",{className:"grid grid-cols-2 gap-2 sm:grid-cols-3",children:r.map((p,Z)=>(0,d.jsxs)("div",{className:"rounded-[var(--inkblot-radius-md)] bg-[var(--inkblot-semantic-color-background-tertiary)] px-3 py-2",children:[(0,d.jsx)("span",{className:"text-xs text-[var(--inkblot-semantic-color-text-tertiary)]",children:p.label}),(0,d.jsx)("p",{className:"text-sm font-medium text-[var(--inkblot-semantic-color-text-primary)]",children:p.value})]},Z))})]}):null,(0,d.jsx)("div",{className:"mt-2",children:(0,d.jsx)(h,{type:"text",value:a,onChange:p=>n?.(p.target.value),onKeyDown:M,placeholder:"Ask about this entity...",className:"rounded-[var(--inkblot-radius-md)]"})})]})})}var U=require("react");var L=require("react/jsx-runtime"),C=class extends U.Component{constructor(e){super(e),this.state={hasError:!1,error:null}}static getDerivedStateFromError(e){return{hasError:!0,error:e}}render(){return this.state.hasError&&this.state.error?this.props.fallback?this.props.fallback:(0,L.jsx)("div",{className:o("inline-flex items-center gap-3 rounded-[var(--inkblot-radius-md)] border border-[var(--inkblot-semantic-color-border-default)] bg-[var(--inkblot-semantic-color-background-tertiary)] px-4 py-3 text-[var(--inkblot-semantic-color-text-secondary)]",this.props.className),role:"alert",children:(0,L.jsx)("span",{className:"text-sm font-medium",children:"Something went wrong"})}):this.props.children}};var X=require("react/jsx-runtime"),st={success:"border-[var(--inkblot-semantic-color-status-success)] bg-[var(--inkblot-semantic-color-status-success)]/10 text-[var(--inkblot-semantic-color-status-success)]",warning:"border-[var(--inkblot-semantic-color-status-warning)] bg-[var(--inkblot-semantic-color-status-warning)]/10 text-[var(--inkblot-semantic-color-status-warning)]",error:"border-[var(--inkblot-semantic-color-status-error)] bg-[var(--inkblot-semantic-color-status-error)]/10 text-[var(--inkblot-semantic-color-status-error)]",info:"border-[var(--inkblot-semantic-color-status-info)] bg-[var(--inkblot-semantic-color-status-info)]/10 text-[var(--inkblot-semantic-color-status-info)]"};function S({label:t,variant:e="info",className:r}){return(0,X.jsx)("span",{className:o("inline-flex items-center rounded-[var(--inkblot-radius-md)] border px-2 py-0.5 text-xs font-medium",st[e],r),children:t})}var f=require("react/jsx-runtime");function lt(t){return t>=.8?"success":t>=.5?"info":t>=.2?"warning":"error"}function T({event:t,className:e}){let r=lt(t.confidence_score),a=`${Math.round(t.confidence_score*100)}%`;return(0,f.jsxs)("div",{className:o("flex flex-wrap items-center gap-2 rounded-[var(--inkblot-radius-lg)] border border-[var(--inkblot-semantic-color-border-default)] bg-[var(--inkblot-semantic-color-background-secondary)] p-4",e),children:[(0,f.jsx)("span",{className:"text-sm font-medium text-[var(--inkblot-semantic-color-text-primary)]",children:t.actor}),(0,f.jsx)("span",{className:"text-sm text-[var(--inkblot-semantic-color-text-tertiary)]",children:"\u2192"}),(0,f.jsx)("span",{className:"text-sm text-[var(--inkblot-semantic-color-text-secondary)]",children:t.subject}),(0,f.jsx)("span",{className:"rounded-[var(--inkblot-radius-md)] bg-[var(--inkblot-semantic-color-background-tertiary)] px-2 py-0.5 text-xs text-[var(--inkblot-semantic-color-text-secondary)]",children:t.event_type}),(0,f.jsx)("span",{className:"text-xs text-[var(--inkblot-semantic-color-text-tertiary)]",children:t.timestamp}),(0,f.jsx)(S,{label:a,variant:r})]})}var u=require("react/jsx-runtime"),ct={success:"bg-[var(--inkblot-semantic-color-status-success)]",warning:"bg-[var(--inkblot-semantic-color-status-warning)]",error:"bg-[var(--inkblot-semantic-color-status-error)]",info:"bg-[var(--inkblot-semantic-color-status-info)]"};function dt(){return(0,u.jsx)("svg",{viewBox:"0 0 16 16",className:"h-4 w-4 text-[var(--inkblot-semantic-color-text-tertiary)]","aria-hidden":!0,children:(0,u.jsx)("circle",{cx:"8",cy:"8",r:"2",fill:"currentColor"})})}function V({events:t,className:e}){return(0,u.jsx)(s,{className:e,children:(0,u.jsx)("div",{className:o("flex flex-col gap-4 border-l-2 border-[var(--inkblot-semantic-color-border-default)] pl-4"),children:t.map(r=>(0,u.jsxs)("div",{className:"flex items-start gap-3",children:[(0,u.jsx)("div",{className:"flex shrink-0 items-center pt-0.5",children:r.icon??(0,u.jsx)(dt,{})}),(0,u.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,u.jsx)("p",{className:"text-sm font-medium text-[var(--inkblot-semantic-color-text-primary)]",children:r.title}),(0,u.jsx)("p",{className:"text-xs text-[var(--inkblot-semantic-color-text-tertiary)]",children:r.timestamp})]}),r.status?(0,u.jsx)("div",{className:o("mt-1.5 h-2 w-2 shrink-0 rounded-full",ct[r.status]),"aria-hidden":!0}):null]},r.id))})})}var l=require("react/jsx-runtime"),H=36,_=2*Math.PI*H;function D({label:t,value:e,subtext:r,trend:a,className:n}){let m=Math.min(100,Math.max(0,e)),b=_-m/100*_;return(0,l.jsx)(s,{className:n,children:(0,l.jsxs)("div",{className:"flex flex-col items-center gap-4 rounded-[var(--inkblot-radius-lg)] bg-[var(--inkblot-semantic-color-background-secondary)] p-4",children:[(0,l.jsxs)("div",{className:"relative",children:[(0,l.jsxs)("svg",{width:"96",height:"96",viewBox:"0 0 96 96",className:"-rotate-90",children:[(0,l.jsx)("circle",{cx:"48",cy:"48",r:H,fill:"none",stroke:"var(--inkblot-semantic-color-background-tertiary)",strokeWidth:"4"}),(0,l.jsx)("circle",{cx:"48",cy:"48",r:H,fill:"none",stroke:"var(--inkblot-semantic-color-interactive-primary)",strokeWidth:"4",strokeDasharray:_,strokeDashoffset:b,strokeLinecap:"round",className:"transition-[stroke-dashoffset] duration-[var(--inkblot-duration-fast)]"})]}),(0,l.jsx)("div",{className:"absolute inset-0 flex flex-col items-center justify-center",children:(0,l.jsxs)("span",{className:"flex items-center gap-1 text-lg font-semibold text-[var(--inkblot-semantic-color-text-primary)]",children:[m,"%",a==="up"?(0,l.jsx)("svg",{viewBox:"0 0 16 16",className:"h-4 w-4 text-[var(--inkblot-semantic-color-status-success)]","aria-hidden":!0,children:(0,l.jsx)("path",{fill:"currentColor",d:"M8 4l4 6H4l4-6z"})}):a==="down"?(0,l.jsx)("svg",{viewBox:"0 0 16 16",className:"h-4 w-4 text-[var(--inkblot-semantic-color-status-error)]","aria-hidden":!0,children:(0,l.jsx)("path",{fill:"currentColor",d:"M8 12l4-6H4l4 6z"})}):null]})})]}),(0,l.jsxs)("div",{className:"text-center",children:[(0,l.jsx)("p",{className:"text-sm font-medium text-[var(--inkblot-semantic-color-text-primary)]",children:t}),r?(0,l.jsx)("p",{className:"text-xs text-[var(--inkblot-semantic-color-text-tertiary)]",children:r}):null]})]})})}var v=require("react/jsx-runtime"),mt={default:"text-[var(--inkblot-semantic-color-text-primary)]",success:"text-[var(--inkblot-semantic-color-status-success)]",warning:"text-[var(--inkblot-semantic-color-status-warning)]",error:"text-[var(--inkblot-semantic-color-status-error)]"};function pt({className:t}){return(0,v.jsx)("svg",{viewBox:"0 0 16 16",className:o("h-4 w-4",t),"aria-hidden":!0,children:(0,v.jsx)("path",{fill:"currentColor",d:"M6 4l4 4-4 4V4z"})})}function O({items:t,className:e}){return(0,v.jsx)(s,{className:e,children:(0,v.jsx)("ul",{className:o("flex flex-col gap-4 py-2"),children:t.map((r,a)=>(0,v.jsxs)("li",{className:"flex items-center justify-between gap-4",children:[(0,v.jsx)("span",{className:"text-sm text-[var(--inkblot-semantic-color-text-secondary)]",children:r.label}),(0,v.jsx)("span",{className:o("flex items-center gap-1 text-sm font-medium",mt[r.variant??"default"]),children:r.value!=null?r.value:(0,v.jsx)(pt,{})})]},a))})})}var Y=require("react/jsx-runtime");function x({className:t,...e}){return(0,Y.jsx)("div",{className:o("animate-shimmer rounded-[var(--inkblot-radius-md)] bg-[length:200%_100%] bg-[linear-gradient(90deg,var(--inkblot-semantic-color-background-secondary)_0%,var(--inkblot-semantic-color-background-tertiary)_50%,var(--inkblot-semantic-color-background-secondary)_100%)]",t),...e})}var y=require("react/jsx-runtime");function w({className:t,...e}){return(0,y.jsxs)("div",{className:o("flex flex-col gap-2 rounded-[var(--inkblot-radius-lg)] border border-[var(--inkblot-semantic-color-border-default)] bg-[var(--inkblot-semantic-color-background-secondary)] p-4",t),...e,children:[(0,y.jsx)(x,{className:"h-5 w-3/4"}),(0,y.jsx)(x,{className:"h-4 w-full"}),(0,y.jsx)(x,{className:"h-4 w-5/6"}),(0,y.jsx)(x,{className:"h-4 w-4/5"}),(0,y.jsx)(x,{className:"h-4 w-3/4"})]})}var g=require("react/jsx-runtime");function A({children:t,loading:e=!1,title:r,className:a,onRetry:n}){return(0,g.jsx)(s,{className:a,onRetry:n,children:e?(0,g.jsxs)("div",{className:o("flex flex-col gap-4",a),children:[r?(0,g.jsx)("h2",{className:"text-lg font-semibold text-[var(--inkblot-semantic-color-text-primary)]",children:r}):null,(0,g.jsx)(w,{})]}):(0,g.jsxs)("div",{className:o("flex flex-col gap-4",a),children:[r?(0,g.jsx)("h2",{className:"text-lg font-semibold text-[var(--inkblot-semantic-color-text-primary)]",children:r}):null,t]})})}var k=require("react/jsx-runtime");function z({items:t,className:e}){return(0,k.jsx)(s,{className:e,children:(0,k.jsx)("nav",{className:o("flex w-14 flex-col items-center gap-1 border-r border-[var(--inkblot-semantic-color-border-default)] bg-[var(--inkblot-semantic-color-background-secondary)] py-4"),"aria-label":"Navigation",children:t.map(r=>(0,k.jsxs)("div",{className:o("relative flex w-full flex-col items-center gap-1 rounded-[var(--inkblot-radius-md)] px-2 py-2 transition-colors hover:text-[var(--inkblot-semantic-color-text-secondary)]",r.active?"text-[var(--inkblot-semantic-color-interactive-primary)]":"text-[var(--inkblot-semantic-color-text-tertiary)]"),children:[r.active?(0,k.jsx)("span",{className:"absolute left-0 top-1/2 h-6 w-0.5 -translate-y-1/2 rounded-r-full bg-[var(--inkblot-semantic-color-interactive-primary)]","aria-hidden":!0}):null,(0,k.jsx)("div",{className:"flex h-8 w-8 items-center justify-center [&>svg]:h-5 [&>svg]:w-5",children:r.icon}),r.label?(0,k.jsx)("span",{className:"text-[10px] font-medium",children:r.label}):null]},r.id))})})}0&&(module.exports={Button,CommandInterface,EntityCard,EntityCommandCard,ErrorBoundary,EventRow,EventStreamFeed,Input,IntelligenceScoreCard,MetricComparisonList,ModuleContainer,ModuleErrorBoundary,ModuleSkeleton,OSNavigationRail,Skeleton,StatusBadge});
|
|
1
|
+
"use strict";var te=Object.defineProperty;var Te=Object.getOwnPropertyDescriptor;var _e=Object.getOwnPropertyNames;var De=Object.prototype.hasOwnProperty;var Ve=(t,e)=>{for(var r in e)te(t,r,{get:e[r],enumerable:!0})},He=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of _e(e))!De.call(t,i)&&i!==r&&te(t,i,{get:()=>e[i],enumerable:!(n=Te(e,i))||n.enumerable});return t};var Oe=t=>He(te({},"__esModule",{value:!0}),t);var it={};Ve(it,{ActivityStream:()=>J,AppNavigationRail:()=>ce,Button:()=>G,ChatFeed:()=>de,CommandBar:()=>me,CommandInterface:()=>H,EntityCard:()=>$,EntityCommandCard:()=>re,ErrorBoundary:()=>z,EventRow:()=>W,EventStreamFeed:()=>ae,EventStreamSidebar:()=>pe,Input:()=>F,IntelligenceLab:()=>ue,IntelligenceScoreCard:()=>Z,MainShell:()=>ve,MetricComparisonList:()=>se,ModuleContainer:()=>q,ModuleErrorBoundary:()=>l,ModuleSkeleton:()=>O,OSNavigationRail:()=>le,Skeleton:()=>B,StatusBadge:()=>U});module.exports=Oe(it);var ke=require("react");var xe=require("clsx"),ye=require("tailwind-merge");function o(...t){return(0,ye.twMerge)((0,xe.clsx)(t))}var Ne=require("react/jsx-runtime"),Ge={primary:"bg-[var(--inkblot-semantic-color-interactive-primary)] text-[var(--inkblot-semantic-color-text-primary)] hover:bg-[var(--inkblot-semantic-color-interactive-primary-hover)] active:bg-[var(--inkblot-semantic-color-interactive-primary-active)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--inkblot-semantic-color-border-focus)] focus-visible:outline-offset-2 disabled:opacity-[var(--inkblot-opacity-disabled)] disabled:pointer-events-none disabled:cursor-not-allowed",secondary:"bg-[var(--inkblot-semantic-color-interactive-secondary)] text-[var(--inkblot-semantic-color-text-primary)] border border-[var(--inkblot-semantic-color-border-default)] hover:bg-[var(--inkblot-semantic-color-interactive-secondary-hover)] hover:border-[var(--inkblot-semantic-color-border-strong)] active:bg-[var(--inkblot-semantic-color-interactive-secondary-hover)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--inkblot-semantic-color-border-focus)] focus-visible:outline-offset-2 disabled:opacity-[var(--inkblot-opacity-disabled)] disabled:pointer-events-none disabled:cursor-not-allowed"},G=(0,ke.forwardRef)(({className:t,variant:e="primary",disabled:r,...n},i)=>(0,Ne.jsx)("button",{ref:i,disabled:r,className:o("inline-flex min-h-[var(--inkblot-size-touch-target-min)] items-center justify-center rounded-[var(--inkblot-radius-lg)] px-4 py-2 font-semibold transition-[background,border-color] duration-[var(--inkblot-duration-fast)] ease-[var(--inkblot-easing-default)]",Ge[e],t),...n}));G.displayName="Button";var he=require("react"),Ee=require("lucide-react");var x=require("react/jsx-runtime");function H({promptValue:t="",onPromptChange:e,onPromptSubmit:r,onFilesAttach:n,isProcessing:i=!1,response:s,placeholder:a="Ask Citron Intelligence...",accept:k,multiple:v=!0,className:I}){let A=(0,he.useRef)(null),E=C=>{C.key==="Enter"&&!C.shiftKey&&(C.preventDefault(),r?.())},Q=()=>{A.current?.click()},j=C=>{let T=C.target.files;T&&T.length>0&&n&&n(Array.from(T)),C.target.value=""};return(0,x.jsxs)("div",{className:o("flex w-full max-w-2xl flex-col gap-8",I),children:[(0,x.jsx)("div",{className:"flex flex-col gap-4",children:(0,x.jsx)("div",{className:"flex flex-1 flex-col gap-4",children:(0,x.jsxs)("div",{className:"flex items-start gap-2",children:[(0,x.jsx)("input",{ref:A,type:"file",accept:k,multiple:v,onChange:j,className:"sr-only","aria-hidden":!0}),(0,x.jsx)("button",{type:"button",onClick:Q,disabled:i,className:o("flex h-9 w-9 shrink-0 items-center justify-center rounded-lg text-[var(--inkblot-semantic-color-text-tertiary)] transition-colors duration-[var(--inkblot-duration-fast)]","hover:bg-[var(--inkblot-semantic-color-background-secondary)] hover:text-[var(--inkblot-semantic-color-text-secondary)]","focus:outline-none focus:ring-2 focus:ring-[var(--inkblot-semantic-color-border-focus)] focus:ring-offset-2 focus:ring-offset-[var(--inkblot-semantic-color-background-primary)]","disabled:pointer-events-none disabled:opacity-50"),"aria-label":"Adjuntar archivos",children:(0,x.jsx)(Ee.Paperclip,{size:20,strokeWidth:1.5,className:"text-[var(--inkblot-semantic-color-text-tertiary)]","aria-hidden":!0})}),(0,x.jsx)("textarea",{value:t,onChange:C=>e?.(C.target.value),onKeyDown:E,placeholder:a,rows:3,disabled:i,className:o("min-w-0 flex-1 resize-none rounded-[var(--inkblot-radius-xl)] bg-[var(--inkblot-semantic-color-background-primary)] p-4 text-[var(--inkblot-semantic-color-text-primary)] placeholder:text-[var(--inkblot-semantic-color-text-tertiary)] transition-shadow duration-[var(--inkblot-duration-fast)]","focus:outline-none focus:ring-2 focus:ring-[var(--inkblot-semantic-color-border-focus)] focus:ring-offset-2 focus:ring-offset-[var(--inkblot-semantic-color-background-primary)]","shadow-[0_1px_3px_0_rgba(0,0,0,0.08),0_1px_2px_-1px_rgba(0,0,0,0.08)]","disabled:cursor-not-allowed disabled:opacity-70")})]})})}),i?(0,x.jsx)("div",{className:o("min-h-[80px] animate-shimmer rounded-[var(--inkblot-radius-xl)] bg-[length:200%_100%] bg-[linear-gradient(90deg,var(--inkblot-semantic-color-background-secondary)_0%,var(--inkblot-semantic-color-background-tertiary)_50%,var(--inkblot-semantic-color-background-secondary)_100%)]")}):s?(0,x.jsx)("div",{className:"flex flex-col gap-4",children:(0,x.jsx)("div",{className:"min-w-0 text-[var(--inkblot-semantic-color-text-primary)]",children:s})}):null]})}var b=require("react/jsx-runtime"),Fe={Person:"border-l-[var(--inkblot-semantic-color-status-info)] bg-[var(--inkblot-semantic-color-background-secondary)]",Organization:"border-l-[var(--inkblot-semantic-color-status-warning)] bg-[var(--inkblot-semantic-color-background-secondary)]",Deal:"border-l-[var(--inkblot-semantic-color-status-success)] bg-[var(--inkblot-semantic-color-background-secondary)]"};function $({name:t,entityType:e,metadata:r,edges:n=[],className:i}){return(0,b.jsxs)("article",{className:o("flex flex-col gap-4 rounded-[var(--inkblot-radius-lg)] border border-[var(--inkblot-semantic-color-border-default)] border-l-4 p-4",Fe[e],i),children:[(0,b.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,b.jsx)("span",{className:"text-xs font-medium uppercase tracking-wide text-[var(--inkblot-semantic-color-text-tertiary)]",children:e}),(0,b.jsx)("h3",{className:"text-base font-semibold text-[var(--inkblot-semantic-color-text-primary)]",children:t})]}),r&&Object.keys(r).length>0?(0,b.jsx)("dl",{className:"flex flex-col gap-1",children:Object.entries(r).map(([s,a])=>(0,b.jsxs)("div",{className:"flex gap-2",children:[(0,b.jsxs)("dt",{className:"text-sm text-[var(--inkblot-semantic-color-text-tertiary)]",children:[s,":"]}),(0,b.jsx)("dd",{className:"text-sm text-[var(--inkblot-semantic-color-text-secondary)]",children:a})]},s))}):null,n.length>0?(0,b.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,b.jsx)("h4",{className:"text-sm font-medium text-[var(--inkblot-semantic-color-text-secondary)]",children:"Edges"}),(0,b.jsx)("ul",{className:"flex flex-wrap gap-2",children:n.map((s,a)=>(0,b.jsxs)("li",{className:"rounded-[var(--inkblot-radius-md)] border border-[var(--inkblot-semantic-color-border-default)] bg-[var(--inkblot-semantic-color-background-tertiary)] px-2 py-1 text-xs text-[var(--inkblot-semantic-color-text-secondary)]",children:[s.type,s.target?` \u2192 ${s.target}`:""]},a))})]}):null]})}var Ce=require("react");var Se=require("react/jsx-runtime"),F=(0,Ce.forwardRef)(({className:t,error:e,disabled:r,...n},i)=>(0,Se.jsx)("input",{ref:i,disabled:r,"aria-invalid":e,"aria-disabled":r,className:o("min-h-[var(--inkblot-size-touch-target-min)] w-full rounded-[var(--inkblot-radius-md)] border bg-[var(--inkblot-semantic-color-background-secondary)] px-4 py-2 text-[var(--inkblot-semantic-color-text-primary)] placeholder:text-[var(--inkblot-semantic-color-text-tertiary)] transition-[border-color,box-shadow] duration-[var(--inkblot-duration-fast)] ease-[var(--inkblot-easing-default)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--inkblot-semantic-color-border-focus)] focus-visible:ring-offset-2 disabled:opacity-[var(--inkblot-opacity-disabled)] disabled:pointer-events-none disabled:cursor-not-allowed",e?"border-[var(--inkblot-semantic-color-status-error)] focus-visible:ring-[var(--inkblot-semantic-color-status-error)]":"border-[var(--inkblot-semantic-color-border-default)] hover:border-[var(--inkblot-semantic-color-border-strong)]",t),...n}));F.displayName="Input";var we=require("react");var K=require("react/jsx-runtime"),l=class extends we.Component{constructor(e){super(e),this.state={hasError:!1,error:null}}static getDerivedStateFromError(e){return{hasError:!0,error:e}}render(){return this.state.hasError&&this.state.error?(0,K.jsxs)("div",{role:"alert",className:o("flex flex-col gap-4 rounded-[var(--inkblot-radius-lg)] border border-[var(--inkblot-semantic-color-border-default)] bg-[var(--inkblot-semantic-color-background-secondary)] p-4",this.props.className),children:[(0,K.jsx)("p",{className:"text-base font-semibold text-[var(--inkblot-semantic-color-text-primary)]",children:"This module failed to load"}),(0,K.jsx)("p",{className:"text-sm text-[var(--inkblot-semantic-color-text-tertiary)]",children:this.state.error.message}),(0,K.jsx)(G,{variant:"secondary",onClick:this.props.onRetry,className:"w-fit border-[var(--inkblot-semantic-color-status-error)]",children:"Retry"})]}):this.props.children}};var f=require("react/jsx-runtime");function re({title:t,insights:e,stats:r=[],commandValue:n="",onCommandChange:i,onCommandSubmit:s,className:a}){let k=v=>{v.key==="Enter"&&(v.preventDefault(),s?.())};return(0,f.jsx)(l,{className:a,children:(0,f.jsxs)("div",{className:"flex flex-col gap-4 rounded-[var(--inkblot-radius-xl)] bg-[var(--inkblot-semantic-color-background-secondary)] p-4",children:[(0,f.jsx)("h2",{className:"text-xl font-semibold text-[var(--inkblot-semantic-color-text-primary)]",children:t}),e?(0,f.jsx)("div",{className:"rounded-[var(--inkblot-radius-md)] border border-[var(--inkblot-semantic-color-interactive-primary)] p-4",style:{boxShadow:"0 0 12px var(--inkblot-semantic-color-interactive-primary)"},children:e}):null,r.length>0?(0,f.jsxs)("div",{children:[(0,f.jsx)("h3",{className:"mb-2 text-sm font-medium text-[var(--inkblot-semantic-color-text-secondary)]",children:"Connected To"}),(0,f.jsx)("div",{className:"grid grid-cols-2 gap-2 sm:grid-cols-3",children:r.map((v,I)=>(0,f.jsxs)("div",{className:"rounded-[var(--inkblot-radius-md)] bg-[var(--inkblot-semantic-color-background-tertiary)] px-3 py-2",children:[(0,f.jsx)("span",{className:"text-xs text-[var(--inkblot-semantic-color-text-tertiary)]",children:v.label}),(0,f.jsx)("p",{className:"text-sm font-medium text-[var(--inkblot-semantic-color-text-primary)]",children:v.value})]},I))})]}):null,(0,f.jsx)("div",{className:"mt-2",children:(0,f.jsx)(F,{type:"text",value:n,onChange:v=>i?.(v.target.value),onKeyDown:k,placeholder:"Ask about this entity...",className:"rounded-[var(--inkblot-radius-md)]"})})]})})}var Pe=require("react");var oe=require("react/jsx-runtime"),z=class extends Pe.Component{constructor(e){super(e),this.state={hasError:!1,error:null}}static getDerivedStateFromError(e){return{hasError:!0,error:e}}render(){return this.state.hasError&&this.state.error?this.props.fallback?this.props.fallback:(0,oe.jsx)("div",{className:o("inline-flex items-center gap-3 rounded-[var(--inkblot-radius-md)] border border-[var(--inkblot-semantic-color-border-default)] bg-[var(--inkblot-semantic-color-background-tertiary)] px-4 py-3 text-[var(--inkblot-semantic-color-text-secondary)]",this.props.className),role:"alert",children:(0,oe.jsx)("span",{className:"text-sm font-medium",children:"Something went wrong"})}):this.props.children}};var Me=require("react/jsx-runtime"),Ke={success:"border-[var(--inkblot-semantic-color-status-success)] bg-[var(--inkblot-semantic-color-status-success)]/10 text-[var(--inkblot-semantic-color-status-success)]",warning:"border-[var(--inkblot-semantic-color-status-warning)] bg-[var(--inkblot-semantic-color-status-warning)]/10 text-[var(--inkblot-semantic-color-status-warning)]",error:"border-[var(--inkblot-semantic-color-status-error)] bg-[var(--inkblot-semantic-color-status-error)]/10 text-[var(--inkblot-semantic-color-status-error)]",info:"border-[var(--inkblot-semantic-color-status-info)] bg-[var(--inkblot-semantic-color-status-info)]/10 text-[var(--inkblot-semantic-color-status-info)]"};function U({label:t,variant:e="info",className:r}){return(0,Me.jsx)("span",{className:o("inline-flex items-center rounded-[var(--inkblot-radius-md)] border px-2 py-0.5 text-xs font-medium",Ke[e],r),children:t})}var R=require("react/jsx-runtime");function $e(t){return t>=.8?"success":t>=.5?"info":t>=.2?"warning":"error"}function W({event:t,className:e}){let r=$e(t.confidence_score),n=`${Math.round(t.confidence_score*100)}%`;return(0,R.jsxs)("div",{className:o("flex flex-wrap items-center gap-2 rounded-[var(--inkblot-radius-lg)] border border-[var(--inkblot-semantic-color-border-default)] bg-[var(--inkblot-semantic-color-background-secondary)] p-4",e),children:[(0,R.jsx)("span",{className:"text-sm font-medium text-[var(--inkblot-semantic-color-text-primary)]",children:t.actor}),(0,R.jsx)("span",{className:"text-sm text-[var(--inkblot-semantic-color-text-tertiary)]",children:"\u2192"}),(0,R.jsx)("span",{className:"text-sm text-[var(--inkblot-semantic-color-text-secondary)]",children:t.subject}),(0,R.jsx)("span",{className:"rounded-[var(--inkblot-radius-md)] bg-[var(--inkblot-semantic-color-background-tertiary)] px-2 py-0.5 text-xs text-[var(--inkblot-semantic-color-text-secondary)]",children:t.event_type}),(0,R.jsx)("span",{className:"text-xs text-[var(--inkblot-semantic-color-text-tertiary)]",children:t.timestamp}),(0,R.jsx)(U,{label:n,variant:r})]})}var y=require("react/jsx-runtime"),ze={success:"bg-[var(--inkblot-semantic-color-status-success)]",warning:"bg-[var(--inkblot-semantic-color-status-warning)]",error:"bg-[var(--inkblot-semantic-color-status-error)]",info:"bg-[var(--inkblot-semantic-color-status-info)]"};function Ue(){return(0,y.jsx)("svg",{viewBox:"0 0 16 16",className:"h-4 w-4 text-[var(--inkblot-semantic-color-text-tertiary)]","aria-hidden":!0,children:(0,y.jsx)("circle",{cx:"8",cy:"8",r:"2",fill:"currentColor"})})}function ae({events:t,className:e}){return(0,y.jsx)(l,{className:e,children:(0,y.jsx)("div",{className:o("flex flex-col gap-4 border-l-2 border-[var(--inkblot-semantic-color-border-default)] pl-4"),children:t.map(r=>(0,y.jsxs)("div",{className:"flex items-start gap-3",children:[(0,y.jsx)("div",{className:"flex shrink-0 items-center pt-0.5",children:r.icon??(0,y.jsx)(Ue,{})}),(0,y.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,y.jsx)("p",{className:"text-sm font-medium text-[var(--inkblot-semantic-color-text-primary)]",children:r.title}),(0,y.jsx)("p",{className:"text-xs text-[var(--inkblot-semantic-color-text-tertiary)]",children:r.timestamp})]}),r.status?(0,y.jsx)("div",{className:o("mt-1.5 h-2 w-2 shrink-0 rounded-full",ze[r.status]),"aria-hidden":!0}):null]},r.id))})})}var m=require("react/jsx-runtime"),ie=36,ne=2*Math.PI*ie;function Z({label:t,value:e,subtext:r,trend:n,className:i}){let s=Math.min(100,Math.max(0,e)),a=ne-s/100*ne;return(0,m.jsx)(l,{className:i,children:(0,m.jsxs)("div",{className:"flex flex-col items-center gap-4 rounded-[var(--inkblot-radius-lg)] bg-[var(--inkblot-semantic-color-background-secondary)] p-4",children:[(0,m.jsxs)("div",{className:"relative",children:[(0,m.jsxs)("svg",{width:"96",height:"96",viewBox:"0 0 96 96",className:"-rotate-90",children:[(0,m.jsx)("circle",{cx:"48",cy:"48",r:ie,fill:"none",stroke:"var(--inkblot-semantic-color-background-tertiary)",strokeWidth:"4"}),(0,m.jsx)("circle",{cx:"48",cy:"48",r:ie,fill:"none",stroke:"var(--inkblot-semantic-color-interactive-primary)",strokeWidth:"4",strokeDasharray:ne,strokeDashoffset:a,strokeLinecap:"round",className:"transition-[stroke-dashoffset] duration-[var(--inkblot-duration-fast)]"})]}),(0,m.jsx)("div",{className:"absolute inset-0 flex flex-col items-center justify-center",children:(0,m.jsxs)("span",{className:"flex items-center gap-1 text-lg font-semibold text-[var(--inkblot-semantic-color-text-primary)]",children:[s,"%",n==="up"?(0,m.jsx)("svg",{viewBox:"0 0 16 16",className:"h-4 w-4 text-[var(--inkblot-semantic-color-status-success)]","aria-hidden":!0,children:(0,m.jsx)("path",{fill:"currentColor",d:"M8 4l4 6H4l4-6z"})}):n==="down"?(0,m.jsx)("svg",{viewBox:"0 0 16 16",className:"h-4 w-4 text-[var(--inkblot-semantic-color-status-error)]","aria-hidden":!0,children:(0,m.jsx)("path",{fill:"currentColor",d:"M8 12l4-6H4l4 6z"})}):null]})})]}),(0,m.jsxs)("div",{className:"text-center",children:[(0,m.jsx)("p",{className:"text-sm font-medium text-[var(--inkblot-semantic-color-text-primary)]",children:t}),r?(0,m.jsx)("p",{className:"text-xs text-[var(--inkblot-semantic-color-text-tertiary)]",children:r}):null]})]})})}var w=require("react/jsx-runtime"),We={default:"text-[var(--inkblot-semantic-color-text-primary)]",success:"text-[var(--inkblot-semantic-color-status-success)]",warning:"text-[var(--inkblot-semantic-color-status-warning)]",error:"text-[var(--inkblot-semantic-color-status-error)]"};function Ze({className:t}){return(0,w.jsx)("svg",{viewBox:"0 0 16 16",className:o("h-4 w-4",t),"aria-hidden":!0,children:(0,w.jsx)("path",{fill:"currentColor",d:"M6 4l4 4-4 4V4z"})})}function se({items:t,className:e}){return(0,w.jsx)(l,{className:e,children:(0,w.jsx)("ul",{className:o("flex flex-col gap-4 py-2"),children:t.map((r,n)=>(0,w.jsxs)("li",{className:"flex items-center justify-between gap-4",children:[(0,w.jsx)("span",{className:"text-sm text-[var(--inkblot-semantic-color-text-secondary)]",children:r.label}),(0,w.jsx)("span",{className:o("flex items-center gap-1 text-sm font-medium",We[r.variant??"default"]),children:r.value!=null?r.value:(0,w.jsx)(Ze,{})})]},n))})})}var Ie=require("react/jsx-runtime");function B({className:t,...e}){return(0,Ie.jsx)("div",{className:o("animate-shimmer rounded-[var(--inkblot-radius-md)] bg-[length:200%_100%] bg-[linear-gradient(90deg,var(--inkblot-semantic-color-background-secondary)_0%,var(--inkblot-semantic-color-background-tertiary)_50%,var(--inkblot-semantic-color-background-secondary)_100%)]",t),...e})}var _=require("react/jsx-runtime");function O({className:t,...e}){return(0,_.jsxs)("div",{className:o("flex flex-col gap-2 rounded-[var(--inkblot-radius-lg)] border border-[var(--inkblot-semantic-color-border-default)] bg-[var(--inkblot-semantic-color-background-secondary)] p-4",t),...e,children:[(0,_.jsx)(B,{className:"h-5 w-3/4"}),(0,_.jsx)(B,{className:"h-4 w-full"}),(0,_.jsx)(B,{className:"h-4 w-5/6"}),(0,_.jsx)(B,{className:"h-4 w-4/5"}),(0,_.jsx)(B,{className:"h-4 w-3/4"})]})}var D=require("react/jsx-runtime");function q({children:t,loading:e=!1,title:r,className:n,onRetry:i}){return(0,D.jsx)(l,{className:n,onRetry:i,children:e?(0,D.jsxs)("div",{className:o("flex flex-col gap-4",n),children:[r?(0,D.jsx)("h2",{className:"text-lg font-semibold text-[var(--inkblot-semantic-color-text-primary)]",children:r}):null,(0,D.jsx)(O,{})]}):(0,D.jsxs)("div",{className:o("flex flex-col gap-4",n),children:[r?(0,D.jsx)("h2",{className:"text-lg font-semibold text-[var(--inkblot-semantic-color-text-primary)]",children:r}):null,t]})})}var V=require("react/jsx-runtime");function le({items:t,className:e}){return(0,V.jsx)(l,{className:e,children:(0,V.jsx)("nav",{className:o("flex w-14 flex-col items-center gap-1 border-r border-[var(--inkblot-semantic-color-border-default)] bg-[var(--inkblot-semantic-color-background-secondary)] py-4"),"aria-label":"Navigation",children:t.map(r=>(0,V.jsxs)("div",{className:o("relative flex w-full flex-col items-center gap-1 rounded-[var(--inkblot-radius-md)] px-2 py-2 transition-colors hover:text-[var(--inkblot-semantic-color-text-secondary)]",r.active?"text-[var(--inkblot-semantic-color-interactive-primary)]":"text-[var(--inkblot-semantic-color-text-tertiary)]"),children:[r.active?(0,V.jsx)("span",{className:"absolute left-0 top-1/2 h-6 w-0.5 -translate-y-1/2 rounded-r-full bg-[var(--inkblot-semantic-color-interactive-primary)]","aria-hidden":!0}):null,(0,V.jsx)("div",{className:"flex h-8 w-8 items-center justify-center [&>svg]:h-5 [&>svg]:w-5",children:r.icon}),r.label?(0,V.jsx)("span",{className:"text-[10px] font-medium",children:r.label}):null]},r.id))})})}var u=require("lucide-react");var p=require("react/jsx-runtime");function qe(t){return t>=.8?"bg-[var(--inkblot-semantic-color-status-success)]":t>=.5?"bg-[var(--inkblot-semantic-color-status-info)]":t>=.2?"bg-[var(--inkblot-semantic-color-status-warning)]":"bg-[var(--inkblot-semantic-color-status-error)]"}var Je={EMAIL_OPENED:u.Mail,EMAIL_SENT:u.Mail,INVOICE_PAID:u.FileText,INVOICE_OVERDUE:u.FileText,CONTRACT_SIGNED:u.FileText,STAGE_CHANGED:u.Zap,CALL_COMPLETED:u.Phone,PHONE_CALL:u.Phone,RELATIONSHIP_DETECTED:u.Link2};function Qe(t){return Je[t]??u.FileText}function Xe(t){return t.metadata?.description??t.event_type.replace(/_/g," ").toLowerCase()}function Ye(t){return t.metadata?.details??`${t.actor} - ${t.subject}`}function J({events:t,onEntitySelect:e,findEntity:r,emptyMessage:n="No hay actividad reciente",className:i}){let s=e?a=>{let k=r?.(a.subject)??r?.(a.actor);k&&e(k)}:void 0;return(0,p.jsx)(l,{children:(0,p.jsx)("div",{className:o("space-y-2",i),children:t.length===0?(0,p.jsx)("p",{className:"py-6 text-center text-sm text-[var(--inkblot-semantic-color-text-tertiary)]",children:n}):t.map(a=>{let v=!!(r?.(a.subject)??r?.(a.actor))&&!!s,I=Qe(a.event_type),A=(0,p.jsxs)("div",{className:"flex flex-1 items-center gap-3",children:[(0,p.jsx)(I,{className:"h-4 w-4 shrink-0 text-[var(--inkblot-semantic-color-text-secondary)]","aria-hidden":!0}),(0,p.jsx)("div",{className:`h-2 w-2 shrink-0 rounded-full ${qe(a.confidence_score)}`,"aria-hidden":!0}),(0,p.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,p.jsx)("p",{className:"text-sm font-medium text-[var(--inkblot-semantic-color-text-primary)]",children:Xe(a)}),(0,p.jsx)("p",{className:"text-xs text-[var(--inkblot-semantic-color-text-secondary)]",children:Ye(a)})]}),(0,p.jsx)("span",{className:"shrink-0 text-xs text-[var(--inkblot-semantic-color-text-tertiary)]",children:a.timestamp})]}),E=a.id??`${a.actor}-${a.subject}-${a.timestamp}`;return(0,p.jsx)("div",{children:v?(0,p.jsx)("button",{type:"button",onClick:()=>s(a),className:"flex w-full items-center gap-3 rounded-[var(--inkblot-radius-md)] bg-[var(--inkblot-semantic-color-background-secondary)] p-3 text-left transition-colors duration-[var(--inkblot-duration-fast)] hover:bg-[var(--inkblot-semantic-color-background-tertiary)] focus:outline-none focus:ring-2 focus:ring-[var(--inkblot-semantic-color-border-focus)] focus:ring-offset-2 focus:ring-offset-[var(--inkblot-semantic-color-background-primary)]",children:A}):(0,p.jsx)("div",{className:"flex w-full items-center gap-3 rounded-[var(--inkblot-radius-md)] bg-[var(--inkblot-semantic-color-background-secondary)] p-3",children:A})},E)})})})}var Re=require("react-router-dom"),g=require("lucide-react");var P=require("react/jsx-runtime"),je=[{id:"home",path:"/",icon:g.ClipboardList,label:"Home"},{id:"intelligence",path:"/intelligence",icon:g.Brain,label:"Intelligence"},{id:"pipeline",path:"/pipeline",icon:g.BarChart3,label:"Pipeline"},{id:"graph",path:"/graph",icon:g.Network,label:"Graph"},{id:"events",path:"/events",icon:g.Activity,label:"Events"},{id:"settings",path:"/settings",icon:g.Settings,label:"Settings"}];function ce({items:t=je,brandLogo:e,brandTitle:r="Command Canvas \u2014 AI-native Interface",className:n}){return(0,P.jsx)(l,{children:(0,P.jsxs)("nav",{className:o("flex h-full flex-col gap-4 bg-[var(--inkblot-semantic-color-background-secondary)] p-3",n),children:[(0,P.jsx)("div",{className:"flex flex-col items-center gap-2",children:(0,P.jsx)("div",{className:"flex h-10 w-10 shrink-0 items-center justify-center rounded-[var(--inkblot-radius-md)] bg-[var(--inkblot-semantic-color-interactive-primary)]",title:r,children:e??(0,P.jsx)(g.Sparkles,{className:"h-5 w-5 text-[var(--inkblot-semantic-color-text-primary)]","aria-hidden":!0})})}),(0,P.jsx)("div",{className:"flex flex-1 flex-col gap-2",children:t.map(i=>{let s=i.icon;return(0,P.jsx)(Re.NavLink,{to:i.path,end:i.path==="/","aria-label":i.label,className:({isActive:a})=>`flex items-center justify-center gap-2 rounded-[var(--inkblot-radius-md)] border-l-2 px-3 py-2 transition-colors duration-[var(--inkblot-duration-fast)] ${a?"border-[var(--inkblot-semantic-color-interactive-primary)] bg-[var(--inkblot-semantic-color-interactive-primary)] text-[var(--inkblot-semantic-color-text-primary)]":"border-transparent text-[var(--inkblot-semantic-color-text-secondary)] hover:bg-[var(--inkblot-semantic-color-interactive-secondary-hover)]"}`,children:(0,P.jsx)(s,{size:20,"aria-hidden":!0})},i.id)})})]})})}var N=require("react");var c=require("react/jsx-runtime");function et(t){let e=t.toLowerCase();return e.includes("entity")||e.includes("company")||e.includes("person")||e.includes("deal")||e.includes("profile")||e.includes("org")?"entity":e.includes("event")||e.includes("activity")||e.includes("recent")||e.includes("stream")||e.includes("log")?"event":"general"}function tt({entities:t}){let e=t[0];return e?(0,c.jsxs)("div",{className:"space-y-3",children:[(0,c.jsx)("p",{className:"text-sm text-[var(--inkblot-semantic-color-text-secondary)]",children:"Here's the entity profile and current intelligence scores:"}),(0,c.jsx)($,{name:e.name,entityType:e.type,metadata:e.metadata,edges:[{type:"WORKS_WITH",target:t[1]?.name},{type:"MANAGES",target:t[4]?.name}]})]}):null}function rt({events:t}){return(0,c.jsxs)("div",{className:"space-y-2",children:[(0,c.jsx)("p",{className:"text-sm text-[var(--inkblot-semantic-color-text-secondary)]",children:"Latest activity from the event bus:"}),t.slice(0,5).map(e=>(0,c.jsx)(W,{event:e},e.id??`${e.actor}-${e.subject}-${e.timestamp}`))]})}function ot(){return(0,c.jsx)("p",{className:"text-sm text-[var(--inkblot-semantic-color-text-primary)]",children:"Revenue confidence is trending upward at 78%. Momentum score increased 12% this week driven by 3 new meetings with Acme Corp. Churn risk remains low at 15% across the active pipeline."})}function de({entities:t,events:e,onFocusEntity:r,findEntity:n,placeholder:i="Ask anything \u2014 deals, contacts, forecasts...",emptyMessage:s="Escribe para comenzar...",className:a}){let[k,v]=(0,N.useState)(""),[I,A]=(0,N.useState)([]),[E,Q]=(0,N.useState)(!1),[j,C]=(0,N.useState)(new Map),T=(0,N.useRef)(null);(0,N.useEffect)(()=>{T.current&&(T.current.scrollTop=T.current.scrollHeight)},[I,E]);let Le=(0,N.useCallback)(()=>{let S=k.trim();if(!S||E)return;let be=n?.(S);be&&r&&r(be);let Ae={id:`msg-${Date.now()}`,role:"user",content:S,timestamp:new Date().toISOString()},fe=et(S);A(X=>[...X,Ae]),v(""),Q(!0),setTimeout(()=>{let X={id:`msg-${Date.now()}-res`,role:"assistant",content:"",intent:fe,timestamp:new Date().toISOString()},Y;switch(fe){case"entity":Y=(0,c.jsx)(tt,{entities:t});break;case"event":Y=(0,c.jsx)(rt,{events:e});break;default:Y=(0,c.jsx)(ot,{})}C(ee=>{let ge=new Map(ee);return ge.set(X.id,Y),ge}),A(ee=>[...ee,X]),Q(!1)},1e3)},[k,E,t,e,r,n]);return(0,c.jsxs)("div",{className:o("flex h-full flex-col",a),children:[(0,c.jsxs)("div",{ref:T,className:"flex-1 space-y-4 overflow-y-auto p-4",children:[I.length===0&&!E?(0,c.jsx)("div",{className:"flex flex-1 items-center justify-center py-12",children:(0,c.jsx)("p",{className:"text-sm text-[var(--inkblot-semantic-color-text-tertiary)]",children:s})}):I.map(S=>(0,c.jsx)("div",{className:"flex flex-col gap-2",children:S.role==="user"?(0,c.jsx)("div",{className:"flex justify-end",children:(0,c.jsx)("div",{className:"max-w-[80%] rounded-[var(--inkblot-radius-lg)] bg-[var(--inkblot-semantic-color-interactive-primary)] px-4 py-3 text-sm text-[var(--inkblot-semantic-color-text-primary)]",children:S.content})}):(0,c.jsx)("div",{className:"max-w-[90%]",children:j.get(S.id)??(0,c.jsx)("p",{className:"text-sm text-[var(--inkblot-semantic-color-text-primary)]",children:S.content})})},S.id)),E&&(0,c.jsx)("div",{className:"max-w-[70%]",children:(0,c.jsx)(O,{className:"animate-shimmer"})})]}),(0,c.jsx)("div",{className:"shrink-0 border-t border-[var(--inkblot-semantic-color-border-default)] bg-[var(--inkblot-semantic-color-background-primary)] p-4",children:(0,c.jsx)(H,{promptValue:k,onPromptChange:v,onPromptSubmit:Le,isProcessing:E,placeholder:i})})]})}var Be=require("lucide-react");var L=require("react/jsx-runtime");function me({prompt:t,onPromptChange:e,onSubmit:r,isProcessing:n,placeholder:i="Ask anything \u2014 deals, contacts, forecasts...",subtitle:s="Citron OS v1.0 \u2014 AI-native Revenue & Operations Platform",className:a}){return(0,L.jsxs)("div",{className:o("border-t border-[var(--inkblot-semantic-color-border-default)] bg-[var(--inkblot-semantic-color-background-secondary)] p-4",a),children:[(0,L.jsxs)("div",{className:"flex items-center gap-3",children:[(0,L.jsx)("div",{className:"flex h-10 w-10 shrink-0 items-center justify-center rounded-[var(--inkblot-radius-md)] bg-[var(--inkblot-semantic-color-interactive-primary)]",children:(0,L.jsx)(Be.Sparkles,{className:"h-5 w-5 text-[var(--inkblot-semantic-color-text-primary)]","aria-hidden":!0})}),(0,L.jsx)("div",{className:"flex-1",children:(0,L.jsx)(H,{promptValue:t,onPromptChange:e,onPromptSubmit:r,isProcessing:n,placeholder:i})})]}),s&&(0,L.jsx)("p",{className:"mt-2 text-xs text-[var(--inkblot-semantic-color-text-tertiary)]",children:s})]})}var h=require("react/jsx-runtime");function pe({events:t,title:e="Event Stream",showLive:r=!0,className:n}){return(0,h.jsx)(l,{children:(0,h.jsxs)("div",{className:o("flex h-full flex-col bg-[var(--inkblot-semantic-color-background-secondary)]",n),children:[(0,h.jsxs)("div",{className:"flex shrink-0 items-center justify-between border-b border-[var(--inkblot-semantic-color-border-default)] px-4 py-3",children:[(0,h.jsx)("span",{className:"text-xs font-medium uppercase tracking-wider text-[var(--inkblot-semantic-color-text-secondary)]",children:e}),r&&(0,h.jsxs)("div",{className:"flex items-center gap-2",children:[(0,h.jsx)("div",{className:"h-2 w-2 rounded-full bg-[var(--inkblot-semantic-color-status-success)]"}),(0,h.jsx)("span",{className:"text-xs text-[var(--inkblot-semantic-color-status-success)]",children:"Live"})]})]}),(0,h.jsx)("div",{className:"flex-1 overflow-auto p-4",children:(0,h.jsx)(J,{events:t})})]})})}var d=require("react/jsx-runtime"),at=[{label:"Pipeline Health",value:76},{label:"Churn Risk",value:28},{label:"Expansion Signal",value:64},{label:"Team Velocity",value:83}],nt=[{title:"Acme Corp likely to close within 14 days",description:"Based on email sentiment, meeting cadence, and champion engagement patterns.",confidence:89},{title:"Churn risk detected: GlobalTech Inc",description:"Declining touchpoints and support ticket volume suggest potential churn.",confidence:74},{title:"Expansion opportunity: TechVentures",description:"Usage patterns and NPS scores indicate readiness for upsell conversation.",confidence:81}];function ue({loading:t,kpiCards:e=at,aiInsights:r=nt,title:n="Intelligence Lab",subtitle:i="AI-generated insights - Updated 3 min ago",className:s}){return(0,d.jsxs)("div",{className:o("flex h-full flex-col gap-4 overflow-y-auto p-4",s),children:[(0,d.jsxs)("div",{children:[(0,d.jsx)("h1",{className:"text-2xl font-semibold text-[var(--inkblot-semantic-color-text-primary)]",children:n}),(0,d.jsx)("p",{className:"text-sm text-[var(--inkblot-semantic-color-text-tertiary)]",children:i})]}),(0,d.jsx)(q,{loading:t,title:"",children:(0,d.jsx)(l,{children:(0,d.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,d.jsx)("div",{className:"grid grid-cols-2 gap-4 lg:grid-cols-4",children:e.map(a=>(0,d.jsx)(Z,{label:a.label,value:a.value,subtext:a.subtext,trend:a.trend},a.label))}),(0,d.jsxs)("div",{children:[(0,d.jsx)("h2",{className:"mb-4 border-b border-[var(--inkblot-semantic-color-border-default)] pb-2 text-sm font-bold uppercase tracking-wider text-[var(--inkblot-semantic-color-text-primary)]",children:"AI Insights"}),(0,d.jsx)("div",{className:"flex flex-col gap-4",children:r.map(a=>(0,d.jsx)(l,{children:(0,d.jsxs)("div",{className:"flex items-start justify-between gap-4 rounded-[var(--inkblot-radius-lg)] bg-[var(--inkblot-semantic-color-background-secondary)] p-4",children:[(0,d.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,d.jsx)("h3",{className:"font-semibold text-[var(--inkblot-semantic-color-text-primary)]",children:a.title}),(0,d.jsx)("p",{className:"mt-1 text-sm text-[var(--inkblot-semantic-color-text-tertiary)]",children:a.description})]}),(0,d.jsxs)("div",{className:"flex shrink-0 flex-col items-center",children:[(0,d.jsx)("span",{className:"text-lg font-bold text-[var(--inkblot-semantic-color-text-primary)]",children:a.confidence}),(0,d.jsx)("span",{className:"text-xs text-[var(--inkblot-semantic-color-text-tertiary)]",children:"Conf."})]})]})},a.title))})]})]})})})]})}var M=require("react/jsx-runtime");function ve({navigation:t,eventStream:e,commandBar:r,children:n,className:i,eventStreamWidth:s="w-80"}){return(0,M.jsxs)("div",{className:o("flex h-screen w-screen overflow-hidden bg-[var(--inkblot-semantic-color-background-primary)]",i),children:[(0,M.jsx)("aside",{className:"flex h-full w-16 shrink-0 flex-col border-r border-[var(--inkblot-semantic-color-border-default)]",children:t}),(0,M.jsx)("main",{className:"flex flex-1 flex-col overflow-hidden",children:(0,M.jsxs)("div",{className:"flex min-h-0 flex-1",children:[(0,M.jsxs)("div",{className:"flex min-h-0 flex-1 flex-col overflow-hidden bg-[var(--inkblot-semantic-color-background-primary)]",children:[(0,M.jsx)("div",{className:"flex-1 overflow-auto",children:n}),(0,M.jsx)("div",{className:"shrink-0",children:r})]}),e&&(0,M.jsx)("aside",{className:o("flex h-full shrink-0 flex-col border-l border-[var(--inkblot-semantic-color-border-default)]",s),children:e})]})})]})}0&&(module.exports={ActivityStream,AppNavigationRail,Button,ChatFeed,CommandBar,CommandInterface,EntityCard,EntityCommandCard,ErrorBoundary,EventRow,EventStreamFeed,EventStreamSidebar,Input,IntelligenceLab,IntelligenceScoreCard,MainShell,MetricComparisonList,ModuleContainer,ModuleErrorBoundary,ModuleSkeleton,OSNavigationRail,Skeleton,StatusBadge});
|
package/dist/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{forwardRef as X}from"react";import{clsx as Q}from"clsx";import{twMerge as U}from"tailwind-merge";function o(...t){return U(Q(t))}import{jsx as Z}from"react/jsx-runtime";var Y={primary:"bg-[var(--inkblot-semantic-color-interactive-primary)] text-[var(--inkblot-semantic-color-text-primary)] hover:bg-[var(--inkblot-semantic-color-interactive-primary-hover)] active:bg-[var(--inkblot-semantic-color-interactive-primary-active)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--inkblot-semantic-color-border-focus)] focus-visible:outline-offset-2 disabled:opacity-[var(--inkblot-opacity-disabled)] disabled:pointer-events-none disabled:cursor-not-allowed",secondary:"bg-[var(--inkblot-semantic-color-interactive-secondary)] text-[var(--inkblot-semantic-color-text-primary)] border border-[var(--inkblot-semantic-color-border-default)] hover:bg-[var(--inkblot-semantic-color-interactive-secondary-hover)] hover:border-[var(--inkblot-semantic-color-border-strong)] active:bg-[var(--inkblot-semantic-color-interactive-secondary-hover)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--inkblot-semantic-color-border-focus)] focus-visible:outline-offset-2 disabled:opacity-[var(--inkblot-opacity-disabled)] disabled:pointer-events-none disabled:cursor-not-allowed"},g=X(({className:t,variant:e="primary",disabled:r,...a},i)=>Z("button",{ref:i,disabled:r,className:o("inline-flex min-h-[var(--inkblot-size-touch-target-min)] items-center justify-center rounded-[var(--inkblot-radius-lg)] px-4 py-2 font-semibold transition-[background,border-color] duration-[var(--inkblot-duration-fast)] ease-[var(--inkblot-easing-default)]",Y[e],t),...a}));g.displayName="Button";import{jsx as c,jsxs as C}from"react/jsx-runtime";function V({className:t}){return C("svg",{viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",className:o("h-8 w-8",t),"aria-hidden":!0,children:[c("circle",{cx:"12",cy:"12",r:"9",stroke:"currentColor",strokeWidth:"1.5",className:"text-[var(--inkblot-semantic-color-text-tertiary)]"}),c("path",{d:"M8 12h2v2H8v-2zm6 0h2v2h-2v-2zM10 8l2 4 2-4",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",className:"text-[var(--inkblot-semantic-color-text-secondary)]"})]})}function _({promptValue:t="",onPromptChange:e,onPromptSubmit:r,isProcessing:a=!1,response:i,placeholder:s="Ask Citron Intelligence...",className:m}){let B=l=>{l.key==="Enter"&&!l.shiftKey&&(l.preventDefault(),r?.())};return C("div",{className:o("flex w-full max-w-2xl flex-col gap-8",m),children:[c("div",{className:"flex flex-col gap-4",children:C("div",{className:"flex items-start gap-4",children:[c("div",{className:"flex shrink-0 items-center justify-center",children:c(V,{})}),c("div",{className:"flex flex-1 flex-col gap-4",children:c("textarea",{value:t,onChange:l=>e?.(l.target.value),onKeyDown:B,placeholder:s,rows:3,disabled:a,className:o("w-full resize-none rounded-[var(--inkblot-radius-xl)] bg-[var(--inkblot-semantic-color-background-primary)] p-4 text-[var(--inkblot-semantic-color-text-primary)] placeholder:text-[var(--inkblot-semantic-color-text-tertiary)] transition-shadow duration-[var(--inkblot-duration-fast)]","focus:outline-none focus:ring-2 focus:ring-[var(--inkblot-semantic-color-border-focus)] focus:ring-offset-2 focus:ring-offset-[var(--inkblot-semantic-color-background-primary)]","shadow-[0_1px_3px_0_rgba(0,0,0,0.08),0_1px_2px_-1px_rgba(0,0,0,0.08)]","disabled:cursor-not-allowed disabled:opacity-70")})})]})}),a?c("div",{className:o("min-h-[80px] animate-shimmer rounded-[var(--inkblot-radius-xl)] bg-[length:200%_100%] bg-[linear-gradient(90deg,var(--inkblot-semantic-color-background-secondary)_0%,var(--inkblot-semantic-color-background-tertiary)_50%,var(--inkblot-semantic-color-background-secondary)_100%)]")}):i?c("div",{className:"flex flex-col gap-4",children:C("div",{className:"flex items-start gap-4",children:[c("div",{className:"shrink-0",children:c(V,{})}),c("div",{className:"min-w-0 flex-1 text-[var(--inkblot-semantic-color-text-primary)]",children:i})]})}):null]})}import{jsx as f,jsxs as x}from"react/jsx-runtime";var j={Person:"border-l-[var(--inkblot-semantic-color-status-info)] bg-[var(--inkblot-semantic-color-background-secondary)]",Organization:"border-l-[var(--inkblot-semantic-color-status-warning)] bg-[var(--inkblot-semantic-color-background-secondary)]",Deal:"border-l-[var(--inkblot-semantic-color-status-success)] bg-[var(--inkblot-semantic-color-background-secondary)]"};function H({name:t,entityType:e,metadata:r,edges:a=[],className:i}){return x("article",{className:o("flex flex-col gap-4 rounded-[var(--inkblot-radius-lg)] border border-[var(--inkblot-semantic-color-border-default)] border-l-4 p-4",j[e],i),children:[x("div",{className:"flex flex-col gap-1",children:[f("span",{className:"text-xs font-medium uppercase tracking-wide text-[var(--inkblot-semantic-color-text-tertiary)]",children:e}),f("h3",{className:"text-base font-semibold text-[var(--inkblot-semantic-color-text-primary)]",children:t})]}),r&&Object.keys(r).length>0?f("dl",{className:"flex flex-col gap-1",children:Object.entries(r).map(([s,m])=>x("div",{className:"flex gap-2",children:[x("dt",{className:"text-sm text-[var(--inkblot-semantic-color-text-tertiary)]",children:[s,":"]}),f("dd",{className:"text-sm text-[var(--inkblot-semantic-color-text-secondary)]",children:m})]},s))}):null,a.length>0?x("div",{className:"flex flex-col gap-2",children:[f("h4",{className:"text-sm font-medium text-[var(--inkblot-semantic-color-text-secondary)]",children:"Edges"}),f("ul",{className:"flex flex-wrap gap-2",children:a.map((s,m)=>x("li",{className:"rounded-[var(--inkblot-radius-md)] border border-[var(--inkblot-semantic-color-border-default)] bg-[var(--inkblot-semantic-color-background-tertiary)] px-2 py-1 text-xs text-[var(--inkblot-semantic-color-text-secondary)]",children:[s.type,s.target?` \u2192 ${s.target}`:""]},m))})]}):null]})}import{forwardRef as tt}from"react";import{jsx as rt}from"react/jsx-runtime";var k=tt(({className:t,error:e,disabled:r,...a},i)=>rt("input",{ref:i,disabled:r,"aria-invalid":e,"aria-disabled":r,className:o("min-h-[var(--inkblot-size-touch-target-min)] w-full rounded-[var(--inkblot-radius-md)] border bg-[var(--inkblot-semantic-color-background-secondary)] px-4 py-2 text-[var(--inkblot-semantic-color-text-primary)] placeholder:text-[var(--inkblot-semantic-color-text-tertiary)] transition-[border-color,box-shadow] duration-[var(--inkblot-duration-fast)] ease-[var(--inkblot-easing-default)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--inkblot-semantic-color-border-focus)] focus-visible:ring-offset-2 disabled:opacity-[var(--inkblot-opacity-disabled)] disabled:pointer-events-none disabled:cursor-not-allowed",e?"border-[var(--inkblot-semantic-color-status-error)] focus-visible:ring-[var(--inkblot-semantic-color-status-error)]":"border-[var(--inkblot-semantic-color-border-default)] hover:border-[var(--inkblot-semantic-color-border-strong)]",t),...a}));k.displayName="Input";import{Component as et}from"react";import{jsx as R,jsxs as ot}from"react/jsx-runtime";var n=class extends et{constructor(e){super(e),this.state={hasError:!1,error:null}}static getDerivedStateFromError(e){return{hasError:!0,error:e}}render(){return this.state.hasError&&this.state.error?ot("div",{role:"alert",className:o("flex flex-col gap-4 rounded-[var(--inkblot-radius-lg)] border border-[var(--inkblot-semantic-color-border-default)] bg-[var(--inkblot-semantic-color-background-secondary)] p-4",this.props.className),children:[R("p",{className:"text-base font-semibold text-[var(--inkblot-semantic-color-text-primary)]",children:"This module failed to load"}),R("p",{className:"text-sm text-[var(--inkblot-semantic-color-text-tertiary)]",children:this.state.error.message}),R(g,{variant:"secondary",onClick:this.props.onRetry,className:"w-fit border-[var(--inkblot-semantic-color-status-error)]",children:"Retry"})]}):this.props.children}};import{jsx as p,jsxs as I}from"react/jsx-runtime";function D({title:t,insights:e,stats:r=[],commandValue:a="",onCommandChange:i,onCommandSubmit:s,className:m}){let B=l=>{l.key==="Enter"&&(l.preventDefault(),s?.())};return p(n,{className:m,children:I("div",{className:"flex flex-col gap-4 rounded-[var(--inkblot-radius-xl)] bg-[var(--inkblot-semantic-color-background-secondary)] p-4",children:[p("h2",{className:"text-xl font-semibold text-[var(--inkblot-semantic-color-text-primary)]",children:t}),e?p("div",{className:"rounded-[var(--inkblot-radius-md)] border border-[var(--inkblot-semantic-color-interactive-primary)] p-4",style:{boxShadow:"0 0 12px var(--inkblot-semantic-color-interactive-primary)"},children:e}):null,r.length>0?I("div",{children:[p("h3",{className:"mb-2 text-sm font-medium text-[var(--inkblot-semantic-color-text-secondary)]",children:"Connected To"}),p("div",{className:"grid grid-cols-2 gap-2 sm:grid-cols-3",children:r.map((l,J)=>I("div",{className:"rounded-[var(--inkblot-radius-md)] bg-[var(--inkblot-semantic-color-background-tertiary)] px-3 py-2",children:[p("span",{className:"text-xs text-[var(--inkblot-semantic-color-text-tertiary)]",children:l.label}),p("p",{className:"text-sm font-medium text-[var(--inkblot-semantic-color-text-primary)]",children:l.value})]},J))})]}):null,p("div",{className:"mt-2",children:p(k,{type:"text",value:a,onChange:l=>i?.(l.target.value),onKeyDown:B,placeholder:"Ask about this entity...",className:"rounded-[var(--inkblot-radius-md)]"})})]})})}import{Component as at}from"react";import{jsx as O}from"react/jsx-runtime";var S=class extends at{constructor(e){super(e),this.state={hasError:!1,error:null}}static getDerivedStateFromError(e){return{hasError:!0,error:e}}render(){return this.state.hasError&&this.state.error?this.props.fallback?this.props.fallback:O("div",{className:o("inline-flex items-center gap-3 rounded-[var(--inkblot-radius-md)] border border-[var(--inkblot-semantic-color-border-default)] bg-[var(--inkblot-semantic-color-background-tertiary)] px-4 py-3 text-[var(--inkblot-semantic-color-text-secondary)]",this.props.className),role:"alert",children:O("span",{className:"text-sm font-medium",children:"Something went wrong"})}):this.props.children}};import{jsx as it}from"react/jsx-runtime";var nt={success:"border-[var(--inkblot-semantic-color-status-success)] bg-[var(--inkblot-semantic-color-status-success)]/10 text-[var(--inkblot-semantic-color-status-success)]",warning:"border-[var(--inkblot-semantic-color-status-warning)] bg-[var(--inkblot-semantic-color-status-warning)]/10 text-[var(--inkblot-semantic-color-status-warning)]",error:"border-[var(--inkblot-semantic-color-status-error)] bg-[var(--inkblot-semantic-color-status-error)]/10 text-[var(--inkblot-semantic-color-status-error)]",info:"border-[var(--inkblot-semantic-color-status-info)] bg-[var(--inkblot-semantic-color-status-info)]/10 text-[var(--inkblot-semantic-color-status-info)]"};function w({label:t,variant:e="info",className:r}){return it("span",{className:o("inline-flex items-center rounded-[var(--inkblot-radius-md)] border px-2 py-0.5 text-xs font-medium",nt[e],r),children:t})}import{jsx as y,jsxs as lt}from"react/jsx-runtime";function st(t){return t>=.8?"success":t>=.5?"info":t>=.2?"warning":"error"}function A({event:t,className:e}){let r=st(t.confidence_score),a=`${Math.round(t.confidence_score*100)}%`;return lt("div",{className:o("flex flex-wrap items-center gap-2 rounded-[var(--inkblot-radius-lg)] border border-[var(--inkblot-semantic-color-border-default)] bg-[var(--inkblot-semantic-color-background-secondary)] p-4",e),children:[y("span",{className:"text-sm font-medium text-[var(--inkblot-semantic-color-text-primary)]",children:t.actor}),y("span",{className:"text-sm text-[var(--inkblot-semantic-color-text-tertiary)]",children:"\u2192"}),y("span",{className:"text-sm text-[var(--inkblot-semantic-color-text-secondary)]",children:t.subject}),y("span",{className:"rounded-[var(--inkblot-radius-md)] bg-[var(--inkblot-semantic-color-background-tertiary)] px-2 py-0.5 text-xs text-[var(--inkblot-semantic-color-text-secondary)]",children:t.event_type}),y("span",{className:"text-xs text-[var(--inkblot-semantic-color-text-tertiary)]",children:t.timestamp}),y(w,{label:a,variant:r})]})}import{jsx as u,jsxs as z}from"react/jsx-runtime";var ct={success:"bg-[var(--inkblot-semantic-color-status-success)]",warning:"bg-[var(--inkblot-semantic-color-status-warning)]",error:"bg-[var(--inkblot-semantic-color-status-error)]",info:"bg-[var(--inkblot-semantic-color-status-info)]"};function dt(){return u("svg",{viewBox:"0 0 16 16",className:"h-4 w-4 text-[var(--inkblot-semantic-color-text-tertiary)]","aria-hidden":!0,children:u("circle",{cx:"8",cy:"8",r:"2",fill:"currentColor"})})}function F({events:t,className:e}){return u(n,{className:e,children:u("div",{className:o("flex flex-col gap-4 border-l-2 border-[var(--inkblot-semantic-color-border-default)] pl-4"),children:t.map(r=>z("div",{className:"flex items-start gap-3",children:[u("div",{className:"flex shrink-0 items-center pt-0.5",children:r.icon??u(dt,{})}),z("div",{className:"min-w-0 flex-1",children:[u("p",{className:"text-sm font-medium text-[var(--inkblot-semantic-color-text-primary)]",children:r.title}),u("p",{className:"text-xs text-[var(--inkblot-semantic-color-text-tertiary)]",children:r.timestamp})]}),r.status?u("div",{className:o("mt-1.5 h-2 w-2 shrink-0 rounded-full",ct[r.status]),"aria-hidden":!0}):null]},r.id))})})}import{jsx as d,jsxs as N}from"react/jsx-runtime";var T=36,L=2*Math.PI*T;function K({label:t,value:e,subtext:r,trend:a,className:i}){let s=Math.min(100,Math.max(0,e)),m=L-s/100*L;return d(n,{className:i,children:N("div",{className:"flex flex-col items-center gap-4 rounded-[var(--inkblot-radius-lg)] bg-[var(--inkblot-semantic-color-background-secondary)] p-4",children:[N("div",{className:"relative",children:[N("svg",{width:"96",height:"96",viewBox:"0 0 96 96",className:"-rotate-90",children:[d("circle",{cx:"48",cy:"48",r:T,fill:"none",stroke:"var(--inkblot-semantic-color-background-tertiary)",strokeWidth:"4"}),d("circle",{cx:"48",cy:"48",r:T,fill:"none",stroke:"var(--inkblot-semantic-color-interactive-primary)",strokeWidth:"4",strokeDasharray:L,strokeDashoffset:m,strokeLinecap:"round",className:"transition-[stroke-dashoffset] duration-[var(--inkblot-duration-fast)]"})]}),d("div",{className:"absolute inset-0 flex flex-col items-center justify-center",children:N("span",{className:"flex items-center gap-1 text-lg font-semibold text-[var(--inkblot-semantic-color-text-primary)]",children:[s,"%",a==="up"?d("svg",{viewBox:"0 0 16 16",className:"h-4 w-4 text-[var(--inkblot-semantic-color-status-success)]","aria-hidden":!0,children:d("path",{fill:"currentColor",d:"M8 4l4 6H4l4-6z"})}):a==="down"?d("svg",{viewBox:"0 0 16 16",className:"h-4 w-4 text-[var(--inkblot-semantic-color-status-error)]","aria-hidden":!0,children:d("path",{fill:"currentColor",d:"M8 12l4-6H4l4 6z"})}):null]})})]}),N("div",{className:"text-center",children:[d("p",{className:"text-sm font-medium text-[var(--inkblot-semantic-color-text-primary)]",children:t}),r?d("p",{className:"text-xs text-[var(--inkblot-semantic-color-text-tertiary)]",children:r}):null]})]})})}import{jsx as b,jsxs as ut}from"react/jsx-runtime";var mt={default:"text-[var(--inkblot-semantic-color-text-primary)]",success:"text-[var(--inkblot-semantic-color-status-success)]",warning:"text-[var(--inkblot-semantic-color-status-warning)]",error:"text-[var(--inkblot-semantic-color-status-error)]"};function pt({className:t}){return b("svg",{viewBox:"0 0 16 16",className:o("h-4 w-4",t),"aria-hidden":!0,children:b("path",{fill:"currentColor",d:"M6 4l4 4-4 4V4z"})})}function W({items:t,className:e}){return b(n,{className:e,children:b("ul",{className:o("flex flex-col gap-4 py-2"),children:t.map((r,a)=>ut("li",{className:"flex items-center justify-between gap-4",children:[b("span",{className:"text-sm text-[var(--inkblot-semantic-color-text-secondary)]",children:r.label}),b("span",{className:o("flex items-center gap-1 text-sm font-medium",mt[r.variant??"default"]),children:r.value!=null?r.value:b(pt,{})})]},a))})})}import{jsx as vt}from"react/jsx-runtime";function v({className:t,...e}){return vt("div",{className:o("animate-shimmer rounded-[var(--inkblot-radius-md)] bg-[length:200%_100%] bg-[linear-gradient(90deg,var(--inkblot-semantic-color-background-secondary)_0%,var(--inkblot-semantic-color-background-tertiary)_50%,var(--inkblot-semantic-color-background-secondary)_100%)]",t),...e})}import{jsx as h,jsxs as bt}from"react/jsx-runtime";function M({className:t,...e}){return bt("div",{className:o("flex flex-col gap-2 rounded-[var(--inkblot-radius-lg)] border border-[var(--inkblot-semantic-color-border-default)] bg-[var(--inkblot-semantic-color-background-secondary)] p-4",t),...e,children:[h(v,{className:"h-5 w-3/4"}),h(v,{className:"h-4 w-full"}),h(v,{className:"h-4 w-5/6"}),h(v,{className:"h-4 w-4/5"}),h(v,{className:"h-4 w-3/4"})]})}import{jsx as P,jsxs as $}from"react/jsx-runtime";function q({children:t,loading:e=!1,title:r,className:a,onRetry:i}){return P(n,{className:a,onRetry:i,children:e?$("div",{className:o("flex flex-col gap-4",a),children:[r?P("h2",{className:"text-lg font-semibold text-[var(--inkblot-semantic-color-text-primary)]",children:r}):null,P(M,{})]}):$("div",{className:o("flex flex-col gap-4",a),children:[r?P("h2",{className:"text-lg font-semibold text-[var(--inkblot-semantic-color-text-primary)]",children:r}):null,t]})})}import{jsx as E,jsxs as ft}from"react/jsx-runtime";function G({items:t,className:e}){return E(n,{className:e,children:E("nav",{className:o("flex w-14 flex-col items-center gap-1 border-r border-[var(--inkblot-semantic-color-border-default)] bg-[var(--inkblot-semantic-color-background-secondary)] py-4"),"aria-label":"Navigation",children:t.map(r=>ft("div",{className:o("relative flex w-full flex-col items-center gap-1 rounded-[var(--inkblot-radius-md)] px-2 py-2 transition-colors hover:text-[var(--inkblot-semantic-color-text-secondary)]",r.active?"text-[var(--inkblot-semantic-color-interactive-primary)]":"text-[var(--inkblot-semantic-color-text-tertiary)]"),children:[r.active?E("span",{className:"absolute left-0 top-1/2 h-6 w-0.5 -translate-y-1/2 rounded-r-full bg-[var(--inkblot-semantic-color-interactive-primary)]","aria-hidden":!0}):null,E("div",{className:"flex h-8 w-8 items-center justify-center [&>svg]:h-5 [&>svg]:w-5",children:r.icon}),r.label?E("span",{className:"text-[10px] font-medium",children:r.label}):null]},r.id))})})}export{g as Button,_ as CommandInterface,H as EntityCard,D as EntityCommandCard,S as ErrorBoundary,A as EventRow,F as EventStreamFeed,k as Input,K as IntelligenceScoreCard,W as MetricComparisonList,q as ModuleContainer,n as ModuleErrorBoundary,M as ModuleSkeleton,G as OSNavigationRail,v as Skeleton,w as StatusBadge};
|
|
1
|
+
import{forwardRef as Te}from"react";import{clsx as Le}from"clsx";import{twMerge as Ae}from"tailwind-merge";function o(...t){return Ae(Le(t))}import{jsx as De}from"react/jsx-runtime";var _e={primary:"bg-[var(--inkblot-semantic-color-interactive-primary)] text-[var(--inkblot-semantic-color-text-primary)] hover:bg-[var(--inkblot-semantic-color-interactive-primary-hover)] active:bg-[var(--inkblot-semantic-color-interactive-primary-active)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--inkblot-semantic-color-border-focus)] focus-visible:outline-offset-2 disabled:opacity-[var(--inkblot-opacity-disabled)] disabled:pointer-events-none disabled:cursor-not-allowed",secondary:"bg-[var(--inkblot-semantic-color-interactive-secondary)] text-[var(--inkblot-semantic-color-text-primary)] border border-[var(--inkblot-semantic-color-border-default)] hover:bg-[var(--inkblot-semantic-color-interactive-secondary-hover)] hover:border-[var(--inkblot-semantic-color-border-strong)] active:bg-[var(--inkblot-semantic-color-interactive-secondary-hover)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--inkblot-semantic-color-border-focus)] focus-visible:outline-offset-2 disabled:opacity-[var(--inkblot-opacity-disabled)] disabled:pointer-events-none disabled:cursor-not-allowed"},T=Te(({className:t,variant:e="primary",disabled:r,...n},i)=>De("button",{ref:i,disabled:r,className:o("inline-flex min-h-[var(--inkblot-size-touch-target-min)] items-center justify-center rounded-[var(--inkblot-radius-lg)] px-4 py-2 font-semibold transition-[background,border-color] duration-[var(--inkblot-duration-fast)] ease-[var(--inkblot-easing-default)]",_e[e],t),...n}));T.displayName="Button";import{useRef as Ve}from"react";import{Paperclip as He}from"lucide-react";import{jsx as y,jsxs as pe}from"react/jsx-runtime";function M({promptValue:t="",onPromptChange:e,onPromptSubmit:r,onFilesAttach:n,isProcessing:i=!1,response:s,placeholder:a="Ask Citron Intelligence...",accept:p,multiple:d=!0,className:x}){let h=Ve(null),v=b=>{b.key==="Enter"&&!b.shiftKey&&(b.preventDefault(),r?.())},F=()=>{h.current?.click()},te=b=>{let E=b.target.files;E&&E.length>0&&n&&n(Array.from(E)),b.target.value=""};return pe("div",{className:o("flex w-full max-w-2xl flex-col gap-8",x),children:[y("div",{className:"flex flex-col gap-4",children:y("div",{className:"flex flex-1 flex-col gap-4",children:pe("div",{className:"flex items-start gap-2",children:[y("input",{ref:h,type:"file",accept:p,multiple:d,onChange:te,className:"sr-only","aria-hidden":!0}),y("button",{type:"button",onClick:F,disabled:i,className:o("flex h-9 w-9 shrink-0 items-center justify-center rounded-lg text-[var(--inkblot-semantic-color-text-tertiary)] transition-colors duration-[var(--inkblot-duration-fast)]","hover:bg-[var(--inkblot-semantic-color-background-secondary)] hover:text-[var(--inkblot-semantic-color-text-secondary)]","focus:outline-none focus:ring-2 focus:ring-[var(--inkblot-semantic-color-border-focus)] focus:ring-offset-2 focus:ring-offset-[var(--inkblot-semantic-color-background-primary)]","disabled:pointer-events-none disabled:opacity-50"),"aria-label":"Adjuntar archivos",children:y(He,{size:20,strokeWidth:1.5,className:"text-[var(--inkblot-semantic-color-text-tertiary)]","aria-hidden":!0})}),y("textarea",{value:t,onChange:b=>e?.(b.target.value),onKeyDown:v,placeholder:a,rows:3,disabled:i,className:o("min-w-0 flex-1 resize-none rounded-[var(--inkblot-radius-xl)] bg-[var(--inkblot-semantic-color-background-primary)] p-4 text-[var(--inkblot-semantic-color-text-primary)] placeholder:text-[var(--inkblot-semantic-color-text-tertiary)] transition-shadow duration-[var(--inkblot-duration-fast)]","focus:outline-none focus:ring-2 focus:ring-[var(--inkblot-semantic-color-border-focus)] focus:ring-offset-2 focus:ring-offset-[var(--inkblot-semantic-color-background-primary)]","shadow-[0_1px_3px_0_rgba(0,0,0,0.08),0_1px_2px_-1px_rgba(0,0,0,0.08)]","disabled:cursor-not-allowed disabled:opacity-70")})]})})}),i?y("div",{className:o("min-h-[80px] animate-shimmer rounded-[var(--inkblot-radius-xl)] bg-[length:200%_100%] bg-[linear-gradient(90deg,var(--inkblot-semantic-color-background-secondary)_0%,var(--inkblot-semantic-color-background-tertiary)_50%,var(--inkblot-semantic-color-background-secondary)_100%)]")}):s?y("div",{className:"flex flex-col gap-4",children:y("div",{className:"min-w-0 text-[var(--inkblot-semantic-color-text-primary)]",children:s})}):null]})}import{jsx as I,jsxs as R}from"react/jsx-runtime";var Oe={Person:"border-l-[var(--inkblot-semantic-color-status-info)] bg-[var(--inkblot-semantic-color-background-secondary)]",Organization:"border-l-[var(--inkblot-semantic-color-status-warning)] bg-[var(--inkblot-semantic-color-background-secondary)]",Deal:"border-l-[var(--inkblot-semantic-color-status-success)] bg-[var(--inkblot-semantic-color-background-secondary)]"};function z({name:t,entityType:e,metadata:r,edges:n=[],className:i}){return R("article",{className:o("flex flex-col gap-4 rounded-[var(--inkblot-radius-lg)] border border-[var(--inkblot-semantic-color-border-default)] border-l-4 p-4",Oe[e],i),children:[R("div",{className:"flex flex-col gap-1",children:[I("span",{className:"text-xs font-medium uppercase tracking-wide text-[var(--inkblot-semantic-color-text-tertiary)]",children:e}),I("h3",{className:"text-base font-semibold text-[var(--inkblot-semantic-color-text-primary)]",children:t})]}),r&&Object.keys(r).length>0?I("dl",{className:"flex flex-col gap-1",children:Object.entries(r).map(([s,a])=>R("div",{className:"flex gap-2",children:[R("dt",{className:"text-sm text-[var(--inkblot-semantic-color-text-tertiary)]",children:[s,":"]}),I("dd",{className:"text-sm text-[var(--inkblot-semantic-color-text-secondary)]",children:a})]},s))}):null,n.length>0?R("div",{className:"flex flex-col gap-2",children:[I("h4",{className:"text-sm font-medium text-[var(--inkblot-semantic-color-text-secondary)]",children:"Edges"}),I("ul",{className:"flex flex-wrap gap-2",children:n.map((s,a)=>R("li",{className:"rounded-[var(--inkblot-radius-md)] border border-[var(--inkblot-semantic-color-border-default)] bg-[var(--inkblot-semantic-color-background-tertiary)] px-2 py-1 text-xs text-[var(--inkblot-semantic-color-text-secondary)]",children:[s.type,s.target?` \u2192 ${s.target}`:""]},a))})]}):null]})}import{forwardRef as Ge}from"react";import{jsx as Fe}from"react/jsx-runtime";var _=Ge(({className:t,error:e,disabled:r,...n},i)=>Fe("input",{ref:i,disabled:r,"aria-invalid":e,"aria-disabled":r,className:o("min-h-[var(--inkblot-size-touch-target-min)] w-full rounded-[var(--inkblot-radius-md)] border bg-[var(--inkblot-semantic-color-background-secondary)] px-4 py-2 text-[var(--inkblot-semantic-color-text-primary)] placeholder:text-[var(--inkblot-semantic-color-text-tertiary)] transition-[border-color,box-shadow] duration-[var(--inkblot-duration-fast)] ease-[var(--inkblot-easing-default)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--inkblot-semantic-color-border-focus)] focus-visible:ring-offset-2 disabled:opacity-[var(--inkblot-opacity-disabled)] disabled:pointer-events-none disabled:cursor-not-allowed",e?"border-[var(--inkblot-semantic-color-status-error)] focus-visible:ring-[var(--inkblot-semantic-color-status-error)]":"border-[var(--inkblot-semantic-color-border-default)] hover:border-[var(--inkblot-semantic-color-border-strong)]",t),...n}));_.displayName="Input";import{Component as Ke}from"react";import{jsx as oe,jsxs as $e}from"react/jsx-runtime";var l=class extends Ke{constructor(e){super(e),this.state={hasError:!1,error:null}}static getDerivedStateFromError(e){return{hasError:!0,error:e}}render(){return this.state.hasError&&this.state.error?$e("div",{role:"alert",className:o("flex flex-col gap-4 rounded-[var(--inkblot-radius-lg)] border border-[var(--inkblot-semantic-color-border-default)] bg-[var(--inkblot-semantic-color-background-secondary)] p-4",this.props.className),children:[oe("p",{className:"text-base font-semibold text-[var(--inkblot-semantic-color-text-primary)]",children:"This module failed to load"}),oe("p",{className:"text-sm text-[var(--inkblot-semantic-color-text-tertiary)]",children:this.state.error.message}),oe(T,{variant:"secondary",onClick:this.props.onRetry,className:"w-fit border-[var(--inkblot-semantic-color-status-error)]",children:"Retry"})]}):this.props.children}};import{jsx as k,jsxs as ae}from"react/jsx-runtime";function ue({title:t,insights:e,stats:r=[],commandValue:n="",onCommandChange:i,onCommandSubmit:s,className:a}){let p=d=>{d.key==="Enter"&&(d.preventDefault(),s?.())};return k(l,{className:a,children:ae("div",{className:"flex flex-col gap-4 rounded-[var(--inkblot-radius-xl)] bg-[var(--inkblot-semantic-color-background-secondary)] p-4",children:[k("h2",{className:"text-xl font-semibold text-[var(--inkblot-semantic-color-text-primary)]",children:t}),e?k("div",{className:"rounded-[var(--inkblot-radius-md)] border border-[var(--inkblot-semantic-color-interactive-primary)] p-4",style:{boxShadow:"0 0 12px var(--inkblot-semantic-color-interactive-primary)"},children:e}):null,r.length>0?ae("div",{children:[k("h3",{className:"mb-2 text-sm font-medium text-[var(--inkblot-semantic-color-text-secondary)]",children:"Connected To"}),k("div",{className:"grid grid-cols-2 gap-2 sm:grid-cols-3",children:r.map((d,x)=>ae("div",{className:"rounded-[var(--inkblot-radius-md)] bg-[var(--inkblot-semantic-color-background-tertiary)] px-3 py-2",children:[k("span",{className:"text-xs text-[var(--inkblot-semantic-color-text-tertiary)]",children:d.label}),k("p",{className:"text-sm font-medium text-[var(--inkblot-semantic-color-text-primary)]",children:d.value})]},x))})]}):null,k("div",{className:"mt-2",children:k(_,{type:"text",value:n,onChange:d=>i?.(d.target.value),onKeyDown:p,placeholder:"Ask about this entity...",className:"rounded-[var(--inkblot-radius-md)]"})})]})})}import{Component as ze}from"react";import{jsx as ve}from"react/jsx-runtime";var U=class extends ze{constructor(e){super(e),this.state={hasError:!1,error:null}}static getDerivedStateFromError(e){return{hasError:!0,error:e}}render(){return this.state.hasError&&this.state.error?this.props.fallback?this.props.fallback:ve("div",{className:o("inline-flex items-center gap-3 rounded-[var(--inkblot-radius-md)] border border-[var(--inkblot-semantic-color-border-default)] bg-[var(--inkblot-semantic-color-background-tertiary)] px-4 py-3 text-[var(--inkblot-semantic-color-text-secondary)]",this.props.className),role:"alert",children:ve("span",{className:"text-sm font-medium",children:"Something went wrong"})}):this.props.children}};import{jsx as We}from"react/jsx-runtime";var Ue={success:"border-[var(--inkblot-semantic-color-status-success)] bg-[var(--inkblot-semantic-color-status-success)]/10 text-[var(--inkblot-semantic-color-status-success)]",warning:"border-[var(--inkblot-semantic-color-status-warning)] bg-[var(--inkblot-semantic-color-status-warning)]/10 text-[var(--inkblot-semantic-color-status-warning)]",error:"border-[var(--inkblot-semantic-color-status-error)] bg-[var(--inkblot-semantic-color-status-error)]/10 text-[var(--inkblot-semantic-color-status-error)]",info:"border-[var(--inkblot-semantic-color-status-info)] bg-[var(--inkblot-semantic-color-status-info)]/10 text-[var(--inkblot-semantic-color-status-info)]"};function W({label:t,variant:e="info",className:r}){return We("span",{className:o("inline-flex items-center rounded-[var(--inkblot-radius-md)] border px-2 py-0.5 text-xs font-medium",Ue[e],r),children:t})}import{jsx as B,jsxs as qe}from"react/jsx-runtime";function Ze(t){return t>=.8?"success":t>=.5?"info":t>=.2?"warning":"error"}function Z({event:t,className:e}){let r=Ze(t.confidence_score),n=`${Math.round(t.confidence_score*100)}%`;return qe("div",{className:o("flex flex-wrap items-center gap-2 rounded-[var(--inkblot-radius-lg)] border border-[var(--inkblot-semantic-color-border-default)] bg-[var(--inkblot-semantic-color-background-secondary)] p-4",e),children:[B("span",{className:"text-sm font-medium text-[var(--inkblot-semantic-color-text-primary)]",children:t.actor}),B("span",{className:"text-sm text-[var(--inkblot-semantic-color-text-tertiary)]",children:"\u2192"}),B("span",{className:"text-sm text-[var(--inkblot-semantic-color-text-secondary)]",children:t.subject}),B("span",{className:"rounded-[var(--inkblot-radius-md)] bg-[var(--inkblot-semantic-color-background-tertiary)] px-2 py-0.5 text-xs text-[var(--inkblot-semantic-color-text-secondary)]",children:t.event_type}),B("span",{className:"text-xs text-[var(--inkblot-semantic-color-text-tertiary)]",children:t.timestamp}),B(W,{label:n,variant:r})]})}import{jsx as N,jsxs as be}from"react/jsx-runtime";var Je={success:"bg-[var(--inkblot-semantic-color-status-success)]",warning:"bg-[var(--inkblot-semantic-color-status-warning)]",error:"bg-[var(--inkblot-semantic-color-status-error)]",info:"bg-[var(--inkblot-semantic-color-status-info)]"};function Qe(){return N("svg",{viewBox:"0 0 16 16",className:"h-4 w-4 text-[var(--inkblot-semantic-color-text-tertiary)]","aria-hidden":!0,children:N("circle",{cx:"8",cy:"8",r:"2",fill:"currentColor"})})}function fe({events:t,className:e}){return N(l,{className:e,children:N("div",{className:o("flex flex-col gap-4 border-l-2 border-[var(--inkblot-semantic-color-border-default)] pl-4"),children:t.map(r=>be("div",{className:"flex items-start gap-3",children:[N("div",{className:"flex shrink-0 items-center pt-0.5",children:r.icon??N(Qe,{})}),be("div",{className:"min-w-0 flex-1",children:[N("p",{className:"text-sm font-medium text-[var(--inkblot-semantic-color-text-primary)]",children:r.title}),N("p",{className:"text-xs text-[var(--inkblot-semantic-color-text-tertiary)]",children:r.timestamp})]}),r.status?N("div",{className:o("mt-1.5 h-2 w-2 shrink-0 rounded-full",Je[r.status]),"aria-hidden":!0}):null]},r.id))})})}import{jsx as g,jsxs as D}from"react/jsx-runtime";var ie=36,ne=2*Math.PI*ie;function q({label:t,value:e,subtext:r,trend:n,className:i}){let s=Math.min(100,Math.max(0,e)),a=ne-s/100*ne;return g(l,{className:i,children:D("div",{className:"flex flex-col items-center gap-4 rounded-[var(--inkblot-radius-lg)] bg-[var(--inkblot-semantic-color-background-secondary)] p-4",children:[D("div",{className:"relative",children:[D("svg",{width:"96",height:"96",viewBox:"0 0 96 96",className:"-rotate-90",children:[g("circle",{cx:"48",cy:"48",r:ie,fill:"none",stroke:"var(--inkblot-semantic-color-background-tertiary)",strokeWidth:"4"}),g("circle",{cx:"48",cy:"48",r:ie,fill:"none",stroke:"var(--inkblot-semantic-color-interactive-primary)",strokeWidth:"4",strokeDasharray:ne,strokeDashoffset:a,strokeLinecap:"round",className:"transition-[stroke-dashoffset] duration-[var(--inkblot-duration-fast)]"})]}),g("div",{className:"absolute inset-0 flex flex-col items-center justify-center",children:D("span",{className:"flex items-center gap-1 text-lg font-semibold text-[var(--inkblot-semantic-color-text-primary)]",children:[s,"%",n==="up"?g("svg",{viewBox:"0 0 16 16",className:"h-4 w-4 text-[var(--inkblot-semantic-color-status-success)]","aria-hidden":!0,children:g("path",{fill:"currentColor",d:"M8 4l4 6H4l4-6z"})}):n==="down"?g("svg",{viewBox:"0 0 16 16",className:"h-4 w-4 text-[var(--inkblot-semantic-color-status-error)]","aria-hidden":!0,children:g("path",{fill:"currentColor",d:"M8 12l4-6H4l4 6z"})}):null]})})]}),D("div",{className:"text-center",children:[g("p",{className:"text-sm font-medium text-[var(--inkblot-semantic-color-text-primary)]",children:t}),r?g("p",{className:"text-xs text-[var(--inkblot-semantic-color-text-tertiary)]",children:r}):null]})]})})}import{jsx as S,jsxs as je}from"react/jsx-runtime";var Xe={default:"text-[var(--inkblot-semantic-color-text-primary)]",success:"text-[var(--inkblot-semantic-color-status-success)]",warning:"text-[var(--inkblot-semantic-color-status-warning)]",error:"text-[var(--inkblot-semantic-color-status-error)]"};function Ye({className:t}){return S("svg",{viewBox:"0 0 16 16",className:o("h-4 w-4",t),"aria-hidden":!0,children:S("path",{fill:"currentColor",d:"M6 4l4 4-4 4V4z"})})}function ge({items:t,className:e}){return S(l,{className:e,children:S("ul",{className:o("flex flex-col gap-4 py-2"),children:t.map((r,n)=>je("li",{className:"flex items-center justify-between gap-4",children:[S("span",{className:"text-sm text-[var(--inkblot-semantic-color-text-secondary)]",children:r.label}),S("span",{className:o("flex items-center gap-1 text-sm font-medium",Xe[r.variant??"default"]),children:r.value!=null?r.value:S(Ye,{})})]},n))})})}import{jsx as et}from"react/jsx-runtime";function C({className:t,...e}){return et("div",{className:o("animate-shimmer rounded-[var(--inkblot-radius-md)] bg-[length:200%_100%] bg-[linear-gradient(90deg,var(--inkblot-semantic-color-background-secondary)_0%,var(--inkblot-semantic-color-background-tertiary)_50%,var(--inkblot-semantic-color-background-secondary)_100%)]",t),...e})}import{jsx as V,jsxs as tt}from"react/jsx-runtime";function L({className:t,...e}){return tt("div",{className:o("flex flex-col gap-2 rounded-[var(--inkblot-radius-lg)] border border-[var(--inkblot-semantic-color-border-default)] bg-[var(--inkblot-semantic-color-background-secondary)] p-4",t),...e,children:[V(C,{className:"h-5 w-3/4"}),V(C,{className:"h-4 w-full"}),V(C,{className:"h-4 w-5/6"}),V(C,{className:"h-4 w-4/5"}),V(C,{className:"h-4 w-3/4"})]})}import{jsx as J,jsxs as xe}from"react/jsx-runtime";function Q({children:t,loading:e=!1,title:r,className:n,onRetry:i}){return J(l,{className:n,onRetry:i,children:e?xe("div",{className:o("flex flex-col gap-4",n),children:[r?J("h2",{className:"text-lg font-semibold text-[var(--inkblot-semantic-color-text-primary)]",children:r}):null,J(L,{})]}):xe("div",{className:o("flex flex-col gap-4",n),children:[r?J("h2",{className:"text-lg font-semibold text-[var(--inkblot-semantic-color-text-primary)]",children:r}):null,t]})})}import{jsx as H,jsxs as rt}from"react/jsx-runtime";function ye({items:t,className:e}){return H(l,{className:e,children:H("nav",{className:o("flex w-14 flex-col items-center gap-1 border-r border-[var(--inkblot-semantic-color-border-default)] bg-[var(--inkblot-semantic-color-background-secondary)] py-4"),"aria-label":"Navigation",children:t.map(r=>rt("div",{className:o("relative flex w-full flex-col items-center gap-1 rounded-[var(--inkblot-radius-md)] px-2 py-2 transition-colors hover:text-[var(--inkblot-semantic-color-text-secondary)]",r.active?"text-[var(--inkblot-semantic-color-interactive-primary)]":"text-[var(--inkblot-semantic-color-text-tertiary)]"),children:[r.active?H("span",{className:"absolute left-0 top-1/2 h-6 w-0.5 -translate-y-1/2 rounded-r-full bg-[var(--inkblot-semantic-color-interactive-primary)]","aria-hidden":!0}):null,H("div",{className:"flex h-8 w-8 items-center justify-center [&>svg]:h-5 [&>svg]:w-5",children:r.icon}),r.label?H("span",{className:"text-[10px] font-medium",children:r.label}):null]},r.id))})})}import{Mail as ke,FileText as X,Zap as ot,Phone as Ne,Link2 as at}from"lucide-react";import{jsx as u,jsxs as he}from"react/jsx-runtime";function nt(t){return t>=.8?"bg-[var(--inkblot-semantic-color-status-success)]":t>=.5?"bg-[var(--inkblot-semantic-color-status-info)]":t>=.2?"bg-[var(--inkblot-semantic-color-status-warning)]":"bg-[var(--inkblot-semantic-color-status-error)]"}var it={EMAIL_OPENED:ke,EMAIL_SENT:ke,INVOICE_PAID:X,INVOICE_OVERDUE:X,CONTRACT_SIGNED:X,STAGE_CHANGED:ot,CALL_COMPLETED:Ne,PHONE_CALL:Ne,RELATIONSHIP_DETECTED:at};function st(t){return it[t]??X}function lt(t){return t.metadata?.description??t.event_type.replace(/_/g," ").toLowerCase()}function ct(t){return t.metadata?.details??`${t.actor} - ${t.subject}`}function Y({events:t,onEntitySelect:e,findEntity:r,emptyMessage:n="No hay actividad reciente",className:i}){let s=e?a=>{let p=r?.(a.subject)??r?.(a.actor);p&&e(p)}:void 0;return u(l,{children:u("div",{className:o("space-y-2",i),children:t.length===0?u("p",{className:"py-6 text-center text-sm text-[var(--inkblot-semantic-color-text-tertiary)]",children:n}):t.map(a=>{let d=!!(r?.(a.subject)??r?.(a.actor))&&!!s,x=st(a.event_type),h=he("div",{className:"flex flex-1 items-center gap-3",children:[u(x,{className:"h-4 w-4 shrink-0 text-[var(--inkblot-semantic-color-text-secondary)]","aria-hidden":!0}),u("div",{className:`h-2 w-2 shrink-0 rounded-full ${nt(a.confidence_score)}`,"aria-hidden":!0}),he("div",{className:"min-w-0 flex-1",children:[u("p",{className:"text-sm font-medium text-[var(--inkblot-semantic-color-text-primary)]",children:lt(a)}),u("p",{className:"text-xs text-[var(--inkblot-semantic-color-text-secondary)]",children:ct(a)})]}),u("span",{className:"shrink-0 text-xs text-[var(--inkblot-semantic-color-text-tertiary)]",children:a.timestamp})]}),v=a.id??`${a.actor}-${a.subject}-${a.timestamp}`;return u("div",{children:d?u("button",{type:"button",onClick:()=>s(a),className:"flex w-full items-center gap-3 rounded-[var(--inkblot-radius-md)] bg-[var(--inkblot-semantic-color-background-secondary)] p-3 text-left transition-colors duration-[var(--inkblot-duration-fast)] hover:bg-[var(--inkblot-semantic-color-background-tertiary)] focus:outline-none focus:ring-2 focus:ring-[var(--inkblot-semantic-color-border-focus)] focus:ring-offset-2 focus:ring-offset-[var(--inkblot-semantic-color-background-primary)]",children:h}):u("div",{className:"flex w-full items-center gap-3 rounded-[var(--inkblot-radius-md)] bg-[var(--inkblot-semantic-color-background-secondary)] p-3",children:h})},v)})})})}import{NavLink as dt}from"react-router-dom";import{ClipboardList as mt,Brain as pt,BarChart3 as ut,Network as vt,Activity as bt,Settings as ft,Sparkles as gt}from"lucide-react";import{jsx as w,jsxs as yt}from"react/jsx-runtime";var xt=[{id:"home",path:"/",icon:mt,label:"Home"},{id:"intelligence",path:"/intelligence",icon:pt,label:"Intelligence"},{id:"pipeline",path:"/pipeline",icon:ut,label:"Pipeline"},{id:"graph",path:"/graph",icon:vt,label:"Graph"},{id:"events",path:"/events",icon:bt,label:"Events"},{id:"settings",path:"/settings",icon:ft,label:"Settings"}];function Ee({items:t=xt,brandLogo:e,brandTitle:r="Command Canvas \u2014 AI-native Interface",className:n}){return w(l,{children:yt("nav",{className:o("flex h-full flex-col gap-4 bg-[var(--inkblot-semantic-color-background-secondary)] p-3",n),children:[w("div",{className:"flex flex-col items-center gap-2",children:w("div",{className:"flex h-10 w-10 shrink-0 items-center justify-center rounded-[var(--inkblot-radius-md)] bg-[var(--inkblot-semantic-color-interactive-primary)]",title:r,children:e??w(gt,{className:"h-5 w-5 text-[var(--inkblot-semantic-color-text-primary)]","aria-hidden":!0})})}),w("div",{className:"flex flex-1 flex-col gap-2",children:t.map(i=>{let s=i.icon;return w(dt,{to:i.path,end:i.path==="/","aria-label":i.label,className:({isActive:a})=>`flex items-center justify-center gap-2 rounded-[var(--inkblot-radius-md)] border-l-2 px-3 py-2 transition-colors duration-[var(--inkblot-duration-fast)] ${a?"border-[var(--inkblot-semantic-color-interactive-primary)] bg-[var(--inkblot-semantic-color-interactive-primary)] text-[var(--inkblot-semantic-color-text-primary)]":"border-transparent text-[var(--inkblot-semantic-color-text-secondary)] hover:bg-[var(--inkblot-semantic-color-interactive-secondary-hover)]"}`,children:w(s,{size:20,"aria-hidden":!0})},i.id)})})]})})}import{useState as j,useCallback as kt,useRef as Nt,useEffect as ht}from"react";import{jsx as c,jsxs as ee}from"react/jsx-runtime";function Et(t){let e=t.toLowerCase();return e.includes("entity")||e.includes("company")||e.includes("person")||e.includes("deal")||e.includes("profile")||e.includes("org")?"entity":e.includes("event")||e.includes("activity")||e.includes("recent")||e.includes("stream")||e.includes("log")?"event":"general"}function Ct({entities:t}){let e=t[0];return e?ee("div",{className:"space-y-3",children:[c("p",{className:"text-sm text-[var(--inkblot-semantic-color-text-secondary)]",children:"Here's the entity profile and current intelligence scores:"}),c(z,{name:e.name,entityType:e.type,metadata:e.metadata,edges:[{type:"WORKS_WITH",target:t[1]?.name},{type:"MANAGES",target:t[4]?.name}]})]}):null}function St({events:t}){return ee("div",{className:"space-y-2",children:[c("p",{className:"text-sm text-[var(--inkblot-semantic-color-text-secondary)]",children:"Latest activity from the event bus:"}),t.slice(0,5).map(e=>c(Z,{event:e},e.id??`${e.actor}-${e.subject}-${e.timestamp}`))]})}function wt(){return c("p",{className:"text-sm text-[var(--inkblot-semantic-color-text-primary)]",children:"Revenue confidence is trending upward at 78%. Momentum score increased 12% this week driven by 3 new meetings with Acme Corp. Churn risk remains low at 15% across the active pipeline."})}function Ce({entities:t,events:e,onFocusEntity:r,findEntity:n,placeholder:i="Ask anything \u2014 deals, contacts, forecasts...",emptyMessage:s="Escribe para comenzar...",className:a}){let[p,d]=j(""),[x,h]=j([]),[v,F]=j(!1),[te,b]=j(new Map),E=Nt(null);ht(()=>{E.current&&(E.current.scrollTop=E.current.scrollHeight)},[x,v]);let Re=kt(()=>{let f=p.trim();if(!f||v)return;let ce=n?.(f);ce&&r&&r(ce);let Be={id:`msg-${Date.now()}`,role:"user",content:f,timestamp:new Date().toISOString()},de=Et(f);h(K=>[...K,Be]),d(""),F(!0),setTimeout(()=>{let K={id:`msg-${Date.now()}-res`,role:"assistant",content:"",intent:de,timestamp:new Date().toISOString()},$;switch(de){case"entity":$=c(Ct,{entities:t});break;case"event":$=c(St,{events:e});break;default:$=c(wt,{})}b(re=>{let me=new Map(re);return me.set(K.id,$),me}),h(re=>[...re,K]),F(!1)},1e3)},[p,v,t,e,r,n]);return ee("div",{className:o("flex h-full flex-col",a),children:[ee("div",{ref:E,className:"flex-1 space-y-4 overflow-y-auto p-4",children:[x.length===0&&!v?c("div",{className:"flex flex-1 items-center justify-center py-12",children:c("p",{className:"text-sm text-[var(--inkblot-semantic-color-text-tertiary)]",children:s})}):x.map(f=>c("div",{className:"flex flex-col gap-2",children:f.role==="user"?c("div",{className:"flex justify-end",children:c("div",{className:"max-w-[80%] rounded-[var(--inkblot-radius-lg)] bg-[var(--inkblot-semantic-color-interactive-primary)] px-4 py-3 text-sm text-[var(--inkblot-semantic-color-text-primary)]",children:f.content})}):c("div",{className:"max-w-[90%]",children:te.get(f.id)??c("p",{className:"text-sm text-[var(--inkblot-semantic-color-text-primary)]",children:f.content})})},f.id)),v&&c("div",{className:"max-w-[70%]",children:c(L,{className:"animate-shimmer"})})]}),c("div",{className:"shrink-0 border-t border-[var(--inkblot-semantic-color-border-default)] bg-[var(--inkblot-semantic-color-background-primary)] p-4",children:c(M,{promptValue:p,onPromptChange:d,onPromptSubmit:Re,isProcessing:v,placeholder:i})})]})}import{Sparkles as Pt}from"lucide-react";import{jsx as O,jsxs as Se}from"react/jsx-runtime";function we({prompt:t,onPromptChange:e,onSubmit:r,isProcessing:n,placeholder:i="Ask anything \u2014 deals, contacts, forecasts...",subtitle:s="Citron OS v1.0 \u2014 AI-native Revenue & Operations Platform",className:a}){return Se("div",{className:o("border-t border-[var(--inkblot-semantic-color-border-default)] bg-[var(--inkblot-semantic-color-background-secondary)] p-4",a),children:[Se("div",{className:"flex items-center gap-3",children:[O("div",{className:"flex h-10 w-10 shrink-0 items-center justify-center rounded-[var(--inkblot-radius-md)] bg-[var(--inkblot-semantic-color-interactive-primary)]",children:O(Pt,{className:"h-5 w-5 text-[var(--inkblot-semantic-color-text-primary)]","aria-hidden":!0})}),O("div",{className:"flex-1",children:O(M,{promptValue:t,onPromptChange:e,onPromptSubmit:r,isProcessing:n,placeholder:i})})]}),s&&O("p",{className:"mt-2 text-xs text-[var(--inkblot-semantic-color-text-tertiary)]",children:s})]})}import{jsx as A,jsxs as se}from"react/jsx-runtime";function Pe({events:t,title:e="Event Stream",showLive:r=!0,className:n}){return A(l,{children:se("div",{className:o("flex h-full flex-col bg-[var(--inkblot-semantic-color-background-secondary)]",n),children:[se("div",{className:"flex shrink-0 items-center justify-between border-b border-[var(--inkblot-semantic-color-border-default)] px-4 py-3",children:[A("span",{className:"text-xs font-medium uppercase tracking-wider text-[var(--inkblot-semantic-color-text-secondary)]",children:e}),r&&se("div",{className:"flex items-center gap-2",children:[A("div",{className:"h-2 w-2 rounded-full bg-[var(--inkblot-semantic-color-status-success)]"}),A("span",{className:"text-xs text-[var(--inkblot-semantic-color-status-success)]",children:"Live"})]})]}),A("div",{className:"flex-1 overflow-auto p-4",children:A(Y,{events:t})})]})})}import{jsx as m,jsxs as P}from"react/jsx-runtime";var Mt=[{label:"Pipeline Health",value:76},{label:"Churn Risk",value:28},{label:"Expansion Signal",value:64},{label:"Team Velocity",value:83}],It=[{title:"Acme Corp likely to close within 14 days",description:"Based on email sentiment, meeting cadence, and champion engagement patterns.",confidence:89},{title:"Churn risk detected: GlobalTech Inc",description:"Declining touchpoints and support ticket volume suggest potential churn.",confidence:74},{title:"Expansion opportunity: TechVentures",description:"Usage patterns and NPS scores indicate readiness for upsell conversation.",confidence:81}];function Me({loading:t,kpiCards:e=Mt,aiInsights:r=It,title:n="Intelligence Lab",subtitle:i="AI-generated insights - Updated 3 min ago",className:s}){return P("div",{className:o("flex h-full flex-col gap-4 overflow-y-auto p-4",s),children:[P("div",{children:[m("h1",{className:"text-2xl font-semibold text-[var(--inkblot-semantic-color-text-primary)]",children:n}),m("p",{className:"text-sm text-[var(--inkblot-semantic-color-text-tertiary)]",children:i})]}),m(Q,{loading:t,title:"",children:m(l,{children:P("div",{className:"flex flex-col gap-4",children:[m("div",{className:"grid grid-cols-2 gap-4 lg:grid-cols-4",children:e.map(a=>m(q,{label:a.label,value:a.value,subtext:a.subtext,trend:a.trend},a.label))}),P("div",{children:[m("h2",{className:"mb-4 border-b border-[var(--inkblot-semantic-color-border-default)] pb-2 text-sm font-bold uppercase tracking-wider text-[var(--inkblot-semantic-color-text-primary)]",children:"AI Insights"}),m("div",{className:"flex flex-col gap-4",children:r.map(a=>m(l,{children:P("div",{className:"flex items-start justify-between gap-4 rounded-[var(--inkblot-radius-lg)] bg-[var(--inkblot-semantic-color-background-secondary)] p-4",children:[P("div",{className:"min-w-0 flex-1",children:[m("h3",{className:"font-semibold text-[var(--inkblot-semantic-color-text-primary)]",children:a.title}),m("p",{className:"mt-1 text-sm text-[var(--inkblot-semantic-color-text-tertiary)]",children:a.description})]}),P("div",{className:"flex shrink-0 flex-col items-center",children:[m("span",{className:"text-lg font-bold text-[var(--inkblot-semantic-color-text-primary)]",children:a.confidence}),m("span",{className:"text-xs text-[var(--inkblot-semantic-color-text-tertiary)]",children:"Conf."})]})]})},a.title))})]})]})})})]})}import{jsx as G,jsxs as le}from"react/jsx-runtime";function Ie({navigation:t,eventStream:e,commandBar:r,children:n,className:i,eventStreamWidth:s="w-80"}){return le("div",{className:o("flex h-screen w-screen overflow-hidden bg-[var(--inkblot-semantic-color-background-primary)]",i),children:[G("aside",{className:"flex h-full w-16 shrink-0 flex-col border-r border-[var(--inkblot-semantic-color-border-default)]",children:t}),G("main",{className:"flex flex-1 flex-col overflow-hidden",children:le("div",{className:"flex min-h-0 flex-1",children:[le("div",{className:"flex min-h-0 flex-1 flex-col overflow-hidden bg-[var(--inkblot-semantic-color-background-primary)]",children:[G("div",{className:"flex-1 overflow-auto",children:n}),G("div",{className:"shrink-0",children:r})]}),e&&G("aside",{className:o("flex h-full shrink-0 flex-col border-l border-[var(--inkblot-semantic-color-border-default)]",s),children:e})]})})]})}export{Y as ActivityStream,Ee as AppNavigationRail,T as Button,Ce as ChatFeed,we as CommandBar,M as CommandInterface,z as EntityCard,ue as EntityCommandCard,U as ErrorBoundary,Z as EventRow,fe as EventStreamFeed,Pe as EventStreamSidebar,_ as Input,Me as IntelligenceLab,q as IntelligenceScoreCard,Ie as MainShell,ge as MetricComparisonList,Q as ModuleContainer,l as ModuleErrorBoundary,L as ModuleSkeleton,ye as OSNavigationRail,C as Skeleton,W as StatusBadge};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@citron-systems/citron-ui",
|
|
3
|
-
"version": "1.0
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"description": "Core UI component library for Citron CRM. Accessible, design-token-driven React components built with consistency and scalability in mind.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -40,11 +40,8 @@
|
|
|
40
40
|
"peerDependencies": {
|
|
41
41
|
"@citron-systems/citron-ds": "^1.0.0",
|
|
42
42
|
"react": "^19.0.0",
|
|
43
|
-
"react-dom": "^19.0.0"
|
|
44
|
-
|
|
45
|
-
"dependencies": {
|
|
46
|
-
"clsx": "^2.1.1",
|
|
47
|
-
"tailwind-merge": "^3.5.0"
|
|
43
|
+
"react-dom": "^19.0.0",
|
|
44
|
+
"react-router-dom": "^7.0.0"
|
|
48
45
|
},
|
|
49
46
|
"devDependencies": {
|
|
50
47
|
"@chromatic-com/storybook": "^5.0.1",
|
|
@@ -71,5 +68,16 @@
|
|
|
71
68
|
"typescript": "~5.9.3",
|
|
72
69
|
"vite": "^7.3.1",
|
|
73
70
|
"vitest": "^4.0.18"
|
|
71
|
+
},
|
|
72
|
+
"dependencies": {
|
|
73
|
+
"@citron-systems/citron-ds": "^1.0.0",
|
|
74
|
+
"lucide-react": "^0.460.0",
|
|
75
|
+
"clsx": "^2.1.1",
|
|
76
|
+
"react": "^19.2.4",
|
|
77
|
+
"react-dom": "^19.2.4",
|
|
78
|
+
"tailwind-merge": "^3.5.0"
|
|
79
|
+
},
|
|
80
|
+
"optionalDependencies": {
|
|
81
|
+
"@rollup/rollup-linux-x64-gnu": "*"
|
|
74
82
|
}
|
|
75
83
|
}
|