PageSourceSearch

https://ag-real-estate-media.web.app/9476.05b68173b6d7fa37.js

js ag-real-estate-media.web.app collected 2026-10-03 12:17:27 UTC 265,249 bytes, 1 lines download raw bytes

1"use strict";(self.webpackChunktonomo=self.webpackChunktonomo||[]).push([[9476],{39476:(wr,yt,_)=>{_.r(yt),_.d(yt,{NativeUploadFeatureWorkspaceModule:()=>fr});var y=_(69808),$=_(93075),Nt=_(47423),M=_(48966),Re=_(92181),$e=_(20773),Ee=_(32368),St=_(78029),Xe=_(53251),Fe=_(87238),A=_(74202),Je=_(57261),K=_(7081),wt=_(39918),U=_(96410),e=_(5e3);let Bt=(()=>{class o{}return o.\u0275fac=function(t){return new(t||o)},o.\u0275mod=e.\u0275\u0275defineNgModule({type:o}),o.\u0275inj=e.\u0275\u0275defineInjector({imports:[[y.CommonModule,$.UX,M.Is,Ee.rP,Je.ZX,U.eYi,wt.aM,K.zc]]}),o})();var L=_(70655),k=_(44224),At=_(71764),We=_.n(At),Lt=_(31545),Rt=_.n(Lt),Wt=_(25268),Gt=_.n(Wt),v=_(92198),D=_(658),N=_(24254),S=_(50026),Ht=_(31158),Yt=_.n(Ht),ee=_(21086),te=_(63527),B=_(68896),w=_(2994),C=_(87545),x=_(24850),O=_(40537),qe=_(68807),P=_(87168),ne=_(21406),T=_(72986),R=_(27221),se=_(79629),It=_(52080),kt=_(38279),ve=_(98798);let et=(()=>{class o extends S.m1{constructor(t,n,s,d,g,c,r,a){super({orderId:"",order:null,currentStep:1,initialInvoice:null,emailValue:null,loading:!0,saving:!1,sending:!1,delivered:!1,error:null,invoiceLoadFailed:!1,invoiceError:null,emailStepVisited:!1}),this.appConfigService=t,this.projectService=n,this.invoiceService=s,this.invoicesRepositoryService=d,this.invoiceLineItemFormService=g,this.nativeDeliveryService=c,this.ordersRepositoryService=r,this.listingWebsitesService=a,this.invoiceBuilder=new It.PA({note:"",status:ve.bG.Unpaid,orderId:"",archived:!1,currency:this.appConfigService.currency,issueDate:0,lineItems:[],amountPaid:0,customerUid:"",isTaxInclusive:!1,accountingInvoiceNo:"",accountingSyncStatus:ve.mM.UNSYNCED,sqFtRangeDescription:"",accountingInvoiceType:ve.z3.DRAFT,acreageRangeDescription:""}),this.order$=this.select(({order:l})=>l),this.orderId$=this.select(({orderId:l})=>l),this.currentStep$=this.select(({currentStep:l})=>l),this.initialInvoice$=this.select(({initialInvoice:l})=>l),this.emailValue$=this.select(({emailValue:l})=>l),this.loading$=this.select(({loading:l})=>l),this.saving$=this.select(({saving:l})=>l),this.sending$=this.select(({sending:l})=>l),this.delivered$=this.select(({delivered:l})=>l),this.error$=this.select(({error:l})=>l),this.invoiceError$=this.select(({invoiceError:l})=>l),this.invoiceLoadFailed$=this.select(({invoiceLoadFailed:l})=>l),this.emailStepVisited$=this.select(({emailStepVisited:l})=>l),this.invoiceDownloadUrl$=this.select(this.orderId$,l=>l?`${this.appConfigService.coreAppUrl}/api/v1/projects/${this.appConfigService.projectId}/invoices/${l}/pdf`:null),this.shareLinkUrl$=this.select(this.orderId$,l=>l?`${location.origin}/order-status/${l}/invoice`:null),this.headerSubtitle$=this.select(this.order$,l=>{var p;if(!l)return"";const u=[l.packages||l.order_name,null===(p=l.property_address)||void 0===p?void 0:p.formatted_address,l.client_full_name].filter(Boolean).join(" - ");if(!l.date)return u;const m=this.appConfigService.timeZone;return`${u} on ${Yt()((0,N.EUj)(l.date,m)).tz(m).format("dddd, MMMM Do, YYYY")}`}),this.vm$=this.select(this.currentStep$,this.invoiceBuilder.invoice$,this.headerSubtitle$,this.invoiceDownloadUrl$,this.shareLinkUrl$,this.emailValue$,this.loading$,this.saving$,this.sending$,this.invoiceLoadFailed$,this.emailStepVisited$,(l,p,u,m,h,b,z,re,br,Cr,xr)=>{var xt;const yr=p.lineItems.filter(Sr=>Sr.type!==ve.is.Tax);return{currentStep:l,invoice:p,invoiceNo:null!==(xt=p.no)&&void 0!==xt?xt:null,headerSubtitle:u,isEmpty:!yr.length,invoiceDownloadUrl:m,shareLinkUrl:h,email:b,loading:z,saving:re,sending:br,invoiceLoadFailed:Cr,emailStepVisited:xr}},{debounce:!0}),this.setOrder=this.updater((l,p)=>Object.assign(Object.assign({},l),{order:p,orderId:p.id})),this.goToStep=this.updater((l,p)=>Object.assign(Object.assign({},l),{currentStep:p,emailStepVisited:l.emailStepVisited||2===p})),this.setInvoiceLoaded=this.updater((l,{invoice:p,hasExistingInvoice:u})=>Object.assign(Object.assign({},l),{initialInvoice:u?p:null})),this.setInvoiceSaved=this.updater((l,p)=>Object.assign(Object.assign({},l),{initialInvoice:p,currentStep:2,emailStepVisited:!0})),this.loadInvoice=this.effect(l=>l.pipe((0,w.b)(()=>this.patchState({loading:!0})),(0,C.w)(p=>this.invoicesRepositoryService.getById(p.id).pipe((0,C.w)(u=>u?(0,ee.of)({invoice:u,hasExistingInvoice:!0}):this.invoiceService.initNewInvoice(p).pipe((0,x.U)(m=>({invoice:m,hasExistingInvoice:!1})))),(0,S._b)(({invoice:u,hasExistingInvoice:m})=>this.handleInvoiceLoaded(u,m),u=>{console.error("[DeliverProjectDialogStore] Failed to load invoice",u),this.patchState({invoiceLoadFailed:!0,invoiceError:u})}),(0,O.x)(()=>this.patchState({loading:!1})))))),this.loadEmailDraft=this.effect(l=>l.pipe((0,C.w)(p=>(0,te.D)(this.projectService.buildProjectCompleteEmailDraft(p)).pipe((0,S._b)(u=>this.patchState({emailValue:u}),u=>{console.error("[DeliverProjectDialogStore] Failed to build email draft",u),this.seedEmailDraftFallback(p
1)}))))),this.addItem=this.effect(l=>l.pipe((0,qe.z)(()=>this.invoiceLineItemFormService.open(null,ve.is.Custom).pipe((0,v.h)(Boolean),(0,w.b)(p=>this.invoiceBuilder.addLineItem(p)))))),this.editItem=this.effect(l=>l.pipe((0,qe.z)(p=>this.invoiceLineItemFormService.open(p).pipe((0,v.h)(Boolean),(0,w.b)(u=>this.replaceItem(p,u)))))),this.saveInvoiceAndAdvance=this.effect(l=>l.pipe((0,P.M)(this.invoiceBuilder.invoice$,this.invoiceBuilder.isDirty$,this.order$,this.initialInvoice$),(0,ne.b)(([,p,u,m,h])=>m?h?u?this.saveUpdatedInvoiceAndAdvance(m,h):(this.goToStep(2),B.E):this.saveNewInvoiceAndAdvance(p):B.E))),this.sendDelivery=this.effect(l=>l.pipe((0,w.b)(()=>this.patchState({sending:!0,delivered:!1,error:null})),(0,P.M)(this.order$),(0,qe.z)(([p,u])=>u?this.fetchCoverImageUrl(u.id).pipe((0,C.w)(m=>this.projectService.completeProjectDelivery(u,this.buildEmailPayload(p)).pipe((0,S._b)(()=>this.handleDeliverySucceeded(u,m),h=>this.patchState({error:h})),(0,O.x)(()=>this.patchState({sending:!1}))))):(this.patchState({sending:!1}),B.E))))}handleDeliverySucceeded(t,n){this.patchState({delivered:!0}),n&&this.ordersRepositoryService.update(t.id,{coverImage:n}).catch(s=>console.error(s)),t.isWebsiteEnabled&&this.listingWebsitesService.startDeliveryContentSync(t.id)}fetchCoverImageUrl(t){return this.nativeDeliveryService.get(t).pipe((0,T.q)(1),(0,x.U)(n=>(0,se.Uh)(n)),(0,R.K)(()=>(0,ee.of)("")))}init(t){this.setOrder(t),this.loadInvoice(t),this.loadEmailDraft(t)}deleteItem(t){this.invoiceBuilder.deleteLineItem(t)}handleInvoiceLoaded(t,n){this.invoiceBuilder.patchState(t),this.setInvoiceLoaded({invoice:t,hasExistingInvoice:n})}replaceItem(t,n){!t.id||this.invoiceBuilder.replaceLineItem({id:t.id,lineItem:n,customTiers:[]})}saveUpdatedInvoiceAndAdvance(t,n){return this.patchState({saving:!0,invoiceError:null}),this.invoiceService.saveUpdatedInvoice$(this.invoiceBuilder,n,t,t,"").pipe((0,S._b)(s=>this.setInvoiceSaved(s),s=>{console.error("[DeliverProjectDialogStore] Failed to update invoice",s),this.patchState({invoiceError:s})}),(0,O.x)(()=>this.patchState({saving:!1})))}saveNewInvoiceAndAdvance(t){return this.patchState({saving:!0,invoiceError:null}),(0,te.D)(this.invoiceService.saveNewInvoice(t)).pipe((0,S._b)(n=>this.handleNewInvoiceSaved(n),n=>{console.error("[DeliverProjectDialogStore] Failed to save invoice",n),this.patchState({invoiceError:n})}),(0,O.x)(()=>this.patchState({saving:!1})))}handleNewInvoiceSaved(t){var n;this.invoiceBuilder.patchState({no:null!==(n=t.no)&&void 0!==n?n:null,isDirty:!1}),this.setInvoiceSaved(t)}seedEmailDraftFallback(t){this.patchState({emailValue:Object.assign(Object.assign({},this.projectService.buildProjectCompleteRecipients(t,[])),{subject:"",body:""})})}buildEmailPayload(t){return{to:t.to.map(n=>n.value),cc:t.cc.map(n=>n.value),bcc:t.bcc.map(n=>n.value),subject:t.subject,body:t.body,scheduleDate:t.scheduleDate}}ngOnDestroy(){this.invoiceBuilder.ngOnDestroy(),super.ngOnDestroy()}}return o.\u0275fac=function(t){return new(t||o)(e.\u0275\u0275inject(D._ZM),e.\u0275\u0275inject(D.Y4r),e.\u0275\u0275inject(It.q),e.\u0275\u0275inject(D.uOT),e.\u0275\u0275inject(wt.AS),e.\u0275\u0275inject(se.zz),e.\u0275\u0275inject(D.HVf),e.\u0275\u0275inject(kt.fR))},o.\u0275prov=e.\u0275\u0275defineInjectable({token:o,factory:o.\u0275fac}),o})();var Ge=_(67656),Z=_(255),Kt=_(34467),Qt=_(1297),ie=_(66809),oe=_(72751),Zt=_(11957),Xt=_(81331),Jt=_(51363),qt=_(39348),en=_(68566);const tn=["composer"];function nn(o,i){1&o&&(e.\u0275\u0275elementContainerStart(0),e.\u0275\u0275element(1,"mat-spinner",12),e.\u0275\u0275elementContainerEnd()),2&o&&(e.\u0275\u0275advance(1),e.\u0275\u0275property("diameter",32))}function on(o,i){if(1&o&&(e.\u0275\u0275elementStart(0,"p",24),e.\u0275\u0275text(1),e.\u0275\u0275elementEnd()),2&o){const t=e.\u0275\u0275nextContext(2).ngIf;e.\u0275\u0275advance(1),e.\u0275\u0275textInterpolate1(" ",t.headerSubtitle," ")}}function rn(o,i){if(1&o){const t=e.\u0275\u0275getCurrentView();e.\u0275\u0275elementStart(0,"div",25)(1,"div",26)(2,"span",27),e.\u0275\u0275text(3,"Item"),e.\u0275\u0275elementEnd(),e.\u0275\u0275elementStart(4,"span",28),e.\u0275\u0275text(5,"Price"),e.\u0275\u0275elementEnd(),e.\u0275\u0275elementStart(6,"span",29),e.\u0275\u0275text(7,"Quantity"),e.\u0275\u0275elementEnd(),e.\u0275\u0275elementStart(8,"span",30),e.\u0275\u0275text(9,"Amount to pay"),e.\u0275\u0275elementEnd()(),e.\u0275\u0275elementStart(10,"button",31,32),e.\u0275\u0275listener("click",function(){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext(3).onAddLineItem()}),e.\u0275\u0275element(12,"i",33),e.\u0275\u0275text(13," Add item "),e.\u0275\u0275elementEnd()()}if(2&o){const t=e.\u0275\u0275reference(11);e.\u0275\u0275advance(12),e.\u0275\u0275property("size",t.iconSize)}}function sn(o,i){if(1&o&&(e.\u0275\u0275elementStart(0,"div",47),e.\u0275\u0275element(1,"ui-date-input",48)(2,"ui-input",49),e.\u0275\u0275elementEnd()),2&o){const t=e.\u0275\u0275nextContext(4);e.\u0275\u0275advance(1),e.\u0275\u0275property("minDate",t.minDate)("maxDate",t.maxDate),e.\u0275\u0275advance(1),e.\u0275\u0275propertyInterpolate1("label","At time (",t.timezoneLabel,")")}}function an(o,i){if(1&o){const t=e.\u0275\u0275getCurrentView();e.\u0275\u0275elementStart(0,"div",34)(1,"p",35),e.\u0275\u0275text(2,"Email"),e.\u0275\u0275elementEnd(),e.\u0275\u0275elementStart(3,"div",36)(4,"tn-email-composer",37,38),e.\u0275\u0275listener("submitted",function(s){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext(3).onEmailSubmitted(s)})("emailEditingChanged",function(s){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext(3).onEmailEditingChanged(s)}),e.\u0275\u0275elementEnd()(),e.\u0275\u0275elementStart(6,"p",39),e.\u0275\u0275text(7," Send Later "),e.\u0275\u0275elementEnd(),e.\u0275\u0275elementStart(8,"div",40)(9,"div",41)(10,"span",42),e.\u0275\u0275element(11,"i",43),e.\u0275\u0275elementEnd(),e.\u0275\u0275elementStart(12,"span",44),e.\u0275\u0275text(13,"Mail and Texts can be scheduled up to 3 days in advance."),e.\u0275\u0275elementEnd(),e.\u0275\u0275element(14,"mat-slide-toggle",45),e.\u0275\u0275elementEnd(),e.\u0275\u0275template(15,sn,3,3,"div",46),e.\u0275\u0275elementEnd()()}if(2&o){const t=e.\u0275\u0275nextContext(2).ngIf,n=e.\u0275\u0275nextContext();let s;e.\u0275\u0275classProp("hidden",2!==t.currentStep),e.\u0275\u0275advance(4),e.\u0275\u0275property("value",t.email)("timezone",n.timezone)("scheduleEnabled",!1),e.\u0275\u0275advance(4),e.\u0275\u0275property("formGroup",n.scheduleForm),e.\u0275\u0275advance(3),e.\u0275\u0275property("size",16),e.\u0275\u0275advance(4),e.\u0275\u0275property("ngIf",null==(s=n.scheduleForm.get("sendLater"))?null:s.value)}}function ln(o,i){if(1&o){const t=e.\u0275\u0275getCurrentView();e.\u0275\u0275elementStart(0,"div",13)(1,"div",14)(2,"h2",15),e.\u0275\u0275text(3),e.\u0275\u0275elementEnd(),e.\u0275\u0275elementStart(4,"div",16),e.\u0275\u0275element(5,"ui-download-by-link",17)(6,"ui-copy-to-cl
1ipboard",18),e.\u0275\u0275elementEnd()(),e.\u0275\u0275template(7,on,2,1,"p",19),e.\u0275\u0275elementStart(8,"div",20),e.\u0275\u0275template(9,rn,14,1,"div",21),e.\u0275\u0275elementStart(10,"tn-invoice-line-items",22),e.\u0275\u0275listener("addLineItem",function(){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext(2).onAddLineItem()})("editLineItem",function(s){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext(2).onEditLineItem(s)})("deleteLineItem",function(s){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext(2).onDeleteLineItem(s)}),e.\u0275\u0275elementEnd()()(),e.\u0275\u0275template(11,an,16,8,"div",23)}if(2&o){const t=e.\u0275\u0275nextContext().ngIf;let n,s;e.\u0275\u0275classProp("hidden",1!==t.currentStep),e.\u0275\u0275advance(3),e.\u0275\u0275textInterpolate1(" Order invoice #",t.invoiceNo||"\u2014"," "),e.\u0275\u0275advance(2),e.\u0275\u0275property("url",null!==(n=t.invoiceDownloadUrl)&&void 0!==n?n:void 0)("v2",!0),e.\u0275\u0275advance(1),e.\u0275\u0275property("value",null!==(s=t.shareLinkUrl)&&void 0!==s?s:void 0)("v2",!0),e.\u0275\u0275advance(1),e.\u0275\u0275property("ngIf",t.headerSubtitle),e.\u0275\u0275advance(2),e.\u0275\u0275property("ngIf",t.isEmpty),e.\u0275\u0275advance(1),e.\u0275\u0275property("invoice",t.invoice)("editable",!0),e.\u0275\u0275advance(1),e.\u0275\u0275property("ngIf",t.emailStepVisited)}}function dn(o,i){if(1&o){const t=e.\u0275\u0275getCurrentView();e.\u0275\u0275elementContainerStart(0),e.\u0275\u0275elementStart(1,"button",50),e.\u0275\u0275listener("click",function(){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext(2).cancel()}),e.\u0275\u0275text(2," Cancel "),e.\u0275\u0275elementEnd(),e.\u0275\u0275elementStart(3,"button",51,52),e.\u0275\u0275listener("click",function(){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext(2).next()}),e.\u0275\u0275text(5," Next "),e.\u0275\u0275element(6,"i",53),e.\u0275\u0275elementEnd(),e.\u0275\u0275elementContainerEnd()}if(2&o){const t=e.\u0275\u0275reference(4),n=e.\u0275\u0275nextContext().ngIf;e.\u0275\u0275advance(1),e.\u0275\u0275property("disabled",n.saving),e.\u0275\u0275advance(2),e.\u0275\u0275property("uiBtnLoading",n.saving)("disabled",n.loading||n.invoiceLoadFailed),e.\u0275\u0275advance(3),e.\u0275\u0275property("size",t.iconSize)}}const cn=function(o){return{"pointer-events-none":o}};function pn(o,i){if(1&o){const t=e.\u0275\u0275getCurrentView();e.\u0275\u0275elementStart(0,"button",50,54),e.\u0275\u0275listener("click",function(){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext(2).backToInvoiceStep()}),e.\u0275\u0275element(2,"i",55),e.\u0275\u0275text(3," Back "),e.\u0275\u0275elementEnd(),e.\u0275\u0275elementStart(4,"button",56),e.\u0275\u0275listener("click",function(){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext(2).cancel()}),e.\u0275\u0275text(5," Cancel "),e.\u0275\u0275elementEnd(),e.\u0275\u0275elementStart(6,"button",57,58),e.\u0275\u0275listener("click",function(){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext(2).sendDeliverables()}),e.\u0275\u0275element(8,"i",8),e.\u0275\u0275text(9," Send Deliverables "),e.\u0275\u0275elementEnd()}if(2&o){const t=e.\u0275\u0275reference(1),n=e.\u0275\u0275reference(7),s=e.\u0275\u0275nextContext().ngIf,d=e.\u0275\u0275nextContext();e.\u0275\u0275property("disabled",s.sending),e.\u0275\u0275advance(2),e.\u0275\u0275property("size",t.iconSize),e.\u0275\u0275advance(2),e.\u0275\u0275property("disabled",s.sending),e.\u0275\u0275advance(2),e.\u0275\u0275property("ngClass",e.\u0275\u0275pureFunction1(6,cn,d.emailEditing))("uiBtnLoading",s.sending),e.\u0275\u0275advance(2),e.\u0275\u0275property("size",n.iconSize)}}const gn=function(o){return{active:o}};function un(o,i){if(1&o&&(e.\u0275\u0275elementContainerStart(0),e.\u0275\u0275elementStart(1,"ui-dialog-header",1),e.\u0275\u0275text(2,"Deliver Project"),e.\u0275\u0275elementEnd(),e.\u0275\u0275elementStart(3,"div",2)(4,"div",3)(5,"span",4),e.\u0275\u0275element(6,"i",5),e.\u0275\u0275elementEnd(),e.\u0275\u0275elementStart(7,"span",6),e.\u0275\u0275text(8,"1. Review Invoice"),e.\u0275\u0275elementEnd()(),e.\u0275\u0275element(9,"div",7),e.\u0275\u0275elementStart(10,"div",3)(11,"span",4),e.\u0275\u0275element(12,"i",8),e.\u0275\u0275elementEnd(),e.\u0275\u0275elementStart(13,"span",6),e.\u0275\u0275text(14,"2. Send Deliver Mail"),e.\u0275\u0275elementEnd()()(),e.\u0275\u0275elementStart(15,"mat-dialog-content"),e.\u0275\u0275template(16,nn,2,1,"ng-container",9),e.\u0275\u0275template(17,ln,12,12,"ng-template",null,10,e.\u0275\u0275templateRefExtractor),e.\u0275\u0275elementEnd(),e.\u0275\u0275elementStart(19,"mat-dialog-actions"),e.\u0275\u0275template(20,dn,7,4,"ng-container",9),e.\u0275\u0275template(21,pn,10,8,"ng-template",null,11,e.\u0275\u0275templateRefExtractor),e.\u0275\u0275elementEnd(),e.\u0275\u0275elementContainerEnd()),2&o){const t=i.ngIf,n=e.\u0275\u0275reference(18),s=e.\u0275\u0275reference(22);e.\u0275\u0275advance(1),e.\u0275\u0275property("closable",!1),e.\u0275\u0275advance(3),e.\u0275\u0275property("ngClass",1===t.currentStep?"active":"completed"),e.\u0275\u0275advance(2),e.\u0275\u0275property("uiIcon",1===t.currentStep?"request_quote":"check")("size",20),e.\u0275\u0275advance(4),e.\u0275\u0275property("ngClass",e.\u0275\u0275pureFunction1(10,gn,2===t.currentStep)),e.\u0275\u0275advance(2),e.\u0275\u0275property("size",20),e.\u0275\u0275advance(4),e.\u0275\u0275property("ngIf",t.loading)("ngIfElse",n),e.\u0275\u0275advance(4),e.\u0275\u0275property("ngIf",1===t.currentStep)("ngIfElse",s)}}We().extend(Gt()),We().extend(Rt());let ae=class{constructor(i,t,n,s,d,g){this.fb=i,this.dialogRef=t,this.snackBar=n,this.appConfigService=s,this.store=d,this.data=g,this.vm$=this.store.vm$,this.timezone=this.appConfigService.timeZone,this.timezoneLabel=(0,N.yWJ)(this.appConfigService.timeZone),this.minDate=We()().tz(this.timezone).startOf("day").toDate(),this.maxDate=We()().tz(this.timezone).add(2,"day").endOf("day").toDate(),this.scheduleForm=this.fb.group({sendLater:!1,date:[{value:null,disabled:!0}],time:[{value:"",disabled:!0}]}),this.emailEditing=!1}ngOnInit(){this.store.init(this.data.order),(0,K.ME)(this.scheduleForm,{minDate:this.minDate,maxDate:this.maxDate,timezone:this.timezone}).pipe((0,k.t)(this)).subscribe(),this.store.delivered$.pipe((0,v.h)(Boolean),(0,k.t)(this)).subscribe(()=>this.handleDelivered()),this.store.error$.pipe((0,v.h)(Boolean),(0,k.t)(this)).subscribe(i=>this.handleSendError(i)),this.store.invoiceError$.pipe((0,v.h)(Boolean),(0,k.t)(this)).subscribe(i=>this.handleInvoiceError(i))}backToInvoiceStep(){this.store.goToStep(1)}next(){this.store.saveInvoiceAndAdvance()}cancel(){this.dialogRef.close()}onAddLineItem(){this.store.addItem()}onEditLineItem(i){this.store.editItem(i)}onDeleteLineItem(i){this.store.deleteItem(i)}sendDeliverables(){var i;
1this.scheduleForm.invalid?this.scheduleForm.markAllAsTouched():null===(i=this.composer)||void 0===i||i.submit()}onEmailSubmitted(i){const{sendLater:t,date:n,time:s}=this.scheduleForm.getRawValue();this.store.sendDelivery(Object.assign(Object.assign({},i),{scheduleDate:t?(0,K.L4)(n,s,this.timezone):void 0}))}onEmailEditingChanged(i){this.emailEditing=i}handleDelivered(){this.dialogRef.close({delivered:!0})}handleSendError(i){console.error("[DeliverProjectDialog] Failed to send deliverables",i),this.showErrorSnackBar("An error occurred trying to send project complete email. Please contact support!")}handleInvoiceError(i){console.error("[DeliverProjectDialog] Invoice load/save failed",i),this.showErrorSnackBar("An error occurred while loading or saving the invoice. Please try again.")}showErrorSnackBar(i){this.snackBar.open(i,"Got it",{duration:5e3,horizontalPosition:"center",verticalPosition:"top"})}};ae.\u0275fac=function(i){return new(i||ae)(e.\u0275\u0275directiveInject($.qu),e.\u0275\u0275directiveInject(M.so),e.\u0275\u0275directiveInject(Je.ux),e.\u0275\u0275directiveInject(D._ZM),e.\u0275\u0275directiveInject(et),e.\u0275\u0275directiveInject(M.WI))},ae.\u0275cmp=e.\u0275\u0275defineComponent({type:ae,selectors:[["tn-deliver-project-dialog"]],viewQuery:function(i,t){if(1&i&&e.\u0275\u0275viewQuery(tn,5),2&i){let n;e.\u0275\u0275queryRefresh(n=e.\u0275\u0275loadQuery())&&(t.composer=n.first)}},features:[e.\u0275\u0275ProvidersFeature([et])],decls:2,vars:3,consts:[[4,"ngIf"],[3,"closable"],[1,"stepper"],[1,"step",3,"ngClass"],[1,"tile"],[3,"uiIcon","size"],[1,"label"],[1,"connector"],["uiIcon","send",3,"size"],[4,"ngIf","ngIfElse"],["stepsContent",""],["stepTwoActions",""],[1,"mx-auto","my-24",3,"diameter"],[1,"invoice-step"],[1,"flex","items-center","justify-between","gap-8"],[1,"text-24","font-bold","whitespace-nowrap"],[1,"flex","gap-8"],["text","Download","hint","Download pdf",3,"url","v2"],["text","Share invoice link","hint","Copy invoice link",3,"value","v2"],["class","text-14 text-gray-40 mt-8",4,"ngIf"],[1,"mt-16"],["class","rounded bg-gray-5 px-min pb-min mb-8",4,"ngIf"],[3,"invoice","editable","addLineItem","editLineItem","deleteLineItem"],["class","email-step",3,"hidden",4,"ngIf"],[1,"text-14","text-gray-40","mt-8"],[1,"rounded","bg-gray-5","px-min","pb-min","mb-8"],[1,"flex","text-12","py-8","text-gray-50","pl-12","pr-44"],[1,"mr-auto"],[1,"price-col"],[1,"quantity-col"],[1,"amount-col"],["uiBtnSize","small","uiBtnTheme","main","themeMode","secondary",1,"w-100",3,"click"],["addLineItemButton","btnSize"],["uiIcon","add",3,"size"],[1,"email-step"],[1,"panel-label"],[1,"panel"],[3,"value","timezone","scheduleEnabled","submitted","emailEditingChanged"],["composer",""],[1,"panel-label","mt-16"],[1,"panel",3,"formGroup"],[1,"flex","items-center","gap-8"],[1,"send-later-icon"],["uiIcon","mail",3,"size"],[1,"text-14"],["formControlName","sendLater",1,"ml-auto"],["class","schedule-row",4,"ngIf"],[1,"schedule-row"],["label","Send on date","formControlName","date",3,"minDate","maxDate"],["type","time","formControlName","time",3,"label"],["uiBtnSize","medium","uiBtnTheme","main","themeMode","secondary",1,"mr-auto",3,"disabled","click"],["uiBtnSize","medium","trailingIcon","","uiBtnTheme","main","themeMode","primary",3,"uiBtnLoading","disabled","click"],["nextStepButton","btnSize"],["uiIcon","chevron_right",3,"size"],["backStepButton","btnSize"],["uiIcon","chevron_left",3,"size"],["uiBtnSize","medium","uiBtnTheme","main","themeMode","secondary",3,"disabled","click"],["uiBtnSize","medium","uiBtnTheme","main","themeMode","primary",3,"ngClass","uiBtnLoading","click"],["sendDeliverablesButton","btnSize"]],template:function(i,t){1&i&&(e.\u0275\u0275template(0,un,23,12,"ng-container",0),e.\u0275\u0275pipe(1,"async")),2&i&&e.\u0275\u0275property("ngIf",e.\u0275\u0275pipeBind1(1,1,t.vm$))},directives:[y.NgIf,Ge.A,y.NgClass,Z.a,M.xY,$e.Ou,Kt.K,Qt.F,ie.s,oe.V,Zt.H,Xt.J,$.JL,$.sg,Ee.Rr,$.JJ,$.u,Jt.Y,qt.a,M.H8,en.T],pipes:[y.AsyncPipe],styles:[".hidden[_ngcontent-%COMP%]{display:none}  .deliver-project-dialog .mat-dialog-container{--dialog-inset: 0;overflow:hidden}  .deliver-project-dialog .mat-dialog-container .mat-slide-toggle.mat-checked .mat-slide-toggle-bar{--tw-bg-opacity: 1;background-color:rgb(219 234 254 / var(--tw-bg-opacity, 1))}  .deliver-project-dialog .mat-dialog-container .mat-slide-toggle.mat-checked .mat-slide-toggle-thumb{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1))}ui-dialog-header[_ngcontent-%COMP%]{display:flex;height:4rem;align-items:center;justify-content:center;--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1));padding-bottom:0;border-bottom-width:1px;border-style:solid;--tw-border-opacity: 1;border-color:rgb(246 246 246 / var(--tw-border-opacity, 1))}mat-dialog-content[_ngcontent-%COMP%]{max-height:60vh}.stepper[_ngcontent-%COMP%]{display:flex;align-items:flex-start;justify-content:center;background-image:linear-gradient(to bottom,var(--tw-gradient-stops));--tw-gradient-from: #EFF6FF var(--tw-gradient-from-position);--tw-gradient-to: rgb(239 246 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);--tw-gradient-to: #fff var(--tw-gradient-to-position);padding-top:2.25rem;padding-bottom:1.25rem}.stepper[_ngcontent-%COMP%]   .step[_ngcontent-%COMP%]{position:relative;z-index:10;display:flex;flex-direction:column;align-items:center;gap:.5rem;min-width:122px}
1.stepper[_ngcontent-%COMP%]   .tile[_ngcontent-%COMP%]{box-sizing:border-box;display:flex;height:2.75rem;width:2.75rem;align-items:center;justify-content:center;border-radius:.5rem;border-width:1px;border-style:solid;--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(128 128 128 / var(--tw-text-opacity, 1));border-color:#eee}.stepper[_ngcontent-%COMP%]   .label[_ngcontent-%COMP%]{font-size:.875rem;font-weight:500;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(128 128 128 / var(--tw-text-opacity, 1))}.stepper[_ngcontent-%COMP%]   .step.active[_ngcontent-%COMP%]   .tile[_ngcontent-%COMP%]{border-width:4px;--tw-border-opacity: 1;border-color:rgb(219 234 254 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.stepper[_ngcontent-%COMP%]   .step.active[_ngcontent-%COMP%]   .label[_ngcontent-%COMP%]{font-weight:600;--tw-text-opacity: 1;color:rgb(59 130 246 / var(--tw-text-opacity, 1))}.stepper[_ngcontent-%COMP%]   .step.completed[_ngcontent-%COMP%]   .tile[_ng
1content-%COMP%]{border-width:0px;--tw-bg-opacity: 1;background-color:rgb(179 212 255 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.stepper[_ngcontent-%COMP%]   .step.completed[_ngcontent-%COMP%]   .label[_ngcontent-%COMP%]{font-weight:600;--tw-text-opacity: 1;color:rgb(110 165 255 / var(--tw-text-opacity, 1))}.stepper[_ngcontent-%COMP%]   .connector[_ngcontent-%COMP%]{z-index:0;height:.125rem;--tw-bg-opacity: 1;background-color:rgb(219 234 254 / var(--tw-bg-opacity, 1));width:180px;margin:21px -30px 0}.invoice-step[_ngcontent-%COMP%]{padding-top:1.5rem;padding-bottom:1.5rem;padding-left:60px;padding-right:60px}.email-step[_ngcontent-%COMP%]{padding:1.5rem}.panel-label[_ngcontent-%COMP%]{margin-bottom:.5rem;font-size:.75rem;--tw-text-opacity: 1;color:rgb(128 128 128 / var(--tw-text-opacity, 1))}.panel[_ngcontent-%COMP%]{border-radius:.25rem;--tw-bg-opacity: 1;background-color:rgb(250 250 250 / var(--tw-bg-opacity, 1));padding:.75rem}.send-later-icon[_ngcontent-%COMP%]{display:flex;height:2rem;width:2rem;align-items:center;justify-content:center;border-radius:.25rem;--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(128 128 128 / var(--tw-text-opacity, 1))}.schedule-row[_ngcontent-%COMP%]{margin-top:.75rem;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));grid-gap:.75rem;gap:.75rem;border-top-width:1px;--tw-border-opacity: 1;border-color:rgb(246 246 246 / var(--tw-border-opacity, 1));padding-top:.75rem}.price-col[_ngcontent-%COMP%]{width:80px;align-items:center;justify-content:flex-end;display:none}@media (min-width: 640px){.price-col[_ngcontent-%COMP%]{display:flex}}.quantity-col[_ngcontent-%COMP%]{width:160px;align-items:center;justify-content:center;display:none}@media (min-width: 640px){.quantity-col[_ngcontent-%COMP%]{display:flex}}.amount-col[_ngcontent-%COMP%]{width:120px;display:flex;align-items:center;justify-content:flex-end}"],changeDetection:0}),ae=(0,L.gn)([(0,k.c)(),(0,L.w6)("design:paramtypes",[$.qu,M.so,Je.ux,D._ZM,et,Object])],ae);let Pt=(()=>{class o{constructor(t){this.dialog=t}open(t){return this.dialog.open(ae,{panelClass:["app-v2","deliver-project-dialog"],width:"900px",maxWidth:"900px",disableClose:!0,autoFocus:!1,data:t}).afterClosed()}}return o.\u0275fac=function(t){return new(t||o)(e.\u0275\u0275inject(M.uw))},o.\u0275prov=e.\u0275\u0275defineInjectable({token:o,factory:o.\u0275fac,providedIn:"root"}),o})();var mn=_(6183);let je=(()=>{class o{constructor(t,n){this.router=t,this.document=n}openOrderManagement(t){this.openInNewTab(["/admin/order-management"],{queryParams:{orderId:t}})}openCustomerProfile(t){this.openInNewTab(["/crm/profile",t])}openDelivery(t){this.openInNewTab(["/order-dashboard",t,"delivery","native"])}openPropertyDashboard({propertyId:t,page:n}){this.openInNewTab(["/admin/property-dashboard",t,n])}scrollToSection(t){const n=this.document.getElementById(t),s=this.document.querySelector(".main-body");if(!(n&&s instanceof HTMLElement))return;const d=parseFloat(getComputedStyle(n).scrollMarginTop)||0,g=n.getBoundingClientRect().top-s.getBoundingClientRect().top-d;s.scrollBy({top:g,behavior:"smooth"})}openInNewTab(t,n){var s;const d=this.router.createUrlTree(t,n);null===(s=this.document.defaultView)||void 0===s||s.open(this.router.serializeUrl(d),"_blank")}}return o.\u0275fac=function(t){return new(t||o)(e.\u0275\u0275inject(A.F0),e.\u0275\u0275inject(y.DOCUMENT))},o.\u0275prov=e.\u0275\u0275defineInjectable({token:o,factory:o.\u0275fac}),o})();var fe=_(8929);let Y=(()=>{class o{constructor(){this.purgePhotos$=new fe.xQ,this.purgeFloorPlans$=new fe.xQ,this.purgePanoramas$=new fe.xQ,this.purgeVideos$=new fe.xQ,this.purgeThreeDContents$=new fe.xQ,this.purgeFiles$=new fe.xQ}}return o.\u0275fac=function(t){return new(t||o)}
1,o.\u0275prov=e.\u0275\u0275defineInjectable({token:o,factory:o.\u0275fac}),o})();function tt(){return{activeSectionId:null,ids:new Set}}let F=(()=>{class o extends S.m1{constructor(){super(tt()),this.activeSectionId$=this.select(t=>t.activeSectionId),this.selectedIds$=this.select(t=>t.ids),this.toggle=this.updater((t,{sectionId:n,id:s})=>{if(null!==t.activeSectionId&&t.activeSectionId!==n)return t;const d=new Set(t.ids);return d.has(s)?d.delete(s):d.add(s),{activeSectionId:d.size?n:null,ids:d}}),this.deselect=this.updater((t,{sectionId:n,id:s})=>{if(t.activeSectionId!==n)return t;const d=new Set(t.ids);return d.delete(s),{activeSectionId:d.size?n:null,ids:d}}),this.clear=this.updater((t,n)=>t.activeSectionId===n?tt():t),this.reset=this.updater(tt)}}return o.\u0275fac=function(t){return new(t||o)},o.\u0275prov=e.\u0275\u0275defineInjectable({token:o,factory:o.\u0275fac}),o})(),W=(()=>{class o extends S.m1{constructor(){super({uploadedCounts:{},firstPhotoThumbnailUrl:null}),this.hasUploadedMedia$=this.select(({uploadedCounts:t})=>Object.values(t).some(n=>(null!=n?n:0)>0)),this.firstPhotoThumbnailUrl$=this.select(({firstPhotoThumbnailUrl:t})=>t),this.setFirstPhotoThumbnailUrl=this.updater((t,n)=>Object.assign(Object.assign({},t),{firstPhotoThumbnailUrl:n})),this.setUploadedCount=this.updater((t,{sectionId:n,count:s})=>Object.assign(Object.assign({},t),{uploadedCounts:Object.assign(Object.assign({},t.uploadedCounts),{[n]:s})})),this.reset=this.updater(()=>({uploadedCounts:{},firstPhotoThumbnailUrl:null}))}}return o.\u0275fac=function(t){return new(t||o)}
1,o.\u0275prov=e.\u0275\u0275defineInjectable({token:o,factory:o.\u0275fac}),o})();var Tt=_(30567),G=_(61709),Q=_(7763),f=_(22095),H=_(75778),hn=_(31307);function He(o,i){return i.pipe((0,H.x)(),(0,C.w)(t=>Ot(o,t)))}function Ot(o,i){return o.orderMetadata.observeMetadata(i).pipe((0,x.U)(t=>{var n;return null!==(n=null==t?void 0:t.dropboxImport)&&void 0!==n?n:null}),(0,R.K)(t=>(console.error("Failed to watch the Dropbox import summary:",t),(0,ee.of)(null))))}function Ye(o,i,t){var n,s,d;if(!o||o.finishedAt||function fn(o){const i=Date.parse(o.startedAt);return Number.isFinite(i)&&Date.now()-i>36e5}(o))return null;const g=null!==(d=null===(s=null===(n=o.expected)||void 0===n?void 0:n.find(r=>r.mediaType===i))||void 0===s?void 0:s.count)&&void 0!==d?d:0;if(!g)return null;const c=t().filter(r=>r.settled&&!!r.dropboxId&&!!r.createdAt&&r.createdAt>=o.startedAt).length;return{total:g,done:Math.min(c,g)}}function nt(o,i){return i?{uploading:!0,total:(o.uploading?o.total:0)+i.total,done:(o.uploading?o.done:0)+i.done}:o}var bn=_(98723);let V=(()=>{class o extends S.m1{constructor(){super({message:"",visible:!1,variant:"success"}),this.message$=this.select(t=>t.message),this.visible$=this.select(t=>t.visible),this.variant$=this.select(t=>t.variant),this.show=this.effect(t=>t.pipe((0,w.b)(({message:n,variant:s})=>this.patchState({message:n,variant:s,visible:!0})),(0,C.w)(({duration:n=3e3})=>(0,bn.H)(n).pipe((0,w.b)(()=>this.patchState({visible:!1})))))),this.hide=this.updater(t=>Object.assign(Object.assign({},t),{visible:!1}))}}return o.\u0275fac=function(t){return new(t||o)}
1,o.\u0275prov=e.\u0275\u0275defineInjectable({token:o,factory:o.\u0275fac}),o})();const Dt={[f.US.Esoft]:f.mL,[f.US.Cubicasa]:f.np,[f.US.Dropbox]:f.KE},Cn={orderId:"",sources:[],syncing:[]};let $t=(()=>{class o extends S.m1{constructor(t,n,s,d,g,c){super(Cn),this.esoftAssetsRepository=t,this.cubicasaAssetsRepository=n,this.dropboxAssetsRepository=s,this.coreRepository=d,this.appConfigService=g,this.toastStore=c,this.sources$=this.select(r=>r.sources),this.syncing$=this.select(r=>r.syncing),this.hasNewContent$=this.select(this.sources$,r=>r.some(a=>a.hasNewContent)),this.vm$=this.select(this.sources$,this.syncing$,this.hasNewContent$,(r,a,l)=>({sources:r,syncing:a,hasNewContent:l,hasSources:r.length>0})),this.evaluate=this.effect(r=>r.pipe((0,C.w)(()=>this.evaluateSources()),(0,S._b)(a=>this.patchState({sources:a}),a=>console.error("Failed to evaluate sync sources:",a)))),this.syncSource=this.effect(r=>r.pipe((0,w.b)(a=>this.markSyncing(a,!0)),(0,G.zg)(a=>this.importFrom(a).pipe((0,w.b)(l=>{this.markSyncing(a,!1),this.toastStore.show({message:this.sourceMessage(a,l),variant:l?"success":"error"}),l?this.clearNewContent([a]):this.evaluate()}))))),this.syncAll=this.effect(r=>r.pipe((0,x.U)(()=>this.get().sources.filter(a=>a.hasNewContent)),(0,C.w)(a=>a.length?(a.forEach(l=>this.markSyncing(l.id,!0)),(0,Tt.D)(a.map(l=>this.importFrom(l.id).pipe((0,x.U)(p=>({source:l,result:p})),(0,w.b)(()=>this.markSyncing(l.id,!1))))).pipe((0,w.b)(l=>{const p=l.filter(({result:u})=>!u);this.toastStore.show({message:p.length?`Could not sync ${p.map(({source:u})=>u.name).join(", ")}.`:"Sync started \u2014 new content will appear shortly.",variant:p.length?"error":"success"}),this.clearNewContent(l.filter(({result:u})=>u).map(({source:u})=>u.id)),p.length&&this.evaluate()}))):(0,ee.of)([])))),this.watchDropboxImport=this.effect(r=>function _n(o,i){return i.pipe((0,H.x)(),(0,C.w)(t=>Ot(o,t).pipe((0,x.U)(n=>{var s;return null!==(s=null==n?void 0:n.finishedAt)&&void 0!==s?s:null}),(0,H.x)(),(0,hn.T)(1),(0,v.h)(n=>!!n))))}(this.coreRepository,r).pipe((0,w.b)(()=>this.evaluate())))}setOrderId(t){this.patchState({orderId:t}),this.appConfigService.isDropboxConnected&&this.watchDropboxImport(t)}importFrom(t){const n=this.get().orderId;return{[f.US.Esoft]:()=>this.esoftAssetsRepository.importAssets(n),[f.US.Cubicasa]:()=>this.cubicasaAssetsRepository.importAssets(n),[f.US.Dropbox]:()=>this.dropboxAssetsRepository.importAssets(n)}[t]().pipe((0,x.U)(()=>!0),(0,R.K)(d=>(console.error(`Failed to sync from ${t}:`,d),(0,ee.of)(!1))))}sourceMessage(t,n){const s=Dt[t];return n?`${s} sync started \u2014 new content will appear shortly.`:`Could not sync ${s} content.`}evaluateSources(){const t=this.get().orderId,n=[];return this.appConfigService.isEsoftConnected&&n.push(this.evaluateSource(this.esoftAssetsRepository.getAvailability(t),f.US.Esoft,f.Ho)),this.appConfigService.isCubicasaConnected&&n.push(this.evaluateSource(this.cubicasaAssetsRepository.getAvailability(t),f.US.Cubicasa,f.U)),this.appConfigService.isDropboxConnected&&n.push(this.evaluateSource(this.dropboxAssetsRepository.getAvailability(t),f.US.Dropbox,f.Yd)),n.length?(0,Tt.D)(n).pipe((0,x.U)(s=>s.flat())):(0,ee.of)([])}evaluateSource(t,n,s){const d=Dt[n];return t.pipe((0,x.U)(({linked:g,hasNewContent:c})=>g?[{id:n,name:d,logoSrc:s,hasNewContent:c}]:[]),(0,R.K)(g=>(console.error(`Failed to read ${d} availability:`,g),(0,ee.of)([]))))}clearNewContent(t){!t.length||this.patchState(n=>({sources:n.sources.map(s=>t.includes(s.id)?Object.assign(Object.assign({},s),{hasNewContent:!1}):s)}))}markSyncing(t,n){const s=this.get().syncing.filter(d=>d!==t);this.patchState({syncing:n?[...s,t]:s})}}return o.\u0275fac=function(t){return new(t||o)(e.\u0275\u0275inject(Q.Ls),e.\u0275\u0275inject(Q.L$),e.\u0275\u0275inject(Q.qD),e.\u0275\u0275inject(Q.AO),e.\u0275\u0275inject(D._ZM),e.\u0275\u0275inject(V))},o.\u0275prov=e.\u0275\u0275defineInjectable({token:o,factory:o.\u0275fac}),o})();var xn=_(1059),Et=_(60519);const yn={orderData:null,order:null,activeSection:f.g8.Photos,loading:!0,error:null};let Me=(()=>{class o extends S.m1{constructor(t,n,s,d){super(yn),this.ordersRepository=t,this.listingWebsitesService=n,this.toastStore=s,this.mediaPresence=d,this.vm$=this.select(g=>g,{debounce:!1}),this.order$=this.select(g=>g.order),this.syncNativeUploadFlagWithContent=this.effect(()=>this.select(g=>{var c;return null===(c=g.order)||void 0===c?void 0:c.id}).pipe((0,C.w)(g=>g?this.mediaPresence.hasUploadedMedia$.pipe((0,xn.O)(!1),(0,Et.G)(),(0,v.h)(([c,r])=>c!==r),(0,P.M)(this.order$),(0,v.h)(([[,c],r])=>!!r&&!!r.isNativeUpload!==c),(0,ne.b)(([[,c],r])=>(0,te.D)(this.ordersRepository.update(r.id,{isNativeUpload:c})).pipe((0,S._b)(()=>
1this.setOrderNativeUploadFlag(c),a=>console.error("[WorkspacePageStore] Failed to sync isNativeUpload",a))))):B.E))),this.stampCoverImageFromFirstPhoto=this.effect(()=>this.select(this.mediaPresence.firstPhotoThumbnailUrl$,this.order$,(g,c)=>({thumbnailUrl:g,order:c})).pipe((0,v.h)(({thumbnailUrl:g,order:c})=>!!g&&!!c&&!c.coverImage),(0,H.x)((g,c)=>{var r,a;return(null===(r=g.order)||void 0===r?void 0:r.id)===(null===(a=c.order)||void 0===a?void 0:a.id)&&g.thumbnailUrl===c.thumbnailUrl}),(0,ne.b)(({thumbnailUrl:g,order:c})=>{const r=g;return(0,te.D)(this.ordersRepository.update(c.id,{coverImage:r})).pipe((0,S._b)(()=>this.setOrderCoverImage(r),a=>console.error("[WorkspacePageStore] Failed to stamp coverImage",a)))}))),this.setActiveSection=this.updater((g,c)=>Object.assign(Object.assign({},g),{activeSection:c})),this.loadOrder=this.effect(g=>g.pipe((0,w.b)(()=>{this.patchState({loading:!0,error:null,order:null}),this.mediaPresence.reset()}),(0,C.w)(c=>this.ordersRepository.getById$(c).pipe((0,T.q)(1))),(0,S._b)(c=>this.orderLoaded(c),c=>this.orderLoadFailed(c)))),this.purgeWebsite=this.effect(g=>g.pipe((0,P.M)(this.order$),(0,C.w)(([,c])=>c?this.listingWebsitesService.purgePropertyWebsite(c.id).pipe((0,S._b)(()=>this.handleWebsitePurged(),r=>this.handleWebsitePurgeFailed(r))):B.E)))}orderLoaded(t){this.patchState(t?{orderData:this.mapOrderToWorkspaceData(t),order:t,loading:!1,error:null}:{loading:!1,error:"Order not found"})}handleWebsitePurged(){this.toastStore.show({message:"Listing website purged.",variant:"success"})}handleWebsitePurgeFailed(t){console.error("[WorkspacePageStore] Website purge failed",t),this.toastStore.show({message:"Could not purge the listing website.",variant:"error"})}orderLoadFailed(t){console.error("Failed to load order:",t),this.patchState({loading:!1,error:"Failed to load order"})}mapOrderToWorkspaceData(t){var n,s,d,g,c;return{id:t.id,orderNo:null!==(n=t.orderNo)&&void 0!==n?n:"",formattedAddress:null!==(d=null===(s=t.property_address)||void 0===s?void 0:s.formatted_address)&&void 0!==d?d:"",clientFullName:null!==(g=t.client_full_name)&&void 0!==g?g:"",customerUid:null!==(c=t.customerUid)&&void 0!==c?c:""}}setOrderNativeUploadFlag(t){this.patchState(n=>({order:n.order?Object.assign(Object.assign({},n.order),{isNativeUpload:t}):null}))}setOrderCoverImage(t){this.patchState(n=>({order:n.order?Object.assign(Object.assign({},n.order),{coverImage:t}):null}))}}return o.\u0275fac=function(t){return new(t||o)(e.\u0275\u0275inject(D.HVf),e.\u0275\u0275inject(kt.fR),e.\u0275\u0275inject(V),e.\u0275\u0275inject(W))},o.\u0275prov=e.\u0275\u0275defineInjectable({token:o,factory:o.\u0275fac}),o})();var Ft=_(43860),Sn=_(24444),wn=_(94489);function In(o,i){1&o&&e.\u0275\u0275element(0,"span",7)}const kn=function(o){return{"animate-spin":o}};function Pn(o,i){if(1&o&&(e.\u0275\u0275elementStart(0,"button",17,18),e.\u0275\u0275element(2,"i",19),e.\u0275\u0275pipe(3,"functionCall"),e.\u0275\u0275elementEnd()),2&o){const t=e.\u0275\u0275reference(1),n=e.\u0275\u0275nextContext().$implicit,s=e.\u0275\u0275nextContext(3).ngIf,d=e.\u0275\u0275nextContext();e.\u0275\u0275attribute("aria-label","Sync "+n.name),e.\u0275\u0275advance(2),e.\u0275\u0275property("size",t.iconSize)("ngClass",e.\u0275\u0275pureFunction1(7,kn,e.\u0275\u0275pipeBind3(3,3,d.isSyncing,s.syncing,n.id)))}}function Tn(o,i){if(1&o){const t=e.\u0275\u0275getCurrentView();e.\u0275\u0275elementStart(0,"button",20,21),e.\u0275\u0275listener("click",function(){e.\u0275\u0275restoreView(t);const s=e.\u0275\u0275nextContext().$implicit;return e.\u0275\u0275nextContext(4).syncClicked(s.id)}),e.\u0275\u0275element(2,"i",4),e.\u0275\u0275elementEnd()}if(2&o){const t=e.\u0275\u0275reference(1),n=e.\u0275\u0275nextContext().$implicit;e.\u0275\u0275attribute("aria-label","Sync "+n.name),e.\u0275\u0275advance(2),e.\u0275\u0275property("size",t.iconSize)}}const On=function(o){return{"opacity-50 cursor-not-allowed":o}};function Dn(o,i){if(1&o&&(e.\u0275\u0275elementStart(0,"div",11)(1,"div",12),e.\u0275\u0275element(2,"img",13),e.\u0275\u0275elementStart(3,"span",14),e.\u0275\u0275text(4),e.\u0275\u0275elementEnd()(),e.\u0275\u0275template(5,Pn,4,9,"button",15),e.\u0275\u0275pipe(6,"functionCall"),e.\u0275\u0275template(7,Tn,3,2,"ng-template",null,16,e.\u0275\u0275templateRefExtractor),e.\u0275\u0275elementEnd()),2&o){const t=i.$implicit,n=e.\u0275\u0275reference(8),s=e.\u0275\u0275nextContext(3).ngIf,d=e.\u0275\u0275nextContext();e.\u0275\u0275property("ngClass",e.\u0275\u0275pureFunction1(12,On,!t.hasNewContent)),e.\u0275\u0275advance(2),e.\u0275\u0275property("src",t.logoSrc,e.\u0275\u0275sanitizeUrl)("alt",t.name),e.\u0275\u0275advance(1),e.\u0275\u0275classProp("new",t.hasNewContent),e.\u0275\u0275advance(1),e.\u0275\u0275textInterpolate1(" ",t.hasNewContent?"New content available":"No update available"," "),e.\u0275\u0275advance(1),e.\u0275\u0275property("ngIf",!t.hasNewContent||e.\u0275\u0275pipeBind3(6,8,d.isSyncing,s.syncing,t.id))("ngIfElse",n)}}function $n(o,i){if(1&o){const t=e.\u0275\u0275getCurrentView();e.\u0275\u0275elementStart(0,"ui-blank-dropdown")(1,"div",8),e.\u0275\u0275template(2,Dn,9,14,"div",9),e.\u0275\u0275elementStart(3,"button",10),e.\u0275\u0275listener("click",function(){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext(3).syncAllClicked()}),e.\u0275\u0275text(4," Sync All "),e.\u0275\u0275elementEnd()()()}if(2&o){const t=e.\u0275\u0275nextContext(2).ngIf,n=e.\u0275\u0275nextContext();e.\u0275\u0275advance(2),e.\u0275\u0275property("ngForOf",t.sources)("ngForTrackBy",n.trackBySourceId),e.\u0275\u0275advance(1),e.\u0275\u0275property("disabled",!t.hasNewContent)}}function En(o,i){if(1&o){const t=e.\u0275\u0275getCurrentView();e.\u0275\u0275elementStart(0,"button",2,3),e.\u0275\u0275listener("click",function(){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext(2).menuOpened()}),e.\u0275\u0275element(2,"i",4),e.\u0275\u0275text(3," Sync from "),e.\u0275\u0275template(4,In,1,0,"span",5),e.\u0275\u0275template(5,$n,5,3,"ui-blank-dropdown",6),e.\u0275\u0275elementEnd()}if(2&o){const t=e.\u0275\u0275reference(1),n=e.\u0275\u0275nextContext().ngIf;e.\u0275\u0275advance(2),e.\u0275\u0275property("size",t.iconSize),e.\u0275\u0275advance(2),e.\u0275\u0275property("ngIf",n.hasNewContent)}}function Fn(o,i){if(1&o&&(e.\u0275\u0275elementContainerStart(0),e.\u0275\u0275template(1,En,6,2,"button",1),e.\u0275\u0275elementContainerEnd()),2&o){const t=i.ngIf;e.\u0275\u0275advance(1),e.\u0275\u0275property("ngIf",t.hasSources)}}let jn=(()=>{class o{constructor(t){this.store=t,this.vm$=this.store.vm$}ngOnInit(){this.store.setOrderId(this.orderId),this.store.evaluate()}menuOpened(){this.store.evaluate()}syncClicked(t){this.store.syncSource(t)}syncAllClicked(){this.store.syncAll()}isSyncing(t,n){return t.includes(n)}trackBySourceId(t,n){return n.id}}return o.\u0275fac=function(t){return new(t||o)(e.\u0275\u0275directiveInject($t))}
1,o.\u0275cmp=e.\u0275\u0275defineComponent({type:o,selectors:[["tn-sync-from-menu"]],inputs:{orderId:"orderId"},decls:2,vars:3,consts:[[4,"ngIf"],["type","button","class","sync-trigger","uiBtnSize","medium","uiBtnTheme","main","themeMode","secondary","uiDropdown","","align","end",3,"click",4,"ngIf"],["type","button","uiBtnSize","medium","uiBtnTheme","main","themeMode","secondary","uiDropdown","","align","end",1,"sync-trigger",3,"click"],["syncTrigger","btnSize"],["uiIcon","sync",3,"size"],["class","new-content-dot","aria-label","New content available",4,"ngIf"],[4,"uiDropdownTemplate"],["aria-label","New content available",1,"new-content-dot"],[1,"sync-menu","app-v2"],["class","sync-row",3,"ngClass",4,"ngFor","ngForOf","ngForTrackBy"],["type","button","uiBtnSize","small","uiBtnTheme","main","themeMode","secondary",1,"w-full",3,"disabled","click"],[1,"sync-row",3,"ngClass"],[1,"sync-text"],[1,"sync-logo",3,"src","alt"],[1,"sync-status"],["type","button","uiBtnSize","small","iconOnly","","uiBtnTheme","setting","class","sync-action",4,"ngIf","ngIfElse"],["syncBtn",""],["type","button","uiBtnSize","small","iconOnly","","uiBtnTheme","setting",1,"sync-action"],["syncingButton","btnSize"],["uiIcon","sync",3,"size","ngClass"],["type","button","uiBtnSize","small","iconOnly","","uiBtnTheme","main","themeMode","text",1,"sync-action",3,"click"],["syncButton","btnSize"]],template:function(t,n){1&t&&(e.\u0275\u0275template(0,Fn,2,1,"ng-container",0),e.\u0275\u0275pipe(1,"async")),2&t&&e.\u0275\u0275property("ngIf",e.\u0275\u0275pipeBind1(1,1,n.vm$))},directives:[y.NgIf,ie.s,oe.V,Ft.w,Z.a,Ft.S,Sn.$,y.NgForOf,y.NgClass],pipes:[y.AsyncPipe,wn.g],styles:[".sync-trigger[_ngcontent-%COMP%]{position:relative}.new-content-dot[_ngcontent-%COMP%]{position:absolute;top:-.25rem;right:-.25rem;height:.5rem;width:.5rem;border-radius:9999px;--tw-bg-opacity: 1;background-color:rgb(250 82 82 / var(--tw-bg-opacity, 1))}.sync-menu[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.5rem;padding:.5rem;width:288px}.sync-row[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;border-radius:.25rem;padding:.5rem .75rem}.sync-row[_ngcontent-%COMP%]:hover{--tw-bg-opacity: 1;background-color:rgb(250 250 250 / var(--tw-bg-opacity, 1))}.sync-logo[_ngcontent-%COMP%]{height:1.25rem;width:auto;flex-shrink:0}.sync-text[_ngcontent-%COMP%]{display:flex;min-width:0;flex:1 1 0%;flex-direction:column;align-items:flex-start;gap:.5rem}.sync-status[_ngcontent-%COMP%]{font-size:.75rem;font-weight:500;line-height:1rem;--tw-text-opacity: 1;color:rgb(175 175 175 / var(--tw-text-opacity, 1))}.sync-status.new[_ngcontent-%COMP%]{--tw-text-opacity: 1;color:rgb(34 197 126 / var(--tw-text-opacity, 1))}"],changeDetection:0}),o})();function Mn(o,i){if(1&o){const t=e.\u0275\u0275getCurrentView();e.\u0275\u0275elementStart(0,"div")(1,"mat-menu",null,17)(3,"button",18),e.\u0275\u0275listener("click",function(){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext().purgePhotosClicked.emit()}),e.\u0275\u0275text(4," Purge all photos "),e.\u0275\u0275elementEnd(),e.\u0275\u0275elementStart(5,"button",18),e.\u0275\u0275listener("click",function(){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext().purgeFloorPlansClicked.emit()}),e.\u0275\u0275text(6," Purge all floor plans "),e.\u0275\u0275elementEnd(),e.\u0275\u0275elementStart(7,"button",18),e.\u0275\u0275listener("click",function(){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext().purgePanoramasClicked.emit()}),e.\u0275\u0275text(8," Purge all 360\xb0 photos "),e.\u0275\u0275elementEnd(),e.\u0275\u0275elementStart(9,"button",18),e.\u0275\u0275listener("click",function(){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext().purgeVideosClicked.emit()}),e.\u0275\u0275text(10," Purge all videos "),e.\u0275\u0275elementEnd(),e.\u0275\u0275elementStart(11,"button",18),e.\u0275\u0275listener("click",function(){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext().purgeThreeDContentsClicked.emit()}),e.\u0275\u0275text(12," Purge all 3D tours "),e.\u0275\u0275elementEnd(),e.\u0275\u0275elementStart(13,"button",18),e.\u0275\u0275listener("click",function(){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext().purgeFilesClicked.emit
1()}),e.\u0275\u0275text(14," Purge all files "),e.\u0275\u0275elementEnd(),e.\u0275\u0275elementStart(15,"button",18),e.\u0275\u0275listener("click",function(){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext().purgeWebsiteClicked.emit()}),e.\u0275\u0275text(16," Purge listing website "),e.\u0275\u0275elementEnd()(),e.\u0275\u0275elementStart(17,"button",19),e.\u0275\u0275text(18," Testing Actions "),e.\u0275\u0275elementEnd()()}if(2&o){const t=e.\u0275\u0275reference(2);e.\u0275\u0275advance(17),e.\u0275\u0275property("matMenuTriggerFor",t)}}let Un=(()=>{class o{constructor(){this.showTestingActions=!1,this.deliverEnabled=!1,this.orderClicked=new e.EventEmitter,this.clientClicked=new e.EventEmitter,this.purgePhotosClicked=new e.EventEmitter,this.purgeFloorPlansClicked=new e.EventEmitter,this.purgePanoramasClicked=new e.EventEmitter,this.purgeVideosClicked=new e.EventEmitter,this.purgeThreeDContentsClicked=new e.EventEmitter,this.purgeFilesClicked=new e.EventEmitter,this.purgeWebsiteClicked=new e.EventEmitter,this.previewClicked=new e.EventEmitter,this.deliverClicked=new e.EventEmitter}}return o.\u0275fac=function(t){return new(t||o)}
1,o.\u0275cmp=e.\u0275\u0275defineComponent({type:o,selectors:[["tn-workspace-header"]],inputs:{orderData:"orderData",showTestingActions:"showTestingActions",deliverEnabled:"deliverEnabled"},outputs:{orderClicked:"orderClicked",clientClicked:"clientClicked",purgePhotosClicked:"purgePhotosClicked",purgeFloorPlansClicked:"purgeFloorPlansClicked",purgePanoramasClicked:"purgePanoramasClicked",purgeVideosClicked:"purgeVideosClicked",purgeThreeDContentsClicked:"purgeThreeDContentsClicked",purgeFilesClicked:"purgeFilesClicked",purgeWebsiteClicked:"purgeWebsiteClicked",previewClicked:"previewClicked",deliverClicked:"deliverClicked"},decls:23,vars:9,consts:[[1,"header"],[1,"content"],[1,"meta"],[1,"tags"],[1,"tag","order-tag",3,"click"],[1,"tag","client-tag",3,"click"],[1,"title"],[1,"description"],[1,"actions"],[4,"ngIf"],[3,"orderId"],["uiBtnSize","medium","uiBtnTheme","main","themeMode","tertiary",3,"disabled","click"],["previewButton","btnSize"],["uiIcon","visibility",3,"size"],["uiBtnSize","medium","uiBtnTheme","main","themeMode","primary",3,"disabled","click"],["deliverButton","btnSize"],["uiIcon","send",3,"size"],["testingActionsMenu","matMenu"],["mat-menu-item","",3,"click"],["uiBtnSize","medium","uiBtnTheme","main","themeMode","text",3,"matMenuTriggerFor"]],template:function(t,n){if(1&t&&(e.\u0275\u0275elementStart(0,"div",0)(1,"div",1)(2,"div",2)(3,"div",3)(4,"button",4),e.\u0275\u0275listener("click",function(){return n.orderClicked.emit(n.orderData.id)}),e.\u0275\u0275text(5),e.\u0275\u0275elementEnd(),e.\u0275\u0275elementStart(6,"button",5),e.\u0275\u0275listener("click",function(){return n.clientClicked.emit(n.orderData.customerUid)}),e.\u0275\u0275text(7),e.\u0275\u0275elementEnd()(),e.\u0275\u0275elementStart(8,"h1",6),e.\u0275\u0275text(9),e.\u0275\u0275elementEnd()(),e.\u0275\u0275elementStart(10,"p",7),e.\u0275\u0275text(11," This page is for managing your listing's core assets. You can upload photos, videos, and other media assets here to prepare and deliver the final listing page to your clients. "),e.\u0275\u0275elementEnd()(),e.\u0275\u0275elementStart(12,"div",8),e.\u0275\u0275template(13,Mn,19,1,"div",9),e.\u0275\u0275element(14,"tn-sync-from-menu",10),e.\u0275\u0275elementStart(15,"button",11,12),e.\u0275\u0275listener("click",function(){return n.previewClicked.emit()}),e.\u0275\u0275element(17,"i",13),e.\u0275\u0275text(18," Preview Delivery "),e.\u0275\u0275elementEnd(),e.\u0275\u0275elementStart(19,"button",14,15),e.\u0275\u0275listener("click",function(){return n.deliverClicked.emit()}),e.\u0275\u0275element(21,"i",16),e.\u0275\u0275text(22," Deliver "),e.\u0275\u0275elementEnd()()()),2&t){const s=e.\u0275\u0275reference(16),d=e.\u0275\u0275reference(20);e.\u0275\u0275advance(5),e.\u0275\u0275textInterpolate1(" ",n.orderData.orderNo," "),e.\u0275\u0275advance(2),e.\u0275\u0275textInterpolate1(" Client: ",n.orderData.clientFullName," "),e.\u0275\u0275advance(2),e.\u0275\u0275textInterpolate1(" Listing: ",n.orderData.formattedAddress," "),e.\u0275\u0275advance(4),e.\u0275\u0275property("ngIf",n.showTestingActions),e.\u0275\u0275advance(1),e.\u0275\u0275property("orderId",n.orderData.id),e.\u0275\u0275advance(1),e.\u0275\u0275property("disabled",!n.deliverEnabled),e.\u0275\u0275advance(2),e.\u0275\u0275property("size",s.iconSize),e.\u0275\u0275advance(2),e.\u0275\u0275property("disabled",!n.deliverEnabled),e.\u0275\u0275advance(2),e.\u0275\u0275property("size",d.iconSize)}},directives:[y.NgIf,Re.VK,Re.OP,ie.s,oe.V,Re.p6,jn,Z.a],styles:[".header[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:1rem;overflow:hidden;border-bottom-width:1px;border-style:solid;--tw-border-opacity: 1;border-color:rgb(226 226 226 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}@media (min-width: 1024px){.header[_ngcontent-%COMP%]{flex-direction:row;gap:1.75rem}}.header[_ngcontent-%COMP%]{padding:26px 24px}.content[_ngcontent-%COMP%]{display:flex;flex:1 1 0%;flex-direction:column;gap:.5rem}.meta[_ngcontent-%COMP%]{display:flex;flex-direction:column;justify-content:center}.tags[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem}.tag[_ngcontent-%COMP%]{position:relative;display:inline-flex;cursor:pointer;align-items:center;gap:.25rem;border-radius:.125rem;border-style:none;padding-left:.25rem;padding-right:.25rem;font-weight:500;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1));-webkit-text-decoration-line:none;text-decoration-line:none;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s}.tag[_ngcontent-%COMP%]:hover{-webkit-text-decoration-line:underline;text-decoration-line:underline}.tag.order-tag[_ngcontent-%COMP%]{--tw-bg-opacity: 1;background-color:rgb(26 26 26 / var(--tw-bg-opacity, 1))}.tag.client-tag[_ngcontent-%COMP%]{background-color:#26dca6}.title[_ngcontent-%COMP%]{margin-top:.5rem;font-size:1.5rem;font-weight:700;line-height:2rem;--tw-text-opacity: 1;color:rgb(26 26 26 / var(--tw-text-opacity, 1))}.description[_ngcontent-%COMP%]{margin:0;font-size:.875rem;font-weight:300;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(128 128 128 / var(--tw-text-opacity, 1));max-width:875px}.actions[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem}"],changeDetection:0}),o})();function Vn(o,i){if(1&o){const t=e.\u0275\u0275getCurrentView();e.\u0275\u0275elementStart(0,"a",2),e.\u0275\u0275listener("click",function(){const d=e.\u0275\u0275restoreView(t).$implicit;return e.\u0275\u0275nextContext().selectSection(d.id)}),e.\u0275\u0275element(1,"i",3),e.\u0275\u0275text(2),e.\u0275\u0275elementEnd()}if(2&o){const t=i.$implicit,n=e.\u0275\u0275nextContext();e.\u0275\u0275property("active",n.activeSection===t.id),e.\u0275\u0275advance(1),e.\u0275\u0275property("uiIcon",t.icon)("size",24),e.\u0275\u0275advance(1),e.\u0275\u0275textInterpolate1(" ",t.tabLabel," ")}}let zn=(()=>{class o{constructor(){this.activeSection=f.g8.Photos,this.sectionSelected=new e.EventEmitter,this.tabs=f.jb,this.trackById=N.xnY}selectSection(t){this.sectionSelected.emit(t)}}return o.\u0275fac=function(t){return new(t||o)}
1,o.\u0275cmp=e.\u0275\u0275defineComponent({type:o,selectors:[["tn-workspace-section-tabs"]],inputs:{activeSection:"activeSection"},outputs:{sectionSelected:"sectionSelected"},decls:2,vars:2,consts:[["mat-tab-nav-bar","","mat-align-tabs","center"],["mat-tab-link","",3,"active","click",4,"ngFor","ngForOf","ngForTrackBy"],["mat-tab-link","",3,"active","click"],[3,"uiIcon","size"]],template:function(t,n){1&t&&(e.\u0275\u0275elementStart(0,"nav",0),e.\u0275\u0275template(1,Vn,3,4,"a",1),e.\u0275\u0275elementEnd()),2&t&&(e.\u0275\u0275advance(1),e.\u0275\u0275property("ngForOf",n.tabs)("ngForTrackBy",n.trackById))},directives:[Xe.BU,y.NgForOf,Xe.Nj,Z.a],styles:["[_nghost-%COMP%]{position:sticky;top:0;z-index:10;width:100%;--tw-bg-opacity: 1;background-color:rgb(250 250 250 / var(--tw-bg-opacity, 1))}"],changeDetection:0}),o})();const Nn={expandedSectionIds:f.jb.filter(o=>o.defaultExpanded).map(o=>o.id)};let j=(()=>{class o extends S.m1{constructor(){super(Nn),this.expandedSectionIds$=this.select(t=>t.expandedSectionIds),this.toggleExpanded=this.updater((t,n)=>({expandedSectionIds:t.expandedSectionIds.includes(n)?t.expandedSectionIds.filter(s=>s!==n):t.expandedSectionIds.concat(n)})),this.expand=this.updater((t,n)=>t.expandedSectionIds.includes(n)?t:{expandedSectionIds:t.expandedSectionIds.concat(n)})}}return o.\u0275fac=function(t){return new(t||o)}
1,o.\u0275prov=e.\u0275\u0275defineInjectable({token:o,factory:o.\u0275fac}),o})();var be=_(36053),X=_(63212),E=_(1698),Bn=_(56461),it=_(12851);function An(o,i){if(1&o){const t=e.\u0275\u0275getCurrentView();e.\u0275\u0275elementStart(0,"video",5),e.\u0275\u0275listener("error",function(){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext().videoFailed()}),e.\u0275\u0275elementEnd()}if(2&o){const t=e.\u0275\u0275nextContext();e.\u0275\u0275property("src",t.previewUrl,e.\u0275\u0275sanitizeUrl)}}function Ln(o,i){1&o&&e.\u0275\u0275element(0,"img",7),2&o&&e.\u0275\u0275property("src",i.ngIf,e.\u0275\u0275sanitizeUrl)}function Rn(o,i){if(1&o&&(e.\u0275\u0275template(0,Ln,1,1,"img",6),e.\u0275\u0275pipe(1,"async")),2&o){const t=e.\u0275\u0275nextContext(),n=e.\u0275\u0275reference(5);e.\u0275\u0275property("ngIf",e.\u0275\u0275pipeBind1(1,2,t.thumbnailUrl$))("ngIfElse",n)}}function Wn(o,i){if(1&o&&e.\u0275\u0275element(0,"tn-video-preview-unavailable",9),2&o){const t=e.\u0275\u0275nextContext(2);e.\u0275\u0275property("size",t.size)}}function Gn(o,i){if(1&o&&e.\u0275\u0275template(0,Wn,1,1,"tn-video-preview-unavailable",8),2&o){const t=e.\u0275\u0275nextContext();e.\u0275\u0275property("ngIf",!t.uploadFailed)}}function Hn(o,i){if(1&o){const t=e.\u0275\u0275getCurrentView();e.\u0275\u0275elementStart(0,"tn-video-play-button",10),e.\u0275\u0275listener("toggled",function(){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext().opened.emit()}),e.\u0275\u0275elementEnd()}if(2&o){const t=e.\u0275\u0275nextContext();e.\u0275\u0275property("size",t.size)("variant",t.variant)}}let jt=(()=>{class o{constructor(t){this.noembedService=t,this.url="",this.previewUrl=null,this.disabled=!1,this.size="large",this.variant="play",this.uploadState=void 0,this.opened=new e.EventEmitter,this.thumbnailUrl$=(0,ee.of)(null),this.previewFailed=!1}get uploadFailed(){return this.uploadState===f.KG.Failed}ngOnChanges(t){t.previewUrl&&(this.previewFailed=!1),(t.playbackId||t.url||t.uploadState)&&(this.thumbnailUrl$=this.resolveThumbnailUrl())}videoFailed(){this.previewFailed=!0}resolveThumbnailUrl(){const t=!this.uploadState||this.uploadState===f.KG.Finished,{playbackId:n,url:s}=this;return t?n?(0,ee.of)((0,N.qlt)(n)):s?this.noembedService.embed(s).pipe((0,x.U)(d=>{var g;return null!==(g=null==d?void 0:d.thumbnail_url)&&void 0!==g?g:null})):(0,ee.of)(null):(0,ee.of)(null)}}return o.\u0275fac=function(t){return new(t||o)(e.\u0275\u0275directiveInject(f.mV))},o.\u0275cmp=e.\u0275\u0275defineComponent({type:o,selectors:[["tn-video-thumbnail"]],inputs:{url:"url",playbackId:"playbackId",previewUrl:"previewUrl",disabled:"disabled",size:"size",variant:"variant",uploadState:"uploadState"},outputs:{opened:"opened"},features:[e.\u0275\u0275NgOnChangesFeature],decls:7,vars:3,consts:[[1,"video-frame"],["class","video-media","muted","","playsinline","","preload","metadata",3,"src","error",4,"ngIf","ngIfElse"],["thumbnail",""],["emptyState",""],[3,"size","variant","toggled",4,"ngIf"],["muted","","playsinline","","preload","metadata",1,"video-media",3,"src","error"],["alt","","class","video-media","loading","lazy","decoding","async",3,"src",4,"ngIf","ngIfElse"],["alt","","loading","lazy","decoding","async",1,"video-media",3,"src"],[3,"size",4,"ngIf"],[3,"size"],[3,"size","variant","toggled"]],template:function(t,n){if(1&t&&(e.\u0275\u0275elementStart(0,"div",0),e.\u0275\u0275template(1,An,1,1,"video",1),e.\u0275\u0275template(2,Rn,2,4,"ng-template",null,2,e.\u0275\u0275templateRefExtractor),e.\u0275\u0275template(4,Gn,1,1,"ng-template",null,3,e.\u0275\u0275templateRefExtractor),e.\u0275\u0275template(6,Hn,1,2,"tn-video-play-button",4),e.\u0275\u0275elementEnd()),2&t){const s=e.\u0275\u0275reference(3);e.\u0275\u0275advance(1),e.\u0275\u0275property("ngIf",n.previewUrl&&!n.previewFailed)("ngIfElse",s),e.\u0275\u0275advance(5),e.\u0275\u0275property("ngIf",!n.disabled)}},directives:[y.NgIf,Bn.z,it.w],pipes:[y.AsyncPipe],styles:["[_nghost-%COMP%]{display:block;border-radius:inherit}.video-frame[_ngcontent-%COMP%]{position:relative;width:100%;overflow:hidden;--tw-bg-opacity: 1;background-color:rgb(226 226 226 / var(--tw-bg-opacity, 1));aspect-ratio:16/9;border-radius:inherit}.video-media[_ngcontent-%COMP%]{position:absolute;inset:0;height:100%;width:100%;object-fit:cover;border-radius:inherit}"],changeDetection:0}),o})();var ot=_(33103),rt=_(69009);function Yn(o,i){1&o&&e.\u0275\u0275element(0,"img",13),2&o&&e.\u0275\u0275property("src",i.ngIf,e.\u0275\u0275sanitizeUrl)}function Kn(o,i){if(1&o&&(e.\u0275\u0275elementStart(0,"div",9)(1,"div",10),e.\u0275\u0275template(2,Yn,1,1,"img",11),e.\u0275\u0275elementEnd(),e.\u0275\u0275elementStart(3,"span",12),e.\u0275\u0275text(4),e.\u0275\u0275elementEnd()()),2&o){const t=e.\u0275\u0275nextContext();e.\u0275\u0275advance(1),e.\u0275\u0275classProp("contain","contain-img"===t.config.preview),e.\u0275\u0275advance(1),e.\u0275\u0275property("ngIf",t.item.thumbnailUrl),e.\u0275\u0275advance(2),e.\u0275\u0275textInterpolate(t.item.displayName)}}function Qn(o,i){if(1&o&&(e.\u0275\u0275elementStart(0,"div",14),e.\u0275\u0275element(1,"tn-video-thumbnail",15),e.\u0275\u0275elementStart(2,"span",16),e.\u0275\u0275text(3),e.\u0275\u0275elementEnd()()),2&o){const t=e.\u0275\u0275nextContext();e.\u0275\u0275advance(1),e.\u0275\u0275property("url",t.item.url||"")("playbackId",t.item.playbackId),e.\u0275\u0275advance(2),e.\u0275\u0275textInterpolate(t.item.displayName)}}function Zn(o,i){if(1&o&&(e.\u0275\u0275elementStart(0,"div",14)(1,"div",17),e.\u0275\u0275element(2,"tn-three-d-content-preview",18)(3,"tn-video-play-button",19),e.\u0275\u0275elementEnd(),e.\u0275\u0275elementStart(4,"span",20),e.\u0275\u0275text(5),e.\u0275\u0275elementEnd()()),2&o){const t=e.\u0275\u0275nextContext();e.\u0275\u0275advance(2),e.\u0275\u0275property("url",t.item.url||""),e.\u0275\u0275advance(3),e.\u0275\u0275textInterpolate(t.item.url)}}function Xn(o,i){if(1&o&&(e.\u0275\u0275elementStart(0,"span",22),e.\u0275\u0275text(1),e.\u0275\u0275elementEnd()),2&o){const t=e.\u0275\u0275nextContext(2);e.\u0275\u0275advance(1),e.\u0275\u0275textInterpolate1(" ",t.displayNameRequiredError," ")}}function Jn(o,i){if(1&o&&(e.\u0275\u0275elementStart(0,"span",22),e.\u0275\u0275text(1),e.\u0275\u0275elementEnd()),2&o){const t=e.\u0275\u0275nextContext(2);e.\u0275\u0275advance(1),e.\u0275\u0275textInterpolate1(" ",t.displayNameMaxLengthError," ")}}function qn(o,i){if(1&o&&(e.\u0275\u0275elementContainerStart(0),e.\u0275\u0275template(1,Xn,2,1,"span",21),e.\u0275\u0275template(2,Jn,2,1,"span",21),e.\u0275\u0275elementContainerEnd()),2&o){const t=i.ngIf;e.\u0275\u0275advance(1),e.\u0275\u0275property("ngIf",t.required),e.\u0275\u0275advance(1),e.\u0275\u0275property("ngIf",t.maxlength)}}function ei(o,i){if(1&o&&(e.\u0275\u0275elementStart(0,"div",3)(1,"span",4),e.\u0275\u0275text(2,"Display type"),e.\u0275\u0275elementEnd(),e.\u0275\u0275element(3,"ui-select",23),e.\u0275\u0275elementEnd()),2&o){const t=e.\u0275\u0275nextContext();e.\u0275\u0275advance(3),e.\u0275\u0275property("items",t.displayTypeOptions)}}let ti=(()=>{class o{constructor(){this.displayTypeOptions=f.Y0,this.displayNameRequiredError=E.Iq,this.displayNameMaxLengthError=E.Fj}get displayNameControl(){return this.formGroup.controls.displayName}
1get isImagePreview(){return"cover-img"===this.config.preview||"contain-img"===this.config.preview}}return o.\u0275fac=function(t){return new(t||o)},o.\u0275cmp=e.\u0275\u0275defineComponent({type:o,selectors:[["tn-edit-item-row"]],inputs:{formGroup:"formGroup",config:"config",item:"item"},decls:11,vars:6,consts:[[1,"settings-container",3,"formGroup"],["class","item-header",4,"ngIf"],["class","preview-header",4,"ngIf"],[1,"settings-row"],[1,"field-label"],[1,"title-field"],["type","text","formControlName","displayName",1,"title-input"],[4,"ngIf"],["class","settings-row",4,"ngIf"],[1,"item-header"],[1,"thumbnail"],["alt","Media thumbnail",3,"src",4,"ngIf"],[1,"item-filename"],["alt","Media thumbnail",3,"src"],[1,"preview-header"],["size","small","variant","indicator",1,"preview-thumbnail",3,"url","playbackId"],[1,"preview-label"],[1,"preview-thumbnail","preview-thumbnail--tour"],[3,"url"],["variant","indicator","size","small"],[1,"preview-label","preview-label--url"],["class","error-message",4,"ngIf"],[1,"error-message"],["size","large","appearance","bordered","formControlName","displayType",1,"status-select",3,"items"]],template:function(t,n){1&t&&(e.\u0275\u0275elementStart(0,"div",0),e.\u0275\u0275template(1,Kn,5,4,"div",1),e.\u0275\u0275template(2,Qn,4,3,"div",2),e.\u0275\u0275template(3,Zn,6,2,"div",2),e.\u0275\u0275elementStart(4,"div",3)(5,"span",4),e.\u0275\u0275text(6,"Display title"),e.\u0275\u0275elementEnd(),e.\u0275\u0275elementStart(7,"div",5),e.\u0275\u0275element(8,"input",6),e.\u0275\u0275template(9,qn,3,2,"ng-container",7),e.\u0275\u0275elementEnd()(),e.\u0275\u0275template(10,ei,4,1,"div",8),e.\u0275\u0275elementEnd()),2&t&&(e.\u0275\u0275property("formGroup",n.formGroup),e.\u0275\u0275advance(1),e.\u0275\u0275property("ngIf",n.isImagePreview),e.\u0275\u0275advance(1),e.\u0275\u0275property("ngIf","video"===n.config.preview),e.\u0275\u0275advance(1),e.\u0275\u0275property("ngIf","tour"===n.config.preview),e.\u0275\u0275advance(6),e.\u0275\u0275property("ngIf",n.displayNameControl.touched&&n.displayNameControl.errors),e.\u0275\u0275advance(1),e.\u0275\u0275property("ngIf",n.config.showDisplayType))},directives:[$.JL,$.sg,y.NgIf,jt,ot.e,it.w,$.Fj,$.JJ,$.u,rt.H],styles:["[_nghost-%COMP%]{display:block}.settings-container[_ngcontent-%COMP%]{display:flex;width:100%;flex-direction:column;gap:1.25rem;border-radius:.25rem;border-width:1px;border-style:solid;--tw-border-opacity: 1;border-color:rgb(242 242 242 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(250 250 250 / var(--tw-bg-opacity, 1));padding:1rem .75rem}.item-header[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:.625rem;border-radius:.5rem;border-width:1px;border-style:solid;--tw-border-opacity: 1;border-color:rgb(237 237 237 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(242 242 242 / var(--tw-bg-opacity, 1));padding:.75rem}.thumbnail[_ngcontent-%COMP%]{position:relative;margin-bottom:0;height:4.5rem;flex-shrink:0;overflow:hidden;border-radius:.25rem;--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1));width:119px}.thumbnail[_ngcontent-%COMP%]   img[_ngcontent-%COMP%]{position:absolute;inset:0;height:100%;width:100%;object-fit:cover}.thumbnail.contain[_ngcontent-%COMP%]   img[_ngcontent-%COMP%]{object-fit:contain}.item-filename[_ngcontent-%COMP%]{min-width:0;flex:1 1 0%;font-size:.8125rem;font-weight:400;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(0 0 0 / var(--tw-text-opacity, 1))}.preview-header[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:.75rem;border-radius:.25rem;--tw-bg-opacity: 1;background-color:rgb(242 242 242 / var(--tw-bg-opacity, 1));padding:.5rem}.preview-thumbnail[_ngcontent-%COMP%]{flex-shrink:0;overflow:hidden;border-radius:.25rem;width:120px}.preview-thumbnail--tour[_ngcontent-%COMP%]{position:relative;aspect-ratio:16/9}.preview-label[_ngcontent-%COMP%]{min-width:0;flex:1 1 0%;overflow-wrap:break-word;font-size:.875rem;font-weight:500;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(26 26 26 / var(--tw-text-opacity, 1))}
1.preview-label--url[_ngcontent-%COMP%]{word-break:break-all}.settings-row[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:.5rem}.field-label[_ngcontent-%COMP%]{display:flex;flex-shrink:0;align-items:center;font-size:1rem;font-weight:500;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(128 128 128 / var(--tw-text-opacity, 1));width:150px;min-height:48px}.title-field[_ngcontent-%COMP%]{display:flex;min-width:0;flex:1 1 0%;flex-direction:column;gap:.25rem}.title-input[_ngcontent-%COMP%]{height:3rem;width:100%;border-radius:.5rem;border-width:1px;border-style:solid;--tw-border-opacity: 1;border-color:rgb(226 226 226 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1));padding-top:0;padding-bottom:0;padding-left:.75rem;padding-right:.75rem;font-size:1rem;font-weight:400;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(26 26 26 / var(--tw-text-opacity, 1));outline:2px solid transparent;outline-offset:2px;min-width:200px}.title-input.ng-invalid.ng-touched[_ngcontent-%COMP%]{--tw-border-opacity: 1;border-color:rgb(250 82 82 / var(--tw-border-opacity, 1))}.title-input[_ngcontent-%COMP%]:focus{border-color:var(--brand-50, #228BE6)}.title-input[_ngcontent-%COMP%]::placeholder{--tw-text-opacity: 1;color:rgb(128 128 128 / var(--tw-text-opacity, 1))}.status-select[_ngcontent-%COMP%]{min-width:0;flex:1 1 0%;font-size:1rem;font-weight:600}.status-select[_ngcontent-%COMP%]     ui-form-input-group{border-radius:.5rem;font-size:1rem;font-weight:600}.error-message[_ngcontent-%COMP%]{display:block;font-size:.75rem;--tw-text-opacity: 1;color:rgb(250 82 82 / var(--tw-text-opacity, 1))}"],changeDetection:0}),o})();function ni(o,i){if(1&o&&e.\u0275\u0275element(0,"tn-edit-item-row",6),2&o){const t=i.$implicit,n=e.\u0275\u0275nextContext();e.\u0275\u0275property("formGroup",t.group)("config",n.config)("item",t.item)}}let ii=(()=>{class o{constructor(t,n){this.dialogRef=t,this.data=n,this.config=f.oW[this.data.kind],this.rows=this.data.items.map(s=>({item:s,group:this.buildGroup(s)})),this.form=new $.cw({items:new $.Oe(this.rows.map(s=>s.group))})}trackByRow(t,n){return n.item.id}saved(){this.form.invalid||this.dialogRef.close(this.buildUpdates())}cancelled(){this.dialogRef.close()}buildGroup(t){const n=new $.cw({displayName:new $.NI((0,E.Ho)(t.displayName),[$.kI.required,$.kI.maxLength(E.Ju)])});return this.config.showDisplayType&&n.addControl("displayType",new $.NI(t.displayType)),n}buildUpdates(){return this.rows.map(({item:t,group:n})=>{const s=n.controls.displayName.value.trim(),d={id:t.id,displayName:(0,E._h)(s,t.displayName)};return this.config.showDisplayType&&(d.displayType=n.controls.displayType.value),d})}}return o.\u0275fac=function(t){return new(t||o)(e.\u0275\u0275directiveInject(M.so),e.\u0275\u0275directiveInject(M.WI))},o.\u0275cmp=e.\u0275\u0275defineComponent({type:o,selectors:[["tn-edit-items-dialog"]],decls:10,vars:5,consts:[[3,"closable"],[1,"dialog-content"],[3,"formGroup","config","item",4,"ngFor","ngForOf","ngForTrackBy"],[1,"justify-between","dialog-actions-divider"],["uiBtnSize","medium","uiBtnTheme","main","themeMode","secondary",3,"click"],["uiBtnSize","medium","uiBtnTheme","main","themeMode","primary",1,"save-btn",3,"disabled","click"],[3,"formGroup","config","item"]],template:function(t,n){1&t&&(e.\u0275\u0275elementStart(0,"ui-dialog-header",0),e.\u0275\u0275text(1),e.\u0275\u0275elementEnd(),e.\u0275\u0275elementStart(2,"mat-dialog-content")(3,"div",1),e.\u0275\u0275template(4,ni,1,3,"tn-edit-item-row",2),e.\u0275\u0275elementEnd()(),e.\u0275\u0275elementStart(5,"mat-dialog-actions",3)(6,"button",4),e.\u0275\u0275listener("click",function(){return n.cancelled()}),e.\u0275\u0275text(7," Cancel "),e.\u0275\u0275elementEnd(),e.\u0275\u0275elementStart(8,"button",5),e.\u0275\u0275listener("click",function(){return n.saved()}),e.\u0275\u0275text(9," Save "),e.\u0275\u0275elementEnd()()),2&t&&(e.\u0275\u0275property("closable",!1),e.\u0275\u0275advance(1),e.\u0275\u0275textInterpolate1(" ",n.config.dialogTitle,"\n"),e.\u0275\u0275advance(3),e.\u0275\u0275property("ngForOf",n.rows)("ngForTrackBy",n.trackByRow),e.\u0275\u0275advance(4),e.\u0275\u0275property("disabled",n.form.invali
1d||n.form.pristine))},directives:[Ge.A,M.xY,y.NgForOf,ti,$.JL,$.sg,M.H8,ie.s,oe.V],styles:[".dialog-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.625rem;padding-bottom:.625rem}.save-btn[_ngcontent-%COMP%]{min-width:96px}"],changeDetection:0}),o})(),J=(()=>{class o{constructor(t){this.dialog=t}open(t){return this.dialog.open(ii,{data:t,panelClass:"app-v2",width:"550px",maxHeight:"min(80vh, 1200px)",disableClose:!0,autoFocus:!1}).afterClosed()}}return o.\u0275fac=function(t){return new(t||o)(e.\u0275\u0275inject(M.uw))},o.\u0275prov=e.\u0275\u0275defineInjectable({token:o,factory:o.\u0275fac,providedIn:"root"}),o})(),Ut=(()=>{class o extends S.m1{constructor(){super({draftItems:[],colsNumber:4,isDirty:!1}),this.vm$=this.select(t=>t),this.init=this.updater((t,n)=>({draftItems:n.slice(),colsNumber:4,isDirty:!1})),this.setColsNumber=this.updater((t,n)=>Object.assign(Object.assign({},t),{colsNumber:n})),this.applyDragOrder=this.updater((t,n)=>Object.assign(Object.assign({},t),{draftItems:n,isDirty:!0})),this.sort=this.updater((t,n)=>Object.assign(Object.assign({},t),{draftItems:t.draftItems.slice().sort(n),isDirty:!0}))}sortByUploadDate(){this.sort(this.byUploadDateDesc)}sortByFilename(){this.sort(this.byFilenameAsc)}byUploadDateDesc(t,n){return n.uploadDate.getTime()-t.uploadDate.getTime()}byFilenameAsc(t,n){return t.displayName.localeCompare(n.displayName,void 0,{numeric:!0})}}return o.\u0275fac=function(t){return new(t||o)}
1,o.\u0275prov=e.\u0275\u0275defineInjectable({token:o,factory:o.\u0275fac}),o})();var oi=_(50923);function ri(o,i){if(1&o){const t=e.\u0275\u0275getCurrentView();e.\u0275\u0275elementContainerStart(0),e.\u0275\u0275elementStart(1,"ui-dialog-header",1),e.\u0275\u0275text(2),e.\u0275\u0275elementEnd(),e.\u0275\u0275elementStart(3,"div",2)(4,"div",3)(5,"span",4),e.\u0275\u0275text(6),e.\u0275\u0275elementEnd(),e.\u0275\u0275elementStart(7,"mat-slider",5),e.\u0275\u0275listener("change",function(s){const g=e.\u0275\u0275restoreView(t).ngIf;let r;return e.\u0275\u0275nextContext().setColsNumber(null!==(r=s.value)&&void 0!==r?r:g.colsNumber)}),e.\u0275\u0275elementEnd()(),e.\u0275\u0275element(8,"div",6),e.\u0275\u0275elementStart(9,"div",7)(10,"span",4),e.\u0275\u0275text(11),e.\u0275\u0275elementEnd(),e.\u0275\u0275elementStart(12,"div",8)(13,"button",9),e.\u0275\u0275listener("click",function(){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext().sortByUploadDate()}),e.\u0275\u0275element(14,"i",10),e.\u0275\u0275text(15," Upload Date "),e.\u0275\u0275elementEnd(),e.\u0275\u0275elementStart(16,"button",9),e.\u0275\u0275listener("click",function(){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext().sortByFilename()}),e.\u0275\u0275element(17,"i",11),e.\u0275\u0275text(18," File Name "),e.\u0275\u0275elementEnd()()()(),e.\u0275\u0275elementStart(19,"mat-dialog-content",12)(20,"ui-reorder-gallery",13),e.\u0275\u0275listener("reorder",function(s){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext().applyDragOrder(s)}),e.\u0275\u0275elementEnd()(),e.\u0275\u0275elementStart(21,"mat-dialog-actions")(22,"button",14),e.\u0275\u0275listener("click",function(){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext().cancel()}),e.\u0275\u0275text(23," Cancel "),e.\u0275\u0275elementEnd(),e.\u0275\u0275element(24,"div",15),e.\u0275\u0275elementStart(25,"button",16),e.\u0275\u0275listener("click",function(){const d=e.\u0275\u0275restoreView(t).ngIf;return e.\u0275\u0275nextContext().save(d.draftItems)}),e.\u0275\u0275text(26," Save "),e.\u0275\u0275elementEnd()(),e.\u0275\u0275elementContainerEnd()}if(2&o){const t=i.ngIf,n=e.\u0275\u0275nextContext();e.\u0275\u0275advance(1),e.\u0275\u0275property("closable",!1),e.\u0275\u0275advance(1),e.\u0275\u0275textInterpolate(n.title),e.\u0275\u0275advance(4),e.\u0275\u0275textInterpolate(n.sizeLabel),e.\u0275\u0275advance(1),e.\u0275\u0275property("max",12)("min",1)("step",1)("value",t.colsNumber),e.\u0275\u0275advance(4),e.\u0275\u0275textInterpolate(n.sortLabel),e.\u0275\u0275advance(3),e.\u0275\u0275property("size",20),e.\u0275\u0275advance(3),e.\u0275\u0275property("size",20),e.\u0275\u0275advance(2),e.\u0275\u0275classProp("plan",n.isPlanVariant),e.\u0275\u0275advance(1),e.\u0275\u0275property("items",t.draftItems)("colsNumber",t.colsNumber)("padding",8),e.\u0275\u0275advance(5),e.\u0275\u0275property("disabled",!t.isDirty)}}let si=(()=>{class o{constructor(t,n,s){this.dialogRef=t,this.data=n,this.store=s,this.vm$=this.store.vm$,this.title=`Rearrange ${this.data.entityPlural}`,this.sizeLabel=`${this.data.entitySingular} Size`,this.sortLabel=`Sort ${this.data.entityPlural} by`,this.isPlanVariant="plan"===this.data.variant,this.store.init(this.data.items)}setColsNumber(t){this.store.setColsNumber(t)}applyDragOrder(t){this.store.applyDragOrder(t)}sortByUploadDate(){this.store.sortByUploadDate()}sortByFilename(){this.store.sortByFilename()}save(t){this.dialogRef.close(t)}cancel(){this.dialogRef.close()}}return o.\u0275fac=function(t){return new(t||o)(e.\u0275\u0275directiveInject(M.so),e.\u0275\u0275directiveInject(M.WI),e.\u0275\u0275directiveInject(Ut))},o.\u0275cmp=e.\u0275\u0275defineComponent({type:o,selectors:[["tn-rearrange-media-dialog"]],features:[e.\u0275\u0275ProvidersFeature([Ut])],decls:2,vars:3,consts:[[4,"ngIf"],["align","left",3,"closable"],[1,"rearrange-tools"],[1,"slider-group"],[1,"tool-label"],["color","primary",3,"max","min","step","value","change"],[1,"divider"],[1,"sort-group"],[1,"sort-pills"],[1,"sort-pill",3,"click"],["uiIcon","calendar_today","uiIconVariant","outlined",3,"size"],["uiIcon","label","uiIconVariant","outlined",3,"size"],[1,"gallery-area","dialog-content-fill"],[3,"items","colsNumber","padding","reorder"],["uiBtnSize","medium","uiBtnTheme","main","themeMode","secondary",3,"click"],[1,"flex-1"],["uiBtnSize","medium","uiBtnTheme","main","themeMode","primary",1,"save-btn",3,"disabled","click"]],template:function(t,n){1&t&&(e.\u0275\u0275template(0,ri,27,
116,"ng-container",0),e.\u0275\u0275pipe(1,"async")),2&t&&e.\u0275\u0275property("ngIf",e.\u0275\u0275pipeBind1(1,1,n.vm$))},directives:[y.NgIf,Ge.A,St.pH,Z.a,M.xY,oi.S,M.H8,ie.s,oe.V],pipes:[y.AsyncPipe],styles:[".rearrange-media-dialog .mat-dialog-container{--dialog-inset: 0;overflow:hidden}  .rearrange-media-dialog .mat-slider-horizontal{height:1.25rem;background-color:transparent;padding:0;min-height:20px}  .rearrange-media-dialog .mat-slider-horizontal .mat-slider-wrapper{left:0;right:0;top:.5rem}  .rearrange-media-dialog .mat-slider-horizontal .mat-slider-track-wrapper{height:.25rem;overflow:hidden;border-radius:9999px}  .rearrange-media-dialog .mat-slider-horizontal .mat-slider-track-background,   .rearrange-media-dialog .mat-slider-horizontal .mat-slider-track-fill{height:.25rem}  .rearrange-media-dialog .mat-slider-horizontal .mat-slider-track-background{--tw-bg-opacity: 1;background-color:rgb(226 226 226 / var(--tw-bg-opacity, 1));opacity:1}  .rearrange-media-dialog .mat-slider-horizontal.mat-primary .mat-slider-track-fill{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1))}  .rearrange-media-dialog .mat-slider-horizontal .mat-slider-thumb{height:.75rem;width:.75rem;--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1));right:-6px;bottom:-6px;border:2px solid white;transform:none;box-shadow:0 1px 2px #00000026}  .rearrange-media-dialog .mat-slider-horizontal.mat-slider-min-value .mat-slider-thumb{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1));border:2px solid white;transform:none}  .rearrange-media-dialog .mat-slider-horizontal .mat-slider-thumb-label{display:none}[_nghost-%COMP%]{display:flex;height:100%;width:100%;flex-direction:column;--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}ui-dialog-header[_ngcontent-%COMP%]{display:block;padding-left:1.5rem;padding-right:1.5rem;padding-top:1.5rem}.rearrange-tools[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:flex-start;gap:1rem;padding:1rem 1.5rem}@media (min-width: 1024px){.rearrange-tools[_ngcontent-%COMP%]{flex-direction:row;align-items:center;gap:1.25rem}}.slider-group[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.75rem;border-radius:.25rem;--tw-bg-opacity: 1;background-color:rgb(250 250 250 / var(--tw-bg-opacity, 1));padding:.5rem}.slider-group[_ngcontent-%COMP%]   mat-slider[_ngcontent-%COMP%]{width:168px}.sort-group[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:flex-start;gap:.5rem}@media (min-width: 768px){.sort-group[_ngcontent-%COMP%]{flex-direction:row;align-items:center}}.sort-pills[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem}.tool-label[_ngcontent-%COMP%]{font-size:1rem;font-weight:400;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(51 51 51 / var(--tw-text-opacity, 1))}.divider[_ngcontent-%COMP%]{display:none;height:1.5rem;width:.0625rem;--tw-bg-opacity: 1;background-color:rgb(226 226 226 / var(--tw-bg-opacity, 1))}@media (min-width: 1024px){.divider[_ngcontent-%COMP%]{display:block}}.sort-pill[_ngcontent-%COMP%]{display:flex;cursor:pointer;align-items:center;gap:.5rem;border-radius:9999px;border-width:1px;border-style:solid;--tw-border-opacity: 1;border-color:rgb(226 226 226 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1));padding:.5rem .75rem;font-size:.875rem;font-weight:400;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(26 26 26 / var(--tw-text-opacity, 1))}.sort-pill[_ngcontent-%COMP%]:hover{--tw-bg-opacity: 1;background-color:rgb(250 250 250 / var(--tw-bg-opacity, 1))}mat-dialog-content.gallery-area[_ngcontent-%COMP%]{min-height:0;overflow:auto;padding:.5rem .75rem}mat-dialog-content.gallery-area[_ngcontent-%COMP%]     ui-reorder-gallery{background-color:transparent}mat-dialog-content.gallery-area[_ngcontent-%COMP%]     ui-reorder-gallery .image-tile{border-width:8px}mat-dialog-content.gallery-area[_ngcontent-%COMP%]     ui-reorder-gallery .image-tile .image-wrap{border-radius:.5rem}mat-dialog-content.gallery-area[_ngcontent-%COMP%]     ui-reorder-gallery .image-tile img{border-radius:.25rem}.gallery-area.plan[_ngcontent-%COMP%]     ui-reorder-gallery .image-wrap{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.gallery-area.plan[_ngcontent-%COMP%]     ui-reorder-gallery .image-tile:not(.selected) .image-wrap{border-width:1px;--tw-border-opacity: 1;border-color:rgb(242 242 242 / var(--tw-border-opacity, 1))}.gallery-area.plan[_ngcontent-%COMP%]     ui-reorder-gallery img{object-fit:contain}mat-dialog-actions[_ngcontent-%COMP%]{box-shadow:0 -4px 15px #00000014}.save-btn[_ngcontent-%COMP%]{width:6rem}"],changeDetection:0}),o})(),Ce=(()=>{class o{constructor(t){this.dialog=t}open(t){return this.dialog.open(si,{data:t,panelClass:["app-v2","rearrange-media-dialog"],width:"90vw",maxWidth:"1600px",height:"95vh",autoFocus:!1}).afterClosed()}}return o.\u0275fac=function(t){return new(t||o)(e.\u0275\u0275inject(M.uw)
1)},o.\u0275prov=e.\u0275\u0275defineInjectable({token:o,factory:o.\u0275fac,providedIn:"root"}),o})(),q=(()=>{class o{constructor(t){this.confirmDialogService=t}confirm({entity:t,displayNames:n}){const s=n.slice(0,o.DISPLAYED_NAME_LIMIT).map(c=>`"${(0,E.Ho)(c)}"`),d=n.length-s.length,g=(0,N.XJu)(d>0?[...s,`${d} more`]:s);return this.confirmDialogService.confirm({title:`Delete ${t}`,message:[`Are you sure you want to delete ${g}?`],okButtonText:"Yes, Delete",cancelButtonText:"Cancel",width:"450px",destructive:!0})}}return o.DISPLAYED_NAME_LIMIT=5,o.\u0275fac=function(t){return new(t||o)(e.\u0275\u0275inject(U.DNF))},o.\u0275prov=e.\u0275\u0275defineInjectable({token:o,factory:o.\u0275fac,providedIn:"root"}),o})();const xe={reordered:"success",added:"success",updated:"success",deleted:"success",uploadFailed:"error",addFailed:"error",updateFailed:"error",deleteFailed:"error"},ai={title:"Drop Final Photos",subtitle:"Or select files from your device",allowedFileTypes:["jpeg","png","jpg"],filesKind:"image",uploadSources:[f.FO.Device]},li={title:"Purge ALL photos (dev only)",message:["Permanently delete every photo for this order from Firestore and GCS?"],okButtonText:"Yes, purge",cancelButtonText:"Cancel",width:"450px",destructive:!0};var ye=_(76230),Ue=_(88127),I=_(94706);function Se(o,i,t,n){const s=o.length<=n,d=s||i.includes(t);return{visibleItems:d?o:o.slice(0,n),expanded:d,expandToggleDisabled:s}}function we(o,i,t){return i===o?{selectedIds:t,selectionDisabled:!1}:{selectedIds:new Set,selectionDisabled:null!==i}}const di=["LOADING","FAILED"];function st(o,i){return!di.includes(o.status)||i.includes(o.id)}function at(o,i){return st(o,i)}function lt(o,i,t,n){var s,d,g,c,r,a,l,p;const u=o.status===I.zu.Loading&&(null!==(s=i[o.id])&&void 0!==s?s:0)>=100,m=o.status===I.zu.Pending||o.status===I.zu.Optimization||u,h=o.status===I.zu.Loading||m,b=o.status!==I.zu.Loading||u||null===(d=i[o.id])||void 0===d?null:d,z=null!==(a=null!==(r=null===(c=null===(g=o.variants)||void 0===g?void 0:g.thumbnail)||void 0===c?void 0:c.downloadUrl)&&void 0!==r?r:o.sourceUrl)&&void 0!==a?a:null,re=o.status===I.zu.Success?z:null!==(p=null===(l=t[o.id])||void 0===l?void 0:l.safeUrl)&&void 0!==p?p:null;return Object.assign(Object.assign({},o),{progress:b,thumbnailUrl:z,imageUrl:re,isPreSuccess:h,isOptimizing:m,isSuccess:o.status===I.zu.Success,isFailed:o.status===I.zu.Failed,saving:n.has(o.id)})}var ci=_(4843);function Ke(o,i){return o.pipe((0,C.w)(()=>i.pipe(function pi(){return(0,ci.z)((0,H.x)(),(0,Et.G)(),(0,v.h)(([o,i])=>o&&!i),(0,x.U)(()=>{}))}())))}function Ve(o){Object.values(o).forEach(i=>URL.revokeObjectURL(i.objectUrl))}function Ne(o,i){const t=Object.assign({},o);return i.forEach(({id:n,progress:s})=>{null===s?delete t[n]:t[n]=s}),t}const dt=(0,ye.H)(),{selectAll:gi}=dt.getSelectors(),Vt={[f.cM.Print]:D.w$1.Original,[f.cM.Web]:D.w$1.Medium},ui=dt.getInitialState({orderId:"",hasLoaded:!1,loadError:null,uploadProgress:{},previews:{},sessionUploadIds:[],placeholders:{},batchIds:[],reordering:!1,savingIds:[],notice:null,dropboxImport:null});let ct=(()=>{class o extends S.m1{constructor(t,n,s,d,g,c){super(ui),this.photosService=t,this.coreRepository=n,this.bulkSelection=s,this.expansionStore=d,this.nativeDeliveryDownloadService=g,this.spwSyncOfferService=c,this.sectionId=f.g8.Photos,this.entities$=this.select(gi),this.firstPhotoThumbnailUrl$=this.select(this.entities$,r=>{var a,l,p,u;return null!==(u=null===(p=null===(l=null===(a=r[0])||void 0===a?void 0:a.variants)||void 0===l?void 0:l.thumbnail)||void 0===p?void 0:p.downloadUrl)&&void 0!==u?u:null}),this.uploadProgress$=this.select(r=>r.uploadProgress),this.sessionUploadIds$=this.select(r=>r.sessionUploadIds),this.previews$=this.select(r=>r.previews),this.placeholders$=this.select(r=>r.placeholders),this.batchIds$=this.select(r=>r.batchIds),this.savingIds$=this.select(r=>r.savingIds),this.hasLoaded$=this.select(r=>r.hasLoaded),this.loadError$=this.select(r=>r.loadError),this.loading$=this.select(this.hasLoaded$,this.loadError$,(r,a)=>!r&&!a),this.photos$=this.select(this.entities$,this.placeholders$,this.uploadProgress$,this.previews$,this.sessionUploadIds$,this.savingIds$,(r,a,l,p,u,m)=>{const h=new Set(m);return[...r,...Object.values(a)].filter(b=>at(b,u)).map(b=>lt(b,l,p,h))}
1),this.dropboxImport$=this.select(r=>r.dropboxImport),this.uploadBatch$=this.select(this.photos$,this.batchIds$,this.dropboxImport$,(r,a,l)=>{const p=new Set(a),u=r.filter(b=>p.has(b.id)&&(b.isPreSuccess||b.isSuccess));return nt({uploading:u.some(b=>b.isPreSuccess),total:u.length,done:u.filter(b=>b.isSuccess).length},Ye(l,Q.wq.Photos,()=>r.map(b=>({dropboxId:b.dropboxId,createdAt:b.createdAt,settled:b.isSuccess}))))}),this.uploadedCount$=this.select(this.photos$,r=>r.filter(a=>a.isSuccess||a.isOptimizing).length),this.selection$=this.select(this.bulkSelection.activeSectionId$,this.bulkSelection.selectedIds$,(r,a)=>we(this.sectionId,r,a)),this.selectedIds$=this.select(this.selection$,({selectedIds:r})=>r),this.orderId$=this.select(r=>r.orderId),this.reordering$=this.select(r=>r.reordering),this.notice$=this.select(r=>r.notice),this.vm$=this.select(this.photos$,this.uploadBatch$,this.loading$,this.selection$,this.expansionStore.expandedSectionIds$,this.reordering$,(r,a,l,p,u,m)=>{const{visibleItems:h,expanded:b,expandToggleDisabled:z}=Se(r,u,this.sectionId,o.COLLAPSED_PHOTO_LIMIT);return{photos:r,visiblePhotos:h,uploading:a.uploading,uploadingTotal:a.total,uploadingDone:a.done,loading:l,selectedIds:p.selectedIds,selectionDisabled:p.selectionDisabled,expanded:b,expandToggleDisabled:z,reordering:m}},{debounce:!0}),this.setOrderId=this.updater((r,a)=>Object.assign(Object.assign({},r),{orderId:a})),this.setReordering=this.updater((r,a)=>Object.assign(Object.assign({},r),{reordering:a})),this.setSavingIds=this.updater((r,a)=>Object.assign(Object.assign({},r),{savingIds:a})),this.setNotice=this.updater((r,a)=>Object.assign(Object.assign({},r),{notice:a})),this.clearNotice=this.updater(r=>Object.assign(Object.assign({},r),{notice:null})),this.setPhotos=this.updater((r,a)=>{const l=Object.assign({},r.placeholders),p=Object.assign({},r.previews);return a.forEach(u=>{delete l[u.id],u.status===I.Rv.Success&&p[u.id]&&(URL.revokeObjectURL(p[u.id].objectUrl),delete p[u.id])}),Object.assign(Object.assign({},dt.setAll(a,r)),{hasLoaded:!0,loadError:null,placeholders:l,previews:p})}),this.setLoadError=this.updater((r,a)=>Object.assign(Object.assign({},r),{hasLoaded:!0,loadError:a})),this.reportUploadProgress=this.effect(r=>r.pipe((0,E.kX)(200),(0,w.b)(a=>this.applyUploadProgress(a)))),this.applyUploadProgress=this.updater((r,a)=>Object.assign(Object.assign({},r),{uploadProgress:Ne(r.uploadProgress,a)})),this.setPreview=this.updater((r,{id:a,preview:l})=>Object.assign(Object.assign({},r),{previews:Object.assign(Object.assign({},r.previews),{[a]:l})})),this.markSessionUpload=this.updater((r,a)=>r.sessionUploadIds.includes(a)?r:Object.assign(Object.assign({},r),{sessionUploadIds:[...r.sessionUploadIds,a]})),this.addPlaceholder=this.updater((r,a)=>{const l=r.batchIds.some(p=>{var u;const m=null!==(u=r.placeholders[p])&&void 0!==u?u:r.entities[p];return null!=m&&this.isInProgress(m)});return Object.assign(Object.assign({},r),{placeholders:r.entities[a.id]?r.placeholders:Object.assign(Object.assign({},r.placeholders),{[a.id]:a}),batchIds:l?[...r.batchIds,a.id]:[a.id]})}),this.markPlaceholderFailed=this.updater((r,a)=>{const l=r.placeholders[a];return l?Object.assign(Object.assign({},r),{placeholders:Object.assign(Object.assign({},r.placeholders),{[a]:Object.assign(Object.assign({},l),{status:I.Rv.Failed})})}):r}),this.load=this.effect(r=>r.pipe((0,H.x)(),(0,w.b)(a=>{this.setOrderId(a),this.watchDropboxImport(a)}),(0,C.w)(a=>this.coreRepository.photos.onSnapshotMany({where:{orderId:a},orderBy:[{sortIndex:"asc"},{createdAt:"asc"}]}).pipe((0,S._b)(l=>this.setPhotos(l),l=>this.setLoadError(l)))))),this.watchDropboxImport=this.effect(r=>He(this.coreRepository,r).pipe((0,w.b)(a=>this.patchState({dropboxImport:a})))),this.upload=this.effect(r=>r.pipe((0,G.zg)(({orderId:a,items:l})=>(0,te.D)(l).pipe((0,G.zg)(p=>this.registerUpload(a,p)),(0,G.zg)(({id:p,storageKey:u,item:m})=>this.streamFileBytes(a,p,u,m)))))),this.notifySpwWhenProcessingSettles=this.effect(()=>Ke(this.orderId$,this.entities$.pipe((0,x.U)(r=>r.some(a=>this.isInProgress(a))))).pipe((0,w.b)(()=>
1this.spwSyncOfferService.notifyContentChanged()))),this.purgeOrder=this.effect(r=>r.pipe((0,C.w)(a=>this.photosService.purgeOrderPhotos(a).pipe((0,S._b)(()=>{},l=>{console.error("[PhotosStateStore] purge failed",l)}))))),this.downloadPhoto=this.effect(r=>r.pipe((0,P.M)(this.orderId$),(0,w.b)(([{photoId:a,quality:l},p])=>{this.nativeDeliveryDownloadService.download(p,"photos",[a],Vt[l])}))),this.downloadSelected=this.effect(r=>r.pipe((0,P.M)(this.orderId$,this.selectedIds$),(0,w.b)(([a,l,p])=>{this.nativeDeliveryDownloadService.download(l,"photos",[...p],Vt[a])}))),this.reorder=this.effect(r=>r.pipe((0,P.M)(this.orderId$),(0,C.w)(([a,l])=>(this.setReordering(!0),this.setSavingIds(a),this.photosService.reorder(l,a).pipe((0,S._b)(()=>{this.setNotice({kind:"reordered"}),this.spwSyncOfferService.notifyContentChanged()},p=>console.error("[PhotosStateStore] reorder failed",p)),(0,O.x)(()=>{this.setReordering(!1),this.setSavingIds([])})))))),this.edit=this.effect(r=>r.pipe((0,P.M)(this.orderId$),(0,C.w)(([a,l])=>(this.setSavingIds(a.map(p=>p.id)),this.photosService.editPhotos(l,a).pipe((0,S._b)(()=>{this.setNotice({kind:"updated",count:a.length}),this.spwSyncOfferService.notifyContentChanged()},p=>console.error("[PhotosStateStore] edit failed",p)),(0,O.x)(()=>this.setSavingIds([]))))))),this.deletePhotos=this.effect(r=>r.pipe((0,P.M)(this.orderId$),(0,C.w)(([a,l])=>(this.setSavingIds(a.map(p=>p.id)),this.photosService.deletePhotos(l,a.map(p=>p.id)).pipe((0,S._b)(()=>{this.setNotice({kind:"deleted",displayNames:a.map(p=>p.displayName)}),this.spwSyncOfferService.notifyContentChanged()},p=>{console.error("[PhotosStateStore] delete failed",p)}),(0,O.x)(()=>this.setSavingIds([])))))))}isInProgress(t){return t.status===I.Rv.Loading||t.status===I.Rv.Pending||t.status===I.Rv.Optimization}buildPlaceholder(t,n,s){return{id:t,orderId:n,displayName:s,status:I.Rv.Loading,userId:"",provider:I.ij.FirebaseStorage,createdAt:"",updatedAt:""}}logUploadError(t,n){console.error("[PhotosStateStore] upload failed",t,n)}showUploadPlaceholder(t,n,s){this.addPlaceholder(this.buildPlaceholder(t,n,s.name)),this.markSessionUpload(t),s.previewUrl&&s.previewUrlRaw&&this.setPreview({id:t,preview:{safeUrl:s.previewUrl,objectUrl:s.previewUrlRaw}})}registerUpload(t,n){return this.photosService.create(t,n.name).pipe((0,w.b)(({id:s})=>this.showUploadPlaceholder(s,t,n)),(0,x.U)(({id:s,storageKey:d})=>({id:s,storageKey:d,item:n})),(0,R.K)(s=>(this.logUploadError(n.name,s),this.setNotice({kind:"uploadFailed",name:n.name}),B.E)))}streamFileBytes(t,n,s,d){return this.photosService.streamUpload(s,d.file,d.name).pipe((0,H.x)(),(0,w.b)(g=>this.reportUploadProgress({id:n,progress:g})),(0,Ue.Z)(),(0,C.w)(()=>this.photosService.completeUpload(n,t)),(0,O.x)(()=>this.reportUploadProgress({id:n,progress:null})),(0,R.K)(g=>(this.logUploadError(d.name,g),this.markPlaceholderFailed(n),B.E)))}ngOnDestroy(){Ve(this.get().previews),super.ngOnDestroy()}}return o.COLLAPSED_PHOTO_LIMIT=4,o.\u0275fac=function(t){return new(t||o)(e.\u0275\u0275inject(se.Vr),e.\u0275\u0275inject(Q.AO),e.\u0275\u0275inject(F),e.\u0275\u0275inject(j),e.\u0275\u0275inject(D.jub),e.\u0275\u0275inject(K.C5))},o.\u0275prov=e.\u0275\u0275defineInjectable({token:o,factory:o.\u0275fac}),o})();var mi=_(27984);let hi=(()=>{class o{constructor(){this.barState=f.KG.Processing,this.total=0,this.uploaded=0}get percent(){return 0===this.total?0:Math.round(this.uploaded/this.total*100)}get label(){return`${this.uploaded}/${this.total} (${this.percent}%)`}}return o.\u0275fac=function(t){return new(t||o)}
1,o.\u0275cmp=e.\u0275\u0275defineComponent({type:o,selectors:[["tn-section-upload-progress"]],inputs:{total:"total",uploaded:"uploaded"},decls:3,vars:3,consts:[["size","large",1,"section-progress-bar",3,"progress","state"],[1,"section-progress-label"]],template:function(t,n){1&t&&(e.\u0275\u0275element(0,"tn-upload-progress-bar",0),e.\u0275\u0275elementStart(1,"span",1),e.\u0275\u0275text(2),e.\u0275\u0275elementEnd()),2&t&&(e.\u0275\u0275property("progress",n.percent)("state",n.barState),e.\u0275\u0275advance(2),e.\u0275\u0275textInterpolate1(" ",n.label,"\n"))},directives:[mi.o],styles:["[_nghost-%COMP%]{display:flex;flex-shrink:0;align-items:center;gap:.75rem}.section-progress-bar[_ngcontent-%COMP%]{width:234px}.section-progress-label[_ngcontent-%COMP%]{white-space:nowrap;font-size:1rem;font-weight:400;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(128 128 128 / var(--tw-text-opacity, 1))}"],changeDetection:0}),o})(),_i=(()=>{class o{constructor(){this.expanded=!1,this.disabled=!1,this.toggled=new e.EventEmitter}get tooltip(){return this.expanded?"Show less":"Show more"}toggle(){this.toggled.emit()}}return o.\u0275fac=function(t){return new(t||o)}
1,o.\u0275cmp=e.\u0275\u0275defineComponent({type:o,selectors:[["tn-expand-section-toggle"]],inputs:{expanded:"expanded",disabled:"disabled"},outputs:{toggled:"toggled"},decls:3,vars:5,consts:[["matTooltipPosition","above","uiBtnSize","medium","iconOnly","","uiBtnTheme","setting","themeMode","text",3,"matTooltip","disabled","click"],["expandButton","btnSize"],["uiIcon","arrow_drop_down",1,"chevron",3,"size"]],template:function(t,n){if(1&t&&(e.\u0275\u0275elementStart(0,"button",0,1),e.\u0275\u0275listener("click",function(){return n.toggle()}),e.\u0275\u0275element(2,"i",2),e.\u0275\u0275elementEnd()),2&t){const s=e.\u0275\u0275reference(1);e.\u0275\u0275property("matTooltip",n.tooltip)("disabled",n.disabled),e.\u0275\u0275advance(2),e.\u0275\u0275classProp("chevron-rotated",n.expanded),e.\u0275\u0275property("size",s.iconSize)}},directives:[ie.s,oe.V,Fe.gM,Z.a],styles:["[_nghost-%COMP%]{display:flex}.chevron[_ngcontent-%COMP%]{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s}.chevron-rotated[_ngcontent-%COMP%]{transform:rotate(180deg)}"],changeDetection:0}),o})();function vi(o,i){if(1&o&&(e.\u0275\u0275elementStart(0,"span"),e.\u0275\u0275text(1),e.\u0275\u0275elementEnd()),2&o){const t=e.\u0275\u0275nextContext();e.\u0275\u0275advance(1),e.\u0275\u0275textInterpolate1(" (",t.count,")")}}function fi(o,i){if(1&o&&(e.\u0275\u0275elementStart(0,"div",6),e.\u0275\u0275element(1,"tn-section-upload-progress",7),e.\u0275\u0275elementEnd()),2&o){const t=e.\u0275\u0275nextContext();let n,s;e.\u0275\u0275advance(1),e.\u0275\u0275property("total",null!==(n=t.uploadingTotal)&&void 0!==n?n:t.count)("uploaded",null!==(s=t.uploadingDone)&&void 0!==s?s:t.uploadedCount)}}function bi(o,i){1&o&&e.\u0275\u0275element(0,"mat-spinner",13),2&o&&e.\u0275\u0275property("diameter",20)}function Ci(o,i){if(1&o){const t=e.\u0275\u0275getCurrentView();e.\u0275\u0275elementStart(0,"button",14,15),e.\u0275\u0275listener("click",function(){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext(3).upload()}),e.\u0275\u0275element(2,"i",16),e.\u0275\u0275elementEnd()}if(2&o){const t=e.\u0275\u0275reference(1),n=e.\u0275\u0275nextContext(3);e.\u0275\u0275property("matTooltip",n.addTooltip)("disabled",n.loading),e.\u0275\u0275advance(2),e.\u0275\u0275property("size",t.iconSize)}}function xi(o,i){if(1&o&&e.\u0275\u0275template(0,Ci,3,3,"button",11),2&o){const t=e.\u0275\u0275nextContext(2);e.\u0275\u0275property("ngIf",t.uploadable)}}function yi(o,i){if(1&o){const t=e.\u0275\u0275getCurrentView();e.\u0275\u0275elementStart(0,"button",14,17),e.\u0275\u0275listener("click",function(){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext(2).rearrange()}),e.\u0275\u0275element(2,"i",18),e.\u0275\u0275elementEnd()}if(2&o){const t=e.\u0275\u0275reference(1),n=e.\u0275\u0275nextContext(2);e.\u0275\u0275property("matTooltip",n.rearrangeTooltip)("disabled",n.loading||!n.hasItems||n.uploading||n.reordering),e.\u0275\u0275advance(2),e.\u0275\u0275property("size",t.iconSize)}}function Si(o,i){if(1&o){const t=e.\u0275\u0275getCurrentView();e.\u0275\u0275elementStart(0,"div",8),e.\u0275\u0275projection(1),e.\u0275\u0275template(2,bi,1,1,"mat-spinner",9),e.\u0275\u0275template(3,xi,1,1,"ng-template",null,10,e.\u0275\u0275templateRefExtractor),e.\u0275\u0275template(5,yi,3,3,"button",11),e.\u0275\u0275elementStart(6,"tn-expand-section-toggle",12),e.\u0275\u0275listener("toggled",function(){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext().toggleExpand()}),e.\u0275\u0275elementEnd()()}if(2&o){const t=e.\u0275\u0275reference(4),n=e.\u0275\u0275nextContext();e.\u0275\u0275advance(2),e.\u0275\u0275property("ngIf",n.showSpinner)("ngIfElse",t),e.\u0275\u0275advance(3),e.\u0275\u0275property("ngIf",n.showRearrange),e.\u0275\u0275advance(1),e.\u0275\u0275property("expanded",n.expanded)("disabled",n.expandToggleDisabled)}}function wi(o,i){if(1&o){const t=e.\u0275\u0275getCurrentView();e.\u0275\u0275elementStart(0,"button",19,20),e.\u0275\u0275listener("click",function(){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext().upload()}),e.\u0275\u0275element(2,"i",16),e.\u0275\u0275text(3," Add "),e.\u0275\u0275elementEnd()}if(2&o){const t=e.\u0275\u0275reference(1);e.\u0275\u0275advance(2),e.\u0275\u0275property("size",t.iconSize)}}const Ii=[[["","sectionAction",""]]],ki=["[sectionAction]"];let le=(()=>{class o{constructor(){this.title="",this.count=0,this.uploading=!1,this.loading=!1,this.showSpinner=!1,this.uploadedCount=0,this.uploadingTotal=null,this.uploadingDone=null,this.expanded=!1,this.showRearrange=!1,this.uploadable=!0,this.reordering=!1,this.expandToggleDisabled=!1,this.addTooltip="Add",this.rearrangeTooltip="Rearrange Order",this.uploadClicked=new e.EventEmitter,this.rearrangeClicked=new e.EventEmitter,this.expandToggled=new e.EventEmitter}get hasItems(){return this.count>0}get showCount(){return!this.loading&&this.hasItems&&!this.uploading}get showActionRow(){return!this.uploadable||this.loading||this.hasItems}
1upload(){this.uploadClicked.emit()}rearrange(){this.rearrangeClicked.emit()}toggleExpand(){this.expandToggled.emit()}}return o.\u0275fac=function(t){return new(t||o)},o.\u0275cmp=e.\u0275\u0275defineComponent({type:o,selectors:[["tn-section-header"]],inputs:{title:"title",count:"count",uploading:"uploading",loading:"loading",showSpinner:"showSpinner",uploadedCount:"uploadedCount",uploadingTotal:"uploadingTotal",uploadingDone:"uploadingDone",expanded:"expanded",showRearrange:"showRearrange",uploadable:"uploadable",reordering:"reordering",expandToggleDisabled:"expandToggleDisabled",addTooltip:"addTooltip",rearrangeTooltip:"rearrangeTooltip"},outputs:{uploadClicked:"uploadClicked",rearrangeClicked:"rearrangeClicked",expandToggled:"expandToggled"},ngContentSelectors:ki,decls:8,vars:5,consts:[[1,"section-header"],[1,"title"],[4,"ngIf"],["class","upload-progress",4,"ngIf"],["class","section-actions",4,"ngIf","ngIfElse"],["addCta",""],[1,"upload-progress"],[3,"total","uploaded"],[1,"section-actions"],[3,"diameter",4,"ngIf","ngIfElse"],["addAction",""],["matTooltipPosition","above","uiBtnSize","medium","iconOnly","","uiBtnTheme","setting","themeMode","text",3,"matTooltip","disabled","click",4,"ngIf"],[3,"expanded","disabled","toggled"],[3,"diameter"],["matTooltipPosition","above","uiBtnSize","medium","iconOnly","","uiBtnTheme","setting","themeMode","text",3,"matTooltip","disabled","click"],["addActionButton","btnSize"],["uiIcon","add",3,"size"],["rearrangeButton","btnSize"],["uiIcon","reorder",3,"size"],["uiBtnSize","medium","uiBtnTheme","main","themeMode","primary",1,"ml-auto",3,"click"],["addSectionButton","btnSize"]],template:function(t,n){if(1&t&&(e.\u0275\u0275projectionDef(Ii),e.\u0275\u0275elementStart(0,"div",0)(1,"span",1),e.\u0275\u0275text(2),e.\u0275\u0275template(3,vi,2,1,"span",2),e.\u0275\u0275elementEnd(),e.\u0275\u0275template(4,fi,2,2,"div",3),e.\u0275\u0275template(5,Si,7,5,"div",4),e.\u0275\u0275template(6,wi,4,1,"ng-template",null,5,e.\u0275\u0275templateRefExtractor),e.\u0275\u0275elementEnd()),2&t){const s=e.\u0275\u0275reference(7);e.\u0275\u0275advance(2),e.\u0275\u0275textInterpolate1(" ",n.title," "),e.\u0275\u0275advance(1),e.\u0275\u0275property("ngIf",n.showCount),e.\u0275\u0275advance(1),e.\u0275\u0275property("ngIf",n.uploading),e.\u0275\u0275advance(1),e.\u0275\u0275property("ngIf",n.showActionRow)("ngIfElse",s)}},directives:[y.NgIf,hi,$e.Ou,ie.s,oe.V,Fe.gM,Z.a,_i],styles:["[_nghost-%COMP%]{width:100%}.section-header[_ngcontent-%COMP%]{display:flex;width:100%;flex-wrap:wrap;align-items:center;column-gap:.5rem;row-gap:.75rem;min-height:40px}.title[_ngcontent-%COMP%]{flex:1 1 0%;text-align:left;font-size:1.25rem;font-weight:500;line-height:2.25rem;--tw-text-opacity: 1;color:rgb(51 51 51 / var(--tw-text-opacity, 1))}@media (min-width: 1024px){.title[_ngcontent-%COMP%]{flex:0 1 auto}}.upload-progress[_ngcontent-%COMP%]{order:9999;width:100%}@media (min-width: 1024px){.upload-progress[_ngcontent-%COMP%]{order:0;margin-left:1.25rem;width:auto}}.section-actions[_ngcontent-%COMP%]{margin-left:auto;display:flex;align-items:center;gap:.5rem}"],changeDetection:0}),o})();var Pi=_(90508);function Ti(o,i){if(1&o&&e.\u0275\u0275element(0,"mat-pseudo-checkbox",2),2&o){const t=e.\u0275\u0275nextContext();e.\u0275\u0275property("state",t.selected?"checked":"unchecked")}}const Oi=function(o,i){return{"is-disabled":o,"is-selected":i}},Di=["*"];let Ie=(()=>{class o{constructor(){this.selected=!1,this.disabled=!1,this.selectedChange=new e.EventEmitter}toggleSelection(){this.disabled||this.selectedChange.emit(!this.selected)}}return o.\u0275fac=function(t){return new(t||o)}
1,o.\u0275cmp=e.\u0275\u0275defineComponent({type:o,selectors:[["tn-media-item-selectable"]],inputs:{selected:"selected",disabled:"disabled"},outputs:{selectedChange:"selectedChange"},ngContentSelectors:Di,decls:3,vars:5,consts:[[1,"selectable-content",3,"ngClass","click"],["class","selectable-checkbox",3,"state",4,"ngIf"],[1,"selectable-checkbox",3,"state"]],template:function(t,n){1&t&&(e.\u0275\u0275projectionDef(),e.\u0275\u0275elementStart(0,"div",0),e.\u0275\u0275listener("click",function(){return n.toggleSelection()}),e.\u0275\u0275projection(1),e.\u0275\u0275template(2,Ti,1,1,"mat-pseudo-checkbox",1),e.\u0275\u0275elementEnd()),2&t&&(e.\u0275\u0275property("ngClass",e.\u0275\u0275pureFunction2(2,Oi,n.disabled,n.selected&&!n.disabled)),e.\u0275\u0275advance(2),e.\u0275\u0275property("ngIf",!n.disabled))},directives:[y.NgClass,y.NgIf,Pi.nP],styles:["[_nghost-%COMP%]{display:block}.selectable-content[_ngcontent-%COMP%]{position:relative;isolation:isolate;height:100%;width:100%;border-radius:.25rem;outline:5px solid transparent;transition:background-color .15s,outline-color .15s}.selectable-content[_ngcontent-%COMP%]:not(.is-disabled){cursor:pointer}.selectable-content[_ngcontent-%COMP%]:not(.is-disabled):not(.is-selected):hover{background-color:var(--brand-20, #A9DCFF);outline-color:var(--brand-20, #A9DCFF)}.selectable-content.is-selected[_ngcontent-%COMP%]{background-color:var(--brand-30, #82CCFF);outline-color:var(--brand-30, #82CCFF)}.selectable-checkbox[_ngcontent-%COMP%]{position:absolute;top:.5rem;left:.5rem;z-index:10;opacity:0;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.selectable-content[_ngcontent-%COMP%]:hover   .selectable-checkbox[_ngcontent-%COMP%], .selectable-content.is-selected[_ngcontent-%COMP%]   .selectable-checkbox[_ngcontent-%COMP%]{opacity:1}"],changeDetection:0}),o})();var ke=_(70177),Be=_(27500),Ae=_(89367);let Pe=(()=>{class o{constructor(){this.diameter=24}}return o.\u0275fac=function(t){return new(t||o)}
1,o.\u0275cmp=e.\u0275\u0275defineComponent({type:o,selectors:[["tn-media-saving"]],inputs:{diameter:"diameter"},decls:1,vars:1,consts:[[3,"diameter"]],template:function(t,n){1&t&&e.\u0275\u0275element(0,"mat-spinner",0),2&t&&e.\u0275\u0275property("diameter",n.diameter)},directives:[$e.Ou],styles:["[_nghost-%COMP%]{position:absolute;inset:0;z-index:10;display:flex;align-items:center;justify-content:center;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1));--tw-bg-opacity: .6;border-radius:inherit}"],changeDetection:0}),o})();var Te=_(26088);function $i(o,i){if(1&o){const t=e.\u0275\u0275getCurrentView();e.\u0275\u0275elementStart(0,"img",11),e.\u0275\u0275listener("load",function(){e.\u0275\u0275restoreView(t);const s=e.\u0275\u0275nextContext().$implicit;return e.\u0275\u0275nextContext().imageLoaded(s.id)})("error",function(){e.\u0275\u0275restoreView(t);const s=e.\u0275\u0275nextContext().$implicit;return e.\u0275\u0275nextContext().imageLoaded(s.id)}),e.\u0275\u0275elementEnd()}2&o&&e.\u0275\u0275property("src",i.ngIf,e.\u0275\u0275sanitizeUrl)}function Ei(o,i){if(1&o&&e.\u0275\u0275element(0,"tn-media-upload-progress",12),2&o){const t=e.\u0275\u0275nextContext().$implicit;let n;e.\u0275\u0275property("optimizing",t.isOptimizing)("progress",null!==(n=t.progress)&&void 0!==n?n:0)}}function Fi(o,i){if(1&o){const t=e.\u0275\u0275getCurrentView();e.\u0275\u0275elementStart(0,"tn-media-failed",13),e.\u0275\u0275listener("deleteClicked",function(){e.\u0275\u0275restoreView(t);const s=e.\u0275\u0275nextContext().$implicit;return e.\u0275\u0275nextContext().delete(s)}),e.\u0275\u0275elementEnd()}}function ji(o,i){1&o&&e.\u0275\u0275element(0,"tn-media-saving")}function Mi(o,i){if(1&o){const t=e.\u0275\u0275getCurrentView();e.\u0275\u0275elementStart(0,"div",2)(1,"tn-media-item-selectable",3),e.\u0275\u0275listener("selectedChange",function(){const d=e.\u0275\u0275restoreView(t).$implicit;return e.\u0275\u0275nextContext().toggleSelection(d.id)}),e.\u0275\u0275elementStart(2,"tn-media-item-actions",4),e.\u0275\u0275listener("editClicked",function(){const d=e.\u0275\u0275restoreView(t).$implicit;return e.\u0275\u0275nextContext().edit(d)})("deleteClicked",function(){const d=e.\u0275\u0275restoreView(t).$implicit;return e.\u0275\u0275nextContext().delete(d)})("downloadClicked",function(s){const g=e.\u0275\u0275restoreView(t).$implicit;return e.\u0275\u0275nextContext().download(g,s)}),e.\u0275\u0275elementStart(3,"div",5),e.\u0275\u0275template(4,$i,1,1,"img",6),e.\u0275\u0275template(5,Ei,1,2,"tn-media-upload-progress",7),e.\u0275\u0275template(6,Fi,1,0,"tn-media-failed",8),e.\u0275\u0275template(7,ji,1,0,"tn-media-saving",9),e.\u0275\u0275elementEnd()()(),e.\u0275\u0275element(8,"tn-media-filename",10),e.\u0275\u0275elementEnd()}if(2&o){const t=i.$implicit,n=e.\u0275\u0275nextContext();e.\u0275\u0275classProp("is-skeleton",!n.isReady(t)&&!t.isFailed),e.\u0275\u0275advance(1),e.\u0275\u0275property("disabled",!n.isReady(t)||n.selectionDisabled||t.saving)("selected",n.isSelected(t.id)),e.\u0275\u0275advance(1),e.\u0275\u0275property("disabled",!n.isReady(t)||t.saving)("showEdit",!0)("showDownload",!0)("downloadOptions",n.downloadOptions),e.\u0275\u0275advance(1),e.\u0275\u0275classProp("loaded",n.isThumbnailSettled(t)),e.\u0275\u0275advance(1),e.\u0275\u0275property("ngIf",t.imageUrl),e.\u0275\u0275advance(1),e.\u0275\u0275property("ngIf",t.isPreSuccess),e.\u0275\u0275advance(1),e.\u0275\u0275property("ngIf",t.isFailed),e.\u0275\u0275advance(1),e.\u0275\u0275property("ngIf",t.saving),e.\u0275\u0275advance(1),e.\u0275\u0275property("value",t.displayName)}}let Ui=(()=>{class o{constructor(){this.photos=[],this.selectionDisabled=!1,this.selectedIds=new Set,this.downloadOptions=f.XH,this.selectionToggled=new e.EventEmitter,this.editClicked=new e.EventEmitter,this.deleteClicked=new e.EventEmitter,this.downloadClicked=new e.EventEmitter,this.trackById=N.xnY,this.loadedIds=new Set}isReady(t){return t.isSuccess&&this.loadedIds.has(t.id)}isThumbnailSettled(t){return this.loadedIds.has(t.id)||t.isFailed}isSelected(t){return this.selectedIds.has(t)}imageLoaded(t){this.loadedIds.add(t)}toggleSelection(t){this.selectionToggled.emit(t)}
1edit(t){this.editClicked.emit(t)}delete(t){this.deleteClicked.emit(t)}download(t,n){this.downloadClicked.emit({photo:t,quality:n})}}return o.\u0275fac=function(t){return new(t||o)},o.\u0275cmp=e.\u0275\u0275defineComponent({type:o,selectors:[["tn-photo-grid"]],inputs:{photos:"photos",selectionDisabled:"selectionDisabled",selectedIds:"selectedIds",downloadOptions:"downloadOptions"},outputs:{selectionToggled:"selectionToggled",editClicked:"editClicked",deleteClicked:"deleteClicked",downloadClicked:"downloadClicked"},decls:2,vars:2,consts:[[1,"photo-grid"],["class","photo-card",3,"is-skeleton",4,"ngFor","ngForOf","ngForTrackBy"],[1,"photo-card"],[3,"disabled","selected","selectedChange"],[3,"disabled","showEdit","showDownload","downloadOptions","editClicked","deleteClicked","downloadClicked"],[1,"photo-thumbnail"],["alt","Photo thumbnail","loading","lazy","decoding","async",3,"src","load","error",4,"ngIf"],[3,"optimizing","progress",4,"ngIf"],[3,"deleteClicked",4,"ngIf"],[4,"ngIf"],[3,"value"],["alt","Photo thumbnail","loading","lazy","decoding","async",3,"src","load","error"],[3,"optimizing","progress"],[3,"deleteClicked"]],template:function(t,n){1&t&&(e.\u0275\u0275elementStart(0,"div",0),e.\u0275\u0275template(1,Mi,9,15,"div",1),e.\u0275\u0275elementEnd()),2&t&&(e.\u0275\u0275advance(1),e.\u0275\u0275property("ngForOf",n.photos)("ngForTrackBy",n.trackById))},directives:[y.NgForOf,Ie,ke.H,y.NgIf,Be.g,Ae.a,Pe,Te.U],styles:["@keyframes skeleton-shimmer{0%{background-position:-400px 0}to{background-position:400px 0}}.photo-grid[_ngcontent-%COMP%]{display:grid;grid-gap:1rem;gap:1rem;grid-template-columns:repeat(auto-fill,minmax(200px,1fr))}.photo-card[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.5rem}.photo-card.is-skeleton[_ngcontent-%COMP%]{pointer-events:none}.photo-thumbnail[_ngcontent-%COMP%]{border-radius:.25rem;aspect-ratio:168/93;position:relative;overflow:hidden;background:linear-gradient(to right,#F6F6F6 8%,#E2E2E2 18%,#F6F6F6 33%);background-size:1000px 100%;animation:skeleton-shimmer 1.4s linear infinite}.photo-thumbnail[_ngcontent-%COMP%]   img[_ngcontent-%COMP%]{position:absolute;inset:0;height:100%;width:100%;border-radius:.25rem;object-fit:cover;opacity:0;transition:opacity .25s cubic-bezier(.33,1,.68,1)}.photo-thumbnail.loaded[_ngcontent-%COMP%]{animation:none;background-image:none}.photo-thumbnail.loaded[_ngcontent-%COMP%]   img[_ngcontent-%COMP%]{opacity:1}"],changeDetection:0}),o})();const Vi=["*"];let Oe=(()=>{class o{constructor(){this.count=0,this.visible=!1,this.closed=new e.EventEmitter,this.edited=new e.EventEmitter,this.deleted=new e.EventEmitter}close(){this.closed.emit()}edit(){this.edited.emit()}remove(){this.deleted.emit()}}return o.\u0275fac=function(t){return new(t||o)}
1,o.\u0275cmp=e.\u0275\u0275defineComponent({type:o,selectors:[["tn-native-upload-bulk-action-bar"]],inputs:{count:"count",visible:"visible"},outputs:{closed:"closed",edited:"edited",deleted:"deleted"},ngContentSelectors:Vi,decls:18,vars:6,consts:[["role","group",1,"bulk-action-bar"],[1,"selection-group"],["type","button","matTooltip","Cancel","matTooltipPosition","above","uiBtnSize","small","iconOnly","","uiBtnTheme","setting","themeMode","text",3,"click"],["closeSelectionButton","btnSize"],["uiIcon","close",3,"size"],["aria-hidden","true",1,"divider"],[1,"count"],[1,"actions"],["type","button","uiBtnSize","small","uiBtnTheme","main","themeMode","secondary",1,"action-btn",3,"click"],["editSelectionButton","btnSize"],["uiIcon","edit",3,"size"],["type","button","uiBtnSize","small","uiBtnTheme","error","themeMode","primary",1,"action-btn",3,"click"],["deleteSelectionButton","btnSize"],["uiIcon","delete_outline",3,"size"]],template:function(t,n){if(1&t&&(e.\u0275\u0275projectionDef(),e.\u0275\u0275elementStart(0,"div",0)(1,"div",1)(2,"button",2,3),e.\u0275\u0275listener("click",function(){return n.close()}),e.\u0275\u0275element(4,"i",4),e.\u0275\u0275elementEnd(),e.\u0275\u0275element(5,"span",5),e.\u0275\u0275elementStart(6,"span",6),e.\u0275\u0275text(7),e.\u0275\u0275elementEnd()(),e.\u0275\u0275projection(8),e.\u0275\u0275elementStart(9,"div",7)(10,"button",8,9),e.\u0275\u0275listener("click",function(){return n.edit()}),e.\u0275\u0275element(12,"i",10),e.\u0275\u0275text(13," Edit "),e.\u0275\u0275elementEnd(),e.\u0275\u0275elementStart(14,"button",11,12),e.\u0275\u0275listener("click",function(){return n.remove()}),e.\u0275\u0275element(16,"i",13),e.\u0275\u0275text(17," Delete "),e.\u0275\u0275elementEnd()()()),2&t){const s=e.\u0275\u0275reference(3),d=e.\u0275\u0275reference(11),g=e.\u0275\u0275reference(15);e.\u0275\u0275classProp("visible",n.visible),e.\u0275\u0275advance(4),e.\u0275\u0275property("size",s.iconSize),e.\u0275\u0275advance(3),e.\u0275\u0275textInterpolate1("",n.count," Selected"),e.\u0275\u0275advance(5),e.\u0275\u0275property("size",d.iconSize),e.\u0275\u0275advance(4),e.\u0275\u0275property("size",g.iconSize)}},directives:[Fe.gM,ie.s,oe.V,Z.a],styles:["[_nghost-%COMP%]{pointer-events:none;position:fixed;left:0;right:0;bottom:2.5rem;z-index:50;display:flex;justify-content:center}.bulk-action-bar[_ngcontent-%COMP%]{pointer-events:none;display:flex;flex-direction:column;align-items:stretch;gap:.5rem;border-radius:.5rem;border-width:1px;border-style:solid;--tw-border-opacity: 1;border-color:rgb(226 226 226 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(250 250 250 / var(--tw-bg-opacity, 1));padding:.5rem;opacity:0;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s}@media (min-width: 768px){.bulk-action-bar[_ngcontent-%COMP%]{flex-direction:row;align-items:center;padding-top:.75rem;padding-bottom:.75rem;padding-right:1rem}}.bulk-action-bar[_ngcontent-%COMP%]{width:794px;max-width:calc(100% - 48px);box-shadow:0 0 20px #0000001f;transform:translateY(8px)}.bulk-action-bar.visible[_ngcontent-%COMP%]{pointer-events:auto;opacity:1;transform:translateY(0)}.selection-group[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem}@media (min-width: 768px){.selection-group[_ngcontent-%COMP%]{flex:1 1 0%}}.divider[_ngcontent-%COMP%]{display:block;height:1.5rem;width:.0625rem;--tw-bg-opacity: 1;background-color:rgb(226 226 226 / var(--tw-bg-opacity, 1))}.count[_ngcontent-%COMP%]{flex:1 1 0%;padding-left:.5rem;font-size:.875rem;font-weight:600;line-height:1.75rem;--tw-text-opacity: 1;color:rgb(51 51 51 / var(--tw-text-opacity, 1))}.actions[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem}@media (min-width: 768px){.actions[_ngcontent-%COMP%]{flex-shrink:0}}.action-btn[_ngcontent-%COMP%]{flex:1 1 0%}@media (min-width: 768px){.action-btn[_ngcontent-%COMP%]{flex:none;justify-content:flex-start}}"],changeDetection:0}),o})();function zi(o,i){if(1&o){const t=e.\u0275\u0275getCurrentView();e.\u0275\u0275elementStart(0,"button",1,2),e.\u0275\u0275listener("click",function(){const d=e.\u0275\u0275restoreView(t).$implicit;
1return e.\u0275\u0275nextContext().downloadClicked.emit(d.quality)}),e.\u0275\u0275element(2,"i",3),e.\u0275\u0275text(3),e.\u0275\u0275elementEnd()}if(2&o){const t=i.$implicit,n=e.\u0275\u0275reference(1);e.\u0275\u0275advance(2),e.\u0275\u0275property("size",n.iconSize),e.\u0275\u0275advance(1),e.\u0275\u0275textInterpolate1(" ",t.label,"\n")}}let Qe=(()=>{class o{constructor(){this.downloadOptions=f.XH,this.downloadClicked=new e.EventEmitter,this.trackByQuality=(t,n)=>n.quality}}return o.\u0275fac=function(t){return new(t||o)},o.\u0275cmp=e.\u0275\u0275defineComponent({type:o,selectors:[["tn-native-upload-bulk-download-actions"]],inputs:{downloadOptions:"downloadOptions"},outputs:{downloadClicked:"downloadClicked"},decls:1,vars:2,consts:[["type","button","class","action-btn","uiBtnSize","small","uiBtnTheme","main","themeMode","secondary",3,"click",4,"ngFor","ngForOf","ngForTrackBy"],["type","button","uiBtnSize","small","uiBtnTheme","main","themeMode","secondary",1,"action-btn",3,"click"],["downloadOptionButton","btnSize"],["uiIcon","cloud_download",3,"size"]],template:function(t,n){1&t&&e.\u0275\u0275template(0,zi,4,2,"button",0),2&t&&e.\u0275\u0275property("ngForOf",n.downloadOptions)("ngForTrackBy",n.trackByQuality)},directives:[y.NgForOf,ie.s,oe.V,Z.a],styles:["[_nghost-%COMP%]{display:flex;flex-direction:column;align-items:stretch;gap:.5rem}@media (min-width: 640px){[_nghost-%COMP%]{flex-direction:row;align-items:center}}@media (min-width: 768px){[_nghost-%COMP%]{flex-shrink:0}}.action-btn[_ngcontent-%COMP%]{flex:1 1 0%}@media (min-width: 768px){.action-btn[_ngcontent-%COMP%]{flex:none;justify-content:flex-start}}"],changeDetection:0}),o})();function Ni(o,i){if(1&o){const t=e.\u0275\u0275getCurrentView();e.\u0275\u0275elementStart(0,"tn-photo-grid",5),e.\u0275\u0275listener("selectionToggled",function(s){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext(2).toggleSelection(s)})("editClicked",function(s){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext(2).editClicked(s)})("deleteClicked",function(s){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext(2).deleteClicked(s)})("downloadClicked",function(s){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext(2).downloadClicked(s)}),e.\u0275\u0275elementEnd()}if(2&o){const t=e.\u0275\u0275nextContext().ngIf,n=e.\u0275\u0275nextContext();e.\u0275\u0275property("photos",t.visiblePhotos)("selectedIds",t.selectedIds)("selectionDisabled",t.selectionDisabled)("downloadOptions",n.downloadOptions)}}function Bi(o,i){if(1&o){const t=e.\u0275\u0275getCurrentView();e.\u0275\u0275elementContainerStart(0),e.\u0275\u0275elementStart(1,"tn-section-header",3),e.\u0275\u0275listener("uploadClicked",function(){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext().uploadClicked()})("rearrangeClicked",function(){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext().rearrangePhotosClicked()})("expandToggled",function(){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext().toggleExpanded()}),e.\u0275\u0275elementEnd(),e.\u0275\u0275template(2,Ni,1,4,"tn-photo-grid",4),e.\u0275\u0275elementContainerEnd()}if(2&o){const t=i.ngIf;e.\u0275\u0275advance(1),e.\u0275\u0275property("count",t.photos.length)("uploadingTotal",t.uploadingTotal)("uploadingDone",t.uploadingDone)("expanded",t.expanded)("uploading",t.uploading)("loading",t.loading)("showSpinner",t.loading)("showRearrange",!0)("reordering",t.reordering)("expandToggleDisabled",t.expandToggleDisabled),e.\u0275\u0275advance(1),e.\u0275\u0275property("ngIf",!t.loading&&t.visiblePhotos.length)}}let de=class{constructor(i,t,n,s,d,g,c,r,a,l,p,u,m){this.route=i,this.rearrangeMediaDialogService=t,this.editItemsDialogService=n,this.confirmDialogService=s,this.deleteConfirmDialogService=d,this.toastStore=g,this.bulkSelection=c,this.uploadDialogService=r,this.photosStore=a,this.expansionStore=l,this.testingActions=p,this.mediaPresence=u,this.appConfigService=m,this.sectionId=f.g8.Photos,this.vm$=this.photosStore.vm$,this.downloadOptions=[{quality:f.cM.Print,label:"Download (Print Quality)"}
1,{quality:f.cM.Web,label:`Download (${this.appConfigService.photoFormat} Quality)`}],this.selectedCount$=this.photosStore.selectedIds$.pipe((0,x.U)(h=>h.size)),this.hasSelection$=this.photosStore.selectedIds$.pipe((0,x.U)(h=>h.size>0)),this.selectedPhotos$=(0,be.aj)([this.photosStore.photos$,this.photosStore.selectedIds$]).pipe((0,x.U)(([h,b])=>h.filter(z=>b.has(z.id)))),this.orderId$=this.route.params.pipe((0,x.U)(h=>h.orderId),(0,v.h)(h=>"string"==typeof h)),this.photosStore.load(this.orderId$),this.photosStore.uploadedCount$.pipe((0,k.t)(this)).subscribe(h=>this.reportUploadedCount(h)),this.photosStore.firstPhotoThumbnailUrl$.pipe((0,k.t)(this)).subscribe(h=>this.reportFirstPhotoThumbnail(h)),this.testingActions.purgePhotos$.pipe((0,k.t)(this)).subscribe(()=>this.purgePhotos()),this.photosStore.notice$.pipe((0,v.h)(h=>null!==h),(0,k.t)(this)).subscribe(h=>{this.toastStore.show({message:this.noticeMessage(h),variant:xe[h.kind]}),this.photosStore.clearNotice()})}toggleExpanded(){this.expansionStore.toggleExpanded(this.sectionId)}uploadClicked(){this.uploadDialogService.open(ai).pipe((0,v.h)(i=>!!(null==i?void 0:i.length)),(0,P.M)(this.orderId$)).subscribe(([i,t])=>this.startUpload(i,t))}startUpload(i,t){this.photosStore.upload({orderId:t,items:i}),this.expansionStore.expand(this.sectionId)}purgePhotos(){this.orderId$.pipe((0,T.q)(1)).subscribe(i=>this.confirmAndPurge(i))}confirmAndPurge(i){this.confirmDialogService.confirm(li).pipe((0,v.h)(Boolean)).subscribe(()=>this.photosStore.purgeOrder(i))}rearrangePhotosClicked(){this.photosStore.photos$.pipe((0,T.q)(1),(0,C.w)(i=>{const t=i.map(n=>{var s;return{id:n.id,displayName:n.displayName,imageUrl:null!==(s=n.thumbnailUrl)&&void 0!==s?s:"",uploadDate:new Date(n.createdAt)}});return this.rearrangeMediaDialogService.open({entitySingular:"Photo",entityPlural:"Photos",items:t})}),(0,v.h)(i=>!!i)).subscribe(i=>{this.photosStore.reorder(i.map(t=>t.id))})}toggleSelection(i){this.bulkSelection.toggle({sectionId:this.sectionId,id:i}),this.toastStore.hide()}editClicked(i){this.openEditDialog([i]).pipe((0,v.h)(t=>!!t)).subscribe(t=>{this.photosStore.edit(t)})}downloadClicked({photo:i,quality:t}){this.photosStore.downloadPhoto({photoId:i.id,quality:t}),this.toastStore.show({message:"Your download has started.",variant:"success"})}deleteClicked({id:i,displayName:t}){this.deleteConfirmDialogService.confirm({entity:"Photo",displayNames:[t]}).pipe((0,v.h)(Boolean)).subscribe(()=>{this.bulkSelection.deselect({id:i,sectionId:this.sectionId}),this.photosStore.deletePhotos([{id:i,displayName:t}])})}bulkClosed(){this.bulkSelection.clear(this.sectionId)}bulkDownload(i){this.photosStore.downloadSelected(i),this.bulkSelection.clear(this.sectionId),this.toastStore.show({message:"Your download has started.",variant:"success"})}bulkEdited(){this.selectedPhotos$.pipe((0,T.q)(1),(0,C.w)(i=>this.openEditDialog(i)),(0,v.h)(i=>!!i)).subscribe(i=>{this.bulkSelection.clear(this.sectionId),this.photosStore.edit(i)})}bulkDeleted(){this.selectedPhotos$.pipe((0,T.q)(1),(0,C.w)(i=>this.deleteConfirmDialogService.confirm({entity:"Photos",displayNames:i.map(t=>t.displayName)}).pipe((0,v.h)(Boolean),(0,x.U)(()=>i)))).subscribe(i=>{this.bulkSelection.clear(this.sectionId);const t=i.map(n=>({id:n.id,displayName:n.displayName}));this.photosStore.deletePhotos(t)})}openEditDialog(i){return this.editItemsDialogService.open({kind:"photo",items:i})}noticeMessage(i){switch(i.kind){case"reordered":return"Photos rearranged.";case"updated":return this.updatedMessage(i.count);case"deleted":return this.deletedMessage(i.displayNames);case"uploadFailed":return this.uploadFailedMessage(i.name)}}uploadFailedMessage(i){return`Couldn't upload "${(0,E.Ho)(i)}". Please try again.`}updatedMessage(i){return`Successfully updated ${this.photoCountLabel(i)}!`}deletedMessage(i){return 1===i.length?`Successfully deleted the photo "${(0,E.Ho)(i[0])}"!`:`Successfully deleted ${this.photoCountLabel(i.length)}!`}photoCountLabel(i){return`${i} ${1===i?"photo":"photos"}`}reportUploadedCount(i){this.mediaPresence.setUploadedCount({sectionId:this.sectionId,count:i})}reportFirstPhotoThumbnail(i){this.mediaPresence.setFirstPhotoThumbnailUrl(i)}};de.\u0275fac=function(i){return new(i||de)(e.\u0275\u0275directiveInject(A.gz),e.\u0275\u0275directiveInject(Ce),e.\u0275\u0275directiveInject(J),e.\u0275\u0275directiveInject(U.DNF),e.\u0275\u0275directiveInject(q),e.\u0275\u0275directiveInject(V),e.\u0275\u0275directiveInject(F),e.\u0275\u0275directiveInject(X.CW),e.\u0275\u0275directiveInject(ct),e.\u0275\u0275directiveInject(j),e.\u0275\u0275directiveInject(Y),e.\u0275\u0275directiveInject(W),e.\u0275\u0275directiveInject(D._ZM))},de.\u0275cmp=e.\u0275\u0275defineComponent({type:de,selectors:[["tn-photos-section"]],hostVars:1,hostBindings:function(i,t){2&i&&e.\u0275\u0275hostProperty("id",t.sectionId)},features:[e.\u0275\u0275ProvidersFeature([ct])],decls:6,vars:10,consts:[[4,"ngIf"],[3,"count","visible","closed","edited","deleted"],[3,"downloadOptions","downloadClicked"],["addTooltip","Add Photos","rearrangeTooltip","Rearrange Photo Order","title","Photos",3,"count","uploadingTotal","uploadingDone","expanded","uploading","loading","showSpinner","showRearrange","reordering","expandToggleDisabled","uploadClicked","rearrangeClicked","expandToggled"],[3,"photos","selectedIds","selectionDisabled","downloadOptions","selectionToggled","editClicked","deleteClicked","downloadClicked",4,"ngIf"],[3,"photos","selectedIds","selectionDisabled","downloadOptions","selectionToggled","editClicked","deleteClicked","downloadClicked"]],template:function(i,t){if(1&i&&(e.\u0275\u0275template(0,Bi,3,11,"ng-container",0),e.\u0275\u0275pipe(1,"async"),e.\u0275\u0275elementStart(2,"tn-native-upload-bulk-action-bar",1),e.\u0275\u0275listener("closed",function(){return t.bulkClosed()})("edited",function(){return t.bulkEdited()})("deleted",function(){return t.bulkDeleted()}),e.\u0275\u0275pipe(3,"async"),e.\u0275\u0275pipe(4,"async"),e.\u0275\u0275elementStart(5,"tn-native-upload-bulk-download-actions",2),e.\u0275\u0275listener("downloadClicked",function(s){return t.bulkDownload(s)}),e.\u0275\u0275elementEnd()()),2&i){let n,s;e.\u0275\u0275property("ngIf",e.\u0275\u0275pipeBind1(1,4,t.vm$)),e.\u0275\u0275advance(2),e.\u0275\u0275property("count",null!==(n=e.\u0275\u0275pipeBind1(3,6,t.selectedCount$))&&void 0!==n?n:0)("visible",null!==(s=e.\u0275\u0275pipeBind1(4,8,t.hasSelection$))&&void 0!==s&&s),e.\u0275\u0275advance(3),e.\u0275\u0275property("downloadOptions",t.downloadOptions)}},directives:[y.NgIf,le,Ui,Oe,Qe],pipes:[y.AsyncPipe],encapsulation:2,changeDetection:0}),de=(0,L.gn)([(0,k.c)(),(0,L.w6)("design:paramtypes",[A.gz,Ce,J,U.DNF,q,V,F,X.CW,ct,j,Y,W,D._ZM])],de);var De=_(69287),Ai=(_(50747),_(92338));function Li(o,i){if(1&o&&e.\u0275\u0275element(0,"mux-player",8),2&o){const t=e.\u0275\u0275nextContext(2);e.\u0275\u0275attribute("playback-id",t.data.playbackId)}}function Ri(o,i){if(1&o&&e.\u0275\u0275element(0,"ui-video-player",9),2&o){const t=e.\u0275\u0275nextContext(2);let n;e.\u0275\u0275property("url",null!==(n=t.data.url)&&void 0!==n?n:"")("autoplay",!0)}}function Wi(o,i){if(1&o&&(e.\u0275\u0275elementContainerStart(0),e.\u0275\u0275template(1,Li,1,1,"mux-player",6),e.\u0275\u0275template(2,Ri,1,2,"ng-template",null,7,e.\u0275\u0275templateRefExtractor),e.\u0275\u0275elementContainerEnd()),2&o){const t=e.\u0275\u0275reference(3),n=e.\u0275\u0275nextContext();e.\u0275\u0275advance(1),e.\u0275\u0275property("ngIf",n.data.playbackId)("ngIfElse",t)}}function Gi(o,i){if(1&o&&(e.\u0275\u0275elementStart(0,"div",10),e.\u0275\u0275element(1,"tn-three-d-content-preview",11),e.\u0275\u0275elementEnd()),2&o){const t=e.\u0275\u0275nextContext();e.\u0275\u0275advance(1),e.\u0275\u0275property("url",t.tourUrl)("interactive",!0)}}let Hi=(()=>{class o{constructor(t){var n,s;this.data=t,this.tourUrl="tour"===this.data.kind?(0,E.xo)(null!==(n=this.data.url)&&void 0!==n?n:""):null!==(s=this.data.url)&&void 0!==s?s:""}}return o.\u0275fac=function(t){return new(t||o)(e.\u0275\u0275directiveInject(M.WI))},o.\u0275cmp=e.\u0275\u0275defineComponent({type:o,selectors:[["tn-media-preview-dialog"]],decls:7,vars:3,consts:[[1,"media-dialog"],["align","left"],[1,"media-dialog__title"],[1,"media-dialog__content"],[4,"ngIf"],["class","media-dialog__body media-dialog__body--tour",4,"ngIf"],["autoplay","any","thumbnail-time","1","stream-type","on-demand","class","media-dialog__body media-dialog__body--video",4,"ngIf","ngIfElse"],["urlVideo",""],["autoplay","any","thumbnail-time","1","stream-type","on-demand",1,"media-dialog__body","media-dialog__body--video"],[1,"media-dialog__body","media-dialog__body--video",3,"url","autoplay"],[1,"media-dialog__body","media-dialog__body--tour"],[3,"url","interactive"]],template:function(t,n){1&t&&(e.\u0275\u0275elementStart(0,"div",0)(1,"ui-dialog-header",1)(2,"div",2),e.\u0275\u0275text(3),e.\u0275\u0275elementEnd()(),e.\u0275\u0275elementStart(4,"div",3),e.\u0275\u0275template(5,Wi,4,2,"ng-container",4),e.\u0275\u0275template(6,Gi,2,2,"div",5),e.\u0275\u0275elementEnd()()),2&t&&(e.\u0275\u0275advance(3),e.\u0275\u0275textInterpolate(n.data.title),e.\u0275\u0275advance(2),e.\u0275\u0275property("ngIf","video"===n.data.kind),e.\u0275\u0275advance(1),e.\u0275\u0275property("ngIf","tour"===n.data.kind))},directives:[Ge.A,y.NgIf,Ai.p,ot.e],styles:[".media-preview-dialog .mat-dialog-container{overflow:hidden;border-radius:.5rem;padding:1.25rem}[_nghost-%COMP%]{display:block;height:100%}.media-dialog[_ngcontent-%COMP%]{display:flex;height:100%;flex-direction:column}.media-dialog__title[_ngcontent-%COMP%]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.media-dialog__content[_ngcontent-%COMP%]{position:relative;display:flex;min-height:0;flex:1 1 0%;align-items:center;justify-content:center}.media-dialog__body[_ngcontent-%COMP%]{max-width:calc((90vh - 88px) * 16 / 9);aspect-ratio:16/9}.media-dialog__body--video[_ngcontent-%COMP%]{--tw-bg-opacity: 1;background-color:rgb(226 226 226 / var(--tw-bg-opacity, 1));padding-top:0}.media-dialog__body--tour[_ngcontent-%COMP%]{position:relative;width:100%}"],changeDetection:0}),o})(),Ze=(()=>{class o{constructor(t){this.dialog=t}openVideo(t){this.open(Object.assign(Object.assign({},t),{kind:"video"}))}openTour(t){this.open(Object.assign(Object.assign({},t),{kind:"tour"}))}open(t){this.dialog.open(Hi,{data:t,panelClass:["app-v2","media-preview-dialog"],width:"80vw",maxWidth:"calc(80vh * 16 / 9)",maxHeight:"90vh",autoFocus:!1})}}return o.\u0275fac=function(t){return new(t||o)(e.\u0275\u0275inject(M.uw)
1)},o.\u0275prov=e.\u0275\u0275defineInjectable({token:o,factory:o.\u0275fac,providedIn:"root"}),o})();const Yi={title:"Purge ALL videos (dev only)",message:["Permanently delete every video for this order from Firestore and Mux?"],okButtonText:"Yes, purge",cancelButtonText:"Cancel",width:"450px",destructive:!0};var Ki=_(22313);const pt=(0,ye.H)(),{selectAll:Qi}=pt.getSelectors(),Zi=pt.getInitialState({orderId:"",hasLoaded:!1,loadError:null,uploadProgress:{},sessionUploadIds:[],failedUploadIds:[],savingIds:[],placeholders:{},previews:{},notice:null,dropboxImport:null});let gt=(()=>{class o extends S.m1{constructor(t,n,s,d,g,c){super(Zi),this.coreRepository=t,this.videosService=n,this.bulkSelection=s,this.expansionStore=d,this.sanitizer=g,this.spwSyncOfferService=c,this.sectionId=f.g8.Videos,this.entities$=this.select(Qi),this.placeholders$=this.select(r=>r.placeholders),this.previews$=this.select(r=>r.previews),this.uploadProgress$=this.select(r=>r.uploadProgress),this.sessionUploadIds$=this.select(r=>r.sessionUploadIds),this.failedUploadIds$=this.select(r=>r.failedUploadIds),this.savingIds$=this.select(r=>r.savingIds),this.orderId$=this.select(r=>r.orderId),this.hasLoaded$=this.select(r=>r.hasLoaded),this.loadError$=this.select(r=>r.loadError),this.loading$=this.select(this.hasLoaded$,this.loadError$,(r,a)=>!r&&!a),this.videos$=this.select(this.entities$,this.placeholders$,this.uploadProgress$,this.sessionUploadIds$,this.failedUploadIds$,this.savingIds$,this.previews$,(r,a,l,p,u,m,h)=>{const b=new Set(u),z=new Set(m);return[...r,...Object.values(a)].filter(re=>st(re,p)).map(re=>this.toVideo(re,l,b,z,h))}),this.uploadedCount$=this.select(this.videos$,r=>r.filter(a=>!a.state).length),this.selection$=this.select(this.bulkSelection.activeSectionId$,this.bulkSelection.selectedIds$,(r,a)=>we(this.sectionId,r,a)),this.selectedIds$=this.select(this.selection$,({selectedIds:r})=>r),this.importBatch$=this.select(this.entities$,this.select(r=>r.dropboxImport),(r,a)=>Ye(a,Q.wq.Videos,()=>r.map(l=>({dropboxId:l.dropboxId,createdAt:l.createdAt,settled:l.status===I.Kw.Success})))),this.vm$=this.select(this.videos$,this.loading$,this.selection$,this.expansionStore.expandedSectionIds$,this.importBatch$,(r,a,l,p,u)=>{var m,h;const{visibleItems:b,expanded:z,expandToggleDisabled:re}=Se(r,p,this.sectionId,o.COLLAPSED_VIDEO_LIMIT);return{videos:r,visibleVideos:b,loading:a,selectedIds:l.selectedIds,selectionDisabled:l.selectionDisabled,expanded:z,expandToggleDisabled:re,uploading:!!u,uploadingTotal:null!==(m=null==u?void 0:u.total)&&void 0!==m?m:null,uploadingDone:null!==(h=null==u?void 0:u.done)&&void 0!==h?h:null}},{debounce:!0}),this.notice$=this.select(r=>r.notice),this.clearNotice=this.updater(r=>Object.assign(Object.assign({},r),{notice:null})),this.setNotice=this.updater((r,a)=>Object.assign(Object.assign({},r),{notice:a})),this.setOrderId=this.updater((r,a)=>Object.assign(Object.assign({},r),{orderId:a})),this.setVideos=this.updater((r,a)=>{const l=Object.assign({},r.placeholders),p=Object.assign({},r.uploadProgress),u=Object.assign({},r.previews);return a.forEach(m=>{delete l[m.id],m.status!==I.Kw.Loading&&delete p[m.id],m.status===I.Kw.Success&&u[m.id]&&(URL.revokeObjectURL(u[m.id].objectUrl),delete u[m.id])}),Object.assign(Object.assign({},pt.setAll(a,r)),{hasLoaded:!0,loadError:null,placeholders:l,uploadProgress:p,previews:u})}),this.setLoadError=this.updater((r,a)=>Object.assign(Object.assign({},r),{hasLoaded:!0,loadError:a})),this.addPlaceholder=this.updater((r,a)=>r.entities[a.id]?r:Object.assign(Object.assign({},r),{placeholders:Object.assign(Object.assign({},r.placeholders),{[a.id]:a})})),this.removePreview=this.updater((r,a)=>{const l=r.previews[a];if(!l)return r;URL.revokeObjectURL(l.objectUrl);const p=Object.assign({},r.previews);return delete p[a],Object.assign(Object.assign({},r),{previews:p})}),this.setPreview=this.updater((r,{id:a,preview:l})=>Object.assign(Object.assign({},r),{previews:Object.assign(Object.assign({},r.previews),{[a]:l})})),this.markSessionUpload=this.updater((r,a)=>r.sessionUploadIds.includes(a)?r:Object.assign(Object.assign({},r),{sessionUploadIds:[...r.sessionUploadIds,a]})),this.markUploadFailed=this.updater((r,a)=>r.failedUploadIds.includes(a)?r:Object.assign(Object.assign({},r),{failedUploadIds:[...r.failedUploadIds,a]})),this.setSavingIds=this.updater((r,a)=>Object.assign(Object.assign({},r),{savingIds:a})),this.reportUploadProgress=this.effect(r=>r.pipe((0,E.kX)(200),(0,w.b)(a=>this.applyUploadProgress(a)))),this.applyUploadProgress=this.updater((r,a)=>Object.assign(Object.assign({},r),{uploadProgress:Ne(r.uploadProgress,a)})),this.clearSessionUploads=this.updater(r=>(Ve(r.previews),Object.assign(Object.assign({},r),{uploadProgress:{},sessionUploadIds:[],failedUploadIds:[],placeholders:{},previews:{}}))),this.load=this.effect(r=>r.pipe((0,H.x)(),(0,w.b)(a=>{this.setOrderId(a),this.watchDropboxImport(a)}),(0,C.w)(a=>this.coreRepository.videos.onSnapshotMany({where:{orderId:a},orderBy:[{createdAt:"asc"}]}).pipe((0,S._b)(l=>this.setVideos(l),l=>this.setLoadError(l)))))),this.watchDropboxImport=this.effect(r=>He(this.coreRepository,r).pipe((0,w.b)(a=>this.patchState({dropboxImport:a})))),this.upload=this.effect(r=>r.pipe((0,G.zg)(({orderId:a,items:l})=>(0,te.D)(l).pipe((0,G.zg)(p=>this.uploadOne(a,p),3))))),this.notifySpwWhenProcessingSettles=this.effect(()=>Ke(this.orderId$,this.entities$.pipe((0,x.U)(r=>r.some(a=>a.status===I.Kw.Loading||a.status===I.Kw.Processing)))).pipe((0,w.b)(()=>
1this.spwSyncOfferService.notifyContentChanged()))),this.addLinks=this.effect(r=>r.pipe((0,P.M)(this.orderId$),(0,ne.b)(([a,l])=>this.videosService.createLinks(l,a).pipe((0,S._b)(()=>{this.setNotice({kind:"added",count:a.length}),this.spwSyncOfferService.notifyContentChanged()},p=>{console.error("[VideosStateStore] add links failed",p),this.setNotice({kind:"addFailed"})}))))),this.edit=this.effect(r=>r.pipe((0,P.M)(this.orderId$),(0,ne.b)(([a,l])=>this.saveUpdates(l,a.map(({id:p,displayName:u,displayType:m})=>Object.assign({id:p,displayName:u},m?{displayType:m}:{})))))),this.changeDisplayType=this.effect(r=>r.pipe((0,P.M)(this.orderId$),(0,ne.b)(([{id:a,displayType:l},p])=>this.saveUpdates(p,[{id:a,displayType:l}])))),this.remove=this.effect(r=>r.pipe((0,P.M)(this.orderId$),(0,ne.b)(([a,l])=>{const p=a.map(u=>u.id);return this.setSavingIds(p),this.videosService.deleteVideos({orderId:l,videoIds:p}).pipe((0,S._b)(()=>{this.setNotice({kind:"deleted",displayNames:a.map(u=>u.displayName)}),this.spwSyncOfferService.notifyContentChanged()},u=>{console.error("[VideosStateStore] delete failed",u),this.setNotice({kind:"deleteFailed"})}),(0,O.x)(()=>this.setSavingIds([])))}))),this.purgeOrder=this.effect(r=>r.pipe((0,C.w)(a=>this.videosService.purgeOrderVideos(a).pipe((0,S._b)(()=>this.clearSessionUploads(),l=>console.error("[VideosStateStore] purge failed",l))))))}uploadOne(t,n){var s;const d=null!==(s=n.displayType)&&void 0!==s?s:f.UY,g=n.displayName?(0,E._h)(n.displayName,n.name):n.name;return this.videosService.create(t,g,d).pipe((0,C.w)(({id:c,uploadUrl:r})=>{this.addPlaceholder(this.buildPlaceholder(c,t,g,d)),this.markSessionUpload(c);const a=this.buildPreview(n);return a&&this.setPreview({id:c,preview:a}),this.videosService.streamUpload(r,n.file).pipe((0,H.x)(),(0,w.b)(l=>this.reportUploadProgress({id:c,progress:l})),(0,Ue.Z)(),(0,w.b)(()=>this.reportUploadProgress({id:c,progress:100})),(0,R.K)(l=>(this.logUploadError(n.name,l),this.markUploadFailed(c),this.reportUploadProgress({id:c,progress:null}),this.removePreview(c),B.E)))}),(0,R.K)(c=>(this.logUploadError(n.name,c),this.setNotice({kind:"uploadFailed",name:g}),B.E)))}saveUpdates(t,n){return this.setSavingIds(n.map(s=>s.id)),this.videosService.updateVideos({orderId:t,updates:n}).pipe((0,S._b)(()=>{this.setNotice({kind:"updated",count:n.length}),this.spwSyncOfferService.notifyContentChanged()},s=>{console.error("[VideosStateStore] update failed",s),this.setNotice({kind:"updateFailed"})}),(0,O.x)(()=>this.setSavingIds([])))}buildPlaceholder(t,n,s,d){return{id:t,orderId:n,displayName:s,status:I.Kw.Loading,displayType:d,userId:"",provider:"",createdAt:"",updatedAt:""}}buildPreview(t){return t.previewUrlRaw?{objectUrl:t.previewUrlRaw,safeUrl:this.sanitizer.bypassSecurityTrustUrl(`${t.previewUrlRaw}#t=${N.EE9}`)}:null}toVideo(t,n,s,d,g){var c,r,a;const l=this.toState(t,n,s.has(t.id)),p=t.status===I.Kw.Success;return Object.assign(Object.assign({},t),{state:l,progress:l===f.KG.Processing?null!==(c=n[t.id])&&void 0!==c?c:0:void 0,saving:d.has(t.id),previewUrl:p?null:null!==(a=null===(r=g[t.id])||void 0===r?void 0:r.safeUrl)&&void 0!==a?a:null})}toState(t,n,s){var d;return s||t.status===I.Kw.Failed?f.KG.Failed:t.status===I.Kw.Loading?(null!==(d=n[t.id])&&void 0!==d?d:0)>=100?f.KG.Optimizing:f.KG.Processing:t.status===I.Kw.Processing?f.KG.Optimizing:void 0}logUploadError(t,n){console.error("[VideosStateStore] upload failed",t,n)}ngOnDestroy(){Ve(this.get().previews),super.ngOnDestroy()}}return o.COLLAPSED_VIDEO_LIMIT=2,o.\u0275fac=function(t){return new(t||o)(e.\u0275\u0275inject(Q.AO),e.\u0275\u0275inject(se.YD),e.\u0275\u0275inject(F),e.\u0275\u0275inject(j),e.\u0275\u0275inject(Ki.DomSanitizer),e.\u0275\u0275inject(K.C5))},o.\u0275prov=e.\u0275\u0275defineInjectable({token:o,factory:o.\u0275fac}),o})();function Ji(o,i){if(1&o&&e.\u0275\u0275element(0,"tn-media-upload-progress",13),2&o){const t=e.\u0275\u0275nextContext().$implicit;let n;e.\u0275\u0275property("uploadState",t.state)("progress",null!==(n=t.progress)&&void 0!==n?n:0)}}function qi(o,i){if(1&o){const t=e.\u0275\u0275getCurrentView();e.\u0275\u0275elementStart(0,"tn-media-failed",14),e.\u0275\u0275listener("deleteClicked",function(){e.\u0275\u0275restoreView(t);const s=e.\u0275\u0275nextContext().$implicit;
1return e.\u0275\u0275nextContext().deleteClicked.emit(s)}),e.\u0275\u0275elementEnd()}}function eo(o,i){1&o&&e.\u0275\u0275element(0,"tn-media-saving",15),2&o&&e.\u0275\u0275property("diameter",40)}function to(o,i){if(1&o){const t=e.\u0275\u0275getCurrentView();e.\u0275\u0275elementStart(0,"div",2)(1,"tn-media-item-selectable",3),e.\u0275\u0275listener("selectedChange",function(){const d=e.\u0275\u0275restoreView(t).$implicit;return e.\u0275\u0275nextContext().toggleSelection(d.id)}),e.\u0275\u0275elementStart(2,"tn-media-item-actions",4),e.\u0275\u0275listener("copyClicked",function(){const d=e.\u0275\u0275restoreView(t).$implicit;return e.\u0275\u0275nextContext().copyClicked.emit(d)})("editClicked",function(){const d=e.\u0275\u0275restoreView(t).$implicit;return e.\u0275\u0275nextContext().editClicked.emit(d)})("deleteClicked",function(){const d=e.\u0275\u0275restoreView(t).$implicit;return e.\u0275\u0275nextContext().deleteClicked.emit(d)})("embedCodeClicked",function(){const d=e.\u0275\u0275restoreView(t).$implicit;return e.\u0275\u0275nextContext().embedCodeClicked.emit(d)}),e.\u0275\u0275elementStart(3,"div",5)(4,"tn-video-thumbnail",6),e.\u0275\u0275listener("opened",function(){const d=e.\u0275\u0275restoreView(t).$implicit;return e.\u0275\u0275nextContext().videoOpened.emit(d)}),e.\u0275\u0275elementEnd(),e.\u0275\u0275template(5,Ji,1,2,"tn-media-upload-progress",7),e.\u0275\u0275template(6,qi,1,0,"tn-media-failed",8),e.\u0275\u0275template(7,eo,1,1,"tn-media-saving",9),e.\u0275\u0275elementEnd()()(),e.\u0275\u0275elementStart(8,"div",10),e.\u0275\u0275element(9,"tn-media-filename",11),e.\u0275\u0275elementStart(10,"ui-select",12),e.\u0275\u0275listener("selectionChange",function(s){const g=e.\u0275\u0275restoreView(t).$implicit;return e.\u0275\u0275nextContext().displayTypeChange(g,s)}),e.\u0275\u0275elementEnd()()()}if(2&o){const t=i.$implicit,n=e.\u0275\u0275nextContext();let s,d;e.\u0275\u0275advance(1),e.\u0275\u0275property("disabled",!!t.state||!!t.saving||n.selectionDisabled)("selected",n.isSelected(t.id)),e.\u0275\u0275advance(1),e.\u0275\u0275property("disabled",!!t.state||!!t.saving)("showCopy",!0)("showEdit",!0)("showEmbedCode",!0),e.\u0275\u0275advance(2),e.\u0275\u0275property("url",null!==(s=t.url)&&void 0!==s?s:"")("playbackId",t.playbackId)("uploadState",t.state)("previewUrl",null!==(d=t.previewUrl)&&void 0!==d?d:null)("disabled",!!t.state),e.\u0275\u0275advance(1),e.\u0275\u0275property("ngIf",t.state===n.UploadState.Processing||t.state===n.UploadState.Optimizing),e.\u0275\u0275advance(1),e.\u0275\u0275property("ngIf",t.state===n.UploadState.Failed),e.\u0275\u0275advance(1),e.\u0275\u0275property("ngIf",t.saving),e.\u0275\u0275advance(2),e.\u0275\u0275property("value",t.displayName),e.\u0275\u0275advance(1),e.\u0275\u0275property("items",n.displayTypeOptions)("value",t.displayType)("disabled",!!t.state||!!t.saving)}}let no=(()=>{class o{constructor(){this.videos=[],this.selectionDisabled=!1,this.selectedIds=new Set,this.copyClicked=new e.EventEmitter,this.editClicked=new e.EventEmitter,this.deleteClicked=new e.EventEmitter,this.embedCodeClicked=new e.EventEmitter,this.displayTypeChanged=new e.EventEmitter,this.selectionToggled=new e.EventEmitter,this.videoOpened=new e.EventEmitter,this.trackById=N.xnY,this.UploadState=f.KG,this.displayTypeOptions=f.Y0}isSelected(t){return this.selectedIds.has(t)}toggleSelection(t){this.selectionToggled.emit(t)}displayTypeChange(t,n){this.displayTypeChanged.emit({video:t,displayType:n})}}return o.\u0275fac=function(t){return new(t||o)}
1,o.\u0275cmp=e.\u0275\u0275defineComponent({type:o,selectors:[["tn-video-grid"]],inputs:{videos:"videos",selectionDisabled:"selectionDisabled",selectedIds:"selectedIds"},outputs:{copyClicked:"copyClicked",editClicked:"editClicked",deleteClicked:"deleteClicked",embedCodeClicked:"embedCodeClicked",displayTypeChanged:"displayTypeChanged",selectionToggled:"selectionToggled",videoOpened:"videoOpened"},decls:2,vars:2,consts:[[1,"video-grid"],["class","video-grid-item",4,"ngFor","ngForOf","ngForTrackBy"],[1,"video-grid-item"],[3,"disabled","selected","selectedChange"],[3,"disabled","showCopy","showEdit","showEmbedCode","copyClicked","editClicked","deleteClicked","embedCodeClicked"],[1,"video-grid-item-content"],[1,"rounded",3,"url","playbackId","uploadState","previewUrl","disabled","opened"],[3,"uploadState","progress",4,"ngIf"],[3,"deleteClicked",4,"ngIf"],[3,"diameter",4,"ngIf"],[1,"video-grid-item-footer"],[1,"video-grid-item-filename",3,"value"],["size","medium","appearance","bordered",1,"video-grid-item-status",3,"items","value","disabled","selectionChange"],[3,"uploadState","progress"],[3,"deleteClicked"],[3,"diameter"]],template:function(t,n){1&t&&(e.\u0275\u0275elementStart(0,"div",0),e.\u0275\u0275template(1,to,11,18,"div",1),e.\u0275\u0275elementEnd()),2&t&&(e.\u0275\u0275advance(1),e.\u0275\u0275property("ngForOf",n.videos)("ngForTrackBy",n.trackById))},directives:[y.NgForOf,Ie,ke.H,jt,y.NgIf,Be.g,Ae.a,Pe,Te.U,rt.H],styles:[".video-grid[_ngcontent-%COMP%]{display:grid;grid-column-gap:1.25rem;column-gap:1.25rem;grid-row-gap:1rem;row-gap:1rem;grid-template-columns:repeat(auto-fill,minmax(300px,1fr))}.video-grid-item[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.625rem}.video-grid-item-content[_ngcontent-%COMP%]{position:relative;border-radius:.25rem;aspect-ratio:16/9}.video-grid-item-footer[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:flex-start;gap:.75rem}@media (min-width: 1024px){.video-grid-item-footer[_ngcontent-%COMP%]{flex-direction:row;align-items:center}}.video-grid-item-filename[_ngcontent-%COMP%]{min-width:0;flex:1 1 0%}.video-grid-item-status[_ngcontent-%COMP%]{width:15rem;max-width:100%;flex:none}"],changeDetection:0}),o})();function io(o,i){if(1&o){const t=e.\u0275\u0275getCurrentView();e.\u0275\u0275elementStart(0,"tn-video-grid",4),e.\u0275\u0275listener("copyClicked",function(s){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext(2).copyClicked(s)})("embedCodeClicked",function(s){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext(2).embedCodeClicked(s)})("editClicked",function(s){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext(2).editClicked(s)})("displayTypeChanged",function(s){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext(2).displayTypeChange(s)})("selectionToggled",function(s){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext(2).toggleSelection(s)})("deleteClicked",function(s){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext(2).deleteClicked(s)})("videoOpened",function(s){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext(2).openedVideo(s)}),e.\u0275\u0275elementEnd()}if(2&o){const t=e.\u0275\u0275nextContext().ngIf;e.\u0275\u0275property("videos",t.visibleVideos)("selectedIds",t.selectedIds)("selectionDisabled",t.selectionDisabled)}}function oo(o,i){if(1&o){const t=e.\u0275\u0275getCurrentView();e.\u0275\u0275elementContainerStart(0),e.\u0275\u0275elementStart(1,"tn-section-header",2),e.\u0275\u0275listener("uploadClicked",function(){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext().uploadClicked()})("expandToggled",function(){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext().toggleExpanded()}),e.\u0275\u0275elementEnd(),e.\u0275\u0275template(2,io,1,3,"tn-video-grid",3),e.\u0275\u0275elementContainerEnd()}if(2&o){const t=i.ngIf;e.\u0275\u0275advance(1),e.\u0275\u0275property("count",t.videos.length)("uploading",t.uploading)("uploadingTotal",t.uploadingTotal)("uploadingDone",t.uploadingDone)("expanded",t.expanded)("loading",t.loading)("showSpinner",t.loading)("expandToggleDisabled",t.expandToggleDisabled),e.\u0275\u0275advance(1),e.\u0275\u0275property("ngIf",!t.loading&&t.visibleVideos.length)}}let ce=class{constructor(i,t,n,s,d,g,c,r,a,l,p,u,m){this.route=i,this.uploadDialogService=t,this.expansionStore=n,this.bulkSelection=s,this.deleteConfirmDialogService=d,this.toastStore=g,this.videosStore=c,this.mediaPreviewDialog=r,this.editItemsDialogService=a,this.clipboard=l,this.confirmDialogService=p,this.testingActions=u,this.mediaPresence=m,this.sectionId=f.g8.Videos,this.uploadConfig={title:"Drop Videos",subtitle:"Or select files from your device",allowedFileTypes:["mp4","mov","flv","avi","mkv","wmv","ts"],filesKind:"video",uploadSources:[f.FO.Device,f.FO.Link],contentProviders:[N.Gx3.YouTube,N.Gx3.Vimeo]},this.vm$=this.videosStore.vm$,this.selectedCount$=this.videosStore.selectedIds$.pipe((0,x.U)(h=>h.size)),this.hasSelection$=this.videosStore.selectedIds$.pipe((0,x.U)(h=>h.size>0)),this.selectedVideos$=(0,be.aj)([this.videosStore.videos$,this.videosStore.selectedIds$]).pipe((0,x.U)(([h,b])=>h.filter(z=>b.has(z.id)))),this.orderId$=this.route.params.pipe((0,x.U)(h=>h.orderId),(0,v.h)(h=>"string"==typeof h)),this.videosStore.load(this.orderId$),this.videosStore.uploadedCount$.pipe((0,k.t)(this)).subscribe(h=>this.reportUploadedCount(h)),this.testingActions.purgeVideos$.pipe((0,k.t)(this)).subscribe(()=>this.purgeVideos()),this.videosStore.notice$.pipe((0,v.h)(h=>null!==h),(0,k.t)(this)).subscribe(h=>this.handleNotice(h))}toggleExpanded(){this.expansionStore.toggleExpanded(this.sectionId)}purgeVideos(){this.orderId$.pipe((0,T.q)(1)).subscribe(i=>this.confirmAndPurge(i))}confirmAndPurge(i){this.confirmDialogService.confirm(Yi).pipe((0,v.h)(Boolean)).subscribe(()=>this.videosStore.purgeOrder(i))}uploadClicked(){this.uploadDialogService.open(this.uploadConfig).pipe((0,v.h)(i=>!!(null==i?void 0:i.length)),(0,P.M)(this.orderId$)).subscribe(([i,t])=>this.handleUploadItems(i,t))}handleUploadItems(i,t){this.isDeviceItems(i)?this.startUpload(i,t):this.embedLinks(i)}isDeviceItems(i){return"file"in i[0]}startUpload(i,t){this.videosStore.upload({orderId:t,items:i}),this.expansionStore.expand(this.sectionId)}embedLinks(i){this.videosStore.addLinks(i),this.expansionStore.expand(this.sectionId)}toggleSelection(i){this.bulkSelection.toggle({sectionId:this.sectionId,id:i})}displayTypeChange({video:i,displayType:t}){this.videosStore.changeDisplayType({id:i.id,displayType:t})}copyClicked(i){var t;const n=i.playbackId?(0,N.kWj)(i.playbackId):null!==(t=i.url)&&void 0!==t?t:"";this.clipboard.copy(n),this.toastStore.show({message:"Successfully copied the video link to your clipboard!",variant:"success"})}embedCodeClicked(i){var t;const n=i.playbackId?(0,N.kWj)(i.playbackId):null!==(t=i.url)&&void 0!==t?t:"";this.clipboard.copy((0,N.Ezw)(n)),this.toastStore.show({message:"Successfully copied the embed code to your clipboard!",variant:"success"})}editClicked(i){this.openEditDialog([i]).pipe((0,v.h)(t=>!!t)).subscribe(t=>this.applyEditUpdates(t))}deleteClicked({id:i,displayName:t}){this.deleteConfirmDialogService.confirm({entity:"Video",displayNames:[t]}).pipe((0,v.h)(Boolean)).subscribe(()=>{this.videosStore.remove([{id:i,displayName:t}]),this.bulkSelection.deselect({id:i,sectionId:this.sectionId})})}openedVideo(i){this.mediaPreviewDialog.openVideo({url:i.url,playbackId:i.playbackId,title:i.displayName})}bulkClosed(){this.bulkSelection.clear(this.sectionId)}bulkEdited(){this.selectedVideos$.pipe((0,T.q)(1),(0,C.w)(i=>this.openEditDialog(i)),(0,v.h)(i=>!!i)).subscribe(i=>{this.bulkSelection.clear(this.sectionId),this.applyEditUpdates(i)})}bulkDeleted(){this.selectedVideos$.pipe((0,T.q)(1),(0,C.w)(i=>this.deleteConfirmDialogService.confirm({entity:"Videos",displayNames:i.map(t=>t.displayName)}).pipe((0,v.h)(Boolean),(0,x.U)(()=>i)))).subscribe(i=>{this.videosStore.remove(i),this.bulkSelection.clear(this.sectionId)})}openEditDialog(i){return this.editItemsDialogService.open({kind:"video",items:i})}applyEditUpdates(i){!i.length||this.videosStore.edit(i)}handleNotice(i){this.toastStore.show({message:this.noticeMessage(i),variant:xe[i.kind]}),this.videosStore.clearNotice()}noticeMessage(i){switch(i.kind){case"uploadFailed":return`Couldn't upload "${(0,E.Ho)(i.name)}". Please try again.`;case"added":return`Successfully embedded ${this.videoNoun(i.count)}!`;case"updated":return`Successfully updated ${this.videoNoun(i.count)} settings!`;case"deleted":return this.deletedMessage(i.displayNames);case"addFailed":return"Couldn't embed. Please try again.";case"updateFailed":return"Couldn't update the video settings. Please try again.";case"deleteFailed":return"Couldn't delete. Please try again."}}deletedMessage(i){return 1===i.length?`Successfully deleted the video "${i[0]}"!`:`Successfully deleted ${i.length} videos!`}
1videoNoun(i){return 1===i?"video":"videos"}reportUploadedCount(i){this.mediaPresence.setUploadedCount({sectionId:this.sectionId,count:i})}};ce.\u0275fac=function(i){return new(i||ce)(e.\u0275\u0275directiveInject(A.gz),e.\u0275\u0275directiveInject(X.CW),e.\u0275\u0275directiveInject(j),e.\u0275\u0275directiveInject(F),e.\u0275\u0275directiveInject(q),e.\u0275\u0275directiveInject(V),e.\u0275\u0275directiveInject(gt),e.\u0275\u0275directiveInject(Ze),e.\u0275\u0275directiveInject(J),e.\u0275\u0275directiveInject(De.TU),e.\u0275\u0275directiveInject(U.DNF),e.\u0275\u0275directiveInject(Y),e.\u0275\u0275directiveInject(W))},ce.\u0275cmp=e.\u0275\u0275defineComponent({type:ce,selectors:[["tn-videos-section"]],hostVars:1,hostBindings:function(i,t){2&i&&e.\u0275\u0275hostProperty("id",t.sectionId)},features:[e.\u0275\u0275ProvidersFeature([gt])],decls:5,vars:9,consts:[[4,"ngIf"],[3,"count","visible","closed","edited","deleted"],["title","Videos","addTooltip","Add Videos",3,"count","uploading","uploadingTotal","uploadingDone","expanded","loading","showSpinner","expandToggleDisabled","uploadClicked","expandToggled"],[3,"videos","selectedIds","selectionDisabled","copyClicked","embedCodeClicked","editClicked","displayTypeChanged","selectionToggled","deleteClicked","videoOpened",4,"ngIf"],[3,"videos","selectedIds","selectionDisabled","copyClicked","embedCodeClicked","editClicked","displayTypeChanged","selectionToggled","deleteClicked","videoOpened"]],template:function(i,t){if(1&i&&(e.\u0275\u0275template(0,oo,3,9,"ng-container",0),e.\u0275\u0275pipe(1,"async"),e.\u0275\u0275elementStart(2,"tn-native-upload-bulk-action-bar",1),e.\u0275\u0275listener("closed",function(){return t.bulkClosed()})("edited",function(){return t.bulkEdited()})("deleted",function(){return t.bulkDeleted()}),e.\u0275\u0275pipe(3,"async"),e.\u0275\u0275pipe(4,"async"),e.\u0275\u0275elementEnd()),2&i){let n,s;e.\u0275\u0275property("ngIf",e.\u0275\u0275pipeBind1(1,3,t.vm$)),e.\u0275\u0275advance(2),e.\u0275\u0275property("count",null!==(n=e.\u0275\u0275pipeBind1(3,5,t.selectedCount$))&&void 0!==n?n:0)("visible",null!==(s=e.\u0275\u0275pipeBind1(4,7,t.hasSelection$))&&void 0!==s&&s)}},directives:[y.NgIf,le,no,Oe],pipes:[y.AsyncPipe],encapsulation:2,changeDetection:0}),ce=(0,L.gn)([(0,k.c)(),(0,L.w6)("design:paramtypes",[A.gz,X.CW,j,F,q,V,gt,Ze,J,De.TU,U.DNF,Y,W])],ce);const ro={title:"Drop Floor Plans",subtitle:"Or select files from your device",allowedFileTypes:["jpg","jpeg","png"],filesKind:"image",uploadSources:[f.FO.Device],thumbnailVariant:"plan"},so={title:"Purge ALL floor plans (dev only)",message:["Permanently delete every floor plan for this order from Firestore and GCS?"],okButtonText:"Yes, purge",cancelButtonText:"Cancel",width:"450px",destructive:!0},ut=(0,ye.H)(),{selectAll:ao}=ut.getSelectors(),lo=ut.getInitialState({orderId:"",hasLoaded:!1,loadError:null,uploadProgress:{},previews:{},sessionUploadIds:[],placeholders:{},batchIds:[],reordering:!1,savingIds:[],notice:null,dropboxImport:null});let mt=(()=>{class o extends S.m1{constructor(t,n,s,d,g,c){super(lo),this.floorPlansService=t,this.coreRepository=n,this.bulkSelection=s,this.expansionStore=d,this.nativeDeliveryDownloadService=g,this.spwSyncOfferService=c,this.sectionId=f.g8.FloorPlans,this.entities$=this.select(ao),this.uploadProgress$=this.select(r=>r.uploadProgress),this.sessionUploadIds$=this.select(r=>r.sessionUploadIds),this.previews$=this.select(r=>r.previews),this.placeholders$=this.select(r=>r.placeholders),this.batchIds$=this.select(r=>r.batchIds),this.savingIds$=this.select(r=>r.savingIds),this.hasLoaded$=this.select(r=>r.hasLoaded),this.loadError$=this.select(r=>r.loadError),this.loading$=this.select(this.hasLoaded$,this.loadError$,(r,a)=>!r&&!a),this.floorPlans$=this.select(this.entities$,this.placeholders$,this.uploadProgress$,this.previews$,this.sessionUploadIds$,this.savingIds$,(r,a,l,p,u,m)=>{const h=new Set(m);return[...r,...Object.values(a)].filter(b=>at(b,u)).map(b=>lt(b,l,p,h))}),this.uploadedCount$=this.select(this.floorPlans$,r=>r.filter(a=>
1a.isSuccess||a.isOptimizing).length),this.dropboxImport$=this.select(r=>r.dropboxImport),this.uploadBatch$=this.select(this.floorPlans$,this.batchIds$,this.dropboxImport$,(r,a,l)=>{const p=new Set(a),u=r.filter(b=>p.has(b.id)&&(b.isPreSuccess||b.isSuccess));return nt({uploading:u.some(b=>b.isPreSuccess),total:u.length,done:u.filter(b=>b.isSuccess).length},Ye(l,Q.wq.FloorPlans,()=>r.map(b=>({dropboxId:b.dropboxId,createdAt:b.createdAt,settled:b.isSuccess}))))}),this.selection$=this.select(this.bulkSelection.activeSectionId$,this.bulkSelection.selectedIds$,(r,a)=>we(this.sectionId,r,a)),this.selectedIds$=this.select(this.selection$,({selectedIds:r})=>r),this.orderId$=this.select(r=>r.orderId),this.reordering$=this.select(r=>r.reordering),this.notice$=this.select(r=>r.notice),this.vm$=this.select(this.floorPlans$,this.uploadBatch$,this.loading$,this.selection$,this.expansionStore.expandedSectionIds$,this.reordering$,(r,a,l,p,u,m)=>{const{visibleItems:h,expanded:b,expandToggleDisabled:z}=Se(r,u,this.sectionId,o.COLLAPSED_FLOOR_PLAN_LIMIT);return{floorPlans:r,visibleFloorPlans:h,uploading:a.uploading,uploadingTotal:a.total,uploadingDone:a.done,loading:l,selectedIds:p.selectedIds,selectionDisabled:p.selectionDisabled,expanded:b,expandToggleDisabled:z,reordering:m}},{debounce:!0}),this.setOrderId=this.updater((r,a)=>Object.assign(Object.assign({},r),{orderId:a})),this.setReordering=this.updater((r,a)=>Object.assign(Object.assign({},r),{reordering:a})),this.setSavingIds=this.updater((r,a)=>Object.assign(Object.assign({},r),{savingIds:a})),this.setNotice=this.updater((r,a)=>Object.assign(Object.assign({},r),{notice:a})),this.clearNotice=this.updater(r=>Object.assign(Object.assign({},r),{notice:null})),this.setFloorPlans=this.updater((r,a)=>{const l=Object.assign({},r.placeholders),p=Object.assign({},r.previews);return a.forEach(u=>{delete l[u.id],u.status===I.sq.Success&&p[u.id]&&(URL.revokeObjectURL(p[u.id].objectUrl),delete p[u.id])}),Object.assign(Object.assign({},ut.setAll(a,r)),{hasLoaded:!0,loadError:null,placeholders:l,previews:p})}),this.setLoadError=this.updater((r,a)=>Object.assign(Object.assign({},r),{hasLoaded:!0,loadError:a})),this.reportUploadProgress=this.effect(r=>r.pipe((0,E.kX)(200),(0,w.b)(a=>this.applyUploadProgress(a)))),this.applyUploadProgress=this.updater((r,a)=>Object.assign(Object.assign({},r),{uploadProgress:Ne(r.uploadProgress,a)})),this.setPreview=this.updater((r,{id:a,preview:l})=>Object.assign(Object.assign({},r),{previews:Object.assign(Object.assign({},r.previews),{[a]:l})})),this.markSessionUpload=this.updater((r,a)=>r.sessionUploadIds.includes(a)?r:Object.assign(Object.assign({},r),{sessionUploadIds:[...r.sessionUploadIds,a]})),this.addPlaceholder=this.updater((r,a)=>{const l=r.batchIds.some(p=>{var u;const m=null!==(u=r.placeholders[p])&&void 0!==u?u:r.entities[p];return null!=m&&this.isInProgress(m)});return Object.assign(Object.assign({},r),{placeholders:r.entities[a.id]?r.placeholders:Object.assign(Object.assign({},r.placeholders),{[a.id]:a}),batchIds:l?[...r.batchIds,a.id]:[a.id]})}),this.markPlaceholderFailed=this.updater((r,a)=>{const l=r.placeholders[a];return l?Object.assign(Object.assign({},r),{placeholders:Object.assign(Object.assign({},r.placeholders),{[a]:Object.assign(Object.assign({},l),{status:I.sq.Failed})})}):r}),this.load=this.effect(r=>r.pipe((0,H.x)(),(0,w.b)(a=>{this.setOrderId(a),this.watchDropboxImport(a)}),(0,C.w)(a=>this.coreRepository.floorPlans.onSnapshotMany({where:{orderId:a},orderBy:[{sortIndex:"asc"},{createdAt:"asc"}]}).pipe((0,S._b)(l=>this.setFloorPlans(l),l=>this.setLoadError(l)))))),this.watchDropboxImport=this.effect(r=>He(this.coreRepository,r).pipe((0,w.b)(a=>this.patchState({dropboxImport:a})))),this.upload=this.effect(r=>r.pipe((0,G.zg)(({orderId:a,items:l})=>(0,te.D)(l).pipe((0,G.zg)(p=>this.registerUpload(a,p)),(0,G.zg)(({id:p,storageKey:u,item:m})=>this.streamFileBytes(a,p,u,m)))))),this.notifySpwWhenProcessingSettles=this.effect(()=>Ke(this.orderId$,this.entities$.pipe((0,x.U)(r=>r.some(a=>this.isInProgress(a))))).pipe((0,w.b)(()=>
1this.spwSyncOfferService.notifyContentChanged()))),this.purgeOrder=this.effect(r=>r.pipe((0,C.w)(a=>this.floorPlansService.purgeOrderFloorPlans(a).pipe((0,R.K)(l=>(console.error("[FloorPlansStateStore] purge failed",l),B.E)))))),this.downloadFloorPlan=this.effect(r=>r.pipe((0,P.M)(this.orderId$),(0,w.b)(([a,l])=>{this.nativeDeliveryDownloadService.download(l,"floorPlans",[a],D.w$1.Original)}))),this.downloadSelected=this.effect(r=>r.pipe((0,P.M)(this.orderId$,this.selectedIds$),(0,w.b)(([,a,l])=>{this.nativeDeliveryDownloadService.download(a,"floorPlans",[...l],D.w$1.Original)}))),this.reorder=this.effect(r=>r.pipe((0,P.M)(this.orderId$),(0,C.w)(([a,l])=>(this.setReordering(!0),this.setSavingIds(a),this.floorPlansService.reorder(l,a).pipe((0,S._b)(()=>{this.setNotice({kind:"reordered"}),this.spwSyncOfferService.notifyContentChanged()},p=>console.error("[FloorPlansStateStore] reorder failed",p)),(0,O.x)(()=>{this.setReordering(!1),this.setSavingIds([])})))))),this.edit=this.effect(r=>r.pipe((0,P.M)(this.orderId$),(0,C.w)(([a,l])=>(this.setSavingIds(a.map(p=>p.id)),this.floorPlansService.editFloorPlans(l,a).pipe((0,S._b)(()=>{this.setNotice({kind:"updated",count:a.length}),this.spwSyncOfferService.notifyContentChanged()},p=>console.error("[FloorPlansStateStore] edit failed",p)),(0,O.x)(()=>this.setSavingIds([]))))))),this.deleteFloorPlans=this.effect(r=>r.pipe((0,P.M)(this.orderId$),(0,C.w)(([a,l])=>(this.setSavingIds(a.map(p=>p.id)),this.floorPlansService.deleteFloorPlans(l,a.map(p=>p.id)).pipe((0,S._b)(()=>{this.setNotice({kind:"deleted",displayNames:a.map(p=>p.displayName)}),this.spwSyncOfferService.notifyContentChanged()},p=>{console.error("[FloorPlansStateStore] delete failed",p)}),(0,O.x)(()=>this.setSavingIds([])))))))}isInProgress(t){return t.status===I.sq.Loading||t.status===I.sq.Pending||t.status===I.sq.Optimization}buildPlaceholder(t,n,s){return{id:t,orderId:n,displayName:s,status:I.sq.Loading,userId:"",provider:I.ij.FirebaseStorage,createdAt:"",updatedAt:""}}logUploadError(t,n){console.error("[FloorPlansStateStore] upload failed",t,n)}showUploadPlaceholder(t,n,s){this.addPlaceholder(this.buildPlaceholder(t,n,s.name)),this.markSessionUpload(t),s.previewUrl&&s.previewUrlRaw&&this.setPreview({id:t,preview:{safeUrl:s.previewUrl,objectUrl:s.previewUrlRaw}})}registerUpload(t,n){return this.floorPlansService.create(t,n.name).pipe((0,w.b)(({id:s})=>this.showUploadPlaceholder(s,t,n)),(0,x.U)(({id:s,storageKey:d})=>({id:s,storageKey:d,item:n})),(0,R.K)(s=>(this.logUploadError(n.name,s),this.setNotice({kind:"uploadFailed",name:n.name}),B.E)))}streamFileBytes(t,n,s,d){return this.floorPlansService.streamUpload(s,d.file,d.name).pipe((0,H.x)(),(0,w.b)(g=>this.reportUploadProgress({id:n,progress:g})),(0,Ue.Z)(),(0,C.w)(()=>this.floorPlansService.completeUpload(n,t)),(0,O.x)(()=>this.reportUploadProgress({id:n,progress:null})),(0,R.K)(g=>(this.logUploadError(d.name,g),this.markPlaceholderFailed(n),B.E)))}ngOnDestroy(){Ve(this.get().previews),super.ngOnDestroy()}}return o.COLLAPSED_FLOOR_PLAN_LIMIT=2,o.\u0275fac=function(t){return new(t||o)(e.\u0275\u0275inject(se.Wd),e.\u0275\u0275inject(Q.AO),e.\u0275\u0275inject(F),e.\u0275\u0275inject(j),e.\u0275\u0275inject(D.jub),e.\u0275\u0275inject(K.C5))},o.\u0275prov=e.\u0275\u0275defineInjectable({token:o,factory:o.\u0275fac}),o})();function co(o,i){if(1&o){const t=e.\u0275\u0275getCurrentView();e.\u0275\u0275elementStart(0,"img",12),e.\u0275\u0275listener("load",function(){e.\u0275\u0275restoreView(t);const s=e.\u0275\u0275nextContext().$implicit;return e.\u0275\u0275nextContext().imageLoaded(s.id)})("error",function(){e.\u0275\u0275restoreView(t);const s=e.\u0275\u0275nextContext().$implicit;return e.\u0275\u0275nextContext().imageLoaded(s.id)}),e.\u0275\u0275elementEnd()}2&o&&e.\u0275\u0275property("src",i.ngIf,e.\u0275\u0275sanitizeUrl)}function po(o,i){if(1&o&&e.\u0275\u0275element(0,"tn-media-upload-progress",13),2&o){const t=e.\u0275\u0275nextContext().$implicit;let n;e.\u0275\u0275property("optimizing",t.isOptimizing)("progress",null!==(n=t.progress)&&void 0!==n?n:0)}}function go(o,i){if(1&o){const t=e.\u0275\u0275getCurrentView();e.\u0275\u0275elementStart(0,"tn-media-failed",14),e.\u0275\u0275listener("deleteClicked",function(){e.\u0275\u0275restoreView(t);const s=e.\u0275\u0275nextContext().$implicit;return e.\u0275\u0275nextContext().delete(s)}),e.\u0275\u0275elementEnd()}}function uo(o,i){1&o&&e.\u0275\u0275element(0,"tn-media-saving")}function mo(o,i){if(1&o){const t=e.\u0275\u0275getCurrentView();e.\u0275\u0275elementStart(0,"div",2)(1,"div",3)(2,"tn-media-item-selectable",4),e.\u0275\u0275listener("selectedChange",function(){const d=e.\u0275\u0275restoreView(t).$implicit;return e.\u0275\u0275nextContext().toggleSelection(d.id)}),e.\u0275\u0275elementStart(3,"tn-media-item-actions",5),e.\u0275\u0275listener("editClicked",function(){const d=e.\u0275\u0275restoreView(t).$implicit;return e.\u0275\u0275nextContext().edit(d)})("deleteClicked",function(){const d=e.\u0275\u0275restoreView(t).$implicit;
1return e.\u0275\u0275nextContext().delete(d)})("downloadClicked",function(s){const g=e.\u0275\u0275restoreView(t).$implicit;return e.\u0275\u0275nextContext().download(g,s)}),e.\u0275\u0275elementStart(4,"div",6),e.\u0275\u0275template(5,co,1,1,"img",7),e.\u0275\u0275template(6,po,1,2,"tn-media-upload-progress",8),e.\u0275\u0275template(7,go,1,0,"tn-media-failed",9),e.\u0275\u0275template(8,uo,1,0,"tn-media-saving",10),e.\u0275\u0275elementEnd()()()(),e.\u0275\u0275element(9,"tn-media-filename",11),e.\u0275\u0275elementEnd()}if(2&o){const t=i.$implicit,n=e.\u0275\u0275nextContext();e.\u0275\u0275classProp("is-skeleton",!n.isReady(t)&&!t.isFailed),e.\u0275\u0275advance(2),e.\u0275\u0275property("disabled",!n.isReady(t)||n.selectionDisabled||t.saving)("selected",n.isSelected(t.id)),e.\u0275\u0275advance(1),e.\u0275\u0275property("disabled",!n.isReady(t)||t.saving)("showEdit",!0)("showDownload",!0)("downloadOptions",n.downloadOptions),e.\u0275\u0275advance(1),e.\u0275\u0275classProp("loaded",n.isThumbnailSettled(t)),e.\u0275\u0275advance(1),e.\u0275\u0275property("ngIf",t.imageUrl),e.\u0275\u0275advance(1),e.\u0275\u0275property("ngIf",t.isPreSuccess),e.\u0275\u0275advance(1),e.\u0275\u0275property("ngIf",t.isFailed),e.\u0275\u0275advance(1),e.\u0275\u0275property("ngIf",t.saving),e.\u0275\u0275advance(1),e.\u0275\u0275property("value",t.displayName)}}let ho=(()=>{class o{constructor(){this.floorPlans=[],this.selectionDisabled=!1,this.selectedIds=new Set,this.downloadOptions=f.XH,this.selectionToggled=new e.EventEmitter,this.editClicked=new e.EventEmitter,this.deleteClicked=new e.EventEmitter,this.downloadClicked=new e.EventEmitter,this.trackById=N.xnY,this.loadedIds=new Set}isReady(t){return t.isSuccess&&this.loadedIds.has(t.id)}isThumbnailSettled(t){return this.loadedIds.has(t.id)||t.isFailed}isSelected(t){return this.selectedIds.has(t)}imageLoaded(t){this.loadedIds.add(t)}toggleSelection(t){this.selectionToggled.emit(t)}edit(t){this.editClicked.emit(t)}delete(t){this.deleteClicked.emit(t)}download(t,n){this.downloadClicked.emit({floorPlan:t,quality:n})}}return o.\u0275fac=function(t){return new(t||o)}
1,o.\u0275cmp=e.\u0275\u0275defineComponent({type:o,selectors:[["tn-floor-plan-grid"]],inputs:{floorPlans:"floorPlans",selectionDisabled:"selectionDisabled",selectedIds:"selectedIds",downloadOptions:"downloadOptions"},outputs:{selectionToggled:"selectionToggled",editClicked:"editClicked",deleteClicked:"deleteClicked",downloadClicked:"downloadClicked"},decls:2,vars:2,consts:[[1,"floor-plan-grid"],["class","floor-plan-card",3,"is-skeleton",4,"ngFor","ngForOf","ngForTrackBy"],[1,"floor-plan-card"],[1,"floor-plan-card-thumbnail"],[3,"disabled","selected","selectedChange"],[3,"disabled","showEdit","showDownload","downloadOptions","editClicked","deleteClicked","downloadClicked"],[1,"floor-plan-thumbnail"],["alt","Floor plan thumbnail","loading","lazy","decoding","async",3,"src","load","error",4,"ngIf"],[3,"optimizing","progress",4,"ngIf"],[3,"deleteClicked",4,"ngIf"],[4,"ngIf"],[3,"value"],["alt","Floor plan thumbnail","loading","lazy","decoding","async",3,"src","load","error"],[3,"optimizing","progress"],[3,"deleteClicked"]],template:function(t,n){1&t&&(e.\u0275\u0275elementStart(0,"div",0),e.\u0275\u0275template(1,mo,10,15,"div",1),e.\u0275\u0275elementEnd()),2&t&&(e.\u0275\u0275advance(1),e.\u0275\u0275property("ngForOf",n.floorPlans)("ngForTrackBy",n.trackById))},directives:[y.NgForOf,Ie,ke.H,y.NgIf,Be.g,Ae.a,Pe,Te.U],styles:["@keyframes skeleton-shimmer{0%{background-position:-400px 0}to{background-position:400px 0}}.floor-plan-grid[_ngcontent-%COMP%]{display:grid;grid-column-gap:1.25rem;column-gap:1.25rem;grid-row-gap:1rem;row-gap:1rem;grid-template-columns:repeat(auto-fill,minmax(320px,1fr))}.floor-plan-card[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.5rem}.floor-plan-card.is-skeleton[_ngcontent-%COMP%]{pointer-events:none}.floor-plan-card-thumbnail[_ngcontent-%COMP%]{border-radius:.25rem;--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1));outline:1px solid #F2F2F2}.floor-plan-thumbnail[_ngcontent-%COMP%]{border-radius:.25rem;aspect-ratio:16/9;position:relative;overflow:hidden;background:linear-gradient(to right,#F6F6F6 8%,#E2E2E2 18%,#F6F6F6 33%);background-size:1000px 100%;animation:skeleton-shimmer 1.4s linear infinite}.floor-plan-thumbnail[_ngcontent-%COMP%]   img[_ngcontent-%COMP%]{position:absolute;inset:0;height:100%;width:100%;border-radius:.25rem;object-fit:contain;opacity:0;transition:opacity .25s cubic-bezier(.33,1,.68,1)}.floor-plan-thumbnail.loaded[_ngcontent-%COMP%]{animation:none;background-image:none;--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.floor-plan-thumbnail.loaded[_ngcontent-%COMP%]   img[_ngcontent-%COMP%]{opacity:1}"],changeDetection:0}),o})();function _o(o,i){if(1&o){const t=e.\u0275\u0275getCurrentView();e.\u0275\u0275elementStart(0,"tn-floor-plan-grid",5),e.\u0275\u0275listener("selectionToggled",function(s){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext(2).toggleSelection(s)})("editClicked",function(s){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext(2).editClicked(s)})("deleteClicked",function(s){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext(2).deleteClicked(s)})("downloadClicked",function(s){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext(2).downloadClicked(s)}),e.\u0275\u0275elementEnd()}if(2&o){const t=e.\u0275\u0275nextContext().ngIf,n=e.\u0275\u0275nextContext();e.\u0275\u0275property("floorPlans",t.visibleFloorPlans)("selectedIds",t.selectedIds)("selectionDisabled",t.selectionDisabled)("downloadOptions",n.downloadOptions)}}function vo(o,i){if(1&o){const t=e.\u0275\u0275getCurrentView();e.\u0275\u0275elementContainerStart(0),e.\u0275\u0275elementStart(1,"tn-section-header",3),e.\u0275\u0275listener("uploadClicked",function(){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext().uploadClicked()})("rearrangeClicked",function(){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext().rearrangeFloorPlansClicked()})("expandToggled",function(){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext().toggleExpanded()}),e.\u0275\u0275elementEnd(),e.\u0275\u0275template(2,_o,1,4,"tn-floor-plan-grid",4),e.\u0275\u0275elementContainerEnd()}if(2&o){const t=i.ngIf;e.\u0275\u0275advance(1),e.\u0275\u0275property("count",t.floorPlans.length)("uploadingTotal",t.uploadingTotal)("uploadingDone",t.uploadingDone)("expanded",t.expanded)("uploading",t.uploading)("loading",t.loading)("showSpinner",t.loading)("showRearrange",!0)("reordering",t.reordering)("expandToggleDisabled",t.expandToggleDisabled),e.\u0275\u0275advance(1),e.\u0275\u0275property("ngIf",!t.loading&&t.visibleFloorPlans.length)}}let pe=class{constructor(i,t,n,s,d,g,c,r,a,l,p,u){this.route=i,this.editItemsDialogService=t,this.rearrangeMediaDialogService=n,this.deleteConfirmDialogService=s,this.confirmDialogService=d,this.toastStore=g,this.bulkSelection=c,this.uploadDialogService=r,this.floorPlansStore=a,this.expansionStore=l,this.testingActions=p,this.mediaPresence=u,this.sectionId=f.g8.FloorPlans,this.vm$=this.floorPlansStore.vm$,this.downloadOptions=[{quality:f.cM.Print,label:"Download"}],this.selectedCount$=this.floorPlansStore.selectedIds$.pipe((0,x.U)(m=>m.size)),this.hasSelection$=this.floorPlansStore.selectedIds$.pipe((0,x.U)(m=>m.size>0)),this.selectedFloorPlans$=(0,be.aj)([this.floorPlansStore.floorPlans$,this.floorPlansStore.selectedIds$]).pipe((0,x.U)(([m,h])=>m.filter(b=>h.has(b.id)))),this.orderId$=this.route.params.pipe((0,x.U)(m=>m.orderId),(0,v.h)(m=>"string"==typeof m)),this.floorPlansStore.load(this.orderId$),this.floorPlansStore.uploadedCount$.pipe((0,k.t)(this)).subscribe(m=>this.reportUploadedCount(m)),this.testingActions.purgeFloorPlans$.pipe((0,k.t)(this)).subscribe(()=>this.purgeFloorPlans()),this.floorPlansStore.notice$.pipe((0,v.h)(m=>null!==m),(0,k.t)(this)).subscribe(m=>{this.toastStore.show({message:this.noticeMessage(m),variant:xe[m.kind]}),this.floorPlansStore.clearNotice()})}toggleExpanded(){this.expansionStore.toggleExpanded(this.sectionId)}uploadClicked(){this.uploadDialogService.open(ro).pipe((0,v.h)(i=>!!(null==i?void 0:i.length)),(0,P.M)(this.orderId$)).subscribe(([i,t])=>this.startUpload(i,t))}startUpload(i,t){this.floorPlansStore.upload({orderId:t,items:i}),this.expansionStore.expand(this.sectionId)}purgeFloorPlans(){this.orderId$.pipe((0,T.q)(1)).subscribe(i=>this.confirmAndPurge(i))}confirmAndPurge(i){this.confirmDialogService.confirm(so).pipe((0,v.h)(Boolean)).subscribe(()=>this.floorPlansStore.purgeOrder(i))}rearrangeFloorPlansClicked(){this.floorPlansStore.floorPlans$.pipe((0,T.q)(1),(0,C.w)(i=>{const t=i.map(n=>{var s;return{id:n.id,displayName:n.displayName,imageUrl:null!==(s=n.thumbnailUrl)&&void 0!==s?s:"",uploadDate:new Date(n.createdAt)}});return this.rearrangeMediaDialogService.open({entitySingular:"Floor Plan",entityPlural:"Floor Plans",items:t,variant:"plan"})}),(0,v.h)(i=>!!i)).subscribe(i=>{this.floorPlansStore.reorder(i.map(t=>
1t.id))})}toggleSelection(i){this.bulkSelection.toggle({sectionId:this.sectionId,id:i}),this.toastStore.hide()}editClicked(i){this.openEditDialog([i]).pipe((0,v.h)(t=>!!t)).subscribe(t=>{this.floorPlansStore.edit(t)})}downloadClicked({floorPlan:i}){this.floorPlansStore.downloadFloorPlan(i.id),this.toastStore.show({message:"Your download has started.",variant:"success"})}deleteClicked({id:i,displayName:t}){this.deleteConfirmDialogService.confirm({entity:"Floor Plan",displayNames:[t]}).pipe((0,v.h)(Boolean)).subscribe(()=>{this.bulkSelection.deselect({id:i,sectionId:this.sectionId}),this.floorPlansStore.deleteFloorPlans([{id:i,displayName:t}])})}bulkClosed(){this.bulkSelection.clear(this.sectionId)}bulkDownload(i){this.floorPlansStore.downloadSelected(),this.bulkSelection.clear(this.sectionId),this.toastStore.show({message:"Your download has started.",variant:"success"})}bulkEdited(){this.selectedFloorPlans$.pipe((0,T.q)(1),(0,C.w)(i=>this.openEditDialog(i)),(0,v.h)(i=>!!i)).subscribe(i=>{this.bulkSelection.clear(this.sectionId),this.floorPlansStore.edit(i)})}bulkDeleted(){this.selectedFloorPlans$.pipe((0,T.q)(1),(0,C.w)(i=>this.deleteConfirmDialogService.confirm({entity:"Floor Plans",displayNames:i.map(t=>t.displayName)}).pipe((0,v.h)(Boolean),(0,x.U)(()=>i)))).subscribe(i=>{this.bulkSelection.clear(this.sectionId);const t=i.map(n=>({id:n.id,displayName:n.displayName}));this.floorPlansStore.deleteFloorPlans(t)})}openEditDialog(i){return this.editItemsDialogService.open({kind:"plan",items:i})}noticeMessage(i){switch(i.kind){case"reordered":return"Floor plans rearranged.";case"updated":return this.updatedMessage(i.count);case"deleted":return this.deletedMessage(i.displayNames);case"uploadFailed":return this.uploadFailedMessage(i.name)}}uploadFailedMessage(i){return`Couldn't upload "${(0,E.Ho)(i)}". Please try again.`}updatedMessage(i){return`Successfully updated ${this.floorPlanCountLabel(i)} settings!`}deletedMessage(i){return 1===i.length?`Successfully deleted the floor plan "${(0,E.Ho)(i[0])}"!`:`Successfully deleted ${this.floorPlanCountLabel(i.length)}!`}floorPlanCountLabel(i){return`${i} ${1===i?"floor plan":"floor plans"}`}reportUploadedCount(i){this.mediaPresence.setUploadedCount({sectionId:this.sectionId,count:i})}};pe.\u0275fac=function(i){return new(i||pe)(e.\u0275\u0275directiveInject(A.gz),e.\u0275\u0275directiveInject(J),e.\u0275\u0275directiveInject(Ce),e.\u0275\u0275directiveInject(q),e.\u0275\u0275directiveInject(U.DNF),e.\u0275\u0275directiveInject(V),e.\u0275\u0275directiveInject(F),e.\u0275\u0275directiveInject(X.CW),e.\u0275\u0275directiveInject(mt),e.\u0275\u0275directiveInject(j),e.\u0275\u0275directiveInject(Y),e.\u0275\u0275directiveInject(W))},pe.\u0275cmp=e.\u0275\u0275defineComponent({type:pe,selectors:[["tn-floor-plans-section"]],hostVars:1,hostBindings:function(i,t){2&i&&e.\u0275\u0275hostProperty("id",t.sectionId)},features:[e.\u0275\u0275ProvidersFeature([mt])],decls:6,vars:10,consts:[[4,"ngIf"],[3,"count","visible","closed","edited","deleted"],[3,"downloadOptions","downloadClicked"],["title","Floor Plans","addTooltip","Add Floor Plans","rearrangeTooltip","Rearrange Floor Plan Order",3,"count","uploadingTotal","uploadingDone","expanded","uploading","loading","showSpinner","showRearrange","reordering","expandToggleDisabled","uploadClicked","rearrangeClicked","expandToggled"],[3,"floorPlans","selectedIds","selectionDisabled","downloadOptions","selectionToggled","editClicked","deleteClicked","downloadClicked",4,"ngIf"],[3,"floorPlans","selectedIds","selectionDisabled","downloadOptions","selectionToggled","editClicked","deleteClicked","downloadClicked"]],template:function(i,t){if(1&i&&(e.\u0275\u0275template(0,vo,3,11,"ng-container",0),e.\u0275\u0275pipe(1,"async"),e.\u0275\u0275elementStart(2,"tn-native-upload-bulk-action-bar",1),e.\u0275\u0275listener("closed",function(){return t.bulkClosed()})("edited",function(){return t.bulkEdited()})("deleted",function(){return t.bulkDeleted()}),e.\u0275\u0275pipe(3,"async"),e.\u0275\u0275pipe(4,"async"),e.\u0275\u0275elementStart(5,"tn-native-upload-bulk-download-actions",2),e.\u0275\u0275listener("downloadClicked",function(s){return t.bulkDownload(s)}),e.\u0275\u0275elementEnd()()),2&i){let n,s;e.\u0275\u0275property("ngIf",e.\u0275\u0275pipeBind1(1,4,t.vm$)),e.\u0275\u0275advance(2),e.\u0275\u0275property("count",null!==(n=e.\u0275\u0275pipeBind1(3,6,t.selectedCount$))&&void 0!==n?n:0)("visible",null!==(s=e.\u0275\u0275pipeBind1(4,8,t.hasSelection$))&&void 0!==s&&s),e.\u0275\u0275advance(3),e.\u0275\u0275property("downloadOptions",t.downloadOptions)}},directives:[y.NgIf,le,ho,Oe,Qe],pipes:[y.AsyncPipe],encapsulation:2,changeDetection:0}),pe=(0,L.gn)([(0,k.c)(),(0,L.w6)("design:paramtypes",[A.gz,J,Ce,q,U.DNF,V,F,X.CW,mt,j,Y,W])],pe);const fo={title:"Drop 360\xb0 Photos",subtitle:"Or select files from your device \u2014 equirectangular JPEGs only (2:1)",allowedFileTypes:["jpeg","jpg"],filesKind:"image",uploadSources:[f.FO.Device],requireEquirectangular:!0},bo={title:"Purge ALL 360\xb0 photos (dev only)",message:["Permanently delete every 360\xb0 photo for this order from Firestore and GCS?"],okButtonText:"Yes, purge",cancelButtonText:"Cancel",width:"450px",destructive:!0},zt={[f.cM.Print]:D.w$1.Original,[f.cM.Web]:D.w$1.Medium},ht=(0,ye.H)(),{selectAll:Co}=ht.getSelectors(),xo=ht.getInitialState({orderId:"",hasLoaded:!1,loadError:null,uploadProgress:{},previews:{},sessionUploadIds:[],placeholders:{},batchIds:[],reordering:!1,savingIds:[],notice:null,dropboxImport:null});let _t=(()=>{class o extends S.m1{constructor(t,n,s,d,g){super(xo),this.panoramasService=t,this.coreRepository=n,this.bulkSelection=s,this.expansionStore=d,this.nativeDeliveryDownloadService=g,this.sectionId=f.g8.Panoramas,this.entities$=this.select(Co),this.uploadProgress$=this.select(c=>
1c.uploadProgress),this.sessionUploadIds$=this.select(c=>c.sessionUploadIds),this.previews$=this.select(c=>c.previews),this.placeholders$=this.select(c=>c.placeholders),this.batchIds$=this.select(c=>c.batchIds),this.savingIds$=this.select(c=>c.savingIds),this.hasLoaded$=this.select(c=>c.hasLoaded),this.loadError$=this.select(c=>c.loadError),this.loading$=this.select(this.hasLoaded$,this.loadError$,(c,r)=>!c&&!r),this.panoramas$=this.select(this.entities$,this.placeholders$,this.uploadProgress$,this.previews$,this.sessionUploadIds$,this.savingIds$,(c,r,a,l,p,u)=>{const m=new Set(u);return[...c,...Object.values(r)].filter(h=>at(h,p)).map(h=>lt(h,a,l,m))}),this.uploadedCount$=this.select(this.panoramas$,c=>c.filter(r=>r.isSuccess||r.isOptimizing).length),this.dropboxImport$=this.select(c=>c.dropboxImport),this.uploadBatch$=this.select(this.panoramas$,this.batchIds$,this.dropboxImport$,(c,r,a)=>{const l=new Set(r),p=c.filter(h=>l.has(h.id)&&(h.isPreSuccess||h.isSuccess));return nt({uploading:p.some(h=>h.isPreSuccess),total:p.length,done:p.filter(h=>h.isSuccess).length},Ye(a,Q.wq.Panoramas,()=>c.map(h=>({dropboxId:h.dropboxId,createdAt:h.createdAt,settled:h.isSuccess}))))}),this.selection$=this.select(this.bulkSelection.activeSectionId$,this.bulkSelection.selectedIds$,(c,r)=>we(this.sectionId,c,r)),this.selectedIds$=this.select(this.selection$,({selectedIds:c})=>c),this.orderId$=this.select(c=>c.orderId),this.reordering$=this.select(c=>c.reordering),this.notice$=this.select(c=>c.notice),this.vm$=this.select(this.panoramas$,this.uploadBatch$,this.loading$,this.selection$,this.expansionStore.expandedSectionIds$,this.reordering$,(c,r,a,l,p,u)=>{const{visibleItems:m,expanded:h,expandToggleDisabled:b}=Se(c,p,this.sectionId,o.COLLAPSED_PANORAMA_LIMIT);return{panoramas:c,visiblePanoramas:m,uploading:r.uploading,uploadingTotal:r.total,uploadingDone:r.done,loading:a,selectedIds:l.selectedIds,selectionDisabled:l.selectionDisabled,expanded:h,expandToggleDisabled:b,reordering:u}},{debounce:!0}),this.setOrderId=this.updater((c,r)=>Object.assign(Object.assign({},c),{orderId:r})),this.setReordering=this.updater((c,r)=>Object.assign(Object.assign({},c),{reordering:r})),this.setSavingIds=this.updater((c,r)=>Object.assign(Object.assign({},c),{savingIds:r})),this.setNotice=this.updater((c,r)=>Object.assign(Object.assign({},c),{notice:r})),this.clearNotice=this.updater(c=>Object.assign(Object.assign({},c),{notice:null})),this.setPanoramas=this.updater((c,r)=>{const a=Object.assign({},c.placeholders),l=Object.assign({},c.previews);return r.forEach(p=>{delete a[p.id],p.status===I.tT.Success&&l[p.id]&&(URL.revokeObjectURL(l[p.id].objectUrl),delete l[p.id])}),Object.assign(Object.assign({},ht.setAll(r,c)),{hasLoaded:!0,loadError:null,placeholders:a,previews:l})}),this.setLoadError=this.updater((c,r)=>Object.assign(Object.assign({},c),{hasLoaded:!0,loadError:r})),this.reportUploadProgress=this.effect(c=>c.pipe((0,E.kX)(200),(0,w.b)(r=>this.applyUploadProgress(r)))),this.applyUploadProgress=this.updater((c,r)=>Object.assign(Object.assign({},c),{uploadProgress:Ne(c.uploadProgress,r)})),this.setPreview=this.updater((c,{id:r,preview:a})=>Object.assign(Object.assign({},c),{previews:Object.assign(Object.assign({},c.previews),{[r]:a})})),this.markSessionUpload=this.updater((c,r)=>c.sessionUploadIds.includes(r)?c:Object.assign(Object.assign({},c),{sessionUploadIds:[...c.sessionUploadIds,r]})),this.addPlaceholder=this.updater((c,r)=>{const a=c.batchIds.some(l=>{var p;const u=null!==(p=c.placeholders[l])&&void 0!==p?p:c.entities[l];return null!=u&&this.isInProgress(u)});return Object.assign(Object.assign({},c),{placeholders:c.entities[r.id]?c.placeholders:Object.assign(Object.assign({},c.placeholders),{[r.id]:r}),batchIds:a?[...c.batchIds,r.id]:[r.id]})}),this.markPlaceholderFailed=this.updater((c,r)=>{const a=c.placeholders[r];return a?Object.assign(Object.assign({},c),{placeholders:Object.assign(Object.assign({},c.placeholders),{[r]:Object.assign(Object.assign({},a),{status:I.tT.Failed})})}):c}),this.load=this.effect(c=>c.pipe((0,H.x)(),(0,w.b)(r=>{this.setOrderId(r),this.watchDropboxImport(r)}),(0,C.w)(r=>this.coreRepository.panoramas.onSnapshotMany({where:{orderId:r},orderBy:[{sortIndex:"asc"},{createdAt:"asc"}]}).pipe((0,S._b)(a=>this.setPanoramas(a),a=>this.setLoadError(a)))))),this.watchDropboxImport=this.effect(c=>He(this.coreRepository,c).pipe((0,w.b)(r=>this.patchState({dropboxImport:r})))),this.upload=this.effect(c=>c.pipe((0,G.zg)(({orderId:r,items:a})=>(0,te.D)(a).pipe((0,G.zg)(l=>this.registerUpload(r,l)),(0,G.zg)(({id:l,item:p})=>this.streamFileBytes(r,l,p)))))),this.purgeOrder=this.effect(c=>c.pipe((0,C.w)(r=>this.panoramasService.purgeOrderPanoramas(r).pipe((0,R.K)(a=>(console.error("[PanoramasStateStore] purge failed",a),B.E)))))),this.downloadPanorama=this.effect(c=>c.pipe((0,P.M)(this.orderId$),(0,w.b)(([{id:r,quality:a},l])=>{this.nativeDeliveryDownloadService.download(l,"panoramas",[r],zt[a])}))),this.downloadSelected=this.effect(c=>c.pipe((0,P.M)(this.orderId$,this.selectedIds$),(0,w.b)(([r,a,l])=>{this.nativeDeliveryDownloadService.download(a,"panoramas",[...l],zt[r])}))),this.reorder=this.effect(c=>c.pipe((0,P.M)(this.orderId$),(0,C.w)(([r,a])=>(this.setReordering(!0),this.setSavingIds(r),this.panoramasService.reorder(a,r).pipe((0,S._b)(()=>{this.setNotice({kind:"reordered"})},l=>console.error("[PanoramasStateStore] reorder failed",l)),(0,O.x)(()=>{this.setReordering(!1),this.setSavingIds([])})))))),this.edit=this.effect(c=>c.pipe((0,P.M)(this.orderId$),(0,C.w)(([r,a])=>(this.setSavingIds(r.map(l=>l.id)),this.panoramasService.editPanoramas(a,r).pipe((0,S._b)(()=>{this.setNotice({kind:"updated",count:r.length})},l=>console.error("[PanoramasStateStore] edit failed",l)),(0,O.x)(()=>this.setSavingIds([]))))))),this.deletePanoramas=this.effect(c=>c.pipe((0,P.M)(this.orderId$),(0,C.w)(([r,a])=>(this.setSavingIds(r.map(l=>l.id)),this.panoramasService.deletePanoramas(a,r.map(l=>l.id)).pipe((0,S._b)(()=>{this.setNotice({kind:"deleted",displayNames:r.map(l=>l.displayName)})},l=>{console.error("[PanoramasStateStore] delete failed",l)}),(0,O.x)(()=>this.setSavingIds([])))))))}
1isInProgress(t){return t.status===I.tT.Loading||t.status===I.tT.Pending||t.status===I.tT.Optimization}buildPlaceholder(t,n,s){return{id:t,orderId:n,displayName:s,status:I.tT.Loading,userId:"",provider:I.ij.FirebaseStorage,createdAt:"",updatedAt:""}}logUploadError(t,n){console.error("[PanoramasStateStore] upload failed",t,n)}showUploadPlaceholder(t,n,s){this.addPlaceholder(this.buildPlaceholder(t,n,s.name)),this.markSessionUpload(t),s.previewUrl&&s.previewUrlRaw&&this.setPreview({id:t,preview:{safeUrl:s.previewUrl,objectUrl:s.previewUrlRaw}})}registerUpload(t,n){return this.panoramasService.create(t,n.name).pipe((0,w.b)(({id:s})=>this.showUploadPlaceholder(s,t,n)),(0,x.U)(({id:s})=>({id:s,item:n})),(0,R.K)(s=>(this.logUploadError(n.name,s),this.setNotice({kind:"uploadFailed",name:n.name}),B.E)))}streamFileBytes(t,n,s){return this.panoramasService.streamUpload(t,n,s.file,s.name).pipe((0,H.x)(),(0,w.b)(d=>this.reportUploadProgress({id:n,progress:d})),(0,Ue.Z)(),(0,C.w)(()=>this.panoramasService.completeUpload(n,t)),(0,O.x)(()=>this.reportUploadProgress({id:n,progress:null})),(0,R.K)(d=>(this.logUploadError(s.name,d),this.markPlaceholderFailed(n),B.E)))}ngOnDestroy(){Ve(this.get().previews),super.ngOnDestroy()}}return o.COLLAPSED_PANORAMA_LIMIT=2,o.\u0275fac=function(t){return new(t||o)(e.\u0275\u0275inject(se.s1),e.\u0275\u0275inject(Q.AO),e.\u0275\u0275inject(F),e.\u0275\u0275inject(j),e.\u0275\u0275inject(D.jub))},o.\u0275prov=e.\u0275\u0275defineInjectable({token:o,factory:o.\u0275fac}),o})();function yo(o,i){if(1&o){const t=e.\u0275\u0275getCurrentView();e.\u0275\u0275elementStart(0,"img",13),e.\u0275\u0275listener("load",function(){e.\u0275\u0275restoreView(t);const s=e.\u0275\u0275nextContext().$implicit;return e.\u0275\u0275nextContext().imageLoaded(s.id)})("error",function(){e.\u0275\u0275restoreView(t);const s=e.\u0275\u0275nextContext().$implicit;return e.\u0275\u0275nextContext().imageLoaded(s.id)}),e.\u0275\u0275elementEnd()}2&o&&e.\u0275\u0275property("src",i.ngIf,e.\u0275\u0275sanitizeUrl)}function So(o,i){1&o&&(e.\u0275\u0275elementStart(0,"span",14),e.\u0275\u0275element(1,"i",15),e.\u0275\u0275text(2," 360\xb0 "),e.\u0275\u0275elementEnd()),2&o&&(e.\u0275\u0275advance(1),e.\u0275\u0275property("size",16))}function wo(o,i){if(1&o&&e.\u0275\u0275element(0,"tn-media-upload-progress",16),2&o){const t=e.\u0275\u0275nextContext().$implicit;let n;e.\u0275\u0275property("optimizing",t.isOptimizing)("progress",null!==(n=t.progress)&&void 0!==n?n:0)}}function Io(o,i){if(1&o){const t=e.\u0275\u0275getCurrentView();e.\u0275\u0275elementStart(0,"tn-media-failed",17),e.\u0275\u0275listener("deleteClicked",function(){e.\u0275\u0275restoreView(t);const s=e.\u0275\u0275nextContext().$implicit;return e.\u0275\u0275nextContext().delete(s)}),e.\u0275\u0275elementEnd()}}function ko(o,i){1&o&&e.\u0275\u0275element(0,"tn-media-saving")}function Po(o,i){if(1&o){const t=e.\u0275\u0275getCurrentView();e.\u0275\u0275elementStart(0,"div",2)(1,"div",3)(2,"tn-media-item-selectable",4),e.\u0275\u0275listener("selectedChange",function(){const d=e.\u0275\u0275restoreView(t).$implicit;return e.\u0275\u0275nextContext().toggleSelection(d.id)}),e.\u0275\u0275elementStart(3,"tn-media-item-actions",5),e.\u0275\u0275listener("editClicked",function(){const d=e.\u0275\u0275restoreView(t).$implicit;return e.\u0275\u0275nextContext().edit(d)})("deleteClicked",function(){const d=e.\u0275\u0275restoreView(t).$implicit;return e.\u0275\u0275nextContext().delete(d)})("downloadClicked",function(s){const g=e.\u0275\u0275restoreView(t).$implicit;return e.\u0275\u0275nextContext().download(g,s)}),e.\u0275\u0275elementStart(4,"div",6),e.\u0275\u0275template(5,yo,1,1,"img",7),e.\u0275\u0275template(6,So,3,1,"span",8),e.\u0275\u0275template(7,wo,1,2,"tn-media-upload-progress",9),e.\u0275\u0275template(8,Io,1,0,"tn-media-failed",10),e.\u0275\u0275template(9,ko,1,0,"tn-media-saving",11),e.\u0275\u0275elementEnd()()()(),e.\u0275\u0275element(10,"tn-media-filename",12),e.\u0275\u0275elementEnd()}if(2&o){const t=i.$implicit,n=e.\u0275\u0275nextContext();e.\u0275\u0275classProp("is-skeleton",!n.isReady(t)&&!t.isFailed),e.\u0275\u0275advance(2),e.\u0275\u0275property("disabled",!n.isReady(t)||n.selectionDisabled||t.saving)("selected",n.isSelected(t.id)),e.\u0275\u0275advance(1),e.\u0275\u0275property("disabled",!n.isReady(t)||t.saving)("showEdit",!0)("showDownload",!0)("downloadOptions",n.downloadOptions),e.\u0275\u0275advance(1),e.\u0275\u0275classProp("loaded",n.isThumbnailSettled(t)),e.\u0275\u0275advance(1),e.\u0275\u0275property("ngIf",t.imageUrl),e.\u0275\u0275advance(1),e.\u0275\u0275property("ngIf",n.isReady(t)),e.\u0275\u0275advance(1),e.\u0275\u0275property("ngIf",t.isPreSuccess),e.\u0275\u0275advance(1),e.\u0275\u0275property("ngIf",t.isFailed),e.\u0275\u0275advance(1),e.\u0275\u0275property("ngIf",t.saving),e.\u0275\u0275advance(1),e.\u0275\u0275property("value",t.displayName)}}let To=(()=>{class o{constructor(){this.panoramas=[],this.selectionDisabled=!1,this.selectedIds=new Set,this.downloadOptions=f.XH,this.selectionToggled=new e.EventEmitter,this.editClicked=new e.EventEmitter,this.deleteClicked=new e.EventEmitter,this.downloadClicked=new e.EventEmitter,this.trackById=N.xnY,this.loadedIds=new Set}isReady(t){return t.isSuccess&&this.loadedIds.has(t.id)}isThumbnailSettled(t){return this.loadedIds.has(t.id)||t.isFailed}isSelected(t){return this.selectedIds.has(t)}imageLoaded(t){this.loadedIds.add(t)}toggleSelection(t){this.selectionToggled.emit(t)}
1edit(t){this.editClicked.emit(t)}delete(t){this.deleteClicked.emit(t)}download(t,n){this.downloadClicked.emit({panorama:t,quality:n})}}return o.\u0275fac=function(t){return new(t||o)},o.\u0275cmp=e.\u0275\u0275defineComponent({type:o,selectors:[["tn-panorama-grid"]],inputs:{panoramas:"panoramas",selectionDisabled:"selectionDisabled",selectedIds:"selectedIds",downloadOptions:"downloadOptions"},outputs:{selectionToggled:"selectionToggled",editClicked:"editClicked",deleteClicked:"deleteClicked",downloadClicked:"downloadClicked"},decls:2,vars:2,consts:[[1,"panorama-grid"],["class","panorama-card",3,"is-skeleton",4,"ngFor","ngForOf","ngForTrackBy"],[1,"panorama-card"],[1,"panorama-card-thumbnail"],[3,"disabled","selected","selectedChange"],[3,"disabled","showEdit","showDownload","downloadOptions","editClicked","deleteClicked","downloadClicked"],[1,"panorama-thumbnail"],["alt","360 photo thumbnail","loading","lazy","decoding","async",3,"src","load","error",4,"ngIf"],["class","panorama-badge",4,"ngIf"],[3,"optimizing","progress",4,"ngIf"],[3,"deleteClicked",4,"ngIf"],[4,"ngIf"],[3,"value"],["alt","360 photo thumbnail","loading","lazy","decoding","async",3,"src","load","error"],[1,"panorama-badge"],["uiIcon","360",3,"size"],[3,"optimizing","progress"],[3,"deleteClicked"]],template:function(t,n){1&t&&(e.\u0275\u0275elementStart(0,"div",0),e.\u0275\u0275template(1,Po,11,16,"div",1),e.\u0275\u0275elementEnd()),2&t&&(e.\u0275\u0275advance(1),e.\u0275\u0275property("ngForOf",n.panoramas)("ngForTrackBy",n.trackById))},directives:[y.NgForOf,Ie,ke.H,y.NgIf,Z.a,Be.g,Ae.a,Pe,Te.U],styles:["@keyframes skeleton-shimmer{0%{background-position:-400px 0}to{background-position:400px 0}}.panorama-grid[_ngcontent-%COMP%]{display:grid;grid-column-gap:1.25rem;column-gap:1.25rem;grid-row-gap:1rem;row-gap:1rem;grid-template-columns:repeat(auto-fill,minmax(320px,1fr))}.panorama-card[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.5rem}.panorama-card.is-skeleton[_ngcontent-%COMP%]{pointer-events:none}.panorama-card-thumbnail[_ngcontent-%COMP%]{border-radius:.25rem;--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1));outline:1px solid #F2F2F2}.panorama-thumbnail[_ngcontent-%COMP%]{border-radius:.25rem;aspect-ratio:16/9;position:relative;overflow:hidden;background:linear-gradient(to right,#F6F6F6 8%,#E2E2E2 18%,#F6F6F6 33%);background-size:1000px 100%;animation:skeleton-shimmer 1.4s linear infinite}.panorama-thumbnail[_ngcontent-%COMP%]   img[_ngcontent-%COMP%]{position:absolute;inset:0;height:100%;width:100%;object-fit:cover;object-position:center;opacity:0;transition:opacity .25s cubic-bezier(.33,1,.68,1)}.panorama-thumbnail.loaded[_ngcontent-%COMP%]{animation:none;background-image:none;--tw-bg-opacity: 1;background-color:rgb(0 0 0 / var(--tw-bg-opacity, 1))}.panorama-thumbnail.loaded[_ngcontent-%COMP%]   img[_ngcontent-%COMP%]{opacity:1}.panorama-badge[_ngcontent-%COMP%]{pointer-events:none;position:absolute;bottom:.5rem;left:.5rem;display:inline-flex;align-items:center;gap:.25rem;border-radius:9999px;padding:.25rem .625rem;font-size:.75rem;font-weight:600;line-height:1;--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1));background:rgba(0,0,0,.6)}"],changeDetection:0}),o})();function Oo(o,i){if(1&o){const t=e.\u0275\u0275getCurrentView();e.\u0275\u0275elementStart(0,"tn-panorama-grid",5),e.\u0275\u0275listener("selectionToggled",function(s){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext(2).toggleSelection(s)})("editClicked",function(s){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext(2).editClicked(s)})("deleteClicked",function(s){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext(2).deleteClicked(s)})("downloadClicked",function(s){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext(2).downloadClicked(s)}),e.\u0275\u0275elementEnd()}if(2&o){const t=e.\u0275\u0275nextContext().ngIf;e.\u0275\u0275property("panoramas",t.visiblePanoramas)("selectedIds",t.selectedIds)("selectionDisabled",t.selectionDisabled)}}function Do(o,i){if(1&o){const t=e.\u0275\u0275getCurrentView();e.\u0275\u0275elementContainerStart(0),e.\u0275\u0275elementStart(1,"tn-section-header",3),e.\u0275\u0275listener("uploadClicked",function(){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext().uploadClicked()})("rearrangeClicked",function(){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext().rearrangePanoramasClicked()})("expandToggled",function(){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext().toggleExpanded()}),e.\u0275\u0275elementEnd(),e.\u0275\u0275template(2,Oo,1,3,"tn-panorama-grid",4),e.\u0275\u0275elementContainerEnd()}if(2&o){const t=i.ngIf;e.\u0275\u0275advance(1),e.\u0275\u0275property("count",t.panoramas.length)("uploadingTotal",t.uploadingTotal)("uploadingDone",t.uploadingDone)("expanded",t.expanded)("uploading",t.uploading)("loading",t.loading)("showSpinner",t.loading)("showRearrange",!0)("reordering",t.reordering)("expandToggleDisabled",t.expandToggleDisabled),e.\u0275\u0275advance(1),e.\u0275\u0275property("ngIf",!t.loading&&t.visiblePanoramas.length)}}let ge=class{constructor(i,t,n,s,d,g,c,r,a,l,p,u){this.route=i,this.editItemsDialogService=t,this.rearrangeMediaDialogService=n,this.deleteConfirmDialogService=s,this.confirmDialogService=d,this.toastStore=g,this.bulkSelection=c,this.uploadDialogService=r,this.panoramasStore=a,this.expansionStore=l,this.testingActions=p,this.mediaPresence=u,this.sectionId=f.g8.Panoramas,this.vm$=this.panoramasStore.vm$,this.selectedCount$=this.panoramasStore.selectedIds$.pipe((0,x.U)(m=>m.size)),this.hasSelection$=this.panoramasStore.selectedIds$.pipe((0,x.U)(m=>m.size>0)),this.selectedPanoramas$=(0,be.aj)([this.panoramasStore.panoramas$,this.panoramasStore.selectedIds$]).pipe((0,x.U)(([m,h])=>m.filter(b=>h.has(b.id)))),this.orderId$=this.route.params.pipe((0,x.U)(m=>m.orderId),(0,v.h)(m=>"string"==typeof m)),this.panoramasStore.load(this.orderId$),this.panoramasStore.uploadedCount$.pipe((0,k.t)(this)).subscribe(m=>this.reportUploadedCount(m)),this.testingActions.purgePanoramas$.pipe((0,k.t)(this)).subscribe(()=>this.purgePanoramas()),this.panoramasStore.notice$.pipe((0,v.h)(m=>null!==m),(0,k.t)(this)).subscribe(m=>{this.toastStore.show({message:this.noticeMessage(m),variant:xe[m.kind]}),this.panoramasStore.clearNotice()})}toggleExpanded(){this.expansionStore.toggleExpanded(this.sectionId)}uploadClicked(){this.uploadDialogService.open(fo).pipe((0,v.h)(i=>!!(null==i?void 0:i.length)),(0,P.M)(this.orderId$)).subscribe(([i,t])=>this.startUpload(i,t))}startUpload(i,t){this.panoramasStore.upload({orderId:t,items:i}),this.expansionStore.expand(this.sectionId)}purgePanoramas(){this.orderId$.pipe((0,T.q)(1)).subscribe(i=>this.confirmAndPurge(i))}confirmAndPurge(i){this.confirmDialogService.confirm(bo).pipe((0,v.h)(Boolean)).subscribe(()=>this.panoramasStore.purgeOrder(i))}rearrangePanoramasClicked(){this.panoramasStore.panoramas$.pipe((0,T.q)(1),(0,C.w)(i=>{const t=i.map(n=>{var s;return{id:n.id,displayName:n.displayName,imageUrl:null!==(s=n.thumbnailUrl)&&void 0!==s?s:"",uploadDate:new Date(n.createdAt)}});return this.rearrangeMediaDialogService.open({entitySingular:"360\xb0 Photo",entityPlural:"360\xb0 Photos",items:t})}),(0,v.h)(i=>!!i)).subscribe(i=>{this.panoramasStore.reorder(i.map(t=>
1t.id))})}toggleSelection(i){this.bulkSelection.toggle({sectionId:this.sectionId,id:i}),this.toastStore.hide()}editClicked(i){this.openEditDialog([i]).pipe((0,v.h)(t=>!!t)).subscribe(t=>{this.panoramasStore.edit(t)})}downloadClicked({panorama:i,quality:t}){this.panoramasStore.downloadPanorama({id:i.id,quality:t}),this.toastStore.show({message:"Your download has started.",variant:"success"})}deleteClicked({id:i,displayName:t}){this.deleteConfirmDialogService.confirm({entity:"360\xb0 Photo",displayNames:[t]}).pipe((0,v.h)(Boolean)).subscribe(()=>{this.bulkSelection.deselect({id:i,sectionId:this.sectionId}),this.panoramasStore.deletePanoramas([{id:i,displayName:t}])})}bulkClosed(){this.bulkSelection.clear(this.sectionId)}bulkDownload(i){this.panoramasStore.downloadSelected(i),this.bulkSelection.clear(this.sectionId),this.toastStore.show({message:"Your download has started.",variant:"success"})}bulkEdited(){this.selectedPanoramas$.pipe((0,T.q)(1),(0,C.w)(i=>this.openEditDialog(i)),(0,v.h)(i=>!!i)).subscribe(i=>{this.bulkSelection.clear(this.sectionId),this.panoramasStore.edit(i)})}bulkDeleted(){this.selectedPanoramas$.pipe((0,T.q)(1),(0,C.w)(i=>this.deleteConfirmDialogService.confirm({entity:"360\xb0 Photos",displayNames:i.map(t=>t.displayName)}).pipe((0,v.h)(Boolean),(0,x.U)(()=>i)))).subscribe(i=>{this.bulkSelection.clear(this.sectionId);const t=i.map(n=>({id:n.id,displayName:n.displayName}));this.panoramasStore.deletePanoramas(t)})}openEditDialog(i){return this.editItemsDialogService.open({kind:"panorama",items:i})}noticeMessage(i){switch(i.kind){case"reordered":return"360\xb0 photos rearranged.";case"updated":return this.updatedMessage(i.count);case"deleted":return this.deletedMessage(i.displayNames);case"uploadFailed":return this.uploadFailedMessage(i.name)}}uploadFailedMessage(i){return`Couldn't upload "${(0,E.Ho)(i)}". Please try again.`}updatedMessage(i){return`Successfully updated ${this.panoramaCountLabel(i)} settings!`}deletedMessage(i){return 1===i.length?`Successfully deleted the 360\xb0 photo "${(0,E.Ho)(i[0])}"!`:`Successfully deleted ${this.panoramaCountLabel(i.length)}!`}panoramaCountLabel(i){return`${i} ${1===i?"360\xb0 photo":"360\xb0 photos"}`}reportUploadedCount(i){this.mediaPresence.setUploadedCount({sectionId:this.sectionId,count:i})}};ge.\u0275fac=function(i){return new(i||ge)(e.\u0275\u0275directiveInject(A.gz),e.\u0275\u0275directiveInject(J),e.\u0275\u0275directiveInject(Ce),e.\u0275\u0275directiveInject(q),e.\u0275\u0275directiveInject(U.DNF),e.\u0275\u0275directiveInject(V),e.\u0275\u0275directiveInject(F),e.\u0275\u0275directiveInject(X.CW),e.\u0275\u0275directiveInject(_t),e.\u0275\u0275directiveInject(j),e.\u0275\u0275directiveInject(Y),e.\u0275\u0275directiveInject(W))},ge.\u0275cmp=e.\u0275\u0275defineComponent({type:ge,selectors:[["tn-panoramas-section"]],hostVars:1,hostBindings:function(i,t){2&i&&e.\u0275\u0275hostProperty("id",t.sectionId)},features:[e.\u0275\u0275ProvidersFeature([_t])],decls:6,vars:9,consts:[[4,"ngIf"],[3,"count","visible","closed","edited","deleted"],[3,"downloadClicked"],["title","360\xb0 Photos","addTooltip","Add 360\xb0 Photos","rearrangeTooltip","Rearrange 360\xb0 Photo Order",3,"count","uploadingTotal","uploadingDone","expanded","uploading","loading","showSpinner","showRearrange","reordering","expandToggleDisabled","uploadClicked","rearrangeClicked","expandToggled"],[3,"panoramas","selectedIds","selectionDisabled","selectionToggled","editClicked","deleteClicked","downloadClicked",4,"ngIf"],[3,"panoramas","selectedIds","selectionDisabled","selectionToggled","editClicked","deleteClicked","downloadClicked"]],template:function(i,t){if(1&i&&(e.\u0275\u0275template(0,Do,3,11,"ng-container",0),e.\u0275\u0275pipe(1,"async"),e.\u0275\u0275elementStart(2,"tn-native-upload-bulk-action-bar",1),e.\u0275\u0275listener("closed",function(){return t.bulkClosed()})("edited",function(){return t.bulkEdited()})("deleted",function(){return t.bulkDeleted()}),e.\u0275\u0275pipe(3,"async"),e.\u0275\u0275pipe(4,"async"),e.\u0275\u0275elementStart(5,"tn-native-upload-bulk-download-actions",2),e.\u0275\u0275listener("downloadClicked",function(s){return t.bulkDownload(s)}),e.\u0275\u0275elementEnd()()),2&i){let n,s;e.\u0275\u0275property("ngIf",e.\u0275\u0275pipeBind1(1,3,t.vm$)),e.\u0275\u0275advance(2),e.\u0275\u0275property("count",null!==(n=e.\u0275\u0275pipeBind1(3,5,t.selectedCount$))&&void 0!==n?n:0)("visible",null!==(s=e.\u0275\u0275pipeBind1(4,7,t.hasSelection$))&&void 0!==s&&s)}},directives:[y.NgIf,le,To,Oe,Qe],pipes:[y.AsyncPipe],encapsulation:2,changeDetection:0}),ge=(0,L.gn)([(0,k.c)(),(0,L.w6)("design:paramtypes",[A.gz,J,Ce,q,U.DNF,V,F,X.CW,_t,j,Y,W])],ge);const $o={title:"Purge ALL 3D tours (dev only)",message:["Permanently delete every 3D tour for this order from Firestore?"],okButtonText:"Yes, purge",cancelButtonText:"Cancel",width:"450px",destructive:!0};var Eo=_(90864);const Le=(0,ye.H)(),{selectAll:Fo}=Le.getSelectors(),jo=Le.getInitialState({orderId:"",savingIds:[],loading:!1,notice:null,error:null});let vt=(()=>{class o extends S.m1{constructor(t,n,s,d){super(jo),this.toursService=t,this.bulkSelection=n,this.expansionStore=s,this.spwSyncOfferService=d,this.sectionId=f.g8.ThreeDContents,this.orderId$=this.select(g=>g.orderId),this.savingIds$=this.select(g=>g.savingIds),this.loading$=this.select(g=>g.loading),this.items$=this.select(Fo),this.notice$=this.select(g=>g.notice),this.error$=this.select(g=>g.error),this.uploadedCount$=this.select(this.items$,g=>g.filter(c=>!c.state).length),this.savingItems$=this.select(this.items$,this.savingIds$,(g,c)=>
1this.withSaving(g,c)),this.selection$=this.select(this.bulkSelection.activeSectionId$,this.bulkSelection.selectedIds$,(g,c)=>we(this.sectionId,g,c)),this.selectedIds$=this.select(this.selection$,({selectedIds:g})=>g),this.vm$=this.select(this.savingItems$,this.selection$,this.loading$,this.expansionStore.expandedSectionIds$,(g,c,r,a)=>{const{visibleItems:l,expanded:p,expandToggleDisabled:u}=Se(g,a,this.sectionId,o.COLLAPSED_LIMIT);return{items:g,visibleItems:l,selectedIds:c.selectedIds,selectionDisabled:c.selectionDisabled,expanded:p,expandToggleDisabled:u,loading:r}},{debounce:!0}),this.clearNotice=this.updater(g=>Object.assign(Object.assign({},g),{notice:null})),this.clearError=this.updater(g=>Object.assign(Object.assign({},g),{error:null})),this.setOrderId=this.updater((g,c)=>Object.assign(Object.assign({},g),{orderId:c})),this.setSavingIds=this.updater((g,c)=>Object.assign(Object.assign({},g),{savingIds:c})),this.setLoading=this.updater((g,c)=>Object.assign(Object.assign({},g),{loading:c})),this.removeItems=this.updater((g,c)=>Le.removeMany(c,g)),this.updateItems=this.updater((g,c)=>Le.updateMany(c,g)),this.setLoaded=this.updater((g,c)=>Le.setAll(c,g)),this.setNotice=this.updater((g,c)=>Object.assign(Object.assign({},g),{notice:c})),this.setError=this.updater((g,c)=>Object.assign(Object.assign({},g),{error:c})),this.load=this.effect(g=>g.pipe((0,w.b)(c=>this.setOrderId(c)),(0,C.w)(c=>this.fetchTours(c).pipe((0,S._b)(r=>this.setLoaded(r),r=>this.setError(r)))))),this.add=this.effect(g=>g.pipe((0,P.M)(this.orderId$),(0,C.w)(([c,r])=>(this.setLoading(!0),(0,te.D)(c).pipe((0,G.zg)(a=>this.toursService.create(r,a.url,a.displayName,a.displayType)),(0,Eo.q)(),(0,S._b)(()=>{this.setNotice({kind:"added",count:c.length}),this.load(r),this.spwSyncOfferService.notifyContentChanged()},a=>{this.setError(a),this.load(r)}),(0,O.x)(()=>this.setLoading(!1))))))),this.changeDisplayType=this.effect(g=>g.pipe((0,P.M)(this.orderId$),(0,ne.b)(([{id:c,displayName:r,displayType:a},l])=>(this.setSavingIds([c]),this.toursService.editTours(l,[{id:c,displayName:r,displayType:a}]).pipe((0,S._b)(()=>{this.updateItems([{id:c,changes:{displayType:a}}]),this.spwSyncOfferService.notifyContentChanged()},p=>this.setError(p)),(0,O.x)(()=>this.setSavingIds([]))))))),this.edit=this.effect(g=>g.pipe((0,P.M)(this.orderId$),(0,ne.b)(([c,r])=>{this.setSavingIds(c.map(l=>l.id));const a=this.toTourUpdates(c);return this.toursService.editTours(r,a).pipe((0,S._b)(()=>{this.setNotice({kind:"updated",count:c.length}),this.updateItems(a.map(l=>({id:l.id,changes:{displayName:l.displayName,displayType:l.displayType}}))),this.spwSyncOfferService.notifyContentChanged()},l=>this.setError(l)),(0,O.x)(()=>this.setSavingIds([])))}))),this.purgeOrder=this.effect(g=>g.pipe((0,P.M)(this.orderId$,this.items$),(0,C.w)(([,c,r])=>{const a=r.map(l=>l.id);return a.length?this.toursService.deleteTours(c,a).pipe((0,S._b)(()=>this.removeItems(a),l=>this.setError(l))):B.E}))),this.remove=this.effect(g=>g.pipe((0,P.M)(this.orderId$),(0,ne.b)(([c,r])=>{const a=c.map(l=>l.id);return this.setSavingIds(a),this.toursService.deleteTours(r,a).pipe((0,S._b)(()=>{const l=c.map(p=>p.displayName);this.setNotice({kind:"deleted",displayNames:l}),this.removeItems(a),this.spwSyncOfferService.notifyContentChanged()},l=>this.setError(l)),(0,O.x)(()=>this.setSavingIds([])))})))}toTourUpdates(t){return t.map(n=>{var s;return{id:n.id,displayName:n.displayName,displayType:null!==(s=n.displayType)&&void 0!==s?s:f.UY}})}withSaving(t,n){const s=new Set(n);return t.map(d=>Object.assign(Object.assign({},d),{saving:s.has(d.id)}))}fetchTours(t){return this.toursService.list(t).pipe((0,x.U)(n=>n.map(s=>({id:s.id,url:s.url,displayName:s.displayName,displayType:s.displayType}))))}}return o.COLLAPSED_LIMIT=2,o.\u0275fac=function(t){return new(t||o)(e.\u0275\u0275inject(se.Tg),e.\u0275\u0275inject(F),e.\u0275\u0275inject(j),e.\u0275\u0275inject(K.C5))},o.\u0275prov=e.\u0275\u0275defineInjectable({token:o,factory:o.\u0275fac}),o})();function Mo(o,i){if(1&o){const t=e.\u0275\u0275getCurrentView();e.\u0275\u0275elementStart(0,"tn-video-play-button",14),e.\u0275\u0275listener("toggled",function(){e.\u0275\u0275restoreView(t);const s=e.\u0275\u0275nextContext().$implicit;return e.\u0275\u0275nextContext().open(s)}),e.\u0275\u0275elementEnd()}}function Uo(o,i){if(1&o&&e.\u0275\u0275element(0,"tn-media-upload-progress",15),2&o){const t=e.\u0275\u0275nextContext().$implicit;let n;e.\u0275\u0275property("uploadState",t.state)("progress",null!==(n=t.progress)&&void 0!==n?n:0)}}function Vo(o,i){if(1&o){const t=e.\u0275\u0275getCurrentView();e.\u0275\u0275elementStart(0,"tn-media-failed",16),e.\u0275\u0275listener("deleteClicked",function(){e.\u0275\u0275restoreView(t);const s=e.\u0275\u0275nextContext().$implicit;
1return e.\u0275\u0275nextContext().deleteClicked.emit(s)}),e.\u0275\u0275elementEnd()}}function zo(o,i){1&o&&e.\u0275\u0275element(0,"tn-media-saving")}function No(o,i){if(1&o){const t=e.\u0275\u0275getCurrentView();e.\u0275\u0275elementStart(0,"div",2)(1,"tn-media-item-selectable",3),e.\u0275\u0275listener("selectedChange",function(){const d=e.\u0275\u0275restoreView(t).$implicit;return e.\u0275\u0275nextContext().toggleSelection(d.id)}),e.\u0275\u0275elementStart(2,"tn-media-item-actions",4),e.\u0275\u0275listener("copyClicked",function(){const d=e.\u0275\u0275restoreView(t).$implicit;return e.\u0275\u0275nextContext().copyClicked.emit(d)})("editClicked",function(){const d=e.\u0275\u0275restoreView(t).$implicit;return e.\u0275\u0275nextContext().editClicked.emit(d)})("deleteClicked",function(){const d=e.\u0275\u0275restoreView(t).$implicit;return e.\u0275\u0275nextContext().deleteClicked.emit(d)}),e.\u0275\u0275elementStart(3,"div",5),e.\u0275\u0275element(4,"tn-three-d-content-preview",6),e.\u0275\u0275template(5,Mo,1,0,"tn-video-play-button",7),e.\u0275\u0275template(6,Uo,1,2,"tn-media-upload-progress",8),e.\u0275\u0275template(7,Vo,1,0,"tn-media-failed",9),e.\u0275\u0275template(8,zo,1,0,"tn-media-saving",10),e.\u0275\u0275elementEnd()()(),e.\u0275\u0275elementStart(9,"div",11),e.\u0275\u0275element(10,"tn-media-filename",12),e.\u0275\u0275elementStart(11,"ui-select",13),e.\u0275\u0275listener("selectionChange",function(s){const g=e.\u0275\u0275restoreView(t).$implicit;return e.\u0275\u0275nextContext().displayTypeChange(g,s)}),e.\u0275\u0275elementEnd()()()}if(2&o){const t=i.$implicit,n=e.\u0275\u0275nextContext();e.\u0275\u0275advance(1),e.\u0275\u0275property("disabled",!!t.state||!!t.saving||n.selectionDisabled)("selected",n.isSelected(t.id)),e.\u0275\u0275advance(1),e.\u0275\u0275property("disabled",!!t.state||!!t.saving)("showCopy",!0)("showEdit",!0),e.\u0275\u0275advance(2),e.\u0275\u0275property("url",t.url),e.\u0275\u0275advance(1),e.\u0275\u0275property("ngIf",!t.state),e.\u0275\u0275advance(1),e.\u0275\u0275property("ngIf",t.state===n.UploadState.Processing),e.\u0275\u0275advance(1),e.\u0275\u0275property("ngIf",t.state===n.UploadState.Failed),e.\u0275\u0275advance(1),e.\u0275\u0275property("ngIf",t.saving),e.\u0275\u0275advance(2),e.\u0275\u0275property("value",t.displayName),e.\u0275\u0275advance(1),e.\u0275\u0275property("items",n.displayTypeOptions)("value",t.displayType)("disabled",t.state===n.UploadState.Failed||t.state===n.UploadState.Processing)}}let Bo=(()=>{class o{constructor(){this.contents=[],this.selectionDisabled=!1,this.selectedIds=new Set,this.copyClicked=new e.EventEmitter,this.editClicked=new e.EventEmitter,this.deleteClicked=new e.EventEmitter,this.displayTypeChanged=new e.EventEmitter,this.selectionToggled=new e.EventEmitter,this.contentOpened=new e.EventEmitter,this.trackById=N.xnY,this.displayTypeOptions=f.Y0,this.UploadState=f.KG}isSelected(t){return this.selectedIds.has(t)}toggleSelection(t){this.selectionToggled.emit(t)}displayTypeChange(t,n){this.displayTypeChanged.emit({content:t,displayType:n})}open(t){this.contentOpened.emit(t)}}return o.\u0275fac=function(t){return new(t||o)}
1,o.\u0275cmp=e.\u0275\u0275defineComponent({type:o,selectors:[["tn-three-d-contents-grid"]],inputs:{contents:"contents",selectionDisabled:"selectionDisabled",selectedIds:"selectedIds"},outputs:{copyClicked:"copyClicked",editClicked:"editClicked",deleteClicked:"deleteClicked",displayTypeChanged:"displayTypeChanged",selectionToggled:"selectionToggled",contentOpened:"contentOpened"},decls:2,vars:2,consts:[[1,"three-d-grid"],["class","three-d-grid-item",4,"ngFor","ngForOf","ngForTrackBy"],[1,"three-d-grid-item"],[3,"disabled","selected","selectedChange"],[3,"disabled","showCopy","showEdit","copyClicked","editClicked","deleteClicked"],[1,"three-d-grid-item-content"],[3,"url"],["matTooltip","Open tour","matTooltipPosition","above",3,"toggled",4,"ngIf"],[3,"uploadState","progress",4,"ngIf"],[3,"deleteClicked",4,"ngIf"],[4,"ngIf"],[1,"three-d-grid-item-footer"],[1,"three-d-grid-item-title",3,"value"],["size","medium","appearance","bordered",1,"three-d-grid-item-status",3,"items","value","disabled","selectionChange"],["matTooltip","Open tour","matTooltipPosition","above",3,"toggled"],[3,"uploadState","progress"],[3,"deleteClicked"]],template:function(t,n){1&t&&(e.\u0275\u0275elementStart(0,"div",0),e.\u0275\u0275template(1,No,12,14,"div",1),e.\u0275\u0275elementEnd()),2&t&&(e.\u0275\u0275advance(1),e.\u0275\u0275property("ngForOf",n.contents)("ngForTrackBy",n.trackById))},directives:[y.NgForOf,Ie,ke.H,ot.e,y.NgIf,it.w,Fe.gM,Be.g,Ae.a,Pe,Te.U,rt.H],styles:[".three-d-grid[_ngcontent-%COMP%]{display:grid;grid-column-gap:1.25rem;column-gap:1.25rem;grid-row-gap:1rem;row-gap:1rem;grid-template-columns:repeat(auto-fill,minmax(300px,1fr))}.three-d-grid-item[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.625rem}.three-d-grid-item-content[_ngcontent-%COMP%]{position:relative;border-radius:.25rem;aspect-ratio:16/9}.three-d-grid-item-footer[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:flex-start;gap:.75rem}@media (min-width: 1024px){.three-d-grid-item-footer[_ngcontent-%COMP%]{flex-direction:row;align-items:center}}.three-d-grid-item-title[_ngcontent-%COMP%]{min-width:0;flex:1 1 0%}.three-d-grid-item-status[_ngcontent-%COMP%]{width:15rem;max-width:100%;flex:none}"],changeDetection:0}),o})();function Ao(o,i){if(1&o){const t=e.\u0275\u0275getCurrentView();e.\u0275\u0275elementStart(0,"tn-three-d-contents-grid",5),e.\u0275\u0275listener("copyClicked",function(s){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext(2).copyClicked(s)})("editClicked",function(s){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext(2).editClicked(s)})("displayTypeChanged",function(s){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext(2).displayTypeChange(s)})("selectionToggled",function(s){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext(2).toggleSelection(s)})("deleteClicked",function(s){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext(2).deleteClicked(s)})("contentOpened",function(s){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext(2).openedContent(s)}),e.\u0275\u0275elementEnd()}if(2&o){const t=e.\u0275\u0275nextContext().ngIf;e.\u0275\u0275property("contents",t.visibleItems)("selectedIds",t.selectedIds)("selectionDisabled",t.selectionDisabled)}}function Lo(o,i){1&o&&(e.\u0275\u0275elementStart(0,"div",6),e.\u0275\u0275element(1,"div",7),e.\u0275\u0275elementEnd())}function Ro(o,i){if(1&o){const t=e.\u0275\u0275getCurrentView();e.\u0275\u0275elementContainerStart(0),e.\u0275\u0275elementStart(1,"tn-section-header",2),e.\u0275\u0275listener("uploadClicked",function(){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext().uploadClicked()})("expandToggled",function(){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext().toggleExpanded()}),e.\u0275\u0275elementEnd(),e.\u0275\u0275template(2,Ao,1,3,"tn-three-d-contents-grid",3),e.\u0275\u0275template(3,Lo,2,0,"div",4),e.\u0275\u0275elementContainerEnd()}if(2&o){const t=i.ngIf;e.\u0275\u0275advance(1),e.\u0275\u0275property("count",t.items.length)("expanded",t.expanded)("expandToggleDisabled",t.expandToggleDisabled),e.\u0275\u0275advance(1),e.\u0275\u0275property("ngIf",t.visibleItems.length),e.\u0275\u0275advance(1),e.\u0275\u0275property("ngIf",t.loading)}}let ue=class{constructor(i,t,n,s,d,g,c,r,a,l,p,u,m){this.route=i,this.uploadDialogService=t,this.expansionStore=n,this.bulkSelection=s,this.deleteConfirmDialogService=d,this.toastStore=g,this.store=c,this.mediaPreviewDialog=r,this.editItemsDialogService=a,this.clipboard=l,this.confirmDialogService=p,this.testingActions=u,this.mediaPresence=m,this.sectionId=f.g8.ThreeDContents,this.uploadConfig={title:"Embed 3D Tour",subtitle:"Add a link to your 3D tour",allowedFileTypes:[],filesKind:"tour",uploadSources:[f.FO.Link]},this.vm$=this.store.vm$,this.selectedCount$=this.store.selectedIds$.pipe((0,x.U)(h=>h.size)),this.hasSelection$=this.store.selectedIds$.pipe((0,x.U)(h=>h.size>0)),this.selectedContents$=(0,be.aj)([this.store.items$,this.store.selectedIds$]).pipe((0,x.U)(([h,b])=>h.filter(z=>b.has(z.id)))),this.orderId$=this.route.params.pipe((0,x.U)(h=>h.orderId),(0,v.h)(h=>"string"==typeof h)),this.store.load(this.orderId$),this.store.uploadedCount$.pipe((0,k.t)(this)).subscribe(h=>this.reportUploadedCount(h)),this.testingActions.purgeThreeDContents$.pipe((0,k.t)(this)).subscribe(()=>this.purgeThreeDContents()),this.store.notice$.pipe((0,v.h)(h=>null!==h),(0,k.t)(this)).subscribe(h=>this.handleNotice(h)),this.store.error$.pipe((0,v.h)(Boolean),(0,k.t)(this)).subscribe(()=>this.handleError())}toggleExpanded(){this.expansionStore.toggleExpanded(this.sectionId)}purgeThreeDContents(){this.confirmDialogService.confirm($o).pipe((0,v.h)(Boolean)).subscribe(()=>this.store.purgeOrder())}uploadClicked(){this.uploadDialogService.open(this.uploadConfig).pipe((0,v.h)(i=>!!(null==i?void 0:i.length))).subscribe(i=>this.embedTours(i))}embedTours(i){this.store.add(i),this.expansionStore.expand(this.sectionId)}toggleSelection(i){this.bulkSelection.toggle({sectionId:this.sectionId,id:i})}displayTypeChange({content:i,displayType:t}){this.store.changeDisplayType({id:i.id,displayName:i.displayName,displayType:t})}copyClicked(i){this.clipboard.copy(i.url),this.toastStore.show({message:"Successfully copied the 3D tour link to your clipboard!",variant:"success"})}editClicked(i){this.openEditDialog([i]).pipe((0,v.h)(t=>!!t)).subscribe(t=>this.store.edit(t))}deleteClicked({id:i,displayName:t}
1){this.deleteConfirmDialogService.confirm({entity:"3D Tour",displayNames:[t]}).pipe((0,v.h)(Boolean)).subscribe(()=>{this.bulkSelection.deselect({id:i,sectionId:this.sectionId}),this.store.remove([{id:i,displayName:t}])})}openedContent(i){this.mediaPreviewDialog.openTour({url:i.url,title:i.displayName})}bulkClosed(){this.bulkSelection.clear(this.sectionId)}bulkEdited(){this.selectedContents$.pipe((0,T.q)(1),(0,C.w)(i=>this.openEditDialog(i)),(0,v.h)(i=>!!i)).subscribe(i=>{this.bulkSelection.clear(this.sectionId),this.store.edit(i)})}bulkDeleted(){this.selectedContents$.pipe((0,T.q)(1),(0,C.w)(i=>this.deleteConfirmDialogService.confirm({entity:"3D Tours",displayNames:i.map(t=>t.displayName)}).pipe((0,v.h)(Boolean),(0,x.U)(()=>i)))).subscribe(i=>{this.bulkSelection.clear(this.sectionId),this.store.remove(i)})}openEditDialog(i){return this.editItemsDialogService.open({kind:"tour",items:i})}handleNotice(i){this.toastStore.show({message:this.noticeMessage(i),variant:xe[i.kind]}),this.store.clearNotice()}handleError(){this.toastStore.show({message:"Something went wrong. Please try again.",variant:"error"}),this.store.clearError()}noticeMessage(i){switch(i.kind){case"added":return`Successfully embedded ${this.contentNoun(i.count)}!`;case"updated":return`Successfully updated ${this.contentNoun(i.count)} settings!`;case"deleted":return 1===i.displayNames.length?`Successfully deleted the 3D tour "${i.displayNames[0]}"!`:`Successfully deleted ${i.displayNames.length} 3D tours!`}}contentNoun(i){return 1===i?"3D tour":"3D tours"}reportUploadedCount(i){this.mediaPresence.setUploadedCount({sectionId:this.sectionId,count:i})}};ue.\u0275fac=function(i){return new(i||ue)(e.\u0275\u0275directiveInject(A.gz),e.\u0275\u0275directiveInject(X.CW),e.\u0275\u0275directiveInject(j),e.\u0275\u0275directiveInject(F),e.\u0275\u0275directiveInject(q),e.\u0275\u0275directiveInject(V),e.\u0275\u0275directiveInject(vt),e.\u0275\u0275directiveInject(Ze),e.\u0275\u0275directiveInject(J),e.\u0275\u0275directiveInject(De.TU),e.\u0275\u0275directiveInject(U.DNF),e.\u0275\u0275directiveInject(Y),e.\u0275\u0275directiveInject(W))},ue.\u0275cmp=e.\u0275\u0275defineComponent({type:ue,selectors:[["tn-three-d-contents-section"]],hostVars:1,hostBindings:function(i,t){2&i&&e.\u0275\u0275hostProperty("id",t.sectionId)},features:[e.\u0275\u0275ProvidersFeature([vt])],decls:5,vars:9,consts:[[4,"ngIf"],[3,"count","visible","closed","edited","deleted"],["title","3D Tours","addTooltip","Add 3D Tours",3,"count","expanded","expandToggleDisabled","uploadClicked","expandToggled"],[3,"contents","selectedIds","selectionDisabled","copyClicked","editClicked","displayTypeChanged","selectionToggled","deleteClicked","contentOpened",4,"ngIf"],["class","loading-overlay",4,"ngIf"],[3,"contents","selectedIds","selectionDisabled","copyClicked","editClicked","displayTypeChanged","selectionToggled","deleteClicked","contentOpened"],[1,"loading-overlay"],[1,"loading-spinner"]],template:function(i,t){if(1&i&&(e.\u0275\u0275template(0,Ro,4,5,"ng-container",0),e.\u0275\u0275pipe(1,"async"),e.\u0275\u0275elementStart(2,"tn-native-upload-bulk-action-bar",1),e.\u0275\u0275listener("closed",function(){return t.bulkClosed()})("edited",function(){return t.bulkEdited()})("deleted",function(){return t.bulkDeleted()}),e.\u0275\u0275pipe(3,"async"),e.\u0275\u0275pipe(4,"async"),e.\u0275\u0275elementEnd()),2&i){let n,s;e.\u0275\u0275property("ngIf",e.\u0275\u0275pipeBind1(1,3,t.vm$)),e.\u0275\u0275advance(2),e.\u0275\u0275property("count",null!==(n=e.\u0275\u0275pipeBind1(3,5,t.selectedCount$))&&void 0!==n?n:0)("visible",null!==(s=e.\u0275\u0275pipeBind1(4,7,t.hasSelection$))&&void 0!==s&&s)}},directives:[y.NgIf,le,Bo,Oe],pipes:[y.AsyncPipe],styles:[".loading-overlay[_ngcontent-%COMP%]{position:fixed;inset:0;display:flex;align-items:center;justify-content:center;z-index:1000;background:rgba(0,0,0,.4)}.loading-spinner[_ngcontent-%COMP%]{width:40px;height:40px;border:4px solid rgba(246,246,246,.35);border-top-color:#f6f6f6;border-radius:50%;animation:loading-spin .8s linear infinite}@keyframes loading-spin{to{transform:rotate(360deg)}}"],changeDetection:0}),ue=(0,L.gn)([(0,k.c)(),(0,L.w6)("design:paramtypes",[A.gz,X.CW,j,F,q,V,vt,Ze,J,De.TU,U.DNF,Y,W])],ue);const Wo={title:"Drop Files",subtitle:"Or select files from your device",allowedFileTypes:[...ve.Gp],filesKind:"pdf",uploadSources:[f.FO.Device]},Go={title:"Purge ALL files (dev only)",message:["Permanently delete every file for this order from Firestore and GCS?"],okButtonText:"Yes, purge",cancelButtonText:"Cancel",panelClass:"confirm-dialog-destructive",width:"450px"},ft=(0,ye.H)(),{selectAll:Yo}=ft.getSelectors(),Ko=ft.getInitialState({orderId:"",hasLoaded:!1,loadError:null,uploadProgress:{},sessionUploadIds:[],placeholders:{},savingIds:[],notice:null});let bt=(()=>{class o extends S.m1{constructor(t,n,s,d,g,c){super(Ko),this.filesService=t,this.coreRepository=n,this.bulkSelection=s,this.expansionStore=d,this.nativeDeliveryDownloadService=g,this.spwSyncOfferService=c,this.sectionId=f.g8.Files,this.entities$=this.select(Yo),this.placeholders$=this.select(r=>r.placeholders),this.uploadProgress$=this.select(r=>r.uploadProgress),this.sessionUploadIds$=this.select(r=>r.sessionUploadIds),this.savingIds$=this.select(r=>r.savingIds),this.hasLoaded$=this.select(r=>r.hasLoaded),this.loadError$=this.select(r=>r.loadError),this.orderId$=this.select(r=>r.orderId),this.loading$=this.select(this.hasLoaded$,this.loadError$,(r,a)=>!r&&!a),this.files$=this.select(this.entities$,this.placeholders$,this.uploadProgress$,this.sessionUploadIds$,this.savingIds$,(r,a,l,p,u)=>{const m=new Set(u);return[...r,...Object.values(a)].filter(h=>st(h,p)).map(h=>function Ho(o,i,t){var n;return Object.assign(Object.assign({}
1,o),{progress:o.status===I.KF.Loading&&null!==(n=i[o.id])&&void 0!==n?n:null,isUploading:o.status===I.KF.Loading,isSuccess:o.status===I.KF.Success,isFailed:o.status===I.KF.Failed,saving:t.has(o.id)})}(h,l,m))}),this.uploadedCount$=this.select(this.files$,r=>r.filter(a=>a.isSuccess).length),this.uploading$=this.select(this.files$,r=>r.some(a=>a.isUploading)),this.selection$=this.select(this.bulkSelection.activeSectionId$,this.bulkSelection.selectedIds$,(r,a)=>we(this.sectionId,r,a)),this.selectedIds$=this.select(this.selection$,({selectedIds:r})=>r),this.notice$=this.select(r=>r.notice),this.vm$=this.select(this.files$,this.uploading$,this.uploadedCount$,this.loading$,this.selection$,this.expansionStore.expandedSectionIds$,(r,a,l,p,u,m)=>{const{visibleItems:h,expanded:b,expandToggleDisabled:z}=Se(r,m,this.sectionId,o.COLLAPSED_FILE_LIMIT);return{files:r,visibleFiles:h,uploading:a,uploadedCount:l,loading:p,selectedIds:u.selectedIds,selectionDisabled:u.selectionDisabled,expanded:b,expandToggleDisabled:z}},{debounce:!0}),this.setOrderId=this.updater((r,a)=>Object.assign(Object.assign({},r),{orderId:a})),this.setSavingIds=this.updater((r,a)=>Object.assign(Object.assign({},r),{savingIds:a})),this.setNotice=this.updater((r,a)=>Object.assign(Object.assign({},r),{notice:a})),this.clearNotice=this.updater(r=>Object.assign(Object.assign({},r),{notice:null})),this.setFiles=this.updater((r,a)=>{const l=Object.assign({},r.placeholders);return a.forEach(p=>delete l[p.id]),Object.assign(Object.assign({},ft.setAll(a,r)),{hasLoaded:!0,loadError:null,placeholders:l})}),this.setLoadError=this.updater((r,a)=>Object.assign(Object.assign({},r),{hasLoaded:!0,loadError:a})),this.reportUploadProgress=this.effect(r=>r.pipe((0,E.kX)(200),(0,w.b)(a=>this.applyUploadProgress(a)))),this.applyUploadProgress=this.updater((r,a)=>Object.assign(Object.assign({},r),{uploadProgress:Ne(r.uploadProgress,a)})),this.markSessionUpload=this.updater((r,a)=>r.sessionUploadIds.includes(a)?r:Object.assign(Object.assign({},r),{sessionUploadIds:[...r.sessionUploadIds,a]})),this.addPlaceholder=this.updater((r,a)=>Object.assign(Object.assign({},r),{placeholders:r.entities[a.id]?r.placeholders:Object.assign(Object.assign({},r.placeholders),{[a.id]:a})})),this.markPlaceholderFailed=this.updater((r,a)=>{const l=r.placeholders[a];return l?Object.assign(Object.assign({},r),{placeholders:Object.assign(Object.assign({},r.placeholders),{[a]:Object.assign(Object.assign({},l),{status:I.KF.Failed})})}):r}),this.load=this.effect(r=>r.pipe((0,H.x)(),(0,w.b)(a=>this.setOrderId(a)),(0,C.w)(a=>this.coreRepository.files.onSnapshotMany({where:{orderId:a},orderBy:[{createdAt:"asc"}]}).pipe((0,S._b)(l=>this.setFiles(l),l=>{console.error("[FilesStateStore] load failed",l),this.setLoadError(l)}))))),this.notifySpwWhenUploadsSettle=this.effect(()=>Ke(this.orderId$,this.uploading$).pipe((0,w.b)(()=>this.spwSyncOfferService.notifyContentChanged()))),this.upload=this.effect(r=>r.pipe((0,G.zg)(({orderId:a,items:l})=>(0,te.D)(l).pipe((0,G.zg)(p=>this.registerUpload(a,p)),(0,G.zg)(({id:p,storageKey:u,item:m})=>this.streamFileBytes(a,p,u,m),o.UPLOAD_CONCURRENCY))))),this.edit=this.effect(r=>r.pipe((0,P.M)(this.orderId$),(0,C.w)(([a,l])=>(this.setSavingIds(a.map(p=>p.id)),this.filesService.editFiles(l,a).pipe((0,S._b)(()=>{this.setNotice({kind:"updated",count:a.length}),this.spwSyncOfferService.notifyContentChanged()},p=>console.error("[FilesStateStore] edit failed",p)),(0,O.x)(()=>this.setSavingIds([]))))))),this.deleteFiles=this.effect(r=>r.pipe((0,P.M)(this.orderId$),(0,C.w)(([a,l])=>(this.setSavingIds(a.map(p=>p.id)),this.filesService.deleteFiles(l,a.map(p=>p.id)).pipe((0,S._b)(()=>{this.setNotice({kind:"deleted",displayNames:a.map(p=>p.displayName)}),this.spwSyncOfferService.notifyContentChanged()},p=>console.error("[FilesStateStore] delete failed",p)),(0,O.x)(()=>this.setSavingIds([]))))))),this.downloadFile=this.effect(r=>r.pipe((0,P.M)(this.orderId$),(0,w.b)(([a,l])=>{this.nativeDeliveryDownloadService.download(l,"files",[a],D.w$1.Original)}))),this.downloadSelected=this.effect(r=>r.pipe((0,P.M)(this.orderId$,this.selectedIds$),(0,w.b)(([,a,l])=>{this.nativeDeliveryDownloadService.download(a,"files",[...l],D.w$1.Original)}))),this.purgeOrder=this.effect(r=>r.pipe((0,C.w)(a=>this.filesService.purgeOrderFiles(a).pipe((0,R.K)(l=>(console.error("[FilesStateStore] purge failed",l),B.E))))))}buildPlaceholder(t,n,s,d){return{id:t,orderId:n,displayName:d,status:I.KF.Lo
1ading,displayType:f.UY,userId:"",provider:I.ij.FirebaseStorage,storageKey:s,sizeBytes:0,createdAt:"",updatedAt:""}}logUploadError(t,n){console.error("[FilesStateStore] upload failed",t,n)}registerUpload(t,n){return this.filesService.create(t,n.name).pipe((0,w.b)(({id:s,storageKey:d})=>{this.addPlaceholder(this.buildPlaceholder(s,t,d,n.name)),this.markSessionUpload(s)}),(0,x.U)(({id:s,storageKey:d})=>({id:s,storageKey:d,item:n})),(0,R.K)(s=>(this.logUploadError(n.name,s),this.setNotice({kind:"uploadFailed",name:n.name}),B.E)))}streamFileBytes(t,n,s,d){return this.filesService.streamUpload(s,d.file,d.name).pipe((0,H.x)(),(0,w.b)(g=>this.reportUploadProgress({id:n,progress:g})),(0,Ue.Z)(),(0,C.w)(()=>this.filesService.completeUpload(n,t)),(0,O.x)(()=>this.reportUploadProgress({id:n,progress:null})),(0,R.K)(g=>(this.logUploadError(d.name,g),this.markPlaceholderFailed(n),B.E)))}}return o.COLLAPSED_FILE_LIMIT=4,o.UPLOAD_CONCURRENCY=4,o.\u0275fac=function(t){return new(t||o)(e.\u0275\u0275inject(se.nS),e.\u0275\u0275inject(Q.AO),e.\u0275\u0275inject(F),e.\u0275\u0275inject(j),e.\u0275\u0275inject(D.jub),e.\u0275\u0275inject(K.C5))},o.\u0275prov=e.\u0275\u0275defineInjectable({token:o,factory:o.\u0275fac}),o})();var Qo=_(85348);function Zo(o,i){1&o&&e.\u0275\u0275element(0,"tn-media-saving")}function Xo(o,i){if(1&o){const t=e.\u0275\u0275getCurrentView();e.\u0275\u0275elementStart(0,"div",2)(1,"div",3)(2,"tn-media-item-selectable",4),e.\u0275\u0275listener("selectedChange",function(){const d=e.\u0275\u0275restoreView(t).$implicit;return e.\u0275\u0275nextContext().toggleSelection(d.id)}),e.\u0275\u0275elementStart(3,"tn-media-item-actions",5),e.\u0275\u0275listener("editClicked",function(){const d=e.\u0275\u0275restoreView(t).$implicit;return e.\u0275\u0275nextContext().edit(d)})("copyClicked",function(){const d=e.\u0275\u0275restoreView(t).$implicit;return e.\u0275\u0275nextContext().copy(d)})("deleteClicked",function(){const d=e.\u0275\u0275restoreView(t).$implicit;return e.\u0275\u0275nextContext().delete(d)})("downloadClicked",function(){const d=e.\u0275\u0275restoreView(t).$implicit;return e.\u0275\u0275nextContext().download(d)}),e.\u0275\u0275elementStart(4,"tn-file-thumbnail",6),e.\u0275\u0275listener("failedDelete",function(){const d=e.\u0275\u0275restoreView(t).$implicit;return e.\u0275\u0275nextContext().delete(d)}),e.\u0275\u0275elementEnd(),e.\u0275\u0275template(5,Zo,1,0,"tn-media-saving",7),e.\u0275\u0275elementEnd()()(),e.\u0275\u0275element(6,"tn-media-filename",8),e.\u0275\u0275elementEnd()}if(2&o){const t=i.$implicit,n=e.\u0275\u0275nextContext();e.\u0275\u0275advance(2),e.\u0275\u0275property("disabled",!n.isReady(t)||n.selectionDisabled)("selected",n.isSelected(t.id)),e.\u0275\u0275advance(1),e.\u0275\u0275property("disabled",!n.isReady(t))("showCopy",!0)("showEdit",!0)("showDownload",!0),e.\u0275\u0275advance(1),e.\u0275\u0275property("uploading",t.isUploading)("failed",t.isFailed)("progress",t.progress),e.\u0275\u0275advance(1),e.\u0275\u0275property("ngIf",t.saving),e.\u0275\u0275advance(1),e.\u0275\u0275property("value",t.displayName)}}let Jo=(()=>{class o{constructor(){this.files=[],this.selectionDisabled=!1,this.selectedIds=new Set,this.selectionToggled=new e.EventEmitter,this.editClicked=new e.EventEmitter,this.copyClicked=new e.EventEmitter,this.deleteClicked=new e.EventEmitter,this.downloadClicked=new e.EventEmitter,this.trackById=N.xnY}isSelected(t){return this.selectedIds.has(t)}isReady(t){return t.isSuccess&&!t.saving}toggleSelection(t){this.selectionToggled.emit(t)}edit(t){this.editClicked.emit(t)}copy(t){this.copyClicked.emit(t)}delete(t){this.deleteClicked.emit(t)}download(t){this.downloadClicked.emit(t)}}return o.\u0275fac=function(t){return new(t||o)}
1,o.\u0275cmp=e.\u0275\u0275defineComponent({type:o,selectors:[["tn-file-grid"]],inputs:{files:"files",selectionDisabled:"selectionDisabled",selectedIds:"selectedIds"},outputs:{selectionToggled:"selectionToggled",editClicked:"editClicked",copyClicked:"copyClicked",deleteClicked:"deleteClicked",downloadClicked:"downloadClicked"},decls:2,vars:2,consts:[[1,"file-grid"],["class","file-card",4,"ngFor","ngForOf","ngForTrackBy"],[1,"file-card"],[1,"file-card-frame"],[3,"disabled","selected","selectedChange"],[3,"disabled","showCopy","showEdit","showDownload","editClicked","copyClicked","deleteClicked","downloadClicked"],[3,"uploading","failed","progress","failedDelete"],[4,"ngIf"],[3,"value"]],template:function(t,n){1&t&&(e.\u0275\u0275elementStart(0,"div",0),e.\u0275\u0275template(1,Xo,7,11,"div",1),e.\u0275\u0275elementEnd()),2&t&&(e.\u0275\u0275advance(1),e.\u0275\u0275property("ngForOf",n.files)("ngForTrackBy",n.trackById))},directives:[y.NgForOf,Ie,ke.H,Qo.x,y.NgIf,Pe,Te.U],styles:[".file-grid[_ngcontent-%COMP%]{display:grid;grid-gap:1rem;gap:1rem;grid-template-columns:repeat(auto-fill,minmax(200px,1fr))}.file-card[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.5rem}.file-card-frame[_ngcontent-%COMP%]{border-radius:.25rem;outline:1px solid #E2E2E2}"],changeDetection:0}),o})();function qo(o,i){if(1&o){const t=e.\u0275\u0275getCurrentView();e.\u0275\u0275elementStart(0,"tn-file-grid",5),e.\u0275\u0275listener("selectionToggled",function(s){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext(2).toggleSelection(s)})("editClicked",function(s){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext(2).editClicked(s)})("copyClicked",function(s){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext(2).copyClicked(s)})("deleteClicked",function(s){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext(2).deleteClicked(s)})("downloadClicked",function(s){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext(2).downloadClicked(s)}),e.\u0275\u0275elementEnd()}if(2&o){const t=e.\u0275\u0275nextContext().ngIf;e.\u0275\u0275property("files",t.visibleFiles)("selectedIds",t.selectedIds)("selectionDisabled",t.selectionDisabled)}}function er(o,i){if(1&o){const t=e.\u0275\u0275getCurrentView();e.\u0275\u0275elementContainerStart(0),e.\u0275\u0275elementStart(1,"tn-section-header",3),e.\u0275\u0275listener("uploadClicked",function(){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext().uploadClicked()})("expandToggled",function(){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext().toggleExpanded()}),e.\u0275\u0275elementEnd(),e.\u0275\u0275template(2,qo,1,3,"tn-file-grid",4),e.\u0275\u0275elementContainerEnd()}if(2&o){const t=i.ngIf;e.\u0275\u0275advance(1),e.\u0275\u0275property("count",t.files.length)("uploadedCount",t.uploadedCount)("expanded",t.expanded)("uploading",t.uploading)("loading",t.loading)("showSpinner",t.loading)("expandToggleDisabled",t.expandToggleDisabled),e.\u0275\u0275advance(1),e.\u0275\u0275property("ngIf",!t.loading&&t.visibleFiles.length)}}let me=class{constructor(i,t,n,s,d,g,c,r,a,l,p,u){this.route=i,this.clipboard=t,this.editItemsDialogService=n,this.confirmDialogService=s,this.deleteConfirmDialogService=d,this.toastStore=g,this.bulkSelection=c,this.uploadDialogService=r,this.filesStore=a,this.expansionStore=l,this.testingActions=p,this.mediaPresence=u,this.sectionId=f.g8.Files,this.vm$=this.filesStore.vm$,this.selectedCount$=this.filesStore.selectedIds$.pipe((0,x.U)(m=>m.size)),this.hasSelection$=this.filesStore.selectedIds$.pipe((0,x.U)(m=>m.size>0)),this.selectedFiles$=(0,be.aj)([this.filesStore.files$,this.filesStore.selectedIds$]).pipe((0,x.U)(([m,h])=>m.filter(b=>h.has(b.id)))),this.orderId$=this.route.params.pipe((0,x.U)(m=>m.orderId),(0,v.h)(m=>"string"==typeof m)),this.filesStore.load(this.orderId$),this.filesStore.uploadedCount$.pipe((0,k.t)(this)).subscribe(m=>this.reportUploadedCount(m)),this.testingActions.purgeFiles$.pipe((0,k.t)(this)).subscribe(()=>this.purgeFiles()),this.filesStore.notice$.pipe((0,v.h)(m=>null!==m),(0,k.t)(this)).subscribe(m=>{this.toastStore.show({message:this.noticeMessage(m),variant:xe[m.kind]}),this.filesStore.clearNotice()})}toggleExpanded(){this.expansionStore.toggleExpanded(this.sectionId)}uploadClicked(){this.uploadDialogService.open(Wo).pipe((0,v.h)(i=>!!(null==i?void 0:i.length)),(0,P.M)(this.orderId$)).subscribe(([i,t])=>this.startUpload(i,t))}toggleSelection(i){this.bulkSelection.toggle({sectionId:this.sectionId,id:i}),this.toastStore.hide()}editClicked(i){this.openEditDialog([i]).pipe((0,v.h)(t=>!!t)).subscribe(t=>this.filesStore.edit(t))}copyClicked(i){var t;this.clipboard.copy(null!==(t=i.downloadUrl)&&void 0!==t?t:""),this.toastStore.show({message:"Successfully copied the file link to your clipboard!",variant:"success"})}downloadClicked(i){this.filesStore.downloadFile(i.id),this.toastStore.show({message:"Your download has started.",variant:"success"})}deleteClicked({id:i,displayName:t}){this.deleteConfirmDialogService.confirm({entity:"File",displayNames:[t]}).pipe((0,v.h)(Boolean)).subscribe(()=>{this.bulkSelection.deselect({id:i,sectionId:this.sectionId}),this.filesStore.deleteFiles([{id:i,displayName:t}])})}bulkClosed(){this.bulkSelection.clear(this.sectionId)}bulkDownload(){this.filesStore.downloadSelected(),this.bulkSelection.clear(this.sectionId),this.toastStore.show({message:"Your download has started.",variant:"success"})}bulkEdited(){this.selectedFiles$.pipe((0,T.q)(1),(0,C.w)(i=>this.openEditDialog(i)),(0,v.h)(i=>!!i)).subscribe(i=>{this.bulkSelection.clear(this.sectionId),this.filesStore.edit(i)})}bulkDeleted(){this.selectedFiles$.pipe((0,T.q)(1),(0,C.w)(i=>this.deleteConfirmDialogService.confirm({entity:"Files",displayNames:i.map(t=>t.displayName)}).pipe((0,v.h)(Boolean),(0,x.U)(()=>i)))).subscribe(i=>{this.bulkSelection.clear(this.sectionId),this.filesStore.deleteFiles(i.map(t=>({id:t.id,displayName:t.displayName})))})}startUpload(i,t){this.filesStore.upload({orderId:t,items:i}),this.expansionStore.expand(this.sectionId)}purgeFiles(){this.orderId$.pipe((0,T.q)(1)).subscribe(i=>this.confirmAndPurge(i))}confirmAndPurge(i){this.confirmDialogService.confirm(Go).pipe((0,v.h)(Boolean)).subscribe(()=>this.filesStore.purgeOrder(i))}openEditDialog(i){return this.editItemsDialogService.open({kind:"file",items:i})}noticeMessage(i){switch(i.kind){case"updated":return`Successfully updated ${this.fileCountLabel(i.count)} settings!`;case"deleted":return this.deletedMessage(i.displayNames);case"uploadFailed":return`Couldn't upload "${(0,E.Ho)(i.name)}". Please try again.`}}deletedMessage(i){return 1===i.length?`Successfully deleted the file "${(0,E.Ho)(i[0])}"!`:`Successfully deleted ${this.fileCountLabel(i.length)}!`}fileCountLabel(i){return`${i} ${1===i?"file":"files"}`}reportUploadedCount(i){this.mediaPresence.setUploadedCount({sectionId:this.sectionId,count:i})}};me.\u0275fac=function(i){return new(i||me)(e.\u0275\u0275directiveInject(A.gz),e.\u0275\u0275directiveInject(De.TU),e.\u0275\u0275directiveInject(J),e.\u0275\u0275directiveInject(U.DNF),e.\u0275\u0275directiveInject(q),e.\u0275\u0275directiveInject(V),e.\u0275\u0275directiveInject(F),e.\u0275\u0275directiveInject(X.CW),e.\u0275\u0275directiveInject(bt),e.\u0275\u0275directiveInject(j),e.\u0275\u0275directiveInject(Y),e.\u0275\u0275directiveInject(W))},me.\u0275cmp=e.\u0275\u0275defineComponent({type:me,selectors:[["tn-files-section"]],hostVars:1,hostBindings:function(i,t){2&i&&e.\u0275\u0275hostProperty("id",t.sectionId)},features:[e.\u0275\u0275ProvidersFeature([bt])],decls:6,vars:9,consts:[[4,"ngIf"],[3,"count","visible","closed","edited","deleted"],[3,"downloadClicked"],["addTooltip","Add Files","title","Files",3,"count","uploadedCount","expanded","uploading","loading","showSpinner","expandToggleDisabled","uploadClicked","expandToggled"],[3,"files","selectedIds","selectionDisabled","selectionToggled","editClicked","copyClicked","deleteClicked","downloadClicked",4,"ngIf"],[3,"files","selectedIds","selectionDisabled","selectionToggled","editClicked","copyClicked","deleteClicked","downloadClicked"]],template:function(i,t){if(1&i&&(e.\u0275\u0275template(0,er,3,8,"ng-container",0),e.\u0275\u0275pipe(1,"async"),e.\u0275\u0275elementStart(2,"tn-native-upload-bulk-action-bar",1),e.\u0275\u0275listener("closed",function(){return t.bulkClosed()})("edited",function(){return t.bulkEdited()})("deleted",function(){return t.bulkDeleted()}),e.\u0275\u0275pipe(3,"async"),e.\u0275\u0275pipe(4,"async"),e.\u0275\u0275elementStart(5,"tn-native-upload-bulk-download-actions",2),e.\u0275\u0275listener("downloadClicked",function(){return t.bulkDownload()}),e.\u0275\u0275elementEnd()()),2&i){let n,s;e.\u0275\u0275property("ngIf",e.\u0275\u0275pipeBind1(1,3,t.vm$)),e.\u0275\u0275advance(2),e.\u0275\u0275property("count",null!==(n=e.\u0275\u0275pipeBind1(3,5,t.selectedCount$))&&void 0!==n?n:0)("visible",null!==(s=e.\u0275\u0275pipeBind1(4,7,t.hasSelection$))&&void 0!==s&&s)}},directives:[y.NgIf,le,Jo,Oe,Qe],pipes:[y.AsyncPipe],encapsulation:2,changeDetection:0}),me=(0,L.gn)([(0,k.c)(),(0,L.w6)("design:paramtypes",[A.gz,De.TU,J,U.DNF,q,V,F,X.CW,bt,j,Y,W])],me);var Ct=_(18013),tr=_(17708),nr=_(92397);function ir(o,i){if(1&o&&e.\u0275\u0275element(0,"tn-property-website-status",6),2&o){const t=e.\u0275\u0275nextContext().ngIf;e.\u0275\u0275property("published",t.published)}}function or(o,i){if(1&o){const t=e.\u0275\u0275getCurrentView();e.\u0275\u0275elementContainerStart(0),e.\u0275\u0275elementStart(1,"p",9),e.\u0275\u0275text(2,"Could not load the listing website."),e.\u0275\u0275elementEnd(),e.\u0275\u0275elementStart(3,"button",10,11),e.\u0275\u0275listener("click",function(){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext(3).retryLoad()}),e.\u0275\u0275element(5,"i",12),e.\u0275\u0275text(6," Retry "),e.\u0275\u0275elementEnd(),e.\u0275\u0275elementContainerEnd()}if(2&o){const t=e.\u0275\u0275reference(4);e.\u0275\u0275advance(5),e.\u0275\u0275property("size",t.iconSize)}}function rr(o,i){if(1&o&&(e.\u0275\u0275elementStart(0,"tn-shared-link",17),e.\u0275\u0275text(1),e.\u0275\u0275elementEnd()),2&o){const t=i.$implicit;e.\u0275\u0275property("url",t.url),e.\u0275\u0275advance(1),e.\u0275\u0275textInterpolate(t.label)}}function sr(o,i){if(1&o&&(e.\u0275\u0275elementStart(0,"div",15),e.\u0275\u0275template(1,rr,2,2,"tn-shared-link",16),e.\u0275\u0275elementEnd()),2&o){const t=i.ngIf,n=e.\u0275\u0275nextContext(4);e.\u0275\u0275advance(1),e.\u0275\u0275property("ngForOf",t)("ngForTrackBy",n.trackByLabel)}}function ar(o,i){if(1&o){const t=e.\u0275\u0275getCurrentView();e.\u0275\u0275elementStart(0,"p",9),e.\u0275\u0275text(1," Website will be created once deliverables files are synced "),e.\u0275\u0275elementEnd(),e.\u0275\u0275template(2,sr,2,2,"div",13),e.\u0275\u0275pipe(3,"async"),e.\u0275\u0275elementStart(4,"mat-slide-toggle",14),e.\u0275\u0275listener("change",function(s){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext(3).publishToggled(s.checked)}),e.\u0275\u0275text(5," Publish property website "),e.\u0275\u0275elementEnd()}if(2&o){const t=e.\u0275\u0275nextContext(2).ngIf,n=e.\u0275\u0275nextContext();e.\u0275\u0275advance(2),e.\u0275\u0275property("ngIf",e.\u0275\u0275pipeBind1(3,4,n.links$)),e.\u0275\u0275advance(2),e.\u0275\u0275property("disableRipple",!0)("checked",t.checked)("disabled",t.busy||t.loading)}}function lr(o,i){if(1&o&&(e.\u0275\u0275elementContainerStart(0),e.\u0275\u0275template(1,or,7,1,"ng-container",7),e.\u0275\u0275template(2,ar,6,6,"ng-template",null,8,e.\u0275\u0275templateRefExtractor),e.\u0275\u0275elementContainerEnd()),2&o){const t=e.\u0275\u0275reference(3),n=e.\u0275\u0275nextContext().ngIf;e.\u0275\u0275advance(1),e.\u0275\u0275property("ngIf",n.loadFailed)("ngIfElse",t)}}function dr(o,i){if(1&o){const t=e.\u0275\u0275getCurrentView();e.\u0275\u0275elementContainerStart(0),e.\u0275\u0275elementStart(1,"tn-section-header",1),e.\u0275\u0275listener("expandToggled",function(){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext().toggleExpanded()}),e.\u0275\u0275pipe(2,"async"),e.\u0275\u0275template(3,ir,1,1,"tn-property-website-status",2),e.\u0275\u0275elementStart(4,"button",3,4),e.\u0275\u0275listener("click",function(){const d=e.\u0275\u0275restoreView(t).ngIf;return e.\u0275\u0275nextContext().openAdminPanel(d.adminPanelTarget)}),e.\u0275\u0275element(6,"i",5),e.\u0275\u0275text(7," Admin Panel "),e.\u0275\u0275elementEnd()(),e.\u0275\u0275template(8,lr,4,2,"ng-container",0),e.\u0275\u0275pipe(9,"async"),e.\u0275\u0275elementContainerEnd()}if(2&o){const t=i.ngIf,n=e.\u0275\u0275reference(5),s=e.\u0275\u0275nextContext();let d;e.\u0275\u0275advance(1),e.\u0275\u0275property("uploadable",!1)("showSpinner",t.loading)("expanded",null!==(d=e.\u0275\u0275pipeBind1(2,8,s.expanded$))&&void 0!==d&&d)("expandToggleDisabled",t.loading),e.\u0275\u0275advance(2),e.\u0275\u0275property("ngIf",!t.loading&&!t.loadFailed),e.\u0275\u0275advance(1),e.\u0275\u0275property("disabled",!t.adminPanelTarget),e.\u0275\u0275advance(2),e.\u0275\u0275property("size",n.iconSize),e.\u0275\u0275advance(2),e.\u0275\u0275property("ngIf",e.\u0275\u0275pipeBind1(9,10,s.expanded$))}}let he=class{constructor(i,t,n,s,d,g){this.route=i,this.propertyWebsiteStore=t,this.workspaceStore=n,this.expansionStore=s,this.navigation=d,this.toastStore=g,this.orderId$=this.route.params.pipe((0,x.U)(c=>c.orderId),(0,v.h)(c=>"string"==typeof c)),this.sectionId=f.g8.PropertyWebsite,this.trackByLabel=(0,N.NxB)("label"),this.vm$=this.propertyWebsiteStore.vm$,this.links$=this.propertyWebsiteStore.links$.pipe((0,x.U)(c=>c.length?c:null)),this.expanded$=this.expansionStore.expandedSectionIds$.pipe((0,x.U)(c=>c.includes(this.sectionId)),(0,H.x)()),this.propertyWebsiteStore.load(this.orderId$),this.propertyWebsiteStore.publishError$.pipe((0,v.h)(Boolean),(0,k.t)(this)).subscribe(()=>this.handlePublishError())}retryLoad(){this.propertyWebsiteStore.load(this.orderId$.pipe((0,T.q)(1)))}toggleExpanded(){this.expansionStore.toggleExpanded(this.sectionId)}openAdminPanel(i){!i||this.navigation.openPropertyDashboard(i)}publishToggled(i){this.propertyWebsiteStore.togglePublish(this.workspaceStore.order$.pipe((0,v.h)(t=>Boolean(t)),(0,T.q)(1),(0,x.U)(t=>({order:t,publish:i}))))}handlePublishError(){this.toastStore.show({message:"Could not update the listing website. Please try again.",variant:"error"}),this.propertyWebsiteStore.checked$.pipe((0,T.q)(1),(0,k.t)(this)).subscribe(i=>this.restorePublishToggle(i))}restorePublishToggle(i){this.publishToggle&&(this.publishToggle.checked=i)}};he.\u0275fac=function(i){return new(i||he)(e.\u0275\u0275directiveInject(A.gz),e.\u0275\u0275directiveInject(Ct.n6),e.\u0275\u0275directiveInject(Me),e.\u0275\u0275directiveInject(j),e.\u0275\u0275directiveInject(je),e.\u0275\u0275directiveInject(V))},he.\u0275cmp=e.\u0275\u0275defineComponent({type:he,selectors:[["tn-property-website-section"]],viewQuery:function(i,t){if(1&i&&e.\u0275\u0275viewQuery(Ee.Rr,5),2&i){let n;e.\u0275\u0275queryRefresh(n=e.\u0275\u0275loadQuery())&&(t.publishToggle=n.first)}},hostVars:1,hostBindings:function(i,t){2&i&&e.\u0275\u0275hostProperty("id",t.sectionId)},features:[e.\u0275\u0275ProvidersFeature([Ct.n6])],decls:2,vars:3,consts:[[4,"ngIf"],["title","Property Website",3,"uploadable","showSpinner","expanded","expandToggleDisabled","expandToggled"],["sectionAction","",3,"published",4,"ngIf"],["sectionAction","","uiBtnSize","small","uiBtnTheme","setting","themeMode","text",3,"disabled","click"],["adminPanelButton","btnSize"],["uiIcon","open_in_new",3,"size"],["sectionAction","",3,"published"],[4,"ngIf","ngIfElse"],["websiteDetails",""],[1,"description"],["uiBtnSize","small","uiBtnTheme","main","themeMode","text",1,"self-start",3,"click"],["retryButton","btnSize"],["uiIcon","refresh",3,"size"],["class","links",4,"ngIf"],["labelPosition","before",1,"mat-slide-toggle-v2","mat-slide-toggle-inverse",3,"disableRipple","checked","disabled","change"],[1,"links"],["icon","web",3,"url",4,"ngFor","ngForOf","ngForTrackBy"],["icon","web",3,"url"]],template:function(i,t){1&i&&(e.\u0275\u0275template(0,dr,10,12,"ng-container",0),e.\u0275\u0275pipe(1,"async")),2&i&&e.\u0275\u0275property("ngIf",e.\u0275\u0275pipeBind1(1,1,t.vm$))},directives:[y.NgIf,le,tr.b,ie.s,oe.V,Z.a,y.NgForOf,nr.u,Ee.Rr],pipes:[y.AsyncP
1ipe],styles:[".description[_ngcontent-%COMP%]{font-size:.875rem;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(128 128 128 / var(--tw-text-opacity, 1))}.links[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.75rem}"],changeDetection:0}),he=(0,L.gn)([(0,k.c)(),(0,L.w6)("design:paramtypes",[A.gz,Ct.n6,Me,j,je,V])],he);let cr=(()=>{class o{constructor(){this.message="",this.visible=!1,this.variant="success"}}return o.\u0275fac=function(t){return new(t||o)},o.\u0275cmp=e.\u0275\u0275defineComponent({type:o,selectors:[["tn-toast"]],inputs:{message:"message",visible:"visible",variant:"variant"},decls:4,vars:7,consts:[[1,"upload-toast"],["uiIconVariant","outlined",3,"uiIcon","size"],[1,"upload-toast-message"]],template:function(t,n){1&t&&(e.\u0275\u0275elementStart(0,"div",0),e.\u0275\u0275element(1,"i",1),e.\u0275\u0275elementStart(2,"span",2),e.\u0275\u0275text(3),e.\u0275\u0275elementEnd()()),2&t&&(e.\u0275\u0275classProp("visible",n.visible)("error","error"===n.variant),e.\u0275\u0275advance(1),e.\u0275\u0275property("uiIcon","error"===n.variant?"cancel":"check_circle")("size",16),e.\u0275\u0275advance(2),e.\u0275\u0275textInterpolate(n.message))},directives:[Z.a],styles:["[_nghost-%COMP%]{pointer-events:none;position:fixed;left:0;right:0;bottom:2.5rem;z-index:50;display:flex;justify-content:center}.upload-toast[_ngcontent-%COMP%]{pointer-events:none;display:flex;align-items:center;gap:.75rem;border-radius:.5rem;border-style:none;--tw-bg-opacity: 1;background-color:rgb(221 255 244 / var(--tw-bg-opacity, 1));padding:.75rem;opacity:0;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;box-shadow:0 2px 10px #87dcc14d;transform:translateY(8px)}.upload-toast.visible[_ngcontent-%COMP%]{pointer-events:auto;opacity:1;transform:translateY(0)}.upload-toast[_ngcontent-%COMP%]   i[_ngcontent-%COMP%]{--tw-text-opacity: 1;color:rgb(9 146 104 / var(--tw-text-opacity, 1))}.upload-toast-message[_ngcontent-%COMP%]{white-space:nowrap;font-size:1rem;font-weight:400;line-height:1rem;--tw-text-opacity: 1;color:rgb(9 146 104 / var(--tw-text-opacity, 1))}.upload-toast.error[_ngcontent-%COMP%]{--tw-bg-opacity: 1;background-color:rgb(255 227 227 / var(--tw-bg-opacity, 1));box-shadow:0 2px 10px #f03e3e4d}.upload-toast.error[_ngcontent-%COMP%]   i[_ngcontent-%COMP%], .upload-toast.error[_ngcontent-%COMP%]   .upload-toast-message[_ngcontent-%COMP%]{--tw-text-opacity: 1;color:rgb(240 62 62 / var(--tw-text-opacity, 1))}"],changeDetection:0}),o})(),pr=(()=>{class o{constructor(t){this.toastStore=t,this.toastMessage$=this.toastStore.message$,this.toastVisible$=this.toastStore.visible$,this.toastVariant$=this.toastStore.variant$}}return o.\u0275fac=function(t){return new(t||o)(e.\u0275\u0275directiveInject(V))},o.\u0275cmp=e.\u0275\u0275defineComponent({type:o,selectors:[["tn-workspace-sections-list"]],features:[e.\u0275\u0275ProvidersFeature([j])],decls:11,vars:9,consts:[[1,"section-row"],[3,"message","visible","variant"]],template:function(t,n){if(1&t&&(e.\u0275\u0275element(0,"tn-photos-section",0)(1,"tn-videos-section",0)(2,"tn-floor-plans-section",0)(3,"tn-panoramas-section",0)(4,"tn-three-d-contents-section",0)(5,"tn-files-section",0)(6,"tn-property-website-section",0)(7,"tn-toast",1),e.\u0275\u0275pipe(8,"async"),e.\u0275\u0275pipe(9,"async"),e.\u0275\u0275pipe(10,"async")),2&t){let s,d,g;e.\u0275\u0275advance(7),e.\u0275\u0275property("message",null!==(s=e.\u0275\u0275pipeBind1(8,3,n.toastMessage$))&&void 0!==s?s:"")("visible",null!==(d=e.\u0275\u0275pipeBind1(9,5,n.toastVisible$))&&void 0!==d&&d)("variant",null!==(g=e.\u0275\u0275pipeBind1(10,7,n.toastVariant$))&&void 0!==g?g:"success")}},directives:[de,ce,pe,ge,ue,me,he,cr],pipes:[y.AsyncPipe],styles:["[_nghost-%COMP%]{display:flex;width:100%;flex-direction:column;gap:.625rem}.section-row[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:1rem;border-radius:.5rem;border-width:1px;border-style:solid;--tw-border-opacity: 1;border-color:rgb(246 246 246 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1));padding:1.25rem;scroll-margin-top:60px}"],changeDetection:0}),o})();function gr(o,i){1&o&&(e.\u0275\u0275elementContainerStart(0),e.\u0275\u0275elementStart(1,"div",3),e.\u0275\u0275element(2,"mat-spinner",4),e.\u0275\u0275elementEnd(),e.\u0275\u0275elementContainerEnd()),2&o&&(e.\u0275\u0275advance(2),e.\u0275\u0275property("diameter",48))}function ur(o,i){if(1&o&&(e.\u0275\u0275elementStart(0,"div",6)(1,"p",7),e.\u0275\u0275text(2),e.\u0275\u0275elementEnd()()),2&o){const t=e.\u0275\u0275nextContext(2).ngIf;e.\u0275\u0275advance(2),e.\u0275\u0275textInterpolate(t.error)}}function mr(o,i){if(1&o){const t=e.\u0275\u0275getCurrentView();e.\u0275\u0275elementContainerStart(0),e.\u0275\u0275elementStart(1,"tn-workspace-header",8),e.\u0275\u0275listener("orderClicked",function(s){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext(3).openOrderDetails(s)})("clientClicked",function(s){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext(3).openCustomerProfile(s)})("purgePhotosClicked",function(){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext(3).purgePhotos()})("purgeFloorPlansClicked",function(){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext(3).purgeFloorPlans()})("purgePanoramasClicked",function(){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext(3).purgePanoramas()})("purgeVideosClicked",function(){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext(3).purgeVideos()})("purgeThreeDContentsClicked",function(){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext(3).purgeThreeDContents()})("purgeFilesClicked",function(){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext(3).purgeFiles()})("purgeWebsiteClicked",function(){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext(3).purgeWebsite()})("previewClicked",function(){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext(3).onPreview()})("deliverClicked",function(){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext(3).onDeliver()}),e.\u0275\u0275pipe(2,"async"),e.\u0275\u0275elementEnd(),e.\u0275\u0275elementStart(3,"div",9)(4,"div",10)(5,"tn-workspace-section-tabs",11),e.\u0275\u0275listener("sectionSelected",function(s){return e.\u0275\u0275restoreView(t),e.\u0275\u0275nextContext(3).scrollToSection(s)}),e.\u0275\u0275elementEnd(),e.\u0275\u0275elementStart(6,"div",12),e.\u0275\u0275element(7,"tn-workspace-sections-list"),e.\u0275\u0275elementEnd()()(),e.\u0275\u0275elementContainerEnd()}if(2&o){const t=e.\u0275\u0275nextContext(2).ngIf,n=e.\u0275\u0275nextContext();e.\u0275\u0275advance(1),e.\u0275\u0275property("orderData",t.orderData)("showTestingActions",n.allowMediaTestingActions)("deliverEnabled",!0===e.\u0275\u0275pipeBind1(2,4,n.deliverEnabled$)),e.\u0275\u0275advance(4),e.\u0275\u0275property("activeSection",t.activeSection)}}function hr(o,i){if(1&o&&(e.\u0275\u0275template(0,ur,3,1,"div",5),e.\u0275\u0275template(1,mr,8,6,"ng-container",0)),2&o){const t=e.\u0275\u0275nextContext().ngIf;e.\u0275\u0275property("ngIf",t.error),e.\u0275\u0275advance(1),e.\u0275\u0275property("ngIf",t.orderData)}}function _r(o,i){if(1&o&&(e.\u0275\u0275elementContainerStart(0),e.\u0275\u0275template(1,gr,3,1,"ng-container",1),e.\u0275\u0275template(2,hr,2,2,"ng-template",null,2,e.\u0275\u0275templateRefExtractor),e.\u0275\u0275elementContainerEnd()),2&o){const t=i.ngIf,n=e.\u0275\u0275reference(3);e.\u0275\u0275advance(1),e.\u0275\u0275property("ngIf",t.loading)("ngIfElse",n)}}let _e=class{constructor(i,t,n,s,d,g,c,r,a,l){this.route=i,this.store=t,this.navigation=n,this.bulkSelection=s,this.appConfigService=d,this.testingActions=g,this.deliverProjectDialogService=c,this.toastStore=r,this.mediaPresence=a,this.spwSyncOffer=l,this.vm$=this.store.vm$,this.allowMediaTestingActions=this.appConfigService.allowMediaTestingActions,this.deliverEnabled$=this.mediaPresence.hasUploadedMedia$}ngOnInit(){this.route.params.pipe((0,x.U)(i=>i.orderId),(0,v.h)(i=>"string"==typeof i),(0,k.t)(this)).subscribe(i=>this.handleOrderRouteChanged(i))}purgePhotos(){this.testingActions.purgePhotos$.next()}purgeFloorPlans(){this.testingActions.purgeFloorPlans$.next()}purgePanoramas(){this.testingActions.purgePanoramas$.next()}purgeVideos(){this.testingActions.purgeVideos$.next()}purgeThreeDContents(){this.testingActions.purgeThreeDContents$.next()}purgeFiles(){this.testingActions.purgeFiles$.next()}purgeWebsite(){this.store.purgeWebsite()}openOrderDetails(i){this.navigation.openOrderManagement(i)}openCustomerProfile(i){i&&this.navigation.openCustomerProfile(i)}scrollToSection(i){this.store.setActiveSection(i),this.navigation.scrollToSection(i)}onPreview(){this.store.order$.pipe((0,v.h)(i=>!!i),(0,T.q)(1),(0,k.t)(this)).subscribe(i=>this.navigation.openDelivery(i.id))}onDeliver(){this.store.order$.pipe((0,v.h)(i=>!!i),(0,T.q)(1),(0,C.w)(i=>this.deliverProjectDialogService.open({order:i}
1)),(0,v.h)(i=>!!(null==i?void 0:i.delivered)),(0,k.t)(this)).subscribe(()=>this.handleProjectDelivered())}handleOrderRouteChanged(i){this.bulkSelection.reset(),this.store.loadOrder(i),this.spwSyncOffer.setOrderId(i)}handleProjectDelivered(){this.toastStore.show({message:"Project has been delivered.",variant:"success"})}};_e.\u0275fac=function(i){return new(i||_e)(e.\u0275\u0275directiveInject(A.gz),e.\u0275\u0275directiveInject(Me),e.\u0275\u0275directiveInject(je),e.\u0275\u0275directiveInject(F),e.\u0275\u0275directiveInject(D._ZM),e.\u0275\u0275directiveInject(Y),e.\u0275\u0275directiveInject(Pt),e.\u0275\u0275directiveInject(V),e.\u0275\u0275directiveInject(W),e.\u0275\u0275directiveInject(K.C5))},_e.\u0275cmp=e.\u0275\u0275defineComponent({type:_e,selectors:[["tn-workspace-page"]],features:[e.\u0275\u0275ProvidersFeature([Me,V,Y,F,W,$t,K.C5])],decls:2,vars:3,consts:[[4,"ngIf"],[4,"ngIf","ngIfElse"],["loaded",""],[1,"loading"],[3,"diameter"],["class","error",4,"ngIf"],[1,"error"],[1,"error-message"],[3,"orderData","showTestingActions","deliverEnabled","orderClicked","clientClicked","purgePhotosClicked","purgeFloorPlansClicked","purgePanoramasClicked","purgeVideosClicked","purgeThreeDContentsClicked","purgeFilesClicked","purgeWebsiteClicked","previewClicked","deliverClicked"],[1,"content"],[1,"workspace-body"],[3,"activeSection","sectionSelected"],[1,"sections"]],template:function(i,t){1&i&&(e.\u0275\u0275template(0,_r,4,2,"ng-container",0),e.\u0275\u0275pipe(1,"async")),2&i&&e.\u0275\u0275property("ngIf",e.\u0275\u0275pipeBind1(1,1,t.vm$))},directives:[y.NgIf,$e.Ou,Un,zn,pr],pipes:[y.AsyncPipe],styles:["[_nghost-%COMP%]{display:flex;height:100%;flex-direction:column;font-family:var(--content-font, Inter),sans-serif}.loading[_ngcontent-%COMP%], .error[_ngcontent-%COMP%]{display:flex;flex:1 1 0%;align-items:center;justify-content:center}.error-message[_ngcontent-%COMP%]{font-size:1rem;font-weight:500;--tw-text-opacity: 1;color:rgb(128 128 128 / var(--tw-text-opacity, 1))}.content[_ngcontent-%COMP%]{display:flex;flex:1 1 0%;flex-direction:column;align-items:center;gap:1.75rem;--tw-bg-opacity: 1;background-color:rgb(250 250 250 / var(--tw-bg-opacity, 1));padding:1.75rem .625rem}.workspace-body[_ngcontent-%COMP%]{display:flex;width:100%;flex-direction:column;align-items:center;gap:1.75rem;max-width:921px}.sections[_ngcontent-%COMP%]{display:flex;width:100%;flex-direction:column;align-items:flex-start;gap:.625rem}"],changeDetection:0}),_e=(0,L.gn)([(0,k.c)(),(0,L.w6)("design:paramtypes",[A.gz,Me,je,F,D._ZM,Y,Pt,V,W,K.C5])],_e);const vr=[{path:"",component:_e}];let fr=(()=>{class o{}return o.\u0275fac=function(t){return new(t||o)}
1,o.\u0275mod=e.\u0275\u0275defineNgModule({type:o}),o.\u0275inj=e.\u0275\u0275defineInjector({providers:[je],imports:[[y.CommonModule,$.UX,A.Bz.forChild(vr),Nt.ot,M.Is,Re.Tx,$e.Cq,St.KP,Ee.rP,Xe.Nh,Fe.AV,Bt,mn.n,K.ws,K.eD,U.FqG,U.zYm,U.kWm,U.QX1,U.$EP,U.flh,N.a9K]]}),o})()}}]);

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.