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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/help-sidebar-widget.css","../src/help-sidebar-widget.ts","../src/index.ts","../src/react-wrapper.tsx"],"sourcesContent":[":host {\r\n --hw-font: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif;\r\n font-family: var(--hw-font);\r\n display: inline-block;\r\n\r\n /* Theme Tokens - Dark (Default) */\r\n --hw-bg-sidebar: #0e1320;\r\n --hw-bg-glass: rgba(14, 19, 32, 0.85);\r\n --hw-border-glass: rgba(255, 255, 255, 0.08);\r\n --hw-text-primary: #f8fafc;\r\n --hw-text-secondary: #94a3b8;\r\n --hw-text-muted: #64748b;\r\n --hw-accent: #5d4fff;\r\n --hw-accent-glow: rgba(93, 79, 255, 0.45);\r\n --hw-accent-hover: #4c3fe0;\r\n --hw-surface: #1e293b;\r\n --hw-surface-hover: #334155;\r\n --hw-input-bg: rgba(255, 255, 255, 0.04);\r\n --hw-input-border: rgba(255, 255, 255, 0.1);\r\n --hw-input-focus: #5d4fff;\r\n --hw-bg-tabs: rgba(0, 0, 0, 0.15);\r\n --hw-bg-faq-content: rgba(0, 0, 0, 0.1);\r\n\r\n /* Status Colors */\r\n --hw-color-open: #38bdf8;\r\n --hw-color-progress: #fbbf24;\r\n --hw-color-pending: #c084fc;\r\n --hw-color-resolved: #34d399;\r\n --hw-color-closed: #94a3b8;\r\n\r\n --hw-bg-open: rgba(56, 189, 248, 0.1);\r\n --hw-bg-progress: rgba(251, 191, 36, 0.1);\r\n --hw-bg-pending: rgba(192, 132, 252, 0.1);\r\n --hw-bg-resolved: rgba(52, 211, 153, 0.1);\r\n --hw-bg-closed: rgba(148, 163, 184, 0.1);\r\n}\r\n\r\n:host([theme=\"light\"]) {\r\n --hw-bg-sidebar: #ffffff;\r\n --hw-bg-glass: rgba(255, 255, 255, 0.9);\r\n --hw-border-glass: rgba(0, 0, 0, 0.08);\r\n --hw-text-primary: #0f172a;\r\n --hw-text-secondary: #475569;\r\n --hw-text-muted: #94a3b8;\r\n --hw-accent: #5d4fff;\r\n --hw-accent-glow: rgba(93, 79, 255, 0.2);\r\n --hw-accent-hover: #4c3fe0;\r\n --hw-surface: #f1f5f9;\r\n --hw-surface-hover: #e2e8f0;\r\n --hw-input-bg: #ffffff;\r\n --hw-input-border: #cbd5e1;\r\n --hw-input-focus: #5d4fff;\r\n --hw-bg-tabs: #f1f5f9;\r\n --hw-bg-faq-content: #f8fafc;\r\n}\r\n\r\n@media (prefers-color-scheme: light) {\r\n :host(:not([theme=\"dark\"])) {\r\n --hw-bg-sidebar: #ffffff;\r\n --hw-bg-glass: rgba(255, 255, 255, 0.9);\r\n --hw-border-glass: rgba(0, 0, 0, 0.08);\r\n --hw-text-primary: #0f172a;\r\n --hw-text-secondary: #475569;\r\n --hw-text-muted: #94a3b8;\r\n --hw-accent: #5d4fff;\r\n --hw-accent-glow: rgba(93, 79, 255, 0.2);\r\n --hw-accent-hover: #4c3fe0;\r\n --hw-surface: #f1f5f9;\r\n --hw-surface-hover: #e2e8f0;\r\n --hw-input-bg: #ffffff;\r\n --hw-input-border: #cbd5e1;\r\n --hw-input-focus: #5d4fff;\r\n --hw-bg-tabs: #f1f5f9;\r\n --hw-bg-faq-content: #f8fafc;\r\n }\r\n}\r\n\r\n/* Trigger Button Styling */\r\n.hw-trigger-btn {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: 36px;\r\n height: 36px;\r\n border-radius: 10px;\r\n border: 1px solid var(--hw-border-glass);\r\n background: var(--hw-input-bg);\r\n color: var(--hw-text-secondary);\r\n font-size: 16px;\r\n cursor: pointer;\r\n transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\r\n box-sizing: border-box;\r\n outline: none;\r\n}\r\n\r\n.hw-trigger-btn:hover {\r\n background: var(--hw-surface);\r\n color: var(--hw-accent);\r\n border-color: var(--hw-accent);\r\n box-shadow: 0 0 10px var(--hw-accent-glow);\r\n transform: scale(1.03);\r\n}\r\n\r\n.hw-trigger-btn.minimal {\r\n border: none;\r\n background: transparent;\r\n width: auto;\r\n height: auto;\r\n padding: 6px;\r\n}\r\n\r\n.hw-trigger-btn.hidden {\r\n display: none;\r\n}\r\n\r\n/* Backdrop Overlay */\r\n.hw-backdrop {\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n width: 100vw;\r\n height: 100vh;\r\n background: rgba(4, 7, 13, 0.4);\r\n backdrop-filter: blur(8px);\r\n -webkit-backdrop-filter: blur(8px);\r\n z-index: 99998;\r\n opacity: 0;\r\n pointer-events: none;\r\n transition: opacity 0.3s ease;\r\n}\r\n\r\n.hw-backdrop.open {\r\n opacity: 1;\r\n pointer-events: auto;\r\n}\r\n\r\n/* Sidebar Panel Drawer */\r\n.hw-sidebar {\r\n position: fixed;\r\n top: 0;\r\n right: -420px;\r\n width: 100%;\r\n max-width: 400px;\r\n height: 100vh;\r\n background: var(--hw-bg-sidebar);\r\n border-left: 1px solid var(--hw-border-glass);\r\n z-index: 99999;\r\n box-shadow: -10px 0 30px rgba(0, 0, 0, 0.25);\r\n transition: right 0.35s cubic-bezier(0.16, 1, 0.3, 1);\r\n display: flex;\r\n flex-direction: column;\r\n box-sizing: border-box;\r\n}\r\n\r\n.hw-sidebar.open {\r\n right: 0;\r\n}\r\n\r\n/* Sidebar Header */\r\n.hw-header {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n padding: 20px;\r\n border-bottom: 1px solid var(--hw-border-glass);\r\n}\r\n\r\n.hw-header-title {\r\n font-size: 18px;\r\n font-weight: 700;\r\n color: var(--hw-text-primary);\r\n margin: 0;\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n}\r\n\r\n.hw-close-btn {\r\n background: transparent;\r\n border: none;\r\n color: var(--hw-text-secondary);\r\n font-size: 18px;\r\n cursor: pointer;\r\n width: 32px;\r\n height: 32px;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n border-radius: 8px;\r\n transition: all 0.15s;\r\n}\r\n\r\n.hw-close-btn:hover {\r\n background: var(--hw-surface);\r\n color: #ef4444;\r\n}\r\n\r\n/* Tabs Navigation */\r\n.hw-tabs {\r\n display: flex;\r\n padding: 12px 16px;\r\n gap: 4px;\r\n background: var(--hw-bg-tabs);\r\n border-bottom: 1px solid var(--hw-border-glass);\r\n}\r\n\r\n.hw-tab-btn {\r\n flex: 1;\r\n padding: 8px 4px;\r\n background: transparent;\r\n border: none;\r\n color: var(--hw-text-secondary);\r\n font-size: 12px;\r\n font-weight: 600;\r\n cursor: pointer;\r\n border-radius: 8px;\r\n transition: all 0.2s;\r\n text-align: center;\r\n white-space: nowrap;\r\n}\r\n\r\n.hw-tab-btn:hover {\r\n background: var(--hw-surface);\r\n color: var(--hw-text-primary);\r\n}\r\n\r\n.hw-tab-btn.active {\r\n background: var(--hw-accent);\r\n color: #ffffff;\r\n box-shadow: 0 2px 8px var(--hw-accent-glow);\r\n}\r\n\r\n/* Sidebar Body Viewport */\r\n.hw-body {\r\n flex: 1;\r\n overflow-y: auto;\r\n padding: 20px;\r\n box-sizing: border-box;\r\n display: flex;\r\n flex-direction: column;\r\n}\r\n\r\n.hw-tab-panel {\r\n display: none;\r\n flex-direction: column;\r\n height: 100%;\r\n}\r\n\r\n.hw-tab-panel.active {\r\n display: flex;\r\n animation: fadeIn 0.25s ease-out;\r\n}\r\n\r\n@keyframes fadeIn {\r\n from {\r\n opacity: 0;\r\n transform: translateY(6px);\r\n }\r\n\r\n to {\r\n opacity: 1;\r\n transform: translateY(0);\r\n }\r\n}\r\n\r\n/* Help Guide Accordion */\r\n.hw-faq-item {\r\n border: 1px solid var(--hw-border-glass);\r\n border-radius: 12px;\r\n margin-bottom: 12px;\r\n background: rgba(255, 255, 255, 0.01);\r\n overflow: hidden;\r\n transition: border-color 0.2s;\r\n}\r\n\r\n.hw-faq-item:hover {\r\n border-color: var(--hw-accent-glow);\r\n}\r\n\r\n.hw-faq-header {\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n padding: 12px 14px;\r\n cursor: pointer;\r\n user-select: none;\r\n}\r\n\r\n.hw-faq-icon {\r\n font-size: 11px;\r\n color: var(--hw-text-muted);\r\n transition: transform 0.2s;\r\n}\r\n\r\n.hw-faq-item.open .hw-faq-icon {\r\n transform: rotate(180deg);\r\n}\r\n\r\n.hw-faq-content {\r\n max-height: 0;\r\n overflow: hidden;\r\n transition: max-height 0.25s cubic-bezier(0.4, 0, 0.2, 1);\r\n background: var(--hw-bg-faq-content);\r\n}\r\n\r\n.hw-faq-inner {\r\n padding: 14px 16px;\r\n border-top: 1px solid var(--hw-border-glass);\r\n}\r\n\r\n/* Dynamic Step & Image Framework Styling */\r\n.hw-guide-main-title {\r\n font-size: 13px;\r\n font-weight: 500;\r\n color: var(--hw-text-secondary);\r\n margin: 0 0 16px 0;\r\n line-height: 1.5;\r\n}\r\n\r\n.hw-process-title {\r\n font-size: 12px;\r\n font-weight: 700;\r\n text-transform: uppercase;\r\n letter-spacing: 0.05em;\r\n color: var(--hw-text-primary);\r\n margin: 24px 0 12px 0;\r\n padding-bottom: 6px;\r\n border-bottom: 1px solid var(--hw-border-glass);\r\n line-height: 1.4;\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n}\r\n\r\n.hw-process-title:first-of-type {\r\n margin-top: 0;\r\n}\r\n\r\n.hw-process-title::before {\r\n content: \"\";\r\n display: inline-block;\r\n width: 4px;\r\n height: 12px;\r\n background: var(--hw-accent);\r\n border-radius: 2px;\r\n}\r\n\r\n.hw-step-header-left {\r\n display: flex;\r\n align-items: center;\r\n gap: 10px;\r\n}\r\n\r\n.hw-step-number {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: 24px;\r\n height: 24px;\r\n border-radius: 50%;\r\n background: var(--hw-accent);\r\n color: #ffffff;\r\n font-size: 11px;\r\n font-weight: 700;\r\n box-shadow: 0 0 8px var(--hw-accent-glow);\r\n flex-shrink: 0;\r\n}\r\n\r\n.hw-step-title {\r\n font-size: 13px;\r\n font-weight: 600;\r\n color: var(--hw-text-primary);\r\n line-height: 1.4;\r\n}\r\n\r\n.hw-step-desc {\r\n margin: 0 0 12px 0;\r\n font-size: 12px;\r\n line-height: 1.6;\r\n color: var(--hw-text-secondary);\r\n}\r\n\r\n.hw-step-images-list {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 12px;\r\n margin-top: 12px;\r\n}\r\n\r\n.hw-step-image-wrap {\r\n border: 2px solid #0ea5e9;\r\n border-radius: 12px;\r\n padding: 4px;\r\n background: rgba(14, 165, 233, 0.04);\r\n box-shadow: 0 0 12px rgba(14, 165, 233, 0.2);\r\n overflow: hidden;\r\n transition: transform 0.2s, box-shadow 0.2s;\r\n}\r\n\r\n.hw-step-image-wrap:hover {\r\n transform: scale(1.01);\r\n box-shadow: 0 0 16px rgba(14, 165, 233, 0.35);\r\n}\r\n\r\n.hw-step-img {\r\n width: 100%;\r\n height: auto;\r\n display: block;\r\n border-radius: 8px;\r\n object-fit: contain;\r\n cursor: zoom-in;\r\n}\r\n\r\n.hw-step-note {\r\n display: flex;\r\n gap: 8px;\r\n background: rgba(59, 130, 246, 0.08);\r\n border: 1px solid rgba(59, 130, 246, 0.2);\r\n border-radius: 8px;\r\n padding: 10px 12px;\r\n margin-top: 12px;\r\n align-items: flex-start;\r\n box-sizing: border-box;\r\n}\r\n\r\n.hw-note-icon {\r\n color: #3b82f6;\r\n flex-shrink: 0;\r\n margin-top: 2px;\r\n}\r\n\r\n.hw-note-desc {\r\n margin: 0;\r\n font-size: 11px;\r\n line-height: 1.5;\r\n color: var(--hw-text-secondary);\r\n text-align: left;\r\n}\r\n\r\n.hw-step-important {\r\n display: flex;\r\n gap: 8px;\r\n background: rgba(245, 158, 11, 0.08);\r\n border: 1px solid rgba(245, 158, 11, 0.2);\r\n border-radius: 8px;\r\n padding: 10px 12px;\r\n margin-top: 12px;\r\n align-items: flex-start;\r\n box-sizing: border-box;\r\n text-align: left;\r\n}\r\n\r\n.hw-important-icon {\r\n color: #f59e0b;\r\n flex-shrink: 0;\r\n margin-top: 2px;\r\n}\r\n\r\n.hw-important-title {\r\n margin: 0 0 2px 0;\r\n font-size: 11px;\r\n font-weight: 700;\r\n color: #f59e0b;\r\n}\r\n\r\n.hw-important-desc {\r\n margin: 0;\r\n font-size: 11px;\r\n line-height: 1.5;\r\n color: var(--hw-text-secondary);\r\n}\r\n\r\n/* Support & Feedback Form */\r\n.hw-field {\r\n margin-bottom: 16px;\r\n}\r\n\r\n.hw-label {\r\n display: block;\r\n font-size: 11px;\r\n font-weight: 600;\r\n color: var(--hw-text-secondary);\r\n text-transform: uppercase;\r\n letter-spacing: 0.05em;\r\n margin-bottom: 6px;\r\n}\r\n\r\n.hw-input,\r\n.hw-textarea,\r\n.hw-select {\r\n width: 100%;\r\n padding: 10px 12px;\r\n border-radius: 8px;\r\n font-size: 13px;\r\n background: var(--hw-input-bg);\r\n border: 1px solid var(--hw-input-border);\r\n color: var(--hw-text-primary);\r\n outline: none;\r\n box-sizing: border-box;\r\n transition: all 0.2s;\r\n}\r\n\r\n.hw-input:focus,\r\n.hw-textarea:focus,\r\n.hw-select:focus {\r\n border-color: var(--hw-input-focus);\r\n box-shadow: 0 0 0 2px var(--hw-accent-glow);\r\n}\r\n\r\n.hw-textarea {\r\n resize: vertical;\r\n min-height: 90px;\r\n}\r\n\r\n.hw-select option {\r\n background: var(--hw-bg-sidebar);\r\n color: var(--hw-text-primary);\r\n}\r\n\r\n/* Upload Zone */\r\n.hw-upload-zone {\r\n width: 100%;\r\n border-radius: 8px;\r\n box-sizing: border-box;\r\n border: 1px dashed var(--hw-input-border);\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n gap: 6px;\r\n padding: 16px 12px;\r\n transition: all 0.2s;\r\n cursor: pointer;\r\n}\r\n\r\n.hw-upload-zone.dragover {\r\n border-color: var(--hw-accent);\r\n background: var(--hw-accent-glow);\r\n}\r\n\r\n.hw-upload-zone svg {\r\n color: var(--hw-text-muted);\r\n}\r\n\r\n.hw-upload-hint {\r\n font-size: 12px;\r\n color: var(--hw-text-secondary);\r\n margin: 0;\r\n text-align: center;\r\n}\r\n\r\n.hw-upload-sub {\r\n font-size: 10px;\r\n color: var(--hw-text-muted);\r\n margin: 0;\r\n}\r\n\r\n.hw-upload-actions {\r\n display: flex;\r\n gap: 6px;\r\n margin-top: 4px;\r\n}\r\n\r\n.hw-btn-paste,\r\n.hw-btn-browse {\r\n display: flex;\r\n align-items: center;\r\n gap: 5px;\r\n padding: 4px 10px;\r\n border-radius: 6px;\r\n font-size: 11px;\r\n font-weight: 600;\r\n cursor: pointer;\r\n border: 1px solid var(--hw-input-border);\r\n background: var(--hw-surface);\r\n color: var(--hw-text-secondary);\r\n transition: all 0.15s;\r\n}\r\n\r\n.hw-btn-paste:hover,\r\n.hw-btn-browse:hover {\r\n background: var(--hw-surface-hover);\r\n color: var(--hw-text-primary);\r\n}\r\n\r\n.hw-file-input {\r\n display: none;\r\n}\r\n\r\n.hw-preview-wrap {\r\n position: relative;\r\n}\r\n\r\n.hw-preview-img {\r\n width: 100%;\r\n max-height: 120px;\r\n object-fit: cover;\r\n border-radius: 8px;\r\n border: 1px solid var(--hw-input-border);\r\n display: block;\r\n cursor: zoom-in;\r\n}\r\n\r\n.hw-preview-remove {\r\n position: absolute;\r\n top: 6px;\r\n right: 6px;\r\n background: rgba(0, 0, 0, 0.7);\r\n border: none;\r\n border-radius: 6px;\r\n color: #ef4444;\r\n cursor: pointer;\r\n padding: 3px 6px;\r\n font-size: 10px;\r\n font-weight: 700;\r\n transition: background 0.15s;\r\n}\r\n\r\n.hw-preview-remove:hover {\r\n background: rgba(0, 0, 0, 0.9);\r\n}\r\n\r\n.hw-preview-name {\r\n font-size: 11px;\r\n color: var(--hw-text-muted);\r\n margin-top: 4px;\r\n text-align: center;\r\n text-overflow: ellipsis;\r\n overflow: hidden;\r\n white-space: nowrap;\r\n}\r\n\r\n/* Submit button */\r\n.hw-btn-submit {\r\n width: 100%;\r\n padding: 11px;\r\n border-radius: 8px;\r\n font-size: 13px;\r\n font-weight: 700;\r\n background: var(--hw-accent);\r\n border: none;\r\n color: #ffffff;\r\n cursor: pointer;\r\n transition: all 0.2s;\r\n box-shadow: 0 4px 12px var(--hw-accent-glow);\r\n}\r\n\r\n.hw-btn-submit:hover {\r\n background: var(--hw-accent-hover);\r\n box-shadow: 0 4px 18px var(--hw-accent-glow);\r\n transform: translateY(-1px);\r\n}\r\n\r\n.hw-btn-submit:disabled {\r\n opacity: 0.5;\r\n cursor: not-allowed;\r\n transform: none;\r\n box-shadow: none;\r\n}\r\n\r\n/* Status Notifications */\r\n.hw-status-msg {\r\n padding: 10px;\r\n border-radius: 8px;\r\n font-size: 12px;\r\n font-weight: 500;\r\n text-align: center;\r\n margin-bottom: 12px;\r\n animation: slideDown 0.2s ease;\r\n}\r\n\r\n@keyframes slideDown {\r\n from {\r\n transform: translateY(-8px);\r\n opacity: 0;\r\n }\r\n\r\n to {\r\n transform: translateY(0);\r\n opacity: 1;\r\n }\r\n}\r\n\r\n.hw-status-msg.success {\r\n background: rgba(52, 211, 153, 0.15);\r\n color: #34d399;\r\n border: 1px solid rgba(52, 211, 153, 0.25);\r\n}\r\n\r\n.hw-status-msg.error {\r\n background: rgba(239, 68, 68, 0.15);\r\n color: #f87171;\r\n border: 1px solid rgba(239, 68, 68, 0.25);\r\n}\r\n\r\n/* Ticket Status Listing */\r\n.hw-ticket-list {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 10px;\r\n flex: 1;\r\n}\r\n\r\n.hw-ticket-card {\r\n background: rgba(255, 255, 255, 0.02);\r\n border: 1px solid var(--hw-border-glass);\r\n border-radius: 12px;\r\n padding: 14px;\r\n transition: all 0.2s;\r\n}\r\n\r\n.hw-ticket-card:hover {\r\n border-color: var(--hw-border-glass);\r\n background: rgba(255, 255, 255, 0.04);\r\n transform: translateY(-1px);\r\n}\r\n\r\n.hw-ticket-card-header {\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: flex-start;\r\n gap: 8px;\r\n margin-bottom: 6px;\r\n}\r\n\r\n.hw-ticket-card-number {\r\n font-size: 11px;\r\n font-family: monospace;\r\n color: var(--hw-text-muted);\r\n font-weight: 600;\r\n}\r\n\r\n.hw-ticket-card-badge {\r\n font-size: 10px;\r\n font-weight: 700;\r\n text-transform: uppercase;\r\n padding: 2px 8px;\r\n border-radius: 9999px;\r\n letter-spacing: 0.05em;\r\n}\r\n\r\n.hw-badge-open {\r\n color: var(--hw-color-open);\r\n background: var(--hw-bg-open);\r\n}\r\n\r\n.hw-badge-progress {\r\n color: var(--hw-color-progress);\r\n background: var(--hw-bg-progress);\r\n}\r\n\r\n.hw-badge-pending {\r\n color: var(--hw-color-pending);\r\n background: var(--hw-bg-pending);\r\n}\r\n\r\n.hw-badge-resolved {\r\n color: var(--hw-color-resolved);\r\n background: var(--hw-bg-resolved);\r\n}\r\n\r\n.hw-badge-closed {\r\n color: var(--hw-color-closed);\r\n background: var(--hw-bg-closed);\r\n}\r\n\r\n.hw-ticket-card-subject {\r\n font-size: 13px;\r\n font-weight: 600;\r\n color: var(--hw-text-primary);\r\n margin: 0 0 6px 0;\r\n line-height: 1.4;\r\n}\r\n\r\n.hw-ticket-card-footer {\r\n display: flex;\r\n justify-content: space-between;\r\n font-size: 10px;\r\n color: var(--hw-text-muted);\r\n}\r\n\r\n/* Utility Empty & Loader States */\r\n.hw-empty-state {\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n gap: 8px;\r\n color: var(--hw-text-muted);\r\n font-size: 12px;\r\n text-align: center;\r\n padding: 40px 20px;\r\n flex: 1;\r\n}\r\n\r\n.hw-empty-state svg {\r\n color: var(--hw-text-muted);\r\n opacity: 0.5;\r\n}\r\n\r\n.hw-loader {\r\n width: 24px;\r\n height: 24px;\r\n border: 2px solid var(--hw-border-glass);\r\n border-top-color: var(--hw-accent);\r\n border-radius: 50%;\r\n animation: hw-spin 0.6s linear infinite;\r\n margin: 40px auto;\r\n}\r\n\r\n@keyframes hw-spin {\r\n to {\r\n transform: rotate(360deg);\r\n }\r\n}\r\n\r\n.hw-list-header {\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n margin-bottom: 12px;\r\n}\r\n\r\n.hw-list-title {\r\n font-size: 12px;\r\n font-weight: 700;\r\n text-transform: uppercase;\r\n color: var(--hw-text-secondary);\r\n letter-spacing: 0.05em;\r\n margin: 0;\r\n}\r\n\r\n.hw-btn-refresh {\r\n background: transparent;\r\n border: none;\r\n color: var(--hw-accent);\r\n font-size: 11px;\r\n font-weight: 600;\r\n cursor: pointer;\r\n display: flex;\r\n align-items: center;\r\n gap: 3px;\r\n padding: 2px 6px;\r\n border-radius: 4px;\r\n transition: all 0.15s;\r\n}\r\n\r\n.hw-btn-refresh:hover {\r\n background: var(--hw-surface);\r\n color: var(--hw-accent-hover);\r\n}\r\n\r\n/* Lightbox Fullscreen Modal Overlay */\r\n.hw-lightbox {\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n width: 100vw;\r\n height: 100vh;\r\n background: rgba(4, 7, 13, 0.88);\r\n backdrop-filter: blur(8px);\r\n -webkit-backdrop-filter: blur(8px);\r\n z-index: 1000000;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n opacity: 0;\r\n pointer-events: none;\r\n transition: opacity 0.3s cubic-bezier(0.16, 1, 0.3, 1);\r\n}\r\n\r\n.hw-lightbox.open {\r\n opacity: 1;\r\n pointer-events: auto;\r\n}\r\n\r\n.hw-lightbox-img {\r\n max-width: 90%;\r\n max-height: 85%;\r\n object-fit: contain;\r\n border-radius: 12px;\r\n box-shadow: 0 20px 50px rgba(0, 0, 0, 0.6);\r\n border: 1px solid rgba(255, 255, 255, 0.1);\r\n transform: scale(0.95);\r\n transition: transform 0.3s cubic-bezier(0.16, 1, 0.3, 1);\r\n background: #000;\r\n}\r\n\r\n.hw-lightbox.open .hw-lightbox-img {\r\n transform: scale(1);\r\n}\r\n\r\n.hw-lightbox-close {\r\n position: absolute;\r\n top: 24px;\r\n right: 24px;\r\n background: rgba(255, 255, 255, 0.08);\r\n border: 1px solid rgba(255, 255, 255, 0.1);\r\n border-radius: 50%;\r\n width: 44px;\r\n height: 44px;\r\n color: #ffffff;\r\n font-size: 22px;\r\n cursor: pointer;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n transition: all 0.2s;\r\n outline: none;\r\n}\r\n\r\n.hw-lightbox-close:hover {\r\n background: rgba(255, 255, 255, 0.18);\r\n transform: scale(1.05);\r\n color: #f43f5e;\r\n}\r\n\r\n/* Ticket Comments Section styling */\r\n.hw-ticket-comments-section {\r\n margin-top: 10px;\r\n border-top: 1px solid var(--hw-border-glass);\r\n padding-top: 10px;\r\n width: 100%;\r\n}\r\n\r\n.hw-comments-toggle-btn {\r\n display: flex;\r\n align-items: center;\r\n gap: 6px;\r\n background: transparent;\r\n border: none;\r\n color: var(--hw-text-secondary);\r\n font-size: 11px;\r\n font-weight: 600;\r\n cursor: pointer;\r\n padding: 4px 8px;\r\n border-radius: 6px;\r\n transition: all 0.2s ease;\r\n width: fit-content;\r\n}\r\n\r\n.hw-comments-toggle-btn:hover {\r\n background: var(--hw-surface);\r\n color: var(--hw-text-primary);\r\n}\r\n\r\n.hw-comments-toggle-chevron {\r\n font-size: 9px;\r\n color: var(--hw-text-muted);\r\n transition: transform 0.25s ease;\r\n margin-left: 2px;\r\n}\r\n\r\n.hw-comments-toggle-btn.open .hw-comments-toggle-chevron {\r\n transform: rotate(180deg);\r\n}\r\n\r\n.hw-comments-list-wrapper {\r\n max-height: 0;\r\n overflow: hidden;\r\n transition: max-height 0.25s cubic-bezier(0.4, 0, 0.2, 1);\r\n}\r\n\r\n.hw-comments-list {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 8px;\r\n padding: 8px 4px 4px 4px;\r\n}\r\n\r\n.hw-comment-item {\r\n background: rgba(255, 255, 255, 0.015);\r\n border: 1px solid var(--hw-border-glass);\r\n border-radius: 8px;\r\n padding: 10px;\r\n box-sizing: border-box;\r\n}\r\n\r\n/* Highlights the staff's response with accent color */\r\n.hw-comment-item.staff {\r\n background: rgba(93, 79, 255, 0.04);\r\n border-left: 3px solid var(--hw-accent);\r\n}\r\n\r\n.hw-comment-meta {\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n margin-bottom: 6px;\r\n font-size: 10px;\r\n}\r\n\r\n.hw-comment-author {\r\n font-weight: 700;\r\n color: var(--hw-text-primary);\r\n display: flex;\r\n align-items: center;\r\n gap: 6px;\r\n}\r\n\r\n.hw-comment-staff-badge {\r\n background: var(--hw-accent);\r\n color: #ffffff;\r\n font-size: 8px;\r\n padding: 1px 5px;\r\n border-radius: 4px;\r\n text-transform: uppercase;\r\n font-weight: 800;\r\n letter-spacing: 0.03em;\r\n}\r\n\r\n.hw-comment-date {\r\n color: var(--hw-text-muted);\r\n}\r\n\r\n.hw-comment-text {\r\n margin: 0;\r\n font-size: 11px;\r\n line-height: 1.5;\r\n color: var(--hw-text-secondary);\r\n word-break: break-word;\r\n}","// @ts-ignore\r\nimport STYLES from './help-sidebar-widget.css';\r\n\r\nconst TEMPLATE = `\r\n <button class=\"hw-trigger-btn\" id=\"hw-trigger-btn\" title=\"Open Help & Support\" aria-label=\"Help and Support\">\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <circle cx=\"12\" cy=\"12\" r=\"10\"/>\r\n <path d=\"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3\"/>\r\n <line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\"/>\r\n </svg>\r\n </button>\r\n\r\n <div class=\"hw-backdrop\" id=\"hw-backdrop\"></div>\r\n\r\n <div class=\"hw-lightbox\" id=\"hw-lightbox\">\r\n <button class=\"hw-lightbox-close\" id=\"hw-lightbox-close\" aria-label=\"Close image preview\">✕</button>\r\n <img class=\"hw-lightbox-img\" id=\"hw-lightbox-img\" src=\"\" alt=\"Enlarged screenshot\" />\r\n </div>\r\n\r\n <div class=\"hw-sidebar\" id=\"hw-sidebar\">\r\n <div class=\"hw-header\">\r\n <h2 class=\"hw-header-title\">\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\">\r\n <circle cx=\"12\" cy=\"12\" r=\"10\"/>\r\n <path d=\"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3\"/>\r\n <line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\"/>\r\n </svg>\r\n Help & Support\r\n </h2>\r\n <button class=\"hw-close-btn\" id=\"hw-close-btn\" aria-label=\"Close sidebar\">✕</button>\r\n </div>\r\n\r\n <div class=\"hw-tabs\">\r\n <button class=\"hw-tab-btn active\" data-tab=\"guide\">Help Guide</button>\r\n <button class=\"hw-tab-btn\" data-tab=\"feedback\">Support & Feedback</button>\r\n <button class=\"hw-tab-btn\" data-tab=\"status\">Ticket Status</button>\r\n </div>\r\n\r\n <div class=\"hw-body\">\r\n <!-- 1. HELP GUIDE PANEL -->\r\n <div class=\"hw-tab-panel active\" id=\"hw-panel-guide\">\r\n <div id=\"hw-guide-loading\" class=\"hw-loader\"></div>\r\n <div id=\"hw-guide-container\"></div>\r\n </div>\r\n\r\n <!-- 2. SUPPORT & FEEDBACK PANEL -->\r\n <div class=\"hw-tab-panel\" id=\"hw-panel-feedback\">\r\n <div id=\"hw-form-status\" style=\"display:none\"></div>\r\n\r\n <div class=\"hw-field\">\r\n <label class=\"hw-label\" for=\"hw-name\">Full Name *</label>\r\n <input class=\"hw-input\" id=\"hw-name\" type=\"text\" placeholder=\"Your name\" required />\r\n </div>\r\n\r\n <div class=\"hw-field\">\r\n <label class=\"hw-label\" for=\"hw-email\">Email Address *</label>\r\n <input class=\"hw-input\" id=\"hw-email\" type=\"email\" placeholder=\"your.email@domain.com\" required />\r\n </div>\r\n\r\n <div id=\"hw-custom-fields-container\"></div>\r\n\r\n <div class=\"hw-field\">\r\n <label class=\"hw-label\" for=\"hw-subject\">Subject *</label>\r\n <input class=\"hw-input\" id=\"hw-subject\" type=\"text\" placeholder=\"Brief summary of your request\" required />\r\n </div>\r\n\r\n <div class=\"hw-field\">\r\n <label class=\"hw-label\" for=\"hw-category\">Category *</label>\r\n <select class=\"hw-select\" id=\"hw-category\">\r\n <option value=\"bug\">Bug Report 🐛</option>\r\n <option value=\"feature\">Feature Request 💡</option>\r\n <option value=\"support\">General Support ❔</option>\r\n <option value=\"other\">Other 📝</option>\r\n </select>\r\n </div>\r\n\r\n <div class=\"hw-field\">\r\n <label class=\"hw-label\" for=\"hw-description\">Description *</label>\r\n <textarea class=\"hw-textarea\" id=\"hw-description\" placeholder=\"Describe your request in detail...\" required></textarea>\r\n </div>\r\n\r\n <div class=\"hw-field\">\r\n <label class=\"hw-label\">Screenshot (optional)</label>\r\n <input class=\"hw-file-input\" id=\"hw-file\" type=\"file\" accept=\"image/*\" />\r\n <div class=\"hw-upload-zone\" id=\"hw-upload-zone\" tabindex=\"0\">\r\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\">\r\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\"/>\r\n <circle cx=\"8.5\" cy=\"8.5\" r=\"1.5\"/>\r\n <polyline points=\"21 15 16 10 5 21\"/>\r\n </svg>\r\n <p class=\"hw-upload-hint\">Drag & drop image here, or paste</p>\r\n <p class=\"hw-upload-sub\">PNG, JPG, GIF up to 10MB</p>\r\n <div class=\"hw-upload-actions\">\r\n <button class=\"hw-btn-paste\" id=\"hw-paste-btn\" type=\"button\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\">\r\n <rect x=\"8\" y=\"2\" width=\"8\" height=\"4\" rx=\"1\"/>\r\n <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\"/>\r\n </svg>\r\n Paste (Ctrl+V)\r\n </button>\r\n <button class=\"hw-btn-browse\" id=\"hw-browse-btn\" type=\"button\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\">\r\n <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"/>\r\n <polyline points=\"17 8 12 3 7 8\"/>\r\n <line x1=\"12\" y1=\"3\" x2=\"12\" y2=\"15\"/>\r\n </svg>\r\n Browse\r\n </button>\r\n </div>\r\n </div>\r\n <div id=\"hw-preview\" style=\"display:none\"></div>\r\n </div>\r\n\r\n <div style=\"margin-top:auto; padding-top:16px;\">\r\n <button class=\"hw-btn-submit\" id=\"hw-submit-btn\">Submit Request</button>\r\n </div>\r\n </div>\r\n\r\n <!-- 3. TICKET STATUS PANEL -->\r\n <div class=\"hw-tab-panel\" id=\"hw-panel-status\">\r\n <div class=\"hw-list-header\">\r\n <h3 class=\"hw-list-title\">Your Submitted Tickets</h3>\r\n <button class=\"hw-btn-refresh\" id=\"hw-refresh-btn\" type=\"button\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\r\n <path d=\"M21.5 2v6h-6M21.34 15.57a10 10 0 1 1-.57-8.38l5.67-5.67\"/>\r\n </svg>\r\n Refresh Status\r\n </button>\r\n </div>\r\n \r\n <div id=\"hw-tickets-loading\" class=\"hw-loader\" style=\"display:none\"></div>\r\n <div class=\"hw-ticket-list\" id=\"hw-ticket-list\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n`;\r\n\r\nexport interface CustomFieldDefinition {\r\n id: string;\r\n label: string;\r\n type?: 'text' | 'tel' | 'number' | 'email' | 'url' | 'textarea';\r\n placeholder?: string;\r\n required?: boolean;\r\n defaultValue?: string;\r\n}\r\n\r\nexport class HelpSidebarWidgetElement extends HTMLElement {\r\n _shadow: ShadowRoot;\r\n _screenshotFile: File | null = null;\r\n _guideData: any = null;\r\n _customFields: CustomFieldDefinition[] = [];\r\n\r\n constructor() {\r\n super();\r\n this._shadow = this.attachShadow({ mode: 'open' });\r\n }\r\n\r\n static get observedAttributes() {\r\n return ['user-name', 'user-email', 'button-style', 'theme', 'user-role', 'custom-fields'];\r\n }\r\n\r\n get userRole() {\r\n return this.getAttribute('user-role') || '';\r\n }\r\n\r\n set userRole(val: string) {\r\n this.setAttribute('user-role', val);\r\n }\r\n\r\n get customFields(): CustomFieldDefinition[] {\r\n return this._customFields;\r\n }\r\n\r\n set customFields(val: CustomFieldDefinition[] | string) {\r\n if (typeof val === 'string') {\r\n this._parseCustomFieldsAttribute(val);\r\n } else if (Array.isArray(val)) {\r\n this._customFields = val;\r\n } else {\r\n this._customFields = [];\r\n }\r\n this._renderCustomFields();\r\n }\r\n\r\n _parseCustomFieldsAttribute(val: string | null) {\r\n if (!val) {\r\n return;\r\n }\r\n try {\r\n const parsed = JSON.parse(val);\r\n if (Array.isArray(parsed)) {\r\n this._customFields = parsed;\r\n }\r\n } catch (e) {\r\n console.warn('Failed to parse custom-fields attribute JSON:', e);\r\n }\r\n }\r\n\r\n _getCustomFieldsList(): CustomFieldDefinition[] {\r\n if (this._customFields && this._customFields.length > 0) {\r\n return this._customFields;\r\n }\r\n const attr = this.getAttribute('custom-fields');\r\n if (attr) {\r\n try {\r\n const parsed = JSON.parse(attr);\r\n if (Array.isArray(parsed)) return parsed;\r\n } catch {}\r\n }\r\n return [];\r\n }\r\n\r\n _renderCustomFields() {\r\n const container = this._shadow?.getElementById('hw-custom-fields-container');\r\n if (!container) return;\r\n\r\n // Preserve existing typed values before re-rendering\r\n const existingValues: Record<string, string> = {};\r\n const existingInputs = container.querySelectorAll('.hw-custom-input') as NodeListOf<HTMLInputElement | HTMLTextAreaElement>;\r\n existingInputs.forEach((inp) => {\r\n const id = inp.dataset.customId;\r\n if (id && inp.value) {\r\n existingValues[id] = inp.value;\r\n }\r\n });\r\n\r\n const fields = this._getCustomFieldsList();\r\n if (!fields || fields.length === 0) {\r\n container.innerHTML = '';\r\n return;\r\n }\r\n\r\n let html = '';\r\n fields.forEach((field) => {\r\n const fieldId = `hw-custom-${field.id}`;\r\n const reqStar = field.required ? ' *' : '';\r\n const reqAttr = field.required ? 'required' : '';\r\n const fieldType = field.type || 'text';\r\n const placeholder = field.placeholder || '';\r\n const val = existingValues[field.id] !== undefined ? existingValues[field.id] : (field.defaultValue || '');\r\n\r\n if (fieldType === 'textarea') {\r\n html += `\r\n <div class=\"hw-field\">\r\n <label class=\"hw-label\" for=\"${fieldId}\">${field.label}${reqStar}</label>\r\n <textarea\r\n class=\"hw-textarea hw-custom-input\"\r\n data-custom-id=\"${field.id}\"\r\n id=\"${fieldId}\"\r\n placeholder=\"${placeholder}\"\r\n ${reqAttr}\r\n >${val}</textarea>\r\n </div>\r\n `;\r\n } else {\r\n html += `\r\n <div class=\"hw-field\">\r\n <label class=\"hw-label\" for=\"${fieldId}\">${field.label}${reqStar}</label>\r\n <input\r\n class=\"hw-input hw-custom-input\"\r\n data-custom-id=\"${field.id}\"\r\n id=\"${fieldId}\"\r\n type=\"${fieldType}\"\r\n placeholder=\"${placeholder}\"\r\n value=\"${val}\"\r\n ${reqAttr}\r\n />\r\n </div>\r\n `;\r\n }\r\n });\r\n\r\n container.innerHTML = html;\r\n }\r\n\r\n attributeChangedCallback(name: string, oldValue: string, newValue: string) {\r\n if (!this._shadow) return;\r\n if (name === 'user-name') {\r\n const input = this._shadow.getElementById('hw-name') as HTMLInputElement | null;\r\n if (input) input.value = newValue || '';\r\n }\r\n if (name === 'user-email') {\r\n const input = this._shadow.getElementById('hw-email') as HTMLInputElement | null;\r\n if (input) input.value = newValue || '';\r\n }\r\n if (name === 'user-role') {\r\n if (this._guideData) {\r\n this._renderHelpGuide(this._guideData);\r\n }\r\n }\r\n if (name === 'custom-fields') {\r\n this._parseCustomFieldsAttribute(newValue);\r\n this._renderCustomFields();\r\n }\r\n }\r\n\r\n connectedCallback() {\r\n this._shadow.innerHTML = `<style>${STYLES}</style>${TEMPLATE}`;\r\n\r\n // Load custom font to be completely premium\r\n if (!document.getElementById('hw-font-link')) {\r\n const link = document.createElement('link');\r\n link.id = 'hw-font-link';\r\n link.rel = 'stylesheet';\r\n link.href = 'https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap';\r\n document.head.appendChild(link);\r\n }\r\n\r\n this._applyAttributes();\r\n this._bindEvents();\r\n\r\n // Render custom fields if configured\r\n this._parseCustomFieldsAttribute(this.getAttribute('custom-fields'));\r\n this._renderCustomFields();\r\n\r\n // Pre-fill user session attributes if provided\r\n const defaultName = this.getAttribute('user-name');\r\n if (defaultName) {\r\n const nameInput = this._shadow.getElementById('hw-name') as HTMLInputElement | null;\r\n if (nameInput) nameInput.value = defaultName;\r\n }\r\n const defaultEmail = this.getAttribute('user-email');\r\n if (defaultEmail) {\r\n const emailInput = this._shadow.getElementById('hw-email') as HTMLInputElement | null;\r\n if (emailInput) emailInput.value = defaultEmail;\r\n }\r\n\r\n this._loadLocalHelpGuide();\r\n }\r\n\r\n _applyAttributes() {\r\n const btn = this._shadow.getElementById('hw-trigger-btn');\r\n if (!btn) return;\r\n const style = this.getAttribute('button-style');\r\n if (style === 'minimal') {\r\n btn.classList.add('minimal');\r\n } else if (style === 'hidden') {\r\n btn.classList.add('hidden');\r\n }\r\n }\r\n\r\n _bindEvents() {\r\n const s = this._shadow;\r\n\r\n // Toggle Sidebar\r\n s.getElementById('hw-trigger-btn')?.addEventListener('click', () => this.openSidebar());\r\n s.getElementById('hw-close-btn')?.addEventListener('click', () => this.closeSidebar());\r\n s.getElementById('hw-backdrop')?.addEventListener('click', () => this.closeSidebar());\r\n\r\n // Tabs Switch\r\n const tabButtons = s.querySelectorAll('.hw-tab-btn');\r\n tabButtons.forEach(btn => {\r\n btn.addEventListener('click', () => {\r\n tabButtons.forEach(b => b.classList.remove('active'));\r\n s.querySelectorAll('.hw-tab-panel').forEach(p => p.classList.remove('active'));\r\n\r\n btn.classList.add('active');\r\n const activeBtn = btn as HTMLElement;\r\n const panelId = `hw-panel-${activeBtn.dataset.tab}`;\r\n s.getElementById(panelId)?.classList.add('active');\r\n\r\n if (activeBtn.dataset.tab === 'status') {\r\n this._loadTicketsStatus();\r\n }\r\n });\r\n });\r\n\r\n // Accordions in Help Guide (Event Delegation)\r\n const guideContainer = s.getElementById('hw-guide-container');\r\n if (guideContainer) {\r\n guideContainer.addEventListener('click', (e) => {\r\n const target = e.target as HTMLElement;\r\n const header = target.closest('.hw-faq-header');\r\n if (!header) return;\r\n\r\n const item = header.parentElement;\r\n if (!item) return;\r\n const content = item.querySelector('.hw-faq-content') as HTMLElement | null;\r\n if (!content) return;\r\n const isOpen = item.classList.contains('open');\r\n\r\n // Close all\r\n guideContainer.querySelectorAll('.hw-faq-item').forEach(i => {\r\n i.classList.remove('open');\r\n const c = i.querySelector('.hw-faq-content') as HTMLElement | null;\r\n if (c) c.style.maxHeight = '0px';\r\n });\r\n\r\n if (!isOpen) {\r\n item.classList.add('open');\r\n content.style.maxHeight = content.scrollHeight + 'px';\r\n }\r\n });\r\n }\r\n\r\n // Browse screenshot\r\n const fileInput = s.getElementById('hw-file') as HTMLInputElement | null;\r\n s.getElementById('hw-browse-btn')?.addEventListener('click', (e) => {\r\n e.stopPropagation();\r\n fileInput?.click();\r\n });\r\n fileInput?.addEventListener('change', () => {\r\n if (fileInput.files && fileInput.files[0]) this._handleFile(fileInput.files[0]);\r\n });\r\n\r\n // Paste screenshot button\r\n s.getElementById('hw-paste-btn')?.addEventListener('click', (e) => {\r\n e.stopPropagation();\r\n this._pasteFromClipboard();\r\n });\r\n\r\n // Ctrl+V anywhere in sidebar body\r\n s.getElementById('hw-sidebar')?.addEventListener('paste', (e: any) => {\r\n const items = e.clipboardData?.items || [];\r\n for (const item of items) {\r\n if (item.type.startsWith('image/')) {\r\n const file = item.getAsFile();\r\n if (file) { this._handleFile(file); break; }\r\n }\r\n }\r\n });\r\n\r\n // Drag & Drop\r\n const zone = s.getElementById('hw-upload-zone');\r\n zone?.addEventListener('dragover', (e) => { e.preventDefault(); zone.classList.add('dragover'); });\r\n zone?.addEventListener('dragleave', () => zone.classList.remove('dragover'));\r\n zone?.addEventListener('drop', (e: any) => {\r\n e.preventDefault();\r\n zone.classList.remove('dragover');\r\n const file = e.dataTransfer.files[0];\r\n if (file && file.type.startsWith('image/')) this._handleFile(file);\r\n });\r\n\r\n // Submit Form\r\n s.getElementById('hw-submit-btn')?.addEventListener('click', () => this._submitTicket());\r\n\r\n // Refresh Tickets\r\n s.getElementById('hw-refresh-btn')?.addEventListener('click', () => this._loadTicketsStatus());\r\n\r\n // Toggle ticket comments\r\n const listContainer = s.getElementById('hw-ticket-list');\r\n if (listContainer) {\r\n listContainer.addEventListener('click', (e) => {\r\n const target = e.target as HTMLElement;\r\n const toggleBtn = target.closest('.hw-comments-toggle-btn') as HTMLElement | null;\r\n if (!toggleBtn) return;\r\n\r\n const ticketNum = toggleBtn.dataset.ticket;\r\n const wrapper = listContainer.querySelector(`#comments-list-${ticketNum}`) as HTMLElement | null;\r\n if (!wrapper) return;\r\n\r\n const isOpen = toggleBtn.classList.contains('open');\r\n if (isOpen) {\r\n toggleBtn.classList.remove('open');\r\n wrapper.style.maxHeight = '0px';\r\n } else {\r\n toggleBtn.classList.add('open');\r\n wrapper.style.maxHeight = wrapper.scrollHeight + 'px';\r\n }\r\n });\r\n }\r\n\r\n // Lightbox triggers for Guide Images\r\n if (guideContainer) {\r\n guideContainer.addEventListener('click', (e) => {\r\n const target = e.target as HTMLElement;\r\n if (target.classList.contains('hw-step-img')) {\r\n const imgSrc = (target as HTMLImageElement).src;\r\n this._openLightbox(imgSrc);\r\n }\r\n });\r\n }\r\n\r\n // Lightbox triggers for Upload Preview Images\r\n const previewContainer = s.getElementById('hw-preview');\r\n if (previewContainer) {\r\n previewContainer.addEventListener('click', (e) => {\r\n const target = e.target as HTMLElement;\r\n if (target.classList.contains('hw-preview-img')) {\r\n const imgSrc = (target as HTMLImageElement).src;\r\n this._openLightbox(imgSrc);\r\n }\r\n });\r\n }\r\n\r\n // Close Lightbox\r\n s.getElementById('hw-lightbox-close')?.addEventListener('click', () => this._closeLightbox());\r\n s.getElementById('hw-lightbox')?.addEventListener('click', (e) => {\r\n if (e.target === s.getElementById('hw-lightbox')) {\r\n this._closeLightbox();\r\n }\r\n });\r\n }\r\n\r\n openSidebar() {\r\n this._shadow.getElementById('hw-sidebar')?.classList.add('open');\r\n this._shadow.getElementById('hw-backdrop')?.classList.add('open');\r\n }\r\n\r\n closeSidebar() {\r\n this._shadow.getElementById('hw-sidebar')?.classList.remove('open');\r\n this._shadow.getElementById('hw-backdrop')?.classList.remove('open');\r\n this._hideStatus();\r\n }\r\n\r\n _openLightbox(src: string) {\r\n const lightbox = this._shadow.getElementById('hw-lightbox');\r\n const img = this._shadow.getElementById('hw-lightbox-img') as HTMLImageElement | null;\r\n if (lightbox && img) {\r\n img.src = src;\r\n lightbox.classList.add('open');\r\n }\r\n }\r\n\r\n _closeLightbox() {\r\n const lightbox = this._shadow.getElementById('hw-lightbox');\r\n if (lightbox) {\r\n lightbox.classList.remove('open');\r\n }\r\n }\r\n\r\n async _pasteFromClipboard() {\r\n try {\r\n const items = await navigator.clipboard.read();\r\n for (const item of items) {\r\n const imageType = item.types.find(t => t.startsWith('image/'));\r\n if (imageType) {\r\n const blob = await item.getType(imageType);\r\n this._handleFile(new File([blob], 'screenshot.png', { type: imageType }));\r\n return;\r\n }\r\n }\r\n this._showStatus('No image found in clipboard. Copy a screenshot first, then paste.', 'error');\r\n } catch {\r\n this._showStatus('Press Ctrl+V inside this sidebar to paste a screenshot.', 'error');\r\n }\r\n }\r\n\r\n _handleFile(file: File) {\r\n if (!file.type.startsWith('image/')) {\r\n this._showStatus('Please upload an image file (PNG, JPG, GIF).', 'error');\r\n return;\r\n }\r\n if (file.size > 10 * 1024 * 1024) {\r\n this._showStatus('Screenshot must be smaller than 10MB.', 'error');\r\n return;\r\n }\r\n this._screenshotFile = file;\r\n this._hideStatus();\r\n\r\n const url = URL.createObjectURL(file);\r\n const zone = this._shadow.getElementById('hw-upload-zone');\r\n const preview = this._shadow.getElementById('hw-preview');\r\n\r\n if (zone) zone.style.display = 'none';\r\n if (preview) {\r\n preview.style.display = 'block';\r\n preview.innerHTML = `\r\n <div class=\"hw-preview-wrap\">\r\n <img class=\"hw-preview-img\" src=\"${url}\" alt=\"Screenshot preview\" />\r\n <button class=\"hw-preview-remove\" id=\"hw-remove-ss-btn\" type=\"button\">✕ Remove</button>\r\n </div>\r\n <p class=\"hw-preview-name\">${file.name}</p>\r\n `;\r\n preview.querySelector('#hw-remove-ss-btn')?.addEventListener('click', () => this._removeFile());\r\n }\r\n }\r\n\r\n _removeFile() {\r\n this._screenshotFile = null;\r\n const fileInput = this._shadow.getElementById('hw-file') as HTMLInputElement | null;\r\n if (fileInput) fileInput.value = '';\r\n const zone = this._shadow.getElementById('hw-upload-zone');\r\n if (zone) zone.style.display = 'flex';\r\n const preview = this._shadow.getElementById('hw-preview');\r\n if (preview) {\r\n preview.style.display = 'none';\r\n preview.innerHTML = '';\r\n }\r\n }\r\n\r\n _resetForm() {\r\n const nameInput = this._shadow.getElementById('hw-name') as HTMLInputElement | null;\r\n const emailInput = this._shadow.getElementById('hw-email') as HTMLInputElement | null;\r\n const subjectInput = this._shadow.getElementById('hw-subject') as HTMLInputElement | null;\r\n const descInput = this._shadow.getElementById('hw-description') as HTMLTextAreaElement | null;\r\n const catSelect = this._shadow.getElementById('hw-category') as HTMLSelectElement | null;\r\n\r\n if (nameInput) nameInput.value = '';\r\n if (emailInput) emailInput.value = '';\r\n if (subjectInput) subjectInput.value = '';\r\n if (descInput) descInput.value = '';\r\n if (catSelect) catSelect.value = 'bug';\r\n\r\n const customInputs = this._shadow.querySelectorAll('.hw-custom-input') as NodeListOf<HTMLInputElement>;\r\n customInputs.forEach(input => {\r\n input.value = '';\r\n });\r\n\r\n this._removeFile();\r\n this._hideStatus();\r\n\r\n const submitBtn = this._shadow.getElementById('hw-submit-btn') as HTMLButtonElement | null;\r\n if (submitBtn) {\r\n submitBtn.disabled = false;\r\n submitBtn.textContent = 'Submit Request';\r\n }\r\n }\r\n\r\n async _submitTicket() {\r\n const name = (this._shadow.getElementById('hw-name') as HTMLInputElement | null)?.value.trim() || '';\r\n const email = (this._shadow.getElementById('hw-email') as HTMLInputElement | null)?.value.trim() || '';\r\n const subject = (this._shadow.getElementById('hw-subject') as HTMLInputElement | null)?.value.trim() || '';\r\n const description = (this._shadow.getElementById('hw-description') as HTMLTextAreaElement | null)?.value.trim() || '';\r\n const category = (this._shadow.getElementById('hw-category') as HTMLSelectElement | null)?.value || 'bug';\r\n\r\n if (!name || !email || !subject || !description) {\r\n this._showStatus('Please fill in all required fields.', 'error');\r\n return;\r\n }\r\n\r\n // Validate and collect custom fields\r\n const customFields = this._getCustomFieldsList();\r\n const customFieldsData: Record<string, string> = {};\r\n\r\n for (const field of customFields) {\r\n const input = this._shadow.querySelector(`[data-custom-id=\"${field.id}\"]`) as (HTMLInputElement | HTMLTextAreaElement) | null;\r\n const val = input ? input.value.trim() : '';\r\n\r\n if (field.required && !val) {\r\n this._showStatus(`Please fill in required field: ${field.label}`, 'error');\r\n return;\r\n }\r\n\r\n if (val) {\r\n customFieldsData[field.id] = val;\r\n }\r\n }\r\n\r\n const baseUrl = (this.getAttribute('base-url') || '').replace(/\\/$/, '');\r\n const embedKey = this.getAttribute('embed-key') || '';\r\n\r\n if (!baseUrl || !embedKey) {\r\n this._showStatus('Widget is misconfigured. Missing base-url or embed-key.', 'error');\r\n return;\r\n }\r\n\r\n const submitBtn = this._shadow.getElementById('hw-submit-btn') as HTMLButtonElement | null;\r\n if (submitBtn) {\r\n submitBtn.disabled = true;\r\n submitBtn.textContent = 'Submitting Request...';\r\n }\r\n\r\n // Automatically append custom fields to description so support agents always see them in ticket details\r\n let fullDescription = description;\r\n if (Object.keys(customFieldsData).length > 0) {\r\n const fieldLines = customFields\r\n .filter(f => customFieldsData[f.id])\r\n .map(f => `${f.label}: ${customFieldsData[f.id]}`);\r\n if (fieldLines.length > 0) {\r\n fullDescription += `\\n\\n--- Additional Information ---\\n` + fieldLines.join('\\n');\r\n }\r\n }\r\n\r\n const formData = new FormData();\r\n formData.append('submitter_name', name);\r\n formData.append('submitter_email', email);\r\n formData.append('subject', subject);\r\n formData.append('description', fullDescription);\r\n formData.append('category', category);\r\n formData.append('embed_key', embedKey);\r\n formData.append('source_url', window.location.href);\r\n formData.append('browser_metadata', JSON.stringify({\r\n userAgent: navigator.userAgent,\r\n resolution: `${screen.width}x${screen.height}`,\r\n viewport: `${window.innerWidth}x${window.innerHeight}`,\r\n language: navigator.language,\r\n }));\r\n if (Object.keys(customFieldsData).length > 0) {\r\n formData.append('custom_fields', JSON.stringify(customFieldsData));\r\n // Also append each field directly for backends expecting direct fields (e.g. contact_number, quotation_number)\r\n for (const [key, val] of Object.entries(customFieldsData)) {\r\n formData.append(key, val);\r\n }\r\n }\r\n if (this._screenshotFile) {\r\n formData.append('screenshot', this._screenshotFile, this._screenshotFile.name);\r\n }\r\n\r\n try {\r\n const response = await fetch(`${baseUrl}/api/tickets/widget-submit/`, {\r\n method: 'POST',\r\n body: formData,\r\n });\r\n\r\n if (response.ok) {\r\n this._showStatus('Support request submitted successfully!', 'success');\r\n\r\n setTimeout(() => {\r\n this._resetForm();\r\n // Switch tab to Status to show the submitted ticket\r\n const statusTab = this._shadow.querySelector('.hw-tab-btn[data-tab=\"status\"]') as HTMLElement | null;\r\n if (statusTab) statusTab.click();\r\n }, 1800);\r\n } else {\r\n const err = await response.json().catch(() => ({}));\r\n this._showStatus(err.detail || err.error || 'Failed to submit request. Please try again.', 'error');\r\n if (submitBtn) {\r\n submitBtn.disabled = false;\r\n submitBtn.textContent = 'Submit Request';\r\n }\r\n }\r\n } catch (err) {\r\n console.error('Error submitting support request:', err);\r\n this._showStatus('Network error. Please check your internet connection.', 'error');\r\n if (submitBtn) {\r\n submitBtn.disabled = false;\r\n submitBtn.textContent = 'Submit Request';\r\n }\r\n }\r\n }\r\n\r\n async _loadTicketsStatus() {\r\n const baseUrl = (this.getAttribute('base-url') || '').replace(/\\/$/, '');\r\n const embedKey = this.getAttribute('embed-key') || '';\r\n const listContainer = this._shadow.getElementById('hw-ticket-list');\r\n const loader = this._shadow.getElementById('hw-tickets-loading');\r\n\r\n if (!listContainer) return;\r\n\r\n if (!baseUrl || !embedKey) {\r\n listContainer.innerHTML = '<div class=\"hw-empty-state\">Widget configuration error (missing URL or key)</div>';\r\n return;\r\n }\r\n\r\n if (loader) loader.style.display = 'block';\r\n listContainer.style.opacity = '0.5';\r\n\r\n try {\r\n const response = await fetch(`${baseUrl}/api/tickets/widget-status/`, {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify({ embed_key: embedKey })\r\n });\r\n\r\n if (response.ok) {\r\n const statusRes = await response.json();\r\n const payload = statusRes.data || statusRes; // unwrap CustomJSONRenderer's { success, data } envelope\r\n const serverTickets = payload.tickets || [];\r\n\r\n if (serverTickets.length === 0) {\r\n listContainer.innerHTML = `\r\n <div class=\"hw-empty-state\">\r\n <svg width=\"32\" height=\"32\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\">\r\n <path d=\"M12 22c5.523 0 10-4.477 10-10S17.523 2 12 2 2 6.477 2 12s4.477 10 10 10z\"/>\r\n <path d=\"M12 8v4\"/>\r\n <path d=\"M12 16h.01\"/>\r\n </svg>\r\n <p style=\"margin: 0; font-weight:600;\">No support tickets yet</p>\r\n <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>\r\n </div>\r\n `;\r\n return;\r\n }\r\n\r\n // Build output HTML & merge\r\n let html = '';\r\n serverTickets.forEach((t: any) => {\r\n const finalStatus = t.status || 'open';\r\n const finalNumber = t.ticket_number || 'TKT-PENDING';\r\n const dateStr = new Date(t.created_at).toLocaleDateString(undefined, {\r\n month: 'short',\r\n day: 'numeric',\r\n year: 'numeric'\r\n });\r\n\r\n // Map status CSS class\r\n let badgeClass = 'hw-badge-open';\r\n if (finalStatus === 'in_progress') badgeClass = 'hw-badge-progress';\r\n else if (finalStatus === 'pending') badgeClass = 'hw-badge-pending';\r\n else if (finalStatus === 'resolved') badgeClass = 'hw-badge-resolved';\r\n else if (finalStatus === 'closed') badgeClass = 'hw-badge-closed';\r\n\r\n let commentsHtml = '';\r\n const comments = t.comments || [];\r\n if (comments.length > 0) {\r\n commentsHtml += `\r\n <div class=\"hw-ticket-comments-section\">\r\n <button class=\"hw-comments-toggle-btn\" data-ticket=\"${finalNumber}\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" style=\"margin-right: 4px;\">\r\n <path d=\"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z\"/>\r\n </svg>\r\n <span>Replies (${comments.length})</span>\r\n <span class=\"hw-comments-toggle-chevron\">▼</span>\r\n </button>\r\n <div class=\"hw-comments-list-wrapper\" id=\"comments-list-${finalNumber}\" style=\"max-height: 0px;\">\r\n <div class=\"hw-comments-list\">\r\n `;\r\n \r\n comments.forEach((c: any) => {\r\n const cDateStr = new Date(c.created_at).toLocaleDateString(undefined, {\r\n month: 'short',\r\n day: 'numeric',\r\n hour: '2-digit',\r\n minute: '2-digit'\r\n });\r\n const isStaff = c.is_staff || false;\r\n const commentClass = isStaff ? 'hw-comment-item staff' : 'hw-comment-item';\r\n const badgeMarkup = isStaff ? `<span class=\"hw-comment-staff-badge\">Staff</span>` : '';\r\n\r\n commentsHtml += `\r\n <div class=\"${commentClass}\">\r\n <div class=\"hw-comment-meta\">\r\n <span class=\"hw-comment-author\">${c.author_name || 'Anonymous'} ${badgeMarkup}</span>\r\n <span class=\"hw-comment-date\">${cDateStr}</span>\r\n </div>\r\n <p class=\"hw-comment-text\">${c.content}</p>\r\n </div>\r\n `;\r\n });\r\n\r\n commentsHtml += `\r\n </div>\r\n </div>\r\n </div>\r\n `;\r\n }\r\n\r\n html += `\r\n <div class=\"hw-ticket-card\">\r\n <div class=\"hw-ticket-card-header\">\r\n <span class=\"hw-ticket-card-number\">${finalNumber}</span>\r\n <span class=\"hw-ticket-card-badge ${badgeClass}\">${finalStatus.replace('_', ' ')}</span>\r\n </div>\r\n <h4 class=\"hw-ticket-card-subject\">${t.subject || 'No Subject'}</h4>\r\n <div class=\"hw-ticket-card-footer\" style=\"flex-direction: column; align-items: flex-start; gap: 4px;\">\r\n <div style=\"display: flex; justify-content: space-between; width: 100%;\">\r\n <span>Category: ${t.category.toUpperCase()}</span>\r\n <span>${dateStr}</span>\r\n </div>\r\n <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%;\">\r\n <span>👤 By: <strong>${t.submitter_name || 'Anonymous'}</strong> (${t.submitter_email || 'no-email'})</span>\r\n </div>\r\n </div>\r\n ${commentsHtml}\r\n </div>\r\n `;\r\n });\r\n listContainer.innerHTML = html;\r\n } else {\r\n throw new Error('Server status fetch failed');\r\n }\r\n } catch (err) {\r\n console.error('Failed to pull live ticket status:', err);\r\n listContainer.innerHTML = `\r\n <div class=\"hw-empty-state\">\r\n <p style=\"margin: 0; font-weight:600; color: #f43f5e;\">Failed to load tickets</p>\r\n <p style=\"margin: 0; font-size:11px;\">A connection error occurred. Click \"Refresh Status\" to retry.</p>\r\n </div>\r\n `;\r\n } finally {\r\n if (loader) loader.style.display = 'none';\r\n listContainer.style.opacity = '1';\r\n }\r\n }\r\n\r\n _showStatus(msg: string, type: 'success' | 'error') {\r\n const el = this._shadow.getElementById('hw-form-status');\r\n if (el) {\r\n el.textContent = msg;\r\n el.className = `hw-status-msg ${type}`;\r\n el.style.display = 'block';\r\n }\r\n }\r\n\r\n _hideStatus() {\r\n const el = this._shadow.getElementById('hw-form-status');\r\n if (el) el.style.display = 'none';\r\n }\r\n\r\n async _loadLocalHelpGuide() {\r\n const guideContainer = this._shadow.getElementById('hw-guide-container');\r\n const loader = this._shadow.getElementById('hw-guide-loading');\r\n const guideUrl = this.getAttribute('guide-url') || '/help-guide.json';\r\n\r\n try {\r\n const response = await fetch(guideUrl);\r\n if (response.ok) {\r\n const data = await response.json();\r\n this._guideData = data;\r\n this._renderHelpGuide(data);\r\n } else {\r\n throw new Error('Guide file not found');\r\n }\r\n } catch (err) {\r\n console.warn(`Dynamic help guide not found at ${guideUrl}. Falling back to default FAQs.`);\r\n const defaultGuide = this._getDefaultHelpGuide();\r\n this._guideData = defaultGuide;\r\n this._renderHelpGuide(defaultGuide);\r\n } finally {\r\n if (loader) loader.style.display = 'none';\r\n }\r\n }\r\n\r\n _getDefaultHelpGuide() {\r\n return {\r\n processes: [\r\n {\r\n title: \"Help Guide & FAQs\",\r\n steps: [\r\n {\r\n step_number: 1,\r\n title: \"What is ThriveX AI Dashboard?\",\r\n 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.\"\r\n },\r\n {\r\n step_number: 2,\r\n title: \"How do I submit feedback / bugs?\",\r\n 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.\"\r\n },\r\n {\r\n step_number: 3,\r\n title: \"How do I track my ticket status?\",\r\n 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.\"\r\n },\r\n {\r\n step_number: 4,\r\n title: \"How do I invite members to my project?\",\r\n 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.\"\r\n }\r\n ]\r\n }\r\n ]\r\n };\r\n }\r\n\r\n _renderHelpGuide(data: any) {\r\n const container = this._shadow.getElementById('hw-guide-container');\r\n if (!container) return;\r\n\r\n let html = '';\r\n\r\n // Backward compatibility for single process JSON format\r\n let processes = data.processes;\r\n if (!processes && data.steps) {\r\n processes = [\r\n {\r\n title: data.title || \"Help Guide\",\r\n steps: data.steps\r\n }\r\n ];\r\n }\r\n\r\n if (!processes || processes.length === 0) {\r\n container.innerHTML = '<div class=\"hw-empty-state\">No guides available</div>';\r\n return;\r\n }\r\n\r\n const userRole = (this.getAttribute('user-role') || '').trim().toLowerCase();\r\n\r\n // Filter processes and steps based on roles (Approach A)\r\n const filteredProcesses = processes\r\n .map((process: any) => {\r\n const hasProcessRoleRestriction = Array.isArray(process.roles) && process.roles.length > 0;\r\n const isProcessAllowed = !hasProcessRoleRestriction || (userRole && process.roles.some((r: string) => typeof r === 'string' && r.trim().toLowerCase() === userRole));\r\n\r\n if (!isProcessAllowed) {\r\n return null;\r\n }\r\n\r\n const steps = process.steps || [];\r\n const originalStepsLength = steps.length;\r\n const visibleSteps = steps.filter((step: any) => {\r\n const hasStepRoleRestriction = Array.isArray(step.roles) && step.roles.length > 0;\r\n return !hasStepRoleRestriction || (userRole && step.roles.some((r: string) => typeof r === 'string' && r.trim().toLowerCase() === userRole));\r\n });\r\n\r\n if (originalStepsLength > 0 && visibleSteps.length === 0) {\r\n return null;\r\n }\r\n\r\n return {\r\n ...process,\r\n steps: visibleSteps\r\n };\r\n })\r\n .filter((p: any) => p !== null);\r\n\r\n if (filteredProcesses.length === 0) {\r\n container.innerHTML = '<div class=\"hw-empty-state\">No guides available for your role</div>';\r\n return;\r\n }\r\n\r\n // Keep track of absolute step index to initially open the very first step of the first process\r\n let absoluteStepIndex = 0;\r\n\r\n filteredProcesses.forEach((process: any) => {\r\n if (process.title) {\r\n html += `<h3 class=\"hw-process-title\">${process.title}</h3>`;\r\n }\r\n\r\n const steps = process.steps || [];\r\n steps.forEach((step: any, index: number) => {\r\n const stepNum = step.step_number || step.number || (index + 1);\r\n const isOpen = absoluteStepIndex === 0 ? 'open' : '';\r\n const maxHeight = absoluteStepIndex === 0 ? 'style=\"max-height: 1000px;\"' : 'style=\"max-height: 0px;\"';\r\n absoluteStepIndex++;\r\n\r\n let imagesHtml = '';\r\n if (Array.isArray(step.images) && step.images.length > 0) {\r\n imagesHtml = '<div class=\"hw-step-images-list\">';\r\n step.images.forEach((imgSrc: string) => {\r\n imagesHtml += `\r\n <div class=\"hw-step-image-wrap\">\r\n <img class=\"hw-step-img\" src=\"${imgSrc}\" alt=\"Step ${stepNum} screenshot\" />\r\n </div>\r\n `;\r\n });\r\n imagesHtml += '</div>';\r\n }\r\n\r\n let noteHtml = '';\r\n if (step.note) {\r\n noteHtml = `\r\n <div class=\"hw-step-note flex gap-2\">\r\n <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>\r\n <p class=\"hw-note-desc\">${step.note}</p>\r\n </div>\r\n `;\r\n }\r\n\r\n let importantNoteHtml = '';\r\n if (step.importantNote) {\r\n importantNoteHtml = `\r\n <div class=\"hw-step-important flex gap-2\">\r\n <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>\r\n <div>\r\n <p class=\"hw-important-title\">Important Note</p>\r\n <p class=\"hw-important-desc\">${step.importantNote}</p>\r\n </div>\r\n </div>\r\n `;\r\n }\r\n\r\n html += `\r\n <div class=\"hw-faq-item ${isOpen}\">\r\n <div class=\"hw-faq-header\">\r\n <div class=\"hw-step-header-left\">\r\n <span class=\"hw-step-number\">${stepNum}</span>\r\n <span class=\"hw-step-title\">${step.title}</span>\r\n </div>\r\n <span class=\"hw-faq-icon\">▼</span>\r\n </div>\r\n <div class=\"hw-faq-content\" ${maxHeight}>\r\n <div class=\"hw-faq-inner\">\r\n <p class=\"hw-step-desc\">${step.description}</p>\r\n ${imagesHtml}\r\n ${noteHtml}\r\n ${importantNoteHtml}\r\n </div>\r\n </div>\r\n </div>\r\n `;\r\n });\r\n });\r\n\r\n container.innerHTML = html;\r\n }\r\n}\r\n\r\nif (typeof window !== 'undefined' && !customElements.get('help-sidebar-widget')) {\r\n customElements.define('help-sidebar-widget', HelpSidebarWidgetElement);\r\n}\r\n","export * from './react-wrapper.js';\r\nexport * from './help-sidebar-widget.js';\r\n","import React, { useEffect, useRef, useState } from 'react';\r\nimport type { CustomFieldDefinition } from './help-sidebar-widget.js';\r\n\r\nexport type { CustomFieldDefinition };\r\n\r\nexport interface HelpSidebarWidgetProps {\r\n baseUrl: string;\r\n embedKey: string;\r\n theme?: 'auto' | 'light' | 'dark';\r\n buttonStyle?: 'navbar' | 'minimal' | 'hidden';\r\n userName?: string;\r\n userEmail?: string;\r\n guideUrl?: string;\r\n userRole?: string;\r\n customFields?: CustomFieldDefinition[];\r\n}\r\n\r\nexport function HelpSidebarWidget({\r\n baseUrl,\r\n embedKey,\r\n theme = 'auto',\r\n buttonStyle = 'navbar',\r\n userName = '',\r\n userEmail = '',\r\n guideUrl = '',\r\n userRole = '',\r\n customFields,\r\n}: HelpSidebarWidgetProps) {\r\n const [mounted, setMounted] = useState(false);\r\n const widgetRef = useRef<any>(null);\r\n\r\n useEffect(() => {\r\n // Dynamically import the custom element script on client mount\r\n import('./help-sidebar-widget.js').then(() => {\r\n setMounted(true);\r\n });\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (widgetRef.current && customFields) {\r\n widgetRef.current.customFields = customFields;\r\n }\r\n }, [mounted, customFields]);\r\n\r\n if (!mounted) return null;\r\n\r\n return (\r\n // @ts-ignore\r\n <help-sidebar-widget\r\n ref={widgetRef}\r\n base-url={baseUrl}\r\n embed-key={embedKey}\r\n theme={theme}\r\n button-style={buttonStyle}\r\n user-name={userName}\r\n user-email={userEmail}\r\n guide-url={guideUrl}\r\n user-role={userRole}\r\n custom-fields={customFields && customFields.length > 0 ? JSON.stringify(customFields) : undefined}\r\n />\r\n );\r\n}\r\n"],"mappings":"4cAAA,IAAAA,EAAAC,EAAAC,EAAA,KAAAF,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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","names":["help_sidebar_widget_default","init_help_sidebar_widget","__esmMin","help_sidebar_widget_exports","__export","HelpSidebarWidgetElement","TEMPLATE","init_help_sidebar_widget","__esmMin","val","parsed","e","attr","container","existingValues","inp","id","fields","html","field","fieldId","reqStar","reqAttr","fieldType","placeholder","name","oldValue","newValue","input","help_sidebar_widget_default","link","defaultName","nameInput","defaultEmail","emailInput","btn","style","s","tabButtons","b","p","activeBtn","panelId","guideContainer","header","item","content","isOpen","i","c","fileInput","items","file","zone","listContainer","toggleBtn","ticketNum","wrapper","target","imgSrc","previewContainer","src","lightbox","img","imageType","t","blob","url","preview","subjectInput","descInput","catSelect","submitBtn","email","subject","description","category","customFields","customFieldsData","baseUrl","embedKey","fullDescription","fieldLines","f","formData","key","response","statusTab","err","loader","statusRes","serverTickets","finalStatus","finalNumber","dateStr","badgeClass","commentsHtml","comments","cDateStr","isStaff","commentClass","badgeMarkup","msg","type","el","guideUrl","data","defaultGuide","processes","userRole","filteredProcesses","process","r","steps","originalStepsLength","visibleSteps","step","absoluteStepIndex","index","stepNum","maxHeight","imagesHtml","noteHtml","importantNoteHtml","index_exports","__export","HelpSidebarWidget","HelpSidebarWidgetElement","__toCommonJS","import_react","import_jsx_runtime","HelpSidebarWidget","baseUrl","embedKey","theme","buttonStyle","userName","userEmail","guideUrl","userRole","customFields","mounted","setMounted","widgetRef","init_help_sidebar_widget"]}