@citron-systems/citron-ui 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE CHANGED
@@ -1,21 +1,21 @@
1
- MIT License
2
-
3
- Copyright (c) 2025 Citron Systems
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Citron Systems
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,75 +1,67 @@
1
- # Citron UI
2
-
3
- The core UI component library for the company CRM. A collection of accessible, design-token-driven React components built with consistency and scalability in mind.
4
-
5
- ## Architecture
6
-
7
- The project consumes design tokens from the **@citron-systems/citron-ds** NPM package. The package provides CSS variables (e.g. `var(--inkblot-semantic-color-*)`) which are activated via `@import '@citron-systems/citron-ds/css'` in the main CSS entry point. All components use **semantic tokens only**—never primitives—ensuring automatic dark mode support via `[data-theme="dark"]` and alignment with WCAG AAA standards. Spacing and border-radius from the package are mapped into Tailwind's theme via `src/utils/inkblotTheme.ts`.
8
-
9
- ## Tech Stack
10
-
11
- - React
12
- - TypeScript
13
- - Vite (Library Mode for bundling)
14
- - Tailwind CSS
15
- - Storybook (Vite builder)
16
- - tsup
17
- - @citron-systems/citron-ds
18
-
19
- ## Project Structure
20
-
21
- | Path | Purpose |
22
- |------|---------|
23
- | `src/components` | React components. Each component lives in its own folder with the component file and optional stories. |
24
- | `src/utils/inkblotTheme.ts` | Maps @citron-systems/citron-ds resolved tokens (Inkblot prefix) to Tailwind spacing and borderRadius. |
25
- | `src/index.ts` | Library entry point. Exports all public components and their types. |
26
-
27
- ## Development Workflow
28
-
29
- **Run the preview**
30
-
31
- ```bash
32
- npm run dev
33
- ```
34
-
35
- Starts Storybook on `http://localhost:6006`. Use it to develop and document components in isolation.
36
-
37
- **Build the library**
38
-
39
- ```bash
40
- npm run build
41
- ```
42
-
43
- Uses tsup to bundle the library. Output is written to the `dist` folder.
44
-
45
- ## Library Consumption
46
-
47
- The build produces artifacts in the `dist` folder:
48
-
49
- - `dist/index.js` (CommonJS)
50
- - `dist/index.mjs` (ESM)
51
- - `dist/index.d.ts` (TypeScript definitions)
52
-
53
- Consumers must import the design system CSS and can optionally set `data-theme="dark"` on a parent element for dark mode. Ensure `react` and `react-dom` are peer dependencies in your project.
54
-
55
- ## Publishing (CI/CD)
56
-
57
- Pushes to `main` automatically publish to npm via GitHub Actions. Version bumps follow [Conventional Commits](https://www.conventionalcommits.org/):
58
-
59
- - **patch** – `fix:`, `chore:`, `docs:`, `style:`, `refactor:`, `perf:`, `test:`
60
- - **minor** – `feat:`
61
- - **major** – `feat!:`, `fix!:`, or `BREAKING CHANGE` in commit body
62
-
63
- **Setup (one-time):** Configure [Trusted Publisher](https://docs.npmjs.com/trusted-publishers) on npm for this repo. No `NPM_TOKEN` secret needed—OIDC handles auth.
64
-
65
- 1. Go to [npmjs.com](https://www.npmjs.com/) → your package → Package settings → **Trusted Publishers**
66
- 2. Click **Set up connection**
67
- 3. Choose **GitHub Actions**
68
- 4. Enter:
69
- - **Organization or user:** `Inkblot-Studio` (or your GitHub org/user)
70
- - **Repository:** `citron-ui`
71
- - **Workflow filename:** `publish.yml`
72
-
73
- ## Guidelines
74
-
75
- All new components **must** use semantic tokens from @citron-systems/citron-ds via CSS variables (e.g. `var(--inkblot-semantic-color-interactive-primary)`). Never use primitives or hardcoded colors. Follow the Principles of Radical Clarity and use semantic tokens for all states (hover, focus, disabled, error). Components automatically support dark mode when `[data-theme="dark"]` is applied.
1
+ # Citron UI
2
+
3
+ The core UI component library for the company CRM. A collection of accessible, design-token-driven React components built with consistency and scalability in mind.
4
+
5
+ ## Architecture
6
+
7
+ The project consumes design tokens from the **@citron-systems/citron-ds** NPM package. The package provides CSS variables (e.g. `var(--inkblot-semantic-color-*)`) which are activated via `@import '@citron-systems/citron-ds/css'` in the main CSS entry point. All components use **semantic tokens only**—never primitives—ensuring automatic dark mode support via `[data-theme="dark"]` and alignment with WCAG AAA standards. Spacing and border-radius from the package are mapped into Tailwind's theme via `src/utils/inkblotTheme.ts`.
8
+
9
+ ## Tech Stack
10
+
11
+ - React
12
+ - TypeScript
13
+ - Vite (Library Mode for bundling)
14
+ - Tailwind CSS
15
+ - Storybook (Vite builder)
16
+ - tsup
17
+ - @citron-systems/citron-ds
18
+
19
+ ## Project Structure
20
+
21
+ | Path | Purpose |
22
+ |------|---------|
23
+ | `src/components` | React components. Each component lives in its own folder with the component file and optional stories. |
24
+ | `src/utils/inkblotTheme.ts` | Maps @citron-systems/citron-ds resolved tokens (Inkblot prefix) to Tailwind spacing and borderRadius. |
25
+ | `src/index.ts` | Library entry point. Exports all public components and their types. |
26
+
27
+ ## Development Workflow
28
+
29
+ **Run the preview**
30
+
31
+ ```bash
32
+ npm run dev
33
+ ```
34
+
35
+ Starts Storybook on `http://localhost:6006`. Use it to develop and document components in isolation.
36
+
37
+ **Build the library**
38
+
39
+ ```bash
40
+ npm run build
41
+ ```
42
+
43
+ Uses tsup to bundle the library. Output is written to the `dist` folder.
44
+
45
+ ## Library Consumption
46
+
47
+ The build produces artifacts in the `dist` folder:
48
+
49
+ - `dist/index.js` (CommonJS)
50
+ - `dist/index.mjs` (ESM)
51
+ - `dist/index.d.ts` (TypeScript definitions)
52
+
53
+ Consumers must import the design system CSS and can optionally set `data-theme="dark"` on a parent element for dark mode. Ensure `react` and `react-dom` are peer dependencies in your project.
54
+
55
+ ## Publishing (CI/CD)
56
+
57
+ Pushes to `main` automatically publish to npm via GitHub Actions. Version bumps follow [Conventional Commits](https://www.conventionalcommits.org/):
58
+
59
+ - **patch** – `fix:`, `chore:`, `docs:`, `style:`, `refactor:`, `perf:`, `test:`
60
+ - **minor** – `feat:`
61
+ - **major** – `feat!:`, `fix!:`, or `BREAKING CHANGE` in commit body
62
+
63
+ **Setup (one-time):** Add `NPM_TOKEN` as a repository secret in GitHub (Settings → Secrets and variables → Actions). Create an [Automation token](https://www.npmjs.com/access-tokens) at npmjs.com with publish permission for `@citron-systems`.
64
+
65
+ ## Guidelines
66
+
67
+ All new components **must** use semantic tokens from @citron-systems/citron-ds via CSS variables (e.g. `var(--inkblot-semantic-color-interactive-primary)`). Never use primitives or hardcoded colors. Follow the Principles of Radical Clarity and use semantic tokens for all states (hover, focus, disabled, error). Components automatically support dark mode when `[data-theme="dark"]` is applied.
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> {
@@ -64,11 +65,13 @@ declare class ErrorBoundary extends Component<ErrorBoundaryProps, ErrorBoundaryS
64
65
  }
65
66
 
66
67
  interface CitronEvent {
68
+ id?: string;
67
69
  actor: string;
68
70
  subject: string;
69
71
  event_type: string;
70
72
  timestamp: string;
71
73
  confidence_score: number;
74
+ metadata?: Record<string, unknown>;
72
75
  }
73
76
  interface EventRowProps {
74
77
  event: CitronEvent;
@@ -168,4 +171,106 @@ interface StatusBadgeProps {
168
171
  }
169
172
  declare function StatusBadge({ label, variant, className, }: StatusBadgeProps): react_jsx_runtime.JSX.Element;
170
173
 
171
- export { Button, type ButtonProps, type ButtonVariant, type CitronEvent, 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, type EventStreamStatus, Input, type InputProps, IntelligenceScoreCard, type IntelligenceScoreCardProps, 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 };
174
+ interface GraphNode {
175
+ id: string;
176
+ type: EntityType;
177
+ name: string;
178
+ metadata?: Record<string, string>;
179
+ }
180
+ interface ChatMessage {
181
+ id: string;
182
+ role: 'user' | 'assistant';
183
+ content: string;
184
+ intent?: 'entity' | 'event' | 'general';
185
+ timestamp: string;
186
+ }
187
+
188
+ interface ActivityStreamProps {
189
+ events: CitronEvent[];
190
+ onEntitySelect?: (entity: GraphNode) => void;
191
+ findEntity?: (name: string) => GraphNode | null;
192
+ emptyMessage?: string;
193
+ className?: string;
194
+ }
195
+ declare function ActivityStream({ events, onEntitySelect, findEntity, emptyMessage, className, }: ActivityStreamProps): react_jsx_runtime.JSX.Element;
196
+
197
+ interface AppNavigationRailItem {
198
+ id: string;
199
+ path: string;
200
+ icon: LucideIcon;
201
+ label: string;
202
+ }
203
+ interface AppNavigationRailProps {
204
+ items?: AppNavigationRailItem[];
205
+ brandLogo?: ReactNode;
206
+ brandTitle?: string;
207
+ className?: string;
208
+ }
209
+ declare function AppNavigationRail({ items, brandLogo, brandTitle, className, }: AppNavigationRailProps): react_jsx_runtime.JSX.Element;
210
+
211
+ interface ChatFeedProps {
212
+ entities: GraphNode[];
213
+ events: CitronEvent[];
214
+ onFocusEntity?: (entity: GraphNode) => void;
215
+ findEntity?: (name: string) => GraphNode | null;
216
+ placeholder?: string;
217
+ emptyMessage?: string;
218
+ className?: string;
219
+ }
220
+ declare function ChatFeed({ entities, events, onFocusEntity, findEntity, placeholder, emptyMessage, className, }: ChatFeedProps): react_jsx_runtime.JSX.Element;
221
+
222
+ interface CommandBarProps {
223
+ prompt: string;
224
+ onPromptChange: (value: string) => void;
225
+ onSubmit: () => void;
226
+ isProcessing: boolean;
227
+ placeholder?: string;
228
+ subtitle?: string;
229
+ className?: string;
230
+ }
231
+ declare function CommandBar({ prompt, onPromptChange, onSubmit, isProcessing, placeholder, subtitle, className, }: CommandBarProps): react_jsx_runtime.JSX.Element;
232
+
233
+ interface EventStreamSidebarProps {
234
+ events: CitronEvent[];
235
+ title?: string;
236
+ showLive?: boolean;
237
+ className?: string;
238
+ }
239
+ declare function EventStreamSidebar({ events, title, showLive, className, }: EventStreamSidebarProps): react_jsx_runtime.JSX.Element;
240
+
241
+ interface IntelligenceLabKpiCard {
242
+ label: string;
243
+ value: number;
244
+ subtext?: string;
245
+ trend?: 'up' | 'down';
246
+ }
247
+ interface IntelligenceLabInsight {
248
+ title: string;
249
+ description: string;
250
+ confidence: number;
251
+ }
252
+ interface IntelligenceLabProps {
253
+ entities: GraphNode[];
254
+ events: CitronEvent[];
255
+ focusEntity: GraphNode;
256
+ setFocusEntity: (entity: GraphNode) => void;
257
+ loading: boolean;
258
+ kpiCards?: IntelligenceLabKpiCard[];
259
+ aiInsights?: IntelligenceLabInsight[];
260
+ title?: string;
261
+ subtitle?: string;
262
+ className?: string;
263
+ }
264
+ declare function IntelligenceLab({ loading, kpiCards, aiInsights, title, subtitle, className, }: IntelligenceLabProps): react_jsx_runtime.JSX.Element;
265
+
266
+ interface MainShellProps {
267
+ navigation: ReactNode;
268
+ eventStream: ReactNode | null;
269
+ commandBar: ReactNode;
270
+ children: ReactNode;
271
+ className?: string;
272
+ eventStreamWidth?: string;
273
+ }
274
+ declare function MainShell({ navigation, eventStream, commandBar, children, className, eventStreamWidth, }: MainShellProps): react_jsx_runtime.JSX.Element;
275
+
276
+ 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> {
@@ -64,11 +65,13 @@ declare class ErrorBoundary extends Component<ErrorBoundaryProps, ErrorBoundaryS
64
65
  }
65
66
 
66
67
  interface CitronEvent {
68
+ id?: string;
67
69
  actor: string;
68
70
  subject: string;
69
71
  event_type: string;
70
72
  timestamp: string;
71
73
  confidence_score: number;
74
+ metadata?: Record<string, unknown>;
72
75
  }
73
76
  interface EventRowProps {
74
77
  event: CitronEvent;
@@ -168,4 +171,106 @@ interface StatusBadgeProps {
168
171
  }
169
172
  declare function StatusBadge({ label, variant, className, }: StatusBadgeProps): react_jsx_runtime.JSX.Element;
170
173
 
171
- export { Button, type ButtonProps, type ButtonVariant, type CitronEvent, 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, type EventStreamStatus, Input, type InputProps, IntelligenceScoreCard, type IntelligenceScoreCardProps, 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 };
174
+ interface GraphNode {
175
+ id: string;
176
+ type: EntityType;
177
+ name: string;
178
+ metadata?: Record<string, string>;
179
+ }
180
+ interface ChatMessage {
181
+ id: string;
182
+ role: 'user' | 'assistant';
183
+ content: string;
184
+ intent?: 'entity' | 'event' | 'general';
185
+ timestamp: string;
186
+ }
187
+
188
+ interface ActivityStreamProps {
189
+ events: CitronEvent[];
190
+ onEntitySelect?: (entity: GraphNode) => void;
191
+ findEntity?: (name: string) => GraphNode | null;
192
+ emptyMessage?: string;
193
+ className?: string;
194
+ }
195
+ declare function ActivityStream({ events, onEntitySelect, findEntity, emptyMessage, className, }: ActivityStreamProps): react_jsx_runtime.JSX.Element;
196
+
197
+ interface AppNavigationRailItem {
198
+ id: string;
199
+ path: string;
200
+ icon: LucideIcon;
201
+ label: string;
202
+ }
203
+ interface AppNavigationRailProps {
204
+ items?: AppNavigationRailItem[];
205
+ brandLogo?: ReactNode;
206
+ brandTitle?: string;
207
+ className?: string;
208
+ }
209
+ declare function AppNavigationRail({ items, brandLogo, brandTitle, className, }: AppNavigationRailProps): react_jsx_runtime.JSX.Element;
210
+
211
+ interface ChatFeedProps {
212
+ entities: GraphNode[];
213
+ events: CitronEvent[];
214
+ onFocusEntity?: (entity: GraphNode) => void;
215
+ findEntity?: (name: string) => GraphNode | null;
216
+ placeholder?: string;
217
+ emptyMessage?: string;
218
+ className?: string;
219
+ }
220
+ declare function ChatFeed({ entities, events, onFocusEntity, findEntity, placeholder, emptyMessage, className, }: ChatFeedProps): react_jsx_runtime.JSX.Element;
221
+
222
+ interface CommandBarProps {
223
+ prompt: string;
224
+ onPromptChange: (value: string) => void;
225
+ onSubmit: () => void;
226
+ isProcessing: boolean;
227
+ placeholder?: string;
228
+ subtitle?: string;
229
+ className?: string;
230
+ }
231
+ declare function CommandBar({ prompt, onPromptChange, onSubmit, isProcessing, placeholder, subtitle, className, }: CommandBarProps): react_jsx_runtime.JSX.Element;
232
+
233
+ interface EventStreamSidebarProps {
234
+ events: CitronEvent[];
235
+ title?: string;
236
+ showLive?: boolean;
237
+ className?: string;
238
+ }
239
+ declare function EventStreamSidebar({ events, title, showLive, className, }: EventStreamSidebarProps): react_jsx_runtime.JSX.Element;
240
+
241
+ interface IntelligenceLabKpiCard {
242
+ label: string;
243
+ value: number;
244
+ subtext?: string;
245
+ trend?: 'up' | 'down';
246
+ }
247
+ interface IntelligenceLabInsight {
248
+ title: string;
249
+ description: string;
250
+ confidence: number;
251
+ }
252
+ interface IntelligenceLabProps {
253
+ entities: GraphNode[];
254
+ events: CitronEvent[];
255
+ focusEntity: GraphNode;
256
+ setFocusEntity: (entity: GraphNode) => void;
257
+ loading: boolean;
258
+ kpiCards?: IntelligenceLabKpiCard[];
259
+ aiInsights?: IntelligenceLabInsight[];
260
+ title?: string;
261
+ subtitle?: string;
262
+ className?: string;
263
+ }
264
+ declare function IntelligenceLab({ loading, kpiCards, aiInsights, title, subtitle, className, }: IntelligenceLabProps): react_jsx_runtime.JSX.Element;
265
+
266
+ interface MainShellProps {
267
+ navigation: ReactNode;
268
+ eventStream: ReactNode | null;
269
+ commandBar: ReactNode;
270
+ children: ReactNode;
271
+ className?: string;
272
+ eventStreamWidth?: string;
273
+ }
274
+ declare function MainShell({ navigation, eventStream, commandBar, children, className, eventStreamWidth, }: MainShellProps): react_jsx_runtime.JSX.Element;
275
+
276
+ 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 Y=Object.defineProperty;var Ae=Object.getOwnPropertyDescriptor;var Te=Object.getOwnPropertyNames;var _e=Object.prototype.hasOwnProperty;var De=(t,e)=>{for(var r in e)Y(t,r,{get:e[r],enumerable:!0})},Ve=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Te(e))!_e.call(t,i)&&i!==r&&Y(t,i,{get:()=>e[i],enumerable:!(n=Ae(e,i))||n.enumerable});return t};var He=t=>Ve(Y({},"__esModule",{value:!0}),t);var nt={};De(nt,{ActivityStream:()=>Z,AppNavigationRail:()=>ie,Button:()=>V,ChatFeed:()=>se,CommandBar:()=>le,CommandInterface:()=>_,EntityCard:()=>F,EntityCommandCard:()=>j,ErrorBoundary:()=>K,EventRow:()=>z,EventStreamFeed:()=>te,EventStreamSidebar:()=>ce,Input:()=>H,IntelligenceLab:()=>de,IntelligenceScoreCard:()=>U,MainShell:()=>me,MetricComparisonList:()=>ae,ModuleContainer:()=>W,ModuleErrorBoundary:()=>l,ModuleSkeleton:()=>D,OSNavigationRail:()=>ne,Skeleton:()=>M,StatusBadge:()=>$});module.exports=He(nt);var ge=require("react");var fe=require("clsx"),xe=require("tailwind-merge");function o(...t){return(0,xe.twMerge)((0,fe.clsx)(t))}var ye=require("react/jsx-runtime"),Oe={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"},V=(0,ge.forwardRef)(({className:t,variant:e="primary",disabled:r,...n},i)=>(0,ye.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)]",Oe[e],t),...n}));V.displayName="Button";var p=require("react/jsx-runtime");function ke({className:t}){return(0,p.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,p.jsx)("circle",{cx:"12",cy:"12",r:"9",stroke:"currentColor",strokeWidth:"1.5",className:"text-[var(--inkblot-semantic-color-text-tertiary)]"}),(0,p.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 _({promptValue:t="",onPromptChange:e,onPromptSubmit:r,isProcessing:n=!1,response:i,placeholder:s="Ask Citron Intelligence...",className:a}){let k=m=>{m.key==="Enter"&&!m.shiftKey&&(m.preventDefault(),r?.())};return(0,p.jsxs)("div",{className:o("flex w-full max-w-2xl flex-col gap-8",a),children:[(0,p.jsx)("div",{className:"flex flex-col gap-4",children:(0,p.jsxs)("div",{className:"flex items-start gap-4",children:[(0,p.jsx)("div",{className:"flex shrink-0 items-center justify-center",children:(0,p.jsx)(ke,{})}),(0,p.jsx)("div",{className:"flex flex-1 flex-col gap-4",children:(0,p.jsx)("textarea",{value:t,onChange:m=>e?.(m.target.value),onKeyDown:k,placeholder:s,rows:3,disabled:n,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")})})]})}),n?(0,p.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%)]")}):i?(0,p.jsx)("div",{className:"flex flex-col gap-4",children:(0,p.jsxs)("div",{className:"flex items-start gap-4",children:[(0,p.jsx)("div",{className:"shrink-0",children:(0,p.jsx)(ke,{})}),(0,p.jsx)("div",{className:"min-w-0 flex-1 text-[var(--inkblot-semantic-color-text-primary)]",children:i})]})}):null]})}var f=require("react/jsx-runtime"),Ge={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 F({name:t,entityType:e,metadata:r,edges:n=[],className:i}){return(0,f.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",Ge[e],i),children:[(0,f.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,f.jsx)("span",{className:"text-xs font-medium uppercase tracking-wide text-[var(--inkblot-semantic-color-text-tertiary)]",children:e}),(0,f.jsx)("h3",{className:"text-base font-semibold text-[var(--inkblot-semantic-color-text-primary)]",children:t})]}),r&&Object.keys(r).length>0?(0,f.jsx)("dl",{className:"flex flex-col gap-1",children:Object.entries(r).map(([s,a])=>(0,f.jsxs)("div",{className:"flex gap-2",children:[(0,f.jsxs)("dt",{className:"text-sm text-[var(--inkblot-semantic-color-text-tertiary)]",children:[s,":"]}),(0,f.jsx)("dd",{className:"text-sm text-[var(--inkblot-semantic-color-text-secondary)]",children:a})]},s))}):null,n.length>0?(0,f.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,f.jsx)("h4",{className:"text-sm font-medium text-[var(--inkblot-semantic-color-text-secondary)]",children:"Edges"}),(0,f.jsx)("ul",{className:"flex flex-wrap gap-2",children:n.map((s,a)=>(0,f.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 Ne=require("react");var he=require("react/jsx-runtime"),H=(0,Ne.forwardRef)(({className:t,error:e,disabled:r,...n},i)=>(0,he.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}));H.displayName="Input";var Ee=require("react");var O=require("react/jsx-runtime"),l=class extends Ee.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,O.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,O.jsx)("p",{className:"text-base font-semibold text-[var(--inkblot-semantic-color-text-primary)]",children:"This module failed to load"}),(0,O.jsx)("p",{className:"text-sm text-[var(--inkblot-semantic-color-text-tertiary)]",children:this.state.error.message}),(0,O.jsx)(V,{variant:"secondary",onClick:this.props.onRetry,className:"w-fit border-[var(--inkblot-semantic-color-status-error)]",children:"Retry"})]}):this.props.children}};var x=require("react/jsx-runtime");function j({title:t,insights:e,stats:r=[],commandValue:n="",onCommandChange:i,onCommandSubmit:s,className:a}){let k=m=>{m.key==="Enter"&&(m.preventDefault(),s?.())};return(0,x.jsx)(l,{className:a,children:(0,x.jsxs)("div",{className:"flex flex-col gap-4 rounded-[var(--inkblot-radius-xl)] bg-[var(--inkblot-semantic-color-background-secondary)] p-4",children:[(0,x.jsx)("h2",{className:"text-xl font-semibold text-[var(--inkblot-semantic-color-text-primary)]",children:t}),e?(0,x.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,x.jsxs)("div",{children:[(0,x.jsx)("h3",{className:"mb-2 text-sm font-medium text-[var(--inkblot-semantic-color-text-secondary)]",children:"Connected To"}),(0,x.jsx)("div",{className:"grid grid-cols-2 gap-2 sm:grid-cols-3",children:r.map((m,T)=>(0,x.jsxs)("div",{className:"rounded-[var(--inkblot-radius-md)] bg-[var(--inkblot-semantic-color-background-tertiary)] px-3 py-2",children:[(0,x.jsx)("span",{className:"text-xs text-[var(--inkblot-semantic-color-text-tertiary)]",children:m.label}),(0,x.jsx)("p",{className:"text-sm font-medium text-[var(--inkblot-semantic-color-text-primary)]",children:m.value})]},T))})]}):null,(0,x.jsx)("div",{className:"mt-2",children:(0,x.jsx)(H,{type:"text",value:n,onChange:m=>i?.(m.target.value),onKeyDown:k,placeholder:"Ask about this entity...",className:"rounded-[var(--inkblot-radius-md)]"})})]})})}var Ce=require("react");var ee=require("react/jsx-runtime"),K=class extends Ce.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,ee.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,ee.jsx)("span",{className:"text-sm font-medium",children:"Something went wrong"})}):this.props.children}};var Se=require("react/jsx-runtime"),Fe={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 $({label:t,variant:e="info",className:r}){return(0,Se.jsx)("span",{className:o("inline-flex items-center rounded-[var(--inkblot-radius-md)] border px-2 py-0.5 text-xs font-medium",Fe[e],r),children:t})}var P=require("react/jsx-runtime");function Ke(t){return t>=.8?"success":t>=.5?"info":t>=.2?"warning":"error"}function z({event:t,className:e}){let r=Ke(t.confidence_score),n=`${Math.round(t.confidence_score*100)}%`;return(0,P.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,P.jsx)("span",{className:"text-sm font-medium text-[var(--inkblot-semantic-color-text-primary)]",children:t.actor}),(0,P.jsx)("span",{className:"text-sm text-[var(--inkblot-semantic-color-text-tertiary)]",children:"\u2192"}),(0,P.jsx)("span",{className:"text-sm text-[var(--inkblot-semantic-color-text-secondary)]",children:t.subject}),(0,P.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,P.jsx)("span",{className:"text-xs text-[var(--inkblot-semantic-color-text-tertiary)]",children:t.timestamp}),(0,P.jsx)($,{label:n,variant:r})]})}var y=require("react/jsx-runtime"),$e={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 ze(){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 te({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)(ze,{})}),(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",$e[r.status]),"aria-hidden":!0}):null]},r.id))})})}var u=require("react/jsx-runtime"),oe=36,re=2*Math.PI*oe;function U({label:t,value:e,subtext:r,trend:n,className:i}){let s=Math.min(100,Math.max(0,e)),a=re-s/100*re;return(0,u.jsx)(l,{className:i,children:(0,u.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,u.jsxs)("div",{className:"relative",children:[(0,u.jsxs)("svg",{width:"96",height:"96",viewBox:"0 0 96 96",className:"-rotate-90",children:[(0,u.jsx)("circle",{cx:"48",cy:"48",r:oe,fill:"none",stroke:"var(--inkblot-semantic-color-background-tertiary)",strokeWidth:"4"}),(0,u.jsx)("circle",{cx:"48",cy:"48",r:oe,fill:"none",stroke:"var(--inkblot-semantic-color-interactive-primary)",strokeWidth:"4",strokeDasharray:re,strokeDashoffset:a,strokeLinecap:"round",className:"transition-[stroke-dashoffset] duration-[var(--inkblot-duration-fast)]"})]}),(0,u.jsx)("div",{className:"absolute inset-0 flex flex-col items-center justify-center",children:(0,u.jsxs)("span",{className:"flex items-center gap-1 text-lg font-semibold text-[var(--inkblot-semantic-color-text-primary)]",children:[s,"%",n==="up"?(0,u.jsx)("svg",{viewBox:"0 0 16 16",className:"h-4 w-4 text-[var(--inkblot-semantic-color-status-success)]","aria-hidden":!0,children:(0,u.jsx)("path",{fill:"currentColor",d:"M8 4l4 6H4l4-6z"})}):n==="down"?(0,u.jsx)("svg",{viewBox:"0 0 16 16",className:"h-4 w-4 text-[var(--inkblot-semantic-color-status-error)]","aria-hidden":!0,children:(0,u.jsx)("path",{fill:"currentColor",d:"M8 12l4-6H4l4 6z"})}):null]})})]}),(0,u.jsxs)("div",{className:"text-center",children:[(0,u.jsx)("p",{className:"text-sm font-medium text-[var(--inkblot-semantic-color-text-primary)]",children:t}),r?(0,u.jsx)("p",{className:"text-xs text-[var(--inkblot-semantic-color-text-tertiary)]",children:r}):null]})]})})}var C=require("react/jsx-runtime"),Ue={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 We({className:t}){return(0,C.jsx)("svg",{viewBox:"0 0 16 16",className:o("h-4 w-4",t),"aria-hidden":!0,children:(0,C.jsx)("path",{fill:"currentColor",d:"M6 4l4 4-4 4V4z"})})}function ae({items:t,className:e}){return(0,C.jsx)(l,{className:e,children:(0,C.jsx)("ul",{className:o("flex flex-col gap-4 py-2"),children:t.map((r,n)=>(0,C.jsxs)("li",{className:"flex items-center justify-between gap-4",children:[(0,C.jsx)("span",{className:"text-sm text-[var(--inkblot-semantic-color-text-secondary)]",children:r.label}),(0,C.jsx)("span",{className:o("flex items-center gap-1 text-sm font-medium",Ue[r.variant??"default"]),children:r.value!=null?r.value:(0,C.jsx)(We,{})})]},n))})})}var we=require("react/jsx-runtime");function M({className:t,...e}){return(0,we.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 R=require("react/jsx-runtime");function D({className:t,...e}){return(0,R.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,R.jsx)(M,{className:"h-5 w-3/4"}),(0,R.jsx)(M,{className:"h-4 w-full"}),(0,R.jsx)(M,{className:"h-4 w-5/6"}),(0,R.jsx)(M,{className:"h-4 w-4/5"}),(0,R.jsx)(M,{className:"h-4 w-3/4"})]})}var L=require("react/jsx-runtime");function W({children:t,loading:e=!1,title:r,className:n,onRetry:i}){return(0,L.jsx)(l,{className:n,onRetry:i,children:e?(0,L.jsxs)("div",{className:o("flex flex-col gap-4",n),children:[r?(0,L.jsx)("h2",{className:"text-lg font-semibold text-[var(--inkblot-semantic-color-text-primary)]",children:r}):null,(0,L.jsx)(D,{})]}):(0,L.jsxs)("div",{className:o("flex flex-col gap-4",n),children:[r?(0,L.jsx)("h2",{className:"text-lg font-semibold text-[var(--inkblot-semantic-color-text-primary)]",children:r}):null,t]})})}var A=require("react/jsx-runtime");function ne({items:t,className:e}){return(0,A.jsx)(l,{className:e,children:(0,A.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,A.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,A.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,A.jsx)("div",{className:"flex h-8 w-8 items-center justify-center [&>svg]:h-5 [&>svg]:w-5",children:r.icon}),r.label?(0,A.jsx)("span",{className:"text-[10px] font-medium",children:r.label}):null]},r.id))})})}var b=require("lucide-react");var v=require("react/jsx-runtime");function Ze(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 qe={EMAIL_OPENED:b.Mail,EMAIL_SENT:b.Mail,INVOICE_PAID:b.FileText,INVOICE_OVERDUE:b.FileText,CONTRACT_SIGNED:b.FileText,STAGE_CHANGED:b.Zap,CALL_COMPLETED:b.Phone,PHONE_CALL:b.Phone,RELATIONSHIP_DETECTED:b.Link2};function Je(t){return qe[t]??b.FileText}function Qe(t){return t.metadata?.description??t.event_type.replace(/_/g," ").toLowerCase()}function Xe(t){return t.metadata?.details??`${t.actor} - ${t.subject}`}function Z({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,v.jsx)(l,{children:(0,v.jsx)("div",{className:o("space-y-2",i),children:t.length===0?(0,v.jsx)("p",{className:"py-6 text-center text-sm text-[var(--inkblot-semantic-color-text-tertiary)]",children:n}):t.map(a=>{let m=!!(r?.(a.subject)??r?.(a.actor))&&!!s,T=Je(a.event_type),G=(0,v.jsxs)("div",{className:"flex flex-1 items-center gap-3",children:[(0,v.jsx)(T,{className:"h-4 w-4 shrink-0 text-[var(--inkblot-semantic-color-text-secondary)]","aria-hidden":!0}),(0,v.jsx)("div",{className:`h-2 w-2 shrink-0 rounded-full ${Ze(a.confidence_score)}`,"aria-hidden":!0}),(0,v.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,v.jsx)("p",{className:"text-sm font-medium text-[var(--inkblot-semantic-color-text-primary)]",children:Qe(a)}),(0,v.jsx)("p",{className:"text-xs text-[var(--inkblot-semantic-color-text-secondary)]",children:Xe(a)})]}),(0,v.jsx)("span",{className:"shrink-0 text-xs text-[var(--inkblot-semantic-color-text-tertiary)]",children:a.timestamp})]}),B=a.id??`${a.actor}-${a.subject}-${a.timestamp}`;return(0,v.jsx)("div",{children:m?(0,v.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:G}):(0,v.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:G})},B)})})})}var Pe=require("react-router-dom"),g=require("lucide-react");var S=require("react/jsx-runtime"),Ye=[{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 ie({items:t=Ye,brandLogo:e,brandTitle:r="Command Canvas \u2014 AI-native Interface",className:n}){return(0,S.jsx)(l,{children:(0,S.jsxs)("nav",{className:o("flex h-full flex-col gap-4 bg-[var(--inkblot-semantic-color-background-secondary)] p-3",n),children:[(0,S.jsx)("div",{className:"flex flex-col items-center gap-2",children:(0,S.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,S.jsx)(g.Sparkles,{className:"h-5 w-5 text-[var(--inkblot-semantic-color-text-primary)]","aria-hidden":!0})})}),(0,S.jsx)("div",{className:"flex flex-1 flex-col gap-2",children:t.map(i=>{let s=i.icon;return(0,S.jsx)(Pe.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,S.jsx)(s,{size:20,"aria-hidden":!0})},i.id)})})]})})}var N=require("react");var c=require("react/jsx-runtime");function je(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 et({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)(F,{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 tt({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)(z,{event:e},e.id??`${e.actor}-${e.subject}-${e.timestamp}`))]})}function rt(){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 se({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,m]=(0,N.useState)(""),[T,G]=(0,N.useState)([]),[B,pe]=(0,N.useState)(!1),[Ie,Be]=(0,N.useState)(new Map),q=(0,N.useRef)(null);(0,N.useEffect)(()=>{q.current&&(q.current.scrollTop=q.current.scrollHeight)},[T,B]);let Re=(0,N.useCallback)(()=>{let E=k.trim();if(!E||B)return;let ue=n?.(E);ue&&r&&r(ue);let Le={id:`msg-${Date.now()}`,role:"user",content:E,timestamp:new Date().toISOString()},ve=je(E);G(J=>[...J,Le]),m(""),pe(!0),setTimeout(()=>{let J={id:`msg-${Date.now()}-res`,role:"assistant",content:"",intent:ve,timestamp:new Date().toISOString()},Q;switch(ve){case"entity":Q=(0,c.jsx)(et,{entities:t});break;case"event":Q=(0,c.jsx)(tt,{events:e});break;default:Q=(0,c.jsx)(rt,{})}Be(X=>{let be=new Map(X);return be.set(J.id,Q),be}),G(X=>[...X,J]),pe(!1)},1e3)},[k,B,t,e,r,n]);return(0,c.jsxs)("div",{className:o("flex h-full flex-col",a),children:[(0,c.jsxs)("div",{ref:q,className:"flex-1 space-y-4 overflow-y-auto p-4",children:[T.length===0&&!B?(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})}):T.map(E=>(0,c.jsx)("div",{className:"flex flex-col gap-2",children:E.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:E.content})}):(0,c.jsx)("div",{className:"max-w-[90%]",children:Ie.get(E.id)??(0,c.jsx)("p",{className:"text-sm text-[var(--inkblot-semantic-color-text-primary)]",children:E.content})})},E.id)),B&&(0,c.jsx)("div",{className:"max-w-[70%]",children:(0,c.jsx)(D,{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)(_,{promptValue:k,onPromptChange:m,onPromptSubmit:Re,isProcessing:B,placeholder:i})})]})}var Me=require("lucide-react");var I=require("react/jsx-runtime");function le({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,I.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,I.jsxs)("div",{className:"flex items-center gap-3",children:[(0,I.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,I.jsx)(Me.Sparkles,{className:"h-5 w-5 text-[var(--inkblot-semantic-color-text-primary)]","aria-hidden":!0})}),(0,I.jsx)("div",{className:"flex-1",children:(0,I.jsx)(_,{promptValue:t,onPromptChange:e,onPromptSubmit:r,isProcessing:n,placeholder:i})})]}),s&&(0,I.jsx)("p",{className:"mt-2 text-xs text-[var(--inkblot-semantic-color-text-tertiary)]",children:s})]})}var h=require("react/jsx-runtime");function ce({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)(Z,{events:t})})]})})}var d=require("react/jsx-runtime"),ot=[{label:"Pipeline Health",value:76},{label:"Churn Risk",value:28},{label:"Expansion Signal",value:64},{label:"Team Velocity",value:83}],at=[{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 de({loading:t,kpiCards:e=ot,aiInsights:r=at,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)(W,{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)(U,{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 w=require("react/jsx-runtime");function me({navigation:t,eventStream:e,commandBar:r,children:n,className:i,eventStreamWidth:s="w-80"}){return(0,w.jsxs)("div",{className:o("flex h-screen w-screen overflow-hidden bg-[var(--inkblot-semantic-color-background-primary)]",i),children:[(0,w.jsx)("aside",{className:"flex h-full w-16 shrink-0 flex-col border-r border-[var(--inkblot-semantic-color-border-default)]",children:t}),(0,w.jsx)("main",{className:"flex flex-1 flex-col overflow-hidden",children:(0,w.jsxs)("div",{className:"flex min-h-0 flex-1",children:[(0,w.jsxs)("div",{className:"flex min-h-0 flex-1 flex-col overflow-hidden bg-[var(--inkblot-semantic-color-background-primary)]",children:[(0,w.jsx)("div",{className:"flex-1 overflow-auto",children:n}),(0,w.jsx)("div",{className:"shrink-0",children:r})]}),e&&(0,w.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 _e}from"react";import{clsx as Ae}from"clsx";import{twMerge as Te}from"tailwind-merge";function o(...e){return Te(Ae(e))}import{jsx as Ve}from"react/jsx-runtime";var De={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"},L=_e(({className:e,variant:t="primary",disabled:r,...n},i)=>Ve("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)]",De[t],e),...n}));L.displayName="Button";import{jsx as p,jsxs as K}from"react/jsx-runtime";function me({className:e}){return K("svg",{viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",className:o("h-8 w-8",e),"aria-hidden":!0,children:[p("circle",{cx:"12",cy:"12",r:"9",stroke:"currentColor",strokeWidth:"1.5",className:"text-[var(--inkblot-semantic-color-text-tertiary)]"}),p("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 S({promptValue:e="",onPromptChange:t,onPromptSubmit:r,isProcessing:n=!1,response:i,placeholder:s="Ask Citron Intelligence...",className:a}){let u=d=>{d.key==="Enter"&&!d.shiftKey&&(d.preventDefault(),r?.())};return K("div",{className:o("flex w-full max-w-2xl flex-col gap-8",a),children:[p("div",{className:"flex flex-col gap-4",children:K("div",{className:"flex items-start gap-4",children:[p("div",{className:"flex shrink-0 items-center justify-center",children:p(me,{})}),p("div",{className:"flex flex-1 flex-col gap-4",children:p("textarea",{value:e,onChange:d=>t?.(d.target.value),onKeyDown:u,placeholder:s,rows:3,disabled:n,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")})})]})}),n?p("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?p("div",{className:"flex flex-col gap-4",children:K("div",{className:"flex items-start gap-4",children:[p("div",{className:"shrink-0",children:p(me,{})}),p("div",{className:"min-w-0 flex-1 text-[var(--inkblot-semantic-color-text-primary)]",children:i})]})}):null]})}import{jsx as w,jsxs as P}from"react/jsx-runtime";var He={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:e,entityType:t,metadata:r,edges:n=[],className:i}){return P("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",He[t],i),children:[P("div",{className:"flex flex-col gap-1",children:[w("span",{className:"text-xs font-medium uppercase tracking-wide text-[var(--inkblot-semantic-color-text-tertiary)]",children:t}),w("h3",{className:"text-base font-semibold text-[var(--inkblot-semantic-color-text-primary)]",children:e})]}),r&&Object.keys(r).length>0?w("dl",{className:"flex flex-col gap-1",children:Object.entries(r).map(([s,a])=>P("div",{className:"flex gap-2",children:[P("dt",{className:"text-sm text-[var(--inkblot-semantic-color-text-tertiary)]",children:[s,":"]}),w("dd",{className:"text-sm text-[var(--inkblot-semantic-color-text-secondary)]",children:a})]},s))}):null,n.length>0?P("div",{className:"flex flex-col gap-2",children:[w("h4",{className:"text-sm font-medium text-[var(--inkblot-semantic-color-text-secondary)]",children:"Edges"}),w("ul",{className:"flex flex-wrap gap-2",children:n.map((s,a)=>P("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 Oe}from"react";import{jsx as Ge}from"react/jsx-runtime";var A=Oe(({className:e,error:t,disabled:r,...n},i)=>Ge("input",{ref:i,disabled:r,"aria-invalid":t,"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",t?"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)]",e),...n}));A.displayName="Input";import{Component as Fe}from"react";import{jsx as te,jsxs as Ke}from"react/jsx-runtime";var l=class extends Fe{constructor(t){super(t),this.state={hasError:!1,error:null}}static getDerivedStateFromError(t){return{hasError:!0,error:t}}render(){return this.state.hasError&&this.state.error?Ke("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:[te("p",{className:"text-base font-semibold text-[var(--inkblot-semantic-color-text-primary)]",children:"This module failed to load"}),te("p",{className:"text-sm text-[var(--inkblot-semantic-color-text-tertiary)]",children:this.state.error.message}),te(L,{variant:"secondary",onClick:this.props.onRetry,className:"w-fit border-[var(--inkblot-semantic-color-status-error)]",children:"Retry"})]}):this.props.children}};import{jsx as x,jsxs as re}from"react/jsx-runtime";function pe({title:e,insights:t,stats:r=[],commandValue:n="",onCommandChange:i,onCommandSubmit:s,className:a}){let u=d=>{d.key==="Enter"&&(d.preventDefault(),s?.())};return x(l,{className:a,children:re("div",{className:"flex flex-col gap-4 rounded-[var(--inkblot-radius-xl)] bg-[var(--inkblot-semantic-color-background-secondary)] p-4",children:[x("h2",{className:"text-xl font-semibold text-[var(--inkblot-semantic-color-text-primary)]",children:e}),t?x("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:t}):null,r.length>0?re("div",{children:[x("h3",{className:"mb-2 text-sm font-medium text-[var(--inkblot-semantic-color-text-secondary)]",children:"Connected To"}),x("div",{className:"grid grid-cols-2 gap-2 sm:grid-cols-3",children:r.map((d,N)=>re("div",{className:"rounded-[var(--inkblot-radius-md)] bg-[var(--inkblot-semantic-color-background-tertiary)] px-3 py-2",children:[x("span",{className:"text-xs text-[var(--inkblot-semantic-color-text-tertiary)]",children:d.label}),x("p",{className:"text-sm font-medium text-[var(--inkblot-semantic-color-text-primary)]",children:d.value})]},N))})]}):null,x("div",{className:"mt-2",children:x(A,{type:"text",value:n,onChange:d=>i?.(d.target.value),onKeyDown:u,placeholder:"Ask about this entity...",className:"rounded-[var(--inkblot-radius-md)]"})})]})})}import{Component as $e}from"react";import{jsx as ue}from"react/jsx-runtime";var z=class extends $e{constructor(t){super(t),this.state={hasError:!1,error:null}}static getDerivedStateFromError(t){return{hasError:!0,error:t}}render(){return this.state.hasError&&this.state.error?this.props.fallback?this.props.fallback:ue("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:ue("span",{className:"text-sm font-medium",children:"Something went wrong"})}):this.props.children}};import{jsx as Ue}from"react/jsx-runtime";var ze={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:e,variant:t="info",className:r}){return Ue("span",{className:o("inline-flex items-center rounded-[var(--inkblot-radius-md)] border px-2 py-0.5 text-xs font-medium",ze[t],r),children:e})}import{jsx as M,jsxs as Ze}from"react/jsx-runtime";function We(e){return e>=.8?"success":e>=.5?"info":e>=.2?"warning":"error"}function W({event:e,className:t}){let r=We(e.confidence_score),n=`${Math.round(e.confidence_score*100)}%`;return Ze("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",t),children:[M("span",{className:"text-sm font-medium text-[var(--inkblot-semantic-color-text-primary)]",children:e.actor}),M("span",{className:"text-sm text-[var(--inkblot-semantic-color-text-tertiary)]",children:"\u2192"}),M("span",{className:"text-sm text-[var(--inkblot-semantic-color-text-secondary)]",children:e.subject}),M("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:e.event_type}),M("span",{className:"text-xs text-[var(--inkblot-semantic-color-text-tertiary)]",children:e.timestamp}),M(U,{label:n,variant:r})]})}import{jsx as g,jsxs as ve}from"react/jsx-runtime";var qe={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 Je(){return g("svg",{viewBox:"0 0 16 16",className:"h-4 w-4 text-[var(--inkblot-semantic-color-text-tertiary)]","aria-hidden":!0,children:g("circle",{cx:"8",cy:"8",r:"2",fill:"currentColor"})})}function be({events:e,className:t}){return g(l,{className:t,children:g("div",{className:o("flex flex-col gap-4 border-l-2 border-[var(--inkblot-semantic-color-border-default)] pl-4"),children:e.map(r=>ve("div",{className:"flex items-start gap-3",children:[g("div",{className:"flex shrink-0 items-center pt-0.5",children:r.icon??g(Je,{})}),ve("div",{className:"min-w-0 flex-1",children:[g("p",{className:"text-sm font-medium text-[var(--inkblot-semantic-color-text-primary)]",children:r.title}),g("p",{className:"text-xs text-[var(--inkblot-semantic-color-text-tertiary)]",children:r.timestamp})]}),r.status?g("div",{className:o("mt-1.5 h-2 w-2 shrink-0 rounded-full",qe[r.status]),"aria-hidden":!0}):null]},r.id))})})}import{jsx as f,jsxs as T}from"react/jsx-runtime";var ae=36,oe=2*Math.PI*ae;function Z({label:e,value:t,subtext:r,trend:n,className:i}){let s=Math.min(100,Math.max(0,t)),a=oe-s/100*oe;return f(l,{className:i,children:T("div",{className:"flex flex-col items-center gap-4 rounded-[var(--inkblot-radius-lg)] bg-[var(--inkblot-semantic-color-background-secondary)] p-4",children:[T("div",{className:"relative",children:[T("svg",{width:"96",height:"96",viewBox:"0 0 96 96",className:"-rotate-90",children:[f("circle",{cx:"48",cy:"48",r:ae,fill:"none",stroke:"var(--inkblot-semantic-color-background-tertiary)",strokeWidth:"4"}),f("circle",{cx:"48",cy:"48",r:ae,fill:"none",stroke:"var(--inkblot-semantic-color-interactive-primary)",strokeWidth:"4",strokeDasharray:oe,strokeDashoffset:a,strokeLinecap:"round",className:"transition-[stroke-dashoffset] duration-[var(--inkblot-duration-fast)]"})]}),f("div",{className:"absolute inset-0 flex flex-col items-center justify-center",children:T("span",{className:"flex items-center gap-1 text-lg font-semibold text-[var(--inkblot-semantic-color-text-primary)]",children:[s,"%",n==="up"?f("svg",{viewBox:"0 0 16 16",className:"h-4 w-4 text-[var(--inkblot-semantic-color-status-success)]","aria-hidden":!0,children:f("path",{fill:"currentColor",d:"M8 4l4 6H4l4-6z"})}):n==="down"?f("svg",{viewBox:"0 0 16 16",className:"h-4 w-4 text-[var(--inkblot-semantic-color-status-error)]","aria-hidden":!0,children:f("path",{fill:"currentColor",d:"M8 12l4-6H4l4 6z"})}):null]})})]}),T("div",{className:"text-center",children:[f("p",{className:"text-sm font-medium text-[var(--inkblot-semantic-color-text-primary)]",children:e}),r?f("p",{className:"text-xs text-[var(--inkblot-semantic-color-text-tertiary)]",children:r}):null]})]})})}import{jsx as h,jsxs as Ye}from"react/jsx-runtime";var Qe={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 Xe({className:e}){return h("svg",{viewBox:"0 0 16 16",className:o("h-4 w-4",e),"aria-hidden":!0,children:h("path",{fill:"currentColor",d:"M6 4l4 4-4 4V4z"})})}function fe({items:e,className:t}){return h(l,{className:t,children:h("ul",{className:o("flex flex-col gap-4 py-2"),children:e.map((r,n)=>Ye("li",{className:"flex items-center justify-between gap-4",children:[h("span",{className:"text-sm text-[var(--inkblot-semantic-color-text-secondary)]",children:r.label}),h("span",{className:o("flex items-center gap-1 text-sm font-medium",Qe[r.variant??"default"]),children:r.value!=null?r.value:h(Xe,{})})]},n))})})}import{jsx as je}from"react/jsx-runtime";function k({className:e,...t}){return je("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%)]",e),...t})}import{jsx as _,jsxs as et}from"react/jsx-runtime";function I({className:e,...t}){return et("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",e),...t,children:[_(k,{className:"h-5 w-3/4"}),_(k,{className:"h-4 w-full"}),_(k,{className:"h-4 w-5/6"}),_(k,{className:"h-4 w-4/5"}),_(k,{className:"h-4 w-3/4"})]})}import{jsx as q,jsxs as xe}from"react/jsx-runtime";function J({children:e,loading:t=!1,title:r,className:n,onRetry:i}){return q(l,{className:n,onRetry:i,children:t?xe("div",{className:o("flex flex-col gap-4",n),children:[r?q("h2",{className:"text-lg font-semibold text-[var(--inkblot-semantic-color-text-primary)]",children:r}):null,q(I,{})]}):xe("div",{className:o("flex flex-col gap-4",n),children:[r?q("h2",{className:"text-lg font-semibold text-[var(--inkblot-semantic-color-text-primary)]",children:r}):null,e]})})}import{jsx as D,jsxs as tt}from"react/jsx-runtime";function ge({items:e,className:t}){return D(l,{className:t,children:D("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:e.map(r=>tt("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?D("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,D("div",{className:"flex h-8 w-8 items-center justify-center [&>svg]:h-5 [&>svg]:w-5",children:r.icon}),r.label?D("span",{className:"text-[10px] font-medium",children:r.label}):null]},r.id))})})}import{Mail as ye,FileText as Q,Zap as rt,Phone as ke,Link2 as ot}from"lucide-react";import{jsx as v,jsxs as Ne}from"react/jsx-runtime";function at(e){return e>=.8?"bg-[var(--inkblot-semantic-color-status-success)]":e>=.5?"bg-[var(--inkblot-semantic-color-status-info)]":e>=.2?"bg-[var(--inkblot-semantic-color-status-warning)]":"bg-[var(--inkblot-semantic-color-status-error)]"}var nt={EMAIL_OPENED:ye,EMAIL_SENT:ye,INVOICE_PAID:Q,INVOICE_OVERDUE:Q,CONTRACT_SIGNED:Q,STAGE_CHANGED:rt,CALL_COMPLETED:ke,PHONE_CALL:ke,RELATIONSHIP_DETECTED:ot};function it(e){return nt[e]??Q}function st(e){return e.metadata?.description??e.event_type.replace(/_/g," ").toLowerCase()}function lt(e){return e.metadata?.details??`${e.actor} - ${e.subject}`}function X({events:e,onEntitySelect:t,findEntity:r,emptyMessage:n="No hay actividad reciente",className:i}){let s=t?a=>{let u=r?.(a.subject)??r?.(a.actor);u&&t(u)}:void 0;return v(l,{children:v("div",{className:o("space-y-2",i),children:e.length===0?v("p",{className:"py-6 text-center text-sm text-[var(--inkblot-semantic-color-text-tertiary)]",children:n}):e.map(a=>{let d=!!(r?.(a.subject)??r?.(a.actor))&&!!s,N=it(a.event_type),R=Ne("div",{className:"flex flex-1 items-center gap-3",children:[v(N,{className:"h-4 w-4 shrink-0 text-[var(--inkblot-semantic-color-text-secondary)]","aria-hidden":!0}),v("div",{className:`h-2 w-2 shrink-0 rounded-full ${at(a.confidence_score)}`,"aria-hidden":!0}),Ne("div",{className:"min-w-0 flex-1",children:[v("p",{className:"text-sm font-medium text-[var(--inkblot-semantic-color-text-primary)]",children:st(a)}),v("p",{className:"text-xs text-[var(--inkblot-semantic-color-text-secondary)]",children:lt(a)})]}),v("span",{className:"shrink-0 text-xs text-[var(--inkblot-semantic-color-text-tertiary)]",children:a.timestamp})]}),y=a.id??`${a.actor}-${a.subject}-${a.timestamp}`;return v("div",{children:d?v("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:R}):v("div",{className:"flex w-full items-center gap-3 rounded-[var(--inkblot-radius-md)] bg-[var(--inkblot-semantic-color-background-secondary)] p-3",children:R})},y)})})})}import{NavLink as ct}from"react-router-dom";import{ClipboardList as dt,Brain as mt,BarChart3 as pt,Network as ut,Activity as vt,Settings as bt,Sparkles as ft}from"lucide-react";import{jsx as E,jsxs as gt}from"react/jsx-runtime";var xt=[{id:"home",path:"/",icon:dt,label:"Home"},{id:"intelligence",path:"/intelligence",icon:mt,label:"Intelligence"},{id:"pipeline",path:"/pipeline",icon:pt,label:"Pipeline"},{id:"graph",path:"/graph",icon:ut,label:"Graph"},{id:"events",path:"/events",icon:vt,label:"Events"},{id:"settings",path:"/settings",icon:bt,label:"Settings"}];function he({items:e=xt,brandLogo:t,brandTitle:r="Command Canvas \u2014 AI-native Interface",className:n}){return E(l,{children:gt("nav",{className:o("flex h-full flex-col gap-4 bg-[var(--inkblot-semantic-color-background-secondary)] p-3",n),children:[E("div",{className:"flex flex-col items-center gap-2",children:E("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:t??E(ft,{className:"h-5 w-5 text-[var(--inkblot-semantic-color-text-primary)]","aria-hidden":!0})})}),E("div",{className:"flex flex-1 flex-col gap-2",children:e.map(i=>{let s=i.icon;return E(ct,{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:E(s,{size:20,"aria-hidden":!0})},i.id)})})]})})}import{useState as Y,useCallback as yt,useRef as kt,useEffect as Nt}from"react";import{jsx as c,jsxs as j}from"react/jsx-runtime";function ht(e){let t=e.toLowerCase();return t.includes("entity")||t.includes("company")||t.includes("person")||t.includes("deal")||t.includes("profile")||t.includes("org")?"entity":t.includes("event")||t.includes("activity")||t.includes("recent")||t.includes("stream")||t.includes("log")?"event":"general"}function Et({entities:e}){let t=e[0];return t?j("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($,{name:t.name,entityType:t.type,metadata:t.metadata,edges:[{type:"WORKS_WITH",target:e[1]?.name},{type:"MANAGES",target:e[4]?.name}]})]}):null}function Ct({events:e}){return j("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:"}),e.slice(0,5).map(t=>c(W,{event:t},t.id??`${t.actor}-${t.subject}-${t.timestamp}`))]})}function St(){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 Ee({entities:e,events:t,onFocusEntity:r,findEntity:n,placeholder:i="Ask anything \u2014 deals, contacts, forecasts...",emptyMessage:s="Escribe para comenzar...",className:a}){let[u,d]=Y(""),[N,R]=Y([]),[y,se]=Y(!1),[Ie,Be]=Y(new Map),O=kt(null);Nt(()=>{O.current&&(O.current.scrollTop=O.current.scrollHeight)},[N,y]);let Re=yt(()=>{let b=u.trim();if(!b||y)return;let le=n?.(b);le&&r&&r(le);let Le={id:`msg-${Date.now()}`,role:"user",content:b,timestamp:new Date().toISOString()},ce=ht(b);R(G=>[...G,Le]),d(""),se(!0),setTimeout(()=>{let G={id:`msg-${Date.now()}-res`,role:"assistant",content:"",intent:ce,timestamp:new Date().toISOString()},F;switch(ce){case"entity":F=c(Et,{entities:e});break;case"event":F=c(Ct,{events:t});break;default:F=c(St,{})}Be(ee=>{let de=new Map(ee);return de.set(G.id,F),de}),R(ee=>[...ee,G]),se(!1)},1e3)},[u,y,e,t,r,n]);return j("div",{className:o("flex h-full flex-col",a),children:[j("div",{ref:O,className:"flex-1 space-y-4 overflow-y-auto p-4",children:[N.length===0&&!y?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})}):N.map(b=>c("div",{className:"flex flex-col gap-2",children:b.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:b.content})}):c("div",{className:"max-w-[90%]",children:Ie.get(b.id)??c("p",{className:"text-sm text-[var(--inkblot-semantic-color-text-primary)]",children:b.content})})},b.id)),y&&c("div",{className:"max-w-[70%]",children:c(I,{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(S,{promptValue:u,onPromptChange:d,onPromptSubmit:Re,isProcessing:y,placeholder:i})})]})}import{Sparkles as wt}from"lucide-react";import{jsx as V,jsxs as Ce}from"react/jsx-runtime";function Se({prompt:e,onPromptChange:t,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 Ce("div",{className:o("border-t border-[var(--inkblot-semantic-color-border-default)] bg-[var(--inkblot-semantic-color-background-secondary)] p-4",a),children:[Ce("div",{className:"flex items-center gap-3",children:[V("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:V(wt,{className:"h-5 w-5 text-[var(--inkblot-semantic-color-text-primary)]","aria-hidden":!0})}),V("div",{className:"flex-1",children:V(S,{promptValue:e,onPromptChange:t,onPromptSubmit:r,isProcessing:n,placeholder:i})})]}),s&&V("p",{className:"mt-2 text-xs text-[var(--inkblot-semantic-color-text-tertiary)]",children:s})]})}import{jsx as B,jsxs as ne}from"react/jsx-runtime";function we({events:e,title:t="Event Stream",showLive:r=!0,className:n}){return B(l,{children:ne("div",{className:o("flex h-full flex-col bg-[var(--inkblot-semantic-color-background-secondary)]",n),children:[ne("div",{className:"flex shrink-0 items-center justify-between border-b border-[var(--inkblot-semantic-color-border-default)] px-4 py-3",children:[B("span",{className:"text-xs font-medium uppercase tracking-wider text-[var(--inkblot-semantic-color-text-secondary)]",children:t}),r&&ne("div",{className:"flex items-center gap-2",children:[B("div",{className:"h-2 w-2 rounded-full bg-[var(--inkblot-semantic-color-status-success)]"}),B("span",{className:"text-xs text-[var(--inkblot-semantic-color-status-success)]",children:"Live"})]})]}),B("div",{className:"flex-1 overflow-auto p-4",children:B(X,{events:e})})]})})}import{jsx as m,jsxs as C}from"react/jsx-runtime";var Pt=[{label:"Pipeline Health",value:76},{label:"Churn Risk",value:28},{label:"Expansion Signal",value:64},{label:"Team Velocity",value:83}],Mt=[{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 Pe({loading:e,kpiCards:t=Pt,aiInsights:r=Mt,title:n="Intelligence Lab",subtitle:i="AI-generated insights - Updated 3 min ago",className:s}){return C("div",{className:o("flex h-full flex-col gap-4 overflow-y-auto p-4",s),children:[C("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(J,{loading:e,title:"",children:m(l,{children:C("div",{className:"flex flex-col gap-4",children:[m("div",{className:"grid grid-cols-2 gap-4 lg:grid-cols-4",children:t.map(a=>m(Z,{label:a.label,value:a.value,subtext:a.subtext,trend:a.trend},a.label))}),C("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:C("div",{className:"flex items-start justify-between gap-4 rounded-[var(--inkblot-radius-lg)] bg-[var(--inkblot-semantic-color-background-secondary)] p-4",children:[C("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})]}),C("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 H,jsxs as ie}from"react/jsx-runtime";function Me({navigation:e,eventStream:t,commandBar:r,children:n,className:i,eventStreamWidth:s="w-80"}){return ie("div",{className:o("flex h-screen w-screen overflow-hidden bg-[var(--inkblot-semantic-color-background-primary)]",i),children:[H("aside",{className:"flex h-full w-16 shrink-0 flex-col border-r border-[var(--inkblot-semantic-color-border-default)]",children:e}),H("main",{className:"flex flex-1 flex-col overflow-hidden",children:ie("div",{className:"flex min-h-0 flex-1",children:[ie("div",{className:"flex min-h-0 flex-1 flex-col overflow-hidden bg-[var(--inkblot-semantic-color-background-primary)]",children:[H("div",{className:"flex-1 overflow-auto",children:n}),H("div",{className:"shrink-0",children:r})]}),t&&H("aside",{className:o("flex h-full shrink-0 flex-col border-l border-[var(--inkblot-semantic-color-border-default)]",s),children:t})]})})]})}export{X as ActivityStream,he as AppNavigationRail,L as Button,Ee as ChatFeed,Se as CommandBar,S as CommandInterface,$ as EntityCard,pe as EntityCommandCard,z as ErrorBoundary,W as EventRow,be as EventStreamFeed,we as EventStreamSidebar,A as Input,Pe as IntelligenceLab,Z as IntelligenceScoreCard,Me as MainShell,fe as MetricComparisonList,J as ModuleContainer,l as ModuleErrorBoundary,I as ModuleSkeleton,ge as OSNavigationRail,k as Skeleton,U as StatusBadge};
package/package.json CHANGED
@@ -1,75 +1,83 @@
1
- {
2
- "name": "@citron-systems/citron-ui",
3
- "version": "1.0.0",
4
- "description": "Core UI component library for Citron CRM. Accessible, design-token-driven React components built with consistency and scalability in mind.",
5
- "type": "module",
6
- "main": "dist/index.js",
7
- "module": "dist/index.mjs",
8
- "types": "dist/index.d.ts",
9
- "exports": {
10
- ".": {
11
- "types": "./dist/index.d.ts",
12
- "import": "./dist/index.mjs",
13
- "require": "./dist/index.js"
14
- }
15
- },
16
- "files": [
17
- "dist"
18
- ],
19
- "scripts": {
20
- "dev": "storybook dev -p 6006",
21
- "build": "tsup",
22
- "build-storybook": "storybook build"
23
- },
24
- "repository": {
25
- "type": "git",
26
- "url": "https://github.com/Inkblot-Studio/citron-ui.git"
27
- },
28
- "license": "MIT",
29
- "keywords": [
30
- "react",
31
- "components",
32
- "ui",
33
- "design-system",
34
- "citron",
35
- "crm"
36
- ],
37
- "publishConfig": {
38
- "access": "public"
39
- },
40
- "peerDependencies": {
41
- "@citron-systems/citron-ds": "^1.0.0",
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"
48
- },
49
- "devDependencies": {
50
- "@chromatic-com/storybook": "^5.0.1",
51
- "@citron-systems/citron-ds": "^1.0.0",
52
- "@storybook/addon-a11y": "^10.2.10",
53
- "@storybook/addon-docs": "^10.2.10",
54
- "@storybook/addon-onboarding": "^10.2.10",
55
- "@storybook/addon-vitest": "^10.2.10",
56
- "@storybook/react-vite": "^10.2.10",
57
- "@types/node": "^25.3.0",
58
- "@types/react": "^19.2.14",
59
- "@types/react-dom": "^19.2.3",
60
- "@vitejs/plugin-react-swc": "^4.2.3",
61
- "@vitest/browser-playwright": "^4.0.18",
62
- "@vitest/coverage-v8": "^4.0.18",
63
- "autoprefixer": "^10.4.24",
64
- "playwright": "^1.58.2",
65
- "postcss": "^8.5.6",
66
- "react": "^19.2.4",
67
- "react-dom": "^19.2.4",
68
- "storybook": "^10.2.10",
69
- "tailwindcss": "^3.4.19",
70
- "tsup": "^8.5.1",
71
- "typescript": "~5.9.3",
72
- "vite": "^7.3.1",
73
- "vitest": "^4.0.18"
74
- }
75
- }
1
+ {
2
+ "name": "@citron-systems/citron-ui",
3
+ "version": "1.1.0",
4
+ "description": "Core UI component library for Citron CRM. Accessible, design-token-driven React components built with consistency and scalability in mind.",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "module": "dist/index.mjs",
8
+ "types": "dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "import": "./dist/index.mjs",
13
+ "require": "./dist/index.js"
14
+ }
15
+ },
16
+ "files": [
17
+ "dist"
18
+ ],
19
+ "scripts": {
20
+ "dev": "storybook dev -p 6006",
21
+ "build": "tsup",
22
+ "build-storybook": "storybook build"
23
+ },
24
+ "repository": {
25
+ "type": "git",
26
+ "url": "git+https://github.com/Inkblot-Studio/citron-ui.git"
27
+ },
28
+ "license": "MIT",
29
+ "keywords": [
30
+ "react",
31
+ "components",
32
+ "ui",
33
+ "design-system",
34
+ "citron",
35
+ "crm"
36
+ ],
37
+ "publishConfig": {
38
+ "access": "public"
39
+ },
40
+ "peerDependencies": {
41
+ "@citron-systems/citron-ds": "^1.0.0",
42
+ "react": "^19.0.0",
43
+ "react-dom": "^19.0.0",
44
+ "react-router-dom": "^7.0.0"
45
+ },
46
+ "devDependencies": {
47
+ "@chromatic-com/storybook": "^5.0.1",
48
+ "@citron-systems/citron-ds": "^1.0.0",
49
+ "@storybook/addon-a11y": "^10.2.10",
50
+ "@storybook/addon-docs": "^10.2.10",
51
+ "@storybook/addon-onboarding": "^10.2.10",
52
+ "@storybook/addon-vitest": "^10.2.10",
53
+ "@storybook/react-vite": "^10.2.10",
54
+ "@types/node": "^25.3.0",
55
+ "@types/react": "^19.2.14",
56
+ "@types/react-dom": "^19.2.3",
57
+ "@vitejs/plugin-react-swc": "^4.2.3",
58
+ "@vitest/browser-playwright": "^4.0.18",
59
+ "@vitest/coverage-v8": "^4.0.18",
60
+ "autoprefixer": "^10.4.24",
61
+ "playwright": "^1.58.2",
62
+ "postcss": "^8.5.6",
63
+ "react": "^19.2.4",
64
+ "react-dom": "^19.2.4",
65
+ "storybook": "^10.2.10",
66
+ "tailwindcss": "^3.4.19",
67
+ "tsup": "^8.5.1",
68
+ "typescript": "~5.9.3",
69
+ "vite": "^7.3.1",
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": "*"
82
+ }
83
+ }