@cuekit-ai/react 1.6.7 → 1.6.9

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/cuekit.css CHANGED
@@ -22,19 +22,23 @@
22
22
  --voice-border: 252 31% 91%;
23
23
  --voice-text: 222.2 84% 4.9%;
24
24
  --voice-text-muted: 252 16% 47%;
25
- --voice-accent: 252 81% 60%;
25
+ --voice-accent: 252 78% 60%; /* #6257d9 */
26
+ --voice-accent-vibrant: 245 84% 77%; /* #9a92f6 */
27
+ --voice-accent-dark: 246 57% 54%; /* #5447cd */
26
28
  --voice-accent-light: 252 100% 96%;
27
- --voice-user-bubble: 252 81% 60%;
29
+ --voice-user-bubble: 252 78% 60%;
28
30
  --voice-user-text: 0 0% 100%;
29
31
  --voice-ai-bubble: 0 0% 100%;
30
32
  --voice-ai-text: 222.2 84% 4.9%;
31
- --indicator-bg: 252 81% 60%;
33
+ --indicator-bg: 252 78% 60%;
34
+ --voice-status-bg: 252 100% 96%;
35
+ --voice-status-text: 252 78% 60%;
32
36
  --voice-placeholder: 252 16% 47%;
33
37
 
34
38
  /* Gradients Light - Purple */
