chatgram-widget 1.0.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/README.md +282 -0
- package/dist/chatgram-widget.cjs.js +2 -0
- package/dist/chatgram-widget.cjs.js.map +1 -0
- package/dist/chatgram-widget.css +0 -0
- package/dist/chatgram-widget.esm.js +2 -0
- package/dist/chatgram-widget.esm.js.map +1 -0
- package/dist/chatgram-widget.umd.js +2 -0
- package/dist/chatgram-widget.umd.js.map +1 -0
- package/dist/types/core/api.d.ts +15 -0
- package/dist/types/core/config.d.ts +6 -0
- package/dist/types/core/events.d.ts +15 -0
- package/dist/types/core/rate-limiter.d.ts +16 -0
- package/dist/types/core/types.d.ts +176 -0
- package/dist/types/index.d.ts +84 -0
- package/dist/types/styles/widget-css.d.ts +1 -0
- package/dist/types/ui/icons.d.ts +6 -0
- package/dist/types/ui/modal.d.ts +63 -0
- package/dist/types/ui/trigger.d.ts +14 -0
- package/dist/types/utils/dom.d.ts +26 -0
- package/dist/types/utils/sanitize.d.ts +38 -0
- package/package.json +81 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chatgram-widget.esm.js","sources":["../src/core/types.ts","../src/core/config.ts","../src/core/events.ts","../src/core/api.ts","../src/core/rate-limiter.ts","../src/utils/sanitize.ts","../src/utils/dom.ts","../src/ui/icons.ts","../src/ui/modal.ts","../src/styles/widget-css.ts","../src/ui/trigger.ts","../src/index.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null,null,null],"names":["ChatgramError","Error","constructor","message","code","statusCode","super","this","name","DEFAULT_THEME","primaryColor","secondaryColor","backgroundColor","headerBackgroundColor","headerTextColor","textColor","inputBackgroundColor","inputTextColor","inputPlaceholderColor","borderRadius","modalBorderRadius","fontFamily","boxShadow","DEFAULT_TEXTS","title","subtitle","categoryLabel","emailLabel","emailPlaceholder","nameLabel","namePlaceholder","subjectLabel","subjectPlaceholder","messageLabel","messagePlaceholder","submitButtonText","submittingText","successTitle","successMessage","successButtonText","errorTitle","errorMessage","errorButtonText","requiredFieldError","invalidEmailError","messageTooLongError","networkError","timeoutError","rateLimitError","categories","feedback","bug","feature","support","ALL_CATEGORIES","deepMerge","defaults","overrides","result","key","Object","keys","overrideVal","defaultVal","undefined","Array","isArray","resolveConfig","userConfig","apiKey","trim","domain","window","location","hostname","apiBaseUrl","replace","theme","texts","length","defaultCategory","maxMessageLength","clamp","_a","showTriggerButton","_b","triggerPosition","showNameField","_c","showCategories","_d","zIndex","_e","closeOnOverlayClick","_f","closeOnEscape","_g","enableHoneypot","_h","minSubmitDelay","_j","rateLimitMax","_k","rateLimitWindow","_l","requestTimeout","_m","retryAttempts","_o","autoResetDelay","Math","max","_p","defaultEmail","defaultName","onSuccess","onError","onOpen","onClose","onSubmit","value","min","EventEmitter","listeners","Map","on","event","handler","has","set","Set","get","add","off","delete","once","wrapper","data","emit","handlers","err","console","error","removeAllListeners","clear","async","doRequest","baseUrl","payload","timeout","controller","AbortController","timeoutId","setTimeout","abort","url","response","fetch","method","headers","Accept","body","JSON","stringify","signal","clearTimeout","json","ok","status","success","ticketId","id","_id","DOMException","TypeError","sleep","ms","Promise","resolve","toChatgramError","String","RateLimiter","maxRequests","windowMs","timestamps","tryConsume","now","Date","filter","t","push","getRetryAfter","oldest","retryMs","ceil","reset","sanitizeForPayload","input","isNonEmpty","sanitizeThemeValue","test","isSafeCssValue","el","tag","attrs","children","elem","document","createElement","entries","className","textContent","innerHTML","setAttribute","FOCUSABLE_SELECTOR","join","scrollLockCount","savedScrollbarWidth","savedBodyPaddingRight","savedBodyOverflow","idCounter","ICONS","close","email","user","subject","send","spinner","trigger","warning","getCategoryIcon","type","Modal","config","events","hostEl","shadow","overlay","modalEl","bodyContainer","isOpen","state","mountTime","destroyFocusTrap","boundEscapeHandler","emailInput","nameInput","subjectInput","messageInput","honeypotInput","charCountText","charCountFill","submitBtn","categoryBtns","selectedCategory","instanceId","prefix","toString","uid","rateLimiter","open","mount","requestAnimationFrame","classList","innerWidth","documentElement","clientWidth","style","overflow","paddingRight","container","previouslyFocused","activeElement","getFocusableElements","from","querySelectorAll","getComputedStyle","display","visibility","handleKeyDown","e","focusable","preventDefault","first","last","shiftKey","contains","focus","addEventListener","removeEventListener","createFocusTrap","remove","call","setState","destroy","updateConfig","newConfig","applyTheme","updateTheme","getState","isVisible","cssText","attachShadow","mode","appendChild","role","target","stopPropagation","buildHeader","buildFormView","host","element","vars","prop","safe","setProperty","applyThemeVars","header","iconWrap","textWrap","closeBtn","append","catLabel","catGrid","i","cat","label","isActive","btn","tabindex","createTextNode","dataset","selectCategory","len","next","prev","emailField","buildField","placeholder","icon","required","autocomplete","querySelector","nameField","subjectField","msgField","msgLabel","counter","counterBar","width","msgError","updateCharCount","fieldName","honeypotField","tabIndex","handleSubmit","opts","field","clearFieldError","errorEl","toggle","pct","closest","validate","valid","trimmed","isValidEmail","showFieldError","showTextareaError","textarea","removeAttribute","newState","showStateView","view","titleEl","msgEl","retryAfter","messageText","disabled","options","retries","lastError","attempt","delay","pow","submitTicket","chatgramErr","userMessage","TriggerButton","onClick","pos","tooltip","show","hide","background","modal","resolvedConfig","init","warn","getVersion","index"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).ChatgramWidget={})}(this,function(t){"use strict";class e extends Error{constructor(t,e,n){super(t),this.name="ChatgramError",this.code=e,this.statusCode=n}}const n={primaryColor:"#EE6055",secondaryColor:"#D94F44",backgroundColor:"#FFFFFF",headerBackgroundColor:"#2C3345",headerTextColor:"#FFFFFF",textColor:"#6B7280",inputBackgroundColor:"#1E2535",inputTextColor:"#FFFFFF",inputPlaceholderColor:"#9CA3AF",borderRadius:"8px",modalBorderRadius:"16px",fontFamily:"-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Helvetica Neue', sans-serif",boxShadow:"0 25px 60px rgba(0, 0, 0, 0.3)"},i={title:"Contact Support",subtitle:"We're here to help you succeed",categoryLabel:"What can we help with?",emailLabel:"Your Email",emailPlaceholder:"email@example.com",nameLabel:"Your Name",namePlaceholder:"John Doe",subjectLabel:"Subject",subjectPlaceholder:"Brief subject of your request",messageLabel:"Message",messagePlaceholder:"Tell us what you think...",submitButtonText:"Submit",submittingText:"Sending...",successTitle:"Message Sent!",successMessage:"We've received your message and will get back to you as soon as possible.",successButtonText:"Close",errorTitle:"Oops!",errorMessage:"Something went wrong. Please try again.",errorButtonText:"Try Again",requiredFieldError:"This field is required",invalidEmailError:"Please enter a valid email address",messageTooLongError:"Message exceeds the maximum length",networkError:"Network error. Please check your internet connection.",timeoutError:"Request timed out. Please try again.",rateLimitError:"Too many submissions. Please wait a moment.",categories:{feedback:"Feedback",bug:"Bug Report",feature:"Feature",support:"Support"}},o=["feedback","bug","feature","support"];function s(t,e){if(!e)return{...t};const n={...t};for(const i of Object.keys(e)){const o=e[i],s=t[i];void 0!==o&&(n[i]=null===o||"object"!=typeof o||Array.isArray(o)||null===s||"object"!=typeof s||Array.isArray(s)?o:{...s,...o})}return n}function r(t){var e,r,l,c,d,h,u,g,p,m,f,b,x,v;if(!t.apiKey||"string"!=typeof t.apiKey)throw new Error("[chatgram-widget] `apiKey` is required. Get yours at https://brandid.app/chatgram");return{apiKey:t.apiKey.trim(),domain:t.domain||("undefined"!=typeof window&&window.location?window.location.hostname:"localhost"),apiBaseUrl:(t.apiBaseUrl||"https://chatgram-server.brandid.app").replace(/\/+$/,""),theme:s(n,t.theme),texts:s(i,t.texts),categories:t.categories&&t.categories.length>0?t.categories:o,defaultCategory:t.defaultCategory||"support",maxMessageLength:a(null!==(e=t.maxMessageLength)&&void 0!==e?e:5e3,100,5e4),showTriggerButton:null===(r=t.showTriggerButton)||void 0===r||r,triggerPosition:t.triggerPosition||"bottom-right",showNameField:null===(l=t.showNameField)||void 0===l||l,showCategories:null===(c=t.showCategories)||void 0===c||c,zIndex:null!==(d=t.zIndex)&&void 0!==d?d:999999,closeOnOverlayClick:null===(h=t.closeOnOverlayClick)||void 0===h||h,closeOnEscape:null===(u=t.closeOnEscape)||void 0===u||u,enableHoneypot:null===(g=t.enableHoneypot)||void 0===g||g,minSubmitDelay:a(null!==(p=t.minSubmitDelay)&&void 0!==p?p:2,0,30),rateLimitMax:a(null!==(m=t.rateLimitMax)&&void 0!==m?m:3,1,100),rateLimitWindow:a(null!==(f=t.rateLimitWindow)&&void 0!==f?f:3e5,1e4,36e5),requestTimeout:a(null!==(b=t.requestTimeout)&&void 0!==b?b:15e3,3e3,6e4),retryAttempts:a(null!==(x=t.retryAttempts)&&void 0!==x?x:2,0,5),autoResetDelay:Math.max(null!==(v=t.autoResetDelay)&&void 0!==v?v:0,0),defaultEmail:t.defaultEmail,defaultName:t.defaultName,onSuccess:t.onSuccess,onError:t.onError,onOpen:t.onOpen,onClose:t.onClose,onSubmit:t.onSubmit}}function a(t,e,n){return Math.min(Math.max(t,e),n)}class l{constructor(){this.listeners=new Map}on(t,e){this.listeners.has(t)||this.listeners.set(t,new Set),this.listeners.get(t).add(e)}off(t,e){var n;null===(n=this.listeners.get(t))||void 0===n||n.delete(e)}once(t,e){const n=i=>{this.off(t,n),e(i)};this.on(t,n)}emit(t,e){const n=this.listeners.get(t);if(n)for(const i of n)try{i(e)}catch(e){console.error(`[chatgram-widget] Error in "${t}" handler:`,e)}}removeAllListeners(){this.listeners.clear()}}async function c(t,n,i){const o=new AbortController,s=setTimeout(()=>o.abort(),i);try{const i=`${t}/api/tickets`,r=await fetch(i,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify(n),signal:o.signal});clearTimeout(s);let a={};try{a=await r.json()}catch(t){}if(!r.ok){const t="string"==typeof a.message?a.message:`Server error (${r.status})`;if(429===r.status)throw new e(t,"RATE_LIMITED",429);if(r.status>=400&&r.status<500)throw new e(t,"VALIDATION_ERROR",r.status);throw new e(t,"SERVER_ERROR",r.status)}return{success:!0,ticketId:a.ticketId||a.id||a._id||void 0,message:a.message||"Ticket created successfully"}}catch(t){if(clearTimeout(s),t instanceof e)throw t;if(t instanceof DOMException&&"AbortError"===t.name)throw new e("Request timed out. Please check your connection and try again.","TIMEOUT");if(t instanceof TypeError)throw new e("Network error. Please check your internet connection.","NETWORK_ERROR");throw new e(t instanceof Error?t.message:"An unexpected error occurred","UNKNOWN")}}function d(t){return new Promise(e=>setTimeout(e,t))}function h(t){return t instanceof e?t:t instanceof Error?new e(t.message,"UNKNOWN"):new e(String(t),"UNKNOWN")}class u{constructor(t,e){this.timestamps=[],this.maxRequests=t,this.windowMs=e}tryConsume(){const t=Date.now();return this.timestamps=this.timestamps.filter(e=>t-e<this.windowMs),!(this.timestamps.length>=this.maxRequests||(this.timestamps.push(t),0))}getRetryAfter(){if(this.timestamps.length<this.maxRequests)return 0;const t=this.timestamps[0],e=this.windowMs-(Date.now()-t);return Math.max(Math.ceil(e/1e3),1)}reset(){this.timestamps=[]}}function g(t){return"string"!=typeof t?"":t.replace(/\0/g,"").trim()}function p(t){return"string"==typeof t&&t.trim().length>0}function m(t){return function(t){return"string"==typeof t&&!/expression\s*\(|url\s*\(|javascript:|data:/i.test(t)}(t)?t:""}function f(t,e,n){const i=document.createElement(t);if(e)for(const[t,n]of Object.entries(e))"className"===t?i.className=n:"textContent"===t?i.textContent=n:"innerHTML"===t?i.innerHTML=n:i.setAttribute(t,n);return i}const b=["a[href]","button:not([disabled])",'input:not([disabled]):not([type="hidden"])',"select:not([disabled])","textarea:not([disabled])",'[tabindex]:not([tabindex="-1"])'].join(", ");let x=0,v=0,y="",w="",E=0;const C={feedback:'<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"/></svg>',bug:'<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="m8 2 1.88 1.88"/><path d="M14.12 3.88 16 2"/><path d="M9 7.13v-1a3.003 3.003 0 1 1 6 0v1"/><path d="M12 20c-3.3 0-6-2.7-6-6v-3a4 4 0 0 1 4-4h4a4 4 0 0 1 4 4v3c0 3.3-2.7 6-6 6"/><path d="M12 20v-9"/><path d="M6.53 9C4.6 8.8 3 7.1 3 5"/><path d="M6 13H2"/><path d="M3 21c0-2.1 1.7-3.9 3.8-4"/><path d="M20.97 5c0 2.1-1.6 3.8-3.5 4"/><path d="M22 13h-4"/><path d="M17.2 17c2.1.1 3.8 1.9 3.8 4"/></svg>',feature:'<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="3"/><path d="M12 1v2"/><path d="M12 21v2"/><path d="M4.22 4.22l1.42 1.42"/><path d="M18.36 18.36l1.42 1.42"/><path d="M1 12h2"/><path d="M21 12h2"/><path d="M4.22 19.78l1.42-1.42"/><path d="M18.36 5.64l1.42-1.42"/></svg>',support:'<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"/><path d="M12 17h.01"/></svg>',close:'<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/></svg>',email:'<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect width="20" height="16" x="2" y="4" rx="2"/><path d="m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7"/></svg>',user:'<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2"/><circle cx="12" cy="7" r="4"/></svg>',subject:'<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"/><polyline points="14 2 14 8 20 8"/></svg>',send:'<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="22" y1="2" x2="11" y2="13"/><polygon points="22 2 15 22 11 13 2 9 22 2"/></svg>',success:'<svg xmlns="http://www.w3.org/2000/svg" width="52" height="52" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"/><polyline points="22 4 12 14.01 9 11.01"/></svg>',error:'<svg xmlns="http://www.w3.org/2000/svg" width="52" height="52" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><line x1="12" y1="8" x2="12" y2="12"/><line x1="12" y1="16" x2="12.01" y2="16"/></svg>',spinner:'<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round"><path d="M21 12a9 9 0 1 1-6.219-8.56"/></svg>',trigger:'<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"/></svg>',warning:'<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3Z"/><line x1="12" y1="9" x2="12" y2="13"/><line x1="12" y1="17" x2="12.01" y2="17"/></svg>'};function F(t){return C[t]||C.support}class k{constructor(t,e){this.hostEl=null,this.shadow=null,this.overlay=null,this.modalEl=null,this.bodyContainer=null,this.isOpen=!1,this.state="idle",this.mountTime=0,this.destroyFocusTrap=null,this.boundEscapeHandler=null,this.emailInput=null,this.nameInput=null,this.subjectInput=null,this.messageInput=null,this.honeypotInput=null,this.charCountText=null,this.charCountFill=null,this.submitBtn=null,this.categoryBtns=[],this.config=r(t),this.events=e,this.selectedCategory=this.config.defaultCategory,this.instanceId=function(t="cg"){return`${t}-${++E}-${Date.now().toString(36)}`}("cg-modal"),this.rateLimiter=new u(this.config.rateLimitMax,this.config.rateLimitWindow)}open(){var t,e,n;this.isOpen||(this.hostEl||this.mount(),this.isOpen=!0,this.mountTime=Date.now(),requestAnimationFrame(()=>{var t;null===(t=this.overlay)||void 0===t||t.classList.add("cg-overlay--visible")}),x++,x>1||(v=window.innerWidth-document.documentElement.clientWidth,w=document.body.style.overflow,y=document.body.style.paddingRight,document.body.style.overflow="hidden",v>0&&(document.body.style.paddingRight=`${v}px`)),this.modalEl&&(this.destroyFocusTrap=function(t){const e=document.activeElement;function n(){return Array.from(t.querySelectorAll(b)).filter(t=>{const e=window.getComputedStyle(t);return"none"!==e.display&&"hidden"!==e.visibility})}function i(e){if("Tab"!==e.key)return;const i=n();if(0===i.length)return void e.preventDefault();const o=i[0],s=i[i.length-1];e.shiftKey?document.activeElement!==o&&t.contains(document.activeElement)||(e.preventDefault(),s.focus()):document.activeElement!==s&&t.contains(document.activeElement)||(e.preventDefault(),o.focus())}return t.addEventListener("keydown",i),requestAnimationFrame(()=>{const t=n();t.length>0&&t[0].focus()}),()=>{if(t.removeEventListener("keydown",i),e&&"function"==typeof e.focus)try{e.focus()}catch(t){}}}(this.modalEl)),this.config.closeOnEscape&&(this.boundEscapeHandler=t=>{"Escape"===t.key&&this.close()},document.addEventListener("keydown",this.boundEscapeHandler)),null===(t=this.overlay)||void 0===t||t.setAttribute("aria-hidden","false"),this.events.emit("open"),null===(n=(e=this.config).onOpen)||void 0===n||n.call(e))}close(){var t,e,n;this.isOpen&&this.overlay&&(this.isOpen=!1,this.overlay.classList.remove("cg-overlay--visible"),this.overlay.setAttribute("aria-hidden","true"),x=Math.max(0,x-1),x>0||(document.body.style.overflow=w,document.body.style.paddingRight=y),null===(t=this.destroyFocusTrap)||void 0===t||t.call(this),this.destroyFocusTrap=null,this.boundEscapeHandler&&(document.removeEventListener("keydown",this.boundEscapeHandler),this.boundEscapeHandler=null),this.events.emit("close"),null===(n=(e=this.config).onClose)||void 0===n||n.call(e),setTimeout(()=>{"idle"!==this.state&&this.setState("idle")},300))}destroy(){this.close(),this.hostEl&&(this.hostEl.remove(),this.hostEl=null,this.shadow=null,this.overlay=null,this.modalEl=null,this.bodyContainer=null)}updateConfig(t){this.config=r(t),this.shadow&&this.applyTheme()}updateTheme(t){t&&(this.config=r({...this.config,theme:{...this.config.theme,...t}}),this.shadow&&this.applyTheme(),this.events.emit("theme-change",t))}getState(){return this.state}isVisible(){return this.isOpen}mount(){this.hostEl=f("div",{id:this.instanceId}),this.hostEl.style.cssText="position:fixed;top:0;left:0;width:0;height:0;overflow:visible;z-index:"+this.config.zIndex,this.shadow=this.hostEl.attachShadow({mode:"open"});const t=document.createElement("style");t.textContent="\n/* ═══ Reset ═══ */\n*, *::before, *::after {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n}\n\n/* ═══ Overlay ═══ */\n.cg-overlay {\n position: fixed;\n inset: 0;\n background: rgba(0, 0, 0, 0.5);\n backdrop-filter: blur(4px);\n -webkit-backdrop-filter: blur(4px);\n z-index: var(--cg-z, 999999);\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 16px;\n opacity: 0;\n visibility: hidden;\n transition: opacity 0.25s ease, visibility 0.25s ease;\n font-family: var(--cg-font);\n color: var(--cg-text);\n line-height: 1.5;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n.cg-overlay--visible {\n opacity: 1;\n visibility: visible;\n}\n\n/* ═══ Modal Shell ═══ */\n.cg-modal {\n background: var(--cg-bg, #FFFFFF);\n border-radius: var(--cg-modal-radius, 16px);\n box-shadow: var(--cg-shadow, 0 25px 60px rgba(0,0,0,0.3));\n width: 100%;\n max-width: 520px;\n max-height: 90vh;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n transform: translateY(20px) scale(0.97);\n opacity: 0;\n transition:\n transform 0.3s cubic-bezier(0.16, 1, 0.3, 1),\n opacity 0.3s cubic-bezier(0.16, 1, 0.3, 1);\n}\n\n.cg-overlay--visible .cg-modal {\n transform: translateY(0) scale(1);\n opacity: 1;\n}\n\n/* ═══ Header ═══ */\n.cg-header {\n background: var(--cg-header-bg, #2C3345);\n color: var(--cg-header-text, #FFFFFF);\n padding: 20px 24px;\n display: flex;\n align-items: center;\n gap: 14px;\n position: relative;\n flex-shrink: 0;\n}\n\n.cg-header__icon {\n width: 40px;\n height: 40px;\n background: rgba(255, 255, 255, 0.12);\n border-radius: 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n.cg-header__icon svg { stroke: var(--cg-header-text, #FFFFFF); }\n\n.cg-header__info { flex: 1; min-width: 0; }\n\n.cg-header__title {\n font-size: 17px;\n font-weight: 600;\n letter-spacing: -0.01em;\n color: inherit;\n}\n\n.cg-header__subtitle {\n font-size: 13px;\n opacity: 0.75;\n margin-top: 2px;\n color: inherit;\n}\n\n/* ── Close Button ── */\n.cg-close-btn {\n position: absolute;\n top: 16px;\n right: 16px;\n width: 32px;\n height: 32px;\n background: rgba(255, 255, 255, 0.1);\n border: none;\n border-radius: 8px;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: background 0.2s;\n color: var(--cg-header-text, #FFFFFF);\n padding: 0;\n}\n.cg-close-btn:hover { background: rgba(255, 255, 255, 0.2); }\n.cg-close-btn:focus-visible {\n outline: 2px solid rgba(255, 255, 255, 0.6);\n outline-offset: 2px;\n}\n.cg-close-btn svg { stroke: var(--cg-header-text, #FFFFFF); }\n\n/* ═══ Body (scrollable) ═══ */\n.cg-body {\n padding: 24px;\n overflow-y: auto;\n flex: 1;\n scrollbar-width: thin;\n scrollbar-color: rgba(0,0,0,0.15) transparent;\n}\n.cg-body::-webkit-scrollbar { width: 6px; }\n.cg-body::-webkit-scrollbar-track { background: transparent; }\n.cg-body::-webkit-scrollbar-thumb {\n background: rgba(0,0,0,0.15);\n border-radius: 3px;\n}\n\n/* ═══ Labels ═══ */\n.cg-label {\n display: block;\n font-size: 13px;\n font-weight: 500;\n color: var(--cg-primary, #EE6055);\n margin-bottom: 6px;\n}\n.cg-label--required::after {\n content: ' *';\n color: var(--cg-primary, #EE6055);\n}\n.cg-label--optional::after {\n content: '(Optional)';\n color: var(--cg-text, #6B7280);\n font-weight: 400;\n margin-left: 4px;\n font-size: 12px;\n}\n\n/* ═══ Categories ═══ */\n.cg-categories {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 8px;\n margin-bottom: 20px;\n}\n\n.cg-cat-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n padding: 10px 12px;\n border: 1.5px solid #E5E7EB;\n border-radius: var(--cg-radius, 8px);\n background: transparent;\n font-size: 13px;\n font-weight: 500;\n color: var(--cg-text, #6B7280);\n cursor: pointer;\n transition: all 0.2s;\n font-family: inherit;\n outline: none;\n}\n.cg-cat-btn:hover {\n border-color: var(--cg-primary, #EE6055);\n color: var(--cg-primary, #EE6055);\n}\n.cg-cat-btn:focus-visible {\n outline: 2px solid var(--cg-primary, #EE6055);\n outline-offset: 2px;\n}\n.cg-cat-btn--active {\n background: var(--cg-primary, #EE6055);\n border-color: var(--cg-primary, #EE6055);\n color: #FFFFFF;\n}\n.cg-cat-btn--active svg { stroke: #FFFFFF; }\n\n/* ═══ Form Fields ═══ */\n.cg-field {\n margin-bottom: 16px;\n}\n\n.cg-input-wrap {\n position: relative;\n display: flex;\n align-items: center;\n}\n\n.cg-input-wrap__icon {\n position: absolute;\n left: 14px;\n display: flex;\n align-items: center;\n pointer-events: none;\n color: var(--cg-input-placeholder, #9CA3AF);\n}\n.cg-input-wrap__icon svg {\n stroke: var(--cg-input-placeholder, #9CA3AF);\n}\n\n.cg-input {\n width: 100%;\n padding: 12px 14px 12px 42px;\n background: var(--cg-input-bg, #1E2535);\n color: var(--cg-input-text, #FFFFFF);\n border: 1.5px solid transparent;\n border-radius: var(--cg-radius, 8px);\n font-size: 14px;\n font-family: inherit;\n outline: none;\n transition: border-color 0.2s, box-shadow 0.2s;\n}\n.cg-input::placeholder {\n color: var(--cg-input-placeholder, #9CA3AF);\n}\n.cg-input:focus {\n border-color: var(--cg-primary, #EE6055);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--cg-primary, #EE6055) 15%, transparent);\n}\n.cg-input--error {\n border-color: #EF4444 !important;\n box-shadow: 0 0 0 3px rgba(239, 68, 68, 0.15) !important;\n}\n\n/* ═══ Textarea ═══ */\n.cg-textarea {\n width: 100%;\n padding: 14px;\n background: var(--cg-input-bg, #1E2535);\n color: var(--cg-input-text, #FFFFFF);\n border: 1.5px solid transparent;\n border-radius: var(--cg-radius, 8px);\n font-size: 14px;\n font-family: inherit;\n outline: none;\n resize: vertical;\n min-height: 120px;\n max-height: 240px;\n transition: border-color 0.2s, box-shadow 0.2s;\n}\n.cg-textarea::placeholder {\n color: var(--cg-input-placeholder, #9CA3AF);\n}\n.cg-textarea:focus {\n border-color: var(--cg-primary, #EE6055);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--cg-primary, #EE6055) 15%, transparent);\n}\n.cg-textarea--error {\n border-color: #EF4444 !important;\n box-shadow: 0 0 0 3px rgba(239, 68, 68, 0.15) !important;\n}\n\n/* ═══ Character Counter ═══ */\n.cg-counter {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 6px;\n}\n.cg-counter__bar {\n flex: 1;\n height: 3px;\n background: #E5E7EB;\n border-radius: 2px;\n overflow: hidden;\n}\n.cg-counter__fill {\n height: 100%;\n background: var(--cg-primary, #EE6055);\n border-radius: 2px;\n transition: width 0.2s;\n}\n.cg-counter__fill--warn { background: #F59E0B; }\n.cg-counter__fill--danger { background: #EF4444; }\n.cg-counter__text {\n font-size: 12px;\n color: var(--cg-text, #6B7280);\n white-space: nowrap;\n}\n\n/* ═══ Field Errors ═══ */\n.cg-error {\n font-size: 12px;\n color: #EF4444;\n margin-top: 4px;\n min-height: 0;\n overflow: hidden;\n max-height: 0;\n opacity: 0;\n transition: max-height 0.2s, opacity 0.2s, margin 0.2s;\n}\n.cg-error--visible {\n max-height: 40px;\n opacity: 1;\n margin-top: 4px;\n}\n\n/* ═══ Honeypot (hidden from humans) ═══ */\n.cg-hp {\n position: absolute;\n left: -9999px;\n top: -9999px;\n width: 1px;\n height: 1px;\n overflow: hidden;\n opacity: 0;\n pointer-events: none;\n tab-index: -1;\n}\n\n/* ═══ Submit Button ═══ */\n.cg-submit {\n width: 100%;\n padding: 14px;\n background: var(--cg-primary, #EE6055);\n color: #FFFFFF;\n border: none;\n border-radius: var(--cg-radius, 8px);\n font-size: 15px;\n font-weight: 600;\n font-family: inherit;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n transition: background 0.2s, transform 0.1s, box-shadow 0.2s;\n margin-top: 8px;\n outline: none;\n}\n.cg-submit svg { stroke: #FFFFFF; }\n.cg-submit:hover:not(:disabled) {\n background: var(--cg-secondary, #D94F44);\n}\n.cg-submit:active:not(:disabled) {\n transform: scale(0.98);\n}\n.cg-submit:focus-visible {\n outline: 2px solid var(--cg-primary, #EE6055);\n outline-offset: 2px;\n}\n.cg-submit:disabled {\n opacity: 0.65;\n cursor: not-allowed;\n}\n\n/* ═══ Spinner ═══ */\n.cg-spinner {\n display: inline-flex;\n animation: cg-spin 0.8s linear infinite;\n}\n.cg-spinner svg { stroke: #FFFFFF; }\n\n/* ═══ Success & Error State Views ═══ */\n.cg-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n text-align: center;\n padding: 40px 24px;\n min-height: 320px;\n animation: cg-fade-in 0.3s ease;\n}\n\n.cg-state__icon {\n margin-bottom: 20px;\n}\n.cg-state__icon--success svg { stroke: #10B981; }\n.cg-state__icon--error svg { stroke: #EF4444; }\n\n.cg-state__title {\n font-size: 20px;\n font-weight: 700;\n color: #1F2937;\n margin-bottom: 8px;\n}\n\n.cg-state__msg {\n font-size: 14px;\n color: var(--cg-text, #6B7280);\n max-width: 320px;\n line-height: 1.6;\n}\n\n.cg-state__btn {\n margin-top: 24px;\n padding: 10px 28px;\n background: var(--cg-primary, #EE6055);\n color: #FFFFFF;\n border: none;\n border-radius: var(--cg-radius, 8px);\n font-size: 14px;\n font-weight: 500;\n font-family: inherit;\n cursor: pointer;\n transition: background 0.2s;\n outline: none;\n}\n.cg-state__btn:hover {\n background: var(--cg-secondary, #D94F44);\n}\n.cg-state__btn:focus-visible {\n outline: 2px solid var(--cg-primary, #EE6055);\n outline-offset: 2px;\n}\n\n/* ═══ Animations ═══ */\n@keyframes cg-spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n}\n\n@keyframes cg-fade-in {\n from { opacity: 0; transform: translateY(8px); }\n to { opacity: 1; transform: translateY(0); }\n}\n\n/* ═══ Responsive ═══ */\n@media (max-width: 480px) {\n .cg-overlay { padding: 0; }\n .cg-modal {\n max-width: 100%;\n max-height: 100%;\n height: 100%;\n border-radius: 0;\n }\n .cg-body { padding: 16px; }\n .cg-categories { gap: 6px; }\n .cg-cat-btn { font-size: 12px; padding: 8px; gap: 5px; }\n .cg-header { padding: 16px 20px; }\n}\n\n/* ═══ Reduced Motion ═══ */\n@media (prefers-reduced-motion: reduce) {\n .cg-overlay,\n .cg-modal,\n .cg-spinner,\n .cg-state,\n .cg-submit,\n .cg-cat-btn,\n .cg-input,\n .cg-textarea,\n .cg-counter__fill,\n .cg-error {\n transition-duration: 0.01ms !important;\n animation-duration: 0.01ms !important;\n }\n}\n\n/* ═══ High Contrast Mode ═══ */\n@media (forced-colors: active) {\n .cg-cat-btn { border: 2px solid ButtonText; }\n .cg-cat-btn--active { background: Highlight; color: HighlightText; }\n .cg-input, .cg-textarea { border: 1px solid ButtonText; }\n .cg-submit { border: 2px solid ButtonText; }\n}\n",this.shadow.appendChild(t),this.overlay=f("div",{className:"cg-overlay",role:"dialog","aria-modal":"true","aria-label":this.config.texts.title,"aria-hidden":"true"}),this.config.closeOnOverlayClick&&this.overlay.addEventListener("click",t=>{t.target===this.overlay&&this.close()}),this.modalEl=f("div",{className:"cg-modal"}),this.modalEl.addEventListener("click",t=>t.stopPropagation()),this.modalEl.appendChild(this.buildHeader()),this.bodyContainer=f("div",{className:"cg-body"}),this.buildFormView(),this.modalEl.appendChild(this.bodyContainer),this.overlay.appendChild(this.modalEl),this.shadow.appendChild(this.overlay),this.applyTheme(),document.body.appendChild(this.hostEl)}applyTheme(){var t;const e=this.overlay||(null===(t=this.shadow)||void 0===t?void 0:t.host);if(!e)return;const n=this.config.theme;!function(t,e){for(const[n,i]of Object.entries(e)){const e=m(i);e&&t.style.setProperty(n,e)}}(e,{"--cg-primary":n.primaryColor,"--cg-secondary":n.secondaryColor,"--cg-bg":n.backgroundColor,"--cg-header-bg":n.headerBackgroundColor,"--cg-header-text":n.headerTextColor,"--cg-text":n.textColor,"--cg-input-bg":n.inputBackgroundColor,"--cg-input-text":n.inputTextColor,"--cg-input-placeholder":n.inputPlaceholderColor,"--cg-radius":n.borderRadius,"--cg-modal-radius":n.modalBorderRadius,"--cg-font":n.fontFamily,"--cg-shadow":n.boxShadow,"--cg-z":String(this.config.zIndex)})}buildHeader(){const t=this.config.texts,e=f("div",{className:"cg-header"}),n=f("div",{className:"cg-header__icon",innerHTML:C.feedback}),i=f("div",{className:"cg-header__info"});i.appendChild(f("h2",{className:"cg-header__title",textContent:t.title,id:`${this.instanceId}-title`})),i.appendChild(f("p",{className:"cg-header__subtitle",textContent:t.subtitle}));const o=f("button",{className:"cg-close-btn","aria-label":"Close dialog",type:"button",innerHTML:C.close});return o.addEventListener("click",()=>this.close()),e.append(n,i,o),e}buildFormView(){if(!this.bodyContainer)return;this.bodyContainer.innerHTML="",this.categoryBtns=[];const t=this.config.texts;if(this.config.showCategories&&this.config.categories.length>1){const e=f("div",{className:"cg-label",textContent:t.categoryLabel,id:`${this.instanceId}-cat-label`});this.bodyContainer.appendChild(e);const n=f("div",{className:"cg-categories",role:"radiogroup","aria-labelledby":`${this.instanceId}-cat-label`});for(let e=0;e<this.config.categories.length;e++){const i=this.config.categories[e],o=t.categories[i]||i,s=i===this.selectedCategory,r=f("button",{className:"cg-cat-btn"+(s?" cg-cat-btn--active":""),type:"button",role:"radio","aria-checked":String(s),tabindex:s?"0":"-1"});r.innerHTML=F(i),r.appendChild(document.createTextNode(" "+o)),r.dataset.type=i,r.addEventListener("click",()=>this.selectCategory(i)),r.addEventListener("keydown",t=>{const n=this.categoryBtns.length;if("ArrowRight"===t.key||"ArrowDown"===t.key){t.preventDefault();const i=this.categoryBtns[(e+1)%n];this.selectCategory(i.dataset.type),i.focus()}else if("ArrowLeft"===t.key||"ArrowUp"===t.key){t.preventDefault();const i=this.categoryBtns[(e-1+n)%n];this.selectCategory(i.dataset.type),i.focus()}}),this.categoryBtns.push(r),n.appendChild(r)}this.bodyContainer.appendChild(n)}const e=this.buildField({label:t.emailLabel,placeholder:t.emailPlaceholder,type:"email",icon:C.email,required:!0,id:`${this.instanceId}-email`,autocomplete:"email"});if(this.emailInput=e.querySelector("input"),this.config.defaultEmail&&(this.emailInput.value=this.config.defaultEmail),this.bodyContainer.appendChild(e),this.config.showNameField){const e=this.buildField({label:t.nameLabel,placeholder:t.namePlaceholder,type:"text",icon:C.user,required:!1,id:`${this.instanceId}-name`,autocomplete:"name"});this.nameInput=e.querySelector("input"),this.config.defaultName&&(this.nameInput.value=this.config.defaultName),this.bodyContainer.appendChild(e)}else this.nameInput=null;const n=this.buildField({label:t.subjectLabel,placeholder:t.subjectPlaceholder,type:"text",icon:C.subject,required:!0,id:`${this.instanceId}-subject`,autocomplete:"off"});this.subjectInput=n.querySelector("input"),this.bodyContainer.appendChild(n);const i=f("div",{className:"cg-field"}),o=f("label",{className:"cg-label cg-label--required",textContent:t.messageLabel});o.setAttribute("for",`${this.instanceId}-msg`),i.appendChild(o),this.messageInput=document.createElement("textarea"),this.messageInput.className="cg-textarea",this.messageInput.id=`${this.instanceId}-msg`,this.messageInput.placeholder=t.messagePlaceholder,this.messageInput.setAttribute("maxlength",String(this.config.maxMessageLength)),this.messageInput.setAttribute("aria-required","true"),this.messageInput.setAttribute("aria-describedby",`${this.instanceId}-char-count`),i.appendChild(this.messageInput);const s=f("div",{className:"cg-counter",id:`${this.instanceId}-char-count`}),r=f("div",{className:"cg-counter__bar"});this.charCountFill=f("div",{className:"cg-counter__fill"}),this.charCountFill.style.width="0%",r.appendChild(this.charCountFill),this.charCountText=f("span",{className:"cg-counter__text",textContent:`0 / ${this.config.maxMessageLength}`,"aria-live":"polite"}),s.append(r,this.charCountText),i.appendChild(s);const a=f("div",{className:"cg-error",role:"alert","aria-live":"polite"});if(i.appendChild(a),this.messageInput.addEventListener("input",()=>this.updateCharCount()),i.dataset.fieldName="message",this.bodyContainer.appendChild(i),this.config.enableHoneypot){const t=f("div",{className:"cg-hp","aria-hidden":"true"});this.honeypotInput=document.createElement("input"),this.honeypotInput.type="text",this.honeypotInput.name="website",this.honeypotInput.tabIndex=-1,this.honeypotInput.autocomplete="off",t.appendChild(this.honeypotInput),this.bodyContainer.appendChild(t)}else this.honeypotInput=null;this.submitBtn=document.createElement("button"),this.submitBtn.className="cg-submit",this.submitBtn.type="button",this.submitBtn.setAttribute("aria-label",t.submitButtonText),this.submitBtn.innerHTML=`${C.send} <span>${t.submitButtonText}</span>`,this.submitBtn.addEventListener("click",()=>this.handleSubmit()),this.bodyContainer.appendChild(this.submitBtn)}buildField(t){const e=f("div",{className:"cg-field"});e.dataset.fieldName=t.id;const n=f("label",{className:t.required?"cg-label cg-label--required":"cg-label cg-label--optional",textContent:t.label});n.setAttribute("for",t.id),e.appendChild(n);const i=f("div",{className:"cg-input-wrap"}),o=f("span",{className:"cg-input-wrap__icon",innerHTML:t.icon,"aria-hidden":"true"}),s=document.createElement("input");s.className="cg-input",s.type=t.type,s.id=t.id,s.placeholder=t.placeholder,s.setAttribute("autocomplete",t.autocomplete),t.required&&(s.setAttribute("aria-required","true"),s.required=!0),s.addEventListener("input",()=>{this.clearFieldError(e)}),i.append(o,s),e.appendChild(i);const r=f("div",{className:"cg-error",role:"alert","aria-live":"polite"});return e.appendChild(r),e}selectCategory(t){this.selectedCategory=t;for(const e of this.categoryBtns){const n=e.dataset.type===t;e.classList.toggle("cg-cat-btn--active",n),e.setAttribute("aria-checked",String(n)),e.tabIndex=n?0:-1}}updateCharCount(){if(!this.messageInput||!this.charCountText||!this.charCountFill)return;const t=this.messageInput.value.length,e=this.config.maxMessageLength,n=Math.min(t/e*100,100);this.charCountFill.style.width=`${n}%`,this.charCountText.textContent=`${t} / ${e}`,this.charCountFill.classList.remove("cg-counter__fill--warn","cg-counter__fill--danger"),n>=95?this.charCountFill.classList.add("cg-counter__fill--danger"):n>=80&&this.charCountFill.classList.add("cg-counter__fill--warn");const i=this.messageInput.closest(".cg-field");i&&this.clearFieldError(i)}validate(){const t=this.config.texts;let e=!0;return!!this.emailInput&&(function(t){if("string"!=typeof t)return!1;const e=t.trim();return!(0===e.length||e.length>254)&&!/[\r\n]/.test(e)&&/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+$/.test(e)}(this.emailInput.value.trim())||(this.showFieldError(this.emailInput,t.invalidEmailError),e&&this.emailInput.focus(),e=!1),!!this.subjectInput&&(p(this.subjectInput.value)||(this.showFieldError(this.subjectInput,t.requiredFieldError),e&&this.subjectInput.focus(),e=!1),!!this.messageInput&&(p(this.messageInput.value)?"string"==typeof(n=this.messageInput.value)&&n.length<=this.config.maxMessageLength||(this.showTextareaError(this.messageInput,t.messageTooLongError),e&&this.messageInput.focus(),e=!1):(this.showTextareaError(this.messageInput,t.requiredFieldError),e&&this.messageInput.focus(),e=!1),e)));var n}showFieldError(t,e){const n=t.closest(".cg-field");if(!n)return;t.classList.add("cg-input--error"),t.setAttribute("aria-invalid","true");const i=n.querySelector(".cg-error");i&&(i.textContent=e,i.classList.add("cg-error--visible"))}showTextareaError(t,e){const n=t.closest(".cg-field");if(!n)return;t.classList.add("cg-textarea--error"),t.setAttribute("aria-invalid","true");const i=n.querySelector(".cg-error");i&&(i.textContent=e,i.classList.add("cg-error--visible"))}clearFieldError(t){const e=t.querySelector("input, textarea");e&&(e.classList.remove("cg-input--error","cg-textarea--error"),e.removeAttribute("aria-invalid"));const n=t.querySelector(".cg-error");n&&(n.textContent="",n.classList.remove("cg-error--visible"))}setState(t){this.state=t,this.events.emit("state-change",t),"idle"===t&&this.bodyContainer&&this.buildFormView()}showStateView(t,e,n){if(!this.bodyContainer)return;this.bodyContainer.innerHTML="";const i=this.config.texts,o=f("div",{className:"cg-state",role:"status","aria-live":"polite"}),s=f("div",{className:`cg-state__icon cg-state__icon--${t}`,innerHTML:"success"===t?C.success:C.error,"aria-hidden":"true"}),r=f("h3",{className:"cg-state__title",textContent:e}),a=f("p",{className:"cg-state__msg",textContent:n}),l=f("button",{className:"cg-state__btn",type:"button",textContent:"success"===t?i.successButtonText:i.errorButtonText});l.addEventListener("click",()=>{"success"===t?this.close():this.setState("idle")}),o.append(s,r,a,l),this.bodyContainer.appendChild(o),requestAnimationFrame(()=>l.focus())}async handleSubmit(){var t,n,i,o,s,r,a;if("loading"===this.state)return;if(!this.validate())return;if(this.config.enableHoneypot&&(null===(t=this.honeypotInput)||void 0===t?void 0:t.value))return this.setState("success"),void this.showStateView("success",this.config.texts.successTitle,this.config.texts.successMessage);if((Date.now()-this.mountTime)/1e3<this.config.minSubmitDelay)return this.setState("success"),void this.showStateView("success",this.config.texts.successTitle,this.config.texts.successMessage);if(!this.rateLimiter.tryConsume()){const t=this.rateLimiter.getRetryAfter(),o=new e(`${this.config.texts.rateLimitError} Try again in ${t}s.`,"RATE_LIMITED");return this.setState("error"),this.showStateView("error",this.config.texts.errorTitle,o.message),null===(i=(n=this.config).onError)||void 0===i||i.call(n,o),void this.events.emit("error",o)}const l={domain:this.config.domain,apiKey:this.config.apiKey,email:g(this.emailInput.value),name:this.nameInput&&g(this.nameInput.value)||void 0,title:g(this.subjectInput.value),type:this.selectedCategory,messageText:g(this.messageInput.value)};if(!this.config.onSubmit||!1!==this.config.onSubmit(l)){this.events.emit("submit",l),this.state="loading",this.events.emit("state-change","loading"),this.submitBtn.disabled=!0,this.submitBtn.innerHTML=`<span class="cg-spinner">${C.spinner}</span> <span>${this.config.texts.submittingText}</span>`;try{const t=await async function(t,n,i){var o;const{timeout:s,retries:r}=i;let a=null;for(let e=0;e<=r;e++){if(e>0){const t=Math.min(1e3*Math.pow(2,e-1),8e3);await d(t)}try{return await c(t,n,s)}catch(t){if(a=h(t),!("NETWORK_ERROR"===a.code||"TIMEOUT"===a.code||"SERVER_ERROR"===a.code&&(null!==(o=a.statusCode)&&void 0!==o?o:0)>=500)||e===r)throw a}}throw a||new e("Unknown error","UNKNOWN")}(this.config.apiBaseUrl,l,{timeout:this.config.requestTimeout,retries:this.config.retryAttempts});this.setState("success"),this.showStateView("success",this.config.texts.successTitle,this.config.texts.successMessage),null===(s=(o=this.config).onSuccess)||void 0===s||s.call(o,t),this.events.emit("success",t),this.config.autoResetDelay>0&&setTimeout(()=>{"success"===this.state&&this.close()},this.config.autoResetDelay)}catch(t){const n=t instanceof e?t:new e(t instanceof Error?t.message:"An unexpected error occurred","UNKNOWN");this.setState("error");let i=this.config.texts.errorMessage;"TIMEOUT"===n.code?i=this.config.texts.timeoutError:"NETWORK_ERROR"===n.code?i=this.config.texts.networkError:"RATE_LIMITED"===n.code?i=this.config.texts.rateLimitError:"VALIDATION_ERROR"===n.code&&n.message&&(i=n.message),this.showStateView("error",this.config.texts.errorTitle,i),null===(a=(r=this.config).onError)||void 0===a||a.call(r,n),this.events.emit("error",n)}}}}class T{constructor(t,e){this.el=null,this.hostEl=null,this.shadow=null,this.config=t,this.onClick=e}mount(){if(this.el)return;this.hostEl=document.createElement("div"),this.hostEl.style.cssText="position:fixed;bottom:0;left:0;width:0;height:0;overflow:visible;z-index:"+(this.config.zIndex-1),this.shadow=this.hostEl.attachShadow({mode:"open"});const t=this.config.triggerPosition,e=this.config.theme,n=document.createElement("style");n.textContent=`\n .cg-trigger {\n position: fixed;\n bottom: 20px;\n ${"bottom-left"===t?"left: 20px;":"right: 20px;"}\n width: 56px;\n height: 56px;\n border-radius: 50%;\n background: ${e.primaryColor};\n color: #FFFFFF;\n border: none;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n box-shadow: 0 4px 14px rgba(0,0,0,0.25);\n transition: transform 0.2s ease, box-shadow 0.2s ease, opacity 0.25s ease;\n z-index: ${this.config.zIndex-1};\n padding: 0;\n outline: none;\n }\n .cg-trigger:hover {\n transform: scale(1.08);\n box-shadow: 0 6px 20px rgba(0,0,0,0.35);\n }\n .cg-trigger:focus-visible {\n outline: 2px solid ${e.primaryColor};\n outline-offset: 3px;\n }\n .cg-trigger:active {\n transform: scale(0.95);\n }\n .cg-trigger svg {\n stroke: #FFFFFF;\n }\n .cg-trigger--hidden {\n opacity: 0;\n pointer-events: none;\n transform: scale(0.8);\n }\n .cg-trigger__label {\n position: absolute;\n ${"bottom-left"===t?"left: 64px;":"right: 64px;"}\n background: #1F2937;\n color: #FFFFFF;\n font-family: ${e.fontFamily};\n font-size: 13px;\n font-weight: 500;\n padding: 6px 12px;\n border-radius: 6px;\n white-space: nowrap;\n pointer-events: none;\n opacity: 0;\n transition: opacity 0.2s;\n box-shadow: 0 2px 8px rgba(0,0,0,0.2);\n }\n .cg-trigger:hover .cg-trigger__label {\n opacity: 1;\n }\n `,this.shadow.appendChild(n),this.el=document.createElement("button"),this.el.className="cg-trigger",this.el.setAttribute("aria-label","Need Help? Contact Support"),this.el.setAttribute("type","button"),this.el.innerHTML=C.trigger;const i=document.createElement("span");i.className="cg-trigger__label",i.textContent="Need Help?",this.el.appendChild(i),this.el.addEventListener("click",this.onClick),this.shadow.appendChild(this.el),document.body.appendChild(this.hostEl)}destroy(){this.el&&this.el.removeEventListener("click",this.onClick),this.hostEl&&(this.hostEl.remove(),this.hostEl=null,this.shadow=null,this.el=null)}show(){var t;null===(t=this.el)||void 0===t||t.classList.remove("cg-trigger--hidden")}hide(){var t;null===(t=this.el)||void 0===t||t.classList.add("cg-trigger--hidden")}updateTheme(t){this.el&&(this.el.style.background=t)}}let _=null,I=null,L=null,M=null;function N(t){_&&B(),"undefined"!=typeof window&&"undefined"!=typeof document?(M=r(t),L=new l,M.onOpen&&L.on("open",M.onOpen),M.onClose&&L.on("close",M.onClose),M.onSuccess&&L.on("success",M.onSuccess),M.onError&&L.on("error",M.onError),_=new k(t,L),M.showTriggerButton&&(I=new T(M,()=>S()),I.mount())):console.warn("[chatgram-widget] Cannot initialize in a non-browser environment.")}function S(){if(!_)throw new e("Call init() before open(). See: https://brandid.app/chatgram","NOT_INITIALIZED");_.open(),null==I||I.hide()}function A(){_&&(_.close(),null==I||I.show())}function B(){null==_||_.destroy(),_=null,null==I||I.destroy(),I=null,null==L||L.removeAllListeners(),L=null,M=null}function O(t){if(!_)throw new e("Call init() before updateTheme().","NOT_INITIALIZED");_.updateTheme(t),t.primaryColor&&(null==I||I.updateTheme(t.primaryColor))}function R(t,e){null==L||L.on(t,e)}function j(t,e){null==L||L.off(t,e)}function z(t,e){null==L||L.once(t,e)}function H(){var t;return null!==(t=null==_?void 0:_.isVisible())&&void 0!==t&&t}function $(){var t;return null!==(t=null==_?void 0:_.getState())&&void 0!==t?t:"uninitialized"}function q(){return"1.0.0"}var D={init:N,open:S,close:A,destroy:B,updateTheme:O,on:R,off:j,once:z,isOpen:H,getState:$,getVersion:q,ChatgramError:e};t.ChatgramError=e,t.close=A,t.default=D,t.destroy=B,t.getState=$,t.getVersion=q,t.init=N,t.isOpen=H,t.off=j,t.on=R,t.once=z,t.open=S,t.updateTheme=O,Object.defineProperty(t,"__esModule",{value:!0})});
|
|
2
|
+
//# sourceMappingURL=chatgram-widget.umd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chatgram-widget.umd.js","sources":["../src/core/types.ts","../src/core/config.ts","../src/core/events.ts","../src/core/api.ts","../src/core/rate-limiter.ts","../src/utils/sanitize.ts","../src/utils/dom.ts","../src/ui/icons.ts","../src/ui/modal.ts","../src/styles/widget-css.ts","../src/ui/trigger.ts","../src/index.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null,null,null],"names":["ChatgramError","Error","constructor","message","code","statusCode","super","this","name","DEFAULT_THEME","primaryColor","secondaryColor","backgroundColor","headerBackgroundColor","headerTextColor","textColor","inputBackgroundColor","inputTextColor","inputPlaceholderColor","borderRadius","modalBorderRadius","fontFamily","boxShadow","DEFAULT_TEXTS","title","subtitle","categoryLabel","emailLabel","emailPlaceholder","nameLabel","namePlaceholder","subjectLabel","subjectPlaceholder","messageLabel","messagePlaceholder","submitButtonText","submittingText","successTitle","successMessage","successButtonText","errorTitle","errorMessage","errorButtonText","requiredFieldError","invalidEmailError","messageTooLongError","networkError","timeoutError","rateLimitError","categories","feedback","bug","feature","support","ALL_CATEGORIES","deepMerge","defaults","overrides","result","key","Object","keys","overrideVal","defaultVal","undefined","Array","isArray","resolveConfig","userConfig","apiKey","trim","domain","window","location","hostname","apiBaseUrl","replace","theme","texts","length","defaultCategory","maxMessageLength","clamp","_a","showTriggerButton","_b","triggerPosition","showNameField","_c","showCategories","_d","zIndex","_e","closeOnOverlayClick","_f","closeOnEscape","_g","enableHoneypot","_h","minSubmitDelay","_j","rateLimitMax","_k","rateLimitWindow","_l","requestTimeout","_m","retryAttempts","_o","autoResetDelay","Math","max","_p","defaultEmail","defaultName","onSuccess","onError","onOpen","onClose","onSubmit","value","min","EventEmitter","listeners","Map","on","event","handler","has","set","Set","get","add","off","delete","once","wrapper","data","emit","handlers","err","console","error","removeAllListeners","clear","async","doRequest","baseUrl","payload","timeout","controller","AbortController","timeoutId","setTimeout","abort","url","response","fetch","method","headers","Accept","body","JSON","stringify","signal","clearTimeout","json","ok","status","success","ticketId","id","_id","DOMException","TypeError","sleep","ms","Promise","resolve","toChatgramError","String","RateLimiter","maxRequests","windowMs","timestamps","tryConsume","now","Date","filter","t","push","getRetryAfter","oldest","retryMs","ceil","reset","sanitizeForPayload","input","isNonEmpty","sanitizeThemeValue","test","isSafeCssValue","el","tag","attrs","children","elem","document","createElement","entries","className","textContent","innerHTML","setAttribute","FOCUSABLE_SELECTOR","join","scrollLockCount","savedScrollbarWidth","savedBodyPaddingRight","savedBodyOverflow","idCounter","ICONS","close","email","user","subject","send","spinner","trigger","warning","getCategoryIcon","type","Modal","config","events","hostEl","shadow","overlay","modalEl","bodyContainer","isOpen","state","mountTime","destroyFocusTrap","boundEscapeHandler","emailInput","nameInput","subjectInput","messageInput","honeypotInput","charCountText","charCountFill","submitBtn","categoryBtns","selectedCategory","instanceId","prefix","toString","uid","rateLimiter","open","mount","requestAnimationFrame","classList","innerWidth","documentElement","clientWidth","style","overflow","paddingRight","container","previouslyFocused","activeElement","getFocusableElements","from","querySelectorAll","getComputedStyle","display","visibility","handleKeyDown","e","focusable","preventDefault","first","last","shiftKey","contains","focus","addEventListener","removeEventListener","createFocusTrap","remove","call","setState","destroy","updateConfig","newConfig","applyTheme","updateTheme","getState","isVisible","cssText","attachShadow","mode","appendChild","role","target","stopPropagation","buildHeader","buildFormView","host","element","vars","prop","safe","setProperty","applyThemeVars","header","iconWrap","textWrap","closeBtn","append","catLabel","catGrid","i","cat","label","isActive","btn","tabindex","createTextNode","dataset","selectCategory","len","next","prev","emailField","buildField","placeholder","icon","required","autocomplete","querySelector","nameField","subjectField","msgField","msgLabel","counter","counterBar","width","msgError","updateCharCount","fieldName","honeypotField","tabIndex","handleSubmit","opts","field","clearFieldError","errorEl","toggle","pct","closest","validate","valid","trimmed","isValidEmail","showFieldError","showTextareaError","textarea","removeAttribute","newState","showStateView","view","titleEl","msgEl","retryAfter","messageText","disabled","options","retries","lastError","attempt","delay","pow","submitTicket","chatgramErr","userMessage","TriggerButton","onClick","pos","tooltip","show","hide","background","modal","resolvedConfig","init","warn","getVersion","index"],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { TicketPayload, TicketResponse } from './types';
|
|
2
|
+
interface ApiOptions {
|
|
3
|
+
timeout: number;
|
|
4
|
+
retries: number;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Submit a ticket to the Chatgram API.
|
|
8
|
+
* Features:
|
|
9
|
+
* - AbortController timeout
|
|
10
|
+
* - Exponential backoff retry (only on 5xx / network errors)
|
|
11
|
+
* - Structured ChatgramError with error codes
|
|
12
|
+
* - Safe JSON parsing
|
|
13
|
+
*/
|
|
14
|
+
export declare function submitTicket(baseUrl: string, payload: TicketPayload, options: ApiOptions): Promise<TicketResponse>;
|
|
15
|
+
export {};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { ChatgramConfig, ChatgramTheme, ChatgramTexts, TicketType, ResolvedConfig } from './types';
|
|
2
|
+
export declare const DEFAULT_THEME: Required<ChatgramTheme>;
|
|
3
|
+
export declare const DEFAULT_TEXTS: Required<ChatgramTexts>;
|
|
4
|
+
export declare const ALL_CATEGORIES: TicketType[];
|
|
5
|
+
export declare const API_BASE_URL = "https://chatgram-server.brandid.app";
|
|
6
|
+
export declare function resolveConfig(userConfig: ChatgramConfig): ResolvedConfig;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { ChatgramEventMap, ChatgramEventHandler } from './types';
|
|
2
|
+
type EventKey = keyof ChatgramEventMap;
|
|
3
|
+
/**
|
|
4
|
+
* Minimal typed event emitter.
|
|
5
|
+
* Supports on/off/once/emit with proper TypeScript inference.
|
|
6
|
+
*/
|
|
7
|
+
export declare class EventEmitter {
|
|
8
|
+
private listeners;
|
|
9
|
+
on<K extends EventKey>(event: K, handler: ChatgramEventHandler<ChatgramEventMap[K]>): void;
|
|
10
|
+
off<K extends EventKey>(event: K, handler: ChatgramEventHandler<ChatgramEventMap[K]>): void;
|
|
11
|
+
once<K extends EventKey>(event: K, handler: ChatgramEventHandler<ChatgramEventMap[K]>): void;
|
|
12
|
+
emit<K extends EventKey>(event: K, data?: ChatgramEventMap[K]): void;
|
|
13
|
+
removeAllListeners(): void;
|
|
14
|
+
}
|
|
15
|
+
export {};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export declare class RateLimiter {
|
|
2
|
+
private timestamps;
|
|
3
|
+
private maxRequests;
|
|
4
|
+
private windowMs;
|
|
5
|
+
constructor(maxRequests: number, windowMs: number);
|
|
6
|
+
/**
|
|
7
|
+
* Attempts to consume a rate limit token.
|
|
8
|
+
* Returns true if allowed, false if rate-limited.
|
|
9
|
+
*/
|
|
10
|
+
tryConsume(): boolean;
|
|
11
|
+
/**
|
|
12
|
+
* Returns seconds until the next token is available.
|
|
13
|
+
*/
|
|
14
|
+
getRetryAfter(): number;
|
|
15
|
+
reset(): void;
|
|
16
|
+
}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Visual theme configuration.
|
|
3
|
+
* All colors accept any valid CSS color value.
|
|
4
|
+
*/
|
|
5
|
+
export interface ChatgramTheme {
|
|
6
|
+
/** Primary accent color (buttons, highlights). Default: '#EE6055' */
|
|
7
|
+
primaryColor?: string;
|
|
8
|
+
/** Secondary color (hover states). Default: '#D94F44' */
|
|
9
|
+
secondaryColor?: string;
|
|
10
|
+
/** Modal body background. Default: '#FFFFFF' */
|
|
11
|
+
backgroundColor?: string;
|
|
12
|
+
/** Modal header background. Default: '#2C3345' */
|
|
13
|
+
headerBackgroundColor?: string;
|
|
14
|
+
/** Header text color. Default: '#FFFFFF' */
|
|
15
|
+
headerTextColor?: string;
|
|
16
|
+
/** Labels and body text color. Default: '#6B7280' */
|
|
17
|
+
textColor?: string;
|
|
18
|
+
/** Input field background. Default: '#1E2535' */
|
|
19
|
+
inputBackgroundColor?: string;
|
|
20
|
+
/** Input field text color. Default: '#FFFFFF' */
|
|
21
|
+
inputTextColor?: string;
|
|
22
|
+
/** Input placeholder color. Default: '#9CA3AF' */
|
|
23
|
+
inputPlaceholderColor?: string;
|
|
24
|
+
/** Border radius for inputs and buttons. Default: '8px' */
|
|
25
|
+
borderRadius?: string;
|
|
26
|
+
/** Border radius for the modal shell. Default: '16px' */
|
|
27
|
+
modalBorderRadius?: string;
|
|
28
|
+
/** Font family stack. Default: system font stack */
|
|
29
|
+
fontFamily?: string;
|
|
30
|
+
/** Modal box shadow. Default: '0 25px 60px rgba(0,0,0,0.3)' */
|
|
31
|
+
boxShadow?: string;
|
|
32
|
+
}
|
|
33
|
+
/** Supported ticket category types */
|
|
34
|
+
export type TicketType = 'feedback' | 'bug' | 'feature' | 'support';
|
|
35
|
+
/**
|
|
36
|
+
* Text and label overrides for i18n / customization.
|
|
37
|
+
*/
|
|
38
|
+
export interface ChatgramTexts {
|
|
39
|
+
title?: string;
|
|
40
|
+
subtitle?: string;
|
|
41
|
+
categoryLabel?: string;
|
|
42
|
+
emailLabel?: string;
|
|
43
|
+
emailPlaceholder?: string;
|
|
44
|
+
nameLabel?: string;
|
|
45
|
+
namePlaceholder?: string;
|
|
46
|
+
subjectLabel?: string;
|
|
47
|
+
subjectPlaceholder?: string;
|
|
48
|
+
messageLabel?: string;
|
|
49
|
+
messagePlaceholder?: string;
|
|
50
|
+
submitButtonText?: string;
|
|
51
|
+
submittingText?: string;
|
|
52
|
+
successTitle?: string;
|
|
53
|
+
successMessage?: string;
|
|
54
|
+
successButtonText?: string;
|
|
55
|
+
errorTitle?: string;
|
|
56
|
+
errorMessage?: string;
|
|
57
|
+
errorButtonText?: string;
|
|
58
|
+
requiredFieldError?: string;
|
|
59
|
+
invalidEmailError?: string;
|
|
60
|
+
messageTooLongError?: string;
|
|
61
|
+
networkError?: string;
|
|
62
|
+
timeoutError?: string;
|
|
63
|
+
rateLimitError?: string;
|
|
64
|
+
categories?: Partial<Record<TicketType, string>>;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Main widget configuration.
|
|
68
|
+
*/
|
|
69
|
+
export interface ChatgramConfig {
|
|
70
|
+
/** Required: Your Chatgram API key */
|
|
71
|
+
apiKey: string;
|
|
72
|
+
/** Override detected domain. Default: window.location.hostname */
|
|
73
|
+
domain?: string;
|
|
74
|
+
/** API base URL. Default: 'https://chatgram-server.brandid.app' */
|
|
75
|
+
apiBaseUrl?: string;
|
|
76
|
+
/** Visual theme overrides */
|
|
77
|
+
theme?: ChatgramTheme;
|
|
78
|
+
/** Text / label overrides */
|
|
79
|
+
texts?: ChatgramTexts;
|
|
80
|
+
/** Which categories to display. Default: all four */
|
|
81
|
+
categories?: TicketType[];
|
|
82
|
+
/** Pre-selected category. Default: 'support' */
|
|
83
|
+
defaultCategory?: TicketType;
|
|
84
|
+
/** Max message characters. Default: 5000 */
|
|
85
|
+
maxMessageLength?: number;
|
|
86
|
+
/** Show floating trigger button. Default: true */
|
|
87
|
+
showTriggerButton?: boolean;
|
|
88
|
+
/** Trigger button position. Default: 'bottom-right' */
|
|
89
|
+
triggerPosition?: 'bottom-right' | 'bottom-left';
|
|
90
|
+
/** Show the optional name field. Default: true */
|
|
91
|
+
showNameField?: boolean;
|
|
92
|
+
/** Show category selector. Default: true */
|
|
93
|
+
showCategories?: boolean;
|
|
94
|
+
/** Modal z-index. Default: 999999 */
|
|
95
|
+
zIndex?: number;
|
|
96
|
+
/** Close modal on overlay click. Default: true */
|
|
97
|
+
closeOnOverlayClick?: boolean;
|
|
98
|
+
/** Close modal on Escape key. Default: true */
|
|
99
|
+
closeOnEscape?: boolean;
|
|
100
|
+
/** Enable anti-spam honeypot field. Default: true */
|
|
101
|
+
enableHoneypot?: boolean;
|
|
102
|
+
/** Minimum seconds before submit is allowed (anti-bot). Default: 2 */
|
|
103
|
+
minSubmitDelay?: number;
|
|
104
|
+
/** Client-side rate limit: max submissions per window. Default: 3 */
|
|
105
|
+
rateLimitMax?: number;
|
|
106
|
+
/** Rate limit window in milliseconds. Default: 300000 (5 min) */
|
|
107
|
+
rateLimitWindow?: number;
|
|
108
|
+
/** API request timeout in ms. Default: 15000 */
|
|
109
|
+
requestTimeout?: number;
|
|
110
|
+
/** Number of retry attempts on failure. Default: 2 */
|
|
111
|
+
retryAttempts?: number;
|
|
112
|
+
/** Auto-reset form after success (ms). 0 = no auto-reset. Default: 0 */
|
|
113
|
+
autoResetDelay?: number;
|
|
114
|
+
/** Pre-fill the email field */
|
|
115
|
+
defaultEmail?: string;
|
|
116
|
+
/** Pre-fill the name field */
|
|
117
|
+
defaultName?: string;
|
|
118
|
+
onSuccess?: (data: TicketResponse) => void;
|
|
119
|
+
onError?: (error: ChatgramError) => void;
|
|
120
|
+
onOpen?: () => void;
|
|
121
|
+
onClose?: () => void;
|
|
122
|
+
onSubmit?: (payload: TicketPayload) => void | boolean;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Payload sent to the Chatgram API.
|
|
126
|
+
*/
|
|
127
|
+
export interface TicketPayload {
|
|
128
|
+
domain: string;
|
|
129
|
+
apiKey: string;
|
|
130
|
+
email: string;
|
|
131
|
+
name?: string;
|
|
132
|
+
title: string;
|
|
133
|
+
type: TicketType;
|
|
134
|
+
messageText: string;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Response from the Chatgram API.
|
|
138
|
+
*/
|
|
139
|
+
export interface TicketResponse {
|
|
140
|
+
success: boolean;
|
|
141
|
+
ticketId?: string;
|
|
142
|
+
message?: string;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Structured error with error code for programmatic handling.
|
|
146
|
+
*/
|
|
147
|
+
export declare class ChatgramError extends Error {
|
|
148
|
+
code: ChatgramErrorCode;
|
|
149
|
+
statusCode?: number;
|
|
150
|
+
constructor(message: string, code: ChatgramErrorCode, statusCode?: number);
|
|
151
|
+
}
|
|
152
|
+
export type ChatgramErrorCode = 'NETWORK_ERROR' | 'TIMEOUT' | 'SERVER_ERROR' | 'VALIDATION_ERROR' | 'RATE_LIMITED' | 'HONEYPOT_TRIGGERED' | 'NOT_INITIALIZED' | 'UNKNOWN';
|
|
153
|
+
/** Internal widget view states */
|
|
154
|
+
export type WidgetState = 'idle' | 'loading' | 'success' | 'error';
|
|
155
|
+
/**
|
|
156
|
+
* Events emitted by the widget for extensibility.
|
|
157
|
+
*/
|
|
158
|
+
export type ChatgramEventMap = {
|
|
159
|
+
'open': void;
|
|
160
|
+
'close': void;
|
|
161
|
+
'submit': TicketPayload;
|
|
162
|
+
'success': TicketResponse;
|
|
163
|
+
'error': ChatgramError;
|
|
164
|
+
'theme-change': ChatgramTheme;
|
|
165
|
+
'state-change': WidgetState;
|
|
166
|
+
};
|
|
167
|
+
export type ChatgramEventHandler<T = unknown> = (data: T) => void;
|
|
168
|
+
/**
|
|
169
|
+
* Fully resolved internal config (all defaults applied).
|
|
170
|
+
*/
|
|
171
|
+
export type ResolvedConfig = Required<Omit<ChatgramConfig, 'onSuccess' | 'onError' | 'onOpen' | 'onClose' | 'onSubmit' | 'defaultEmail' | 'defaultName' | 'theme' | 'texts'>> & {
|
|
172
|
+
theme: Required<ChatgramTheme>;
|
|
173
|
+
texts: Required<ChatgramTexts> & {
|
|
174
|
+
categories: Record<TicketType, string>;
|
|
175
|
+
};
|
|
176
|
+
} & Pick<ChatgramConfig, 'onSuccess' | 'onError' | 'onOpen' | 'onClose' | 'onSubmit' | 'defaultEmail' | 'defaultName'>;
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import './styles/widget.css';
|
|
2
|
+
import type { ChatgramConfig, ChatgramTheme, ChatgramEventMap, ChatgramEventHandler } from './core/types';
|
|
3
|
+
import { ChatgramError } from './core/types';
|
|
4
|
+
export type { ChatgramConfig, ChatgramTheme, ChatgramTexts, TicketType, TicketPayload, TicketResponse, WidgetState, ChatgramErrorCode, ChatgramEventMap, ChatgramEventHandler, } from './core/types';
|
|
5
|
+
export { ChatgramError } from './core/types';
|
|
6
|
+
/**
|
|
7
|
+
* Initializes the Chatgram widget.
|
|
8
|
+
*
|
|
9
|
+
* @param config - Configuration object. `apiKey` is required.
|
|
10
|
+
* @throws {Error} if apiKey is missing
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* init({
|
|
14
|
+
* apiKey: 'your-api-key',
|
|
15
|
+
* theme: { primaryColor: '#EE6055' },
|
|
16
|
+
* onSuccess: (data) => console.log('Ticket:', data),
|
|
17
|
+
* });
|
|
18
|
+
*/
|
|
19
|
+
export declare function init(config: ChatgramConfig): void;
|
|
20
|
+
/**
|
|
21
|
+
* Opens the contact form modal.
|
|
22
|
+
* @throws {ChatgramError} if init() has not been called
|
|
23
|
+
*/
|
|
24
|
+
export declare function open(): void;
|
|
25
|
+
/**
|
|
26
|
+
* Closes the contact form modal.
|
|
27
|
+
*/
|
|
28
|
+
export declare function close(): void;
|
|
29
|
+
/**
|
|
30
|
+
* Removes the widget entirely from the DOM.
|
|
31
|
+
* Call init() again to re-mount.
|
|
32
|
+
*/
|
|
33
|
+
export declare function destroy(): void;
|
|
34
|
+
/**
|
|
35
|
+
* Updates the widget theme at runtime.
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* updateTheme({ primaryColor: '#6366f1', secondaryColor: '#4f46e5' });
|
|
39
|
+
*/
|
|
40
|
+
export declare function updateTheme(theme: ChatgramTheme): void;
|
|
41
|
+
/**
|
|
42
|
+
* Subscribe to widget events.
|
|
43
|
+
*
|
|
44
|
+
* @example
|
|
45
|
+
* on('success', (data) => console.log('Ticket:', data.ticketId));
|
|
46
|
+
* on('error', (err) => console.error(err.code, err.message));
|
|
47
|
+
* on('open', () => analytics.track('widget_opened'));
|
|
48
|
+
*/
|
|
49
|
+
export declare function on<K extends keyof ChatgramEventMap>(event: K, handler: ChatgramEventHandler<ChatgramEventMap[K]>): void;
|
|
50
|
+
/**
|
|
51
|
+
* Unsubscribe from a widget event.
|
|
52
|
+
*/
|
|
53
|
+
export declare function off<K extends keyof ChatgramEventMap>(event: K, handler: ChatgramEventHandler<ChatgramEventMap[K]>): void;
|
|
54
|
+
/**
|
|
55
|
+
* Subscribe to a widget event once (auto-removes after first call).
|
|
56
|
+
*/
|
|
57
|
+
export declare function once<K extends keyof ChatgramEventMap>(event: K, handler: ChatgramEventHandler<ChatgramEventMap[K]>): void;
|
|
58
|
+
/**
|
|
59
|
+
* Returns whether the modal is currently visible.
|
|
60
|
+
*/
|
|
61
|
+
export declare function isOpen(): boolean;
|
|
62
|
+
/**
|
|
63
|
+
* Returns the current widget state.
|
|
64
|
+
*/
|
|
65
|
+
export declare function getState(): string;
|
|
66
|
+
/**
|
|
67
|
+
* Returns the widget version.
|
|
68
|
+
*/
|
|
69
|
+
export declare function getVersion(): string;
|
|
70
|
+
declare const _default: {
|
|
71
|
+
init: typeof init;
|
|
72
|
+
open: typeof open;
|
|
73
|
+
close: typeof close;
|
|
74
|
+
destroy: typeof destroy;
|
|
75
|
+
updateTheme: typeof updateTheme;
|
|
76
|
+
on: typeof on;
|
|
77
|
+
off: typeof off;
|
|
78
|
+
once: typeof once;
|
|
79
|
+
isOpen: typeof isOpen;
|
|
80
|
+
getState: typeof getState;
|
|
81
|
+
getVersion: typeof getVersion;
|
|
82
|
+
ChatgramError: typeof ChatgramError;
|
|
83
|
+
};
|
|
84
|
+
export default _default;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function getWidgetCSS(): string;
|