@coffer-org/web 1.3.1 → 1.4.0
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.
- package/dist/assets/{NewRecordView-d9dzfC7R.js → NewRecordView-B3vsuud9.js} +1 -1
- package/dist/assets/SettingsPage-DFEMxm9d.js +2 -0
- package/dist/assets/{api-gSu-mjEH.js → api-BpunGHNa.js} +1 -1
- package/dist/assets/{auth-context-BLh4J0hg.js → auth-context-BNCSMPL8.js} +1 -1
- package/dist/assets/{index-BWdgp_qe.js → index-D4NbdNI4.js} +16 -4
- package/dist/index.html +3 -3
- package/package.json +1 -1
- package/dist/assets/SettingsPage-Dxv3eZrP.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as e}from"./chunk-QTnfLwEv.js";import{t}from"./react-D4J6PwTK.js";import{T as n,i as r,t as i}from"./button-CbB4uqRh.js";import{c as a,l as o}from"./chunk-6CSD65Y2-FavEEIOj.js";import{t as s}from"./jsx-dev-runtime-BMBl2lag.js";import{t as c}from"./json-Dm-WBmNs.js";import{r as l,t as u}from"./ExtendReasonInfo--21FkkoL.js";import{_ as d,f,l as p,n as m,o as h,r as g,s as _,t as v,u as y,y as b}from"./Toolbar-CXro4MxC.js";import{T as x,f as S,g as C,m as w}from"./fields-DVMUyXbG.js";import{a as T,h as E,m as D,n as O,o as k,t as A}from"./module-DytlXfXo.js";import{
|
|
1
|
+
import{r as e}from"./chunk-QTnfLwEv.js";import{t}from"./react-D4J6PwTK.js";import{T as n,i as r,t as i}from"./button-CbB4uqRh.js";import{c as a,l as o}from"./chunk-6CSD65Y2-FavEEIOj.js";import{t as s}from"./jsx-dev-runtime-BMBl2lag.js";import{t as c}from"./json-Dm-WBmNs.js";import{r as l,t as u}from"./ExtendReasonInfo--21FkkoL.js";import{_ as d,f,l as p,n as m,o as h,r as g,s as _,t as v,u as y,y as b}from"./Toolbar-CXro4MxC.js";import{T as x,f as S,g as C,m as w}from"./fields-DVMUyXbG.js";import{a as T,h as E,m as D,n as O,o as k,t as A}from"./module-DytlXfXo.js";import{o as j,x as M}from"./api-BpunGHNa.js";var N=e(t(),1),P=s(),F=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web/form.tsx`;function I(e,t){let n={};n.name=t?.name==null?``:String(t.name);for(let[r,i]of T(e.fields))if(!i.virtual)if(t){let e=t[r];e==null?n[r]=i.prim===`checkbox`?!1:``:i.prim===`checkbox`?n[r]=e===1||e===!0||e===`1`:w(i)?n[r]=e===``?``:c(e,i.hints.multiple===!0?[]:{}):n[r]=e}else n[r]=i.prim===`checkbox`?!1:w(i)&&i.hints.multiple===!0?[]:``;for(let r of e.fields){if(!S(r)||!C(r))continue;let e=r.key;t?n[e]=t[e]??(r.multiple?[]:{}):n[e]=r.multiple?[]:{}}return n}function L(e){let t={};for(let[n,r]of Object.entries(e))r===``||r===void 0||Array.isArray(r)&&r.length===0||typeof r==`object`&&r&&!Array.isArray(r)&&Object.keys(r).length===0||(t[n]=r);return t}function R({ext:e,values:t,onChange:i,recordId:a,fieldLabel:o}){let{t:s}=n();return(0,P.jsxDEV)(`fieldset`,{className:`border border-accent/30 rounded-xl p-4 pt-2 flex flex-col min-w-0 gap-4`,children:[(0,P.jsxDEV)(`legend`,{className:`px-2 inline-flex items-center gap-1.5 text-sm font-semibold text-accent`,children:[(0,P.jsxDEV)(r,{name:e.icon,size:14,className:`shrink-0`},void 0,!1,{fileName:F,lineNumber:115,columnNumber:9},this),` `,s(e.label),(0,P.jsxDEV)(u,{ext:e,fieldLabel:o},void 0,!1,{fileName:F,lineNumber:116,columnNumber:9},this)]},void 0,!0,{fileName:F,lineNumber:114,columnNumber:7},this),(0,P.jsxDEV)(g,{items:e.fields,ctx:{renderField:(n,r)=>E(r.hidden,t)?null:(0,P.jsxDEV)(l,{mode:`create`,field:r,label:r.label?s(r.label):void 0,required:E(r.required,t),value:t[n]??``,recordCtx:{vault:``,module:e.id,recordId:a},onChange:t=>i(e.id,n,t)},void 0,!1,{fileName:F,lineNumber:101,columnNumber:9},this)}},void 0,!1,{fileName:F,lineNumber:118,columnNumber:7},this)]},void 0,!0,{fileName:F,lineNumber:113,columnNumber:5},this)}function z({module:e,record:t,defaults:r,hiddenFields:a,onSuccess:o,onCancel:s}){let{t:l}=n(),u=p(l),d=!!t,h=(0,N.useMemo)(()=>A(e),[e]),v=(0,N.useMemo)(()=>k(e.fields),[e]),{values:b,setValues:S,errors:C,setErrors:E,touched:z,setTouched:B,bridge:V}=m({fm:v,mode:d?`edit`:`create`,recordCtx:{vault:e.vault,module:e.module,recordId:t?String(t.id):null},initial:()=>I(e,t??r),hiddenFields:a}),[H,U]=(0,N.useState)([]),[W,G]=(0,N.useState)(!1),K=(0,N.useMemo)(()=>f().filter(t=>t.attachTo.some(t=>t.vault===e.vault&&(!t.module||t.module===e.module))),[e]),[q,J]=(0,N.useState)(()=>{let e={};for(let n of K){let r=t?._extends?.[n.id];e[n.id]={};for(let[t,i]of T(n.fields)){let a=r?.[t];a==null?e[n.id][t]=i.prim===`checkbox`?!1:w(i)&&i.hints.multiple===!0?[]:``:i.prim===`checkbox`?e[n.id][t]=a===1||a===!0||a===`1`:w(i)?e[n.id][t]=a===``?``:c(a,i.hints.multiple===!0?[]:{}):e[n.id][t]=a}}return e}),Y=(0,N.useMemo)(()=>K.filter(e=>D(e.showWhen,b)),[K,b]);function X(e,t,n){J(r=>({...r,[e]:{...r[e],[t]:n}}))}let Z=(0,N.useRef)(!0);(0,N.useEffect)(()=>{if(Z.current){Z.current=!1;return}S(I(e,t??r)),E({}),U([]),B(new Set)},[e,t,r]);async function Q(n){n.preventDefault(),U([]);let r=L(b),i=String(b.name??``).trim(),a=(d?O(e):h).safeParse(r),s={};if(!d&&!i&&(s.name=l(`validation.required`)),!a.success)for(let e of a.error.issues){let t=String(e.path[0]??``);if(!s[t]){let{code:n,params:r}=x(e.message);s[t]=u(n,r)}}if(Object.keys(s).length){E(s),B(new Set(Object.keys(s)));return}E({}),G(!0);let c={...r};for(let e of Y){let t=q[e.id]??{},n=Object.fromEntries(Object.entries(t).filter(([,e])=>e!==``&&e!==!1));c[`_extend_${e.id}`]=n}let f=String(t?.id??``),p=d?await M(e.vault,e.module,f,c):await j(e.vault,e.module,c);if(G(!1),p.ok)return o(p.row);let m=p.issues??[],g={},_=[];for(let e of m)e.field&&v[e.field]?g[e.field]=u(e.code,e.params):_.push(e);let S=y(m,u);(Object.keys(g).length||Object.keys(S).length)&&(E(e=>({...e,...g,...S})),B(e=>new Set([...e,...Object.keys(g)]))),U(_)}return(0,P.jsxDEV)(`div`,{children:(0,P.jsxDEV)(`form`,{onSubmit:Q,noValidate:!0,className:`flex flex-col gap-5`,children:[(0,P.jsxDEV)(_.Provider,{value:e=>C[e.join(`.`)],children:(0,P.jsxDEV)(g,{items:e.fields,ctx:{bridge:V}},void 0,!1,{fileName:F,lineNumber:264,columnNumber:11},this)},void 0,!1,{fileName:F,lineNumber:263,columnNumber:9},this),Y.map(e=>(0,P.jsxDEV)(R,{ext:e,values:q[e.id]??{},onChange:X,recordId:t?String(t.id):null,fieldLabel:e=>v[e]?.label?l(v[e].label):e},e.id,!1,{fileName:F,lineNumber:269,columnNumber:11},this)),H.length>0&&(0,P.jsxDEV)(`div`,{className:`bg-danger/10 border border-danger/30 rounded-xl p-3.5 text-sm`,children:[(0,P.jsxDEV)(`p`,{className:`font-semibold text-danger mb-2`,children:l(`form.serverRejected`)},void 0,!1,{fileName:F,lineNumber:281,columnNumber:13},this),(0,P.jsxDEV)(`ul`,{className:`space-y-1 text-text/80`,children:H.map((e,t)=>{let n=v[e.field],r=n?l(n.label):e.field,i=e.code===`pattern`&&e.params?.messageKey?l(String(e.params.messageKey)):l(`validation.${e.code}`,e.params);return(0,P.jsxDEV)(`li`,{className:`flex gap-1.5`,children:[r&&(0,P.jsxDEV)(`span`,{className:`text-muted font-medium`,children:[r,`:`]},void 0,!0,{fileName:F,lineNumber:292,columnNumber:31},this),i]},t,!0,{fileName:F,lineNumber:291,columnNumber:19},this)})},void 0,!1,{fileName:F,lineNumber:282,columnNumber:13},this)]},void 0,!0,{fileName:F,lineNumber:280,columnNumber:11},this),(0,P.jsxDEV)(`div`,{className:`flex gap-3 pt-2 border-t border-border`,children:[(0,P.jsxDEV)(i,{type:`submit`,disabled:W,size:`lg`,className:`flex-1`,children:W?(0,P.jsxDEV)(P.Fragment,{children:[(0,P.jsxDEV)(`span`,{className:`animate-spin inline-block w-4 h-4 border-2 border-white/30 border-t-white rounded-full`},void 0,!1,{fileName:F,lineNumber:306,columnNumber:17},this),` `,l(`common.saving`)]},void 0,!0,{fileName:F,lineNumber:305,columnNumber:15},this):l(d?`actions.save`:`actions.create`)},void 0,!1,{fileName:F,lineNumber:303,columnNumber:11},this),s&&(0,P.jsxDEV)(i,{type:`button`,variant:`secondary`,size:`lg`,onClick:s,className:`flex-1`,children:l(`actions.cancel`)},void 0,!1,{fileName:F,lineNumber:316,columnNumber:13},this)]},void 0,!0,{fileName:F,lineNumber:302,columnNumber:9},this)]},void 0,!0,{fileName:F,lineNumber:262,columnNumber:7},this)},void 0,!1,{fileName:F,lineNumber:261,columnNumber:5},this)}var B=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web/app/record/NewRecordView.tsx`;function V(){let{t:e}=n(),{vault:t,type:r}=o(),s=a(),c=d().flatMap(e=>e.modules).find(e=>e.vault===t&&e.module===r);return!c||c.standalone===!1?(0,P.jsxDEV)(`div`,{className:`p-6 text-muted`,children:e(`common.notFound`)},void 0,!1,{fileName:B,lineNumber:19,columnNumber:44},this):(0,P.jsxDEV)(`div`,{className:`flex flex-col`,children:[(0,P.jsxDEV)(v,{children:(0,P.jsxDEV)(i,{variant:`ghost`,size:`sm`,className:`px-2`,onClick:()=>s(`/${t}/${r}`),children:[(0,P.jsxDEV)(b,{size:18},void 0,!1,{fileName:B,lineNumber:25,columnNumber:11},this),(0,P.jsxDEV)(`span`,{className:`text-sm`,children:e(c.label)},void 0,!1,{fileName:B,lineNumber:26,columnNumber:11},this)]},void 0,!0,{fileName:B,lineNumber:24,columnNumber:9},this)},void 0,!1,{fileName:B,lineNumber:23,columnNumber:7},this),(0,P.jsxDEV)(`div`,{className:`flex-1 min-w-0`,children:(0,P.jsxDEV)(`div`,{className:`max-w-2xl mx-auto px-6 py-6`,children:(0,P.jsxDEV)(h,{vault:c.vault,module:c.module,children:(0,P.jsxDEV)(z,{module:c,onSuccess:e=>{e?.id?s(`/${t}/${r}/${e.id}`):s(`/${t}/${r}`)},onCancel:()=>s(`/${t}/${r}`)},void 0,!1,{fileName:B,lineNumber:32,columnNumber:13},this)},void 0,!1,{fileName:B,lineNumber:31,columnNumber:11},this)},void 0,!1,{fileName:B,lineNumber:30,columnNumber:9},this)},void 0,!1,{fileName:B,lineNumber:29,columnNumber:7},this)]},void 0,!0,{fileName:B,lineNumber:22,columnNumber:5},this)}export{V as NewRecordView};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{r as e}from"./chunk-QTnfLwEv.js";import{t}from"./react-D4J6PwTK.js";import{C as n,T as r,i,r as a,t as o,w as s}from"./button-CbB4uqRh.js";import{n as c}from"./chunk-6CSD65Y2-FavEEIOj.js";import{t as l}from"./jsx-dev-runtime-BMBl2lag.js";import{c as u,i as d,n as f,s as p,t as m}from"./dist-CdBkAqXL.js";import{t as h}from"./jsx-runtime-DV9KAPzc.js";import{t as g}from"./dist-iFwZyFpC.js";import{b as _,d as v,v as y,y as b}from"./api-BpunGHNa.js";import{n as x,r as S}from"./auth-context-BNCSMPL8.js";import{t as C}from"./PageBody-DXEdPT8C.js";var w=e(t(),1),T=h(),E=`Switch`,[D,O]=p(E),[k,A]=D(E);function j(e){let{__scopeSwitch:t,checked:n,children:r,defaultChecked:i,disabled:a,form:o,name:s,onCheckedChange:c,required:l,value:u=`on`,internal_do_not_use_render:d}=e,[f,p]=m({prop:n,defaultProp:i??!1,onChange:c,caller:E}),[h,g]=w.useState(null),[_,v]=w.useState(null),y={checked:f,setChecked:p,disabled:a,control:h,setControl:g,name:s,form:o,value:u,hasConsumerStoppedPropagationRef:w.useRef(!1),required:l,defaultChecked:i,isFormControl:h?!!o||!!h.closest(`form`):!0,bubbleInput:_,setBubbleInput:v};return(0,T.jsx)(k,{scope:t,...y,children:z(d)?d(y):r})}var M=`SwitchTrigger`,N=w.forwardRef(({__scopeSwitch:e,onClick:t,...r},i)=>{let{value:a,disabled:o,checked:s,required:c,setControl:l,setChecked:f,hasConsumerStoppedPropagationRef:p,isFormControl:m,bubbleInput:h}=A(M,e),g=n(i,l);return(0,T.jsx)(d.button,{type:`button`,role:`switch`,"aria-checked":s,"aria-required":c,"data-state":B(s),"data-disabled":o?``:void 0,disabled:o,value:a,...r,ref:g,onClick:u(t,e=>{f(e=>!e),h&&m&&(p.current=e.isPropagationStopped(),p.current||e.stopPropagation())})})});N.displayName=M;var P=w.forwardRef((e,t)=>{let{__scopeSwitch:n,name:r,checked:i,defaultChecked:a,required:o,disabled:s,value:c,onCheckedChange:l,form:u,...d}=e;return(0,T.jsx)(j,{__scopeSwitch:n,checked:i,defaultChecked:a,disabled:s,required:o,onCheckedChange:l,name:r,form:u,value:c,internal_do_not_use_render:({isFormControl:e})=>(0,T.jsxs)(T.Fragment,{children:[(0,T.jsx)(N,{...d,ref:t,__scopeSwitch:n}),e&&(0,T.jsx)(R,{__scopeSwitch:n})]})})});P.displayName=E;var F=`SwitchThumb`,I=w.forwardRef((e,t)=>{let{__scopeSwitch:n,...r}=e,i=A(F,n);return(0,T.jsx)(d.span,{"data-state":B(i.checked),"data-disabled":i.disabled?``:void 0,...r,ref:t})});I.displayName=F;var L=`SwitchBubbleInput`,R=w.forwardRef(({__scopeSwitch:e,...t},r)=>{let{control:i,hasConsumerStoppedPropagationRef:a,checked:o,defaultChecked:s,required:c,disabled:l,name:u,value:p,form:m,bubbleInput:h,setBubbleInput:_}=A(L,e),v=n(r,_),y=g(o),b=f(i);w.useEffect(()=>{let e=h;if(!e)return;let t=window.HTMLInputElement.prototype,n=Object.getOwnPropertyDescriptor(t,`checked`).set,r=!a.current;if(y!==o&&n){let t=new Event(`click`,{bubbles:r});n.call(e,o),e.dispatchEvent(t)}},[h,y,o,a]);let x=w.useRef(o);return(0,T.jsx)(d.input,{type:`checkbox`,"aria-hidden":!0,defaultChecked:s??x.current,required:c,disabled:l,name:u,value:p,form:m,...t,tabIndex:-1,ref:v,style:{...t.style,...b,position:`absolute`,pointerEvents:`none`,opacity:0,margin:0,transform:`translateX(-100%)`}})});R.displayName=L;function z(e){return typeof e==`function`}function B(e){return e?`checked`:`unchecked`}var V=l(),H=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web/components/ui/switch.tsx`,U=w.forwardRef(({className:e,...t},n)=>(0,V.jsxDEV)(P,{ref:n,className:s(`peer inline-flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors`,`focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background`,`disabled:cursor-not-allowed disabled:opacity-50`,`data-[state=checked]:bg-primary data-[state=unchecked]:bg-border`,e),...t,children:(0,V.jsxDEV)(I,{className:s(`pointer-events-none block h-5 w-5 rounded-full bg-white shadow-lg ring-0 transition-transform`,`data-[state=checked]:translate-x-5 data-[state=unchecked]:translate-x-0`)},void 0,!1,{fileName:H,lineNumber:20,columnNumber:5},void 0)},void 0,!1,{fileName:H,lineNumber:9,columnNumber:3},void 0));U.displayName=P.displayName;var W=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web/components/ui/badge.tsx`,G=a(`inline-flex items-center rounded-md border px-2 py-0.5 text-xs font-semibold transition-colors`,{variants:{variant:{default:`border-transparent bg-primary text-primary-foreground`,secondary:`border-transparent bg-secondary text-secondary-foreground`,destructive:`border-transparent bg-destructive text-destructive-foreground`,outline:`border-border text-text`,accent:`border-accent/30 bg-accent/15 text-accent`}},defaultVariants:{variant:`default`}});function K({className:e,variant:t,...n}){return(0,V.jsxDEV)(`div`,{className:s(G({variant:t}),e),...n},void 0,!1,{fileName:W,lineNumber:24,columnNumber:10},this)}var q=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web/app/SettingsPage.tsx`;function J(){let{t:e}=r(),{role:t}=x(),n=t===`admin`,[a,s]=(0,w.useState)([]),[l,u]=(0,w.useState)(!0),[d,f]=(0,w.useState)(null),p=e=>d===e||d===`*`,m=a.filter(e=>e.latestVersion&&e.latestVersion!==e.installedVersion),[h,g]=(0,w.useState)(null),[T,E]=(0,w.useState)(!1),D=t=>e(`${t}.plugin.label`,{defaultValue:t}),O=t=>e(`${t}.plugin.description`,{defaultValue:``}),k=t=>e(`${t}.vault.label`,{defaultValue:t}),A=(t,n)=>e(`${t}.${n}.label`,{defaultValue:n}),j={core_required:()=>e(`plugins.errors.core_required`),has_dependents:t=>e(`plugins.errors.has_dependents`,{list:t.dependents.join(`, `)}),missing_deps:t=>e(`plugins.errors.missing_deps`,{list:t.deps.join(`, `)}),unknown_plugin:()=>e(`plugins.errors.unknown_plugin`)},M=()=>v().then(e=>{s(e),u(!1)});(0,w.useEffect)(()=>{M()},[]);async function N(t){if(!window.confirm(e(`plugins.confirmPurge`,{id:t.id})))return;f(t.id),g(null);let n=await fetch(`/api/plugins/${t.id}/data`,{method:`DELETE`}),r=await n.json().catch(()=>({}));if(f(null),!n.ok){g(j[r.error]?.(r)??e(`plugins.genericError`,{code:r.error??n.status}));return}E(!0),await M()}async function P(t){f(t.id),g(null);let n=await y(t.id,!t.enabled);if(!n.ok){f(null),g(j[n.error]?.(n.data??{})??e(`plugins.genericError`,{code:n.error}));return}window.location.reload()}async function F(){let e=Date.now();for(;Date.now()-e<3e4;){await new Promise(e=>setTimeout(e,1e3));try{if((await fetch(`/health`)).ok)return!0}catch{}}return!1}async function I(t){if(!t.latestVersion||!window.confirm(e(`plugins.confirmUpdate`,{id:t.id,from:t.installedVersion,to:t.latestVersion})))return;f(t.id),g(null);let n=await _(t.id);if(!n.ok){f(null),g(n.stderr?`${e(`plugins.updateError`)}: ${n.stderr}`:e(`plugins.genericError`,{code:n.error}));return}E(!0),await F()&&window.location.reload()}async function L(){if(m.length===0)return;let t=m.map(e=>`${D(e.id)}: v${e.installedVersion} → v${e.latestVersion}`).join(`
|
|
2
|
+
`);if(!window.confirm(e(`plugins.confirmUpdateAll`,{count:m.length,list:t})))return;f(`*`),g(null);let n=await b();if(!n.ok){f(null),g(n.stderr?`${e(`plugins.updateError`)}: ${n.stderr}`:e(`plugins.genericError`,{code:n.error}));return}E(!0),await F()&&window.location.reload()}let R=a.find(e=>e.id===`core`);return(0,V.jsxDEV)(C,{children:[(0,V.jsxDEV)(`h1`,{className:`mb-6 text-[28px] font-bold text-text`,children:e(`settings.title`)},void 0,!1,{fileName:q,lineNumber:139,columnNumber:7},this),(0,V.jsxDEV)(`section`,{className:`mb-6`,children:[(0,V.jsxDEV)(`h2`,{className:`mb-1 text-sm font-semibold uppercase tracking-wide text-muted`,children:e(`settings.personalTitle`)},void 0,!1,{fileName:q,lineNumber:143,columnNumber:9},this),(0,V.jsxDEV)(S,{className:`flex items-center gap-4 px-4 py-3`,children:[(0,V.jsxDEV)(`div`,{className:`min-w-0 flex-1`,children:(0,V.jsxDEV)(`span`,{className:`font-semibold text-text`,children:e(`auth.accountTitle`)},void 0,!1,{fileName:q,lineNumber:146,columnNumber:13},this)},void 0,!1,{fileName:q,lineNumber:145,columnNumber:11},this),(0,V.jsxDEV)(o,{variant:`ghost`,size:`sm`,type:`button`,className:`shrink-0 border border-border`,asChild:!0,children:(0,V.jsxDEV)(c,{to:`/settings/account`,title:e(`auth.accountTitle`),"aria-label":e(`auth.accountTitle`),children:(0,V.jsxDEV)(i,{name:`lucide:settings`,size:16},void 0,!1,{fileName:q,lineNumber:150,columnNumber:15},this)},void 0,!1,{fileName:q,lineNumber:149,columnNumber:13},this)},void 0,!1,{fileName:q,lineNumber:148,columnNumber:11},this)]},void 0,!0,{fileName:q,lineNumber:144,columnNumber:9},this)]},void 0,!0,{fileName:q,lineNumber:142,columnNumber:7},this),n&&(0,V.jsxDEV)(V.Fragment,{children:[(0,V.jsxDEV)(`section`,{className:`mb-6`,children:[(0,V.jsxDEV)(`h2`,{className:`mb-1 text-sm font-semibold uppercase tracking-wide text-muted`,children:e(`settings.systemTitle`)},void 0,!1,{fileName:q,lineNumber:160,columnNumber:13},this),(0,V.jsxDEV)(`p`,{className:`mb-3 text-sm text-muted`,children:e(`settings.systemDescription`)},void 0,!1,{fileName:q,lineNumber:161,columnNumber:13},this),(0,V.jsxDEV)(S,{className:`flex items-center gap-4 px-4 py-3`,children:[(0,V.jsxDEV)(`div`,{className:`min-w-0 flex-1 flex items-center gap-2`,children:[(0,V.jsxDEV)(`span`,{className:`font-semibold text-text`,children:e(`core.settings.label`)},void 0,!1,{fileName:q,lineNumber:164,columnNumber:17},this),R&&(0,V.jsxDEV)(Y,{plugin:R,busy:p(`core`),onUpdate:()=>I(R)},void 0,!1,{fileName:q,lineNumber:165,columnNumber:26},this)]},void 0,!0,{fileName:q,lineNumber:163,columnNumber:15},this),(0,V.jsxDEV)(o,{variant:`ghost`,size:`sm`,type:`button`,className:`shrink-0 border border-border`,asChild:!0,children:(0,V.jsxDEV)(c,{to:`/settings/core`,title:e(`core.settings.label`),"aria-label":e(`core.settings.label`),children:(0,V.jsxDEV)(i,{name:`lucide:settings`,size:16},void 0,!1,{fileName:q,lineNumber:169,columnNumber:19},this)},void 0,!1,{fileName:q,lineNumber:168,columnNumber:17},this)},void 0,!1,{fileName:q,lineNumber:167,columnNumber:15},this)]},void 0,!0,{fileName:q,lineNumber:162,columnNumber:13},this)]},void 0,!0,{fileName:q,lineNumber:159,columnNumber:11},this),(0,V.jsxDEV)(`section`,{className:`mb-6`,children:[(0,V.jsxDEV)(`h2`,{className:`mb-1 text-sm font-semibold uppercase tracking-wide text-muted`,children:e(`settings.usersTitle`)},void 0,!1,{fileName:q,lineNumber:177,columnNumber:13},this),(0,V.jsxDEV)(`p`,{className:`mb-3 text-sm text-muted`,children:e(`settings.usersDescription`)},void 0,!1,{fileName:q,lineNumber:178,columnNumber:13},this),(0,V.jsxDEV)(S,{className:`flex items-center gap-4 px-4 py-3`,children:[(0,V.jsxDEV)(`div`,{className:`min-w-0 flex-1`,children:(0,V.jsxDEV)(`span`,{className:`font-semibold text-text`,children:e(`settings.usersTitle`)},void 0,!1,{fileName:q,lineNumber:181,columnNumber:17},this)},void 0,!1,{fileName:q,lineNumber:180,columnNumber:15},this),(0,V.jsxDEV)(o,{variant:`ghost`,size:`sm`,type:`button`,className:`shrink-0 border border-border`,asChild:!0,children:(0,V.jsxDEV)(c,{to:`/settings/users`,title:e(`settings.usersTitle`),"aria-label":e(`settings.usersTitle`),children:(0,V.jsxDEV)(i,{name:`lucide:settings`,size:16},void 0,!1,{fileName:q,lineNumber:185,columnNumber:19},this)},void 0,!1,{fileName:q,lineNumber:184,columnNumber:17},this)},void 0,!1,{fileName:q,lineNumber:183,columnNumber:15},this)]},void 0,!0,{fileName:q,lineNumber:179,columnNumber:13},this)]},void 0,!0,{fileName:q,lineNumber:176,columnNumber:11},this),(0,V.jsxDEV)(`section`,{children:[(0,V.jsxDEV)(`div`,{className:`mb-1 flex items-center gap-3`,children:[(0,V.jsxDEV)(`h2`,{className:`text-sm font-semibold uppercase tracking-wide text-muted`,children:e(`plugins.title`)},void 0,!1,{fileName:q,lineNumber:194,columnNumber:15},this),m.length>0&&(0,V.jsxDEV)(o,{variant:`ghost`,size:`sm`,type:`button`,disabled:d!==null,onClick:L,className:`shrink-0 border border-accent/40 text-accent hover:bg-accent/10 hover:text-accent`,children:e(`plugins.updateAllButton`,{count:m.length})},void 0,!1,{fileName:q,lineNumber:196,columnNumber:17},this)]},void 0,!0,{fileName:q,lineNumber:193,columnNumber:13},this),(0,V.jsxDEV)(`p`,{className:`mb-3 text-sm text-muted`,children:e(`plugins.description`)},void 0,!1,{fileName:q,lineNumber:208,columnNumber:13},this),l?(0,V.jsxDEV)(`p`,{className:`text-muted`,children:e(`plugins.loading`)},void 0,!1,{fileName:q,lineNumber:211,columnNumber:15},this):(0,V.jsxDEV)(V.Fragment,{children:[T&&(0,V.jsxDEV)(`div`,{className:`mb-5 rounded-xl border border-accent/40 bg-accent/10 px-4 py-3 text-sm text-accent`,children:[e(`plugins.restartBannerBefore`),(0,V.jsxDEV)(`b`,{children:e(`plugins.restartBannerBold`)},void 0,!1,{fileName:q,lineNumber:217,columnNumber:21},this),e(`plugins.restartBannerAfter`)]},void 0,!0,{fileName:q,lineNumber:215,columnNumber:19},this),h&&(0,V.jsxDEV)(`div`,{className:`mb-5 rounded-xl border border-danger/40 bg-danger/10 px-4 py-3 text-sm text-danger`,children:h},void 0,!1,{fileName:q,lineNumber:222,columnNumber:19},this),(0,V.jsxDEV)(`div`,{className:`flex flex-col gap-2`,children:a.filter(e=>e.id!==`core`).map(t=>{let n=O(t.id),r=t.enabled?a.filter(e=>e.enabled&&e.id!==t.id&&e.dependsOn.includes(t.id)):[],s=r.length>0,l=s?e(`plugins.blockedByDependents`,{list:r.map(e=>D(e.id)).join(`, `)}):t.enabled?e(`plugins.switchDisable`):e(`plugins.switchEnable`),u=[t.dependsOn.length>0&&`${e(`plugins.metaDepends`)} ${t.dependsOn.map(D).join(`, `)}`,t.vaults.length>0&&`${e(`plugins.metaVaults`)} ${t.vaults.map(k).join(`, `)}`,t.extends.length>0&&`${e(`plugins.metaExtends`)} ${t.extends.map(e=>A(t.id,e)).join(`, `)}`].filter(Boolean).join(` · `)||`—`;return(0,V.jsxDEV)(S,{className:`flex items-center gap-4 px-4 py-3`,children:[(0,V.jsxDEV)(`div`,{className:`min-w-0 flex-1`,children:[(0,V.jsxDEV)(`div`,{className:`flex items-center gap-2`,children:[(0,V.jsxDEV)(`span`,{className:`font-semibold text-text`,children:D(t.id)},void 0,!1,{fileName:q,lineNumber:259,columnNumber:31},this),(0,V.jsxDEV)(Y,{plugin:t,busy:p(t.id),onUpdate:()=>I(t)},void 0,!1,{fileName:q,lineNumber:260,columnNumber:31},this)]},void 0,!0,{fileName:q,lineNumber:258,columnNumber:29},this),n&&(0,V.jsxDEV)(`div`,{className:`text-xs text-muted mt-0.5 truncate`,children:n},void 0,!1,{fileName:q,lineNumber:262,columnNumber:45},this),(0,V.jsxDEV)(`div`,{className:`text-xs text-muted mt-0.5 truncate`,children:u},void 0,!1,{fileName:q,lineNumber:263,columnNumber:29},this)]},void 0,!0,{fileName:q,lineNumber:257,columnNumber:27},this),t.hasSettings&&(0,V.jsxDEV)(o,{variant:`ghost`,size:`sm`,type:`button`,className:`shrink-0 border border-border`,asChild:!0,children:(0,V.jsxDEV)(c,{to:`/settings/${t.id}`,title:e(`plugins.settingsTitle`,{defaultValue:`Налаштування`}),"aria-label":e(`plugins.settingsTitle`,{defaultValue:`Налаштування`}),children:(0,V.jsxDEV)(i,{name:`lucide:settings`,size:16},void 0,!1,{fileName:q,lineNumber:278,columnNumber:33},this)},void 0,!1,{fileName:q,lineNumber:273,columnNumber:31},this)},void 0,!1,{fileName:q,lineNumber:266,columnNumber:29},this),(0,V.jsxDEV)(o,{variant:`ghost`,size:`sm`,type:`button`,disabled:p(t.id),onClick:()=>N(t),title:e(`plugins.purgeTitle`),className:`shrink-0 border border-danger/40 text-danger hover:bg-danger/10 hover:text-danger`,children:e(`plugins.purgeButton`)},void 0,!1,{fileName:q,lineNumber:282,columnNumber:27},this),(0,V.jsxDEV)(`span`,{title:l,className:`shrink-0`,children:(0,V.jsxDEV)(U,{checked:t.enabled,disabled:p(t.id)||s,onCheckedChange:()=>P(t),title:l},void 0,!1,{fileName:q,lineNumber:296,columnNumber:29},this)},void 0,!1,{fileName:q,lineNumber:295,columnNumber:27},this)]},t.id,!0,{fileName:q,lineNumber:256,columnNumber:25},this)})},void 0,!1,{fileName:q,lineNumber:227,columnNumber:17},this)]},void 0,!0,{fileName:q,lineNumber:213,columnNumber:15},this)]},void 0,!0,{fileName:q,lineNumber:192,columnNumber:11},this)]},void 0,!0,{fileName:q,lineNumber:157,columnNumber:9},this)]},void 0,!0,{fileName:q,lineNumber:138,columnNumber:5},this)}function Y({plugin:e,busy:t,onUpdate:n}){let{t:i}=r(),a=!!e.latestVersion&&e.latestVersion!==e.installedVersion;return(0,V.jsxDEV)(V.Fragment,{children:[(0,V.jsxDEV)(K,{variant:`secondary`,className:`text-[10px] font-medium`,children:[`v`,e.installedVersion]},void 0,!0,{fileName:q,lineNumber:329,columnNumber:7},this),a&&(0,V.jsxDEV)(o,{variant:`ghost`,size:`sm`,type:`button`,disabled:t,onClick:n,title:i(`plugins.updateTitle`,{from:e.installedVersion,to:e.latestVersion}),className:`shrink-0 border border-accent/40 text-accent hover:bg-accent/10 hover:text-accent`,children:i(`plugins.updateButton`)},void 0,!1,{fileName:q,lineNumber:333,columnNumber:9},this)]},void 0,!0,{fileName:q,lineNumber:328,columnNumber:5},this)}export{J as SettingsPage};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
async function e(e){let t=new FormData;t.append(`file`,e);let n=await fetch(`/api/upload`,{method:`POST`,body:t});return n.ok?(await n.json()).filename:null}function t(e){return`/uploads/${e}`}async function n(e){let t=await fetch(`/api/embed`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({url:e})});return t.ok?await t.json():null}async function r(e,t,n){let r=n&&Object.keys(n).length?`?`+new URLSearchParams(n).toString():``,i=await fetch(`/api/${e}/${t}${r}`);if(!i.ok)throw Error(`Не вдалося завантажити`);return i.json()}async function i(e,t,n){let r=await fetch(`/api/${e}/${t}`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(n)});return r.status===201?{ok:!0,row:await r.json()}:r.status===422?{ok:!1,issues:(await r.json()).issues}:{ok:!1,issues:[{field:``,code:`server`,path:[]}]}}async function a(e,t,n,r){let i=await fetch(`/api/${e}/${t}/${n}`,{method:`PATCH`,headers:{"content-type":`application/json`},body:JSON.stringify(r)});return i.ok?{ok:!0,row:await i.json()}:i.status===422?{ok:!1,issues:(await i.json()).issues}:{ok:!1,issues:[{field:``,code:`server`,path:[]}]}}async function o(e,t,n){return(await fetch(`/api/${e}/${t}/${n}`,{method:`DELETE`})).status===204}async function s(){let e=await fetch(`/api/plugins`);if(!e.ok)throw Error(`plugins`);return e.json()}async function c(e,t){let n=await fetch(`/api/plugins/${e}`,{method:`PATCH`,headers:{"content-type":`application/json`},body:JSON.stringify({enabled:t})}),r=await n.json().catch(()=>({}));return n.ok?{ok:!0}:{ok:!1,error:r.error??String(n.status),data:r}}async function l(e){let t=await fetch(`/api/plugins/${e}/update`,{method:`POST`}),n=await t.json().catch(()=>({}));return t.ok?{ok:!0}:{ok:!1,error:n.error??String(t.status),stderr:n.stderr}}async function u(e,t){let n=await fetch(e,{headers:{"content-type":`application/json`},...t}),r=await n.json().catch(()=>({}));return n.ok?{ok:!0,data:r}:{ok:!1,status:n.status,data:r}}function
|
|
1
|
+
async function e(e){let t=new FormData;t.append(`file`,e);let n=await fetch(`/api/upload`,{method:`POST`,body:t});return n.ok?(await n.json()).filename:null}function t(e){return`/uploads/${e}`}async function n(e){let t=await fetch(`/api/embed`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({url:e})});return t.ok?await t.json():null}async function r(e,t,n){let r=n&&Object.keys(n).length?`?`+new URLSearchParams(n).toString():``,i=await fetch(`/api/${e}/${t}${r}`);if(!i.ok)throw Error(`Не вдалося завантажити`);return i.json()}async function i(e,t,n){let r=await fetch(`/api/${e}/${t}`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(n)});return r.status===201?{ok:!0,row:await r.json()}:r.status===422?{ok:!1,issues:(await r.json()).issues}:{ok:!1,issues:[{field:``,code:`server`,path:[]}]}}async function a(e,t,n,r){let i=await fetch(`/api/${e}/${t}/${n}`,{method:`PATCH`,headers:{"content-type":`application/json`},body:JSON.stringify(r)});return i.ok?{ok:!0,row:await i.json()}:i.status===422?{ok:!1,issues:(await i.json()).issues}:{ok:!1,issues:[{field:``,code:`server`,path:[]}]}}async function o(e,t,n){return(await fetch(`/api/${e}/${t}/${n}`,{method:`DELETE`})).status===204}async function s(){let e=await fetch(`/api/plugins`);if(!e.ok)throw Error(`plugins`);return e.json()}async function c(e,t){let n=await fetch(`/api/plugins/${e}`,{method:`PATCH`,headers:{"content-type":`application/json`},body:JSON.stringify({enabled:t})}),r=await n.json().catch(()=>({}));return n.ok?{ok:!0}:{ok:!1,error:r.error??String(n.status),data:r}}async function l(e){let t=await fetch(`/api/plugins/${e}/update`,{method:`POST`}),n=await t.json().catch(()=>({}));return t.ok?{ok:!0}:{ok:!1,error:n.error??String(t.status),stderr:n.stderr}}async function u(){let e=await fetch(`/api/plugins/update-all`,{method:`POST`}),t=await e.json().catch(()=>({}));return e.ok?{ok:!0,updated:t.updated}:{ok:!1,error:t.error??String(e.status),stderr:t.stderr}}async function d(e,t){let n=await fetch(e,{headers:{"content-type":`application/json`},...t}),r=await n.json().catch(()=>({}));return n.ok?{ok:!0,data:r}:{ok:!1,status:n.status,data:r}}function f(){return fetch(`/api/auth/status`).then(e=>e.json())}function p(e,t,n){return d(`/api/auth/setup`,{method:`POST`,body:JSON.stringify({login:e,password:t,displayName:n})})}function m(e,t){return d(`/api/auth/login`,{method:`POST`,body:JSON.stringify({login:e,password:t})})}async function h(){let e=await fetch(`/api/auth/me`);return e.ok?e.json():null}function g(e){return d(`/api/auth/me`,{method:`PATCH`,body:JSON.stringify(e)})}function _(e){return d(`/api/auth/users${e?`?q=${encodeURIComponent(e)}`:``}`)}function v(e){return d(`/api/auth/users`,{method:`POST`,body:JSON.stringify(e)})}function y(e,t){return d(`/api/auth/users/${e}`,{method:`PATCH`,body:JSON.stringify(t)})}function b(e){return d(`/api/auth/users/${e}`,{method:`DELETE`})}function x(){return d(`/api/auth/tokens`)}function S(e,t){return d(`/api/auth/tokens`,{method:`POST`,body:JSON.stringify({name:e,token:t})})}function C(e){return d(`/api/auth/tokens/${e}`,{method:`DELETE`})}export{e as C,y as S,C as _,g as a,l as b,v as c,s as d,r as f,n as g,t as h,f as i,o as l,_ as m,h as n,i as o,x as p,p as r,S as s,m as t,b as u,c as v,a as x,u as y};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as e}from"./chunk-QTnfLwEv.js";import{t}from"./react-D4J6PwTK.js";import{w as n}from"./button-CbB4uqRh.js";import{i as r,s as i}from"./chunk-6CSD65Y2-FavEEIOj.js";import{t as a}from"./jsx-dev-runtime-BMBl2lag.js";import{i as o,n as s}from"./api-
|
|
1
|
+
import{r as e}from"./chunk-QTnfLwEv.js";import{t}from"./react-D4J6PwTK.js";import{w as n}from"./button-CbB4uqRh.js";import{i as r,s as i}from"./chunk-6CSD65Y2-FavEEIOj.js";import{t as a}from"./jsx-dev-runtime-BMBl2lag.js";import{i as o,n as s}from"./api-BpunGHNa.js";var c=e(t(),1),l=a(),u=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web/components/ui/card.tsx`,d=c.forwardRef(({className:e,...t},r)=>(0,l.jsxDEV)(`div`,{ref:r,className:n(`rounded-xl border border-border bg-card text-card-foreground`,e),...t},void 0,!1,{fileName:u,lineNumber:5,columnNumber:3},void 0));d.displayName=`Card`;var f=c.forwardRef(({className:e,...t},r)=>(0,l.jsxDEV)(`div`,{ref:r,className:n(`flex flex-col gap-1.5 p-5`,e),...t},void 0,!1,{fileName:u,lineNumber:10,columnNumber:37},void 0));f.displayName=`CardHeader`;var p=c.forwardRef(({className:e,...t},r)=>(0,l.jsxDEV)(`div`,{ref:r,className:n(`font-semibold leading-none text-text`,e),...t},void 0,!1,{fileName:u,lineNumber:16,columnNumber:5},void 0));p.displayName=`CardTitle`;var m=c.forwardRef(({className:e,...t},r)=>(0,l.jsxDEV)(`div`,{ref:r,className:n(`text-sm text-muted-foreground`,e),...t},void 0,!1,{fileName:u,lineNumber:23,columnNumber:5},void 0));m.displayName=`CardDescription`;var h=c.forwardRef(({className:e,...t},r)=>(0,l.jsxDEV)(`div`,{ref:r,className:n(`p-5 pt-0`,e),...t},void 0,!1,{fileName:u,lineNumber:29,columnNumber:37},void 0));h.displayName=`CardContent`;var g=c.forwardRef(({className:e,...t},r)=>(0,l.jsxDEV)(`div`,{ref:r,className:n(`flex items-center p-5 pt-0`,e),...t},void 0,!1,{fileName:u,lineNumber:35,columnNumber:5},void 0));g.displayName=`CardFooter`;var _=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web/auth-context.tsx`,v=(0,c.createContext)(null);function y(){let e=(0,c.useContext)(v);if(!e)throw Error(`useAuth() called outside <AuthGate>`);return e}function b({children:e}){let[t,n]=(0,c.useState)({kind:`loading`});return(0,c.useEffect)(()=>{let e=!1;return(async()=>{try{let t=await o();if(e)return;if(t.needsSetup)return n({kind:`needsSetup`});let r=await s();if(e)return;n(r?{kind:`ready`,user:r}:{kind:`needsLogin`})}catch{e||n({kind:`error`})}})(),()=>{e=!0}},[i().pathname]),t.kind===`loading`?null:t.kind===`needsSetup`?(0,l.jsxDEV)(r,{to:`/setup`,replace:!0},void 0,!1,{fileName:_,lineNumber:41,columnNumber:44},this):t.kind===`needsLogin`?(0,l.jsxDEV)(r,{to:`/login`,replace:!0},void 0,!1,{fileName:_,lineNumber:42,columnNumber:44},this):t.kind===`error`?(0,l.jsxDEV)(`div`,{style:{display:`flex`,minHeight:`100dvh`,alignItems:`center`,justifyContent:`center`,flexDirection:`column`,gap:`1rem`},children:[(0,l.jsxDEV)(`p`,{children:`Could not check your session.`},void 0,!1,{fileName:_,lineNumber:46,columnNumber:9},this),(0,l.jsxDEV)(`button`,{onClick:()=>window.location.reload(),children:`Reload`},void 0,!1,{fileName:_,lineNumber:47,columnNumber:9},this)]},void 0,!0,{fileName:_,lineNumber:45,columnNumber:7},this):(0,l.jsxDEV)(v.Provider,{value:t.user,children:e},void 0,!1,{fileName:_,lineNumber:51,columnNumber:10},this)}export{y as n,d as r,b as t};
|