scriptorium 0.0.1 → 0.2.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.
Files changed (102) hide show
  1. package/README.md +31 -8
  2. package/bin/scriptorium.js +1 -1
  3. package/build/client/assets/_layout-4p0zIumj.js +1 -0
  4. package/build/client/assets/_layout-CG4jvKXd.js +1 -0
  5. package/build/client/assets/_layout-DUvno75Q.js +1 -0
  6. package/build/client/assets/_layout-tj841ZFj.js +3 -0
  7. package/build/client/assets/auth-shell-CM4lzbUg.js +1 -0
  8. package/build/client/assets/breadcrumbs-CLMk50vh.js +1 -0
  9. package/build/client/assets/{chunk-EPOLDU6W-B-j6nV8T.js → chunk-EPOLDU6W-BT1NqV1s.js} +11 -11
  10. package/build/client/assets/confirm-passkey-sqNHrDN7.js +1 -0
  11. package/build/client/assets/document-title-CaFCBnQ-.js +1 -0
  12. package/build/client/assets/entry.client-B2qwDNf_.js +13 -0
  13. package/build/client/assets/events-BGAz2o24.js +39 -0
  14. package/build/client/assets/files-247Zppti.js +1 -0
  15. package/build/client/assets/files-COflIyot.js +1 -0
  16. package/build/client/assets/files-browser-DKxCza7c.js +1 -0
  17. package/build/client/assets/files.browse-BBMm6lgA.js +1 -0
  18. package/build/client/assets/files.browse-Dq0nnEAB.js +1 -0
  19. package/build/client/assets/index-BumTGMZF.js +1 -0
  20. package/build/client/assets/index-CLO24mr0.js +1 -0
  21. package/build/client/assets/index-D-coH8u1.js +34 -0
  22. package/build/client/assets/index-DxuBmPz-.js +1 -0
  23. package/build/client/assets/jsx-runtime-u17CrQMm.js +1 -0
  24. package/build/client/assets/login-SMI1sC8T.js +1 -0
  25. package/build/client/assets/manifest-27a6038b.js +1 -0
  26. package/build/client/assets/passkeys-Cg-Qx1Gj.js +1 -0
  27. package/build/client/assets/project-events-provider-Cz1h_7Z0.js +1 -0
  28. package/build/client/assets/project-route-Cqnw3iG7.js +1 -0
  29. package/build/client/assets/projects-CcOVpbnV.js +1 -0
  30. package/build/client/assets/projects._projectId.proxy._-l0sNRNKZ.js +1 -0
  31. package/build/client/assets/projects.new-BIAajDmU.js +1 -0
  32. package/build/client/assets/register-CwUWzMvC.js +1 -0
  33. package/build/client/assets/review-browser-CkLIZsiU.js +1 -0
  34. package/build/client/assets/review._mode-CjiM88Yw.js +1 -0
  35. package/build/client/assets/review.uncommitted-DnCOhh-l.js +1 -0
  36. package/build/client/assets/root-DtlaHd7Y.js +1 -0
  37. package/build/client/assets/root-h1ZnuAzH.css +1 -0
  38. package/build/client/assets/{scroll-indicator-CFaTM_rb.js → scroll-indicator-DxagqbkL.js} +8 -8
  39. package/build/client/assets/scrollable-layout-CR2OL0dM.js +1 -0
  40. package/build/client/assets/session-route-Cd_9l4G7.js +1 -0
  41. package/build/client/assets/sessions-provider-xySz_P7U.js +1 -0
  42. package/build/client/assets/settings-CYavUXKt.js +1 -0
  43. package/build/client/assets/sidebar-BpDMNa9u.js +1 -0
  44. package/build/client/assets/use-double-check-BJPDnzvf.js +1 -0
  45. package/build/runtime/app/lib/runtime-config/cache.server.js +15 -0
  46. package/build/runtime/app/lib/runtime-config/cli.server.js +79 -0
  47. package/build/runtime/app/lib/runtime-config/docs.server.js +170 -0
  48. package/build/runtime/app/lib/runtime-config/loader.server.js +69 -0
  49. package/build/runtime/app/lib/runtime-config/schema.server.js +128 -0
  50. package/build/runtime/server/index.js +176 -0
  51. package/build/server/index.js +8989 -4661
  52. package/docs/config.md +12 -8
  53. package/drizzle/20260324172031_curved_junta/migration.sql +20 -0
  54. package/drizzle/20260324172031_curved_junta/snapshot.json +684 -0
  55. package/drizzle/20260327233106_model_usage/migration.sql +15 -0
  56. package/drizzle/20260327233106_model_usage/snapshot.json +830 -0
  57. package/drizzle/20260331000000_projects_and_model_usages/migration.sql +41 -0
  58. package/package.json +18 -5
  59. package/build/client/assets/_layout-D-bxuQBW.js +0 -1
  60. package/build/client/assets/_layout-D2eOWFrG.js +0 -1
  61. package/build/client/assets/_layout-D4m0RbUC.js +0 -1
  62. package/build/client/assets/_layout-DggtTDZp.js +0 -1
  63. package/build/client/assets/auth-shell-FEL5QDuP.js +0 -1
  64. package/build/client/assets/confirm-passkey-ntLsS7_k.js +0 -1
  65. package/build/client/assets/entry.client-BkscxSA6.js +0 -5
  66. package/build/client/assets/file-list-DBDZbrBp.js +0 -1
  67. package/build/client/assets/files-Bzkr7-i7.js +0 -1
  68. package/build/client/assets/files-browser-KNurSsen.js +0 -1
  69. package/build/client/assets/files-cnv1kfgp.js +0 -1
  70. package/build/client/assets/files.browse-9p4xl9MV.js +0 -1
  71. package/build/client/assets/git-CjSY0eSC.js +0 -1
  72. package/build/client/assets/git-T0lLjMNd.js +0 -1
  73. package/build/client/assets/git-browser-DwSOY6QN.js +0 -1
  74. package/build/client/assets/iconify-BDcX0yw8.js +0 -1
  75. package/build/client/assets/index-8zQ7Fizv.js +0 -9
  76. package/build/client/assets/index-BUN6tnpl.js +0 -1
  77. package/build/client/assets/index-BlNoCKAt.js +0 -1
  78. package/build/client/assets/index-g2QB9BbT.js +0 -1
  79. package/build/client/assets/instance-events-provider-DTYnvumj.js +0 -39
  80. package/build/client/assets/instance-route-C25LRYYo.js +0 -1
  81. package/build/client/assets/instances-CzjXhR3c.js +0 -1
  82. package/build/client/assets/instances._instanceId.sessions._sessionId.test-COZIMxji.js +0 -208
  83. package/build/client/assets/instances.new-BZi5xwEV.js +0 -1
  84. package/build/client/assets/login-Bwt79t7_.js +0 -1
  85. package/build/client/assets/magic-string.es-DjU5CGuV.js +0 -10
  86. package/build/client/assets/manifest-3c01c628.js +0 -1
  87. package/build/client/assets/message-card-DJ5C3WNp.js +0 -34
  88. package/build/client/assets/passkeys-DpNQs4bn.js +0 -1
  89. package/build/client/assets/register-DXPj5RLZ.js +0 -1
  90. package/build/client/assets/root-DxD-Skic.css +0 -1
  91. package/build/client/assets/root-DxyfhNRI.js +0 -1
  92. package/build/client/assets/scrollable-layout-CS-vPTNM.js +0 -1
  93. package/build/client/assets/session-route-oxi4s_Qg.js +0 -1
  94. package/build/client/assets/sessions-provider-D1t07kir.js +0 -1
  95. package/build/client/assets/settings-CameSNIM.js +0 -1
  96. package/build/client/assets/sidebar-DRhB33rT.js +0 -1
  97. package/build/client/assets/use-double-check-CbbarqDt.js +0 -1
  98. package/build/runtime/app/lib/runtime-config.server.js +0 -422
  99. package/build/runtime/cli/scriptorium.js +0 -21
  100. package/build/runtime/cli/serve.js +0 -101
  101. /package/build/client/assets/{message-card-BclR_JqA.css → index-BclR_JqA.css} +0 -0
  102. /package/build/client/assets/{instances._instanceId.proxy._-l0sNRNKZ.js → projects._projectId.file-references.resolve-l0sNRNKZ.js} +0 -0
