@bytexbyte/nxtlinq-ai-agent-ui-react-development 0.4.0 → 0.4.1

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 (133) hide show
  1. package/dist/context/ChatBotContext.d.ts.map +1 -1
  2. package/dist/context/ChatBotContext.js +9 -3
  3. package/dist/types/ChatBotTypes.d.ts +0 -5
  4. package/dist/types/ChatBotTypes.d.ts.map +1 -1
  5. package/dist/ui/ChatBotHeader.d.ts.map +1 -1
  6. package/dist/ui/ChatBotHeader.js +6 -2
  7. package/dist/ui/ChatBotUI.d.ts.map +1 -1
  8. package/dist/ui/ChatBotUI.js +8 -1
  9. package/dist/ui/styles/isolatedStyles.d.ts.map +1 -1
  10. package/dist/ui/styles/isolatedStyles.js +1 -0
  11. package/package.json +2 -2
  12. package/src/context/ChatBotContext.tsx +9 -2
  13. package/src/types/ChatBotTypes.ts +2 -6
  14. package/src/ui/ChatBotHeader.tsx +9 -3
  15. package/src/ui/ChatBotUI.tsx +8 -1
  16. package/src/ui/styles/isolatedStyles.ts +1 -0
  17. package/dist/NxtlinqAgentChat.d.ts +0 -26
  18. package/dist/NxtlinqAgentChat.d.ts.map +0 -1
  19. package/dist/NxtlinqAgentChat.js +0 -28
  20. package/dist/components/AgentAssistantShell.d.ts +0 -5
  21. package/dist/components/AgentAssistantShell.d.ts.map +0 -1
  22. package/dist/components/AgentAssistantShell.js +0 -52
  23. package/dist/components/AgentComposer.d.ts +0 -3
  24. package/dist/components/AgentComposer.d.ts.map +0 -1
  25. package/dist/components/AgentComposer.js +0 -60
  26. package/dist/components/AgentMessageList.d.ts +0 -3
  27. package/dist/components/AgentMessageList.d.ts.map +0 -1
  28. package/dist/components/AgentMessageList.js +0 -37
  29. package/dist/components/AgentRemoteAudio.d.ts +0 -4
  30. package/dist/components/AgentRemoteAudio.d.ts.map +0 -1
  31. package/dist/components/AgentRemoteAudio.js +0 -34
  32. package/dist/components/AgentVoiceBar.d.ts +0 -3
  33. package/dist/components/AgentVoiceBar.d.ts.map +0 -1
  34. package/dist/components/AgentVoiceBar.js +0 -91
  35. package/dist/components/PresetMessageChips.d.ts +0 -3
  36. package/dist/components/PresetMessageChips.d.ts.map +0 -1
  37. package/dist/components/PresetMessageChips.js +0 -23
  38. package/dist/context/AgentAssistantContext.d.ts +0 -32
  39. package/dist/context/AgentAssistantContext.d.ts.map +0 -1
  40. package/dist/context/AgentAssistantContext.js +0 -179
  41. package/dist/legacy/assets/images/adiSideItalicDataUri.d.ts +0 -2
  42. package/dist/legacy/assets/images/adiSideItalicDataUri.d.ts.map +0 -1
  43. package/dist/legacy/assets/images/adiSideItalicDataUri.js +0 -1
  44. package/dist/legacy/chatbot/ChatBot.d.ts +0 -5
  45. package/dist/legacy/chatbot/ChatBot.d.ts.map +0 -1
  46. package/dist/legacy/chatbot/ChatBot.js +0 -35
  47. package/dist/legacy/chatbot/context/ChatBotContext.d.ts +0 -5
  48. package/dist/legacy/chatbot/context/ChatBotContext.d.ts.map +0 -1
  49. package/dist/legacy/chatbot/context/ChatBotContext.js +0 -2922
  50. package/dist/legacy/chatbot/types/ChatBotTypes.d.ts +0 -166
  51. package/dist/legacy/chatbot/types/ChatBotTypes.d.ts.map +0 -1
  52. package/dist/legacy/chatbot/types/ChatBotTypes.js +0 -1
  53. package/dist/legacy/chatbot/ui/BerifyMeModal.d.ts +0 -17
  54. package/dist/legacy/chatbot/ui/BerifyMeModal.d.ts.map +0 -1
  55. package/dist/legacy/chatbot/ui/BerifyMeModal.js +0 -110
  56. package/dist/legacy/chatbot/ui/ChatBotHeader.d.ts +0 -15
  57. package/dist/legacy/chatbot/ui/ChatBotHeader.d.ts.map +0 -1
  58. package/dist/legacy/chatbot/ui/ChatBotHeader.js +0 -62
  59. package/dist/legacy/chatbot/ui/ChatBotUI.d.ts +0 -3
  60. package/dist/legacy/chatbot/ui/ChatBotUI.d.ts.map +0 -1
  61. package/dist/legacy/chatbot/ui/ChatBotUI.js +0 -557
  62. package/dist/legacy/chatbot/ui/MessageInput.d.ts +0 -3
  63. package/dist/legacy/chatbot/ui/MessageInput.d.ts.map +0 -1
  64. package/dist/legacy/chatbot/ui/MessageInput.js +0 -321
  65. package/dist/legacy/chatbot/ui/MessageList.d.ts +0 -4
  66. package/dist/legacy/chatbot/ui/MessageList.d.ts.map +0 -1
  67. package/dist/legacy/chatbot/ui/MessageList.js +0 -455
  68. package/dist/legacy/chatbot/ui/ModelSelector.d.ts +0 -4
  69. package/dist/legacy/chatbot/ui/ModelSelector.d.ts.map +0 -1
  70. package/dist/legacy/chatbot/ui/ModelSelector.js +0 -122
  71. package/dist/legacy/chatbot/ui/NotificationModal.d.ts +0 -15
  72. package/dist/legacy/chatbot/ui/NotificationModal.d.ts.map +0 -1
  73. package/dist/legacy/chatbot/ui/NotificationModal.js +0 -53
  74. package/dist/legacy/chatbot/ui/PermissionForm.d.ts +0 -8
  75. package/dist/legacy/chatbot/ui/PermissionForm.d.ts.map +0 -1
  76. package/dist/legacy/chatbot/ui/PermissionForm.js +0 -465
  77. package/dist/legacy/chatbot/ui/PresetMessages.d.ts +0 -4
  78. package/dist/legacy/chatbot/ui/PresetMessages.d.ts.map +0 -1
  79. package/dist/legacy/chatbot/ui/PresetMessages.js +0 -33
  80. package/dist/legacy/chatbot/ui/VoiceModePanel.d.ts +0 -3
  81. package/dist/legacy/chatbot/ui/VoiceModePanel.d.ts.map +0 -1
  82. package/dist/legacy/chatbot/ui/VoiceModePanel.js +0 -95
  83. package/dist/legacy/chatbot/ui/chatBotHeaderParts.d.ts +0 -15
  84. package/dist/legacy/chatbot/ui/chatBotHeaderParts.d.ts.map +0 -1
  85. package/dist/legacy/chatbot/ui/chatBotHeaderParts.js +0 -50
  86. package/dist/legacy/chatbot/ui/styles/isolatedStyles.d.ts +0 -73
  87. package/dist/legacy/chatbot/ui/styles/isolatedStyles.d.ts.map +0 -1
  88. package/dist/legacy/chatbot/ui/styles/isolatedStyles.js +0 -985
  89. package/dist/legacy/index.d.ts +0 -14
  90. package/dist/legacy/index.d.ts.map +0 -1
  91. package/dist/legacy/index.js +0 -12
  92. package/dist/theme/defaultTheme.d.ts +0 -3
  93. package/dist/theme/defaultTheme.d.ts.map +0 -1
  94. package/dist/theme/defaultTheme.js +0 -20
  95. package/dist/types.d.ts +0 -62
  96. package/dist/types.d.ts.map +0 -1
  97. package/dist/types.js +0 -1
  98. package/dist/voice/useVoiceConnectOrchestration.d.ts +0 -21
  99. package/dist/voice/useVoiceConnectOrchestration.d.ts.map +0 -1
  100. package/dist/voice/useVoiceConnectOrchestration.js +0 -86
  101. package/dist/voice/useVoiceMicState.d.ts +0 -15
  102. package/dist/voice/useVoiceMicState.d.ts.map +0 -1
  103. package/dist/voice/useVoiceMicState.js +0 -94
  104. package/dist/voice/useVoiceSilenceCommit.d.ts +0 -10
  105. package/dist/voice/useVoiceSilenceCommit.d.ts.map +0 -1
  106. package/dist/voice/useVoiceSilenceCommit.js +0 -67
  107. package/dist/voice/useVoiceTranscriptMessages.d.ts +0 -18
  108. package/dist/voice/useVoiceTranscriptMessages.d.ts.map +0 -1
  109. package/dist/voice/useVoiceTranscriptMessages.js +0 -132
  110. package/dist/voice/useWsRealtimeAudio.d.ts +0 -18
  111. package/dist/voice/useWsRealtimeAudio.d.ts.map +0 -1
  112. package/dist/voice/useWsRealtimeAudio.js +0 -102
  113. package/dist/voice/voiceMicConstants.d.ts +0 -4
  114. package/dist/voice/voiceMicConstants.d.ts.map +0 -1
  115. package/dist/voice/voiceMicConstants.js +0 -10
  116. package/dist/voice/voiceUserBubble.d.ts +0 -10
  117. package/dist/voice/voiceUserBubble.d.ts.map +0 -1
  118. package/dist/voice/voiceUserBubble.js +0 -52
  119. package/dist/voice/ws/BrowserWsPcmPlayer.d.ts +0 -23
  120. package/dist/voice/ws/BrowserWsPcmPlayer.d.ts.map +0 -1
  121. package/dist/voice/ws/BrowserWsPcmPlayer.js +0 -137
  122. package/dist/voice/ws/BrowserWsPcmRecorder.d.ts +0 -17
  123. package/dist/voice/ws/BrowserWsPcmRecorder.d.ts.map +0 -1
  124. package/dist/voice/ws/BrowserWsPcmRecorder.js +0 -71
  125. package/dist/voice/ws/float32ToPcm16.d.ts +0 -2
  126. package/dist/voice/ws/float32ToPcm16.d.ts.map +0 -1
  127. package/dist/voice/ws/float32ToPcm16.js +0 -8
  128. package/dist/voice/ws/voiceSilenceConstants.d.ts +0 -5
  129. package/dist/voice/ws/voiceSilenceConstants.d.ts.map +0 -1
  130. package/dist/voice/ws/voiceSilenceConstants.js +0 -4
  131. package/dist/voice/ws/wsRealtimeConstants.d.ts +0 -2
  132. package/dist/voice/ws/wsRealtimeConstants.d.ts.map +0 -1
  133. package/dist/voice/ws/wsRealtimeConstants.js +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ChatBotContext.d.ts","sourceRoot":"","sources":["../../src/context/ChatBotContext.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAyB/B,OAAO,EAEL,kBAAkB,EAClB,YAAY,EAEb,MAAM,uBAAuB,CAAC;AAM/B,eAAO,MAAM,UAAU,0BAMtB,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,YAAY,CAwvGlD,CAAC"}
