@agentxjs/ui 0.0.9 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/dist/api/index.d.ts +2 -3
  2. package/dist/browser-Bab_T5G7.js +39 -0
  3. package/dist/browser-Bab_T5G7.js.map +1 -0
  4. package/dist/components/container/AgentList.d.ts +45 -0
  5. package/dist/components/container/Chat.d.ts +47 -0
  6. package/dist/components/container/ChatHeader.d.ts +41 -0
  7. package/dist/components/container/ToolCard.d.ts +69 -0
  8. package/dist/components/container/index.d.ts +24 -19
  9. package/dist/components/{message → container/message}/MessageList.d.ts +1 -1
  10. package/dist/components/{message → container/message}/index.d.ts +0 -1
  11. package/dist/components/{message → container/message}/items/AssistantMessage.d.ts +1 -1
  12. package/dist/components/{message → container/message}/items/ErrorAlert.d.ts +1 -1
  13. package/dist/components/{message → container/message}/items/ToolCallMessage.d.ts +1 -1
  14. package/dist/components/{message → container/message}/items/ToolResultMessage.d.ts +1 -1
  15. package/dist/components/{message → container/message}/items/ToolUseMessage.d.ts +1 -1
  16. package/dist/components/{message → container/message}/items/UserMessage.d.ts +1 -1
  17. package/dist/components/{message → container/message}/items/index.d.ts +0 -1
  18. package/dist/components/{message → container/message}/parts/ToolResultContent.d.ts +1 -1
  19. package/dist/components/element/Badge.d.ts +1 -1
  20. package/dist/components/element/Button.d.ts +2 -2
  21. package/dist/components/element/EmojiPicker.d.ts +64 -0
  22. package/dist/components/element/MessageAvatar.d.ts +1 -1
  23. package/dist/components/element/Toast.d.ts +71 -0
  24. package/dist/components/element/index.d.ts +4 -0
  25. package/dist/components/pane/InputPane.d.ts +74 -0
  26. package/dist/components/pane/InputToolBar.d.ts +74 -0
  27. package/dist/components/pane/ListPane.d.ts +128 -0
  28. package/dist/components/pane/MessagePane.d.ts +111 -0
  29. package/dist/components/pane/NavBar.d.ts +71 -0
  30. package/dist/components/pane/index.d.ts +32 -0
  31. package/dist/components/studio/Studio.d.ts +23 -28
  32. package/dist/components/studio/index.d.ts +13 -6
  33. package/dist/globals.css +1 -200
  34. package/dist/hooks/index.d.ts +27 -13
  35. package/dist/hooks/useAgent.d.ts +44 -13
  36. package/dist/hooks/useAgentX.d.ts +7 -6
  37. package/dist/hooks/useImages.d.ts +84 -0
  38. package/dist/index.js +21508 -61
  39. package/dist/index.js.map +1 -1
  40. package/package.json +6 -5
  41. package/dist/components/container/AgentPane.d.ts +0 -56
  42. package/dist/components/container/ContainerView.d.ts +0 -119
  43. package/dist/components/container/DefinitionPane.d.ts +0 -27
  44. package/dist/components/container/InputPane.d.ts +0 -44
  45. package/dist/components/container/InputToolBar.d.ts +0 -22
  46. package/dist/components/container/MessagePane.d.ts +0 -32
  47. package/dist/components/container/SessionPane.d.ts +0 -35
  48. package/dist/components/container/types.d.ts +0 -67
  49. package/dist/components/input/InputBox.d.ts +0 -43
  50. package/dist/components/input/index.d.ts +0 -1
  51. package/dist/components/message/StatusIndicator.d.ts +0 -28
  52. package/dist/components/message/items/SystemMessage.d.ts +0 -25
  53. package/dist/hooks/useSession.d.ts +0 -79
  54. package/dist/index-B8Ijbzyc.js +0 -27676
  55. package/dist/index-B8Ijbzyc.js.map +0 -1
  56. package/dist/index-BtOS4F-X.js +0 -3013
  57. package/dist/index-BtOS4F-X.js.map +0 -1
  58. /package/dist/components/{message → container/message}/parts/FileContent.d.ts +0 -0
  59. /package/dist/components/{message → container/message}/parts/ImageContent.d.ts +0 -0
  60. /package/dist/components/{message → container/message}/parts/TextContent.d.ts +0 -0
  61. /package/dist/components/{message → container/message}/parts/ThinkingContent.d.ts +0 -0
  62. /package/dist/components/{message → container/message}/parts/ToolCallContent.d.ts +0 -0
  63. /package/dist/components/{message → container/message}/parts/index.d.ts +0 -0
