hfs 3.3.0-rc5 → 3.3.0-rc7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/admin/assets/{AccountsPage-Cq0xZ11q.js → AccountsPage-D18kfsM7.js} +2 -2
  2. package/admin/assets/{ArrayField-DlXwGcRi.js → ArrayField-C_SiccHt.js} +1 -1
  3. package/admin/assets/{ConfigFilePage-CS1DHLl9.js → ConfigFilePage-DK2WoVVT.js} +1 -1
  4. package/admin/assets/{CustomHtmlPage-D2bJwsUf.js → CustomHtmlPage-BuwxgXZb.js} +1 -1
  5. package/admin/assets/{DataTable--J_wIcuM.js → DataTable-YO7t2zol.js} +2 -2
  6. package/admin/assets/{DateTimeField-DWeCPNja.js → DateTimeField-JJtFlhyP.js} +1 -1
  7. package/admin/assets/{EventManager-DrRWt_JH.js → EventManager-CMbOaOVu.js} +1 -1
  8. package/admin/assets/{FileField-mNPkd3y3.js → FileField-DvOcVuL3.js} +1 -1
  9. package/admin/assets/{InternetPage--PzizUL_.js → InternetPage-Bnqiyd6R.js} +1 -1
  10. package/admin/assets/LangPage-UvLk_tcp.js +2 -0
  11. package/admin/assets/LogsPage-DZrag-6q.js +3 -0
  12. package/admin/assets/{MenuButton-DMz8eU4k.js → MenuButton-DZSVYDgz.js} +1 -1
  13. package/admin/assets/{MonitorPage-BfEEqSB9.js → MonitorPage-DHo-WAeK.js} +2 -2
  14. package/admin/assets/OptionsPage-C2tESF0q.js +3 -0
  15. package/admin/assets/PluginsPage-DsDE4gaI.js +1 -0
  16. package/admin/assets/{Tabs-B8NzzlRi.js → Tabs-Bo50sE_k.js} +1 -1
  17. package/admin/assets/{TextEditor-BF5GhCMi.js → TextEditor-CuqsIrmD.js} +1 -1
  18. package/admin/assets/{VfsPathField-BKblqejE.js → VfsPathField-DAjlREzU.js} +1 -1
  19. package/admin/assets/{agentIcons-xvHQBkKp.js → agentIcons-h26neS1O.js} +1 -1
  20. package/admin/assets/{baseUrl-Cp5EQLCd.js → baseUrl-DBsHXX2p.js} +1 -1
  21. package/admin/assets/{icons-BfdCXZin.js → icons-unNxkvar.js} +1 -1
  22. package/admin/assets/{index-CSmjBo2G.js → index-CCbBe4VH.js} +6 -6
  23. package/admin/assets/{routing-BQgmPveQ.js → routing-BTxUMqWz.js} +1 -1
  24. package/admin/index.html +1 -1
  25. package/frontend/assets/{dist-legacy-BwOLCt69.js → dist-legacy-DGxI1c76.js} +1 -1
  26. package/frontend/assets/index-legacy-DEPpVUOz.js +1 -0
  27. package/frontend/assets/{lib-legacy-Dtus09cI.js → lib-legacy-B78r2oy1.js} +1 -1
  28. package/frontend/assets/{sha512-legacy-CBENfTz7.js → sha512-legacy-Df4fa7x7.js} +1 -1
  29. package/frontend/index.html +1 -1
  30. package/npm-shrinkwrap.json +2 -2
  31. package/package.json +2 -1
  32. package/src/QuickZipStream.js +7 -0
  33. package/src/ThrottledStream.js +2 -0
  34. package/src/adminApis.js +4 -2
  35. package/src/auth.js +1 -0
  36. package/src/const.js +1 -1
  37. package/src/cross-const.js +3 -1
  38. package/src/cross.js +1 -1
  39. package/src/first.js +2 -1
  40. package/src/frontEndApis.js +47 -15
  41. package/src/i18n.js +1 -1
  42. package/src/middlewares.js +21 -14
  43. package/src/roots.js +6 -2
  44. package/src/serveFile.js +1 -1
  45. package/src/serveGuiAndSharedFiles.js +1 -1
  46. package/src/serveGuiFiles.js +5 -5
  47. package/src/upload.js +90 -42
  48. package/src/uploadOwners.js +49 -14
  49. package/src/util-http.js +15 -2
  50. package/src/vfs.js +71 -17
  51. package/src/webdav.js +93 -51
  52. package/admin/assets/LangPage-B4rQVR1J.js +0 -2
  53. package/admin/assets/LogsPage-Cf8QzZqj.js +0 -3
  54. package/admin/assets/OptionsPage-Di4sYyHk.js +0 -3
  55. package/admin/assets/PluginsPage-C1AwIVck.js +0 -1
  56. package/frontend/assets/index-legacy-BrUKT6jx.js +0 -1
