@bytexbyte/nxtlinq-ai-agent-ui-react-development 0.1.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.
- package/dist/NxtlinqAgentChat.d.ts +26 -0
- package/dist/NxtlinqAgentChat.d.ts.map +1 -0
- package/dist/NxtlinqAgentChat.js +28 -0
- package/dist/components/AgentAssistantShell.d.ts +5 -0
- package/dist/components/AgentAssistantShell.d.ts.map +1 -0
- package/dist/components/AgentAssistantShell.js +52 -0
- package/dist/components/AgentComposer.d.ts +3 -0
- package/dist/components/AgentComposer.d.ts.map +1 -0
- package/dist/components/AgentComposer.js +60 -0
- package/dist/components/AgentMessageList.d.ts +3 -0
- package/dist/components/AgentMessageList.d.ts.map +1 -0
- package/dist/components/AgentMessageList.js +37 -0
- package/dist/components/AgentRemoteAudio.d.ts +4 -0
- package/dist/components/AgentRemoteAudio.d.ts.map +1 -0
- package/dist/components/AgentRemoteAudio.js +34 -0
- package/dist/components/AgentVoiceBar.d.ts +3 -0
- package/dist/components/AgentVoiceBar.d.ts.map +1 -0
- package/dist/components/AgentVoiceBar.js +91 -0
- package/dist/components/PresetMessageChips.d.ts +3 -0
- package/dist/components/PresetMessageChips.d.ts.map +1 -0
- package/dist/components/PresetMessageChips.js +23 -0
- package/dist/context/AgentAssistantContext.d.ts +32 -0
- package/dist/context/AgentAssistantContext.d.ts.map +1 -0
- package/dist/context/AgentAssistantContext.js +159 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/legacy/assets/images/adiSideItalicDataUri.d.ts +2 -0
- package/dist/legacy/assets/images/adiSideItalicDataUri.d.ts.map +1 -0
- package/dist/legacy/assets/images/adiSideItalicDataUri.js +1 -0
- package/dist/legacy/chatbot/ChatBot.d.ts +5 -0
- package/dist/legacy/chatbot/ChatBot.d.ts.map +1 -0
- package/dist/legacy/chatbot/ChatBot.js +35 -0
- package/dist/legacy/chatbot/context/ChatBotContext.d.ts +5 -0
- package/dist/legacy/chatbot/context/ChatBotContext.d.ts.map +1 -0
- package/dist/legacy/chatbot/context/ChatBotContext.js +2908 -0
- package/dist/legacy/chatbot/types/ChatBotTypes.d.ts +166 -0
- package/dist/legacy/chatbot/types/ChatBotTypes.d.ts.map +1 -0
- package/dist/legacy/chatbot/types/ChatBotTypes.js +1 -0
- package/dist/legacy/chatbot/ui/BerifyMeModal.d.ts +17 -0
- package/dist/legacy/chatbot/ui/BerifyMeModal.d.ts.map +1 -0
- package/dist/legacy/chatbot/ui/BerifyMeModal.js +110 -0
- package/dist/legacy/chatbot/ui/ChatBotUI.d.ts +3 -0
- package/dist/legacy/chatbot/ui/ChatBotUI.d.ts.map +1 -0
- package/dist/legacy/chatbot/ui/ChatBotUI.js +625 -0
- package/dist/legacy/chatbot/ui/MessageInput.d.ts +3 -0
- package/dist/legacy/chatbot/ui/MessageInput.d.ts.map +1 -0
- package/dist/legacy/chatbot/ui/MessageInput.js +321 -0
- package/dist/legacy/chatbot/ui/MessageList.d.ts +4 -0
- package/dist/legacy/chatbot/ui/MessageList.d.ts.map +1 -0
- package/dist/legacy/chatbot/ui/MessageList.js +455 -0
- package/dist/legacy/chatbot/ui/ModelSelector.d.ts +4 -0
- package/dist/legacy/chatbot/ui/ModelSelector.d.ts.map +1 -0
- package/dist/legacy/chatbot/ui/ModelSelector.js +122 -0
- package/dist/legacy/chatbot/ui/NotificationModal.d.ts +15 -0
- package/dist/legacy/chatbot/ui/NotificationModal.d.ts.map +1 -0
- package/dist/legacy/chatbot/ui/NotificationModal.js +53 -0
- package/dist/legacy/chatbot/ui/PermissionForm.d.ts +8 -0
- package/dist/legacy/chatbot/ui/PermissionForm.d.ts.map +1 -0
- package/dist/legacy/chatbot/ui/PermissionForm.js +465 -0
- package/dist/legacy/chatbot/ui/PresetMessages.d.ts +4 -0
- package/dist/legacy/chatbot/ui/PresetMessages.d.ts.map +1 -0
- package/dist/legacy/chatbot/ui/PresetMessages.js +33 -0
- package/dist/legacy/chatbot/ui/VoiceModePanel.d.ts +3 -0
- package/dist/legacy/chatbot/ui/VoiceModePanel.d.ts.map +1 -0
- package/dist/legacy/chatbot/ui/VoiceModePanel.js +95 -0
- package/dist/legacy/chatbot/ui/styles/isolatedStyles.d.ts +73 -0
- package/dist/legacy/chatbot/ui/styles/isolatedStyles.d.ts.map +1 -0
- package/dist/legacy/chatbot/ui/styles/isolatedStyles.js +985 -0
- package/dist/legacy/index.d.ts +14 -0
- package/dist/legacy/index.d.ts.map +1 -0
- package/dist/legacy/index.js +12 -0
- package/dist/theme/defaultTheme.d.ts +3 -0
- package/dist/theme/defaultTheme.d.ts.map +1 -0
- package/dist/theme/defaultTheme.js +20 -0
- package/dist/types.d.ts +62 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +1 -0
- package/dist/voice/useVoiceConnectOrchestration.d.ts +21 -0
- package/dist/voice/useVoiceConnectOrchestration.d.ts.map +1 -0
- package/dist/voice/useVoiceConnectOrchestration.js +86 -0
- package/dist/voice/useVoiceMicState.d.ts +15 -0
- package/dist/voice/useVoiceMicState.d.ts.map +1 -0
- package/dist/voice/useVoiceMicState.js +94 -0
- package/dist/voice/useVoiceSilenceCommit.d.ts +10 -0
- package/dist/voice/useVoiceSilenceCommit.d.ts.map +1 -0
- package/dist/voice/useVoiceSilenceCommit.js +67 -0
- package/dist/voice/useVoiceTranscriptMessages.d.ts +16 -0
- package/dist/voice/useVoiceTranscriptMessages.d.ts.map +1 -0
- package/dist/voice/useVoiceTranscriptMessages.js +129 -0
- package/dist/voice/useWsRealtimeAudio.d.ts +18 -0
- package/dist/voice/useWsRealtimeAudio.d.ts.map +1 -0
- package/dist/voice/useWsRealtimeAudio.js +102 -0
- package/dist/voice/voiceMicConstants.d.ts +4 -0
- package/dist/voice/voiceMicConstants.d.ts.map +1 -0
- package/dist/voice/voiceMicConstants.js +10 -0
- package/dist/voice/ws/BrowserWsPcmPlayer.d.ts +23 -0
- package/dist/voice/ws/BrowserWsPcmPlayer.d.ts.map +1 -0
- package/dist/voice/ws/BrowserWsPcmPlayer.js +137 -0
- package/dist/voice/ws/BrowserWsPcmRecorder.d.ts +17 -0
- package/dist/voice/ws/BrowserWsPcmRecorder.d.ts.map +1 -0
- package/dist/voice/ws/BrowserWsPcmRecorder.js +71 -0
- package/dist/voice/ws/float32ToPcm16.d.ts +2 -0
- package/dist/voice/ws/float32ToPcm16.d.ts.map +1 -0
- package/dist/voice/ws/float32ToPcm16.js +8 -0
- package/dist/voice/ws/voiceSilenceConstants.d.ts +5 -0
- package/dist/voice/ws/voiceSilenceConstants.d.ts.map +1 -0
- package/dist/voice/ws/voiceSilenceConstants.js +4 -0
- package/dist/voice/ws/wsRealtimeConstants.d.ts +2 -0
- package/dist/voice/ws/wsRealtimeConstants.d.ts.map +1 -0
- package/dist/voice/ws/wsRealtimeConstants.js +1 -0
- package/package.json +60 -0
- package/src/NxtlinqAgentChat.tsx +79 -0
- package/src/components/AgentAssistantShell.tsx +104 -0
- package/src/components/AgentComposer.tsx +134 -0
- package/src/components/AgentMessageList.tsx +78 -0
- package/src/components/AgentRemoteAudio.tsx +34 -0
- package/src/components/AgentVoiceBar.tsx +173 -0
- package/src/components/PresetMessageChips.tsx +41 -0
- package/src/context/AgentAssistantContext.tsx +276 -0
- package/src/index.ts +78 -0
- package/src/legacy/assets/images/adiSideItalicDataUri.ts +1 -0
- package/src/legacy/chatbot/ChatBot.tsx +61 -0
- package/src/legacy/chatbot/context/ChatBotContext.tsx +3227 -0
- package/src/legacy/chatbot/types/ChatBotTypes.ts +195 -0
- package/src/legacy/chatbot/ui/BerifyMeModal.tsx +145 -0
- package/src/legacy/chatbot/ui/ChatBotUI.tsx +949 -0
- package/src/legacy/chatbot/ui/MessageInput.tsx +517 -0
- package/src/legacy/chatbot/ui/MessageList.tsx +764 -0
- package/src/legacy/chatbot/ui/ModelSelector.tsx +190 -0
- package/src/legacy/chatbot/ui/NotificationModal.tsx +110 -0
- package/src/legacy/chatbot/ui/PermissionForm.tsx +632 -0
- package/src/legacy/chatbot/ui/PresetMessages.tsx +50 -0
- package/src/legacy/chatbot/ui/VoiceModePanel.tsx +168 -0
- package/src/legacy/chatbot/ui/styles/isolatedStyles.ts +1058 -0
- package/src/legacy/index.ts +26 -0
- package/src/theme/defaultTheme.ts +22 -0
- package/src/types.ts +65 -0
- package/src/voice/useVoiceConnectOrchestration.ts +117 -0
- package/src/voice/useVoiceMicState.ts +117 -0
- package/src/voice/useVoiceTranscriptMessages.ts +173 -0
- package/src/voice/voiceMicConstants.ts +13 -0
|
@@ -0,0 +1,985 @@
|
|
|
1
|
+
import { css } from '@emotion/react';
|
|
2
|
+
// Light CSS Reset for SDK components - only reset problematic inherited styles
|
|
3
|
+
export const sdkReset = css `
|
|
4
|
+
/* Only reset problematic inherited styles, keep the rest */
|
|
5
|
+
box-sizing: border-box !important;
|
|
6
|
+
|
|
7
|
+
/* Ensure consistent font rendering */
|
|
8
|
+
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
|
|
9
|
+
'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
|
|
10
|
+
sans-serif !important;
|
|
11
|
+
|
|
12
|
+
/* Reset only problematic inherited styles */
|
|
13
|
+
text-decoration: none !important;
|
|
14
|
+
text-transform: none !important;
|
|
15
|
+
letter-spacing: normal !important;
|
|
16
|
+
word-spacing: normal !important;
|
|
17
|
+
text-align: left !important;
|
|
18
|
+
|
|
19
|
+
/* Reset list styles if needed */
|
|
20
|
+
list-style: none !important;
|
|
21
|
+
|
|
22
|
+
/* Reset form elements outline */
|
|
23
|
+
outline: none !important;
|
|
24
|
+
|
|
25
|
+
/* Reset user select for better UX */
|
|
26
|
+
user-select: auto !important;
|
|
27
|
+
`;
|
|
28
|
+
// Base container styles with light isolation
|
|
29
|
+
export const sdkContainer = css `
|
|
30
|
+
/* Light isolation - only reset problematic inherited styles */
|
|
31
|
+
${sdkReset}
|
|
32
|
+
|
|
33
|
+
/* Ensure all text elements have proper color inheritance */
|
|
34
|
+
&, & * {
|
|
35
|
+
color: inherit !important;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/* Ensure consistent box-sizing for all children */
|
|
39
|
+
& * {
|
|
40
|
+
box-sizing: border-box !important;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/* Light reset for buttons to prevent external button styles */
|
|
44
|
+
& button {
|
|
45
|
+
box-sizing: border-box !important;
|
|
46
|
+
font-family: inherit !important;
|
|
47
|
+
cursor: pointer !important;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/* Light reset for form elements */
|
|
51
|
+
& input, & textarea {
|
|
52
|
+
box-sizing: border-box !important;
|
|
53
|
+
font-family: inherit !important;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/* Light reset for text elements */
|
|
57
|
+
& div, & span, & p, & h1, & h2, & h3, & h4, & h5, & h6 {
|
|
58
|
+
box-sizing: border-box !important;
|
|
59
|
+
font-family: inherit !important;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/* Light reset for lists */
|
|
63
|
+
& ul, & ol, & li {
|
|
64
|
+
box-sizing: border-box !important;
|
|
65
|
+
font-family: inherit !important;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/* Light reset for links */
|
|
69
|
+
& a {
|
|
70
|
+
box-sizing: border-box !important;
|
|
71
|
+
font-family: inherit !important;
|
|
72
|
+
color: inherit !important;
|
|
73
|
+
text-decoration: none !important;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/* Special styling for AI Agent URL links */
|
|
77
|
+
& a[href^="http"], & a[href^="https"] {
|
|
78
|
+
color: #007bff !important;
|
|
79
|
+
text-decoration: underline !important;
|
|
80
|
+
cursor: pointer !important;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/* Specific class for AI Agent URL links */
|
|
84
|
+
& .ai-agent-url-link {
|
|
85
|
+
color: #007bff !important;
|
|
86
|
+
text-decoration: underline !important;
|
|
87
|
+
cursor: pointer !important;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/* Light reset for images */
|
|
91
|
+
& img {
|
|
92
|
+
box-sizing: border-box !important;
|
|
93
|
+
max-width: 100% !important;
|
|
94
|
+
height: auto !important;
|
|
95
|
+
}
|
|
96
|
+
`;
|
|
97
|
+
// Floating button styles
|
|
98
|
+
export const floatingButton = css `
|
|
99
|
+
position: fixed !important;
|
|
100
|
+
background-color: #007bff !important;
|
|
101
|
+
color: white !important;
|
|
102
|
+
border: none !important;
|
|
103
|
+
padding: 10px 20px !important;
|
|
104
|
+
border-radius: 20px !important;
|
|
105
|
+
cursor: pointer !important;
|
|
106
|
+
box-shadow: 0 2px 5px rgba(0,0,0,0.2) !important;
|
|
107
|
+
transition: all 0.3s ease !important;
|
|
108
|
+
z-index: 1000 !important;
|
|
109
|
+
font-size: 14px !important;
|
|
110
|
+
font-weight: 500 !important;
|
|
111
|
+
font-family: inherit !important;
|
|
112
|
+
max-width: calc(100vw - 40px) !important;
|
|
113
|
+
white-space: nowrap !important;
|
|
114
|
+
|
|
115
|
+
&:disabled {
|
|
116
|
+
cursor: not-allowed !important;
|
|
117
|
+
opacity: 0.6 !important;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
&:hover:not(:disabled) {
|
|
121
|
+
background-color: #0056b3 !important;
|
|
122
|
+
transform: translateY(-2px) !important;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/* Responsive adjustments for small windows */
|
|
126
|
+
@media (max-width: 768px) {
|
|
127
|
+
max-width: calc(100vw - 30px) !important;
|
|
128
|
+
padding: 8px 16px !important;
|
|
129
|
+
font-size: 13px !important;
|
|
130
|
+
touch-action: manipulation !important;
|
|
131
|
+
cursor: pointer !important;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
@media (max-width: 480px) {
|
|
135
|
+
max-width: calc(100vw - 20px) !important;
|
|
136
|
+
padding: 6px 12px !important;
|
|
137
|
+
font-size: 12px !important;
|
|
138
|
+
border-radius: 16px !important;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/* Ensure button is visible when viewport is very small */
|
|
142
|
+
@media (max-height: 200px) {
|
|
143
|
+
padding: 4px 8px !important;
|
|
144
|
+
font-size: 11px !important;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
@media (max-width: 200px) {
|
|
148
|
+
padding: 4px 8px !important;
|
|
149
|
+
font-size: 11px !important;
|
|
150
|
+
}
|
|
151
|
+
`;
|
|
152
|
+
// Chat window container styles
|
|
153
|
+
export const chatWindow = css `
|
|
154
|
+
position: fixed !important;
|
|
155
|
+
bottom: 20px !important;
|
|
156
|
+
right: 20px !important;
|
|
157
|
+
width: 500px !important;
|
|
158
|
+
max-width: calc(100vw - 40px) !important;
|
|
159
|
+
height: 600px !important;
|
|
160
|
+
max-height: calc(100vh - 40px) !important;
|
|
161
|
+
background-color: white !important;
|
|
162
|
+
border-radius: 10px !important;
|
|
163
|
+
box-shadow: 0 5px 15px rgba(0,0,0,0.2) !important;
|
|
164
|
+
display: flex !important;
|
|
165
|
+
flex-direction: column !important;
|
|
166
|
+
z-index: 1001 !important;
|
|
167
|
+
overflow: hidden !important;
|
|
168
|
+
font-family: inherit !important;
|
|
169
|
+
|
|
170
|
+
/* Mobile: near-fullscreen when open (inline dimensions from ChatBotUI still apply; hosts may override) */
|
|
171
|
+
@media (max-width: 768px) {
|
|
172
|
+
width: calc(100vw - 24px) !important;
|
|
173
|
+
max-width: calc(100vw - 24px) !important;
|
|
174
|
+
height: calc(100dvh - 24px) !important;
|
|
175
|
+
max-height: calc(100dvh - 24px) !important;
|
|
176
|
+
bottom: auto !important;
|
|
177
|
+
right: auto !important;
|
|
178
|
+
border-radius: 12px !important;
|
|
179
|
+
}
|
|
180
|
+
`;
|
|
181
|
+
// Resize handles — one per corner (hit area above header drag strip)
|
|
182
|
+
const resizeCornerBase = css `
|
|
183
|
+
position: absolute !important;
|
|
184
|
+
width: 18px !important;
|
|
185
|
+
height: 18px !important;
|
|
186
|
+
border-radius: 4px !important;
|
|
187
|
+
background: transparent !important;
|
|
188
|
+
border: none !important;
|
|
189
|
+
box-shadow: none !important;
|
|
190
|
+
z-index: 10 !important;
|
|
191
|
+
display: grid !important;
|
|
192
|
+
place-items: center !important;
|
|
193
|
+
`;
|
|
194
|
+
/** @deprecated Use resizeHandleNW — kept for compatibility */
|
|
195
|
+
export const resizeHandle = css `
|
|
196
|
+
${resizeCornerBase}
|
|
197
|
+
top: 6px !important;
|
|
198
|
+
left: 6px !important;
|
|
199
|
+
cursor: nwse-resize !important;
|
|
200
|
+
`;
|
|
201
|
+
export const resizeHandleNW = css `
|
|
202
|
+
${resizeCornerBase}
|
|
203
|
+
top: 6px !important;
|
|
204
|
+
left: 6px !important;
|
|
205
|
+
cursor: nwse-resize !important;
|
|
206
|
+
`;
|
|
207
|
+
export const resizeHandleNE = css `
|
|
208
|
+
${resizeCornerBase}
|
|
209
|
+
top: 6px !important;
|
|
210
|
+
right: 6px !important;
|
|
211
|
+
cursor: nesw-resize !important;
|
|
212
|
+
`;
|
|
213
|
+
export const resizeHandleSW = css `
|
|
214
|
+
${resizeCornerBase}
|
|
215
|
+
bottom: 6px !important;
|
|
216
|
+
left: 6px !important;
|
|
217
|
+
cursor: nesw-resize !important;
|
|
218
|
+
`;
|
|
219
|
+
export const resizeHandleSE = css `
|
|
220
|
+
${resizeCornerBase}
|
|
221
|
+
bottom: 6px !important;
|
|
222
|
+
right: 6px !important;
|
|
223
|
+
cursor: nwse-resize !important;
|
|
224
|
+
`;
|
|
225
|
+
// Header styles
|
|
226
|
+
export const chatHeader = css `
|
|
227
|
+
padding: 15px !important;
|
|
228
|
+
background-color: #007bff !important;
|
|
229
|
+
color: white !important;
|
|
230
|
+
border-radius: 10px 10px 0 0 !important;
|
|
231
|
+
display: flex !important;
|
|
232
|
+
justify-content: space-between !important;
|
|
233
|
+
align-items: center !important;
|
|
234
|
+
font-family: inherit !important;
|
|
235
|
+
`;
|
|
236
|
+
// Header title styles
|
|
237
|
+
export const headerTitle = css `
|
|
238
|
+
margin: 0 !important;
|
|
239
|
+
font-size: 16px !important;
|
|
240
|
+
font-weight: 600 !important;
|
|
241
|
+
color: white !important;
|
|
242
|
+
font-family: inherit !important;
|
|
243
|
+
`;
|
|
244
|
+
// Header button styles
|
|
245
|
+
export const headerButton = css `
|
|
246
|
+
background: none !important;
|
|
247
|
+
border: none !important;
|
|
248
|
+
color: white !important;
|
|
249
|
+
font-size: 18px !important;
|
|
250
|
+
cursor: pointer !important;
|
|
251
|
+
padding: 0 !important;
|
|
252
|
+
display: flex !important;
|
|
253
|
+
align-items: center !important;
|
|
254
|
+
justify-content: center !important;
|
|
255
|
+
border-radius: 4px !important;
|
|
256
|
+
transition: background-color 0.2s !important;
|
|
257
|
+
font-family: inherit !important;
|
|
258
|
+
width: 32px !important;
|
|
259
|
+
height: 32px !important;
|
|
260
|
+
line-height: 0 !important;
|
|
261
|
+
vertical-align: middle !important;
|
|
262
|
+
|
|
263
|
+
&:disabled {
|
|
264
|
+
cursor: not-allowed !important;
|
|
265
|
+
opacity: 0.6 !important;
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
&:hover:not(:disabled) {
|
|
269
|
+
background-color: rgba(255, 255, 255, 0.2) !important;
|
|
270
|
+
}
|
|
271
|
+
`;
|
|
272
|
+
// Close button styles
|
|
273
|
+
export const closeButton = css `
|
|
274
|
+
background: none !important;
|
|
275
|
+
border: none !important;
|
|
276
|
+
color: white !important;
|
|
277
|
+
font-size: 18px !important;
|
|
278
|
+
cursor: pointer !important;
|
|
279
|
+
padding: 0 !important;
|
|
280
|
+
display: flex !important;
|
|
281
|
+
align-items: center !important;
|
|
282
|
+
justify-content: center !important;
|
|
283
|
+
font-family: inherit !important;
|
|
284
|
+
width: 32px !important;
|
|
285
|
+
height: 32px !important;
|
|
286
|
+
line-height: 0 !important;
|
|
287
|
+
vertical-align: middle !important;
|
|
288
|
+
|
|
289
|
+
&:disabled {
|
|
290
|
+
cursor: not-allowed !important;
|
|
291
|
+
opacity: 0.6 !important;
|
|
292
|
+
}
|
|
293
|
+
`;
|
|
294
|
+
// Message list container styles
|
|
295
|
+
export const messageListContainer = css `
|
|
296
|
+
flex: 1 !important;
|
|
297
|
+
padding: 15px !important;
|
|
298
|
+
overflow-y: auto !important;
|
|
299
|
+
overflow-x: hidden !important;
|
|
300
|
+
display: flex !important;
|
|
301
|
+
flex-direction: column !important;
|
|
302
|
+
gap: 10px !important;
|
|
303
|
+
font-family: inherit !important;
|
|
304
|
+
`;
|
|
305
|
+
// Message bubble styles
|
|
306
|
+
export const messageBubble = css `
|
|
307
|
+
align-self: flex-start !important;
|
|
308
|
+
max-width: 80% !important;
|
|
309
|
+
margin-bottom: 10px !important;
|
|
310
|
+
font-family: inherit !important;
|
|
311
|
+
`;
|
|
312
|
+
// User message styles
|
|
313
|
+
export const userMessage = css `
|
|
314
|
+
align-self: flex-end !important;
|
|
315
|
+
width: fit-content !important;
|
|
316
|
+
max-width: 80% !important;
|
|
317
|
+
margin-bottom: 10px !important;
|
|
318
|
+
font-family: inherit !important;
|
|
319
|
+
`;
|
|
320
|
+
// Message content styles
|
|
321
|
+
export const messageContent = css `
|
|
322
|
+
background-color: #f1f1f1 !important;
|
|
323
|
+
color: #333 !important;
|
|
324
|
+
padding: 10px 15px !important;
|
|
325
|
+
border-radius: 15px !important;
|
|
326
|
+
word-wrap: break-word !important;
|
|
327
|
+
position: relative !important;
|
|
328
|
+
font-family: inherit !important;
|
|
329
|
+
`;
|
|
330
|
+
// User message content styles
|
|
331
|
+
export const userMessageContent = css `
|
|
332
|
+
background-color: #007bff !important;
|
|
333
|
+
color: white !important;
|
|
334
|
+
padding: 10px 15px !important;
|
|
335
|
+
border-radius: 15px !important;
|
|
336
|
+
word-wrap: break-word !important;
|
|
337
|
+
position: relative !important;
|
|
338
|
+
font-family: inherit !important;
|
|
339
|
+
`;
|
|
340
|
+
// Retry message content styles
|
|
341
|
+
export const retryMessageContent = css `
|
|
342
|
+
background-color: #fff3cd !important;
|
|
343
|
+
color: #856404 !important;
|
|
344
|
+
padding: 10px 15px !important;
|
|
345
|
+
border-radius: 15px !important;
|
|
346
|
+
word-wrap: break-word !important;
|
|
347
|
+
position: relative !important;
|
|
348
|
+
border: 1px solid #ffeaa7 !important;
|
|
349
|
+
font-family: inherit !important;
|
|
350
|
+
`;
|
|
351
|
+
// Chatbot button styles (for buttons inside chatbot window)
|
|
352
|
+
export const chatbotButton = css `
|
|
353
|
+
padding: 8px 16px !important;
|
|
354
|
+
background-color: #007bff !important;
|
|
355
|
+
color: white !important;
|
|
356
|
+
border: none !important;
|
|
357
|
+
border-radius: 5px !important;
|
|
358
|
+
cursor: pointer !important;
|
|
359
|
+
font-size: 14px !important;
|
|
360
|
+
font-family: inherit !important;
|
|
361
|
+
|
|
362
|
+
&:disabled {
|
|
363
|
+
background-color: #6c757d !important;
|
|
364
|
+
cursor: not-allowed !important;
|
|
365
|
+
opacity: 0.8 !important;
|
|
366
|
+
}
|
|
367
|
+
`;
|
|
368
|
+
// Action button styles (for buttons outside chatbot window)
|
|
369
|
+
export const actionButton = css `
|
|
370
|
+
padding: 8px 16px !important;
|
|
371
|
+
background-color: #007bff !important;
|
|
372
|
+
color: white !important;
|
|
373
|
+
border: none !important;
|
|
374
|
+
border-radius: 5px !important;
|
|
375
|
+
cursor: pointer !important;
|
|
376
|
+
font-size: 14px !important;
|
|
377
|
+
font-family: inherit !important;
|
|
378
|
+
|
|
379
|
+
&:disabled {
|
|
380
|
+
background-color: #6c757d !important;
|
|
381
|
+
cursor: not-allowed !important;
|
|
382
|
+
opacity: 0.8 !important;
|
|
383
|
+
}
|
|
384
|
+
`;
|
|
385
|
+
// Connected button styles
|
|
386
|
+
export const connectedButton = css `
|
|
387
|
+
padding: 8px 16px !important;
|
|
388
|
+
background-color: #28a745 !important;
|
|
389
|
+
color: white !important;
|
|
390
|
+
border: none !important;
|
|
391
|
+
border-radius: 5px !important;
|
|
392
|
+
cursor: pointer !important;
|
|
393
|
+
font-size: 14px !important;
|
|
394
|
+
font-family: inherit !important;
|
|
395
|
+
|
|
396
|
+
&:disabled {
|
|
397
|
+
cursor: not-allowed !important;
|
|
398
|
+
opacity: 0.8 !important;
|
|
399
|
+
}
|
|
400
|
+
`;
|
|
401
|
+
// Loading indicator styles
|
|
402
|
+
export const loadingIndicator = css `
|
|
403
|
+
align-self: flex-start !important;
|
|
404
|
+
background-color: #f1f1f1 !important;
|
|
405
|
+
color: #333 !important;
|
|
406
|
+
padding: 10px 15px !important;
|
|
407
|
+
border-radius: 15px !important;
|
|
408
|
+
max-width: 80% !important;
|
|
409
|
+
font-family: inherit !important;
|
|
410
|
+
`;
|
|
411
|
+
// Model indicator styles
|
|
412
|
+
export const modelIndicator = css `
|
|
413
|
+
display: flex !important;
|
|
414
|
+
align-items: center !important;
|
|
415
|
+
margin-top: 4px !important;
|
|
416
|
+
margin-left: 8px !important;
|
|
417
|
+
font-family: inherit !important;
|
|
418
|
+
`;
|
|
419
|
+
// Model badge styles
|
|
420
|
+
export const modelBadge = css `
|
|
421
|
+
background-color: #e3f2fd !important;
|
|
422
|
+
color: #1976d2 !important;
|
|
423
|
+
padding: 2px 8px !important;
|
|
424
|
+
border-radius: 10px !important;
|
|
425
|
+
font-size: 10px !important;
|
|
426
|
+
font-weight: 500 !important;
|
|
427
|
+
border: 1px solid #bbdefb !important;
|
|
428
|
+
display: flex !important;
|
|
429
|
+
align-items: center !important;
|
|
430
|
+
gap: 4px !important;
|
|
431
|
+
font-family: inherit !important;
|
|
432
|
+
`;
|
|
433
|
+
// Model dot styles
|
|
434
|
+
export const modelDot = css `
|
|
435
|
+
width: 6px !important;
|
|
436
|
+
height: 6px !important;
|
|
437
|
+
background-color: #1976d2 !important;
|
|
438
|
+
border-radius: 50% !important;
|
|
439
|
+
display: inline-block !important;
|
|
440
|
+
`;
|
|
441
|
+
// Toast notification styles
|
|
442
|
+
export const toastNotification = css `
|
|
443
|
+
position: fixed !important;
|
|
444
|
+
padding: 12px 24px !important;
|
|
445
|
+
border-radius: 8px !important;
|
|
446
|
+
z-index: 2000 !important;
|
|
447
|
+
font-weight: 600 !important;
|
|
448
|
+
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15) !important;
|
|
449
|
+
transition: all 0.3s ease !important;
|
|
450
|
+
display: flex !important;
|
|
451
|
+
align-items: center !important;
|
|
452
|
+
gap: 12px !important;
|
|
453
|
+
min-width: 300px !important;
|
|
454
|
+
max-width: 500px !important;
|
|
455
|
+
font-family: inherit !important;
|
|
456
|
+
`;
|
|
457
|
+
// Success toast styles
|
|
458
|
+
export const successToast = css `
|
|
459
|
+
${toastNotification}
|
|
460
|
+
background: #4caf50 !important;
|
|
461
|
+
color: white !important;
|
|
462
|
+
`;
|
|
463
|
+
// Error toast styles
|
|
464
|
+
export const errorToast = css `
|
|
465
|
+
${toastNotification}
|
|
466
|
+
background: #f44336 !important;
|
|
467
|
+
color: white !important;
|
|
468
|
+
`;
|
|
469
|
+
// Warning toast styles
|
|
470
|
+
export const warningToast = css `
|
|
471
|
+
${toastNotification}
|
|
472
|
+
background: #ff9800 !important;
|
|
473
|
+
color: white !important;
|
|
474
|
+
`;
|
|
475
|
+
// Info toast styles
|
|
476
|
+
export const infoToast = css `
|
|
477
|
+
${toastNotification}
|
|
478
|
+
background: #2196f3 !important;
|
|
479
|
+
color: white !important;
|
|
480
|
+
`;
|
|
481
|
+
// Toast close button styles
|
|
482
|
+
export const toastCloseButton = css `
|
|
483
|
+
background: none !important;
|
|
484
|
+
border: none !important;
|
|
485
|
+
color: white !important;
|
|
486
|
+
font-size: 18px !important;
|
|
487
|
+
cursor: pointer !important;
|
|
488
|
+
padding: 4px !important;
|
|
489
|
+
display: flex !important;
|
|
490
|
+
align-items: center !important;
|
|
491
|
+
justify-content: center !important;
|
|
492
|
+
border-radius: 4px !important;
|
|
493
|
+
transition: background-color 0.2s !important;
|
|
494
|
+
font-family: inherit !important;
|
|
495
|
+
|
|
496
|
+
&:hover {
|
|
497
|
+
background-color: rgba(255, 255, 255, 0.2) !important;
|
|
498
|
+
}
|
|
499
|
+
`;
|
|
500
|
+
// Modal overlay styles
|
|
501
|
+
export const modalOverlay = css `
|
|
502
|
+
position: fixed !important;
|
|
503
|
+
top: 0 !important;
|
|
504
|
+
left: 0 !important;
|
|
505
|
+
right: 0 !important;
|
|
506
|
+
bottom: 0 !important;
|
|
507
|
+
background-color: rgba(0, 0, 0, 0.5) !important;
|
|
508
|
+
display: flex !important;
|
|
509
|
+
align-items: center !important;
|
|
510
|
+
justify-content: center !important;
|
|
511
|
+
z-index: 1002 !important;
|
|
512
|
+
padding: 20px !important;
|
|
513
|
+
|
|
514
|
+
/* Mobile responsive adjustments */
|
|
515
|
+
@media (max-width: 768px) {
|
|
516
|
+
padding: 15px !important;
|
|
517
|
+
align-items: flex-start !important;
|
|
518
|
+
padding-top: 20px !important;
|
|
519
|
+
}
|
|
520
|
+
|
|
521
|
+
@media (max-width: 480px) {
|
|
522
|
+
padding: 10px !important;
|
|
523
|
+
align-items: flex-start !important;
|
|
524
|
+
padding-top: 15px !important;
|
|
525
|
+
}
|
|
526
|
+
`;
|
|
527
|
+
// IDV banner styles
|
|
528
|
+
export const idvBanner = css `
|
|
529
|
+
background-color: #fff3cd !important;
|
|
530
|
+
border: 1px solid #ffeaa7 !important;
|
|
531
|
+
border-left: 4px solid #f39c12 !important;
|
|
532
|
+
margin: 16px !important;
|
|
533
|
+
padding: 16px !important;
|
|
534
|
+
border-radius: 8px !important;
|
|
535
|
+
display: flex !important;
|
|
536
|
+
align-items: center !important;
|
|
537
|
+
gap: 12px !important;
|
|
538
|
+
font-family: inherit !important;
|
|
539
|
+
`;
|
|
540
|
+
// IDV banner title styles
|
|
541
|
+
export const idvBannerTitle = css `
|
|
542
|
+
margin: 0 0 8px 0 !important;
|
|
543
|
+
font-size: 14px !important;
|
|
544
|
+
font-weight: 600 !important;
|
|
545
|
+
color: #856404 !important;
|
|
546
|
+
font-family: inherit !important;
|
|
547
|
+
`;
|
|
548
|
+
// IDV banner text styles
|
|
549
|
+
export const idvBannerText = css `
|
|
550
|
+
margin: 0 0 12px 0 !important;
|
|
551
|
+
font-size: 13px !important;
|
|
552
|
+
color: #856404 !important;
|
|
553
|
+
line-height: 1.4 !important;
|
|
554
|
+
font-family: inherit !important;
|
|
555
|
+
`;
|
|
556
|
+
// IDV verify button styles
|
|
557
|
+
export const idvVerifyButton = css `
|
|
558
|
+
padding: 8px 16px !important;
|
|
559
|
+
background-color: #f39c12 !important;
|
|
560
|
+
color: white !important;
|
|
561
|
+
border: none !important;
|
|
562
|
+
border-radius: 6px !important;
|
|
563
|
+
cursor: pointer !important;
|
|
564
|
+
font-size: 13px !important;
|
|
565
|
+
font-weight: 500 !important;
|
|
566
|
+
transition: background-color 0.2s !important;
|
|
567
|
+
font-family: inherit !important;
|
|
568
|
+
|
|
569
|
+
&:disabled {
|
|
570
|
+
cursor: not-allowed !important;
|
|
571
|
+
opacity: 0.6 !important;
|
|
572
|
+
}
|
|
573
|
+
|
|
574
|
+
&:hover:not(:disabled) {
|
|
575
|
+
background-color: #e67e22 !important;
|
|
576
|
+
}
|
|
577
|
+
`;
|
|
578
|
+
// IDV dismiss button styles
|
|
579
|
+
export const idvDismissButton = css `
|
|
580
|
+
background: none !important;
|
|
581
|
+
border: none !important;
|
|
582
|
+
color: #856404 !important;
|
|
583
|
+
font-size: 18px !important;
|
|
584
|
+
cursor: pointer !important;
|
|
585
|
+
padding: 4px !important;
|
|
586
|
+
border-radius: 4px !important;
|
|
587
|
+
transition: background-color 0.2s !important;
|
|
588
|
+
font-family: inherit !important;
|
|
589
|
+
|
|
590
|
+
&:disabled {
|
|
591
|
+
cursor: not-allowed !important;
|
|
592
|
+
opacity: 0.6 !important;
|
|
593
|
+
}
|
|
594
|
+
|
|
595
|
+
&:hover:not(:disabled) {
|
|
596
|
+
background-color: rgba(133, 100, 4, 0.1) !important;
|
|
597
|
+
}
|
|
598
|
+
`;
|
|
599
|
+
// Loading spinner styles
|
|
600
|
+
export const loadingSpinner = css `
|
|
601
|
+
width: 12px !important;
|
|
602
|
+
height: 12px !important;
|
|
603
|
+
border: 2px solid rgba(255, 255, 255, 0.3) !important;
|
|
604
|
+
border-top: 2px solid white !important;
|
|
605
|
+
border-radius: 50% !important;
|
|
606
|
+
animation: spin 1s linear infinite !important;
|
|
607
|
+
`;
|
|
608
|
+
// Streaming partial text block (token-level)
|
|
609
|
+
export const streamingPartialText = css `
|
|
610
|
+
color: #333 !important;
|
|
611
|
+
white-space: pre-wrap !important;
|
|
612
|
+
word-break: break-word !important;
|
|
613
|
+
`;
|
|
614
|
+
// Streaming indicator container styles
|
|
615
|
+
export const streamingContainer = css `
|
|
616
|
+
margin-bottom: 12px !important;
|
|
617
|
+
padding: 12px !important;
|
|
618
|
+
background: linear-gradient(135deg, #f5f7fa 0%, #e8eef5 100%) !important;
|
|
619
|
+
border-radius: 8px !important;
|
|
620
|
+
border-left: 3px solid #667eea !important;
|
|
621
|
+
font-family: inherit !important;
|
|
622
|
+
`;
|
|
623
|
+
// Streaming header styles
|
|
624
|
+
export const streamingHeader = css `
|
|
625
|
+
display: flex !important;
|
|
626
|
+
align-items: center !important;
|
|
627
|
+
gap: 8px !important;
|
|
628
|
+
margin-bottom: 8px !important;
|
|
629
|
+
font-family: inherit !important;
|
|
630
|
+
`;
|
|
631
|
+
// Streaming icon styles
|
|
632
|
+
export const streamingIcon = css `
|
|
633
|
+
font-size: 16px !important;
|
|
634
|
+
animation: pulse 1.5s ease-in-out infinite !important;
|
|
635
|
+
|
|
636
|
+
@keyframes pulse {
|
|
637
|
+
0%, 100% {
|
|
638
|
+
opacity: 1 !important;
|
|
639
|
+
transform: scale(1) !important;
|
|
640
|
+
}
|
|
641
|
+
50% {
|
|
642
|
+
opacity: 0.6 !important;
|
|
643
|
+
transform: scale(1.1) !important;
|
|
644
|
+
}
|
|
645
|
+
}
|
|
646
|
+
`;
|
|
647
|
+
// Streaming tool name styles
|
|
648
|
+
export const streamingToolName = css `
|
|
649
|
+
font-weight: 600 !important;
|
|
650
|
+
color: #667eea !important;
|
|
651
|
+
font-size: 14px !important;
|
|
652
|
+
font-family: inherit !important;
|
|
653
|
+
`;
|
|
654
|
+
// Streaming progress percentage styles
|
|
655
|
+
export const streamingProgressPercent = css `
|
|
656
|
+
margin-left: auto !important;
|
|
657
|
+
color: #888 !important;
|
|
658
|
+
font-size: 12px !important;
|
|
659
|
+
font-weight: 600 !important;
|
|
660
|
+
font-family: inherit !important;
|
|
661
|
+
`;
|
|
662
|
+
// Streaming progress bar container styles
|
|
663
|
+
export const streamingProgressContainer = css `
|
|
664
|
+
width: 100% !important;
|
|
665
|
+
height: 4px !important;
|
|
666
|
+
background: rgba(102, 126, 234, 0.1) !important;
|
|
667
|
+
border-radius: 2px !important;
|
|
668
|
+
overflow: hidden !important;
|
|
669
|
+
margin-bottom: 8px !important;
|
|
670
|
+
`;
|
|
671
|
+
// Streaming progress bar fill styles
|
|
672
|
+
export const streamingProgressBar = css `
|
|
673
|
+
height: 100% !important;
|
|
674
|
+
background: linear-gradient(90deg, #667eea, #764ba2) !important;
|
|
675
|
+
transition: width 0.3s ease !important;
|
|
676
|
+
`;
|
|
677
|
+
// Streaming status message styles
|
|
678
|
+
export const streamingStatus = css `
|
|
679
|
+
font-size: 13px !important;
|
|
680
|
+
color: #555 !important;
|
|
681
|
+
font-style: italic !important;
|
|
682
|
+
font-family: inherit !important;
|
|
683
|
+
`;
|
|
684
|
+
// Streaming caret (blinking)
|
|
685
|
+
export const streamingCaret = css `
|
|
686
|
+
margin-left: 2px !important;
|
|
687
|
+
animation: blink 1s infinite !important;
|
|
688
|
+
|
|
689
|
+
@keyframes blink {
|
|
690
|
+
0%, 50% {
|
|
691
|
+
opacity: 1 !important;
|
|
692
|
+
}
|
|
693
|
+
51%, 100% {
|
|
694
|
+
opacity: 0 !important;
|
|
695
|
+
}
|
|
696
|
+
}
|
|
697
|
+
`;
|
|
698
|
+
// Streaming steps container styles
|
|
699
|
+
export const streamingStepsContainer = css `
|
|
700
|
+
margin-top: 8px !important;
|
|
701
|
+
font-size: 12px !important;
|
|
702
|
+
font-family: inherit !important;
|
|
703
|
+
`;
|
|
704
|
+
// Streaming step item styles
|
|
705
|
+
export const streamingStepItem = css `
|
|
706
|
+
display: flex !important;
|
|
707
|
+
align-items: center !important;
|
|
708
|
+
gap: 6px !important;
|
|
709
|
+
margin-top: 4px !important;
|
|
710
|
+
color: #666 !important;
|
|
711
|
+
font-family: inherit !important;
|
|
712
|
+
`;
|
|
713
|
+
// Streaming step checkmark styles
|
|
714
|
+
export const streamingStepCheck = css `
|
|
715
|
+
color: #4caf50 !important;
|
|
716
|
+
`;
|
|
717
|
+
// ===== PII Pipeline Stepper Styles =====
|
|
718
|
+
// Stepper outer container — flex, right-aligned for user messages
|
|
719
|
+
export const piiStepperContainer = css `
|
|
720
|
+
display: flex !important;
|
|
721
|
+
align-items: center !important;
|
|
722
|
+
gap: 4px !important;
|
|
723
|
+
margin-top: 6px !important;
|
|
724
|
+
justify-content: flex-end !important;
|
|
725
|
+
font-family: inherit !important;
|
|
726
|
+
font-size: 11px !important;
|
|
727
|
+
font-weight: 500 !important;
|
|
728
|
+
max-width: 100% !important;
|
|
729
|
+
overflow: hidden !important;
|
|
730
|
+
`;
|
|
731
|
+
// Arrow between steps
|
|
732
|
+
export const piiStepArrow = css `
|
|
733
|
+
color: #bdbdbd !important;
|
|
734
|
+
font-size: 10px !important;
|
|
735
|
+
margin: 0 1px !important;
|
|
736
|
+
user-select: none !important;
|
|
737
|
+
`;
|
|
738
|
+
// Step base style
|
|
739
|
+
export const piiStepBase = css `
|
|
740
|
+
display: inline-flex !important;
|
|
741
|
+
align-items: center !important;
|
|
742
|
+
gap: 3px !important;
|
|
743
|
+
padding: 2px 7px !important;
|
|
744
|
+
border-radius: 10px !important;
|
|
745
|
+
font-size: 10px !important;
|
|
746
|
+
font-weight: 500 !important;
|
|
747
|
+
white-space: nowrap !important;
|
|
748
|
+
transition: all 0.2s ease !important;
|
|
749
|
+
font-family: inherit !important;
|
|
750
|
+
`;
|
|
751
|
+
// Active step — green with pulse
|
|
752
|
+
export const piiStepActiveStyle = css `
|
|
753
|
+
background-color: #e8f5e9 !important;
|
|
754
|
+
color: #2e7d32 !important;
|
|
755
|
+
border: 1px solid #a5d6a7 !important;
|
|
756
|
+
|
|
757
|
+
@keyframes piiPulse {
|
|
758
|
+
0%, 100% { opacity: 1; }
|
|
759
|
+
50% { opacity: 0.5; }
|
|
760
|
+
}
|
|
761
|
+
animation: piiPulse 1.5s ease-in-out infinite !important;
|
|
762
|
+
`;
|
|
763
|
+
// Done step — green checkmark
|
|
764
|
+
export const piiStepDoneStyle = css `
|
|
765
|
+
background-color: #e8f5e9 !important;
|
|
766
|
+
color: #2e7d32 !important;
|
|
767
|
+
border: 1px solid #c8e6c9 !important;
|
|
768
|
+
`;
|
|
769
|
+
// Pending step — grey
|
|
770
|
+
export const piiStepPendingStyle = css `
|
|
771
|
+
background-color: #f5f5f5 !important;
|
|
772
|
+
color: #9e9e9e !important;
|
|
773
|
+
border: 1px solid #e0e0e0 !important;
|
|
774
|
+
`;
|
|
775
|
+
// Badge outer container — column layout keeps badge anchored right
|
|
776
|
+
export const piiBadgeContainer = css `
|
|
777
|
+
display: flex !important;
|
|
778
|
+
flex-direction: column !important;
|
|
779
|
+
align-items: flex-end !important;
|
|
780
|
+
margin-top: 6px !important;
|
|
781
|
+
`;
|
|
782
|
+
// Clickable badge button
|
|
783
|
+
export const piiBadgeButton = css `
|
|
784
|
+
display: inline-flex !important;
|
|
785
|
+
align-items: center !important;
|
|
786
|
+
gap: 5px !important;
|
|
787
|
+
padding: 3px 10px !important;
|
|
788
|
+
background-color: #e8f5e9 !important;
|
|
789
|
+
color: #2e7d32 !important;
|
|
790
|
+
border: 1px solid #c8e6c9 !important;
|
|
791
|
+
border-radius: 10px !important;
|
|
792
|
+
font-size: 11px !important;
|
|
793
|
+
font-weight: 500 !important;
|
|
794
|
+
cursor: pointer !important;
|
|
795
|
+
font-family: inherit !important;
|
|
796
|
+
transition: background-color 0.2s ease !important;
|
|
797
|
+
line-height: 1.4 !important;
|
|
798
|
+
|
|
799
|
+
&:hover {
|
|
800
|
+
background-color: #c8e6c9 !important;
|
|
801
|
+
}
|
|
802
|
+
`;
|
|
803
|
+
// Detail panel (expanded under badge) — fixed width prevents layout shift
|
|
804
|
+
export const piiDetailPanel = css `
|
|
805
|
+
margin-top: 6px !important;
|
|
806
|
+
padding: 10px 12px !important;
|
|
807
|
+
background-color: #fafafa !important;
|
|
808
|
+
border: 1px solid #e0e0e0 !important;
|
|
809
|
+
border-radius: 8px !important;
|
|
810
|
+
font-size: 11px !important;
|
|
811
|
+
font-family: inherit !important;
|
|
812
|
+
width: max-content !important;
|
|
813
|
+
max-width: 100% !important;
|
|
814
|
+
`;
|
|
815
|
+
// Mini pipeline row inside detail panel
|
|
816
|
+
export const piiMiniPipeline = css `
|
|
817
|
+
display: flex !important;
|
|
818
|
+
align-items: center !important;
|
|
819
|
+
gap: 4px !important;
|
|
820
|
+
margin-bottom: 8px !important;
|
|
821
|
+
padding-bottom: 8px !important;
|
|
822
|
+
border-bottom: 1px solid #e0e0e0 !important;
|
|
823
|
+
font-size: 10px !important;
|
|
824
|
+
font-weight: 500 !important;
|
|
825
|
+
`;
|
|
826
|
+
// Mapping table container
|
|
827
|
+
export const piiMappingTable = css `
|
|
828
|
+
display: flex !important;
|
|
829
|
+
flex-direction: column !important;
|
|
830
|
+
gap: 4px !important;
|
|
831
|
+
`;
|
|
832
|
+
// Single mapping row
|
|
833
|
+
export const piiMappingRow = css `
|
|
834
|
+
display: flex !important;
|
|
835
|
+
align-items: center !important;
|
|
836
|
+
gap: 6px !important;
|
|
837
|
+
font-size: 11px !important;
|
|
838
|
+
line-height: 1.4 !important;
|
|
839
|
+
`;
|
|
840
|
+
// Original value — red strikethrough
|
|
841
|
+
export const piiMappingOriginal = css `
|
|
842
|
+
color: #d32f2f !important;
|
|
843
|
+
text-decoration: line-through !important;
|
|
844
|
+
font-family: inherit !important;
|
|
845
|
+
`;
|
|
846
|
+
// Token value — blue monospace
|
|
847
|
+
export const piiMappingToken = css `
|
|
848
|
+
color: #1565c0 !important;
|
|
849
|
+
font-family: monospace !important;
|
|
850
|
+
font-weight: 600 !important;
|
|
851
|
+
`;
|
|
852
|
+
// "No sensitive data found" indicator with fadeOut
|
|
853
|
+
export const piiNoPiiIndicator = css `
|
|
854
|
+
display: flex !important;
|
|
855
|
+
align-items: center !important;
|
|
856
|
+
justify-content: flex-end !important;
|
|
857
|
+
gap: 5px !important;
|
|
858
|
+
margin-top: 6px !important;
|
|
859
|
+
font-size: 11px !important;
|
|
860
|
+
font-weight: 500 !important;
|
|
861
|
+
color: #66bb6a !important;
|
|
862
|
+
font-family: inherit !important;
|
|
863
|
+
|
|
864
|
+
@keyframes piiFadeOut {
|
|
865
|
+
0% { opacity: 1; }
|
|
866
|
+
70% { opacity: 1; }
|
|
867
|
+
100% { opacity: 0; }
|
|
868
|
+
}
|
|
869
|
+
animation: piiFadeOut 2s ease-out forwards !important;
|
|
870
|
+
`;
|
|
871
|
+
// Shimmer overlay on original text while PII pipeline is scanning (steps 0-1)
|
|
872
|
+
// Uses negative margin/padding to extend ::after over the full bubble (including parent padding)
|
|
873
|
+
export const piiScanningShimmer = css `
|
|
874
|
+
position: relative !important;
|
|
875
|
+
/* Extend this div to cover parent's padding area */
|
|
876
|
+
margin: -10px -15px !important;
|
|
877
|
+
padding: 10px 15px !important;
|
|
878
|
+
overflow: hidden !important;
|
|
879
|
+
border-radius: 15px !important;
|
|
880
|
+
|
|
881
|
+
&::after {
|
|
882
|
+
content: '' !important;
|
|
883
|
+
position: absolute !important;
|
|
884
|
+
top: 0 !important;
|
|
885
|
+
left: 0 !important;
|
|
886
|
+
width: 100% !important;
|
|
887
|
+
height: 100% !important;
|
|
888
|
+
background: linear-gradient(
|
|
889
|
+
90deg,
|
|
890
|
+
transparent 0%,
|
|
891
|
+
rgba(255, 255, 255, 0.1) 40%,
|
|
892
|
+
rgba(255, 255, 255, 0.28) 50%,
|
|
893
|
+
rgba(255, 255, 255, 0.1) 60%,
|
|
894
|
+
transparent 100%
|
|
895
|
+
) !important;
|
|
896
|
+
pointer-events: none !important;
|
|
897
|
+
border-radius: 15px !important;
|
|
898
|
+
|
|
899
|
+
@keyframes piiShimmer {
|
|
900
|
+
0% { transform: translateX(-150%); }
|
|
901
|
+
100% { transform: translateX(150%); }
|
|
902
|
+
}
|
|
903
|
+
animation: piiShimmer 1.8s ease-in-out infinite !important;
|
|
904
|
+
}
|
|
905
|
+
`;
|
|
906
|
+
// Content swap-in animation — scan sweep + fade (plays when content switches to redacted)
|
|
907
|
+
export const piiContentSwapIn = css `
|
|
908
|
+
position: relative !important;
|
|
909
|
+
overflow: hidden !important;
|
|
910
|
+
|
|
911
|
+
@keyframes piiContentFadeIn {
|
|
912
|
+
0% { opacity: 0.15; }
|
|
913
|
+
40% { opacity: 0.5; }
|
|
914
|
+
100% { opacity: 1; }
|
|
915
|
+
}
|
|
916
|
+
animation: piiContentFadeIn 1.2s ease-out !important;
|
|
917
|
+
|
|
918
|
+
/* Green scan line sweeping across */
|
|
919
|
+
&::after {
|
|
920
|
+
content: '' !important;
|
|
921
|
+
position: absolute !important;
|
|
922
|
+
top: 0 !important;
|
|
923
|
+
left: 0 !important;
|
|
924
|
+
width: 100% !important;
|
|
925
|
+
height: 100% !important;
|
|
926
|
+
background: linear-gradient(
|
|
927
|
+
90deg,
|
|
928
|
+
transparent 0%,
|
|
929
|
+
rgba(46, 125, 50, 0.05) 30%,
|
|
930
|
+
rgba(46, 125, 50, 0.25) 48%,
|
|
931
|
+
rgba(255, 255, 255, 0.4) 50%,
|
|
932
|
+
rgba(46, 125, 50, 0.25) 52%,
|
|
933
|
+
rgba(46, 125, 50, 0.05) 70%,
|
|
934
|
+
transparent 100%
|
|
935
|
+
) !important;
|
|
936
|
+
pointer-events: none !important;
|
|
937
|
+
border-radius: inherit !important;
|
|
938
|
+
|
|
939
|
+
@keyframes piiScanSweep {
|
|
940
|
+
0% { transform: translateX(-150%); }
|
|
941
|
+
100% { transform: translateX(150%); }
|
|
942
|
+
}
|
|
943
|
+
animation: piiScanSweep 1.4s ease-in-out forwards !important;
|
|
944
|
+
}
|
|
945
|
+
`;
|
|
946
|
+
// Static token style (no animation — for loaded history)
|
|
947
|
+
export const piiContentStatic = css ``;
|
|
948
|
+
// Token reveal glow animation (applied to individual tokens during live transition)
|
|
949
|
+
// Uses animation-fill-mode: both — keyframe 0% applies BEFORE delay, 100% sticks AFTER.
|
|
950
|
+
// Do NOT set opacity on the element itself — let the animation control it.
|
|
951
|
+
export const piiTokenReveal = css `
|
|
952
|
+
display: inline !important;
|
|
953
|
+
font-family: monospace !important;
|
|
954
|
+
font-weight: 400 !important;
|
|
955
|
+
|
|
956
|
+
@keyframes piiTokenGlow {
|
|
957
|
+
0% {
|
|
958
|
+
opacity: 0;
|
|
959
|
+
background-color: rgba(46, 125, 50, 0.5);
|
|
960
|
+
color: #1b5e20;
|
|
961
|
+
box-shadow: 0 0 12px rgba(46, 125, 50, 0.5);
|
|
962
|
+
transform: scale(1.08);
|
|
963
|
+
}
|
|
964
|
+
30% {
|
|
965
|
+
opacity: 1;
|
|
966
|
+
background-color: rgba(46, 125, 50, 0.3);
|
|
967
|
+
box-shadow: 0 0 8px rgba(46, 125, 50, 0.3);
|
|
968
|
+
transform: scale(1.02);
|
|
969
|
+
}
|
|
970
|
+
70% {
|
|
971
|
+
opacity: 1;
|
|
972
|
+
background-color: rgba(46, 125, 50, 0.1);
|
|
973
|
+
box-shadow: 0 0 2px rgba(46, 125, 50, 0.1);
|
|
974
|
+
transform: scale(1.0);
|
|
975
|
+
}
|
|
976
|
+
100% {
|
|
977
|
+
opacity: 1;
|
|
978
|
+
background-color: transparent;
|
|
979
|
+
color: inherit;
|
|
980
|
+
box-shadow: none;
|
|
981
|
+
transform: scale(1.0);
|
|
982
|
+
}
|
|
983
|
+
}
|
|
984
|
+
animation: piiTokenGlow 1.0s ease-out both !important;
|
|
985
|
+
`;
|