feat: Phase 1 — extract the client (web SPA + desktop) to dtoro/oikos-web
Some checks failed
ci / build-test (push) Has been cancelled
ci / docker-build (push) Has been cancelled

Problem: the hexagonal refactor churns the backend tree for nine more
phases; the UI delivery stack (web/ SPA, cmd/desktop Wails wrapper,
compose/web image) must move to its own repo first so doc/layout
rewrites land once on a backend-only tree.

Change:
- New repo git.hubris.network/dtoro/oikos-web (v0.33.0): web/, desktop/
  (updateURL repointed to oikos-web releases), compose/, own CI (web +
  desktop jobs), own deploy script (CI-green gate, TOCTOU guard,
  version-tagged images, prune-to-3), own webhook receiver on :9798 +
  launchd unit, own compose project publishing the same 8091:80.
- Cutover executed on mac-mini in order: oikos stack's web service
  stopped+removed, oikos-web project brought up on 8091; outer Caddy
  untouched (targets the published port) — serving + Authentik flow +
  /wails 404 quirk verified post-cutover.
- Stripped from oikos: web/, cmd/desktop/, compose/web/, desktop CI
  workflow, ci.yml web job, Makefile ui/desktop/desktop-package/install
  targets, the compose web service, oikos-web from deploy.sh's fallback
  prune list; wails + go-keyring dropped from go.mod, vendor synced.
- README / CONTRIBUTING / AGENTS.md / .agents dev+operations docs now
  point at the new repo; mbse + mascot design docs carry a path note.

Risk: production SPA serving depends on the new pipeline now; rollback
is versioned-image re-up of the old web service from a pre-split
checkout (port 8091). Desktop builds installed before the split still
check dtoro/oikos releases — one manual reinstall, noted in the
oikos-web release notes.

Verification: go vet, make test (race), make generate-check, golangci
(no new findings; baseline down 400→365); post-cutover curls —
localhost:8091 200, /wails/runtime.js 404, outer Caddy 302 Authentik.
This commit is contained in:
2026-08-15 22:27:52 +02:00
parent e074f04bdf
commit d4d99a7473
18854 changed files with 2615729 additions and 173735 deletions

BIN
web/dist/android-chrome-192.png vendored Normal file

Binary file not shown.

BIN
web/dist/android-chrome-512.png vendored Normal file

Binary file not shown.

BIN
web/dist/apple-touch-icon.png vendored Normal file

Binary file not shown.

3
web/dist/assets/AppStore-4AihCKA5.js vendored Normal file
View File