@@ -1,3 +1,3 @@
1
- import{i as e}from"./rolldown-runtime-CacB07dV.js";import{t}from"./DateTimeField-DWeCPNja.js";import{n,r,t as i}from"./MenuButton-DMz8eU4k.js";import{n as a,t as o}from"./VfsPathField-BKblqejE.js";import{$n as s,Aa as c,C as l,Ca as u,Ct as d,Da as f,E as p,Ea as m,Et as h,F as g,Ft as _,H as v,Hr as y,Lt as b,M as x,Ma as S,N as C,O as w,Pr as T,R as E,Rn as D,S as O,St as k,Ta as A,U as j,Ut as M,W as ee,Yt as N,_ as te,ei as ne,en as re,er as ie,ft as P,gi as F,gt as ae,hi as I,hr as oe,ht as se,it as L,j as R,kr as ce,lt as le,mt as z,q as ue,ri as B,sr as V,st as de,ti as fe,tt as H,ur as pe,w as me,wa as U,y as W,zt as he}from"./index-CSmjBo2G.js";import{$ as ge,J as _e,Q as ve,X as ye,Y as be,Z as xe,et as G,it as Se,nt as Ce,rt as K,tt as we}from"./icons-BfdCXZin.js";var q=e(S());A();var Te=[`password`,`password2`,`adminActualAccess`,`hasPassword`,`invalidated`,`canLogin`,`members`];function Ee({account:e,done:n,groups:r,addToBar:i,reload:a}){var f,m;let{username:g}=L(),[_,y]=(0,q.useState)(e),[b,S]=(0,q.useState)([]),C=re();(0,q.useEffect)(()=>{var t;y(e),S(r.filter(t=>t!==e.username)),C||(t=E.current)==null||(t=t.querySelector(`input`))==null||t.focus()},[JSON.stringify(e)]);let w=!e.username,{isGroup:T}=_,E=(0,q.useRef)(),{members:A}=e,j=(f=e.plugin)==null?void 0:f.auth;return(0,q.createElement)(le,{key:e.username,formRef:E,values:_,set(e,t){y(n=>U(U({},n),{},{[t]:e}))},barSx:U({gap:2,width:`100%`},ue()),stickyBar:!0,addToBar:[!w&&(0,q.createElement)(l,U(U({icon:K,title:`Delete`,confirm:`Delete ${e.username}?`},g===e.username&&{disabled:!0,title:`Cannot delete current account`}),{},{onClick:()=>V(`del_account`,{username:e.username}).then(a)})),(0,q.createElement)(l,{icon:be,title:`Invalidate past sessions${D(`
2
- (already invalidated sessions before `,k(e.invalidated||0),`)`)}`,confirm:`Invalidate all sessions up to now for "${e.username}"?`,doneMessage:!0,onClick:()=>V(`invalidate_sessions`,{username:e.username}).then(a)}),...s(i)],fields:[{k:`username`,label:T?`Group name`:void 0,autoComplete:`off`,required:!0,md:T&&!j?12:4,getError:t=>t!==e.username&&V(`get_account`,{username:t}).then(t=>(t==null?void 0:t.username)===e.username?`usernames are case-insensitive`:`already used`,()=>!1)},j&&{k:``,md:8,comp:(0,q.createElement)(F,{severity:`info`},` Authentication handled by a plugin`)},!T&&!j&&{k:`password`,xs:6,md:4,type:`password`,autoComplete:`new-password`,required:w,label:w?`Password`:`Change password`},!T&&!j&&{k:`password2`,xs:6,md:4,type:`password`,autoComplete:`new-password`,label:`Repeat password`,getError:(e,{values:t})=>(e||``)!==(t.password||``)&&`Enter same password`},{k:`disabled`,comp:P,fromField:e=>!e,toField:e=>!e,label:`Enabled`,xs:12,sm:6,lg:4,helperText:_.disabled||_.canLogin!==!1?`Login is prevented if account is disabled, or all its groups are disabled`:(0,q.createElement)(B,{sx:{color:`warning.main`},component:`span`},new Date(e.expire)<new Date?`Login is prevented because account is expired`:`Login is prevented because all of its groups are disabled`)},{k:`ignore_limits`,comp:P,xs:12,sm:6,lg:4,helperText:_.ignore_limits?`Speed limits don't apply to this account`:`Speed limits apply to this account`},U({k:`admin`,comp:P,fromField:e=>e||null,label:`Admin-panel access`,xs:12,sm:6,lg:4,helperText:`To access THIS interface you are using right now`},!e.admin&&e.adminActualAccess&&{value:!0,disabled:!0,helperText:`This permission is inherited. To disable it, act on the groups.`}),!T&&{k:`require_password_change`,comp:P,xs:12,sm:6,lg:4,helperText:`At next login`},{k:`disable_password_change`,label:`Password change`,comp:ae,xs:12,sm:6,lg:4,defaultValue:null,options:{[`Default (${_.canChangePassword?`Allowed`:`Disabled`})`]:null,Allowed:!1,Disabled:!0}},A?T&&!A.length?(0,q.createElement)(B,{},`No members`):A.length>0&&(0,q.createElement)(O,{gap:0,flexWrap:`wrap`},`${A.length} members: `,N(`,\xA0`,(m=e.members)==null?void 0:m.map(e=>(0,q.createElement)(r.includes(e)?`i`:`span`,{},e))),(0,q.createElement)(W,{icon:K,confirm:`Delete ${e.members.length} accounts?`,onClick:()=>V(`del_account`,{username:e.members}).then(a),sx:{verticalAlign:`text-top`}})):null,T&&(0,q.createElement)(F,{severity:`info`},`To add users to this group, select the user and then click "Inherit"`),{k:`belongs`,comp:se,label:`Inherit from groups`,options:b,sm:6,lg:4,helperText:`Specify groups to inherit permissions from`+(T?`. A group can inherit from another group`:``)+(b.length?``:`. Now disabled because there are no groups to select, create one first.`)},{k:`allow_net`,comp:p,label:`Allowed network address`,sm:6,lg:4,placeholder:`any address`},!T&&{k:`auto_login_net`,comp:p,label:`Auto-login by IP address`,sm:6,lg:4,placeholder:`none`},{k:`redirect`,comp:o,placeholder:`no`,sm:6,lg:4,helperText:`If you want this account to be redirected to a specific folder/address (or even file) at login time`},{k:`expire`,label:`Expiration`,sm:6,lg:4,comp:t,toField:e=>e&&new Date(e),helperText:`When expired, login won't be allowed`},U(U({k:`days_to_live`,sm:6,lg:4,comp:z,step:`any`,min:1/1e3},_.expire&&{xs:12,disabled:!0,sx:{opacity:.2}}),{},{helperText:`Used to set expiration on first login`}),{k:`notes`,multiline:!0,sm:6,lg:4}],onError:v,save:U(U({},x(d(_,e))),{},{onClick(){return c(function*(){var t;let{password:r=``,password2:i,adminActualAccess:a,hasPassword:o,invalidated:s,canLogin:c,members:l}=_,d=u(_,Te),f=((t=E.current)==null?void 0:t.querySelector(`button.saveBtn`))||void 0;if(w){let e=yield V(`add_account`,d);if(r)try{yield h(_.username,r)}catch(e){throw V(`del_account`,{username:_.username}),e}n(e==null?void 0:e.username,f);return}let p=yield V(`set_account`,{username:e.username,changes:d});r&&(yield h(_.username,r),y(e=>U(U({},e),{},{password:``,password2:``}))),e.username===g&&(H.username=_.username),n(p==null?void 0:p.username,f)})()}})})}var J=e(pe());f(),A();var Y={fieldSeparator:`,`,lineSeparator:`
1
+ import{i as e}from"./rolldown-runtime-CacB07dV.js";import{t}from"./DateTimeField-JJtFlhyP.js";import{n,r,t as i}from"./MenuButton-DZSVYDgz.js";import{n as a,t as o}from"./VfsPathField-DAjlREzU.js";import{$n as s,Aa as c,C as l,Ca as u,Ct as d,Da as f,E as p,Ea as m,Et as h,F as g,Ft as _,H as v,Hr as y,Lt as b,M as x,Ma as S,N as C,O as w,Pr as T,R as E,Rn as D,S as O,St as k,Ta as A,U as j,Ut as M,W as ee,Yt as N,_ as te,ei as ne,en as re,er as ie,ft as P,gi as F,gt as ae,hi as I,hr as oe,ht as se,it as L,j as R,kr as ce,lt as le,mt as z,q as ue,ri as B,sr as V,st as de,ti as fe,tt as H,ur as pe,w as me,wa as U,y as W,zt as he}from"./index-CCbBe4VH.js";import{$ as ge,J as _e,Q as ve,X as ye,Y as be,Z as xe,et as G,it as Se,nt as Ce,rt as K,tt as we}from"./icons-unNxkvar.js";var q=e(S());A();var Te=[`password`,`password2`,`adminActualAccess`,`hasPassword`,`invalidated`,`canLogin`,`members`];function Ee({account:e,done:n,groups:r,addToBar:i,reload:a}){var f,m;let{username:g}=L(),[_,y]=(0,q.useState)(e),[b,S]=(0,q.useState)([]),C=re();(0,q.useEffect)(()=>{var t;y(e),S(r.filter(t=>t!==e.username)),C||(t=E.current)==null||(t=t.querySelector(`input`))==null||t.focus()},[JSON.stringify(e)]);let w=!e.username,{isGroup:T}=_,E=(0,q.useRef)(),{members:A}=e,j=(f=e.plugin)==null?void 0:f.auth;return(0,q.createElement)(le,{key:e.username,formRef:E,values:_,set(e,t){y(n=>U(U({},n),{},{[t]:e}))},barSx:U({gap:2,width:`100%`},ue()),stickyBar:!0,addToBar:[!w&&(0,q.createElement)(l,U(U({icon:K,title:`Delete`,confirm:`Delete ${e.username}?`},g===e.username&&{disabled:!0,title:`Cannot delete current account`}),{},{onClick:()=>V(`del_account`,{username:e.username}).then(a)})),(0,q.createElement)(l,{icon:be,title:`Invalidate past sessions${D(`
2
+ (already invalidated sessions before `,k(e.invalidated||0),`)`)}`,confirm:`Invalidate all sessions up to now for "${e.username}"?`,doneMessage:!0,onClick:()=>V(`invalidate_sessions`,{username:e.username}).then(a)}),...s(i)],fields:[{k:`username`,label:T?`Group name`:void 0,autoComplete:`off`,required:!0,md:T&&!j?12:4,getError:t=>t!==e.username&&V(`get_account`,{username:t}).then(t=>(t==null?void 0:t.username)===e.username?`usernames are case-insensitive`:`already used`,()=>!1)},j&&{k:``,md:8,comp:(0,q.createElement)(F,{severity:`info`},` Authentication handled by a plugin`)},!T&&!j&&{k:`password`,xs:6,md:4,type:`password`,autoComplete:`new-password`,required:w,label:w?`Password`:`Change password`},!T&&!j&&{k:`password2`,xs:6,md:4,type:`password`,autoComplete:`new-password`,label:`Repeat password`,getError:(e,{values:t})=>(e||``)!==(t.password||``)&&`Enter same password`},{k:`disabled`,comp:P,fromField:e=>!e,toField:e=>!e,label:`Enabled`,xs:12,sm:6,lg:4,helperText:_.disabled||_.canLogin!==!1?`Login is prevented if account is disabled, or all its groups are disabled`:(0,q.createElement)(B,{sx:{color:`warning.main`},component:`span`},new Date(e.expire)<new Date?`Login is prevented because account is expired`:`Login is prevented because all of its groups are disabled`)},{k:`ignore_limits`,comp:P,xs:12,sm:6,lg:4,helperText:_.ignore_limits?`Speed limits don't apply to this account`:`Speed limits apply to this account`},U({k:`admin`,comp:P,fromField:e=>e||null,label:`Admin-panel access`,xs:12,sm:6,lg:4,helperText:`To access THIS interface you are using right now`},!e.admin&&e.adminActualAccess&&{value:!0,disabled:!0,helperText:`This permission is inherited. To disable it, act on the groups.`}),!T&&{k:`require_password_change`,comp:P,xs:12,sm:6,lg:4,helperText:`At next login, but can be dismissed`},{k:`disable_password_change`,label:`Password change`,comp:ae,xs:12,sm:6,lg:4,defaultValue:null,options:{[`Default (${_.canChangePassword?`Allowed`:`Disabled`})`]:null,Allowed:!1,Disabled:!0}},A?T&&!A.length?(0,q.createElement)(B,{},`No members`):A.length>0&&(0,q.createElement)(O,{gap:0,flexWrap:`wrap`},`${A.length} members: `,N(`,\xA0`,(m=e.members)==null?void 0:m.map(e=>(0,q.createElement)(r.includes(e)?`i`:`span`,{},e))),(0,q.createElement)(W,{icon:K,confirm:`Delete ${e.members.length} accounts?`,onClick:()=>V(`del_account`,{username:e.members}).then(a),sx:{verticalAlign:`text-top`}})):null,T&&(0,q.createElement)(F,{severity:`info`},`To add users to this group, select the user and then click "Inherit"`),{k:`belongs`,comp:se,label:`Inherit from groups`,options:b,sm:6,lg:4,helperText:`Specify groups to inherit permissions from`+(T?`. A group can inherit from another group`:``)+(b.length?``:`. Now disabled because there are no groups to select, create one first.`)},{k:`allow_net`,comp:p,label:`Allowed network address`,sm:6,lg:4,placeholder:`any address`},!T&&{k:`auto_login_net`,comp:p,label:`Auto-login by IP address`,sm:6,lg:4,placeholder:`none`},{k:`redirect`,comp:o,placeholder:`no`,sm:6,lg:4,helperText:`If you want this account to be redirected to a specific folder/address (or even file) at login time`},{k:`expire`,label:`Expiration`,sm:6,lg:4,comp:t,toField:e=>e&&new Date(e),helperText:`When expired, login won't be allowed`},U(U({k:`days_to_live`,sm:6,lg:4,comp:z,step:`any`,min:1/1e3},_.expire&&{xs:12,disabled:!0,sx:{opacity:.2}}),{},{helperText:`Used to set expiration on first login`}),{k:`notes`,multiline:!0,sm:6,lg:4}],onError:v,save:U(U({},x(d(_,e))),{},{onClick(){return c(function*(){var t;let{password:r=``,password2:i,adminActualAccess:a,hasPassword:o,invalidated:s,canLogin:c,members:l}=_,d=u(_,Te),f=((t=E.current)==null?void 0:t.querySelector(`button.saveBtn`))||void 0;if(w){let e=yield V(`add_account`,d);if(r)try{yield h(_.username,r)}catch(e){throw V(`del_account`,{username:_.username}),e}n(e==null?void 0:e.username,f);return}let p=yield V(`set_account`,{username:e.username,changes:d});r&&(yield h(_.username,r),y(e=>U(U({},e),{},{password:``,password2:``}))),e.username===g&&(H.username=_.username),n(p==null?void 0:p.username,f)})()}})})}var J=e(pe());f(),A();var Y={fieldSeparator:`,`,lineSeparator:`
3
3
  `,quote:`"`},X={field:0,fieldOffset:0,line:0,lineOffset:0,quoted:!1,appendCell:!1,appendField:!1,appendRow:!1},De=class extends Error{constructor(e,t){super(`Invalid CSV at ${e}:${t}`)}},Oe=class{constructor(e=Y){m(this,`_rows`,[]),m(this,`_row`,[]),m(this,`_cell`,``),m(this,`_options`,Y),m(this,`_state`,U({},X)),m(this,`_index`,0),m(this,`_current`,``),m(this,`_previous`,``),m(this,`_quoteState`,U({},X)),this._options=Object.assign({},Y,e)}parse(e){for(this.reset(),this._index=0;this._index<e.length;this._index++)this._state.appendCell=!0,this._previous=this._current,this._current=e[this._index],this.handleNext();if(this._row.length>0&&(this.addField(this.fieldValue(this._cell),this._row,this._state),this.addRow(this._row,this._rows,this._state)),this._state.quoted)throw new De(this._quoteState.line,this._quoteState.lineOffset);return this.makeImmutable(),this._rows}get rows(){return this._rows}get json(){if(this.rows.length>0){let e=this.rows[0].filter(e=>typeof e==`string`);return Object.freeze(this.rows.filter((e,t)=>e&&t>0).map(t=>{let n={};return e.forEach((e,r)=>{n[e]=t[r]}),Object.freeze(n)}))}return Object.freeze([])}handleNext(){this.handleQuote()||this.handleFieldSeparator()||this.handleLineSeparator(),this.processState()}handleQuote(){return this._current===this._options.quote?(this._quoteState=U({},this._state),this._previous===`\\`?this.handleQuoteEscaped():this.handleQuoteNotEscaped(),!0):!1}handleQuoteEscaped(){this._cell=this._cell.slice(0,Math.max(0,this._cell.length-1))}handleQuoteNotEscaped(){if(this._cell.length===0||this._state.quoted)this._state.quoted=!this._state.quoted;else throw new De(this._state.line,this._state.lineOffset);this._state.appendCell=!1}handleFieldSeparator(){return this._current===this._options.fieldSeparator?(this._state.quoted||(this._state.appendCell=!1,this._state.appendField=!0),!0):!1}handleLineSeparator(){return this._current===this._options.lineSeparator?(this._state.quoted||(this._state.appendCell=!1,this._state.appendField=!0,this._state.appendRow=!0),!0):!1}processState(){this._state.appendCell&&(this._cell+=this._current),this._state.appendField&&(this.addField(this.fieldValue(this._cell),this._row,this._state),this._cell=``),this._state.appendRow&&(this.addRow(this._row,this._rows,this._state),this._row=[]),this._state.lineOffset++,this._state.fieldOffset++}fieldValue(e){return e}addField(e,t,n){t.push(e),n.field++,n.fieldOffset=-1,n.appendField=!1}addRow(e,t,n){t.push(e),n.field=0,n.line++,n.lineOffset=-1,n.appendRow=!1}makeImmutable(){this.rows.forEach(e=>{e.forEach(e=>Object.freeze(e)),Object.freeze(e)}),Object.freeze(this._rows)}reset(){this._rows=[],this._row=[],this._cell=``,this._state=U({},X),this._index=0,this._current=``,this._previous=``,this._quoteState=U({},X)}};A();function ke(e){return Z.apply(this,arguments)}function Z(){return Z=c(function*(e){b(function(){var t=c(function*(t){let n=t==null?void 0:t[0];if(!n)return;let r=yield _(n);if(!r)return;let i=new Oe().parse(r.trim()),a={comp:z,min:1,max:9,xs:6,typing:!0},o={skipFirstLines:0,usernameColumn:1,passwordColumn:2,groupColumn:3,redirectColumn:4,overwriteExistingAccounts:!1},s=yield ee({title:`Import accounts from CSV`,dialogProps:{maxWidth:`sm`},values:o,form:e=>{let t=i[e.skipFirstLines||0],n=u(t,U(U({},o),e));return{save:{startIcon:(0,q.createElement)(_e),children:`Go`},fields:[(0,q.createElement)(B,{sx:{p:1}},`Total lines:`,i.length),{k:`skipFirstLines`,comp:z,max:i.length-1,typing:!0,md:6,helperText:(0,q.createElement)(q.Fragment,{},`First line: `,(0,q.createElement)(`code`,{},t.join(`, `)))},{k:`overwriteExistingAccounts`,comp:P,md:6},U(U({k:`usernameColumn`},a),{},{helperText:(0,q.createElement)(q.Fragment,{},`First username: `,n.u)}),U(U({k:`passwordColumn`},a),{},{helperText:(0,q.createElement)(q.Fragment,{},`First password: `,n.p)}),U(U({k:`groupColumn`},a),{},{helperText:(0,q.createElement)(q.Fragment,{},`First group: `,n.g)}),U(U({k:`redirectColumn`},a),{},{helperText:(0,q.createElement)(q.Fragment,{},`First redirect: `,n.r)})]}}});if(!s)return;let{close:l}=M({title:`Importing...`,Content(){let[t,n]=(0,q.useState)(0),[r,a]=(0,q.useState)();return(0,q.useEffect)(()=>{let t=!1;return setTimeout(c(function*(){if(t)return;let r=0,o=0,c=s.skipFirstLines,d=i.length-c;try{let e=0;for(let l of i){var f;if(t)return;if(c){c--;continue}let i=u(l,s);a(i),n(e++/d),yield V(`add_account`,{username:i.u,belongs:(f=i.g)==null?void 0:f.split(`,`),redirect:i.r,overwrite:s.overwriteExistingAccounts}).then(()=>{if(i.p)return h(i.u,i.p)},e=>{if(e.code===409)return o++;r++})}}finally{l();let t=d-r-o;v(`Results: `+[D(``,r,` failed`),D(``,t,` succeeded`),D(``,o,` skipped because already present`)].filter(Boolean).join(`, `),!t&&r?`error`:r||o?`warning`:`success`),e==null||e()}})),()=>{t=!0}},[]),(0,q.createElement)(B,{sx:{display:`flex`,gap:2,alignItems:`center`}},(0,q.createElement)(me,{icon:G,progress:t}),r==null?void 0:r.u)}});function u(e,t){return{u:e[t.usernameColumn-1],p:e[t.passwordColumn-1],g:e[t.groupColumn-1],r:e[t.redirectColumn-1]}}});return function(e){return t.apply(this,arguments)}}(),{multiple:!1,accept:`.csv`})}),Z.apply(this,arguments)}A();var Ae=` `,Q=e=>e==null?void 0:e.split(Ae).at(-1);function je(){let{username:e,accountsAsTree:t}=L(),{data:o,reload:s,element:u}=te(`get_accounts`),[d,f]=(0,q.useState)([]),p=Array.isArray(d);(0,q.useEffect)(()=>{Array.isArray(o==null?void 0:o.list)&&p&&f(d.filter(e=>o.list.find(t=>(t==null?void 0:t.username)===Q(e))))},[o]);let m=(0,q.useMemo)(()=>o&&J.default.sortBy(o.list,[e=>!e.isGroup,e=>!e.adminActualAccess,`username`]),[o]),h=p&&J.default.find(m,{username:Q(d[0])}),_=g(`md`),b=!(d.length>0)||!m?null:p&&d.length>1?(0,q.createElement)(q.Fragment,{},(0,q.createElement)(O,{},(0,q.createElement)(I,{variant:`h6`},d.length+` selected`),(0,q.createElement)(W,{onClick:ee,icon:K},`Remove`)),(0,q.createElement)(T,{},J.default.uniq(d.map(Q)).map(e=>(0,q.createElement)(a,{key:e},(0,q.createElement)(ce,{},e))))):ie(h||k(),e=>(0,q.createElement)(Ee,{account:e,groups:m.filter(e=>e.isGroup).map(e=>e.username),addToBar:_&&[(0,q.createElement)(B,{sx:{flex:1}}),$(e,{fontSize:`large`,sx:{p:1}}),(0,q.createElement)(l,{icon:de,title:`Close`,onClick:A})],reload:s,done(e,t){f(_?[e]:[]),s(),w(``,t)}}));(0,q.useEffect)(()=>{if(_||!b||!d.length)return;let{close:e}=M({title:J.default.isString(d)?J.default.startCase(d):d.length>1?`Multiple selection`:h?(h.isGroup?`Group: `:`User: `)+h.username:`?`,Content:()=>b,onClose:A});return()=>void e()},[_,d,h]);let x={height:`100%`,display:`flex`,flexDirection:`column`,overflow:`auto`},[S,D]=E(`Show tree`,`Show list`,()=>({icon:oe}),t);return H.accountsAsTree=S,u||(0,q.createElement)(y,{container:!0,sx:{rowSpacing:1,columnSpacing:2,top:0,flex:`1 1 auto`,height:0}},(0,q.createElement)(y,{size:{xs:12,md:5,lg:4,xl:5},sx:x},(0,q.createElement)(B,{sx:{display:`flex`,flexWrap:`wrap`,gap:2,mb:2,boxShadow:e=>`0px -8px 4px 10px ${e.palette.background.paper}`,position:`sticky`,top:0,zIndex:2,backgroundColor:`background.paper`,width:`fit-content`}},(0,q.createElement)(i,{variant:`contained`,startIcon:(0,q.createElement)(xe),items:[{children:`user`,onClick:()=>f(`new-user`)},{children:`group`,onClick:()=>f(`new-group`)},{children:`from CSV`,onClick:()=>ke(s)}]},`Add`),C(s),D,(m==null?void 0:m.length)>0&&(0,q.createElement)(I,{sx:{p:1}},`${m.length} account(s)`)),!(m!=null&&m.length)&&(0,q.createElement)(F,{severity:`info`},he`To access administration <u>remotely</u> you will need to create a user account with admin permission`),(0,q.createElement)(r,{multiSelect:!0,sx:{pr:4,pb:2,minWidth:`15em`},selectedItems:p?d:[],slots:{collapseIcon:we,expandIcon:Se},onSelectedItemsChange(e,t){var n,r;!(e==null||(n=e.target)==null||(r=n.closest)==null)&&r.call(n,`.MuiTreeItem-iconContainer`)||f(t)}},m&&(function e(t,r=``){return t.map(t=>{var i,a;return(0,q.createElement)(n,{key:t.username,itemId:r+t.username,label:(0,q.createElement)(B,{sx:{display:`flex`,flexWrap:`wrap`,padding:`.2em 0`,columnGap:`.5em`,alignItems:`center`}},$(t),(t.disabled||t.canLogin===!1)&&R(Ce,t.disabled?`Disabled`:`Disabled by its groups`,t.disabled?void 0:{color:`text.secondary`}),(t.expire||t.days_to_live)&&(0,q.createElement)(ye),t.adminActualAccess&&R(ge,`Can login into Admin`),t.username,!!((i=t.belongs)!=null&&i.length)&&(0,q.createElement)(B,{sx:{color:`text.secondary`,fontSize:`small`}},`(`,(a=t.belongs)==null?void 0:a.join(`, `),`)`))},S&&e(m.filter(e=>{var n;return(n=t.directMembers)==null?void 0:n.includes(e.username)}),r+t.username+Ae))})})(S?m.filter(e=>!m.some(t=>{var n;return(n=t.members)==null?void 0:n.includes(e.username)})):m))),_&&b&&(0,q.createElement)(y,{size:`grow`,sx:U(U({},x),{},{maxWidth:`100%`})},(0,q.createElement)(fe,{sx:{overflow:`initial`}},(0,q.createElement)(ne,{},b))));function k(){return{username:``,hasPassword:d===`new-user`,adminActualAccess:!1,invalidated:void 0,canLogin:!0,canChangePassword:!0,isGroup:d===`new-group`,members:[],directMembers:[]}}function A(){f([])}function ee(){return N.apply(this,arguments)}function N(){return N=c(function*(){if(typeof d==`string`)return;let t=J.default.without(J.default.uniq(d.map(Q)),e);if(d.length>t.length&&!(yield j(`You cannot ask to delete the account you are using. Continue with the rest?`)))return;if(!t.length)return v(`Nothing to delete`,`info`);if(!(yield j(`Delete ${t.length} item(s)?`)))return;let n=[];for(let e of t)(yield V(`del_account`,{username:e}).then(()=>1,()=>0))||n.push(e);if(s(),n.length)return v(`The following items couldn't be deleted: `+n.join(`, `),`error`)}),N.apply(this,arguments)}}function $(e,t={}){return(0,q.createElement)(e.isGroup?G:ve,t)}export{je as default};
@@ -1,2 +1,2 @@
1
- import{i as e}from"./rolldown-runtime-CacB07dV.js";import{n as t,t as n}from"./DataTable--J_wIcuM.js";import{t as r}from"./DateTimeField-DWeCPNja.js";import{Aa as i,C as a,Ca as o,F as s,Hn as c,I as l,Ma as u,Oa as d,S as f,St as p,Ta as m,Ur as ee,W as h,Wr as g,b as _,ct as v,dt as y,ft as b,ka as x,ni as S,qn as C,ri as w,un as T,ur as E,ut as D,wa as O,wn as te}from"./index-CSmjBo2G.js";import{F as ne,I as re,L as ie,P as ae,q as oe,rt as se}from"./icons-BfdCXZin.js";var k=e(u()),A=e(E());m(),d();var j=[`label`,`helperText`,`fields`,`value`,`onChange`,`onError`,`setApi`,`reorder`,`prepend`,`noRows`,`valuesForAdd`,`autoRowHeight`,`dialog`,`form`,`details`,`objectK`,`saveOn`,`applyButton`,`height`,`error`,`sx`],M=[`$width`,`$column`,`$type`,`$hideUnder`,`showIf`,`$render`,`$mergeRender`];function N(e){let{label:r,helperText:l,fields:u,value:d,onChange:p,onError:m,setApi:v,reorder:b,prepend:S,noRows:E,valuesForAdd:N,autoRowHeight:I,dialog:L,form:R,details:z,objectK:B,saveOn:V,applyButton:H,height:U,error:W,sx:G}=e,ce=o(e,j),K=Array.isArray(d)?d:!B||!d?[]:Object.entries(d).map(([e,t])=>O({[B]:e},t)),q=(0,k.useMemo)(()=>K.map((e,t)=>c(O({},e),e.hasOwnProperty(`id`)?{$idx:t}:{id:t})),[JSON.stringify(K)]),J=!!W||void 0,Y=e=>t=>O(O({fields:T(u,t).map(e=>{var n;let{$width:r,$column:i,$type:a,$hideUnder:s,showIf:c,$render:l,$mergeRender:u}=e,d=o(e,M);return(!c||c(t))&&A.default.defaults(d,(n=F[a])==null?void 0:n.field)})},R),e);v==null||v({isEqual:te});let[X,le]=(0,k.useState)();return(0,k.createElement)(k.Fragment,{},(0,k.createElement)(f,{rowGap:0,flexWrap:`wrap`,ml:`2px`},r&&(0,k.createElement)(ee,{error:J,sx:{color:J?void 0:`text.primary`}},r),l&&(0,k.createElement)(g,{error:J},l)),(0,k.createElement)(w,O(O({},ce),{},{sx:y({height:U},G)}),(0,k.createElement)(n,O(O(O({rows:q,details:z},I&&{getRowHeight:()=>`auto`}),!s(`sm`)&&{compact:!0}),{},{sx:O({".MuiDataGrid-virtualScroller":{minHeight:`3em`}},I&&{".MuiDataGrid-cell":{minHeight:`52px !important`}}),hideFooterSelectedRowCount:!0,hideFooter:!0,slots:{noRowsOverlay:()=>(0,k.createElement)(_,{},E||`No entries`)},slotProps:{pagination:{showFirstButton:!0,showLastButton:!0}},onCellDoubleClick({field:e,row:t},n){var r;let i=T(u,!1).find(t=>!(0,k.isValidElement)(t)&&t.k===e&&t.$type===`boolean`);if(!i)return;let a=(r=t.$idx)==null?t.id:r,o=t[e],s=!(i.toField||A.default.identity)(o);Z(a,O(O({},K[a]),{},{[e]:(i.fromField||A.default.identity)(s,{originalValue:o})}),n)},columns:[...T(u,!1).map(e=>{var t,n;if((0,k.isValidElement)(e))return;let r=(t=F[e.$type])==null?void 0:t.column;return A.default.defaults(O(O({field:e.k,headerName:(n=e.headerName)==null?typeof e.label==`string`?e.label:D(e.k):n,disableColumnMenu:!0,valueGetter:t=>(e.toField||A.default.identity)(t)},e.$width?{[e.$width>=8?`width`:`flex`]:e.$width}:!(r!=null&&r.width)&&!(r!=null&&r.flex)&&{flex:1}),{},{renderCell:e.$render,mergeRender:e.$mergeRender,hideUnder:e.$hideUnder},e.$column),r)}).filter(Boolean),{field:``,type:`actions`,width:90,headerAlign:`center`,renderHeader(){return(0,k.createElement)(k.Fragment,{},(0,k.createElement)(a,{icon:ie,title:`Add`,size:`small`,onClick(e){return i(function*(){let t=yield h({form:Y({}),title:`Add`,values:N,dialogProps:L});if(!t)return;let n=K.slice()||[];S?n.unshift(t):n.push(t),Q(n,e)})()}}),X!==void 0&&(0,k.createElement)(a,{icon:ae,title:`Undo`,size:`small`,onClick:e=>Q(X,e)}))},getActions({row:e}){let{$idx:n=e.id}=e,a=`Modify`;return[(0,k.createElement)(t,{key:`edit`,icon:(0,k.createElement)(oe),label:a,title:a,onClick(t){return i(function*(){t.stopPropagation();let o=yield h({values:e,form:(e,{submit:t})=>Y(V===`change`&&{save:!1,onChange(e){Z(n,e,`change`)}}||H&&{addToBar:(0,k.createElement)(P,O(O({children:`Apply`,sx:O({ml:2},H.sx)},H),{},{onClick(){t(function(){var e=i(function*(e){let t=Z(n,O(O({},K[n]),e),`save`);yield H.onClick(t)});return function(t){return e.apply(this,arguments)}}())}}))}||V&&{save:!1})(e),title:(0,k.createElement)(k.Fragment,{},a,r&&` - `,r),dialogProps:L});o&&Z(n,o,t)})()}}),(0,k.createElement)(t,{key:`delete`,icon:(0,k.createElement)(se),label:`Delete`,showInMenu:b,onClick(e){e.stopPropagation(),Q(K.filter((e,t)=>t!==n),e)}}),b&&n&&(0,k.createElement)(t,{key:`up`,icon:(0,k.createElement)(re),label:`Move up`,showInMenu:!0,onClick(e){e.stopPropagation(),Q(C(K.slice(),n,n-1),e)}}),b&&n<q.length-1&&(0,k.createElement)(t,{key:`down`,icon:(0,k.createElement)(ne),label:`Move down`,showInMenu:!0,onClick(e){e.stopPropagation(),Q(C(K.slice(),n,n+1),e)}})].filter(Boolean)}}]}))));function Z(e,t,n){return Q(K.map((n,r)=>r===e?t:n),n)}function Q(e,t){let n=$(e);return p(n,{was:d,event:t}),V!==`change`&&le(K),n}function $(e){return B?Object.fromEntries(e.map(e=>{let{[B]:t}=e;return[t,o(e,[B].map(x))]})):e}}function P(e){return(0,k.createElement)(S,O({ref:l([`s`]).ref,title:`Apply
1
+ import{i as e}from"./rolldown-runtime-CacB07dV.js";import{n as t,t as n}from"./DataTable-YO7t2zol.js";import{t as r}from"./DateTimeField-JJtFlhyP.js";import{Aa as i,C as a,Ca as o,F as s,Hn as c,I as l,Ma as u,Oa as d,S as f,St as p,Ta as m,Ur as ee,W as h,Wr as g,b as _,ct as v,dt as y,ft as b,ka as x,ni as S,qn as C,ri as w,un as T,ur as E,ut as D,wa as O,wn as te}from"./index-CCbBe4VH.js";import{F as ne,I as re,L as ie,P as ae,q as oe,rt as se}from"./icons-unNxkvar.js";var k=e(u()),A=e(E());m(),d();var j=[`label`,`helperText`,`fields`,`value`,`onChange`,`onError`,`setApi`,`reorder`,`prepend`,`noRows`,`valuesForAdd`,`autoRowHeight`,`dialog`,`form`,`details`,`objectK`,`saveOn`,`applyButton`,`height`,`error`,`sx`],M=[`$width`,`$column`,`$type`,`$hideUnder`,`showIf`,`$render`,`$mergeRender`];function N(e){let{label:r,helperText:l,fields:u,value:d,onChange:p,onError:m,setApi:v,reorder:b,prepend:S,noRows:E,valuesForAdd:N,autoRowHeight:I,dialog:L,form:R,details:z,objectK:B,saveOn:V,applyButton:H,height:U,error:W,sx:G}=e,ce=o(e,j),K=Array.isArray(d)?d:!B||!d?[]:Object.entries(d).map(([e,t])=>O({[B]:e},t)),q=(0,k.useMemo)(()=>K.map((e,t)=>c(O({},e),e.hasOwnProperty(`id`)?{$idx:t}:{id:t})),[JSON.stringify(K)]),J=!!W||void 0,Y=e=>t=>O(O({fields:T(u,t).map(e=>{var n;let{$width:r,$column:i,$type:a,$hideUnder:s,showIf:c,$render:l,$mergeRender:u}=e,d=o(e,M);return(!c||c(t))&&A.default.defaults(d,(n=F[a])==null?void 0:n.field)})},R),e);v==null||v({isEqual:te});let[X,le]=(0,k.useState)();return(0,k.createElement)(k.Fragment,{},(0,k.createElement)(f,{rowGap:0,flexWrap:`wrap`,ml:`2px`},r&&(0,k.createElement)(ee,{error:J,sx:{color:J?void 0:`text.primary`}},r),l&&(0,k.createElement)(g,{error:J},l)),(0,k.createElement)(w,O(O({},ce),{},{sx:y({height:U},G)}),(0,k.createElement)(n,O(O(O({rows:q,details:z},I&&{getRowHeight:()=>`auto`}),!s(`sm`)&&{compact:!0}),{},{sx:O({".MuiDataGrid-virtualScroller":{minHeight:`3em`}},I&&{".MuiDataGrid-cell":{minHeight:`52px !important`}}),hideFooterSelectedRowCount:!0,hideFooter:!0,slots:{noRowsOverlay:()=>(0,k.createElement)(_,{},E||`No entries`)},slotProps:{pagination:{showFirstButton:!0,showLastButton:!0}},onCellDoubleClick({field:e,row:t},n){var r;let i=T(u,!1).find(t=>!(0,k.isValidElement)(t)&&t.k===e&&t.$type===`boolean`);if(!i)return;let a=(r=t.$idx)==null?t.id:r,o=t[e],s=!(i.toField||A.default.identity)(o);Z(a,O(O({},K[a]),{},{[e]:(i.fromField||A.default.identity)(s,{originalValue:o})}),n)},columns:[...T(u,!1).map(e=>{var t,n;if((0,k.isValidElement)(e))return;let r=(t=F[e.$type])==null?void 0:t.column;return A.default.defaults(O(O({field:e.k,headerName:(n=e.headerName)==null?typeof e.label==`string`?e.label:D(e.k):n,disableColumnMenu:!0,valueGetter:t=>(e.toField||A.default.identity)(t)},e.$width?{[e.$width>=8?`width`:`flex`]:e.$width}:!(r!=null&&r.width)&&!(r!=null&&r.flex)&&{flex:1}),{},{renderCell:e.$render,mergeRender:e.$mergeRender,hideUnder:e.$hideUnder},e.$column),r)}).filter(Boolean),{field:``,type:`actions`,width:90,headerAlign:`center`,renderHeader(){return(0,k.createElement)(k.Fragment,{},(0,k.createElement)(a,{icon:ie,title:`Add`,size:`small`,onClick(e){return i(function*(){let t=yield h({form:Y({}),title:`Add`,values:N,dialogProps:L});if(!t)return;let n=K.slice()||[];S?n.unshift(t):n.push(t),Q(n,e)})()}}),X!==void 0&&(0,k.createElement)(a,{icon:ae,title:`Undo`,size:`small`,onClick:e=>Q(X,e)}))},getActions({row:e}){let{$idx:n=e.id}=e,a=`Modify`;return[(0,k.createElement)(t,{key:`edit`,icon:(0,k.createElement)(oe),label:a,title:a,onClick(t){return i(function*(){t.stopPropagation();let o=yield h({values:e,form:(e,{submit:t})=>Y(V===`change`&&{save:!1,onChange(e){Z(n,e,`change`)}}||H&&{addToBar:(0,k.createElement)(P,O(O({children:`Apply`,sx:O({ml:2},H.sx)},H),{},{onClick(){t(function(){var e=i(function*(e){let t=Z(n,O(O({},K[n]),e),`save`);yield H.onClick(t)});return function(t){return e.apply(this,arguments)}}())}}))}||V&&{save:!1})(e),title:(0,k.createElement)(k.Fragment,{},a,r&&` - `,r),dialogProps:L});o&&Z(n,o,t)})()}}),(0,k.createElement)(t,{key:`delete`,icon:(0,k.createElement)(se),label:`Delete`,showInMenu:b,onClick(e){e.stopPropagation(),Q(K.filter((e,t)=>t!==n),e)}}),b&&n&&(0,k.createElement)(t,{key:`up`,icon:(0,k.createElement)(re),label:`Move up`,showInMenu:!0,onClick(e){e.stopPropagation(),Q(C(K.slice(),n,n-1),e)}}),b&&n<q.length-1&&(0,k.createElement)(t,{key:`down`,icon:(0,k.createElement)(ne),label:`Move down`,showInMenu:!0,onClick(e){e.stopPropagation(),Q(C(K.slice(),n,n+1),e)}})].filter(Boolean)}}]}))));function Z(e,t,n){return Q(K.map((n,r)=>r===e?t:n),n)}function Q(e,t){let n=$(e);return p(n,{was:d,event:t}),V!==`change`&&le(K),n}function $(e){return B?Object.fromEntries(e.map(e=>{let{[B]:t}=e;return[t,o(e,[B].map(x))]})):e}}function P(e){return(0,k.createElement)(S,O({ref:l([`s`]).ref,title:`Apply
2
2
  (ctrl+s)`},e))}var F={boolean:{field:{comp:b},column:{renderCell:({value:e})=>e&&(0,k.createElement)(v)}},dateTime:{field:{comp:r},column:{minWidth:96,flex:.5,renderCell:({value:e})=>p(e)}}};export{N as t};
@@ -1,4 +1,4 @@
1
- import{i as e}from"./rolldown-runtime-CacB07dV.js";import{C as t,Jt as n,Ma as r,N as i,Nt as a,Rn as o,S as s,_ as c,gi as l,jt as u,pt as d,qt as f,ri as p,sr as m,tt as h,vt as g,y as _}from"./index-CSmjBo2G.js";import{K as v,q as y}from"./icons-BfdCXZin.js";import{t as b}from"./TextEditor-BF5GhCMi.js";var x=e(r());function S(){h.title=`Config file`;let{data:e,reload:r,element:S}=c(`get_config_text`,{}),[C,w]=(0,x.useState)(),[T,E]=(0,x.useState)(),[D,O]=(0,x.useState)(!1);return(0,x.useEffect)(()=>{E(e==null?void 0:e.text)},[e]),(0,x.useEffect)(()=>{T!==void 0&&w(T||``)},[T]),S||(0,x.createElement)(x.Fragment,{},(0,x.createElement)(s,{flexWrap:`wrap`,justifyContent:`space-between`},(0,x.createElement)(_,{icon:v,onClick:A,disabled:!e},`Export without passwords`),D?(0,x.createElement)(x.Fragment,{},i(r),(0,x.createElement)(t,{icon:g,title:`Save
1
+ import{i as e}from"./rolldown-runtime-CacB07dV.js";import{C as t,Jt as n,Ma as r,N as i,Nt as a,Rn as o,S as s,_ as c,gi as l,jt as u,pt as d,qt as f,ri as p,sr as m,tt as h,vt as g,y as _}from"./index-CCbBe4VH.js";import{K as v,q as y}from"./icons-unNxkvar.js";import{t as b}from"./TextEditor-CuqsIrmD.js";var x=e(r());function S(){h.title=`Config file`;let{data:e,reload:r,element:S}=c(`get_config_text`,{}),[C,w]=(0,x.useState)(),[T,E]=(0,x.useState)(),[D,O]=(0,x.useState)(!1);return(0,x.useEffect)(()=>{E(e==null?void 0:e.text)},[e]),(0,x.useEffect)(()=>{T!==void 0&&w(T||``)},[T]),S||(0,x.createElement)(x.Fragment,{},(0,x.createElement)(s,{flexWrap:`wrap`,justifyContent:`space-between`},(0,x.createElement)(_,{icon:v,onClick:A,disabled:!e},`Export without passwords`),D?(0,x.createElement)(x.Fragment,{},i(r),(0,x.createElement)(t,{icon:g,title:`Save
2
2
  (ctrl+enter)`,modified:C!==T,onClick:k}),(0,x.createElement)(l,{severity:`warning`,sx:{minWidth:`10em`}},`Be careful, you can easily break things here`)):(0,x.createElement)(_,{icon:y,variant:`outlined`,onClick(){O(!0),setTimeout(()=>a(`main textarea`),500)}},`Edit`),(0,x.createElement)(p,{sx:{flex:1,minWidth:`fit-content`}},(0,x.createElement)(d,{label:`File path`,value:e==null?void 0:e.fullPath,size:`small`}))),S||C!==void 0&&(0,x.createElement)(p,{sx:{"& pre,& textarea":{wordBreak:`break-all !important`}}},(0,x.createElement)(f,{margin:10},(0,x.createElement)(b,{value:C,disabled:!D,style:{background:`#8881`},onValueChange:w,onKeyDown(e){[`s`,`Enter`].includes(n(e))&&(k(),e.preventDefault())}}))));function k(){return m(`set_config_text`,{text:C}).then(()=>E(C))}function A(){var t;let n=(C||``).replace(/^(\s*(\w*password|_\w*|token|srp|dynamic_dns_url):\s*).+\n/gm,`$1removed
3
3
  `).replace(/(:\/\/)[^/@\s]+@/g,`$1removed@`)+o(`custom_html: | # this is currently ignored by hfs, just here for reference
4
4
  `,(t=e.customHtml)==null?void 0:t.replace(/^/gm,` `));n&&u(`config_no_passwords.yaml`,n)}}export{S as default};
@@ -1,2 +1,2 @@
1
- import{i as e}from"./rolldown-runtime-CacB07dV.js";import{A as t,Aa as n,C as r,Cn as i,I as a,Ma as o,N as s,Rn as c,Ta as l,_ as u,ea as d,gi as f,gt as p,ir as m,it as h,nn as g,nr as _,ri as v,sr as y,tt as b,ur as x,vt as S,wa as C,yr as w,z as T,zt as E}from"./index-CSmjBo2G.js";import{t as D}from"./TextEditor-BF5GhCMi.js";var O=e(x()),k=e(o());l();function A(e,t,n){return(0,k.createElement)(j,C({checked:e||!1,onChange(e,n){t(n)},disabled:e===void 0},n))}var j=d(w)(({theme:e,size:t})=>{let n=t&&t===`small`;return{height:n?36:48,width:n?18:26,padding:5,"& .MuiSwitch-switchBase":{margin:1,padding:0,transform:`translateY(${n?16:22}px)`,"&.Mui-checked":{color:e.palette.primary.contrastText,transform:`translateY(2px)`,"& .MuiSwitch-thumb:before":{backgroundImage:`url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" height="${n?14:20}" width="20" viewBox="0 0 20 20"><path fill="${encodeURIComponent(e.palette.primary.contrastText)}" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"/></svg>')`},"& + .MuiSwitch-track":{backgroundColor:e.palette.grey[500]}}},"& .Mui-checked .MuiSwitch-thumb":{backgroundColor:e.palette.primary.main,boxShadow:`0px 2px 1px 1px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 1px 3px 0px rgba(0, 0, 0, 0.12)`},"& .MuiSwitch-thumb":{width:n?16:24,height:n?16:24,backgroundColor:e.palette.grey[700],"&::before":{content:`''`,position:`absolute`,width:`85%`,height:`85%`,left:0,top:0,backgroundRepeat:`no-repeat`,backgroundPosition:`center`,backgroundImage:`url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" height="${n?14:20}" width="20" viewBox="0 0 20 20"><path fill="${encodeURIComponent(e.palette.primary.contrastText)}" d="M19,13H5V11H19V13Z"/></svg>')`}},"& .MuiSwitch-track":{backgroundColor:e.palette.grey[500],borderRadius:20/2}}});l();var M={top:`Top of HTML Body`,bottom:`Bottom of HTML Body`};function N({setTitleSide:e}){let{data:o,reload:l}=u(`get_custom_html`),{customHtmlSection:d}=h(),[x,w]=(0,k.useState)({}),[j,N]=(0,k.useState)({});(0,k.useEffect)(()=>{o&&(N(o.sections),L(o.enabled))},[o]),(0,k.useEffect)(()=>w(j),[j]);let P=(0,k.useMemo)(()=>{let e=O.default.sortBy(Object.keys(x),i);return e.length&&!e.includes(d)&&(b.customHtmlSection=O.default.findKey(x,Boolean)||(e==null?void 0:e[0])||``),e.map(e=>{var t;return{value:e,label:(M[e]||c(`HTTP `,m[e])||O.default.startCase(e))+((t=x[e])!=null&&t.trim()?` *`:``)}})},[g(x,500)]),F=(0,k.useMemo)(()=>!O.default.isEqualWith(j,x,(e,t)=>!e&&!t||void 0),[j,x]),[I,L]=(0,k.useState)();return e((0,k.useMemo)(()=>(0,k.createElement)(v,{sx:{display:{xs:`none`,md:`block`}}},(0,k.createElement)(f,{severity:`info`},E("Add HTML code to some parts of the Front-end. It's saved to file `custom.html`, that you can edit directly with your editor of choice. "),T(`customization`,`More help`)),(0,k.createElement)(f,{severity:`info`},`To customize icons `,T(`customization#icons`,`read documentation`))),[])),(0,k.createElement)(k.Fragment,{},(0,k.createElement)(v,{sx:{display:`flex`,alignItems:`center`,gap:1,mb:1}},(0,k.createElement)(p,{label:`Section`,value:d,options:P,onChange:e=>b.customHtmlSection=e}),s(l),(0,k.createElement)(r,{ref:a([`s`,`Enter`]).ref,icon:S,title:`Save
1
+ import{i as e}from"./rolldown-runtime-CacB07dV.js";import{A as t,Aa as n,C as r,Cn as i,I as a,Ma as o,N as s,Rn as c,Ta as l,_ as u,ea as d,gi as f,gt as p,ir as m,it as h,nn as g,nr as _,ri as v,sr as y,tt as b,ur as x,vt as S,wa as C,yr as w,z as T,zt as E}from"./index-CCbBe4VH.js";import{t as D}from"./TextEditor-CuqsIrmD.js";var O=e(x()),k=e(o());l();function A(e,t,n){return(0,k.createElement)(j,C({checked:e||!1,onChange(e,n){t(n)},disabled:e===void 0},n))}var j=d(w)(({theme:e,size:t})=>{let n=t&&t===`small`;return{height:n?36:48,width:n?18:26,padding:5,"& .MuiSwitch-switchBase":{margin:1,padding:0,transform:`translateY(${n?16:22}px)`,"&.Mui-checked":{color:e.palette.primary.contrastText,transform:`translateY(2px)`,"& .MuiSwitch-thumb:before":{backgroundImage:`url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" height="${n?14:20}" width="20" viewBox="0 0 20 20"><path fill="${encodeURIComponent(e.palette.primary.contrastText)}" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"/></svg>')`},"& + .MuiSwitch-track":{backgroundColor:e.palette.grey[500]}}},"& .Mui-checked .MuiSwitch-thumb":{backgroundColor:e.palette.primary.main,boxShadow:`0px 2px 1px 1px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 1px 3px 0px rgba(0, 0, 0, 0.12)`},"& .MuiSwitch-thumb":{width:n?16:24,height:n?16:24,backgroundColor:e.palette.grey[700],"&::before":{content:`''`,position:`absolute`,width:`85%`,height:`85%`,left:0,top:0,backgroundRepeat:`no-repeat`,backgroundPosition:`center`,backgroundImage:`url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" height="${n?14:20}" width="20" viewBox="0 0 20 20"><path fill="${encodeURIComponent(e.palette.primary.contrastText)}" d="M19,13H5V11H19V13Z"/></svg>')`}},"& .MuiSwitch-track":{backgroundColor:e.palette.grey[500],borderRadius:20/2}}});l();var M={top:`Top of HTML Body`,bottom:`Bottom of HTML Body`};function N({setTitleSide:e}){let{data:o,reload:l}=u(`get_custom_html`),{customHtmlSection:d}=h(),[x,w]=(0,k.useState)({}),[j,N]=(0,k.useState)({});(0,k.useEffect)(()=>{o&&(N(o.sections),L(o.enabled))},[o]),(0,k.useEffect)(()=>w(j),[j]);let P=(0,k.useMemo)(()=>{let e=O.default.sortBy(Object.keys(x),i);return e.length&&!e.includes(d)&&(b.customHtmlSection=O.default.findKey(x,Boolean)||(e==null?void 0:e[0])||``),e.map(e=>{var t;return{value:e,label:(M[e]||c(`HTTP `,m[e])||O.default.startCase(e))+((t=x[e])!=null&&t.trim()?` *`:``)}})},[g(x,500)]),F=(0,k.useMemo)(()=>!O.default.isEqualWith(j,x,(e,t)=>!e&&!t||void 0),[j,x]),[I,L]=(0,k.useState)();return e((0,k.useMemo)(()=>(0,k.createElement)(v,{sx:{display:{xs:`none`,md:`block`}}},(0,k.createElement)(f,{severity:`info`},E("Add HTML code to some parts of the Front-end. It's saved to file `custom.html`, that you can edit directly with your editor of choice. "),T(`customization`,`More help`)),(0,k.createElement)(f,{severity:`info`},`To customize icons `,T(`customization#icons`,`read documentation`))),[])),(0,k.createElement)(k.Fragment,{},(0,k.createElement)(v,{sx:{display:`flex`,alignItems:`center`,gap:1,mb:1}},(0,k.createElement)(p,{label:`Section`,value:d,options:P,onChange:e=>b.customHtmlSection=e}),s(l),(0,k.createElement)(r,{ref:a([`s`,`Enter`]).ref,icon:S,title:`Save
2
2
  (ctrl+s)`,modified:F,doneAnimation:!0,onClick:R}),t(`Enable all sections`,void 0,A(I,function(){var e=n(function*(e){yield y(`set_config`,{values:{[_.disable_custom_html]:!e}}),L(e)});return function(t){return e.apply(this,arguments)}}()))),(0,k.createElement)(D,{lang:d===`style`?`css`:d===`script`?`js`:`html`,value:(x==null?void 0:x[d])||``,style:{background:`#8881`},onValueChange(e){w(t=>C(C({},t),{},{[d]:e}))}}));function R(){return y(`set_custom_html`,{sections:x}).then(()=>N(x))}}export{N as default};