1"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[2123],{53033:function(e,t,r){r.d(t,{Z:function(){return s}});let s=(0,r(78205).Z)("ImagePlus",[["path",{d:"M21 12v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h7",key:"31hg93"}],["line",{x1:"16",x2:"22",y1:"5",y2:"5",key:"ez7e4s"}],["line",{x1:"19",x2:"19",y1:"2",y2:"8",key:"1gkr8c"}],["circle",{cx:"9",cy:"9",r:"2",key:"af1f0g"}],["path",{d:"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21",key:"1xmnt7"}]])},96527:function(e,t,r){r.d(t,{Z:function(){return s}});let s=(0,r(78205).Z)("Image",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2",key:"1m3agn"}],["circle",{cx:"9",cy:"9",r:"2",key:"af1f0g"}],["path",{d:"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21",key:"1xmnt7"}]])},77096:function(e,t,r){r.d(t,{Z:function(){return s}});let s=(0,r(78205).Z)("Lightbulb",[["path",{d:"M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5",key:"1gvzjb"}],["path",{d:"M9 18h6",key:"x1upvd"}],["path",{d:"M10 22h4",key:"ceow96"}]])},92953:function(e,t,r){r.d(t,{Z:function(){return s}});let s=(0,r(78205).Z)("Send",[["path",{d:"m22 2-7 20-4-9-9-4Z",key:"1q3vgg"}],["path",{d:"M22 2 11 13",key:"nzbqef"}]])},4575:function(e,t,r){r.d(t,{Z:function(){return s}});let s=(0,r(78205).Z)("Square",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}]])},91196:function(e,t,r){r.d(t,{D:function(){return o}});var s=r(51229),n=r(73284),a=r(75856),i=r(26981),l=r(92270);function o(e){let{title:t,description:r,size:o="2xl",busy:c=!1,submitDisabled:u=!1,submitLabel:d="Enregistrer",onClose:m,onSubmit:p,children:f,secondaryAction:h,notice:g}=e;return(0,s.jsx)(l.Vq,{open:!0,onOpenChange:e=>{e||c||m()},children:(0,s.jsx)(l.cZ,{size:o,hiddenCloseIcon:!0,"data-form-dialog":!0,overlayClass:"bg-black/50 backdrop-blur-[2px]",className:"flex max-h-[calc(100dvh-2rem)] flex-col gap-0 overflow-hidden rounded-xl bg-card p-0",onEscapeKeyDown:e=>{c&&e.preventDefault()},onInteractOutside:e=>{c&&e.preventDefault()},children:(0,s.jsxs)("form",{onSubmit:p,"aria-busy":c,className:"flex min-h-0 flex-1 flex-col",children:[(0,s.jsxs)(l.fK,{className:"shrink-0 border-b px-5 py-4 pr-14 text-left sm:px-6 sm:pr-14",children:[(0,s.jsx)(l.$N,{className:"leading-6",children:t}),r?(0,s.jsx)(l.Be,{className:"break-words leading-5",children:r}):(0,s.jsx)(l.Be,{className:"sr-only",children:t})]}),(0,s.jsx)(i.z,{type:"button",variant:"ghost",size:"icon-sm",disabled:c,onClick:m,"aria-label":"Fermer le formulaire",className:"absolute right-3 top-3",children:(0,s.jsx)(n.Z,{size:18})}),(0,s.jsx)("div",{"data-form-dialog-body":!0,className:"min-h-0 flex-1 overflow-y-auto overscroll-contain px-5 py-5 sm:px-6",children:(0,s.jsx)("fieldset",{disabled:c,className:"min-w-0 space-y-5 disabled:opacity-60",children:f})}),(0,s.jsxs)("div",{className:"shrink-0 border-t bg-card px-5 py-3.5 sm:px-6","data-form-dialog-actions":!0,children:[g&&(0,s.jsx)("div",{className:"mb-3",children:g}),(0,s.jsxs)(l.cN,{className:"flex-row items-center justify-end",children:[h&&(0,s.jsx)("div",{className:"mr-auto",children:h}),(0,s.jsx)(i.z,{type:"button",variant:"ghost",disabled:c,onClick:m,children:"Annuler"}),(0,s.jsxs)(i.z,{type:"submit",disabled:c||u,children:[c&&(0,s.jsx)(a.Z,{size:14,className:"animate-spin"}),d]})]})]})]})})})}},63458:function(e,t,r){let s;r.r(t),r.d(t,{UnifiedChatWidget:function(){return W}});var n=r(51229),a=r(10066),i=r(3513),l=r(6020),o=r(12774),c=r(1870),u=r(93949),d=r(77096),m=r(75856),p=r(92953),f=r(26981),h=r(85124),g=r(95587),x=r(79411),v=r(41312),b=r(42833),y=r(31117),j=r(79992),w=r(4517),N=r(96130),z=r(53033),k=r(4575);let S=(0,r(78205).Z)("Mic",[["path",{d:"M12 2a3 3 0 0 0-3 3v7a3 3 0 0 0 6 0V5a3 3 0 0 0-3-3Z",key:"131961"}],["path",{d:"M19 10v2a7 7 0 0 1-14 0v-2",key:"1vc78b"}],["line",{x1:"12",x2:"12",y1:"19",y2:"22",key:"x3vr5v"}]]);var C=r(73284),R=r(91196),D=r(92270),M=r(63644),A=r(69982),E=r(75621);let q=E.z.object({area:E.z.enum(["workspace","gsc","ga4","crawl","reports","account","mcp","other"]),feature:E.z.string().trim().min(1).max(100),subject:E.z.string().trim().min(1).max(100),title:E.z.string().trim().min(3).max(180),description:E.z.string().trim().min(10).max(4e3),kind:E.z.enum(["bug","feature","improvement","question"]),priority:E.z.enum(["low","normal","high"]),clarification:E.z.string().max(600).default("")}),_=E.z.object({id:E.z.string().uuid(),kind:E.z.enum(["bug","improvement","question"]),text:E.z.string().trim().min(10,"D\xe9crivez votre retour en quelques mots (10 caract\xe8res minimum).").max(4e3),source_url:E.z.string().trim().max(2e3).refine(e=>{if(!e)return!0;try{let t=new URL(e);return["http:","https:"].includes(t.protocol)&&!t.username&&!t.password}catch(e){return!1}},"Indiquez une adresse http ou https valide."),attachments:E.z.array(E.z.string().uuid()).max(4).refine(e=>new Set(e).size===e.length).default([])});function T(e){let{stream:t}=e,r=(0,a.useRef)(null),[s,i]=(0,a.useState)(0),[l,o]=(0,a.useState)(!0);return(0,a.useEffect)(()=>{let e,s;let n=Date.now(),a=setInterval(()=>i(Math.floor((Date.now()-n)/1e3)),1e3),l,c=0,u=!1,d=[],m=r.current,p=window.matchMedia("(prefers-reduced-motion: reduce)").matches,f=()=>{u=!0,clearInterval(a),cancelAnimationFrame(c),null==s||s.disconnect(),null==l||l.disconnect(),e&&"closed"!==e.state&&e.close().catch(()=>{})};if(!m)return f;try{let r=window.AudioContext||window.webkitAudioContext;if(!r)return o(!1),f;(l=(e=new r).createAnalyser()).fftSize=256,(s=e.createMediaStreamSource(t)).c
1onnect(l);let n=new Uint8Array(l.fftSize),a=m.getContext("2d");if(!a)return o(!1),f;let i=0,h=0,g=0,x=0,v,b=0,y=e=>{if(u||(c=requestAnimationFrame(y),p&&e-i<250||document.hidden))return;let t=i?Math.min(e-i,250):16;i=e;let r=m.clientWidth,s=m.clientHeight,o=Math.min(window.devicePixelRatio||1,2);if(!r||!s)return;for((m.width!==Math.round(r*o)||m.height!==Math.round(s*o))&&(m.width=Math.round(r*o),m.height=Math.round(s*o)),a.setTransform(o,0,0,o,0,0),a.clearRect(0,0,r,s),l.getByteTimeDomainData(n),g+=(function(e){if(!e.length)return 0;let t=0;for(let r=0;r<e.length;r++){let s=(e[r]-128)/128;t+=s*s}return Math.min(1,4*Math.sqrt(t/e.length))}(n)-g)*(1-Math.exp(-t/80)),x=Math.max(x,g),(!h||e-h>=200)&&(d.push({time:e,level:x}),h=e,x=g);d.length&&e-d[0].time>20200;)d.shift();if(v&&b===r||((v=a.createLinearGradient(0,0,r,0)).addColorStop(0,"#8b5cf6"),v.addColorStop(.55,"#ec8cbb"),v.addColorStop(1,"#fb923c"),b=r),a.fillStyle=v,p){a.fillRect(0,s/2-2,Math.max(3,r*g),4);return}let f=Math.max(1,Math.min(3,200*r/2e4*.6));for(let t of d){let n=r*(1-(e-t.time)/2e4),i=Math.max(2,t.level*(s-4));a.globalAlpha=t.level>.025?.95:.3,a.beginPath(),a.roundRect(n-f,(s-i)/2,f,i,f/2),a.fill()}a.globalAlpha=1;let j=Math.max(2,g*(s-4));a.fillRect(r-f,(s-j)/2,f,j)};e.resume().then(()=>{u||(o(!0),c=requestAnimationFrame(y))}).catch(()=>{u||o(!1)})}catch(e){o(!1)}return f},[t]),(0,n.jsxs)("div",{className:"flex h-8 min-w-0 flex-1 items-center gap-2 overflow-hidden rounded-lg bg-gradient-to-r from-violet-500/[0.06] via-pink-400/[0.06] to-orange-400/[0.06] px-2",title:l?"Dict\xe9e en cours \xb7 20 secondes dâhistorique \xb7 transcription \xe0 lâarr\xeat":"Micro actif, indicateur sonore indisponible",children:[(0,n.jsx)("canvas",{ref:r,className:"h-6 min-w-0 flex-1","aria-label":"Niveau sonore du microphone sur les vingt derni\xe8res secondes",role:"img"}),(0,n.jsxs)("span",{className:"shrink-0 text-[10px] tabular-nums text-muted-foreground",children:[Math.floor(s/60),":",String(s%60).padStart(2,"0")]}),(0,n.jsxs)("span",{className:"sr-only",children:["Dict\xe9e en cours. Le texte appara\xeetra \xe0 lâarr\xeat.",!l&&" Indicateur sonore indisponible."]})]})}E.z.object({answer:E.z.string().trim().min(1).max(6e3),requests:E.z.array(q.extend({id:E.z.string().uuid().optional()})).max(30)});let Z=e=>"cuik:feedback-draft:".concat(e),I=e=>!!(e.text.trim()||e.images.length||e.pending);function V(e){let{userId:t,locale:r,url:i,onClose:l,inline:o=!1,initialKind:p="bug",onSubmitted:g}=e,[x,v]=(0,a.useState)(()=>(function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"bug";if((null==s?void 0:s.userId)===e&&I(s.draft)&&Date.now()-s.draft.saved<828e5)return s.draft;try{let t=JSON.parse(sessionStorage.getItem(Z(e))||"null");if(t&&Date.now()-t.saved<828e5&&["bug","improvement","question"].includes(t.kind)&&"string"==typeof t.text&&"string"==typeof t.source_url&&Array.isArray(t.images)&&t.images.length<=4&&t.images.every(e=>e&&"string"==typeof e.id&&"string"==typeof e.name&&"string"==typeof e.mime)&&(!t.pending||_.safeParse(t.pending).success)&&I(t))return t}catch(e){}return{kind:r,text:"",source_url:t,images:[],saved:Date.now()}})(t,i,p)),[b,y]=(0,a.useState)(!1),[E,q]=(0,a.useState)(!1),[V,F]=(0,a.useState)(""),[P,L]=(0,a.useState)(null),[U,K]=(0,a.useState)(!1),[H,J]=(0,a.useState)(""),W=(0,a.useRef)(!1),$=(0,a.useRef)(!1),B=(0,a.useRef)(!0),G=(0,a.useRef)(null),Q=(0,a.useRef)(),X=(0,a.useRef)(),Y=function(e,t){let r=(0,a.useRef)({onText:e,onError:t});r.current={onText:e,onError:t};let[s,n]=(0,a.useState)(!1),[i,l]=(0,a.useState)(!1),[o,c]=(0,a.useState)(null),[u,d]=(0,a.useState)(!1),[m,p]=(0,a.useState)(null),f=(0,a.useRef)(null),h=(0,a.useRef)(),g=(0,a.useRef)(!1),x=(0,a.useRef)(!1),v=(0,a.useRef)(!1),b=(0,a.useRef)();async function y(e){if(!v.current){v.current=!0,d(!0),r.current.onError(""),b.current=new AbortController;try{let t=new FormData;t.append("file",e);let s=await (0,j.m$)("/transcribe",t,void 0,b.current.signal);g.current&&(r.current.onText(s.text),p(null))}catch(e){g.current&&r.current.onError(e.message)}finally{v.current=!1,g.current&&d(!1)}}}async function w(){if(f.current){"inactive"!==f.current.state&&f.current.stop();return}if(!x.current&&!v.current){x.current=!0,l(!0);try{var e;let t;if(!(null===(e=navigator.mediaDevices)||void 0===e?void 0:e.getUserMedia)||"undefined"==typeof MediaRecorder)throw Error("La dict\xe9e nâest pas disponible dans ce navigateur. Vous pouvez \xe9crire votre retour.");let s=await navigator.mediaDevices.getUserMedia({audio:!0});
1if(!g.current){s.getTracks().forEach(e=>e.stop());return}let a=["audio/webm;codecs=opus","audio/mp4","audio/webm","audio/ogg;codecs=opus"].find(e=>MediaRecorder.isTypeSupported(e));try{t=new MediaRecorder(s,a?{mimeType:a}:void 0)}catch(e){throw s.getTracks().forEach(e=>e.stop()),e}f.current=t;let i=[],l=0;t.ondataavailable=e=>{e.data.size&&(i.push(e.data),(l+=e.data.size)>9437184&&"inactive"!==t.state&&t.stop())},t.onstop=()=>{if(clearTimeout(h.current),s.getTracks().forEach(e=>e.stop()),f.current=null,!g.current)return;n(!1),c(null);let e=new Blob(i,{type:t.mimeType});p(e),e.size&&y(e)},t.onerror=()=>{g.current&&r.current.onError("Dict\xe9e interrompue. Vous pouvez continuer par \xe9crit."),"inactive"!==t.state&&t.stop(),s.getTracks().forEach(e=>e.stop())};try{t.start(1e3)}catch(e){throw f.current=null,s.getTracks().forEach(e=>e.stop()),e}n(!0),c(s),r.current.onError(""),h.current=setTimeout(()=>{"inactive"!==t.state&&t.stop()},18e4)}catch(e){g.current&&r.current.onError("Microphone indisponible ou autorisation refus\xe9e. Vous pouvez continuer par \xe9crit.")}finally{x.current=!1,g.current&&l(!1)}}}return(0,a.useEffect)(()=>(g.current=!0,()=>{var e;g.current=!1,clearTimeout(h.current),null===(e=b.current)||void 0===e||e.abort();let t=f.current;t&&(t.onstop=null,t.onerror=null,"inactive"!==t.state&&t.stop(),t.stream.getTracks().forEach(e=>e.stop()))}),[]),{recording:s,requesting:i,recordingStream:o,transcribing:u,audio:m,transcribe:y,toggleRecording:w}}(e=>v(t=>({...t,text:t.text+(t.text?" ":"")+e})),F),ee=Y.recording||Y.requesting||Y.transcribing;(0,a.useEffect)(()=>(B.current=!0,()=>{var e,t;B.current=!1,null===(e=Q.current)||void 0===e||e.abort(),null===(t=X.current)||void 0===t||t.abort()}),[]),(0,a.useEffect)(()=>{if(o||R.D,!P){s={userId:t,draft:{...x,saved:Date.now()}};try{sessionStorage.setItem(Z(t),JSON.stringify(s.draft))}catch(e){}}},[x,t,P]);let et=b||!!x.pending;async function er(e){if(!$.current&&!W.current&&!x.pending&&e.length){if(x.images.length+e.length>4){F("Vous pouvez joindre jusquâ\xe0 4 captures.");return}if(e.some(e=>!["image/png","image/jpeg","image/webp"].includes(e.type)||e.size>5242880)){F("Choisissez des images PNG, JPEG ou WebP de 5 Mo maximum.");return}$.current=!0,q(!0),F(""),Q.current=new AbortController;try{for(let t of e){let e=new FormData;e.append("file",t);let r=await (0,j.m$)("/attachments",e,void 0,Q.current.signal);if(!B.current)return;v(e=>({...e,images:[...e.images,r.attachment]}))}}catch(e){B.current&&F(e.message)}finally{$.current=!1,B.current&&q(!1),G.current&&(G.current.value="")}}}async function es(){if(W.current||$.current||ee)return;let e=_.safeParse(x.pending||{id:crypto.randomUUID(),kind:x.kind,text:x.text,source_url:x.source_url,attachments:x.images.map(e=>e.id)});if(!e.success){var r;F(x.text.length>4e3?"Votre texte d\xe9passe 4 000 caract\xe8res. Raccourcissez-le avant lâenvoi.":(null===(r=e.error.issues[0])||void 0===r?void 0:r.message)||"V\xe9rifiez votre message et la page concern\xe9e.");return}let n=e.data;try{sessionStorage.setItem(Z(t),JSON.stringify({...x,pending:n,saved:Date.now()}))}catch(e){}v(e=>({...e,pending:n})),W.current=!0,y(!0),F("");try{let e=await (0,j.m$)("/submit",n);s=void 0;try{sessionStorage.removeItem(Z(t))}catch(e){}B.current&&(L(e),null==g||g(e))}catch(e){if(B.current){F(e.message||"Envoi non confirm\xe9. R\xe9essayez, votre retour est conserv\xe9.");let t=e.status;t&&[400,401,403,404,413,429].includes(t)&&v(e=>({...e,pending:void 0}))}}finally{W.current=!1,B.current&&y(!1)}}async function en(){if(P&&!U){K(!0),F(""),X.current=new AbortController;try{let t=await (0,j.m$)("/".concat(P.thread.id,"/analyze"),{},void 0,X.current.signal);if(B.current){var e;L(t),J((null===(e=t.messages.filter(e=>"assistant"===e.role).at(-1))||void 0===e?void 0:e.text)||"Vous pouvez ajouter des pr\xe9cisions dans votre retour.")}}catch(e){B.current&&F("Lâassistant est indisponible pour le moment. Votre retour est bien transmis ; vous pouvez le compl\xe9ter plus tard.")}finally{B.current&&K(!1)}}}let ea=o?O:R.D;return P?(0,n.jsx)(D.Vq,{open:!0,onOpenChange:e=>{e||l()},children:(0,n.jsxs)(D.cZ,{size:"xl",className:"flex max-h-[calc(100dvh-2rem)] flex-col overflow-hidden bg-card",children:[(0,n.jsxs)(D.fK,{className:"text-left pr-6",children:[(0,n.jsxs)(D.$N,{className:"flex items-center gap-2",children:[(0,n.jsx)(N.Z,{className:"h-5 w-5 text-primary"}),"Votre retour est bien transmis"]}),(0,n.jsx)(D.Be,{children:"Merci ! Votre message et vos captures sont conserv\xe9s dans vos retours priv\xe9s."})]}),(0,n.jsxs)("div",{className:"min-h-0 space-y-4 overflow-y-auto text-sm",children:[H?(0,n.jsx)("p",{className:"whitespace-pre-wrap break-words leading-6",children:H}):(0,n.jsx)("p",{className:"text-muted-foreground",children:"Câest tout pour lâenvoi. Si vous le souhaitez, lâassistant peut vous aider \xe0 pr\xe9ciser ce qui sâest pass\xe9."}),V&&(0,n.jsx)("p",{role:"alert",className:"text-muted-foreground",children:V}),!H&&(0,n.jsxs)(f.z,{variant:"outline",disabled:U,onClick:()=>void en(),children:[U&&(0,n.jsx)(m.Z,{className:"h-4 w-4 animate-spin"}),U?"Lecture du retourâ¦":"Pr\xe9ciser avec lâassistant"]})]}),(0,n.jsxs)("div",{className:"flex shrink-0 flex-wrap items-center justify-between gap-3 border-t pt-4",children:[(0,n.jsx)(w.default,{href:"/".concat(r,"/feedback?thread=").concat(P.thread.id),className:"text-sm underline underline-offset-4",onClick:l,children:H?"R\xe9pondre et suivre mon retour":"Voir mon retour"}),(0,n.jsx)(f.z,{onClick:l,children:"Fermer"})]})]})}):(0,n.jsxs)(ea,{title:"Une nouvelle demande",description:"Dites-nous ce qui pourrait mieux fonctionner. M\xeame quelques lignes nous aident.",size:"xl",busy:b,submitLabel:x.pending?"R\xe9essayer lâenvoi":"Envoyer mon retour",submitDisabled:E||ee||x.text.trim().length<10,onClose:l,onSubmit:e=>{e.preventDefault(),es()},notice:V?(0,n.jsx)("p",{role:"alert",className:"text-sm text-destructive",children:V}):(0,n.jsx)("p",{className:"text-xs text-muted-foreground",children:"Retour priv\xe9, visible par vous et lâ\xe9quipe Cuik."}),children:[(0,n.jsxs)("div",{role:"group","aria-label":"Type de retour",className:"flex flex-wrap gap-2",children:[(0,n.jsxs)(f.z,{type:"button",size:"sm",variant:"question"===x.kind?"soft":"outline","aria-pressed":"question"===x.kind,disabled:et,onClick:()=>v(e=>({...e,kind:"question"})),children:[(0,n.jsx)(c.Z,{size:16}),"Question"]}),(0,n.jsxs)(f.z,{type:"button",variant:"bug"===x.kind?"soft":"outline",size:"sm","aria-label":"Signaler un bug","aria-pressed":"bug"===x.kind,disabled:et,onClick:()=>v(e=>({...e,kind:"bug"})),children:[(0,n.jsx)(u.Z,{size:16}),(0,n.jsx)("span",{className:"sm:hidden",children:"Un bug"}),(0,n.jsx)("span",{className:"hidden sm:inline",children:"Signaler un bug"})]}),(0,n.jsxs)(f.z,{type:"button",variant:"improvement"===x.kind?"soft":"outline",size:"sm","aria-label":"Proposer une id\xe9e","aria-pressed":"improvement"===x.kind,disabled:et,onClick:()=>v(e=>({...e,kind:"improvement"})),children:[(0,n.jsx)(d.Z,{size:16}),(0,n.jsx)("span",{className:"sm:hidden",children:"Une id\xe9e"}),(0,n.jsx)("span",{className:"hidden sm:inline",children:"Proposer une id\xe9e"})]})]}),(0,n.jsxs)("div",{className:"space-y-2",onDragOver:e=>{e.dataTransfer.types.includes("Files")&&e.preventDefault()},onDrop:e=>{e.dataTransfer.files.length&&(e.preventDefault(),er(Array.from(e.dataTransfer.files)))},children:[(0,n.jsx)(A._,{htmlFor:"feedback-text",children:"bug"===x.kind?"Que sâest-il pass\xe9 ?":"question"===x.kind?"Comment pouvons-nous vous aider ?":"Quâaimeriez-vous am\xe9liorer ?"}),(0,n.jsx)(h.g,{id:"feedback-text",autoFocus:!0,rows:o?4:5,maxLength:4e3,value:x.text,disabled:et||Y.recording,onChange:e=>v(t=>({...t,text:e.target.value})),onPaste:e=>{e.clipboardData.files.length&&(e.preventDefault(),er(Array.from(e.clipboardData.files)))},placeholder:"bug"===x.kind?"Jâessayais de⦠maisâ¦\nJe mâattendais plut\xf4t \xe0â¦":"question"===x.kind?"Jâaimerais savoir commentâ¦":"Ce serait utile de pouvoirâ¦",className:"min-h-[130px] resize-y"}),(0,n.jsxs)("div",{className:"flex flex-wrap items-center gap-1",children:[(0,n.jsx)("input",{ref:G,type:"file",accept:"image/png,image/jpeg,image/webp",multiple:!0,className:"hidden","aria-label":"Captures \xe0 joindre",onCh
1ange:e=>void er(Array.from(e.target.files||[]))}),(0,n.jsxs)(f.z,{type:"button",variant:"ghost",size:"sm",disabled:et||E,onClick:()=>{var e;return null===(e=G.current)||void 0===e?void 0:e.click()},children:[E?(0,n.jsx)(m.Z,{size:16,className:"animate-spin"}):(0,n.jsx)(z.Z,{size:16}),"Ajouter une capture"]}),(0,n.jsxs)(f.z,{type:"button",variant:"ghost",size:"sm",disabled:et||Y.requesting||Y.transcribing,"aria-pressed":Y.recording,onClick:()=>void Y.toggleRecording(),children:[Y.recording?(0,n.jsx)(k.Z,{size:16}):(0,n.jsx)(S,{size:16}),Y.recording?"Arr\xeater la dict\xe9e":Y.transcribing?"Transcriptionâ¦":Y.requesting?"Acc\xe8s au microâ¦":"Dicter"]}),Y.recordingStream&&(0,n.jsx)(T,{stream:Y.recordingStream})]}),Y.audio&&!Y.transcribing&&(0,n.jsx)(f.z,{type:"button",size:"sm",variant:"ghost",disabled:et,onClick:()=>void Y.transcribe(Y.audio),children:"R\xe9essayer la transcription"}),x.images.length?(0,n.jsx)("ul",{className:"flex flex-wrap gap-2",children:x.images.map(e=>(0,n.jsxs)("li",{className:"relative w-24 rounded-lg border bg-muted/30 p-1",children:[(0,n.jsx)("img",{src:"/api/feedback/attachments/".concat(e.id),alt:e.name,className:"h-16 w-full rounded object-contain"}),(0,n.jsx)("p",{className:"truncate pt-1 text-[10px]",title:e.name,children:e.name}),(0,n.jsx)(f.z,{type:"button",size:"icon-sm",variant:"outline",className:"absolute -right-2 -top-2 h-6 w-6 bg-card","aria-label":"Retirer ".concat(e.name),disabled:et||E,onClick:()=>v(t=>({...t,images:t.images.filter(t=>t.id!==e.id)})),children:(0,n.jsx)(C.Z,{size:12})})]},e.id))}):(0,n.jsx)("p",{className:"text-xs text-muted-foreground",children:"Vous pouvez aussi coller ou d\xe9poser une image ici. 4 images maximum, 5 Mo chacune."})]}),(0,n.jsxs)("details",{className:"space-y-2",children:[(0,n.jsx)("summary",{className:"cursor-pointer text-sm text-muted-foreground",children:"Page concern\xe9e \xb7 modifier le lien"}),(0,n.jsx)(A._,{htmlFor:"feedback-url",className:"sr-only",children:"Page concern\xe9e"}),(0,n.jsx)(M.I,{id:"feedback-url",type:"url",maxLength:2e3,value:x.source_url,disabled:et,onChange:e=>v(t=>({...t,source_url:e.target.value}))}),(0,n.jsx)("p",{className:"text-xs text-muted-foreground",children:"La vue ouverte au d\xe9but de votre retour. Vous pouvez modifier ce lien."})]}),!!x.pending&&!b&&(0,n.jsx)("p",{className:"text-xs text-muted-foreground",children:"Lâenvoi pr\xe9c\xe9dent nâa pas \xe9t\xe9 confirm\xe9. R\xe9essayez : le m\xeame retour sera repris, sans doublon."})]})}function O(e){let{onSubmit:t,onClose:r,children:s,notice:a,busy:i,submitDisabled:l,submitLabel:o}=e;return(0,n.jsxs)("form",{onSubmit:t,"aria-busy":i,className:"flex min-h-0 flex-1 flex-col",children:[(0,n.jsx)("div",{className:"min-h-0 flex-1 space-y-5 overflow-y-auto p-5",children:s}),(0,n.jsxs)("div",{className:"shrink-0 space-y-3 border-t bg-card p-4",children:[a,(0,n.jsxs)("div",{className:"flex justify-between gap-2",children:[(0,n.jsx)(f.z,{type:"button",variant:"ghost",onClick:r,children:"Retour au chat"}),(0,n.jsxs)(f.z,{type:"submit",disabled:i||l,children:[i&&(0,n.jsx)(m.Z,{size:16,className:"animate-spin"}),o]})]})]})]})}var F=r(62509),P=r(3694),L=r(91797);let U=new Map,K=e=>"cuik:support-reply:".concat(e);function H(e,t){U.set(e,t);try{sessionStorage.setItem(K(e),JSON.stringify({text:t.text,pending:t.pending,saved:Date.now()}))}catch(e){}}let J={open:"Re\xe7ue",in_progress:"En cours",resolved:"R\xe9solue",archived:"Archiv\xe9e"};function W(e){let{userEmail:t,embedded:r=!1}=e,{isChatOpen:s,setIsChatOpen:a}=(0,x.m)(),{user:i}=(0,v.useDashboardUser)();return r?(0,n.jsx)("section",{"data-support-page":!0,"aria-label":"Aide et support",className:"mx-auto flex h-[calc(100dvh-9rem)] min-h-[420px] max-w-4xl flex-col overflow-hidden rounded-xl border bg-card",children:(0,n.jsx)($,{userEmail:t,embedded:!0},null==i?void 0:i.id)}):(0,n.jsx)(g.yo,{open:s,onOpenChange:a,children:(0,n.jsxs)(g.ue,{className:"flex w-full flex-col gap-0 bg-card p-0 sm:max-w-[500px]",overlayClass:"bg-black/15",children:[(0,n.jsx)(g.bC,{className:"sr-only",children:"Aide & support"}),(0,n.jsx)(g.Ei,{className:"sr-only",children:"Conversation priv\xe9e avec lâ\xe9quipe, bugs et id\xe9es."}),(0,n.jsx)($,{userEmail:t},null==i?void 0:i.id)]})})}function $(e){let{userEmail:t,embedded:r=!1}=e,{user:s}=(0,v.useDashboardUser)(),{sourceUrl:g,setUnreadCount:N}=(0,x.m)(),z=(0,i.usePathname)(),k=(0,i.useSearchParams)(),S=(null==z?void 0:z.startsWith("/en/"))?"en":"fr",C=function(e){let{userEmail:t,userType:r,conversationId:s}=e,[n,i]=(0,a.useState)(null),[l,o]=(0,a.useState)([]),[c,u]=(0,a.useState)(!0),[d,m]=(0,a.useState)(null),[p,f]=(0,a.useState)(!1),[h,g]=(0,a.useState)(!1),[x,v]=(0,a.useState)(0),j=(0,a.useRef)(null),w=(0,a.useRef)(null),N=(0,a.useRef)(null),z=(0,a.useRef)(null),k=(0,a.useRef)(0),S=function(e,t){let[r,s]=(0,a.useState)(e);return(0,a.useEffect)(()=>{let r=setTimeout(()=>{s(e)},t);return()=>{clearTimeout(r)}},[e,t]),r}(p,300);(0,a.useEffect)(()=>{k.current+=1;let e=!1;return i(null),o([]),m(null),v(0),(async()=>{try{let n;if(u(!0),"user"===r){if(!t||!t.trim()){console.warn("[CHAT HOOK] â ï¸ No user email provided, skipping chat initialization"),u(!1);return}n=await b.A.getOrCreateConversation(t)}else{if(!s)return;n=await b.A.getConversation(s)}if(e)return;i(n);let a=await b.A.getMessages(n.id);if(e)return;o(e=>(0,y.O)(e,a));let l="user"===r?n.unread_count_user:n.unread_count_support;v(l)}catch(t){console.error("[CHAT HOOK] â Failed to initialize chat:",t),e||m(t instanceof Error?t.message:"Failed to initialize chat")}finally{e||u(!1)}})(),()=>{e=!0,k.current+=1}},[t,r,s]),(0,a.useEffect)(()=>
1{if(!(null==n?void 0:n.id)||"support"===r&&n.id!==s)return;let e=()=>{j.current&&(j.current.unsubscribe(),j.current=null),w.current&&(w.current.unsubscribe(),w.current=null),N.current&&(N.current.unsubscribe(),N.current=null)};return e(),j.current=b.A.subscribeToMessages(n.id,e=>{o(t=>t.some(t=>t.id===e.id)?t:[...t,e]),e.sender_type!==r&&v(e=>e+1)},e=>{o(t=>(0,y.O)(t,e))}),w.current=b.A.subscribeToTypingIndicators(n.id,e=>{e.user_type!==r&&g(e.is_typing)}),N.current=b.A.subscribeToConversation(n.id,e=>{i(e),v("user"===r?e.unread_count_user:e.unread_count_support)}),e},[null==n?void 0:n.id,s,r]),(0,a.useEffect)(()=>{n&&null!==S&&(async()=>{try{await b.A.updateTypingIndicator(n.id,S,r)}catch(e){console.error("Failed to update typing indicator:",e)}})()},[S,null==n?void 0:n.id,r]);let C=(0,a.useCallback)(async(e,t)=>{if(!n||!e.trim()&&!t)return;let s=k.current;try{let a;if(f(!1),z.current&&clearTimeout(z.current),a=t?await b.A.sendMessageWithImage(n.id,e||"Image",r,t):await b.A.sendMessage(n.id,e,r),s!==k.current)return;o(e=>e.some(e=>e.id===a.id)?e:[...e,a])}catch(e){throw s===k.current&&m(e instanceof Error?e.message:"Failed to send message"),e}},[n,r]),R=(0,a.useCallback)(async()=>{if(!n)return;let e=k.current;try{if(await b.A.markMessagesAsRead(n.id,r),e!==k.current)return;v(0),"user"===r?i(e=>e?{...e,unread_count_user:0}:null):i(e=>e?{...e,unread_count_support:0}:null)}catch(e){console.error("Failed to mark messages as read:",e)}},[n,r]);return{conversation:n,messages:l,loading:c,error:d,sendMessage:C,isTyping:h,unreadCount:x,markAsRead:R,handleTyping:(0,a.useCallback)(()=>{p||f(!0),z.current&&clearTimeout(z.current),z.current=setTimeout(()=>{f(!1)},3e3)},[p])}}({userEmail:t||(null==s?void 0:s.email)||"",userType:"user"}),[R,D]=(0,a.useState)(()=>r&&"history"===k.get("view")?"requests":"chat"),[M,A]=(0,a.useState)("question"),[E,q]=(0,a.useState)([]),[_,T]=(0,a.useState)([]),[Z,I]=(0,a.useState)(()=>(function(e){if(U.has(e))return U.get(e);try{let t=JSON.parse(sessionStorage.getItem(K(e))||"null");if(t&&"string"==typeof t.text&&Date.now()-t.saved<864e5)return t}catch(e){}return{text:""}})((null==s?void 0:s.id)||"")),[O,W]=(0,a.useState)(!1),[$,B]=(0,a.useState)(""),[G,Q]=(0,a.useState)(!1),[X,Y]=(0,a.useState)(()=>r?k.get("thread"):null),[ee,et]=(0,a.useState)(""),er=(0,a.useRef)(null),es=(0,a.useRef)(!1),en=(0,a.useRef)(!0),ea=(0,a.useRef)(!0),ei=(0,y.O)(C.messages,_);function el(e){A(e),et(g||window.location.href),B(""),D("new")}async function eo(){if(C.conversation&&!es.current&&(Z.text.trim()||Z.image||Z.pending)){es.current=!0,W(!0),B("");try{let e=Z.pending;if(!e){let t=Z.image?await b.A.uploadImage(Z.image):void 0;e={id:crypto.randomUUID(),text:Z.text.trim(),imageUrl:t},(null==s?void 0:s.id)&&H(s.id,{...Z,pending:e}),en.current&&I(t=>({...t,pending:e}))}let t=await b.A.sendMessageWithImage(C.conversation.id,e.text,"user",e.imageUrl,e.id);if(null==s?void 0:s.id){U.delete(s.id);try{sessionStorage.removeItem(K(s.id))}catch(e){}}en.current&&(ea.current=!0,T(e=>(0,y.O)(e,[t])),I({text:""}))}catch(e){en.current&&B(e.message||"Envoi non confirm\xe9. R\xe9essayez : votre message est conserv\xe9.")}finally{es.current=!1,en.current&&W(!1)}}}return(0,a.useEffect)(()=>(en.current=!0,()=>{en.current=!1}),[]),(0,a.useEffect)(()=>{(null==s?void 0:s.id)&&H(s.id,Z)},[Z,null==s?void 0:s.id]),(0,a.useEffect)(()=>{if("requests"!==R)return;let e=new AbortController;return Q(!0),B(""),(0,j.m$)("",void 0,void 0,e.signal).then(t=>{e.signal.aborted||q(t.threads)}).catch(t=>{e.signal.aborted||B(t.message)}).finally(()=>{e.signal.aborted||Q(!1)}),()=>e.abort()},[R]),(0,a.useEffect)(()=>{"chat"!==R||C.loading||document.hidden||!C.unreadCount||(C.markAsRead(),N(0))},[R,C.loading,C.unreadCount,C.markAsRead,N]),(0,a.useEffect)(()=>{let e=er.current;if(e&&"chat"===R){if(X){let t=e.querySelector('[data-request="'.concat(CSS.escape(X),'"]'));if(t){t.scrollIntoView({block:"center"}),Y(null);return}}ea.current&&(e.scrollTop=e.scrollHeight)}},[ei.length,R,X]),(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("header",{className:"shrink-0 border-b px-5 pb-0 pt-5",children:[(0,n.jsxs)("div",{className:"flex items-center gap-3 pr-8",children:[(0,n.jsx)("img",{src:"/images/support-avatar.jpg",alt:"Kevin",className:"h-11 w-11 rounded-full object-cover"}),(0,n.jsxs)("div",{children:[(0,n.jsx)("h2",{className:"font-semibold",children:"Kevin \xb7 Cuik"}),(0,n.jsx)("p",{className:"mt-0.5 text-xs text-muted-foreground",children:"Aide & support"})]})]}),(0,n.jsx)("p",{className:"mt-3 text-sm text-muted-foreground",children:"Une question, un bug, une id\xe9e ? \xc9crivez-moi ici."}),(0,n.jsxs)("nav",{"aria-label":"Support",className:"mt-4 flex gap-5 text-sm",children:[["chat","requests"].map(e=>(0,n.jsx)("button",{onClick:()=>{D(e),B("")},"aria-current":R===e?"page":void 0,className:(0,L.cn)("border-b-2 pb-3",R===e?"border-foreground font-medium":"border-transparent text-muted-foreground"),children:"chat"===e?"Conversation":"Mes demandes"},e)),!r&&(0,n.jsx)(w.default,{href:"/".concat(S,"/feedback"),className:"ml-auto text-muted-foreground","aria-label":"Ouvrir le support en pleine page",children:(0,n.jsx)(l.Z,{size:18})})]})]}),"new"===R&&s?(0,n.jsx)(V,{inline:!0,initialKind:M,userId:s.id,locale:S,url:ee,onClose:()=>D("chat"),onSubmitted:()=>{ea.current=!0,D("chat"),C.conversation&&b.A.getMessages(C.conversation.id).then(e=>{en.current&&T(e)}).catch(()=>{})}}):"requests"===R?(0,n.jsxs)("div",{className:"min-h-0 flex-1 overflow-y-auto p-5",children:[(0,n.jsxs)("div",{className:"mb-4 flex items-center justify-between gap-2",children:[(0,n.jsx)("p",{className:"text-sm text-muted-foreground",children:"Vos demandes et leur suivi."}),(0,n.jsxs)(f.z,{size:"sm",variant:"outline",onClick:()=>el("question"),children:[(0,n.jsx)(o.Z,{size:15}),"Nouvelle demande"]})]}),$&&(0,n.jsx)("p",{role:"alert",className:"mb-3 text-sm text-destructive",children:$}),G?(0,n.jsx)("p",{role:"status",className:"text-sm text-muted-foreground",children:"Chargementâ¦"}):E.length?(0,n.jsx)("ul",{className:"divide-y",children:E.map(e=>(0,n.jsx)("li",{children:(0,n.jsxs)("button",{onClick:()=>{Y(e.id),ea.current=!1,D("chat")},className:"w-full py-4 text-left hover:text-primary",children:[(0,n.jsx)("span",{className:"block text-sm font-medium break-words",children:e.title}),(0,n.jsxs)("span",{className:"mt-2 flex gap-3 text-xs text-muted-foreground",children:[(0,n.jsx)("span",{children:J[e.issue_status||""]||(e.submitted?"Re\xe7ue":"\xc0 pr\xe9ciser")}),(0,n.jsx)("time",{children:new Date(e.updated_at).toLocaleDateString("fr-FR")})]})]})},e.id))}):(0,n.jsx)("p",{className:"py-8 text-sm text-muted-foreground",children:"Aucune demande pour le moment. Vous pouvez nous \xe9crire dans la conversation."})]}):(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("div",{ref:er,onScroll:()=>{let e=er.current;e&&(ea.current=e.scrollHeight-e.scrollTop-e.clientHeight<80)},className:"min-h-0 flex-1 space-y-4 overflow-y-auto p-5",role:"log","aria-label":"Messages du support",children:C.loading?(0,n.jsx)("p",{role:"status",className:"text-sm text-muted-foreground",children:"Chargement de la conversationâ¦"}):ei.length?ei.map(e=>(0,n.jsx)("article",{"data-request":e.feedback_thread_id||void 0,className:(0,L.cn)("flex","user"===e.sender_type?"justify-end":"justify-start"),children:(0,n.jsxs)("div",{className:(0,L.cn)("max-w-[92%] min-w-0 rounded-xl px-4 py-3 text-sm","user"===e.sender_type?"bg-muted":"border bg-card"),children:["support"===e.sender_type&&(0,n.jsx)("p",{className:"mb-1 text-xs font-medium",children:"Kevin"}
1),e.feedback_thread_id&&(0,n.jsx)("p",{className:"mb-2 text-xs text-muted-foreground",children:"Demande enregistr\xe9e"}),(0,n.jsx)("p",{className:"whitespace-pre-wrap break-words leading-6 [overflow-wrap:anywhere]",children:e.message}),(0,n.jsx)(P.g,{message:e}),(0,n.jsx)("time",{className:"mt-2 block text-[11px] text-muted-foreground",children:new Date(e.created_at).toLocaleString("fr-FR",{day:"2-digit",month:"short",hour:"2-digit",minute:"2-digit"})})]})},e.id)):(0,n.jsxs)("div",{className:"py-8",children:[(0,n.jsx)(c.Z,{className:"mb-4 h-7 w-7 text-muted-foreground"}),(0,n.jsx)("h3",{className:"font-medium",children:"Bonjour ! Comment puis-je vous aider ?"}),(0,n.jsx)("p",{className:"mt-2 text-sm leading-6 text-muted-foreground",children:"\xc9crivez-moi ci-dessous. Vous pouvez aussi signaler un bug ou proposer une id\xe9e, avec des captures et une dict\xe9e vocale."})]})}),(0,n.jsxs)("div",{className:"shrink-0 space-y-3 border-t bg-card p-4 pb-[max(1rem,env(safe-area-inset-bottom))]",children:[($||C.error)&&(0,n.jsx)("p",{role:"alert",className:"text-sm text-destructive",children:$||C.error}),(0,n.jsxs)("div",{className:"flex flex-wrap gap-2",children:[(0,n.jsxs)(f.z,{variant:"outline",size:"sm",onClick:()=>el("bug"),children:[(0,n.jsx)(u.Z,{size:14}),"Signaler un bug"]}),(0,n.jsxs)(f.z,{variant:"outline",size:"sm",onClick:()=>el("improvement"),children:[(0,n.jsx)(d.Z,{size:14}),"Proposer une id\xe9e"]})]}),(0,n.jsxs)("form",{onSubmit:e=>{e.preventDefault(),eo()},className:"space-y-2",children:[(0,n.jsx)(h.g,{"aria-label":"Votre message",placeholder:"\xc9crivez votre messageâ¦",rows:3,maxLength:2e4,className:"min-h-20 resize-none",value:Z.text,disabled:O||!!Z.pending,onChange:e=>I(t=>({...t,text:e.target.value})),onKeyDown:e=>{"Enter"===e.key&&(e.metaKey||e.ctrlKey)&&(e.preventDefault(),eo())}}),(0,n.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,n.jsx)(F.U,{onImageRemove:()=>I(e=>({...e,image:void 0})),onImageSelect:e=>I(t=>({...t,image:e||void 0})),selectedImage:Z.image||null,disabled:O||!!Z.pending}),(0,n.jsxs)(f.z,{type:"submit",size:"sm",disabled:O||C.loading||!C.conversation||!Z.text.trim()&&!Z.image&&!Z.pending,children:[O?(0,n.jsx)(m.Z,{size:15,className:"animate-spin"}):(0,n.jsx)(p.Z,{size:15}),Z.pending&&!O?"R\xe9essayer":"Envoyer"]})]})]})]})]})]})}},66382:function(e,t,r){r.d(t,{f:function(){return l}});var s=r(10066),n=r(31929),a=r(51229),i=Object.defineProperty,l=s.forwardRef(i(function(e,t){return(0,a.jsx)(n.WV.label,{...e,ref:t,onMouseDown:t=>{var r;t.target.closest("button, input, select, textarea")||(null===(r=e.onMouseDown)||void 0===r||r.call(e,t),!t.defaultPrevented&&t.detail>1&&t.preventDefault())}})},"name",{value:"Label",configurable:!0}))}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.