PageSourceSearch

https://art4.se/ui/chunk-R3ILKTHS.js

js art4.se collected 2026-10-06 17:00:55 UTC 162,709 bytes, 30 lines download raw bytes

1import{a as yn,b as ge}from"./chunk-47KUDNMX.js";import{a as Pn,b as ai,c as jt,d as Sn,e as Mn,g as kn,h as Gt,i as Dn,j as On,k as wn,l as Tn}from"./chunk-U6UB3RFS.js";import"./chunk-4WJL7MNC.js";import"./chunk-FSOYUT2H.js";import"./chunk-CAE4OMOX.js";import{a as fn}from"./chunk-3GKUVSF3.js";import{a as mn}from"./chunk-HL34OSNB.js";import{a as Cn,b as vn}from"./chunk-V3CYRNDS.js";import{a as _n}from"./chunk-PRN7QC2A.js";import{a as un,b as gn,c as hn}from"./chunk-PLPHBV4V.js";import"./chunk-PVAQLWWA.js";import{a as bn}from"./chunk-MNAV55ZA.js";import{d as mt}from"./chunk-SJLJM7OG.js";import"./chunk-XUTS7O6K.js";import{c as oi}from"./chunk-SS7Z6EYF.js";import"./chunk-PEQ6WFFR.js";import"./chunk-HCNHPJIP.js";import{e as Vt,g as ti,h as Wt,i as ln}from"./chunk-2IAZKEDS.js";import{a as dt,b as xt}from"./chunk-V675DA2Q.js";import{a as cn}from"./chunk-YVL65X3N.js";import"./chunk-ALQNBN6V.js";import"./chunk-XX7QD7S7.js";import{a as Z,b as ii}from"./chunk-RRWD7EEB.js";import{a as pn}from"./chunk-BNFRVTBN.js";import{a as rn,b as sn}from"./chunk-TYYSYBRI.js";import{i as an}from"./chunk-KHKX33KD.js";import"./chunk-VOPVIZB7.js";import"./chunk-N6JR2FOR.js";import"./chunk-L2Z74FIY.js";import"./chunk-7L2EN3MZ.js";import{a as on}from"./chunk-IINAZPPZ.js";import"./chunk-B3PE54PW.js";import"./chunk-Z2RPFIG5.js";import"./chunk-LJP3JKUY.js";import"./chunk-NUB4H7IA.js";import{a as zt}from"./chunk-FZ4IUST3.js";import"./chunk-QQLIQILC.js";import"./chunk-MDT5O7QI.js";import{a as ni}from"./chunk-FWC6TJLL.js";import"./chunk-SWCUV5RE.js";import{b as Zi}from"./chunk-GR33AB53.js";import"./chunk-PR4SHRX7.js";import"./chunk-4ZEYT4QT.js";import"./chunk-CY5WQW3V.js";import"./chunk-TC4FH2KB.js";import"./chunk-PYQJ54XJ.js";import"./chunk-3M6HWVTW.js";import"./chunk-SSVN4OYP.js";import{a as Ft}from"./chunk-ZKBN5W6M.js";import{g as Yi}from"./chunk-T3YNNXHY.js";import{a as xn}from"./chunk-IUY3ARJN.js";import"./chunk-6KO4XAKZ.js";import"./chunk-WSEBOW6P.js";import{a as it}from"./chunk-QX35RRNF.js";import{c as Ji}from"./chunk-P76HZEHQ.js";import{a as At}from"./chunk-TRSNIMJD.js";import{b as ft,c as Wi,e as ei,f as ee,g as Nt}from"./chunk-DYSTAKWW.js";import"./chunk-IPXHVXC7.js";import{h as en,n as tn}from"./chunk-RSGPLU72.js";import{a as qt}from"./chunk-EBI2B4IO.js";import"./chunk-TCPCAOA6.js";import{a as Ii,b as Bi}from"./chunk-ITSDPDVS.js";import{a as nn}from"./chunk-T5X44UOP.js";import{a as Ki}from"./chunk-VPHQA7YS.js";import"./chunk-PAL2O7HZ.js";import{a as dn}from"./chunk-QHAOKYGY.js";import"./chunk-NLT4MPKD.js";import{b as _t}from"./chunk-OENGJHVR.js";import{c as J}from"./chunk-ETGJ3364.js";import"./chunk-52N4NZUP.js";import{a as pt,b as Bt,d as ct}from"./chunk-5DLPIDDV.js";import"./chunk-J45XC6FO.js";import{a as Je}from"./chunk-5JRXCSP2.js";import"./chunk-L6YQ5BIS.js";import{a as Y,b as Ce,c as X,e as ve}from"./chunk-FJWSGXS7.js";import"./chunk-WEUVRURP.js";import{a as Ut}from"./chunk-DLALPQ46.js";import{a as Ht}from"./chunk-Q5WLTAWY.js";import"./chunk-7GRMXWI4.js";import{a as Ge}from"./chunk-DWA7ZZQZ.js";import{b as Lt}from"./chunk-D36XBW3A.js";import{D as $e,I as De,n as ji,o as Le,y as Gi}from"./chunk-TBAFUR3A.js";import{l as Qi}from"./chunk-MEYBMQVO.js";import{a as Xi,b as Oe}from"./chunk-NXGLDGZW.js";import{a as $i}from"./chunk-OH5PINYA.js";import{$e as Mt,$f as H,$g as Ri,Ab as x,Ac as bi,Af as S,Ah as tt,Bc as yi,Bf as Mi,Bg as re,Ca as c,Cb as _,Cf as Dt,Ci as Rt,D as Xe,Db as fi,Dc as s,Di as zi,E as gt,Eb as ce,Ec as l,Fb as A,Fc as K,Gb as q,Gc as bt,H as Ze,Hb as m,Ia as I,Ib as a,Ja as B,Jb as r,Jf as Ot,Kb as h,Kc as b,Kh as ht,Lb as Ie,Mb as et,Nb as vt,Nc as Be,O as j,Oa as N,Ob as xi,Oc as O,Pb as _i,Qh as Zt,R as li,Rb as V,Sa as he,Ta as Ct,Ua as We,Ub as C,V as pi,Vc as ye,Vf as F,Wf as M,Wg as _e,Wh as Fi,X as ci,Xb as g,Xf as k,Yg as Ei,Zf as ki,_a as Yt,_j as U,a as Re,aa as di,ai as Li,b as Ae,bk as W,cf as R,cg as ne,ck as It,df as kt,dg as oe,ea as mi,eb as i,fc as Ci,gc as at,ha as ui,hc as Xt,hg as Di,hh as Ne,ic as vi,id as Pi,ih as Me,jh as Ve,kc as p,kg as ae,kh as Fe,ki as w,kk as le,lc as v,lh as ke,li as Ui,mc as u,mh as lt,mi as Ai,na as gi,nb as P,nc as fe,nd as yt,nh as Tt,ni as qi,nk as $,od as Pt,oi as Et,pd as St,pf as Si,pg as Oi,qg as wi,qi as ue,ra as pe,rf as Pe,rg as Ti,rh as Ni,sf as st,sg as de,tb as L,tg as me,th as se,ua as qe,vg as xe,vh as Vi,x as G,xc as rt,xg as Se,ya as hi,yb as we,
1yc as je,yg as wt,zc as E,zi as Hi}from"./chunk-2HK6TSXB.js";function _o(t,d){if(t&1&&(a(0,"div",2)(1,"span",3),p(2),s(3,"mapValue"),s(4,"translate"),r(),a(5,"span",4),p(6),s(7,"cast"),s(8,"ixTopologyCategoryDescription"),r()()),t&2){let e=d.$implicit,n=g();i(2),u(" ",l(4,5,K(3,2,e.key,n.vdevTypeLabels)),": "),i(4),u(" ",bt(8,9,e.value,!n.isLimitedToOneLayout(l(7,7,e.key)),e.key===n.vDevType.Spare)," ")}}var Co={layout:null,width:null,diskSize:null,diskType:null,vdevsNumber:null,treatDiskSizeAsMinimum:!1,vdevs:[],hasCustomDiskSelection:!1,draidSpareDisks:null,draidDataDisks:null},En=(()=>{class t{constructor(){this.cdr=c(ye),this.name=O.required(),this.topology=O.required(),this.size=O(),this.disks=O.required(),this.vDevType=ee,this.vdevTypeLabels=Nt,this.isLimitedToOneLayout=zt}ngOnChanges(e){e.topology.currentValue&&(this.poolTopology=this.parseTopology(this.topology()),this.cdr.markForCheck())}parseTopology(e){let n={},o=this.getExistingVdevTypes(e);for(let f of o){n[f]=tt(Co),n[f].layout=Mn(e[f]);let y=[];for(let T of e[f])if(n[f].width!==null&&n[f].width!==(T.children?.length||1)&&(n[f].hasCustomDiskSelection=!0),n[f].width=T.children?.length||1,n[f].layout===Wi.Stripe){let te=this.disks().find(Ee=>Ee.devname===T.disk);y.push(tt(te)),n[f].vdevs.push([tt(te)])}else{let te=[];for(let Ee of T.children){let be=this.disks().find(Ye=>Ye.devname===Ee.disk);y.push(tt(be)),te.push(tt(be))}n[f].vdevs.push(te)}let D=tt(y[0]);n[f].hasCustomDiskSelection=n[f].hasCustomDiskSelection||y.some(T=>T.size!==D.size||T.type!==D.type),n[f].hasCustomDiskSelection||(n[f].diskSize=D.size,n[f].diskType=D.type,n[f].vdevsNumber=e[f].length)}return n}getExistingVdevTypes(e){let n=Object.values(ee);return e.data[0].type===ft.Draid&&(n=n.filter(o=>o!==ee.Spare)),n.filter(o=>Object.keys(e).includes(o)&&e[o].length>0)}static{this.\u0275fac=function(n){return new(n||t)}}static{this.\u0275cmp=P({type:t,selectors:[["ix-existing-configuration-preview"]],inputs:{name:[1,"name"],topology:[1,"topology"],size:[1,"size"],disks:[1,"disks"]},features:[We],decls:23,vars:15,consts:[[1,"card"],["mat-card-title",""],[1,"details-item"],[1,"label"],[1,"value"]],template:function(n,o){n&1&&(a(0,"mat-card",0)(1,"mat-card-header")(2,"h3",1),p(3),s(4,"translate"),r()(),a(5,"mat-card-content")(6,"div")(7,"div",2)(8,"span",3),p(9),s(10,"translate"),r(),a(11,"span",4),p(12),r()(),A(13,_o,9,13,"div",2,ce),s(15,"keyvalue"),a(16,"div",2)(17,"span",3),p(18),s(19,"translate"),r(),a(20,"span",4),p(21),s(22,"ixFileSize"),r()()()()()),n&2&&(i(3),v(l(4,5,"Current Configuration")),i(6),u("",l(10,7,"Name"),":"),i(3),v(o.name()),i(),q(l(15,9,o.poolTopology)),i(5),u("",l(19,11,"Total Capacity"),":"),i(3),v(l(22,13,o.size())))},dependencies:[Y,ve,Ce,X,k,M,Ht,it,At,yt,jt],styles:[`@keyframes _ngcontent-%COMP%_blinker{50%{opacity:.1}}@keyframes _ngcontent-%COMP%_fade-in-animation{0%{opacity:0}to{opacity:1}}@keyframes _ngcontent-%COMP%_pulse-box-shadow-animation{0%,to{box-shadow:none;outline:0}50%{box-shadow:0 0 10px 10px var(--primary-lighter);outline:2px solid var(--primary)}}.card[_ngcontent-%COMP%]{border:none;border-radius:0;margin:0}.card[_ngcontent-%COMP%]   mat-card-header[_ngcontent-%COMP%]{align-items:center;border-bottom:1px solid var(--lines);justify-content:space-between;min-height:40px;padding:8px 8px 8px 16px}.card[_ngcontent-%COMP%]   mat-card-header[_ngcontent-%COMP%]   .mat-mdc-button[_ngcontent-%COMP%]{flex-shrink:0}.card[_ngcontent-%COMP%]   .mat-mdc-card-title[_ngcontent-%COMP%]{align-items:center;column-gap:5px;display:flex;font-size:1.65rem;margin-bottom:0}@media(max-width:3132px){.card[_ngcontent-%COMP%]   .mat-mdc-card-title[_ngcontent-%COMP%]{font-size:1.728em}}.card[_ngcontent-%COMP%]   mat-card-content[_ngcontent-%COMP%]{margin:0;padding:16px!important}.card[_ngcontent-%COMP%]   mat-card-content[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{padding:0}.card[_ngcontent-%COMP%]   ngx-skeleton-loader[_ngcontent-%COMP%]{flex:1}.card[_ngcontent-%COMP%]   .details-item[_ngcontent-%COMP%]{animation-duration:.35s;animation-fill-mode:backwards;animation-name:_ngcontent-%COMP%_fade-in-animation;align-items:center;display:flex;flex-direction:row;flex-wrap:wrap;margin-bottom:4px}.card[_ngcontent-%COMP%]   .details-item[_ngcontent-%COMP%]:first-child{margin-top:0}.card[_ngcontent-%COMP%]   .details-item[_ngcontent-%COMP%]   .label[_ngcontent-%COMP%]{font-weight:700;margin-right:5px;white-space:normal}.card[_ngcontent-%COMP%]   .details-item[_ngcontent-%COMP%]   .value[_ngcontent-%COMP%]{font-weight:400;margin-right:5px;white-space:normal}.card[_ngcontent-%COMP%]   .details-item[_ngcontent-%COMP%]   a[_ngcontent-%COMP%]{color:var(--primary);cursor:pointer;margin-left:auto;max-width:100%;overflow:hidden;text-decoration:underline;text-overflow:ellipsis;white-space:nowrap}.card[_ngcontent-%COMP%]   .details-item[_ngcontent-%COMP%]   ngx-skeleton-loader[_ngcontent-%COMP%]{display:inline-block;flex:0;height:20px;min-width:30px;width:30%}.card[_ngcontent-%COMP%]   .details-item[_ngcontent-%COMP%]   ngx-skeleton-loader[_ngcontent-%COMP%]     .loader{margin-bottom:0}.card[_ngcontent-%COMP%]   mat-card-actions[_ngcontent-%COMP%]{border-top:1px solid var(--lines);box-sizing:border-box;display:flex;justify-content:flex-end;margin:0;padding:8px 8px 8px 16px}.card[_ngcontent-%COMP%]   mat-card-actions[_ngcontent-%COMP%]   .mdc-button--outlined[_ngcontent-%COMP%]{border:1px solid var(--alt-fg2);border-radius:0;opacity:.8}.card[_ngcontent-%COMP%]   mat-card-actions[_ngcontent-%COMP%]   .mdc-button--outlined[_ngcontent-%COMP%]:hover{background-color:var(--hover-bg)!important}
2/*# sourceMappingURL=existing-configuration-preview.component-GMHQKAHR.css.map */`],changeDetection:0})}}return t})();var vo=(t,d)=>d.key;function bo(t,d){if(t&1&&(a(0,"div",2)(1,"span",4),p(2),s(3,"mapValue"),s(4,"translate"),r(),a(5,"span",5),p(6),s(7,"cast"),s(8,"ixTopologyCategoryDescription"),r()()),t&2){let e=d.$implicit,n=g();i(2),u(" ",l(4,5,K(3,2,e.key,n.vdevTypeLabels)),": "),i(4),u(" ",bt(8,9,e.value,!n.isLimitedToOneLayout(l(7,7,e.key)),e.key===n.vDevType.Spare)," ")}}function yo(t,d){t&1&&(a(0,"div",3),p(1),s(2,"translate"),r()),t&2&&(i(),u(" ",l(2,1,"No new devices added yet.")," "))}var Rn=(()=>{class t{constructor(){this.store=c(Gt),this.vdevTypeLabels=Nt,this.topology$=this.store.topology$.pipe(Xe(e=>Fi(e,n=>n.vdevs.length===0))),this.isLimitedToOneLayout=zt,this.vDevType=ee}static{this.\u0275fac=function(n){return new(n||t)}}static{this.\u0275cmp=P({type:t,selectors:[["ix-new-devices-preview"]],decls:12,vars:8,consts:[[1,"card"],["mat-card-title",""],[1,"details-item"],[1,"no-new-devices"],[1,"label"],[1,"value"]],template:function(n,o){n&1&&(a(0,"mat-card",0)(1,"mat-card-header")(2,"h3",1),p(3),s(4,"translate"),r()(),a(5,"mat-card-content")(6,"div"),A(7,bo,9,13,"div",2,vo,!1,yo,3,3,"div",3),s(10,"async"),s(11,"keyvalue"),r()()()),n&2&&(i(3),v(l(4,2,"New Devices")),i(4),q(l(11,6,l(10,4,o.topology$))))},dependencies:[Y,ve,Ce,X,k,M,Ht,At,Pi,yt,jt],styles:[`@keyframes _ngcontent-%COMP%_blinker{50%{opacity:.1}}@keyframes _ngcontent-%COMP%_fade-in-animation{0%{opacity:0}to{opacity:1}}@keyframes _ngcontent-%COMP%_pulse-box-shadow-animation{0%,to{box-shadow:none;outline:0}50%{box-shadow:0 0 10px 10px var(--primary-lighter);outline:2px solid var(--primary)}}.card[_ngcontent-%COMP%]{border:none;border-radius:0;margin:0}.card[_ngcontent-%COMP%]   mat-card-header[_ngcontent-%COMP%]{align-items:center;border-bottom:1px solid var(--lines);justify-content:space-between;min-height:40px;padding:8px 8px 8px 16px}.card[_ngcontent-%COMP%]   mat-card-header[_ngcontent-%COMP%]   .mat-mdc-button[_ngcontent-%COMP%]{flex-shrink:0}.card[_ngcontent-%COMP%]   .mat-mdc-card-title[_ngcontent-%COMP%]{align-items:center;column-gap:5px;display:flex;font-size:1.65rem;margin-bottom:0}@media(max-width:3132px){.card[_ngcontent-%COMP%]   .mat-mdc-card-title[_ngcontent-%COMP%]{font-size:1.728em}}.card[_ngcontent-%COMP%]   mat-card-content[_ngcontent-%COMP%]{margin:0;padding:16px!important}.card[_ngcontent-%COMP%]   mat-card-content[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{padding:0}.card[_ngcontent-%COMP%]   ngx-skeleton-loader[_ngcontent-%COMP%]{flex:1}.card[_ngcontent-%COMP%]   .details-item[_ngcontent-%COMP%]{animation-duration:.35s;animation-fill-mode:backwards;animation-name:_ngcontent-%COMP%_fade-in-animation;align-items:center;display:flex;flex-direction:row;flex-wrap:wrap;margin-bottom:4px}.card[_ngcontent-%COMP%]   .details-item[_ngcontent-%COMP%]:first-child{margin-top:0}.card[_ngcontent-%COMP%]   .details-item[_ngcontent-%COMP%]   .label[_ngcontent-%COMP%]{font-weight:700;margin-right:5px;white-space:normal}.card[_ngcontent-%COMP%]   .details-item[_ngcontent-%COMP%]   .value[_ngcontent-%COMP%]{font-weight:400;margin-right:5px;white-space:normal}.card[_ngcontent-%COMP%]   .details-item[_ngcontent-%COMP%]   a[_ngcontent-%COMP%]{color:var(--primary);cursor:pointer;margin-left:auto;max-width:100%;overflow:hidden;text-decoration:underline;text-overflow:ellipsis;white-space:nowrap}.card[_ngcontent-%COMP%]   .details-item[_ngcontent-%COMP%]   ngx-skeleton-loader[_ngcontent-%COMP%]{display:inline-block;flex:0;height:20px;min-width:30px;width:30%}.card[_ngcontent-%COMP%]   .details-item[_ngcontent-%COMP%]   ngx-skeleton-loader[_ngcontent-%COMP%]     .loader{margin-bottom:0}.card[_ngcontent-%COMP%]   mat-card-actions[_ngcontent-%COMP%]{border-top:1px solid var(--lines);box-sizing:border-box;display:flex;justify-content:flex-end;margin:0;padding:8px 8px 8px 16px}.card[_ngcontent-%COMP%]   mat-card-actions[_ngcontent-%COMP%]   .mdc-button--outlined[_ngcontent-%COMP%]{border:1px solid var(--alt-fg2);border-radius:0;opacity:.8}.card[_ngcontent-%COMP%]   mat-card-actions[_ngcontent-%COMP%]   .mdc-button--outlined[_ngcontent-%COMP%]:hover{background-color:var(--hover-bg)!important}
3/*# sourceMappingURL=new-devices-preview.component-TCGTFFOZ.css.map */`],changeDetection:0})}}return t})();function Po(t,d){if(t&1&&h(0,"ix-existing-configuration-preview",5),t&2){let e=g();m("name",e.existingPool.name)("topology",e.existingPool.topology)("disks",e.poolDisks)("size",e.existingPool.size)}}function So(t,d){t&1&&h(0,"ix-new-devices-preview")}var In=(()=>{class t{constructor(){this.addVdevsStore=c(ai),this.activatedRoute=c(Si),this.cdr=c(ye),this.destroyRef=c(N),this.hasConfigurationPreview=!0,this.existingPool=null,this.poolDisks=[],this.topology=null}ngOnInit(){this.addVdevsStore.initialize(),this.activatedRoute.params.pipe(qe(e=>{this.addVdevsStore.loadPoolData(+e.poolId)}),S(this.destroyRef)).subscribe(),gt([this.addVdevsStore.pool$.pipe(j(Boolean)),this.addVdevsStore.poolDisks$.pipe(j(e=>!!e.length))]).pipe(S(this.destroyRef)).subscribe({next:([e,n])=>{this.existingPool=e,this.poolDisks=n,this.topology=Sn(e.topology,n),this.cdr.markForCheck()}})}onStepChanged(e){this.hasConfigurationPreview=e!==On.Review}static{this.\u0275fac=function(n){return new(n||t)}}static{this.\u0275cmp=P({type:t,selectors:[["ix-add-vdevs"]],features:[rt([Pn,Gt,ai,kn,wn,{provide:on,useValue:{showError:!0}}])],decls:8,vars:2,consts:[[1,"root-container"],[1,"main-container"],[3,"stepChanged"],[1,"sidebar"],[1,"details-container"],[3,"name","topology","disks","size"]],template:function(n,o){n&1&&(a(0,"div",0)(1,"div",1)(2,"ix-pool-manager-wizard",2),C("stepChanged",function(y){return o.onStepChanged(y)}),r()(),a(3,"div",3)(4,"div",4),x(5,Po,1,4,"ix-existing-configuration-preview",5),x(6,So,1,0,"ix-new-devices-preview"),h(7,"ix-inventory"),r()()()),n&2&&(i(5),_(o.hasConfigurationPreview&&o.existingPool?5:-1),i(),_(o.hasConfigurationPreview?6:-1))},dependencies:[Tn,En,Rn,Dn],styles:[`.root-container[_ngcontent-%COMP%]{display:flex;gap:16px}.root-container[_ngcontent-%COMP%]   .main-container[_ngcontent-%COMP%]{width:100%}.root-container[_ngcontent-%COMP%]   .sidebar[_ngcontent-%COMP%]{width:60%}.root-container[_ngcontent-%COMP%]   .details-container[_ngcontent-%COMP%]{position:sticky;top:0}ix-inventory[_ngcontent-%COMP%], ix-new-devices-preview[_ngcontent-%COMP%]{display:block;margin-top:16px}
4/*# sourceMappingURL=add-vdevs.component-JHMAFEU7.css.map */`],changeDetection:0})}}return t})();var Bn={hierarchy:["Storage"],anchorRouterLink:["/storage"],elements:{disconnect:{hierarchy:["Disconnect"],synonyms:["Export","Disconnect","Offline"]},expand:{hierarchy:["Expand"]}}};function Nn(t){return Vi(t)&&!Array.isArray(t)&&"code"in t&&t.code==="control_services"}function Mo(t,d){if(t&1&&(a(0,"li"),p(1),s(2,"translate"),r()),t&2){let e=d.$implicit;i(),v(l(2,1,e))}}function ko(t,d){if(t&1&&(a(0,"div",2)(1,"p"),p(2),s(3,"translate"),r(),a(4,"ul"),A(5,Mo,3,3,"li",null,ce),r()()),t&2){let e=g();i(2),v(l(3,1,e.helptext.exportMessages.stopServices)),i(3),q(e.servicesInfo.stop_services)}}function Do(t,d){if(t&1&&(a(0,"li"),p(1),s(2,"translate"),r()),t&2){let e=d.$implicit;i(),v(l(2,1,e))}}function Oo(t,d){if(t&1&&(a(0,"div",2)(1,"p"),p(2),s(3,"translate"),r(),a(4,"ul"),A(5,Do,3,3,"li",null,ce),r()()),t&2){let e=g();i(2),v(l(3,1,e.helptext.exportMessages.restartServices)),i(3),q(e.servicesInfo.restart_services)}}var Vn=(()=>{class t{constructor(){this.servicesInfo=c(Me),this.helptext=ge}static{this.\u0275fac=function(n){return new(n||t)}}static{this.\u0275cmp=P({type:t,selectors:[["ix-services-to-be-restarted-dialog"]],decls:16,vars:16,consts:[["mat-dialog-title",""],["mat-dialog-content","",1,"message-content"],[1,"services-block"],["mat-dialog-actions","",1,"form-actions"],["mat-button","","ixTest","cancel",3,"matDialogClose"],["mat-button","","ixTest","continue","color","primary",3,"matDialogClose"]],template:function(n,o){n&1&&(a(0,"h1",0),p(1),s(2,"translate"),r(),a(3,"div",1),x(4,ko,7,3,"div",2),x(5,Oo,7,3,"div",2),a(6,"p"),p(7),s(8,"translate"),r()(),a(9,"ix-form-actions",3)(10,"button",4),p(11),s(12,"translate"),r(),a(13,"button",5),p(14),s(15,"translate"),r()()),n&2&&(i(),v(l(2,8,o.helptext.exportError)),i(3),_(o.servicesInfo.stop_services.length?4:-1),i(),_(o.servicesInfo.restart_services.length?5:-1),i(2),v(l(8,10,o.helptext.exportMessages.continueMessage)),i(3),m("matDialogClose",!1),i(),u(" ",l(12,12,"Cancel")," "),i(2),m("matDialogClose",!0),i(),u(" ",l(15,14,o.helptext.exportMessages.continueAction)," "))},dependencies:[se,R,Tt,lt,ke,w,k,Fe,M],styles:[`.services-block[_ngcontent-%COMP%]   ul[_ngcontent-%COMP%]{margin-top:-5px}
5/*# sourceMappingURL=services-to-be-restarted-dialog.component-S4H6QLYT.css.map */`],changeDetection:0})}}return t})();var ri=t=>({pool:t}),wo=t=>[t],To=t=>({count:t}),Fn=t=>({name:t});function Eo(t,d){t&1&&h(0,"mat-progress-bar",1)}function Ro(t,d){t&1&&(a(0,"div",12)(1,"span",17),p(2),s(3,"translate"),r(),p(4),s(5,"translate"),r()),t&2&&(i(2),u(" ",l(3,2,"WARNING"),": "),i(2),u(" ",l(5,4,"You will not be able to access the exported pool's data until you import it again. Back up critical data before exporting your pool!")," "))}function Io(t,d){t&1&&(a(0,"div",13)(1,"span",17),p(2),s(3,"translate"),r(),p(4),s(5,"translate"),r()),t&2&&(i(2),u(" ",l(3,2,"WARNING"),": "),i(2),u(" ",l(5,4,"All data will be deleted from the pool. Back up critical data before deleting your pool!")," "))}function Bo(t,d){t&1&&(a(0,"mat-expansion-panel",14)(1,"mat-expansion-panel-header")(2,"mat-panel-title")(3,"div",18),h(4,"tn-icon",19),r(),p(5),s(6,"translate"),r()(),a(7,"div",20)(8,"div",21)(9,"p")(10,"strong"),p(11),s(12,"translate"),r()(),a(13,"p"),p(14),s(15,"translate"),r(),a(16,"p")(17,"strong"),p(18),s(19,"translate"),r(),p(20),s(21,"translate"),r(),a(22,"p")(23,"em"),p(24),s(25,"translate"),r()(),a(26,"p"),p(27),s(28,"translate"),r()()()()),t&2&&(m("expanded",!0),i(5),u(" ",l(6,8,"Critical: High Availability should be disabled")," "),i(6),v(l(12,10,"This is the last pool in your HA system.")),i(3),v(l(15,12,"Removing this pool will leave no pools available for failover operations, effectively disabling High Availability functionality. Your system will continue to operate, but redundancy will be lost until another pool is added.")),i(4),v(l(19,14,"Action Required:")),i(2),u(" ",l(21,16,"You must first disable High Availability before you can proceed with this operation.")),i(4),v(l(25,18,"The disconnect button will remain disabled until HA is turned off.")),i(3),v(l(28,20,"Please ensure you understand the implications before proceeding.")))}function No(t,d){if(t&1&&(a(0,"mat-expansion-panel",15)(1,"mat-expansion-panel-header")(2,"mat-panel-title"),p(3),s(4,"translate"),r()(),a(5,"div",20)(6,"p",22),p(7),s(8,"translate"),r(),a(9,"div",23),h(10,"span",24),s(11,"translate"),r()()()),t&2){let e=g(2);i(3),u(" ",l(4,3,"System dataset will be moved off this pool")," "),i(4),u(" ",l(8,5,"The system dataset contains configuration files and other system data. When this pool is exported, these files will be moved off this pool to ensure system functionality.")," "),i(3),m("innerHTML",l(11,7,e.helptext.exportDialog.warningSysDataset),Yt)}}function Vo(t,d){if(t&1&&(a(0,"mat-expansion-panel",15)(1,"mat-expansion-panel-header")(2,"mat-panel-title"),p(3),s(4,"translate"),r()(),a(5,"div",20)(6,"div",25),h(7,"span",24),s(8,"translate"),r()()()),t&2){let e=g(2);i(3),u(" ",l(4,2,"Pool status is unknown")," "),i(4),m("innerHTML",K(8,4,e.helptext.exportDialog.unknownState,E(7,ri,e.pool.name)),Yt)}}function Fo(t,d){if(t&1&&(a(0,"li"),p(1),r()),t&2){let e=d.$implicit;i(),u(" ",e)}}function Lo(t,d){if(t&1&&A(0,Fo,2,1,"li",null,ce),t&2){let e=d.$implicit;q(e.split(","))}}function Uo(t,d){if(t&1&&(a(0,"li")(1,"span",30),p(2),r(),a(3,"ul",31),A(4,Lo,2,0,null,null,ce),r()()),t&2){let e=d.$implicit;i(2),u("",e.type,":"),i(2),q(e.attachments)}}
5function Ao(t,d){if(t&1&&(a(0,"div",26),p(1),s(2,"translate"),a(3,"ul",29),A(4,Uo,6,1,"li",null,ce),r()()),t&2){let e=g(3);i(),u(" ",K(2,1,"These services depend on pool {name} and will be disrupted if the pool is detached:",E(4,Fn,e.pool.name))," "),i(3),q(e.attachments)}}function qo(t,d){if(t&1&&(a(0,"li"),p(1),r()),t&2){let e=d.$implicit;i(),u(" ",e.name)}}function Ho(t,d){if(t&1&&(a(0,"div",27),p(1),s(2,"translate"),a(3,"ul"),A(4,qo,2,1,"li",null,ce),r()()),t&2){let e=g(3);i(),u(" ",K(2,1,"These running processes are using {name}:",E(4,Fn,e.pool.name))," "),i(3),q(e.process.knownProcesses)}}function zo(t,d){if(t&1&&(a(0,"li"),p(1),r()),t&2){let e=d.$implicit;i(),fe(" ",e.pid," - ",e.cmdline==null?null:e.cmdline.substring(0,40)," ")}}function Wo(t,d){if(t&1&&(a(0,"div",28),p(1),s(2,"translate"),a(3,"ul"),A(4,zo,2,2,"li",null,ce),r(),a(6,"div",32)(7,"span",17),p(8),s(9,"translate"),r(),p(10),s(11,"translate"),r()()),t&2){let e=g(3);i(),u(" ",l(2,3,"These unknown processes are using the pool:")," "),i(3),q(e.process.unknownProcesses),i(4),u(" ",l(9,5,"WARNING"),": "),i(2),u(" ",l(11,7,"These unknown processes will be terminated while exporting the pool.")," ")}}function jo(t,d){if(t&1&&(a(0,"mat-expansion-panel",15)(1,"mat-expansion-panel-header")(2,"mat-panel-title"),p(3),s(4,"translate"),r()(),a(5,"div",20),x(6,Ao,6,6,"div",26),x(7,Ho,6,6,"div",27),x(8,Wo,12,9,"div",28),r()()),t&2){let e=g(2);i(3),u(" ",K(4,4,"{count} services and processes depend on this pool",E(7,To,e.dependencyCount))," "),i(3),_(e.attachments.length?6:-1),i(),_(e.process.knownProcesses.length?7:-1),i(),_(e.process.unknownProcesses.length?8:-1)}}function Go(t,d){if(t&1&&(h(0,"ix-checkbox",33),s(1,"translate"),s(2,"translate"),h(3,"ix-checkbox",34),s(4,"translate")),t&2){let e=g(2);m("label",l(1,4,e.helptext.exportDialog.cascade.label))("tooltip",l(2,6,e.helptext.exportDialog.cascade.tooltip)),i(3),m("label",l(4,8,"Confirm Export Pool"))("required",!0)}}function $o(t,d){if(t&1&&(h(0,"ix-checkbox",33),s(1,"translate"),s(2,"translate"),h(3,"ix-checkbox",34),s(4,"translate")),t&2){let e=g(2);m("label",l(1,4,"Remove all related configurations"))("tooltip",l(2,6,e.helptext.exportDialog.cascade.tooltip)),i(3),m("label",l(4,8,"Confirm Delete Pool"))("required",!0)}}function Jo(t,d){if(t&1&&(h(0,"ix-input",16),s(1,"translate")),t&2){let e=g(2);m("label",K(1,1,e.helptext.exportDialog.enterName,E(4,ri,e.pool.name)))}}function Qo(t,d){if(t&1&&(a(0,"div",8)(1,"div",11),x(2,Ro,6,6,"div",12),x(3,Io,6,6,"div",13),r(),x(4,Bo,29,22,"mat-expansion-panel",14),x(5,No,12,9,"mat-expansion-panel",15),x(6,Vo,9,9,"mat-expansion-panel",15),x(7,jo,9,9,"mat-expansion-panel",15),a(8,"ix-fieldset"),x(9,Go,5,10),x(10,$o,5,10),x(11,Jo,2,6,"ix-input",16),r()()),t&2){let e=g();i(2),_(e.isExportSelected?2:-1),i(),_(e.isDeleteSelected?3:-1),i(),_(e.isLastPoolInHaSystem()?4:-1),i(),_(e.showSysDatasetWarning?5:-1),i(),_(e.showUnknownStatusDetachWarning?6:-1),i(),_(e.attachments.length||e.process.knownProcesses.length||e.process.unknownProcesses.length?7:-1),i(2),_(e.isExportSelected?9:-1),i(),_(e.isDeleteSelected?10:-1),i(),_(e.isDeleteSelected&&e.form.value.destroy?11:-1)}}function Ko(t,d){if(t&1&&(a(0,"button",35),p(1),s(2,"translate"),r()),t&2){let e=g();m("color",e.isDeleteSelected?"warn":"primary")("disabled",!e.canProceed()),i(),u(" ",l(2,3,"Disconnect")," ")}}var nt=(function(t){return t.Export="export",t.Delete="delete",t})(nt||{}),Ln=(()=>{class t{constructor(){this.fb=c(Se),this.dialogRef=c(Ne),this.translate=c(F),this.validatorsService=c(Ut),this.dialogService=c(le),this.matDialog=c(Ve),this.loader=c(Je),this.api=c(U),this.datasetStore=c(yn),this.cdr=c(ye),this.snackbar=c(ue),this.errorHandler=c(W),this.store=c(Ot),this.pool=c(Me),this.destroyRef=c(N),this.helptext=ge,this.nameInputRequired=this.validatorsService.withMessage(H.required,this.translate.instant("Name of the pool is required")),this.nameInputMustMatch=this.validatorsService.withMessage(H.pattern(new RegExp(`^${this.pool.name}$`)),this.translate.instant("Name of the pool must be correct")),this.selectedOption=he(null),this.attachments=[],this.processes=[],this.process={knownProcesses:[],unknownProcesses:[]},this.totalPoolCount=0,this.isHaEnabled=!1,this.isFormLoading=!1,this.form=this.fb.nonNullable.group({destroy:[!1],cascade:[!0],confirm:[!1,[H.requiredTrue]],nameInput:["",[this.validatorsService.validateOnCondition(e=>e.parent?.get("destroy")?.value,this.nameInputRequired),this.validatorsService.validateOnCondition(e=>e.parent?.get("destroy")?.value,this.nameInputMustMatch)]]}),this.restartServices=!1,this.Role=$}get exportOption(){return nt.Export}get deleteOption(){return nt.Delete}ngOnInit(){if(this.selectOption(nt.Export),this.pool.status===Z.Unknown){this.prepareForm();return}this.loadRelatedEntities()}cancel(){this.dialogRef.close(!1)}isLastPoolInHaSystem(){return this.isHaEnabled&&this.failoverConfig&&!this.failoverConfig.disabled&&this.totalPoolCount===1}startExportDisconnectJob(){let e=this.form.getRawValue(),n=this.api.job("pool.export",[this.pool.id,{destroy:e.destroy,cascade:e.cascade,restart_services:this.restartServices}]);
5this.dialogService.jobDialog(n,{title:this.translate.instant(ge.exporting),description:this.translate.instant(ge.exporting)}).afterClosed().pipe(S(this.destroyRef)).subscribe({next:()=>{this.handleDisconnectJobSuccess(e)},error:o=>{this.handleDisconnectJobFailure(o)},complete:()=>{this.isFormLoading=!1,this.cdr.markForCheck()}}),this.datasetStore.resetDatasets()}handleDisconnectJobFailure(e){if(Hi(e)&&e.job.error){if(Nn(e.job.exc_info.extra)){this.showServicesToBeRestartedDialog(e.job.exc_info.extra);return}if(e.job.extra?.code==="unstoppable_processes"){this.showUnstoppableErrorDialog(e.job);return}}this.errorHandler.showErrorModal(e)}showUnstoppableErrorDialog(e){let n="";n=this.translate.instant(ge.exportMessages.unableToTerminate)+e.extra?.processes,this.dialogService.error({title:ge.exportError,message:n,stackTrace:e.exception})}showServicesToBeRestartedDialog(e){this.matDialog.open(Vn,{data:e}).afterClosed().pipe(j(Boolean),S(this.destroyRef)).subscribe(()=>{this.restartServices=!0,this.startExportDisconnectJob(),this.cdr.markForCheck()})}handleDisconnectJobSuccess(e){if(this.isFormLoading=!1,this.dialogRef.close(!0),e.destroy){let n=this.translate.instant("Pool \xAB{pool}\xBB has been deleted successfully. All data on that pool was destroyed.",{pool:this.pool.name});this.snackbar.success(n)}else{let n=this.translate.instant("Pool \xAB{pool}\xBB has been exported successfully.",{pool:this.pool.name});this.snackbar.success(n)}}loadRelatedEntities(){Ze([this.api.call("pool.attachments",[this.pool.id]),this.api.call("pool.processes",[this.pool.id]),this.api.call("systemdataset.config"),this.api.call("pool.query",[[],{count:!0}]),this.store.select(Yi).pipe(ci(1)),this.api.call("failover.config")]).pipe(this.loader.withLoader(),this.errorHandler.withErrorHandler(),S(this.destroyRef)).subscribe(([e,n,o,f,y,D])=>{this.attachments=e,this.processes=n,this.organizeProcesses(n),this.systemConfig=o,this.totalPoolCount=f,this.isHaEnabled=y,this.failoverConfig=D,this.prepareForm(),this.cdr.markForCheck()})}prepareForm(){this.showSysDatasetWarning=this.pool.name===this.systemConfig?.pool,this.showUnknownStatusDetachWarning=this.pool.status===Z.Unknown,this.form.controls.destroy.valueChanges.pipe(S(this.destroyRef)).subscribe(()=>this.resetNameInputValidState())}selectOption(e){this.selectedOption.set(e),e&&(this.form.patchValue({destroy:e===nt.Delete,confirm:!1}),this.resetNameInputValidState()),this.cdr.markForCheck()}get isExportSelected(){return this.selectedOption()===nt.Export}get isDeleteSelected(){return this.selectedOption()===nt.Delete}canProceed(){return this.selectedOption()!==null&&this.form.valid&&!this.isFormLoading&&!this.isLastPoolInHaSystem()}get dependencyCount(){return this.attachments.length+this.process.knownProcesses.length+this.process.unknownProcesses.length}resetNameInputValidState(){this.form.controls.nameInput.reset(),this.form.controls.nameInput.setErrors(null)}organizeProcesses(e){this.process={knownProcesses:e.filter(n=>n.name&&n.name.trim()!==""),unknownProcesses:e.filter(n=>!n.name||n.name.trim()==="")}}static{this.\u0275fac=function(n){return new(n||t)}}static{this.\u0275cmp=P({type:t,selectors:[["ix-export-disconnect-modal"]],decls:31,vars:34,consts:[["mat-dialog-title","",1,"export-disconnect-modal-title"],["mode","indeterminate"],[1,"ix-form-container",3,"submit","formGroup"],["mat-dialog-content","",1,"export-disconnect-modal-content"],[1,"disconnect-options"],[1,"option-cards"],[1,"option-card","export-option",3,"click"],[1,"option-card","delete-option",3,"click"],[1,"selected-content"],["type","button","mat-button","","name","cancel_button","ixTest","cancel",3,"click"],["type","submit","mat-button","","ixTest","disconnect",3,"color","disabled",4,"ixRequiresRoles"],[1,"warnings-section"],[1,"warning","export-warning"],[1,"warning","delete-warning"],[1,"expansion-panel","ha-warning-panel",3,"expanded"],[1,"expansion-panel"],["formControlName","nameInput",3,"label"],[1,"warning-text"],[1,"warning-icon"],["name","alert","library","mdi","customSize","15px"],[1,"expansion-content"],[1,"ha-warning"],[1,"warning"],[1,"warning","system-dataset-warning"],[3,"innerHTML"],[1,"warning","unknown-status-warning"],[1,"attachments"],[1,"known-processes"],[1,"unknown-processes"],[1,"services"],[1,"service-name"],[1,"service-attachments"],[1,"process-will-be-terminated"],["formControlName","cascade",3,"label","tooltip"],["formControlName","confirm",3,"label","required"],["type","submit","mat-button","","ixTest","disconnect",3,"color","disabled"]],template:function(n,o){n&1&&(a(0,"h1",0),p(1),s(2,"translate"),r(),x(3,Eo,1,0,"mat-progress-bar",1),a(4,"form",2),C("submit",function(){return o.startExportDisconnectJob()}),a(5,"div",3)(6,"div",4)(7,"h4"),p(8),s(9,"translate"),r(),a(10,"div",5)(11,"div",6),C("click",function(){return o.selectOption(o.exportOption)}),a(12,"h3"),p(13),s(14,"translate"),r(),a(15,"p"),p(16),s(17,"translate"),r()(),a(18,"div",7),C("click",function(){return o.selectOption(o.deleteOption)}),a(19,"h3"),p(20),s(21,"translate"),r(),a(22,"p"),p(23),s(24,"translate"),r()()()(),x(25,Qo,12,9,"div",8),r(),a(26,"ix-form-actions")(27,"button",9),C("click",function(){return o.cancel()}),p(28),s(29,"translate"),r(),L(30,Ko,3,5,"button",10),r()()),n&2&&(i(),u(" ",K(2,15,"Disconnect Pool: {pool}",E(30,ri,o.pool.name)),`
6`),i(2),_(o.isFormLoading?3:-1),i(),m("formGroup",o.form),i(4),v(l(9,18,"Disconnect Options")),i(3),Xt("selected",o.isExportSelected),i(2),v(l(14,20,"Export Pool")),i(3),v(l(17,22,"Do this to import pool on another TrueNAS system")),i(2),Xt("selected",o.isDeleteSelected),i(2),v(l(21,24,"Delete Pool")),i(3),v(l(24,26,"Wipes all data stored in the pool")),i(2),_(o.selectedOption()?25:-1),i(3),u(" ",l(29,28,"Cancel")," "),i(2),m("ixRequiresRoles",E(32,wo,o.Role.PoolWrite)))},dependencies:[ke,It,re,ae,ne,oe,xe,me,de,lt,Le,$e,De,se,R,un,gn,hn,w,J,k,_e,M],styles:[`[_nghost-%COMP%]{display:block;max-width:800px;width:100%}[_nghost-%COMP%]  .mat-expanded .mat-expansion-panel-header span.mat-expansion-indicator{top:5px}[_nghost-%COMP%]  mat-panel-title{font-family:var(--font-family-header)}.export-disconnect-modal-content[_ngcontent-%COMP%]{max-height:83vh!important;overflow:auto!important}.warnings-section[_ngcontent-%COMP%]   .warning[_ngcontent-%COMP%]{font-size:14px}.export-disconnect-modal-title[_ngcontent-%COMP%]{overflow-wrap:break-word}.system-dataset-warning[_ngcontent-%COMP%]{margin-top:15px}
6.disconnect-options[_ngcontent-%COMP%]   h4[_ngcontent-%COMP%]{font-family:var(--font-family-header);font-weight:700;margin-bottom:16px}.option-cards[_ngcontent-%COMP%]{display:grid;gap:16px;grid-template-columns:1fr 1fr}@media(max-width:767px){.option-cards[_ngcontent-%COMP%]{grid-template-columns:1fr}}.option-card[_ngcontent-%COMP%]{background-color:var(--bg1);border:2px solid var(--alt-bg2);border-radius:8px;cursor:pointer;display:flex;flex-direction:column;justify-content:center;min-height:120px;padding:16px;text-align:center}.option-card[_ngcontent-%COMP%]   h3[_ngcontent-%COMP%]{font-family:var(--font-family-header);font-weight:700;margin:0 0 8px}.option-card[_ngcontent-%COMP%]   p[_ngcontent-%COMP%]{font-size:14px;margin:0;opacity:.7}.option-card.export-option[_ngcontent-%COMP%]{transition:.3s ease all}.option-card.export-option.selected[_ngcontent-%COMP%], .option-card.export-option[_ngcontent-%COMP%]:hover{background-color:color-mix(in srgb,var(--primary) 7%,transparent);border-color:var(--primary);transition:.3s ease all}.option-card.export-option.selected[_ngcontent-%COMP%]   h3[_ngcontent-%COMP%], .option-card.export-option[_ngcontent-%COMP%]:hover   h3[_ngcontent-%COMP%]{color:var(--primary)}.option-card.delete-option[_ngcontent-%COMP%]{transition:.3s ease all}.option-card.delete-option.selected[_ngcontent-%COMP%], .option-card.delete-option[_ngcontent-%COMP%]:hover{background-color:color-mix(in srgb,var(--red) 7%,transparent);border-color:var(--red);transition:.3s ease all}.option-card.delete-option.selected[_ngcontent-%COMP%]   h3[_ngcontent-%COMP%], .option-card.delete-option[_ngcontent-%COMP%]:hover   h3[_ngcontent-%COMP%]{color:var(--red)}.option-card.delete-option.selected[_ngcontent-%COMP%]   p[_ngcontent-%COMP%], .option-card.delete-option[_ngcontent-%COMP%]:hover   p[_ngcontent-%COMP%], .option-card.export-option.selected[_ngcontent-%COMP%]   p[_ngcontent-%COMP%], .option-card.export-option[_ngcontent-%COMP%]:hover   p[_ngcontent-%COMP%]{color:var(--fg2);opacity:1}.selected-content[_ngcontent-%COMP%]{margin-top:12px}.warnings-section[_ngcontent-%COMP%]{margin-bottom:24px}.warning-text[_ngcontent-%COMP%]{color:var(--yellow);font-family:var(--font-family-header);font-weight:700}.expansion-panel[_ngcontent-%COMP%]{margin-bottom:16px}.expansion-panel.ha-warning-panel[_ngcontent-%COMP%]     .mat-expansion-panel-header{border:1px solid var(--red)}.expansion-panel.ha-warning-panel[_ngcontent-%COMP%]     .warning-icon{align-items:center;display:flex;margin-right:5px}.expansion-panel.ha-warning-panel[_ngcontent-%COMP%]   .ha-warning[_ngcontent-%COMP%]   p[_ngcontent-%COMP%]{line-height:1.5;margin-bottom:12px}.expansion-panel.ha-warning-panel[_ngcontent-%COMP%]   .ha-warning[_ngcontent-%COMP%]   p[_ngcontent-%COMP%]:last-child{margin-bottom:0}.expansion-panel.ha-warning-panel[_ngcontent-%COMP%]   .ha-warning[_ngcontent-%COMP%]   p[_ngcontent-%COMP%]   strong[_ngcontent-%COMP%]{color:var(--red);font-weight:600}.expansion-panel[_ngcontent-%COMP%]  .mat-expansion-panel-header{background-color:var(--bg1);font-weight:500;padding:0 16px 3px}.expansion-panel[_ngcontent-%COMP%]  .mat-expansion-panel-header:hover, .expansion-panel[_ngcontent-%COMP%]  .mat-expansion-panel-header:focus{background-color:var(--bg1)!important}.expansion-panel[_ngcontent-%COMP%]  .mat-expansion-panel-body{background-color:var(--bg1);margin-top:8px;padding:8px 16px}.expansion-panel[_ngcontent-%COMP%]   .process-will-be-terminated[_ngcontent-%COMP%]{margin:15px 0 5px}.expansion-panel[_ngcontent-%COMP%]   .expansion-content[_ngcontent-%COMP%]   h4[_ngcontent-%COMP%]{font-family:var(--font-family-header);font-size:14px;font-weight:500;margin:0 0 12px}.expansion-panel[_ngcontent-%COMP%]   .expansion-content[_ngcontent-%COMP%]   ul[_ngcontent-%COMP%]{margin:8px 0;padding-left:20px}.expansion-panel[_ngcontent-%COMP%]   .expansion-content[_ngcontent-%COMP%]   ul[_ngcontent-%COMP%]   li[_ngcontent-%COMP%]{margin-bottom:4px}.expansion-panel[_ngcontent-%COMP%]   .expansion-content[_ngcontent-%COMP%]   .encrypted-pool-warning[_ngcontent-%COMP%]{align-items:center;border:1px solid var(--red);border-radius:4px;display:flex;font-size:14px;gap:12px;margin:16px 0;padding:12px 16px}.expansion-panel[_ngcontent-%COMP%]   .expansion-content[_ngcontent-%COMP%]   .encrypted-pool-warning[_ngcontent-%COMP%]   .warning-icon[_ngcontent-%COMP%]{color:var(--red);flex-shrink:0;font-size:20px;font-weight:700;margin-top:2px}.expansion-panel[_ngcontent-%COMP%]   .expansion-content[_ngcontent-%COMP%]   .encrypted-pool-warning[_ngcontent-%COMP%]   .warning-content[_ngcontent-%COMP%]{line-height:1.4}.expansion-panel[_ngcontent-%COMP%]   .expansion-content[_ngcontent-%COMP%]   .encrypted-pool-warning[_ngcontent-%COMP%]   .warning-content[_ngcontent-%COMP%]   strong[_ngcontent-%COMP%]{color:var(--red);font-weight:600}
7/*# sourceMappingURL=export-disconnect-modal.component-C2MMCGOI.css.map */`],changeDetection:0})}}return t})();var Yo=t=>({pool:t});function Xo(t,d){t&1&&(a(0,"button",5),p(1),s(2,"translate"),r()),t&2&&(i(),u(" ",l(2,1,"Save")," "))}var $t=(()=>{class t{constructor(){this.loader=c(Je),this.errorHandler=c(W),this.api=c(U),this.dialogRef=c(Ne),this.snackbar=c(ue),this.translate=c(F),this.pool=c(Me),this.destroyRef=c(N),this.requiredRoles=[$.PoolWrite],this.autotrimControl=new Di(!1),this.helptext=ge}ngOnInit(){this.autotrimControl.setValue(this.pool.autotrim.value==="on")}onSubmit(e){e.preventDefault(),this.api.job("pool.update",[this.pool.id,{autotrim:this.autotrimControl.value?ni.On:ni.Off}]).pipe(this.loader.withLoader(),this.errorHandler.withErrorHandler(),S(this.destroyRef)).subscribe({complete:()=>{this.snackbar.success(this.translate.instant("Pool options for {poolName}
7 successfully saved.",{poolName:this.pool.name})),this.dialogRef.close(!0)}})}static{this.\u0275fac=function(n){return new(n||t)}}static{this.\u0275cmp=P({type:t,selectors:[["ix-autotrim-dialog"]],decls:12,vars:18,consts:[["matDialogTitle",""],[1,"ix-form-container",3,"submit"],[3,"formControl","label","tooltip"],["mat-button","","type","button","ixTest","cancel",3,"matDialogClose"],["mat-button","","type","submit","color","primary","ixTest","save",4,"ixRequiresRoles"],["mat-button","","type","submit","color","primary","ixTest","save"]],template:function(n,o){n&1&&(a(0,"h1",0),p(1),s(2,"translate"),r(),a(3,"form",1),C("submit",function(y){return o.onSubmit(y)}),h(4,"ix-checkbox",2),s(5,"translate"),s(6,"translate"),a(7,"ix-form-actions")(8,"button",3),p(9),s(10,"translate"),r(),L(11,Xo,3,3,"button",4),r()()),n&2&&(i(),u(" ",K(2,7,"Pool Options for {pool}",E(16,Yo,o.pool.name)),`
8`),i(3),m("formControl",o.autotrimControl)("label",l(5,10,"Auto TRIM"))("tooltip",l(6,12,o.helptext.autotrimTooltip)),i(4),m("matDialogClose",!1),i(),u(" ",l(10,14,"Cancel")," "),i(2),m("ixRequiresRoles",o.requiredRoles))},dependencies:[ke,re,ae,ne,oe,Oi,$e,se,R,w,Fe,J,k,M],styles:[`[_nghost-%COMP%]{display:block;width:340px}
9/*# sourceMappingURL=autotrim-dialog.component-ERDPXMBX.css.map */`],changeDetection:0})}}return t})();var ie=(function(t){return t.Safe="SAFE",t.Warn="WARN",t.Faulted="FAULTED",t.Error="ERROR",t})(ie||{});function Zo(t,d){if(t&1&&h(0,"tn-icon",0),t&2){let e=g();m("tooltip",e.tooltip())}}function ea(t,d){if(t&1&&h(0,"tn-icon",1),t&2){let e=g();m("tooltip",e.tooltip())}}function ta(t,d){if(t&1&&h(0,"tn-icon",2),t&2){let e=g();m("tooltip",e.tooltip())}}function ia(t,d){if(t&1&&h(0,"tn-icon",3),t&2){let e=g();m("tooltip",e.tooltip())}}function na(t,d){if(t&1&&h(0,"tn-icon",3),t&2){let e=g();m("tooltip",e.tooltip())}}var Ke=(()=>{class t{constructor(){this.type=O.required(),this.tooltip=O.required(),this.poolCardIconType=ie}static{this.\u0275fac=function(n){return new(n||t)}}static{this.\u0275cmp=P({type:t,selectors:[["ix-pool-card-icon"]],inputs:{type:[1,"type"],tooltip:[1,"tooltip"]},decls:5,vars:1,consts:[["name","check-circle","library","mdi",1,"pool-icon","icon-online",3,"tooltip"],["name","alert-circle","library","mdi",1,"pool-icon","icon-warning",3,"tooltip"],["name","help-circle-outline","library","mdi",1,"pool-icon","icon-faulted",3,"tooltip"],["name","close-circle","library","mdi",1,"pool-icon","icon-error",3,"tooltip"]],template:function(n,o){if(n&1&&x(0,Zo,1,1,"tn-icon",0)(1,ea,1,1,"tn-icon",1)(2,ta,1,1,"tn-icon",2)(3,ia,1,1,"tn-icon",3)(4,na,1,1,"tn-icon",3),n&2){let f;_((f=o.type())===o.poolCardIconType.Safe?0:f===o.poolCardIconType.Warn?1:f===o.poolCardIconType.Faulted?2:f===o.poolCardIconType.Error?3:4)}},dependencies:[_e],styles:[`[_nghost-%COMP%]{display:flex}tn-icon.pool-icon.icon-online[_ngcontent-%COMP%]{color:var(--green)}tn-icon.pool-icon.icon-warning[_ngcontent-%COMP%]{color:var(--orange)}tn-icon.pool-icon.icon-faulted[_ngcontent-%COMP%]{color:var(--blue)}tn-icon.pool-icon.icon-error[_ngcontent-%COMP%]{color:var(--red)}
10/*# sourceMappingURL=pool-card-icon.component-BEBNWEAP.css.map */`],changeDetection:0})}}return t})();var Un={hierarchy:["Storage"],anchorRouterLink:["/storage"],elements:{topology:{hierarchy:["VDEVs"],synonyms:["Topology"]},viewVdevs:{hierarchy:["View VDEVs"]}}};var oa=(t,d)=>d.key;function aa(t,d){t&1&&(a(0,"span",8),p(1),s(2,"translate"),r()),t&2&&(i(),u("(",l(2,1,"Regular Tier"),")"))}function ra(t,d){if(t&1&&(a(0,"span",10),h(1,"tn-icon",12),r()),t&2){let e=g(2);m("matTooltip",e.topologyWarningsState.data)}}function sa(t,d){t&1&&(a(0,"span",13),h(1,"tn-icon",12),r(),a(2,"span",14),p(3),s(4,"translate"),r()),t&2&&(i(3),v(l(4,1,"Offline VDEVs")))}function la(t,d){if(t&1&&(a(0,"span",11),p(1),r()),t&2){let e=g(2);i(),v(e.topologyState.data.text)}}function pa(t,d){if(t&1&&(a(0,"div",6)(1,"b"),p(2),s(3,"translate"),x(4,aa,3,3,"span",8),r(),a(5,"div",9),x(6,ra,2,1,"span",10),x(7,sa,5,3)(8,la,2,1,"span",11),r()()),t&2){let e=g();i(2),u(" ",l(3,4,"Data VDEVs")," "),i(2),_(e.showTierLabels()?4:-1),i(2),_(e.topologyWarningsState.data&&!e.isPoolOffline()?6:-1),i(),_(e.isPoolOffline()?7:8)}}function ca(t,d){if(t&1&&(a(0,"span",8),p(1),s(2,"translate"),r()),t&2){let e=g(2).$implicit;i(),u("(",l(2,1,e.tierLabelKey),")")}}function da(t,d){if(t&1&&(a(0,"span",10),h(1,"tn-icon",12),r()),t&2){let e=g(2).$implicit,n=g();m("matTooltip",n.topologyWarningsState[e.key])}}
10function ma(t,d){if(t&1&&(a(0,"div",6)(1,"b"),p(2),s(3,"translate"),x(4,ca,3,3,"span",8),r(),a(5,"div",9),x(6,da,2,1,"span",10),a(7,"span",11),p(8),r()()()),t&2){let e=g().$implicit,n=g();i(2),u(" ",l(3,4,e.titleKey)," "),i(2),_(e.tierLabelKey&&n.showTierLabels()?4:-1),i(2),_(n.topologyWarningsState[e.key]?6:-1),i(2),v(n.topologyState[e.key].text)}}function ua(t,d){if(t&1&&x(0,ma,9,6,"div",6),t&2){let e=d.$implicit,n=g();_(n.topologyState[e.key].assigned&&!n.isPoolOffline()&&!(e.hidden&&e.hidden())?0:-1)}}function ga(t,d){t&1&&(a(0,"div",7)(1,"div",15),p(2),s(3,"translate"),r(),a(4,"div",16),p(5),s(6,"translate"),r()()),t&2&&(i(2),u(" ",l(3,2,"Pool configuration complete.")," "),i(3),u(" ",l(6,4,"Optional VDEV types like cache, log, or spare can improve performance.")," "))}var An=(()=>{class t{constructor(){this.router=c(Pe),this.translate=c(F),this.storageService=c(pn),this.tierService=c(mt),this.poolState=O.required(),this.disks=O([]),this.tierEnabled=this.tierService.tierEnabled,this.showTierLabels=b(()=>this.tierEnabled()&&this.poolState().topology?.special?.length>0),this.searchableElements=Un,this.vdevsHelpTooltip=this.translate.instant("A pool is made of VDEVs (virtual devices). Each VDEV is a group of drives working together"),this.notAssignedDev=this.translate.instant("VDEVs not assigned"),this.emptyVdevState={assigned:!1,text:this.notAssignedDev},this.topologyState={data:this.emptyVdevState,special:this.emptyVdevState,log:this.emptyVdevState,cache:this.emptyVdevState,spare:this.emptyVdevState,dedup:this.emptyVdevState},this.topologyWarningsState={data:"",special:"",log:"",cache:"",spare:"",dedup:""},this.otherVdevRows=[{key:"special",titleKey:"Special VDEVs",tierLabelKey:"Performance Tier"},{key:"log",titleKey:"Log VDEVs"},{key:"cache",titleKey:"Cache VDEVs"},{key:"spare",titleKey:"Spare VDEVs",hidden:()=>this.isDraidLayoutDataVdevs},{key:"dedup",titleKey:"Dedup VDEVs"}],this.iconType=b(()=>this.isStatusError(this.poolState())?ie.Error:this.isStatusWarning(this.poolState())||!this.poolState().healthy?ie.Warn:ie.Safe),this.iconTooltip=b(()=>this.isStatusError(this.poolState())||this.isStatusWarning(this.poolState())?this.translate.instant("Pool contains {status} Data VDEVs",{status:this.poolState().status}):this.poolState().healthy?this.translate.instant("Everything is fine"):this.translate.instant("Pool is not healthy")),this.noOtherVdevTypes=b(()=>[this.topologyState.special,this.topologyState.log,this.topologyState.cache,this.topologyState.spare,this.topologyState.dedup].every(n=>!n.assigned)),this.isPoolOffline=b(()=>this.poolState()?.status===Z.Offline)}get isDraidLayoutDataVdevs(){return/\bDRAID\b/.test(this.topologyState.data.text)}ngOnChanges(){this.parseTopology(this.poolState().topology)}ngOnInit(){this.parseTopology(this.poolState().topology)}parseTopology(e){e&&(this.topologyWarningsState.data=this.parseDevsWarnings(e.data,ee.Data),this.topologyWarningsState.log=this.parseDevsWarnings(e.log,ee.Log),this.topologyWarningsState.cache=this.parseDevsWarnings(e.cache,ee.Cache),this.topologyWarningsState.spare=this.parseDevsWarnings(e.spare,ee.Spare),this.topologyWarningsState.special=this.parseDevsWarnings(e.special,ee.Special),this.topologyWarningsState.dedup=this.parseDevsWarnings(e.dedup,ee.Dedup),this.topologyState.data=this.parseDevs(e.data,ee.Data,this.topologyWarningsState.data),this.topologyState.log=this.parseDevs(e.log,ee.Log,this.topologyWarningsState.log),this.topologyState.cache=this.parseDevs(e.cache,ee.Cache,this.topologyWarningsState.cache),this.topologyState.spare=this.parseDevs(e.spare,ee.Spare,this.topologyWarningsState.spare),this.topologyState.special=this.parseDevs(e.special,ee.Special,this.topologyWarningsState.special),this.topologyState.dedup=this.parseDevs(e.dedup,ee.Dedup,this.topologyWarningsState.dedup))}parseDevs(e,n,o){if(!e.length)return this.emptyVdevState;let f="",y=0,D=this.storageService.getVdevWidths(e),T=this.storageService.isMixedWidth(D),te=[ee.Spare,ee.Cache].includes(n);!T&&!te&&(y=Array.from(D.values())[0]);let Ee=e[0]?.type,be=e[0]?.children?.length?this.disks()?.find(Ue=>Ue.name===e[0]?.children[0]?.disk)?.size:this.disks()?.find(Ue=>Ue.name===e[0]?.disk)?.size;f=`${e.length} x `,y&&(f+=this.translate.instant("{type} | {vdevWidth} wide | ",{type:Ee,vdevWidth:y}));let Ye=o?.includes(ei.MixedVdevCapacity)||o?.includes(ei.MixedDiskCapacity);return!Ye&&be?f+=_t(be):Ye?f+=this.translate.instant("Mixed Capacity"):f+="?",{assigned:!0,text:f}}parseDevsWarnings(e,n){let o="",f=this.disks().map(D=>this.dashboardDiskToDisk(D)),y=this.storageService.validateVdevs(n,e,f);return y.length===1&&(o=y[0]),y.length>1&&(o=y.join(", ")),o}isStatusError(e){return[Z.Faulted,Z.Unavailable,Z.Removed].includes(e.status)}isStatusWarning(e){return[Z.Locked,Z.Unknown,Z.Offline,Z.Degraded].includes(e.status)}dashboardDiskToDisk(e){let n={};return Object.keys(e).forEach(f=>{f==="alerts"||f==="tempAggregates"||(n[f]=e[f])}),n}static{this.\u0275fac=function(n){return new(n||t)}}static{this.\u0275cmp=P({type:t,selectors:[["ix-vdevs-card"]],inputs:{poolState:[1,"poolState"],disks:[1,"disks"]},features:[We],decls:17,vars:13,consts:[[1,"card",3,"ixUiSearch"],["mat-card-title",""],["name","help-circle-outline","library","mdi",1,"pool-icon",3,"tnTooltip"],[3,"type","tooltip"],["mat-button","","ixTest","manage-vdevs",3,"click","ixUiSearch"],[1,"content-container"],[1,"vdev-line"],[1,"empty-vdev-state"],[1,"tier-label"],[1,"vdev-stats"],[1,"warning",3,"matTooltip"],[1,"vdev-value"],["name","alert-circle","library","mdi",1,"pool-icon","icon-warning"],[1,"warning"],[1,"offline-data-vdevs"],[1,"empty-message"],[1,"empty-description"]],template:function(n,o){n&1&&(a(0,"mat-card",0)(1,"mat-card-header")(2,"h3",1)(3,"span"),p(4),s(5,"translate"),r(),h(6,"tn-icon",2)(7,"ix-pool-card-icon",3),r(),a(8,"button",4),C("click",function(){return o.router.navigate(["/storage",o.poolState().id,"vdevs"])}),p(9),s(10,"translate"),r()(),a(11,"mat-card-content")(12,"div",5),x(13,pa,9,6,"div",6),A(14,ua,1,1,null,null,oa),x(16,ga,7,6,"div",7),r()()()),n&2&&(m("ixUiSearch",o.searchableElements.elements.topology),i(4),u(" ",l(5,9,"VDEVs")," "),i(2),m("tnTooltip",o.vdevsHelpTooltip),i(),m("type",o.iconType())("tooltip",o.iconTooltip()),i(),m("ixUiSearch",o.searchableElements.elements.viewVdevs),i(),u(" ",l(10,11,"View VDEVs")," "),i(4),_(o.topologyState.data.assigned?13:-1),i(),q(o.otherVdevRows),i(2),_(o.noOtherVdevTypes()?16:-1))},dependencies:[Y,Oe,ve,Ce,Ke,R,w,X,Et,_e,Ri,k,M],styles:[`@keyframes _ngcontent-%COMP%_blinker{50%{opacity:.1}}@keyframes _ngcontent-%COMP%_fade-in-animation{0%{opacity:0}
10to{opacity:1}}@keyframes _ngcontent-%COMP%_pulse-box-shadow-animation{0%,to{box-shadow:none;outline:0}50%{box-shadow:0 0 10px 10px var(--primary-lighter);outline:2px solid var(--primary)}}[_nghost-%COMP%]{display:flex}tn-icon.pool-icon[_ngcontent-%COMP%]{cursor:help;display:inline-flex;height:16px;vertical-align:middle;width:16px}.card[_ngcontent-%COMP%]{border:none;border-radius:0;margin:0}.card[_ngcontent-%COMP%]   mat-card-header[_ngcontent-%COMP%]{align-items:center;border-bottom:1px solid var(--lines);justify-content:space-between;min-height:40px;padding:8px 8px 8px 16px}.card[_ngcontent-%COMP%]   mat-card-header[_ngcontent-%COMP%]   .mat-mdc-button[_ngcontent-%COMP%]{flex-shrink:0}.card[_ngcontent-%COMP%]   .mat-mdc-card-title[_ngcontent-%COMP%]{align-items:center;column-gap:5px;display:flex;font-size:1.65rem;margin-bottom:0}@media(max-width:3132px){.card[_ngcontent-%COMP%]   .mat-mdc-card-title[_ngcontent-%COMP%]{font-size:1.728em}}.card[_ngcontent-%COMP%]   mat-card-content[_ngcontent-%COMP%]{margin:0;padding:16px!important}.card[_ngcontent-%COMP%]   mat-card-content[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{padding:0}.card[_ngcontent-%COMP%]   ngx-skeleton-loader[_ngcontent-%COMP%]{flex:1}.card[_ngcontent-%COMP%]   .details-item[_ngcontent-%COMP%]{animation-duration:.35s;animation-fill-mode:backwards;animation-name:_ngcontent-%COMP%_fade-in-animation;align-items:center;display:flex;flex-direction:row;flex-wrap:wrap;margin-bottom:4px}.card[_ngcontent-%COMP%]   .details-item[_ngcontent-%COMP%]:first-child{margin-top:0}.card[_ngcontent-%COMP%]   .details-item[_ngcontent-%COMP%]   .label[_ngcontent-%COMP%]{font-weight:700;margin-right:5px;white-space:normal}.card[_ngcontent-%COMP%]   .details-item[_ngcontent-%COMP%]   .value[_ngcontent-%COMP%]{font-weight:400;margin-right:5px;white-space:normal}.card[_ngcontent-%COMP%]   .details-item[_ngcontent-%COMP%]   a[_ngcontent-%COMP%]{color:var(--primary);cursor:pointer;margin-left:auto;max-width:100%;overflow:hidden;text-decoration:underline;text-overflow:ellipsis;white-space:nowrap}.card[_ngcontent-%COMP%]   .details-item[_ngcontent-%COMP%]   ngx-skeleton-loader[_ngcontent-%COMP%]{display:inline-block;flex:0;height:20px;min-width:30px;width:30%}.card[_ngcontent-%COMP%]   .details-item[_ngcontent-%COMP%]   ngx-skeleton-loader[_ngcontent-%COMP%]     .loader{margin-bottom:0}.card[_ngcontent-%COMP%]   mat-card-actions[_ngcontent-%COMP%]{border-top:1px solid var(--lines);box-sizing:border-box;display:flex;justify-content:flex-end;margin:0;padding:8px 8px 8px 16px}.card[_ngcontent-%COMP%]   mat-card-actions[_ngcontent-%COMP%]   .mdc-button--outlined[_ngcontent-%COMP%]{border:1px solid var(--alt-fg2);border-radius:0;opacity:.8}.card[_ngcontent-%COMP%]   mat-card-actions[_ngcontent-%COMP%]   .mdc-button--outlined[_ngcontent-%COMP%]:hover{background-color:var(--hover-bg)!important}.card[_ngcontent-%COMP%]{flex:1}.card[_ngcontent-%COMP%]   .content-container[_ngcontent-%COMP%]{display:flex;flex-direction:column;height:100%}.card[_ngcontent-%COMP%]   .vdev-line[_ngcontent-%COMP%]{align-items:center;display:flex;margin:8px 0;place-content:center space-between}.card[_ngcontent-%COMP%]   .vdev-line[_ngcontent-%COMP%]:first-child{margin-top:0}.card[_ngcontent-%COMP%]   .vdev-stats[_ngcontent-%COMP%]{align-items:center;display:flex;place-content:center}.card[_ngcontent-%COMP%]   .empty-vdev-state[_ngcontent-%COMP%]{display:flex;flex-direction:column;margin:8px 0}.card[_ngcontent-%COMP%]   .empty-vdev-state[_ngcontent-%COMP%]   .empty-description[_ngcontent-%COMP%]{opacity:.7}.tier-label[_ngcontent-%COMP%]{font-weight:400;opacity:.7}.warning[_ngcontent-%COMP%]{display:flex;padding:0 6px}
11/*# sourceMappingURL=vdevs-card.component-35TRXT6B.css.map */`],changeDetection:0})}}return t})();var qn={arePoolsLoading:!1,isLoadingPoolDetails:!1,pools:[],scrubs:[],rootDatasets:{},disks:[]},He=(()=>{class t extends Ki{scrubForPool(e){return this.state().scrubs.find(n=>n.pool===e.id)}constructor(){super(qn),this.errorHandler=c(W),this.api=c(U),this.poolStoreService=c(bn),this.pools=b(()=>this.state().pools),this.arePoolsLoading=b(()=>this.state().arePoolsLoading),this.isLoadingPoolDetails=b(()=>this.state().isLoadingPoolDetails),this.disks=b(()=>this.state().disks),this.rootDatasets$=this.select(e=>e.rootDatasets),this.disksByPool=b(()=>ht(this.state().disks,e=>e.pool)),this.loadDashboard=this.effect(e=>e.pipe(qe(()=>{this.poolStoreService.invalidate(),this.patchState(Ae(Re({},qn),{arePoolsLoading:!0,isLoadingPoolDetails:!0}))}),pe(()=>Ze([this.loadPoolsAndRootDatasets(),this.loadPoolDetails()]).pipe(li(n=>(this.patchState({arePoolsLoading:!1,isLoadingPoolDetails:!1}),this.errorHandler.showErrorModal(n),G(null)))))))}loadPoolsAndRootDatasets(){return gt([this.api.callAndSubscribe("pool.query",[[],{extra:{is_upgraded:!0}}]),this.api.call("pool.dataset.query",[[],{extra:{retrieve_children:!1}}]),this.api.call("zpool.query",[{properties:["class_normal_usable","class_normal_used","class_normal_available","class_
11special_usable","class_special_used","class_special_available"]}])]).pipe(qe(([e,n,o])=>{let f=Zt(o,D=>D.name),y=e.map(D=>{let T=f[D.name];if(!T)return D;let te=be=>Number(be??0),Ee=T.properties.class_special_usable?.value;return Ae(Re({},D),{used:te(T.properties.class_normal_used?.value)||D.used,available:te(T.properties.class_normal_available?.value)||D.available,special_class_used:te(T.properties.class_special_used?.value),special_class_available:te(T.properties.class_special_available?.value),special_class_usable:Ee==null?void 0:Number(Ee)})});this.patchState({arePoolsLoading:!1,pools:Li(y,D=>D.name),rootDatasets:Zt(n,D=>D.id)})}))}loadPoolDetails(){return Ze([this.loadDisks().pipe(pe(this.getDashboardDataForDisks.bind(this)),pe(this.processDisks.bind(this))),this.api.call("pool.scrub.query")]).pipe(qe(([e,n])=>{this.patchState({scrubs:n,disks:[...e],isLoadingPoolDetails:!1})}))}loadDisks(){return this.api.call("disk.query",[[],{extra:{pools:!0}}])}getDashboardDataForDisks(e){let n=e.map(o=>o.name);return gt({disks:G(e),alerts:this.api.call("disk.temperature_alerts",[n]),tempAgg:this.api.call("disk.temperature_agg",[n,14])})}processDisks({disks:e,alerts:n,tempAgg:o}){let f=e.map(D=>Ae(Re({},D),{alerts:[],tempAggregates:D.tempAggregates}));for(let D of n){let te=D.args.device.split("/").reverse()[0];f.find(be=>be.name===te)?.alerts?.push(D)}let y=Object.keys(o);for(let D of y){let T=f.find(te=>te.devname===D);T&&(T.tempAggregates=Re({},o[D]))}return G(f)}static{this.\u0275fac=function(n){return new(n||t)}}static{this.\u0275prov=hi({token:t,factory:t.\u0275fac})}}return t})();var Hn={hierarchy:["Storage"],anchorRouterLink:["/storage"],elements:{diskHealth:{hierarchy:["Disk Health"]}}};function Jt(t){if(!t?.topology)return[];let d=[];return Array.from(Object.values(t.topology)).filter(e=>e.length).forEach(e=>{e.forEach(n=>{n?.disk&&cn(n)?d.push(n.disk):n?.children.filter(o=>o.disk).forEach(o=>{d.push(o.disk)})})}),d}var ha=()=>["/storage","disks"],fa=()=>["/reportsdashboard","disk"],xa=t=>({disks:t});function _a(t,d){if(t&1&&(p(0),s(1,"number")),t&2){let e=g(2);fe(" ",l(1,2,e.diskState.highestTemperature)," ",e.diskState.unit," ")}}function Ca(t,d){t&1&&(p(0),s(1,"translate")),t&2&&u(" ",l(1,1,"No Data")," ")}function va(t,d){if(t&1&&(p(0),s(1,"number")),t&2){let e=g(2);fe(" ",l(1,2,e.diskState.lowestTemperature)," ",e.diskState.unit," ")}}function ba(t,d){t&1&&(p(0),s(1,"translate")),t&2&&u(" ",l(1,1,"No Data")," ")}function ya(t,d){if(t&1&&(p(0),s(1,"number")),t&2){let e=g(2);fe(" ",l(1,2,e.diskState.averageTemperature)," ",e.diskState.unit," ")}}function Pa(t,d){t&1&&(p(0),s(1,"translate")),t&2&&u(" ",l(1,1,"No Data")," ")}function Sa(t,d){if(t&1&&(a(0,"div",5)(1,"div",6),p(2),s(3,"translate"),r(),a(4,"div",7),x(5,_a,2,4)(6,Ca,2,3),r()(),a(7,"div",5)(8,"div",6),p(9),s(10,"translate"),r(),a(11,"div",7),x(12,va,2,4)(13,ba,2,3),r()(),a(14,"div",5)(15,"div",6),p(16),s(17,"translate"),r(),a(18,"div",7),x(19,ya,2,4)(20,Pa,2,3),r(),a(21,"a",8),p(22),s(23,"translate"),r()()),t&2){let e=g();i(2),u("",l(3,9,"Highest Temperature"),":"),i(3),_(e.isHighestTempReady?5:6),i(4),u("",l(10,11,"Lowest Temperature"),":"),i(3),_(e.isLowestTempReady?12:13),i(4),u("",l(17,13,"Average Disk Temperature"),":"),i(3),_(e.isAverageTempReady?19:20),i(2),m("routerLink",je(17,fa))("queryParams",E(18,xa,e.disksNames)),i(),u(" ",l(23,15,"View Disk Reports")," ")}}function Ma(t,d){t&1&&(a(0,"div",5)(1,"div",6),p(2),s(3,"translate"),r()()),t&2&&(i(2),u("",l(3,1,"No disk temperature is available"),"."))}var zn=(()=>{class t{constructor(){this.translate=c(F),this.poolState=O.required(),this.disks=O([]),this.searchableElements=Hn,this.diskState={highestTemperature:null,lowestTemperature:null,averageTemperature:null,alerts:0,unit:xn.Celsius}}get disksNames(){return Jt(this.poolState())}get isTemperatureDataAvailable(){return!!(this.diskState.highestTemperature&&this.diskState.lowestTemperature&&this.diskState.averageTemperature)}ngOnChanges(){this.ngOnInit()}ngOnInit(){this.disks()&&(this.diskState.alerts=this.disks().reduce((e,n)=>e+n.alerts.length,0),this.loadTemperatures())}get isAverageTempReady(){return this.diskState.averageTemperature!==null&&!Number.isNaN(this.diskState.averageTemperature)}get isHighestTempReady(){return this.diskState.highestTemperature!==null&&!Number.isNaN(this.diskState.highestTemperature)}get isLowestTempReady(){return this.diskState.lowestTemperature!==null&&!Number.isNaN(this.diskState.lowestTemperature)}get iconType(){return this.diskState.alerts?ie.Warn:ie.Safe}get iconTooltip(){return this.diskState.alerts?this.translate.instant("Pool Disks have {alerts} alerts.",{alerts:this.diskState.alerts}):this.translate.instant("Everything is fine")}loadTemperatures(){let e=0,n=0;
11this.disks().forEach(o=>{o.tempAggregates&&(this.diskState.highestTemperature===null?this.diskState.highestTemperature=o.tempAggregates.max:this.diskState.highestTemperature=Math.max(this.diskState.highestTemperature,o.tempAggregates.max),this.diskState.lowestTemperature===null?this.diskState.lowestTemperature=o.tempAggregates.min:this.diskState.lowestTemperature=Math.min(this.diskState.lowestTemperature,o.tempAggregates.min),e+=o.tempAggregates.avg,n++)}),this.diskState.averageTemperature=e/n}static{this.\u0275fac=function(n){return new(n||t)}}static{this.\u0275cmp=P({type:t,selectors:[["ix-disk-health-card"]],inputs:{poolState:[1,"poolState"],disks:[1,"disks"]},features:[We],decls:19,vars:18,consts:[[1,"card",3,"ixUiSearch"],["mat-card-title",""],[3,"type","tooltip"],["mat-button","","ixTest","view-disks",3,"routerLink"],[1,"content"],[1,"details-item"],[1,"label"],[1,"value"],["ixTest","view-disk-reports",3,"routerLink","queryParams"]],template:function(n,o){n&1&&(a(0,"mat-card",0)(1,"mat-card-header")(2,"h3",1),p(3),s(4,"translate"),h(5,"ix-pool-card-icon",2),r(),a(6,"a",3),p(7),s(8,"translate"),r()(),a(9,"mat-card-content",4)(10,"div",5)(11,"div",6),p(12),s(13,"translate"),r(),a(14,"div",7),p(15),s(16,"number"),r()(),x(17,Sa,24,20)(18,Ma,4,3,"div",5),r()()),n&2&&(m("ixUiSearch",o.searchableElements.elements.diskHealth),i(3),u(" ",l(4,9,"Disk Health")," "),i(2),m("type",o.iconType)("tooltip",o.iconTooltip),i(),m("routerLink",je(17,ha)),i(),u(" ",l(8,11,"View Disks")," "),i(5),u(" ",l(13,13,"Disks temperature related alerts"),": "),i(3),u(" ",l(16,15,o.diskState.alerts)," "),i(2),_(o.isTemperatureDataAvailable?17:18))},dependencies:[Y,Oe,ve,Ce,Ke,kt,w,st,X,k,M,Pt],styles:[`@keyframes _ngcontent-%COMP%_blinker{50%{opacity:.1}}@keyframes _ngcontent-%COMP%_fade-in-animation{0%{opacity:0}to{opacity:1}}@keyframes _ngcontent-%COMP%_pulse-box-shadow-animation{0%,to{box-shadow:none;outline:0}50%{box-shadow:0 0 10px 10px var(--primary-lighter);outline:2px solid var(--primary)}}[_nghost-%COMP%]{display:flex}.card[_ngcontent-%COMP%]{border:none;border-radius:0;margin:0}.card[_ngcontent-%COMP%]   mat-card-header[_ngcontent-%COMP%]{align-items:center;border-bottom:1px solid var(--lines);justify-content:space-between;min-height:40px;padding:8px 8px 8px 16px}.card[_ngcontent-%COMP%]   mat-card-header[_ngcontent-%COMP%]   .mat-mdc-button[_ngcontent-%COMP%]{flex-shrink:0}.card[_ngcontent-%COMP%]   .mat-mdc-card-title[_ngcontent-%COMP%]{align-items:center;column-gap:5px;display:flex;font-size:1.65rem;margin-bottom:0}@media(max-width:3132px){.card[_ngcontent-%COMP%]   .mat-mdc-card-title[_ngcontent-%COMP%]{font-size:1.728em}}.card[_ngcontent-%COMP%]   mat-card-content[_ngcontent-%COMP%]{margin:0;padding:16px!important}.card[_ngcontent-%COMP%]   mat-card-content[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{padding:0}.card[_ngcontent-%COMP%]   ngx-skeleton-loader[_ngcontent-%COMP%]{flex:1}.card[_ngcontent-%COMP%]   .details-item[_ngcontent-%COMP%]{animation-duration:.35s;animation-fill-mode:backwards;animation-name:_ngcontent-%COMP%_fade-in-animation;align-items:center;display:flex;flex-direction:row;flex-wrap:wrap;margin-bottom:4px}.card[_ngcontent-%COMP%]   .details-item[_ngcontent-%COMP%]:first-child{margin-top:0}.card[_ngcontent-%COMP%]   .details-item[_ngcontent-%COMP%]   .label[_ngcontent-%COMP%]{font-weight:700;margin-right:5px;white-space:normal}.card[_ngcontent-%COMP%]   .details-item[_ngcontent-%COMP%]   .value[_ngcontent-%COMP%]{font-weight:400;margin-right:5px;white-space:normal}.card[_ngcontent-%COMP%]   .details-item[_ngcontent-%COMP%]   a[_ngcontent-%COMP%]{color:var(--primary);cursor:pointer;margin-left:auto;max-width:100%;overflow:hidden;text-decoration:underline;text-overflow:ellipsis;white-space:nowrap}.card[_ngcontent-%COMP%]   .details-item[_ngcontent-%COMP%]   ngx-skeleton-loader[_ngcontent-%COMP%]{display:inline-block;flex:0;height:20px;min-width:30px;width:30%}.card[_ngcontent-%COMP%]   .details-item[_ngcontent-%COMP%]   ngx-skeleton-loader[_ngcontent-%COMP%]     .loader{margin-bottom:0}.card[_ngcontent-%COMP%]   mat-card-actions[_ngcontent-%COMP%]{border-top:1px solid var(--lines);box-sizing:border-box;display:flex;justify-content:flex-end;margin:0;padding:8px 8px 8px 16px}.card[_ngcontent-%COMP%]   mat-card-actions[_ngcontent-%COMP%]   .mdc-button--outlined[_ngcontent-%COMP%]{border:1px solid var(--alt-fg2);border-radius:0;opacity:.8}.card[_ngcontent-%COMP%]   mat-card-actions[_ngcontent-%COMP%]   .mdc-button--outlined[_ngcontent-%COMP%]:hover{background-color:var(--hover-bg)!important}.card[_ngcontent-%COMP%]{display:flex;flex:1;flex-direction:column}.card[_ngcontent-%COMP%]   .content-container[_ngcontent-%COMP%]{height:100%}.card[_ngcontent-%COMP%]   .content[_ngcontent-%COMP%]{display:flex;flex-direction:column}.card[_ngcontent-%COMP%]   .details-item[_ngcontent-%COMP%]{margin:8px 0}.header[_ngcontent-%COMP%]{align-items:center;display:flex;justify-content:space-between}
12/*# sourceMappingURL=disk-health-card.component-GXJIEV2O.css.map */`],changeDetection:0})}}return t})();var Wn={hierarchy:["Storage"],anchorRouterLink:["/storage"],elements:{usage:{hierarchy:["Usage"]}}};var ka=t=>[t,"view-datasets"],Da=t=>["/","datasets",t],Oa=t=>[t,"view-disk-reports"],wa=()=>["/reportsdashboard","disk"],Ta=t=>({disks:t}),Ea=(t,d,e)=>({used:t,available:d,reserved:e}),Ra=(t,d)=>({used:t,available:d});function Ia(t,d){t&1&&(a(0,"div",7)(1,"span")(2,"b"),p(3),s(4,"translate"),r(),p(5),s(6,"translate"),r()()),t&2&&(i(3),u("",l(4,2,"Warning"),":"),i(2),u(" ",l(6,4,"Low Capacity")," "))}function Ba(t,d){if(t&1&&(a(0,"ul",12)(1,"li",15)(2,"span",16)(3,"b"),p(4),s(5,"translate"),r(),a(6,"span",11),p(7),s(8,"ixFileSize"),r()()(),a(9,"li",15)(10,"span",17)(11,"b"),p(12),s(13,"translate"),r(),a(14,"span",11),p(15),s(16,"ixFileSize"),r()()()()),t&2){let e=g();i(4),u("",l(5,4,"Used"),":"),i(3),u(" ",l(8,6,e.used())," "),i(5),u("",l(13,8,"Available"),":"),i(3),u(" ",l(16,10,e.available())," ")}}function Na(t,d){if(t&1&&h(0,"div",31),t&2){let e=g(3);at("width",e.tierBreakdown().performance.reservedPercent,"%")}}function Va(t,d){if(t&1&&(a(0,"div",18)(1,"div",20)(2,"span",21),p(3),s(4,"translate"),r()(),a(5,"div",22),s(6,"ixFileSize"),s(7,"ixFileSize"),s(8,"ixFileSize"),s(9,"translate"),x(10,Na,1,2,"div",23),h(11,"div",24)(12,"div",25),r(),a(13,"div",26)(14,"span",27),h(15,"span",28),p(16),s(17,"ixFileSize"),s(18,"translate"),r(),a(19,"span",27),h(20,"span",29),p(21),s(22,"ixFileSize"),s(23,"translate"),r(),a(24,"span",27),h(25,"span",30),p(26),s(27,"ixFileSize"),s(28,"translate"),r()()()),t&2){let e=g(2);i(3),v(l(4,13,"Performance")),i(2),we("aria-label",K(9,21,"Performance tier: {used} used, {available} available, {reserved} reserved for metadata",yi(36,Ea,l(6,15,e.performanceUsed()),l(7,17,e.performanceAvailable()),l(8,19,e.performanceReserved())))),i(5),_(e.tierBreakdown().performance.reservedPercent>0?10:-1),i(),at("width",e.tierBreakdown().performance.usedPercent,"%"),i(),at("width",e.tierBreakdown().performance.availablePercent,"%"),i(4),fe(" ",l(17,24,e.performanceUsed())," ",l(18,26,"Used")," "),i(5),fe(" ",l(22,28,e.performanceAvailable())," ",l(23,30,"Available")," "),i(5),fe(" ",l(27,32,e.performanceReserved())," ",l(28,34,"Reserved")," ")}}function Fa(t,d){t&1&&(a(0,"div",19)(1,"div",20)(2,"span",21),p(3),s(4,"translate"),r()(),a(5,"span",32),p(6),s(7,"translate"),r()()),t&2&&(i(3),v(l(4,2,"Performance")),i(3),v(l(7,4,"No allocation yet")))}function La(t,d){if(t&1&&(a(0,"div",18)(1,"div",20)(2,"span",21),p(3),s(4,"translate"),r()(),a(5,"div",22),s(6,"ixFileSize"),s(7,"ixFileSize"),s(8,"translate"),h(9,"div",33)(10,"div",34),r(),a(11,"div",26)(12,"span",27),h(13,"span",35),p(14),s(15,"ixFileSize"),s(16,"translate"),r(),a(17,"span",27),h(18,"span",36),p(19),s(20,"ixFileSize"),s(21,"translate"),r()()()),t&2){let e=g(2);i(3),v(l(4,10,"Regular")),i(2),we("aria-label",K(8,16,"Regular tier: {used} used, {available} available",bi(27,Ra,l(6,12,e.regularUsed()),l(7,14,e.regularAvailable())))),i(4),at("width",e.tierBreakdown().regular.usedPercent,"%"),i(),at("width",e.tierBreakdown().regular.availablePercent,"%"),i(4),fe(" ",l(15,19,e.regularUsed())," ",l(16,21,"Used")," "),i(5),fe(" ",l(20,23,e.regularAvailable())," ",l(21,25,"Available")," ")}}function Ua(t,d){if(t&1&&(a(0,"div",13),x(1,Va,29,40,"div",18)(2,Fa,8,6,"div",19),x(3,La,22,30,"div",18),r()),t&2){let e=g();i(),_(e.tierBreakdown().performance.hasData?1:2),i(2),_(e.tierBreakdown().regular.hasData?3:-1)}}var jn=(()=>{class t{constructor(){this.themeService=c(Ji),this.translate=c(F),this.tier
12Service=c(mt),this.poolState=O.required(),this.tierEnabled=this.tierService.tierEnabled,this.reservePct=this.tierService.metadataReservePct,this.searchableElements=Wn,this.isLowCapacity=b(()=>this.usedPercentage()>=80),this.disks=b(()=>Jt(this.poolState())),this.used=b(()=>this.regularUsed()+this.performanceUsed()),this.available=b(()=>this.regularAvailable()+this.performanceAvailable()),this.capacity=b(()=>this.used()+this.available()),this.usedPercentage=b(()=>{let e=this.capacity(),n=this.used();return e?n/e*100:0}),this.iconType=b(()=>this.isLowCapacity()?ie.Warn:ie.Safe),this.iconTooltip=b(()=>this.isLowCapacity()?this.translate.instant("Pool is using more than {maxPct}% of available space",{maxPct:80}):this.translate.instant("Everything is fine")),this.hasSpecialVdev=b(()=>this.poolState().topology?.special?.length>0),this.showTierBreakdown=b(()=>this.tierEnabled()&&this.hasSpecialVdev()),this.chartSegments=b(()=>{if(!this.showTierBreakdown())return;let e=this.capacity();if(!e)return;let n=Math.min(100,Math.max(0,this.performanceUsed()/e*100)),o=Math.min(100-n,Math.max(0,this.regularUsed()/e*100));return[{value:n,color:"var(--green)"},{value:o,color:"var(--primary)"}]}),this.performanceUsed=b(()=>this.poolState().special_class_used||0),this.rawPerformanceAvailable=b(()=>this.poolState().special_class_available||0),this.performanceUsable=b(()=>this.poolState().special_class_usable??this.performanceUsed()+this.rawPerformanceAvailable()),this.performanceReserved=b(()=>this.tierEnabled()?Math.max(0,this.performanceUsable()*this.reservePct()/100):0),this.performanceAvailable=b(()=>Math.max(0,this.rawPerformanceAvailable()-this.performanceReserved())),this.regularUsed=b(()=>this.poolState().used??0),this.regularAvailable=b(()=>this.poolState().available??0),this.tierBreakdown=b(()=>{let e=this.performanceUsable(),n=this.regularUsed()+this.regularAvailable(),o=(y,D)=>D>0?y/D*100:0,f=Math.min(100,o(this.performanceUsed(),e));return{performance:{hasData:e>0,usedPercent:f,availablePercent:Math.min(o(this.performanceAvailable(),e),100-f),reservedPercent:Math.min(100,o(this.performanceReserved(),e))},regular:{hasData:n>0,usedPercent:o(this.regularUsed(),n),availablePercent:o(this.regularAvailable(),n)}}})}ngOnInit(){this.chartBlankColor=this.themeService.currentTheme().bg1,this.chartFillColor=this.themeService.currentTheme().primary,this.chartLowCapacityColor=this.themeService.currentTheme().red}static{this.\u0275fac=function(n){return new(n||t)}}static{this.\u0275cmp=P({type:t,selectors:[["ix-pool-usage-card"]],inputs:{poolState:[1,"poolState"]},decls:30,vars:50,consts:[[1,"card",3,"ixUiSearch"],["mat-card-title",""],[3,"type","tooltip"],["mat-button","",3,"ixTest","routerLink"],[1,"card-content"],[1,"left"],[1,"gauge",3,"colorFill","colorBlank","segments","sublabel","width","height","label","value"],[1,"warning-container"],[1,"right"],[1,"captions"],[1,"capacity-caption"],[1,"value-caption"],[1,"list-caption"],[1,"tier-breakdown"],[1,"link",3,"ixTest","routerLink","queryParams"],[1,"item-caption"],[1,"used-caption"],[1,"available-caption"],[1,"tier-row"],[1,"tier-row","tier-empty"],[1,"tier-header"],[1,"tier-name"],["role","img",1,"tier-bar-container"],["aria-hidden","true",1,"reserve-zone",3,"width"],["aria-hidden","true",1,"tier-bar","performance-used"],["aria-hidden","true",1,"tier-bar","performance-available"],[1,"tier-stats-detail"],[1,"stat-item"],["aria-hidden","true",1,"stat-dot","used"],["aria-hidden","true",1,"stat-dot","available"],["aria-hidden","true",1,"stat-dot","reserved"],["aria-hidden","true",1,"reserve-zone"],[1,"tier-empty-note"],["aria-hidden","true",1,"tier-bar","regular-used"],["aria-hidden","true",1,"tier-bar","regular-available"],["aria-hidden","true",1,"stat-dot","regular-used"],["aria-hidden","true",1,"stat-dot","regular-available"]],template:function(n,o){n&1&&(a(0,"mat-card",0)(1,"mat-card-header")(2,"h3",1),p(3),s(4,"translate"),h(5,"ix-pool-card-icon",2),r(),a(6,"a",3),p(7),s(8,"translate"),r()(),a(9,"mat-card-content",4)(10,"div",5)(11,"div"),h(12,"ix-gauge-chart",6),s(13,"translate"),s(14,"percent"),x(15,Ia,7,6,"div",7),r()(),a(16,"div",8)(17,"div",9)(18,"div",10)(19,"b"),p(20),s(21,"translate"),r(),a(22,"span",11),p(23),s(24,"ixFileSize"),r()(),x(25,Ba,17,12,"ul",12),r(),x(26,Ua,4,2,"div",13),a(27,"a",14),p(28),s(29,"translate"),r()()()()),n&2&&(m("ixUiSearch",o.searchableElements.elements.usage),i(3),u(" ",l(4,26,"Usage")," "),i(2),m("type",o.iconType())("tooltip",o.iconTooltip()),i(),m("ixTest",E(41,ka,o.poolState().name))("routerLink",E(43,Da,o.poolState().name)),i(),u(" ",l(8,28,"View Datasets")," "),i(5),vi(o.isLowCapacity()?"color: var(--red);":""),m("colorFill",o.usedPercentage()===0?o.chartBlankColor:o.isLowCapacity()?o.
12chartLowCapacityColor:o.chartFillColor)("colorBlank",o.chartBlankColor)("segments",o.chartSegments())("sublabel",o.showTierBreakdown()?l(13,30,"Used"):"")("width",150)("height",150)("label",K(14,32,o.usedPercentage()/100,"1.0-1")||"")("value",o.usedPercentage()>100?100:o.usedPercentage()),i(3),_(o.isLowCapacity()?15:-1),i(5),u("",l(21,35,"Usable Capacity"),":"),i(3),u(" ",l(24,37,o.capacity())," "),i(2),_(o.showTierBreakdown()?-1:25),i(),_(o.showTierBreakdown()?26:-1),i(),m("ixTest",E(45,Oa,o.poolState().name))("routerLink",je(47,wa))("queryParams",E(48,Ta,o.disks())),i(),u(" ",l(29,39,"View Disk Reports")," "))},dependencies:[Y,Oe,ve,Ce,Ke,kt,w,st,X,ln,k,M,it,St],styles:[`@keyframes _ngcontent-%COMP%_blinker{50%{opacity:.1}}@keyframes _ngcontent-%COMP%_fade-in-animation{0%{opacity:0}to{opacity:1}}@keyframes _ngcontent-%COMP%_pulse-box-shadow-animation{0%,to{box-shadow:none;outline:0}50%{box-shadow:0 0 10px 10px var(--primary-lighter);outline:2px solid var(--primary)}}[_nghost-%COMP%]{display:flex}.card[_ngcontent-%COMP%]{border:none;border-radius:0;margin:0}.card[_ngcontent-%COMP%]   mat-card-header[_ngcontent-%COMP%]{align-items:center;border-bottom:1px solid var(--lines);justify-content:space-between;min-height:40px;padding:8px 8px 8px 16px}.card[_ngcontent-%COMP%]   mat-card-header[_ngcontent-%COMP%]   .mat-mdc-button[_ngcontent-%COMP%]{flex-shrink:0}.card[_ngcontent-%COMP%]   .mat-mdc-card-title[_ngcontent-%COMP%]{align-items:center;column-gap:5px;display:flex;font-size:1.65rem;margin-bottom:0}@media(max-width:3132px){.card[_ngcontent-%COMP%]   .mat-mdc-card-title[_ngcontent-%COMP%]{font-size:1.728em}}.card[_ngcontent-%COMP%]   mat-card-content[_ngcontent-%COMP%]{margin:0;padding:16px!important}.card[_ngcontent-%COMP%]   mat-card-content[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{padding:0}.card[_ngcontent-%COMP%]   ngx-skeleton-loader[_ngcontent-%COMP%]{flex:1}.card[_ngcontent-%COMP%]   .details-item[_ngcontent-%COMP%]{animation-duration:.35s;animation-fill-mode:backwards;animation-name:_ngcontent-%COMP%_fade-in-animation;align-items:center;display:flex;flex-direction:row;flex-wrap:wrap;margin-bottom:4px}.card[_ngcontent-%COMP%]   .details-item[_ngcontent-%COMP%]:first-child{margin-top:0}.card[_ngcontent-%COMP%]   .details-item[_ngcontent-%COMP%]   .label[_ngcontent-%COMP%]{font-weight:700;margin-right:5px;white-space:normal}.card[_ngcontent-%COMP%]   .details-item[_ngcontent-%COMP%]   .value[_ngcontent-%COMP%]{font-weight:400;margin-right:5px;white-space:normal}.card[_ngcontent-%COMP%]   .details-item[_ngcontent-%COMP%]   a[_ngcontent-%COMP%]{color:var(--primary);cursor:pointer;margin-left:auto;max-width:100%;overflow:hidden;text-decoration:underline;text-overflow:ellipsis;white-space:nowrap}.card[_ngcontent-%COMP%]   .details-item[_ngcontent-%COMP%]   ngx-skeleton-loader[_ngcontent-%COMP%]{display:inline-block;flex:0;height:20px;min-width:30px;width:30%}.card[_ngcontent-%COMP%]   .details-item[_ngcontent-%COMP%]   ngx-skeleton-loader[_ngcontent-%COMP%]     .loader{margin-bottom:0}.card[_ngcontent-%COMP%]   mat-card-actions[_ngcontent-%COMP%]{border-top:1px solid var(--lines);box-sizing:border-box;display:flex;justify-content:flex-end;margin:0;padding:8px 8px 8px 16px}.card[_ngcontent-%COMP%]   mat-card-actions[_ngcontent-%COMP%]   .mdc-button--outlined[_ngcontent-%COMP%]{border:1px solid var(--alt-fg2);border-radius:0;opacity:.8}.card[_ngcontent-%COMP%]   mat-card-actions[_ngcontent-%COMP%]   .mdc-button--outlined[_ngcontent-%COMP%]:hover{background-color:var(--hover-bg)!important}.card[_ngcontent-%COMP%]{flex:1}.card[_ngcontent-%COMP%]   .content-container[_ngcontent-%COMP%]{height:100%}.capacity-caption[_ngcontent-%COMP%]{border-bottom:2px solid var(--contrast-lighter);font-size:130%}.list-caption[_ngcontent-%COMP%]{margin:0}.item-caption[_ngcontent-%COMP%]{margin:10px -10px}.value-caption[_ngcontent-%COMP%]{margin-left:2px}.card-content[_ngcontent-%COMP%]{display:flex;flex:1 1 100%;gap:10px}.card-content[_ngcontent-%COMP%]   .left[_ngcontent-%COMP%], .card-content[_ngcontent-%COMP%]   .right[_ngcontent-%COMP%]{align-items:center;display:flex;justify-content:center}.card-content[_ngcontent-%COMP%]   .left[_ngcontent-%COMP%]{align-items:center;flex:0 0 auto;flex-direction:column}.card-content[_ngcontent-%COMP%]   .left[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{text-align:center}.card-content[_ngcontent-%COMP%]   .right[_ngcontent-%COMP%]{display:flex;flex:1 1 auto;flex-direction:column}.tier-breakdown[_ngcontent-%COMP%]{margin-top:16px;width:100%}.tier-row[_ngcontent-%COMP%]{margin-bottom:12px}.tier-header[_ngcontent-%COMP%]{align-items:center;display:flex;gap:8px;margin-bottom:4px}
12.tier-name[_ngcontent-%COMP%]{font-weight:600;font-size:13px}.tier-bar-container[_ngcontent-%COMP%]{background-color:var(--alt-bg2);border-radius:3px;display:flex;height:6px;overflow:hidden;position:relative;width:100%}.reserve-zone[_ngcontent-%COMP%]{background-image:repeating-linear-gradient(-45deg,var(--orange) 0,var(--orange) 1.5px,transparent 1.5px,transparent 4px);border-left:2px solid var(--orange);bottom:0;position:absolute;right:0;top:0;z-index:2}.tier-bar[_ngcontent-%COMP%]{height:100%;min-width:0;position:relative;transition:width .3s ease;z-index:1}.tier-bar.performance-used[_ngcontent-%COMP%]{background-color:var(--green);border-radius:3px 0 0 3px}.tier-bar.performance-available[_ngcontent-%COMP%]{background-color:color-mix(in srgb,var(--green) 30%,transparent)}.tier-bar.regular-used[_ngcontent-%COMP%]{background-color:var(--primary);border-radius:3px 0 0 3px}.tier-bar.regular-available[_ngcontent-%COMP%]{background-color:color-mix(in srgb,var(--primary) 30%,transparent);border-radius:0 3px 3px 0}.tier-stats-detail[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;gap:4px 12px;margin-top:4px}.stat-item[_ngcontent-%COMP%]{align-items:center;display:flex;font-size:11px;gap:4px;white-space:nowrap}.stat-dot[_ngcontent-%COMP%]{border-radius:50%;display:inline-block;height:8px;width:8px}.stat-dot.used[_ngcontent-%COMP%]{background-color:var(--green)}.stat-dot.available[_ngcontent-%COMP%]{background-color:color-mix(in srgb,var(--green) 30%,transparent)}.stat-dot.reserved[_ngcontent-%COMP%]{background-color:var(--orange)}.stat-dot.regular-used[_ngcontent-%COMP%]{background-color:var(--primary)}.stat-dot.regular-available[_ngcontent-%COMP%]{background-color:color-mix(in srgb,var(--primary) 30%,transparent)}.link[_ngcontent-%COMP%]{color:var(--primary);cursor:pointer;margin-top:25px;text-decoration:underline}
13/*# sourceMappingURL=pool-usage-card.component-UBFFJEL2.css.map */`],changeDetection:0})}}return t})();var Gn=(()=>{class t{constructor(){this.router=c(Pe),this.api=c(U),this.dialogService=c(le),this.translate=c(F),this.errorHandler=c(W),this.destroyRef=c(N),this.pool=O.required(),this.importSuccess=Be()}onViewDisks(){this.router.navigate(["/storage","disks"])}onImportAgain(){this.dialogService.jobDialog(this.api.job("pool.reimport",[this.pool().id]),{title:this.translate.instant("Importing Pool")}).afterClosed().pipe(this.errorHandler.withErrorHandler(),S(this.destroyRef)).subscribe(()=>{this.importSuccess.emit()})}static{this.\u0275fac=function(n){return new(n||t)}}static{this.\u0275cmp=P({type:t,selectors:[["ix-sed-locked-warning"]],inputs:{pool:[1,"pool"]},outputs:{importSuccess:"importSuccess"},decls:17,vars:12,consts:[["role","alert",1,"sed-locked-warning"],[1,"warning-content"],[1,"warning-header"],["name","alert-circle","library","mdi"],[1,"warning-title"],[1,"warning-message"],[1,"warning-actions"],["mat-button","","ixTest","view-disks",3,"click"],["mat-button","","color","primary","ixTest","import-again",3,"click"]],template:function(n,o){n&1&&(a(0,"div",0)(1,"div",1)(2,"div",2),h(3,"tn-icon",3),a(4,"span",4),p(5),s(6,"translate"),r()(),a(7,"p",5),p(8),s(9,"translate"),r()(),a(10,"div",6)(11,"button",7),C("click",function(){return o.onViewDisks()}),p(12),s(13,"translate"),r(),a(14,"button",8),C("click",function(){return o.onImportAgain()}),p(15),s(16,"translate"),r()()()),n&2&&(i(5),v(l(6,4,"Pool Failed to Import - SED Disks Locked")),i(3),u(" ",l(9,6,"This pool uses Self-Encrypting Drives (SED) that are currently locked. The pool cannot be imported until the drives are unlocked with the correct password.")," "),i(4),u(" ",l(13,8,"View Disks")," "),i(3),u(" ",l(16,10,"Import Again")," "))},dependencies:[_e,R,w,k,M],styles:[`.sed-locked-warning[_ngcontent-%COMP%]{background-color:var(--alt-bg1);border:1px solid var(--lines);border-left:4px solid var(--red);border-radius:4px;display:flex;flex-wrap:wrap;gap:16px;justify-content:space-between;margin-bottom:16px;padding:16px}.warning-content[_ngcontent-%COMP%]{flex:1;min-width:280px}.warning-header[_ngcontent-%COMP%]{align-items:center;color:var(--red);display:flex;font-size:14px;font-weight:600;gap:8px;margin-bottom:8px}.warning-title[_ngcontent-%COMP%]{line-height:1.4}.warning-message[_ngcontent-%COMP%]{color:var(--fg2);font-size:13px;line-height:1.5;margin:0}.warning-actions[_ngcontent-%COMP%]{align-items:center;display:flex;flex-shrink:0;gap:8px}
14/*# sourceMappingURL=sed-locked-warning.component-PANUSF3H.css.map */`],changeDetection:0})}}return t})();var ot=(function(t){return t.Start="START",t.Stop="STOP",t.Pause="PAUSE",t})(ot||{});var $n={thresholdTooltip:"Days before a completed scrub is allowed  to run again. This controls the task schedule. For example, scheduling  a scrub to run daily and setting <b>Threshold days</b> to <i>7</i>  means the scrub attempts to run daily. When the scrub is successful, it  continues to check daily but does not run again until seven days have  elapsed. Using a multiple of seven ensures the scrub always occurs on  the same weekday."};
14function Aa(t,d){if(t&1&&(a(0,"button",6),p(1),s(2,"translate"),r()),t&2){let e=g();m("disabled",e.form.invalid||e.isLoading()),i(),u(" ",l(2,2,"Save")," ")}}var Jn=(()=>{class t{get isNew(){return!this.existingTask}get title(){return this.isNew?this.translate.instant("Schedule Scrub"):this.translate.instant("Configure Scheduled Scrub")}constructor(){this.translate=c(F),this.fb=c(Se),this.api=c(U),this.snackbar=c(ue),this.errorHandler=c(Lt),this.slideInRef=c(pt),this.destroyRef=c(N),this.requiredRoles=[$.PoolScrubWrite],this.isLoading=he(!1),this.form=this.fb.nonNullable.group({threshold:[35,[H.min(0),H.required]],schedule:["",H.required],enabled:[!0]}),this.helptextScrubForm=$n,this.slideInRef.requireConfirmationWhen(()=>G(this.form.dirty)),this.poolId=this.slideInRef.getData().poolId,this.existingTask=this.slideInRef.getData().existingScrubTask,this.existingTask&&this.setTaskForEdit(this.existingTask)}setTaskForEdit(e){this.form.patchValue(Ae(Re({},this.existingTask),{schedule:sn(e.schedule)}))}onSubmit(){let e=Ae(Re({},this.form.value),{pool:this.poolId,schedule:rn(this.form.getRawValue().schedule)});this.isLoading.set(!0);let n;this.existingTask?n=this.api.call("pool.scrub.update",[this.existingTask.id,e]):n=this.api.call("pool.scrub.create",[e]),n.pipe(S(this.destroyRef)).subscribe({next:()=>{this.isNew?this.snackbar.success(this.translate.instant("Scrub scheduled")):this.snackbar.success(this.translate.instant("Scrub settings updated")),this.isLoading.set(!1),this.slideInRef.close({response:!0})},error:o=>{this.isLoading.set(!1),this.errorHandler.handleValidationErrors(o,this.form)}})}static{this.\u0275fac=function(n){return new(n||t)}}static{this.\u0275cmp=P({type:t,selectors:[["ix-scrub-form"]],decls:14,vars:19,consts:[[3,"requiredRoles","title","loading"],[1,"ix-form-container",3,"submit","formGroup"],["formControlName","enabled",3,"label"],["formControlName","schedule",3,"label","required"],["formControlName","threshold","type","number",3,"label","required","tooltip"],["mat-button","","type","submit","color","primary","ixTest","save",3,"disabled",4,"ixRequiresRoles"],["mat-button","","type","submit","color","primary","ixTest","save",3,"disabled"]],template:function(n,o){n&1&&(h(0,"ix-modal-header",0),a(1,"mat-card")(2,"mat-card-content")(3,"form",1),C("submit",function(){return o.onSubmit()}),a(4,"ix-fieldset"),h(5,"ix-checkbox",2),s(6,"translate"),h(7,"ix-scheduler",3),s(8,"translate"),h(9,"ix-input",4),s(10,"translate"),s(11,"translate"),r(),a(12,"ix-form-actions"),L(13,Aa,3,4,"button",5),r()()()()),n&2&&(m("requiredRoles",o.requiredRoles)("title",o.title)("loading",o.isLoading()),i(3),m("formGroup",o.form),i(2),m("label",l(6,11,"Enabled")),i(2),m("label",l(8,13,"Schedule"))("required",!0),i(2),m("label",l(10,15,"Threshold Days"))("required",!0)("tooltip",l(11,17,o.helptextScrubForm.thresholdTooltip)),i(4),m("ixRequiresRoles",o.requiredRoles))},dependencies:[ct,Y,X,re,ae,ne,oe,xe,me,de,Le,De,an,$e,se,J,R,w,k,M],encapsulation:2,changeDetection:0})}}return t})();var qa=t=>[t];function Ha(t,d){if(t&1&&(a(0,"div",3),p(1),r()),t&2){let e=g();i(),u(" ",e.timeLeftString()," ")}}function za(t,d){if(t&1){let e=V();a(0,"button",10),C("click",function(){I(e);let o=g(3);return B(o.onResumeScrub())}),p(1),s(2,"translate"),r()}t&2&&(i(),u(" ",l(2,1,"Resume Scrub")," "))}function Wa(t,d){if(t&1){let e=V();a(0,"button",11),C("click",function(){I(e);let o=g(3);return B(o.onPauseScrub())}),p(1),s(2,"translate"),r()}t&2&&(i(),u(" ",l(2,1,"Pause Scrub")," "))}function ja(t,d){if(t&1){let e=V();xi(0),a(1,"div",6)(2,"button",7),C("click",function(){I(e);let o=g(2);return B(o.onStopScrub())}),p(3),s(4,"translate"),r(),x(5,za,3,3,"button",8)(6,Wa,3,3,"button",9),r(),_i()}if(t&2){let e=g(2);i(3),u(" ",l(4,2,"Stop Scrub")," "),i(2),_(e.isScrubPaused()?5:6)}}function Ga(t,d){if(t&1&&L(0,ja,7,4,"ng-container",5),t&2){let e=g();m("ixRequiresRoles",E(1,qa,e.Role.PoolScrubWrite))}}var Qn=(()=>{class t{constructor(){this.translate=c(F),this.dialogService=c(le),this.api=c(U),this.errorHandler=c(W),this.destroyRef=c(N),this.scan=O.required(),this.pool=O.required(),this.isScrub=b(()=>this.scan()?.function===dt.Scrub),this.isScrubPaused=b(()=>!!this.scan()?.pause),this.Role=$,this.scanLabel=b(()=>this.isScrub()?this.isScrubPaused()?this.translate.instant("Scrub Paused"):this.translate.instant("Scrub In Progress:"):this.translate.instant("Resilvering:")),this.timeLeftString=b(()=>{try{let e=Wt(this.scan().total_secs_left||0);return this.translate.instant("{duration} remaining",{duration:Vt(e)})}catch(e){return" - "}})}onStopScrub(){let e=this.translate.instant("Stop the scrub on {poolName}?",{poolName:this.pool().name});this.dialogService.confirm({message:e,title:this.translate.instant("Scrub Pool"),buttonText:this.translate.instant("Stop Scrub")}).pipe(j(Boolean),pe(()=>this.api.startJob("pool.scrub",[this.pool().id,ot.Stop])),this.errorHandler.withErrorHandler(),S(this.destroyRef)).subscribe()}onPauseScrub(){this.api.startJob("pool.scrub",[this.pool().id,ot.Pause]).pipe(this.errorHandler.withErrorHandler(),S(this.destroyRef)).subscribe()}onResumeScrub(){this.api.startJob("pool.scrub",[this.pool().id,ot.Start]).pipe(this.errorHandler.withErrorHandler(),S(this.destroyRef)).subscribe()}static{this.\u0275fac=function(n){return new(n||t)}}static{this.\u0275cmp=P({type:t,selectors:[["ix-active-pool-scan"]],inputs:{scan:[1,"scan"],pool:[
141,"pool"]},decls:9,vars:8,consts:[[1,"scan-in-progress"],[1,"scan-description"],[1,"scan-label"],[1,"time-left"],[1,"progress",3,"value"],[4,"ixRequiresRoles"],[1,"controls"],["mat-button","","ixTest","stop-scrub",3,"click"],["mat-button","","ixTest","resume-scrub"],["mat-button","","ixTest","pause-scrub"],["mat-button","","ixTest","resume-scrub",3,"click"],["mat-button","","ixTest","pause-scrub",3,"click"]],template:function(n,o){n&1&&(a(0,"div",0)(1,"div",1)(2,"span",2),p(3),r(),p(4),s(5,"percent"),r(),x(6,Ha,2,1,"div",3),h(7,"mat-progress-bar",4),r(),x(8,Ga,1,3,"ng-container")),n&2&&(i(3),u(" ",o.scanLabel()," "),i(),u(" ",K(5,5,o.scan().percentage/100,"1.2-2")," "),i(2),_(o.scan().total_secs_left&&!o.isScrubPaused()?6:-1),i(),m("value",o.scan().percentage),i(),_(o.isScrub()?8:-1))},dependencies:[It,R,J,w,k,St,M],styles:[`@keyframes _ngcontent-%COMP%_blinker{50%{opacity:.1}}@keyframes _ngcontent-%COMP%_fade-in-animation{0%{opacity:0}to{opacity:1}}@keyframes _ngcontent-%COMP%_pulse-box-shadow-animation{0%,to{box-shadow:none;outline:0}50%{box-shadow:0 0 10px 10px var(--primary-lighter);outline:2px solid var(--primary)}}.scan-in-progress[_ngcontent-%COMP%]{animation-duration:.35s;animation-fill-mode:backwards;animation-name:_ngcontent-%COMP%_fade-in-animation;margin-top:18px}.scan-in-progress[_ngcontent-%COMP%]   .scan-description[_ngcontent-%COMP%]{text-align:center}.scan-in-progress[_ngcontent-%COMP%]   .scan-label[_ngcontent-%COMP%]{font-weight:700}.scan-in-progress[_ngcontent-%COMP%]   .time-left[_ngcontent-%COMP%]{font-size:.9rem;text-align:center}.scan-in-progress[_ngcontent-%COMP%]   .progress[_ngcontent-%COMP%]{margin-bottom:8px;margin-top:8px}.controls[_ngcontent-%COMP%]{display:flex;gap:8px;justify-content:center;margin-top:16px}
15/*# sourceMappingURL=active-pool-scan.component-6VKISWSU.css.map */`],changeDetection:0})}}return t})();function $a(t,d){if(t&1&&(h(0,"ix-label",7),s(1,"translate"),a(2,"mat-slider",8),h(3,"input",9),r()),t&2){let e=g();m("label",l(1,6,"Percentage"))("required",!0),i(2),m("displayWith",e.formatSliderAsPercentage)("min",1)("max",100)("step",1)}}function Ja(t,d){t&1&&(h(0,"ix-input",3),s(1,"translate")),t&2&&m("label",l(1,2,"Age (in days)"))("required",!0)}var ut=(function(t){return t.Percentage="percentage",t.Age="age",t})(ut||{}),Qa=new Map([[ut.Percentage,"Percentage"],[ut.Age,"Age"]]),Kn=(()=>{class t{constructor(){this.formBuilder=c(wt),this.api=c(U),this.dialog=c(le),this.snackbar=c(ue),this.translate=c(F),this.errorHandler=c(W),this.dialogRef=c(Ne),this.pool=c(Me),this.destroyRef=c(N),this.form=this.formBuilder.group({pruneBy:[ut.Percentage],percentage:[null,[H.min(1),H.max(100)]],days:[null]}),this.pruneByOptions$=G(qt(Qa,this.translate))}get isPruningByPercentage(){return this.form.value.pruneBy===ut.Percentage}submit(){let e={pool_name:this.pool.name};this.form.value.pruneBy===ut.Percentage?e.percentage=Number(this.form.value.percentage):e.days=Number(this.form.value.days);let n=this.api.job("pool.ddt_prune",[e]);this.dialog.jobDialog(n,{title:this.translate.instant("Pruning Deduplication Table"),canMinimize:!0}).afterClosed().pipe(this.errorHandler.withErrorHandler(),S(this.destroyRef)).subscribe(()=>{this.snackbar.success(this.translate.instant("Deduplication table pruned")),this.dialogRef.close(!0)})}formatSliderAsPercentage(e){return`${e}%`}static{this.\u0275fac=function(n){return new(n||t)}}static{this.\u0275cmp=P({type:t,selectors:[["ix-prune-dedup-table-dialog"]],decls:15,vars:17,consts:[["matDialogTitle",""],[1,"ix-form-container",3,"submit","formGroup"],["formControlName","pruneBy",3,"label","options","required"],["formControlName","days","type","number",3,"label","required"],[1,"actions"],["mat-button","","type","button","ixTest","cancel",3,"matDialogClose"],["mat-button","","type","submit","color","primary","ixTest","prune"],[3,"label","required"],["ixTest","percentage","showTickMarks","","discrete","",1,"percentage-slider",3,"displayWith","min","max","step"],["matSliderThumb","","ixTest","slider-thumb","formControlName","percentage"]],template:function(n,o){n&1&&(a(0,"h1",0),p(1),s(2,"translate"),r(),a(3,"form",1),C("submit",function(){return o.submit()}),h(4,"ix-radio-group",2),s(5,"translate"),x(6,$a,4,8)(7,Ja,2,4,"ix-input",3),a(8,"ix-form-actions",4)(9,"button",5),p(10),s(11,"translate"),r(),a(12,"button",6),p(13),s(14,"translate"),r()()()),n&2&&(i(),u(" ",l(2,9,"Prune Deduplication Table"),`
16`),i(2),m("formGroup",o.form),i(),m("label",l(5,11,"Prune By"))("options",o.pruneByOptions$)("required",!0),i(2),_(o.isPruningByPercentage?6:7
16),i(3),m("matDialogClose",!1),i(),u(" ",l(11,13,"Cancel")," "),i(3),u(" ",l(14,15,"Prune")," "))},dependencies:[se,De,R,ke,re,ae,ki,ne,oe,xe,me,de,w,k,Ft,Fe,Cn,vn,Gi,M],styles:[`[_nghost-%COMP%]{display:block;min-width:400px}.ix-form-container[_ngcontent-%COMP%]{display:flex;flex-direction:column;min-height:270px}.ix-form-container[_ngcontent-%COMP%]   .actions[_ngcontent-%COMP%]{margin-top:auto}.percentage-slider[_ngcontent-%COMP%]{width:95%}
17/*# sourceMappingURL=prune-dedup-table-dialog.component-V7KDU7EA.css.map */`],changeDetection:0})}}return t})();var Ka=t=>({pool:t});function Ya(t,d){if(t&1&&(h(0,"ix-input",3),s(1,"translate")),t&2){let e=g();m("label",l(1,4,"Custom Quota"))("format",e.formatter.memorySizeFormatting)("parse",e.formatter.memorySizeParsing)("required",!0)}}var Te=(function(t){return t.Auto="AUTO",t.Custom="CUSTOM",t.None="NONE",t})(Te||{}),Xa=new Map([[Te.Auto,"Auto"],[Te.Custom,"Custom"],[Te.None,"None"]]),Yn=(()=>{class t{constructor(){this.formBuilder=c(wt),this.api=c(U),this.dialog=c(le),this.snackbar=c(ue),this.translate=c(F),this.errorHandler=c(W),this.dialogRef=c(Ne),this.formatter=c(en),this.pool=c(Me),this.destroyRef=c(N),this.form=this.formBuilder.group({quotaType:[null],quotaValue:[null,H.min(0)]}),this.quotaTypeOptions$=G(qt(Xa,this.translate));let e;switch(this.pool.dedup_table_quota){case"auto":e=Te.Auto;break;case"0":e=Te.None;break;default:e=Te.Custom}this.form.patchValue({quotaType:e,quotaValue:parseInt(this.pool.dedup_table_quota||"",10)||null})}get hasCustomQuota(){return this.form.value.quotaType===Te.Custom}submit(){let e;switch(this.form.value.quotaType){case Te.Auto:e={dedup_table_quota:oi.Auto};break;case Te.Custom:e={dedup_table_quota:oi.Custom,dedup_table_quota_value:this.form.value.quotaValue||void 0};break;case Te.None:e={dedup_table_quota:null};break}let n=this.api.job("pool.update",[this.pool.id,e]);this.dialog.jobDialog(n,{title:this.translate.instant("Updating pool settings")}).afterClosed().pipe(this.errorHandler.withErrorHandler(),S(this.destroyRef)).subscribe(()=>{this.snackbar.success(this.translate.instant("Quota settings updated")),this.dialogRef.close(!0)})}static{this.\u0275fac=function(n){return new(n||t)}}static{this.\u0275cmp=P({type:t,selectors:[["ix-set-dedup-quota"]],decls:14,vars:20,consts:[["matDialogTitle",""],[1,"ix-form-container",3,"submit","formGroup"],["formControlName","quotaType",3,"label","options","required"],["formControlName","quotaValue",3,"label","format","parse","required"],["mat-button","","type","button","ixTest","cancel",3,"matDialogClose"],["mat-button","","type","submit","color","primary","ixTest","save"]],template:function(n,o){n&1&&(a(0,"h1",0),p(1),s(2,"translate"),r(),a(3,"form",1),C("submit",function(){return o.submit()}),h(4,"ix-select",2),s(5,"translate"),x(6,Ya,2,6,"ix-input",3),a(7,"ix-form-actions")(8,"button",4),p(9),s(10,"translate"),r(),a(11,"button",5),p(12),s(13,"translate"),r()()()),n&2&&(i(),u(" ",K(2,9,"Deduplication Quota for {pool}",E(18,Ka,o.pool.name)),`
18`),i(2),m("formGroup",o.form),i(),m("label",l(5,12,"Quota"))("options",o.quotaTypeOptions$)("required",!0),i(2),_(o.hasCustomQuota?6:-1),i(2),m("matDialogClose",!1),i(),u(" ",l(10,14,"Cancel")," "),i(3),u(" ",l(13,16,"Save")," "))},dependencies:[se,R,ke,re,ae,ne,oe,xe,me,de,w,k,Fe,Ge,De,M],encapsulation:2,changeDetection:0})}}return t})();var Xn=t=>[t];function Za(t,d){if(t&1){let e=V();a(0,"a",8),C("click",function(){I(e);let o=g(2);return B(o.onPruneDedupTable())}),p(1),s(2,"translate"),r()}t&2&&(i(),u(" ",l(2,1,"Prune")," "))}function er(t,d){if(t&1&&L(0,Za,3,3,"a",7),t&2){let e=g();m("ixRequiresRoles",E(1,Xn,e.Role.PoolWrite))}}function tr(t,d){if(t&1){let e=V();a(0,"a",9),C("click",function(){I(e);let o=g();return B(o.onSetDedupQuota())}),p(1),s(2,"translate"),r()}t&2&&(i(),u(" ",l(2,1,"Set Quota")," "))}var Zn=(()=>{class t{constructor(){this.fileSizePipe=c(it),this.matDialog=c(Ve),this.store=c(He),this.destroyRef=c(N),this.pool=O.required(),this.Role=$,this.deduplicationStats=b(()=>{if(this.pool().dedup_table_quota!=="auto"&&this.pool().dedup_table_quota!=="0"){let e=this.fileSizePipe.transform(this.pool().dedup_table_size),n=this.fileSizePipe.transform(parseInt(this.pool().dedup_table_quota||"",10));return`${e} / ${n}`}return this.fileSizePipe.transform(this.pool().dedup_table_size)})}onPruneDedupTable(){this.matDialog.open(Kn,{data:this.pool()}).afterClosed().pipe(j(Boolean),S(this.destroyRef)).subscribe(()=>this.store.loadDashboard())}onSetDedupQuota(){this.matDialog.open(Yn,{data:this.pool()}).afterClosed().pipe(j(Boolean),S(this.destroyRef)).subscribe(()=>this.store.loadDashboard())}static{this.\u0275fac=function(n){return new(n||t)}}static{this.\u0275cmp=P({type:t,selectors:[["ix-deduplication-stats"]],inputs:{pool:[1,"pool"]},features:[rt([it])],decls:10,vars:8,consts:[[1,"details-item"],[1,"blank-spacer"],[1,"label"],[1,"value"],[1,"dedup-actions"],["ixTest","prune-dedup",1,"action"],["class","action","ixTest","set-dedup-quota",3,"click",4,"ixRequiresRoles"],["class","action","ixTest","prune-dedup",3,"click",4,"ixRequiresRoles"],["ixTest","prune-dedup",1,"action",3,"click"],["ixTest","set-dedup-quota",1,"action",3,"click"]],template:function(n,o){n&1&&(a(0,"div",0),h(1,"span",1),a(2,"div",2),p(3),s(4,"translate"),r(),a(5,"div",3),p(6),r(),a(7,"div",4),x(8,er,1,3,"a",5),L(9,tr,3,3,"a",6),r()()),n&2&&(i(3),u("",l(4,4,"Deduplication Table"),":"),i(3),v(o.deduplicationStats()),i(2),_(o.pool().dedup_table_size>0?8:-1),i(),m("ixRequiresRoles",E(6,Xn,o.Role.PoolWrite)))},dependencies:[k,J,w,M],styles:[`[_nghost-%COMP%]{margin-top:8px}.dedup-actions[_ngcontent-%COMP%]{display:flex;gap:8px;margin-left:auto}
19/*# sourceMappingURL=deduplication-stats.component-5QBABHUG.css.map */`],changeDetection:0})}}return t})();var ir=t=>({date:t});function nr(t,d){if(t&1&&(Ie(0,"div",0),vt(1,"span",1),Ie(2,"div",2),p(3),s(4,"translate"),et(),Ie(5,"div",3),p(6),s(7,"formatDateTime"),s(8,"translate"),et()()),t&2){let e=g();i(3),u("",l(4,2,"Last Scan"),":"),i(3),u(" ",K(8,6,e.scanExplanation(),E(9,ir,l(7,4,e.scan().end_time.$date)))," ")}}function or(t,d){if(t&1&&(Ie(0,"div",0),vt(1,"span",1),Ie(2,"div",2),p(3),s(4,"translate"),et(),Ie(5,"div",3),p(6),et()()),t&2){let e=g();i(3),u("",l(4,2,"Last Scan Duration"),":"),i(3),v(e.scanDuration())}}var eo=(()=>{class t{constructor(){this.scan=O.required(),this.isScrub=b(()=>this.scan()?.function===dt.Scrub),this.scanExplanation=b(()=>{switch(this.scan().state){case xt.Finished:return this.isScrub()?"Finished Scrub on {date}":"Finished Resilver on {date}";case xt.Canceled:return this.isScrub()?"Canceled Scrub on {date}":"Canceled Resilver on {date}";default:return""}}),this.scanDuration=b(()=>{if(!this.scan()?.end_time?.$date||!this.scan()?.start_time?.$date)return"";let e=Wt((this.scan().end_time.$date-this.scan().start_time.$date)/1e3);return Vt(e)})}static{this.\u0275fac=function(n){return new(n||t)}}static{this.\u0275cmp=P({type:t,selectors:[["ix-last-pool-scan"]],inputs:{scan:[1,"scan"]},decls:10,vars:8,consts:[[1,"details-item"],[1,"blank-spacer"],[1,"label"],[1,"value"]],template:function(n,o){if(n&1&&(x(0,nr,9,11,"div",0),Ie(1,"div",0),vt(2,"span",1),Ie(3,"div",2),p(4),s(5,"translate"),et(),Ie(6,"div",3),p(7),s(8,"number"),et()(),x(9,or,7,4,"div",0)),n&2){let f;_((f=o.scan().end_time)!=null&&f.$date?0:-1),i(4),u("",l(5,4,"Last Scan Errors"),":"),i(3),v(l(8,6,o.scan().errors)),i(2),_(o.scanDuration()?9:-1)}},dependencies:[k,M,Pt,Zi],styles:[`[_nghost-%COMP%]{display:flex;flex-direction:column;margin-top:8px}
20/*# sourceMappingURL=last-pool-scan.component-JYBDJGLN.css.map */`],changeDetection:0})}}return t})();var to={hierarchy:["Storage"],anchorRouterLink:["/storage"],elements:{zfsHealth:{hierarchy:["Storage Health"]},scrubNow:{hierarchy:["Scrub Now"],synonyms:["Run Scrub","Start Scrub"]},scheduledScrub:{hierarchy:["Scheduled Scrub"],synonyms:["Periodic Scrub","Scrub Task","Periodic Disk Checks","Scrub Schedule","Scrub Interval"]},autoTrim:{hierarchy:["Auto TRIM"],synonyms:["Edit Trim","Edit Auto TRIM"]}}};var ar=t=>[t];function rr(t,d){if(t&1){let e=V();a(0,"button",13),C("click",function(){I(e);let o=g(2);return B(o.onStartScrub())}),p(1),s(2,"translate"),r()}if(t&2){let e=g(2);m("ixUiSearch",e.searchableElements.elements.scrubNow),i(),u(" ",l(2,2,"Scrub Now")," ")}}function sr(t,d){if(t&1&&L(0,rr,3,4,"button",12),t&2){let e=g();m("ixRequiresRoles",E(1,ar,e.Role.PoolScrubWrite))}}function lr(t,d){}function pr(t,d){t&1&&(a(0,"button",14),p(1),s(2,"translate"),r()),t&2&&(i(),v(l(2,1,"Scrub")))}function cr(t,d){if(t&1&&x(0,lr,0,0)(1,pr,3,3,"button",14),t&2){let e=g();_(e.isScrub()?0:1)}}function dr(t,d){if(t&1){let e=V();a(0,"a",15),C("click",function(){I(e);let o=g();return B(o.goToVdevsPage())})("keydown.enter",function(){I(e);let o=g();return B(o.goToVdevsPage())}),p(1),s(2,"translate"),r()}t&2&&(i(),u(" ",l(2,1,"View")," "))}function mr(t,d){if(t&1){let e=V();
20a(0,"div",16),p(1),s(2,"scheduleDescription"),r(),a(3,"a",17),C("click",function(){I(e);let o=g();return B(o.onConfigureScrub())}),p(4),s(5,"translate"),r()}if(t&2){let e=g();i(),u(" ",l(2,2,e.scrub().schedule)," "),i(3),u(" ",l(5,4,"Configure")," ")}}function ur(t,d){if(t&1){let e=V();a(0,"div",16),p(1),s(2,"translate"),r(),a(3,"a",17),C("click",function(){I(e);let o=g();return B(o.onConfigureScrub())}),p(4),s(5,"translate"),r()}t&2&&(i(),u(" ",l(2,2,"Not Set")," "),i(3),u(" ",l(5,4,"Schedule")," "))}function gr(t,d){if(t&1&&(a(0,"div",8),h(1,"span",18),a(2,"div",10),p(3),s(4,"translate"),r(),a(5,"div",16),p(6),s(7,"translate"),r()()),t&2){let e=g();m("ixUiSearch",e.searchableElements.elements.autoTrim),i(3),u("",l(4,3,"Auto TRIM"),":"),i(3),v(l(7,5,"On"))}}function hr(t,d){if(t&1&&h(0,"ix-active-pool-scan",19),t&2){let e=g(2);m("scan",e.scan())("pool",e.pool())}}function fr(t,d){if(t&1&&h(0,"ix-last-pool-scan",20),t&2){let e=g(2);m("scan",e.scan())}}function xr(t,d){if(t&1&&x(0,hr,1,2,"ix-active-pool-scan",19)(1,fr,1,1,"ix-last-pool-scan",20),t&2){let e=g();_(e.wasScanInitiated()?0:1)}}function _r(t,d){if(t&1&&h(0,"ix-deduplication-stats",11),t&2){let e=g();m("pool",e.pool())}}var io=(function(t){return t.On="on",t.Off="off",t})(io||{}),no=(()=>{class t{constructor(){this.api=c(U),this.translate=c(F),this.dialogService=c(le),this.errorHandler=c(W),this.matDialog=c(Ve),this.store=c(He),this.slideIn=c(Bt),this.router=c(Pe),this.pool=O.required(),this.scrub=b(()=>this.store.scrubForPool(this.pool())),this.searchableElements=to,this.scanUpdates$=Mi(this.pool).pipe(pe(e=>this.api.subscribe("pool.scan").pipe(Xe(n=>n.fields),j(n=>n.name===e.name),Xe(n=>n.scan))),this.errorHandler.withErrorHandler(),gi({bufferSize:1,refCount:!0})),this.latestScan=Dt(this.scanUpdates$),this.scan=b(()=>this.latestScan()??this.pool().scan),this.helptextVolumes=ge,this.poolStatusLabels=ii,this.Role=$,this.AutoTrimValue=io,this.wasScanInitiated=b(()=>this.scan()?.state===xt.Scanning),this.isScrub=b(()=>this.scan()?.function===dt.Scrub),this.iconData=b(()=>{let e=this.pool(),n=this.poolStatusLabels.get(e.status),o,f;return!e.healthy&&e.status===Z.Online?(o=this.translate.instant("Pool is {status} with errors",{status:n}),f=ie.Warn):e.status===Z.Degraded||e.status===Z.Faulted?(o=this.translate.instant("Pool status is {status}",{status:n}),f=e.status===Z.Degraded?ie.Warn:ie.Error):e.healthy?(o=this.translate.instant("Everything is fine"),f=ie.Safe):(o=this.translate.instant("Pool is not healthy"),f=ie.Error),{tooltip:o,icon:f}}),this.iconType=b(()=>this.iconData().icon),this.iconTooltip=b(()=>this.iconData().tooltip)}onStartScrub(){let e=this.translate.instant("Start scrub on pool <i>{poolName}</i>?",{poolName:this.pool().name});this.dialogService.confirm({message:e,hideCheckbox:!0,title:this.translate.instant("Scrub Pool"),buttonText:this.translate.instant("Start Scrub")}).pipe(j(Boolean),pe(()=>this.api.startJob("pool.scrub",[this.pool().id,ot.Start])),this.errorHandler.withErrorHandler()).subscribe()}onEditAutotrim(){this.matDialog.open($t,{data:this.pool()}).afterClosed().pipe(j(Boolean)).subscribe(()=>this.store.loadDashboard())}onConfigureScrub(){this.slideIn.open(Jn,{data:{poolId:this.pool().id,existingScrubTask:this.scrub()}}).pipe(j(e=>e?.response)).subscribe(()=>{this.store.loadDashboard()})}getErrorText(){let e=this.countVdevErrors()+this.countPhysDiskErrors(),n=ii.get(this.pool().status),o=this.translate.instant("{count, plural, =0{no errors} one{# error} other{# errors}}",{count:e});return e===0?this.translate.instant("{status}, no errors.",{status:n}):this.translate.instant("{statusStr}, {errorStr}.",{statusStr:n,errorStr:o})}hasErrors(){return this.countPhysDiskErrors()+this.countVdevErrors()>0}goToVdevsPage(){this.router.navigate(["/storage",this.pool().id.toString(),"vdevs"])}countVdevErrors(){return ti(e=>e.type!==ft.Disk,this.pool().topology)}countPhysDiskErrors(){return ti(e=>e.type===ft.Disk,this.pool().topology)}static{this.\u0275fac=function(n){return new(n||t)}}static{this.\u0275cmp=P({type:t,selectors:[["ix-storage-health-card"]],inputs:{pool:[1,"pool"]},decls:25,vars:22,consts:[[1,"card",3,"ixUiSearch"],["mat-card-title",""],[3,"type","tooltip"],["mat-button","","ixTest","scrub",3,"ixUiSearch"],[1,"card-content"],[1,"details-item"],[1,"label","status"],["tabindex","0"],[1,"details-item",3,"ixUiSearch"],[1,"scrub-tooltip",3,"message"],[1,"label"],[3,"pool"],["mat-button","","ixTest","scrub",3,"ixUiSearch","click",4,"ixRequiresRoles"],["mat-button","","ixTest","scrub",3,"click","ixUiSearch"],["mat-button","","disabled","","ixTest","scrub-disabled"],["tabindex","0",3,"click","keydown.enter"],[1,"value"],["ixTest","configure-scrub",3,"click"],[1,"blank-spacer"],[3,"scan","pool"],[3,"scan"]],template:function(n,o){if(n&1&&(a(0,"mat-card",0)(1,"mat-card-header")(2,"h3",1),p(3),s(4,"translate"),h(5,"ix-pool-card-icon",2),r(),x(6,sr,1,3,"button",3)(7,cr,2,1),r(),a(8,"mat-card-content",4)(9,"div",5),h(10,"ix-pool-card-icon",2),a(11,"div",6),p(12),r(),x(13,dr,3,3,"a",7),r(),a(14,"div",8),h(15,"ix-tooltip",9),s(16,"translate"),a(17,"div",10),p(18),s(19,"translate"),r(),x(20,mr,6,6)(21,ur,6,6),r(),x(22,gr,8,7,"div",8),x(23,xr,2,1),x(24,_r,1,1,"ix-deduplication-stats",11),r()()),n&2){let f,y,D;m("ixUiSearch",o.searchableElements.elements.zfsHealth),i(3),u(" ",l(4,16,"Storage Health")," "),i(2),m("type",o.iconType())("tooltip",o.iconTooltip()),i(),_(o.wasScanInitiated()?7:6),i(4),m("type",o.iconType())("tooltip",o.iconTooltip()),i(2),u(" ",o.getErrorText()," "),i(),_(o.hasErrors()?13:-1),i(),m("ixUiSearch",o.searchableElements.elements.scheduledScrub),i(),m("message",l(16,18,o.helptextVolumes.scrubTooltip)),i(3),u(" ",l(19,20,"Scheduled Scrub"),": "),i(2),_((f=o.scrub())!=null&&f.enabled?20:21),i(2),_(o.pool().autotrim.value===o.AutoTrimValue.On?22:-1),i(),_((y=o.scan())!=null&&y.function?23:-1),i(),_(o.pool().dedup_table_size>0||((D=o.pool().topology)==null||D.dedup==null?null:D.dedup.length)>0?24:-1)}},dependencies:[Y,Oe,ve,Ce,Ke,J,R,w,X,k,ji,Qn,eo,Zn,M,mn],styles:[`@keyframes _ngcontent-%COMP%_blinker{50%{opacity:.1}}@keyframes _ngcontent-%COMP%_fade-in-animation{0%{opacity:0}
20to{opacity:1}}@keyframes _ngcontent-%COMP%_pulse-box-shadow-animation{0%,to{box-shadow:none;outline:0}50%{box-shadow:0 0 10px 10px var(--primary-lighter);outline:2px solid var(--primary)}}[_nghost-%COMP%]{display:flex}[_nghost-%COMP%]     .card{border:none;border-radius:0;margin:0}[_nghost-%COMP%]     .card mat-card-header{align-items:center;border-bottom:1px solid var(--lines);justify-content:space-between;min-height:40px;padding:8px 8px 8px 16px}[_nghost-%COMP%]     .card mat-card-header .mat-mdc-button{flex-shrink:0}[_nghost-%COMP%]     .card .mat-mdc-card-title{align-items:center;column-gap:5px;display:flex;font-size:1.65rem;margin-bottom:0}@media(max-width:3132px){[_nghost-%COMP%]     .card .mat-mdc-card-title{font-size:1.728em}}[_nghost-%COMP%]     .card mat-card-content{margin:0;padding:16px!important}[_nghost-%COMP%]     .card mat-card-content>div{padding:0}[_nghost-%COMP%]     .card ngx-skeleton-loader{flex:1}[_nghost-%COMP%]     .card .details-item{animation-duration:.35s;animation-fill-mode:backwards;animation-name:_ngcontent-%COMP%_fade-in-animation;align-items:center;display:flex;flex-direction:row;flex-wrap:wrap;margin-bottom:4px}[_nghost-%COMP%]     .card .details-item:first-child{margin-top:0}[_nghost-%COMP%]     .card .details-item .label{font-weight:700;margin-right:5px;white-space:normal}[_nghost-%COMP%]     .card .details-item .value{font-weight:400;margin-right:5px;white-space:normal}[_nghost-%COMP%]     .card .details-item a{color:var(--primary);cursor:pointer;margin-left:auto;max-width:100%;overflow:hidden;text-decoration:underline;text-overflow:ellipsis;white-space:nowrap}[_nghost-%COMP%]     .card .details-item ngx-skeleton-loader{display:inline-block;flex:0;height:20px;min-width:30px;width:30%}[_nghost-%COMP%]     .card .details-item ngx-skeleton-loader   .loader{margin-bottom:0}[_nghost-%COMP%]     .card mat-card-actions{border-top:1px solid var(--lines);box-sizing:border-box;display:flex;justify-content:flex-end;margin:0;padding:8px 8px 8px 16px}[_nghost-%COMP%]     .card mat-card-actions .mdc-button--outlined{border:1px solid var(--alt-fg2);border-radius:0;opacity:.8}[_nghost-%COMP%]     .card mat-card-actions .mdc-button--outlined:hover{background-color:var(--hover-bg)!important}[_nghost-%COMP%]     .card{flex:1}[_nghost-%COMP%]     .card .content-container{height:100%}[_nghost-%COMP%]     .card .details-item{align-items:center;column-gap:8px;display:flex;margin:8px 0}[_nghost-%COMP%]     .card .details-item ix-missing-access-wrapper{margin-left:auto}[_nghost-%COMP%]     .card .scrub-tooltip{width:20px;padding-left:4px}[_nghost-%COMP%]     .blank-spacer{width:24px}.card-content[_ngcontent-%COMP%]{display:flex;flex-direction:column}.controls[_ngcontent-%COMP%]{column-gap:8px;display:flex}
21/*# sourceMappingURL=storage-health-card.component-AU3SGSOS.css.map */`],changeDetection:0})}}return t})();var vr=t=>["advanced-actions",t],br=t=>["upgrade-pool",t],yr=t=>["disconnect",t],Pr=t=>["expand",t],Sr=t=>["auto-trim",t];function Mr(t,d){if(t&1){let e=V();a(0,"button",17),C("click",function(){I(e);let o=g(3);return B(o.onUpgrade())}),p(1),s(2,"translate"),r()}if(t&2){let e,n=g(3);m("ixTest",E(4,br,(e=n.pool())==null?null:e.name)),i(),u(" ",l(2,2,"Upgrade")," ")}}function kr(t,d){if(t&1&&L(0,Mr,3,6,"button",16),t&2){let e=g(2);m("ixRequiresRoles",e.requiredRoles)}}function Dr(t,d){if(t&1){let e=V();a(0,"button",18),C("click",function(){I(e);let o=g(2);return B(o.onDisconnect())}),p(1),s(2,"translate"),r()}if(t&2){let e,n=g(2);m("ixTest",E(5,yr,(e=n.pool())==null?null:e.name))("ixUiSearch",n.searchableElements.elements.disconnect),i(),u(" ",l(2,3,"Disconnect")," ")}}function Or(t,d){if(t&1){let e=V();a(0,"button",19),C("click",function(){I(e);let o=g(2);return B(o.onExpand())}),h(1,"tn-icon",20),p(2),s(3,"translate"),r()}if(t&2){let e,n=g(2);m("ixTest",E(5,Pr,(e=n.pool())==null?null:e.name))("ixUiSearch",n.searchableElements.elements.expand),i(2),u(" ",l(3,3,"Expand Pool")," ")}}function wr(t,d){if(t&1){let e=V();a(0,"button",21),C("click",function(){I(e);let o=g(2);return B(o.onEditAutotrim())}),h(1,"tn-icon",22),p(2),s(3,"translate"),r()}if(t&2){let e,n=g(2);m("ixTest",E(4,Sr,(e=n.pool())==null?null:e.name)),i(2),u(" ",l(3,2,"Auto TRIM")," ")}}function Tr(t,d){if(t&1){let e=V();a(0,"ix-sed-locked-warning",23),C("importSuccess",function(){I(e);let o=g(2);return B(o.onImportSuccess())}),r()}if(t&2){let e=g(2);m("pool",e.pool())}}function Er(t,d){if(t&1&&h(0,"ix-pool-usage-card",15),t&2){let e=g(2);m("poolState",e.pool())}}function Rr(t,d){if(t&1&&(a(0,"div",1)(1,"div",3)(2,"h2",4),p(3),r(),a(4,"div",5),x(5,kr,1,1,"button",6),L(6,Dr,3,7,"button",7),a(7,"button",8),s(8,"translate"),s(9,"translate"),h(10,"tn-icon",9),r(),a(11,"mat-menu",null,0),L(13,Or,4,7,"button",10)(14,wr,4,6,"button",11),r()()(),x(15,Tr,1,1,"ix-sed-locked-warning",12),a(16,"div",13),h(17,"ix-vdevs-card",14),x(18,Er,1,1,"ix-pool-usage-card",15),h(19,"ix-storage-health-card",12)(20,"ix-disk-health-card",14),r()()),t&2){let e,n,o,f=Ci(12),y=g(
21);i(3),v((e=y.pool())==null?null:e.name),i(2),_(!((n=y.pool())!=null&&n.is_upgraded)&&y.isOnline()?5:-1),i(),m("ixRequiresRoles",y.requiredRoles),i(),m("matTooltip",l(8,16,"Advanced Actions"))("matMenuTriggerFor",f)("ixTest",E(20,vr,(o=y.pool())==null?null:o.name)),we("aria-label",l(9,18,"Advanced Actions")),i(6),m("ixRequiresRoles",y.requiredRoles),i(),m("ixRequiresRoles",y.requiredRoles),i(),_(y.isSedLocked()?15:-1),i(2),m("poolState",y.pool())("disks",y.disks()),i(),_(y.rootDataset()?18:-1),i(),m("pool",y.pool()),i(),m("poolState",y.pool())("disks",y.disks())}}function Ir(t,d){t&1&&h(0,"ngx-skeleton-loader")}function Br(t,d){if(t&1&&(a(0,"mat-card",24)(1,"mat-card-content"),A(2,Ir,1,0,"ngx-skeleton-loader",null,ce),r()()),t&2){let e=g(2);i(2),q(e.counter(5))}}function Nr(t,d){if(t&1&&(a(0,"div",2)(1,"div",3),h(2,"ngx-skeleton-loader"),r(),a(3,"div",13),A(4,Br,4,0,"mat-card",24,ce),r()()),t&2){let e=g();i(4),q(e.counter(4))}}var oo=(()=>{class t{constructor(){this.matDialog=c(Ve),this.dialogService=c(le),this.errorHandler=c(W),this.translate=c(F),this.loader=c(Je),this.api=c(U),this.snackbar=c(ue),this.store=c(He),this.searchDirectives=c(Xi),this.destroyRef=c(N),this.pool=O(),this.rootDataset=O(),this.isLoading=O(),this.disks=O([]),this.requiredRoles=[$.PoolWrite],this.searchableElements=Bn,this.isOnline=b(()=>this.pool().status===Z.Online),this.isSedLocked=b(()=>{let e=this.pool();return e?.status===Z.Offline&&e?.all_sed===!0&&e?.status_code==="SED_LOCKED_DISKS"})}ngOnChanges(e){(e.isLoading||!this.isLoading())&&setTimeout(()=>this.handlePendingGlobalSearchElement(),300)}onDisconnect(){this.matDialog.open(Ln,{data:this.pool()}).afterClosed().pipe(S(this.destroyRef)).subscribe(e=>{e&&this.store.loadDashboard()})}onExpand(){this.dialogService.confirm({title:this.translate.instant(ge.expandPoolDialog.title),message:this.translate.instant(ge.expandPoolDialog.message)}).pipe(j(Boolean),pe(()=>this.api.job("pool.expand",[this.pool().id]).pipe(this.loader.withLoader())),j(e=>e.state===Rt.Success),qe(()=>{this.snackbar.success(this.translate.instant("Successfully expanded pool {name}.",{name:this.pool().name})),this.store.loadDashboard()}),this.errorHandler.withErrorHandler(),S(this.destroyRef)).subscribe()}onUpgrade(){this.dialogService.confirm({title:this.translate.instant("Upgrade Pool"),message:this.translate.instant(ge.upgradePoolDialogWarning)+this.pool().name}).pipe(j(Boolean),pe(()=>this.api.call("pool.upgrade",[this.pool().id]).pipe(this.loader.withLoader())),qe(()=>{this.snackbar.success(this.translate.instant("Pool {name} successfully upgraded.",{name:this.pool().name})),this.store.loadDashboard()}),this.errorHandler.withErrorHandler(),S(this.destroyRef)).subscribe()}onEditAutotrim(){this.matDialog.open($t,{data:this.pool()}).afterClosed().pipe(j(Boolean),S(this.destroyRef)).subscribe(()=>this.store.loadDashboard())}onImportSuccess(){this.store.loadDashboard()}counter(e){return new Array(e).fill(0).map((n,o)=>o)}handlePendingGlobalSearchElement(){let e=this.searchDirectives.pendingUiHighlightElement;e&&this.searchDirectives.get(e)?.highlight(e)}static{this.\u0275fac=function(n){return new(n||t)}}static{this.\u0275cmp=P({type:t,selectors:[["ix-dashboard-pool"]],inputs:{pool:[1,"pool"],rootDataset:[1,"rootDataset"],isLoading:[1,"isLoading"],disks:[1,"disks"]},features:[We],decls:2,vars:1,consts:[["advancedMenu","matMenu"],[1,"pool-container"],[1,"skeleton-content"],[1,"pool-header"],[1,"pool-name"],[1,"pool-actions"],["mat-button","","color","primary",3,"ixTest"],["mat-button","","color","accent",3,"ixTest","ixUiSearch","click",4,"ixRequiresRoles"],["mat-icon-button","",3,"matTooltip","matMenuTriggerFor","ixTest"],["name","dots-vertical","library","mdi"],["mat-menu-item","",3,"ixTest","ixUiSearch","click",4,"ixRequiresRoles"],["mat-menu-item","",3,"ixTest","click",4,"ixRequiresRoles"],[3,"pool"],[1,"cards"],[3,"poolState","disks"],[3,"poolState"],["mat-button","","color","primary",3,"ixTest","click",4,"ixRequiresRoles"],["mat-button","","color","primary",3,"click","ixTest"],["mat-button","","color","accent",3,"click","ixTest","ixUiSearch"],["mat-menu-item","",3,"click","ixTest","ixUiSearch"],["name","trending-up","library","mdi"],["mat-menu-item","",3,"click","ixTest"],["name","content-cut","library","mdi"],[3,"importSuccess","pool"],[1,"card"]],template:function(n,o){n&1&&x(0,Rr,21,22,"div",1)(1,Nr,6,0,"div",2),n&2&&_(o.isLoading()?1:0)},dependencies:[J,R,Mt,Ai,Ui,qi,Et,w,Oe,_e,An,jn,no,zn,Bi,Ii,Y,X,k,Gn,M],styles:[`@keyframes _ngcontent-%COMP%_blinker{50%{opacity:.1}}@keyframes _ngcontent-%COMP%_fade-in-animation{0%{opacity:0}
21to{opacity:1}}@keyframes _ngcontent-%COMP%_pulse-box-shadow-animation{0%,to{box-shadow:none;outline:0}50%{box-shadow:0 0 10px 10px var(--primary-lighter);outline:2px solid var(--primary)}}[_nghost-%COMP%]{display:block}.card[_ngcontent-%COMP%]{border:none;border-radius:0;margin:0}.card[_ngcontent-%COMP%]   mat-card-header[_ngcontent-%COMP%]{align-items:center;border-bottom:1px solid var(--lines);justify-content:space-between;min-height:40px;padding:8px 8px 8px 16px}.card[_ngcontent-%COMP%]   mat-card-header[_ngcontent-%COMP%]   .mat-mdc-button[_ngcontent-%COMP%]{flex-shrink:0}.card[_ngcontent-%COMP%]   .mat-mdc-card-title[_ngcontent-%COMP%]{align-items:center;column-gap:5px;display:flex;font-size:1.65rem;margin-bottom:0}@media(max-width:3132px){.card[_ngcontent-%COMP%]   .mat-mdc-card-title[_ngcontent-%COMP%]{font-size:1.728em}}.card[_ngcontent-%COMP%]   mat-card-content[_ngcontent-%COMP%]{margin:0;padding:16px!important}.card[_ngcontent-%COMP%]   mat-card-content[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{padding:0}.card[_ngcontent-%COMP%]   ngx-skeleton-loader[_ngcontent-%COMP%]{flex:1}.card[_ngcontent-%COMP%]   .details-item[_ngcontent-%COMP%]{animation-duration:.35s;animation-fill-mode:backwards;animation-name:_ngcontent-%COMP%_fade-in-animation;align-items:center;display:flex;flex-direction:row;flex-wrap:wrap;margin-bottom:4px}.card[_ngcontent-%COMP%]   .details-item[_ngcontent-%COMP%]:first-child{margin-top:0}.card[_ngcontent-%COMP%]   .details-item[_ngcontent-%COMP%]   .label[_ngcontent-%COMP%]{font-weight:700;margin-right:5px;white-space:normal}.card[_ngcontent-%COMP%]   .details-item[_ngcontent-%COMP%]   .value[_ngcontent-%COMP%]{font-weight:400;margin-right:5px;white-space:normal}.card[_ngcontent-%COMP%]   .details-item[_ngcontent-%COMP%]   a[_ngcontent-%COMP%]{color:var(--primary);cursor:pointer;margin-left:auto;max-width:100%;overflow:hidden;text-decoration:underline;text-overflow:ellipsis;white-space:nowrap}.card[_ngcontent-%COMP%]   .details-item[_ngcontent-%COMP%]   ngx-skeleton-loader[_ngcontent-%COMP%]{display:inline-block;flex:0;height:20px;min-width:30px;width:30%}.card[_ngcontent-%COMP%]   .details-item[_ngcontent-%COMP%]   ngx-skeleton-loader[_ngcontent-%COMP%]     .loader{margin-bottom:0}.card[_ngcontent-%COMP%]   mat-card-actions[_ngcontent-%COMP%]{border-top:1px solid var(--lines);box-sizing:border-box;display:flex;justify-content:flex-end;margin:0;padding:8px 8px 8px 16px}.card[_ngcontent-%COMP%]   mat-card-actions[_ngcontent-%COMP%]   .mdc-button--outlined[_ngcontent-%COMP%]{border:1px solid var(--alt-fg2);border-radius:0;opacity:.8}.card[_ngcontent-%COMP%]   mat-card-actions[_ngcontent-%COMP%]   .mdc-button--outlined[_ngcontent-%COMP%]:hover{background-color:var(--hover-bg)!important}.pool-header[_ngcontent-%COMP%]{align-items:center;display:flex;justify-content:space-between;padding-bottom:5px;margin-bottom:5px;margin-left:5px;margin-right:5px;border-bottom:1px solid var(--lines)}.pool-name[_ngcontent-%COMP%]{color:var(--fg2)}.pool-actions[_ngcontent-%COMP%]{align-items:center;display:flex;gap:8px}.pool-actions[_ngcontent-%COMP%]   button[_ngcontent-%COMP%]{margin-left:6px}.cards[_ngcontent-%COMP%]{display:grid;gap:8px;grid-template-columns:calc(50% - 4px) calc(50% - 4px)}@media screen and (max-width:959px){.cards[_ngcontent-%COMP%]{grid-template-columns:auto}}@media screen and (min-width:1920px){.cards[_ngcontent-%COMP%]{grid-template-columns:calc(25% - 6px) calc(25% - 6px) calc(25% - 6px) calc(25% - 6px)}}.skeleton-content[_ngcontent-%COMP%]   .pool-header[_ngcontent-%COMP%]   ngx-skeleton-loader[_ngcontent-%COMP%]{display:inline-block;height:40px;margin-bottom:8px;width:100%}.skeleton-content[_ngcontent-%COMP%]   .pool-header[_ngcontent-%COMP%]     .loader{height:40px}.skeleton-content[_ngcontent-%COMP%]   .card[_ngcontent-%COMP%]   ngx-skeleton-loader[_ngcontent-%COMP%]{display:inline-block;height:20px;margin:8px 0;width:100%}.skeleton-content[_ngcontent-%COMP%]   .card[_ngcontent-%COMP%]   ngx-skeleton-loader[_ngcontent-%COMP%]     .loader{margin:0}
22/*# sourceMappingURL=dashboard-pool.component-O3TKBB35.css.map */`],changeDetection:0})}}return t})();var si={title:"Import Pool",selectPool:"Select pool to import",poolLabel:"Pool"};var Vr=(t,d)=>d.name;function Fr(t,d){if(t&1&&(a(0,"div",6)(1,"div",11),h(2,"tn-icon",12),a(3,"div",13)(4,"span",14),p(5),r(),a(6,"div",15)(7,"span",16),p(8),r(),a(9,"span",16),p(10),s(11,"translate"),r()()()(),a(12,"span",17),p(13),s(14,"translate"),r()()),t&2){let e=d.$implicit;i(2),we("aria-hidden",!0),i(3),v(e.name),i(3),v(e.model),i(2),fe("",l(11,6,"Serial"),": ",e.serial),i(3),u(" ",l(14,8,"Locked")," ")}}var ao=(()=>{class t{constructor(){this.lockedDisks=O.required(),this.skip=Be(),this.unlock=Be()}onSkip(){this.skip.emit()}onUnlock(){this.unlock.emit()}static{this.\u0275fac=function(n){return new(n||t)}}static{this.\u0275cmp=P({type:t,selectors:[["ix-locked-sed-disks"]],inputs:{lockedDisks:[1,"lockedDisks"]},outputs:{skip:"skip",unlock:"unlock"},decls:24,vars:18,consts:[[1,"locked-sed-disks"],["role","alert",1,"warning-box"],[1,"warning-header"],["name","lock","library","mdi"],[1,"warning-message"],["role","list",1,"disk-list"],["role","listitem",1,"disk-item"],[1,"instruction-text"],[1,"actions"],["mat-button","","type","button","ixTest","skip",3,"click"],["mat-button","","type","button","color","primary","ixTest","unlock",3,"click"],[1,"disk-info"],["name","lock","library","mdi",1,"disk-icon"],[1,"disk-detail
22s"],[1,"disk-name"],[1,"disk-meta-row"],[1,"disk-meta"],[1,"status-badge"]],template:function(n,o){n&1&&(a(0,"div",0)(1,"div",1)(2,"div",2),h(3,"tn-icon",3),a(4,"span"),p(5),s(6,"translate"),r()(),a(7,"p",4),p(8),s(9,"translate"),r()(),a(10,"div",5),s(11,"translate"),A(12,Fr,15,10,"div",6,Vr),r(),a(14,"p",7),p(15),s(16,"translate"),r(),a(17,"div",8)(18,"button",9),C("click",function(){return o.onSkip()}),p(19),s(20,"translate"),r(),a(21,"button",10),C("click",function(){return o.onUnlock()}),p(22),s(23,"translate"),r()()()),n&2&&(i(5),v(l(6,6,"Locked SED Disks Detected")),i(3),u(" ",l(9,8,"The system has detected locked Self-Encrypting Drives (SED). These disks must be unlocked before they can be used to import pools. Would you like to unlock them now?")," "),i(2),we("aria-label",l(11,10,"Locked SED disks")),i(2),q(o.lockedDisks()),i(3),u(" ",l(16,12,"You can choose to unlock these disks now, or skip this step and proceed with importing pools from unlocked disks only.")," "),i(4),u(" ",l(20,14,"Skip")," "),i(3),u(" ",l(23,16,"Unlock")," "))},dependencies:[_e,R,w,k,M],styles:[`@charset "UTF-8";.locked-sed-disks[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:16px;padding-top:16px}.warning-box[_ngcontent-%COMP%]{background-color:var(--alt-bg1);border:1px solid var(--lines);border-left:4px solid var(--yellow);border-radius:4px;padding:16px}.warning-header[_ngcontent-%COMP%]{align-items:center;color:var(--yellow);display:flex;font-size:16px;font-weight:600;gap:8px;margin-bottom:8px}.warning-message[_ngcontent-%COMP%]{color:var(--fg2);line-height:1.5;margin:0}.disk-list[_ngcontent-%COMP%]{background-color:var(--bg1);border:1px solid var(--lines);border-radius:4px;overflow:hidden}.disk-item[_ngcontent-%COMP%]{align-items:center;border-bottom:1px solid var(--lines);display:flex;justify-content:space-between;padding:12px 16px}.disk-item[_ngcontent-%COMP%]:last-child{border-bottom:none}.disk-info[_ngcontent-%COMP%]{align-items:center;display:flex;gap:12px}.disk-icon[_ngcontent-%COMP%]{color:var(--yellow);font-size:24px}.disk-details[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:2px}.disk-details[_ngcontent-%COMP%]   .disk-meta-row[_ngcontent-%COMP%]{display:flex;gap:0}.disk-name[_ngcontent-%COMP%]{color:var(--fg1);font-weight:600}.disk-meta[_ngcontent-%COMP%]{color:var(--fg2);font-size:13px}.disk-meta[_ngcontent-%COMP%] + .disk-meta[_ngcontent-%COMP%]:before{content:" \\2022  "}.status-badge[_ngcontent-%COMP%]{background-color:var(--alt-bg2);border-radius:12px;color:var(--fg1);font-size:12px;font-weight:500;padding:4px 12px}.instruction-text[_ngcontent-%COMP%]{color:var(--fg2);font-size:14px;line-height:1.5;margin:0}.actions[_ngcontent-%COMP%]{display:flex;gap:8px;justify-content:flex-end;margin-top:8px}
23/*# sourceMappingURL=locked-sed-disks.component-QU56M4KN.css.map */`],changeDetection:0})}}return t})();var Lr=t=>[t];function Ur(t,d){if(t&1){let e=V();a(0,"div",10)(1,"button",15),s(2,"translate"),C("click",function(){let o=I(e).$index,f=g();return B(f.removeException(o))}),h(3,"tn-icon",16),r(),h(4,"ix-select",17),s(5,"translate"),h(6,"ix-input",18),s(7,"translate"),r()}if(t&2){let e=d.$index,n=g();m("formGroupName",e),i(),we("aria-label",l(2,7,"Remove disk exception")),i(3),m("label",l(5,9,"Disk"))("options",n.getOptionsForException(e))("required",!0),i(2),m("label",l(7,11,"Password"))("required",!0)}}function Ar(t,d){if(t&1&&(a(0,"button",19),p(1),s(2,"translate"),r()),t&2){let e=g();m("disabled",e.form.invalid||e.isUnlocking()),i(),u(" ",l(2,2,"Unlock Disks")," ")}}var ro=(()=>{class t{constructor(){this.formBuilder=c(Se),this.translate=c(F),this.errorHandler=c(W),this.dialogService=c(le),this.api=c(U),this.snackbar=c(ue),this.destroyRef=c(N),this.lockedDisks=O.required(),this.globalSedPassword=O(""),this.skip=Be(),this.unlocked=Be(),this.Role=$,this.form=this.formBuilder.nonNullable.group({globalPassword:["",H.required],updateGlobalSettings:[!0],exceptions:this.formBuilder.array([])}),this.isUnlocking=he(!1),this.exceptionsVersion=he(0),this.availableDisksForException=b(()=>{this.exceptionsVersion();let e=new Set(this.form.controls.exceptions.controls.map(n=>n.controls.diskName.value));return this.lockedDisks().filter(n=>!e.has(n.name)).map(n=>({label:`${n.name} - ${n.model} (${n.serial})`,value:n.name}))}),Ct(()=>{let e=this.globalSedPassword();e&&this.form.controls.globalPassword.setValue(e)})}getOptionsForException(e){let n=this.form.controls.exceptions.at(e).controls.diskName.value,o=new Set(this.form.controls.exceptions.controls.filter((y,D)=>D!==e).map(y=>y.controls.diskName.value)),f=this.lockedDisks().filter(y=>!o.has(y.name)||y.name===n).map(y=>({label:`${y.name} - ${y.model} (${y.serial})`,value:y.name}));return G(f)}addException(){this.availableDisksForException().length!==0&&(this.form.controls.exceptions.push(this.formBuilder.group({diskName:["",H.required],password:["",H.required]})),this.exceptionsVersion.update(n=>n+1))}removeException(e){this.form.controls.exceptions.removeAt(e),this.exceptionsVersion.update(n=>n+1)}onSkip(){this.skip.emit()}onSubmit(){let{globalPassword:e,updateGlobalSettings:n,exceptions:o}=this.form.getRawValue(),f=new Map;for(let T of o)T.diskName&&T.password&&f.set(T.diskName,T.password);this.isUnlocking.set(!0);let y=this.lockedDisks().map(T=>({name:T.name,password:f.get(T.name)||e}));(n?this.api.call("system.advanced.update",[{sed_passwd:e}
23]):G(null)).pipe(pe(()=>this.dialogService.jobDialog(this.api.job("core.bulk",["disk.unlock_sed",y.map(T=>[T])]),{title:this.translate.instant("Unlocking SED Disks")}).afterClosed()),j(T=>T.state===Rt.Success),mi(()=>this.isUnlocking.set(!1)),S(this.destroyRef)).subscribe({next:T=>{let te=T.result,be=te.map((Ue,Kt)=>({result:Ue,index:Kt})).filter(({result:Ue})=>Ue.error!==null),Ye=te.length-be.length;if(be.length===0)this.snackbar.success(this.translate.instant("All SED disks unlocked successfully")),this.unlocked.emit();else if(Ye>0)this.snackbar.success(this.translate.instant("{count} of {total} disks unlocked successfully",{count:Ye,total:te.length})),this.unlocked.emit();else{let Ue=be.map(({result:Kt,index:xo})=>`${y[xo].name}: ${Kt.error}`).join(`
24`);this.dialogService.error({title:this.translate.instant("Failed to Unlock Disks"),message:Ue})}},error:T=>{this.errorHandler.showErrorModal(T)}})}static{this.\u0275fac=function(n){return new(n||t)}}static{this.\u0275cmp=P({type:t,selectors:[["ix-unlock-sed-disks"]],inputs:{lockedDisks:[1,"lockedDisks"],globalSedPassword:[1,"globalSedPassword"]},outputs:{skip:"skip",unlocked:"unlocked"},decls:32,vars:33,consts:[[1,"unlock-sed-disks"],[1,"form-container",3,"ngSubmit","formGroup"],["formControlName","globalPassword","type","password",3,"label","hint","required"],["formControlName","updateGlobalSettings","ixTest","update-global-settings","aria-describedby","update-global-hint"],[1,"checkbox-label"],["id","update-global-hint",1,"checkbox-hint"],[1,"exceptions-section"],[1,"section-title"],[1,"section-hint"],["formArrayName","exceptions","role","list",1,"exceptions-list"],["role","listitem",1,"exception-item",3,"formGroupName"],["mat-button","","type","button","ixTest","add-exception",1,"add-exception-button",3,"click","disabled"],["name","plus","library","mdi","customSize","18px"],["mat-button","","type","button","ixTest","skip",3,"click"],["mat-button","","type","submit","color","primary","ixTest","unlock-disks",3,"disabled",4,"ixRequiresRoles"],["mat-icon-button","","type","button","ixTest","remove-exception",1,"remove-button",3,"click"],["name","close","library","mdi"],["formControlName","diskName",3,"label","options","required"],["formControlName","password","type","password",3,"label","required"],["mat-button","","type","submit","color","primary","ixTest","unlock-disks",3,"disabled"]],template:function(n,o){n&1&&(a(0,"div",0)(1,"form",1),C("ngSubmit",function(){return o.onSubmit()}),h(2,"ix-input",2),s(3,"translate"),s(4,"translate"),a(5,"mat-checkbox",3)(6,"span",4),p(7),s(8,"translate"),r(),a(9,"span",5),p(10),s(11,"translate"),r()(),a(12,"div",6)(13,"h3",7),p(14),s(15,"translate"),r(),a(16,"p",8),p(17),s(18,"translate"),r(),a(19,"div",9),s(20,"translate"),A(21,Ur,8,13,"div",10,fi),r(),a(23,"button",11),C("click",function(){return o.addException()}),h(24,"tn-icon",12),p(25),s(26,"translate"),r()(),a(27,"ix-form-actions")(28,"button",13),C("click",function(){return o.onSkip()}),p(29),s(30,"translate"),r(),L(31,Ar,3,4,"button",14),r()()()),n&2&&(i(),m("formGroup",o.form),i(),m("label",l(3,13,"Global SED Password"))("hint",l(4,15,"This password will be used to unlock all selected disks."))("required",!0),i(5),v(l(8,17,"Update global settings (applies to all disks/pools)")),i(3),v(l(11,19,"Save this password to the system configuration for future use with these disks.")),i(4),v(l(15,21,"Individual Disk Passwords (Optional)")),i(3),v(l(18,23,"Override the global password for specific disks that use a different password.")),i(2),we("aria-label",l(20,25,"Disk password exceptions")),i(2),q(o.form.controls.exceptions.controls),i(2),m("disabled",o.availableDisksForException().length===0),i(2),u(" ",l(26,27,"Add Disk Exception")," "),i(4),u(" ",l(30,29,"Skip")," "),i(2),m("ixRequiresRoles",E(31,Lr,o.Role.DiskWrite)))},dependencies:[re,ae,ne,oe,xe,me,de,wi,Ti,De,Ge,_e,se,R,Mt,Ni,w,J,k,M],styles:[`.unlock-sed-disks[_ngcontent-%COMP%]{padding:16px 0}.form-container[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:16px}mat-checkbox[_ngcontent-%COMP%]{display:flex;flex-direction:column}mat-checkbox[_ngcontent-%COMP%]   .checkbox-label[_ngcontent-%COMP%]{display:block;font-weight:500}mat-checkbox[_ngcontent-%COMP%]   .checkbox-hint[_ngcontent-%COMP%]{color:var(--fg2);display:block;font-size:12px;margin-top:4px}.exceptions-section[_ngcontent-%COMP%]{background-color:var(--bg1);border:1px solid var(--lines);border-radius:4px;margin-top:8px;padding:16px}.section-title[_ngcontent-%COMP%]{color:var(--fg1);font-size:14px;font-weight:600;margin:0 0 4px}.section-hint[_ngcontent-%COMP%]{color:var(--fg2);font-size:13px;margin:0 0 16px}.exceptions-list[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:16px}.exception-item[_ngcontent-%COMP%]{background-color:var(--bg2);border:1px solid var(--lines);border-radius:4px;display:flex;flex-direction:column;padding:16px;position:relative}.remove-button[_ngcontent-%COMP%]{color:var(--fg2);position:absolute;right:4px;top:4px}.remove-button[_ngcontent-%COMP%]:hover{color:var(--red)}.add-exception-button[_ngcontent-%COMP%]{align-items:center;border:1px dashed var(--lines);border-radius:4px;color:var(--fg2);display:flex;gap:4px;justify-content:center;margin-top:12px;padding:8px 16px;width:100%}.add-exception-button[_ngcontent-%COMP%]:hover:not(:disabled){border-color:var(--primary);color:var(--primary)}.add-exception-button[_ngcontent-%COMP%]:disabled{opacity:.5}
25/*# sourceMappingURL=unlock-sed-disks.component-2FAK233T.css.map */`],changeDetection:0})}}return t})();function so(t){return t.filter(d=>d.sed_status===fn.Locked).map(d=>({name:d.name,model:d.model||"",serial:d.serial||"",size:d.size}))}function qr(t,d){if(t&1){let e=V();a(0,"ix-locked-sed-disks",4),C("skip",function(){I(e);let o=g();return B(o.onLockedSedSkip())})("unlock",function(){I(e);let o=g();return B(o.onLockedSedUnlock())}),r()}if(t&2){let e=g();m("lockedDisks",e.lockedSedDisks())}}function Hr(t,d){if(t&1){let e=V();a(0,"ix-unlock-sed-disks",5),C("skip",function(){I(e);let o=g();return B(o.onUnlockSkip())})("unlocked",function(){I(e);let o=g();return B(o.onUnlockSuccess())}),r()}if(t&2){let e=g();m("lockedDisks",e.lockedSedDisks())("globalSedPassword",e.globalSedPassword())}}function zr(t,d){if(t&1&&(a(0,"button",10),p(1),s(2,"translate"),r()),t&2){let e=g(2);m("disabled",e.formGroup.invalid||e.isLoading()),i(),u(" ",l(2,2,"Import")," ")}}function Wr(t,d){if(t&1){let e=V();a(0,"form",6),C("submit",function(){I(e);let o=g();return B(o.onSubmit())}),a(1,"ix-fieldset",7),s(2,"translate"),h(3,"ix-select",8),s(4,"translate"),r(),a(5,"ix-form-actions"),L(6,zr,3,4,"button",9),r()()}if(t&2){let e=g();m("formGroup",e.formGroup),i(),m("title",l(2,7,e.helptext.selectPool)),i(2),m("formControlName",e.pool.fcName)("label",l(4,9,e.pool.label))("options",e.pool.options)("required",!0),i(3),m("ixRequiresRoles",e.requiredRoles)}}var lo=(()=>{class t{constructor(){this.fb=c(Se),this.api=c(U),this.errorHandler=c(W),this.dialogService=c(le),this.translate=c(F),this.router=c(Pe),this.snackbar=c(ue),this.loader=c(Je),this.destroyRef=c(N),this.slideInRef=c(pt),this.requiredRoles=[$.PoolWrite],this.helptext=si,this.isLoading=he(!1),this.currentStep=he("loading"),this.lockedSedDisks=he([]),this.globalSedPassword=he(""),this.importablePools=[],this.formGroup=this.fb.nonNullable.group({guid:["",H.required]}),this.pool={fcName:"guid",label:si.poolLabel,options:G([])},this.slideInRef.requireConfirmationWhen(()=>G(this.formGroup.dirty))}ngOnInit(){this.checkForLockedDisks()}checkForLockedDisks(){this.isLoading.set(!0),this.currentStep.set("loading"),Ze([this.api.call("disk.details"),this.api.call("system.advanced.sed_global_password")]).pipe(S(this.destroyRef)).subscribe({next:([e,n])=>{this.isLoading.set(!1),this.globalSedPassword.set(n||"");let o=[...e.used,...e.unused],f=so(o);this.lockedSedDisks.set(f),f.length>0?this.currentStep.set("locked-sed"):this.loadImportablePools()},error:e=>{this.isLoading.set(!1),this.errorHandler.showErrorModal(e)}})}loadImportablePools(){this.isLoading.set(!0),this.api.job("pool.import_find").pipe(zi(),ui(),S(this.destroyRef)).subscribe({next:e=>{this.isLoading.set(!1);let n=e.result||[];this.importablePools=n.map(f=>({name:f.name,guid:f.guid}));let o=n.map(f=>({label:`${f.name} | ${f.guid}`,value:f.guid}));this.pool.options=G(o),this.currentStep.set("import")},error:e=>{this.isLoading.set(!1),this.errorHandler.showErrorModal(e)}})}onLockedSedSkip(){this.loadImportablePools()}onLockedSedUnlock(){this.currentStep.set("unlock-sed")}onUnlockSkip(){this.loadImportablePools()}onUnlockSuccess(){this.checkForLockedDisks()}
25onSubmit(){this.dialogService.jobDialog(this.api.job("pool.import_pool",[{guid:this.formGroup.getRawValue().guid}]),{title:this.translate.instant("Importing Pool")}).afterClosed().pipe(pe(()=>this.checkIfUnlockNeeded()),this.errorHandler.withErrorHandler(),S(this.destroyRef)).subscribe({next:([e,n])=>{this.slideInRef.close({response:!0}),this.snackbar.success(this.translate.instant("Pool imported successfully.")),n&&this.router.navigate(["/datasets",e[0].id,"unlock"])},error:()=>{this.isLoading.set(!1)}})}checkIfUnlockNeeded(){let e=this.importablePools.find(n=>n.guid===this.formGroup.value.guid);return e?this.api.call("pool.dataset.query",[[["name","=",e.name]]]).pipe(this.loader.withLoader(),pe(n=>n[0].locked&&n[0].encryption_root===n[0].id?this.dialogService.confirm({title:this.translate.instant("Unlock Pool"),message:this.translate.instant("This pool has an encrypted root dataset which is locked. Do you want to unlock it?"),hideCheckbox:!0}).pipe(Xe(o=>[n,o])):G([n,!1]))):G([[],!1])}static{this.\u0275fac=function(n){return new(n||t)}}static{this.\u0275cmp=P({type:t,selectors:[["ix-import-pool"]],decls:7,vars:6,consts:[[3,"requiredRoles","title","loading"],[3,"lockedDisks"],[3,"lockedDisks","globalSedPassword"],[1,"ix-form-container",3,"formGroup"],[3,"skip","unlock","lockedDisks"],[3,"skip","unlocked","lockedDisks","globalSedPassword"],[1,"ix-form-container",3,"submit","formGroup"],[3,"title"],[3,"formControlName","label","options","required"],["mat-button","","type","submit","color","primary","ixTest","import",3,"disabled",4,"ixRequiresRoles"],["mat-button","","type","submit","color","primary","ixTest","import",3,"disabled"]],template:function(n,o){if(n&1&&(h(0,"ix-modal-header",0),s(1,"translate"),a(2,"mat-card")(3,"mat-card-content"),x(4,qr,1,1,"ix-locked-sed-disks",1)(5,Hr,1,2,"ix-unlock-sed-disks",2)(6,Wr,7,11,"form",3),r()()),n&2){let f;m("requiredRoles",o.requiredRoles)("title",l(1,4,o.helptext.title))("loading",o.isLoading()),i(4),_((f=o.currentStep())==="locked-sed"?4:f==="unlock-sed"?5:f==="import"?6:-1)}},dependencies:[ct,Y,X,re,ae,ne,oe,xe,me,de,Le,Ge,se,J,R,w,k,ao,ro,M],encapsulation:2,changeDetection:0})}}return t})();function jr(t,d){if(t&1&&(h(0,"tn-banner",4),s(1,"translate"),s(2,"translate")),t&2){let e=g();m("heading",l(1,2,e.enabledWarningHeading))("message",l(2,4,e.enabledWarningMessage))}}var po=(()=>{class t{static{this.defaultMaxConcurrentJobs=1}constructor(){this.fb=c(Se),this.api=c(U),this.errorHandler=c(Lt),this.globalErrorHandler=c(W),this.slideInRef=c(pt),this.destroyRef=c(N),this.isFormLoading=he(!1),this.showEnabledWarning=he(!1),this.enabledWarningHeading="Shares will be locked to a single dataset",this.enabledWarningMessage="Once tiering is on, SMB shares and Webshares stop following nested datasets. Each share will expose only its own dataset, and any child datasets under it will no longer be visible to clients through that share. Create a separate share for each dataset you want to expose.",this.helptext={maxConcurrentJobs:"Maximum number of tiering rewrite jobs that can run in parallel. Higher values speed up data movement between tiers but increase CPU and I/O load on the system.",maxUsedPercentage:"Pool capacity threshold (in percent) above which tiering will move data off the performance tier to keep free space available. Lower values reserve more free space; higher values let the performance tier fill more before data is migrated."},this.formGroup=this.fb.nonNullable.group({enabled:[!1],max_concurrent_jobs:[t.defaultMaxConcurrentJobs,[H.required,H.min(1)]],max_used_percentage:[80,[H.required,H.min(0),H.max(100)]]}),this.initialEnabled=!1,this.slideInRef.requireConfirmationWhen(()=>G(this.formGroup.dirty)),this.formGroup.controls.enabled.valueChanges.pipe(S(this.destroyRef)).subscribe(e=>{this.showEnabledWarning.set(e&&!this.initialEnabled)})}ngOnInit(){this.isFormLoading.set(!0),this.api.call("zfs.tier.config").pipe(S(this.destroyRef)).subscribe({next:e=>{this.initialEnabled=e.enabled,this.formGroup.patchValue(e),this.isFormLoading.set(!1)},error:e=>{this.isFormLoading.set(!1),this.globalErrorHandler.showErrorModal(e)}})}submit(){if(this.isFormLoading())return;let e=this.formGroup.getRawValue();this.isFormLoading.set(!0),this.api.call("zfs.tier.update",[e]).pipe(S(this.destroyRef)).subscribe({next:()=>{this.isFormLoading.set(!1),this.slideInRef.close({response:!0})},error:n=>{this.isFormLoading.set(!1),this.errorHandler.handleValidationErrors(n,this.formGroup)}})}static{this.\u0275fac=function(n){return new(n||t)}}static{this.\u0275cmp=P({type:t,selectors:[["ix-tier-config-form"]],decls:20,vars:28,consts:[[3,"title","loading"],[1,"ix-form-container",3,"submit","formGroup"],[3,"title"],["formControlName","enabled",3,"label"],["type","warning",3,"heading","message"],["formControlName","max_concurrent_jobs","type","number",3,"label","hint"],["formControlName","max_used_percentage","type","number",3,"label","hint"],["mat-button","","type","submit","color","primary","ixTest","save",3,"disabled"]],template:function(n,o){n&1&&(h(0,"ix-modal-header",0),s(1,"translate"),a(2,"mat-card")(3,"mat-card-content")(4,"form",1),C("submit",function(){return o.submit()}),a(5,"ix-fieldset",2),s(6,"translate"),h(7,"ix-checkbox",3),s(8,"translate"),x(9,jr,3,6,"tn-banner",4),h(10,"ix-input",5),s(11,"translate"),s(12,"translate"),h(13,"ix-input",6),s(14,"translate"),s(1
255,"translate"),r(),a(16,"ix-form-actions")(17,"button",7),p(18),s(19,"translate"),r()()()()()),n&2&&(m("title",l(1,12,"Tiering"))("loading",o.isFormLoading()),i(4),m("formGroup",o.formGroup),i(),m("title",l(6,14,"Tiering Configuration")),i(2),m("label",l(8,16,"Enabled")),i(2),_(o.showEnabledWarning()?9:-1),i(),m("label",l(11,18,"Max Concurrent Jobs"))("hint",l(12,20,o.helptext.maxConcurrentJobs)),i(3),m("label",l(14,22,"Max Used Percentage"))("hint",l(15,24,o.helptext.maxUsedPercentage)),i(4),m("disabled",o.formGroup.invalid||o.isFormLoading()),i(),u(" ",l(19,26,"Save")," "))},dependencies:[ct,Y,X,re,ae,ne,oe,me,de,Le,$e,De,se,R,w,Ei,k,M],encapsulation:2,changeDetection:0})}}return t})();var ze=(function(t){return t.New="NEW",t.Existing="EXISTING",t})(ze||{});var co=(t,d)=>d.formattedDisk;function Gr(t,d){if(t&1&&(a(0,"li"),p(1),r()),t&2){let e=d.$implicit;i(),u(" ",e.formattedDisk," ")}}function $r(t,d){if(t&1&&(a(0,"h4"),p(1),s(2,"translate"),r(),a(3,"ul",8),A(4,Gr,2,1,"li",null,co),r()),t&2){let e=g();i(),v(l(2,1,"Unassigned Disks")),i(3),q(e.noPoolsDisks)}}function Jr(t,d){if(t&1&&h(0,"ix-warning",9),t&2){let e=g().$implicit,n=g(2);m("message",n.getWarningText(e.exportedPool))}}function Qr(t,d){if(t&1&&(a(0,"li"),p(1),x(2,Jr,1,1,"ix-warning",9),r()),t&2){let e=d.$implicit;i(),u(" ",e.formattedDisk," "),i(),_(e.exportedPool?2:-1)}}function Kr(t,d){if(t&1&&(a(0,"h4"),p(1),s(2,"translate"),r(),a(3,"ul",8),A(4,Qr,3,2,"li",null,co),r()),t&2){let e=g();i(),v(l(2,1,"Disks with exported pools")),i(3),q(e.exportedPoolsDisks)}}function Yr(t,d){if(t&1&&(h(0,"ix-select",4),s(1,"translate")),t&2){let e=g();m("label",l(1,3,"Existing Pool"))("required",!0)("options",e.poolOptions$)}}function Xr(t,d){if(t&1&&(a(0,"button",10),p(1),s(2,"translate"),r()),t&2){let e=g();m("disabled",e.form.invalid),i(),u(" ",l(2,2,"Add Disks")," ")}}var mo=(()=>{class t{constructor(){this.fb=c(Se),this.router=c(Pe),this.translate=c(F),this.validatorsService=c(Ut),this.cdr=c(ye),this.dialogRef=c(Ne),this.resource=c(Me),this.destroyRef=c(N),this.requiredRoles=[$.DiskWrite],this.toPoolOptions$=G([{label:this.translate.instant("New Pool"),value:ze.New},{label:this.translate.instant("Existing Pool"),value:ze.Existing}]),this.poolOptions$=G(this.resource.pools.filter(e=>e.status!==Z.Offline).map(e=>({label:e.name,value:e.id}))),this.form=this.fb.group({toPool:[ze.New],pool:[null,[this.validatorsService.validateOnCondition(e=>e.parent?.get("toPool")?.value===ze.Existing,H.required)]]})}get noPoolsDisks(){let e=this.resource.unusedDisks.filter(o=>!o.exported_zpool).map(o=>({detailedDisk:`${_t(o.size)} ${o.subsystem==="nvme"?o.subsystem.toUpperCase():o.type}`,exportedPool:o.exported_zpool})),n=ht(e,o=>o.detailedDisk+o.exportedPool);return Object.keys(n).map(o=>({formattedDisk:`${n[o][0].detailedDisk} x ${n[o].length}`,exportedPool:n[o][0].exportedPool}))}get exportedPoolsDisks(){let e=this.resource.unusedDisks.filter(o=>o.exported_zpool).map(o=>({detailedDisk:`${_t(o.size)} ${o.subsystem==="nvme"?o.subsystem.toUpperCase():o.type}`,exportedPool:o.exported_zpool})),n=ht(e,o=>o.detailedDisk+o.exportedPool);return Object.keys(n).map(o=>({formattedDisk:`${n[o][0].detailedDisk} x ${n[o].length}`,exportedPool:n[o][0].exportedPool}))}get isExistingMode(){return this.form.controls.toPool.value===ze.Existing}ngOnInit(){this.form.controls.toPool.valueChanges.pipe(S(this.destroyRef)).subscribe(e=>{e===ze.New&&(this.form.controls.pool.reset(),this.form.controls.pool.setErrors(null)),this.cdr.detectChanges()})}onSubmit(){this.dialogRef.close();let{toPool:e,pool:n}=this.form.value;e===ze.Existing?this.router.navigate(["/storage",n,"add-vdevs"]):this.router.navigate(["/storage","create"])}getWarningText(e){return`(${e})`}static{this.\u0275fac=function(n){return new(n||t)}}static{this.\u0275cmp=P({type:t,selectors:[["ix-manage-unused-disk-dialog"]],decls:16,vars:16,consts:[["mat-dialog-title",""],[1,"ix-form-container",3,"submit","formGroup"],["mat-dialog-content",""],["formControlName","toPool",3,"label","options"],["formControlName","pool",3,"label","required","options"],["mat-dialog-actions",""],["mat-button","","type","button","ixTest","cancel",3,"matDialogClose"],["mat-button","","type","submit","color","primary","ixTest","add-disks",3,"disabled",4,"ixRequiresRoles"],[1,"unused-disks"],[1,"inline-warning",3,"message"],["mat-button","","type","submit","color","primary","ixTest","add-disks",3,"disabled"]],template:function(n,o){n&1&&(a(0,"h1",0),p(1),s(2,"translate"),r(),a(3,"form",1),C("submit",function(){return o.onSubmit()}),a(4,"div",2),x(5,$r,6,3),x(6,Kr,6,3),a(7,"ix-fieldset"),h(8,"ix-radio-group",3),s(9,"translate"),x(10,Yr,2,5,"ix-select",4),r()(),a(11,"div",5)(12,"button",6),p(13),s(14,"translate"),r(),L(15,Xr,3,4,"button",7),r()()),n&2&&(i(),v(l(2,10,"Add To Pool")),i(2),m("formGroup",o.form),i(2),_(o.noPoolsDisks.length?5:-1),i(),_(o.exportedPoolsDisks.length?6:-1),i(2),m("label",l(9,12,"Add Disks To:"))("options",o.toPoolOptions$),i(2),_(o.isExistingMode?10:-1),i(2),m("matDialogClose",!1),i(),u(" ",l(14,14,"Cancel")," "),i(2),m("ixRequiresRoles",o.requiredRoles))},dependencies:[ke,re,ae,ne,oe,xe,me,de,lt,$i,Le,Ft,Ge,Tt,R,w,Fe,J,k,M],styles:[`.unused-disks[_ngcontent-%COMP%]{max-height:calc(65vh - 230px);overflow-y:auto!important}.mat-mdc-dialog-actions[_ngcontent-%COMP%]{display:flex;justify-content:flex-end}.inline-warning[_ngcontent-%COMP%]{display:inline-block}
26/*# sourceMappingURL=manage-unused-disk-dialog.component-M5BMSFQO.css.map */`],changeDetection:0})}}return t})();function Zr(t,d){if(t&1){let e=V();a(0,"button",4),C("click",function(){I(e);let o=g();return B(o.onAddToStorage())}),p(1),s(2,"translate"),r()}if(t&2){let e=g();m("disabled",!e.disks().length),i(),u(" ",l(2,2,"Add To Pool")," ")}}var uo=(()=>{class t{constructor(){this.title=O(""),this.disks=O.required(),this.addToStorage=Be(),this.requiredRoles=[$.DiskWrite]}
26onAddToStorage(){this.addToStorage.emit()}static{this.\u0275fac=function(n){return new(n||t)}}static{this.\u0275cmp=P({type:t,selectors:[["ix-unused-disk-card"]],inputs:{title:[1,"title"],disks:[1,"disks"]},outputs:{addToStorage:"addToStorage"},decls:9,vars:5,consts:[[1,"card"],["mat-card-title",""],[1,"value"],["mat-button","","ixTest","add-to-pool",3,"disabled","click",4,"ixRequiresRoles"],["mat-button","","ixTest","add-to-pool",3,"click","disabled"]],template:function(n,o){n&1&&(a(0,"mat-card",0)(1,"mat-card-header")(2,"h4",1),p(3),s(4,"translate"),r()(),a(5,"mat-card-content")(6,"h1",2),p(7),r(),L(8,Zr,3,4,"button",3),r()()),n&2&&(i(3),v(l(4,3,o.title())),i(4),v(o.disks().length),i(),m("ixRequiresRoles",o.requiredRoles))},dependencies:[Y,ve,Ce,X,J,R,w,k,M],styles:[`@keyframes _ngcontent-%COMP%_blinker{50%{opacity:.1}}@keyframes _ngcontent-%COMP%_fade-in-animation{0%{opacity:0}to{opacity:1}}@keyframes _ngcontent-%COMP%_pulse-box-shadow-animation{0%,to{box-shadow:none;outline:0}50%{box-shadow:0 0 10px 10px var(--primary-lighter);outline:2px solid var(--primary)}}.card[_ngcontent-%COMP%]{border:none;border-radius:0;margin:0}.card[_ngcontent-%COMP%]   mat-card-header[_ngcontent-%COMP%]{align-items:center;border-bottom:1px solid var(--lines);justify-content:space-between;min-height:40px;padding:8px 8px 8px 16px}.card[_ngcontent-%COMP%]   mat-card-header[_ngcontent-%COMP%]   .mat-mdc-button[_ngcontent-%COMP%]{flex-shrink:0}.card[_ngcontent-%COMP%]   .mat-mdc-card-title[_ngcontent-%COMP%]{align-items:center;column-gap:5px;display:flex;font-size:1.65rem;margin-bottom:0}@media(max-width:3132px){.card[_ngcontent-%COMP%]   .mat-mdc-card-title[_ngcontent-%COMP%]{font-size:1.728em}}.card[_ngcontent-%COMP%]   mat-card-content[_ngcontent-%COMP%]{margin:0;padding:16px!important}.card[_ngcontent-%COMP%]   mat-card-content[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{padding:0}.card[_ngcontent-%COMP%]   ngx-skeleton-loader[_ngcontent-%COMP%]{flex:1}.card[_ngcontent-%COMP%]   .details-item[_ngcontent-%COMP%]{animation-duration:.35s;animation-fill-mode:backwards;animation-name:_ngcontent-%COMP%_fade-in-animation;align-items:center;display:flex;flex-direction:row;flex-wrap:wrap;margin-bottom:4px}.card[_ngcontent-%COMP%]   .details-item[_ngcontent-%COMP%]:first-child{margin-top:0}.card[_ngcontent-%COMP%]   .details-item[_ngcontent-%COMP%]   .label[_ngcontent-%COMP%]{font-weight:700;margin-right:5px;white-space:normal}.card[_ngcontent-%COMP%]   .details-item[_ngcontent-%COMP%]   .value[_ngcontent-%COMP%]{font-weight:400;margin-right:5px;white-space:normal}.card[_ngcontent-%COMP%]   .details-item[_ngcontent-%COMP%]   a[_ngcontent-%COMP%]{color:var(--primary);cursor:pointer;margin-left:auto;max-width:100%;overflow:hidden;text-decoration:underline;text-overflow:ellipsis;white-space:nowrap}.card[_ngcontent-%COMP%]   .details-item[_ngcontent-%COMP%]   ngx-skeleton-loader[_ngcontent-%COMP%]{display:inline-block;flex:0;height:20px;min-width:30px;width:30%}.card[_ngcontent-%COMP%]   .details-item[_ngcontent-%COMP%]   ngx-skeleton-loader[_ngcontent-%COMP%]     .loader{margin-bottom:0}.card[_ngcontent-%COMP%]   mat-card-actions[_ngcontent-%COMP%]{border-top:1px solid var(--lines);box-sizing:border-box;display:flex;justify-content:flex-end;margin:0;padding:8px 8px 8px 16px}.card[_ngcontent-%COMP%]   mat-card-actions[_ngcontent-%COMP%]   .mdc-button--outlined[_ngcontent-%COMP%]{border:1px solid var(--alt-fg2);border-radius:0;opacity:.8}.card[_ngcontent-%COMP%]   mat-card-actions[_ngcontent-%COMP%]   .mdc-button--outlined[_ngcontent-%COMP%]:hover{background-color:var(--hover-bg)!important}.card[_ngcontent-%COMP%]   mat-card-header[_ngcontent-%COMP%]{border-bottom:none}.card[_ngcontent-%COMP%]   mat-card-content[_ngcontent-%COMP%]{align-items:center;display:flex;justify-content:space-between}.card[_ngcontent-%COMP%]   mat-card-content[_ngcontent-%COMP%]   .value[_ngcontent-%COMP%]{font-size:3.5em;white-space:nowrap}
27/*# sourceMappingURL=unused-disk-card.component-NQS64J76.css.map */`],changeDetection:0})}}return t})();function es(t,d){if(t&1){let e=V();a(0,"ix-unused-disk-card",2),s(1,"translate"),C("addToStorage",function(){I(e);let o=g();return B(o.addNoPoolDisksToStorage())}),r()}if(t&2){let e=g();
27m("title",l(1,2,"Unassigned Disks"))("disks",e.noPoolsDisks)}}function ts(t,d){if(t&1){let e=V();a(0,"ix-unused-disk-card",2),s(1,"translate"),C("addToStorage",function(){I(e);let o=g();return B(o.addExportedPoolDisksToStorage())}),r()}if(t&2){let e=g();m("title",l(1,2,"Disks with exported pools"))("disks",e.exportedPoolsDisks)}}var go=(()=>{class t{constructor(){this.api=c(U),this.errorHandler=c(W),this.cdr=c(ye),this.matDialog=c(Ve),this.destroyRef=c(N),this.pools=O.required(),this.noPoolsDisks=[],this.exportedPoolsDisks=[],Ct(()=>{this.pools()&&this.updateUnusedDisks()})}ngOnInit(){this.subscribeToDiskQuery()}updateUnusedDisks(){this.api.call("disk.details").pipe(this.errorHandler.withErrorHandler(),S(this.destroyRef)).subscribe(e=>{this.noPoolsDisks=e.unused,this.exportedPoolsDisks=e.used.filter(n=>n.exported_zpool),this.cdr.markForCheck()})}subscribeToDiskQuery(){this.unsubscribeFromDiskQuery(),this.diskQuerySubscription=this.api.subscribe("disk.query").pipe(pi(300),di(),S(this.destroyRef)).subscribe(()=>{this.updateUnusedDisks()})}addNoPoolDisksToStorage(){this.addUnusedDisksToStorage(this.noPoolsDisks)}addExportedPoolDisksToStorage(){this.addUnusedDisksToStorage(this.exportedPoolsDisks)}addUnusedDisksToStorage(e){this.matDialog.open(mo,{data:{pools:this.pools(),unusedDisks:[...e]},width:"600px"})}unsubscribeFromDiskQuery(){!this.diskQuerySubscription||this.diskQuerySubscription.closed||this.diskQuerySubscription.unsubscribe()}static{this.\u0275fac=function(n){return new(n||t)}}static{this.\u0275cmp=P({type:t,selectors:[["ix-unused-resources"]],inputs:{pools:[1,"pools"]},decls:3,vars:2,consts:[[1,"cards"],[1,"unused-resources",3,"title","disks"],[1,"unused-resources",3,"addToStorage","title","disks"]],template:function(n,o){n&1&&(a(0,"div",0),x(1,es,2,4,"ix-unused-disk-card",1),x(2,ts,2,4,"ix-unused-disk-card",1),r()),n&2&&(i(),_(o.noPoolsDisks.length?1:-1),i(),_(o.exportedPoolsDisks.length?2:-1))},dependencies:[uo,k,M],styles:[`@keyframes _ngcontent-%COMP%_blinker{50%{opacity:.1}}@keyframes _ngcontent-%COMP%_fade-in-animation{0%{opacity:0}to{opacity:1}}@keyframes _ngcontent-%COMP%_pulse-box-shadow-animation{0%,to{box-shadow:none;outline:0}50%{box-shadow:0 0 10px 10px var(--primary-lighter);outline:2px solid var(--primary)}}.header[_ngcontent-%COMP%]{align-items:center;display:flex;justify-content:space-between;margin-bottom:5px;margin-left:5px;margin-right:5px}.header[_ngcontent-%COMP%]   .title[_ngcontent-%COMP%]{color:var(--fg2)}.cards[_ngcontent-%COMP%]{height:100%;overflow-y:auto;padding-bottom:30px;width:100%;word-break:break-word}@media(max-width:767px){.cards[_ngcontent-%COMP%]{height:auto;overflow:visible}}.cards[_ngcontent-%COMP%]   .scroll-window[_ngcontent-%COMP%]{columns:18.5185185185vw;gap:8px}@media(max-width:767px){.cards[_ngcontent-%COMP%]   .scroll-window[_ngcontent-%COMP%]{columns:1;padding:0 16px}}@media(min-width:767px)and (max-width:1280px){.cards[_ngcontent-%COMP%]   .scroll-window[_ngcontent-%COMP%]{columns:33.3333333333vw;padding:0 16px}}.cards[_ngcontent-%COMP%]   .scroll-window[_ngcontent-%COMP%] > *[_ngcontent-%COMP%]{display:inline-block;width:100%}.cards[_ngcontent-%COMP%]   .scroll-window[_ngcontent-%COMP%] > *[_ngcontent-%COMP%]:not(:last-child){margin-bottom:8px}.cards[_ngcontent-%COMP%]{gap:16px}.cards[_ngcontent-%COMP%] > *[_ngcontent-%COMP%]{max-width:360px;min-width:360px}.cards[_ngcontent-%COMP%]{height:unset;margin-bottom:30px}@media(min-width:768px){.cards[_ngcontent-%COMP%]{display:flex;gap:16px;overflow:auto}}.cards[_ngcontent-%COMP%] > .unused-resources[_ngcontent-%COMP%]{width:unset}
28/*# sourceMappingURL=unused-resources.component-QG57JVRL.css.map */`],changeDetection:0})}}return t})();var ho={anchorRouterLink:["/storage"],hierarchy:["Storage"],elements:{storageDashboard:{anchor:"storage-dashboard",synonyms:["Pools","Storage Dashboard","Disks","Devices","Datasets"]},importPool:{hierarchy:["Import Pool"],synonyms:["Add Pool"]},createPool:{hierarchy:["Create Pool"],synonyms:["Add Pool","New Pool","Pool Wizard","Pool Creation Wizard"]},tiering:{hierarchy:["Tiering"],synonyms:["Tiering Configuration","ZFS Tiering","Performance Tier","Storage Tier"]}}};var is=()=>["/storage","disks"],ns=()=>["/storage","create"];function os(t,d){if(t&1){let e=V();a(0,"button",6),C("click",function(){I(e);let o=g();return B(o.onImportPool())}),p(1),s(2,"translate"),r()}if(t&2){let e=g();m("ixUiSearch",e.searchableElements.elements.importPool),i(),u(" ",l(2,2,"Import Pool")," ")}}function as(t,d){if(t&1){let e=V();a(0,"button",8),C("click",function(){I(e);let o=g(2);return B(o.onTiering())}),p(1),s(2,"translate"),r()}if(t&2){let e=g(2);m("ixUiSearch",e.searchableElements.elements.tiering),i(),u(" ",l(2,2,"Tiering")," ")}}function rs(t,d){if(t&1&&L(0,as,3,4,"button",7),t&2){let e=g();m("ixRequiresRoles",e.requiredRoles)}}
28function ss(t,d){if(t&1&&(a(0,"a",3),p(1),s(2,"translate"),r()),t&2){let e=g(2);m("ixUiSearch",e.searchableElements.elements.createPool)("routerLink",je(5,ns)),i(),u(" ",l(2,3,"Create Pool")," ")}}function ls(t,d){if(t&1&&L(0,ss,3,6,"a",9),t&2){let e=g();m("ixRequiresRoles",e.requiredRoles)}}function ps(t,d){t&1&&h(0,"ix-dashboard-pool",10)(1,"ix-dashboard-pool",10),t&2&&(m("isLoading",!0),i(),m("isLoading",!0))}function cs(t,d){if(t&1&&(a(0,"div",5),h(1,"ix-empty",11),r()),t&2){let e=g();i(),m("conf",e.emptyConfig)("requiredRoles",e.requiredRoles)}}function ds(t,d){if(t&1&&h(0,"ix-unused-resources",12),t&2){let e=g(2);m("pools",e.pools())}}function ms(t,d){if(t&1&&h(0,"ix-dashboard-pool",13),t&2){let e=d.$implicit,n=g(2);m("pool",e)("disks",n.getDisksByPool(e))("isLoading",n.isLoadingPoolDetails())("rootDataset",n.rootDatasets[e.name])}}function us(t,d){if(t&1&&(x(0,ds,1,1,"ix-unused-resources",12),A(1,ms,1,4,"ix-dashboard-pool",13,ce)),t&2){let e=g();_(e.hasNoPools()?-1:0),i(),q(e.pools())}}var fo=(()=>{class t{constructor(){this.router=c(Pe),this.slideIn=c(Bt),this.cdr=c(ye),this.store=c(He),this.translate=c(F),this.destroyRef=c(N),this.store$=c(Ot),this.tierService=c(mt),this.requiredRoles=[$.PoolWrite],this.isEnterprise=Dt(this.store$.select(Qi)),this.searchableElements=ho,this.rootDatasets={},this.emptyConfig=Ae(Re({},dn),{button:{label:this.translate.instant("Create Pool"),action:()=>this.router.navigate(["/storage","create"])}}),this.pools=this.store.pools,this.arePoolsLoading=this.store.arePoolsLoading,this.isLoadingPoolDetails=this.store.isLoadingPoolDetails,this.hasNoPools=b(()=>this.pools().length===0)}ngOnInit(){this.store.rootDatasets$.pipe(S(this.destroyRef)).subscribe(e=>{this.rootDatasets=e,this.cdr.markForCheck()}),this.tierService.getTierConfig().pipe(S(this.destroyRef)).subscribe(),this.store.loadDashboard()}getDisksByPool(e){return this.store.disksByPool()[e.name]||[]}onImportPool(){this.slideIn.open(lo).pipe(j(e=>!!e.response),S(this.destroyRef)).subscribe(()=>this.store.loadDashboard())}onTiering(){this.slideIn.open(po).pipe(j(e=>!!e.response),S(this.destroyRef)).subscribe(()=>{this.tierService.invalidate(),this.tierService.getTierConfig().pipe(S(this.destroyRef)).subscribe(),this.store.loadDashboard()})}static{this.\u0275fac=function(n){return new(n||t)}}static{this.\u0275cmp=P({type:t,selectors:[["ix-pools-dashboard"]],features:[rt([He])],decls:11,vars:12,consts:[["ixTest","import-pool","mat-button","",3,"ixUiSearch","click",4,"ixRequiresRoles"],["mat-button","","ixTest","disks",3,"routerLink"],["mat-button","","ixTest","tiering",3,"ixUiSearch"],["mat-button","","color","primary","ixTest","create-pool",3,"ixUiSearch","routerLink"],[3,"ixUiSearch"],[1,"entity-empty-wrapper"],["ixTest","import-pool","mat-button","",3,"click","ixUiSearch"],["mat-button","","ixTest","tiering",3,"ixUiSearch","click",4,"ixRequiresRoles"],["mat-button","","ixTest","tiering",3,"click","ixUiSearch"],["mat-button","","color","primary","ixTest","create-pool",3,"ixUiSearch","routerLink",4,"ixRequiresRoles"],[1,"pool",3,"isLoading"],[3,"conf","requiredRoles"],[3,"pools"],[1,"pool",3,"pool","disks","isLoading","rootDataset"]],template:function(n,o){n&1&&(a(0,"ix-page-header"),L(1,os,3,4,"button",0),a(2,"a",1),p(3),s(4,"translate"),r(),x(5,rs,1,1,"button",2),x(6,ls,1,1,"a",3),r(),a(7,"div",4),x(8,ps,2,2),x(9,cs,2,2,"div",5),x(10,us,3,1),r()),n&2&&(i(),m("ixRequiresRoles",o.requiredRoles),i(),m("routerLink",je(11,is)),i(),u(" ",l(4,9,"Disks")," "),i(2),_(o.isEnterprise()?5:-1),i(),_(!o.hasNoPools()&&!o.arePoolsLoading()?6:-1),i(),m("ixUiSearch",o.searchableElements.elements.storageDashboard),i(),_(o.arePoolsLoading()?8:-1),i(),_(o.hasNoPools()&&!o.arePoolsLoading()?9:-1),i(),_(!o.hasNoPools()&&!o.arePoolsLoading()?10:-1))},dependencies:[tn,J,R,w,Oe,st,oo,nn,go,k,M],styles:[`.pool[_ngcontent-%COMP%]{margin-bottom:30px}.pool[_ngcontent-%COMP%]:last-child{margin-bottom:0}
29/*# sourceMappingURL=pools-dashboard.component-7YUVFKOZ.css.map */`],changeDetection:0})}}return t})();var Af=[{path:"",data:{title:"Storage"},children:[{path:"",data:{title:"Storage Dashboard",breadcrumb:"Storage Dashboard"},component:fo}
29,{path:"create",loadComponent:()=>import("./chunk-QDZFWXT5.js").then(t=>t.PoolManagerComponent),data:{title:"Pool Creation Wizard",breadcrumb:"Pool Creation Wizard"},canDeactivate:[_n]},{path:":poolId/vdevs",redirectTo:":poolId/vdevs/",pathMatch:"full"},{path:":poolId/vdevs",data:{title:"VDEVs",breadcrumb:"VDEVs"},loadChildren:()=>import("./chunk-TBE5Z6QF.js").then(t=>t.vDevsRoutes)},{path:":poolId/add-vdevs",component:In,data:{title:"Add VDEVs to Pool",breadcrumb:"Add VDEVs to Pool"}},{path:"disks",loadChildren:()=>import("./chunk-BZGYVHLZ.js").then(t=>t.diskRoutes),data:{title:"Disks",breadcrumb:"Disks"}}]}];export{Af as storageRoutes};
30//# sourceMappingURL=chunk-R3ILKTHS.js.map

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.