deepnova-help-widget 0.0.0-stage → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js ADDED
@@ -0,0 +1,1279 @@
1
+ "use strict";var k=Object.defineProperty;var M=Object.getOwnPropertyDescriptor;var $=Object.getOwnPropertyNames;var A=Object.prototype.hasOwnProperty;var L=(b,w)=>()=>(b&&(w=b(b=0)),w);var S=(b,w)=>{for(var e in w)k(b,e,{get:w[e],enumerable:!0})},C=(b,w,e,s)=>{if(w&&typeof w=="object"||typeof w=="function")for(let t of $(w))!A.call(b,t)&&t!==e&&k(b,t,{get:()=>w[t],enumerable:!(s=M(w,t))||s.enumerable});return b};var q=b=>C(k({},"__esModule",{value:!0}),b);var T,I=L(()=>{T=`:host {\r
2
+ --hw-font: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;\r
3
+ font-family: var(--hw-font);\r
4
+ display: inline-block;\r
5
+ \r
6
+ /* Theme Tokens - Dark (Default) */\r
7
+ --hw-bg-sidebar: #0e1320;\r
8
+ --hw-bg-glass: rgba(14, 19, 32, 0.85);\r
9
+ --hw-border-glass: rgba(255, 255, 255, 0.08);\r
10
+ --hw-text-primary: #f8fafc;\r
11
+ --hw-text-secondary: #94a3b8;\r
12
+ --hw-text-muted: #64748b;\r
13
+ --hw-accent: #5d4fff;\r
14
+ --hw-accent-glow: rgba(93, 79, 255, 0.45);\r
15
+ --hw-accent-hover: #4c3fe0;\r
16
+ --hw-surface: #1e293b;\r
17
+ --hw-surface-hover: #334155;\r
18
+ --hw-input-bg: rgba(255, 255, 255, 0.04);\r
19
+ --hw-input-border: rgba(255, 255, 255, 0.1);\r
20
+ --hw-input-focus: #5d4fff;\r
21
+ --hw-bg-tabs: rgba(0, 0, 0, 0.15);\r
22
+ --hw-bg-faq-content: rgba(0, 0, 0, 0.1);\r
23
+ \r
24
+ /* Status Colors */\r
25
+ --hw-color-open: #38bdf8;\r
26
+ --hw-color-progress: #fbbf24;\r
27
+ --hw-color-pending: #c084fc;\r
28
+ --hw-color-resolved: #34d399;\r
29
+ --hw-color-closed: #94a3b8;\r
30
+ \r
31
+ --hw-bg-open: rgba(56, 189, 248, 0.1);\r
32
+ --hw-bg-progress: rgba(251, 191, 36, 0.1);\r
33
+ --hw-bg-pending: rgba(192, 132, 252, 0.1);\r
34
+ --hw-bg-resolved: rgba(52, 211, 153, 0.1);\r
35
+ --hw-bg-closed: rgba(148, 163, 184, 0.1);\r
36
+ }\r
37
+ \r
38
+ :host([theme="light"]) {\r
39
+ --hw-bg-sidebar: #ffffff;\r
40
+ --hw-bg-glass: rgba(255, 255, 255, 0.9);\r
41
+ --hw-border-glass: rgba(0, 0, 0, 0.08);\r
42
+ --hw-text-primary: #0f172a;\r
43
+ --hw-text-secondary: #475569;\r
44
+ --hw-text-muted: #94a3b8;\r
45
+ --hw-accent: #5d4fff;\r
46
+ --hw-accent-glow: rgba(93, 79, 255, 0.2);\r
47
+ --hw-accent-hover: #4c3fe0;\r
48
+ --hw-surface: #f1f5f9;\r
49
+ --hw-surface-hover: #e2e8f0;\r
50
+ --hw-input-bg: #ffffff;\r
51
+ --hw-input-border: #cbd5e1;\r
52
+ --hw-input-focus: #5d4fff;\r
53
+ --hw-bg-tabs: #f1f5f9;\r
54
+ --hw-bg-faq-content: #f8fafc;\r
55
+ }\r
56
+ \r
57
+ @media (prefers-color-scheme: light) {\r
58
+ :host(:not([theme="dark"])) {\r
59
+ --hw-bg-sidebar: #ffffff;\r
60
+ --hw-bg-glass: rgba(255, 255, 255, 0.9);\r
61
+ --hw-border-glass: rgba(0, 0, 0, 0.08);\r
62
+ --hw-text-primary: #0f172a;\r
63
+ --hw-text-secondary: #475569;\r
64
+ --hw-text-muted: #94a3b8;\r
65
+ --hw-accent: #5d4fff;\r
66
+ --hw-accent-glow: rgba(93, 79, 255, 0.2);\r
67
+ --hw-accent-hover: #4c3fe0;\r
68
+ --hw-surface: #f1f5f9;\r
69
+ --hw-surface-hover: #e2e8f0;\r
70
+ --hw-input-bg: #ffffff;\r
71
+ --hw-input-border: #cbd5e1;\r
72
+ --hw-input-focus: #5d4fff;\r
73
+ --hw-bg-tabs: #f1f5f9;\r
74
+ --hw-bg-faq-content: #f8fafc;\r
75
+ }\r
76
+ }\r
77
+ \r
78
+ /* Trigger Button Styling */\r
79
+ .hw-trigger-btn {\r
80
+ display: flex;\r
81
+ align-items: center;\r
82
+ justify-content: center;\r
83
+ width: 36px;\r
84
+ height: 36px;\r
85
+ border-radius: 10px;\r
86
+ border: 1px solid var(--hw-border-glass);\r
87
+ background: var(--hw-input-bg);\r
88
+ color: var(--hw-text-secondary);\r
89
+ font-size: 16px;\r
90
+ cursor: pointer;\r
91
+ transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\r
92
+ box-sizing: border-box;\r
93
+ outline: none;\r
94
+ }\r
95
+ \r
96
+ .hw-trigger-btn:hover {\r
97
+ background: var(--hw-surface);\r
98
+ color: var(--hw-accent);\r
99
+ border-color: var(--hw-accent);\r
100
+ box-shadow: 0 0 10px var(--hw-accent-glow);\r
101
+ transform: scale(1.03);\r
102
+ }\r
103
+ \r
104
+ .hw-trigger-btn.minimal {\r
105
+ border: none;\r
106
+ background: transparent;\r
107
+ width: auto;\r
108
+ height: auto;\r
109
+ padding: 6px;\r
110
+ }\r
111
+ \r
112
+ .hw-trigger-btn.hidden {\r
113
+ display: none;\r
114
+ }\r
115
+ \r
116
+ /* Backdrop Overlay */\r
117
+ .hw-backdrop {\r
118
+ position: fixed;\r
119
+ top: 0;\r
120
+ left: 0;\r
121
+ width: 100vw;\r
122
+ height: 100vh;\r
123
+ background: rgba(4, 7, 13, 0.4);\r
124
+ backdrop-filter: blur(8px);\r
125
+ -webkit-backdrop-filter: blur(8px);\r
126
+ z-index: 99998;\r
127
+ opacity: 0;\r
128
+ pointer-events: none;\r
129
+ transition: opacity 0.3s ease;\r
130
+ }\r
131
+ \r
132
+ .hw-backdrop.open {\r
133
+ opacity: 1;\r
134
+ pointer-events: auto;\r
135
+ }\r
136
+ \r
137
+ /* Sidebar Panel Drawer */\r
138
+ .hw-sidebar {\r
139
+ position: fixed;\r
140
+ top: 0;\r
141
+ right: -420px;\r
142
+ width: 100%;\r
143
+ max-width: 400px;\r
144
+ height: 100vh;\r
145
+ background: var(--hw-bg-sidebar);\r
146
+ border-left: 1px solid var(--hw-border-glass);\r
147
+ z-index: 99999;\r
148
+ box-shadow: -10px 0 30px rgba(0, 0, 0, 0.25);\r
149
+ transition: right 0.35s cubic-bezier(0.16, 1, 0.3, 1);\r
150
+ display: flex;\r
151
+ flex-direction: column;\r
152
+ box-sizing: border-box;\r
153
+ }\r
154
+ \r
155
+ .hw-sidebar.open {\r
156
+ right: 0;\r
157
+ }\r
158
+ \r
159
+ /* Sidebar Header */\r
160
+ .hw-header {\r
161
+ display: flex;\r
162
+ align-items: center;\r
163
+ justify-content: space-between;\r
164
+ padding: 20px;\r
165
+ border-bottom: 1px solid var(--hw-border-glass);\r
166
+ }\r
167
+ \r
168
+ .hw-header-title {\r
169
+ font-size: 18px;\r
170
+ font-weight: 700;\r
171
+ color: var(--hw-text-primary);\r
172
+ margin: 0;\r
173
+ display: flex;\r
174
+ align-items: center;\r
175
+ gap: 8px;\r
176
+ }\r
177
+ \r
178
+ .hw-close-btn {\r
179
+ background: transparent;\r
180
+ border: none;\r
181
+ color: var(--hw-text-secondary);\r
182
+ font-size: 18px;\r
183
+ cursor: pointer;\r
184
+ width: 32px;\r
185
+ height: 32px;\r
186
+ display: flex;\r
187
+ align-items: center;\r
188
+ justify-content: center;\r
189
+ border-radius: 8px;\r
190
+ transition: all 0.15s;\r
191
+ }\r
192
+ \r
193
+ .hw-close-btn:hover {\r
194
+ background: var(--hw-surface);\r
195
+ color: #ef4444;\r
196
+ }\r
197
+ \r
198
+ /* Tabs Navigation */\r
199
+ .hw-tabs {\r
200
+ display: flex;\r
201
+ padding: 12px 16px;\r
202
+ gap: 4px;\r
203
+ background: var(--hw-bg-tabs);\r
204
+ border-bottom: 1px solid var(--hw-border-glass);\r
205
+ }\r
206
+ \r
207
+ .hw-tab-btn {\r
208
+ flex: 1;\r
209
+ padding: 8px 4px;\r
210
+ background: transparent;\r
211
+ border: none;\r
212
+ color: var(--hw-text-secondary);\r
213
+ font-size: 12px;\r
214
+ font-weight: 600;\r
215
+ cursor: pointer;\r
216
+ border-radius: 8px;\r
217
+ transition: all 0.2s;\r
218
+ text-align: center;\r
219
+ white-space: nowrap;\r
220
+ }\r
221
+ \r
222
+ .hw-tab-btn:hover {\r
223
+ background: var(--hw-surface);\r
224
+ color: var(--hw-text-primary);\r
225
+ }\r
226
+ \r
227
+ .hw-tab-btn.active {\r
228
+ background: var(--hw-accent);\r
229
+ color: #ffffff;\r
230
+ box-shadow: 0 2px 8px var(--hw-accent-glow);\r
231
+ }\r
232
+ \r
233
+ /* Sidebar Body Viewport */\r
234
+ .hw-body {\r
235
+ flex: 1;\r
236
+ overflow-y: auto;\r
237
+ padding: 20px;\r
238
+ box-sizing: border-box;\r
239
+ display: flex;\r
240
+ flex-direction: column;\r
241
+ }\r
242
+ \r
243
+ .hw-tab-panel {\r
244
+ display: none;\r
245
+ flex-direction: column;\r
246
+ height: 100%;\r
247
+ }\r
248
+ \r
249
+ .hw-tab-panel.active {\r
250
+ display: flex;\r
251
+ animation: fadeIn 0.25s ease-out;\r
252
+ }\r
253
+ \r
254
+ @keyframes fadeIn {\r
255
+ from {\r
256
+ opacity: 0;\r
257
+ transform: translateY(6px);\r
258
+ }\r
259
+ \r
260
+ to {\r
261
+ opacity: 1;\r
262
+ transform: translateY(0);\r
263
+ }\r
264
+ }\r
265
+ \r
266
+ /* Help Guide Accordion */\r
267
+ .hw-faq-item {\r
268
+ border: 1px solid var(--hw-border-glass);\r
269
+ border-radius: 12px;\r
270
+ margin-bottom: 12px;\r
271
+ background: rgba(255, 255, 255, 0.01);\r
272
+ overflow: hidden;\r
273
+ transition: border-color 0.2s;\r
274
+ }\r
275
+ \r
276
+ .hw-faq-item:hover {\r
277
+ border-color: var(--hw-accent-glow);\r
278
+ }\r
279
+ \r
280
+ .hw-faq-header {\r
281
+ display: flex;\r
282
+ justify-content: space-between;\r
283
+ align-items: center;\r
284
+ padding: 12px 14px;\r
285
+ cursor: pointer;\r
286
+ user-select: none;\r
287
+ }\r
288
+ \r
289
+ .hw-faq-icon {\r
290
+ font-size: 11px;\r
291
+ color: var(--hw-text-muted);\r
292
+ transition: transform 0.2s;\r
293
+ }\r
294
+ \r
295
+ .hw-faq-item.open .hw-faq-icon {\r
296
+ transform: rotate(180deg);\r
297
+ }\r
298
+ \r
299
+ .hw-faq-content {\r
300
+ max-height: 0;\r
301
+ overflow: hidden;\r
302
+ transition: max-height 0.25s cubic-bezier(0.4, 0, 0.2, 1);\r
303
+ background: var(--hw-bg-faq-content);\r
304
+ }\r
305
+ \r
306
+ .hw-faq-inner {\r
307
+ padding: 14px 16px;\r
308
+ border-top: 1px solid var(--hw-border-glass);\r
309
+ }\r
310
+ \r
311
+ /* Dynamic Step & Image Framework Styling */\r
312
+ .hw-guide-main-title {\r
313
+ font-size: 13px;\r
314
+ font-weight: 500;\r
315
+ color: var(--hw-text-secondary);\r
316
+ margin: 0 0 16px 0;\r
317
+ line-height: 1.5;\r
318
+ }\r
319
+ \r
320
+ .hw-process-title {\r
321
+ font-size: 12px;\r
322
+ font-weight: 700;\r
323
+ text-transform: uppercase;\r
324
+ letter-spacing: 0.05em;\r
325
+ color: var(--hw-text-primary);\r
326
+ margin: 24px 0 12px 0;\r
327
+ padding-bottom: 6px;\r
328
+ border-bottom: 1px solid var(--hw-border-glass);\r
329
+ line-height: 1.4;\r
330
+ display: flex;\r
331
+ align-items: center;\r
332
+ gap: 8px;\r
333
+ }\r
334
+ \r
335
+ .hw-process-title:first-of-type {\r
336
+ margin-top: 0;\r
337
+ }\r
338
+ \r
339
+ .hw-process-title::before {\r
340
+ content: "";\r
341
+ display: inline-block;\r
342
+ width: 4px;\r
343
+ height: 12px;\r
344
+ background: var(--hw-accent);\r
345
+ border-radius: 2px;\r
346
+ }\r
347
+ \r
348
+ .hw-step-header-left {\r
349
+ display: flex;\r
350
+ align-items: center;\r
351
+ gap: 10px;\r
352
+ }\r
353
+ \r
354
+ .hw-step-number {\r
355
+ display: flex;\r
356
+ align-items: center;\r
357
+ justify-content: center;\r
358
+ width: 24px;\r
359
+ height: 24px;\r
360
+ border-radius: 50%;\r
361
+ background: var(--hw-accent);\r
362
+ color: #ffffff;\r
363
+ font-size: 11px;\r
364
+ font-weight: 700;\r
365
+ box-shadow: 0 0 8px var(--hw-accent-glow);\r
366
+ flex-shrink: 0;\r
367
+ }\r
368
+ \r
369
+ .hw-step-title {\r
370
+ font-size: 13px;\r
371
+ font-weight: 600;\r
372
+ color: var(--hw-text-primary);\r
373
+ line-height: 1.4;\r
374
+ }\r
375
+ \r
376
+ .hw-step-desc {\r
377
+ margin: 0 0 12px 0;\r
378
+ font-size: 12px;\r
379
+ line-height: 1.6;\r
380
+ color: var(--hw-text-secondary);\r
381
+ }\r
382
+ \r
383
+ .hw-step-images-list {\r
384
+ display: flex;\r
385
+ flex-direction: column;\r
386
+ gap: 12px;\r
387
+ margin-top: 12px;\r
388
+ }\r
389
+ \r
390
+ .hw-step-image-wrap {\r
391
+ border: 2px solid #0ea5e9;\r
392
+ border-radius: 12px;\r
393
+ padding: 4px;\r
394
+ background: rgba(14, 165, 233, 0.04);\r
395
+ box-shadow: 0 0 12px rgba(14, 165, 233, 0.2);\r
396
+ overflow: hidden;\r
397
+ transition: transform 0.2s, box-shadow 0.2s;\r
398
+ }\r
399
+ \r
400
+ .hw-step-image-wrap:hover {\r
401
+ transform: scale(1.01);\r
402
+ box-shadow: 0 0 16px rgba(14, 165, 233, 0.35);\r
403
+ }\r
404
+ \r
405
+ .hw-step-img {\r
406
+ width: 100%;\r
407
+ height: auto;\r
408
+ display: block;\r
409
+ border-radius: 8px;\r
410
+ object-fit: contain;\r
411
+ cursor: zoom-in;\r
412
+ }\r
413
+ \r
414
+ .hw-step-note {\r
415
+ display: flex;\r
416
+ gap: 8px;\r
417
+ background: rgba(59, 130, 246, 0.08);\r
418
+ border: 1px solid rgba(59, 130, 246, 0.2);\r
419
+ border-radius: 8px;\r
420
+ padding: 10px 12px;\r
421
+ margin-top: 12px;\r
422
+ align-items: flex-start;\r
423
+ box-sizing: border-box;\r
424
+ }\r
425
+ \r
426
+ .hw-note-icon {\r
427
+ color: #3b82f6;\r
428
+ flex-shrink: 0;\r
429
+ margin-top: 2px;\r
430
+ }\r
431
+ \r
432
+ .hw-note-desc {\r
433
+ margin: 0;\r
434
+ font-size: 11px;\r
435
+ line-height: 1.5;\r
436
+ color: var(--hw-text-secondary);\r
437
+ text-align: left;\r
438
+ }\r
439
+ \r
440
+ .hw-step-important {\r
441
+ display: flex;\r
442
+ gap: 8px;\r
443
+ background: rgba(245, 158, 11, 0.08);\r
444
+ border: 1px solid rgba(245, 158, 11, 0.2);\r
445
+ border-radius: 8px;\r
446
+ padding: 10px 12px;\r
447
+ margin-top: 12px;\r
448
+ align-items: flex-start;\r
449
+ box-sizing: border-box;\r
450
+ text-align: left;\r
451
+ }\r
452
+ \r
453
+ .hw-important-icon {\r
454
+ color: #f59e0b;\r
455
+ flex-shrink: 0;\r
456
+ margin-top: 2px;\r
457
+ }\r
458
+ \r
459
+ .hw-important-title {\r
460
+ margin: 0 0 2px 0;\r
461
+ font-size: 11px;\r
462
+ font-weight: 700;\r
463
+ color: #f59e0b;\r
464
+ }\r
465
+ \r
466
+ .hw-important-desc {\r
467
+ margin: 0;\r
468
+ font-size: 11px;\r
469
+ line-height: 1.5;\r
470
+ color: var(--hw-text-secondary);\r
471
+ }\r
472
+ \r
473
+ /* Support & Feedback Form */\r
474
+ .hw-field {\r
475
+ margin-bottom: 16px;\r
476
+ }\r
477
+ \r
478
+ .hw-label {\r
479
+ display: block;\r
480
+ font-size: 11px;\r
481
+ font-weight: 600;\r
482
+ color: var(--hw-text-secondary);\r
483
+ text-transform: uppercase;\r
484
+ letter-spacing: 0.05em;\r
485
+ margin-bottom: 6px;\r
486
+ }\r
487
+ \r
488
+ .hw-input,\r
489
+ .hw-textarea,\r
490
+ .hw-select {\r
491
+ width: 100%;\r
492
+ padding: 10px 12px;\r
493
+ border-radius: 8px;\r
494
+ font-size: 13px;\r
495
+ background: var(--hw-input-bg);\r
496
+ border: 1px solid var(--hw-input-border);\r
497
+ color: var(--hw-text-primary);\r
498
+ outline: none;\r
499
+ box-sizing: border-box;\r
500
+ transition: all 0.2s;\r
501
+ }\r
502
+ \r
503
+ .hw-input:focus,\r
504
+ .hw-textarea:focus,\r
505
+ .hw-select:focus {\r
506
+ border-color: var(--hw-input-focus);\r
507
+ box-shadow: 0 0 0 2px var(--hw-accent-glow);\r
508
+ }\r
509
+ \r
510
+ .hw-textarea {\r
511
+ resize: vertical;\r
512
+ min-height: 90px;\r
513
+ }\r
514
+ \r
515
+ .hw-select option {\r
516
+ background: var(--hw-bg-sidebar);\r
517
+ color: var(--hw-text-primary);\r
518
+ }\r
519
+ \r
520
+ /* Upload Zone */\r
521
+ .hw-upload-zone {\r
522
+ width: 100%;\r
523
+ border-radius: 8px;\r
524
+ box-sizing: border-box;\r
525
+ border: 1px dashed var(--hw-input-border);\r
526
+ display: flex;\r
527
+ flex-direction: column;\r
528
+ align-items: center;\r
529
+ gap: 6px;\r
530
+ padding: 16px 12px;\r
531
+ transition: all 0.2s;\r
532
+ cursor: pointer;\r
533
+ }\r
534
+ \r
535
+ .hw-upload-zone.dragover {\r
536
+ border-color: var(--hw-accent);\r
537
+ background: var(--hw-accent-glow);\r
538
+ }\r
539
+ \r
540
+ .hw-upload-zone svg {\r
541
+ color: var(--hw-text-muted);\r
542
+ }\r
543
+ \r
544
+ .hw-upload-hint {\r
545
+ font-size: 12px;\r
546
+ color: var(--hw-text-secondary);\r
547
+ margin: 0;\r
548
+ text-align: center;\r
549
+ }\r
550
+ \r
551
+ .hw-upload-sub {\r
552
+ font-size: 10px;\r
553
+ color: var(--hw-text-muted);\r
554
+ margin: 0;\r
555
+ }\r
556
+ \r
557
+ .hw-upload-actions {\r
558
+ display: flex;\r
559
+ gap: 6px;\r
560
+ margin-top: 4px;\r
561
+ }\r
562
+ \r
563
+ .hw-btn-paste,\r
564
+ .hw-btn-browse {\r
565
+ display: flex;\r
566
+ align-items: center;\r
567
+ gap: 5px;\r
568
+ padding: 4px 10px;\r
569
+ border-radius: 6px;\r
570
+ font-size: 11px;\r
571
+ font-weight: 600;\r
572
+ cursor: pointer;\r
573
+ border: 1px solid var(--hw-input-border);\r
574
+ background: var(--hw-surface);\r
575
+ color: var(--hw-text-secondary);\r
576
+ transition: all 0.15s;\r
577
+ }\r
578
+ \r
579
+ .hw-btn-paste:hover,\r
580
+ .hw-btn-browse:hover {\r
581
+ background: var(--hw-surface-hover);\r
582
+ color: var(--hw-text-primary);\r
583
+ }\r
584
+ \r
585
+ .hw-file-input {\r
586
+ display: none;\r
587
+ }\r
588
+ \r
589
+ .hw-preview-wrap {\r
590
+ position: relative;\r
591
+ }\r
592
+ \r
593
+ .hw-preview-img {\r
594
+ width: 100%;\r
595
+ max-height: 120px;\r
596
+ object-fit: cover;\r
597
+ border-radius: 8px;\r
598
+ border: 1px solid var(--hw-input-border);\r
599
+ display: block;\r
600
+ cursor: zoom-in;\r
601
+ }\r
602
+ \r
603
+ .hw-preview-remove {\r
604
+ position: absolute;\r
605
+ top: 6px;\r
606
+ right: 6px;\r
607
+ background: rgba(0, 0, 0, 0.7);\r
608
+ border: none;\r
609
+ border-radius: 6px;\r
610
+ color: #ef4444;\r
611
+ cursor: pointer;\r
612
+ padding: 3px 6px;\r
613
+ font-size: 10px;\r
614
+ font-weight: 700;\r
615
+ transition: background 0.15s;\r
616
+ }\r
617
+ \r
618
+ .hw-preview-remove:hover {\r
619
+ background: rgba(0, 0, 0, 0.9);\r
620
+ }\r
621
+ \r
622
+ .hw-preview-name {\r
623
+ font-size: 11px;\r
624
+ color: var(--hw-text-muted);\r
625
+ margin-top: 4px;\r
626
+ text-align: center;\r
627
+ text-overflow: ellipsis;\r
628
+ overflow: hidden;\r
629
+ white-space: nowrap;\r
630
+ }\r
631
+ \r
632
+ /* Submit button */\r
633
+ .hw-btn-submit {\r
634
+ width: 100%;\r
635
+ padding: 11px;\r
636
+ border-radius: 8px;\r
637
+ font-size: 13px;\r
638
+ font-weight: 700;\r
639
+ background: var(--hw-accent);\r
640
+ border: none;\r
641
+ color: #ffffff;\r
642
+ cursor: pointer;\r
643
+ transition: all 0.2s;\r
644
+ box-shadow: 0 4px 12px var(--hw-accent-glow);\r
645
+ }\r
646
+ \r
647
+ .hw-btn-submit:hover {\r
648
+ background: var(--hw-accent-hover);\r
649
+ box-shadow: 0 4px 18px var(--hw-accent-glow);\r
650
+ transform: translateY(-1px);\r
651
+ }\r
652
+ \r
653
+ .hw-btn-submit:disabled {\r
654
+ opacity: 0.5;\r
655
+ cursor: not-allowed;\r
656
+ transform: none;\r
657
+ box-shadow: none;\r
658
+ }\r
659
+ \r
660
+ /* Status Notifications */\r
661
+ .hw-status-msg {\r
662
+ padding: 10px;\r
663
+ border-radius: 8px;\r
664
+ font-size: 12px;\r
665
+ font-weight: 500;\r
666
+ text-align: center;\r
667
+ margin-bottom: 12px;\r
668
+ animation: slideDown 0.2s ease;\r
669
+ }\r
670
+ \r
671
+ @keyframes slideDown {\r
672
+ from {\r
673
+ transform: translateY(-8px);\r
674
+ opacity: 0;\r
675
+ }\r
676
+ \r
677
+ to {\r
678
+ transform: translateY(0);\r
679
+ opacity: 1;\r
680
+ }\r
681
+ }\r
682
+ \r
683
+ .hw-status-msg.success {\r
684
+ background: rgba(52, 211, 153, 0.15);\r
685
+ color: #34d399;\r
686
+ border: 1px solid rgba(52, 211, 153, 0.25);\r
687
+ }\r
688
+ \r
689
+ .hw-status-msg.error {\r
690
+ background: rgba(239, 68, 68, 0.15);\r
691
+ color: #f87171;\r
692
+ border: 1px solid rgba(239, 68, 68, 0.25);\r
693
+ }\r
694
+ \r
695
+ /* Ticket Status Listing */\r
696
+ .hw-ticket-list {\r
697
+ display: flex;\r
698
+ flex-direction: column;\r
699
+ gap: 10px;\r
700
+ flex: 1;\r
701
+ }\r
702
+ \r
703
+ .hw-ticket-card {\r
704
+ background: rgba(255, 255, 255, 0.02);\r
705
+ border: 1px solid var(--hw-border-glass);\r
706
+ border-radius: 12px;\r
707
+ padding: 14px;\r
708
+ transition: all 0.2s;\r
709
+ }\r
710
+ \r
711
+ .hw-ticket-card:hover {\r
712
+ border-color: var(--hw-border-glass);\r
713
+ background: rgba(255, 255, 255, 0.04);\r
714
+ transform: translateY(-1px);\r
715
+ }\r
716
+ \r
717
+ .hw-ticket-card-header {\r
718
+ display: flex;\r
719
+ justify-content: space-between;\r
720
+ align-items: flex-start;\r
721
+ gap: 8px;\r
722
+ margin-bottom: 6px;\r
723
+ }\r
724
+ \r
725
+ .hw-ticket-card-number {\r
726
+ font-size: 11px;\r
727
+ font-family: monospace;\r
728
+ color: var(--hw-text-muted);\r
729
+ font-weight: 600;\r
730
+ }\r
731
+ \r
732
+ .hw-ticket-card-badge {\r
733
+ font-size: 10px;\r
734
+ font-weight: 700;\r
735
+ text-transform: uppercase;\r
736
+ padding: 2px 8px;\r
737
+ border-radius: 9999px;\r
738
+ letter-spacing: 0.05em;\r
739
+ }\r
740
+ \r
741
+ .hw-badge-open {\r
742
+ color: var(--hw-color-open);\r
743
+ background: var(--hw-bg-open);\r
744
+ }\r
745
+ \r
746
+ .hw-badge-progress {\r
747
+ color: var(--hw-color-progress);\r
748
+ background: var(--hw-bg-progress);\r
749
+ }\r
750
+ \r
751
+ .hw-badge-pending {\r
752
+ color: var(--hw-color-pending);\r
753
+ background: var(--hw-bg-pending);\r
754
+ }\r
755
+ \r
756
+ .hw-badge-resolved {\r
757
+ color: var(--hw-color-resolved);\r
758
+ background: var(--hw-bg-resolved);\r
759
+ }\r
760
+ \r
761
+ .hw-badge-closed {\r
762
+ color: var(--hw-color-closed);\r
763
+ background: var(--hw-bg-closed);\r
764
+ }\r
765
+ \r
766
+ .hw-ticket-card-subject {\r
767
+ font-size: 13px;\r
768
+ font-weight: 600;\r
769
+ color: var(--hw-text-primary);\r
770
+ margin: 0 0 6px 0;\r
771
+ line-height: 1.4;\r
772
+ }\r
773
+ \r
774
+ .hw-ticket-card-footer {\r
775
+ display: flex;\r
776
+ justify-content: space-between;\r
777
+ font-size: 10px;\r
778
+ color: var(--hw-text-muted);\r
779
+ }\r
780
+ \r
781
+ /* Utility Empty & Loader States */\r
782
+ .hw-empty-state {\r
783
+ display: flex;\r
784
+ flex-direction: column;\r
785
+ align-items: center;\r
786
+ justify-content: center;\r
787
+ gap: 8px;\r
788
+ color: var(--hw-text-muted);\r
789
+ font-size: 12px;\r
790
+ text-align: center;\r
791
+ padding: 40px 20px;\r
792
+ flex: 1;\r
793
+ }\r
794
+ \r
795
+ .hw-empty-state svg {\r
796
+ color: var(--hw-text-muted);\r
797
+ opacity: 0.5;\r
798
+ }\r
799
+ \r
800
+ .hw-loader {\r
801
+ width: 24px;\r
802
+ height: 24px;\r
803
+ border: 2px solid var(--hw-border-glass);\r
804
+ border-top-color: var(--hw-accent);\r
805
+ border-radius: 50%;\r
806
+ animation: hw-spin 0.6s linear infinite;\r
807
+ margin: 40px auto;\r
808
+ }\r
809
+ \r
810
+ @keyframes hw-spin {\r
811
+ to {\r
812
+ transform: rotate(360deg);\r
813
+ }\r
814
+ }\r
815
+ \r
816
+ .hw-list-header {\r
817
+ display: flex;\r
818
+ justify-content: space-between;\r
819
+ align-items: center;\r
820
+ margin-bottom: 12px;\r
821
+ }\r
822
+ \r
823
+ .hw-list-title {\r
824
+ font-size: 12px;\r
825
+ font-weight: 700;\r
826
+ text-transform: uppercase;\r
827
+ color: var(--hw-text-secondary);\r
828
+ letter-spacing: 0.05em;\r
829
+ margin: 0;\r
830
+ }\r
831
+ \r
832
+ .hw-btn-refresh {\r
833
+ background: transparent;\r
834
+ border: none;\r
835
+ color: var(--hw-accent);\r
836
+ font-size: 11px;\r
837
+ font-weight: 600;\r
838
+ cursor: pointer;\r
839
+ display: flex;\r
840
+ align-items: center;\r
841
+ gap: 3px;\r
842
+ padding: 2px 6px;\r
843
+ border-radius: 4px;\r
844
+ transition: all 0.15s;\r
845
+ }\r
846
+ \r
847
+ .hw-btn-refresh:hover {\r
848
+ background: var(--hw-surface);\r
849
+ color: var(--hw-accent-hover);\r
850
+ }\r
851
+ \r
852
+ /* Lightbox Fullscreen Modal Overlay */\r
853
+ .hw-lightbox {\r
854
+ position: fixed;\r
855
+ top: 0;\r
856
+ left: 0;\r
857
+ width: 100vw;\r
858
+ height: 100vh;\r
859
+ background: rgba(4, 7, 13, 0.88);\r
860
+ backdrop-filter: blur(8px);\r
861
+ -webkit-backdrop-filter: blur(8px);\r
862
+ z-index: 1000000;\r
863
+ display: flex;\r
864
+ align-items: center;\r
865
+ justify-content: center;\r
866
+ opacity: 0;\r
867
+ pointer-events: none;\r
868
+ transition: opacity 0.3s cubic-bezier(0.16, 1, 0.3, 1);\r
869
+ }\r
870
+ \r
871
+ .hw-lightbox.open {\r
872
+ opacity: 1;\r
873
+ pointer-events: auto;\r
874
+ }\r
875
+ \r
876
+ .hw-lightbox-img {\r
877
+ max-width: 90%;\r
878
+ max-height: 85%;\r
879
+ object-fit: contain;\r
880
+ border-radius: 12px;\r
881
+ box-shadow: 0 20px 50px rgba(0, 0, 0, 0.6);\r
882
+ border: 1px solid rgba(255, 255, 255, 0.1);\r
883
+ transform: scale(0.95);\r
884
+ transition: transform 0.3s cubic-bezier(0.16, 1, 0.3, 1);\r
885
+ background: #000;\r
886
+ }\r
887
+ \r
888
+ .hw-lightbox.open .hw-lightbox-img {\r
889
+ transform: scale(1);\r
890
+ }\r
891
+ \r
892
+ .hw-lightbox-close {\r
893
+ position: absolute;\r
894
+ top: 24px;\r
895
+ right: 24px;\r
896
+ background: rgba(255, 255, 255, 0.08);\r
897
+ border: 1px solid rgba(255, 255, 255, 0.1);\r
898
+ border-radius: 50%;\r
899
+ width: 44px;\r
900
+ height: 44px;\r
901
+ color: #ffffff;\r
902
+ font-size: 22px;\r
903
+ cursor: pointer;\r
904
+ display: flex;\r
905
+ align-items: center;\r
906
+ justify-content: center;\r
907
+ transition: all 0.2s;\r
908
+ outline: none;\r
909
+ }\r
910
+ \r
911
+ .hw-lightbox-close:hover {\r
912
+ background: rgba(255, 255, 255, 0.18);\r
913
+ transform: scale(1.05);\r
914
+ color: #f43f5e;\r
915
+ }\r
916
+ \r
917
+ /* Ticket Comments Section styling */\r
918
+ .hw-ticket-comments-section {\r
919
+ margin-top: 10px;\r
920
+ border-top: 1px solid var(--hw-border-glass);\r
921
+ padding-top: 10px;\r
922
+ width: 100%;\r
923
+ }\r
924
+ \r
925
+ .hw-comments-toggle-btn {\r
926
+ display: flex;\r
927
+ align-items: center;\r
928
+ gap: 6px;\r
929
+ background: transparent;\r
930
+ border: none;\r
931
+ color: var(--hw-text-secondary);\r
932
+ font-size: 11px;\r
933
+ font-weight: 600;\r
934
+ cursor: pointer;\r
935
+ padding: 4px 8px;\r
936
+ border-radius: 6px;\r
937
+ transition: all 0.2s ease;\r
938
+ width: fit-content;\r
939
+ }\r
940
+ \r
941
+ .hw-comments-toggle-btn:hover {\r
942
+ background: var(--hw-surface);\r
943
+ color: var(--hw-text-primary);\r
944
+ }\r
945
+ \r
946
+ .hw-comments-toggle-chevron {\r
947
+ font-size: 9px;\r
948
+ color: var(--hw-text-muted);\r
949
+ transition: transform 0.25s ease;\r
950
+ margin-left: 2px;\r
951
+ }\r
952
+ \r
953
+ .hw-comments-toggle-btn.open .hw-comments-toggle-chevron {\r
954
+ transform: rotate(180deg);\r
955
+ }\r
956
+ \r
957
+ .hw-comments-list-wrapper {\r
958
+ max-height: 0;\r
959
+ overflow: hidden;\r
960
+ transition: max-height 0.25s cubic-bezier(0.4, 0, 0.2, 1);\r
961
+ }\r
962
+ \r
963
+ .hw-comments-list {\r
964
+ display: flex;\r
965
+ flex-direction: column;\r
966
+ gap: 8px;\r
967
+ padding: 8px 4px 4px 4px;\r
968
+ }\r
969
+ \r
970
+ .hw-comment-item {\r
971
+ background: rgba(255, 255, 255, 0.015);\r
972
+ border: 1px solid var(--hw-border-glass);\r
973
+ border-radius: 8px;\r
974
+ padding: 10px;\r
975
+ box-sizing: border-box;\r
976
+ }\r
977
+ \r
978
+ /* Highlights the staff's response with accent color */\r
979
+ .hw-comment-item.staff {\r
980
+ background: rgba(93, 79, 255, 0.04);\r
981
+ border-left: 3px solid var(--hw-accent);\r
982
+ }\r
983
+ \r
984
+ .hw-comment-meta {\r
985
+ display: flex;\r
986
+ justify-content: space-between;\r
987
+ align-items: center;\r
988
+ margin-bottom: 6px;\r
989
+ font-size: 10px;\r
990
+ }\r
991
+ \r
992
+ .hw-comment-author {\r
993
+ font-weight: 700;\r
994
+ color: var(--hw-text-primary);\r
995
+ display: flex;\r
996
+ align-items: center;\r
997
+ gap: 6px;\r
998
+ }\r
999
+ \r
1000
+ .hw-comment-staff-badge {\r
1001
+ background: var(--hw-accent);\r
1002
+ color: #ffffff;\r
1003
+ font-size: 8px;\r
1004
+ padding: 1px 5px;\r
1005
+ border-radius: 4px;\r
1006
+ text-transform: uppercase;\r
1007
+ font-weight: 800;\r
1008
+ letter-spacing: 0.03em;\r
1009
+ }\r
1010
+ \r
1011
+ .hw-comment-date {\r
1012
+ color: var(--hw-text-muted);\r
1013
+ }\r
1014
+ \r
1015
+ .hw-comment-text {\r
1016
+ margin: 0;\r
1017
+ font-size: 11px;\r
1018
+ line-height: 1.5;\r
1019
+ color: var(--hw-text-secondary);\r
1020
+ word-break: break-word;\r
1021
+ }`});var H={};S(H,{HelpSidebarWidgetElement:()=>v});var D,v,E=L(()=>{"use strict";I();D=`
1022
+ <button class="hw-trigger-btn" id="hw-trigger-btn" title="Open Help & Support" aria-label="Help and Support">
1023
+ <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round">
1024
+ <circle cx="12" cy="12" r="10"/>
1025
+ <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"/>
1026
+ <line x1="12" y1="17" x2="12.01" y2="17"/>
1027
+ </svg>
1028
+ </button>
1029
+
1030
+ <div class="hw-backdrop" id="hw-backdrop"></div>
1031
+
1032
+ <div class="hw-lightbox" id="hw-lightbox">
1033
+ <button class="hw-lightbox-close" id="hw-lightbox-close" aria-label="Close image preview">\u2715</button>
1034
+ <img class="hw-lightbox-img" id="hw-lightbox-img" src="" alt="Enlarged screenshot" />
1035
+ </div>
1036
+
1037
+ <div class="hw-sidebar" id="hw-sidebar">
1038
+ <div class="hw-header">
1039
+ <h2 class="hw-header-title">
1040
+ <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5">
1041
+ <circle cx="12" cy="12" r="10"/>
1042
+ <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"/>
1043
+ <line x1="12" y1="17" x2="12.01" y2="17"/>
1044
+ </svg>
1045
+ Help & Support
1046
+ </h2>
1047
+ <button class="hw-close-btn" id="hw-close-btn" aria-label="Close sidebar">\u2715</button>
1048
+ </div>
1049
+
1050
+ <div class="hw-tabs">
1051
+ <button class="hw-tab-btn active" data-tab="guide">Help Guide</button>
1052
+ <button class="hw-tab-btn" data-tab="feedback">Support & Feedback</button>
1053
+ <button class="hw-tab-btn" data-tab="status">Ticket Status</button>
1054
+ </div>
1055
+
1056
+ <div class="hw-body">
1057
+ <!-- 1. HELP GUIDE PANEL -->
1058
+ <div class="hw-tab-panel active" id="hw-panel-guide">
1059
+ <div id="hw-guide-loading" class="hw-loader"></div>
1060
+ <div id="hw-guide-container"></div>
1061
+ </div>
1062
+
1063
+ <!-- 2. SUPPORT & FEEDBACK PANEL -->
1064
+ <div class="hw-tab-panel" id="hw-panel-feedback">
1065
+ <div id="hw-form-status" style="display:none"></div>
1066
+
1067
+ <div class="hw-field">
1068
+ <label class="hw-label" for="hw-name">Full Name *</label>
1069
+ <input class="hw-input" id="hw-name" type="text" placeholder="Your name" required />
1070
+ </div>
1071
+
1072
+ <div class="hw-field">
1073
+ <label class="hw-label" for="hw-email">Email Address *</label>
1074
+ <input class="hw-input" id="hw-email" type="email" placeholder="your.email@domain.com" required />
1075
+ </div>
1076
+
1077
+ <div id="hw-custom-fields-container"></div>
1078
+
1079
+ <div class="hw-field">
1080
+ <label class="hw-label" for="hw-subject">Subject *</label>
1081
+ <input class="hw-input" id="hw-subject" type="text" placeholder="Brief summary of your request" required />
1082
+ </div>
1083
+
1084
+ <div class="hw-field">
1085
+ <label class="hw-label" for="hw-category">Category *</label>
1086
+ <select class="hw-select" id="hw-category">
1087
+ <option value="bug">Bug Report \u{1F41B}</option>
1088
+ <option value="feature">Feature Request \u{1F4A1}</option>
1089
+ <option value="support">General Support \u2754</option>
1090
+ <option value="other">Other \u{1F4DD}</option>
1091
+ </select>
1092
+ </div>
1093
+
1094
+ <div class="hw-field">
1095
+ <label class="hw-label" for="hw-description">Description *</label>
1096
+ <textarea class="hw-textarea" id="hw-description" placeholder="Describe your request in detail..." required></textarea>
1097
+ </div>
1098
+
1099
+ <div class="hw-field">
1100
+ <label class="hw-label">Screenshot (optional)</label>
1101
+ <input class="hw-file-input" id="hw-file" type="file" accept="image/*" />
1102
+ <div class="hw-upload-zone" id="hw-upload-zone" tabindex="0">
1103
+ <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5">
1104
+ <rect x="3" y="3" width="18" height="18" rx="2"/>
1105
+ <circle cx="8.5" cy="8.5" r="1.5"/>
1106
+ <polyline points="21 15 16 10 5 21"/>
1107
+ </svg>
1108
+ <p class="hw-upload-hint">Drag & drop image here, or paste</p>
1109
+ <p class="hw-upload-sub">PNG, JPG, GIF up to 10MB</p>
1110
+ <div class="hw-upload-actions">
1111
+ <button class="hw-btn-paste" id="hw-paste-btn" type="button">
1112
+ <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5">
1113
+ <rect x="8" y="2" width="8" height="4" rx="1"/>
1114
+ <path d="M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2"/>
1115
+ </svg>
1116
+ Paste (Ctrl+V)
1117
+ </button>
1118
+ <button class="hw-btn-browse" id="hw-browse-btn" type="button">
1119
+ <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5">
1120
+ <path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/>
1121
+ <polyline points="17 8 12 3 7 8"/>
1122
+ <line x1="12" y1="3" x2="12" y2="15"/>
1123
+ </svg>
1124
+ Browse
1125
+ </button>
1126
+ </div>
1127
+ </div>
1128
+ <div id="hw-preview" style="display:none"></div>
1129
+ </div>
1130
+
1131
+ <div style="margin-top:auto; padding-top:16px;">
1132
+ <button class="hw-btn-submit" id="hw-submit-btn">Submit Request</button>
1133
+ </div>
1134
+ </div>
1135
+
1136
+ <!-- 3. TICKET STATUS PANEL -->
1137
+ <div class="hw-tab-panel" id="hw-panel-status">
1138
+ <div class="hw-list-header">
1139
+ <h3 class="hw-list-title">Your Submitted Tickets</h3>
1140
+ <button class="hw-btn-refresh" id="hw-refresh-btn" type="button">
1141
+ <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
1142
+ <path d="M21.5 2v6h-6M21.34 15.57a10 10 0 1 1-.57-8.38l5.67-5.67"/>
1143
+ </svg>
1144
+ Refresh Status
1145
+ </button>
1146
+ </div>
1147
+
1148
+ <div id="hw-tickets-loading" class="hw-loader" style="display:none"></div>
1149
+ <div class="hw-ticket-list" id="hw-ticket-list"></div>
1150
+ </div>
1151
+ </div>
1152
+ </div>
1153
+ `,v=class extends HTMLElement{constructor(){super();this._screenshotFile=null;this._guideData=null;this._customFields=[];this._shadow=this.attachShadow({mode:"open"})}static get observedAttributes(){return["user-name","user-email","button-style","theme","user-role","custom-fields"]}get userRole(){return this.getAttribute("user-role")||""}set userRole(e){this.setAttribute("user-role",e)}get customFields(){return this._customFields}set customFields(e){typeof e=="string"?this._parseCustomFieldsAttribute(e):Array.isArray(e)?this._customFields=e:this._customFields=[],this._renderCustomFields()}_parseCustomFieldsAttribute(e){if(e)try{let s=JSON.parse(e);Array.isArray(s)&&(this._customFields=s)}catch(s){console.warn("Failed to parse custom-fields attribute JSON:",s)}}_getCustomFieldsList(){if(this._customFields&&this._customFields.length>0)return this._customFields;let e=this.getAttribute("custom-fields");if(e)try{let s=JSON.parse(e);if(Array.isArray(s))return s}catch{}return[]}_renderCustomFields(){let e=this._shadow?.getElementById("hw-custom-fields-container");if(!e)return;let s={};e.querySelectorAll(".hw-custom-input").forEach(c=>{let o=c.dataset.customId;o&&c.value&&(s[o]=c.value)});let a=this._getCustomFieldsList();if(!a||a.length===0){e.innerHTML="";return}let n="";a.forEach(c=>{let o=`hw-custom-${c.id}`,r=c.required?" *":"",p=c.required?"required":"",i=c.type||"text",h=c.placeholder||"",l=s[c.id]!==void 0?s[c.id]:c.defaultValue||"";i==="textarea"?n+=`
1154
+ <div class="hw-field">
1155
+ <label class="hw-label" for="${o}">${c.label}${r}</label>
1156
+ <textarea
1157
+ class="hw-textarea hw-custom-input"
1158
+ data-custom-id="${c.id}"
1159
+ id="${o}"
1160
+ placeholder="${h}"
1161
+ ${p}
1162
+ >${l}</textarea>
1163
+ </div>
1164
+ `:n+=`
1165
+ <div class="hw-field">
1166
+ <label class="hw-label" for="${o}">${c.label}${r}</label>
1167
+ <input
1168
+ class="hw-input hw-custom-input"
1169
+ data-custom-id="${c.id}"
1170
+ id="${o}"
1171
+ type="${i}"
1172
+ placeholder="${h}"
1173
+ value="${l}"
1174
+ ${p}
1175
+ />
1176
+ </div>
1177
+ `}),e.innerHTML=n}attributeChangedCallback(e,s,t){if(this._shadow){if(e==="user-name"){let a=this._shadow.getElementById("hw-name");a&&(a.value=t||"")}if(e==="user-email"){let a=this._shadow.getElementById("hw-email");a&&(a.value=t||"")}e==="user-role"&&this._guideData&&this._renderHelpGuide(this._guideData),e==="custom-fields"&&(this._parseCustomFieldsAttribute(t),this._renderCustomFields())}}connectedCallback(){if(this._shadow.innerHTML=`<style>${T}</style>${D}`,!document.getElementById("hw-font-link")){let t=document.createElement("link");t.id="hw-font-link",t.rel="stylesheet",t.href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap",document.head.appendChild(t)}this._applyAttributes(),this._bindEvents(),this._parseCustomFieldsAttribute(this.getAttribute("custom-fields")),this._renderCustomFields();let e=this.getAttribute("user-name");if(e){let t=this._shadow.getElementById("hw-name");t&&(t.value=e)}let s=this.getAttribute("user-email");if(s){let t=this._shadow.getElementById("hw-email");t&&(t.value=s)}this._loadLocalHelpGuide()}_applyAttributes(){let e=this._shadow.getElementById("hw-trigger-btn");if(!e)return;let s=this.getAttribute("button-style");s==="minimal"?e.classList.add("minimal"):s==="hidden"&&e.classList.add("hidden")}_bindEvents(){let e=this._shadow;e.getElementById("hw-trigger-btn")?.addEventListener("click",()=>this.openSidebar()),e.getElementById("hw-close-btn")?.addEventListener("click",()=>this.closeSidebar()),e.getElementById("hw-backdrop")?.addEventListener("click",()=>this.closeSidebar());let s=e.querySelectorAll(".hw-tab-btn");s.forEach(r=>{r.addEventListener("click",()=>{s.forEach(h=>h.classList.remove("active")),e.querySelectorAll(".hw-tab-panel").forEach(h=>h.classList.remove("active")),r.classList.add("active");let p=r,i=`hw-panel-${p.dataset.tab}`;e.getElementById(i)?.classList.add("active"),p.dataset.tab==="status"&&this._loadTicketsStatus()})});let t=e.getElementById("hw-guide-container");t&&t.addEventListener("click",r=>{let i=r.target.closest(".hw-faq-header");if(!i)return;let h=i.parentElement;if(!h)return;let l=h.querySelector(".hw-faq-content");if(!l)return;let u=h.classList.contains("open");t.querySelectorAll(".hw-faq-item").forEach(d=>{d.classList.remove("open");let g=d.querySelector(".hw-faq-content");g&&(g.style.maxHeight="0px")}),u||(h.classList.add("open"),l.style.maxHeight=l.scrollHeight+"px")});let a=e.getElementById("hw-file");e.getElementById("hw-browse-btn")?.addEventListener("click",r=>{r.stopPropagation(),a?.click()}),a?.addEventListener("change",()=>{a.files&&a.files[0]&&this._handleFile(a.files[0])}),e.getElementById("hw-paste-btn")?.addEventListener("click",r=>{r.stopPropagation(),this._pasteFromClipboard()}),e.getElementById("hw-sidebar")?.addEventListener("paste",r=>{let p=r.clipboardData?.items||[];for(let i of p)if(i.type.startsWith("image/")){let h=i.getAsFile();if(h){this._handleFile(h);break}}});let n=e.getElementById("hw-upload-zone");n?.addEventListener("dragover",r=>{r.preventDefault(),n.classList.add("dragover")}),n?.addEventListener("dragleave",()=>n.classList.remove("dragover")),n?.addEventListener("drop",r=>{r.preventDefault(),n.classList.remove("dragover");let p=r.dataTransfer.files[0];p&&p.type.startsWith("image/")&&this._handleFile(p)}),e.getElementById("hw-submit-btn")?.addEventListener("click",()=>this._submitTicket()),e.getElementById("hw-refresh-btn")?.addEventListener("click",()=>this._loadTicketsStatus());let c=e.getElementById("hw-ticket-list");c&&c.addEventListener("click",r=>{let i=r.target.closest(".hw-comments-toggle-btn");if(!i)return;let h=i.dataset.ticket,l=c.querySelector(`#comments-list-${h}`);if(!l)return;i.classList.contains("open")?(i.classList.remove("open"),l.style.maxHeight="0px"):(i.classList.add("open"),l.style.maxHeight=l.scrollHeight+"px")}),t&&t.addEventListener("click",r=>{let p=r.target;if(p.classList.contains("hw-step-img")){let i=p.src;this._openLightbox(i)}});let o=e.getElementById("hw-preview");o&&o.addEventListener("click",r=>{let p=r.target;if(p.classList.contains("hw-preview-img")){let i=p.src;this._openLightbox(i)}}),e.getElementById("hw-lightbox-close")?.addEventListener("click",()=>this._closeLightbox()),e.getElementById("hw-lightbox")?.addEventListener("click",r=>{r.target===e.getElementById("hw-lightbox")&&this._closeLightbox()})}openSidebar(){this._shadow.getElementById("hw-sidebar")?.classList.add("open"),this._shadow.getElementById("hw-backdrop")?.classList.add("open")}closeSidebar(){this._shadow.getElementById("hw-sidebar")?.classList.remove("open"),this._shadow.getElementById("hw-backdrop")?.classList.remove("open"),this._hideStatus()}_openLightbox(e){let s=this._shadow.getElementById("hw-lightbox"),t=this._shadow.getElementById("hw-lightbox-img");s&&t&&(t.src=e,s.classList.add("open"))}_closeLightbox(){let e=this._shadow.getElementById("hw-lightbox");e&&e.classList.remove("open")}async _pasteFromClipboard(){try{let e=await navigator.clipboard.read();for(let s of e){let t=s.types.find(a=>a.startsWith("image/"));if(t){let a=await s.getType(t);this._handleFile(new File([a],"screenshot.png",{type:t}));return}}this._showStatus("No image found in clipboard. Copy a screenshot first, then paste.","error")}catch{this._showStatus("Press Ctrl+V inside this sidebar to paste a screenshot.","error")}}_handleFile(e){if(!e.type.startsWith("image/")){this._showStatus("Please upload an image file (PNG, JPG, GIF).","error");return}if(e.size>10*1024*1024){this._showStatus("Screenshot must be smaller than 10MB.","error");return}this._screenshotFile=e,this._hideStatus();let s=URL.createObjectURL(e),t=this._shadow.getElementById("hw-upload-zone"),a=this._shadow.getElementById("hw-preview");t&&(t.style.display="none"),a&&(a.style.display="block",a.innerHTML=`
1178
+ <div class="hw-preview-wrap">
1179
+ <img class="hw-preview-img" src="${s}" alt="Screenshot preview" />
1180
+ <button class="hw-preview-remove" id="hw-remove-ss-btn" type="button">\u2715 Remove</button>
1181
+ </div>
1182
+ <p class="hw-preview-name">${e.name}</p>
1183
+ `,a.querySelector("#hw-remove-ss-btn")?.addEventListener("click",()=>this._removeFile()))}_removeFile(){this._screenshotFile=null;let e=this._shadow.getElementById("hw-file");e&&(e.value="");let s=this._shadow.getElementById("hw-upload-zone");s&&(s.style.display="flex");let t=this._shadow.getElementById("hw-preview");t&&(t.style.display="none",t.innerHTML="")}_resetForm(){let e=this._shadow.getElementById("hw-name"),s=this._shadow.getElementById("hw-email"),t=this._shadow.getElementById("hw-subject"),a=this._shadow.getElementById("hw-description"),n=this._shadow.getElementById("hw-category");e&&(e.value=""),s&&(s.value=""),t&&(t.value=""),a&&(a.value=""),n&&(n.value="bug"),this._shadow.querySelectorAll(".hw-custom-input").forEach(r=>{r.value=""}),this._removeFile(),this._hideStatus();let o=this._shadow.getElementById("hw-submit-btn");o&&(o.disabled=!1,o.textContent="Submit Request")}async _submitTicket(){let e=this._shadow.getElementById("hw-name")?.value.trim()||"",s=this._shadow.getElementById("hw-email")?.value.trim()||"",t=this._shadow.getElementById("hw-subject")?.value.trim()||"",a=this._shadow.getElementById("hw-description")?.value.trim()||"",n=this._shadow.getElementById("hw-category")?.value||"bug";if(!e||!s||!t||!a){this._showStatus("Please fill in all required fields.","error");return}let c=this._getCustomFieldsList(),o={};for(let u of c){let d=this._shadow.querySelector(`[data-custom-id="${u.id}"]`),g=d?d.value.trim():"";if(u.required&&!g){this._showStatus(`Please fill in required field: ${u.label}`,"error");return}g&&(o[u.id]=g)}let r=(this.getAttribute("base-url")||"").replace(/\/$/,""),p=this.getAttribute("embed-key")||"";if(!r||!p){this._showStatus("Widget is misconfigured. Missing base-url or embed-key.","error");return}let i=this._shadow.getElementById("hw-submit-btn");i&&(i.disabled=!0,i.textContent="Submitting Request...");let h=a;if(Object.keys(o).length>0){let u=c.filter(d=>o[d.id]).map(d=>`${d.label}: ${o[d.id]}`);u.length>0&&(h+=`
1184
+
1185
+ --- Additional Information ---
1186
+ `+u.join(`
1187
+ `))}let l=new FormData;if(l.append("submitter_name",e),l.append("submitter_email",s),l.append("subject",t),l.append("description",h),l.append("category",n),l.append("embed_key",p),l.append("source_url",window.location.href),l.append("browser_metadata",JSON.stringify({userAgent:navigator.userAgent,resolution:`${screen.width}x${screen.height}`,viewport:`${window.innerWidth}x${window.innerHeight}`,language:navigator.language})),Object.keys(o).length>0){l.append("custom_fields",JSON.stringify(o));for(let[u,d]of Object.entries(o))l.append(u,d)}this._screenshotFile&&l.append("screenshot",this._screenshotFile,this._screenshotFile.name);try{let u=await fetch(`${r}/api/tickets/widget-submit/`,{method:"POST",body:l});if(u.ok)this._showStatus("Support request submitted successfully!","success"),setTimeout(()=>{this._resetForm();let d=this._shadow.querySelector('.hw-tab-btn[data-tab="status"]');d&&d.click()},1800);else{let d=await u.json().catch(()=>({}));this._showStatus(d.detail||d.error||"Failed to submit request. Please try again.","error"),i&&(i.disabled=!1,i.textContent="Submit Request")}}catch(u){console.error("Error submitting support request:",u),this._showStatus("Network error. Please check your internet connection.","error"),i&&(i.disabled=!1,i.textContent="Submit Request")}}async _loadTicketsStatus(){let e=(this.getAttribute("base-url")||"").replace(/\/$/,""),s=this.getAttribute("embed-key")||"",t=this._shadow.getElementById("hw-ticket-list"),a=this._shadow.getElementById("hw-tickets-loading");if(t){if(!e||!s){t.innerHTML='<div class="hw-empty-state">Widget configuration error (missing URL or key)</div>';return}a&&(a.style.display="block"),t.style.opacity="0.5";try{let n=await fetch(`${e}/api/tickets/widget-status/`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({embed_key:s})});if(n.ok){let c=await n.json(),r=(c.data||c).tickets||[];if(r.length===0){t.innerHTML=`
1188
+ <div class="hw-empty-state">
1189
+ <svg width="32" height="32" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5">
1190
+ <path d="M12 22c5.523 0 10-4.477 10-10S17.523 2 12 2 2 6.477 2 12s4.477 10 10 10z"/>
1191
+ <path d="M12 8v4"/>
1192
+ <path d="M12 16h.01"/>
1193
+ </svg>
1194
+ <p style="margin: 0; font-weight:600;">No support tickets yet</p>
1195
+ <p style="margin: 0; font-size:11px;">Any bug reports or tickets you or your teammates submit will appear here to let everyone track their real-time progress.</p>
1196
+ </div>
1197
+ `;return}let p="";r.forEach(i=>{let h=i.status||"open",l=i.ticket_number||"TKT-PENDING",u=new Date(i.created_at).toLocaleDateString(void 0,{month:"short",day:"numeric",year:"numeric"}),d="hw-badge-open";h==="in_progress"?d="hw-badge-progress":h==="pending"?d="hw-badge-pending":h==="resolved"?d="hw-badge-resolved":h==="closed"&&(d="hw-badge-closed");let g="",m=i.comments||[];m.length>0&&(g+=`
1198
+ <div class="hw-ticket-comments-section">
1199
+ <button class="hw-comments-toggle-btn" data-ticket="${l}">
1200
+ <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" style="margin-right: 4px;">
1201
+ <path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"/>
1202
+ </svg>
1203
+ <span>Replies (${m.length})</span>
1204
+ <span class="hw-comments-toggle-chevron">\u25BC</span>
1205
+ </button>
1206
+ <div class="hw-comments-list-wrapper" id="comments-list-${l}" style="max-height: 0px;">
1207
+ <div class="hw-comments-list">
1208
+ `,m.forEach(f=>{let y=new Date(f.created_at).toLocaleDateString(void 0,{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}),_=f.is_staff||!1,z=_?"hw-comment-item staff":"hw-comment-item",F=_?'<span class="hw-comment-staff-badge">Staff</span>':"";g+=`
1209
+ <div class="${z}">
1210
+ <div class="hw-comment-meta">
1211
+ <span class="hw-comment-author">${f.author_name||"Anonymous"} ${F}</span>
1212
+ <span class="hw-comment-date">${y}</span>
1213
+ </div>
1214
+ <p class="hw-comment-text">${f.content}</p>
1215
+ </div>
1216
+ `}),g+=`
1217
+ </div>
1218
+ </div>
1219
+ </div>
1220
+ `),p+=`
1221
+ <div class="hw-ticket-card">
1222
+ <div class="hw-ticket-card-header">
1223
+ <span class="hw-ticket-card-number">${l}</span>
1224
+ <span class="hw-ticket-card-badge ${d}">${h.replace("_"," ")}</span>
1225
+ </div>
1226
+ <h4 class="hw-ticket-card-subject">${i.subject||"No Subject"}</h4>
1227
+ <div class="hw-ticket-card-footer" style="flex-direction: column; align-items: flex-start; gap: 4px;">
1228
+ <div style="display: flex; justify-content: space-between; width: 100%;">
1229
+ <span>Category: ${i.category.toUpperCase()}</span>
1230
+ <span>${u}</span>
1231
+ </div>
1232
+ <div style="font-size: 11px; color: #888; display: flex; align-items: center; gap: 4px; margin-top: 4px; border-top: 1px solid rgba(255,255,255,0.05); padding-top: 4px; width: 100%;">
1233
+ <span>\u{1F464} By: <strong>${i.submitter_name||"Anonymous"}</strong> (${i.submitter_email||"no-email"})</span>
1234
+ </div>
1235
+ </div>
1236
+ ${g}
1237
+ </div>
1238
+ `}),t.innerHTML=p}else throw new Error("Server status fetch failed")}catch(n){console.error("Failed to pull live ticket status:",n),t.innerHTML=`
1239
+ <div class="hw-empty-state">
1240
+ <p style="margin: 0; font-weight:600; color: #f43f5e;">Failed to load tickets</p>
1241
+ <p style="margin: 0; font-size:11px;">A connection error occurred. Click "Refresh Status" to retry.</p>
1242
+ </div>
1243
+ `}finally{a&&(a.style.display="none"),t.style.opacity="1"}}}_showStatus(e,s){let t=this._shadow.getElementById("hw-form-status");t&&(t.textContent=e,t.className=`hw-status-msg ${s}`,t.style.display="block")}_hideStatus(){let e=this._shadow.getElementById("hw-form-status");e&&(e.style.display="none")}async _loadLocalHelpGuide(){let e=this._shadow.getElementById("hw-guide-container"),s=this._shadow.getElementById("hw-guide-loading"),t=this.getAttribute("guide-url")||"/help-guide.json";try{let a=await fetch(t);if(a.ok){let n=await a.json();this._guideData=n,this._renderHelpGuide(n)}else throw new Error("Guide file not found")}catch{console.warn(`Dynamic help guide not found at ${t}. Falling back to default FAQs.`);let n=this._getDefaultHelpGuide();this._guideData=n,this._renderHelpGuide(n)}finally{s&&(s.style.display="none")}}_getDefaultHelpGuide(){return{processes:[{title:"Help Guide & FAQs",steps:[{step_number:1,title:"What is ThriveX AI Dashboard?",description:"ThriveX AI is an intelligent project workspace and agile issue tracking platform. You can manage tasks in Kanban boards, set priorities, assign developers, and aggregate support requests in one beautiful console."},{step_number:2,title:"How do I submit feedback / bugs?",description:"Click on the <strong>Support & Feedback</strong> tab in this sidebar, select your category, enter your subject and description, paste or attach an optional screenshot, and click submit."},{step_number:3,title:"How do I track my ticket status?",description:"Any ticket you submit from this browser will be listed under the <strong>Ticket Status</strong> tab. We use secure, unguessable ticket UUIDs saved locally to fetch live real-time statuses directly from the project server."},{step_number:4,title:"How do I invite members to my project?",description:"Go to the Workspace page inside the dashboard, select your project, click on <strong>Manage Members</strong> on the top-right, search for your team members by their username or email, and add them."}]}]}}_renderHelpGuide(e){let s=this._shadow.getElementById("hw-guide-container");if(!s)return;let t="",a=e.processes;if(!a&&e.steps&&(a=[{title:e.title||"Help Guide",steps:e.steps}]),!a||a.length===0){s.innerHTML='<div class="hw-empty-state">No guides available</div>';return}let n=(this.getAttribute("user-role")||"").trim().toLowerCase(),c=a.map(r=>{if(!(!(Array.isArray(r.roles)&&r.roles.length>0)||n&&r.roles.some(d=>typeof d=="string"&&d.trim().toLowerCase()===n)))return null;let h=r.steps||[],l=h.length,u=h.filter(d=>!(Array.isArray(d.roles)&&d.roles.length>0)||n&&d.roles.some(m=>typeof m=="string"&&m.trim().toLowerCase()===n));return l>0&&u.length===0?null:{...r,steps:u}}).filter(r=>r!==null);if(c.length===0){s.innerHTML='<div class="hw-empty-state">No guides available for your role</div>';return}let o=0;c.forEach(r=>{r.title&&(t+=`<h3 class="hw-process-title">${r.title}</h3>`),(r.steps||[]).forEach((i,h)=>{let l=i.step_number||i.number||h+1,u=o===0?"open":"",d=o===0?'style="max-height: 1000px;"':'style="max-height: 0px;"';o++;let g="";Array.isArray(i.images)&&i.images.length>0&&(g='<div class="hw-step-images-list">',i.images.forEach(y=>{g+=`
1244
+ <div class="hw-step-image-wrap">
1245
+ <img class="hw-step-img" src="${y}" alt="Step ${l} screenshot" />
1246
+ </div>
1247
+ `}),g+="</div>");let m="";i.note&&(m=`
1248
+ <div class="hw-step-note flex gap-2">
1249
+ <svg class="hw-note-icon text-blue-500" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" style="color: #3b82f6;"><circle cx="12" cy="12" r="10"/><line x1="12" y1="16" x2="12" y2="12"/><line x1="12" y1="8" x2="12.01" y2="8"/></svg>
1250
+ <p class="hw-note-desc">${i.note}</p>
1251
+ </div>
1252
+ `);let f="";i.importantNote&&(f=`
1253
+ <div class="hw-step-important flex gap-2">
1254
+ <svg class="hw-important-icon text-amber-500" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" style="color: #f59e0b;"><path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"/><line x1="12" y1="9" x2="12" y2="13"/><line x1="12" y1="17" x2="12.01" y2="17"/></svg>
1255
+ <div>
1256
+ <p class="hw-important-title">Important Note</p>
1257
+ <p class="hw-important-desc">${i.importantNote}</p>
1258
+ </div>
1259
+ </div>
1260
+ `),t+=`
1261
+ <div class="hw-faq-item ${u}">
1262
+ <div class="hw-faq-header">
1263
+ <div class="hw-step-header-left">
1264
+ <span class="hw-step-number">${l}</span>
1265
+ <span class="hw-step-title">${i.title}</span>
1266
+ </div>
1267
+ <span class="hw-faq-icon">\u25BC</span>
1268
+ </div>
1269
+ <div class="hw-faq-content" ${d}>
1270
+ <div class="hw-faq-inner">
1271
+ <p class="hw-step-desc">${i.description}</p>
1272
+ ${g}
1273
+ ${m}
1274
+ ${f}
1275
+ </div>
1276
+ </div>
1277
+ </div>
1278
+ `})}),s.innerHTML=t}};typeof window<"u"&&!customElements.get("help-sidebar-widget")&&customElements.define("help-sidebar-widget",v)});var R={};S(R,{HelpSidebarWidget:()=>N,HelpSidebarWidgetElement:()=>v});module.exports=q(R);var x=require("react"),B=require("react/jsx-runtime");function N({baseUrl:b,embedKey:w,theme:e="auto",buttonStyle:s="navbar",userName:t="",userEmail:a="",guideUrl:n="",userRole:c="",customFields:o}){let[r,p]=(0,x.useState)(!1),i=(0,x.useRef)(null);return(0,x.useEffect)(()=>{Promise.resolve().then(()=>(E(),H)).then(()=>{p(!0)})},[]),(0,x.useEffect)(()=>{i.current&&o&&(i.current.customFields=o)},[r,o]),r?(0,B.jsx)("help-sidebar-widget",{ref:i,"base-url":b,"embed-key":w,theme:e,"button-style":s,"user-name":t,"user-email":a,"guide-url":n,"user-role":c,"custom-fields":o&&o.length>0?JSON.stringify(o):void 0}):null}E();0&&(module.exports={HelpSidebarWidget,HelpSidebarWidgetElement});
1279
+ //# sourceMappingURL=index.js.map