@doderasoftware/restify-ai 0.2.0-beta.2 → 0.2.0-beta.3

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 (46) hide show
  1. package/README.md +253 -14
  2. package/dist/components/AiChatDrawer.vue.d.ts +25 -3
  3. package/dist/components/AiChatDrawer.vue.d.ts.map +1 -1
  4. package/dist/components/ChatInput.vue.d.ts +10 -0
  5. package/dist/components/ChatInput.vue.d.ts.map +1 -1
  6. package/dist/components/ChatMessage.vue.d.ts.map +1 -1
  7. package/dist/components/drawer/ConversationHistory.vue.d.ts +3 -0
  8. package/dist/components/drawer/ConversationHistory.vue.d.ts.map +1 -0
  9. package/dist/components/drawer/DrawerHeader.vue.d.ts +4 -0
  10. package/dist/components/drawer/DrawerHeader.vue.d.ts.map +1 -1
  11. package/dist/components/drawer/DrawerMessageList.vue.d.ts.map +1 -1
  12. package/dist/components/icons/IconHistory.vue.d.ts +3 -0
  13. package/dist/components/icons/IconHistory.vue.d.ts.map +1 -0
  14. package/dist/components/icons/IconMicrophone.vue.d.ts +3 -0
  15. package/dist/components/icons/IconMicrophone.vue.d.ts.map +1 -0
  16. package/dist/components/icons/IconMicrophoneOff.vue.d.ts +3 -0
  17. package/dist/components/icons/IconMicrophoneOff.vue.d.ts.map +1 -0
  18. package/dist/components/icons/index.d.ts +3 -0
  19. package/dist/components/icons/index.d.ts.map +1 -1
  20. package/dist/components/input/AudioWave.vue.d.ts +29 -0
  21. package/dist/components/input/AudioWave.vue.d.ts.map +1 -0
  22. package/dist/components/input/InputActions.vue.d.ts +24 -3
  23. package/dist/components/input/InputActions.vue.d.ts.map +1 -1
  24. package/dist/composables/useChatInput.d.ts +2 -0
  25. package/dist/composables/useChatInput.d.ts.map +1 -1
  26. package/dist/config.d.ts.map +1 -1
  27. package/dist/index.d.ts +5 -1
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/restify-ai.js +2962 -2388
  30. package/dist/restify-ai.umd.cjs +52 -52
  31. package/dist/store/storage.d.ts +10 -1
  32. package/dist/store/storage.d.ts.map +1 -1
  33. package/dist/store/store.d.ts +42 -0
  34. package/dist/store/store.d.ts.map +1 -1
  35. package/dist/style.css +1 -1
  36. package/dist/types/chat.d.ts +12 -0
  37. package/dist/types/chat.d.ts.map +1 -1
  38. package/dist/types/config.d.ts +28 -1
  39. package/dist/types/config.d.ts.map +1 -1
  40. package/dist/types/index.d.ts +2 -2
  41. package/dist/types/index.d.ts.map +1 -1
  42. package/dist/types/texts.d.ts +8 -0
  43. package/dist/types/texts.d.ts.map +1 -1
  44. package/dist/types/ui.d.ts +11 -3
  45. package/dist/types/ui.d.ts.map +1 -1
  46. package/package.json +1 -1
package/README.md CHANGED
@@ -15,6 +15,7 @@ A production-ready AI chatbot component for Vue 3 with real-time SSE streaming,
15
15
 
16
16
  - 🌊 **Real-time SSE Streaming** - Smooth character-by-character response streaming
17
17
  - 📎 **File Attachments** - Upload and process documents, images, and more
18
+ - 🎤 **Audio Input** - Voice recording with visual feedback and wave animation
18
19
  - 👥 **@Mentions System** - Reference entities from your application (employees, jobs, projects, etc.)
19
20
  - 💡 **Context-Aware Suggestions** - Smart prompts based on current page/route
20
21
  - 💬 **Chat History** - Persistent conversation memory with configurable limits