@@ -0,0 +1,3 @@
import{a3 as h,U as _,a2 as g,p as de,s as l,c as s,R as f,a as p,b as ie,m as le,f as v,x as pe,cz as U,i as ce,a7 as ve,g as a,t as $,e as m,u as y,a8 as j,C as H,cA as ue,cB as me,z as xe,cC as fe}from"./index-B5w8gw75.js";var he=new Set(["$$slots","$$events","$$legacy"]);function _e(o,n){let d=g(n,he);const i=[["path",{d:"M21.801 10A10 10 0 1 1 17 3.335"}],["path",{d:"m9 11 3 3L22 4"}]];h(o,_({name:"circle-check-big"},()=>d,{get iconNode(){return i}}))}var ge=new Set(["$$slots","$$events","$$legacy"]);function be(o,n){let d=g(n,ge);const i=[["path",{d:"M12 15V3"}],["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"}],["path",{d:"m7 10 5 5 5-5"}]];h(o,_({name:"download"},()=>d,{get iconNode(){return i}}))}var $e=new Set(["$$slots","$$events","$$legacy"]);function ye(o,n){let d=g(n,$e);const i=[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z"}]];h(o,_({name:"shield"},()=>d,{get iconNode(){return i}}))}var ke=new Set(["$$slots","$$events","$$legacy"]);function we(o,n){let d=g(n,ke);const i=[["path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6"}],["path",{d:"M3 6h18"}],["path",{d:"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"}]];h(o,_({name:"trash"},()=>d,{get iconNode(){return i}}))}var Ae=v('<p class="text-sm text-muted-foreground">No apps available yet.</p>'),ze=v('<span class="shrink-0 text-[10px] text-muted-foreground"> </span>'),Ne=v('<button type="button" class="flex items-center gap-1.5 rounded-md border px-2.5 py-1.5 text-xs text-muted-foreground hover:bg-destructive/10 hover:text-destructive hover:border-destructive/50"><!> Uninstall</button>'),Se=v('<button type="button" class="flex items-center gap-1.5 rounded-md bg-primary px-2.5 py-1.5 text-xs font-medium text-primary-foreground hover:bg-primary/90"><!> Install</button>'),Ie=v('<li class="flex items-start gap-3 rounded-lg border p-3"><div class="flex size-10 shrink-0 items-center justify-center rounded-md border bg-muted/40"><!></div> <div class="min-w-0 flex-1"><div class="flex items-center gap-2"><h2 class="truncate text-sm font-medium"> </h2> <span class="shrink-0 text-[10px] font-mono text-muted-foreground"> </span> <!></div> <p class="mt-0.5 line-clamp-2 text-xs text-muted-foreground"> </p> <div class="mt-1.5 flex items-center gap-1 text-[10px] text-muted-foreground"><!> <span><!></span></div></div> <div class="shrink-0"><!></div></li>'),Me=v('<ul class="flex flex-col gap-3"></ul>'),Ce=v(`<div class="flex h-full min-h-0 flex-col"><header class="shrink-0 border-b px-4 py-3"><h1 class="text-base font-semibold">App Store</h1> <p class="mt-0.5 text-xs text-muted-foreground">Installable apps. Local bundles for now — a remote catalog + sandboxing is Phase 4.</p></header> <div class="min-h-0 flex-1 overflow-auto p-4"><!> <div class="mt-6 rounded-md border border-dashed p-3 text-xs text-muted-foreground"><p class="flex items-center gap-1.5"><!> Installed apps appear on the desktop immediately. Uninstalling closes any open window for that
app.</p></div></div></div>`);function Le(o,n){de(n,!0);const d=()=>xe(fe,"$installedAppIds",i),[i,O]=le(),T=y(()=>new Set(d()));var k=Ce(),q=l(s(k),2),w=s(q);{var B=u=>{var x=Ae();p(u,x)},D=u=>{var x=Me();ce(x,21,()=>U,b=>b.manifest.id,(b,A)=>{const r=y(()=>a(A).manifest),E=y(()=>a(T).has(a(r).id));var z=Ie(),N=s(z),F=s(N);ve(F,()=>a(A).icon,(e,t)=>{t(e,{class:"size-5"})});var S=l(N,2),I=s(S),M=s(I),J=s(M),C=l(M,2),K=s(C),Q=l(C,2);{var W=e=>{var t=ze(),c=s(t);$(()=>m(c,`by ${a(r).author??""}`)),p(e,t)};f(Q,e=>{a(r).author&&e(W)})}var V=l(I,2),X=s(V),Y=l(V,2),L=s(Y);ye(L,{class:"size-3"});var Z=l(L,2),ee=s(Z);{var te=e=>{var t=j();$(c=>m(t,c),[()=>a(r).permissions.join(", ")]),p(e,t)},se=e=>{var t=j(`no permissions
requested`);p(e,t)};f(ee,e=>{a(r).permissions.length?e(te):e(se,-1)})}var ae=l(S,2),re=s(ae);{var oe=e=>{var t=Ne(),c=s(t);we(c,{class:"size-3.5"}),H("click",t,()=>ue(a(r).id)),p(e,t)},ne=e=>{var t=Se(),c=s(t);be(c,{class:"size-3.5"}),H("click",t,()=>me(a(r).id)),p(e,t)};f(re,e=>{a(E)?e(oe):e(ne,-1)})}$(()=>{m(J,a(r).title),m(K,`v${a(r).version??""}`),m(X,a(r).description)}),p(b,z)}),p(u,x)};f(w,u=>{U.length===0?u(B):u(D,-1)})}var G=l(w,2),P=s(G),R=s(P);_e(R,{class:"size-3.5"}),p(o,k),ie(),O()}pe(["click"]);export{Le as default};

2
web/dist/assets/DataTable-B-TAV_HV.js vendored Normal file

File diff suppressed because one or more lines are too long

6
web/dist/assets/Knowledge-D0UZIpsu.js vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

2
web/dist/assets/Learning-C0EP82zq.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
.bubble-marquee.svelte-zc9y12{animation:svelte-zc9y12-bubble-marquee var(--marquee-duration, 4s) ease-in-out infinite}@keyframes svelte-zc9y12-bubble-marquee{0%,12%{transform:translate(0)}50%,62%{transform:translate(var(--marquee-distance, 0px))}to{transform:translate(0)}}.bubble-pop.svelte-zc9y12{animation:svelte-zc9y12-bubble-pop .34s cubic-bezier(.34,1.56,.64,1) both;transform-origin:bottom center}@keyframes svelte-zc9y12-bubble-pop{0%{transform:scale(.3);opacity:0}55%{transform:scale(1.1);opacity:1}75%{transform:scale(.97)}to{transform:scale(1)}}.bubble-shake.svelte-zc9y12{animation:svelte-zc9y12-bubble-pop .34s cubic-bezier(.34,1.56,.64,1) both,svelte-zc9y12-bubble-shake .38s .36s ease-in-out}@keyframes svelte-zc9y12-bubble-shake{0%,to{transform:translate(0)}20%{transform:translate(-3px)}40%{transform:translate(3px)}60%{transform:translate(-2px)}80%{transform:translate(2px)}}.bubble-cursor.svelte-zc9y12{display:inline-block;width:2px;height:1em;margin-left:1px;vertical-align:text-bottom;background:currentColor;animation:svelte-zc9y12-bubble-caret .75s steps(1) infinite}@keyframes svelte-zc9y12-bubble-caret{50%{opacity:0}}

File diff suppressed because one or more lines are too long

2
web/dist/assets/Notes-zxrrML9t.js vendored Normal file
View File

@@ -0,0 +1,2 @@
import{W as T,D as s,af as A,R as I,t as D,C as N,cy as j,g as o,a as f,b as z,p as L,y as m,s as r,f as R,c as a,x as W,e as q,a8 as x}from"./index-B5w8gw75.js";var B=R(`<div class="flex h-full min-h-0 flex-col gap-2 p-4"><div class="flex shrink-0 items-center justify-between"><h2 class="text-sm font-medium">Notes</h2> <span class="text-xs text-muted-foreground"><!></span></div> <textarea placeholder="Type here. Auto-saves 2s after you stop, or Cmd/Ctrl+S." class="min-h-0 flex-1 resize-none rounded-md border bg-background p-3 font-mono text-sm leading-relaxed focus-visible:outline-2 focus-visible:outline-ring"></textarea> <p class="shrink-0 text-xs text-muted-foreground">A demo installable app — uninstall it from the App Store to remove its icon and window. Its
notes persist in localStorage under <code class="font-mono"> </code>.</p></div>`);function F(g,u){L(u,!0);let n=T(u,"storageKey",3,"oikos-app-notes"),t=m(""),l=m(!1);function y(){return typeof localStorage>"u"?"":localStorage.getItem(n())??""}function c(){typeof localStorage>"u"||(localStorage.setItem(n(),o(t)),s(l,!0),setTimeout(()=>s(l,!1),1500))}function h(e){(e.metaKey||e.ctrlKey)&&e.key.toLowerCase()==="s"&&(e.preventDefault(),c())}s(t,y(),!0),A(()=>{if(!o(t))return;const e=setTimeout(()=>c(),2e3);return()=>clearTimeout(e)});var p=B(),v=a(p),b=r(a(v),2),_=a(b);{var k=e=>{var d=x("saved");f(e,d)},w=e=>{var d=x("unsaved");f(e,d)};I(_,e=>{o(l)?e(k):e(w,-1)})}var i=r(v,2),S=r(i,2),K=r(a(S)),C=a(K);D(()=>q(C,n())),N("keydown",i,h),j(i,()=>o(t),e=>s(t,e)),f(g,p),z()}W(["keydown"]);export{F as default};

1
web/dist/assets/Ops-DAOK5ZEQ.js vendored Normal file

File diff suppressed because one or more lines are too long

1
web/dist/assets/Overview-C_9Ji_NC.js vendored Normal file
View File

@@ -0,0 +1 @@
import{p as z,s as m,t as E,a as v,b as N,c as l,f as b,d as C,g as t,e as x,u as f,h as W,o as j,i as q,B as K,j as O,k as V,l as $,m as G,n as H,q as h,r as T,v as J,w as Q,T as U,F as S,x as X,y as Y,z as Z,A as ee,C as te,D as se,E as ae}from"./index-B5w8gw75.js";import{D as re}from"./DataTable-B-TAV_HV.js";import{P as oe}from"./plus-B9zN-7mU.js";import"./clone-bSRBQ4eT.js";import"./StatusBadgeRenderer-BEdJTFrn.js";import"./select-trigger-BFw7c3mx.js";import"./hidden-input-CbX2doyK.js";import"./on-mount-effect.svelte-Lpx0iWhb.js";var ne=b('<span class="flex items-center gap-1.5 text-xs font-medium text-muted-foreground"><span></span> </span>');function le(g,d){z(d,!0);const r=f(()=>W(d.row));var u=ne(),c=l(u),o=m(c);E(()=>{C(c,1,`size-2 rounded-full ${t(r).dot??""} ${t(r).pulse?"animate-pulse":""}`),x(o,` ${t(r).label??""}`)}),v(g,u),N()}var ie=b('<button type="button"> <span class="ml-1 opacity-60"> </span></button>'),de=b("<!> New task",1),ue=b('<div class="relative flex h-full flex-col gap-3 overflow-hidden p-2"><div class="relative z-10 flex flex-wrap items-center gap-1.5"><!> <div class="flex-1"></div> <!></div> <div class="relative z-10 min-h-0 flex-1 overflow-hidden rounded-xl border bg-card/70 backdrop-blur"><!></div></div>');function xe(g,d){z(d,!0);const r=()=>Z(ee,"$sessions",u),[u,c]=G();let o=Y("all");const D=f(()=>{const e={all:r().length,running:0,input:0,done:0,failed:0};for(const s of r())e[h(s)]++;return e}),I=f(()=>t(o)==="all"?r():r().filter(e=>h(e)===t(o)));function L(e){H(e.id,$(e))}j(()=>{T();const e=J();let s=0,a=null;const n=Q.subscribe(i=>{if(i.length===0)return;const p=i[0].id;if(p<=s)return;const F=i.some(w=>w.id>s&&U.has(w.type));s=p,F&&(a&&clearTimeout(a),a=setTimeout(()=>T(),400))});return()=>{n(),e()}});const M=[{key:"_status",header:"Status",render:le,sortable:!0,accessor:e=>h(e),width:"140px"},{key:"_heading",header:"Task",sortable:!0,accessor:$,truncate:!0},{key:"summary",header:"Summary",accessor:e=>e.summary||"—",truncate:!0,headerClass:"hidden md:table-cell",class:"hidden md:table-cell"},{key:"last_active_at",header:"Last active",render:"relative-time",sortable:!0,width:"112px",align:"right"}],P=f(()=>{var e;return t(o)==="all"?"No tasks yet. Start one and Nomos will plan it, execute it, and report the outcome.":`No ${(e=S.find(s=>s.id===t(o)))==null?void 0:e.label.toLowerCase()} tasks.`});var _=ue(),k=l(_),y=l(k);q(y,17,()=>S,ae,(e,s)=>{var a=ie(),n=l(a),i=m(n),p=l(i);E(()=>{C(a,1,`border px-2.5 py-1 text-xs transition-colors ${t(o)===t(s).id?"border-foreground bg-foreground text-background":"border-border text-muted-foreground hover:border-foreground hover:text-foreground"}`),x(n,`${t(s).label??""} `),x(p,t(D)[t(s).id]??0)}),te("click",a,()=>se(o,t(s).id,!0)),v(e,a)});var R=m(y,4);K(R,{size:"sm",class:"gap-1.5",get onclick(){return V},children:(e,s)=>{var a=de(),n=O(a);oe(n,{class:"size-4"}),v(e,a)},$$slots:{default:!0}});var A=m(k,2),B=l(A);re(B,{get columns(){return M},get data(){return t(I)},get emptyMessage(){return t(P)},bordered:!1,onRowClick:L}),v(g,_),N(),c()}X(["click"]);export{xe as default};

1
web/dist/assets/Settings-DIFH4bBX.js vendored Normal file

File diff suppressed because one or more lines are too long

1
web/dist/assets/Signals-C_6d4rqi.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
import{a3 as M,U as N,a2 as z,x as D,W as m,s as A,R as S,t as w,e as x,C as L,a as u,c as p,Q as B,j as H,f as k,aM as P,p as R,aI as Q,ac as j,d as C,b as E,g,u as h,aL as y,ab as T,a8 as U}from"./index-B5w8gw75.js";var V=new Set(["$$slots","$$events","$$legacy"]);function W(s,e){let r=z(e,V);const t=[["path",{d:"M12 5v14"}],["path",{d:"m19 12-7 7-7-7"}]];M(s,N({name:"arrow-down"},()=>r,{get iconNode(){return t}}))}var q=new Set(["$$slots","$$events","$$legacy"]);function F(s,e){let r=z(e,q);const t=[["path",{d:"m21 16-4 4-4-4"}],["path",{d:"M17 20V4"}],["path",{d:"m3 8 4-4 4 4"}],["path",{d:"M7 4v16"}]];M(s,N({name:"arrow-up-down"},()=>r,{get iconNode(){return t}}))}var G=k('<button type="button" class="flex items-center gap-1 hover:text-foreground"> <!></button>');function Y(s,e){let r=m(e,"sorted",3,!1),t=m(e,"direction",3,"asc");var n=G(),d=p(n),o=A(d);{var f=l=>{var a=B(),i=H(a);{var _=c=>{P(c,{class:"size-3"})},b=c=>{W(c,{class:"size-3"})};S(i,c=>{t()==="asc"?c(_):c(b,-1)})}u(l,a)},v=l=>{F(l,{class:"size-3 text-muted-foreground/50"})};S(o,l=>{r()?l(f):l(v,-1)})}w(()=>x(d,`${e.label??""} `)),L("click",n,function(...l){var a;(a=e.onclick)==null||a.apply(this,l)}),u(s,n)}D(["click"]);var J=k("<tr><td> </td></tr>");function Z(s,e){R(e,!0);let r=m(e,"message",3,"No items."),t=m(e,"colspan",3,999);var n=J(),d=p(n),o=p(d);w(f=>{j(d,"colspan",t()),C(d,1,f),x(o,r())},[()=>Q(["py-8 text-center text-muted-foreground",e.class].filter(Boolean).join(" "))]),u(s,n),E()}var K=k('<span class="flex items-center gap-1.5 text-xs"><span></span> <span class="text-muted-foreground"> </span></span>'),O=k('<span class="text-xs text-muted-foreground">—</span>');function $(s,e){R(e,!0);const r={healthy:"bg-success",degraded:"bg-warning",down:"bg-destructive",stale:"bg-warning/50",unknown:"bg-muted-foreground/40"},t=h(()=>e.row.health),n=h(()=>e.row.last_check_at),d=h(()=>e.row.health?e.row.health==="stale"?`stale — last checked ${y(e.row.last_check_at)}`:`${e.row.health} — checked ${y(e.row.last_check_at)}`:"not monitored");var o=B(),f=H(o);{var v=a=>{var i=K(),_=p(i),b=A(_,2),c=p(b);w(I=>{j(i,"title",g(d)),C(_,1,`size-2 shrink-0 rounded-full ${r[e.row.health??""]??""??""}`),x(c,I)},[()=>y(g(n))]),u(a,i)},l=a=>{var i=O();u(a,i)};S(f,a=>{g(t)?a(v):a(l,-1)})}u(s,o),E()}function ee(s,e){let r=m(e,"kind",3,"default");const t=h(()=>String(e.value??"")),n={risk:{destructive:"destructive",config_mutation:"secondary",default:"default"},severity:{critical:"destructive",warning:"secondary",info:"default",default:"default"},execution:{failed:"destructive",denied:"destructive",revoked:"destructive",cancelled:"destructive",completed:"default",running:"secondary",approved:"secondary",default:"outline"},state:{active:"default",healthy:"default",default:"outline"},type:{runbook:"secondary",investigation:"default",default:"outline"},default:{default:"default"}},d=h(()=>{const o=n[r()]??n.default;return o[g(t)]??o.default});T(s,{get variant(){return g(d)},children:(o,f)=>{var v=U();w(()=>x(v,g(t))),u(o,v)},$$slots:{default:!0}})}export{Z as E,$ as H,Y as S,ee as a};

1
web/dist/assets/clone-bSRBQ4eT.js vendored Normal file
View File

@@ -0,0 +1 @@
import{cu as g,cv as m,cw as M}from"./index-B5w8gw75.js";const O=[];function J(t,r=!1,f=!1){return i(t,new Map,"",O,null,f)}function i(t,r,f,o,e=null,c=!1){if(typeof t=="object"&&t!==null){var w=r.get(t);if(w!==void 0)return w;if(t instanceof Map)return new Map(t);if(t instanceof Set)return new Set(t);if(g(t)){var n=Array(t.length);r.set(t,n),e!==null&&r.set(e,n);for(var s=0;s<t.length;s+=1){var b=t[s];s in t&&(n[s]=i(b,r,f,o,null,c))}return n}if(m(t)===M){n={},r.set(t,n),e!==null&&r.set(e,n);for(var S of Object.keys(t))n[S]=i(t[S],r,f,o,null,c);return n}if(t instanceof Date)return structuredClone(t);if(typeof t.toJSON=="function"&&!c)return i(t.toJSON(),r,f,o,t)}if(t instanceof EventTarget)return t;try{return structuredClone(t)}catch{return t}}export{J as s};

View File

@@ -0,0 +1 @@
import{cx as m,p as g,W as _,Q as b,j as x,R as y,g as r,a as o,b as w,u as S,a1 as P,$ as n,cy as k,a2 as H,f as W}from"./index-B5w8gw75.js";const v={position:"absolute",width:"1px",height:"1px",padding:"0",margin:"-1px",overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",borderWidth:"0",transform:"translateX(-100%)"};m(v);var j=new Set(["$$slots","$$events","$$legacy","value"]),p=W("<input/>");function Q(l,a){g(a,!0);let i=_(a,"value",15),u=H(a,j);const s=S(()=>P(u,{"aria-hidden":"true",tabindex:-1,style:{...v,position:"absolute",top:"0",left:"0"}}));var d=b(),c=x(d);{var f=e=>{var t=p();n(t,()=>({...r(s),value:i()}),void 0,void 0,void 0,void 0,!0),o(e,t)},h=e=>{var t=p();n(t,()=>({...r(s)}),void 0,void 0,void 0,void 0,!0),k(t,i),o(e,t)};y(c,e=>{r(s).type==="checkbox"?e(f):e(h,-1)})}o(l,d),w()}export{Q as H};

104
web/dist/assets/index-B5w8gw75.js vendored Normal file

File diff suppressed because one or more lines are too long

1
web/dist/assets/index-BrgfNNHo.css vendored Normal file

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
import{af as t,ag as a}from"./index-B5w8gw75.js";function c(n){t(()=>a(()=>n()))}export{c as o};

1
web/dist/assets/plus-B9zN-7mU.js vendored Normal file
View File

@@ -0,0 +1 @@
import{a3 as a,U as p,a2 as r}from"./index-B5w8gw75.js";var n=new Set(["$$slots","$$events","$$legacy"]);function d(e,s){let o=r(s,n);const t=[["path",{d:"M5 12h14"}],["path",{d:"M12 5v14"}]];a(e,p({name:"plus"},()=>o,{get iconNode(){return t}}))}export{d as P};

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
[data-select-viewport],[data-combobox-viewport]{scrollbar-width:none!important;-ms-overflow-style:none!important;-webkit-overflow-scrolling:touch!important}[data-combobox-viewport]::-webkit-scrollbar{display:none!important}[data-select-viewport]::-webkit-scrollbar{display:none!important}

1
web/dist/assets/sparkles-DGJxKTzu.js vendored Normal file
View File

@@ -0,0 +1 @@
import{a3 as t,U as l,a2 as o}from"./index-B5w8gw75.js";var p=new Set(["$$slots","$$events","$$legacy"]);function n(a,e){let s=o(e,p);const r=[["path",{d:"M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z"}],["path",{d:"M20 2v4"}],["path",{d:"M22 4h-4"}],["circle",{cx:"4",cy:"20",r:"2"}]];t(a,l({name:"sparkles"},()=>s,{get iconNode(){return r}}))}export{n as S};

File diff suppressed because one or more lines are too long

BIN
web/dist/favicon.png vendored Normal file

Binary file not shown.

4
web/dist/favicon.svg vendored Normal file
View File

@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="91" height="100" version="1.1" xmlns="http://www.w3.org/2000/svg">
<path fill="#ffffff" d="m45.601 1q20.993 0 33.71 15.946 10.799 13.625 10.799 31.287 0 12.414-5.9548 25.131-5.9548 12.717-16.451 19.176-10.395 6.4592-23.213 6.4592-20.892 0-33.205-16.653-10.395-14.029-10.395-31.489 0-12.717 6.2577-25.232 6.3584-12.616 16.653-18.57 10.295-6.0556 21.801-6.0556zm-3.128 6.5605q-5.3492 0-10.799 3.2296-5.3492 3.1287-8.68 11.102-3.3305 7.9735-3.3305 20.488 0 20.185 7.973 34.82 8.0743 14.634 21.195 14.634 9.7896 0 16.149-8.0743 6.3584-8.0743 6.3584-27.755 0-24.627-10.597-38.756-7.1657-9.6888-18.268-9.6888z"/>
</svg>

After

Width:  |  Height:  |  Size: 666 B

BIN
web/dist/fonts/JetBrainsMono-Bold.woff2 vendored Normal file

Binary file not shown.

Binary file not shown.

BIN
web/dist/fonts/VT323-Regular.woff2 vendored Normal file

Binary file not shown.

32
web/dist/index.html vendored Normal file
View File

@@ -0,0 +1,32 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Oikos</title>
<link rel="icon" type="image/svg+xml" href="favicon.svg" />
<link rel="apple-touch-icon" href="apple-touch-icon.png" />
<link rel="icon" type="image/png" sizes="192x192" href="android-chrome-192.png" />
<link rel="icon" type="image/png" sizes="512x512" href="android-chrome-512.png" />
<script type="module" crossorigin src="/assets/index-B5w8gw75.js"></script>
<link rel="stylesheet" crossorigin href="/assets/index-BrgfNNHo.css">
</head>
<body>
<div id="app"></div>
<script>
;(function () {
try {
var t = localStorage.getItem('oikos-theme')
if (!t) {
t = window.matchMedia('(prefers-color-scheme:light)').matches ? 'light' : 'dark'
}
if (t === 'dark') document.documentElement.classList.add('dark')
} catch (e) {}
})()
</script>
<script src="/wails/runtime.js"></script>
<script>
window.__OIKOS_CONFIG__ = {}
</script>
</body>
</html>

20
web/dist/mascot/LICENSE-eggs.txt vendored Normal file
View File

@@ -0,0 +1,20 @@
Eggs
By Onocentaur
https://onocentaur.itch.io
March 2021
Description
350+ pixel art eggs for your next virtual pet/match 3/farming/holiday themed game.
This pack contains:
Over 350 16x16px eggs.
32 egg designs, 11 color variants.
2 different cracking animations for each egg.
Spritesheets for each color variant and cracking pattern.
Transparent PNGs.
Template files so you can color your own eggs.
Bonus: Letter & Number eggs.
Bonus: Incubator assets (nesting box and toggle-able lamp).
Bonus: 12 Animal assets.
Free to use for personal & professional projects. Attribution appreciated. If you use these assets in your project, let me know! I look forward to seeing what you make.

5
web/dist/mascot/LICENSE.txt vendored Normal file
View File

@@ -0,0 +1,5 @@
CC0 1.0 Universal (CC0 1.0) Public Domain Dedication
The person who associated a work with this deed has dedicated the work to the public domain by waiving all of his or her rights to the work worldwide under copyright law, including all related and neighboring rights, to the extent allowed by law.
You can copy, modify, distribute and perform the work, even for commercial purposes, all without asking permission.

BIN
web/dist/mascot/blink.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 343 B

BIN
web/dist/mascot/egg-crack.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 167 B

BIN
web/dist/mascot/egg-idle.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 B

BIN
web/dist/mascot/egg-shell.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 112 B

BIN
web/dist/mascot/hurt.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 416 B

BIN
web/dist/mascot/idle.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 368 B

BIN
web/dist/mascot/jump.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 335 B

BIN
web/dist/mascot/peck.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 382 B

BIN
web/dist/mascot/peep.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 295 B

BIN
web/dist/mascot/react-displeased.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 330 B

BIN
web/dist/mascot/react-joy.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 379 B

BIN
web/dist/mascot/react-sigh.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 365 B

BIN
web/dist/mascot/react-surprise.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 361 B

BIN
web/dist/mascot/react-yell.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 346 B

BIN
web/dist/mascot/sleep.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 331 B

BIN
web/dist/mascot/walk.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 375 B

BIN
web/dist/mascot/walk2.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 390 B