@@ -0,0 +1,74 @@
1
+ /**
2
+ * InputToolBar - Toolbar buttons for input area
3
+ *
4
+ * A pure UI component for displaying toolbar buttons above or below
5
+ * an input area. Supports icon buttons, toggles, and dropdowns.
6
+ *
7
+ * @example
8
+ * ```tsx
9
+ * <InputToolBar
10
+ * items={[
11
+ * { id: 'attach', icon: <Paperclip />, label: 'Attach file' },
12
+ * { id: 'emoji', icon: <Smile />, label: 'Add emoji' },
13
+ * ]}
14
+ * onItemClick={(id) => handleAction(id)}
15
+ * />
16
+ * ```
17
+ */
18
+ import * as React from "react";
19
+ /**
20
+ * Toolbar item data
21
+ */
22
+ export interface ToolBarItem {
23
+ /**
24
+ * Unique identifier
25
+ */
26
+ id: string;
27
+ /**
28
+ * Icon element
29
+ */
30
+ icon: React.ReactNode;
31
+ /**
32
+ * Tooltip label
33
+ */
34
+ label: string;
35
+ /**
36
+ * Whether the item is currently active/toggled
37
+ */
38
+ active?: boolean;
39
+ /**
40
+ * Whether the item is disabled
41
+ */
42
+ disabled?: boolean;
43
+ /**
44
+ * Visual variant
45
+ */
46
+ variant?: "default" | "primary" | "danger";
47
+ }
48
+ export interface InputToolBarProps {
49
+ /**
50
+ * Toolbar items to display
51
+ */
52
+ items: ToolBarItem[];
53
+ /**
54
+ * Items to display on the right side
55
+ */
56
+ rightItems?: ToolBarItem[];
57
+ /**
58
+ * Callback when an item is clicked
59
+ */
60
+ onItemClick?: (id: string) => void;
61
+ /**
62
+ * Size of the toolbar buttons
63
+ * @default 'sm'
64
+ */
65
+ size?: "xs" | "sm" | "md";
66
+ /**
67
+ * Additional class name
68
+ */
69
+ className?: string;
70
+ }
71
+ /**
72
+ * InputToolBar component
73
+ */
74
+ export declare const InputToolBar: React.ForwardRefExoticComponent<InputToolBarProps & React.RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,128 @@
1
+ /**
2
+ * ListPane - Generic list panel component
3
+ *
4
+ * A pure UI component for displaying lists with:
5
+ * - Header with title and action button
6
+ * - Optional search input
7
+ * - Scrollable list of items
8
+ * - Empty state handling
9
+ * - Loading state
10
+ *
11
+ * This component knows nothing about business concepts like
12
+ * "Agent", "Image", "Session", etc. It only deals with generic
13
+ * "items" that have id, title, subtitle, etc.
14
+ *
15
+ * @example
16
+ * ```tsx
17
+ * <ListPane
18
+ * title="Conversations"
19
+ * items={items}
20
+ * selectedId={selectedId}
21
+ * onSelect={(id) => setSelectedId(id)}
22
+ * onDelete={(id) => handleDelete(id)}
23
+ * onNew={() => handleNew()}
24
+ * searchable
25
+ * />
26
+ * ```
27
+ */
28
+ import * as React from "react";
29
+ /**
30
+ * Item data for ListPane
31
+ */
32
+ export interface ListPaneItem {
33
+ /**
34
+ * Unique identifier
35
+ */
36
+ id: string;
37
+ /**
38
+ * Main title
39
+ */
40
+ title: string;
41
+ /**
42
+ * Optional subtitle or description
43
+ */
44
+ subtitle?: React.ReactNode;
45
+ /**
46
+ * Optional leading content (icon, avatar, etc.)
47
+ */
48
+ leading?: React.ReactNode;
49
+ /**
50
+ * Optional trailing content (badge, status, etc.)
51
+ */
52
+ trailing?: React.ReactNode;
53
+ /**
54
+ * Whether this item is currently active
55
+ */
56
+ active?: boolean;
57
+ /**
58
+ * Timestamp for display
59
+ */
60
+ timestamp?: number;
61
+ }
62
+ export interface ListPaneProps {
63
+ /**
64
+ * Panel title displayed in header
65
+ */
66
+ title?: string;
67
+ /**
68
+ * List of items to display
69
+ */
70
+ items: ListPaneItem[];
71
+ /**
72
+ * Currently selected item ID
73
+ */
74
+ selectedId?: string | null;
75
+ /**
76
+ * Whether the list is loading
77
+ */
78
+ isLoading?: boolean;
79
+ /**
80
+ * Enable search functionality
81
+ */
82
+ searchable?: boolean;
83
+ /**
84
+ * Placeholder for search input
85
+ */
86
+ searchPlaceholder?: string;
87
+ /**
88
+ * Show new item button in header
89
+ */
90
+ showNewButton?: boolean;
91
+ /**
92
+ * Label for new button (tooltip)
93
+ */
94
+ newButtonLabel?: string;
95
+ /**
96
+ * Empty state configuration
97
+ */
98
+ emptyState?: {
99
+ icon?: React.ReactNode;
100
+ title: string;
101
+ description?: string;
102
+ actionLabel?: string;
103
+ };
104
+ /**
105
+ * Callback when an item is selected
106
+ */
107
+ onSelect?: (id: string) => void;
108
+ /**
109
+ * Callback when delete is clicked on an item
110
+ */
111
+ onDelete?: (id: string) => void;
112
+ /**
113
+ * Callback when new button is clicked
114
+ */
115
+ onNew?: () => void;
116
+ /**
117
+ * Custom render function for item actions
118
+ */
119
+ renderItemActions?: (item: ListPaneItem) => React.ReactNode;
120
+ /**
121
+ * Additional class name
122
+ */
123
+ className?: string;
124
+ }
125
+ /**
126
+ * ListPane component
127
+ */
128
+ export declare const ListPane: React.ForwardRefExoticComponent<ListPaneProps & React.RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,111 @@
1
+ import { ToolStatus } from '../container/ToolCard';
2
+ /**
3
+ * MessagePane - Message display area component
4
+ *
5
+ * A pure UI component for displaying messages with:
6
+ * - User and assistant message bubbles
7
+ * - Streaming text indicator
8
+ * - Auto-scroll to bottom
9
+ * - Empty state
10
+ * - Markdown rendering support
11
+ *
12
+ * This component knows nothing about business concepts.
13
+ * It only deals with generic "messages" with role and content.
14
+ *
15
+ * @example
16
+ * ```tsx
17
+ * <MessagePane
18
+ * items={messages}
19
+ * streamingText="Currently typing..."
20
+ * renderContent={(content) => <Markdown>{content}</Markdown>}
21
+ * />
22
+ * ```
23
+ */
24
+ import * as React from "react";
25
+ /**
26
+ * Tool metadata for ToolCard rendering
27
+ */
28
+ export interface ToolMetadata {
29
+ /** Tool name (e.g., "Bash", "Read") */
30
+ toolName: string;
31
+ /** Tool call ID */
32
+ toolId?: string;
33
+ /** Tool status */
34
+ status: ToolStatus;
35
+ /** Tool input parameters */
36
+ input?: Record<string, unknown>;
37
+ /** Tool output */
38
+ output?: unknown;
39
+ /** Whether output is an error */
40
+ isError?: boolean;
41
+ /** Execution duration in seconds */
42
+ duration?: number;
43
+ }
44
+ /**
45
+ * Message item data
46
+ */
47
+ export interface MessagePaneItem {
48
+ /**
49
+ * Unique identifier
50
+ */
51
+ id: string;
52
+ /**
53
+ * Message role
54
+ */
55
+ role: "user" | "assistant" | "system" | "tool" | "error";
56
+ /**
57
+ * Message content (string for text, any for structured content)
58
+ */
59
+ content: string | unknown;
60
+ /**
61
+ * Timestamp
62
+ */
63
+ timestamp?: number;
64
+ /**
65
+ * Optional metadata (tool info for role="tool", errorCode for role="error")
66
+ */
67
+ metadata?: Record<string, unknown>;
68
+ /**
69
+ * Tool-specific metadata (for role="tool")
70
+ */
71
+ toolMetadata?: ToolMetadata;
72
+ }
73
+ export interface MessagePaneProps {
74
+ /**
75
+ * Messages to display
76
+ */
77
+ items: MessagePaneItem[];
78
+ /**
79
+ * Current streaming text (displays with typing indicator)
80
+ */
81
+ streamingText?: string;
82
+ /**
83
+ * Whether currently loading/thinking
84
+ */
85
+ isLoading?: boolean;
86
+ /**
87
+ * Custom content renderer
88
+ * @default Uses MarkdownText for strings
89
+ */
90
+ renderContent?: (content: unknown, item: MessagePaneItem) => React.ReactNode;
91
+ /**
92
+ * Custom avatar renderer
93
+ */
94
+ renderAvatar?: (role: MessagePaneItem["role"]) => React.ReactNode;
95
+ /**
96
+ * Empty state configuration
97
+ */
98
+ emptyState?: {
99
+ icon?: React.ReactNode;
100
+ title: string;
101
+ description?: string;
102
+ };
103
+ /**
104
+ * Additional class name
105
+ */
106
+ className?: string;
107
+ }
108
+ /**
109
+ * MessagePane component
110
+ */
111
+ export declare const MessagePane: React.ForwardRefExoticComponent<MessagePaneProps & React.RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,71 @@
1
+ /**
2
+ * NavBar - Icon navigation bar component
3
+ *
4
+ * A simplified wrapper around ActivityBar for common navigation patterns.
5
+ * Pure UI component with no business logic.
6
+ *
7
+ * @example
8
+ * ```tsx
9
+ * <NavBar
10
+ * items={[
11
+ * { id: 'chat', icon: <MessageSquare />, label: 'Chat' },
12
+ * { id: 'settings', icon: <Settings />, label: 'Settings' },
13
+ * ]}
14
+ * activeId="chat"
15
+ * onSelect={(id) => setActiveId(id)}
16
+ * />
17
+ * ```
18
+ */
19
+ import * as React from "react";
20
+ /**
21
+ * Item data for NavBar
22
+ */
23
+ export interface NavBarItem {
24
+ /**
25
+ * Unique identifier
26
+ */
27
+ id: string;
28
+ /**
29
+ * Icon element
30
+ */
31
+ icon: React.ReactNode;
32
+ /**
33
+ * Tooltip label
34
+ */
35
+ label: string;
36
+ /**
37
+ * Optional badge (notification count, etc.)
38
+ */
39
+ badge?: string | number;
40
+ }
41
+ export interface NavBarProps {
42
+ /**
43
+ * Main navigation items (top section)
44
+ */
45
+ items: NavBarItem[];
46
+ /**
47
+ * Bottom navigation items (settings, account, etc.)
48
+ */
49
+ bottomItems?: NavBarItem[];
50
+ /**
51
+ * Currently active item ID
52
+ */
53
+ activeId?: string;
54
+ /**
55
+ * Callback when an item is selected
56
+ */
57
+ onSelect?: (id: string) => void;
58
+ /**
59
+ * Position of the nav bar
60
+ * @default 'left'
61
+ */
62
+ position?: "left" | "right";
63
+ /**
64
+ * Additional class name
65
+ */
66
+ className?: string;
67
+ }
68
+ /**
69
+ * NavBar component
70
+ */
71
+ export declare const NavBar: React.ForwardRefExoticComponent<NavBarProps & React.RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Pane Components - Pure UI Layer
3
+ *
4
+ * Pure presentation components with NO business logic. They:
5
+ * - Accept data via props
6
+ * - Emit user actions via callbacks
7
+ * - Use layout and element components internally
8
+ * - Know nothing about AgentX, Image, Agent, etc.
9
+ *
10
+ * Architecture:
11
+ * ```
12
+ * layout/ → element/ → pane/ → container/ → studio/
13
+ * (HERE)
14
+ * ```
15
+ *
16
+ * Components:
17
+ * - NavBar: Icon navigation bar (wraps ActivityBar)
18
+ * - ListPane: Generic list panel with search and actions
19
+ * - MessagePane: Message display area
20
+ * - InputPane: Input area with toolbar
21
+ * - InputToolBar: Toolbar buttons for input
22
+ */
23
+ export { NavBar } from './NavBar';
24
+ export type { NavBarProps, NavBarItem } from './NavBar';
25
+ export { ListPane } from './ListPane';
26
+ export type { ListPaneProps, ListPaneItem } from './ListPane';
27
+ export { MessagePane } from './MessagePane';
28
+ export type { MessagePaneProps, MessagePaneItem, ToolMetadata } from './MessagePane';
29
+ export { InputPane } from './InputPane';
30
+ export type { InputPaneProps } from './InputPane';
31
+ export { InputToolBar } from './InputToolBar';
32
+ export type { InputToolBarProps, ToolBarItem } from './InputToolBar';
@@ -1,47 +1,42 @@
1
- import { AgentX } from '@agentxjs/types';
2
- import { SessionItem } from '../../hooks/useSession';
3
- import { AgentDefinitionItem } from '../container/types';
4
- /**
5
- * Props for Studio component
6
- */
1
+ import { AgentX } from 'agentxjs';
7
2
  export interface StudioProps {
8
3
  /**
9
- * AgentX instance for backend communication
4
+ * AgentX instance
10
5
  */
11
- agentx: AgentX;
6
+ agentx: AgentX | null;
12
7
  /**
13
- * Current user ID
8
+ * Container ID for user isolation
9
+ * Each user should have their own container to isolate their conversations
10
+ * @default "default"
14
11
  */
15
- userId: string;
12
+ containerId?: string;
16
13
  /**
17
- * User's dedicated Container ID
18
- * All agent operations will use this container
14
+ * Width of the sidebar (AgentList)
15
+ * @default 280
19
16
  */
20
- containerId: string;
17
+ sidebarWidth?: number;
21
18
  /**
22
- * Available agent definitions
19
+ * Enable search in AgentList
20
+ * @default true
23
21
  */
24
- definitions: AgentDefinitionItem[];
22
+ searchable?: boolean;
25
23
  /**
26
- * Optional callback when session changes
24
+ * Show save button in Chat (not needed in Image-First model)
25
+ * @default false
27
26
  */
28
- onSessionChange?: (session: SessionItem | null) => void;
27
+ showSaveButton?: boolean;
29
28
  /**
30
- * Optional callback when definition changes
29
+ * Input height ratio for Chat
30
+ * @default 0.25
31
31
  */
32
- onDefinitionChange?: (definition: AgentDefinitionItem | null) => void;
32
+ inputHeightRatio?: number;
33
33
  /**
34
- * Optional custom className
34
+ * Additional class name
35
35
  */
36
36
  className?: string;
37
37
  }
