@supernal/interface-nextjs 1.0.21 → 1.0.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.css ADDED
@@ -0,0 +1,110 @@
1
+ @import "katex/dist/katex.min.css";
2
+
3
+ /* src/styles/markdown.css */
4
+ .markdown-content {
5
+ font-size: 0.9375rem;
6
+ line-height: 1.6;
7
+ }
8
+ .markdown-content code {
9
+ font-family:
10
+ ui-monospace,
11
+ SFMono-Regular,
12
+ "SF Mono",
13
+ Menlo,
14
+ Monaco,
15
+ Consolas,
16
+ "Liberation Mono",
17
+ "Courier New",
18
+ monospace;
19
+ }
20
+ .markdown-content :not(pre) > code {
21
+ font-size: 0.875em;
22
+ font-weight: 400;
23
+ }
24
+ .mermaid-diagram {
25
+ display: flex;
26
+ justify-content: center;
27
+ align-items: center;
28
+ }
29
+ .mermaid-diagram svg {
30
+ max-width: 100%;
31
+ height: auto;
32
+ }
33
+ .mermaid-dark svg {
34
+ background: transparent;
35
+ }
36
+ .mermaid-light svg {
37
+ background: transparent;
38
+ }
39
+ .katex {
40
+ font-size: 1.05em;
41
+ }
42
+ .katex-display {
43
+ margin: 1rem 0;
44
+ overflow-x: auto;
45
+ overflow-y: hidden;
46
+ }
47
+ .dark .katex {
48
+ color: rgb(229, 231, 235);
49
+ }
50
+ .markdown-content table {
51
+ display: block;
52
+ max-width: 100%;
53
+ overflow-x: auto;
54
+ }
55
+ .markdown-content ul ul,
56
+ .markdown-content ol ul,
57
+ .markdown-content ul ol,
58
+ .markdown-content ol ol {
59
+ margin-top: 0.5rem;
60
+ margin-bottom: 0.5rem;
61
+ margin-left: 1.5rem;
62
+ }
63
+ .admonition {
64
+ margin: 1rem 0;
65
+ padding: 1rem;
66
+ border-left-width: 4px;
67
+ border-radius: 0.375rem;
68
+ }
69
+ .admonition-tip {
70
+ border-color: #10b981;
71
+ }
72
+ .admonition-warning {
73
+ border-color: #f59e0b;
74
+ }
75
+ .admonition-danger {
76
+ border-color: #ef4444;
77
+ }
78
+ .admonition-info {
79
+ border-color: #3b82f6;
80
+ }
81
+ .markdown-content input[type=checkbox] {
82
+ margin-right: 0.5rem;
83
+ cursor: pointer;
84
+ }
85
+ .markdown-content del {
86
+ opacity: 0.7;
87
+ }
88
+ .markdown-content h1,
89
+ .markdown-content h2,
90
+ .markdown-content h3,
91
+ .markdown-content h4,
92
+ .markdown-content h5,
93
+ .markdown-content h6 {
94
+ scroll-margin-top: 1rem;
95
+ }
96
+ .markdown-content pre[class*=language-] {
97
+ margin-top: 0;
98
+ margin-bottom: 0;
99
+ }
100
+ @media (max-width: 640px) {
101
+ .markdown-content {
102
+ font-size: 0.875rem;
103
+ }
104
+ .katex {
105
+ font-size: 1em;
106
+ }
107
+ .markdown-content pre {
108
+ font-size: 0.75rem;
109
+ }
110
+ }
package/dist/index.d.mts CHANGED
@@ -1,11 +1,11 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import React from 'react';
2
+ import React$1 from 'react';
3
3
  import { NavigationGraph, NavigationPath, NavigationContext, ToolMetadata } from '@supernal/interface/browser';
4
4
  import { AIInterface } from '@supernal/interface';
5
5
  export { AICommand, AIResponse } from '@supernal/interface';
6
6
 