@@ -276,6 +277,10 @@ export function setupRestifyAi(app: App) {
276
277
  keyboardShortcut: 'mod+g', // 'mod' = Cmd on Mac, Ctrl on Windows
277
278
  enableSupportMode: true,
278
279
  useQuota: true, // Enable quota management
280
+ useHeadersRateLimiter: true, // Use rate limit headers instead of quota endpoint
281
+ useConversationId: true, // Enable conversation ID tracking
282
+ useConversationHistory: true, // Enable conversation history sidebar
283
+ maxConversationHistory: 10, // Max conversations to store (default: 10)
279
284
  canToggle: () => true,
280
285
 
281
286
  // ═══════════════════════════════════════════════════════════════
@@ -332,6 +337,9 @@ export function setupRestifyAi(app: App) {
332
337
  | `showCloseButton` | `boolean` | `true` | Show close button |
333
338
  | `showNewChatButton` | `boolean` | `true` | Show new chat button |
334
339
  | `confirmClose` | `boolean` | `true` | Confirm before clearing history |
340
+ | `enableAudioInput` | `boolean` | `false` | Enable voice recording button |
341
+ | `isRecording` | `boolean` | `false` | Audio recording state (controlled) |
342
+ | `inputValue` | `string` | `''` | Input text value (v-model:inputValue) |
335
343
  | `autoFetchQuota` | `boolean` | `true` | Auto-fetch quota when opened |
336
344
  | `historyLimit` | `HistoryLimitConfig` | - | History limit configuration |
337
345
  | `loadingText` | `LoadingTextConfig` | - | Loading text configuration |
@@ -374,14 +382,84 @@ function handleContactSupport() {
374
382
  </script>
375
383
  ```
376
384
 
385
+ ### Audio Input Example
386
+
387
+ Enable voice recording with the `enableAudioInput` prop and handle the recording state:
388
+
389
+ ```vue
390
+ <template>
391
+ <AiChatDrawer
392
+ v-model="aiStore.showChat"
393
+ v-model:input-value="audioInput"
394
+ :enable-audio-input="true"
395
+ :is-recording="isRecording"
396
+ @toggle-audio-recording="toggleRecording"
397
+ />
398
+ </template>
399
+
400
+ <script setup lang="ts">
401
+ import { ref } from 'vue'
402
+ import { AiChatDrawer, useRestifyAiStore } from '@doderasoftware/restify-ai'
403
+
404
+ const aiStore = useRestifyAiStore()
405
+ const isRecording = ref(false)
406
+ const audioInput = ref('')
407
+ let mediaRecorder: MediaRecorder | null = null
408
+
409
+ async function toggleRecording() {
410
+ if (isRecording.value) {
411
+ // Stop recording
412
+ mediaRecorder?.stop()
413
+ isRecording.value = false
414
+ } else {
415
+ // Start recording
416
+ try {
417
+ const stream = await navigator.mediaDevices.getUserMedia({ audio: true })
418
+ mediaRecorder = new MediaRecorder(stream)
419
+
420
+ const chunks: Blob[] = []
421
+ mediaRecorder.ondataavailable = (e) => chunks.push(e.data)
422
+ mediaRecorder.onstop = async () => {
423
+ const audioBlob = new Blob(chunks, { type: 'audio/webm' })
424
+ // Process the audio (e.g., send to transcription API)
425
+ const transcription = await transcribeAudio(audioBlob)
426
+ audioInput.value = transcription
427
+ stream.getTracks().forEach(track => track.stop())
428
+ }
429
+
430
+ mediaRecorder.start()
431
+ isRecording.value = true
432
+ } catch (error) {
433
+ console.error('Failed to start recording:', error)
434
+ }
435
+ }
436
+ }
437
+
438
+ async function transcribeAudio(blob: Blob): Promise<string> {
439
+ // Implement your transcription logic here
440
+ // e.g., send to OpenAI Whisper, Google Speech-to-Text, etc.
441
+ return 'Transcribed text...'
442
+ }
443
+ </script>
444
+ ```
445
+
446
+ **Features:**
447
+ - 🎤 Microphone button appears when `enableAudioInput` is enabled
448
+ - 📊 Animated wave indicator shows when recording is active
449
+ - 🔴 Visual feedback with red styling during recording
450
+ - 🎨 Customizable via `audioButton`, `audioButtonRecording`, and `audioRecordingIndicator` UI classes
451
+ - 🌐 Text labels customizable via `startRecording`, `stopRecording`, and `recording` texts
452
+
377
453
  ## 📡 Events
378
454
 
379
455
  | Event | Payload | Description |
380
456
  |-------|---------|-------------|
381
457
  | `update:modelValue` | `boolean` | Drawer state changed |
458
+ | `update:inputValue` | `string` | Input text value changed |
382
459
  | `close` | - | Drawer was closed |
383
460
  | `contact-support` | - | Support mode activated |
384
461
  | `new-chat` | - | New chat started |
462
+ | `toggle-audio-recording` | - | Audio recording toggled |
385
463
 
386
464
  ## 🎰 Slots
387
465
 
@@ -452,6 +530,10 @@ store.error // { message, failedQuestion, failedAttachments, times
452
530
  store.supportRequestMode // boolean - Support mode active
453
531
  store.pageContext // PageContext | null - Current page context
454
532
  store.setupState // SetupState - Setup wizard state
533
+ store.conversationId // string | null - Current conversation ID from backend
534
+ store.conversationName // string | null - Current conversation name
535
+ store.conversationHistory // ConversationHistoryItem[] - List of saved conversations
536
+ store.showHistorySidebar // boolean - History sidebar visibility
455
537
 
456
538
  // ═══════════════════════════════════════════════════════════════
457
539
  // GETTERS
@@ -479,6 +561,13 @@ store.uploadFile(file) // Upload file
479
561
  store.setPageContext(context) // Set page context
480
562
  store.scrollToBottom(delay?) // Scroll chat to bottom
481
563
 
564
+ // Conversation History Actions
565
+ store.toggleHistorySidebar() // Toggle history sidebar
566
+ store.loadConversation(id) // Load a saved conversation
567
+ store.renameConversation(id, title) // Rename a conversation
568
+ store.deleteConversation(id) // Delete a saved conversation
569
+ store.saveCurrentConversation() // Save current conversation
570
+
482
571
  // Setup Mode Actions
483
572
  store.startSetupMode() // Start setup wizard
484
573
  store.setSetupStep(step) // Set current setup step
@@ -814,26 +903,41 @@ interface AISuggestion {
814
903
 
815
904
  ## 🎨 UI Customization
816
905
 
817
- Override CSS classes for any component:
906
+ Override CSS classes for any component. The `ui` prop on `AiChatDrawer` allows you to customize all components in one place - it extends all child component UI interfaces, so you can customize the drawer, input, messages, empty state, and mentions all from a single object.
818
907
 
819
908
  ```vue
820
909
  <AiChatDrawer
821
910
  v-model="isOpen"
822
911
  :ui="{
912
+ // Drawer customization
823
913
  backdrop: 'bg-black/50 backdrop-blur-sm',
824
914
  drawer: 'shadow-2xl',
825
915
  panel: 'bg-gray-50 dark:bg-gray-900',
826
916
  header: 'border-b-2 border-primary-500',
827
917
  body: 'custom-scrollbar',
828
918
  footer: 'border-t border-gray-200',
919
+
920
+ // ChatInput customization (automatically passed down)
921
+ textarea: 'rounded-xl',
922
+ sendButton: 'bg-blue-500 hover:bg-blue-600',
923
+
924
+ // ChatMessage customization (automatically passed down)
925
+ userBubble: 'bg-blue-500 text-white',
926
+ assistantBubble: 'bg-gray-100 dark:bg-gray-800',
927
+
928
+ // AiEmptyState customization (automatically passed down)
929
+ suggestionCard: 'border-2 border-primary-500',
829
930
  }"
830
931
  />
831
932
  ```
832
933
 
833
934
  ### AiChatDrawerUI
834
935
 
936
+ The main UI interface that combines all component UI interfaces. Pass this to the `ui` prop to customize all components:
937
+
835
938
  ```typescript
836
- interface AiChatDrawerUI {
939
+ interface AiChatDrawerUI extends ChatInputUI, ChatMessageUI, AiEmptyStateUI, MentionListUI {
940
+ // Drawer-specific
837
941
  backdrop?: string // Backdrop overlay
838
942
  drawer?: string // Main drawer container
839
943
  panel?: string // Inner panel
@@ -843,17 +947,24 @@ interface AiChatDrawerUI {
843
947
  headerActionButton?: string // Header buttons
844
948
  body?: string // Messages container
845
949
  footer?: string // Footer container
950
+
951
+ // Dialogs
952
+ closeConfirmModal?: string // Confirm modal
953
+ closeConfirmButton?: string // Confirm button
954
+ cancelButton?: string // Cancel button
955
+ historyLimitModal?: string // History limit modal
956
+ historyLimitButton?: string // History limit button
957
+
958
+ // Header elements
846
959
  quotaDisplay?: string // Quota display
847
960
  messageCountBadge?: string // Message count badge
848
961
  newChatButton?: string // New chat button
962
+
963
+ // Error display
849
964
  errorContainer?: string // Error container
850
965
  errorMessage?: string // Error message
851
966
  retryButton?: string // Retry button
852
- closeConfirmModal?: string // Confirm modal
853
- closeConfirmButton?: string // Confirm button
854
- cancelButton?: string // Cancel button
855
- historyLimitModal?: string // History limit modal
856
- historyLimitButton?: string // History limit button
967
+ contactSupportButton?: string // Contact support button
857
968
  }
858
969
  ```
859
970
 
@@ -881,6 +992,10 @@ interface ChatInputUI {
881
992
  suggestionItem?: string // Suggestion item
882
993
  suggestionItemSelected?: string // Selected suggestion
883
994
  contextLink?: string // Context link
995
+ // Audio input
996
+ audioButton?: string // Audio button
997
+ audioButtonRecording?: string // Audio button when recording
998
+ audioRecordingIndicator?: string // Recording indicator
884
999
  }
885
1000
  ```
886
1001
 
@@ -984,6 +1099,7 @@ import type {
984
1099
  ChatRole,
985
1100
  SubmitPayload,
986
1101
  Mention,
1102
+ ConversationHistoryItem,
987
1103
 
988
1104
  // Context
989
1105
  PageContext,
@@ -1067,25 +1183,101 @@ Route::post('/ask', [AiController::class, 'ask']);
1067
1183
  **Request:**
1068
1184
  ```json
1069
1185
  {
1070
- "question": "Who is available today?",
1186
+ "message": "Who is available today?",
1071
1187
  "history": [
1072
- { "role": "user", "message": "Hello" },
1073
- { "role": "assistant", "message": "Hi! How can I help?" }
1188
+ { "role": "user", "content": "Hello" },
1189
+ { "role": "assistant", "content": "Hi! How can I help?" }
1074
1190
  ],
1075
1191
  "stream": true,
1076
- "files": [{ "id": "file-123", "name": "report.pdf" }],
1192
+ "files": [{ "id": "file-123", "name": "report.pdf", "backendFileId": 456 }],
1193
+ "attachment_ids": [456],
1077
1194
  "mentions": [{ "id": "emp-1", "type": "employee", "name": "John Doe" }],
1078
- "contact_support": false
1195
+ "contact_support": false,
1196
+ "conversation_id": "conv-abc123"
1079
1197
  }
1080
1198
  ```
1081
1199
 
1200
+ > **Note:** The `conversation_id` field is only sent when `useConversationId: true` is configured. The `attachment_ids` array contains backend file IDs returned from the upload endpoint.
1201
+
1082
1202
  **Response (SSE):**
1083
1203
  ```
1204
+ event: start
1205
+ data: {"conversation_id":"conv-abc123"}
1206
+
1084
1207
  data: {"choices":[{"delta":{"content":"Based on"}}]}
1085
1208
  data: {"choices":[{"delta":{"content":" the schedule..."}}]}
1086
1209
  data: [DONE]
1087
1210
  ```
1088
1211
 
1212
+ ### Conversation ID Tracking
1213
+
1214
+ When `useConversationId: true` is enabled in the plugin configuration, the package will:
1215
+
1216
+ 1. **Receive** the conversation ID from the backend via the `start` SSE event
1217
+ 2. **Store** it in the Pinia store (`store.conversationId`)
1218
+ 3. **Send** it back with subsequent requests in the same conversation
1219
+ 4. **Clear** it when starting a new chat
1220
+
1221
+ This is useful for:
1222
+ - Tracking conversations across multiple requests
1223
+ - Maintaining context on the backend
1224
+ - Analytics and logging
1225
+ - Multi-turn conversation management
1226
+
1227
+ ### Conversation History
1228
+
1229
+ When `useConversationHistory: true` is enabled, users can access a sidebar showing their previous conversations:
1230
+
1231
+ **Features:**
1232
+ - 📜 **View past conversations** - Browse through saved chats
1233
+ - ✏️ **Rename conversations** - Give meaningful titles to chats
1234
+ - 🗑️ **Delete conversations** - Remove unwanted history
1235
+ - 🔄 **Switch conversations** - Seamlessly load previous chats
1236
+ - 💾 **Automatic saving** - Conversations save automatically
1237
+
1238
+ **Configuration:**
1239
+ ```typescript
1240
+ app.use(RestifyAiPlugin, {
1241
+ useConversationId: true, // Required for history
1242
+ useConversationHistory: true, // Enable history sidebar
1243
+ maxConversationHistory: 10, // Max conversations to keep (default: 10)
1244
+ })
1245
+ ```
1246
+
1247
+ **How it works:**
1248
+ 1. When `useConversationHistory` is enabled, a history button appears in the drawer header
1249
+ 2. Clicking the button opens a sidebar showing past conversations
1250
+ 3. Conversations are automatically saved to `localStorage` when completed
1251
+ 4. Each conversation shows: title (from first message or backend), date, message count
1252
+ 5. Users can rename, delete, or switch between conversations
1253
+
1254
+ **Backend Integration:**
1255
+
1256
+ The backend can provide a conversation name via the `start` SSE event:
1257
+
1258
+ ```
1259
+ event: start
1260
+ data: {"conversation_id":"conv-abc123","conversation_name":"Budget Analysis Q1"}
1261
+ ```
1262
+
1263
+ If no name is provided, the title defaults to a truncated version of the first user message.
1264
+
1265
+ **Storage:**
1266
+ - Conversation list: `restify_ai_conversation_history`
1267
+ - Conversation messages: `restify_ai_conv_{conversationId}`
1268
+ - Current conversation ID: `restify_ai_current_conversation`
1269
+
1270
+ **ConversationHistoryItem Interface:**
1271
+ ```typescript
1272
+ interface ConversationHistoryItem {
1273
+ id: string // Conversation ID from backend
1274
+ title: string // Display title
1275
+ createdAt: number // Timestamp when created
1276
+ updatedAt: number // Timestamp of last update
1277
+ messageCount: number // Number of messages
1278
+ }
1279
+ ```
1280
+
1089
1281
  ### Quota Endpoint
1090
1282
 
1091
1283
  ```php
@@ -1104,6 +1296,27 @@ Route::get('/ai/quota', [AiController::class, 'quota']);
1104
1296
  }
1105
1297
  ```
1106
1298
 
1299
+ ### Rate Limiting via Headers
1300
+
1301
+ As an alternative to the quota endpoint, you can enable headers-based rate limiting. When `useHeadersRateLimiter` is enabled, the package will extract rate limit information directly from response headers instead of making separate quota endpoint calls.
1302
+
1303
+ **Configuration:**
1304
+ ```typescript
1305
+ app.use(RestifyAi, {
1306
+ useQuota: true,
1307
+ useHeadersRateLimiter: true, // Enable headers-based rate limiting
1308
+ })
1309
+ ```
1310
+
1311
+ **Required Response Headers:**
1312
+
1313
+ Your chat endpoint should return these headers with each response:
1314
+
1315
+ ```
1316
+ x-ratelimit-limit: 100 // Total allowed requests
1317
+ x-ratelimit-remaining: 75 // Remaining requests
1318
+ ```
1319
+
1107
1320
  ### Upload Endpoint
1108
1321
 
1109
1322
  ```php
@@ -1115,15 +1328,41 @@ Route::post('/ai/upload', [AiController::class, 'upload']);
1115
1328
  ```json
1116
1329
  {
1117
1330
  "data": {
1118
- "id": "file-123",
1331
+ "id": 456,
1119
1332
  "name": "document.pdf",
1120
1333
  "url": "/storage/uploads/document.pdf",
1121
1334
  "type": "application/pdf",
1122
- "size": 102400
1335
+ "size": 102400,
1336
+ "extracted_text": "Optional extracted text content..."
1123
1337
  }
1124
1338
  }
1125
1339
  ```
1126
1340
 
1341
+ ### Backend File ID Support
1342
+
1343
+ When files are uploaded, the backend can return an ID that will be automatically tracked and sent with subsequent requests. This enables the backend to reference pre-processed files.
1344
+
1345
+ **Supported ID field names in upload response:**
1346
+ - `id` (recommended)
1347
+ - `file_id`
1348
+ - `attachment_id`
1349
+ - `openai_file_id`
1350
+
1351
+ The package automatically:
1352
+ 1. **Stores** the backend file ID when received from upload response
1353
+ 2. **Includes** all backend file IDs in the `attachment_ids` array in ask requests
1354
+ 3. **Preserves** the ID through the entire conversation
1355
+
1356
+ **Example flow:**
1357
+ ```
1358
+ 1. User uploads file.pdf
1359
+ 2. Backend returns: { "id": 456, "name": "file.pdf", ... }
1360
+ 3. Package stores backendFileId: 456
1361
+ 4. User sends message with attachment
1362
+ 5. Request includes: { "attachment_ids": [456], "files": [...] }
1363
+ 6. Backend can use attachment_ids to reference stored/processed files
1364
+ ```
1365
+
1127
1366
  ## ⌨️ Keyboard Shortcuts
1128
1367
 
1129
1368
  | Shortcut | Action |
@@ -1,4 +1,4 @@
1
- import { AiChatDrawerUI, AiChatDrawerTexts, HistoryLimitConfig, LoadingTextConfig } from '../types';
1
+ import { ChatAttachment, AiChatDrawerUI, AiChatDrawerTexts, HistoryLimitConfig, LoadingTextConfig } from '../types';
2
2
 
3
3
  interface Props {
4
4
  modelValue: boolean;
@@ -18,6 +18,9 @@ interface Props {
18
18
  showCloseButton?: boolean;
19
19
  showNewChatButton?: boolean;
20
20
  confirmClose?: boolean;
21
+ enableAudioInput?: boolean;
22
+ isRecording?: boolean;
23
+ inputValue?: string;
21
24
  historyLimit?: HistoryLimitConfig;
22
25
  loadingText?: LoadingTextConfig;
23
26
  autoFetchQuota?: boolean;
@@ -77,12 +80,20 @@ declare const __VLS_component: import('vue').DefineComponent<import('vue').Extra
77
80
  showCloseButton: boolean;
78
81
  showNewChatButton: boolean;
79
82
  confirmClose: boolean;
83
+ enableAudioInput: boolean;
84
+ isRecording: boolean;
85
+ inputValue: string;
80
86
  autoFetchQuota: boolean;
81
87
  }>>, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
82
88
  "update:modelValue": (value: boolean) => void;
89
+ "update:inputValue": (value: string) => void;
83
90
  close: () => void;
84
- "contact-support": () => void;
91
+ "contact-support": (payload?: {
92
+ message?: string;
93
+ attachments?: ChatAttachment[];
94
+ } | undefined) => void;
85
95
  "new-chat": () => void;
96
+ "toggle-audio-recording": () => void;
86
97
  }, string, import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<Props>, {
87
98
  width: string;
88
99
  fullscreenWidth: string;
@@ -98,15 +109,25 @@ declare const __VLS_component: import('vue').DefineComponent<import('vue').Extra
98
109
  showCloseButton: boolean;
99
110
  showNewChatButton: boolean;
100
111
  confirmClose: boolean;
112
+ enableAudioInput: boolean;
113
+ isRecording: boolean;
114
+ inputValue: string;
101
115
  autoFetchQuota: boolean;
102
116
  }>>> & Readonly<{
103
117
  onClose?: (() => any) | undefined;
118
+ "onToggle-audio-recording"?: (() => any) | undefined;
104
119
  "onUpdate:modelValue"?: ((value: boolean) => any) | undefined;
105
120
  "onNew-chat"?: (() => any) | undefined;
106
- "onContact-support"?: (() => any) | undefined;
121
+ "onContact-support"?: ((payload?: {
122
+ message?: string;
123
+ attachments?: ChatAttachment[];
124
+ } | undefined) => any) | undefined;
125
+ "onUpdate:inputValue"?: ((value: string) => any) | undefined;
107
126
  }>, {
108
127
  confirmClose: boolean;
109
128
  width: string;
129
+ enableAudioInput: boolean;
130
+ isRecording: boolean;
110
131
  showNewChatButton: boolean;
111
132
  showQuota: boolean;
112
133
  showCloseButton: boolean;
@@ -119,6 +140,7 @@ declare const __VLS_component: import('vue').DefineComponent<import('vue').Extra
119
140
  showBackdrop: boolean;
120
141
  closeOnBackdropClick: boolean;
121
142
  closeOnEscape: boolean;
143
+ inputValue: string;
122
144
  autoFetchQuota: boolean;
123
145
  }, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
124
146
  declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, ReturnType<typeof __VLS_template>>;
@@ -1 +1 @@
1
- {"version":3,"file":"AiChatDrawer.vue.d.ts","sourceRoot":"","sources":["../../src/components/AiChatDrawer.vue"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AiChatDrawer.vue.d.ts","sourceRoot":"","sources":["../../src/components/AiChatDrawer.vue"],"names":[],"mappings":"AA+MA;AAiBA,OAAO,KAAK,EACV,cAAc,EAKd,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EAClB,MAAM,UAAU,CAAA;AAIjB,UAAU,KAAK;IACb,UAAU,EAAE,OAAO,CAAA;IACnB,EAAE,CAAC,EAAE,cAAc,CAAA;IACnB,KAAK,CAAC,EAAE,iBAAiB,CAAA;IACzB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;IAC3B,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAC9B,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAC9B,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,kBAAkB,CAAA;IACjC,WAAW,CAAC,EAAE,iBAAiB,CAAA;IAC/B,cAAc,CAAC,EAAE,OAAO,CAAA;CACzB;AAsKD,iBAAS,cAAc,CAAC,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,QAG/C;AAuKD,iBAAS,cAAc;;;;;;;;;QAgiBM,GAAG;;;;;;;QACJ,GAAG;mBACH,GAAG;;;;QACM,GAAG;;;;;;QACT,GAAG;;;;;;;QACL,GAAG;4BACM,GAAG;EAGxC;AAqDD,QAAA,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;kBAn5B0B,MAAM;sBAAgB,cAAc,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAAtC,MAAM;sBAAgB,cAAc,EAAE;;;;kBAlCpE,OAAO;WAbd,MAAM;sBAcK,OAAO;iBACZ,OAAO;uBAHD,OAAO;eALf,OAAO;qBAID,OAAO;wBADJ,OAAO;0BADL,OAAO;sBADX,OAAO;qBAPR,MAAM;eACZ,MAAM;cACP,MAAM,GAAG,OAAO;kBACZ,OAAO;0BACC,OAAO;mBACd,OAAO;gBAUV,MAAM;oBAGF,OAAO;4EAs7BxB,CAAC;wBACkB,uBAAuB,CAAC,OAAO,eAAe,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AAAvG,wBAAwG;AACxG,KAAK,sBAAsB,CAAC,CAAC,IAAI,CAAC,SAAS,SAAS,GAAG,KAAK,GAAG,CAAC,CAAC;AACjE,KAAK,6BAA6B,CAAC,CAAC,IAAI;KAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,SAAS,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG;QAAE,IAAI,EAAE,OAAO,KAAK,EAAE,QAAQ,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;KAAE,GAAG;QAAE,IAAI,EAAE,OAAO,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,QAAQ,EAAE,IAAI,CAAA;KAAE;CAAE,CAAC;AAC9M,KAAK,kBAAkB,CAAC,CAAC,EAAE,CAAC,IAAI;KAE1B,CAAC,IAAI,MAAM,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,MAAM,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG;QACxE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;KACb,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CACT,CAAC;AACN,KAAK,cAAc,CAAC,CAAC,IAAI;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAG,GAAG,EAAE,CAAC;AACxD,KAAK,uBAAuB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IAAE,QAAO;QAClD,MAAM,EAAE,CAAC,CAAC;KACT,CAAA;CAAE,CAAC"}
@@ -16,6 +16,8 @@ interface Props {
16
16
  hasHistory?: boolean;
17
17
  supportRequestMode?: boolean;
18
18
  showSupportModeToggle?: boolean;
19
+ enableAudioInput?: boolean;
20
+ isRecording?: boolean;
19
21
  contextLinkText?: string;
20
22
  ui?: ChatInputUI;
21
23
  texts?: ChatInputTexts;
@@ -45,6 +47,8 @@ declare const __VLS_component: import('vue').DefineComponent<import('vue').Extra
45
47
  hasHistory: boolean;
46
48
  supportRequestMode: boolean;
47
49
  showSupportModeToggle: boolean;
50
+ enableAudioInput: boolean;
51
+ isRecording: boolean;
48
52
  contextLinkText: string;
49
53
  }>>, {
50
54
  focus: () => void | undefined;
@@ -54,6 +58,7 @@ declare const __VLS_component: import('vue').DefineComponent<import('vue').Extra
54
58
  cancel: () => void;
55
59
  "suggestion-select": (suggestion: Suggestion) => void;
56
60
  "toggle-support-mode": () => void;
61
+ "toggle-audio-recording": () => void;
57
62
  "context-link-click": () => void;
58
63
  }, string, import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<Props>, {
59
64
  disabled: boolean;
@@ -65,11 +70,14 @@ declare const __VLS_component: import('vue').DefineComponent<import('vue').Extra
65
70
  hasHistory: boolean;
66
71
  supportRequestMode: boolean;
67
72
  showSupportModeToggle: boolean;
73
+ enableAudioInput: boolean;
74
+ isRecording: boolean;
68
75
  contextLinkText: string;
69
76
  }>>> & Readonly<{
70
77
  onCancel?: (() => any) | undefined;
71
78
  onSubmit?: ((payload: SubmitPayload) => any) | undefined;
72
79
  "onToggle-support-mode"?: (() => any) | undefined;
80
+ "onToggle-audio-recording"?: (() => any) | undefined;
73
81
  "onUpdate:modelValue"?: ((value: string) => any) | undefined;
74
82
  "onSuggestion-select"?: ((suggestion: Suggestion) => any) | undefined;
75
83
  "onContext-link-click"?: (() => any) | undefined;
@@ -81,6 +89,8 @@ declare const __VLS_component: import('vue').DefineComponent<import('vue').Extra
81
89
  supportRequestMode: boolean;
82
90
  suggestions: Suggestion[];
83
91
  showSupportModeToggle: boolean;
92
+ enableAudioInput: boolean;
93
+ isRecording: boolean;
84
94
  minLength: number;
85
95
  hasHistory: boolean;
86
96
  contextLinkText: string;
@@ -1 +1 @@
1
- {"version":3,"file":"ChatInput.vue.d.ts","sourceRoot":"","sources":["../../src/components/ChatInput.vue"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ChatInput.vue.d.ts","sourceRoot":"","sources":["../../src/components/ChatInput.vue"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ChatMessage.vue.d.ts","sourceRoot":"","sources":["../../src/components/ChatMessage.vue"],"names":[],"mappings":"AA+LA;AAUA,OAAO,KAAK,EAAE,WAAW,EAAkB,aAAa,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAI5F,UAAU,KAAK;IACb,OAAO,EAAE,WAAW,CAAA;IACpB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,oCAAoC;IACpC,EAAE,CAAC,EAAE,aAAa,CAAA;IAClB,6CAA6C;IAC7C,KAAK,CAAC,EAAE,gBAAgB,CAAA;CACzB;;;;;;;;;;;;iBALe,MAAM;iBADN,OAAO;;AAwrBvB,wBAOG;AACH,KAAK,sBAAsB,CAAC,CAAC,IAAI,CAAC,SAAS,SAAS,GAAG,KAAK,GAAG,CAAC,CAAC;AACjE,KAAK,6BAA6B,CAAC,CAAC,IAAI;KAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,SAAS,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG;QAAE,IAAI,EAAE,OAAO,KAAK,EAAE,QAAQ,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;KAAE,GAAG;QAAE,IAAI,EAAE,OAAO,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,QAAQ,EAAE,IAAI,CAAA;KAAE;CAAE,CAAC;AAC9M,KAAK,kBAAkB,CAAC,CAAC,EAAE,CAAC,IAAI;KAE1B,CAAC,IAAI,MAAM,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,MAAM,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG;QACxE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;KACb,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CACT,CAAC;AACN,KAAK,cAAc,CAAC,CAAC,IAAI;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAG,GAAG,EAAE,CAAC"}
1
+ {"version":3,"file":"ChatMessage.vue.d.ts","sourceRoot":"","sources":["../../src/components/ChatMessage.vue"],"names":[],"mappings":"AA+LA;AAUA,OAAO,KAAK,EAAE,WAAW,EAAkB,aAAa,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAI5F,UAAU,KAAK;IACb,OAAO,EAAE,WAAW,CAAA;IACpB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,oCAAoC;IACpC,EAAE,CAAC,EAAE,aAAa,CAAA;IAClB,6CAA6C;IAC7C,KAAK,CAAC,EAAE,gBAAgB,CAAA;CACzB;;;;;;;;;;;;iBALe,MAAM;iBADN,OAAO;;AA0rBvB,wBAOG;AACH,KAAK,sBAAsB,CAAC,CAAC,IAAI,CAAC,SAAS,SAAS,GAAG,KAAK,GAAG,CAAC,CAAC;AACjE,KAAK,6BAA6B,CAAC,CAAC,IAAI;KAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,SAAS,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG;QAAE,IAAI,EAAE,OAAO,KAAK,EAAE,QAAQ,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;KAAE,GAAG;QAAE,IAAI,EAAE,OAAO,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,QAAQ,EAAE,IAAI,CAAA;KAAE;CAAE,CAAC;AAC9M,KAAK,kBAAkB,CAAC,CAAC,EAAE,CAAC,IAAI;KAE1B,CAAC,IAAI,MAAM,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,MAAM,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG;QACxE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;KACb,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CACT,CAAC;AACN,KAAK,cAAc,CAAC,CAAC,IAAI;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAG,GAAG,EAAE,CAAC"}
@@ -0,0 +1,3 @@
1
+ declare const _default: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
2
+ export default _default;
3
+ //# sourceMappingURL=ConversationHistory.vue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConversationHistory.vue.d.ts","sourceRoot":"","sources":["../../../src/components/drawer/ConversationHistory.vue"],"names":[],"mappings":";AAskBA,wBAKG"}
@@ -12,6 +12,8 @@ interface Props {
12
12
  showFullscreenToggle: boolean;
13
13
  isFullscreen: boolean;
14
14
  showMessageCount: boolean;
15
+ showHistoryButton?: boolean;
16
+ hasConversationHistory?: boolean;
15
17
  messageCount: number;
16
18
  messageLimit: number;
17
19
  t: (key: keyof AiChatDrawerTexts, params?: Record<string, any>) => string;
@@ -25,11 +27,13 @@ declare const __VLS_component: import('vue').DefineComponent<import('vue').Extra
25
27
  close: () => void;
26
28
  minimize: () => void;
27
29
  "toggle-fullscreen": () => void;
30
+ "toggle-history": () => void;
28
31
  }, string, import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<__VLS_TypePropsToRuntimeProps<Props>>> & Readonly<{
29
32
  onClose?: (() => any) | undefined;
30
33
  onMinimize?: (() => any) | undefined;
31
34
  "onNew-chat"?: (() => any) | undefined;
32
35
  "onToggle-fullscreen"?: (() => any) | undefined;
36
+ "onToggle-history"?: (() => any) | undefined;
33
37
  }>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
34
38
  declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, ReturnType<typeof __VLS_template>>;
35
39
  export default _default;
@@ -1 +1 @@
1
- {"version":3,"file":"DrawerHeader.vue.d.ts","sourceRoot":"","sources":["../../../src/components/drawer/DrawerHeader.vue"],"names":[],"mappings":"AAyIA;AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAI/E,UAAU,KAAK;IACb,EAAE,CAAC,EAAE,cAAc,CAAA;IACnB,WAAW,EAAE,OAAO,CAAA;IACpB,iBAAiB,EAAE,OAAO,CAAA;IAC1B,UAAU,EAAE,OAAO,CAAA;IACnB,SAAS,EAAE,OAAO,CAAA;IAClB,KAAK,EAAE,SAAS,CAAA;IAChB,eAAe,EAAE,OAAO,CAAA;IACxB,kBAAkB,EAAE,OAAO,CAAA;IAC3B,oBAAoB,EAAE,OAAO,CAAA;IAC7B,YAAY,EAAE,OAAO,CAAA;IACrB,gBAAgB,EAAE,OAAO,CAAA;IACzB,YAAY,EAAE,MAAM,CAAA;IACpB,YAAY,EAAE,MAAM,CAAA;IACpB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,iBAAiB,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,MAAM,CAAA;CAC1E;AA0CD,iBAAS,cAAc;6BAqae,GAAG;mBACb,GAAG;EAG9B;AAmBD,QAAA,MAAM,eAAe;;;;;;;;;;iFAOnB,CAAC;wBACkB,uBAAuB,CAAC,OAAO,eAAe,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AAAvG,wBAAwG;AACxG,KAAK,sBAAsB,CAAC,CAAC,IAAI,CAAC,SAAS,SAAS,GAAG,KAAK,GAAG,CAAC,CAAC;AACjE,KAAK,6BAA6B,CAAC,CAAC,IAAI;KAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,SAAS,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG;QAAE,IAAI,EAAE,OAAO,KAAK,EAAE,QAAQ,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;KAAE,GAAG;QAAE,IAAI,EAAE,OAAO,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,QAAQ,EAAE,IAAI,CAAA;KAAE;CAAE,CAAC;AAC9M,KAAK,uBAAuB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IAAE,QAAO;QAClD,MAAM,EAAE,CAAC,CAAC;KACT,CAAA;CAAE,CAAC"}
1
+ {"version":3,"file":"DrawerHeader.vue.d.ts","sourceRoot":"","sources":["../../../src/components/drawer/DrawerHeader.vue"],"names":[],"mappings":"AAoJA;AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAI/E,UAAU,KAAK;IACb,EAAE,CAAC,EAAE,cAAc,CAAA;IACnB,WAAW,EAAE,OAAO,CAAA;IACpB,iBAAiB,EAAE,OAAO,CAAA;IAC1B,UAAU,EAAE,OAAO,CAAA;IACnB,SAAS,EAAE,OAAO,CAAA;IAClB,KAAK,EAAE,SAAS,CAAA;IAChB,eAAe,EAAE,OAAO,CAAA;IACxB,kBAAkB,EAAE,OAAO,CAAA;IAC3B,oBAAoB,EAAE,OAAO,CAAA;IAC7B,YAAY,EAAE,OAAO,CAAA;IACrB,gBAAgB,EAAE,OAAO,CAAA;IACzB,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,sBAAsB,CAAC,EAAE,OAAO,CAAA;IAChC,YAAY,EAAE,MAAM,CAAA;IACpB,YAAY,EAAE,MAAM,CAAA;IACpB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,iBAAiB,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,MAAM,CAAA;CAC1E;AA2CD,iBAAS,cAAc;6BAsce,GAAG;mBACb,GAAG;EAG9B;AAoBD,QAAA,MAAM,eAAe;;;;;;;;;;;;iFAOnB,CAAC;wBACkB,uBAAuB,CAAC,OAAO,eAAe,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AAAvG,wBAAwG;AACxG,KAAK,sBAAsB,CAAC,CAAC,IAAI,CAAC,SAAS,SAAS,GAAG,KAAK,GAAG,CAAC,CAAC;AACjE,KAAK,6BAA6B,CAAC,CAAC,IAAI;KAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,SAAS,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG;QAAE,IAAI,EAAE,OAAO,KAAK,EAAE,QAAQ,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;KAAE,GAAG;QAAE,IAAI,EAAE,OAAO,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,QAAQ,EAAE,IAAI,CAAA;KAAE;CAAE,CAAC;AAC9M,KAAK,uBAAuB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IAAE,QAAO;QAClD,MAAM,EAAE,CAAC,CAAC;KACT,CAAA;CAAE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"DrawerMessageList.vue.d.ts","sourceRoot":"","sources":["../../../src/components/drawer/DrawerMessageList.vue"],"names":[],"mappings":"AAiHA;AAKA,OAAO,KAAK,EAAE,WAAW,IAAI,eAAe,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAI1H,UAAU,KAAK;IACb,QAAQ,EAAE,eAAe,EAAE,CAAA;IAC3B,cAAc,EAAE,MAAM,CAAA;IACtB,KAAK,EAAE,SAAS,CAAA;IAChB,KAAK,EAAE,SAAS,CAAA;IAChB,EAAE,CAAC,EAAE,cAAc,CAAA;IACnB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,iBAAiB,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,MAAM,CAAA;CAC1E;AAaD,iBAAS,cAAc;;;;;;QAkTO,GAAG;EAGhC;AAgBD,QAAA,MAAM,eAAe;;;;;;;;iFAOnB,CAAC;wBACkB,uBAAuB,CAAC,OAAO,eAAe,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AAAvG,wBAAwG;AACxG,KAAK,sBAAsB,CAAC,CAAC,IAAI,CAAC,SAAS,SAAS,GAAG,KAAK,GAAG,CAAC,CAAC;AACjE,KAAK,6BAA6B,CAAC,CAAC,IAAI;KAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,SAAS,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG;QAAE,IAAI,EAAE,OAAO,KAAK,EAAE,QAAQ,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;KAAE,GAAG;QAAE,IAAI,EAAE,OAAO,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,QAAQ,EAAE,IAAI,CAAA;KAAE;CAAE,CAAC;AAC9M,KAAK,uBAAuB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IAAE,QAAO;QAClD,MAAM,EAAE,CAAC,CAAC;KACT,CAAA;CAAE,CAAC"}
1
+ {"version":3,"file":"DrawerMessageList.vue.d.ts","sourceRoot":"","sources":["../../../src/components/drawer/DrawerMessageList.vue"],"names":[],"mappings":"AAkHA;AAKA,OAAO,KAAK,EAAE,WAAW,IAAI,eAAe,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAI1H,UAAU,KAAK;IACb,QAAQ,EAAE,eAAe,EAAE,CAAA;IAC3B,cAAc,EAAE,MAAM,CAAA;IACtB,KAAK,EAAE,SAAS,CAAA;IAChB,KAAK,EAAE,SAAS,CAAA;IAChB,EAAE,CAAC,EAAE,cAAc,CAAA;IACnB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,iBAAiB,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,MAAM,CAAA;CAC1E;AAaD,iBAAS,cAAc;;;;;;QAkTO,GAAG;EAGhC;AAgBD,QAAA,MAAM,eAAe;;;;;;;;iFAOnB,CAAC;wBACkB,uBAAuB,CAAC,OAAO,eAAe,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AAAvG,wBAAwG;AACxG,KAAK,sBAAsB,CAAC,CAAC,IAAI,CAAC,SAAS,SAAS,GAAG,KAAK,GAAG,CAAC,CAAC;AACjE,KAAK,6BAA6B,CAAC,CAAC,IAAI;KAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,SAAS,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG;QAAE,IAAI,EAAE,OAAO,KAAK,EAAE,QAAQ,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;KAAE,GAAG;QAAE,IAAI,EAAE,OAAO,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,QAAQ,EAAE,IAAI,CAAA;KAAE;CAAE,CAAC;AAC9M,KAAK,uBAAuB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IAAE,QAAO;QAClD,MAAM,EAAE,CAAC,CAAC;KACT,CAAA;CAAE,CAAC"}
@@ -0,0 +1,3 @@
1
+ declare const _default: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
2
+ export default _default;
3
+ //# sourceMappingURL=IconHistory.vue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IconHistory.vue.d.ts","sourceRoot":"","sources":["../../../src/components/icons/IconHistory.vue"],"names":[],"mappings":";AAqEA,wBAKG"}
@@ -0,0 +1,3 @@
1
+ declare const _default: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
2
+ export default _default;
3
+ //# sourceMappingURL=IconMicrophone.vue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IconMicrophone.vue.d.ts","sourceRoot":"","sources":["../../../src/components/icons/IconMicrophone.vue"],"names":[],"mappings":"AAcA;;AA0EA,wBAKG"}
@@ -0,0 +1,3 @@
1
+ declare const _default: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
2
+ export default _default;
3
+ //# sourceMappingURL=IconMicrophoneOff.vue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IconMicrophoneOff.vue.d.ts","sourceRoot":"","sources":["../../../src/components/icons/IconMicrophoneOff.vue"],"names":[],"mappings":"AAiBA;;AAkGA,wBAKG"}
@@ -16,4 +16,7 @@ export { default as IconExitFullscreen } from './IconExitFullscreen.vue';
16
16
  export { default as IconClock } from './IconClock.vue';
17
17
  export { default as IconRefresh } from './IconRefresh.vue';
18
18
  export { default as IconSupport } from './IconSupport.vue';
19
+ export { default as IconHistory } from './IconHistory.vue';
20
+ export { default as IconMicrophone } from './IconMicrophone.vue';
21
+ export { default as IconMicrophoneOff } from './IconMicrophoneOff.vue';
19
22
  //# sourceMappingURL=index.d.ts.map