@coffer-org/web 2.3.0 → 2.3.1

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.
@@ -0,0 +1,3 @@
1
+ import{r as e}from"./rolldown-runtime-QTnfLwEv.js";import{a as t,t as n}from"./i18n-vendor-T6EnJ_TL.js";import{r,t as i}from"./react-vendor-BskHO5hY.js";import{r as a}from"./x-BFRg18Fi.js";import{n as o,t as s}from"./ui-vendor-EU9CHLyR.js";import{t as c}from"./Icon-CdBq17IP.js";import{c as l,d as u,l as d,t as f}from"./ThemeSwitcher-CB9R_Qiy.js";import{r as p,t as m}from"./button-D-Q6I5Ob.js";import{A as h,D as ee,E as g,O as _,h as v,p as y}from"./api-8XMJe9yT.js";import{t as b}from"./PageBody-Y-cpiRMh.js";var x=e(t(),1),S=i(),C=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web/components/ui/switch.tsx`,w=x.forwardRef(({className:e,...t},n)=>(0,S.jsxDEV)(s,{ref:n,className:a(`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,S.jsxDEV)(o,{className:a(`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:C,lineNumber:20,columnNumber:5},void 0)},void 0,!1,{fileName:C,lineNumber:9,columnNumber:3},void 0));w.displayName=s.displayName;var T=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web/components/ui/badge.tsx`,E=p(`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 D({className:e,variant:t,...n}){return(0,S.jsxDEV)(`div`,{className:a(E({variant:t}),e),...n},void 0,!1,{fileName:T,lineNumber:24,columnNumber:10},this)}var O=/^v?(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?(?:\+[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?$/;function k(e){let t=O.exec(e.trim());if(!t)return null;let n=t[4]?.split(`.`)??[];return n.some(e=>/^\d+$/.test(e)&&e.length>1&&e.startsWith(`0`))?null:{major:Number(t[1]),minor:Number(t[2]),patch:Number(t[3]),prerelease:n}}function A(e,t){let n=/^\d+$/.test(e),r=/^\d+$/.test(t);return n&&r?e.length===t.length?e===t?0:e>t?1:-1:e.length>t.length?1:-1:n===r?e===t?0:e>t?1:-1:n?-1:1}function j(e,t){let n=k(e),r=k(t);if(!n||!r)return!1;for(let e of[`major`,`minor`,`patch`])if(n[e]!==r[e])return n[e]>r[e];if(n.prerelease.length===0||r.prerelease.length===0)return n.prerelease.length===0&&r.prerelease.length>0;let i=Math.max(n.prerelease.length,r.prerelease.length);for(let e=0;e<i;e++){let t=n.prerelease[e],i=r.prerelease[e];if(t===void 0)return!1;if(i===void 0)return!0;let a=A(t,i);if(a!==0)return a>0}return!1}var M=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web/app/SettingsPage.tsx`;async function N(){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}function P(){let{t:e}=n(),{role:t}=l(),i=t===`admin`,[a,o]=(0,x.useState)([]),[s,p]=(0,x.useState)(!0),[C,T]=(0,x.useState)(null),[E,O]=(0,x.useState)(!1),k=e=>C===e||C===`*`,[A,P]=(0,x.useState)(null),I=a.filter(e=>e.latestVersion&&j(e.latestVersion,e.installedVersion)),L=!!(A?.latestVersion&&A.installedVersion&&j(A.latestVersion,A.installedVersion)),R=I.length+ +!!L,[z,B]=(0,x.useState)(null),[V,H]=(0,x.useState)(!1),U=t=>e(`${t}.plugin.label`,{defaultValue:t}),W=t=>e(`${t}.plugin.description`,{defaultValue:``}),G=t=>e(`${t}.library.label`,{defaultValue:t}),K=(t,n)=>e(`${t}.${n}.label`,{defaultValue:n}),q={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`)},J=(e=!1)=>Promise.all([v(e?{refresh:!0}:void 0),y(e?{refresh:!0}:void 0)]).then(([e,t])=>{o(e),P(t),p(!1)});(0,x.useEffect)(()=>{J()},[]);async function Y(){O(!0),B(null);try{await J(!0)}catch{B(e(`plugins.updateCheckError`))}finally{O(!1)}}async function X(t){if(!await u({title:e(`plugins.purgeTitle`),description:e(`plugins.confirmPurge`,{id:t.id}),confirmLabel:e(`plugins.purgeButton`),variant:`destructive`}))return;T(t.id),B(null);let n=await fetch(`/api/plugins/${t.id}/data`,{method:`DELETE`}),r=await n.json().catch(()=>({}));if(T(null),!n.ok){B(q[r.error]?.(r)??e(`plugins.genericError`,{code:r.error??n.status}));return}H(!0),await J()}async function Z(t){T(t.id),B(null);let n=await g(t.id,!t.enabled);if(!n.ok){T(null),B(q[n.error]?.(n.data??{})??e(`plugins.genericError`,{code:n.error}));return}window.location.reload()}async function te(t){if(!t.latestVersion||!await u({title:e(`plugins.updateTitle`,{from:t.installedVersion,to:t.latestVersion}),description:e(`plugins.confirmUpdate`,{id:t.id,from:t.installedVersion,to:t.latestVersion}),confirmLabel:e(`plugins.updateButton`)}))return;T(t.id),B(null);let n=await _(t.id);if(!n.ok){T(null),B(n.stderr?`${e(`plugins.updateError`)}: ${n.stderr}`:e(`plugins.genericError`,{code:n.error}));return}H(!0),await N()&&window.location.reload()}async function ne(){if(R===0)return;let t=I.map(e=>`${U(e.id)}: v${e.installedVersion} → v${e.latestVersion}`);L&&t.push(`${e(`plugins.runtimeLabel`)}: v${A.installedVersion} → v${A.latestVersion}`);let n=t.join(`
2
+ `);if(!await u({title:e(`plugins.updateAllButton`,{count:R}),description:e(`plugins.confirmUpdateAll`,{count:R,list:n}),confirmLabel:e(`plugins.updateButton`)}))return;T(`*`),B(null);let r=await ee();if(!r.ok){T(null),B(r.stderr?`${e(`plugins.updateError`)}: ${r.stderr}`:e(`plugins.genericError`,{code:r.error}));return}H(!0),await N()&&window.location.reload()}let Q=a.find(e=>e.id===`core`),$=!!(Q?.latestVersion&&j(Q.latestVersion,Q.installedVersion)),re=$||L;async function ie(){let t=[];if(Q&&$&&t.push(`${e(`core.settings.label`)}: v${Q.installedVersion} → v${Q.latestVersion}`),L&&t.push(`${e(`plugins.runtimeLabel`)}: v${A.installedVersion} → v${A.latestVersion}`),t.length===0||!await u({title:e(`plugins.updateAllButton`,{count:t.length}),description:e(`plugins.confirmUpdateAll`,{count:t.length,list:t.join(`
3
+ `)}),confirmLabel:e(`plugins.updateButton`)}))return;T(`*`),B(null);let n=await h();if(!n.ok){T(null),B(n.stderr?`${e(`plugins.updateError`)}: ${n.stderr}`:e(`plugins.genericError`,{code:n.error}));return}H(!0),await N()&&window.location.reload()}return(0,S.jsxDEV)(b,{children:[(0,S.jsxDEV)(`h1`,{className:`mb-6 text-[28px] font-bold text-text`,children:e(`settings.title`)},void 0,!1,{fileName:M,lineNumber:221,columnNumber:7},this),(0,S.jsxDEV)(`section`,{className:`mb-6`,children:[(0,S.jsxDEV)(`h2`,{className:`mb-1 text-sm font-semibold uppercase tracking-wide text-muted`,children:e(`settings.appearance`)},void 0,!1,{fileName:M,lineNumber:224,columnNumber:9},this),(0,S.jsxDEV)(d,{className:`flex items-center gap-4 px-4 py-2`,children:[(0,S.jsxDEV)(`span`,{className:`min-w-0 flex-1 font-semibold text-text`,children:e(`theme.label`)},void 0,!1,{fileName:M,lineNumber:226,columnNumber:11},this),(0,S.jsxDEV)(`div`,{className:`w-40 shrink-0`,children:(0,S.jsxDEV)(f,{direction:`down`},void 0,!1,{fileName:M,lineNumber:228,columnNumber:13},this)},void 0,!1,{fileName:M,lineNumber:227,columnNumber:11},this)]},void 0,!0,{fileName:M,lineNumber:225,columnNumber:9},this)]},void 0,!0,{fileName:M,lineNumber:223,columnNumber:7},this),(0,S.jsxDEV)(`section`,{className:`mb-6`,children:[(0,S.jsxDEV)(`h2`,{className:`mb-1 text-sm font-semibold uppercase tracking-wide text-muted`,children:e(`settings.personalTitle`)},void 0,!1,{fileName:M,lineNumber:235,columnNumber:9},this),(0,S.jsxDEV)(d,{className:`flex items-center gap-4 px-4 py-3`,children:[(0,S.jsxDEV)(`div`,{className:`min-w-0 flex-1`,children:(0,S.jsxDEV)(`span`,{className:`font-semibold text-text`,children:e(`auth.accountTitle`)},void 0,!1,{fileName:M,lineNumber:238,columnNumber:13},this)},void 0,!1,{fileName:M,lineNumber:237,columnNumber:11},this),(0,S.jsxDEV)(m,{variant:`ghost`,size:`sm`,type:`button`,className:`shrink-0 border border-border`,asChild:!0,children:(0,S.jsxDEV)(r,{to:`/settings/account`,title:e(`auth.accountTitle`),"aria-label":e(`auth.accountTitle`),children:(0,S.jsxDEV)(c,{name:`lucide:settings`,size:16},void 0,!1,{fileName:M,lineNumber:242,columnNumber:15},this)},void 0,!1,{fileName:M,lineNumber:241,columnNumber:13},this)},void 0,!1,{fileName:M,lineNumber:240,columnNumber:11},this)]},void 0,!0,{fileName:M,lineNumber:236,columnNumber:9},this)]},void 0,!0,{fileName:M,lineNumber:234,columnNumber:7},this),i&&(0,S.jsxDEV)(S.Fragment,{children:[(0,S.jsxDEV)(`section`,{className:`mb-6`,children:[(0,S.jsxDEV)(`h2`,{className:`mb-1 text-sm font-semibold uppercase tracking-wide text-muted`,children:e(`settings.usersTitle`)},void 0,!1,{fileName:M,lineNumber:252,columnNumber:13},this),(0,S.jsxDEV)(`p`,{className:`mb-3 text-sm text-muted`,children:e(`settings.usersDescription`)},void 0,!1,{fileName:M,lineNumber:253,columnNumber:13},this),(0,S.jsxDEV)(d,{className:`flex items-center gap-4 px-4 py-3`,children:[(0,S.jsxDEV)(`div`,{className:`min-w-0 flex-1`,children:(0,S.jsxDEV)(`span`,{className:`font-semibold text-text`,children:e(`settings.usersTitle`)},void 0,!1,{fileName:M,lineNumber:256,columnNumber:17},this)},void 0,!1,{fileName:M,lineNumber:255,columnNumber:15},this),(0,S.jsxDEV)(m,{variant:`ghost`,size:`sm`,type:`button`,className:`shrink-0 border border-border`,asChild:!0,children:(0,S.jsxDEV)(r,{to:`/settings/users`,title:e(`settings.usersTitle`),"aria-label":e(`settings.usersTitle`),children:(0,S.jsxDEV)(c,{name:`lucide:settings`,size:16},void 0,!1,{fileName:M,lineNumber:260,columnNumber:19},this)},void 0,!1,{fileName:M,lineNumber:259,columnNumber:17},this)},void 0,!1,{fileName:M,lineNumber:258,columnNumber:15},this)]},void 0,!0,{fileName:M,lineNumber:254,columnNumber:13},this)]},void 0,!0,{fileName:M,lineNumber:251,columnNumber:11},this),(0,S.jsxDEV)(`section`,{children:[(0,S.jsxDEV)(`div`,{className:`mb-1 flex items-center gap-3`,children:[(0,S.jsxDEV)(`h2`,{className:`text-sm font-semibold uppercase tracking-wide text-muted`,children:e(`settings.componentsTitle`)},void 0,!1,{fileName:M,lineNumber:269,columnNumber:15},this),(0,S.jsxDEV)(m,{variant:`ghost`,size:`sm`,type:`button`,disabled:C!==null||E,onClick:Y,title:e(`plugins.checkUpdates`),className:`shrink-0 border border-border`,children:[(0,S.jsxDEV)(c,{name:`lucide:refresh-cw`,size:14,className:E?`animate-spin`:void 0},void 0,!1,{fileName:M,lineNumber:279,columnNumber:17},this),e(E?`plugins.checkingUpdates`:`plugins.checkUpdates`)]},void 0,!0,{fileName:M,lineNumber:270,columnNumber:15},this),R>0&&(0,S.jsxDEV)(m,{variant:`ghost`,size:`sm`,type:`button`,disabled:C!==null,onClick:ne,className:`shrink-0 border border-accent/40 text-accent hover:bg-accent/10 hover:text-accent`,children:e(`plugins.updateAllButton`,{count:R})},void 0,!1,{fileName:M,lineNumber:283,columnNumber:17},this)]},void 0,!0,{fileName:M,lineNumber:268,columnNumber:13},this),(0,S.jsxDEV)(`p`,{className:`mb-3 text-sm text-muted`,children:e(`settings.componentsDescription`)},void 0,!1,{fileName:M,lineNumber:295,columnNumber:13},this),s?(0,S.jsxDEV)(`p`,{className:`text-muted`,children:e(`plugins.loading`)},void 0,!1,{fileName:M,lineNumber:298,columnNumber:15},this):(0,S.jsxDEV)(S.Fragment,{children:[V&&(0,S.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,S.jsxDEV)(`b`,{children:e(`plugins.restartBannerBold`)},void 0,!1,{fileName:M,lineNumber:304,columnNumber:21},this),e(`plugins.restartBannerAfter`)]},void 0,!0,{fileName:M,lineNumber:302,columnNumber:19},this),z&&(0,S.jsxDEV)(`div`,{className:`mb-5 rounded-xl border border-danger/40 bg-danger/10 px-4 py-3 text-sm text-danger`,children:z},void 0,!1,{fileName:M,lineNumber:309,columnNumber:19},this),(0,S.jsxDEV)(`div`,{className:`flex flex-col gap-2`,children:[(0,S.jsxDEV)(d,{className:`flex items-center gap-4 px-4 py-3`,children:[(0,S.jsxDEV)(`div`,{className:`min-w-0 flex-1`,children:[(0,S.jsxDEV)(`div`,{className:`flex items-center gap-2`,children:[(0,S.jsxDEV)(`span`,{className:`font-semibold text-text`,children:e(`core.settings.label`)},void 0,!1,{fileName:M,lineNumber:319,columnNumber:25},this),Q&&(0,S.jsxDEV)(D,{variant:`secondary`,className:`text-[10px] font-medium`,children:[`v`,Q.installedVersion]},void 0,!0,{fileName:M,lineNumber:321,columnNumber:27},this),re&&(0,S.jsxDEV)(m,{variant:`ghost`,size:`sm`,type:`button`,disabled:C!==null,onClick:ie,title:e(`settings.systemUpdateTitle`),className:`shrink-0 border border-accent/40 text-accent hover:bg-accent/10 hover:text-accent`,children:e(`plugins.updateButton`)},void 0,!1,{fileName:M,lineNumber:326,columnNumber:27},this)]},void 0,!0,{fileName:M,lineNumber:318,columnNumber:23},this),(0,S.jsxDEV)(`div`,{className:`text-xs text-muted mt-0.5 truncate`,children:e(`settings.systemDescription`)},void 0,!1,{fileName:M,lineNumber:339,columnNumber:23},this)]},void 0,!0,{fileName:M,lineNumber:317,columnNumber:21},this),(0,S.jsxDEV)(m,{variant:`ghost`,size:`sm`,type:`button`,className:`shrink-0 border border-border`,asChild:!0,children:(0,S.jsxDEV)(r,{to:`/settings/core`,title:e(`core.settings.label`),"aria-label":e(`core.settings.label`),children:(0,S.jsxDEV)(c,{name:`lucide:settings`,size:16},void 0,!1,{fileName:M,lineNumber:343,columnNumber:25},this)},void 0,!1,{fileName:M,lineNumber:342,columnNumber:23},this)},void 0,!1,{fileName:M,lineNumber:341,columnNumber:21},this)]},void 0,!0,{fileName:M,lineNumber:316,columnNumber:19},this),a.filter(e=>e.id!==`core`).map(t=>{let n=W(t.id),i=t.enabled?a.filter(e=>e.enabled&&e.id!==t.id&&e.dependsOn.includes(t.id)):[],o=i.length>0,s=o?e(`plugins.blockedByDependents`,{list:i.map(e=>U(e.id)).join(`, `)}):t.enabled?e(`plugins.switchDisable`):e(`plugins.switchEnable`),l=[t.dependsOn.length>0&&`${e(`plugins.metaDepends`)} ${t.dependsOn.map(U).join(`, `)}`,t.libraries.length>0&&`${e(`plugins.metaLibraries`)} ${t.libraries.map(G).join(`, `)}`,t.extends.length>0&&`${e(`plugins.metaExtends`)} ${t.extends.map(e=>K(t.id,e)).join(`, `)}`].filter(Boolean).join(` · `)||`—`;return(0,S.jsxDEV)(d,{className:`flex items-center gap-4 px-4 py-3`,children:[(0,S.jsxDEV)(`div`,{className:`min-w-0 flex-1`,children:[(0,S.jsxDEV)(`div`,{className:`flex items-center gap-2`,children:[(0,S.jsxDEV)(`span`,{className:`font-semibold text-text`,children:U(t.id)},void 0,!1,{fileName:M,lineNumber:378,columnNumber:31},this),(0,S.jsxDEV)(F,{plugin:t,busy:k(t.id),onUpdate:()=>te(t)},void 0,!1,{fileName:M,lineNumber:379,columnNumber:31},this)]},void 0,!0,{fileName:M,lineNumber:377,columnNumber:29},this),n&&(0,S.jsxDEV)(`div`,{className:`text-xs text-muted mt-0.5 truncate`,children:n},void 0,!1,{fileName:M,lineNumber:381,columnNumber:45},this),(0,S.jsxDEV)(`div`,{className:`text-xs text-muted mt-0.5 truncate`,children:l},void 0,!1,{fileName:M,lineNumber:382,columnNumber:29},this)]},void 0,!0,{fileName:M,lineNumber:376,columnNumber:27},this),t.hasSettings&&(0,S.jsxDEV)(m,{variant:`ghost`,size:`sm`,type:`button`,className:`shrink-0 border border-border`,asChild:!0,children:(0,S.jsxDEV)(r,{to:`/settings/${t.id}`,title:e(`plugins.settingsTitle`,{defaultValue:`Settings`}),"aria-label":e(`plugins.settingsTitle`,{defaultValue:`Settings`}),children:(0,S.jsxDEV)(c,{name:`lucide:settings`,size:16},void 0,!1,{fileName:M,lineNumber:397,columnNumber:33},this)},void 0,!1,{fileName:M,lineNumber:392,columnNumber:31},this)},void 0,!1,{fileName:M,lineNumber:385,columnNumber:29},this),(0,S.jsxDEV)(m,{variant:`ghost`,size:`sm`,type:`button`,disabled:k(t.id),onClick:()=>X(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:M,lineNumber:401,columnNumber:27},this),(0,S.jsxDEV)(`span`,{title:s,className:`shrink-0`,children:(0,S.jsxDEV)(w,{checked:t.enabled,disabled:k(t.id)||o,onCheckedChange:()=>Z(t),title:s},void 0,!1,{fileName:M,lineNumber:415,columnNumber:29},this)},void 0,!1,{fileName:M,lineNumber:414,columnNumber:27},this)]},t.id,!0,{fileName:M,lineNumber:375,columnNumber:25},this)})]},void 0,!0,{fileName:M,lineNumber:314,columnNumber:17},this)]},void 0,!0,{fileName:M,lineNumber:300,columnNumber:15},this)]},void 0,!0,{fileName:M,lineNumber:267,columnNumber:11},this)]},void 0,!0,{fileName:M,lineNumber:249,columnNumber:9},this)]},void 0,!0,{fileName:M,lineNumber:220,columnNumber:5},this)}function F({plugin:e,busy:t,onUpdate:r}){let{t:i}=n(),a=!!(e.latestVersion&&j(e.latestVersion,e.installedVersion));return(0,S.jsxDEV)(S.Fragment,{children:[(0,S.jsxDEV)(D,{variant:`secondary`,className:`text-[10px] font-medium`,children:[`v`,e.installedVersion]},void 0,!0,{fileName:M,lineNumber:448,columnNumber:7},this),a&&(0,S.jsxDEV)(m,{variant:`ghost`,size:`sm`,type:`button`,disabled:t,onClick:r,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:M,lineNumber:452,columnNumber:9},this)]},void 0,!0,{fileName:M,lineNumber:447,columnNumber:5},this)}export{P as SettingsPage};
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-QTnfLwEv.js";import{a as t,t as n}from"./i18n-vendor-T6EnJ_TL.js";import{a as r,c as i,t as a}from"./react-vendor-BskHO5hY.js";import{n as o,r as s}from"./x-BFRg18Fi.js";import{a as c,c as l,i as u,l as d,o as f,r as p,s as m}from"./ui-vendor-EU9CHLyR.js";import{c as h}from"./Icon-CdBq17IP.js";import{i as ee,t as g}from"./button-D-Q6I5Ob.js";import{a as te,r as _}from"./api-8XMJe9yT.js";import{a as v,i as ne,n as y,r as b,t as x}from"./dialog-DqWXrq6M.js";var S=o(`book-open`,[[`path`,{d:`M12 7v14`,key:`1akyts`}],[`path`,{d:`M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z`,key:`ruj8y`}]]),C=o(`moon`,[[`path`,{d:`M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401`,key:`kfwtm`}]]),w=o(`sun`,[[`circle`,{cx:`12`,cy:`12`,r:`4`,key:`4exip2`}],[`path`,{d:`M12 2v2`,key:`tus03m`}],[`path`,{d:`M12 20v2`,key:`1lh1kg`}],[`path`,{d:`m4.93 4.93 1.41 1.41`,key:`149t6j`}],[`path`,{d:`m17.66 17.66 1.41 1.41`,key:`ptbguv`}],[`path`,{d:`M2 12h2`,key:`1t8f8n`}],[`path`,{d:`M20 12h2`,key:`1q8mjw`}],[`path`,{d:`m6.34 17.66-1.41 1.41`,key:`1m8zz5`}],[`path`,{d:`m19.07 4.93-1.41 1.41`,key:`1shlcs`}]]),T=e(t(),1),E=a(),D=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web/components/ui/confirm.tsx`,O=null;function k(e){let t=typeof e==`string`?{title:e}:e;return O?new Promise(e=>O({...t,resolve:e})):Promise.resolve(!1)}function re(){let{t:e}=n(),t=T.useRef(null),[r,i]=T.useState(null);T.useEffect(()=>(O=e=>{t.current?.resolve(!1),t.current=e,i(e)},()=>{O=null}),[]);function a(e){let n=t.current;t.current=null,i(null),n?.resolve(e)}return(0,E.jsxDEV)(x,{open:r!==null,onOpenChange:e=>{e||a(!1)},children:r&&(0,E.jsxDEV)(y,{className:`md:max-w-md`,hideClose:!0,children:[(0,E.jsxDEV)(ne,{children:[(0,E.jsxDEV)(v,{children:r.title},void 0,!1,{fileName:D,lineNumber:69,columnNumber:13},this),r.description&&(0,E.jsxDEV)(b,{className:`whitespace-pre-line`,children:r.description},void 0,!1,{fileName:D,lineNumber:71,columnNumber:15},this)]},void 0,!0,{fileName:D,lineNumber:68,columnNumber:11},this),(0,E.jsxDEV)(`div`,{className:`flex justify-end gap-2 px-5 pb-5 pt-2`,children:[(0,E.jsxDEV)(g,{variant:`outline`,onClick:()=>a(!1),children:r.cancelLabel??e(`actions.cancel`)},void 0,!1,{fileName:D,lineNumber:75,columnNumber:13},this),(0,E.jsxDEV)(g,{autoFocus:!0,variant:r.variant??`default`,onClick:()=>a(!0),children:r.confirmLabel??e(`actions.confirm`)},void 0,!1,{fileName:D,lineNumber:78,columnNumber:13},this)]},void 0,!0,{fileName:D,lineNumber:74,columnNumber:11},this)]},void 0,!0,{fileName:D,lineNumber:67,columnNumber:9},this)},void 0,!1,{fileName:D,lineNumber:60,columnNumber:5},this)}var A=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web/components/ui/card.tsx`,j=T.forwardRef(({className:e,...t},n)=>(0,E.jsxDEV)(`div`,{ref:n,className:s(`rounded-xl border border-border bg-card text-card-foreground`,e),...t},void 0,!1,{fileName:A,lineNumber:5,columnNumber:3},void 0));j.displayName=`Card`;var M=T.forwardRef(({className:e,...t},n)=>(0,E.jsxDEV)(`div`,{ref:n,className:s(`flex flex-col gap-1.5 p-5`,e),...t},void 0,!1,{fileName:A,lineNumber:10,columnNumber:37},void 0));M.displayName=`CardHeader`;var N=T.forwardRef(({className:e,...t},n)=>(0,E.jsxDEV)(`div`,{ref:n,className:s(`font-semibold leading-none text-text`,e),...t},void 0,!1,{fileName:A,lineNumber:16,columnNumber:5},void 0));N.displayName=`CardTitle`;var P=T.forwardRef(({className:e,...t},n)=>(0,E.jsxDEV)(`div`,{ref:n,className:s(`text-sm text-muted-foreground`,e),...t},void 0,!1,{fileName:A,lineNumber:23,columnNumber:5},void 0));P.displayName=`CardDescription`;var F=T.forwardRef(({className:e,...t},n)=>(0,E.jsxDEV)(`div`,{ref:n,className:s(`p-5 pt-0`,e),...t},void 0,!1,{fileName:A,lineNumber:29,columnNumber:37},void 0));F.displayName=`CardContent`;var I=T.forwardRef(({className:e,...t},n)=>(0,E.jsxDEV)(`div`,{ref:n,className:s(`flex items-center p-5 pt-0`,e),...t},void 0,!1,{fileName:A,lineNumber:35,columnNumber:5},void 0));I.displayName=`CardFooter`;var L=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web/auth-context.tsx`,R=(0,T.createContext)(null);function z(){let e=(0,T.useContext)(R);if(!e)throw Error(`useAuth() called outside <AuthGate>`);return e}function B({children:e}){let[t,n]=(0,T.useState)({kind:`loading`});return(0,T.useEffect)(()=>{if(t.kind===`ready`)return;let e=!1;return(async()=>{try{let t=await te();if(e)return;if(t.needsSetup)return n({kind:`needsSetup`});let r=await _();if(e)return;n(r?{kind:`ready`,user:r}:{kind:`needsLogin`})}catch{e||n({kind:`error`})}})(),()=>{e=!0}},[i().pathname,t.kind]),(0,T.useEffect)(()=>{if(t.kind!==`ready`)return;let e=()=>{document.visibilityState===`visible`&&_().then(e=>{e||n({kind:`needsLogin`})}).catch(()=>{})};return document.addEventListener(`visibilitychange`,e),()=>document.removeEventListener(`visibilitychange`,e)},[t.kind]),t.kind===`loading`?null:t.kind===`needsSetup`?(0,E.jsxDEV)(r,{to:`/setup`,replace:!0},void 0,!1,{fileName:L,lineNumber:61,columnNumber:44},this):t.kind===`needsLogin`?(0,E.jsxDEV)(r,{to:`/login`,replace:!0},void 0,!1,{fileName:L,lineNumber:62,columnNumber:44},this):t.kind===`error`?(0,E.jsxDEV)(`div`,{style:{display:`flex`,minHeight:`100dvh`,alignItems:`center`,justifyContent:`center`,flexDirection:`column`,gap:`1rem`},children:[(0,E.jsxDEV)(`p`,{children:`Could not check your session.`},void 0,!1,{fileName:L,lineNumber:66,columnNumber:9},this),(0,E.jsxDEV)(`button`,{onClick:()=>window.location.reload(),children:`Reload`},void 0,!1,{fileName:L,lineNumber:67,columnNumber:9},this)]},void 0,!0,{fileName:L,lineNumber:65,columnNumber:7},this):(0,E.jsxDEV)(R.Provider,{value:t.user,children:e},void 0,!1,{fileName:L,lineNumber:71,columnNumber:10},this)}var V=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web/components/ui/dropdown-menu.tsx`,H=m,U=d,W=T.forwardRef(({className:e,sideOffset:t=4,...n},r)=>(0,E.jsxDEV)(f,{children:(0,E.jsxDEV)(p,{ref:r,sideOffset:t,className:s(`z-50 min-w-40 overflow-hidden rounded-xl border border-border bg-popover p-1 text-popover-foreground shadow-xl`,`data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95`,e),...n},void 0,!1,{fileName:V,lineNumber:15,columnNumber:5},void 0)},void 0,!1,{fileName:V,lineNumber:14,columnNumber:3},void 0));W.displayName=p.displayName;var G=T.forwardRef(({className:e,inset:t,...n},r)=>(0,E.jsxDEV)(u,{ref:r,className:s(`relative flex cursor-pointer select-none items-center gap-2 rounded-lg px-3 py-2 text-sm outline-none transition-colors`,`focus:bg-elevated focus:text-text data-[disabled]:pointer-events-none data-[disabled]:opacity-50`,t&&`pl-8`,e),...n},void 0,!1,{fileName:V,lineNumber:33,columnNumber:3},void 0));G.displayName=u.displayName;var K=T.forwardRef(({className:e,...t},n)=>(0,E.jsxDEV)(c,{ref:n,className:s(`px-3 py-1.5 text-xs font-semibold text-muted-foreground`,e),...t},void 0,!1,{fileName:V,lineNumber:50,columnNumber:3},void 0));K.displayName=c.displayName;var q=T.forwardRef(({className:e,...t},n)=>(0,E.jsxDEV)(l,{ref:n,className:s(`-mx-1 my-1 h-px bg-border`,e),...t},void 0,!1,{fileName:V,lineNumber:62,columnNumber:3},void 0));q.displayName=l.displayName;var J=({active:e})=>e?(0,E.jsxDEV)(ee,{size:14,className:`ml-auto text-accent`},void 0,!1,{fileName:V,lineNumber:68,columnNumber:12},void 0):null,Y=`coffer-theme`;function X(e){return e===`light`||e===`dark`||e===`eink`?e:`auto`}function ie(){try{return X(localStorage.getItem(Y))}catch{return X(null)}}function Z(e){if(e===`auto`){delete document.documentElement.dataset.theme;try{localStorage.removeItem(Y)}catch{}}else{document.documentElement.dataset.theme=e;try{localStorage.setItem(Y,e)}catch{}}}function ae(){let[e,t]=(0,T.useState)(()=>ie());return{choice:e,setChoice:(0,T.useCallback)(e=>{Z(e),t(e)},[])}}var Q=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web/theme/ThemeSwitcher.tsx`,$=[{value:`auto`,Icon:h,labelKey:`theme.auto`},{value:`light`,Icon:w,labelKey:`theme.light`},{value:`dark`,Icon:C,labelKey:`theme.dark`},{value:`eink`,Icon:S,labelKey:`theme.eink`}];function oe({direction:e=`up`,compact:t=!1}){let{t:r}=n(),{choice:i,setChoice:a}=ae(),o=$.find(e=>e.value===i)??$[0],s=o.Icon;return(0,E.jsxDEV)(H,{children:[(0,E.jsxDEV)(U,{"aria-label":r(`theme.label`),className:`flex items-center rounded-xl text-sm text-muted outline-none transition-colors hover:bg-elevated hover:text-text focus-visible:ring-2 focus-visible:ring-ring ${t?`w-full flex-col gap-0.5 py-2`:`w-full gap-2 px-3 py-2`}`,children:[(0,E.jsxDEV)(s,{size:t?18:16},void 0,!1,{fileName:Q,lineNumber:35,columnNumber:9},this),t?(0,E.jsxDEV)(`span`,{className:`text-[10px] font-semibold`,children:r(o.labelKey)},void 0,!1,{fileName:Q,lineNumber:37,columnNumber:11},this):(0,E.jsxDEV)(`span`,{className:`flex-1 text-left`,children:r(o.labelKey)},void 0,!1,{fileName:Q,lineNumber:39,columnNumber:11},this)]},void 0,!0,{fileName:Q,lineNumber:29,columnNumber:7},this),(0,E.jsxDEV)(W,{align:`end`,side:e===`up`?`top`:`bottom`,children:$.map(e=>{let t=e.Icon;return(0,E.jsxDEV)(G,{onSelect:()=>a(e.value),className:e.value===i?`text-accent`:``,children:[(0,E.jsxDEV)(t,{size:15},void 0,!1,{fileName:Q,lineNumber:51,columnNumber:15},this),(0,E.jsxDEV)(`span`,{className:`flex-1 text-left`,children:r(e.labelKey)},void 0,!1,{fileName:Q,lineNumber:52,columnNumber:15},this),(0,E.jsxDEV)(J,{active:e.value===i},void 0,!1,{fileName:Q,lineNumber:53,columnNumber:15},this)]},e.value,!0,{fileName:Q,lineNumber:46,columnNumber:13},this)})},void 0,!1,{fileName:Q,lineNumber:42,columnNumber:7},this)]},void 0,!0,{fileName:Q,lineNumber:28,columnNumber:5},this)}export{G as a,z as c,k as d,W as i,j as l,H as n,U as o,J as r,B as s,oe as t,re as u};