35
- --gradient-primary: linear-gradient(135deg, hsl(252 81% 60%), hsl(252 88% 70%));
36
- --gradient-surface: linear-gradient(180deg, hsl(0 0% 100%), hsl(252 40% 98%));
37
- --gradient-mic-button: radial-gradient(circle at 50% 0%, hsl(252 88% 77%), hsl(252 66% 59%));
39
+ --gradient-primary: linear-gradient(135deg, #8177ed, #9a92f6);
40
+ --gradient-surface: linear-gradient(180deg, #ffffff, #f6f5ff);
41
+ --gradient-mic-button: radial-gradient(circle at 50% 0%, #9a92f6, #6257d9);
38
42
 
39
43
  /* Shadows Light */
40
44
  --shadow-soft: 0 4px 20px -2px hsl(252 81% 60% / 0.1);
@@ -49,18 +53,20 @@
49
53
  --voice-border: 252 31% 91%;
50
54
  --voice-text: 222.2 84% 4.9%;
51
55
  --voice-text-muted: 252 16% 47%;
52
- --voice-accent: 252 81% 60%;
56
+ --voice-accent: 252 78% 60%;
57
+ --voice-accent-vibrant: 245 84% 77%;
58
+ --voice-accent-dark: 246 57% 54%;
53
59
  --voice-accent-light: 252 100% 96%;
54
- --voice-user-bubble: 252 81% 60%;
60
+ --voice-user-bubble: 252 78% 60%;
55
61
  --voice-user-text: 0 0% 100%;
56
62
  --voice-ai-bubble: 0 0% 100%;
57
63
  --voice-ai-text: 222.2 84% 4.9%;
58
- --indicator-bg: 252 81% 60%;
64
+ --indicator-bg: 252 78% 60%;
59
65
  --voice-placeholder: 252 16% 47%;
60
- --gradient-primary: linear-gradient(135deg, hsl(252 81% 60%), hsl(252 88% 70%));
61
- --gradient-surface: linear-gradient(180deg, hsl(0 0% 100%), hsl(252 40% 98%));
62
- --gradient-mic-button: radial-gradient(circle at 50% 0%, hsl(252 88% 77%), hsl(252 66% 59%));
63
- --shadow-soft: 0 4px 20px -2px hsl(252 81% 60% / 0.1);
66
+ --gradient-primary: linear-gradient(135deg, #8177ed, #9a92f6);
67
+ --gradient-surface: linear-gradient(180deg, #ffffff, #f6f5ff);
68
+ --gradient-mic-button: radial-gradient(circle at 50% 0%, #9a92f6, #6257d9);
69
+ --shadow-soft: 0 4px 20px -2px rgba(129, 119, 237, 0.1);
64
70
  --shadow-card: 0 10px 40px -10px hsl(0 0% 0% / 0.05);
65
71
  }
66
72
 
@@ -71,22 +77,26 @@
71
77
  --voice-border: 248 32% 22%;
72
78
  --voice-text: 252 40% 98%;
73
79
  --voice-text-muted: 252 20% 65%;
74
- --voice-accent: 252 88% 70%;
80
+ --voice-accent: 245 84% 77%; /* #9a92f6 */
81
+ --voice-accent-vibrant: 252 88% 77%;
82
+ --voice-accent-dark: 246 57% 54%;
75
83
  --voice-accent-light: 252 47% 25%;
76
- --voice-user-bubble: 252 88% 70%;
84
+ --voice-user-bubble: 245 84% 77%;
77
85
  --voice-user-text: 0 0% 100%;
78
86
  --voice-ai-bubble: 252 32% 21%;
79
87
  --voice-ai-text: 0 0% 100%;
80
- --indicator-bg: 252 88% 70%;
88
+ --indicator-bg: 245 84% 77%;
89
+ --voice-status-bg: 252 47% 25%;
90
+ --voice-status-text: 245 84% 77%;
81
91
  --voice-placeholder: 252 20% 65%;
82
92
 
83
93
  /* Gradients Dark - Purple */
84
- --gradient-primary: linear-gradient(135deg, hsl(252 88% 70%), hsl(252 88% 77%));
85
- --gradient-surface: linear-gradient(180deg, hsl(248 32% 17.5%), hsl(248 35% 11%));
86
- --gradient-mic-button: radial-gradient(circle at 50% 0%, hsl(252 88% 77%), hsl(252 59% 54%));
94
+ --gradient-primary: linear-gradient(135deg, #8177ed, #9a92f6);
95
+ --gradient-surface: linear-gradient(180deg, #2b2640, #1a1625);
96
+ --gradient-mic-button: radial-gradient(circle at 50% 0%, #9a92f6, #5447cd);
87
97
 
88
98
  /* Shadows Dark */
89
- --shadow-soft: 0 4px 20px -2px hsl(252 88% 70% / 0.2);
99
+ --shadow-soft: 0 4px 20px -2px rgba(129, 119, 237, 0.2);
90
100
  --shadow-card: 0 10px 40px -10px hsl(0 0% 0% / 0.3);
91
101
  }
92
102
 
@@ -171,7 +181,7 @@
171
181
 
172
182
  /* Placeholder styles */
173
183
  input::placeholder {
174
- color: hsl(var(--voice-placeholder));
184
+ color: hsl(var(--voice-text) / 0.9);
175
185
  }
176
186
 
177
187
  /* Theme toggle animations */
@@ -554,8 +564,8 @@ input::placeholder {
554
564
  }
555
565
 
556
566
  .language-tooltip-content {
557
- background: oklch(0.23 0.08 252.75);
558
- color: hsl(0 0% 98%);
567
+ background: hsl(var(--voice-accent));
568
+ color: #fff;
559
569
  padding: 8px 12px;
560
570
  border-radius: 8px;
561
571
  font-size: 12px;
@@ -579,7 +589,7 @@ input::placeholder {
579
589
  width: 0;
580
590
  height: 0;
581
591
  border: 4px solid transparent;
582
- border-top-color: oklch(0.23 0.08 252.75);
592
+ border-top-color: hsl(var(--voice-accent));
583
593
  }
584
594
 
585
595
  .language-selector-content {
@@ -755,7 +765,7 @@ input::placeholder {
755
765
  align-items: center;
756
766
  gap: 12px;
757
767
  padding: 8px;
758
- background: hsl(var(--voice-surface));
768
+ background: white; /* Force white as per user request */
759
769
  border: 1px solid hsl(var(--voice-border));
760
770
  border-radius: 32px;
761
771
  box-shadow:
@@ -786,13 +796,12 @@ input::placeholder {
786
796
  align-items: center;
787
797
  gap: 16px;
788
798
  padding: 20px;
789
- background: hsl(var(--voice-surface));
799
+ background: white; /* Force white as per user request */
790
800
  border: 1px solid hsl(var(--voice-border));
791
801
  border-radius: 16px;
792
802
  box-shadow:
793
803
  0 20px 60px -12px hsl(0 0% 0% / 0.15),
794
804
  0 8px 32px -8px hsl(var(--voice-accent) / 0.1);
795
- backdrop-filter: blur(16px);
796
805
  min-width: 280px;
797
806
  animation: voiceChatLanguageEnter 0.3s cubic-bezier(0.4, 0, 0.2, 1);
798
807
  }
@@ -887,11 +896,11 @@ input::placeholder {
887
896
 
888
897
  /* Dark theme for voice chat button: only when popup has .cuekit-dark (no media query) */
889
898
  .cuekit-voice-popup.cuekit-dark .voice-chat-main-button {
890
- background: hsl(var(--voice-surface) / 0.8);
899
+ background: white; /* Force white in dark mode as per user request */
891
900
  border-color: hsl(var(--voice-border) / 0.5);
892
901
  }
893
902
 
894
903
  .cuekit-voice-popup.cuekit-dark .voice-chat-language-selection {
895
- background: hsl(var(--voice-surface));
904
+ background: white; /* Force white in dark mode as per user request */
896
905
  border-color: hsl(var(--voice-border));
897
906
  }
package/dist/index.d.mts CHANGED
@@ -3,6 +3,34 @@ import React__default, { ReactNode } from 'react';
3
3
  import * as livekit_client from 'livekit-client';
4
4
  import { ConnectionState, Room } from 'livekit-client';
5
5
 
6
+ type InteractiveElement = {
7
+ [btnId: string]: string[];
8
+ };
9
+ interface DOMStructurePayload {
10
+ components: InteractiveElement;
11
+ }
12
+ interface ThemeColors {
13
+ primary: string;
14
+ primaryVibrant?: string;
15
+ primaryDark?: string;
16
+ indicator?: string;
17
+ statusBg?: string;
18
+ statusText?: string;
19
+ background?: string;
20
+ text?: string;
21
+ surface?: string;
22
+ border?: string;
23
+ textMuted?: string;
24
+ userBubble?: string;
25
+ userText?: string;
26
+ aiBubble?: string;
27
+ aiText?: string;
28
+ }
29
+ interface ThemeConfig {
30
+ light?: Partial<ThemeColors>;
31
+ dark?: Partial<ThemeColors>;
32
+ }
33
+
6
34
  declare global {
7
35
  interface AnsyrGlobalStore {
8
36
  intent: string | null;
@@ -22,6 +50,8 @@ type AnsyrCtx = {
22
50
  showLogo: boolean;
23
51
  showAIIcon: boolean;
24
52
  showUserIcon: boolean;
53
+ theme?: ThemeConfig;
54
+ emptyStateMessage?: string;
25
55
  };
26
56
  declare const useAnsyrContext: () => AnsyrCtx;
27
57
  interface Props {
@@ -37,6 +67,8 @@ interface Props {
37
67
  showLogo?: boolean;
38
68
  showAIIcon?: boolean;
39
69
  showUserIcon?: boolean;
70
+ theme?: ThemeConfig;
71
+ emptyStateMessage?: string;
40
72
  }
41
73
  declare const AnsyrProvider: React__default.FC<Props>;
42
74
 
@@ -183,7 +215,7 @@ declare const useCuekit: (options?: {
183
215
  sendScreenStatus: typeof sendScreenStatus;
184
216
  sendUserCommand: typeof sendUserCommand;
185
217
  sendStaticData: typeof sendStaticData;
186
- audioContainerRef: React.RefObject<HTMLDivElement>;
218
+ audioContainerRef: React.RefObject<HTMLDivElement | null>;
187
219
  };
188
220
 
189
221
  interface Position {
@@ -246,6 +278,8 @@ interface ChatPopupProps {
246
278
  persistPosition?: boolean;
247
279
  persistSize?: boolean;
248
280
  storageKey?: string;
281
+ theme?: ThemeConfig;
282
+ emptyStateMessage?: string;
249
283
  }
250
284
  declare const ChatPopup: React__default.FC<ChatPopupProps>;
251
285
 
@@ -332,7 +366,7 @@ declare const useWebRTC: (options?: {
332
366
  sendScreenStatus: typeof sendScreenStatus;
333
367
  sendUserCommand: typeof sendUserCommand;
334
368
  sendStaticData: typeof sendStaticData;
335
- audioContainerRef: React.RefObject<HTMLDivElement>;
369
+ audioContainerRef: React.RefObject<HTMLDivElement | null>;
336
370
  };
337
371
 
338
372
  interface WebRTCServerConfig {
@@ -364,13 +398,6 @@ declare const initWebRTCWithDeployedBackend: (apiKey: string, customConfig?: Par
364
398
  */
365
399
  declare const initWebRTC: (apiKey: string) => WebRTCServerConfig;
366
400
 
367
- type InteractiveElement = {
368
- [btnId: string]: string[];
369
- };
370
- interface DOMStructurePayload {
371
- components: InteractiveElement;
372
- }
373
-
374
401
  interface ElementAction {
375
402
  action_type: 'click' | 'navigate' | 'input' | 'focus' | 'toggle';
376
403
  target_element?: string;
@@ -419,4 +446,4 @@ declare function getCurrentPathParams(): Record<string, string>;
419
446
  */
420
447
  declare function resolveRoutePath(routePath: string, params: Record<string, string>): string;
421
448
 
422
- export { AnsyrProvider, BorderGlow, type Bounds, ChatPopup, type ChatPopupProps, type Props as CuekitProviderProps, type DOMStructurePayload, DraggableResizableContainer, type DraggableResizableContainerProps, type ElementAction, InitCuekit, type InteractiveElement, type Language, LanguageSelector, type LanguageSelectorProps, MicButton, type MicButtonProps, type MicState$1 as MicState, type MuteState, type NavigationCommand, type Position, type ResizeDirection, ResizeHandle, type ResizeHandleProps, ResizeHandles, type ResizeHandlesProps, type ServerConfig, type Size, type TokenRequest, type TokenResponse, VoiceIntensityVisualizer, type WebRTCServerConfig, captureAllInteractiveElements, clearElementCache, configureWebRTCServer, executeAction, generateDynamicId, getCurrentPathParams, getWebRTCServerConfig, initWebRTC, initWebRTCWithDeployedBackend, resolveRoutePath, useAnsyrContext, useCuekit, useDraggableResizableContainer, useWebRTC, validateDynamicElements };
449
+ export { AnsyrProvider, BorderGlow, type Bounds, ChatPopup, type ChatPopupProps, type Props as CuekitProviderProps, type DOMStructurePayload, DraggableResizableContainer, type DraggableResizableContainerProps, type ElementAction, InitCuekit, type InteractiveElement, type Language, LanguageSelector, type LanguageSelectorProps, MicButton, type MicButtonProps, type MicState$1 as MicState, type MuteState, type NavigationCommand, type Position, type ResizeDirection, ResizeHandle, type ResizeHandleProps, ResizeHandles, type ResizeHandlesProps, type ServerConfig, type Size, type ThemeColors, type ThemeConfig, type TokenRequest, type TokenResponse, VoiceIntensityVisualizer, type WebRTCServerConfig, captureAllInteractiveElements, clearElementCache, configureWebRTCServer, executeAction, generateDynamicId, getCurrentPathParams, getWebRTCServerConfig, initWebRTC, initWebRTCWithDeployedBackend, resolveRoutePath, useAnsyrContext, useCuekit, useDraggableResizableContainer, useWebRTC, validateDynamicElements };
package/dist/index.d.ts CHANGED
@@ -3,6 +3,34 @@ import React__default, { ReactNode } from 'react';
3
3
  import * as livekit_client from 'livekit-client';
4
4
  import { ConnectionState, Room } from 'livekit-client';
5
5
 
6
+ type InteractiveElement = {
7
+ [btnId: string]: string[];
8
+ };
9
+ interface DOMStructurePayload {
10
+ components: InteractiveElement;
11
+ }
12
+ interface ThemeColors {
13
+ primary: string;
14
+ primaryVibrant?: string;
15
+ primaryDark?: string;
16
+ indicator?: string;
17
+ statusBg?: string;
18
+ statusText?: string;
19
+ background?: string;
20
+ text?: string;
21
+ surface?: string;
22
+ border?: string;
23
+ textMuted?: string;
24
+ userBubble?: string;
25
+ userText?: string;
26
+ aiBubble?: string;
27
+ aiText?: string;
28
+ }
29
+ interface ThemeConfig {
30
+ light?: Partial<ThemeColors>;
31
+ dark?: Partial<ThemeColors>;
32
+ }
33
+
6
34
  declare global {
7
35
  interface AnsyrGlobalStore {
8
36
  intent: string | null;
@@ -22,6 +50,8 @@ type AnsyrCtx = {
22
50
  showLogo: boolean;
23
51
  showAIIcon: boolean;
24
52
  showUserIcon: boolean;
53
+ theme?: ThemeConfig;
54
+ emptyStateMessage?: string;
25
55
  };
26
56
  declare const useAnsyrContext: () => AnsyrCtx;
27
57
  interface Props {
@@ -37,6 +67,8 @@ interface Props {
37
67
  showLogo?: boolean;
38
68
  showAIIcon?: boolean;
39
69
  showUserIcon?: boolean;
70
+ theme?: ThemeConfig;
71
+ emptyStateMessage?: string;
40
72
  }
41
73
  declare const AnsyrProvider: React__default.FC<Props>;
42
74
 
@@ -183,7 +215,7 @@ declare const useCuekit: (options?: {
183
215
  sendScreenStatus: typeof sendScreenStatus;
184
216
  sendUserCommand: typeof sendUserCommand;
185
217
  sendStaticData: typeof sendStaticData;
186
- audioContainerRef: React.RefObject<HTMLDivElement>;
218
+ audioContainerRef: React.RefObject<HTMLDivElement | null>;
187
219
  };
188
220
 
189
221
  interface Position {
@@ -246,6 +278,8 @@ interface ChatPopupProps {
246
278
  persistPosition?: boolean;
247
279
  persistSize?: boolean;
248
280
  storageKey?: string;
281
+ theme?: ThemeConfig;
282
+ emptyStateMessage?: string;
249
283
  }
250
284
  declare const ChatPopup: React__default.FC<ChatPopupProps>;
251
285
 
@@ -332,7 +366,7 @@ declare const useWebRTC: (options?: {
332
366
  sendScreenStatus: typeof sendScreenStatus;
333
367
  sendUserCommand: typeof sendUserCommand;
334
368
  sendStaticData: typeof sendStaticData;
335
- audioContainerRef: React.RefObject<HTMLDivElement>;
369
+ audioContainerRef: React.RefObject<HTMLDivElement | null>;
336
370
  };
337
371
 
338
372
  interface WebRTCServerConfig {
@@ -364,13 +398,6 @@ declare const initWebRTCWithDeployedBackend: (apiKey: string, customConfig?: Par
364
398
  */
365
399
  declare const initWebRTC: (apiKey: string) => WebRTCServerConfig;
366
400
 
367
- type InteractiveElement = {
368
- [btnId: string]: string[];
369
- };
370
- interface DOMStructurePayload {
371
- components: InteractiveElement;
372
- }
373
-
374
401
  interface ElementAction {
375
402
  action_type: 'click' | 'navigate' | 'input' | 'focus' | 'toggle';
376
403
  target_element?: string;
@@ -419,4 +446,4 @@ declare function getCurrentPathParams(): Record<string, string>;
419
446
  */
420
447
  declare function resolveRoutePath(routePath: string, params: Record<string, string>): string;
421
448
 
422
- export { AnsyrProvider, BorderGlow, type Bounds, ChatPopup, type ChatPopupProps, type Props as CuekitProviderProps, type DOMStructurePayload, DraggableResizableContainer, type DraggableResizableContainerProps, type ElementAction, InitCuekit, type InteractiveElement, type Language, LanguageSelector, type LanguageSelectorProps, MicButton, type MicButtonProps, type MicState$1 as MicState, type MuteState, type NavigationCommand, type Position, type ResizeDirection, ResizeHandle, type ResizeHandleProps, ResizeHandles, type ResizeHandlesProps, type ServerConfig, type Size, type TokenRequest, type TokenResponse, VoiceIntensityVisualizer, type WebRTCServerConfig, captureAllInteractiveElements, clearElementCache, configureWebRTCServer, executeAction, generateDynamicId, getCurrentPathParams, getWebRTCServerConfig, initWebRTC, initWebRTCWithDeployedBackend, resolveRoutePath, useAnsyrContext, useCuekit, useDraggableResizableContainer, useWebRTC, validateDynamicElements };
449
+ export { AnsyrProvider, BorderGlow, type Bounds, ChatPopup, type ChatPopupProps, type Props as CuekitProviderProps, type DOMStructurePayload, DraggableResizableContainer, type DraggableResizableContainerProps, type ElementAction, InitCuekit, type InteractiveElement, type Language, LanguageSelector, type LanguageSelectorProps, MicButton, type MicButtonProps, type MicState$1 as MicState, type MuteState, type NavigationCommand, type Position, type ResizeDirection, ResizeHandle, type ResizeHandleProps, ResizeHandles, type ResizeHandlesProps, type ServerConfig, type Size, type ThemeColors, type ThemeConfig, type TokenRequest, type TokenResponse, VoiceIntensityVisualizer, type WebRTCServerConfig, captureAllInteractiveElements, clearElementCache, configureWebRTCServer, executeAction, generateDynamicId, getCurrentPathParams, getWebRTCServerConfig, initWebRTC, initWebRTCWithDeployedBackend, resolveRoutePath, useAnsyrContext, useCuekit, useDraggableResizableContainer, useWebRTC, validateDynamicElements };