@@ -0,0 +1 @@
1
+ import{L as g,w as k,F as b}from"./chunk-EPOLDU6W-BT1NqV1s.js";import{j as e}from"./jsx-runtime-u17CrQMm.js";import{r as x}from"./index-CLO24mr0.js";import{I as o}from"./files.browse-BBMm6lgA.js";import{u as D}from"./project-events-provider-Cz1h_7Z0.js";import{B as N}from"./breadcrumbs-CLMk50vh.js";import{S as E}from"./scrollable-layout-CR2OL0dM.js";import{g as I}from"./document-title-CaFCBnQ-.js";import{s as u,t as L}from"./sidebar-BpDMNa9u.js";import{o as P}from"./events-BGAz2o24.js";import{a as z}from"./project-route-Cqnw3iG7.js";function y(i){return i.title||i.id.slice(0,12)}function A(i){const n=new Set(i.map(s=>s.id)),t=new Map,a=[];for(const s of i){if(s.parentID&&n.has(s.parentID)){const l=t.get(s.parentID);l?l.push(s):t.set(s.parentID,[s]);continue}a.push(s)}const r=new Set;function c(s){return r.has(s.id)?{children:[],session:s}:(r.add(s.id),{children:(t.get(s.id)??[]).map(c),session:s})}return[...a.map(c),...i.filter(s=>!r.has(s.id)).map(c)]}function w({projectId:i,nodes:n}){return e.jsx("ul",{className:"space-y-2 border-l-2 border-black pl-4",children:n.map(t=>e.jsxs("li",{className:"space-y-2",children:[e.jsxs(g,{className:"block space-y-1",to:`/projects/${i}/sessions/${t.session.id}`,children:[e.jsx("p",{className:"text-base font-bold",children:y(t.session)}),t.session.updatedAt?e.jsxs("p",{className:"text-sm leading-6 opacity-60",children:["Updated ",new Date(t.session.updatedAt).toLocaleString()]}):null]}),t.children.length?e.jsx(w,{nodes:t.children,projectId:i}):null]},t.session.id))})}function R({projectId:i,sessions:n}){const t=A(n);return t.length?e.jsx("ul",{className:"border-t-2 border-black",children:t.map(a=>e.jsxs("li",{className:"space-y-2 border-b-2 border-black px-3 py-2",children:[e.jsxs(g,{className:"block space-y-1",to:`/projects/${i}/sessions/${a.session.id}`,children:[e.jsx("p",{className:"text-base font-bold",children:y(a.session)}),a.session.updatedAt?e.jsxs("p",{className:"text-sm leading-6 opacity-60",children:["Updated ",new Date(a.session.updatedAt).toLocaleString()]}):null]}),a.children.length?e.jsx(w,{nodes:a.children,projectId:i}):null]},a.session.id))}):e.jsx("p",{className:"text-base leading-6",children:"No Opencode sessions were found for this project."})}function $({directory:i,git:n}){return e.jsxs("div",{className:"grid min-h-11 w-full grid-cols-[minmax(0,1fr)_auto] items-center gap-3",children:[e.jsx("div",{className:"min-w-0",children:e.jsx("p",{className:"truncate text-base font-bold",children:i})}),e.jsx("div",{className:"flex flex-wrap items-center justify-end gap-x-2 gap-y-1 text-sm leading-6 opacity-60",children:n.isRepository?e.jsxs(e.Fragment,{children:[e.jsxs("span",{className:"inline-flex items-center gap-0",children:[e.jsx(o,{className:"size-4",icon:"mdi:source-branch"}),n.branch??"HEAD"]}),e.jsxs("span",{className:"inline-flex items-center gap-0",children:[e.jsx(o,{className:"size-4",icon:"mdi:arrow-up"}),n.ahead,e.jsx(o,{className:"size-4",icon:"mdi:arrow-down"}),n.behind]}),e.jsxs("span",{className:"inline-flex items-center gap-0",children:[e.jsx(o,{className:"size-4",icon:"mdi:file-upload-outline"}),n.staged]}),e.jsxs("span",{className:"inline-flex items-center gap-0",children:[e.jsx(o,{className:"size-4",icon:"mdi:file-document-edit-outline"}),n.modified]}),e.jsxs("span",{className:"inline-flex items-center gap-0",children:[e.jsx(o,{className:"size-4",icon:"mdi:file-question-outline"}),n.untracked]})]}):e.jsx("span",{children:"Not a git repository"})})]})}const J=k(function({loaderData:n,matches:t}){const{git:a,project:r,recentSessions:c,sessionError:s}=n,[l,h]=x.useState(()=>u(c)),S=x.useMemo(()=>["session.created","session.updated","session.deleted"],[]);return x.useEffect(()=>{h(u(c))},[c,r.id]),D(v=>{const d=P.safeParse(v);if(!d.success)return;const m=L(d.data.properties.info);h(j=>{if(d.data.type==="session.deleted")return j.filter(p=>p.id!==m.id);const f=j.filter(p=>p.id!==m.id);return f.push(m),u(f)})},{projectId:r.id,types:S}),e.jsxs(e.Fragment,{children:[e.jsx("title",{children:I(z(r.name))}),e.jsx(N,{depth:t.length,children:e.jsx(N.Item,{to:`/projects/${r.id}`,children:r.name})}),e.jsx(E,{header:e.jsx($,{directory:r.directory,git:a}),footer:e.jsx(b,{method:"post",children:e.jsx("button",{className:"min-h-11 bg-black px-3 py-2 text-base text-white",type:"submit",children:"Remove project"})}),children:e.jsx("section",{className:"space-y-8 pt-6 pr-1",children:e.jsxs("section",{className:"space-y-3",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3 px-6 sm:px-8",children:[e.jsx("p",{className:"text-sm uppercase tracking-[0.08em]",children:"Recent sessions"}),e.jsxs(b,{method:"post",children:[e.jsx("input",{name:"intent",type:"hidden",value:"create-session"}),e.jsx("button",{className:"min-h-11 bg-black px-3 py-2 text-base text-white",type:"submit",children:"New session"})]})]}),s?e.jsx("p",{className:"text-base leading-6",children:s}):null,e.jsx(R,{projectId:r.id,sessions:l})]})})})]})});export{J as default};
@@ -0,0 +1 @@
1
+ var s={exports:{}},e={};var o;function d(){if(o)return e;o=1;var R=Symbol.for("react.transitional.element"),a=Symbol.for("react.fragment");function i(v,r,t){var u=null;if(t!==void 0&&(u=""+t),r.key!==void 0&&(u=""+r.key),"key"in r){t={};for(var n in r)n!=="key"&&(t[n]=r[n])}else t=r;return r=t.ref,{$$typeof:R,type:v,key:u,ref:r!==void 0?r:null,props:t}}return e.Fragment=a,e.jsx=i,e.jsxs=i,e}var x;function l(){return x||(x=1,s.exports=d()),s.exports}var p=l();export{p as j};
@@ -0,0 +1 @@
1
+ import{w as c,b as m,L as u}from"./chunk-EPOLDU6W-BT1NqV1s.js";import{j as e}from"./jsx-runtime-u17CrQMm.js";import{r as a}from"./index-CLO24mr0.js";import{a as g,S as p}from"./auth-shell-CM4lzbUg.js";import{g as f}from"./document-title-CaFCBnQ-.js";import{s as d}from"./webauthn.client-C1ZSQfKs.js";import"./safe-area.module-CwCzHS6V.js";const N=c(function({}){const o=m(),[t,n]=a.useState(!1),[r,i]=a.useState(null);async function l(){try{n(!0),i(null);const s=await d();o(s.redirectTo)}catch(s){i(s instanceof Error?s.message:"Passkey sign-in failed.")}finally{n(!1)}}return e.jsxs(g,{title:"Login",copy:"",children:[e.jsx("title",{children:f("login")}),e.jsxs("div",{className:"space-y-4",children:[e.jsx("button",{className:"inline-flex min-h-11 w-full items-center justify-center bg-black px-3 py-2 text-base text-white sm:w-auto",disabled:t,onClick:l,type:"button",children:t?"Waiting for your passkey":"Continue with a passkey"}),e.jsx(p,{message:r}),e.jsx("p",{className:"text-sm leading-6",children:e.jsx(u,{className:"underline underline-offset-4",to:"/register",children:"Register a new passkey"})})]})]})});export{N as default};
@@ -0,0 +1 @@
1
+ window.__reactRouterManifest={"entry":{"module":"/assets/entry.client-B2qwDNf_.js","imports":["/assets/jsx-runtime-u17CrQMm.js","/assets/index-CLO24mr0.js","/assets/chunk-EPOLDU6W-BT1NqV1s.js"],"css":[]},"routes":{"root":{"id":"root","path":"","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":true,"module":"/assets/root-DtlaHd7Y.js","imports":["/assets/jsx-runtime-u17CrQMm.js","/assets/index-CLO24mr0.js","/assets/chunk-EPOLDU6W-BT1NqV1s.js","/assets/safe-area.module-CwCzHS6V.js","/assets/document-title-CaFCBnQ-.js"],"css":["/assets/root-h1ZnuAzH.css","/assets/safe-area-DTPfLjT-.css"]},"routes/_app/_layout":{"id":"routes/_app/_layout","parentId":"root","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/_layout-4p0zIumj.js","imports":["/assets/chunk-EPOLDU6W-BT1NqV1s.js","/assets/jsx-runtime-u17CrQMm.js","/assets/sessions-provider-xySz_P7U.js","/assets/index-CLO24mr0.js","/assets/events-BGAz2o24.js","/assets/breadcrumbs-CLMk50vh.js","/assets/sidebar-BpDMNa9u.js","/assets/files.browse-BBMm6lgA.js","/assets/cn-Kn7NbJqM.js","/assets/safe-area.module-CwCzHS6V.js","/assets/route-handle-DcEil3NY.js"],"css":["/assets/safe-area-DTPfLjT-.css"]},"routes/_app/index":{"id":"routes/_app/index","parentId":"routes/_app/_layout","index":true,"hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/index-BumTGMZF.js","imports":["/assets/chunk-EPOLDU6W-BT1NqV1s.js","/assets/index-CLO24mr0.js"],"css":[]},"routes/_app/projects":{"id":"routes/_app/projects","parentId":"routes/_app/_layout","path":"projects","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/projects-CcOVpbnV.js","imports":["/assets/chunk-EPOLDU6W-BT1NqV1s.js","/assets/jsx-runtime-u17CrQMm.js","/assets/files.browse-BBMm6lgA.js","/assets/scrollable-layout-CR2OL0dM.js","/assets/breadcrumbs-CLMk50vh.js","/assets/use-double-check-BJPDnzvf.js","/assets/document-title-CaFCBnQ-.js","/assets/route-handle-DcEil3NY.js","/assets/index-CLO24mr0.js"],"css":[]},"routes/_app/settings":{"id":"routes/_app/settings","parentId":"routes/_app/_layout","path":"settings","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/settings-CYavUXKt.js","imports":["/assets/chunk-EPOLDU6W-BT1NqV1s.js","/assets/jsx-runtime-u17CrQMm.js","/assets/breadcrumbs-CLMk50vh.js","/assets/scrollable-layout-CR2OL0dM.js","/assets/document-title-CaFCBnQ-.js","/assets/index-CLO24mr0.js"],"css":[]},"routes/_app/projects.$projectId/_layout":{"id":"routes/_app/projects.$projectId/_layout","parentId":"routes/_app/_layout","path":"projects/:projectId","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/_layout-DUvno75Q.js","imports":["/assets/chunk-EPOLDU6W-BT1NqV1s.js","/assets/jsx-runtime-u17CrQMm.js","/assets/project-events-provider-Cz1h_7Z0.js","/assets/route-handle-DcEil3NY.js","/assets/project-route-Cqnw3iG7.js","/assets/index-CLO24mr0.js","/assets/events-BGAz2o24.js"],"css":[]},"routes/_app/projects.$projectId/index":{"id":"routes/_app/projects.$projectId/index","parentId":"routes/_app/projects.$projectId/_layout","index":true,"hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/index-DxuBmPz-.js","imports":["/assets/chunk-EPOLDU6W-BT1NqV1s.js","/assets/jsx-runtime-u17CrQMm.js","/assets/index-CLO24mr0.js","/assets/files.browse-BBMm6lgA.js","/assets/project-events-provider-Cz1h_7Z0.js","/assets/breadcrumbs-CLMk50vh.js","/assets/scrollable-layout-CR2OL0dM.js","/assets/document-title-CaFCBnQ-.js","/assets/sidebar-BpDMNa9u.js","/assets/events-BGAz2o24.js","/assets/project-route-Cqnw3iG7.js"],"css":[]},"routes/_app/projects.$projectId/files":{"id":"routes/_app/projects.$projectId/files","parentId":"routes/_app/projects.$projectId/_layout","path":"files","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/files-247Zppti.js","imports":["/assets/chunk-EPOLDU6W-BT1NqV1s.js","/assets/jsx-runtime-u17CrQMm.js","/assets/files-browser-DKxCza7c.js","/assets/breadcrumbs-CLMk50vh.js","/assets/document-title-CaFCBnQ-.js","/assets/index-CLO24mr0.js","/assets/files.browse-BBMm6lgA.js","/assets/scroll-indicator-DxagqbkL.js","/assets/cn-Kn7NbJqM.js","/assets/scrollable-layout-CR2OL0dM.js","/assets/files.browse-Dq0nnEAB.js"],"css":["/assets/scroll-indicator-D4qxLVUu.css"]},"routes/_app/projects.$projectId/sessions.$sessionId/_layout":{"id":"routes/_app/projects.$projectId/sessions.$sessionId/_layout","parentId":"routes/_app/projects.$projectId/_layout","path":"sessions/:sessionId","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/_layout-tj841ZFj.js","imports":["/assets/chunk-EPOLDU6W-BT1NqV1s.js","/assets/jsx-runtime-u17CrQMm.js","/assets/index-CLO24mr0.js","/assets/breadcrumbs-CLMk50vh.js","/assets/scrollable-layout-CR2OL0dM.js","/assets/route-handle-DcEil3NY.js","/assets/project-route-Cqnw3iG7.js","/assets/safe-area.module-CwCzHS6V.js","/assets/files.browse-BBMm6lgA.js","/assets/cn-Kn7NbJqM.js","/assets/session-route-Cd_9l4G7.js","/assets/project-events-provider-Cz1h_7Z0.js","/assets/events-BGAz2o24.js"],"css":["/assets/safe-area-DTPfLjT-.css"]},"routes/_app/projects.$projectId/sessions.$sessionId/index":{"id":"routes/_app/projects.$projectId/sessions.$sessionId/index","parentId":"routes/_app/projects.$projectId/sessions.$sessionId/_layout","index":true,"hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/index-D-coH8u1.js","imports":["/assets/chunk-EPOLDU6W-BT1NqV1s.js","/assets/jsx-runtime-u17CrQMm.js","/assets/index-CLO24mr0.js","/assets/files.browse-BBMm6lgA.js","/assets/document-title-CaFCBnQ-.js","/assets/sessions-provider-xySz_P7U.js","/assets/session-route-Cd_9l4G7.js","/assets/project-events-provider-Cz1h_7Z0.js","/assets/scroll-indicator-DxagqbkL.js","/assets/scrollable-layout-CR2OL0dM.js","/assets/cn-Kn7NbJqM.js","/assets/events-BGAz2o24.js","/assets/sidebar-BpDMNa9u.js"],"css":["/assets/index-BclR_JqA.css","/assets/scroll-indicator-D4qxLVUu.css"]},"routes/_app/projects.$projectId/sessions.$sessionId/files":{"id":"routes/_app/projects.$projectId/sessions.$sessionId/files","parentId":"routes/_app/projects.$projectId/sessions.$sessionId/_layout","path":"files","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/files-COflIyot.js","imports":["/assets/chunk-EPOLDU6W-BT1NqV1s.js","/assets/jsx-runtime-u17CrQMm.js","/assets/breadcrumbs-CLMk50vh.js","/assets/files-browser-DKxCza7c.js","/assets/document-title-CaFCBnQ-.js","/assets/session-route-Cd_9l4G7.js","/assets/index-CLO24mr0.js","/assets/files.browse-BBMm6lgA.js","/assets/scroll-indicator-DxagqbkL.js","/assets/cn-Kn7NbJqM.js","/assets/scrollable-layout-CR2OL0dM.js","/assets/files.browse-Dq0nnEAB.js","/assets/project-events-provider-Cz1h_7Z0.js","/assets/events-BGAz2o24.js"],"css":["/assets/scroll-indicator-D4qxLVUu.css"]},"routes/_app/projects.$projectId/sessions.$sessionId/review.$mode":{"id":"routes/_app/projects.$projectId/sessions.$sessionId/review.$mode","parentId":"routes/_app/projects.$projectId/sessions.$sessionId/_layout","path":"review/:mode","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/review._mode-CjiM88Yw.js","imports":["/assets/chunk-EPOLDU6W-BT1NqV1s.js","/assets/jsx-runtime-u17CrQMm.js","/assets/breadcrumbs-CLMk50vh.js","/assets/review-browser-CkLIZsiU.js","/assets/document-title-CaFCBnQ-.js","/assets/route-handle-DcEil3NY.js","/assets/session-route-Cd_9l4G7.js","/assets/index-CLO24mr0.js","/assets/files.browse-BBMm6lgA.js","/assets/scroll-indicator-DxagqbkL.js","/assets/cn-Kn7NbJqM.js","/assets/files-browser-DKxCza7c.js","/assets/scrollable-layout-CR2OL0dM.js","/assets/files.browse-Dq0nnEAB.js","/assets/project-events-provider-Cz1h_7Z0.js","/assets/events-BGAz2o24.js"],"css":["/assets/scroll-indicator-D4qxLVUu.css"]},"routes/_app/projects.$projectId/review.uncommitted":{"id":"routes/_app/projects.$projectId/review.uncommitted","parentId":"routes/_app/projects.$projectId/_layout","path":"review/uncommitted","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/review.uncommitted-DnCOhh-l.js","imports":["/assets/chunk-EPOLDU6W-BT1NqV1s.js","/assets/jsx-runtime-u17CrQMm.js","/assets/breadcrumbs-CLMk50vh.js","/assets/review-browser-CkLIZsiU.js","/assets/document-title-CaFCBnQ-.js","/assets/index-CLO24mr0.js","/assets/files.browse-BBMm6lgA.js","/assets/scroll-indicator-DxagqbkL.js","/assets/cn-Kn7NbJqM.js","/assets/files-browser-DKxCza7c.js","/assets/scrollable-layout-CR2OL0dM.js","/assets/files.browse-Dq0nnEAB.js"],"css":["/assets/scroll-indicator-D4qxLVUu.css"]},"routes/_app/projects.$projectId.proxy.$":{"id":"routes/_app/projects.$projectId.proxy.$","parentId":"routes/_app/projects.$projectId/_layout","path":"proxy/*","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/projects._projectId.proxy._-l0sNRNKZ.js","imports":[],"css":[]},"routes/_app/projects.new":{"id":"routes/_app/projects.new","parentId":"routes/_app/_layout","path":"projects/new","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/projects.new-BIAajDmU.js","imports":["/assets/chunk-EPOLDU6W-BT1NqV1s.js","/assets/jsx-runtime-u17CrQMm.js","/assets/index-CLO24mr0.js","/assets/breadcrumbs-CLMk50vh.js","/assets/scrollable-layout-CR2OL0dM.js","/assets/document-title-CaFCBnQ-.js","/assets/files.browse-Dq0nnEAB.js","/assets/files.browse-BBMm6lgA.js"],"css":[]},"routes/_app/settings/passkeys":{"id":"routes/_app/settings/passkeys","parentId":"routes/_app/_layout","path":"settings/passkeys","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/passkeys-Cg-Qx1Gj.js","imports":["/assets/chunk-EPOLDU6W-BT1NqV1s.js","/assets/jsx-runtime-u17CrQMm.js","/assets/files.browse-BBMm6lgA.js","/assets/breadcrumbs-CLMk50vh.js","/assets/scrollable-layout-CR2OL0dM.js","/assets/use-double-check-BJPDnzvf.js","/assets/document-title-CaFCBnQ-.js","/assets/route-handle-DcEil3NY.js","/assets/index-CLO24mr0.js"],"css":[]},"routes/_auth/_layout":{"id":"routes/_auth/_layout","parentId":"root","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/_layout-CG4jvKXd.js","imports":["/assets/chunk-EPOLDU6W-BT1NqV1s.js","/assets/jsx-runtime-u17CrQMm.js","/assets/auth-shell-CM4lzbUg.js","/assets/index-CLO24mr0.js","/assets/safe-area.module-CwCzHS6V.js"],"css":["/assets/safe-area-DTPfLjT-.css"]},"routes/_auth/confirm-passkey":{"id":"routes/_auth/confirm-passkey","parentId":"routes/_auth/_layout","path":"confirm-passkey","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/confirm-passkey-sqNHrDN7.js","imports":["/assets/chunk-EPOLDU6W-BT1NqV1s.js","/assets/jsx-runtime-u17CrQMm.js","/assets/auth-shell-CM4lzbUg.js","/assets/document-title-CaFCBnQ-.js","/assets/index-CLO24mr0.js","/assets/safe-area.module-CwCzHS6V.js"],"css":["/assets/safe-area-DTPfLjT-.css"]},"routes/_auth/login":{"id":"routes/_auth/login","parentId":"routes/_auth/_layout","path":"login","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/login-SMI1sC8T.js","imports":["/assets/chunk-EPOLDU6W-BT1NqV1s.js","/assets/jsx-runtime-u17CrQMm.js","/assets/index-CLO24mr0.js","/assets/auth-shell-CM4lzbUg.js","/assets/document-title-CaFCBnQ-.js","/assets/webauthn.client-C1ZSQfKs.js","/assets/safe-area.module-CwCzHS6V.js"],"css":["/assets/safe-area-DTPfLjT-.css"]},"routes/_auth/logout":{"id":"routes/_auth/logout","parentId":"routes/_auth/_layout","path":"logout","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/logout-l0sNRNKZ.js","imports":[],"css":[]},"routes/_auth/register":{"id":"routes/_auth/register","parentId":"routes/_auth/_layout","path":"register","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/register-CwUWzMvC.js","imports":["/assets/chunk-EPOLDU6W-BT1NqV1s.js","/assets/jsx-runtime-u17CrQMm.js","/assets/index-CLO24mr0.js","/assets/auth-shell-CM4lzbUg.js","/assets/document-title-CaFCBnQ-.js","/assets/webauthn.client-C1ZSQfKs.js","/assets/safe-area.module-CwCzHS6V.js"],"css":["/assets/safe-area-DTPfLjT-.css"]},"routes/_rpc/files.browse":{"id":"routes/_rpc/files.browse","parentId":"root","path":"files/browse","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/files.browse-BBMm6lgA.js","imports":["/assets/jsx-runtime-u17CrQMm.js","/assets/index-CLO24mr0.js"],"css":[]},"routes/_rpc/session-events/events":{"id":"routes/_rpc/session-events/events","parentId":"root","path":"session-events/events","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/events-l0sNRNKZ.js","imports":[],"css":[]},"routes/_rpc/session-read-status/ack":{"id":"routes/_rpc/session-read-status/ack","parentId":"root","path":"session-read-status/ack","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/ack-yx2DGjj6.js","imports":[],"css":[]},"routes/_rpc/auth/login/begin":{"id":"routes/_rpc/auth/login/begin","parentId":"root","path":"auth/login/begin","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/begin-l0sNRNKZ.js","imports":[],"css":[]},"routes/_rpc/auth/login/finish":{"id":"routes/_rpc/auth/login/finish","parentId":"root","path":"auth/login/finish","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/finish-l0sNRNKZ.js","imports":[],"css":[]},"routes/_rpc/auth/register/begin":{"id":"routes/_rpc/auth/register/begin","parentId":"root","path":"auth/register/begin","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/begin-DP2rzg_V.js","imports":[],"css":[]},"routes/_rpc/auth/register/finish":{"id":"routes/_rpc/auth/register/finish","parentId":"root","path":"auth/register/finish","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/finish-DP2rzg_V.js","imports":[],"css":[]},"routes/_rpc/projects.$projectId.file-references.resolve":{"id":"routes/_rpc/projects.$projectId.file-references.resolve","parentId":"root","path":"projects/:projectId/file-references/resolve","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/projects._projectId.file-references.resolve-l0sNRNKZ.js","imports":[],"css":[]}},"url":"/assets/manifest-27a6038b.js","version":"27a6038b"};
@@ -0,0 +1 @@
1
+ import{w as u,u as p}from"./chunk-EPOLDU6W-BT1NqV1s.js";import{j as e}from"./jsx-runtime-u17CrQMm.js";import{I as l}from"./files.browse-BBMm6lgA.js";import{B as r}from"./breadcrumbs-CLMk50vh.js";import{S as h}from"./scrollable-layout-CR2OL0dM.js";import{u as x}from"./use-double-check-BJPDnzvf.js";import{g as b}from"./document-title-CaFCBnQ-.js";import{d as j}from"./route-handle-DcEil3NY.js";import"./index-CLO24mr0.js";const S=j({iconNavActions:[{icon:"mdi:arrow-left",label:"Back to settings",to:"/settings",end:!0}]});function g({currentPasskeyId:a,passkey:s}){const t=p(),{doubleCheck:i,getButtonProps:n}=x(),o=s.id===a,c=t.state!=="idle",d=i?"mdi:help":"mdi:trash-can-outline",m=i?`Confirm revoke ${s.label}`:`Revoke ${s.label}`;return e.jsxs("li",{className:"flex min-h-11 items-center justify-between gap-3 border-b-2 border-black px-3 py-2",children:[e.jsxs("div",{className:"flex min-w-0 items-center gap-3",children:[e.jsx("span",{className:"inline-flex min-h-11 min-w-11 items-center justify-center","aria-hidden":"true",children:o?e.jsx(l,{className:"size-6",icon:"mdi:star"}):null}),e.jsx("span",{className:"truncate text-base",children:s.label})]}),e.jsxs(t.Form,{method:"post",children:[e.jsx("input",{name:"intent",type:"hidden",value:"revoke"}),e.jsx("input",{name:"passkeyId",type:"hidden",value:s.id}),e.jsx("button",{"aria-label":m,className:"inline-flex min-h-11 min-w-11 items-center justify-center disabled:opacity-25",disabled:c,type:"submit",...n(),children:e.jsx(l,{className:"size-6",icon:d})})]}),t.data?.error?e.jsx("p",{className:"sr-only",children:t.data.error}):null]})}const C=u(function({actionData:s,loaderData:t,matches:i}){return e.jsxs(e.Fragment,{children:[e.jsx("title",{children:b("Passkeys","Settings")}),e.jsxs(r,{depth:i.length,children:[e.jsx(r.Item,{to:"/settings",children:"Settings"}),e.jsx(r.Item,{children:"Passkeys"})]}),e.jsx(h,{children:e.jsxs("section",{className:"space-y-6 pt-6",children:[e.jsxs("div",{className:"space-y-2 px-6 sm:px-8",children:[e.jsx("p",{className:"text-sm uppercase tracking-[0.08em]",children:"Active devices"}),e.jsx("p",{className:"text-base leading-6",children:"Revoke any passkey that should stop signing in. Revoking the device you are using will send you back through registration."})]}),s?.error?e.jsx("p",{className:"border-t-2 border-black pt-3 text-base leading-6",children:s.error}):null,e.jsx("ul",{className:"border-t-2 border-black",children:t.passkeys.map(n=>e.jsx(g,{currentPasskeyId:t.currentPasskeyId,passkey:n},n.id))})]})})]})});export{C as default,S as handle};
@@ -0,0 +1 @@
1
+ import{j as v}from"./jsx-runtime-u17CrQMm.js";import{r as t}from"./index-CLO24mr0.js";import{u as y,P as E,p as h}from"./events-BGAz2o24.js";const j=t.createContext(null);function w(e,r){return r?!(r.projectId&&r.projectId!==e.projectId||r.sessionId&&D(e)!==r.sessionId||r.types?.length&&!r.types.includes(e.type)):!0}function D(e){switch(e.type){case"session.created":case"session.updated":case"session.deleted":return e.properties.info.id;case"session.status":return e.properties.sessionID;case"session.error":return e.properties.sessionID??null;case"session.diff":return e.properties.sessionID;case"message.updated":return e.properties.info.sessionID;case"message.removed":return e.properties.sessionID;case"message.part.updated":return e.properties.part.sessionID;case"message.part.delta":return e.properties.sessionID;case"message.part.removed":return e.properties.sessionID;case"permission.asked":return e.properties.sessionID;case"permission.replied":return e.properties.sessionID??null;case"question.asked":return e.properties.sessionID;case"question.replied":case"question.rejected":return e.properties.sessionID;default:return null}}function S({children:e,projectIds:r}){const o=t.useRef(new Map),c=t.useRef(new Map),a=t.useRef(0),p=t.useMemo(()=>[...r].sort().join(","),[r]),d=t.useMemo(()=>[...new Set(r)].sort(),[p]),l=y(),I=t.useCallback(u=>{for(const s of c.current.values())w(u,s.filter)&&s.handler(u)},[]);t.useEffect(()=>{const u=new Set(d);for(const[s,i]of o.current)u.has(s)||(i.close(),o.current.delete(s));for(const s of d){if(o.current.has(s))continue;const i=new E(`/projects/${s}/proxy/event`,{onReconnect:()=>{l()},onMessage:f=>{try{const n=h(JSON.parse(f.data));if(n.kind==="unknown"){console.warn(`[opencode events] No schema registered for event type "${n.eventType}".`,{event:n.data,projectId:s});return}if(n.kind==="invalid"){console.error(`[opencode events] Event ${n.eventType?`"${n.eventType}" `:""}did not match its schema.`,{error:n.error.format(),projectId:s,raw:f.data});return}I({projectId:s,...n.data})}catch(n){console.error("[opencode events] Failed to parse SSE payload.",{error:n,projectId:s,raw:f.data})}}});o.current.set(s,i)}return()=>{for(const s of o.current.values())s.close();o.current.clear()}},[I,d,p,l]);const m=t.useCallback((u,s)=>{const i=a.current;return a.current+=1,c.current.set(i,{filter:s,handler:u}),()=>{c.current.delete(i)}},[]),b=t.useMemo(()=>({subscribe:m}),[m]);return v.jsx(j.Provider,{value:b,children:e})}function g(e,r){const o=t.useContext(j),c=t.useRef(e),a=r?.types?.join(",")??"";c.current=e,t.useEffect(()=>{if(!o)throw new Error("useProjectEvents must be used within a ProjectEventsProvider.");return o.subscribe(p=>c.current(p),r)},[o,r?.projectId,r?.sessionId,a])}export{S as P,g as u};
@@ -0,0 +1 @@
1
+ function t(e){return e?.trim()||"Project"}function n(e){return{icon:"mdi:message-plus-outline",label:"New session",action:`/projects/${e}?index`,method:"post",fields:{intent:"create-session"}}}export{t as a,n as g};
@@ -0,0 +1 @@
1
+ import{w as o,u as m,L as d}from"./chunk-EPOLDU6W-BT1NqV1s.js";import{j as e}from"./jsx-runtime-u17CrQMm.js";import{I as p}from"./files.browse-BBMm6lgA.js";import{S as u}from"./scrollable-layout-CR2OL0dM.js";import{B as l}from"./breadcrumbs-CLMk50vh.js";import{u as x}from"./use-double-check-BJPDnzvf.js";import{g as j}from"./document-title-CaFCBnQ-.js";import{d as h}from"./route-handle-DcEil3NY.js";import"./index-CLO24mr0.js";const I=h({iconNavActions:[{icon:"mdi:plus",label:"New project",to:"/projects/new",end:!0}]});function b({project:s}){const t=m(),{doubleCheck:r,getButtonProps:i}=x(),n=t.state!=="idle",a=r?"mdi:help":"mdi:trash-can-outline",c=r?`Confirm delete ${s.name}`:`Delete ${s.name}`;return e.jsxs("li",{className:"grid gap-3 border-b-2 border-black px-3 py-3 md:grid-cols-[1fr_auto] md:items-center",children:[e.jsxs(d,{className:"block min-w-0 space-y-1",to:`/projects/${s.id}`,children:[e.jsx("p",{className:"truncate text-lg font-bold",children:s.name}),e.jsx("p",{className:"truncate text-sm leading-6",children:s.directory})]}),e.jsx("div",{className:"flex items-center justify-between gap-3 md:justify-end",children:e.jsxs(t.Form,{method:"post",children:[e.jsx("input",{name:"intent",type:"hidden",value:"delete"}),e.jsx("input",{name:"projectId",type:"hidden",value:s.id}),e.jsx("button",{"aria-label":c,className:"inline-flex min-h-11 min-w-11 items-center justify-center disabled:opacity-25",disabled:n,type:"submit",...i(),children:e.jsx(p,{className:"size-6",icon:a})})]})})]})}const R=o(function({actionData:t,loaderData:r,matches:i}){return e.jsxs(e.Fragment,{children:[e.jsx("title",{children:j("Projects")}),e.jsx(l,{depth:i.length,children:e.jsx(l.Item,{children:"Projects"})}),e.jsx(u,{children:e.jsxs("section",{className:"space-y-6 pt-6",children:[e.jsx("p",{className:"px-6 text-sm uppercase tracking-[0.08em] sm:px-8",children:"Available projects"}),t?.error?e.jsx("p",{className:"text-base leading-6",children:t.error}):null,r.projects.length?e.jsx("ul",{className:"border-t-2 border-black",children:r.projects.map(n=>e.jsx(b,{project:n},n.id))}):e.jsx("p",{className:"text-base leading-6",children:"No projects exist yet."})]})})]})});export{R as default,I as handle};
@@ -0,0 +1 @@
1
+ import{w as n,F as c}from"./chunk-EPOLDU6W-BT1NqV1s.js";import{j as e}from"./jsx-runtime-u17CrQMm.js";import{r as m}from"./index-CLO24mr0.js";import{B as s}from"./breadcrumbs-CLMk50vh.js";import{S as p}from"./scrollable-layout-CR2OL0dM.js";import{g as x}from"./document-title-CaFCBnQ-.js";import{F as h}from"./files.browse-Dq0nnEAB.js";import"./files.browse-BBMm6lgA.js";const P=n(function({actionData:i,loaderData:t,matches:o}){const[r,l]=m.useState(t.initialDirectory),a=r.split("/").filter(Boolean).at(-1)||r;return e.jsxs(e.Fragment,{children:[e.jsx("title",{children:x("New project","Projects")}),e.jsxs(s,{depth:o.length,children:[e.jsx(s.Item,{to:"/projects",children:"Projects"}),e.jsx(s.Item,{children:"New project"})]}),e.jsx(c,{className:"flex min-h-0 flex-1 flex-col",method:"post",children:e.jsx(p,{header:e.jsxs("div",{className:"grid min-h-11 w-full grid-cols-[minmax(0,1fr)_minmax(14rem,20rem)_auto] items-center gap-3",children:[e.jsx("p",{className:"truncate text-base font-bold",children:r}),e.jsxs("label",{className:"min-w-0",children:[e.jsx("span",{className:"sr-only",children:"Folder name"}),e.jsx("input",{className:"min-h-11 w-full border-l-2 border-black px-3 py-2 text-base focus-visible:outline-2 focus-visible:outline-black",name:"name",placeholder:a,type:"text"})]}),e.jsx("button",{className:"min-h-11 bg-black px-3 py-2 text-base text-white",type:"submit",children:"Create"})]}),children:e.jsxs("section",{className:"space-y-6 pt-6",children:[i?.error?e.jsx("p",{className:"text-base leading-6",children:i.error}):null,e.jsx(h,{baseDirectory:t.initialDirectory,initialPath:t.initialDirectory,name:"directory",onBrowsePathChange:l,route:"/files/browse",selectionMode:"directory"})]})})})]})});export{P as default};
@@ -0,0 +1 @@
1
+ import{w as f,b as g,L as p}from"./chunk-EPOLDU6W-BT1NqV1s.js";import{j as t}from"./jsx-runtime-u17CrQMm.js";import{r as n}from"./index-CLO24mr0.js";import{a as b,S as x}from"./auth-shell-CM4lzbUg.js";import{g as h}from"./document-title-CaFCBnQ-.js";import{r as v}from"./webauthn.client-C1ZSQfKs.js";import"./safe-area.module-CwCzHS6V.js";function y(){if(typeof navigator>"u")return"Unnamed device";const e=navigator.userAgent,i=/iPhone/i.test(e)?"iPhone":/iPad/i.test(e)?"iPad":/Android/i.test(e)?"Android":/Mac/i.test(e)?"Mac":/Windows/i.test(e)?"Windows":/Linux/i.test(e)?"Linux":null,a=/Edg/i.test(e)?"Edge":/Chrome|CriOS/i.test(e)?"Chrome":/Firefox|FxiOS/i.test(e)?"Firefox":/Safari/i.test(e)&&!/Chrome|CriOS|Edg/i.test(e)?"Safari":null;return i&&a?`${a} on ${i}`:i?`${i} device`:a?`${a} device`:"Unnamed device"}const C=f(function({}){const i=g(),a=n.useMemo(()=>y(),[]),[o,u]=n.useState(""),[r,l]=n.useState(!1),[d,c]=n.useState(null);async function m(){try{l(!0),c(null);const s=await v(o.trim()||a);i(s.redirectTo)}catch(s){c(s instanceof Error?s.message:"Passkey registration failed.")}finally{l(!1)}}return t.jsxs(b,{title:"Register device",copy:"",children:[t.jsx("title",{children:h("register")}),t.jsxs("form",{className:"space-y-4",onSubmit:s=>{s.preventDefault(),m()},children:[t.jsxs("label",{className:"block space-y-3 py-1",children:[t.jsx("span",{className:"text-sm uppercase tracking-[0.08em]",children:"Device label"}),t.jsx("input",{className:"min-h-11 w-full bg-white px-0 py-2 text-base text-black focus-visible:outline-2 focus-visible:outline-black focus-visible:outline-offset-2",disabled:r,name:"label",onChange:s=>u(s.target.value),placeholder:"Desktop, iPhone, Macbook...",value:o})]}),t.jsx("button",{className:"inline-flex min-h-11 w-full items-center justify-center bg-black px-3 py-2 text-base text-white sm:w-auto",disabled:r,type:"submit",children:r?"Waiting for your device":"Register passkey"}),t.jsx(x,{message:d}),t.jsx("p",{className:"text-sm leading-6",children:t.jsx(p,{className:"underline underline-offset-4",to:"/login",children:"Login"})})]})]})});export{C as default};
@@ -0,0 +1 @@
1
+ import{j as e}from"./jsx-runtime-u17CrQMm.js";import{r as m}from"./index-CLO24mr0.js";import{I as c}from"./files.browse-BBMm6lgA.js";import{g as O,L as z,b as T}from"./chunk-EPOLDU6W-BT1NqV1s.js";import{C as U,L as H,S as _,a as q}from"./scroll-indicator-DxagqbkL.js";import{L as B,f as G}from"./files-browser-DKxCza7c.js";import{b as V,c as A,a as J,d as K}from"./files.browse-Dq0nnEAB.js";import{S as D}from"./scrollable-layout-CR2OL0dM.js";const Q={"bottom-end":"right-0 top-full mt-1","bottom-start":"left-0 top-full mt-1","top-end":"right-0 bottom-full mb-1","top-start":"left-0 bottom-full mb-1"};function W({ariaLabel:s,emptyLabel:o,placement:d="bottom-start",options:t,selectedValue:i,onSelect:u}){const r=m.useId(),b=m.useRef(null),[x,j]=m.useState(!1),p=t.find(a=>a.value===i)??null;return m.useEffect(()=>{if(!x)return;const a=h=>{b.current?.contains(h.target)||j(!1)};return document.addEventListener("pointerdown",a),()=>{document.removeEventListener("pointerdown",a)}},[x]),e.jsxs("div",{className:"relative",ref:b,children:[e.jsxs("button",{"aria-label":s,"aria-expanded":x,"aria-controls":r,"aria-haspopup":"listbox",className:"inline-flex min-h-11 items-center justify-between gap-2 px-3 py-2 text-base disabled:opacity-25",disabled:!t.length,onClick:()=>j(a=>!a),type:"button",children:[p?.label??o,e.jsx(c,{className:"size-5",icon:"mdi:chevron-down"})]}),x&&t.length?e.jsx("div",{className:`absolute z-10 min-w-max border-y-2 border-black bg-white ${Q[d]}`,id:r,role:"listbox",children:e.jsx("ul",{children:t.map(a=>e.jsx("li",{className:"min-h-11 px-3 py-2",children:e.jsx("button",{className:`block w-full text-left text-base ${a.value===i?"font-bold":""}`,onClick:()=>{u(a.value),j(!1)},role:"option",type:"button",children:a.label})},a.value))})}):null]})}const X=["session","recent","uncommitted"];function v(s){switch(s){case"session":return"Session Changes";case"recent":return"Recent Changes";default:return"Uncommitted Changes"}}function ce(){return X.map(s=>({label:v(s),mode:s}))}function M({mode:s,modes:o,switchBasePath:d}){const t=T();return!d||o.length<2?e.jsx("p",{className:"text-base font-bold",children:v(s)}):e.jsx(W,{ariaLabel:"Review mode",emptyLabel:"Choose review mode",onSelect:i=>t(`${d}/${i}`),options:o.map(i=>({label:i.label,value:i.mode})),placement:"bottom-start",selectedValue:s})}function Y({label:s,mode:o,modes:d,nextUrl:t,onBack:i,previousUrl:u,switchBasePath:r}){return e.jsxs("div",{className:"grid grid-cols-[auto_1fr_auto] items-center gap-2",children:[e.jsx("button",{"aria-label":`Back to ${v(o).toLowerCase()}`,className:"inline-flex min-h-11 min-w-11 items-center justify-center",onClick:i,type:"button",children:e.jsx(c,{className:"size-5",icon:"mdi:arrow-left"})}),e.jsx("p",{className:"text-base font-bold break-all",children:s}),e.jsxs("div",{className:"flex items-center gap-0",children:[u?e.jsx(z,{"aria-label":"Previous file",className:"inline-flex min-h-11 min-w-11 items-center justify-center",to:u,children:e.jsx(c,{className:"size-5",icon:"mdi:arrow-up-bold"})}):e.jsx("span",{"aria-disabled":"true","aria-label":"Previous file",className:"inline-flex min-h-11 min-w-11 items-center justify-center opacity-25",children:e.jsx(c,{className:"size-5",icon:"mdi:arrow-up-bold"})}),t?e.jsx(z,{"aria-label":"Next file",className:"inline-flex min-h-11 min-w-11 items-center justify-center",to:t,children:e.jsx(c,{className:"size-5",icon:"mdi:arrow-down-bold"})}):e.jsx("span",{"aria-disabled":"true","aria-label":"Next file",className:"inline-flex min-h-11 min-w-11 items-center justify-center opacity-25",children:e.jsx(c,{className:"size-5",icon:"mdi:arrow-down-bold"})})]}),e.jsx("div",{className:"col-span-3 flex justify-start",children:e.jsx(M,{mode:o,modes:d,switchBasePath:r})})]})}function Z({review:s}){return s.git?e.jsx("div",{className:"flex flex-wrap items-center justify-end gap-x-2 gap-y-1 text-sm leading-6 opacity-60",children:s.git.isRepository?e.jsxs(e.Fragment,{children:[e.jsxs("span",{className:"inline-flex items-center gap-0",children:[e.jsx(c,{className:"size-4",icon:"mdi:source-branch"}),s.git.branch??"HEAD"]}),e.jsxs("span",{className:"inline-flex items-center gap-0",children:[e.jsx(c,{className:"size-4",icon:"mdi:arrow-up"}),s.git.ahead,e.jsx(c,{className:"size-4",icon:"mdi:arrow-down"}),s.git.behind]}),e.jsxs("span",{className:"inline-flex items-center gap-0",children:[e.jsx(c,{className:"size-4",icon:"mdi:file-upload-outline"}),s.git.staged]}),e.jsxs("span",{className:"inline-flex items-center gap-0",children:[e.jsx(c,{className:"size-4",icon:"mdi:file-document-edit-outline"}),s.git.modified]}),e.jsxs("span",{className:"inline-flex items-center gap-0",children:[e.jsx(c,{className:"size-4",icon:"mdi:file-question-outline"}),s.git.untracked]})]}):e.jsx("span",{children:"Not a git repository"})}):null}function ee({mode:s,modes:o,review:d,switchBasePath:t}){return e.jsxs("div",{className:"grid min-h-11 w-full grid-cols-[1fr_auto] items-center gap-3",children:[e.jsx(M,{mode:s,modes:o,switchBasePath:t}),e.jsx(Z,{review:d})]})}function de({mode:s,modes:o=[],onInsertReference:d,review:t,selected:i,selectedError:u,selectedPath:r,switchBasePath:b}){const[x,j]=O(),p=m.useMemo(()=>V(t.files),[t.files]),a=m.useMemo(()=>A(p),[p]),h=m.useMemo(()=>J(p),[p]),S=m.useRef(h),[E,L]=m.useState(h),g=r?a.indexOf(r):-1,R=g>0?a[g-1]:null,C=g>=0&&g<a.length-1?a[g+1]:null;m.useEffect(()=>{const n=S.current;L(l=>{const f=new Set(l),w=new Set(n);return h.filter(N=>f.has(N)||!w.has(N))}),S.current=h},[h]);function P(n){const l=new URLSearchParams(x);n?l.set("path",n):l.delete("path");const f=l.toString();return f?`?${f}`:""}function k(n){const l=new URLSearchParams(x);n?l.set("path",n):l.delete("path"),j(l)}function $(){k(null)}function F(n){L(l=>l.includes(n)?l.filter(f=>f!==n):[...l,n])}return r?e.jsx(D,{header:e.jsx(Y,{label:i?.oldPath?`${i.oldPath} -> ${r}`:r,mode:s,modes:o,nextUrl:C?P(C):null,onBack:$,previousUrl:R?P(R):null,switchBasePath:b}),children:u?e.jsx("p",{className:"text-base leading-6",children:u}):i?.binary?e.jsx("p",{className:"text-base leading-6",children:"This file cannot be previewed as text."}):i?e.jsx(U,{children:e.jsx(H,{content:i.content,diffContent:i.mode==="diff"?i.diffContent:void 0,diffSide:i.mode==="diff"?i.diffSide:void 0,fileName:r,mode:i.mode==="diff"?"diff":"text",children:({changeMarkers:n,highlightedLines:l,lines:f})=>e.jsx(_,{changeMarkers:n,mode:i.mode==="diff"?"diff":"text",children:({indicator:w,scrollPaneRef:N})=>e.jsxs(e.Fragment,{children:[e.jsx(B,{onInsert:y=>{d&&d(G(r,y))},children:({onSelectLine:y,selectedRowRange:I})=>e.jsx(q,{highlightedLines:l,lines:f,mode:i.mode==="diff"?"diff":"text",onSelectLine:y,scrollPaneRef:N,selectedRowRange:I??null,showDualGutters:i.mode==="diff",showLineNumbers:!0,showDiffMarkers:!0})},r),w]})})})}):e.jsx("p",{className:"text-base leading-6",children:"No diff is available for this selection."})}):e.jsx(D,{header:e.jsx(ee,{mode:s,modes:o,review:t,switchBasePath:b}),children:e.jsx("section",{className:"space-y-8 pr-1",children:e.jsx(K,{currentPath:"",emptyLabel:t.emptyLabel,expandedPaths:E,onSelectionChange:n=>k(n?.path??null),onToggleDirectory:F,renderPrefix:n=>n.status??null,selectedPath:r,selectionMode:"file",tree:p})})})}export{de as R,ce as g};
@@ -0,0 +1 @@
1
+ import{w as f,a as j}from"./chunk-EPOLDU6W-BT1NqV1s.js";import{j as t}from"./jsx-runtime-u17CrQMm.js";import{B as i}from"./breadcrumbs-CLMk50vh.js";import{R as h,g as w}from"./review-browser-CkLIZsiU.js";import{g as x}from"./document-title-CaFCBnQ-.js";import{d as g}from"./route-handle-DcEil3NY.js";import{u as v,g as r,a as R}from"./session-route-Cd_9l4G7.js";import"./index-CLO24mr0.js";import"./files.browse-BBMm6lgA.js";import"./scroll-indicator-DxagqbkL.js";import"./cn-Kn7NbJqM.js";import"./files-browser-DKxCza7c.js";import"./scrollable-layout-CR2OL0dM.js";import"./files.browse-Dq0nnEAB.js";import"./project-events-provider-Cz1h_7Z0.js";import"./events-BGAz2o24.js";function I(e){return e==="session"||e==="recent"||e==="uncommitted"?e:"uncommitted"}const k=g({iconNavActions:({params:e})=>R(e.projectId??"",e.sessionId??"",I(e.mode))}),q=f(function({loaderData:n,matches:m}){const{insertComposerReference:c}=j(),{project:s,mode:d,review:p,selected:a,selectedError:l,selectedPath:u}=n,o=v();return t.jsxs(t.Fragment,{children:[t.jsx("title",{children:x("review",r(o))}),t.jsxs(i,{depth:m.length,children:[t.jsx(i.Item,{to:`/projects/${s.id}`,children:s.name}),t.jsx(i.Item,{to:`/projects/${s.id}/sessions/${o.id}`,children:r(o)}),t.jsx(i.Item,{children:"review"})]}),t.jsx(h,{mode:d,modes:w(),onInsertReference:c,review:p,selected:a,selectedError:l,selectedPath:u,switchBasePath:`/projects/${s.id}/sessions/${o.id}/review`})]})});export{q as default,k as handle};
@@ -0,0 +1 @@
1
+ import{w as d}from"./chunk-EPOLDU6W-BT1NqV1s.js";import{j as e}from"./jsx-runtime-u17CrQMm.js";import{B as r}from"./breadcrumbs-CLMk50vh.js";import{R as a}from"./review-browser-CkLIZsiU.js";import{g as l}from"./document-title-CaFCBnQ-.js";import"./index-CLO24mr0.js";import"./files.browse-BBMm6lgA.js";import"./scroll-indicator-DxagqbkL.js";import"./cn-Kn7NbJqM.js";import"./files-browser-DKxCza7c.js";import"./scrollable-layout-CR2OL0dM.js";import"./files.browse-Dq0nnEAB.js";const b=d(function({loaderData:o,matches:i}){const{project:t,mode:m,review:s,selected:n,selectedError:p,selectedPath:c}=o;return e.jsxs(e.Fragment,{children:[e.jsx("title",{children:l("review",t.name)}),e.jsxs(r,{depth:i.length,children:[e.jsx(r.Item,{to:`/projects/${t.id}`,children:t.name}),e.jsx(r.Item,{children:"review"})]}),e.jsx(a,{mode:m,review:s,selected:n,selectedError:p,selectedPath:c})]})});export{b as default};
@@ -0,0 +1 @@
1
+ import{w as c,d as l,M as p,e as m,S as x,f as u,O as f,i,F as d}from"./chunk-EPOLDU6W-BT1NqV1s.js";import{j as e}from"./jsx-runtime-u17CrQMm.js";import{s as h}from"./safe-area.module-CwCzHS6V.js";import{r as j}from"./index-CLO24mr0.js";import{A as a}from"./document-title-CaFCBnQ-.js";const g="/sw.js";function b(){return j.useEffect(()=>{"serviceWorker"in navigator&&navigator.serviceWorker.register(g)},[]),null}const N=()=>[{rel:"manifest",href:"/manifest.webmanifest"},{rel:"icon",href:"/favicon.ico",sizes:"any"},{rel:"icon",href:"/icon.svg",type:"image/svg+xml"},{rel:"icon",href:"/icon-192.png",type:"image/png",sizes:"192x192"},{rel:"icon",href:"/icon-512.png",type:"image/png",sizes:"512x512"},{rel:"apple-touch-icon",href:"/apple-touch-icon.png",sizes:"180x180"}];function v(t){return i(t)?t.status===404?`404 | ${a}`:`Error | ${a}`:`Error | ${a}`}function S({children:t}){return e.jsxs("html",{lang:"en",children:[e.jsxs("head",{children:[e.jsx("meta",{charSet:"utf-8"}),e.jsx("meta",{name:"viewport",content:"width=device-width, initial-scale=1, viewport-fit=cover, interactive-widget=resizes-content"}),e.jsx("meta",{content:"#ffffff",name:"theme-color"}),e.jsx("meta",{content:"yes",name:"apple-mobile-web-app-capable"}),e.jsx("meta",{content:"default",name:"apple-mobile-web-app-status-bar-style"}),e.jsx("meta",{content:"Scriptorium",name:"apple-mobile-web-app-title"}),e.jsx(p,{}),e.jsx(m,{})]}),e.jsxs("body",{children:[t,e.jsx(x,{}),e.jsx(b,{}),e.jsx(u,{})]})]})}const A=c(function(){return e.jsx(f,{})}),O=l(function({error:s}){let n="Oops!",r="An unexpected error occurred.",o;return i(s)&&(n=s.status===404?"404":"Error",r=s.status===404?"The requested page could not be found.":s.statusText||r),e.jsxs("main",{className:`${h.pageShell} min-h-dvh bg-white text-black`,children:[e.jsx("title",{children:v(s)}),e.jsxs("div",{className:"mx-auto flex max-w-3xl flex-col gap-6 border-t-2 border-black pt-8",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx("p",{className:"text-sm uppercase tracking-[0.08em]",children:"Scriptorium"}),e.jsx("h1",{className:"text-3xl font-bold",children:n}),e.jsx("p",{className:"max-w-2xl text-base leading-6",children:r})]}),e.jsx(d,{action:"/logout",method:"post",children:e.jsx("button",{className:"min-h-11 bg-black px-3 py-2 text-base text-white",type:"submit",children:"Clear session"})})]}),o]})});export{O as ErrorBoundary,S as Layout,A as default,N as links};
@@ -0,0 +1 @@
1
+ @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial}}}@layer theme{:root,:host{--font-sans:Charter, "Bitstream Charter", Georgia, serif;--font-mono:"Fira Code", ui-monospace, monospace;--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-xl:36rem;--container-2xl:42rem;--container-3xl:48rem;--container-4xl:56rem;--container-5xl:64rem;--text-xs:.84375rem;--text-xs--line-height:1.125rem;--text-sm:.984375rem;--text-sm--line-height:1.40625rem;--text-base:1.125rem;--text-base--line-height:1.6875rem;--text-lg:1.26563rem;--text-lg--line-height:1.82813rem;--text-xl:1.40625rem;--text-xl--line-height:1.82813rem;--text-2xl:1.6875rem;--text-2xl--line-height:2.10938rem;--text-3xl:2.10938rem;--text-3xl--line-height:2.53125rem;--text-5xl:3.375rem;--text-5xl--line-height:1;--font-weight-bold:700;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-accent-dark-gray:#404040;--color-accent-mid-gray:gray;--color-accent-light-gray:silver;--color-accent-red:#ff6163;--color-accent-green:#00b036;--color-accent-navy:#000084;--color-accent-aqua:#00f0ff;--color-accent-violet:#e0f;--color-accent-orange:#fa0;--color-accent-lemon:#f0ff00;--color-accent-chartreuse:green;--color-accent-grape:#9338be;--color-accent-sky:#0af;--color-accent-orange-red:#f40}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.inset-0{inset:calc(var(--spacing) * 0)}.inset-x-0{inset-inline:calc(var(--spacing) * 0)}.inset-y-0{inset-block:calc(var(--spacing) * 0)}.start{inset-inline-start:var(--spacing)}.end{inset-inline-end:var(--spacing)}.top-0{top:calc(var(--spacing) * 0)}.top-1{top:calc(var(--spacing) * 1)}.top-full{top:100%}.right-0{right:calc(var(--spacing) * 0)}.right-1{right:calc(var(--spacing) * 1)}.right-1\.5{right:calc(var(--spacing) * 1.5)}.right-3{right:calc(var(--spacing) * 3)}.bottom-0{bottom:calc(var(--spacing) * 0)}.bottom-3{bottom:calc(var(--spacing) * 3)}.bottom-4{bottom:calc(var(--spacing) * 4)}.bottom-full{bottom:100%}.left-0{left:calc(var(--spacing) * 0)}.left-1\/2{left:50%}.left-8{left:calc(var(--spacing) * 8)}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.col-span-3{grid-column:span 3/span 3}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.m-1{margin:calc(var(--spacing) * 1)}.m-2{margin:calc(var(--spacing) * 2)}.m-3{margin:calc(var(--spacing) * 3)}.mx-2{margin-inline:calc(var(--spacing) * 2)}.mx-auto{margin-inline:auto}.my-8{margin-block:calc(var(--spacing) * 8)}.mt-1{margin-top:calc(var(--spacing) * 1)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-8{margin-top:calc(var(--spacing) * 8)}.mt-auto{margin-top:auto}.mb-1{margin-bottom:calc(var(--spacing) * 1)}.ml-auto{margin-left:auto}.box-border{box-sizing:border-box}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.size-2{width:calc(var(--spacing) * 2);height:calc(var(--spacing) * 2)}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.size-5{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.size-6{width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6)}.size-20{width:calc(var(--spacing) * 20);height:calc(var(--spacing) * 20)}.size-full{width:100%;height:100%}.h-9{height:calc(var(--spacing) * 9)}.h-full{height:100%}.max-h-72{max-height:calc(var(--spacing) * 72)}.max-h-\[50dvh\]{max-height:50dvh}.min-h-0{min-height:calc(var(--spacing) * 0)}.min-h-1\.5{min-height:calc(var(--spacing) * 1.5)}.min-h-6{min-height:calc(var(--spacing) * 6)}.min-h-9{min-height:calc(var(--spacing) * 9)}.min-h-11{min-height:calc(var(--spacing) * 11)}.min-h-14{min-height:calc(var(--spacing) * 14)}.min-h-24{min-height:calc(var(--spacing) * 24)}.min-h-32{min-height:calc(var(--spacing) * 32)}.min-h-dvh{min-height:100dvh}.min-h-full{min-height:100%}.w-3{width:calc(var(--spacing) * 3)}.w-5{width:calc(var(--spacing) * 5)}.w-8{width:calc(var(--spacing) * 8)}.w-10{width:calc(var(--spacing) * 10)}.w-80{width:calc(var(--spacing) * 80)}.w-auto{width:auto}.w-full{width:100%}.w-max{width:max-content}.max-w-2xl{max-width:var(--container-2xl)}.max-w-3xl{max-width:var(--container-3xl)}.max-w-4xl{max-width:var(--container-4xl)}.max-w-5xl{max-width:var(--container-5xl)}.max-w-\[42rem\]{max-width:42rem}.max-w-max{max-width:max-content}.max-w-xl{max-width:var(--container-xl)}.min-w-0{min-width:calc(var(--spacing) * 0)}.min-w-6{min-width:calc(var(--spacing) * 6)}.min-w-9{min-width:calc(var(--spacing) * 9)}.min-w-11{min-width:calc(var(--spacing) * 11)}.min-w-\[min\(max-content\,calc\(100\%\/var\(--count\)\)\)\]{min-width:min(max-content,calc(100% / var(--count)))}.min-w-full{min-width:100%}.min-w-max{min-width:max-content}.flex-1{flex:1}.flex-\[1_1_0\]{flex:1 1 0}.shrink-0{flex-shrink:0}.-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.-rotate-90{rotate:-90deg}.rotate-0{rotate:none}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.cursor-grab{cursor:grab}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.resize{resize:both}.grid-cols-\[0\.5rem_minmax\(0\,1fr\)\]{grid-template-columns:.5rem minmax(0,1fr)}.grid-cols-\[1fr\]{grid-template-columns:1fr}.grid-cols-\[1fr_auto\]{grid-template-columns:1fr auto}.grid-cols-\[auto_1fr\]{grid-template-columns:auto 1fr}.grid-cols-\[auto_1fr_auto\]{grid-template-columns:auto 1fr auto}.grid-cols-\[minmax\(0\,1fr\)_auto\]{grid-template-columns:minmax(0,1fr) auto}.grid-cols-\[minmax\(0\,1fr\)_minmax\(14rem\,20rem\)_auto\]{grid-template-columns:minmax(0,1fr) minmax(14rem,20rem) auto}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-start{align-items:flex-start}.items-stretch{align-items:stretch}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-start{justify-content:flex-start}.gap-0{gap:calc(var(--spacing) * 0)}.gap-1{gap:calc(var(--spacing) * 1)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-6{gap:calc(var(--spacing) * 6)}.gap-8{gap:calc(var(--spacing) * 8)}:where(.space-y-0>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 0) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 0) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-0\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * .5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * .5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-8>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 8) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 8) * calc(1 - var(--tw-space-y-reverse)))}.gap-x-2{column-gap:calc(var(--spacing) * 2)}.gap-y-1{row-gap:calc(var(--spacing) * 1)}.self-start{align-self:flex-start}.self-stretch{align-self:stretch}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e38px}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-y-2{border-block-style:var(--tw-border-style);border-block-width:2px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-t-2{border-top-style:var(--tw-border-style);border-top-width:2px}.border-r-2{border-right-style:var(--tw-border-style);border-right-width:2px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-l-0{border-left-style:var(--tw-border-style);border-left-width:0}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-l-4{border-left-style:var(--tw-border-style);border-left-width:4px}.border-black{border-color:var(--color-black)}.border-t-\[var\(--color-accent-green\)\]{border-top-color:var(--color-accent-green)}.border-t-\[var\(--color-accent-red\)\]{border-top-color:var(--color-accent-red)}.border-b-\[var\(--color-accent-green\)\]{border-bottom-color:var(--color-accent-green)}.border-b-\[var\(--color-accent-red\)\]{border-bottom-color:var(--color-accent-red)}.bg-\[color-mix\(in_srgb\,var\(--color-accent-lemon\)_28\%\,white\)\]{background-color:#fbffb8}@supports (color:color-mix(in lab,red,red)){.bg-\[color-mix\(in_srgb\,var\(--color-accent-lemon\)_28\%\,white\)\]{background-color:color-mix(in srgb,var(--color-accent-lemon) 28%,white)}}.bg-\[var\(--color-accent-green\)\]{background-color:var(--color-accent-green)}.bg-\[var\(--color-accent-red\)\]{background-color:var(--color-accent-red)}.bg-black{background-color:var(--color-black)}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-white\/0{background-color:#0000}@supports (color:color-mix(in lab,red,red)){.bg-white\/0{background-color:color-mix(in oklab,var(--color-white) 0%,transparent)}}.object-cover{object-fit:cover}.p-0{padding:calc(var(--spacing) * 0)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-6{padding:calc(var(--spacing) * 6)}.px-0{padding-inline:calc(var(--spacing) * 0)}.px-1{padding-inline:calc(var(--spacing) * 1)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pt-6{padding-top:calc(var(--spacing) * 6)}.pt-8{padding-top:calc(var(--spacing) * 8)}.pr-1{padding-right:calc(var(--spacing) * 1)}.pr-2{padding-right:calc(var(--spacing) * 2)}.pr-6{padding-right:calc(var(--spacing) * 6)}.pr-14{padding-right:calc(var(--spacing) * 14)}.pb-1{padding-bottom:calc(var(--spacing) * 1)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.pl-2{padding-left:calc(var(--spacing) * 2)}.pl-3{padding-left:calc(var(--spacing) * 3)}.pl-4{padding-left:calc(var(--spacing) * 4)}.pl-6{padding-left:calc(var(--spacing) * 6)}.pl-9{padding-left:calc(var(--spacing) * 9)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.align-top{vertical-align:top}.font-\[\"Fira_Code\"\,ui-monospace\,monospace\]{font-family:Fira Code,ui-monospace,monospace}.font-\[Charter\,\"Bitstream_Charter\"\,Georgia\,serif\]{font-family:Charter,Bitstream Charter,Georgia,serif}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.leading-5{--tw-leading:calc(var(--spacing) * 5);line-height:calc(var(--spacing) * 5)}.leading-6{--tw-leading:calc(var(--spacing) * 6);line-height:calc(var(--spacing) * 6)}.leading-7{--tw-leading:calc(var(--spacing) * 7);line-height:calc(var(--spacing) * 7)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.tracking-\[0\.05em\]{--tw-tracking:.05em;letter-spacing:.05em}.tracking-\[0\.08em\]{--tw-tracking:.08em;letter-spacing:.08em}.tracking-\[0\.12em\]{--tw-tracking:.12em;letter-spacing:.12em}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-nowrap{white-space:nowrap}.whitespace-pre{white-space:pre}.whitespace-pre-wrap{white-space:pre-wrap}.text-black{color:var(--color-black)}.text-black\/25{color:#00000040}@supports (color:color-mix(in lab,red,red)){.text-black\/25{color:color-mix(in oklab,var(--color-black) 25%,transparent)}}.text-black\/60{color:#0009}@supports (color:color-mix(in lab,red,red)){.text-black\/60{color:color-mix(in oklab,var(--color-black) 60%,transparent)}}.text-black\/70{color:#000000b3}@supports (color:color-mix(in lab,red,red)){.text-black\/70{color:color-mix(in oklab,var(--color-black) 70%,transparent)}}.text-white{color:var(--color-white)}.text-white\/25{color:#ffffff40}@supports (color:color-mix(in lab,red,red)){.text-white\/25{color:color-mix(in oklab,var(--color-white) 25%,transparent)}}.text-white\/80{color:#fffc}@supports (color:color-mix(in lab,red,red)){.text-white\/80{color:color-mix(in oklab,var(--color-white) 80%,transparent)}}.uppercase{text-transform:uppercase}.italic{font-style:italic}.underline{text-decoration-line:underline}.underline-offset-4{text-underline-offset:4px}.opacity-25{opacity:.25}.opacity-60{opacity:.6}.opacity-80{opacity:.8}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.grayscale{--tw-grayscale:grayscale(100%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.invert{--tw-invert:invert(100%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.select-none{-webkit-user-select:none;user-select:none}.first\:pt-0:first-child{padding-top:calc(var(--spacing) * 0)}.last\:pb-0:last-child{padding-bottom:calc(var(--spacing) * 0)}.focus-visible\:outline-2:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px}.focus-visible\:outline-offset-2:focus-visible{outline-offset:2px}.focus-visible\:outline-black:focus-visible{outline-color:var(--color-black)}.active\:cursor-grabbing:active{cursor:grabbing}.active\:bg-\[color-mix\(in_srgb\,var\(--color-accent-sky\)_14\%\,white\)\]:active{background-color:#dbf3ff}@supports (color:color-mix(in lab,red,red)){.active\:bg-\[color-mix\(in_srgb\,var\(--color-accent-sky\)_14\%\,white\)\]:active{background-color:color-mix(in srgb,var(--color-accent-sky) 14%,white)}}.disabled\:opacity-25:disabled{opacity:.25}@media(min-width:40rem){.sm\:w-auto{width:auto}.sm\:px-8{padding-inline:calc(var(--spacing) * 8)}}@media(min-width:48rem){.md\:grid-cols-\[1fr_auto\]{grid-template-columns:1fr auto}.md\:items-center{align-items:center}.md\:justify-end{justify-content:flex-end}}}html,body{color:#000;background:#fff;min-height:100%;margin:0;font-family:Charter,Bitstream Charter,Georgia,serif}body{min-height:100dvh}button,input,textarea{font-family:inherit}::selection{color:#fff;background:#000}:focus-visible{outline-offset:2px;outline:2px solid #000}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}