38
38
  /**
39
- * Studio - Integration layer component
40
- *
41
- * Integrates:
42
- * - useSession for session management (maps to agentx.sessions)
43
- * - useAgent for agent state (maps to agentx.agents)
44
- * - ContainerView layout components
39
+ * Studio component
45
40
  */
46
- export declare function Studio({ agentx, userId, containerId, definitions, onSessionChange, onDefinitionChange, className, }: StudioProps): import("react/jsx-runtime").JSX.Element;
47
- export default Studio;
41
+ export declare function Studio({ agentx, containerId, sidebarWidth, searchable, showSaveButton, // Default to false in Image-First model
42
+ inputHeightRatio, className, }: StudioProps): import("react/jsx-runtime").JSX.Element;
@@ -1,9 +1,16 @@
1
1
  /**
2
- * Studio - Integration layer for multi-agent chat UI
2
+ * Studio Components - Top-level Workspace
3
3
  *
4
- * Studio is the frontend-specific concept that integrates:
5
- * - useSession (maps to agentx.sessions)
6
- * - useAgent (maps to agentx.agents)
7
- * - ContainerView (pure UI layout)
4
+ * Orchestration layer that:
5
+ * - Manages AgentX connection
6
+ * - Coordinates between containers
7
+ * - Handles global state (current agent, current image)
8
+ * - Provides ready-to-use interface
9
+ *
10
+ * Architecture:
11
+ * ```
12
+ * container/ (AgentList + Chat) = studio/ (complete workspace)
13
+ * ```
8
14
  */
9
- export { Studio, type StudioProps } from './Studio';
15
+ export { Studio } from './Studio';
16
+ export type { StudioProps } from './Studio';