1 2!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="f3871488-2a0a-5d08-bf45-850d9b486ef5")}catch(e){}}(); 3import{a as Oe,b as Ue,c as Re}from"./chunk-IRFZTFB6.js";import{a as Be,b as Ne}from"./chunk-W5YL5VGR.js";import{a as re}from"./chunk-7HJMZUSI.js";import{a as q}from"./chunk-OPWZR4IS.js";import{e as Ve,f as Le,g as je}from"./chunk-QDBGDYKO.js";import{p as Te,q as Pe,s as Ae}from"./chunk-SBM3DHN4.js";import{b as $,h as Se,m as ke}from"./chunk-AKHHFTQX.js";import{b as Ie,c as De}from"./chunk-V2TYL6WZ.js";import{b as Ce,d as Me,h as Fe,i as Ee}from"./chunk-KLH2IKYX.js";import{a as xe}from"./chunk-MD4DXQLO.js";import{b as oe,ba as ye,ca as we,da as ve,g as se,h as ce,ia as j,j as le,l as de,m as me,s as pe,u as ue,w as he}from"./chunk-LSNO5HZ2.js";import{$ as O,W as fe,Y as ge,_ as be,ba as U,ca as R}from"./chunk-ZNUREHCD.js";import{a as _e,b as V,d as L}from"./chunk-P7ZY72I6.js";import{i as ne}from"./chunk-GPJRIZB4.js";import{$b as Y,$c as ie,Ac as d,Bc as f,Cc as D,Da as v,Ia as X,Mb as T,Pc as p,Qc as u,Sb as C,Tb as M,Vc as S,Yb as F,Zb as o,_b as l,db as J,fa as k,gb as c,gc as G,ka as h,kc as b,mc as H,ra as y,sa as w,uc as Z,vc as ee,wb as N,xc as te}from"./chunk-7LIUMG6J.js";import{b as P,c as ae}from"./chunk-VDGN6CCQ.js";import{k as m}from"./chunk-PSG3WUG7.js";var K="picsa_feedback_show_fab",qe=(()=>{class n{constructor(){this.showFloatingFab=v(this.loadPreference())}setShowFloatingFab(e){this.showFloatingFab.set(e);try{localStorage.setItem(K,String(e))}catch{}}enableOnFirstMenuOpen(){try{localStorage.getItem(K)===null&&this.setShowFloatingFab(!0)}catch{}}loadPreference(){try{return localStorage.getItem(K)==="true"}catch{return!1}}static{this.\u0275fac=function(t){return new(t||n)}}static{this.\u0275prov=k({token:n,factory:n.\u0275fac,providedIn:"root"})}}return n})();var We={title:"feedback_queue",version:0,keyCompression:!1,type:"object",properties:{id:{type:"string"},type:{type:"string"},comment:{type:"string"},device_info:{type:"object",additionalProperties:{type:"string"}},screenshot_base64:{type:"string"},screenshot_type:{type:"string"},screen_path:{type:"string"},status:{type:"string",default:"pending"},retry_count:{type:"integer",default:0},last_attempt_at:{type:"string"},server_id:{type:"string"},screenshot_path:{type:"string"},created_at:{type:"string"}},primaryKey:"id",required:["id","type","comment","device_info","status","retry_count","created_at"]},Ye={schema:We,isUserCollection:!0,syncPush:!1};var Ge=Ye;var He=(()=>{class n{constructor(){this.networkService=h(q),this.translateService=h(_e)}collect(){return m(this,null,function*(){let e=(i,a=64)=>{if(i!=null)return i.length>a?i.slice(0,a):i},t={app_version:e(re),screen_size:e(`${window.screen.width}x${window.screen.height}`),network_status:e(this.networkService.isOnline()?"online":"offline"),locale:e(this.translateService.currentLang||navigator.language)};if(P.isNativePlatform()){try{let i=yield $.getInfo();t.os=e(i.platform),t.os_version=e(i.osVersion,200),t.device_model=e(i.model)}catch{t.os="unknown"}try{let i=yield $.getId();t.device_id=e(i.identifier)}catch{}}else t.os=e(navigator.platform||"web"),t.os_version=e(navigator.userAgent,200);return t})}static{this.\u0275fac=function(t){return new(t||n)}}static{this.\u0275prov=k({token:n,factory:n.\u0275fac,providedIn:"root"})}}return n})();function $e(n){try{let r=atob(n.substring(0,12));if(r.codePointAt(0)===137&&r.codePointAt(1)===80&&r.codePointAt(2)===78&&r.codePointAt(3)===71)return"image/png";if(r.codePointAt(0)===255&&r.codePointAt(1)===216&&r.codePointAt(2)===255)return"image/jpeg";if(r.startsWith("RIFF")&&r.substring(8,12)==="WEBP")return"image/webp"}catch{}return"image/png"}function B(n){let r=/^data:([^;]+);base64,(.*)$/.exec(n);return r?{base64:r[2],type:r[1]}:null}function Ke(n,r){let e=atob(n),t=new Uint8Array(e.length);for(let i=0;i<e.length;i++)t[i]=e.codePointAt(i)??0;return new Blob([t],{type:r})}function Q(n){return new Promise((r,e)=>{let t=new Image;t.onload=()=>r(t),t.onerror=e,t.src=n})}function Qe(n,r=3145728){return m(this,null,function*(){let e=yield Q(n),t=e.naturalWi
3dth,i=e.naturalHeight,a=1920;t>a&&(i=Math.round(i*a/t),t=a);let s=document.createElement("canvas");s.width=t,s.height=i,s.getContext("2d").drawImage(e,0,0,t,i);let E="image/jpeg",_=.9,x=s.toDataURL(E,_);for(;x.length*.75>r&&_>.3;)_=Math.round((_-.1)*10)/10,x=s.toDataURL(E,_);let I=B(x);if(!I)throw new Error("Failed to encode downscaled image");if(I.base64.length*.75>r)throw new Error("That image is too large. Please choose a smaller one.");return I})}function ze(n,r,e=3145728){return m(this,null,function*(){if(n.length*.75<=e)return{base64:n,type:r};let t=n.startsWith("data:")?n:`data:${r};base64,${n}`;return Qe(t,e)})}var it=3e4,nt=36e5,at=5,W=(()=>{class n extends Se{constructor(){super(...arguments),this.dbService=h(Te),this.networkService=h(q),this.supabaseService=h(ke),this.deviceInfoService=h(He),this.draining=!1}init(){return m(this,null,function*(){yield this.dbService.ready(),yield this.dbService.ensureCollections({feedback_queue:Ge}),this.collection=this.dbService.db.collections.feedback_queue;let e=yield this.collection.find({selector:{status:"submitting"}}).exec();for(let t of e)yield this.updateDoc(t,{status:"pending"});this.networkListener=yield xe.addListener("networkStatusChange",t=>{t.connected&&t.connectionType!=="none"&&this.drain().catch(z)}),this.retryTimer=setInterval(()=>this.drain().catch(z),3e4),yield this.drain().catch(z)})}ngOnDestroy(){this.retryTimer&&(clearInterval(this.retryTimer),this.retryTimer=void 0),this.networkListener?.remove(),this.networkListener=void 0}submit(e){return m(this,null,function*(){if(yield this.ready(),yield this.findUnsentDuplicate(e))return"pending";let i=yield this.deviceInfoService.collect(),a={id:crypto.randomUUID(),type:e.type,comment:e.comment,device_info:i,screenshot_base64:e.screenshot_base64,screenshot_type:e.screenshot_type,screen_path:e.screen_path,status:"pending",retry_count:0,created_at:new Date().toISOString()};if(yield this.collection.insert(a),!this.networkService.isOnline())return"pending";let s=yield this.drain();if(s.has(a.id))throw s.get(a.id);let g=yield this.collection.findOne({selector:{id:a.id}}).exec();return g&&g._data.status==="submitted"?"submitted":"failed"})}drain(){return m(this,null,function*(){let e=new Map;if(this.draining)return e;this.draining=!0;try{let t=yield this.collection.find({selector:{status:{$in:["pending","failed"]}}}).exec();for(let i of t){let a=i._data;if(this.shouldAttempt(a)){yield this.updateDoc(i,{status:"submitting"});try{let s=yield this.pushToServer(a);yield this.updateDoc(i,{status:"submitted",server_id:s.id,screenshot_path:s.screenshot_path??void 0,screenshot_base64:void 0,screenshot_type:void 0,last_attempt_at:new Date().toISOString()})}catch(s){console.error("[Feedback] submit failed",s),yield this.updateDoc(i,{status:"failed",retry_count:a.retry_count+1,last_attempt_at:new Date().toISOString()}),s?.__picsaServerError&&e.set(a.id,s)}}}}finally{this.draining=!1}return e})}updateDoc(e,t){return m(this,null,function*(){Object.assign(e._data,t),yield this.collection.bulkUpsert([e._data])})}shouldAttempt(e){if(e.retry_count>=at)return!1;if(e.status==="pending"||!e.last_attempt_at)return!0;let t=Date.now()-new Date(e.last_attempt_at).getTime(),i=Math.min(it*2**e.retry_count,nt);return t>=i}pushToServer(e){return m(this,null,function*(){let t=new FormData;t.append("type",e.type),t.append("comment",e.comment),t.append("device_info",JSON.stringify(e.device_info)),e.screen_path&&t.append("screen_path",e.screen_path),e.screenshot_base64&&e.screenshot_type&&t.append("screenshot",Ke(e.screenshot_base64,e.screenshot_type),"screenshot.png"),yield this.supabaseService.ready();try{let i=yield this.supabaseService.invokeFunction("feedback",{body:t});if(!i)throw new Error("[Feedback] Supabase function not available");return i}catch(i){if(this.isNetworkFailure(i))throw i;let a=this.extractServerMessage(i),s=new Error(a);throw s.__picsaServerError=!0,s}})}isNetworkFailure(e){if(e?.__picsaNetworkError===!0||this.networkService.isNetworkError(e))return!0;let t=(e instanceof Error?e.message:String(e)).toLowerCase();return t.includes("not running locally")||t.includes("endpoint is not running")||t.includes("not available")}extractServerMessage(e){let t=e instanceof Error?e.message:String(e);if(t.startsWith('"')&&t.endsWith('"'))try{let i=JSON.parse(t);if(typeof i=="string")return i}catch{}return t}findUnsentDuplicate(e){return m(this,null,function*(){return(yield this.collection.find({selector:{status:{$in:["pending","submitting"]}}}).exec()).some(({_data:i})=>i.type===e.type&&i.comment===e.comment&&i.screen_path===e.screen_path&&i.screenshot_base64===e.screenshot_base64)})}static{this.\u0275fac=(()=>{let e;return function(i){return(e||(e=X(n)))(i||n)}})()}static{this.\u0275prov=k({token:n,factory:n.\u0275fac,providedIn:"root"})}}return n})(),z=()=>{};var Xe=ae("Screenshot",{web:()=>import("./web-VGU7EFG5.js").then(n=>new n.ScreenshotWeb)});var ot=3145728,Je=(()=>{class n{capture(){return m(this,null,function*(){let e=()=>m(null,null,function*(){if(P.isNativePlatform()){yield new Promise(a=>setTimeout(a,150));let{uri:i}=yield Xe.take();try{let{data:a}=yield Ae.readFile({path:i}),s=a;return{base64:s,type:$e(s)}}catch{return null}}let t=yield st();return B(t)});try{return yield ct(e)}catch(t){if(t?.message==="WEB_SCREENSHOT_SECURITY_ERROR")throw t;return null}})}attachFromGallery(e){return m(this,null,function*(){try{if(P.isNativePlatform())try{let t=yield je.getPhoto({source:Ve.Photos,resultType:Le.DataUrl,quality:80});if(!t.dataUrl)return{status:"cancelled"};let i=B(t.dataUrl);return i?{status:"ok",screenshot:i}:{status:"error",message:"That image couldn't be read. Please try another one."}}catch{return{status:"cancelled"}}return e?new Promise(t=>{e.value="";let i=!1,a=_=>{i||(i=!0,clearTimeout(s),t(_))},s=setTimeout(()=>a({status:"cancelled"}),6e4),g=()=>{e.removeEventListener("change",g),e.removeEventListener("cancel",E);let _=e.files?.[0];if(!_){a({status:"cancelled"});return}if(!_.type.startsWith("image/")){a({status:"error",message:"Please choose an image file (PNG, JPG or WebP)."});return}let x=new FileReader;x.onload=()=>{e.value="";let I=B(x.result);a(I?{status:"ok",screenshot:I}:{status:"error",message:"That image couldn't be read. Please try another one."})},x.onerror=()=>a({status:"error",message:"That image couldn't be read. Please try another one."}),x.readAsDataURL(_)},E=()=>{e.removeEventListener("change",g),e.removeEventListener("cancel",E),a({status:"cancelled"})};e.addEventListener("change",g),e.addEventListener("cancel",E),e.click()}):{status:"cancelled"}}catch{return{status:"error",message:"We couldn't attach that image. Please try again."}}})}downscaleBase64(a,s){return m(this,arguments,function*(e,t,i=ot){return ze(e,t,i)})}static{this.\u0275fac=function(t){return new(t||n)}}static{this.\u0275prov=k({token:n,factory:n.\u0275fac,providedIn:"root"})}}return n})();function st(){return m(this,null,function*(){let n=Math.max(document.body.scrollWidth,window.innerWidth),r=Math.max(document.body.scrollHeight,window.innerHeight),e=document.body.cloneNode(!0);Ze(document.body,e),e.setAttribute("xmlns","http://www.w3.org/1999/xhtml");let t=`<svg xmlns="http://www.w3.org/2000/svg" width="${n}" height="${r}"><foreignObject width="100%" height="100%">${new XMLSerializer().serializeToString(e)}</foreignObject></svg>`,i=yield Q(`data:image/svg+xml;charset=utf-8,${encodeURIComponent(t)}`),a=document.createElement("canvas");a.width=n,a.height=r,a.getContext("2d")?.drawImage(i,0,0);try{return a.toDataURL("image/png")}catch(s){throw s?.name==="SecurityError"?new Error("WEB_SCREENSHOT_SECURITY_ERROR"):s}})}function Ze(n,r){let e=getComputedStyle(n),t="";for(let i of Array.from(e))t+=`${i}:${e.getPropertyValue(i)};`;r.setAttribute("style",t);for(let i=0;i<n.children.length;i++)Ze(n.children[i],r.children[i])}function ct(n){return m(this,null,function*(){let r=Array.from(document.querySelectorAll(".cdk-overlay-container, picsa-feedback-fab")),e=r.map(t=>t.style.display);r.forEach(t=>t.style.display="none");try{return yield lt(),yield n()}finally{r.forEach((t,i)=>t.style.display=e[i])}})}function lt(){return new Promise(n=>{requestAnimationFrame(()=>requestAnimationFrame(()=>n()))})}var ut=["fileInput"];function ht(n,r){n&1&&(d(0),p(1,"translate")),n&2&&D(" ",u(1,1,"Taking screenshot\u2026")," ")}function ft(n,r){n&1&&(o(0,"span",16)(1,"mat-icon"),d(2,"screenshot"),l(),o(3,"span"),d(4),p(5,"translate"),l()()),n&2&&(c(4),f(u(5,1,"Capture screen")))}function gt(n,r){if(n&1){let e=G();o(0,"div",17),Y(1,"img",29),p(2,"translate"),o(3,"button",30),p(4,"translate"),b("click",function(){y(e);let i=H();return w(i.removeScreenshot())}),o(5,"mat-icon",31),d(6,"close"),l()()()}if(n&2){let e=r;c(),F("src","data:"+e.type+";base64,"+e.base64,J)("alt",u(2,3,"Screenshot preview")),c(2),T("aria-label",u(4,5,"Remove screenshot"))}}function bt(n,r){n&1&&(o(0,"div",23),d(1),p(2,"translate"),l()),n&2&&(c(),f(u(2,1,"Thank you! Your feedback has been submitted.")))}function _t(n,r){n&1&&(o(0,"div",24),d(1),p(2,"translate"),l()),n&2&&(c(),D(" ",u(2,1,"You're offline. Your feedback is saved and will be sent automatically when you're back online.")," "))}function yt(n,r){n&1&&(o(0,"div",24),d(1),p(2,"translate"),l()),n&2&&(c(),f(u(2,1,"Your feedback is saved. It will be retried automatically.")))}function wt(n,r){if(n&1&&(o(0,"div",25),d(1),p(2,"translate"),l()),n&2){let e=H();c(),f(u(2,1,e.error()))}}function vt(n,r){n&1&&(o(0,"span",16)(1,"mat-icon"),d(2,"hourglass_empty"),l(),o(3,"span"),d(4),p(5,"translate"),l()()),n&2&&(c(4),f(u(5,1,"Submit")))}function St(n,r){n&1&&(d(0),p(1,"translate")),n&2&&D(" ",u(1,1,"Submit")," ")}var et=(()=>{class n{constructor(){this.dialogRef=h(ye),this.screenshotService=h(Je),this.feedbackService=h(W),this.preferenceService=h(qe),this.data=h(we),this.fileInput=ie("fileInput"),this.type=v("feedback"),this.comment=v(""),this.screenshot=v(null),this.state=v({status:"idle"}
3),this.showFabSetting=v(this.preferenceService.showFloatingFab()),this.screenPath=this.data.screenPath,this.commentValid=S(()=>this.comment().trim().length>0&&this.comment().length<=2e3),this.submitting=S(()=>this.state().status==="submitting"),this.submitted=S(()=>this.state().status==="submitted"),this.queued=S(()=>this.state().status==="queued"),this.retrying=S(()=>this.state().status==="retrying"),this.capturing=S(()=>this.state().status==="capturing"),this.attaching=S(()=>this.state().status==="attaching"),this.error=S(()=>this.state().status==="error"?this.state().errorMessage??"":""),this.canSubmit=S(()=>this.commentValid()&&["idle","error"].includes(this.state().status))}setType(e){this.type.set(e)}toggleShowFab(e){this.showFabSetting.set(e),this.preferenceService.setShowFloatingFab(e)}captureScreenshot(){return m(this,null,function*(){this.state.set({status:"capturing"});try{yield this.showCaptureFeedback();let e=yield this.screenshotService.capture();if(e){let t=yield this.screenshotService.downscaleBase64(e.base64,e.type);this.screenshot.set(t)}this.state.set({status:"idle"})}catch(e){console.error("[Feedback] screenshot capture failed",e);let t=e?.message==="WEB_SCREENSHOT_SECURITY_ERROR"?"Web screen capture is not supported in this browser. Please attach an image instead.":"Screen capture failed. Please try again, or attach an image instead.";this.state.set({status:"error",errorMessage:t})}})}showCaptureFeedback(){return m(this,null,function*(){yield new Promise(e=>requestAnimationFrame(()=>requestAnimationFrame(()=>e()))),yield new Promise(e=>setTimeout(e,250))})}attachFromGallery(){return m(this,null,function*(){this.state.set({status:"attaching"});try{let e=this.fileInput()?.nativeElement,t=yield this.screenshotService.attachFromGallery(e);if(t.status==="ok"){let i=yield this.screenshotService.downscaleBase64(t.screenshot.base64,t.screenshot.type);this.screenshot.set(i),this.state.set({status:"idle"})}else t.status==="error"?this.state.set({status:"error",errorMessage:t.message}):this.state.set({status:"error",errorMessage:"No image was selected."})}catch(e){console.error("[Feedback] attach from gallery failed",e),this.state.set({status:"error",errorMessage:"That image couldn't be attached. Please try another one."})}})}removeScreenshot(){this.screenshot.set(null)}submit(){return m(this,null,function*(){if(this.canSubmit()){this.state.set({status:"submitting"});try{let e=yield this.feedbackService.submit({type:this.type(),comment:this.comment(),screen_path:this.screenPath,screenshot_base64:this.screenshot()?.base64,screenshot_type:this.screenshot()?.type});e==="submitted"?(this.state.set({status:"submitted"}),this.closeAfter(1500)):e==="pending"?this.state.set({status:"queued"}):this.state.set({status:"retrying"})}catch(e){console.error("[Feedback] submit error",e);let t=e?.__picsaServerError&&e.message?e.message:"Something went wrong. Please try again.";this.state.set({status:"error",errorMessage:t})}}})}closeAfter(e){setTimeout(()=>this.dialogRef.close(!0),e)}close(){this.dialogRef.close(!1)}static{this.\u0275fac=function(t){return new(t||n)}}static{this.\u0275cmp=N({type:n,selectors:[["picsa-feedback-dialog"]],viewQuery:function(t,i){t&1&&Z(i.fileInput,ut,5),t&2&&ee()},decls:60,vars:44,consts:[["fileInput",""],[1,"feedback-form",3,"ngSubmit"],[1,"flex","items-center","justify-between","gap-2"],[1,"flex-1","text-lg","font-semibold"],["type","button","matIconButton","",1,"shrink-0",3,"click"],[1,"w-full",3,"change","value"],["value","feedback",1,"flex-1"],["value","bug_report",1,"flex-1"],["appearance","fill",1,"w-full"],["for","picsa-feedback-comment"],["id","picsa-feedback-comment","matInput","","name","comment","rows","4","maxlength","2000","required","",1,"resize-none",3,"ngModelChange","ngModel"],["align","end"],["for","picsa-feedback-comment",1,"hidden"],[1,"flex","flex-col","gap-2"],[1,"flex","flex-col","gap-2","w-full","sm:flex-row"],["type","button","matButton","tonal",1,"w-full","min-h-[44px]","sm:flex-1",3,"click","disabled"],[1,"inline-flex","items-center","justify-center","gap-2"],[1,"relative"],["id","picsa-feedback-file-input","type","file","accept","image/*",1,"hidden"],["for","picsa-feedback-file-input",1,"hidden"],[1,"flex","items-center","justify-between","border-t","border-gray-100","pt-2","pb-1"],[1,"text-xs","text-gray-600"],["color","primary",3,"change","checked"],[1,"text-emerald-600"],[1,"text-amber-600"],[1,"text-red-600"],[1,"flex","flex-wrap","gap-2"],["type","button","matButton","tonal",1,"flex-1","basis-[45%]","min-h-[44px]",3,"click"],["type","submit","matButton","filled","color","primary",1,"flex-1","basis-[45%]","min-h-[44px]",3,"disabled"],[1,"max-h-[160px]","w-full","rounded","border","border-gray-200","object-contain",3,"src","alt"],["type","button","matIconButton","",1,"preview-remove-btn",3,"click"],[1,"text-sm"]],template:function(t,i){if(t&1){let a=G();o(0,"form",1),b("ngSubmit",function(){return y(a),w(i.submit())}),o(1,"div",2)(2,"h2",3),d(3),p(4,"translate"),l(),o(5,"button",4),p(6,"translate"),b("click",function(){return y(a),w(i.close())}),o(7,"mat-icon"),d(8,"close"),l()()(),o(9,"mat-button-toggle-group",5),b("change",function(g){return y(a),w(i.setType(g.value))}),o(10,"mat-button-toggle",6),d(11),p(12,"translate"),l(),o(13,"mat-button-toggle",7),d(14),p(15,"translate"),l()(),o(16,"mat-form-field",8)(17,"mat-label",9),d(18),p(19,"translate"),l(),o(20,"textarea",10),b("ngModelChange",function(g){return y(a),w(i.comment.set(g))}),l(),o(21,"mat-hint",11),d(22),l()(),o(23,"label",12),d(24),p(25,"translate"),l(),o(26,"div",13)(27,"div",14)(28,"button",15),b("
3click",function(){return y(a),w(i.captureScreenshot())}),C(29,ht,2,3)(30,ft,6,3,"span",16),l(),o(31,"button",15),b("click",function(){return y(a),w(i.attachFromGallery())}),o(32,"span",16)(33,"mat-icon"),d(34,"attach_file"),l(),o(35,"span"),d(36),p(37,"translate"),l()()()(),C(38,gt,7,7,"div",17),l(),Y(39,"input",18,0),o(41,"label",19),d(42),p(43,"translate"),l(),o(44,"div",20)(45,"span",21),d(46),p(47,"translate"),l(),o(48,"mat-slide-toggle",22),b("change",function(g){return y(a),w(i.toggleShowFab(g.checked))}),l()(),C(49,bt,3,3,"div",23),C(50,_t,3,3,"div",24),C(51,yt,3,3,"div",24),C(52,wt,3,3,"div",25),o(53,"div",26)(54,"button",27),b("click",function(){return y(a),w(i.close())}),d(55),p(56,"translate"),l(),o(57,"button",28),C(58,vt,6,3,"span",16)(59,St,2,3),l()()()}if(t&2){let a;c(3),f(u(4,24,"Send Feedback")),c(2),T("aria-label",u(6,26,"Close")),c(4),F("value",i.type()),c(2),f(u(12,28,"Feedback")),c(3),f(u(15,30,"Bug report")),c(4),f(u(19,32,"Your message")),c(2),F("ngModel",i.comment()),c(2),D("",i.comment().length," / 2000"),c(2),f(u(25,34,"Your message")),c(4),F("disabled",i.submitting()||i.capturing()||i.attaching()),c(),M(i.capturing()?29:30),c(2),F("disabled",i.submitting()||i.capturing()||i.attaching()),c(5),f(u(37,36,"Attach image")),c(2),M((a=i.screenshot())?38:-1,a),c(4),f(u(43,38,"Attach image")),c(4),f(u(47,40,"Show feedback button on all pages")),c(2),F("checked",i.showFabSetting()),c(),M(i.submitted()?49:-1),c(),M(i.queued()?50:-1),c(),M(i.retrying()?51:-1),c(),M(i.error()?52:-1),c(3),D(" ",u(56,42,i.queued()||i.retrying()?"Close":"Cancel")," "),c(2),F("disabled",!i.canSubmit()),c(),M(i.submitting()?58:59)}},dependencies:[ne,he,me,oe,se,ce,pe,ue,de,le,O,ge,fe,Re,Oe,Ue,j,Ee,Fe,Ce,Me,R,U,De,Ie,Ne,Be,L,V],styles:["[_nghost-%COMP%]{display:block;width:100%} .feedback-dialog-panel .cdk-overlay-pane{overflow:hidden!important}@media(max-width:640px){ .feedback-dialog-panel .cdk-overlay-pane{position:fixed!important;bottom:0;left:50%;transform:translate(-50%);margin:0!important;max-width:100vw!important}} .feedback-dialog-panel .mat-mdc-dialog-surface{border-radius:16px;overflow-y:auto;overflow-x:hidden;overscroll-behavior:contain;scrollbar-width:thin}@media(max-width:640px){ .feedback-dialog-panel .mat-mdc-dialog-surface{border-radius:16px 16px 0 0}} .feedback-dialog-panel .mat-button-toggle-group{width:100%} .feedback-dialog-panel .mat-button-toggle{flex:1 1 0}.feedback-form[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:1rem}mat-button-toggle-group[_ngcontent-%COMP%]{width:100%}textarea#picsa-feedback-comment[_ngcontent-%COMP%]{resize:none;overflow-y:auto;overflow-x:hidden}.preview-remove-btn[_ngcontent-%COMP%]{position:absolute!important;top:4px;right:4px;width:32px;height:32px;background:#ffffffeb;box-shadow:0 1px 4px #0000004d}"],changeDetection:0})}}return n})();var Vi=(()=>{class n{constructor(){this.dialog=h(ve),this.feedbackService=h(W),this.safeAreaService=h(Pe),this.bottomInset=v(16),this.feedbackService.ready().catch(e=>console.error("[Feedback] initialisation failed",e)),this.safeAreaService.getInsets().then(e=>{this.bottomInset.set(Math.max(16,e.bottom+16))})}openFeedback(){this.dialog.open(et,{data:{screenPath:location.pathname},panelClass:"feedback-dialog-panel",maxWidth:"420px",width:"min(100vw - 24px, 420px)",maxHeight:"calc(100dvh - 24px)",autoFocus:!1})}static{this.\u0275fac=function(t){return new(t||n)}}static{this.\u0275cmp=N({type:n,selectors:[["picsa-feedback-fab"]],decls:4,vars:5,consts:[["matMiniFab","","color","primary",1,"feedback-fab",3,"click"]],template:function(t,i){t&1&&(o(0,"button",0),p(1,"translate"),b("click",function(){return i.openFeedback()}),o(2,"mat-icon"),d(3,"chat"),l()()),t&2&&(te("bottom",i.bottomInset(),"px"),T("aria-label",u(1,3,"Submit feedback")))},dependencies:[O,be,j,R,U,L,V],styles:[".feedback-fab[_ngcontent-%COMP%]{position:fixed;right:16px;z-index:1000;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 4px -1px #0000004d,0 4px 8px #0003,0 1px 14px #00000026}.feedback-fab[_ngcontent-%COMP%]:hover{box-shadow:0 4px 6px -2px #00000059,0 6px 10px #00000040,0 2px 18px #0003}.feedback-fab[_ngcontent-%COMP%] .mdc-button__label{display:contents}.feedback-fab[_ngcontent-%COMP%] mat-icon{line-height:1}"],changeDetection:0})}}return n})();export{qe as a,et as b,Vi as c}; 4 5//# debugId=f3871488-2a0a-5d08-bf45-850d9b486ef5
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.