1
+ {"version":3,"file":"ChatBotContext.d.ts","sourceRoot":"","sources":["../../src/context/ChatBotContext.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAyB/B,OAAO,EAEL,kBAAkB,EAClB,YAAY,EAEb,MAAM,uBAAuB,CAAC;AAM/B,eAAO,MAAM,UAAU,0BAMtB,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,YAAY,CA+vGlD,CAAC"}
@@ -30,9 +30,7 @@ idvBannerDismissSeconds = 86400,
30
30
  // 24 hours in seconds
31
31
  isStopRecordingOnSend = false,
32
32
  // Custom error message to display in chat
33
- customError,
34
- // PII display mode
35
- piiDisplayMode = 'redacted', voiceThresholds, debugVoiceRms = false, sttGlossary, }) => {
33
+ customError, voiceThresholds, debugVoiceRms = false, sttGlossary, }) => {
36
34
  // Set API hosts immediately based on environment (before any API calls)
37
35
  setApiHosts(environment);
38
36
  const nxtlinqApi = React.useMemo(() => (serviceToken || getAuthToken
@@ -769,6 +767,11 @@ piiDisplayMode = 'redacted', voiceThresholds, debugVoiceRms = false, sttGlossary
769
767
  // AI Model related state
770
768
  const [modelsFromApi, setModelsFromApi] = React.useState([]);
771
769
  const [selectedModelIndex, setSelectedModelIndex] = useLocalStorage('selectedAIModelIndex', 0);
770
+ // PII protection status: fetched from the service's own config (via serviceId + credentials
771
+ // already provided to the SDK), not passed in by the host app. Defaults to off until the fetch
772
+ // below resolves, matching how modelsFromApi starts empty.
773
+ const [enablePiiProtection, setEnablePiiProtection] = React.useState(false);
774
+ const piiDisplayMode = enablePiiProtection ? 'redacted' : 'plain';
772
775
  // Use models from API only (no default fallback)
773
776
  // This ensures SDK always uses Dashboard-configured models
774
777
  const effectiveAvailableModels = React.useMemo(() => {
@@ -787,6 +790,9 @@ piiDisplayMode = 'redacted', voiceThresholds, debugVoiceRms = false, sttGlossary
787
790
  if ('availableModels' in result && Array.isArray(result.availableModels)) {
788
791
  setModelsFromApi(result.availableModels);
789
792
  }
793
+ if ('enablePiiProtection' in result) {
794
+ setEnablePiiProtection(!!result.enablePiiProtection);
795
+ }
790
796
  }
791
797
  catch (error) {
792
798
  console.error('Failed to fetch available models from API:', error);
@@ -64,11 +64,6 @@ export interface ChatBotProps {
64
64
  berifymeMode?: 'built-in' | 'external';
65
65
  isStopRecordingOnSend?: boolean;
66
66
  customError?: string;
67
- /** PII display mode: how PII protection is visualized in chat messages
68
- * - 'plain': No visualization, messages look like normal chat
69
- * - 'redacted': Anonymized text with PII tokens displayed (default)
70
- */
71
- piiDisplayMode?: 'plain' | 'redacted';
72
67
  /** Override mic VAD thresholds. Useful for tuning sensitivity per deployment. */
73
68
  voiceThresholds?: {
74
69
  speechRmsThreshold?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"ChatBotTypes.d.ts","sourceRoot":"","sources":["../../src/types/ChatBotTypes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ChatBotTypes.d.ts","sourceRoot":"","sources":["../../src/types/ChatBotTypes.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ChatBotHeader.d.ts","sourceRoot":"","sources":["../../src/ui/ChatBotHeader.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAU/B,MAAM,MAAM,kBAAkB,GAAG;IAC/B,YAAY,EAAE,OAAO,CAAC;IACtB,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,YAAY,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC;IACjE,WAAW,EAAE,OAAO,CAAC;IACrB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,cAAc,EAAE,OAAO,GAAG,UAAU,CAAC;IACrC,YAAY,EAAE,OAAO,CAAC;IACtB,eAAe,EAAE,MAAM,IAAI,CAAC;IAC5B,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CAqHtD,CAAC"}
1
+ {"version":3,"file":"ChatBotHeader.d.ts","sourceRoot":"","sources":["../../src/ui/ChatBotHeader.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAU/B,MAAM,MAAM,kBAAkB,GAAG;IAC/B,YAAY,EAAE,OAAO,CAAC;IACtB,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,YAAY,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC;IACjE,WAAW,EAAE,OAAO,CAAC;IACrB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,cAAc,EAAE,OAAO,GAAG,UAAU,CAAC;IACrC,YAAY,EAAE,OAAO,CAAC;IACtB,eAAe,EAAE,MAAM,IAAI,CAAC;IAC5B,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CA2HtD,CAAC"}
@@ -49,14 +49,18 @@ export const ChatBotHeader = ({ mobileLayout, isDragging, onDragStart, isVoiceMo
49
49
  z-index: 2 !important;
50
50
  display: flex !important;
51
51
  justify-content: space-between !important;
52
- align-items: center !important;
52
+ align-items: flex-start !important;
53
53
  width: 100% !important;
54
54
  pointer-events: none !important;
55
55
  `, children: [_jsxs("div", { css: css `
56
56
  display: flex !important;
57
57
  align-items: center !important;
58
+ flex-wrap: wrap !important;
59
+ row-gap: 8px !important;
58
60
  gap: 10px !important;
59
61
  min-width: 0 !important;
62
+ flex: 1 1 auto !important;
63
+ padding-top: 2px !important;
60
64
  pointer-events: none !important;
61
- `, children: [_jsx("h3", { css: headerTitle, children: "AI Agent" }), metaChips] }), actions] }))] }));
65
+ `, children: [_jsx("h3", { css: [headerTitle, css `flex-shrink: 0 !important;`], children: "AI Agent" }), metaChips] }), _jsx("div", { css: css `flex-shrink: 0 !important;`, children: actions })] }))] }));
62
66
  };
@@ -1 +1 @@
1
- {"version":3,"file":"ChatBotUI.d.ts","sourceRoot":"","sources":["../../src/ui/ChatBotUI.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AA+F/B,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,EAgtB7B,CAAC"}
1
+ {"version":3,"file":"ChatBotUI.d.ts","sourceRoot":"","sources":["../../src/ui/ChatBotUI.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAqG/B,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,EAitB7B,CAAC"}
@@ -14,6 +14,12 @@ import { chatWindow, errorToast, floatingButton, idvBanner, idvBannerText, idvBa
14
14
  const MOBILE_BREAKPOINT = 768;
15
15
  const MOBILE_EDGE_MARGIN = 12;
16
16
  const MOBILE_FAB_POSITION = { right: MOBILE_EDGE_MARGIN, bottom: MOBILE_EDGE_MARGIN };
17
+ // Below this widget width, the desktop header's single-row layout (title + model/PII chips +
18
+ // voice/settings/close actions, all in one line) has no room left and the chips start
19
+ // overlapping the actions. The user can drag the window this narrow (MIN_WIDTH is 320px) even
20
+ // on a wide desktop viewport, so this must be driven by the widget's own width, not just
21
+ // window.innerWidth — falling back to the same stacked layout used on mobile viewports.
22
+ const HEADER_COMPACT_WIDTH = 420;
17
23
  const isMobileViewport = () => typeof window !== 'undefined' && window.innerWidth <= MOBILE_BREAKPOINT;
18
24
  // Toast Notification Component
19
25
  const ToastNotification = ({ type, message, onClose, isChatOpen = false }) => {
@@ -59,6 +65,7 @@ export const ChatBotUI = () => {
59
65
  const { dimensions, handleResizeStart, positionAdjustment } = useResizable(positionRef);
60
66
  const { position, handleDragStart, isDragging, updatePosition } = useDraggable(dimensions);
61
67
  const [mobileLayout, setMobileLayout] = React.useState(isMobileViewport);
68
+ const headerCompactLayout = mobileLayout || dimensions.width < HEADER_COMPACT_WIDTH;
62
69
  React.useEffect(() => {
63
70
  if (typeof window === 'undefined')
64
71
  return;
@@ -523,7 +530,7 @@ export const ChatBotUI = () => {
523
530
  left: ${MOBILE_EDGE_MARGIN}px !important;
524
531
  top: ${MOBILE_EDGE_MARGIN}px !important;
525
532
  ` : ''}
526
- `], children: [!mobileLayout && (_jsxs(_Fragment, { children: [_jsx("div", { css: resizeHandleNW, onPointerDown: handleResizeStart('nw'), title: "Resize", "aria-label": "Resize chat window from top-left" }), _jsx("div", { css: resizeHandleNE, onPointerDown: handleResizeStart('ne'), title: "Resize", "aria-label": "Resize chat window from top-right" }), _jsx("div", { css: resizeHandleSW, onPointerDown: handleResizeStart('sw'), title: "Resize", "aria-label": "Resize chat window from bottom-left" }), _jsx("div", { css: resizeHandleSE, onPointerDown: handleResizeStart('se'), title: "Resize", "aria-label": "Resize chat window from bottom-right" })] })), _jsx(ChatBotHeader, { mobileLayout: mobileLayout, isDragging: isDragging, onDragStart: handleDragStart, isVoiceMode: isVoiceMode, isVoiceConnecting: isVoiceConnecting, onVoiceToggle: () => void ((isVoiceMode || isVoiceConnecting) ? exitVoiceMode() : enterVoiceMode()), piiDisplayMode: piiDisplayMode, isAITLoading: isAITLoading, onSettingsClick: handleSettingsClick, onClose: handleClose }), showIDVSuggestion && hitAddress && !props.requireWalletIDVVerification && !hasBerifymeToken && !isWalletVerifiedWithBerifyme && (_jsxs("div", { "data-idv-banner": true, css: idvBanner, children: [_jsx("div", { css: css `
533
+ `], children: [!mobileLayout && (_jsxs(_Fragment, { children: [_jsx("div", { css: resizeHandleNW, onPointerDown: handleResizeStart('nw'), title: "Resize", "aria-label": "Resize chat window from top-left" }), _jsx("div", { css: resizeHandleNE, onPointerDown: handleResizeStart('ne'), title: "Resize", "aria-label": "Resize chat window from top-right" }), _jsx("div", { css: resizeHandleSW, onPointerDown: handleResizeStart('sw'), title: "Resize", "aria-label": "Resize chat window from bottom-left" }), _jsx("div", { css: resizeHandleSE, onPointerDown: handleResizeStart('se'), title: "Resize", "aria-label": "Resize chat window from bottom-right" })] })), _jsx(ChatBotHeader, { mobileLayout: headerCompactLayout, isDragging: isDragging, onDragStart: handleDragStart, isVoiceMode: isVoiceMode, isVoiceConnecting: isVoiceConnecting, onVoiceToggle: () => void ((isVoiceMode || isVoiceConnecting) ? exitVoiceMode() : enterVoiceMode()), piiDisplayMode: piiDisplayMode, isAITLoading: isAITLoading, onSettingsClick: handleSettingsClick, onClose: handleClose }), showIDVSuggestion && hitAddress && !props.requireWalletIDVVerification && !hasBerifymeToken && !isWalletVerifiedWithBerifyme && (_jsxs("div", { "data-idv-banner": true, css: idvBanner, children: [_jsx("div", { css: css `
527
534
  font-size: 20px !important;
528
535
  color: #f39c12 !important;
529
536
  `, children: "\uD83D\uDCA1" }), _jsxs("div", { css: css `flex: 1 !important;`, children: [_jsx("h5", { css: idvBannerTitle, children: walletTextUtils.getWalletText('Recommended: Verify Your Wallet', serviceId) }), _jsx("p", { css: idvBannerText, children: walletTextUtils.getWalletText('While not required, verifying your wallet with Berify.me provides additional security and trust for your AI agent interactions.', serviceId) }), _jsx("button", { onClick: () => onVerifyWallet('berifyme'), css: idvVerifyButton, children: walletTextUtils.getWalletText('Verify Wallet', serviceId) })] }), _jsx("button", { onClick: handleDismissIDV, css: idvDismissButton, title: `Hide for ${Math.floor((props.idvBannerDismissSeconds || 86400) / 3600)} hours`, children: "\u00D7" })] })), !showIDVSuggestion && dismissUntil && timeRemaining && (_jsxs("div", { css: css `
@@ -1 +1 @@
1
- {"version":3,"file":"isolatedStyles.d.ts","sourceRoot":"","sources":["../../../src/ui/styles/isolatedStyles.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,QAAQ,2CAwBpB,CAAC;AAGF,eAAO,MAAM,YAAY,2CAmExB,CAAC;AAGF,eAAO,MAAM,cAAc,2CAqD1B,CAAC;AAGF,eAAO,MAAM,UAAU,2CA2BtB,CAAC;AAgBF,8DAA8D;AAC9D,eAAO,MAAM,YAAY,2CAKxB,CAAC;AAEF,eAAO,MAAM,cAAc,2CAK1B,CAAC;AAEF,eAAO,MAAM,cAAc,2CAK1B,CAAC;AAEF,eAAO,MAAM,cAAc,2CAK1B,CAAC;AAEF,eAAO,MAAM,cAAc,2CAK1B,CAAC;AAGF,eAAO,MAAM,UAAU,2CAStB,CAAC;AAGF,eAAO,MAAM,WAAW,2CAMvB,CAAC;AAGF,eAAO,MAAM,YAAY,2CA0BxB,CAAC;AAGF,eAAO,MAAM,WAAW,2CAoBvB,CAAC;AAGF,eAAO,MAAM,oBAAoB,2CAShC,CAAC;AAGF,eAAO,MAAM,aAAa,2CAKzB,CAAC;AAGF,eAAO,MAAM,WAAW,2CAMvB,CAAC;AAGF,eAAO,MAAM,cAAc,2CAQ1B,CAAC;AAGF,eAAO,MAAM,kBAAkB,2CAQ9B,CAAC;AAGF,eAAO,MAAM,mBAAmB,2CAS/B,CAAC;AAGF,eAAO,MAAM,aAAa,2CAezB,CAAC;AAGF,eAAO,MAAM,YAAY,2CAexB,CAAC;AAGF,eAAO,MAAM,eAAe,2CAc3B,CAAC;AAGF,eAAO,MAAM,gBAAgB,2CAQ5B,CAAC;AAGF,eAAO,MAAM,cAAc,2CAM1B,CAAC;AAGF,eAAO,MAAM,UAAU,2CAYtB,CAAC;AAGF,eAAO,MAAM,QAAQ,2CAMpB,CAAC;AAGF,eAAO,MAAM,iBAAiB,2CAc7B,CAAC;AAGF,eAAO,MAAM,YAAY,2CAIxB,CAAC;AAGF,eAAO,MAAM,UAAU,2CAItB,CAAC;AAGF,eAAO,MAAM,YAAY,2CAIxB,CAAC;AAGF,eAAO,MAAM,SAAS,2CAIrB,CAAC;AAGF,eAAO,MAAM,gBAAgB,2CAiB5B,CAAC;AAGF,eAAO,MAAM,YAAY,2CAyBxB,CAAC;AAGF,eAAO,MAAM,SAAS,2CAWrB,CAAC;AAGF,eAAO,MAAM,cAAc,2CAM1B,CAAC;AAGF,eAAO,MAAM,aAAa,2CAMzB,CAAC;AAGF,eAAO,MAAM,eAAe,2CAoB3B,CAAC;AAGF,eAAO,MAAM,gBAAgB,2CAmB5B,CAAC;AAGF,eAAO,MAAM,cAAc,2CAO1B,CAAC;AAGF,eAAO,MAAM,oBAAoB,2CAIhC,CAAC;AAGF,eAAO,MAAM,kBAAkB,2CAO9B,CAAC;AAGF,eAAO,MAAM,eAAe,2CAM3B,CAAC;AAGF,eAAO,MAAM,aAAa,2CAczB,CAAC;AAGF,eAAO,MAAM,iBAAiB,2CAK7B,CAAC;AAGF,eAAO,MAAM,wBAAwB,2CAMpC,CAAC;AAGF,eAAO,MAAM,0BAA0B,2CAOtC,CAAC;AAGF,eAAO,MAAM,oBAAoB,2CAIhC,CAAC;AAGF,eAAO,MAAM,eAAe,2CAK3B,CAAC;AAGF,eAAO,MAAM,cAAc,2CAY1B,CAAC;AAGF,eAAO,MAAM,uBAAuB,2CAInC,CAAC;AAGF,eAAO,MAAM,iBAAiB,2CAO7B,CAAC;AAGF,eAAO,MAAM,kBAAkB,2CAE9B,CAAC;AAKF,eAAO,MAAM,mBAAmB,2CAW/B,CAAC;AAGF,eAAO,MAAM,YAAY,2CAKxB,CAAC;AAGF,eAAO,MAAM,WAAW,2CAWvB,CAAC;AAGF,eAAO,MAAM,kBAAkB,2CAU9B,CAAC;AAGF,eAAO,MAAM,gBAAgB,2CAI5B,CAAC;AAGF,eAAO,MAAM,mBAAmB,2CAI/B,CAAC;AAGF,eAAO,MAAM,iBAAiB,2CAK7B,CAAC;AAGF,eAAO,MAAM,cAAc,2CAmB1B,CAAC;AAGF,eAAO,MAAM,cAAc,2CAU1B,CAAC;AAGF,eAAO,MAAM,eAAe,2CAS3B,CAAC;AAGF,eAAO,MAAM,eAAe,2CAI3B,CAAC;AAGF,eAAO,MAAM,aAAa,2CAMzB,CAAC;AAGF,eAAO,MAAM,kBAAkB,2CAI9B,CAAC;AAGF,eAAO,MAAM,eAAe,2CAI3B,CAAC;AAGF,eAAO,MAAM,iBAAiB,2CAiB7B,CAAC;AAIF,eAAO,MAAM,kBAAkB,2CAgC9B,CAAC;AAGF,eAAO,MAAM,gBAAgB,2CAsC5B,CAAC;AAGF,eAAO,MAAM,gBAAgB,2CAAQ,CAAC;AAKtC,eAAO,MAAM,cAAc,2CAkC1B,CAAC"}
1
+ {"version":3,"file":"isolatedStyles.d.ts","sourceRoot":"","sources":["../../../src/ui/styles/isolatedStyles.ts"],"names":[],"mappings":"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"}
@@ -240,6 +240,7 @@ export const headerTitle = css `
240
240
  font-weight: 600 !important;
241
241
  color: white !important;
242
242
  font-family: inherit !important;
243
+ white-space: nowrap !important;
243
244
  `;
244
245
  // Header button styles
245
246
  export const headerButton = css `
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bytexbyte/nxtlinq-ai-agent-ui-react-development",
3
- "version": "0.4.0",
3
+ "version": "0.4.1",
4
4
  "description": "Official React Web UI for nxtlinq AI Agent — drop-in chat widget",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -55,4 +55,4 @@
55
55
  "react-dom": "^18.2.0",
56
56
  "typescript": "^5.4.2"
57
57
  }
58
- }
58
+ }
@@ -79,8 +79,6 @@ export const ChatBotProvider: React.FC<ChatBotProps> = ({
79
79
  isStopRecordingOnSend = false,
80
80
  // Custom error message to display in chat
81
81
  customError,
82
- // PII display mode
83
- piiDisplayMode = 'redacted',
84
82
  voiceThresholds,
85
83
  debugVoiceRms = false,
86
84
  sttGlossary,
@@ -894,6 +892,12 @@ export const ChatBotProvider: React.FC<ChatBotProps> = ({
894
892
  const [modelsFromApi, setModelsFromApi] = React.useState<AIModel[]>([]);
895
893
  const [selectedModelIndex, setSelectedModelIndex] = useLocalStorage<number>('selectedAIModelIndex', 0);
896
894
 
895
+ // PII protection status: fetched from the service's own config (via serviceId + credentials
896
+ // already provided to the SDK), not passed in by the host app. Defaults to off until the fetch
897
+ // below resolves, matching how modelsFromApi starts empty.
898
+ const [enablePiiProtection, setEnablePiiProtection] = React.useState(false);
899
+ const piiDisplayMode: 'plain' | 'redacted' = enablePiiProtection ? 'redacted' : 'plain';
900
+
897
901
  // Use models from API only (no default fallback)
898
902
  // This ensures SDK always uses Dashboard-configured models
899
903
  const effectiveAvailableModels = React.useMemo(() => {
@@ -915,6 +919,9 @@ export const ChatBotProvider: React.FC<ChatBotProps> = ({
915
919
  if ('availableModels' in result && Array.isArray(result.availableModels)) {
916
920
  setModelsFromApi(result.availableModels);
917
921
  }
922
+ if ('enablePiiProtection' in result) {
923
+ setEnablePiiProtection(!!result.enablePiiProtection);
924
+ }
918
925
  } catch (error) {
919
926
  console.error('Failed to fetch available models from API:', error);
920
927
  // Silently fail and use default models
@@ -81,11 +81,6 @@ export interface ChatBotProps {
81
81
  isStopRecordingOnSend?: boolean; // Stop recording automatically when sending message (default: false)
82
82
  // Custom error message to display in chat
83
83
  customError?: string; // Custom error message to display as a chat message when provided
84
- /** PII display mode: how PII protection is visualized in chat messages
85
- * - 'plain': No visualization, messages look like normal chat
86
- * - 'redacted': Anonymized text with PII tokens displayed (default)
87
- */
88
- piiDisplayMode?: 'plain' | 'redacted';
89
84
  /** Override mic VAD thresholds. Useful for tuning sensitivity per deployment. */
90
85
  voiceThresholds?: {
91
86
  speechRmsThreshold?: number;
@@ -139,7 +134,8 @@ export interface ChatBotContextType {
139
134
  selectedModelIndex: number;
140
135
  showModelSelector: boolean;
141
136
  suggestions: PresetMessage[];
142
- // PII Protection visualization
137
+ // PII Protection visualization — derived internally from the service's own config
138
+ // (fetched via serviceId + credentials), never settable from outside the provider.
143
139
  piiDisplayMode: 'plain' | 'redacted';
144
140
  // Realtime voice mode (WebRTC)
145
141
  isVoiceMode: boolean;
@@ -121,21 +121,27 @@ export const ChatBotHeader: React.FC<ChatBotHeaderProps> = ({
121
121
  z-index: 2 !important;
122
122
  display: flex !important;
123
123
  justify-content: space-between !important;
124
- align-items: center !important;
124
+ align-items: flex-start !important;
125
125
  width: 100% !important;
126
126
  pointer-events: none !important;
127
127
  `}>
128
128
  <div css={css`
129
129
  display: flex !important;
130
130
  align-items: center !important;
131
+ flex-wrap: wrap !important;
132
+ row-gap: 8px !important;
131
133
  gap: 10px !important;
132
134
  min-width: 0 !important;
135
+ flex: 1 1 auto !important;
136
+ padding-top: 2px !important;
133
137
  pointer-events: none !important;
134
138
  `}>
135
- <h3 css={headerTitle}>AI Agent</h3>
139
+ <h3 css={[headerTitle, css`flex-shrink: 0 !important;`]}>AI Agent</h3>
136
140
  {metaChips}
137
141
  </div>
138
- {actions}
142
+ <div css={css`flex-shrink: 0 !important;`}>
143
+ {actions}
144
+ </div>
139
145
  </div>
140
146
  )}
141
147
  </div>
@@ -33,6 +33,12 @@ import {
33
33
  const MOBILE_BREAKPOINT = 768;
34
34
  const MOBILE_EDGE_MARGIN = 12;
35
35
  const MOBILE_FAB_POSITION = { right: MOBILE_EDGE_MARGIN, bottom: MOBILE_EDGE_MARGIN } as const;
36
+ // Below this widget width, the desktop header's single-row layout (title + model/PII chips +
37
+ // voice/settings/close actions, all in one line) has no room left and the chips start
38
+ // overlapping the actions. The user can drag the window this narrow (MIN_WIDTH is 320px) even
39
+ // on a wide desktop viewport, so this must be driven by the widget's own width, not just
40
+ // window.innerWidth — falling back to the same stacked layout used on mobile viewports.
41
+ const HEADER_COMPACT_WIDTH = 420;
36
42
 
37
43
  const isMobileViewport = (): boolean =>
38
44
  typeof window !== 'undefined' && window.innerWidth <= MOBILE_BREAKPOINT;
@@ -123,6 +129,7 @@ export const ChatBotUI: React.FC = () => {
123
129
  const { position, handleDragStart, isDragging, updatePosition } = useDraggable(dimensions);
124
130
 
125
131
  const [mobileLayout, setMobileLayout] = React.useState(isMobileViewport);
132
+ const headerCompactLayout = mobileLayout || dimensions.width < HEADER_COMPACT_WIDTH;
126
133
  React.useEffect(() => {
127
134
  if (typeof window === 'undefined') return;
128
135
  const mq = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT}px)`);
@@ -709,7 +716,7 @@ export const ChatBotUI: React.FC = () => {
709
716
  )}
710
717
 
711
718
  <ChatBotHeader
712
- mobileLayout={mobileLayout}
719
+ mobileLayout={headerCompactLayout}
713
720
  isDragging={isDragging}
714
721
  onDragStart={handleDragStart}
715
722
  isVoiceMode={isVoiceMode}
@@ -252,6 +252,7 @@ export const headerTitle = css`
252
252
  font-weight: 600 !important;
253
253
  color: white !important;
254
254
  font-family: inherit !important;
255
+ white-space: nowrap !important;
255
256
  `;
256
257
 
257
258
  // Header button styles
@@ -1,26 +0,0 @@
1
- import React from 'react';
2
- import type { NxtlinqAgentChatProps } from './types';
3
- /**
4
- * Drop-in React Web assistant UI wired to `@bytexbyte/nxtlinq-ai-agent-web-development`.
5
- *
6
- * @example
7
- * ```tsx
8
- * import { NxtlinqAgentChat } from '@bytexbyte/nxtlinq-ai-agent-ui-react-development';
9
- *
10
- * export default function Page() {
11
- * return (
12
- * <NxtlinqAgentChat
13
- * style={{ height: '100vh' }}
14
- * serviceId="..."
15
- * apiKey="..."
16
- * apiSecret="..."
17
- * environment="staging"
18
- * pseudoId={userId}
19
- * loadHistoryOnMount
20
- * />
21
- * );
22
- * }
23
- * ```
24
- */
25
- export declare function NxtlinqAgentChat({ title, placeholder, presetMessages, loadHistoryOnMount, historyLast, enableVoice, enableFileUpload, startInVoiceMode, startWithMicMuted, holdMicDuringAssistant, theme, style, headerStyle, onMessage, onError, onToolUse, children, fetchImpl, getTimezone, resetOnIdentityChange, ...agentConfig }: NxtlinqAgentChatProps): React.ReactElement;
26
- //# sourceMappingURL=NxtlinqAgentChat.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"NxtlinqAgentChat.d.ts","sourceRoot":"","sources":["../src/NxtlinqAgentChat.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAErD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,KAAK,EACL,WAAW,EACX,cAAc,EACd,kBAA0B,EAC1B,WAAW,EACX,WAAkB,EAClB,gBAAuB,EACvB,gBAAwB,EACxB,iBAAwB,EACxB,sBAA6B,EAC7B,KAAK,EACL,KAAK,EACL,WAAW,EACX,SAAS,EACT,OAAO,EACP,SAAS,EACT,QAAQ,EACR,SAAS,EACT,WAAW,EACX,qBAAqB,EACrB,GAAG,WAAW,EACf,EAAE,qBAAqB,GAAG,KAAK,CAAC,YAAY,CA6B5C"}
@@ -1,28 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "@emotion/react/jsx-runtime";
2
- import { NxtlinqAgentProvider } from '@bytexbyte/nxtlinq-ai-agent-web-development';
3
- import { AgentAssistantShell } from './components/AgentAssistantShell';
4
- /**
5
- * Drop-in React Web assistant UI wired to `@bytexbyte/nxtlinq-ai-agent-web-development`.
6
- *
7
- * @example
8
- * ```tsx
9
- * import { NxtlinqAgentChat } from '@bytexbyte/nxtlinq-ai-agent-ui-react-development';
10
- *
11
- * export default function Page() {
12
- * return (
13
- * <NxtlinqAgentChat
14
- * style={{ height: '100vh' }}
15
- * serviceId="..."
16
- * apiKey="..."
17
- * apiSecret="..."
18
- * environment="staging"
19
- * pseudoId={userId}
20
- * loadHistoryOnMount
21
- * />
22
- * );
23
- * }
24
- * ```
25
- */
26
- export function NxtlinqAgentChat({ title, placeholder, presetMessages, loadHistoryOnMount = false, historyLast, enableVoice = true, enableFileUpload = true, startInVoiceMode = false, startWithMicMuted = true, holdMicDuringAssistant = true, theme, style, headerStyle, onMessage, onError, onToolUse, children, fetchImpl, getTimezone, resetOnIdentityChange, ...agentConfig }) {
27
- return (_jsxs(NxtlinqAgentProvider, { fetchImpl: fetchImpl, getTimezone: getTimezone, resetOnIdentityChange: resetOnIdentityChange, onMessage: onMessage, onError: onError, onToolUse: onToolUse, ...agentConfig, children: [_jsx(AgentAssistantShell, { title: title, placeholder: placeholder, presetMessages: presetMessages, loadHistoryOnMount: loadHistoryOnMount, historyLast: historyLast, enableVoice: enableVoice, enableFileUpload: enableFileUpload, startInVoiceMode: startInVoiceMode, startWithMicMuted: startWithMicMuted, holdMicDuringAssistant: holdMicDuringAssistant, theme: theme, style: style, headerStyle: headerStyle }), children] }));
28
- }
@@ -1,5 +0,0 @@
1
- import React from 'react';
2
- import type { NxtlinqAgentChatProps } from '../types';
3
- export type AgentAssistantShellProps = Pick<NxtlinqAgentChatProps, 'title' | 'placeholder' | 'presetMessages' | 'enableVoice' | 'enableFileUpload' | 'theme' | 'style' | 'headerStyle' | 'loadHistoryOnMount' | 'historyLast' | 'startInVoiceMode' | 'startWithMicMuted' | 'holdMicDuringAssistant'>;
4
- export declare function AgentAssistantShell(props: AgentAssistantShellProps): React.ReactElement;
5
- //# sourceMappingURL=AgentAssistantShell.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AgentAssistantShell.d.ts","sourceRoot":"","sources":["../../src/components/AgentAssistantShell.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAK3D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAOtD,MAAM,MAAM,wBAAwB,GAAG,IAAI,CACzC,qBAAqB,EACnB,OAAO,GACP,aAAa,GACb,gBAAgB,GAChB,aAAa,GACb,kBAAkB,GAClB,OAAO,GACP,OAAO,GACP,aAAa,GACb,oBAAoB,GACpB,aAAa,GACb,kBAAkB,GAClB,mBAAmB,GACnB,wBAAwB,CAC3B,CAAC;AA2DF,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,wBAAwB,GAAG,KAAK,CAAC,YAAY,CAiBvF"}
@@ -1,52 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "@emotion/react/jsx-runtime";
2
- import { useEffect, useRef, useState } from 'react';
3
- import { AgentAssistantProvider, useAgentAssistant, } from '../context/AgentAssistantContext';
4
- import { AgentComposer } from './AgentComposer';
5
- import { AgentMessageList } from './AgentMessageList';
6
- import { AgentRemoteAudio } from './AgentRemoteAudio';
7
- import { AgentVoiceBar } from './AgentVoiceBar';
8
- import { PresetMessageChips } from './PresetMessageChips';
9
- function AgentAssistantInner({ title, headerStyle, style, loadHistoryOnMount, historyLast, startInVoiceMode, }) {
10
- const { theme, loadHistory, startVoice, isVoiceAvailable } = useAgentAssistant();
11
- const [historyReady, setHistoryReady] = useState(!loadHistoryOnMount);
12
- const voiceAutoStartRef = useRef(false);
13
- useEffect(() => {
14
- if (loadHistoryOnMount) {
15
- void loadHistory({ last: historyLast ?? 50 }).finally(() => setHistoryReady(true));
16
- }
17
- }, [loadHistory, loadHistoryOnMount, historyLast]);
18
- useEffect(() => {
19
- if (!startInVoiceMode || !isVoiceAvailable || voiceAutoStartRef.current)
20
- return;
21
- voiceAutoStartRef.current = true;
22
- void startVoice();
23
- }, [startInVoiceMode, isVoiceAvailable, startVoice]);
24
- return (_jsxs("div", { style: {
25
- display: 'flex',
26
- flexDirection: 'column',
27
- flex: 1,
28
- minHeight: 0,
29
- backgroundColor: theme.colors.background,
30
- ...style,
31
- }, children: [_jsx("header", { style: {
32
- padding: theme.spacing.md,
33
- borderBottom: `1px solid ${theme.colors.border}`,
34
- backgroundColor: theme.colors.surface,
35
- fontSize: theme.typography.titleSize,
36
- fontWeight: 600,
37
- color: theme.colors.assistantText,
38
- ...headerStyle,
39
- }, children: title ?? 'AI Assistant' }), _jsx(PresetMessageChips, {}), historyReady ? _jsx(AgentMessageList, {}) : _jsx("div", { style: { flex: 1 } }), _jsx(AgentVoiceBar, {}), _jsx(AgentComposer, {}), _jsx(AgentRemoteAudio, {})] }));
40
- }
41
- export function AgentAssistantShell(props) {
42
- return (_jsx(AgentAssistantProvider, { ui: {
43
- title: props.title,
44
- placeholder: props.placeholder,
45
- presetMessages: props.presetMessages,
46
- enableVoice: props.enableVoice,
47
- enableFileUpload: props.enableFileUpload,
48
- theme: props.theme,
49
- startWithMicMuted: props.startWithMicMuted,
50
- holdMicDuringAssistant: props.holdMicDuringAssistant,
51
- }, children: _jsx(AgentAssistantInner, { ...props }) }));
52
- }
@@ -1,3 +0,0 @@
1
- import React from 'react';
2
- export declare function AgentComposer(): React.ReactElement | null;
3
- //# sourceMappingURL=AgentComposer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AgentComposer.d.ts","sourceRoot":"","sources":["../../src/components/AgentComposer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,wBAAgB,aAAa,IAAI,KAAK,CAAC,YAAY,GAAG,IAAI,CAkIzD"}
@@ -1,60 +0,0 @@
1
- import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "@emotion/react/jsx-runtime";
2
- import React from 'react';
3
- import { useAgentAssistant } from '../context/AgentAssistantContext';
4
- export function AgentComposer() {
5
- const { theme, placeholder, inputText, setInputText, sendText, isLoading, isVoiceAvailable, interactionMode, startVoice, isVoiceConnecting, enableFileUpload, sendMessage, } = useAgentAssistant();
6
- const fileInputRef = React.useRef(null);
7
- if (interactionMode === 'voice') {
8
- return null;
9
- }
10
- const handleFiles = async (files) => {
11
- if (!files?.length)
12
- return;
13
- const { fileToAttachment } = await import('@bytexbyte/nxtlinq-ai-agent-web-development');
14
- const attachments = await Promise.all(Array.from(files).map((file) => fileToAttachment(file)));
15
- await sendMessage(attachments.length ? `Uploaded ${attachments.length} file(s)` : '', { attachments });
16
- if (fileInputRef.current)
17
- fileInputRef.current.value = '';
18
- };
19
- return (_jsxs("div", { style: {
20
- borderTop: `1px solid ${theme.colors.border}`,
21
- backgroundColor: theme.colors.surface,
22
- padding: theme.spacing.md,
23
- }, children: [_jsxs("div", { style: { display: 'flex', gap: theme.spacing.sm, alignItems: 'flex-end' }, children: [enableFileUpload ? (_jsxs(_Fragment, { children: [_jsx("button", { type: "button", onClick: () => fileInputRef.current?.click(), disabled: isLoading, style: {
24
- width: 36,
25
- height: 36,
26
- borderRadius: theme.radius.button,
27
- border: `1px solid ${theme.colors.border}`,
28
- backgroundColor: theme.colors.surface,
29
- cursor: 'pointer',
30
- }, "aria-label": "Upload file", children: "+" }), _jsx("input", { ref: fileInputRef, type: "file", multiple: true, accept: "image/*,.pdf,.doc,.docx,.txt", style: { display: 'none' }, onChange: (e) => void handleFiles(e.target.files) })] })) : null, _jsx("textarea", { value: inputText, onChange: (e) => setInputText(e.target.value), placeholder: placeholder, rows: 2, disabled: isLoading, maxLength: 4000, style: {
31
- flex: 1,
32
- resize: 'none',
33
- border: `1px solid ${theme.colors.border}`,
34
- borderRadius: theme.radius.panel,
35
- padding: theme.spacing.sm,
36
- fontSize: theme.typography.bodySize,
37
- color: theme.colors.assistantText,
38
- } }), _jsx("button", { type: "button", onClick: () => void sendText(), disabled: isLoading || !inputText.trim(), style: {
39
- backgroundColor: theme.colors.primary,
40
- color: theme.colors.primaryText,
41
- border: 'none',
42
- borderRadius: theme.radius.button,
43
- padding: `${theme.spacing.sm}px ${theme.spacing.md}px`,
44
- fontWeight: 600,
45
- opacity: isLoading || !inputText.trim() ? 0.5 : 1,
46
- cursor: 'pointer',
47
- }, children: "Send" })] }), isVoiceAvailable ? (_jsx("button", { type: "button", onClick: () => {
48
- startVoice().catch((err) => {
49
- console.warn('[nxtlinq] startVoice failed:', err);
50
- });
51
- }, disabled: isVoiceConnecting, style: {
52
- display: 'block',
53
- margin: `${theme.spacing.sm}px auto 0`,
54
- border: 'none',
55
- background: 'none',
56
- color: theme.colors.primary,
57
- fontSize: theme.typography.captionSize,
58
- cursor: 'pointer',
59
- }, children: isVoiceConnecting ? 'Connecting voice…' : 'Switch to voice mode' })) : null] }));
60
- }
@@ -1,3 +0,0 @@
1
- import React from 'react';
2
- export declare function AgentMessageList(): React.ReactElement;
3
- //# sourceMappingURL=AgentMessageList.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AgentMessageList.d.ts","sourceRoot":"","sources":["../../src/components/AgentMessageList.tsx"],"names":[],"mappings":"AACA,OAAO,KAA4B,MAAM,OAAO,CAAC;AAyCjD,wBAAgB,gBAAgB,IAAI,KAAK,CAAC,YAAY,CAmCrD"}
@@ -1,37 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "@emotion/react/jsx-runtime";
2
- import { useEffect, useRef } from 'react';
3
- import { useAgentAssistant } from '../context/AgentAssistantContext';
4
- function MessageBubble({ message }) {
5
- const { theme } = useAgentAssistant();
6
- const isUser = message.role === 'user';
7
- const displayText = message.partialContent && message.isStreaming
8
- ? message.partialContent
9
- : message.content;
10
- return (_jsx("div", { style: {
11
- display: 'flex',
12
- justifyContent: isUser ? 'flex-end' : 'flex-start',
13
- marginBottom: theme.spacing.sm,
14
- }, children: _jsxs("div", { style: {
15
- maxWidth: '85%',
16
- padding: `${theme.spacing.sm}px ${theme.spacing.md}px`,
17
- borderRadius: theme.radius.bubble,
18
- backgroundColor: isUser ? theme.colors.userBubble : theme.colors.assistantBubble,
19
- color: isUser ? theme.colors.userText : theme.colors.assistantText,
20
- fontSize: theme.typography.bodySize,
21
- whiteSpace: 'pre-wrap',
22
- }, children: [displayText || ' ', message.error ? (_jsx("div", { style: { color: theme.colors.error, fontSize: theme.typography.captionSize }, children: message.error })) : null] }) }));
23
- }
24
- export function AgentMessageList() {
25
- const { messages, isLoading, theme } = useAgentAssistant();
26
- const endRef = useRef(null);
27
- useEffect(() => {
28
- endRef.current?.scrollIntoView({ behavior: 'smooth' });
29
- }, [messages.length, messages[messages.length - 1]?.content, messages[messages.length - 1]?.partialContent]);
30
- return (_jsxs("div", { style: {
31
- flex: 1,
32
- minHeight: 0,
33
- overflowY: 'auto',
34
- padding: theme.spacing.md,
35
- backgroundColor: theme.colors.background,
36
- }, children: [messages.length === 0 ? (_jsx("p", { style: { textAlign: 'center', color: theme.colors.mutedText, marginTop: 40 }, children: "Send a message to start the conversation." })) : (messages.map((message) => (_jsx(MessageBubble, { message: message }, message.id)))), isLoading ? (_jsx("p", { style: { color: theme.colors.mutedText, fontSize: theme.typography.captionSize }, children: "Thinking\u2026" })) : null, _jsx("div", { ref: endRef })] }));
37
- }
@@ -1,4 +0,0 @@
1
- import React from 'react';
2
- /** Plays assistant WebRTC remote audio with retry until stream is ready. */
3
- export declare function AgentRemoteAudio(): React.ReactElement | null;
4
- //# sourceMappingURL=AgentRemoteAudio.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AgentRemoteAudio.d.ts","sourceRoot":"","sources":["../../src/components/AgentRemoteAudio.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4B,MAAM,OAAO,CAAC;AAGjD,4EAA4E;AAC5E,wBAAgB,gBAAgB,IAAI,KAAK,CAAC,YAAY,GAAG,IAAI,CA6B5D"}
@@ -1,34 +0,0 @@
1
- import { jsx as _jsx } from "@emotion/react/jsx-runtime";
2
- import { useEffect, useRef } from 'react';
3
- import { useAgentAssistant } from '../context/AgentAssistantContext';
4
- /** Plays assistant WebRTC remote audio with retry until stream is ready. */
5
- export function AgentRemoteAudio() {
6
- const { getRemoteAudioStream, isVoiceActive, isVoiceChannelReady } = useAgentAssistant();
7
- const audioRef = useRef(null);
8
- useEffect(() => {
9
- const audio = audioRef.current;
10
- if (!audio || !isVoiceActive)
11
- return;
12
- let cancelled = false;
13
- const attach = () => {
14
- if (cancelled)
15
- return;
16
- const stream = getRemoteAudioStream();
17
- if (!stream)
18
- return;
19
- audio.srcObject = stream;
20
- void audio.play().catch(() => undefined);
21
- };
22
- attach();
23
- const timer = window.setInterval(attach, 120);
24
- return () => {
25
- cancelled = true;
26
- window.clearInterval(timer);
27
- audio.pause();
28
- audio.srcObject = null;
29
- };
30
- }, [getRemoteAudioStream, isVoiceActive, isVoiceChannelReady]);
31
- if (!isVoiceActive)
32
- return null;
33
- return _jsx("audio", { ref: audioRef, autoPlay: true, playsInline: true, style: { display: 'none' } });
34
- }
@@ -1,3 +0,0 @@
1
- import React from 'react';
2
- export declare function AgentVoiceBar(): React.ReactElement | null;
3
- //# sourceMappingURL=AgentVoiceBar.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AgentVoiceBar.d.ts","sourceRoot":"","sources":["../../src/components/AgentVoiceBar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsB,MAAM,OAAO,CAAC;AAsC3C,wBAAgB,aAAa,IAAI,KAAK,CAAC,YAAY,GAAG,IAAI,CAsIzD"}