7
7
  interface SupernalProviderProps {
8
- children: React.ReactNode;
8
+ children: React$1.ReactNode;
9
9
  theme?: 'light' | 'dark' | 'auto';
10
10
  position?: 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left';
11
11
  mode?: 'fuzzy' | 'ai';
@@ -13,14 +13,19 @@ interface SupernalProviderProps {
13
13
  welcomeMessage?: string;
14
14
  routes?: Record<string, string>;
15
15
  disabled?: boolean;
16
+ glassMode?: boolean;
17
+ logo?: string;
18
+ variant?: 'full' | 'floating' | 'drawer' | 'subtitle';
19
+ displayMode?: 'auto' | 'floating' | 'full' | 'drawer' | 'subtitle';
20
+ drawerSide?: 'left' | 'right';
16
21
  onNavigate?: (context: string) => void;
17
22
  onToolExecute?: (tool: string, result: any) => void;
18
23
  }
19
- declare function SupernalProvider({ children, theme, position, mode, apiKey, welcomeMessage, routes, disabled, onNavigate, onToolExecute, }: SupernalProviderProps): react_jsx_runtime.JSX.Element;
24
+ declare function SupernalProvider({ children, theme, position, mode, apiKey, welcomeMessage, routes, disabled, glassMode, logo, variant, displayMode, drawerSide, onNavigate, onToolExecute, }: SupernalProviderProps): react_jsx_runtime.JSX.Element;
20
25
 
21
26
  declare function NavigationContextProvider({ value, children }: {
22
27
  value: string;
23
- children: React.ReactNode;
28
+ children: React$1.ReactNode;
24
29
  }): react_jsx_runtime.JSX.Element;
25
30
  /**
26
31
  * Hook to access the NavigationGraph singleton
@@ -132,12 +137,15 @@ interface ChatContextType {
132
137
  }
133
138
  declare function useChatContext(): ChatContextType;
134
139
  declare function ChatProvider({ children, mode, apiKey, onToolExecute, }: {
135
- children: React.ReactNode;
140
+ children: React$1.ReactNode;
136
141
  mode?: 'fuzzy' | 'ai';
137
142
  apiKey?: string;
138
143
  onToolExecute?: (tool: string, result: any) => void;
139
144
  }): react_jsx_runtime.JSX.Element;
140
145
 
146
+ /**
147
+ * Type definitions for ChatBubble component
148
+ */
141
149
  interface Message {
142
150
  id: string;
143
151
  text: string;
@@ -145,10 +153,13 @@ interface Message {
145
153
  timestamp: string;
146
154
  }
147
155
  type Position = 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left' | 'left-center' | 'right-center' | 'bottom-center';
148
- type Variant = 'full' | 'floating';
156
+ type Variant = 'full' | 'floating' | 'drawer' | 'subtitle';
157
+ type DisplayMode = 'auto' | 'floating' | 'full' | 'drawer' | 'subtitle';
149
158
  interface ChatBubbleConfig {
150
159
  /** Optional title for the chat header */
151
160
  title?: string;
161
+ /** Optional logo URL or data URI. Defaults to embedded Supernal Interface logo */
162
+ logo?: string;
152
163
  /** Optional avatar/icon (emoji, URL, or React node) */
153
164
  avatar?: string | React.ReactNode;
154
165
  /** Optional description shown in info popup */
@@ -182,7 +193,7 @@ interface ChatBubbleProps {
182
193
  onClearChat?: () => void;
183
194
  /** Positioning mode */
184
195
  position?: Position;
185
- /** Variant: 'full' for expanded panel, 'floating' for mini draggable bubble */
196
+ /** Variant: 'full' for expanded panel, 'floating' for mini draggable bubble, 'drawer' for mobile swipeable drawer */
186
197
  variant?: Variant;
187
198
  /** Configuration for branding, text, and theme */
188
199
  config?: ChatBubbleConfig;
@@ -190,8 +201,71 @@ interface ChatBubbleProps {
190
201
  defaultExpanded?: boolean;
191
202
  /** Storage key for persisting state */
192
203
  storageKey?: string;
204
+ /** Display mode: 'auto' switches based on viewport, or manually set 'full'/'floating'/'drawer' */
205
+ displayMode?: DisplayMode;
206
+ /** Which side the drawer opens from (for drawer variant) */
207
+ drawerSide?: 'left' | 'right';
208
+ }
209
+
210
+ declare const ChatBubble: ({ messages, onSendMessage, onClearChat, position, variant, config: userConfig, defaultExpanded, storageKey, displayMode: propDisplayMode, drawerSide: propDrawerSide, }: ChatBubbleProps) => react_jsx_runtime.JSX.Element | null;
211
+
212
+ /**
213
+ * SubtitleOverlay Component - Minimalist Voice-First Overlay
214
+ *
215
+ * A transparent subtitle-style chat overlay that floats over website content.
216
+ * Features:
217
+ * - Mobile-first: 100% opacity on mobile (always visible)
218
+ * - Desktop: Adaptive 10-90% opacity based on activity
219
+ * - Voice/text fusion with smart detection
220
+ * - Supernal @/ brand icon instead of microphone
221
+ * - Seamless mode switching
222
+ */
223
+
224
+ interface SubtitleOverlayProps {
225
+ messages: Message[];
226
+ inputValue: string;
227
+ onInputChange: (value: string) => void;
228
+ onSendMessage: (text: string) => void;
229
+ voiceEnabled: boolean;
230
+ isListening: boolean;
231
+ onMicClick: () => void;
232
+ theme: 'light' | 'dark';
233
+ config: ChatBubbleConfig;
234
+ sttTranscript?: string;
235
+ resetTranscript?: () => void;
236
+ onSwitchToFullMode?: () => void;
193
237
  }
194
- declare const ChatBubble: ({ messages, onSendMessage, onClearChat, position, variant, config: userConfig, defaultExpanded, storageKey, }: ChatBubbleProps) => react_jsx_runtime.JSX.Element;
238
+ declare const SubtitleOverlay: React$1.FC<SubtitleOverlayProps>;
239
+
240
+ /**
241
+ * Chat Bubble Settings Modal Component
242
+ *
243
+ * Settings modal for ChatBubble configuration:
244
+ * - Theme (light/dark)
245
+ * - Glass mode (glassmorphism effect)
246
+ * - Notifications
247
+ */
248
+ interface ChatBubbleSettings {
249
+ theme: 'light' | 'dark';
250
+ glassMode: boolean;
251
+ notifications: boolean;
252
+ displayMode?: 'auto' | 'floating' | 'full' | 'drawer' | 'subtitle';
253
+ drawerSide?: 'left' | 'right';
254
+ subtitleOverlayEnabled?: boolean;
255
+ voiceEnabled: boolean;
256
+ usePremiumVoices: boolean;
257
+ autoReadResponses: boolean;
258
+ ttsSpeed: number;
259
+ sttAutoRecordTimeout: number;
260
+ sttAutoExecute: boolean;
261
+ }
262
+ interface ChatBubbleSettingsModalProps {
263
+ isOpen: boolean;
264
+ onClose: () => void;
265
+ settings: ChatBubbleSettings;
266
+ onSettingsChange: (settings: ChatBubbleSettings) => void;
267
+ }
268
+ declare function ChatBubbleSettingsModal({ isOpen, onClose, settings, onSettingsChange, }: ChatBubbleSettingsModalProps): react_jsx_runtime.JSX.Element | null;
195
269
 
196
270
  interface ChatInputContextType {
197
271
  /**
@@ -205,16 +279,114 @@ interface ChatInputContextType {
205
279
  }
206
280
  declare function useChatInput(): ChatInputContextType;
207
281
  declare function ChatInputProvider({ children }: {
208
- children: React.ReactNode;
282
+ children: React$1.ReactNode;
209
283
  }): react_jsx_runtime.JSX.Element;
210
284
 
211
285
  interface AutoNavigationContextProps {
212
- children: React.ReactNode;
286
+ children: React$1.ReactNode;
213
287
  routes?: Record<string, string>;
214
288
  onNavigate?: (context: string) => void;
215
289
  }
216
290
  declare function AutoNavigationContext({ children, routes, onNavigate, }: AutoNavigationContextProps): react_jsx_runtime.JSX.Element;
217
291
 
292
+ interface ToolMenuCategory {
293
+ key: string;
294
+ displayName: string;
295
+ tools: ToolMetadata[];
296
+ }
297
+ interface UseToolMenuReturn {
298
+ isOpen: boolean;
299
+ open: () => void;
300
+ close: () => void;
301
+ toggle: () => void;
302
+ categories: ToolMenuCategory[];
303
+ totalTools: number;
304
+ contextLabel: string;
305
+ }
306
+ declare function useToolMenu(): UseToolMenuReturn;
307
+
308
+ interface ToolMenuPopupProps {
309
+ isOpen: boolean;
310
+ onClose: () => void;
311
+ categories: ToolMenuCategory[];
312
+ totalTools: number;
313
+ contextLabel: string;
314
+ }
315
+ declare const ToolMenuPopup: React$1.FC<ToolMenuPopupProps>;
316
+
317
+ /**
318
+ * ToolMenuPopupTrigger
319
+ *
320
+ * Manages keyboard shortcut triggers for the ToolMenuPopup.
321
+ * Renders the popup when open.
322
+ *
323
+ * Triggers:
324
+ * - Keyboard: `/` or `?` from an empty input (subtitle mode), `?` outside inputs, or Cmd/Ctrl+Shift+/
325
+ */
326
+ declare const ToolMenuPopupTrigger: React$1.FC;
327
+
328
+ /**
329
+ * Component Names - Named contracts for UI elements, variants, and layouts
330
+ *
331
+ * These provide type-safe references throughout the application.
332
+ * In production, consumers should generate their own ComponentNames using
333
+ * `si scan-names` and pass them via config.
334
+ *
335
+ * Naming convention:
336
+ * - Variant(X) → XVariant (e.g., Variant(ChatBubble) → ChatBubbleVariant)
337
+ * - Layout(X) → XLayout (e.g., Layout(Page) → PageLayout)
338
+ */
339
+ declare const Components: {
340
+ readonly ChatToggleButton: "chat-toggle-button";
341
+ readonly ChatInput: "chat-message-input";
342
+ readonly ChatSendButton: "chat-send-button";
343
+ readonly ChatClearButton: "chat-clear-button";
344
+ };
345
+ /**
346
+ * ChatBubbleVariant - Display modes for the chat interface
347
+ * Usage: Variant(ChatBubble) → ChatBubbleVariant
348
+ */
349
+ declare const ChatBubbleVariant: {
350
+ readonly full: "full";
351
+ readonly floating: "floating";
352
+ readonly drawer: "drawer";
353
+ readonly subtitle: "subtitle";
354
+ };
355
+ type ChatBubbleVariantType = keyof typeof ChatBubbleVariant;
356
+ type ChatBubbleVariantValue = typeof ChatBubbleVariant[ChatBubbleVariantType];
357
+ /**
358
+ * PageLayout - Page structure variants
359
+ * Usage: Layout(Page) → PageLayout
360
+ */
361
+ declare const PageLayout: {
362
+ readonly default: "default";
363
+ readonly landing: "landing";
364
+ readonly docs: "docs";
365
+ readonly blog: "blog";
366
+ };
367
+ type PageLayoutType = keyof typeof PageLayout;
368
+ type PageLayoutValue = typeof PageLayout[PageLayoutType];
369
+
370
+ interface MessageRendererProps {
371
+ content: string;
372
+ theme?: 'light' | 'dark';
373
+ }
374
+ declare function MessageRenderer({ content, theme }: MessageRendererProps): react_jsx_runtime.JSX.Element;
375
+
376
+ interface CodeBlockProps {
377
+ children: string;
378
+ className?: string;
379
+ inline?: boolean;
380
+ theme?: 'light' | 'dark';
381
+ }
382
+ declare function CodeBlock({ children, className, inline, theme }: CodeBlockProps): react_jsx_runtime.JSX.Element;
383
+
384
+ interface MermaidDiagramProps {
385
+ chart: string;
386
+ theme?: 'light' | 'dark';
387
+ }
388
+ declare function MermaidDiagram({ chart, theme }: MermaidDiagramProps): react_jsx_runtime.JSX.Element;
389
+
218
390
  /**
219
391
  * Tool Manager - Centralized system for tool execution and feedback
220
392
  *
@@ -335,4 +507,4 @@ declare function scoreToolMatch(query: string, tool: ToolMetadata): number;
335
507
  */
336
508
  declare function findBestMatch(query: string, tools: ToolMetadata[]): FuzzyMatchResult;
337
509
 
338
- export { AutoNavigationContext, ChatBubble, ChatInputProvider, ChatProvider, type CommandResult, DemoAIInterface, type FuzzyMatchResult, FuzzyMatcher, NavigationContextProvider, SupernalProvider, type SupernalProviderProps, type ToolExecutionResult, ToolManager, findBestMatch, scoreToolMatch, useAllContexts, useChatContext, useChatInput, useCurrentContext, useNavigate, useNavigationGraph, useNavigationPath, useRegisterTool };
510
+ export { AutoNavigationContext, ChatBubble, type ChatBubbleSettings, ChatBubbleSettingsModal, ChatBubbleVariant, type ChatBubbleVariantType, type ChatBubbleVariantValue, ChatInputProvider, ChatProvider, CodeBlock, type CommandResult, Components, DemoAIInterface, type FuzzyMatchResult, FuzzyMatcher, MermaidDiagram, MessageRenderer, NavigationContextProvider, PageLayout, type PageLayoutType, type PageLayoutValue, SubtitleOverlay, SupernalProvider, type SupernalProviderProps, type ToolExecutionResult, ToolManager, type ToolMenuCategory, ToolMenuPopup, ToolMenuPopupTrigger, type UseToolMenuReturn, findBestMatch, scoreToolMatch, useAllContexts, useChatContext, useChatInput, useCurrentContext, useNavigate, useNavigationGraph, useNavigationPath, useRegisterTool, useToolMenu };
package/dist/index.d.ts CHANGED
@@ -1,11 +1,11 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import React from 'react';
2
+ import React$1 from 'react';
3
3
  import { NavigationGraph, NavigationPath, NavigationContext, ToolMetadata } from '@supernal/interface/browser';
4
4
  import { AIInterface } from '@supernal/interface';
5
5
  export { AICommand, AIResponse } from '@supernal/interface';
6
6
 
7
7
  interface SupernalProviderProps {
8
- children: React.ReactNode;
8
+ children: React$1.ReactNode;
9
9
  theme?: 'light' | 'dark' | 'auto';
10
10
  position?: 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left';
11
11
  mode?: 'fuzzy' | 'ai';
@@ -13,14 +13,19 @@ interface SupernalProviderProps {
13
13
  welcomeMessage?: string;
14
14
  routes?: Record<string, string>;
15
15
  disabled?: boolean;
16
+ glassMode?: boolean;
17
+ logo?: string;
18
+ variant?: 'full' | 'floating' | 'drawer' | 'subtitle';
19
+ displayMode?: 'auto' | 'floating' | 'full' | 'drawer' | 'subtitle';
20
+ drawerSide?: 'left' | 'right';
16
21
  onNavigate?: (context: string) => void;
17
22
  onToolExecute?: (tool: string, result: any) => void;
18
23
  }
19
- declare function SupernalProvider({ children, theme, position, mode, apiKey, welcomeMessage, routes, disabled, onNavigate, onToolExecute, }: SupernalProviderProps): react_jsx_runtime.JSX.Element;
24
+ declare function SupernalProvider({ children, theme, position, mode, apiKey, welcomeMessage, routes, disabled, glassMode, logo, variant, displayMode, drawerSide, onNavigate, onToolExecute, }: SupernalProviderProps): react_jsx_runtime.JSX.Element;
20
25
 
21
26
  declare function NavigationContextProvider({ value, children }: {
22
27
  value: string;
23
- children: React.ReactNode;
28
+ children: React$1.ReactNode;
24
29
  }): react_jsx_runtime.JSX.Element;
25
30
  /**
26
31
  * Hook to access the NavigationGraph singleton
@@ -132,12 +137,15 @@ interface ChatContextType {
132
137
  }
133
138
  declare function useChatContext(): ChatContextType;
134
139
  declare function ChatProvider({ children, mode, apiKey, onToolExecute, }: {
135
- children: React.ReactNode;
140
+ children: React$1.ReactNode;
136
141
  mode?: 'fuzzy' | 'ai';
137
142
  apiKey?: string;
138
143
  onToolExecute?: (tool: string, result: any) => void;
139
144
  }): react_jsx_runtime.JSX.Element;
140
145
 
146
+ /**
147
+ * Type definitions for ChatBubble component
148
+ */
141
149
  interface Message {
142
150
  id: string;
143
151
  text: string;
@@ -145,10 +153,13 @@ interface Message {
145
153
  timestamp: string;
146
154
  }
147
155
  type Position = 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left' | 'left-center' | 'right-center' | 'bottom-center';
148
- type Variant = 'full' | 'floating';
156
+ type Variant = 'full' | 'floating' | 'drawer' | 'subtitle';
157
+ type DisplayMode = 'auto' | 'floating' | 'full' | 'drawer' | 'subtitle';
149
158
  interface ChatBubbleConfig {
150
159
  /** Optional title for the chat header */
151
160
  title?: string;
161
+ /** Optional logo URL or data URI. Defaults to embedded Supernal Interface logo */
162
+ logo?: string;
152
163
  /** Optional avatar/icon (emoji, URL, or React node) */
153
164
  avatar?: string | React.ReactNode;
154
165
  /** Optional description shown in info popup */
@@ -182,7 +193,7 @@ interface ChatBubbleProps {
182
193
  onClearChat?: () => void;
183
194
  /** Positioning mode */
184
195
  position?: Position;
185
- /** Variant: 'full' for expanded panel, 'floating' for mini draggable bubble */
196
+ /** Variant: 'full' for expanded panel, 'floating' for mini draggable bubble, 'drawer' for mobile swipeable drawer */
186
197
  variant?: Variant;
187
198
  /** Configuration for branding, text, and theme */
188
199
  config?: ChatBubbleConfig;
@@ -190,8 +201,71 @@ interface ChatBubbleProps {
190
201
  defaultExpanded?: boolean;
191
202
  /** Storage key for persisting state */
192
203
  storageKey?: string;
204
+ /** Display mode: 'auto' switches based on viewport, or manually set 'full'/'floating'/'drawer' */
205
+ displayMode?: DisplayMode;
206
+ /** Which side the drawer opens from (for drawer variant) */
207
+ drawerSide?: 'left' | 'right';
208
+ }
209
+
210
+ declare const ChatBubble: ({ messages, onSendMessage, onClearChat, position, variant, config: userConfig, defaultExpanded, storageKey, displayMode: propDisplayMode, drawerSide: propDrawerSide, }: ChatBubbleProps) => react_jsx_runtime.JSX.Element | null;
211
+
212
+ /**
213
+ * SubtitleOverlay Component - Minimalist Voice-First Overlay
214
+ *
215
+ * A transparent subtitle-style chat overlay that floats over website content.
216
+ * Features:
217
+ * - Mobile-first: 100% opacity on mobile (always visible)
218
+ * - Desktop: Adaptive 10-90% opacity based on activity
219
+ * - Voice/text fusion with smart detection
220
+ * - Supernal @/ brand icon instead of microphone
221
+ * - Seamless mode switching
222
+ */
223
+
224
+ interface SubtitleOverlayProps {
225
+ messages: Message[];
226
+ inputValue: string;
227
+ onInputChange: (value: string) => void;
228
+ onSendMessage: (text: string) => void;
229
+ voiceEnabled: boolean;
230
+ isListening: boolean;
231
+ onMicClick: () => void;
232
+ theme: 'light' | 'dark';
233
+ config: ChatBubbleConfig;
234
+ sttTranscript?: string;
235
+ resetTranscript?: () => void;
236
+ onSwitchToFullMode?: () => void;
193
237
  }
194
- declare const ChatBubble: ({ messages, onSendMessage, onClearChat, position, variant, config: userConfig, defaultExpanded, storageKey, }: ChatBubbleProps) => react_jsx_runtime.JSX.Element;
238
+ declare const SubtitleOverlay: React$1.FC<SubtitleOverlayProps>;
239
+
240
+ /**
241
+ * Chat Bubble Settings Modal Component
242
+ *
243
+ * Settings modal for ChatBubble configuration:
244
+ * - Theme (light/dark)
245
+ * - Glass mode (glassmorphism effect)
246
+ * - Notifications
247
+ */
248
+ interface ChatBubbleSettings {
249
+ theme: 'light' | 'dark';
250
+ glassMode: boolean;
251
+ notifications: boolean;
252
+ displayMode?: 'auto' | 'floating' | 'full' | 'drawer' | 'subtitle';
253
+ drawerSide?: 'left' | 'right';
254
+ subtitleOverlayEnabled?: boolean;
255
+ voiceEnabled: boolean;
256
+ usePremiumVoices: boolean;
257
+ autoReadResponses: boolean;
258
+ ttsSpeed: number;
259
+ sttAutoRecordTimeout: number;
260
+ sttAutoExecute: boolean;
261
+ }
262
+ interface ChatBubbleSettingsModalProps {
263
+ isOpen: boolean;
264
+ onClose: () => void;
265
+ settings: ChatBubbleSettings;
266
+ onSettingsChange: (settings: ChatBubbleSettings) => void;
267
+ }
268
+ declare function ChatBubbleSettingsModal({ isOpen, onClose, settings, onSettingsChange, }: ChatBubbleSettingsModalProps): react_jsx_runtime.JSX.Element | null;
195
269
 
196
270
  interface ChatInputContextType {
197
271
  /**
@@ -205,16 +279,114 @@ interface ChatInputContextType {
205
279
  }
206
280
  declare function useChatInput(): ChatInputContextType;
207
281
  declare function ChatInputProvider({ children }: {
208
- children: React.ReactNode;
282
+ children: React$1.ReactNode;
209
283
  }): react_jsx_runtime.JSX.Element;
210
284
 
211
285
  interface AutoNavigationContextProps {
212
- children: React.ReactNode;
286
+ children: React$1.ReactNode;
213
287
  routes?: Record<string, string>;
214
288
  onNavigate?: (context: string) => void;
215
289
  }
216
290
  declare function AutoNavigationContext({ children, routes, onNavigate, }: AutoNavigationContextProps): react_jsx_runtime.JSX.Element;
217
291
 
292
+ interface ToolMenuCategory {
293
+ key: string;
294
+ displayName: string;
295
+ tools: ToolMetadata[];
296
+ }
297
+ interface UseToolMenuReturn {
298
+ isOpen: boolean;
299
+ open: () => void;
300
+ close: () => void;
301
+ toggle: () => void;
302
+ categories: ToolMenuCategory[];
303
+ totalTools: number;
304
+ contextLabel: string;
305
+ }
306
+ declare function useToolMenu(): UseToolMenuReturn;
307
+
308
+ interface ToolMenuPopupProps {
309
+ isOpen: boolean;
310
+ onClose: () => void;
311
+ categories: ToolMenuCategory[];
312
+ totalTools: number;
313
+ contextLabel: string;
314
+ }
315
+ declare const ToolMenuPopup: React$1.FC<ToolMenuPopupProps>;
316
+
317
+ /**
318
+ * ToolMenuPopupTrigger
319
+ *
320
+ * Manages keyboard shortcut triggers for the ToolMenuPopup.
321
+ * Renders the popup when open.
322
+ *
323
+ * Triggers:
324
+ * - Keyboard: `/` or `?` from an empty input (subtitle mode), `?` outside inputs, or Cmd/Ctrl+Shift+/
325
+ */
326
+ declare const ToolMenuPopupTrigger: React$1.FC;
327
+
328
+ /**
329
+ * Component Names - Named contracts for UI elements, variants, and layouts
330
+ *
331
+ * These provide type-safe references throughout the application.
332
+ * In production, consumers should generate their own ComponentNames using
333
+ * `si scan-names` and pass them via config.
334
+ *
335
+ * Naming convention:
336
+ * - Variant(X) → XVariant (e.g., Variant(ChatBubble) → ChatBubbleVariant)
337
+ * - Layout(X) → XLayout (e.g., Layout(Page) → PageLayout)
338
+ */
339
+ declare const Components: {
340
+ readonly ChatToggleButton: "chat-toggle-button";
341
+ readonly ChatInput: "chat-message-input";
342
+ readonly ChatSendButton: "chat-send-button";
343
+ readonly ChatClearButton: "chat-clear-button";
344
+ };
345
+ /**
346
+ * ChatBubbleVariant - Display modes for the chat interface
347
+ * Usage: Variant(ChatBubble) → ChatBubbleVariant
348
+ */
349
+ declare const ChatBubbleVariant: {
350
+ readonly full: "full";
351
+ readonly floating: "floating";
352
+ readonly drawer: "drawer";
353
+ readonly subtitle: "subtitle";
354
+ };
355
+ type ChatBubbleVariantType = keyof typeof ChatBubbleVariant;
356
+ type ChatBubbleVariantValue = typeof ChatBubbleVariant[ChatBubbleVariantType];
357
+ /**
358
+ * PageLayout - Page structure variants
359
+ * Usage: Layout(Page) → PageLayout
360
+ */
361
+ declare const PageLayout: {
362
+ readonly default: "default";
363
+ readonly landing: "landing";
364
+ readonly docs: "docs";
365
+ readonly blog: "blog";
366
+ };
367
+ type PageLayoutType = keyof typeof PageLayout;
368
+ type PageLayoutValue = typeof PageLayout[PageLayoutType];
369
+
370
+ interface MessageRendererProps {
371
+ content: string;
372
+ theme?: 'light' | 'dark';
373
+ }
374
+ declare function MessageRenderer({ content, theme }: MessageRendererProps): react_jsx_runtime.JSX.Element;
375
+
376
+ interface CodeBlockProps {
377
+ children: string;
378
+ className?: string;
379
+ inline?: boolean;
380
+ theme?: 'light' | 'dark';
381
+ }
382
+ declare function CodeBlock({ children, className, inline, theme }: CodeBlockProps): react_jsx_runtime.JSX.Element;
383
+
384
+ interface MermaidDiagramProps {
385
+ chart: string;
386
+ theme?: 'light' | 'dark';
387
+ }
388
+ declare function MermaidDiagram({ chart, theme }: MermaidDiagramProps): react_jsx_runtime.JSX.Element;
389
+
218
390
  /**
219
391
  * Tool Manager - Centralized system for tool execution and feedback
220
392
  *
@@ -335,4 +507,4 @@ declare function scoreToolMatch(query: string, tool: ToolMetadata): number;
335
507
  */
336
508
  declare function findBestMatch(query: string, tools: ToolMetadata[]): FuzzyMatchResult;
337
509
 
338
- export { AutoNavigationContext, ChatBubble, ChatInputProvider, ChatProvider, type CommandResult, DemoAIInterface, type FuzzyMatchResult, FuzzyMatcher, NavigationContextProvider, SupernalProvider, type SupernalProviderProps, type ToolExecutionResult, ToolManager, findBestMatch, scoreToolMatch, useAllContexts, useChatContext, useChatInput, useCurrentContext, useNavigate, useNavigationGraph, useNavigationPath, useRegisterTool };
510
+ export { AutoNavigationContext, ChatBubble, type ChatBubbleSettings, ChatBubbleSettingsModal, ChatBubbleVariant, type ChatBubbleVariantType, type ChatBubbleVariantValue, ChatInputProvider, ChatProvider, CodeBlock, type CommandResult, Components, DemoAIInterface, type FuzzyMatchResult, FuzzyMatcher, MermaidDiagram, MessageRenderer, NavigationContextProvider, PageLayout, type PageLayoutType, type PageLayoutValue, SubtitleOverlay, SupernalProvider, type SupernalProviderProps, type ToolExecutionResult, ToolManager, type ToolMenuCategory, ToolMenuPopup, ToolMenuPopupTrigger, type UseToolMenuReturn, findBestMatch, scoreToolMatch, useAllContexts, useChatContext, useChatInput, useCurrentContext, useNavigate, useNavigationGraph, useNavigationPath, useRegisterTool, useToolMenu };