@crestapps/ai-chat-ui 1.0.0-preview.9 → 1.0.0-preview.90

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.
@@ -1,6 +1,7 @@
1
1
  /* CrestApps AI Chat Widget */
2
2
  :root {
3
3
  --ai-widget-primary: var(--bs-secondary, #6c757d);
4
+ --ai-widget-primary-rgb: var(--bs-secondary-rgb, 108, 117, 125);
4
5
  --ai-widget-width: 380px;
5
6
  --ai-widget-height: 520px;
6
7
  }
@@ -14,20 +15,20 @@
14
15
  height: 52px;
15
16
  border-radius: 50%;
16
17
  background: var(--ai-widget-primary);
17
- color: white;
18
+ color: var(--bs-white, #fff);
18
19
  border: none;
19
20
  cursor: pointer;
20
21
  display: flex;
21
22
  align-items: center;
22
23
  justify-content: center;
23
24
  font-size: 1.5rem;
24
- box-shadow: 0 4px 12px rgba(0,0,0,0.2);
25
+ box-shadow: 0 4px 12px rgba(var(--bs-body-color-rgb, 33, 37, 41), 0.2);
25
26
  transition: transform 0.2s, box-shadow 0.2s;
26
27
  }
27
28
 
28
29
  .ai-chat-widget-toggle:hover {
29
30
  transform: scale(1.1);
30
- box-shadow: 0 6px 16px rgba(0,0,0,0.3);
31
+ box-shadow: 0 6px 16px rgba(var(--bs-body-color-rgb, 33, 37, 41), 0.3);
31
32
  }
32
33
 
33
34
  .ai-chat-widget-container {
@@ -37,9 +38,11 @@
37
38
  z-index: 10001;
38
39
  width: var(--ai-widget-width);
39
40
  height: var(--ai-widget-height);
40
- background: #fff;
41
+ background: var(--bs-body-bg, #fff);
42
+ color: var(--bs-body-color, #212529);
43
+ border: 1px solid var(--bs-border-color, #dee2e6);
41
44
  border-radius: 12px;
42
- box-shadow: 0 8px 32px rgba(0,0,0,0.18);
45
+ box-shadow: 0 8px 32px rgba(var(--bs-body-color-rgb, 33, 37, 41), 0.18);
43
46
  display: none;
44
47
  flex-direction: column;
45
48
  overflow: hidden;
@@ -63,7 +66,7 @@
63
66
  justify-content: space-between;
64
67
  padding: 0.75rem 1rem;
65
68
  background: var(--ai-widget-primary);
66
- color: white;
69
+ color: var(--bs-white, #fff);
67
70
  }
68
71
 
69
72
  .ai-chat-widget-header.ai-chat-widget-drag-handle {
@@ -99,7 +102,7 @@
99
102
  .ai-chat-widget-header button {
100
103
  background: none;
101
104
  border: none;
102
- color: white;
105
+ color: var(--bs-white, #fff);
103
106
  cursor: pointer;
104
107
  font-size: 1rem;
105
108
  padding: 0 0.25rem;
@@ -112,14 +115,16 @@
112
115
 
113
116
  .ai-chat-widget-profile-select {
114
117
  padding: 0.5rem 0.75rem;
115
- border-bottom: 1px solid #e9ecef;
116
- background: #f8f9fa;
118
+ border-bottom: 1px solid var(--bs-border-color, #dee2e6);
119
+ background: var(--bs-tertiary-bg, #f8f9fa);
117
120
  }
118
121
 
119
122
  .ai-chat-widget-profile-select select {
120
123
  width: 100%;
121
124
  padding: 0.35rem 0.5rem;
122
- border: 1px solid #ced4da;
125
+ color: var(--bs-body-color, #212529);
126
+ background-color: var(--bs-body-bg, #fff);
127
+ border: 1px solid var(--bs-border-color, #ced4da);
123
128
  border-radius: 6px;
124
129
  font-size: 0.85rem;
125
130
  }
@@ -146,7 +151,7 @@
146
151
  display: block;
147
152
  width: 100%;
148
153
  margin-bottom: 0.5rem;
149
- border-top: 1px solid rgba(33, 37, 41, 0.08);
154
+ border-top: 1px solid rgba(var(--bs-body-color-rgb, 33, 37, 41), 0.08);
150
155
  }
151
156
 
152
157
  .ai-chat-widget-messages .ai-chat-msg-role {
@@ -156,7 +161,7 @@
156
161
  }
157
162
 
158
163
  .ai-chat-widget-messages .ai-chat-msg-role-user {
159
- color: #0d6efd;
164
+ color: var(--bs-primary, #0d6efd);
160
165
  }
161
166
 
162
167
  .ai-chat-widget-messages .ai-chat-msg-role-assistant {
@@ -196,10 +201,10 @@
196
201
  opacity: 0;
197
202
  pointer-events: none;
198
203
  transition: opacity 0.15s ease-in-out;
199
- background: rgba(255, 255, 255, 0.96);
204
+ background: rgba(var(--bs-body-bg-rgb, 255, 255, 255), 0.96);
200
205
  padding: 0.2rem 0.35rem;
201
206
  border-radius: 999px;
202
- box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);
207
+ box-shadow: 0 1px 3px rgba(var(--bs-body-color-rgb, 33, 37, 41), 0.08);
203
208
  margin-bottom: 1rem;
204
209
  transform: translateY(50%);
205
210
  z-index: 1;
@@ -253,7 +258,7 @@
253
258
  left: 0;
254
259
  right: 0;
255
260
  bottom: 0;
256
- background: #fff;
261
+ background: var(--bs-body-bg, #fff);
257
262
  padding: 1rem;
258
263
  z-index: 10;
259
264
  display: none;
@@ -316,9 +321,9 @@
316
321
  .ai-chat-widget-messages .ai-chat-notification {
317
322
  margin: 0.75rem 0.5rem 0;
318
323
  padding: 0.625rem 0.75rem;
319
- border: 1px solid rgba(33, 37, 41, 0.12);
324
+ border: 1px solid rgba(var(--bs-body-color-rgb, 33, 37, 41), 0.12);
320
325
  border-radius: 0.5rem;
321
- background: rgba(248, 249, 250, 0.98);
326
+ background: rgba(var(--bs-tertiary-bg-rgb, 248, 249, 250), 0.98);
322
327
  }
323
328
 
324
329
  .ai-chat-widget-messages .ai-chat-notification-content {
@@ -357,8 +362,8 @@
357
362
 
358
363
  /* ── Code blocks & inline code ── */
359
364
  .ai-chat-widget-messages .ai-chat-message-body pre {
360
- background: #2d2d2d;
361
- color: #f8f8f2;
365
+ background: var(--bs-dark-bg-subtle, #2d2d2d);
366
+ color: var(--bs-emphasis-color, #f8f8f2);
362
367
  padding: 0.5rem;
363
368
  border-radius: 4px;
364
369
  overflow-x: auto;
@@ -375,7 +380,7 @@
375
380
  }
376
381
 
377
382
  .ai-chat-widget-input {
378
- border-top: 1px solid #e9ecef;
383
+ border-top: 1px solid var(--bs-border-color, #dee2e6);
379
384
  padding: 0.5rem 0.75rem;
380
385
  display: flex;
381
386
  flex-wrap: wrap;
@@ -387,12 +392,16 @@
387
392
  flex: 0 0 100%;
388
393
  margin: -0.5rem -0.75rem 0.5rem;
389
394
  padding: 0.5rem 0.75rem;
395
+ max-height: 4.5rem;
396
+ overflow-y: auto;
390
397
  }
391
398
 
392
399
  .ai-chat-widget-input textarea {
393
400
  flex: 1;
394
401
  min-width: 0;
395
- border: 1px solid #ced4da;
402
+ color: var(--bs-body-color, #212529);
403
+ background-color: var(--bs-body-bg, #fff);
404
+ border: 1px solid var(--bs-border-color, #ced4da);
396
405
  border-radius: 8px;
397
406
  padding: 0.4rem 0.6rem;
398
407
  font-size: 0.9rem;
@@ -405,12 +414,12 @@
405
414
 
406
415
  .ai-chat-widget-input textarea:focus {
407
416
  border-color: var(--ai-widget-primary);
408
- box-shadow: 0 0 0 2px rgba(65,182,112,0.15);
417
+ box-shadow: 0 0 0 2px rgba(var(--ai-widget-primary-rgb, 108, 117, 125), 0.15);
409
418
  }
410
419
 
411
420
  .ai-chat-widget-input button {
412
421
  background: var(--ai-widget-primary);
413
- color: white;
422
+ color: var(--bs-white, #fff);
414
423
  border: none;
415
424
  border-radius: 8px;
416
425
  padding: 0.4rem 0.75rem;
@@ -434,7 +443,7 @@
434
443
 
435
444
  .ai-chat-widget-input .btn.btn-outline-dark {
436
445
  background: var(--bs-dark, #212529);
437
- color: #fff;
446
+ color: var(--bs-white, #fff);
438
447
  border-color: var(--bs-dark, #212529);
439
448
  }
440
449
 
@@ -450,7 +459,7 @@
450
459
  .ai-chat-widget-status {
451
460
  padding: 0.25rem 0.75rem;
452
461
  font-size: 0.8rem;
453
- color: #6c757d;
462
+ color: var(--bs-secondary-color, #6c757d);
454
463
  display: none;
455
464
  }
456
465
 
@@ -460,7 +469,7 @@
460
469
 
461
470
  .ai-chat-widget-welcome {
462
471
  text-align: center;
463
- color: #6c757d;
472
+ color: var(--bs-secondary-color, #6c757d);
464
473
  padding: 2rem 1rem;
465
474
  font-size: 0.9rem;
466
475
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["chat-widget.css"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"chat-widget.css","sourcesContent":["/* CrestApps AI Chat Widget */\n:root {\n --ai-widget-primary: var(--bs-secondary, #6c757d);\n --ai-widget-width: 380px;\n --ai-widget-height: 520px;\n}\n\n.ai-chat-widget-toggle {\n position: fixed;\n bottom: 1.25rem;\n right: 1.25rem;\n z-index: 10000;\n width: 52px;\n height: 52px;\n border-radius: 50%;\n background: var(--ai-widget-primary);\n color: white;\n border: none;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 1.5rem;\n box-shadow: 0 4px 12px rgba(0,0,0,0.2);\n transition: transform 0.2s, box-shadow 0.2s;\n}\n\n.ai-chat-widget-toggle:hover {\n transform: scale(1.1);\n box-shadow: 0 6px 16px rgba(0,0,0,0.3);\n}\n\n.ai-chat-widget-container {\n position: fixed;\n bottom: 5rem;\n right: 1.25rem;\n z-index: 10001;\n width: var(--ai-widget-width);\n height: var(--ai-widget-height);\n background: #fff;\n border-radius: 12px;\n box-shadow: 0 8px 32px rgba(0,0,0,0.18);\n display: none;\n flex-direction: column;\n overflow: hidden;\n}\n\n.ai-chat-widget-container.ai-chat-widget-resizable {\n resize: both;\n min-width: 320px;\n min-height: 420px;\n max-width: min(90vw, 960px);\n max-height: min(90vh, 960px);\n}\n\n.ai-chat-widget-container.open {\n display: flex;\n}\n\n.ai-chat-widget-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0.75rem 1rem;\n background: var(--ai-widget-primary);\n color: white;\n}\n\n.ai-chat-widget-header.ai-chat-widget-drag-handle {\n cursor: move;\n user-select: none;\n touch-action: none;\n}\n\n.ai-chat-widget-header-actions {\n display: flex;\n align-items: center;\n gap: 0.15rem;\n}\n\n.ai-chat-widget-toggle.ai-chat-widget-draggable {\n touch-action: none;\n}\n\n.ai-chat-widget-container.ai-chat-widget-dragging,\n.ai-chat-widget-toggle.ai-chat-widget-dragging {\n transition: none;\n}\n\n.ai-chat-widget-toggle.ai-chat-widget-dragging:hover {\n transform: none;\n}\n\n.ai-chat-widget-header .title {\n font-weight: 600;\n font-size: 0.95rem;\n}\n\n.ai-chat-widget-header button {\n background: none;\n border: none;\n color: white;\n cursor: pointer;\n font-size: 1rem;\n padding: 0 0.25rem;\n opacity: 0.8;\n}\n\n.ai-chat-widget-header button:hover {\n opacity: 1;\n}\n\n.ai-chat-widget-profile-select {\n padding: 0.5rem 0.75rem;\n border-bottom: 1px solid #e9ecef;\n background: #f8f9fa;\n}\n\n.ai-chat-widget-profile-select select {\n width: 100%;\n padding: 0.35rem 0.5rem;\n border: 1px solid #ced4da;\n border-radius: 6px;\n font-size: 0.85rem;\n}\n\n.ai-chat-widget-messages {\n flex: 1;\n overflow-y: auto;\n padding: 0.75rem;\n font-size: 0.9rem;\n}\n\n/* ── Widget message items (ai-chat.js Vue template) ── */\n.ai-chat-widget-messages .ai-chat-messages {\n padding: 0.5rem;\n}\n\n.ai-chat-widget-messages .ai-chat-message-item {\n position: relative;\n padding: 0.5rem 0;\n}\n\n.ai-chat-widget-messages .ai-chat-message-item + .ai-chat-message-item::before {\n content: '';\n display: block;\n width: 100%;\n margin-bottom: 0.5rem;\n border-top: 1px solid rgba(33, 37, 41, 0.08);\n}\n\n.ai-chat-widget-messages .ai-chat-msg-role {\n font-size: 0.7rem;\n font-weight: 600;\n margin-bottom: 2px;\n}\n\n.ai-chat-widget-messages .ai-chat-msg-role-user {\n color: #0d6efd;\n}\n\n.ai-chat-widget-messages .ai-chat-msg-role-assistant {\n color: var(--ai-widget-primary, #6f42c1);\n}\n\n.ai-chat-widget-messages .ai-chat-msg-role-assistant i.ai-streaming-icon {\n animation: ai-widget-pulse 1.5s infinite;\n}\n\n.ai-chat-widget-messages .ai-chat-msg-role-assistant i.ai-bot-icon {\n color: currentColor;\n}\n\n.ai-chat-widget-messages .ai-chat-message-body {\n position: relative;\n padding: 0;\n overflow-wrap: break-word;\n word-break: break-word;\n min-width: 0;\n}\n\n.ai-chat-widget-messages .ai-chat-message-body p:last-child {\n margin-bottom: 0;\n}\n\n/* ── Message action buttons (copy, thumbs up/down) ── */\n.ai-chat-widget-messages .message-buttons-container {\n position: absolute;\n right: 0.1rem;\n bottom: 0;\n display: inline-flex;\n align-items: center;\n gap: 0.35rem;\n width: auto;\n max-width: max-content;\n opacity: 0;\n pointer-events: none;\n transition: opacity 0.15s ease-in-out;\n background: rgba(255, 255, 255, 0.96);\n padding: 0.2rem 0.35rem;\n border-radius: 999px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);\n margin-bottom: 1rem;\n transform: translateY(50%);\n z-index: 1;\n}\n\n.ai-chat-widget-messages .ai-chat-message-item:hover .message-buttons-container,\n.ai-chat-widget-messages .ai-chat-message-item:focus-within .message-buttons-container {\n opacity: 1;\n pointer-events: auto;\n}\n\n.ai-chat-widget-messages .message-buttons-container:has(.tts-playing) {\n opacity: 1;\n pointer-events: auto;\n}\n\n.ai-chat-widget-messages .message-buttons-container > .button-message-toolbox {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex: 0 0 auto;\n width: 1.75rem;\n height: 1.75rem;\n margin: 0 !important;\n padding: 0 !important;\n border-radius: 50%;\n color: var(--bs-secondary-color, #6c757d) !important;\n text-decoration: none;\n}\n\n.ai-chat-widget-messages .message-buttons-container .ai-chat-message-assistant-feedback {\n display: inline-flex;\n align-items: center;\n gap: 0.35rem;\n}\n\n.ai-chat-widget-messages .message-buttons-container > .button-message-toolbox:hover,\n.ai-chat-widget-messages .message-buttons-container > .button-message-toolbox:focus {\n color: var(--bs-body-color, #212529) !important;\n}\n\n.ai-chat-widget-messages .message-buttons-container > .button-message-toolbox.tts-playing {\n color: var(--ai-widget-primary, #6f42c1) !important;\n opacity: 1;\n pointer-events: auto;\n}\n\n.ai-chat-widget-history-panel {\n position: absolute;\n top: 3.5rem;\n left: 0;\n right: 0;\n bottom: 0;\n background: #fff;\n padding: 1rem;\n z-index: 10;\n display: none;\n overflow-y: auto;\n flex-direction: column;\n}\n\n.ai-chat-widget-history-panel.show {\n display: flex;\n}\n\n.ai-chat-widget-history-panel .history-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 0.75rem;\n flex-shrink: 0;\n}\n\n.ai-chat-widget-history-panel .history-header h5 {\n margin: 0;\n font-size: 1rem;\n}\n\n.ai-chat-widget-history-list {\n list-style: none;\n padding: 0;\n margin: 0;\n overflow-y: auto;\n flex: 1 1 auto;\n}\n\n.ai-chat-widget-history-list li {\n margin-bottom: 0;\n}\n\n.ai-chat-widget-history-list .chat-session-history-item {\n display: block;\n padding: 0.5rem 0.75rem;\n text-decoration: none;\n color: var(--bs-body-color, #212529);\n font-size: 0.85rem;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n transition: background 0.15s;\n cursor: pointer;\n border-bottom: 1px solid var(--bs-border-color, #dee2e6);\n}\n\n.ai-chat-widget-history-list li:last-child .chat-session-history-item {\n border-bottom: none;\n}\n\n.ai-chat-widget-history-list .chat-session-history-item:hover {\n background: var(--bs-tertiary-bg, #f8f9fa);\n}\n\n/* ── Notifications ── */\n.ai-chat-widget-messages .ai-chat-notification {\n margin: 0.75rem 0.5rem 0;\n padding: 0.625rem 0.75rem;\n border: 1px solid rgba(33, 37, 41, 0.12);\n border-radius: 0.5rem;\n background: rgba(248, 249, 250, 0.98);\n}\n\n.ai-chat-widget-messages .ai-chat-notification-content {\n display: flex;\n align-items: flex-start;\n gap: 0.5rem;\n}\n\n.ai-chat-widget-messages .ai-chat-notification-icon {\n margin-top: 0.1rem;\n color: var(--bs-secondary-color, #6c757d);\n}\n\n.ai-chat-widget-messages .ai-chat-notification-text {\n flex: 1 1 auto;\n min-width: 0;\n}\n\n.ai-chat-widget-messages .ai-chat-notification-dismiss {\n margin-left: auto !important;\n color: var(--bs-secondary-color, #6c757d) !important;\n}\n\n.ai-chat-widget-messages .ai-chat-notification-actions {\n display: flex;\n gap: 0.5rem;\n margin-top: 0.5rem;\n}\n\n/* ── Chart containers inside widget ── */\n.ai-chat-widget-messages .chart-container {\n width: 100%;\n max-width: 100% !important;\n min-height: 280px;\n}\n\n/* ── Code blocks & inline code ── */\n.ai-chat-widget-messages .ai-chat-message-body pre {\n background: #2d2d2d;\n color: #f8f8f2;\n padding: 0.5rem;\n border-radius: 4px;\n overflow-x: auto;\n font-size: 0.8rem;\n}\n\n.ai-chat-widget-messages .ai-chat-message-body code {\n font-size: 0.85em;\n}\n\n@keyframes ai-widget-pulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.4; }\n}\n\n.ai-chat-widget-input {\n border-top: 1px solid #e9ecef;\n padding: 0.5rem 0.75rem;\n display: flex;\n flex-wrap: wrap;\n gap: 0.5rem;\n align-items: flex-end;\n}\n\n.ai-chat-widget-input .ai-chat-doc-bar {\n flex: 0 0 100%;\n margin: -0.5rem -0.75rem 0.5rem;\n padding: 0.5rem 0.75rem;\n}\n\n.ai-chat-widget-input textarea {\n flex: 1;\n min-width: 0;\n border: 1px solid #ced4da;\n border-radius: 8px;\n padding: 0.4rem 0.6rem;\n font-size: 0.9rem;\n resize: none;\n max-height: 80px;\n min-height: 36px;\n line-height: 1.4;\n outline: none;\n}\n\n.ai-chat-widget-input textarea:focus {\n border-color: var(--ai-widget-primary);\n box-shadow: 0 0 0 2px rgba(65,182,112,0.15);\n}\n\n.ai-chat-widget-input button {\n background: var(--ai-widget-primary);\n color: white;\n border: none;\n border-radius: 8px;\n padding: 0.4rem 0.75rem;\n cursor: pointer;\n font-size: 0.9rem;\n white-space: nowrap;\n}\n\n.ai-chat-widget-input .btn {\n background: var(--bs-body-bg, #fff);\n color: var(--bs-body-color, #212529);\n border: 1px solid var(--bs-border-color, #ced4da);\n}\n\n.ai-chat-widget-input .btn.btn-link {\n background: transparent;\n color: var(--bs-secondary-color, #6c757d);\n border: none;\n padding: 0.4rem;\n}\n\n.ai-chat-widget-input .btn.btn-outline-dark {\n background: var(--bs-dark, #212529);\n color: #fff;\n border-color: var(--bs-dark, #212529);\n}\n\n.ai-chat-widget-input .btn.btn-outline-secondary {\n color: var(--bs-secondary-color, #6c757d);\n}\n\n.ai-chat-widget-input button:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.ai-chat-widget-status {\n padding: 0.25rem 0.75rem;\n font-size: 0.8rem;\n color: #6c757d;\n display: none;\n}\n\n.ai-chat-widget-status.visible {\n display: block;\n}\n\n.ai-chat-widget-welcome {\n text-align: center;\n color: #6c757d;\n padding: 2rem 1rem;\n font-size: 0.9rem;\n}\n\n@media (max-width: 576px) {\n .ai-chat-widget-container {\n width: calc(100vw - 1rem);\n height: calc(100vh - 6rem);\n right: 0.5rem;\n bottom: 4.5rem;\n }\n}\n"]}
1
+ {"version":3,"sources":["chat-widget.css"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"chat-widget.css","sourcesContent":["/* CrestApps AI Chat Widget */\n:root {\n --ai-widget-primary: var(--bs-secondary, #6c757d);\n --ai-widget-primary-rgb: var(--bs-secondary-rgb, 108, 117, 125);\n --ai-widget-width: 380px;\n --ai-widget-height: 520px;\n}\n\n.ai-chat-widget-toggle {\n position: fixed;\n bottom: 1.25rem;\n right: 1.25rem;\n z-index: 10000;\n width: 52px;\n height: 52px;\n border-radius: 50%;\n background: var(--ai-widget-primary);\n color: var(--bs-white, #fff);\n border: none;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 1.5rem;\n box-shadow: 0 4px 12px rgba(var(--bs-body-color-rgb, 33, 37, 41), 0.2);\n transition: transform 0.2s, box-shadow 0.2s;\n}\n\n.ai-chat-widget-toggle:hover {\n transform: scale(1.1);\n box-shadow: 0 6px 16px rgba(var(--bs-body-color-rgb, 33, 37, 41), 0.3);\n}\n\n.ai-chat-widget-container {\n position: fixed;\n bottom: 5rem;\n right: 1.25rem;\n z-index: 10001;\n width: var(--ai-widget-width);\n height: var(--ai-widget-height);\n background: var(--bs-body-bg, #fff);\n color: var(--bs-body-color, #212529);\n border: 1px solid var(--bs-border-color, #dee2e6);\n border-radius: 12px;\n box-shadow: 0 8px 32px rgba(var(--bs-body-color-rgb, 33, 37, 41), 0.18);\n display: none;\n flex-direction: column;\n overflow: hidden;\n}\n\n.ai-chat-widget-container.ai-chat-widget-resizable {\n resize: both;\n min-width: 320px;\n min-height: 420px;\n max-width: min(90vw, 960px);\n max-height: min(90vh, 960px);\n}\n\n.ai-chat-widget-container.open {\n display: flex;\n}\n\n.ai-chat-widget-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0.75rem 1rem;\n background: var(--ai-widget-primary);\n color: var(--bs-white, #fff);\n}\n\n.ai-chat-widget-header.ai-chat-widget-drag-handle {\n cursor: move;\n user-select: none;\n touch-action: none;\n}\n\n.ai-chat-widget-header-actions {\n display: flex;\n align-items: center;\n gap: 0.15rem;\n}\n\n.ai-chat-widget-toggle.ai-chat-widget-draggable {\n touch-action: none;\n}\n\n.ai-chat-widget-container.ai-chat-widget-dragging,\n.ai-chat-widget-toggle.ai-chat-widget-dragging {\n transition: none;\n}\n\n.ai-chat-widget-toggle.ai-chat-widget-dragging:hover {\n transform: none;\n}\n\n.ai-chat-widget-header .title {\n font-weight: 600;\n font-size: 0.95rem;\n}\n\n.ai-chat-widget-header button {\n background: none;\n border: none;\n color: var(--bs-white, #fff);\n cursor: pointer;\n font-size: 1rem;\n padding: 0 0.25rem;\n opacity: 0.8;\n}\n\n.ai-chat-widget-header button:hover {\n opacity: 1;\n}\n\n.ai-chat-widget-profile-select {\n padding: 0.5rem 0.75rem;\n border-bottom: 1px solid var(--bs-border-color, #dee2e6);\n background: var(--bs-tertiary-bg, #f8f9fa);\n}\n\n.ai-chat-widget-profile-select select {\n width: 100%;\n padding: 0.35rem 0.5rem;\n color: var(--bs-body-color, #212529);\n background-color: var(--bs-body-bg, #fff);\n border: 1px solid var(--bs-border-color, #ced4da);\n border-radius: 6px;\n font-size: 0.85rem;\n}\n\n.ai-chat-widget-messages {\n flex: 1;\n overflow-y: auto;\n padding: 0.75rem;\n font-size: 0.9rem;\n}\n\n/* ── Widget message items (ai-chat.js Vue template) ── */\n.ai-chat-widget-messages .ai-chat-messages {\n padding: 0.5rem;\n}\n\n.ai-chat-widget-messages .ai-chat-message-item {\n position: relative;\n padding: 0.5rem 0;\n}\n\n.ai-chat-widget-messages .ai-chat-message-item + .ai-chat-message-item::before {\n content: '';\n display: block;\n width: 100%;\n margin-bottom: 0.5rem;\n border-top: 1px solid rgba(var(--bs-body-color-rgb, 33, 37, 41), 0.08);\n}\n\n.ai-chat-widget-messages .ai-chat-msg-role {\n font-size: 0.7rem;\n font-weight: 600;\n margin-bottom: 2px;\n}\n\n.ai-chat-widget-messages .ai-chat-msg-role-user {\n color: var(--bs-primary, #0d6efd);\n}\n\n.ai-chat-widget-messages .ai-chat-msg-role-assistant {\n color: var(--ai-widget-primary, #6f42c1);\n}\n\n.ai-chat-widget-messages .ai-chat-msg-role-assistant i.ai-streaming-icon {\n animation: ai-widget-pulse 1.5s infinite;\n}\n\n.ai-chat-widget-messages .ai-chat-msg-role-assistant i.ai-bot-icon {\n color: currentColor;\n}\n\n.ai-chat-widget-messages .ai-chat-message-body {\n position: relative;\n padding: 0;\n overflow-wrap: break-word;\n word-break: break-word;\n min-width: 0;\n}\n\n.ai-chat-widget-messages .ai-chat-message-body p:last-child {\n margin-bottom: 0;\n}\n\n/* ── Message action buttons (copy, thumbs up/down) ── */\n.ai-chat-widget-messages .message-buttons-container {\n position: absolute;\n right: 0.1rem;\n bottom: 0;\n display: inline-flex;\n align-items: center;\n gap: 0.35rem;\n width: auto;\n max-width: max-content;\n opacity: 0;\n pointer-events: none;\n transition: opacity 0.15s ease-in-out;\n background: rgba(var(--bs-body-bg-rgb, 255, 255, 255), 0.96);\n padding: 0.2rem 0.35rem;\n border-radius: 999px;\n box-shadow: 0 1px 3px rgba(var(--bs-body-color-rgb, 33, 37, 41), 0.08);\n margin-bottom: 1rem;\n transform: translateY(50%);\n z-index: 1;\n}\n\n.ai-chat-widget-messages .ai-chat-message-item:hover .message-buttons-container,\n.ai-chat-widget-messages .ai-chat-message-item:focus-within .message-buttons-container {\n opacity: 1;\n pointer-events: auto;\n}\n\n.ai-chat-widget-messages .message-buttons-container:has(.tts-playing) {\n opacity: 1;\n pointer-events: auto;\n}\n\n.ai-chat-widget-messages .message-buttons-container > .button-message-toolbox {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex: 0 0 auto;\n width: 1.75rem;\n height: 1.75rem;\n margin: 0 !important;\n padding: 0 !important;\n border-radius: 50%;\n color: var(--bs-secondary-color, #6c757d) !important;\n text-decoration: none;\n}\n\n.ai-chat-widget-messages .message-buttons-container .ai-chat-message-assistant-feedback {\n display: inline-flex;\n align-items: center;\n gap: 0.35rem;\n}\n\n.ai-chat-widget-messages .message-buttons-container > .button-message-toolbox:hover,\n.ai-chat-widget-messages .message-buttons-container > .button-message-toolbox:focus {\n color: var(--bs-body-color, #212529) !important;\n}\n\n.ai-chat-widget-messages .message-buttons-container > .button-message-toolbox.tts-playing {\n color: var(--ai-widget-primary, #6f42c1) !important;\n opacity: 1;\n pointer-events: auto;\n}\n\n.ai-chat-widget-history-panel {\n position: absolute;\n top: 3.5rem;\n left: 0;\n right: 0;\n bottom: 0;\n background: var(--bs-body-bg, #fff);\n padding: 1rem;\n z-index: 10;\n display: none;\n overflow-y: auto;\n flex-direction: column;\n}\n\n.ai-chat-widget-history-panel.show {\n display: flex;\n}\n\n.ai-chat-widget-history-panel .history-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 0.75rem;\n flex-shrink: 0;\n}\n\n.ai-chat-widget-history-panel .history-header h5 {\n margin: 0;\n font-size: 1rem;\n}\n\n.ai-chat-widget-history-list {\n list-style: none;\n padding: 0;\n margin: 0;\n overflow-y: auto;\n flex: 1 1 auto;\n}\n\n.ai-chat-widget-history-list li {\n margin-bottom: 0;\n}\n\n.ai-chat-widget-history-list .chat-session-history-item {\n display: block;\n padding: 0.5rem 0.75rem;\n text-decoration: none;\n color: var(--bs-body-color, #212529);\n font-size: 0.85rem;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n transition: background 0.15s;\n cursor: pointer;\n border-bottom: 1px solid var(--bs-border-color, #dee2e6);\n}\n\n.ai-chat-widget-history-list li:last-child .chat-session-history-item {\n border-bottom: none;\n}\n\n.ai-chat-widget-history-list .chat-session-history-item:hover {\n background: var(--bs-tertiary-bg, #f8f9fa);\n}\n\n/* ── Notifications ── */\n.ai-chat-widget-messages .ai-chat-notification {\n margin: 0.75rem 0.5rem 0;\n padding: 0.625rem 0.75rem;\n border: 1px solid rgba(var(--bs-body-color-rgb, 33, 37, 41), 0.12);\n border-radius: 0.5rem;\n background: rgba(var(--bs-tertiary-bg-rgb, 248, 249, 250), 0.98);\n}\n\n.ai-chat-widget-messages .ai-chat-notification-content {\n display: flex;\n align-items: flex-start;\n gap: 0.5rem;\n}\n\n.ai-chat-widget-messages .ai-chat-notification-icon {\n margin-top: 0.1rem;\n color: var(--bs-secondary-color, #6c757d);\n}\n\n.ai-chat-widget-messages .ai-chat-notification-text {\n flex: 1 1 auto;\n min-width: 0;\n}\n\n.ai-chat-widget-messages .ai-chat-notification-dismiss {\n margin-left: auto !important;\n color: var(--bs-secondary-color, #6c757d) !important;\n}\n\n.ai-chat-widget-messages .ai-chat-notification-actions {\n display: flex;\n gap: 0.5rem;\n margin-top: 0.5rem;\n}\n\n/* ── Chart containers inside widget ── */\n.ai-chat-widget-messages .chart-container {\n width: 100%;\n max-width: 100% !important;\n min-height: 280px;\n}\n\n/* ── Code blocks & inline code ── */\n.ai-chat-widget-messages .ai-chat-message-body pre {\n background: var(--bs-dark-bg-subtle, #2d2d2d);\n color: var(--bs-emphasis-color, #f8f8f2);\n padding: 0.5rem;\n border-radius: 4px;\n overflow-x: auto;\n font-size: 0.8rem;\n}\n\n.ai-chat-widget-messages .ai-chat-message-body code {\n font-size: 0.85em;\n}\n\n@keyframes ai-widget-pulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.4; }\n}\n\n.ai-chat-widget-input {\n border-top: 1px solid var(--bs-border-color, #dee2e6);\n padding: 0.5rem 0.75rem;\n display: flex;\n flex-wrap: wrap;\n gap: 0.5rem;\n align-items: flex-end;\n}\n\n.ai-chat-widget-input .ai-chat-doc-bar {\n flex: 0 0 100%;\n margin: -0.5rem -0.75rem 0.5rem;\n padding: 0.5rem 0.75rem;\n max-height: 4.5rem;\n overflow-y: auto;\n}\n\n.ai-chat-widget-input textarea {\n flex: 1;\n min-width: 0;\n color: var(--bs-body-color, #212529);\n background-color: var(--bs-body-bg, #fff);\n border: 1px solid var(--bs-border-color, #ced4da);\n border-radius: 8px;\n padding: 0.4rem 0.6rem;\n font-size: 0.9rem;\n resize: none;\n max-height: 80px;\n min-height: 36px;\n line-height: 1.4;\n outline: none;\n}\n\n.ai-chat-widget-input textarea:focus {\n border-color: var(--ai-widget-primary);\n box-shadow: 0 0 0 2px rgba(var(--ai-widget-primary-rgb, 108, 117, 125), 0.15);\n}\n\n.ai-chat-widget-input button {\n background: var(--ai-widget-primary);\n color: var(--bs-white, #fff);\n border: none;\n border-radius: 8px;\n padding: 0.4rem 0.75rem;\n cursor: pointer;\n font-size: 0.9rem;\n white-space: nowrap;\n}\n\n.ai-chat-widget-input .btn {\n background: var(--bs-body-bg, #fff);\n color: var(--bs-body-color, #212529);\n border: 1px solid var(--bs-border-color, #ced4da);\n}\n\n.ai-chat-widget-input .btn.btn-link {\n background: transparent;\n color: var(--bs-secondary-color, #6c757d);\n border: none;\n padding: 0.4rem;\n}\n\n.ai-chat-widget-input .btn.btn-outline-dark {\n background: var(--bs-dark, #212529);\n color: var(--bs-white, #fff);\n border-color: var(--bs-dark, #212529);\n}\n\n.ai-chat-widget-input .btn.btn-outline-secondary {\n color: var(--bs-secondary-color, #6c757d);\n}\n\n.ai-chat-widget-input button:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.ai-chat-widget-status {\n padding: 0.25rem 0.75rem;\n font-size: 0.8rem;\n color: var(--bs-secondary-color, #6c757d);\n display: none;\n}\n\n.ai-chat-widget-status.visible {\n display: block;\n}\n\n.ai-chat-widget-welcome {\n text-align: center;\n color: var(--bs-secondary-color, #6c757d);\n padding: 2rem 1rem;\n font-size: 0.9rem;\n}\n\n@media (max-width: 576px) {\n .ai-chat-widget-container {\n width: calc(100vw - 1rem);\n height: calc(100vh - 6rem);\n right: 0.5rem;\n bottom: 4.5rem;\n }\n}\n"]}
@@ -1 +1 @@
1
- :root{--ai-widget-primary:var(--bs-secondary, #6c757d);--ai-widget-width:380px;--ai-widget-height:520px}.ai-chat-widget-toggle{position:fixed;bottom:1.25rem;right:1.25rem;z-index:10000;width:52px;height:52px;border-radius:50%;background:var(--ai-widget-primary);color:#fff;border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:1.5rem;box-shadow:0 4px 12px rgba(0,0,0,.2);transition:transform .2s,box-shadow .2s}.ai-chat-widget-toggle:hover{transform:scale(1.1);box-shadow:0 6px 16px rgba(0,0,0,.3)}.ai-chat-widget-container{position:fixed;bottom:5rem;right:1.25rem;z-index:10001;width:var(--ai-widget-width);height:var(--ai-widget-height);background:#fff;border-radius:12px;box-shadow:0 8px 32px rgba(0,0,0,.18);display:none;flex-direction:column;overflow:hidden}.ai-chat-widget-container.ai-chat-widget-resizable{resize:both;min-width:320px;min-height:420px;max-width:min(90vw,960px);max-height:min(90vh,960px)}.ai-chat-widget-container.open{display:flex}.ai-chat-widget-header{display:flex;align-items:center;justify-content:space-between;padding:.75rem 1rem;background:var(--ai-widget-primary);color:#fff}.ai-chat-widget-header.ai-chat-widget-drag-handle{cursor:move;user-select:none;touch-action:none}.ai-chat-widget-header-actions{display:flex;align-items:center;gap:.15rem}.ai-chat-widget-toggle.ai-chat-widget-draggable{touch-action:none}.ai-chat-widget-container.ai-chat-widget-dragging,.ai-chat-widget-toggle.ai-chat-widget-dragging{transition:none}.ai-chat-widget-toggle.ai-chat-widget-dragging:hover{transform:none}.ai-chat-widget-header .title{font-weight:600;font-size:.95rem}.ai-chat-widget-header button{background:0 0;border:none;color:#fff;cursor:pointer;font-size:1rem;padding:0 .25rem;opacity:.8}.ai-chat-widget-header button:hover{opacity:1}.ai-chat-widget-profile-select{padding:.5rem .75rem;border-bottom:1px solid #e9ecef;background:#f8f9fa}.ai-chat-widget-profile-select select{width:100%;padding:.35rem .5rem;border:1px solid #ced4da;border-radius:6px;font-size:.85rem}.ai-chat-widget-messages{flex:1;overflow-y:auto;padding:.75rem;font-size:.9rem}.ai-chat-widget-messages .ai-chat-messages{padding:.5rem}.ai-chat-widget-messages .ai-chat-message-item{position:relative;padding:.5rem 0}.ai-chat-widget-messages .ai-chat-message-item+.ai-chat-message-item::before{content:'';display:block;width:100%;margin-bottom:.5rem;border-top:1px solid rgba(33,37,41,.08)}.ai-chat-widget-messages .ai-chat-msg-role{font-size:.7rem;font-weight:600;margin-bottom:2px}.ai-chat-widget-messages .ai-chat-msg-role-user{color:#0d6efd}.ai-chat-widget-messages .ai-chat-msg-role-assistant{color:var(--ai-widget-primary,#6f42c1)}.ai-chat-widget-messages .ai-chat-msg-role-assistant i.ai-streaming-icon{animation:ai-widget-pulse 1.5s infinite}.ai-chat-widget-messages .ai-chat-msg-role-assistant i.ai-bot-icon{color:currentColor}.ai-chat-widget-messages .ai-chat-message-body{position:relative;padding:0;overflow-wrap:break-word;word-break:break-word;min-width:0}.ai-chat-widget-messages .ai-chat-message-body p:last-child{margin-bottom:0}.ai-chat-widget-messages .message-buttons-container{position:absolute;right:.1rem;bottom:0;display:inline-flex;align-items:center;gap:.35rem;width:auto;max-width:max-content;opacity:0;pointer-events:none;transition:opacity .15s ease-in-out;background:rgba(255,255,255,.96);padding:.2rem .35rem;border-radius:999px;box-shadow:0 1px 3px rgba(0,0,0,.08);margin-bottom:1rem;transform:translateY(50%);z-index:1}.ai-chat-widget-messages .ai-chat-message-item:focus-within .message-buttons-container,.ai-chat-widget-messages .ai-chat-message-item:hover .message-buttons-container{opacity:1;pointer-events:auto}.ai-chat-widget-messages .message-buttons-container:has(.tts-playing){opacity:1;pointer-events:auto}.ai-chat-widget-messages .message-buttons-container>.button-message-toolbox{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;width:1.75rem;height:1.75rem;margin:0!important;padding:0!important;border-radius:50%;color:var(--bs-secondary-color,#6c757d)!important;text-decoration:none}.ai-chat-widget-messages .message-buttons-container .ai-chat-message-assistant-feedback{display:inline-flex;align-items:center;gap:.35rem}.ai-chat-widget-messages .message-buttons-container>.button-message-toolbox:focus,.ai-chat-widget-messages .message-buttons-container>.button-message-toolbox:hover{color:var(--bs-body-color,#212529)!important}.ai-chat-widget-messages .message-buttons-container>.button-message-toolbox.tts-playing{color:var(--ai-widget-primary,#6f42c1)!important;opacity:1;pointer-events:auto}.ai-chat-widget-history-panel{position:absolute;top:3.5rem;left:0;right:0;bottom:0;background:#fff;padding:1rem;z-index:10;display:none;overflow-y:auto;flex-direction:column}.ai-chat-widget-history-panel.show{display:flex}.ai-chat-widget-history-panel .history-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:.75rem;flex-shrink:0}.ai-chat-widget-history-panel .history-header h5{margin:0;font-size:1rem}.ai-chat-widget-history-list{list-style:none;padding:0;margin:0;overflow-y:auto;flex:1 1 auto}.ai-chat-widget-history-list li{margin-bottom:0}.ai-chat-widget-history-list .chat-session-history-item{display:block;padding:.5rem .75rem;text-decoration:none;color:var(--bs-body-color,#212529);font-size:.85rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:background .15s;cursor:pointer;border-bottom:1px solid var(--bs-border-color,#dee2e6)}.ai-chat-widget-history-list li:last-child .chat-session-history-item{border-bottom:none}.ai-chat-widget-history-list .chat-session-history-item:hover{background:var(--bs-tertiary-bg,#f8f9fa)}.ai-chat-widget-messages .ai-chat-notification{margin:.75rem .5rem 0;padding:.625rem .75rem;border:1px solid rgba(33,37,41,.12);border-radius:.5rem;background:rgba(248,249,250,.98)}.ai-chat-widget-messages .ai-chat-notification-content{display:flex;align-items:flex-start;gap:.5rem}.ai-chat-widget-messages .ai-chat-notification-icon{margin-top:.1rem;color:var(--bs-secondary-color,#6c757d)}.ai-chat-widget-messages .ai-chat-notification-text{flex:1 1 auto;min-width:0}.ai-chat-widget-messages .ai-chat-notification-dismiss{margin-left:auto!important;color:var(--bs-secondary-color,#6c757d)!important}.ai-chat-widget-messages .ai-chat-notification-actions{display:flex;gap:.5rem;margin-top:.5rem}.ai-chat-widget-messages .chart-container{width:100%;max-width:100%!important;min-height:280px}.ai-chat-widget-messages .ai-chat-message-body pre{background:#2d2d2d;color:#f8f8f2;padding:.5rem;border-radius:4px;overflow-x:auto;font-size:.8rem}.ai-chat-widget-messages .ai-chat-message-body code{font-size:.85em}@keyframes ai-widget-pulse{0%,100%{opacity:1}50%{opacity:.4}}.ai-chat-widget-input{border-top:1px solid #e9ecef;padding:.5rem .75rem;display:flex;flex-wrap:wrap;gap:.5rem;align-items:flex-end}.ai-chat-widget-input .ai-chat-doc-bar{flex:0 0 100%;margin:-.5rem -.75rem .5rem;padding:.5rem .75rem}.ai-chat-widget-input textarea{flex:1;min-width:0;border:1px solid #ced4da;border-radius:8px;padding:.4rem .6rem;font-size:.9rem;resize:none;max-height:80px;min-height:36px;line-height:1.4;outline:0}.ai-chat-widget-input textarea:focus{border-color:var(--ai-widget-primary);box-shadow:0 0 0 2px rgba(65,182,112,.15)}.ai-chat-widget-input button{background:var(--ai-widget-primary);color:#fff;border:none;border-radius:8px;padding:.4rem .75rem;cursor:pointer;font-size:.9rem;white-space:nowrap}.ai-chat-widget-input .btn{background:var(--bs-body-bg,#fff);color:var(--bs-body-color,#212529);border:1px solid var(--bs-border-color,#ced4da)}.ai-chat-widget-input .btn.btn-link{background:0 0;color:var(--bs-secondary-color,#6c757d);border:none;padding:.4rem}.ai-chat-widget-input .btn.btn-outline-dark{background:var(--bs-dark,#212529);color:#fff;border-color:var(--bs-dark,#212529)}.ai-chat-widget-input .btn.btn-outline-secondary{color:var(--bs-secondary-color,#6c757d)}.ai-chat-widget-input button:disabled{opacity:.5;cursor:not-allowed}.ai-chat-widget-status{padding:.25rem .75rem;font-size:.8rem;color:#6c757d;display:none}.ai-chat-widget-status.visible{display:block}.ai-chat-widget-welcome{text-align:center;color:#6c757d;padding:2rem 1rem;font-size:.9rem}@media (max-width:576px){.ai-chat-widget-container{width:calc(100vw - 1rem);height:calc(100vh - 6rem);right:.5rem;bottom:4.5rem}}
1
+ :root{--ai-widget-primary:var(--bs-secondary, #6c757d);--ai-widget-primary-rgb:var(--bs-secondary-rgb, 108, 117, 125);--ai-widget-width:380px;--ai-widget-height:520px}.ai-chat-widget-toggle{position:fixed;bottom:1.25rem;right:1.25rem;z-index:10000;width:52px;height:52px;border-radius:50%;background:var(--ai-widget-primary);color:var(--bs-white,#fff);border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:1.5rem;box-shadow:0 4px 12px rgba(var(--bs-body-color-rgb,33,37,41),.2);transition:transform .2s,box-shadow .2s}.ai-chat-widget-toggle:hover{transform:scale(1.1);box-shadow:0 6px 16px rgba(var(--bs-body-color-rgb,33,37,41),.3)}.ai-chat-widget-container{position:fixed;bottom:5rem;right:1.25rem;z-index:10001;width:var(--ai-widget-width);height:var(--ai-widget-height);background:var(--bs-body-bg,#fff);color:var(--bs-body-color,#212529);border:1px solid var(--bs-border-color,#dee2e6);border-radius:12px;box-shadow:0 8px 32px rgba(var(--bs-body-color-rgb,33,37,41),.18);display:none;flex-direction:column;overflow:hidden}.ai-chat-widget-container.ai-chat-widget-resizable{resize:both;min-width:320px;min-height:420px;max-width:min(90vw,960px);max-height:min(90vh,960px)}.ai-chat-widget-container.open{display:flex}.ai-chat-widget-header{display:flex;align-items:center;justify-content:space-between;padding:.75rem 1rem;background:var(--ai-widget-primary);color:var(--bs-white,#fff)}.ai-chat-widget-header.ai-chat-widget-drag-handle{cursor:move;user-select:none;touch-action:none}.ai-chat-widget-header-actions{display:flex;align-items:center;gap:.15rem}.ai-chat-widget-toggle.ai-chat-widget-draggable{touch-action:none}.ai-chat-widget-container.ai-chat-widget-dragging,.ai-chat-widget-toggle.ai-chat-widget-dragging{transition:none}.ai-chat-widget-toggle.ai-chat-widget-dragging:hover{transform:none}.ai-chat-widget-header .title{font-weight:600;font-size:.95rem}.ai-chat-widget-header button{background:0 0;border:none;color:var(--bs-white,#fff);cursor:pointer;font-size:1rem;padding:0 .25rem;opacity:.8}.ai-chat-widget-header button:hover{opacity:1}.ai-chat-widget-profile-select{padding:.5rem .75rem;border-bottom:1px solid var(--bs-border-color,#dee2e6);background:var(--bs-tertiary-bg,#f8f9fa)}.ai-chat-widget-profile-select select{width:100%;padding:.35rem .5rem;color:var(--bs-body-color,#212529);background-color:var(--bs-body-bg,#fff);border:1px solid var(--bs-border-color,#ced4da);border-radius:6px;font-size:.85rem}.ai-chat-widget-messages{flex:1;overflow-y:auto;padding:.75rem;font-size:.9rem}.ai-chat-widget-messages .ai-chat-messages{padding:.5rem}.ai-chat-widget-messages .ai-chat-message-item{position:relative;padding:.5rem 0}.ai-chat-widget-messages .ai-chat-message-item+.ai-chat-message-item::before{content:'';display:block;width:100%;margin-bottom:.5rem;border-top:1px solid rgba(var(--bs-body-color-rgb,33,37,41),.08)}.ai-chat-widget-messages .ai-chat-msg-role{font-size:.7rem;font-weight:600;margin-bottom:2px}.ai-chat-widget-messages .ai-chat-msg-role-user{color:var(--bs-primary,#0d6efd)}.ai-chat-widget-messages .ai-chat-msg-role-assistant{color:var(--ai-widget-primary,#6f42c1)}.ai-chat-widget-messages .ai-chat-msg-role-assistant i.ai-streaming-icon{animation:ai-widget-pulse 1.5s infinite}.ai-chat-widget-messages .ai-chat-msg-role-assistant i.ai-bot-icon{color:currentColor}.ai-chat-widget-messages .ai-chat-message-body{position:relative;padding:0;overflow-wrap:break-word;word-break:break-word;min-width:0}.ai-chat-widget-messages .ai-chat-message-body p:last-child{margin-bottom:0}.ai-chat-widget-messages .message-buttons-container{position:absolute;right:.1rem;bottom:0;display:inline-flex;align-items:center;gap:.35rem;width:auto;max-width:max-content;opacity:0;pointer-events:none;transition:opacity .15s ease-in-out;background:rgba(var(--bs-body-bg-rgb,255,255,255),.96);padding:.2rem .35rem;border-radius:999px;box-shadow:0 1px 3px rgba(var(--bs-body-color-rgb,33,37,41),.08);margin-bottom:1rem;transform:translateY(50%);z-index:1}.ai-chat-widget-messages .ai-chat-message-item:focus-within .message-buttons-container,.ai-chat-widget-messages .ai-chat-message-item:hover .message-buttons-container{opacity:1;pointer-events:auto}.ai-chat-widget-messages .message-buttons-container:has(.tts-playing){opacity:1;pointer-events:auto}.ai-chat-widget-messages .message-buttons-container>.button-message-toolbox{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;width:1.75rem;height:1.75rem;margin:0!important;padding:0!important;border-radius:50%;color:var(--bs-secondary-color,#6c757d)!important;text-decoration:none}.ai-chat-widget-messages .message-buttons-container .ai-chat-message-assistant-feedback{display:inline-flex;align-items:center;gap:.35rem}.ai-chat-widget-messages .message-buttons-container>.button-message-toolbox:focus,.ai-chat-widget-messages .message-buttons-container>.button-message-toolbox:hover{color:var(--bs-body-color,#212529)!important}.ai-chat-widget-messages .message-buttons-container>.button-message-toolbox.tts-playing{color:var(--ai-widget-primary,#6f42c1)!important;opacity:1;pointer-events:auto}.ai-chat-widget-history-panel{position:absolute;top:3.5rem;left:0;right:0;bottom:0;background:var(--bs-body-bg,#fff);padding:1rem;z-index:10;display:none;overflow-y:auto;flex-direction:column}.ai-chat-widget-history-panel.show{display:flex}.ai-chat-widget-history-panel .history-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:.75rem;flex-shrink:0}.ai-chat-widget-history-panel .history-header h5{margin:0;font-size:1rem}.ai-chat-widget-history-list{list-style:none;padding:0;margin:0;overflow-y:auto;flex:1 1 auto}.ai-chat-widget-history-list li{margin-bottom:0}.ai-chat-widget-history-list .chat-session-history-item{display:block;padding:.5rem .75rem;text-decoration:none;color:var(--bs-body-color,#212529);font-size:.85rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:background .15s;cursor:pointer;border-bottom:1px solid var(--bs-border-color,#dee2e6)}.ai-chat-widget-history-list li:last-child .chat-session-history-item{border-bottom:none}.ai-chat-widget-history-list .chat-session-history-item:hover{background:var(--bs-tertiary-bg,#f8f9fa)}.ai-chat-widget-messages .ai-chat-notification{margin:.75rem .5rem 0;padding:.625rem .75rem;border:1px solid rgba(var(--bs-body-color-rgb,33,37,41),.12);border-radius:.5rem;background:rgba(var(--bs-tertiary-bg-rgb,248,249,250),.98)}.ai-chat-widget-messages .ai-chat-notification-content{display:flex;align-items:flex-start;gap:.5rem}.ai-chat-widget-messages .ai-chat-notification-icon{margin-top:.1rem;color:var(--bs-secondary-color,#6c757d)}.ai-chat-widget-messages .ai-chat-notification-text{flex:1 1 auto;min-width:0}.ai-chat-widget-messages .ai-chat-notification-dismiss{margin-left:auto!important;color:var(--bs-secondary-color,#6c757d)!important}.ai-chat-widget-messages .ai-chat-notification-actions{display:flex;gap:.5rem;margin-top:.5rem}.ai-chat-widget-messages .chart-container{width:100%;max-width:100%!important;min-height:280px}.ai-chat-widget-messages .ai-chat-message-body pre{background:var(--bs-dark-bg-subtle,#2d2d2d);color:var(--bs-emphasis-color,#f8f8f2);padding:.5rem;border-radius:4px;overflow-x:auto;font-size:.8rem}.ai-chat-widget-messages .ai-chat-message-body code{font-size:.85em}@keyframes ai-widget-pulse{0%,100%{opacity:1}50%{opacity:.4}}.ai-chat-widget-input{border-top:1px solid var(--bs-border-color,#dee2e6);padding:.5rem .75rem;display:flex;flex-wrap:wrap;gap:.5rem;align-items:flex-end}.ai-chat-widget-input .ai-chat-doc-bar{flex:0 0 100%;margin:-.5rem -.75rem .5rem;padding:.5rem .75rem;max-height:4.5rem;overflow-y:auto}.ai-chat-widget-input textarea{flex:1;min-width:0;color:var(--bs-body-color,#212529);background-color:var(--bs-body-bg,#fff);border:1px solid var(--bs-border-color,#ced4da);border-radius:8px;padding:.4rem .6rem;font-size:.9rem;resize:none;max-height:80px;min-height:36px;line-height:1.4;outline:0}.ai-chat-widget-input textarea:focus{border-color:var(--ai-widget-primary);box-shadow:0 0 0 2px rgba(var(--ai-widget-primary-rgb,108,117,125),.15)}.ai-chat-widget-input button{background:var(--ai-widget-primary);color:var(--bs-white,#fff);border:none;border-radius:8px;padding:.4rem .75rem;cursor:pointer;font-size:.9rem;white-space:nowrap}.ai-chat-widget-input .btn{background:var(--bs-body-bg,#fff);color:var(--bs-body-color,#212529);border:1px solid var(--bs-border-color,#ced4da)}.ai-chat-widget-input .btn.btn-link{background:0 0;color:var(--bs-secondary-color,#6c757d);border:none;padding:.4rem}.ai-chat-widget-input .btn.btn-outline-dark{background:var(--bs-dark,#212529);color:var(--bs-white,#fff);border-color:var(--bs-dark,#212529)}.ai-chat-widget-input .btn.btn-outline-secondary{color:var(--bs-secondary-color,#6c757d)}.ai-chat-widget-input button:disabled{opacity:.5;cursor:not-allowed}.ai-chat-widget-status{padding:.25rem .75rem;font-size:.8rem;color:var(--bs-secondary-color,#6c757d);display:none}.ai-chat-widget-status.visible{display:block}.ai-chat-widget-welcome{text-align:center;color:var(--bs-secondary-color,#6c757d);padding:2rem 1rem;font-size:.9rem}@media (max-width:576px){.ai-chat-widget-container{width:calc(100vw - 1rem);height:calc(100vh - 6rem);right:.5rem;bottom:4.5rem}}
@@ -1,27 +1,27 @@
1
1
  .attached-documents-panel {
2
2
  border: 1px solid var(--bs-border-color, #dee2e6);
3
3
  border-radius: 0.75rem;
4
- background: linear-gradient(180deg, rgba(13, 110, 253, 0.04), rgba(13, 110, 253, 0.01));
4
+ background: linear-gradient(180deg, rgba(var(--bs-primary-rgb, 13, 110, 253), 0.04), rgba(var(--bs-primary-rgb, 13, 110, 253), 0.01));
5
5
  padding: 1rem;
6
6
  }
7
7
 
8
8
  .document-drop-zone {
9
9
  position: relative;
10
- border: 2px dashed rgba(13, 110, 253, 0.35);
10
+ border: 2px dashed rgba(var(--bs-primary-rgb, 13, 110, 253), 0.35);
11
11
  border-radius: 1rem;
12
- background: rgba(248, 249, 250, 0.8);
12
+ background: rgba(var(--bs-tertiary-bg-rgb, 248, 249, 250), 0.8);
13
13
  transition: border-color 0.15s ease, background-color 0.15s ease, box-shadow 0.15s ease, transform 0.15s ease;
14
14
  }
15
15
 
16
16
  .document-drop-zone:hover {
17
- border-color: rgba(13, 110, 253, 0.55);
18
- background: rgba(248, 249, 250, 0.95);
17
+ border-color: rgba(var(--bs-primary-rgb, 13, 110, 253), 0.55);
18
+ background: rgba(var(--bs-tertiary-bg-rgb, 248, 249, 250), 0.95);
19
19
  }
20
20
 
21
21
  .document-drop-zone--dragover {
22
22
  border-color: var(--bs-primary, #0d6efd);
23
- background: rgba(13, 110, 253, 0.08);
24
- box-shadow: 0 0 0 0.2rem rgba(13, 110, 253, 0.12);
23
+ background: rgba(var(--bs-primary-rgb, 13, 110, 253), 0.08);
24
+ box-shadow: 0 0 0 0.2rem rgba(var(--bs-primary-rgb, 13, 110, 253), 0.12);
25
25
  transform: translateY(-1px);
26
26
  }
27
27
 
@@ -41,7 +41,7 @@
41
41
  align-items: center;
42
42
  justify-content: center;
43
43
  border-radius: 50%;
44
- background: rgba(13, 110, 253, 0.12);
44
+ background: rgba(var(--bs-primary-rgb, 13, 110, 253), 0.12);
45
45
  color: var(--bs-primary, #0d6efd);
46
46
  font-size: 1.5rem;
47
47
  }
@@ -71,7 +71,7 @@
71
71
  padding: 0.75rem 0.875rem;
72
72
  border: 1px solid var(--bs-border-color, #dee2e6);
73
73
  border-radius: 0.75rem;
74
- background: #fff;
74
+ background: var(--bs-body-bg, #fff);
75
75
  }
76
76
 
77
77
  .attached-document-icon {
@@ -81,7 +81,7 @@
81
81
  align-items: center;
82
82
  justify-content: center;
83
83
  border-radius: 0.65rem;
84
- background: rgba(13, 110, 253, 0.1);
84
+ background: rgba(var(--bs-primary-rgb, 13, 110, 253), 0.1);
85
85
  color: var(--bs-primary, #0d6efd);
86
86
  flex-shrink: 0;
87
87
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["document-drop-zone.css"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"document-drop-zone.css","sourcesContent":[".attached-documents-panel {\n border: 1px solid var(--bs-border-color, #dee2e6);\n border-radius: 0.75rem;\n background: linear-gradient(180deg, rgba(13, 110, 253, 0.04), rgba(13, 110, 253, 0.01));\n padding: 1rem;\n}\n\n.document-drop-zone {\n position: relative;\n border: 2px dashed rgba(13, 110, 253, 0.35);\n border-radius: 1rem;\n background: rgba(248, 249, 250, 0.8);\n transition: border-color 0.15s ease, background-color 0.15s ease, box-shadow 0.15s ease, transform 0.15s ease;\n}\n\n.document-drop-zone:hover {\n border-color: rgba(13, 110, 253, 0.55);\n background: rgba(248, 249, 250, 0.95);\n}\n\n.document-drop-zone--dragover {\n border-color: var(--bs-primary, #0d6efd);\n background: rgba(13, 110, 253, 0.08);\n box-shadow: 0 0 0 0.2rem rgba(13, 110, 253, 0.12);\n transform: translateY(-1px);\n}\n\n.document-drop-zone__body {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 0.75rem;\n padding: 1.5rem 1rem;\n text-align: center;\n}\n\n.document-drop-zone__icon {\n width: 3.5rem;\n height: 3.5rem;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border-radius: 50%;\n background: rgba(13, 110, 253, 0.12);\n color: var(--bs-primary, #0d6efd);\n font-size: 1.5rem;\n}\n\n.document-drop-zone__title {\n font-weight: 600;\n}\n\n.document-drop-zone__actions {\n display: flex;\n flex-wrap: wrap;\n justify-content: center;\n gap: 0.75rem;\n}\n\n.attached-documents-list {\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n}\n\n.attached-document-card,\n.pending-doc-row {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n padding: 0.75rem 0.875rem;\n border: 1px solid var(--bs-border-color, #dee2e6);\n border-radius: 0.75rem;\n background: #fff;\n}\n\n.attached-document-icon {\n width: 2.25rem;\n height: 2.25rem;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border-radius: 0.65rem;\n background: rgba(13, 110, 253, 0.1);\n color: var(--bs-primary, #0d6efd);\n flex-shrink: 0;\n}\n\n.attached-document-meta {\n min-width: 0;\n}\n\n.attached-document-name {\n font-weight: 500;\n word-break: break-word;\n}\n\n.attached-document-size {\n color: var(--bs-secondary-color, #6c757d);\n font-size: 0.875rem;\n}\n"]}
1
+ {"version":3,"sources":["document-drop-zone.css"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"document-drop-zone.css","sourcesContent":[".attached-documents-panel {\n border: 1px solid var(--bs-border-color, #dee2e6);\n border-radius: 0.75rem;\n background: linear-gradient(180deg, rgba(var(--bs-primary-rgb, 13, 110, 253), 0.04), rgba(var(--bs-primary-rgb, 13, 110, 253), 0.01));\n padding: 1rem;\n}\n\n.document-drop-zone {\n position: relative;\n border: 2px dashed rgba(var(--bs-primary-rgb, 13, 110, 253), 0.35);\n border-radius: 1rem;\n background: rgba(var(--bs-tertiary-bg-rgb, 248, 249, 250), 0.8);\n transition: border-color 0.15s ease, background-color 0.15s ease, box-shadow 0.15s ease, transform 0.15s ease;\n}\n\n.document-drop-zone:hover {\n border-color: rgba(var(--bs-primary-rgb, 13, 110, 253), 0.55);\n background: rgba(var(--bs-tertiary-bg-rgb, 248, 249, 250), 0.95);\n}\n\n.document-drop-zone--dragover {\n border-color: var(--bs-primary, #0d6efd);\n background: rgba(var(--bs-primary-rgb, 13, 110, 253), 0.08);\n box-shadow: 0 0 0 0.2rem rgba(var(--bs-primary-rgb, 13, 110, 253), 0.12);\n transform: translateY(-1px);\n}\n\n.document-drop-zone__body {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 0.75rem;\n padding: 1.5rem 1rem;\n text-align: center;\n}\n\n.document-drop-zone__icon {\n width: 3.5rem;\n height: 3.5rem;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border-radius: 50%;\n background: rgba(var(--bs-primary-rgb, 13, 110, 253), 0.12);\n color: var(--bs-primary, #0d6efd);\n font-size: 1.5rem;\n}\n\n.document-drop-zone__title {\n font-weight: 600;\n}\n\n.document-drop-zone__actions {\n display: flex;\n flex-wrap: wrap;\n justify-content: center;\n gap: 0.75rem;\n}\n\n.attached-documents-list {\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n}\n\n.attached-document-card,\n.pending-doc-row {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n padding: 0.75rem 0.875rem;\n border: 1px solid var(--bs-border-color, #dee2e6);\n border-radius: 0.75rem;\n background: var(--bs-body-bg, #fff);\n}\n\n.attached-document-icon {\n width: 2.25rem;\n height: 2.25rem;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border-radius: 0.65rem;\n background: rgba(var(--bs-primary-rgb, 13, 110, 253), 0.1);\n color: var(--bs-primary, #0d6efd);\n flex-shrink: 0;\n}\n\n.attached-document-meta {\n min-width: 0;\n}\n\n.attached-document-name {\n font-weight: 500;\n word-break: break-word;\n}\n\n.attached-document-size {\n color: var(--bs-secondary-color, #6c757d);\n font-size: 0.875rem;\n}\n"]}
@@ -1 +1 @@
1
- .attached-documents-panel{border:1px solid var(--bs-border-color,#dee2e6);border-radius:.75rem;background:linear-gradient(180deg,rgba(13,110,253,.04),rgba(13,110,253,.01));padding:1rem}.document-drop-zone{position:relative;border:2px dashed rgba(13,110,253,.35);border-radius:1rem;background:rgba(248,249,250,.8);transition:border-color .15s ease,background-color .15s ease,box-shadow .15s ease,transform .15s ease}.document-drop-zone:hover{border-color:rgba(13,110,253,.55);background:rgba(248,249,250,.95)}.document-drop-zone--dragover{border-color:var(--bs-primary,#0d6efd);background:rgba(13,110,253,.08);box-shadow:0 0 0 .2rem rgba(13,110,253,.12);transform:translateY(-1px)}.document-drop-zone__body{display:flex;flex-direction:column;align-items:center;gap:.75rem;padding:1.5rem 1rem;text-align:center}.document-drop-zone__icon{width:3.5rem;height:3.5rem;display:inline-flex;align-items:center;justify-content:center;border-radius:50%;background:rgba(13,110,253,.12);color:var(--bs-primary,#0d6efd);font-size:1.5rem}.document-drop-zone__title{font-weight:600}.document-drop-zone__actions{display:flex;flex-wrap:wrap;justify-content:center;gap:.75rem}.attached-documents-list{display:flex;flex-direction:column;gap:.5rem}.attached-document-card,.pending-doc-row{display:flex;align-items:center;gap:.75rem;padding:.75rem .875rem;border:1px solid var(--bs-border-color,#dee2e6);border-radius:.75rem;background:#fff}.attached-document-icon{width:2.25rem;height:2.25rem;display:inline-flex;align-items:center;justify-content:center;border-radius:.65rem;background:rgba(13,110,253,.1);color:var(--bs-primary,#0d6efd);flex-shrink:0}.attached-document-meta{min-width:0}.attached-document-name{font-weight:500;word-break:break-word}.attached-document-size{color:var(--bs-secondary-color,#6c757d);font-size:.875rem}
1
+ .attached-documents-panel{border:1px solid var(--bs-border-color,#dee2e6);border-radius:.75rem;background:linear-gradient(180deg,rgba(var(--bs-primary-rgb,13,110,253),.04),rgba(var(--bs-primary-rgb,13,110,253),.01));padding:1rem}.document-drop-zone{position:relative;border:2px dashed rgba(var(--bs-primary-rgb,13,110,253),.35);border-radius:1rem;background:rgba(var(--bs-tertiary-bg-rgb,248,249,250),.8);transition:border-color .15s ease,background-color .15s ease,box-shadow .15s ease,transform .15s ease}.document-drop-zone:hover{border-color:rgba(var(--bs-primary-rgb,13,110,253),.55);background:rgba(var(--bs-tertiary-bg-rgb,248,249,250),.95)}.document-drop-zone--dragover{border-color:var(--bs-primary,#0d6efd);background:rgba(var(--bs-primary-rgb,13,110,253),.08);box-shadow:0 0 0 .2rem rgba(var(--bs-primary-rgb,13,110,253),.12);transform:translateY(-1px)}.document-drop-zone__body{display:flex;flex-direction:column;align-items:center;gap:.75rem;padding:1.5rem 1rem;text-align:center}.document-drop-zone__icon{width:3.5rem;height:3.5rem;display:inline-flex;align-items:center;justify-content:center;border-radius:50%;background:rgba(var(--bs-primary-rgb,13,110,253),.12);color:var(--bs-primary,#0d6efd);font-size:1.5rem}.document-drop-zone__title{font-weight:600}.document-drop-zone__actions{display:flex;flex-wrap:wrap;justify-content:center;gap:.75rem}.attached-documents-list{display:flex;flex-direction:column;gap:.5rem}.attached-document-card,.pending-doc-row{display:flex;align-items:center;gap:.75rem;padding:.75rem .875rem;border:1px solid var(--bs-border-color,#dee2e6);border-radius:.75rem;background:var(--bs-body-bg,#fff)}.attached-document-icon{width:2.25rem;height:2.25rem;display:inline-flex;align-items:center;justify-content:center;border-radius:.65rem;background:rgba(var(--bs-primary-rgb,13,110,253),.1);color:var(--bs-primary,#0d6efd);flex-shrink:0}.attached-document-meta{min-width:0}.attached-document-name{font-weight:500;word-break:break-word}.attached-document-size{color:var(--bs-secondary-color,#6c757d);font-size:.875rem}
@@ -16,26 +16,54 @@
16
16
  }
17
17
  function initAutoGenerateTechnicalName(displayId, nameId) {
18
18
  if (!displayId || !nameId) return;
19
- document.addEventListener('DOMContentLoaded', function () {
19
+ function attach() {
20
20
  var displayEl = document.getElementById(displayId);
21
21
  var nameEl = document.getElementById(nameId);
22
22
  if (!displayEl || !nameEl) return;
23
+ if (nameEl.dataset.techNameInitialized === 'true') return;
24
+ nameEl.dataset.techNameInitialized = 'true';
23
25
 
24
26
  // Track whether the user has entered a non-empty value in the Name field.
25
27
  var userEdited = nameEl.value.trim() !== '';
28
+ // Set while we synthesize input/change events on the name field so we can
29
+ // distinguish programmatic updates from real user typing.
30
+ var suppressUserEditedTracking = false;
26
31
 
27
32
  // Resume auto-generation only when the Name field is empty again.
28
- nameEl.addEventListener('input', function () {
33
+ nameEl.addEventListener('input', function (e) {
34
+ if (suppressUserEditedTracking || e && e.isTrusted === false) {
35
+ return;
36
+ }
29
37
  userEdited = nameEl.value.trim() !== '';
30
38
  });
31
-
32
- // Generate on keyup as requested
33
- displayEl.addEventListener('keyup', function () {
39
+ function updateGeneratedValue() {
34
40
  if (userEdited) return;
35
41
  var generated = toTitleCaseNoSpaces(displayEl.value || '');
36
- nameEl.value = generated;
37
- });
38
- });
42
+ if (nameEl.value === generated) {
43
+ return;
44
+ }
45
+ suppressUserEditedTracking = true;
46
+ try {
47
+ nameEl.value = generated;
48
+ nameEl.dispatchEvent(new Event('input', {
49
+ bubbles: true
50
+ }));
51
+ nameEl.dispatchEvent(new Event('change', {
52
+ bubbles: true
53
+ }));
54
+ } finally {
55
+ suppressUserEditedTracking = false;
56
+ }
57
+ }
58
+ displayEl.addEventListener('input', updateGeneratedValue);
59
+ displayEl.addEventListener('keyup', updateGeneratedValue);
60
+ displayEl.addEventListener('change', updateGeneratedValue);
61
+ }
62
+ if (document.readyState === 'loading') {
63
+ document.addEventListener('DOMContentLoaded', attach);
64
+ } else {
65
+ attach();
66
+ }
39
67
  }
40
68
 
41
69
  // Automatically initialize for any elements using the data attributes.
@@ -1 +1 @@
1
- {"version":3,"sources":["technical-name-generator.js"],"names":["toTitleCaseNoSpaces","value","trim","split","filter","w","length","map","charAt","toUpperCase","slice","toLowerCase","join","initAutoGenerateTechnicalName","displayId","nameId","document","addEventListener","displayEl","getElementById","nameEl","userEdited","generated","autoEls","querySelectorAll","i","el","getAttribute","window"],"mappings":";;;;;AAAA,CAAC,YAAY;EACX;EACA,SAASA,mBAAmBA,CAACC,KAAK,EAAE;IAClC,OAAO,CAACA,KAAK,IAAI,EAAE,EAChBC,IAAI,CAAC;IACN;IAAA,CACCC,KAAK,CAAC,eAAe,CAAC,CACtBC,MAAM,CAAC,UAAUC,CAAC,EAAE;MAAE,OAAOA,CAAC,CAACC,MAAM,GAAG,CAAC;IAAE,CAAC,CAAC,CAC7CC,GAAG,CAAC,UAAUF,CAAC,EAAE;MAAE,OAAOA,CAAC,CAACG,MAAM,CAAC,CAAC,CAAC,CAACC,WAAW,CAAC,CAAC,GAAGJ,CAAC,CAACK,KAAK,CAAC,CAAC,CAAC,CAACC,WAAW,CAAC,CAAC;IAAE,CAAC,CAAC,CAClFC,IAAI,CAAC,EAAE,CAAC;EACb;EAEA,SAASC,6BAA6BA,CAACC,SAAS,EAAEC,MAAM,EAAE;IACxD,IAAI,CAACD,SAAS,IAAI,CAACC,MAAM,EAAE;IAC3BC,QAAQ,CAACC,gBAAgB,CAAC,kBAAkB,EAAE,YAAY;MACxD,IAAIC,SAAS,GAAGF,QAAQ,CAACG,cAAc,CAACL,SAAS,CAAC;MAClD,IAAIM,MAAM,GAAGJ,QAAQ,CAACG,cAAc,CAACJ,MAAM,CAAC;MAC5C,IAAI,CAACG,SAAS,IAAI,CAACE,MAAM,EAAE;;MAE3B;MACA,IAAIC,UAAU,GAAGD,MAAM,CAACnB,KAAK,CAACC,IAAI,CAAC,CAAC,KAAK,EAAE;;MAE3C;MACAkB,MAAM,CAACH,gBAAgB,CAAC,OAAO,EAAE,YAAY;QAC3CI,UAAU,GAAGD,MAAM,CAACnB,KAAK,CAACC,IAAI,CAAC,CAAC,KAAK,EAAE;MACzC,CAAC,CAAC;;MAEF;MACAgB,SAAS,CAACD,gBAAgB,CAAC,OAAO,EAAE,YAAY;QAC9C,IAAII,UAAU,EAAE;QAChB,IAAIC,SAAS,GAAGtB,mBAAmB,CAACkB,SAAS,CAACjB,KAAK,IAAI,EAAE,CAAC;QAC1DmB,MAAM,CAACnB,KAAK,GAAGqB,SAAS;MAC1B,CAAC,CAAC;IACJ,CAAC,CAAC;EACJ;;EAEA;EACAN,QAAQ,CAACC,gBAAgB,CAAC,kBAAkB,EAAE,YAAY;IACxD,IAAIM,OAAO,GAAGP,QAAQ,CAACQ,gBAAgB,CAAC,uBAAuB,CAAC;IAChE,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGF,OAAO,CAACjB,MAAM,EAAEmB,CAAC,EAAE,EAAE;MACvC,IAAIC,EAAE,GAAGH,OAAO,CAACE,CAAC,CAAC;MACnB,IAAIX,SAAS,GAAGY,EAAE,CAACC,YAAY,CAAC,iBAAiB,CAAC;MAClD,IAAIZ,MAAM,GAAGW,EAAE,CAACC,YAAY,CAAC,cAAc,CAAC;MAC5C,IAAIb,SAAS,IAAIC,MAAM,EAAE;QACvB;QACAF,6BAA6B,CAACC,SAAS,EAAEC,MAAM,CAAC;MAClD;IACF;EACF,CAAC,CAAC;EAEFa,MAAM,CAACf,6BAA6B,GAAGA,6BAA6B;AACtE,CAAC,EAAE,CAAC","file":"technical-name-generator.js","sourcesContent":["(function () {\n // Expose initializer globally so views can call it with specific field IDs.\n function toTitleCaseNoSpaces(value) {\n return (value || '')\n .trim()\n // split on whitespace or common separators or any non-alphanumeric\n .split(/[^A-Za-z0-9]+/)\n .filter(function (w) { return w.length > 0; })\n .map(function (w) { return w.charAt(0).toUpperCase() + w.slice(1).toLowerCase(); })\n .join('');\n }\n\n function initAutoGenerateTechnicalName(displayId, nameId) {\n if (!displayId || !nameId) return;\n document.addEventListener('DOMContentLoaded', function () {\n var displayEl = document.getElementById(displayId);\n var nameEl = document.getElementById(nameId);\n if (!displayEl || !nameEl) return;\n\n // Track whether the user has entered a non-empty value in the Name field.\n var userEdited = nameEl.value.trim() !== '';\n\n // Resume auto-generation only when the Name field is empty again.\n nameEl.addEventListener('input', function () {\n userEdited = nameEl.value.trim() !== '';\n });\n\n // Generate on keyup as requested\n displayEl.addEventListener('keyup', function () {\n if (userEdited) return;\n var generated = toTitleCaseNoSpaces(displayEl.value || '');\n nameEl.value = generated;\n });\n });\n }\n\n // Automatically initialize for any elements using the data attributes.\n document.addEventListener('DOMContentLoaded', function () {\n var autoEls = document.querySelectorAll('[data-auto-tech-name]');\n for (var i = 0; i < autoEls.length; i++) {\n var el = autoEls[i];\n var displayId = el.getAttribute('data-display-id');\n var nameId = el.getAttribute('data-name-id');\n if (displayId && nameId) {\n // call initializer immediately (it will attach listeners)\n initAutoGenerateTechnicalName(displayId, nameId);\n }\n }\n });\n\n window.initAutoGenerateTechnicalName = initAutoGenerateTechnicalName;\n})();\n"]}
1
+ {"version":3,"sources":["technical-name-generator.js"],"names":["toTitleCaseNoSpaces","value","trim","split","filter","w","length","map","charAt","toUpperCase","slice","toLowerCase","join","initAutoGenerateTechnicalName","displayId","nameId","attach","displayEl","document","getElementById","nameEl","dataset","techNameInitialized","userEdited","suppressUserEditedTracking","addEventListener","e","isTrusted","updateGeneratedValue","generated","dispatchEvent","Event","bubbles","readyState","autoEls","querySelectorAll","i","el","getAttribute","window"],"mappings":";;;;;AAAA,CAAC,YAAY;EACX;EACA,SAASA,mBAAmBA,CAACC,KAAK,EAAE;IAClC,OAAO,CAACA,KAAK,IAAI,EAAE,EAChBC,IAAI,CAAC;IACN;IAAA,CACCC,KAAK,CAAC,eAAe,CAAC,CACtBC,MAAM,CAAC,UAAUC,CAAC,EAAE;MAAE,OAAOA,CAAC,CAACC,MAAM,GAAG,CAAC;IAAE,CAAC,CAAC,CAC7CC,GAAG,CAAC,UAAUF,CAAC,EAAE;MAAE,OAAOA,CAAC,CAACG,MAAM,CAAC,CAAC,CAAC,CAACC,WAAW,CAAC,CAAC,GAAGJ,CAAC,CAACK,KAAK,CAAC,CAAC,CAAC,CAACC,WAAW,CAAC,CAAC;IAAE,CAAC,CAAC,CAClFC,IAAI,CAAC,EAAE,CAAC;EACb;EAEA,SAASC,6BAA6BA,CAACC,SAAS,EAAEC,MAAM,EAAE;IACxD,IAAI,CAACD,SAAS,IAAI,CAACC,MAAM,EAAE;IAE3B,SAASC,MAAMA,CAAA,EAAG;MAChB,IAAIC,SAAS,GAAGC,QAAQ,CAACC,cAAc,CAACL,SAAS,CAAC;MAClD,IAAIM,MAAM,GAAGF,QAAQ,CAACC,cAAc,CAACJ,MAAM,CAAC;MAC5C,IAAI,CAACE,SAAS,IAAI,CAACG,MAAM,EAAE;MAC3B,IAAIA,MAAM,CAACC,OAAO,CAACC,mBAAmB,KAAK,MAAM,EAAE;MAEnDF,MAAM,CAACC,OAAO,CAACC,mBAAmB,GAAG,MAAM;;MAE3C;MACA,IAAIC,UAAU,GAAGH,MAAM,CAACnB,KAAK,CAACC,IAAI,CAAC,CAAC,KAAK,EAAE;MAC3C;MACA;MACA,IAAIsB,0BAA0B,GAAG,KAAK;;MAEtC;MACAJ,MAAM,CAACK,gBAAgB,CAAC,OAAO,EAAE,UAAUC,CAAC,EAAE;QAC5C,IAAIF,0BAA0B,IAAKE,CAAC,IAAIA,CAAC,CAACC,SAAS,KAAK,KAAM,EAAE;UAC9D;QACF;QAEAJ,UAAU,GAAGH,MAAM,CAACnB,KAAK,CAACC,IAAI,CAAC,CAAC,KAAK,EAAE;MACzC,CAAC,CAAC;MAEF,SAAS0B,oBAAoBA,CAAA,EAAG;QAC9B,IAAIL,UAAU,EAAE;QAEhB,IAAIM,SAAS,GAAG7B,mBAAmB,CAACiB,SAAS,CAAChB,KAAK,IAAI,EAAE,CAAC;QAE1D,IAAImB,MAAM,CAACnB,KAAK,KAAK4B,SAAS,EAAE;UAC9B;QACF;QAEAL,0BAA0B,GAAG,IAAI;QACjC,IAAI;UACFJ,MAAM,CAACnB,KAAK,GAAG4B,SAAS;UACxBT,MAAM,CAACU,aAAa,CAAC,IAAIC,KAAK,CAAC,OAAO,EAAE;YAAEC,OAAO,EAAE;UAAK,CAAC,CAAC,CAAC;UAC3DZ,MAAM,CAACU,aAAa,CAAC,IAAIC,KAAK,CAAC,QAAQ,EAAE;YAAEC,OAAO,EAAE;UAAK,CAAC,CAAC,CAAC;QAC9D,CAAC,SAAS;UACRR,0BAA0B,GAAG,KAAK;QACpC;MACF;MAEAP,SAAS,CAACQ,gBAAgB,CAAC,OAAO,EAAEG,oBAAoB,CAAC;MACzDX,SAAS,CAACQ,gBAAgB,CAAC,OAAO,EAAEG,oBAAoB,CAAC;MACzDX,SAAS,CAACQ,gBAAgB,CAAC,QAAQ,EAAEG,oBAAoB,CAAC;IAC5D;IAEA,IAAIV,QAAQ,CAACe,UAAU,KAAK,SAAS,EAAE;MACrCf,QAAQ,CAACO,gBAAgB,CAAC,kBAAkB,EAAET,MAAM,CAAC;IACvD,CAAC,MAAM;MACLA,MAAM,CAAC,CAAC;IACV;EACF;;EAEA;EACAE,QAAQ,CAACO,gBAAgB,CAAC,kBAAkB,EAAE,YAAY;IACxD,IAAIS,OAAO,GAAGhB,QAAQ,CAACiB,gBAAgB,CAAC,uBAAuB,CAAC;IAChE,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGF,OAAO,CAAC5B,MAAM,EAAE8B,CAAC,EAAE,EAAE;MACvC,IAAIC,EAAE,GAAGH,OAAO,CAACE,CAAC,CAAC;MACnB,IAAItB,SAAS,GAAGuB,EAAE,CAACC,YAAY,CAAC,iBAAiB,CAAC;MAClD,IAAIvB,MAAM,GAAGsB,EAAE,CAACC,YAAY,CAAC,cAAc,CAAC;MAC5C,IAAIxB,SAAS,IAAIC,MAAM,EAAE;QACvB;QACAF,6BAA6B,CAACC,SAAS,EAAEC,MAAM,CAAC;MAClD;IACF;EACF,CAAC,CAAC;EAEFwB,MAAM,CAAC1B,6BAA6B,GAAGA,6BAA6B;AACtE,CAAC,EAAE,CAAC","file":"technical-name-generator.js","sourcesContent":["(function () {\n // Expose initializer globally so views can call it with specific field IDs.\n function toTitleCaseNoSpaces(value) {\n return (value || '')\n .trim()\n // split on whitespace or common separators or any non-alphanumeric\n .split(/[^A-Za-z0-9]+/)\n .filter(function (w) { return w.length > 0; })\n .map(function (w) { return w.charAt(0).toUpperCase() + w.slice(1).toLowerCase(); })\n .join('');\n }\n\n function initAutoGenerateTechnicalName(displayId, nameId) {\n if (!displayId || !nameId) return;\n\n function attach() {\n var displayEl = document.getElementById(displayId);\n var nameEl = document.getElementById(nameId);\n if (!displayEl || !nameEl) return;\n if (nameEl.dataset.techNameInitialized === 'true') return;\n\n nameEl.dataset.techNameInitialized = 'true';\n\n // Track whether the user has entered a non-empty value in the Name field.\n var userEdited = nameEl.value.trim() !== '';\n // Set while we synthesize input/change events on the name field so we can\n // distinguish programmatic updates from real user typing.\n var suppressUserEditedTracking = false;\n\n // Resume auto-generation only when the Name field is empty again.\n nameEl.addEventListener('input', function (e) {\n if (suppressUserEditedTracking || (e && e.isTrusted === false)) {\n return;\n }\n\n userEdited = nameEl.value.trim() !== '';\n });\n\n function updateGeneratedValue() {\n if (userEdited) return;\n\n var generated = toTitleCaseNoSpaces(displayEl.value || '');\n\n if (nameEl.value === generated) {\n return;\n }\n\n suppressUserEditedTracking = true;\n try {\n nameEl.value = generated;\n nameEl.dispatchEvent(new Event('input', { bubbles: true }));\n nameEl.dispatchEvent(new Event('change', { bubbles: true }));\n } finally {\n suppressUserEditedTracking = false;\n }\n }\n\n displayEl.addEventListener('input', updateGeneratedValue);\n displayEl.addEventListener('keyup', updateGeneratedValue);\n displayEl.addEventListener('change', updateGeneratedValue);\n }\n\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', attach);\n } else {\n attach();\n }\n }\n\n // Automatically initialize for any elements using the data attributes.\n document.addEventListener('DOMContentLoaded', function () {\n var autoEls = document.querySelectorAll('[data-auto-tech-name]');\n for (var i = 0; i < autoEls.length; i++) {\n var el = autoEls[i];\n var displayId = el.getAttribute('data-display-id');\n var nameId = el.getAttribute('data-name-id');\n if (displayId && nameId) {\n // call initializer immediately (it will attach listeners)\n initAutoGenerateTechnicalName(displayId, nameId);\n }\n }\n });\n\n window.initAutoGenerateTechnicalName = initAutoGenerateTechnicalName;\n})();\n"]}
@@ -1,2 +1,2 @@
1
- !function(){function t(t,e){t&&e&&document.addEventListener("DOMContentLoaded",function(){var n=document.getElementById(t),a=document.getElementById(e);if(n&&a){var i=""!==a.value.trim();a.addEventListener("input",function(){i=""!==a.value.trim()}),n.addEventListener("keyup",function(){if(!i){var t=(n.value||""||"").trim().split(/[^A-Za-z0-9]+/).filter(function(t){return t.length>0}).map(function(t){return t.charAt(0).toUpperCase()+t.slice(1).toLowerCase()}).join("");a.value=t}})}})}document.addEventListener("DOMContentLoaded",function(){for(var e=document.querySelectorAll("[data-auto-tech-name]"),n=0;n<e.length;n++){var a=e[n],i=a.getAttribute("data-display-id"),d=a.getAttribute("data-name-id");i&&d&&t(i,d)}}),window.initAutoGenerateTechnicalName=t}();
1
+ !function(){function e(e,t){function n(){var n=document.getElementById(e),a=document.getElementById(t);if(n&&a&&"true"!==a.dataset.techNameInitialized){a.dataset.techNameInitialized="true";var i=""!==a.value.trim(),d=!1;a.addEventListener("input",function(e){d||e&&!1===e.isTrusted||(i=""!==a.value.trim())}),n.addEventListener("input",u),n.addEventListener("keyup",u),n.addEventListener("change",u)}function u(){if(!i){var e=(n.value||""||"").trim().split(/[^A-Za-z0-9]+/).filter(function(e){return e.length>0}).map(function(e){return e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()}).join("");if(a.value!==e){d=!0;try{a.value=e,a.dispatchEvent(new Event("input",{bubbles:!0})),a.dispatchEvent(new Event("change",{bubbles:!0}))}finally{d=!1}}}}}e&&t&&("loading"===document.readyState?document.addEventListener("DOMContentLoaded",n):n())}document.addEventListener("DOMContentLoaded",function(){for(var t=document.querySelectorAll("[data-auto-tech-name]"),n=0;n<t.length;n++){var a=t[n],i=a.getAttribute("data-display-id"),d=a.getAttribute("data-name-id");i&&d&&e(i,d)}}),window.initAutoGenerateTechnicalName=e}();
2
2
  //# sourceMappingURL=technical-name-generator.min.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["technical-name-generator.js"],"names":["initAutoGenerateTechnicalName","displayId","nameId","document","addEventListener","displayEl","getElementById","nameEl","userEdited","value","trim","generated","split","filter","w","length","map","charAt","toUpperCase","slice","toLowerCase","join","autoEls","querySelectorAll","i","el","getAttribute","window"],"mappings":"CAAA,WAYE,SAASA,EAA8BC,EAAWC,GAC3CD,GAAcC,GACnBC,SAASC,iBAAiB,mBAAoB,WAC5C,IAAIC,EAAYF,SAASG,eAAeL,GACpCM,EAASJ,SAASG,eAAeJ,GACrC,GAAKG,GAAcE,EAAnB,CAGA,IAAIC,EAAqC,KAAxBD,EAAOE,MAAMC,OAG9BH,EAAOH,iBAAiB,QAAS,WAC/BI,EAAqC,KAAxBD,EAAOE,MAAMC,MAC5B,GAGAL,EAAUD,iBAAiB,QAAS,WAClC,IAAII,EAAJ,CACA,IAAIG,GAAgCN,EAAUI,OAAS,IA3B1C,IACdC,OAEAE,MAAM,iBACNC,OAAO,SAAUC,GAAK,OAAOA,EAAEC,OAAS,CAAG,GAC3CC,IAAI,SAAUF,GAAK,OAAOA,EAAEG,OAAO,GAAGC,cAAgBJ,EAAEK,MAAM,GAAGC,aAAe,GAChFC,KAAK,IAsBJd,EAAOE,MAAQE,CAFC,CAGlB,EAf2B,CAgB7B,EACF,CAGAR,SAASC,iBAAiB,mBAAoB,WAE5C,IADA,IAAIkB,EAAUnB,SAASoB,iBAAiB,yBAC/BC,EAAI,EAAGA,EAAIF,EAAQP,OAAQS,IAAK,CACvC,IAAIC,EAAKH,EAAQE,GACbvB,EAAYwB,EAAGC,aAAa,mBAC5BxB,EAASuB,EAAGC,aAAa,gBACzBzB,GAAaC,GAEfF,EAA8BC,EAAWC,EAE7C,CACF,GAEAyB,OAAO3B,8BAAgCA,CACxC,CAnDD","file":"technical-name-generator.min.js","sourcesContent":["(function () {\n // Expose initializer globally so views can call it with specific field IDs.\n function toTitleCaseNoSpaces(value) {\n return (value || '')\n .trim()\n // split on whitespace or common separators or any non-alphanumeric\n .split(/[^A-Za-z0-9]+/)\n .filter(function (w) { return w.length > 0; })\n .map(function (w) { return w.charAt(0).toUpperCase() + w.slice(1).toLowerCase(); })\n .join('');\n }\n\n function initAutoGenerateTechnicalName(displayId, nameId) {\n if (!displayId || !nameId) return;\n document.addEventListener('DOMContentLoaded', function () {\n var displayEl = document.getElementById(displayId);\n var nameEl = document.getElementById(nameId);\n if (!displayEl || !nameEl) return;\n\n // Track whether the user has entered a non-empty value in the Name field.\n var userEdited = nameEl.value.trim() !== '';\n\n // Resume auto-generation only when the Name field is empty again.\n nameEl.addEventListener('input', function () {\n userEdited = nameEl.value.trim() !== '';\n });\n\n // Generate on keyup as requested\n displayEl.addEventListener('keyup', function () {\n if (userEdited) return;\n var generated = toTitleCaseNoSpaces(displayEl.value || '');\n nameEl.value = generated;\n });\n });\n }\n\n // Automatically initialize for any elements using the data attributes.\n document.addEventListener('DOMContentLoaded', function () {\n var autoEls = document.querySelectorAll('[data-auto-tech-name]');\n for (var i = 0; i < autoEls.length; i++) {\n var el = autoEls[i];\n var displayId = el.getAttribute('data-display-id');\n var nameId = el.getAttribute('data-name-id');\n if (displayId && nameId) {\n // call initializer immediately (it will attach listeners)\n initAutoGenerateTechnicalName(displayId, nameId);\n }\n }\n });\n\n window.initAutoGenerateTechnicalName = initAutoGenerateTechnicalName;\n})();\n"]}
1
+ {"version":3,"sources":["technical-name-generator.js"],"names":["initAutoGenerateTechnicalName","displayId","nameId","attach","displayEl","document","getElementById","nameEl","dataset","techNameInitialized","userEdited","value","trim","suppressUserEditedTracking","addEventListener","e","isTrusted","updateGeneratedValue","generated","split","filter","w","length","map","charAt","toUpperCase","slice","toLowerCase","join","dispatchEvent","Event","bubbles","readyState","autoEls","querySelectorAll","i","el","getAttribute","window"],"mappings":"CAAA,WAYE,SAASA,EAA8BC,EAAWC,GAGhD,SAASC,IACP,IAAIC,EAAYC,SAASC,eAAeL,GACpCM,EAASF,SAASC,eAAeJ,GACrC,GAAKE,GAAcG,GACwB,SAAvCA,EAAOC,QAAQC,oBAAnB,CAEAF,EAAOC,QAAQC,oBAAsB,OAGrC,IAAIC,EAAqC,KAAxBH,EAAOI,MAAMC,OAG1BC,GAA6B,EAGjCN,EAAOO,iBAAiB,QAAS,SAAUC,GACrCF,GAA+BE,IAAqB,IAAhBA,EAAEC,YAI1CN,EAAqC,KAAxBH,EAAOI,MAAMC,OAC5B,GAqBAR,EAAUU,iBAAiB,QAASG,GACpCb,EAAUU,iBAAiB,QAASG,GACpCb,EAAUU,iBAAiB,SAAUG,EAxCc,CAmBnD,SAASA,IACP,IAAIP,EAAJ,CAEA,IAAIQ,GAAgCd,EAAUO,OAAS,IAtC1C,IACdC,OAEAO,MAAM,iBACNC,OAAO,SAAUC,GAAK,OAAOA,EAAEC,OAAS,CAAG,GAC3CC,IAAI,SAAUF,GAAK,OAAOA,EAAEG,OAAO,GAAGC,cAAgBJ,EAAEK,MAAM,GAAGC,aAAe,GAChFC,KAAK,IAkCJ,GAAIrB,EAAOI,QAAUO,EAArB,CAIAL,GAA6B,EAC7B,IACEN,EAAOI,MAAQO,EACfX,EAAOsB,cAAc,IAAIC,MAAM,QAAS,CAAEC,SAAS,KACnDxB,EAAOsB,cAAc,IAAIC,MAAM,SAAU,CAAEC,SAAS,IACtD,CAAC,QACClB,GAA6B,CAC/B,CATA,CANgB,CAgBlB,CAKF,CA/CKZ,GAAcC,IAiDS,YAAxBG,SAAS2B,WACX3B,SAASS,iBAAiB,mBAAoBX,GAE9CA,IAEJ,CAGAE,SAASS,iBAAiB,mBAAoB,WAE5C,IADA,IAAImB,EAAU5B,SAAS6B,iBAAiB,yBAC/BC,EAAI,EAAGA,EAAIF,EAAQX,OAAQa,IAAK,CACvC,IAAIC,EAAKH,EAAQE,GACblC,EAAYmC,EAAGC,aAAa,mBAC5BnC,EAASkC,EAAGC,aAAa,gBACzBpC,GAAaC,GAEfF,EAA8BC,EAAWC,EAE7C,CACF,GAEAoC,OAAOtC,8BAAgCA,CACxC,CApFD","file":"technical-name-generator.min.js","sourcesContent":["(function () {\n // Expose initializer globally so views can call it with specific field IDs.\n function toTitleCaseNoSpaces(value) {\n return (value || '')\n .trim()\n // split on whitespace or common separators or any non-alphanumeric\n .split(/[^A-Za-z0-9]+/)\n .filter(function (w) { return w.length > 0; })\n .map(function (w) { return w.charAt(0).toUpperCase() + w.slice(1).toLowerCase(); })\n .join('');\n }\n\n function initAutoGenerateTechnicalName(displayId, nameId) {\n if (!displayId || !nameId) return;\n\n function attach() {\n var displayEl = document.getElementById(displayId);\n var nameEl = document.getElementById(nameId);\n if (!displayEl || !nameEl) return;\n if (nameEl.dataset.techNameInitialized === 'true') return;\n\n nameEl.dataset.techNameInitialized = 'true';\n\n // Track whether the user has entered a non-empty value in the Name field.\n var userEdited = nameEl.value.trim() !== '';\n // Set while we synthesize input/change events on the name field so we can\n // distinguish programmatic updates from real user typing.\n var suppressUserEditedTracking = false;\n\n // Resume auto-generation only when the Name field is empty again.\n nameEl.addEventListener('input', function (e) {\n if (suppressUserEditedTracking || (e && e.isTrusted === false)) {\n return;\n }\n\n userEdited = nameEl.value.trim() !== '';\n });\n\n function updateGeneratedValue() {\n if (userEdited) return;\n\n var generated = toTitleCaseNoSpaces(displayEl.value || '');\n\n if (nameEl.value === generated) {\n return;\n }\n\n suppressUserEditedTracking = true;\n try {\n nameEl.value = generated;\n nameEl.dispatchEvent(new Event('input', { bubbles: true }));\n nameEl.dispatchEvent(new Event('change', { bubbles: true }));\n } finally {\n suppressUserEditedTracking = false;\n }\n }\n\n displayEl.addEventListener('input', updateGeneratedValue);\n displayEl.addEventListener('keyup', updateGeneratedValue);\n displayEl.addEventListener('change', updateGeneratedValue);\n }\n\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', attach);\n } else {\n attach();\n }\n }\n\n // Automatically initialize for any elements using the data attributes.\n document.addEventListener('DOMContentLoaded', function () {\n var autoEls = document.querySelectorAll('[data-auto-tech-name]');\n for (var i = 0; i < autoEls.length; i++) {\n var el = autoEls[i];\n var displayId = el.getAttribute('data-display-id');\n var nameId = el.getAttribute('data-name-id');\n if (displayId && nameId) {\n // call initializer immediately (it will attach listeners)\n initAutoGenerateTechnicalName(displayId, nameId);\n }\n }\n });\n\n window.initAutoGenerateTechnicalName = initAutoGenerateTechnicalName;\n})();\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@crestapps/ai-chat-ui",
3
- "version": "1.0.0-preview.9",
3
+ "version": "1.0.0-preview.90",
4
4
  "description": "Browser-ready JavaScript widgets and CSS for CrestApps AI chat sessions and chat interactions. Supports streaming responses, image generation, Chart.js interactive charts, document uploads, copy-to-clipboard, and feedback buttons.",
5
5
  "license": "MIT",
6
6
  "author": "CrestApps",
@@ -13,6 +13,10 @@
13
13
  "bugs": {
14
14
  "url": "https://github.com/CrestApps/CrestApps.Core/issues"
15
15
  },
16
+ "publishConfig": {
17
+ "access": "public",
18
+ "registry": "https://registry.npmjs.org/"
19
+ },
16
20
  "keywords": [
17
21
  "ai",
18
22
  "chat",
@@ -35,6 +39,10 @@
35
39
  "./ai-chat.min": "./dist/ai-chat.min.js",
36
40
  "./ai-chat.js.map": "./dist/ai-chat.js.map",
37
41
  "./ai-chat.min.js.map": "./dist/ai-chat.min.js.map",
42
+ "./ai-chat-widget": "./dist/ai-chat-widget.js",
43
+ "./ai-chat-widget.min": "./dist/ai-chat-widget.min.js",
44
+ "./ai-chat-widget.js.map": "./dist/ai-chat-widget.js.map",
45
+ "./ai-chat-widget.min.js.map": "./dist/ai-chat-widget.min.js.map",
38
46
  "./chat-interaction": "./dist/chat-interaction.js",
39
47
  "./chat-interaction.min": "./dist/chat-interaction.min.js",
40
48
  "./chat-interaction.js.map": "./dist/chat-interaction.js.map",