renku 0.0.3 → 0.0.6

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 (58) hide show
  1. package/LICENSE.md +8 -0
  2. package/README.md +70 -0
  3. package/dist/auth.d.ts +1 -1
  4. package/dist/bash-complete.js +1 -1
  5. package/dist/bun.d.ts +1 -3
  6. package/dist/bun.js +1 -1
  7. package/dist/cli.js +1 -1
  8. package/dist/client.js +1 -1
  9. package/dist/{cloudflare-Dfzl7gGy.js → cloudflare-BVLzalPQ.js} +2 -2
  10. package/dist/cloudflare.d.ts +2 -4
  11. package/dist/cloudflare.js +1 -1
  12. package/dist/cloudflare.worker.d.ts +2 -4
  13. package/dist/cloudflare.worker.js +1 -1
  14. package/dist/{context-Dt3VbTFK.js → context-BZxerv82.js} +1 -1
  15. package/dist/context-store-BpRmbHKI.js +1 -0
  16. package/dist/create-computed-CgSmvZ_e.js +1 -0
  17. package/dist/create-context-OCBKqRIM.js +1 -0
  18. package/dist/create-loader-Bnk94Dhg.js +1 -0
  19. package/dist/data.d.ts +63 -12
  20. package/dist/data.js +1 -1
  21. package/dist/dom.d.ts +3 -4
  22. package/dist/dom.js +1 -1
  23. package/dist/{fragment-CpqsWP0m.d.ts → fragment-Bly9noQG.d.ts} +1 -1
  24. package/dist/{index-BpyLKbnR.d.ts → index-iMWKMtYV.d.ts} +1 -1
  25. package/dist/index.d.ts +14 -13
  26. package/dist/index.js +1 -1
  27. package/dist/jsx-dev-runtime.d.ts +3 -3
  28. package/dist/jsx-dev-runtime.js +1 -1
  29. package/dist/jsx-runtime.d.ts +2 -2
  30. package/dist/jsx-runtime.js +1 -1
  31. package/dist/register-server-function-Dsv6VBSj.js +1 -0
  32. package/dist/{rsc-from-markup-SQg4fJ0z.js → rsc-from-markup-ditxg5su.js} +1 -1
  33. package/dist/server.d.ts +2 -2
  34. package/dist/server.js +1 -1
  35. package/dist/theme.css +59 -0
  36. package/dist/theme.js +0 -0
  37. package/dist/{types-J6ZDxAIC.d.ts → types-BEYIs1ZF.d.ts} +6 -1
  38. package/dist/{types-DazdXa4I.d.ts → types-BSW-pDJE.d.ts} +2 -2
  39. package/dist/ui.d.ts +109 -4
  40. package/dist/ui.js +1 -1
  41. package/dist/{update-dom-node-DnDA0pqF.js → update-dom-node-C7Nskg5l.js} +1 -1
  42. package/dist/virtual-from-jsx-kd8FG7Em.js +1 -0
  43. package/dist/vite.js +1 -1
  44. package/package.json +32 -32
  45. package/dist/create-computed-D9oVNGZ6.js +0 -1
  46. package/dist/register-server-function-DQl0uL7w.js +0 -1
  47. package/dist/virtual-from-jsx-BgQUXZ4d.js +0 -1
  48. /package/dist/{effect-hmzj-Jig.js → effect-Bd9_A9t9.js} +0 -0
  49. /package/dist/{fragment-Chv9FEhP.js → fragment-uL1agXkn.js} +0 -0
  50. /package/dist/{get-route-B1JNCPoL.js → get-route-DL8B9jay.js} +0 -0
  51. /package/dist/{impl-O61EKx7J.js → impl-6Uc2Rt9O.js} +0 -0
  52. /package/dist/{impl-CQ7GTRH2-BsAKEI_H.js → impl-CQ7GTRH2-Db6HOvCd.js} +0 -0
  53. /package/dist/{impl-CRQorzAF.js → impl-D9kbwKWf.js} +0 -0
  54. /package/dist/{impl-vRmneAi-.js → impl-qmFhldR7.js} +0 -0
  55. /package/dist/{jsx-runtime-DvEc5zft.js → jsx-runtime-BhjWaNaK.js} +0 -0
  56. /package/dist/{register-server-function-DoOVejlg.d.ts → register-server-function-CqA4nPaJ.d.ts} +0 -0
  57. /package/dist/{types-DA3_gaOB.d.ts → types-B4Ij4y1d.d.ts} +0 -0
  58. /package/dist/{types-BStlw_FH.d.ts → types-BcEav58N.d.ts} +0 -0
package/LICENSE.md ADDED
@@ -0,0 +1,8 @@
1
+ Copyright © 2025, Benedikt Müller.
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
4
+
5
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
6
+ No licensee or downstream recipient may use the Software (including any modified or derivative versions) to directly compete with the original Licensor by offering it to third parties as a hosted, managed, or Software-as-a-Service (SaaS) product or cloud service where the primary value of the service is the functionality of the Software itself.
7
+
8
+ THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
package/README.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # Renku
2
2
 
3
+ [npm](https://npmjs.com/renku)
4
+
5
+ ## Dependencies
6
+
7
+ - [signal-polyfill](https://github.com/proposal-signals/signal-polyfill) for reactivity
8
+ - [capnweb](https://github.com/cloudflare/capnweb) for RPC
9
+ - [@sqlite.org/sqlite-wasm](https://github.com/sqlite/sqlite-wasm) for client data storage
10
+
3
11
  ## Getting started
4
12
 
5
13
  ```sh
@@ -20,3 +28,65 @@ Renku uses the `class` prop to apply CSS classes to its components (as opposed t
20
28
  <li><a href="/contact" class="link">Contact</a></li>
21
29
  </ul>
22
30
  ```
31
+
32
+ ## Signals
33
+
34
+ ```ts
35
+ import { createSignal, createComputed, type FunctionComponent } from "renku";
36
+
37
+ export const Counter: FunctionComponent<{ start: number }> = ({ start }) => {
38
+ const counter = createSignal(start);
39
+ const isEven = createComputed(() => counter.get() % 2 === 0);
40
+
41
+ return (
42
+ <div>
43
+ <button type="button" onclick={() => counter.set(counter.get() + 1)}>
44
+ Counter: {counter.get()} ({isEven.get() ? "even" : "odd"})
45
+ </button>
46
+ </div>
47
+ );
48
+ };
49
+ ```
50
+
51
+ ## Context
52
+
53
+ ```ts
54
+ import { createContext } from "renku";
55
+
56
+ export const context: Context<{
57
+ counter: Signal.State<number>;
58
+ }> = createContext();
59
+
60
+ export const Parent: FunctionComponent = ({
61
+ children,
62
+ }) => {
63
+ const counter = createSignal(0);
64
+ context.set({ counter });
65
+
66
+ return <div>{children}</div>;
67
+ };
68
+
69
+ export const Child: FunctionComponent = ({
70
+ children,
71
+ }) => {
72
+ const counter = createSignal(0);
73
+ context.get({ counter });
74
+
75
+ return (
76
+ <div>
77
+ <button type="button" onclick={() => counter.set(counter.get() + 1)}>
78
+ Counter: {counter.get()}
79
+ </button>
80
+ </div>
81
+ );
82
+ };
83
+
84
+ export const App: FunctionComponent = () => {
85
+ return (
86
+ <Parent>
87
+ <Child />
88
+ <Child />
89
+ </Parent>
90
+ );
91
+ };
92
+ ```
package/dist/auth.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { t as AuthContext } from "./types-BStlw_FH.js";
1
+ import { t as AuthContext } from "./types-BcEav58N.js";
2
2
 
3
3
  //#region src/auth/auth.d.ts
4
4
  declare const auth: () => AuthContext;
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env bun
2
- import{i as e,n as t,t as n}from"./context-Dt3VbTFK.js";const r=process.argv.slice(3);process.env.COMP_LINE?.endsWith(` `)&&r.push(``),await e(t,r,n(process));try{for(let{completion:i}of await e(t,r,n(process)))process.stdout.write(`${i}\n`)}catch{}
2
+ import{i as e,n as t,t as n}from"./context-BZxerv82.js";const r=process.argv.slice(3);process.env.COMP_LINE?.endsWith(` `)&&r.push(``),await e(t,r,n(process));try{for(let{completion:i}of await e(t,r,n(process)))process.stdout.write(`${i}\n`)}catch{}
package/dist/bun.d.ts CHANGED
@@ -1,6 +1,4 @@
1
- import "./types-BStlw_FH.js";
2
- import "./types-DA3_gaOB.js";
3
- import { n as PathToParams, t as AugmentedRequest } from "./types-DazdXa4I.js";
1
+ import { n as PathToParams, t as AugmentedRequest } from "./types-BSW-pDJE.js";
4
2
  import { RouteMetadata } from "bun:app";
5
3
  import { BunPlugin, Serve } from "bun";
6
4
 
package/dist/bun.js CHANGED
@@ -1 +1 @@
1
- import{n as e,r as t,t as n}from"./rsc-from-markup-SQg4fJ0z.js";import"./virtual-from-jsx-BgQUXZ4d.js";import"./signal-store-0zk-69gB.js";import"./effect-hmzj-Jig.js";const r=async(r,i)=>{let{styles:a,modules:o,pageModule:s,layouts:c}=i,l=s.default();for(let e of c)l=e.default({children:[l],_renku:{styles:a,modules:o}});let u=e(l);if(r.headers.get(`Accept`)===`text/x-component`){let e=n(u);return new Response(e,{headers:{"Content-Type":`text/x-component`}})}let d=t(u);return new Response(d,{headers:{"Content-Type":`text/html`}})},i=({routes:e,bake:t,plugins:n})=>t?{app:{framework:{fileSystemRouterTypes:[{root:`./pages`,serverEntryPoint:`renku/bun`,clientEntryPoint:`renku/client`,style:`nextjs-pages`,layouts:!0,extensions:[`ts`,`tsx`,`mdx`]}],serverComponents:{separateSSRGraph:!1,serverRuntimeImportSource:`renku/server`},plugins:n}},fetch:()=>new Response}:{routes:e,development:!0};export{r as render,i as renku};
1
+ import{n as e,r as t,t as n}from"./rsc-from-markup-ditxg5su.js";import"./virtual-from-jsx-kd8FG7Em.js";import"./signal-store-0zk-69gB.js";import"./effect-Bd9_A9t9.js";const r=async(r,i)=>{let{styles:a,modules:o,pageModule:s,layouts:c}=i,l=s.default();for(let e of c)l=e.default({children:[l],_renku:{styles:a,modules:o}});let u=e(l);if(r.headers.get(`Accept`)===`text/x-component`){let e=n(u);return new Response(e,{headers:{"Content-Type":`text/x-component`}})}let d=t(u);return new Response(d,{headers:{"Content-Type":`text/html`}})},i=({routes:e,bake:t,plugins:n})=>t?{app:{framework:{fileSystemRouterTypes:[{root:`./pages`,serverEntryPoint:`renku/bun`,clientEntryPoint:`renku/client`,style:`nextjs-pages`,layouts:!0,extensions:[`ts`,`tsx`,`mdx`]}],serverComponents:{separateSSRGraph:!1,serverRuntimeImportSource:`renku/server`},plugins:n}},fetch:()=>new Response}:{routes:e,development:!0};export{r as render,i as renku};
package/dist/cli.js CHANGED
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env bun
2
- import{n as e,r as t,t as n}from"./context-Dt3VbTFK.js";await t(e,process.argv.slice(2),n(process));
2
+ import{n as e,r as t,t as n}from"./context-BZxerv82.js";await t(e,process.argv.slice(2),n(process));
package/dist/client.js CHANGED
@@ -1 +1 @@
1
- import{n as e}from"./virtual-from-jsx-BgQUXZ4d.js";import"./signal-store-0zk-69gB.js";import"./effect-hmzj-Jig.js";import{n as t,r as n,t as r}from"./update-dom-node-DnDA0pqF.js";const i=e=>Array.isArray(e)&&e[0]===`A`,a=e=>Array.isArray(e)&&e[0]===`C`,o=e=>Array.isArray(e)&&e[0]===`E`,s=e=>{if(o(e)){let t=[],{children:n,...r}=e[3];if(n)for(let e of n)t.push(s(e));return{type:`element`,value:e[1],key:e[2],props:r,children:t}}return i(e)?{type:`async`,key:e[1],index:e[2]}:a(e)?{type:`client`,key:e[1],path:e[2],name:e[3],props:e[4]}:typeof e==`string`||typeof e==`number`?{type:`text`,value:String(e)}:null},c={virtualNode:void 0},l=async e=>{let t=await fetch(e.pathname,{headers:{Accept:`text/x-component`}});if(t.body&&c.virtualNode){let e=s(await t.json());r({domNode:document.documentElement,oldVirtualNode:c.virtualNode,newVirtualNode:e}),c.virtualNode=e;return}console.error(`No body`)},u=e=>!e.canIntercept||e.hashChange||!!e.downloadRequest||!!e.formData,d=()=>{window.navigation.addEventListener(`navigate`,e=>{if(u(e))return;let t=new URL(e.destination.url);e.intercept({async handler(){await l(t)}})})},f=(r,i)=>{if(i?.type===`element`&&i.value.toLowerCase()===r.tagName.toLowerCase()){i.domNode=r;for(let[a,o]of i.children.entries()){let s=r.childNodes[a];if(s)if(o?.type===`element`)s instanceof HTMLElement&&f(s,o);else if(o?.type===`text`){if(s.textContent===o.value)o.domNode=s;else if(s.nodeType===Node.TEXT_NODE){let e=``;for(let t of i.children)if(t?.type===`text`)e+=t.value;else if(t?.type===`signal`)e+=String(t.value.get());else if(t?.type===`element`)break;s.textContent===e&&(o.domNode=s)}}else o?.type===`signal`?s.textContent===String(o.value.get())&&(o.domNode=s):o?.type===`async`?s.nodeType===Node.COMMENT_NODE&&(o.domNode=s):o?.type===`client`&&s.nodeType===Node.COMMENT_NODE&&(o.domNode=s,import(o.path).then(r=>{let i=e({fn:r[o.name],key:o.key,props:o.props,asyncComponents:[],clientComponents:[]});Array.isArray(i)?n({domNode:s,virtualNode:i,replace:!0}):t({domNode:s,virtualNode:i,replace:!0})}))}}},p=e=>{try{let t=JSON.parse(e);if(o(t)){let e=s(t);f(document.documentElement,e),c.virtualNode=e}else console.warn(`Unhandled: Not RSC Element`)}catch(e){console.error(`Failed to parse RSC chunk:`,e)}};d(),window.__RSC||=[];for(let e of window.__RSC)p(e);window.__RSC.push=e=>(console.log(`streamed rsc line`,e),window.__RSC.length);
1
+ import{n as e}from"./virtual-from-jsx-kd8FG7Em.js";import"./signal-store-0zk-69gB.js";import"./effect-Bd9_A9t9.js";import{n as t,r as n,t as r}from"./update-dom-node-C7Nskg5l.js";const i=e=>Array.isArray(e)&&e[0]===`A`,a=e=>Array.isArray(e)&&e[0]===`C`,o=e=>Array.isArray(e)&&e[0]===`E`,s=e=>{if(o(e)){let t=[],{children:n,...r}=e[3];if(n)for(let e of n)t.push(s(e));return{type:`element`,value:e[1],key:e[2],props:r,children:t}}return i(e)?{type:`async`,key:e[1],index:e[2]}:a(e)?{type:`client`,key:e[1],path:e[2],name:e[3],props:e[4]}:typeof e==`string`||typeof e==`number`?{type:`text`,value:String(e)}:null},c={virtualNode:void 0},l=async e=>{let t=await fetch(e.pathname,{headers:{Accept:`text/x-component`}});if(t.body&&c.virtualNode){let e=s(await t.json());r({domNode:document.documentElement,oldVirtualNode:c.virtualNode,newVirtualNode:e}),c.virtualNode=e;return}console.error(`No body`)},u=e=>!e.canIntercept||e.hashChange||!!e.downloadRequest||!!e.formData,d=()=>{window.navigation.addEventListener(`navigate`,e=>{if(u(e))return;let t=new URL(e.destination.url);e.intercept({async handler(){await l(t)}})})},f=(r,i)=>{if(i?.type===`element`&&i.value.toLowerCase()===r.tagName.toLowerCase()){i.domNode=r;for(let[a,o]of i.children.entries()){let s=r.childNodes[a];if(s)if(o?.type===`element`)s instanceof HTMLElement&&f(s,o);else if(o?.type===`text`){if(s.textContent===o.value)o.domNode=s;else if(s.nodeType===Node.TEXT_NODE){let e=``;for(let t of i.children)if(t?.type===`text`)e+=t.value;else if(t?.type===`signal`)e+=String(t.value.get());else if(t?.type===`element`)break;s.textContent===e&&(o.domNode=s)}}else o?.type===`signal`?s.textContent===String(o.value.get())&&(o.domNode=s):o?.type===`async`?s.nodeType===Node.COMMENT_NODE&&(o.domNode=s):o?.type===`client`&&s.nodeType===Node.COMMENT_NODE&&(o.domNode=s,import(o.path).then(r=>{let i=e({fn:r[o.name],key:o.key,props:o.props,asyncComponents:[],clientComponents:[]});Array.isArray(i)?n({domNode:s,virtualNode:i,replace:!0}):t({domNode:s,virtualNode:i,replace:!0})}))}}},p=e=>{try{let t=JSON.parse(e);if(o(t)){let e=s(t);f(document.documentElement,e),c.virtualNode=e}else console.warn(`Unhandled: Not RSC Element`)}catch(e){console.error(`Failed to parse RSC chunk:`,e)}};d(),window.__RSC||=[];for(let e of window.__RSC)p(e);window.__RSC.push=e=>(console.log(`streamed rsc line`,e),window.__RSC.length);
@@ -1,2 +1,2 @@
1
- import{n as e,r as t,t as n}from"./auth-DivcgvqR.js";import{n as r,r as i,t as a}from"./rsc-from-markup-SQg4fJ0z.js";import{t as o}from"./get-route-B1JNCPoL.js";import{newWorkersRpcResponse as s}from"capnweb";import{clientEntry as c}from"virtual:renku";const l=({namespace:e,name:t,ws:n})=>async(r,i)=>{if(console.log(`🔥`,`DO handler`,typeof t),n){let e=r.headers.get(`Upgrade`);if(!e||e!==`websocket`)return new Response(`Durable Object expected Upgrade: websocket`,{status:426})}if(typeof t==`function`){let e=r.clone();t=await t(e)}return i[e].getByName(t).fetch(r)},u=({rpName:e,sessionExpiryInMinutes:t})=>{t??=60;let r=e=>e*60*1e3;return{"/validate-session":{GET:async(e,t,r)=>n().sessionId?Response.json({isAuthenticated:!0}):Response.json({isAuthenticated:!1})},"/logout":{POST:async(e,t,i)=>{let a=n();a.sessionId&&await t.AUTH_DO.getByName(`session:${a.sessionId}`).logout();let o=new Date(Date.now()-r(10)).toUTCString();return new Response(null,{headers:{"Set-Cookie":`sessionId=; Path=/; SameSite=Strict; Secure; Expires=${o}`}})},GET:async(e,t,i)=>{let a=n();a.sessionId&&await t.AUTH_DO.getByName(`session:${a.sessionId}`).logout();let o=new Date(Date.now()-r(10)).toUTCString();return new Response(null,{status:302,headers:{Location:`/`,"Set-Cookie":`sessionId=; Path=/; SameSite=Strict; Secure; Expires=${o}`}})}},"/creation-options":{POST:async(t,n,r)=>{let{email:i}=await t.json(),a=crypto.randomUUID(),o=n.AUTH_DO.getByName(`user:${a}`),s=new URL(t.url).hostname,c=await o.creationOptions({id:a,email:i,rpId:s,rpName:e});return Response.json(c)}},"/validate-creation":{POST:async(e,t,n)=>{let{name:r,credential:i}=await e.json();return await t.AUTH_DO.getByName(`user:${r}`).validateCreation({name:r,credential:i}),Response.json({ok:!0})}},"/request-options":{POST:async(e,t,n)=>{let r=new URL(e.url).hostname,i=crypto.randomUUID(),a=await t.AUTH_DO.getByName(`challenge:${i}`).requestOptions({rpId:r});return Response.json({id:i,options:a})}},"/validate-request":{POST:async(e,n,i)=>{let{id:a,credential:o}=await e.json(),s=await n.AUTH_DO.getByName(`challenge:${a}`).validateRequest({credential:o,sessionExpiryInMinutes:t});if(s){let e=new Date(Date.now()+r(t)).toUTCString();return Response.json({success:!0},{headers:{"Set-Cookie":`sessionId=${s}; Path=/; SameSite=Strict; Secure; Expires=${e}`}})}return Response.json({error:!0})}}}},d=e=>{let t={};if(!e)return t;let n=e.split(`;`);for(let e of n){let n=e.indexOf(`=`);if(n===-1)continue;let r=e.slice(0,n).trim(),i=e.slice(n+1).trim();r&&(t[r]=i)}return t},f=async({request:t,env:n,authFn:r})=>{let i=e(),a=d(t.headers.get(`cookie`));if(`sessionId`in a&&a.sessionId){if(i.sessionId=a.sessionId,n?.AUTH_DO){let e=await n.AUTH_DO.getByName(`session:${i.sessionId}`).validateSession({sessionExpiryInMinutes:1440});e&&(i.userId=e.userId)}}else i.sessionId=null;return r?r({request:t,authContext:i}):!0},p=new TextEncoder,m=e=>{let t=e[Symbol.asyncIterator]();return new ReadableStream({async pull(e){let{value:n,done:r}=await t.next();if(r)e.close();else{let t=typeof n==`object`?JSON.stringify(n).concat(`
2
- `):n;e.enqueue(p.encode(t))}}})},h=[`favicon.ico`,`.well-known`],g=({routes:e})=>async(n,l,u)=>t(async()=>{let t=new URL(n.url).pathname.split(`/`),d=t[1];if(d&&h.includes(d))return new Response(null,{status:404});let p=o({request:n,routes:e}),g=await f({request:n,env:l,authFn:p?p.auth:null});if(g!==!0)return g||new Response(null,{status:401});if(d===`@renku`){if(t[2]===`rpc`&&t[3]&&t[4]){let e=decodeURIComponent(t[3]),r=decodeURIComponent(t[4]);import.meta.env.DEV||(e=`./functions/${e}.js`),console.log(`☎️ Server function was called:`,e,r);let i=(await import(e))[r];return s(n,i)}return new Response(null,{status:404})}if(!p)return console.warn(`No routing result`),new Response(null,{status:404});if(p.api){let e=Object.assign(n,{params:p.params});return p.api(e,l,u)}let _=null;if(p.route instanceof Promise)_=await(await p.route).default(p.params);else if(p.route&&`default`in p.route&&typeof p.route.default==`function`)_=await p.route.default(p.params);else if(typeof p.route==`function`)_=await p.route(p.params);else return new Response(null,{status:404});let v={styles:[],modules:[]};import.meta.env.DEV?(v.modules.push(`/@vite/client`),v.modules.push(`/@renku/client`)):c&&v.modules.push(c);for(let e of p.layouts)e instanceof Promise?_=await(await e).default({children:_,_renku:v}):`default`in e&&typeof e.default==`function`?_=await e.default({children:_,_renku:v}):typeof e==`function`&&(_=await e({children:_,_renku:v}));let y=r(_);if(n.headers.get(`Accept`)===`text/x-component`){let e=m(a(y));return new Response(e,{headers:{"Content-Type":`text/x-component`}})}let b=m(i(y));return new Response(b,{headers:{"Content-Type":`text/html`}})}),_=({routes:e})=>({fetch:g({routes:e})});export{u as n,l as r,_ as t};
1
+ import{n as e,r as t,t as n}from"./auth-DivcgvqR.js";import{n as r,r as i,t as a}from"./rsc-from-markup-ditxg5su.js";import{t as o}from"./get-route-DL8B9jay.js";import{newWorkersRpcResponse as s}from"capnweb";import{clientEntry as c}from"virtual:renku";const l=({namespace:e,name:t,ws:n})=>async(r,i)=>{if(console.log(`🔥`,`DO handler`,typeof t),n){let e=r.headers.get(`Upgrade`);if(!e||e!==`websocket`)return new Response(`Durable Object expected Upgrade: websocket`,{status:426})}if(typeof t==`function`){let e=r.clone();t=await t(e)}return i[e].getByName(t).fetch(r)},u=({rpName:e,sessionExpiryInMinutes:t})=>{t??=60;let r=e=>e*60*1e3;return{"/validate-session":{GET:async(e,t,r)=>n().sessionId?Response.json({isAuthenticated:!0}):Response.json({isAuthenticated:!1})},"/logout":{POST:async(e,t,i)=>{let a=n();a.sessionId&&await t.AUTH_DO.getByName(`session:${a.sessionId}`).logout();let o=new Date(Date.now()-r(10)).toUTCString();return new Response(null,{headers:{"Set-Cookie":`sessionId=; Path=/; SameSite=Strict; Secure; Expires=${o}`}})},GET:async(e,t,i)=>{let a=n();a.sessionId&&await t.AUTH_DO.getByName(`session:${a.sessionId}`).logout();let o=new Date(Date.now()-r(10)).toUTCString();return new Response(null,{status:302,headers:{Location:`/`,"Set-Cookie":`sessionId=; Path=/; SameSite=Strict; Secure; Expires=${o}`}})}},"/creation-options":{POST:async(t,n,r)=>{let{email:i}=await t.json(),a=crypto.randomUUID(),o=n.AUTH_DO.getByName(`user:${a}`),s=new URL(t.url).hostname,c=await o.creationOptions({id:a,email:i,rpId:s,rpName:e});return Response.json(c)}},"/validate-creation":{POST:async(e,t,n)=>{let{name:r,credential:i}=await e.json();return await t.AUTH_DO.getByName(`user:${r}`).validateCreation({name:r,credential:i}),Response.json({ok:!0})}},"/request-options":{POST:async(e,t,n)=>{let r=new URL(e.url).hostname,i=crypto.randomUUID(),a=await t.AUTH_DO.getByName(`challenge:${i}`).requestOptions({rpId:r});return Response.json({id:i,options:a})}},"/validate-request":{POST:async(e,n,i)=>{let{id:a,credential:o}=await e.json(),s=await n.AUTH_DO.getByName(`challenge:${a}`).validateRequest({credential:o,sessionExpiryInMinutes:t});if(s){let e=new Date(Date.now()+r(t)).toUTCString();return Response.json({success:!0},{headers:{"Set-Cookie":`sessionId=${s}; Path=/; SameSite=Strict; Secure; Expires=${e}`}})}return Response.json({error:!0})}}}},d=e=>{let t={};if(!e)return t;let n=e.split(`;`);for(let e of n){let n=e.indexOf(`=`);if(n===-1)continue;let r=e.slice(0,n).trim(),i=e.slice(n+1).trim();r&&(t[r]=i)}return t},f=async({request:t,env:n,authFn:r})=>{let i=e(),a=d(t.headers.get(`cookie`));if(`sessionId`in a&&a.sessionId){if(i.sessionId=a.sessionId,n?.AUTH_DO){let e=await n.AUTH_DO.getByName(`session:${i.sessionId}`).validateSession({sessionExpiryInMinutes:1440});e&&(i.userId=e.userId)}}else i.sessionId=null;return r?r({request:t,authContext:i}):!0},p=new TextEncoder,m=e=>{let t=e[Symbol.asyncIterator]();return new ReadableStream({async pull(e){let{value:n,done:r}=await t.next();if(r)e.close();else{let t=typeof n==`object`?JSON.stringify(n).concat(`
2
+ `):n;e.enqueue(p.encode(t))}}})},h=[`favicon.ico`,`.well-known`],g=({routes:e})=>async(n,l,u)=>t(async()=>{let t=new URL(n.url).pathname.split(`/`),d=t[1];if(d&&h.includes(d))return new Response(null,{status:404});let p=o({request:n,routes:e}),g=await f({request:n,env:l,authFn:p?p.auth:null});if(g!==!0)return g||new Response(null,{status:401});if(d===`@renku`){if(t[2]===`rpc`&&t[3]&&t[4]){let e=decodeURIComponent(t[3]),r=decodeURIComponent(t[4]);import.meta.env.DEV||(e=`/assets/functions/${e}.js`),console.log(`☎️ Server function was called:`,e,r);let i=(await import(e))[r];return s(n,i)}return new Response(null,{status:404})}if(!p)return console.warn(`No routing result`),new Response(null,{status:404});if(p.api){let e=Object.assign(n,{params:p.params});return p.api(e,l,u)}let _=null;if(p.route instanceof Promise)_=await(await p.route).default(p.params);else if(p.route&&`default`in p.route&&typeof p.route.default==`function`)_=await p.route.default(p.params);else if(typeof p.route==`function`)_=await p.route(p.params);else return new Response(null,{status:404});let v={styles:[],modules:[]};import.meta.env.DEV?(v.modules.push(`/@vite/client`),v.modules.push(`/@renku/client`)):c&&v.modules.push(c);for(let e of p.layouts)e instanceof Promise?_=await(await e).default({children:_,_renku:v}):`default`in e&&typeof e.default==`function`?_=await e.default({children:_,_renku:v}):typeof e==`function`&&(_=await e({children:_,_renku:v}));let y=r(_);if(n.headers.get(`Accept`)===`text/x-component`){let e=m(a(y));return new Response(e,{headers:{"Content-Type":`text/x-component`}})}let b=m(i(y));return new Response(b,{headers:{"Content-Type":`text/html`}})}),_=({routes:e})=>({fetch:g({routes:e})});export{u as n,l as r,_ as t};
@@ -1,5 +1,3 @@
1
- import "./types-BStlw_FH.js";
2
- import "./types-DA3_gaOB.js";
3
- import { r as Routes } from "./types-DazdXa4I.js";
4
- import { n as getAuthRoutes, r as durableObjectHandler, t as renku } from "./index-BpyLKbnR.js";
1
+ import { r as Routes } from "./types-BSW-pDJE.js";
2
+ import { n as getAuthRoutes, r as durableObjectHandler, t as renku } from "./index-iMWKMtYV.js";
5
3
  export { Routes, durableObjectHandler, getAuthRoutes, renku };
@@ -1 +1 @@
1
- import"./auth-DivcgvqR.js";import"./rsc-from-markup-SQg4fJ0z.js";import"./virtual-from-jsx-BgQUXZ4d.js";import"./signal-store-0zk-69gB.js";import"./effect-hmzj-Jig.js";import{n as e,r as t,t as n}from"./cloudflare-Dfzl7gGy.js";import"./get-route-B1JNCPoL.js";export{t as durableObjectHandler,e as getAuthRoutes,n as renku};
1
+ import"./auth-DivcgvqR.js";import"./rsc-from-markup-ditxg5su.js";import"./virtual-from-jsx-kd8FG7Em.js";import"./signal-store-0zk-69gB.js";import"./effect-Bd9_A9t9.js";import{n as e,r as t,t as n}from"./cloudflare-BVLzalPQ.js";export{t as durableObjectHandler,e as getAuthRoutes,n as renku};
@@ -1,7 +1,5 @@
1
- import "./types-BStlw_FH.js";
2
- import "./types-DA3_gaOB.js";
3
- import { r as Routes } from "./types-DazdXa4I.js";
4
- import { n as getAuthRoutes, r as durableObjectHandler, t as renku } from "./index-BpyLKbnR.js";
1
+ import { r as Routes } from "./types-BSW-pDJE.js";
2
+ import { n as getAuthRoutes, r as durableObjectHandler, t as renku } from "./index-iMWKMtYV.js";
5
3
  import { DurableObject } from "cloudflare:workers";
6
4
 
7
5
  //#region src/cloudflare/durable-objects/auth.d.ts
@@ -1 +1 @@
1
- import"./auth-DivcgvqR.js";import"./rsc-from-markup-SQg4fJ0z.js";import"./virtual-from-jsx-BgQUXZ4d.js";import"./signal-store-0zk-69gB.js";import"./effect-hmzj-Jig.js";import{n as e,r as t,t as n}from"./cloudflare-Dfzl7gGy.js";import"./get-route-B1JNCPoL.js";import{DurableObject as r}from"cloudflare:workers";const i=e=>{let t=e.replace(/-/g,`+`).replace(/_/g,`/`).padEnd(Math.ceil(e.length/4)*4,`=`),n=atob(t),r=new Uint8Array(n.length);for(let e=0;e<n.length;e++)r[e]=n.charCodeAt(e);return r},a=e=>btoa(String.fromCharCode(...e)).replace(/=/g,``).replace(/\+/g,`-`).replace(/\//g,`_`);var o=class extends r{challenge=null;constructor(e,t){super(e,t)}createChallenge(){let e=new Uint8Array(16);return self.crypto.getRandomValues(e),this.challenge=a(e),this.challenge}creationOptions({id:e,email:t,rpId:n,rpName:r}){let i=this.createChallenge();return{user:{id:e,name:t,displayName:t},challenge:i,rp:{id:n,name:r},pubKeyCredParams:[{type:`public-key`,alg:-7},{type:`public-key`,alg:-257}]}}async validateCreation({name:e,credential:t}){console.log(`validate`,t);let n=new TextDecoder,r=i(t.response.clientDataJSON),a=JSON.parse(n.decode(r));return a.type===`webauthn.create`&&this.challenge===a.challenge?(this.ctx.storage.kv.put(`credential:${t.id}`,t),this.ctx.storage.kv.put(`name`,e),await this.env.AUTH_DO.getByName(`credential:${t.id}`).storeCredential({name:e,credential:t}),!0):!1}storeCredential({name:e,credential:t}){this.ctx.storage.kv.put(`name`,e),this.ctx.storage.kv.put(`credential`,t)}getChallenge(){return this.challenge}requestOptions({rpId:e}){return{challenge:this.createChallenge(),rpId:e}}async validateRequest({credential:e,sessionExpiryInMinutes:t}){return this.challenge?this.env.AUTH_DO.getByName(`credential:${e.id}`).validateCredential({challenge:this.challenge,credential:e,sessionExpiryInMinutes:t}):!1}async validateCredential({challenge:e,credential:t,sessionExpiryInMinutes:n}){let r=new TextDecoder,a=this.ctx.storage.kv.get(`name`),o=this.ctx.storage.kv.get(`credential`),s=i(t.response.clientDataJSON),c=JSON.parse(r.decode(s));if(console.log(`validateCredential`,{challenge:e,credential:t,clientData:c,storedCredential:o,name:a}),a&&e===c.challenge){let e=crypto.randomUUID();return await this.env.AUTH_DO.getByName(`session:${e}`).createSession({userId:a,sessionExpiryInMinutes:n}),e}return!1}setExpiry(e){this.ctx.storage.kv.put(`expiry`,Date.now()+e*60*1e3)}createSession({userId:e,sessionExpiryInMinutes:t}){this.ctx.storage.kv.put(`userId`,e),this.setExpiry(t)}getUserId(){let e=this.ctx.storage.kv.get(`userId`);return e||(e=crypto.randomUUID(),this.ctx.storage.kv.put(`userId`,e)),e}validateSession({sessionExpiryInMinutes:e}){let t=this.ctx.storage.kv.get(`expiry`),n=this.ctx.storage.kv.get(`userId`);return n&&t&&Date.now()<t?(this.setExpiry(e),{userId:n}):!1}logout(){this.ctx.storage.kv.delete(`userId`)}};export{o as AuthDO,t as durableObjectHandler,e as getAuthRoutes,n as renku};
1
+ import"./auth-DivcgvqR.js";import"./rsc-from-markup-ditxg5su.js";import"./virtual-from-jsx-kd8FG7Em.js";import"./signal-store-0zk-69gB.js";import"./effect-Bd9_A9t9.js";import{n as e,r as t,t as n}from"./cloudflare-BVLzalPQ.js";import{DurableObject as r}from"cloudflare:workers";const i=e=>{let t=e.replace(/-/g,`+`).replace(/_/g,`/`).padEnd(Math.ceil(e.length/4)*4,`=`),n=atob(t),r=new Uint8Array(n.length);for(let e=0;e<n.length;e++)r[e]=n.charCodeAt(e);return r},a=e=>btoa(String.fromCharCode(...e)).replace(/=/g,``).replace(/\+/g,`-`).replace(/\//g,`_`);var o=class extends r{challenge=null;constructor(e,t){super(e,t)}createChallenge(){let e=new Uint8Array(16);return self.crypto.getRandomValues(e),this.challenge=a(e),this.challenge}creationOptions({id:e,email:t,rpId:n,rpName:r}){let i=this.createChallenge();return{user:{id:e,name:t,displayName:t},challenge:i,rp:{id:n,name:r},pubKeyCredParams:[{type:`public-key`,alg:-7},{type:`public-key`,alg:-257}]}}async validateCreation({name:e,credential:t}){console.log(`validate`,t);let n=new TextDecoder,r=i(t.response.clientDataJSON),a=JSON.parse(n.decode(r));return a.type===`webauthn.create`&&this.challenge===a.challenge?(this.ctx.storage.kv.put(`credential:${t.id}`,t),this.ctx.storage.kv.put(`name`,e),await this.env.AUTH_DO.getByName(`credential:${t.id}`).storeCredential({name:e,credential:t}),!0):!1}storeCredential({name:e,credential:t}){this.ctx.storage.kv.put(`name`,e),this.ctx.storage.kv.put(`credential`,t)}getChallenge(){return this.challenge}requestOptions({rpId:e}){return{challenge:this.createChallenge(),rpId:e}}async validateRequest({credential:e,sessionExpiryInMinutes:t}){return this.challenge?this.env.AUTH_DO.getByName(`credential:${e.id}`).validateCredential({challenge:this.challenge,credential:e,sessionExpiryInMinutes:t}):!1}async validateCredential({challenge:e,credential:t,sessionExpiryInMinutes:n}){let r=new TextDecoder,a=this.ctx.storage.kv.get(`name`),o=this.ctx.storage.kv.get(`credential`),s=i(t.response.clientDataJSON),c=JSON.parse(r.decode(s));if(console.log(`validateCredential`,{challenge:e,credential:t,clientData:c,storedCredential:o,name:a}),a&&e===c.challenge){let e=crypto.randomUUID();return await this.env.AUTH_DO.getByName(`session:${e}`).createSession({userId:a,sessionExpiryInMinutes:n}),e}return!1}setExpiry(e){this.ctx.storage.kv.put(`expiry`,Date.now()+e*60*1e3)}createSession({userId:e,sessionExpiryInMinutes:t}){this.ctx.storage.kv.put(`userId`,e),this.setExpiry(t)}getUserId(){let e=this.ctx.storage.kv.get(`userId`);return e||(e=crypto.randomUUID(),this.ctx.storage.kv.put(`userId`,e)),e}validateSession({sessionExpiryInMinutes:e}){let t=this.ctx.storage.kv.get(`expiry`),n=this.ctx.storage.kv.get(`userId`);return n&&t&&Date.now()<t?(this.setExpiry(e),{userId:n}):!1}logout(){this.ctx.storage.kv.delete(`userId`)}};export{o as AuthDO,t as durableObjectHandler,e as getAuthRoutes,n as renku};
@@ -20,4 +20,4 @@ import e from"node:fs";import t from"node:os";import n from"node:path";function
20
20
  `)+`
21
21
  `,usesFlag:e=>e in t||e in n}}function*Le(e,t,n){let{brief:r,fullDescription:i,hideRoute:a}=t,{headers:s}=n.text;yield n.ansiColor?`\x1B[1m${s.usage}\x1B[22m`:s.usage;for(let[t,r]of Object.entries(e))if(!a||!a[t]||n.includeHidden){let e=n.config.caseStyle===`convert-camel-to-kebab`?o(t):t;yield` ${r.formatUsageLine({...n,prefix:[...n.prefix,e]})}`}let c=n.prefix.join(` `);for(let e of Y(n))yield` ${c} ${e}`;if(yield``,yield i??r,n.aliases&&n.aliases.length>0){let e=n.prefix.slice(0,-1).join(` `);yield``,yield n.ansiColor?`\x1B[1m${s.aliases}\x1B[22m`:s.aliases;for(let t of n.aliases)yield` ${e} ${t}`}yield``,yield n.ansiColor?`\x1B[1m${s.flags}\x1B[22m`:s.flags;for(let e of J({},{},n))yield` ${e}`;yield``,yield n.ansiColor?`\x1B[1m${s.commands}\x1B[22m`:s.commands;let l=m(Object.entries(e).filter(([e])=>!a||!a[e]||n.includeHidden).map(([e,t])=>({routeName:V(e,n.config.caseStyle),brief:t.brief,hidden:a&&a[e]})).map(e=>n.ansiColor?[e.hidden?`\x1B[90m${e.routeName}\x1B[39m`:`\x1B[97m${e.routeName}\x1B[39m`,e.hidden?`\x1B[90m${e.brief}\x1B[39m`:`\x1B[03m${e.brief}\x1B[23m`]:[e.routeName,e.brief]),[` `]);for(let e of l)yield` ${e}`}function Z({routes:e,defaultCommand:t,docs:n,aliases:r}){if(Object.entries(e).length===0)throw new d(`Route map must contain at least one route`);let i=r??{},s=new Map;for(let[t,n]of Object.entries(i)){if(t in e)throw new d(`Cannot use "${t}" as an alias when a route with that name already exists`);let r=s.get(n)??[];s.set(n,[...r,t])}let c=t?e[t]:void 0;if(c&&c.kind===R)throw new d(`Cannot use "${t}" as the default command because it is not a Command`);let l=t=>{if(t in i)return i[t];if(t in e)return t};return{kind:R,get brief(){return n.brief},formatUsageLine(e){let t=this.getAllEntries().filter(e=>!e.hidden).map(t=>t.name[e.config.caseStyle]);return`${e.prefix.join(` `)} ${t.join(`|`)} ...`},formatHelp:t=>[...Le(e,n,t)].join(`
22
22
  `)+`
23
- `,getDefaultCommand:()=>c,getOtherAliasesForInput:(e,n)=>{if(t){if(e===t)return{original:[``],"convert-camel-to-kebab":[``]};if(e===``)return{original:[t],"convert-camel-to-kebab":[t]}}let r=a(e),i=l(e);if(!i&&n===`allow-kebab-for-camel`&&(i=l(r)),!i)return{original:[],"convert-camel-to-kebab":[]};let c=[i,...s.get(i)??[]].filter(t=>t!==e&&t!==r);return{original:c,"convert-camel-to-kebab":c.map(o)}},getRoutingTargetForInput:t=>e[t in i?i[t]:t],getAllEntries(){let t=n.hideRoute;return Object.entries(e).map(([e,n])=>({name:{original:e,"convert-camel-to-kebab":o(e)},target:n,aliases:s.get(e)??[],hidden:t?.[e]??!1}))}}}async function Re(e,t,n){let r=await be(e,t,n);n.process.exitCode=r}function Q(e,t){if(e.length<=1)return e[0]??``;if(e.length===2)return e.join(` ${t.conjunction} `);let n=e.slice(0,e.length-1).join(`, `);return t.serialComma&&(n+=`,`),[n,t.conjunction,e[e.length-1]].join(` `)}var $={parse:String,brief:`Target command run by user`,placeholder:`targetCommand`};X({loader:async()=>{let{install:e}=await import(`./impl-CQ7GTRH2-BsAKEI_H.js`);return e},parameters:{flags:{bash:{kind:`parsed`,brief:`Command executed by bash to generate completion proposals`,parse:String,optional:!0,placeholder:`command`}},positional:{kind:`tuple`,parameters:[$]}},docs:{brief:`Installs autocomplete support for target command on all provided shell types`}});function ze(e,t){return X({loader:async()=>{let{install:n}=await import(`./impl-CQ7GTRH2-BsAKEI_H.js`);return function(){return n.call(this,t,e)}},parameters:{},docs:{brief:`Installs ${Q(Object.keys(t),{conjunction:`and`,serialComma:!0})} autocomplete support for ${e}`}})}X({loader:async()=>{let{uninstall:e}=await import(`./impl-CQ7GTRH2-BsAKEI_H.js`);return e},parameters:{flags:{bash:{kind:`boolean`,brief:`Uninstall autocompletion for bash`,optional:!0}},positional:{kind:`tuple`,parameters:[$]}},docs:{brief:`Uninstalls autocomplete support for target command on all selected shell types`}});function Be(e,t){return X({loader:async()=>{let{uninstall:n}=await import(`./impl-CQ7GTRH2-BsAKEI_H.js`);return function(){return n.call(this,t,e)}},parameters:{},docs:{brief:`Uninstalls ${Q(Object.entries(t).filter(([,e])=>e).map(([e])=>e),{conjunction:`and`,serialComma:!0})} autocomplete support for ${e}`}})}var Ve=`renku`,He=`Renku`,Ue=`0.0.3`;const We=Z({routes:{ios:X({loader:async()=>{let{ios:e}=await import(`./impl-O61EKx7J.js`);return e},parameters:{positional:{kind:`tuple`,parameters:[]},flags:{foo:{kind:`parsed`,optional:!0,parse:String,brief:`Foo`}}},docs:{brief:`Nested ios command`}}),android:X({loader:async()=>{let{android:e}=await import(`./impl-O61EKx7J.js`);return e},parameters:{positional:{kind:`tuple`,parameters:[]},flags:{foo:{kind:`parsed`,optional:!0,parse:String,brief:`Foo`}}},docs:{brief:`Nested android command`}})},docs:{brief:`Native app generation`}}),Ge=Z({routes:{foo:X({loader:async()=>{let{foo:e}=await import(`./impl-vRmneAi-.js`);return e},parameters:{positional:{kind:`tuple`,parameters:[]},flags:{foo:{kind:`parsed`,optional:!0,parse:String,brief:`Foo`}}},docs:{brief:`Nested foo command`}}),bar:X({loader:async()=>{let{bar:e}=await import(`./impl-vRmneAi-.js`);return e},parameters:{positional:{kind:`tuple`,parameters:[]},flags:{foo:{kind:`parsed`,optional:!0,parse:String,brief:`Foo`}}},docs:{brief:`Nested bar command`}})},docs:{brief:`Nested commands`}}),Ke=Ce(Z({routes:{subdir:X({loader:async()=>import(`./impl-CRQorzAF.js`),parameters:{positional:{kind:`tuple`,parameters:[]},flags:{foo:{kind:`parsed`,optional:!0,parse:String,brief:`Foo`}}},docs:{brief:`Command in subdirectory`}}),nested:Ge,native:We,install:ze(`my-app`,{bash:`__my-app_bash_complete`}),uninstall:Be(`my-app`,{bash:!0})},docs:{brief:He,hideRoute:{install:!0,uninstall:!0}}}),{name:Ve,versionInfo:{currentVersion:Ue}});function qe(r){return{process:r,os:t,fs:e,path:n}}export{Ee as i,Ke as n,Re as r,qe as t};
23
+ `,getDefaultCommand:()=>c,getOtherAliasesForInput:(e,n)=>{if(t){if(e===t)return{original:[``],"convert-camel-to-kebab":[``]};if(e===``)return{original:[t],"convert-camel-to-kebab":[t]}}let r=a(e),i=l(e);if(!i&&n===`allow-kebab-for-camel`&&(i=l(r)),!i)return{original:[],"convert-camel-to-kebab":[]};let c=[i,...s.get(i)??[]].filter(t=>t!==e&&t!==r);return{original:c,"convert-camel-to-kebab":c.map(o)}},getRoutingTargetForInput:t=>e[t in i?i[t]:t],getAllEntries(){let t=n.hideRoute;return Object.entries(e).map(([e,n])=>({name:{original:e,"convert-camel-to-kebab":o(e)},target:n,aliases:s.get(e)??[],hidden:t?.[e]??!1}))}}}async function Re(e,t,n){let r=await be(e,t,n);n.process.exitCode=r}function Q(e,t){if(e.length<=1)return e[0]??``;if(e.length===2)return e.join(` ${t.conjunction} `);let n=e.slice(0,e.length-1).join(`, `);return t.serialComma&&(n+=`,`),[n,t.conjunction,e[e.length-1]].join(` `)}var $={parse:String,brief:`Target command run by user`,placeholder:`targetCommand`};X({loader:async()=>{let{install:e}=await import(`./impl-CQ7GTRH2-Db6HOvCd.js`);return e},parameters:{flags:{bash:{kind:`parsed`,brief:`Command executed by bash to generate completion proposals`,parse:String,optional:!0,placeholder:`command`}},positional:{kind:`tuple`,parameters:[$]}},docs:{brief:`Installs autocomplete support for target command on all provided shell types`}});function ze(e,t){return X({loader:async()=>{let{install:n}=await import(`./impl-CQ7GTRH2-Db6HOvCd.js`);return function(){return n.call(this,t,e)}},parameters:{},docs:{brief:`Installs ${Q(Object.keys(t),{conjunction:`and`,serialComma:!0})} autocomplete support for ${e}`}})}X({loader:async()=>{let{uninstall:e}=await import(`./impl-CQ7GTRH2-Db6HOvCd.js`);return e},parameters:{flags:{bash:{kind:`boolean`,brief:`Uninstall autocompletion for bash`,optional:!0}},positional:{kind:`tuple`,parameters:[$]}},docs:{brief:`Uninstalls autocomplete support for target command on all selected shell types`}});function Be(e,t){return X({loader:async()=>{let{uninstall:n}=await import(`./impl-CQ7GTRH2-Db6HOvCd.js`);return function(){return n.call(this,t,e)}},parameters:{},docs:{brief:`Uninstalls ${Q(Object.entries(t).filter(([,e])=>e).map(([e])=>e),{conjunction:`and`,serialComma:!0})} autocomplete support for ${e}`}})}var Ve=`renku`,He=`0.0.6`,Ue=`Renku`;const We=Z({routes:{ios:X({loader:async()=>{let{ios:e}=await import(`./impl-6Uc2Rt9O.js`);return e},parameters:{positional:{kind:`tuple`,parameters:[]},flags:{foo:{kind:`parsed`,optional:!0,parse:String,brief:`Foo`}}},docs:{brief:`Nested ios command`}}),android:X({loader:async()=>{let{android:e}=await import(`./impl-6Uc2Rt9O.js`);return e},parameters:{positional:{kind:`tuple`,parameters:[]},flags:{foo:{kind:`parsed`,optional:!0,parse:String,brief:`Foo`}}},docs:{brief:`Nested android command`}})},docs:{brief:`Native app generation`}}),Ge=Z({routes:{foo:X({loader:async()=>{let{foo:e}=await import(`./impl-qmFhldR7.js`);return e},parameters:{positional:{kind:`tuple`,parameters:[]},flags:{foo:{kind:`parsed`,optional:!0,parse:String,brief:`Foo`}}},docs:{brief:`Nested foo command`}}),bar:X({loader:async()=>{let{bar:e}=await import(`./impl-qmFhldR7.js`);return e},parameters:{positional:{kind:`tuple`,parameters:[]},flags:{foo:{kind:`parsed`,optional:!0,parse:String,brief:`Foo`}}},docs:{brief:`Nested bar command`}})},docs:{brief:`Nested commands`}}),Ke=Ce(Z({routes:{subdir:X({loader:async()=>import(`./impl-D9kbwKWf.js`),parameters:{positional:{kind:`tuple`,parameters:[]},flags:{foo:{kind:`parsed`,optional:!0,parse:String,brief:`Foo`}}},docs:{brief:`Command in subdirectory`}}),nested:Ge,native:We,install:ze(`my-app`,{bash:`__my-app_bash_complete`}),uninstall:Be(`my-app`,{bash:!0})},docs:{brief:Ue,hideRoute:{install:!0,uninstall:!0}}}),{name:Ve,versionInfo:{currentVersion:He}});function qe(r){return{process:r,os:t,fs:e,path:n}}export{Ee as i,Ke as n,Re as r,qe as t};
@@ -0,0 +1 @@
1
+ const e={current:void 0,set(e,t){this.current||=new Map,this.current.set(e,t)},get(e){return this.current?.get(e)}};export{e as t};
@@ -0,0 +1 @@
1
+ import{n as e,t}from"./signal-store-0zk-69gB.js";const n=e=>t.get(e),r=t=>new e.Computed(t);export{n,r as t};
@@ -0,0 +1 @@
1
+ import{t as e}from"./context-store-BpRmbHKI.js";const t=t=>{let n=Symbol(`context`);return{set:t=>{e.set(n,t)},get:()=>{let r=e.get(n);if(r===void 0&&t!==void 0)return t;if(r===void 0)throw Error(`Context value not found. Make sure to use provide() in a parent component.`);return r}}};export{t};
@@ -0,0 +1 @@
1
+ import{n as e}from"./create-computed-CgSmvZ_e.js";function t(t,n){let r=e({status:`loading`,error:!1,data:null});return r.get().status===`loading`&&t().then(async e=>{if(!n)r.set({status:`success`,error:!1,data:e});else{let t=n(e),i=t instanceof Promise?await t:t;r.set({status:`success`,error:!1,data:i})}}).catch(e=>r.set({status:`error`,error:e,data:null})),r}export{t};
package/dist/data.d.ts CHANGED
@@ -1,5 +1,6 @@
1
- import { n as Signal, t as Loader } from "./types-J6ZDxAIC.js";
1
+ import { n as Loader, o as Signal } from "./types-BEYIs1ZF.js";
2
2
  import { RpcStub, RpcTarget } from "capnweb";
3
+ import { StandardJSONSchemaV1, StandardSchemaV1 } from "@standard-schema/spec";
3
4
 
4
5
  //#region src/data/schema/types.d.ts
5
6
  interface Schema {
@@ -10,6 +11,15 @@ interface ObjectSchema {
10
11
  [key: string]: PropertySchema;
11
12
  }
12
13
  type PropertySchema = IdSchema | StringSchema | NumberSchema | BooleanSchema;
14
+ /**
15
+ * Enhanced ObjectSchema with Standard Schema v1 support.
16
+ * Includes validation and JSON Schema generation capabilities.
17
+ */
18
+ type EnhancedObjectSchema<T extends ObjectSchema> = T & StandardSchemaV1<Item<T>, Item<T>> & StandardJSONSchemaV1<Item<T>, Item<T>>;
19
+ /**
20
+ * Enhanced Schema type where each collection becomes a Standard Schema.
21
+ */
22
+ type EnhancedSchema<T extends Schema> = { [K in keyof T]: EnhancedObjectSchema<T[K]> };
13
23
  interface IdSchema extends PropertyBaseSchema {
14
24
  type: "string";
15
25
  required: true;
@@ -36,15 +46,6 @@ interface PropertyBaseSchema {
36
46
  mock?: () => string | number | boolean;
37
47
  }
38
48
  //#endregion
39
- //#region src/data/db/types.d.ts
40
- type Binding = string | number;
41
- interface Database {
42
- exec: (sql: string, ...bind: Binding[]) => void;
43
- query: <T = unknown>(sql: string, ...bindings: unknown[]) => T[];
44
- transaction: (callback: (db: Database) => void) => void;
45
- clientId: string;
46
- }
47
- //#endregion
48
49
  //#region src/data/sync/types.d.ts
49
50
  interface SyncMessage {
50
51
  id: string;
@@ -68,6 +69,15 @@ declare class MessageQueue {
68
69
  add(message: SyncMessage): void;
69
70
  }
70
71
  //#endregion
72
+ //#region src/data/db/types.d.ts
73
+ type Binding = string | number;
74
+ interface Database {
75
+ exec: (sql: string, ...bind: Binding[]) => void;
76
+ query: <T = unknown>(sql: string, ...bindings: unknown[]) => T[];
77
+ transaction: (callback: (db: Database) => void) => void;
78
+ clientId: string;
79
+ }
80
+ //#endregion
71
81
  //#region src/data/collection/collection.d.ts
72
82
  declare class Collection<T extends Schema, K$1 extends keyof T> {
73
83
  #private;
@@ -208,9 +218,50 @@ declare class ClientData<T extends Schema> extends Data<T> {
208
218
  }
209
219
  //#endregion
210
220
  //#region src/data/schema/schema.d.ts
211
- declare const schema$1: <T extends Schema>(schema: T) => T;
221
+ /**
222
+ * Creates an enhanced schema with Standard Schema v1 validation and
223
+ * JSON Schema generation support.
224
+ *
225
+ * Each collection in the schema becomes its own Standard Schema that supports:
226
+ * - Item-level validation (required fields, type checking)
227
+ * - JSON Schema generation (draft-2020-12, draft-07)
228
+ *
229
+ * @param inputSchema - The Renku schema definition
230
+ * @returns Enhanced schema with Standard Schema support
231
+ *
232
+ * @example
233
+ * ```ts
234
+ * const mySchema = schema({
235
+ * user: {
236
+ * id,
237
+ * email: { type: "string", required: true },
238
+ * age: { type: "number" },
239
+ * },
240
+ * });
241
+ *
242
+ * // Validate an item
243
+ * const result = mySchema.user["~standard"].validate({ ... });
244
+ *
245
+ * // Generate JSON Schema
246
+ * const jsonSchema = mySchema.user["~standard"].jsonSchema.output({
247
+ * target: "draft-2020-12"
248
+ * });
249
+ * ```
250
+ */
251
+ declare const schema$1: <T extends Schema>(inputSchema: T) => EnhancedSchema<T>;
212
252
  //#endregion
213
253
  //#region src/data/schema/id.d.ts
214
254
  declare const id: IdSchema;
215
255
  //#endregion
216
- export { ClientData, type IdSchema, type Item, type Schema, ServerData, id, schema$1 as schema };
256
+ //#region src/data/schema/validate.d.ts
257
+ /**
258
+ * Helper function for property-level validation.
259
+ * Validates a single property value against a property schema.
260
+ *
261
+ * @param propertySchema - The property schema to validate against
262
+ * @param value - The value to validate
263
+ * @returns Standard Schema validation result
264
+ */
265
+ declare function validatePropertyValue(propertySchema: PropertySchema, value: unknown): StandardSchemaV1.Result<string | number | boolean>;
266
+ //#endregion
267
+ export { ClientData, type EnhancedObjectSchema, type EnhancedSchema, type IdSchema, type Item, type Schema, ServerData, id, schema$1 as schema, validatePropertyValue };
package/dist/data.js CHANGED
@@ -1 +1 @@
1
- import"./signal-store-0zk-69gB.js";import{n as e,r as t,t as n}from"./create-computed-D9oVNGZ6.js";import{RpcStub as r,RpcTarget as i}from"capnweb";import"@sqlite.org/sqlite-wasm";const a=({client:e,object:t,item:n})=>{let{id:r,...i}=n;return{id:crypto.randomUUID(),timestamp:Date.now().toString(),client:e,object:t,item:r,updates:JSON.stringify(i)}};var o=class{#e=new Set;subscribe(e){return this.#e.add(e),()=>{this.#e.delete(e)}}#t(e){console.log(`this.#subscriptions`,this.#e);for(let t of this.#e){if(t.filter&&!t.filter(e))continue;console.log(`✉️`,`Dispatching`,t.label);let n=t.subscriber(e);n instanceof Promise&&n.catch(e=>{console.error(`MessageQueue subscriber failed.`,e)})}}add(e){this.#t(e)}},s=class{#e;#t;#n;#r=t([]);#i;#a;constructor({name:e,obj:t,clientId:n,messageQueue:r,db:i}){this.#a=i,this.#e=n,this.#t=e,this.#n=t,this.#i=r,this.#i.subscribe({subscriber:e=>this.#o(e),filter:e=>e.object===this.#t,label:`Collection: ${this.#t}`})}mock(){return Object.entries(this.#n).reduce((e,[t,n])=>(e[t]=n.mock?n.mock():void 0,e),{})}#o(e){console.log(e);let t={id:e.item,...JSON.parse(e.updates)};this.#r.set(this.#r.get().concat(t))}#s(){if(this.#a){let e=`SELECT * FROM obj_${this.#t}`;this.#r.set(this.#a.query(e))}}get items(){return this.#s(),this.#r}query({filter:e,limit:t,first:r}={}){return n(()=>{let n=this.#r.get().filter(e||(()=>!0));return(t||r)&&(n=n.slice(0,r?1:t)),n})}first(e={}){return e.first=!0,n(()=>{let t=this.query(e).get();return t.length>0?t[0]:void 0})}all(){return this.query()}add(e){let t=a({client:this.#e,object:this.#t,item:e});return this.#i.add(t),e}};const c=({schema:e,clientId:t,messageQueue:n,db:r})=>Object.entries(e).reduce((e,[i,a])=>{let o=i;return e[o]=new s({name:i,obj:a,clientId:t,messageQueue:n,db:r}),e},{}),l=e=>t=>{e.transaction(e=>{if(e.exec(`INSERT INTO __crdt (id, timestamp, client, object, item, updates) VALUES (?, ?, ?, ?, ?, ?);`,t.id,t.timestamp,t.client,t.object,t.item,t.updates),t.updates===`DELETE`)e.exec(`DELETE FROM obj_${t.object} WHERE id = ?;`,t.item);else{let n=[t.item],r=JSON.parse(t.updates),i=[`id`].concat(Object.keys(r));n.push(...Object.values(r));let a=`INSERT INTO obj_${t.object} (${i.join(`, `)}) VALUES (${n.map(()=>`?`).join(`, `)});`;e.exec(a,...n)}})};var u=class extends i{#e;constructor(e){super(),this.#e=e}get items(){return this.#e.items.get()}query(e={}){return this.#e.query(e).get()}first(e={}){return this.#e.first(e).get()}all(){return this.query()}add(e){this.#e.add(e)}};const d=e=>{let t=Object.entries(e).reduce((e,[t,n])=>{let r=t;return e[r]=new u(n),e},{});return console.log(`remoteCollections:`,t),t};var f=class extends i{#e;#t;#n;messageQueue=new o;#r;#i;constructor({schema:e,db:t}){super(),this.#e=e,t?(this.#n=t,this.#t=this.#n.clientId,this.messageQueue.subscribe({subscriber:l(this.#n),label:`Local database (Client ID: ${this.#t})`})):this.#t=crypto.randomUUID(),this.#r=c({schema:this.#e,clientId:this.#t,messageQueue:this.messageQueue,db:this.#n}),this.#i=d(this.#r)}get _collections(){return this.#r}get _remoteCollections(){return this.#i}get schema(){return this.#e}get clientId(){return this.#t}ingest(e){console.log(`📳📳📳`,`Ingest`,e),this.messageQueue.add(e)}async[Symbol.dispose](){console.log(`🗑️🗑️🗑️`,`Data RPC disposing (Client ID: ${this.clientId})`)}};const p=e=>{switch(e){case`string`:return`TEXT`;case`number`:return`INTEGER`;case`boolean`:return`INTEGER`;default:throw Error(`Unsupported type: ${String(e)}`)}},m=e=>{let t=``;for(let[n,r]of Object.entries(e)){let e=Object.entries(r).map(([e,t])=>`${e} ${p(t.type)}`).join(`, `);e&&(t+=`CREATE TABLE IF NOT EXISTS obj_${n} (${e});`)}return t+=`CREATE TABLE IF NOT EXISTS __renku (id TEXT NOT NULL PRIMARY KEY, value TEXT NOT NULL);`,t+=`INSERT INTO __renku (id, value) VALUES ('client_id', '${crypto.randomUUID()}') ON CONFLICT (id) DO NOTHING;`,t+=`CREATE TABLE IF NOT EXISTS __crdt (id TEXT NOT NULL PRIMARY KEY, timestamp TEXT NOT NULL, client TEXT NOT NULL, object TEXT NOT NULL, item TEXT NOT NULL, updates TEXT);`,t},h=({db:e,schema:t})=>{let n=m(t);e.exec(n);let r=e.query(`SELECT value FROM __renku WHERE id = 'client_id' LIMIT 1`);if(!r[0])throw Error(`Client ID not found`);e.clientId=r[0].value};var g=class t extends f{#e;#t;constructor({schema:e,db:t,remote:n}){if(super({schema:e,db:t}),this.#e=n,this.#e){this.#e.connect({clientId:this.clientId,ingest:this.ingest.bind(this)}).then(e=>{console.log(`📳📳📳`,`Remote is connected`,e),this.#t=e}).catch(e=>{console.error(`Remote connect failed:`,e)});let e=this.messageQueue.subscribe({subscriber:async e=>{await this.#e?.ingest(e),console.log(`Send to remote`,e)},filter:e=>e.client===this.clientId,label:`Remote`});this.#e.onRpcBroken(()=>{console.log(`Remote connection broken, unsubscribing ...`),e()})}}static async client({schema:e,remote:n}){return typeof n==`function`&&(n=await n()),new t({schema:e,db:!1,remote:n})}static signal({schema:t,remote:n}){return e(()=>this.client({schema:t,remote:n}))}get collections(){return this._collections}async load(){console.log(`Loading data ...`,this.#e);let e=await this.#e?.load();console.log(`Loaded data:`,e)}async[Symbol.dispose](){console.log(`🗑️ Client Data RPC disposing (CID: ${this.clientId})`),this.#t&&await this.#t()}};const _=e=>{let t={exec:(t,...n)=>e.sql.exec(t,...n),query:(t,...n)=>e.sql.exec(t,...n).toArray(),transaction:n=>e.transactionSync(()=>n(t))};return t};var v=class e extends f{constructor({schema:e,db:t}){super({schema:e,db:t})}static durableObject({schema:t,storage:n}){let r=_(n);return h({db:r,schema:t}),new e({schema:t,db:r})}get collections(){return this._remoteCollections}async load(){return`Test loaded data`}async connect({clientId:e,ingest:t}){console.log(`📳📳📳`,`connect from`,e,t),t.onRpcBroken(()=>{console.log(`📳📳📳`,e,`Ingest RPC broken`)});let n=t.dup();console.log(`Subscribing client`,e);let r=this.messageQueue.subscribe({subscriber:async e=>await n({...e,id:`${e.id}-CONNECT-${crypto.randomUUID()}`}),filter:t=>t.client!==e,label:`Client: ${e}`});return console.log(`Sending test message to client`),console.log(`📳📳📳`,e,`End of connect`),new Promise((e,n)=>{t.onRpcBroken(e=>{r(),n(e)})})}};const y=e=>e,b={type:`string`,required:!0,unique:!0,mock:()=>crypto.randomUUID().toString()};export{g as ClientData,v as ServerData,b as id,y as schema};
1
+ import"./signal-store-0zk-69gB.js";import{n as e,t}from"./create-computed-CgSmvZ_e.js";import{t as n}from"./create-loader-Bnk94Dhg.js";import{RpcStub as r,RpcTarget as i}from"capnweb";import"@sqlite.org/sqlite-wasm";const a=e=>{switch(e){case`string`:return`TEXT`;case`number`:return`INTEGER`;case`boolean`:return`INTEGER`;default:throw Error(`Unsupported type: ${String(e)}`)}},o=e=>{let t=``;for(let[n,r]of Object.entries(e)){let e=Object.entries(r).map(([e,t])=>`${e} ${a(t.type)}`).join(`, `);e&&(t+=`CREATE TABLE IF NOT EXISTS obj_${n} (${e});`)}return t+=`CREATE TABLE IF NOT EXISTS __renku (id TEXT NOT NULL PRIMARY KEY, value TEXT NOT NULL);`,t+=`INSERT INTO __renku (id, value) VALUES ('client_id', '${crypto.randomUUID()}') ON CONFLICT (id) DO NOTHING;`,t+=`CREATE TABLE IF NOT EXISTS __crdt (id TEXT NOT NULL PRIMARY KEY, timestamp TEXT NOT NULL, client TEXT NOT NULL, object TEXT NOT NULL, item TEXT NOT NULL, updates TEXT);`,t},s=({db:e,schema:t})=>{let n=o(t);e.exec(n);let r=e.query(`SELECT value FROM __renku WHERE id = 'client_id' LIMIT 1`);if(!r[0])throw Error(`Client ID not found`);e.clientId=r[0].value},c=({client:e,object:t,item:n})=>{let{id:r,...i}=n;return{id:crypto.randomUUID(),timestamp:Date.now().toString(),client:e,object:t,item:r,updates:JSON.stringify(i)}};var l=class{#e=new Set;subscribe(e){return this.#e.add(e),()=>{this.#e.delete(e)}}#t(e){console.log(`this.#subscriptions`,this.#e);for(let t of this.#e){if(t.filter&&!t.filter(e))continue;console.log(`✉️`,`Dispatching`,t.label);let n=t.subscriber(e);n instanceof Promise&&n.catch(e=>{console.error(`MessageQueue subscriber failed.`,e)})}}add(e){this.#t(e)}},u=class{#e;#t;#n;#r=e([]);#i;#a;constructor({name:e,obj:t,clientId:n,messageQueue:r,db:i}){this.#a=i,this.#e=n,this.#t=e,this.#n=t,this.#i=r,this.#i.subscribe({subscriber:e=>this.#o(e),filter:e=>e.object===this.#t,label:`Collection: ${this.#t}`})}mock(){return Object.entries(this.#n).reduce((e,[t,n])=>(e[t]=n.mock?n.mock():void 0,e),{})}#o(e){console.log(e);let t={id:e.item,...JSON.parse(e.updates)};this.#r.set(this.#r.get().concat(t))}#s(){if(this.#a){let e=`SELECT * FROM obj_${this.#t}`;this.#r.set(this.#a.query(e))}}get items(){return this.#s(),this.#r}query({filter:e,limit:n,first:r}={}){return t(()=>{let t=this.#r.get().filter(e||(()=>!0));return(n||r)&&(t=t.slice(0,r?1:n)),t})}first(e={}){return e.first=!0,t(()=>{let t=this.query(e).get();return t.length>0?t[0]:void 0})}all(){return this.query()}add(e){let t=c({client:this.#e,object:this.#t,item:e});return this.#i.add(t),e}};const d=({schema:e,clientId:t,messageQueue:n,db:r})=>Object.entries(e).reduce((e,[i,a])=>{let o=i;return e[o]=new u({name:i,obj:a,clientId:t,messageQueue:n,db:r}),e},{}),f=e=>t=>{e.transaction(e=>{if(e.exec(`INSERT INTO __crdt (id, timestamp, client, object, item, updates) VALUES (?, ?, ?, ?, ?, ?);`,t.id,t.timestamp,t.client,t.object,t.item,t.updates),t.updates===`DELETE`)e.exec(`DELETE FROM obj_${t.object} WHERE id = ?;`,t.item);else{let n=[t.item],r=JSON.parse(t.updates),i=[`id`].concat(Object.keys(r));n.push(...Object.values(r));let a=`INSERT INTO obj_${t.object} (${i.join(`, `)}) VALUES (${n.map(()=>`?`).join(`, `)});`;e.exec(a,...n)}})};var p=class extends i{#e;constructor(e){super(),this.#e=e}get items(){return this.#e.items.get()}query(e={}){return this.#e.query(e).get()}first(e={}){return this.#e.first(e).get()}all(){return this.query()}add(e){this.#e.add(e)}};const m=e=>{let t=Object.entries(e).reduce((e,[t,n])=>{let r=t;return e[r]=new p(n),e},{});return console.log(`remoteCollections:`,t),t};var h=class extends i{#e;#t;#n;messageQueue=new l;#r;#i;constructor({schema:e,db:t}){super(),this.#e=e,t?(this.#n=t,this.#t=this.#n.clientId,this.messageQueue.subscribe({subscriber:f(this.#n),label:`Local database (Client ID: ${this.#t})`})):this.#t=crypto.randomUUID(),this.#r=d({schema:this.#e,clientId:this.#t,messageQueue:this.messageQueue,db:this.#n}),this.#i=m(this.#r)}get _collections(){return this.#r}get _remoteCollections(){return this.#i}get schema(){return this.#e}get clientId(){return this.#t}ingest(e){console.log(`📳📳📳`,`Ingest`,e),this.messageQueue.add(e)}async[Symbol.dispose](){console.log(`🗑️🗑️🗑️`,`Data RPC disposing (Client ID: ${this.clientId})`)}},g=class e extends h{#e;#t;constructor({schema:e,db:t,remote:n}){if(super({schema:e,db:t}),this.#e=n,this.#e){this.#e.connect({clientId:this.clientId,ingest:this.ingest.bind(this)}).then(e=>{console.log(`📳📳📳`,`Remote is connected`,e),this.#t=e}).catch(e=>{console.error(`Remote connect failed:`,e)});let e=this.messageQueue.subscribe({subscriber:async e=>{await this.#e?.ingest(e),console.log(`Send to remote`,e)},filter:e=>e.client===this.clientId,label:`Remote`});this.#e.onRpcBroken(()=>{console.log(`Remote connection broken, unsubscribing ...`),e()})}}static async client({schema:t,remote:n}){return typeof n==`function`&&(n=await n()),new e({schema:t,db:!1,remote:n})}static signal({schema:e,remote:t}){return n(()=>this.client({schema:e,remote:t}))}get collections(){return this._collections}async load(){console.log(`Loading data ...`,this.#e);let e=await this.#e?.load();console.log(`Loaded data:`,e)}async[Symbol.dispose](){console.log(`🗑️ Client Data RPC disposing (CID: ${this.clientId})`),this.#t&&await this.#t()}};const _=e=>{let t={exec:(t,...n)=>e.sql.exec(t,...n),query:(t,...n)=>e.sql.exec(t,...n).toArray(),transaction:n=>e.transactionSync(()=>n(t))};return t};var v=class e extends h{constructor({schema:e,db:t}){super({schema:e,db:t})}static durableObject({schema:t,storage:n}){let r=_(n);return s({db:r,schema:t}),new e({schema:t,db:r})}get collections(){return this._remoteCollections}async load(){return`Test loaded data`}async connect({clientId:e,ingest:t}){console.log(`📳📳📳`,`connect from`,e,t),t.onRpcBroken(()=>{console.log(`📳📳📳`,e,`Ingest RPC broken`)});let n=t.dup();return console.log(`Subscribing client`,e),this.messageQueue.subscribe({subscriber:async e=>await n({...e,id:`${e.id}-CONNECT-${crypto.randomUUID()}`}),filter:t=>t.client!==e,label:`Client: ${e}`})}};function y(e,t,n){return e.type===`string`?typeof t==`string`?{value:t}:{issues:[{message:`Expected string for ${n}, got ${typeof t}`}]}:e.type===`number`?typeof t==`number`?{value:t}:{issues:[{message:`Expected number for ${n}, got ${typeof t}`}]}:e.type===`boolean`?typeof t==`boolean`?{value:t}:{issues:[{message:`Expected boolean for ${n}, got ${typeof t}`}]}:{issues:[{message:`Unknown property type for ${n}`}]}}function b(e,t){return n=>{if(typeof n!=`object`||!n||Array.isArray(n))return{issues:[{message:`Expected object for ${e}, got ${typeof n}`}]};let r=n,i=[];for(let[e,n]of Object.entries(t)){if(n.required&&!(e in r)){i.push({message:`Missing required field: ${e}`,path:[e]});continue}if(e in r){let t=y(n,r[e],e);if(t.issues)for(let n of t.issues)i.push({...n,path:[e,...n.path||[]]})}}return i.length>0?{issues:i}:{value:r}}}function x(e,t){return y(e,t,`property`)}function S(e){let t={};return t.type=e.type,t}function C(e){let t=t=>{if(t.target!==`draft-2020-12`&&t.target!==`draft-07`)throw Error(`Unsupported JSON Schema target: ${t.target}. Supported targets: draft-2020-12, draft-07`);let n={},r=[];for(let[t,i]of Object.entries(e))n[t]=S(i),i.required===!0&&r.push(t);let i={$schema:t.target===`draft-2020-12`?`https://json-schema.org/draft/2020-12/schema`:`http://json-schema.org/draft-07/schema#`,type:`object`,properties:n,additionalProperties:!1};return r.length>0&&(i.required=r),i};return{input:t,output:t}}const w=e=>{let t={};for(let[n,r]of Object.entries(e))t[n]={...r,"~standard":{version:1,vendor:`renku`,validate:b(n,r),jsonSchema:C(r),types:{input:void 0,output:void 0}}};return t},T={type:`string`,required:!0,unique:!0,mock:()=>crypto.randomUUID().toString()};export{g as ClientData,v as ServerData,T as id,w as schema,x as validatePropertyValue};
package/dist/dom.d.ts CHANGED
@@ -1,8 +1,7 @@
1
- import "./types-BStlw_FH.js";
2
- import { o as RenkuNode, r as FunctionComponent } from "./types-DA3_gaOB.js";
3
- import { r as Routes } from "./types-DazdXa4I.js";
1
+ import { o as RenkuNode, r as FunctionComponent } from "./types-B4Ij4y1d.js";
2
+ import { r as Routes } from "./types-BSW-pDJE.js";
4
3
 
5
- //#region src/router/Router.d.ts
4
+ //#region src/router/router.d.ts
6
5
  declare const Router: FunctionComponent<{
7
6
  routes: Routes<any>;
8
7
  }>;
package/dist/dom.js CHANGED
@@ -1 +1 @@
1
- import{t as e}from"./virtual-from-jsx-BgQUXZ4d.js";import"./signal-store-0zk-69gB.js";import"./effect-hmzj-Jig.js";import{n as t,r as n}from"./update-dom-node-DnDA0pqF.js";import{t as r}from"./get-route-B1JNCPoL.js";import"./fragment-Chv9FEhP.js";import{n as i}from"./jsx-runtime-DvEc5zft.js";const a=async({routes:e})=>{let t=r({request:new Request(window.location.href),routes:e}),n=null;if(!t||t.api)return i(`div`,{children:`Not Found`});if(t.route instanceof Promise)n=await(await t.route).default(t.params);else if(typeof t.route==`function`)n=t.route(t.params);else return i(`div`,{children:`Not Found`});for(let e of t.layouts)e instanceof Promise?n=await(await e).default({children:n}):typeof e==`function`&&(n=await e({children:n}));return n},o=(r,i)=>{let a=e({node:r});i.replaceChildren(),Array.isArray(a)?n({domNode:i,virtualNode:a}):t({domNode:i,virtualNode:a})};export{a as Router,o as render};
1
+ import{t as e}from"./virtual-from-jsx-kd8FG7Em.js";import"./signal-store-0zk-69gB.js";import"./effect-Bd9_A9t9.js";import{n as t,r as n}from"./update-dom-node-C7Nskg5l.js";import{t as r}from"./get-route-DL8B9jay.js";import{n as i}from"./jsx-runtime-BhjWaNaK.js";const a=async({routes:e})=>{let t=r({request:new Request(window.location.href),routes:e}),n=null;if(!t||t.api)return i(`div`,{children:`Not Found`});if(t.route instanceof Promise)n=await(await t.route).default(t.params);else if(typeof t.route==`function`)n=t.route(t.params);else return i(`div`,{children:`Not Found`});for(let e of t.layouts)e instanceof Promise?n=await(await e).default({children:n}):typeof e==`function`&&(n=await e({children:n}));return n},o=(r,i)=>{let a=e({node:r});i.replaceChildren(),Array.isArray(a)?n({domNode:i,virtualNode:a}):t({domNode:i,virtualNode:a})};export{a as Router,o as render};
@@ -1,4 +1,4 @@
1
- import { n as FragmentComponent } from "./types-DA3_gaOB.js";
1
+ import { n as FragmentComponent } from "./types-B4Ij4y1d.js";
2
2
 
3
3
  //#region src/jsx/fragment.d.ts
4
4
  declare const Fragment: FragmentComponent;
@@ -1,4 +1,4 @@
1
- import { r as Routes } from "./types-DazdXa4I.js";
1
+ import { r as Routes } from "./types-BSW-pDJE.js";
2
2
 
3
3
  //#region src/cloudflare/durable-object-handler.d.ts
4
4
  declare const durableObjectHandler: ({
package/dist/index.d.ts CHANGED
@@ -1,9 +1,7 @@
1
- import "./types-BStlw_FH.js";
2
- import { a as LayoutComponent, r as FunctionComponent } from "./types-DA3_gaOB.js";
3
- import { r as Routes } from "./types-DazdXa4I.js";
4
- import { n as Signal, t as Loader } from "./types-J6ZDxAIC.js";
5
- import { t as registerServerFunction } from "./register-server-function-DoOVejlg.js";
6
- import { RpcStub, RpcStub as RpcStub$1, RpcTarget, RpcTarget as RpcTarget$1 } from "capnweb";
1
+ import { a as LayoutComponent, r as FunctionComponent } from "./types-B4Ij4y1d.js";
2
+ import { r as Routes } from "./types-BSW-pDJE.js";
3
+ import { a as RpcTarget, i as RpcStub, n as Loader, o as Signal, r as RpcCompatible, t as Context } from "./types-BEYIs1ZF.js";
4
+ import { t as registerServerFunction } from "./register-server-function-CqA4nPaJ.js";
7
5
 
8
6
  //#region src/reactivity/create-computed.d.ts
9
7
  declare const createComputed: <T>(fn: () => T) => Signal.Computed<T>;
@@ -11,26 +9,29 @@ declare const createComputed: <T>(fn: () => T) => Signal.Computed<T>;
11
9
  //#region src/reactivity/create-fetched.d.ts
12
10
  declare const createFetched: <T>(path: string, fn: (res: Response) => Promise<T> | T) => Signal.State<Loader<T>>;
13
11
  //#endregion
14
- //#region src/reactivity/create-remote-signal.d.ts
15
- declare const createRemoteSignal: <T>(fn: () => Promise<any>) => Promise<Signal.State<T>>;
16
- //#endregion
17
12
  //#region src/reactivity/remote-signal.d.ts
18
- declare class RemoteSignal<T extends number | string | undefined> extends RpcTarget$1 {
13
+ declare class RemoteSignal<T extends RpcCompatible<T>> extends RpcTarget {
19
14
  #private;
20
- constructor(initialValues: T);
15
+ constructor(initialValues: T, onUpdate?: (val: T) => T);
21
16
  get(): T;
22
17
  set(value: T): Promise<void>;
23
- subscribe(callback: RpcStub$1<(value: T) => void>): Promise<void>;
18
+ subscribe(callback: RpcStub<(value: T) => void>): Promise<void>;
24
19
  }
25
20
  //#endregion
21
+ //#region src/reactivity/create-remote-signal.d.ts
22
+ declare const createRemoteSignal: <T extends string | number>(fn: () => Promise<RpcStub<RemoteSignal<T>>>, updateRemote?: boolean) => Signal.State<Loader<Signal.State<T>>>;
23
+ //#endregion
26
24
  //#region src/reactivity/create-loader.d.ts
27
25
  declare function createLoader<P>(promise: () => Promise<P>): Signal.State<Loader<P>>;
28
26
  declare function createLoader<P, R, T extends (res: P) => R | Promise<R>>(promise: () => Promise<P>, transform: T): Signal.State<Loader<R>>;
29
27
  //#endregion
28
+ //#region src/reactivity/create-context.d.ts
29
+ declare const createContext: <T>(defaultValue?: T) => Context<T>;
30
+ //#endregion
30
31
  //#region src/reactivity/create-signal.d.ts
31
32
  declare const createSignal: <T>(initialValue: T) => Signal.State<T>;
32
33
  //#endregion
33
34
  //#region src/reactivity/effect.d.ts
34
35
  declare const effect: (callback: (() => () => void) | (() => void)) => (() => void);
35
36
  //#endregion
36
- export { type FunctionComponent, type LayoutComponent, RemoteSignal, type Routes, RpcStub, RpcTarget, Signal, createComputed, createFetched, createLoader, createRemoteSignal, createSignal, effect, registerServerFunction };
37
+ export { type FunctionComponent, type LayoutComponent, RemoteSignal, type Routes, type RpcCompatible, RpcStub, RpcTarget, Signal, createComputed, createContext, createFetched, createLoader, createRemoteSignal, createSignal, effect, registerServerFunction };
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- import{n as e}from"./signal-store-0zk-69gB.js";import{t}from"./effect-hmzj-Jig.js";import{n,r,t as i}from"./create-computed-D9oVNGZ6.js";import{t as a}from"./register-server-function-DQl0uL7w.js";import{RpcStub as o,RpcStub as s,RpcTarget as c,RpcTarget as l}from"capnweb";const u=(e,t)=>n(()=>fetch(e).then(async e=>await t(e))),d=async e=>{let n=await e(),i=r(await n.get());return n.subscribe(e=>i.set(e)),i.set(await n.get()),t(()=>{n.set(i.get())}),i.set(await n.get()),i};var f=class extends l{#e;#t=new Set;constructor(e){super(),this.#e=e}get(){return this.#e}async set(e){this.#e=e;for(let t of this.#t)try{await t(e)}catch(e){console.error(`Error in subscriber:`,e),this.#t.delete(t)}}async subscribe(e){return this.#t.add(e.dup()),new Promise((t,n)=>{e.onRpcBroken(t=>{this.#t.delete(e),n(t)})})}};export{f as RemoteSignal,o as RpcStub,c as RpcTarget,e as Signal,i as createComputed,u as createFetched,n as createLoader,d as createRemoteSignal,r as createSignal,t as effect,a as registerServerFunction};
1
+ import{n as e}from"./signal-store-0zk-69gB.js";import{t}from"./effect-Bd9_A9t9.js";import{n,t as r}from"./create-computed-CgSmvZ_e.js";import{t as i}from"./create-loader-Bnk94Dhg.js";import{t as a}from"./create-context-OCBKqRIM.js";import{t as o}from"./register-server-function-Dsv6VBSj.js";import{RpcStub as s,RpcTarget as c}from"capnweb";const l=(e,t)=>i(()=>fetch(e).then(async e=>await t(e))),u=(e,r=!0)=>i(async()=>{let i=await e(),a=n(await i.get());return i.subscribe(e=>a.set(e)),t(()=>{r&&i.set(a.get())}),a});var d=class extends c{#e;#t=new Set;#n;constructor(e,t){super(),this.#e=e,this.#n=t}get(){return this.#e}async set(e){this.#n&&(e=this.#n(e)),this.#e=e;for(let t of this.#t)try{await t(e)}catch(e){console.error(`Error in subscriber:`,e),this.#t.delete(t)}}subscribe(e){return this.#t.add(e.dup()),new Promise((t,n)=>{e.onRpcBroken(t=>{this.#t.delete(e),n(t)})})}};export{d as RemoteSignal,s as RpcStub,c as RpcTarget,e as Signal,r as createComputed,a as createContext,l as createFetched,i as createLoader,u as createRemoteSignal,n as createSignal,t as effect,o as registerServerFunction};
@@ -1,11 +1,11 @@
1
- import { i as JSX } from "./types-DA3_gaOB.js";
2
- import { t as Fragment } from "./fragment-CpqsWP0m.js";
1
+ import { i as JSX } from "./types-B4Ij4y1d.js";
2
+ import { t as Fragment } from "./fragment-Bly9noQG.js";
3
3
 
4
4
  //#region src/jsx/jsx-dev.d.ts
5
5
  declare const jsxDEV: (type: JSX.ElementType, props: any, key: string | null | undefined, _isStaticChildren: boolean, _source: {
6
6
  fileName: string;
7
7
  lineNumber: number;
8
8
  columnNumber: number;
9
- }, _self: unknown | undefined) => JSX.Element;
9
+ }, _self: unknown) => JSX.Element;
10
10
  //#endregion
11
11
  export { Fragment, type JSX, jsxDEV };
@@ -1 +1 @@
1
- import{t as e}from"./fragment-Chv9FEhP.js";const t=(e,t,n,r,i,a)=>({type:e,props:t,key:n});export{e as Fragment,t as jsxDEV};
1
+ import{t as e}from"./fragment-uL1agXkn.js";const t=(e,t,n,r,i,a)=>({type:e,props:t,key:n});export{e as Fragment,t as jsxDEV};
@@ -1,5 +1,5 @@
1
- import { i as JSX } from "./types-DA3_gaOB.js";
2
- import { t as Fragment } from "./fragment-CpqsWP0m.js";
1
+ import { i as JSX } from "./types-B4Ij4y1d.js";
2
+ import { t as Fragment } from "./fragment-Bly9noQG.js";
3
3
 
4
4
  //#region src/jsx/jsx.d.ts
5
5
  declare const jsx: (type: JSX.ElementType, props: any, key: string | null | undefined) => JSX.Element;
@@ -1 +1 @@
1
- import{t as e}from"./fragment-Chv9FEhP.js";import{n as t,t as n}from"./jsx-runtime-DvEc5zft.js";export{e as Fragment,t as jsx,n as jsxs};
1
+ import{t as e}from"./fragment-uL1agXkn.js";import{n as t,t as n}from"./jsx-runtime-BhjWaNaK.js";export{e as Fragment,t as jsx,n as jsxs};
@@ -0,0 +1 @@
1
+ import{newHttpBatchRpcSession as e,newWebSocketRpcSession as t}from"capnweb";const n=(n,r)=>{console.log(`☎️`,`Registering server function:`,n,r);let i=`/@renku/rpc/${encodeURIComponent(n)}/${encodeURIComponent(r)}`;return(...a)=>{let o=r.startsWith(`ws_`)?t(i):e(i);return console.log(`☎️`,`Calling server function:`,n,r,a),o(...a)}};export{n as t};
@@ -1,4 +1,4 @@
1
- import{t as e}from"./virtual-from-jsx-BgQUXZ4d.js";import{n as t}from"./signal-store-0zk-69gB.js";async function*n(e){yield`<!DOCTYPE html>`;for await(let t of e)t[1]&&(yield t[1])}async function*r(t){let n=new Set(t.map(t=>t.then(({index:t,node:n})=>({index:t,virtualNode:e({node:n,asyncComponents:[]})})).catch(e=>({error:e}))));for(;n.size>0;){let e=await Promise.race(n);for(let t of n)t.then(r=>{r===e&&n.delete(t)}).catch(r=>{r===e&&n.delete(t)});`virtualNode`in e&&(yield e)}}async function*i({key:e,val:n,trailingComma:r,output:i}){if(typeof n==`string`||typeof n==`number`){e===`className`&&(e=`class`);let t=typeof n==`number`?String(n):`"${String(n)}"`;return yield i(`${r?`,`:``}"${e}":${t}`,` ${e}="${String(n)}"`),!0}if(n instanceof t.State||n instanceof t.Computed)return yield i(`${r?`,`:``}"${e}":"${String(n.get())}"`,` ${e}="${String(n.get())}"`),!0;if(Array.isArray(n)){let a=n.map(e=>e instanceof t.State||e instanceof t.Computed?String(e.get()):String(e)).join(` `);return yield i(`${r?`,`:``}"${e}":"${a}"`,` ${e}="${a}"`),!0}}const a=new Set([`area`,`base`,`br`,`col`,`embed`,`hr`,`img`,`input`,`link`,`meta`,`source`,`track`,`wbr`]);async function*o({virtualNode:e,asyncVirtualNodes:t,leadingComma:n=!1,rscBuffer:r=[]}){let s=(e,t)=>(e&&r.push(e),[e,t]),c=(e,t)=>s(e,null);if(Array.isArray(e))for(let i of e)yield*o({virtualNode:i,asyncVirtualNodes:t,leadingComma:n,rscBuffer:r}),n=!0;else if(e?.type===`element`){yield s(`${n?`,`:``}["E","${e.value}",${e.key?`"${e.key}"`:`null`},{`,`<${e.value}`);let c=!0;for(let[t,n]of Object.entries(e.props))t!==`children`&&(yield*i({key:t,val:n,trailingComma:!c,output:s}))&&(c=!1);if(yield s(null,a.has(e.value)?` />`:`>`),e.children.length>0){let n=!0;yield s(`${c?``:`,`}"children":[`,null);for(let i of e.children)(yield*o({virtualNode:i,asyncVirtualNodes:t,leadingComma:!n,rscBuffer:r}))&&(n=!1);e.value!==`html`&&(yield s(`]`,null))}if(e.value===`body`){if(r.length>0){let e=r.join(``);r.length=0,yield[null,`<script>(self.__RSC||=[]).push(\`${e}}]]}]\`);<\/script>`]}yield[`}]]}]`,null];for await(let e of t){let n=[];yield[`
1
+ import{t as e}from"./virtual-from-jsx-kd8FG7Em.js";import{n as t}from"./signal-store-0zk-69gB.js";async function*n(e){yield`<!DOCTYPE html>`;for await(let t of e)t[1]&&(yield t[1])}async function*r(t){let n=new Set(t.map(t=>t.then(({index:t,node:n})=>({index:t,virtualNode:e({node:n,asyncComponents:[]})})).catch(e=>({error:e}))));for(;n.size>0;){let e=await Promise.race(n);for(let t of n)t.then(r=>{r===e&&n.delete(t)}).catch(r=>{r===e&&n.delete(t)});`virtualNode`in e&&(yield e)}}async function*i({key:e,val:n,trailingComma:r,output:i}){if(typeof n==`string`||typeof n==`number`){e===`className`&&(e=`class`);let t=typeof n==`number`?String(n):`"${String(n)}"`;return yield i(`${r?`,`:``}"${e}":${t}`,` ${e}="${String(n)}"`),!0}if(n instanceof t.State||n instanceof t.Computed)return yield i(`${r?`,`:``}"${e}":"${String(n.get())}"`,` ${e}="${String(n.get())}"`),!0;if(Array.isArray(n)){let a=n.map(e=>e instanceof t.State||e instanceof t.Computed?String(e.get()):String(e)).join(` `);return yield i(`${r?`,`:``}"${e}":"${a}"`,` ${e}="${a}"`),!0}}const a=new Set([`area`,`base`,`br`,`col`,`embed`,`hr`,`img`,`input`,`link`,`meta`,`source`,`track`,`wbr`]);async function*o({virtualNode:e,asyncVirtualNodes:t,leadingComma:n=!1,rscBuffer:r=[]}){let s=(e,t)=>(e&&r.push(e),[e,t]),c=(e,t)=>s(e,null);if(Array.isArray(e))for(let i of e)yield*o({virtualNode:i,asyncVirtualNodes:t,leadingComma:n,rscBuffer:r}),n=!0;else if(e?.type===`element`){yield s(`${n?`,`:``}["E","${e.value}",${e.key?`"${e.key}"`:`null`},{`,`<${e.value}`);let c=!0;for(let[t,n]of Object.entries(e.props))t!==`children`&&(yield*i({key:t,val:n,trailingComma:!c,output:s}))&&(c=!1);if(yield s(null,a.has(e.value)?` />`:`>`),e.children.length>0){let n=!0;yield s(`${c?``:`,`}"children":[`,null);for(let i of e.children)(yield*o({virtualNode:i,asyncVirtualNodes:t,leadingComma:!n,rscBuffer:r}))&&(n=!1);e.value!==`html`&&(yield s(`]`,null))}if(e.value===`body`){if(r.length>0){let e=r.join(``);r.length=0,yield[null,`<script>(self.__RSC||=[]).push(\`${e}}]]}]\`);<\/script>`]}yield[`}]]}]`,null];for await(let e of t){let n=[];yield[`
2
2
  `,`<template data-id="async-template-${e.index}">`],yield*o({virtualNode:e.virtualNode,asyncVirtualNodes:t,leadingComma:!1,rscBuffer:n}),yield[null,`</template>`],yield[null,`<script>(self.__RSC||=[]).push(\`${n.join(``)}\`);<\/script>`],yield[null,`<script>
3
3
  (() => {
4
4
  const placeholder = document.querySelector(\`${`template[data-id="async-placeholder-${e.index}"]`}\`);
package/dist/server.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { t as ClientComponent } from "./types-DA3_gaOB.js";
2
- import { t as registerServerFunction } from "./register-server-function-DoOVejlg.js";
1
+ import { t as ClientComponent } from "./types-B4Ij4y1d.js";
2
+ import { t as registerServerFunction } from "./register-server-function-CqA4nPaJ.js";
3
3
 
4
4
  //#region src/server/register-client-reference.d.ts
5
5
  declare const registerClientReference: (_fn: () => void, path: string, name: string) => ClientComponent;
package/dist/server.js CHANGED
@@ -1 +1 @@
1
- import{t as e}from"./register-server-function-DQl0uL7w.js";const t=(e,t,n)=>({type:`client`,path:t,name:n});export{t as registerClientReference,e as registerServerFunction};
1
+ import{t as e}from"./register-server-function-Dsv6VBSj.js";const t=(e,t,n)=>({type:`client`,path:t,name:n});export{t as registerClientReference,e as registerServerFunction};
package/dist/theme.css ADDED
@@ -0,0 +1,59 @@
1
+ /* https://tailwindcss.com/docs/dark-mode#using-a-data-attribute */
2
+ @custom-variant dark (&:where([data-theme=dark], [data-theme=dark] *));
3
+
4
+ @theme {
5
+ /* PRIMARY (blue) */
6
+ --color-primary-foreground: var(--color-blue-600);
7
+ --color-primary-background: var(--color-blue-50);
8
+
9
+ /* SECONDARY (zinc) */
10
+ --color-secondary-foreground: var(--color-zinc-800);
11
+ --color-secondary-background: var(--color-zinc-100);
12
+
13
+ /* SUCCESS (emerald) */
14
+ --color-success-foreground: var(--color-emerald-600);
15
+ --color-success-background: var(--color-emerald-50);
16
+
17
+ /* WARNING (amber) */
18
+ --color-warning-foreground: var(--color-amber-700);
19
+ --color-warning-background: var(--color-amber-50);
20
+
21
+ /* DANGER (red) */
22
+ --color-danger-foreground: var(--color-red-600);
23
+ --color-danger-background: var(--color-red-50);
24
+
25
+ /* INFO (sky) */
26
+ --color-info-foreground: var(--color-sky-600);
27
+ --color-info-background: var(--color-sky-50);
28
+ }
29
+
30
+ @layer theme {
31
+ * {
32
+ @variant dark {
33
+ /* PRIMARY (blue) */
34
+ --color-primary-foreground: var(--color-blue-200);
35
+ --color-primary-background: var(--color-blue-900);
36
+
37
+ /* SECONDARY (zinc) */
38
+ --color-secondary-foreground: var(--color-zinc-200);
39
+ --color-secondary-background: var(--color-zinc-900);
40
+
41
+ /* SUCCESS (emerald) */
42
+ --color-success-foreground: var(--color-emerald-200);
43
+ --color-success-background: var(--color-emerald-900);
44
+
45
+ /* WARNING (amber) */
46
+ --color-warning-foreground: var(--color-amber-200);
47
+ --color-warning-background: var(--color-amber-900);
48
+
49
+ /* DANGER (red) */
50
+ --color-danger-foreground: var(--color-red-200);
51
+ --color-danger-background: var(--color-red-900);
52
+
53
+ /* INFO (sky) */
54
+ --color-info-foreground: var(--color-sky-200);
55
+ --color-info-background: var(--color-sky-900);
56
+ }
57
+ }
58
+ }
59
+
package/dist/theme.js ADDED
File without changes
@@ -1,4 +1,5 @@
1
1
  import { Signal } from "signal-polyfill";
2
+ import { RpcCompatible, RpcStub as RpcStub$1, RpcTarget as RpcTarget$1 } from "capnweb";
2
3
 
3
4
  //#region src/reactivity/types.d.ts
4
5
  type Loader<T> = {
@@ -14,5 +15,9 @@ type Loader<T> = {
14
15
  error: any;
15
16
  data: null;
16
17
  };
18
+ type Context<T> = {
19
+ set: (value: T) => void;
20
+ get: () => T;
21
+ };
17
22
  //#endregion
18
- export { Signal as n, Loader as t };
23
+ export { RpcTarget$1 as a, RpcStub$1 as i, Loader as n, Signal as o, RpcCompatible as r, Context as t };
@@ -1,5 +1,5 @@
1
- import { n as AuthFn } from "./types-BStlw_FH.js";
2
- import { r as FunctionComponent } from "./types-DA3_gaOB.js";
1
+ import { n as AuthFn } from "./types-BcEav58N.js";
2
+ import { r as FunctionComponent } from "./types-B4Ij4y1d.js";
3
3
 
4
4
  //#region src/router/types.d.ts
5
5
  type Path = `/${string}`;
package/dist/ui.d.ts CHANGED
@@ -1,6 +1,111 @@
1
- import { r as FunctionComponent } from "./types-DA3_gaOB.js";
1
+ import { r as FunctionComponent } from "./types-B4Ij4y1d.js";
2
2
 
3
- //#region src/ui/Badge.d.ts
4
- declare const Badge: FunctionComponent<{}>;
3
+ //#region src/ui/types.d.ts
4
+ type Size = "sm" | "md" | "lg";
5
+ type Variant = "solid" | "outline" | "soft" | "ghost";
6
+ type SemanticColor = "primary" | "secondary" | "info" | "success" | "warning" | "danger";
5
7
  //#endregion
6
- export { Badge };
8
+ //#region src/ui/accordion/types.d.ts
9
+ type AccordionSize = Size;
10
+ type AccordionVariant = Variant;
11
+ type AccordionColor = SemanticColor;
12
+ type AccordionRootProps = {
13
+ size?: AccordionSize;
14
+ variant?: AccordionVariant;
15
+ color?: AccordionColor;
16
+ class?: string | string[];
17
+ multiple?: boolean;
18
+ } & Partial<Omit<HTMLDivElement, "children">>;
19
+ type AccordionItemProps = {
20
+ size?: AccordionSize;
21
+ variant?: AccordionVariant;
22
+ color?: AccordionColor;
23
+ class?: string | string[];
24
+ } & Partial<Omit<HTMLDivElement, "children">>;
25
+ type AccordionHeaderProps = {
26
+ size?: AccordionSize;
27
+ variant?: AccordionVariant;
28
+ color?: AccordionColor;
29
+ class?: string | string[];
30
+ } & Partial<Omit<HTMLDivElement, "children">>;
31
+ type AccordionPanelProps = {
32
+ size?: AccordionSize;
33
+ variant?: AccordionVariant;
34
+ color?: AccordionColor;
35
+ class?: string | string[];
36
+ } & Partial<Omit<HTMLDivElement, "children">>;
37
+ //#endregion
38
+ //#region src/ui/accordion/accordion.d.ts
39
+ declare const Accordion: {
40
+ Root: FunctionComponent<AccordionRootProps>;
41
+ Item: FunctionComponent<AccordionItemProps>;
42
+ Header: FunctionComponent<AccordionHeaderProps>;
43
+ Panel: FunctionComponent<AccordionPanelProps>;
44
+ };
45
+ //#endregion
46
+ //#region src/ui/badge/types.d.ts
47
+ type BadgeSize = Size;
48
+ type BadgeVariant = Variant;
49
+ type BadgeColor = SemanticColor;
50
+ type BadgeProps = {
51
+ size?: BadgeSize;
52
+ variant?: BadgeVariant;
53
+ color?: BadgeColor;
54
+ pill?: boolean;
55
+ class?: string | string[];
56
+ } & Partial<Omit<HTMLDivElement, "children">>;
57
+ //#endregion
58
+ //#region src/ui/badge/badge.d.ts
59
+ declare const Badge: FunctionComponent<BadgeProps>;
60
+ //#endregion
61
+ //#region src/ui/button/types.d.ts
62
+ type ButtonSize = Size;
63
+ type ButtonVariant = Variant;
64
+ type ButtonColor = SemanticColor;
65
+ type ButtonProps = {
66
+ size?: ButtonSize;
67
+ variant?: ButtonVariant;
68
+ color?: ButtonColor;
69
+ class?: string | string[];
70
+ } & Partial<Omit<HTMLButtonElement, "children">>;
71
+ //#endregion
72
+ //#region src/ui/button/button.d.ts
73
+ declare const Button: FunctionComponent<ButtonProps>;
74
+ //#endregion
75
+ //#region src/ui/input/types.d.ts
76
+ type InputSize = Size;
77
+ type InputVariant = Variant;
78
+ type InputColor = SemanticColor;
79
+ type InputProps = {
80
+ size?: InputSize;
81
+ variant?: InputVariant;
82
+ color?: InputColor;
83
+ class?: string | string[];
84
+ } & Partial<Omit<HTMLInputElement, "children">>;
85
+ //#endregion
86
+ //#region src/ui/input/input.d.ts
87
+ declare const Input: FunctionComponent<InputProps>;
88
+ //#endregion
89
+ //#region src/ui/textarea/types.d.ts
90
+ type TextareaSize = Size;
91
+ type TextareaVariant = Variant;
92
+ type TextareaColor = SemanticColor;
93
+ type TextareaProps = {
94
+ size?: TextareaSize;
95
+ variant?: TextareaVariant;
96
+ color?: TextareaColor;
97
+ class?: string | string[];
98
+ } & Partial<Omit<HTMLTextAreaElement, "children">>;
99
+ //#endregion
100
+ //#region src/ui/textarea/textarea.d.ts
101
+ declare const Textarea: FunctionComponent<TextareaProps>;
102
+ //#endregion
103
+ //#region src/ui/form/types.d.ts
104
+ type FormProps = {
105
+ class?: string | string[];
106
+ } & Partial<Omit<HTMLFormElement, "children">>;
107
+ //#endregion
108
+ //#region src/ui/form/form.d.ts
109
+ declare const Form: FunctionComponent<FormProps>;
110
+ //#endregion
111
+ export { Accordion, AccordionColor, AccordionHeaderProps, AccordionItemProps, AccordionPanelProps, AccordionRootProps, AccordionSize, AccordionVariant, Badge, BadgeColor, BadgeProps, BadgeSize, BadgeVariant, Button, ButtonColor, ButtonProps, ButtonSize, ButtonVariant, Form, FormProps, Input, InputColor, InputProps, InputSize, InputVariant, SemanticColor, Size, Textarea, TextareaColor, TextareaProps, TextareaSize, TextareaVariant, Variant };
package/dist/ui.js CHANGED
@@ -1 +1 @@
1
- import"./fragment-Chv9FEhP.js";import{n as e}from"./jsx-runtime-DvEc5zft.js";const t=({children:t})=>e(`div`,{class:[`bg-red-500`],children:t});export{t as Badge};
1
+ import"./signal-store-0zk-69gB.js";import{n as e,t}from"./create-computed-CgSmvZ_e.js";import{n}from"./jsx-runtime-BhjWaNaK.js";import{t as r}from"./create-context-OCBKqRIM.js";const i=r(),a=({children:e})=>{let{isOpen:t,toggle:r}=i.get();return n(`button`,{onclick:r,class:[t.get()?`text-green-500`:`text-red-500`],children:e})},o=r(),s={Root:({children:t,multiple:r=!1})=>{let i=e(null);return o.set({openPanel:i,multiple:r}),n(`div`,{class:[`flex flex-col`],children:t})},Item:({children:r})=>{let a=Symbol(`AccordionItem`),{openPanel:s,multiple:c}=o.get(),l=e(!1),u=t(()=>c?l.get():a===s.get());return i.set({isOpen:u,toggle:()=>{l.set(!l.get()),s.set(a)}}),n(`div`,{class:[`flex flex-col`],children:r})},Header:a,Panel:({children:e})=>{let{isOpen:t}=i.get();return n(`div`,{class:[t.get()?`block`:`hidden`],children:e})}},c={primary:{solid:`border border-primary-foreground bg-primary-foreground text-primary-background transition-colors hover:opacity-90 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-foreground disabled:pointer-events-none disabled:opacity-50`,outline:`border border-primary-foreground bg-transparent text-primary-foreground transition-colors hover:bg-primary-background focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-foreground disabled:pointer-events-none disabled:opacity-50`,soft:`border border-transparent bg-primary-background text-primary-foreground transition-colors hover:opacity-90 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-foreground disabled:pointer-events-none disabled:opacity-50`,ghost:`border border-transparent bg-transparent text-primary-foreground transition-colors hover:bg-primary-background focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-foreground disabled:pointer-events-none disabled:opacity-50`},secondary:{solid:`border border-secondary-foreground bg-secondary-foreground text-secondary-background transition-colors hover:opacity-90 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-secondary-foreground disabled:pointer-events-none disabled:opacity-50`,outline:`border border-secondary-foreground bg-transparent text-secondary-foreground transition-colors hover:bg-secondary-background focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-secondary-foreground disabled:pointer-events-none disabled:opacity-50`,soft:`border border-transparent bg-secondary-background text-secondary-foreground transition-colors hover:opacity-90 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-secondary-foreground disabled:pointer-events-none disabled:opacity-50`,ghost:`border border-transparent bg-transparent text-secondary-foreground transition-colors hover:bg-secondary-background focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-secondary-foreground disabled:pointer-events-none disabled:opacity-50`},info:{solid:`border border-info-foreground bg-info-foreground text-info-background transition-colors hover:opacity-90 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-info-foreground disabled:pointer-events-none disabled:opacity-50`,outline:`border border-info-foreground bg-transparent text-info-foreground transition-colors hover:bg-info-background focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-info-foreground disabled:pointer-events-none disabled:opacity-50`,soft:`border border-transparent bg-info-background text-info-foreground transition-colors hover:opacity-90 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-info-foreground disabled:pointer-events-none disabled:opacity-50`,ghost:`border border-transparent bg-transparent text-info-foreground transition-colors hover:bg-info-background focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-info-foreground disabled:pointer-events-none disabled:opacity-50`},success:{solid:`border border-success-foreground bg-success-foreground text-success-background transition-colors hover:opacity-90 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-success-foreground disabled:pointer-events-none disabled:opacity-50`,outline:`border border-success-foreground bg-transparent text-success-foreground transition-colors hover:bg-success-background focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-success-foreground disabled:pointer-events-none disabled:opacity-50`,soft:`border border-transparent bg-success-background text-success-foreground transition-colors hover:opacity-90 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-success-foreground disabled:pointer-events-none disabled:opacity-50`,ghost:`border border-transparent bg-transparent text-success-foreground transition-colors hover:bg-success-background focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-success-foreground disabled:pointer-events-none disabled:opacity-50`},warning:{solid:`border border-warning-foreground bg-warning-foreground text-warning-background transition-colors hover:opacity-90 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-warning-foreground disabled:pointer-events-none disabled:opacity-50`,outline:`border border-warning-foreground bg-transparent text-warning-foreground transition-colors hover:bg-warning-background focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-warning-foreground disabled:pointer-events-none disabled:opacity-50`,soft:`border border-transparent bg-warning-background text-warning-foreground transition-colors hover:opacity-90 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-warning-foreground disabled:pointer-events-none disabled:opacity-50`,ghost:`border border-transparent bg-transparent text-warning-foreground transition-colors hover:bg-warning-background focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-warning-foreground disabled:pointer-events-none disabled:opacity-50`},danger:{solid:`border border-danger-foreground bg-danger-foreground text-danger-background transition-colors hover:opacity-90 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-danger-foreground disabled:pointer-events-none disabled:opacity-50`,outline:`border border-danger-foreground bg-transparent text-danger-foreground transition-colors hover:bg-danger-background focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-danger-foreground disabled:pointer-events-none disabled:opacity-50`,soft:`border border-transparent bg-danger-background text-danger-foreground transition-colors hover:opacity-90 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-danger-foreground disabled:pointer-events-none disabled:opacity-50`,ghost:`border border-transparent bg-transparent text-danger-foreground transition-colors hover:bg-danger-background focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-danger-foreground disabled:pointer-events-none disabled:opacity-50`}},l={sm:`px-3 py-1.5 text-sm font-medium rounded`,md:`px-4 py-2 text-base font-medium rounded-md`,lg:`px-6 py-3 text-lg font-medium rounded-lg`},u=({size:e=`md`,variant:t=`solid`,color:r=`primary`,pill:i=!1,children:a})=>{let o=c[r][t],s=l[e];return n(`span`,{class:[`inline-flex items-center gap-1 font-medium`,`align-middle leading-none`,s,o,i?`rounded-full`:`rounded-md`],children:a})},d={primary:{solid:`border border-primary-foreground bg-primary-foreground text-primary-background transition-colors hover:opacity-90 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-foreground disabled:pointer-events-none disabled:opacity-50`,outline:`border border-primary-foreground bg-transparent text-primary-foreground transition-colors hover:bg-primary-background focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-foreground disabled:pointer-events-none disabled:opacity-50`,soft:`border border-transparent bg-primary-background text-primary-foreground transition-colors hover:opacity-90 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-foreground disabled:pointer-events-none disabled:opacity-50`,ghost:`border border-transparent bg-transparent text-primary-foreground transition-colors hover:bg-primary-background focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-foreground disabled:pointer-events-none disabled:opacity-50`},secondary:{solid:`border border-secondary-foreground bg-secondary-foreground text-secondary-background transition-colors hover:opacity-90 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-secondary-foreground disabled:pointer-events-none disabled:opacity-50`,outline:`border border-secondary-foreground bg-transparent text-secondary-foreground transition-colors hover:bg-secondary-background focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-secondary-foreground disabled:pointer-events-none disabled:opacity-50`,soft:`border border-transparent bg-secondary-background text-secondary-foreground transition-colors hover:opacity-90 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-secondary-foreground disabled:pointer-events-none disabled:opacity-50`,ghost:`border border-transparent bg-transparent text-secondary-foreground transition-colors hover:bg-secondary-background focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-secondary-foreground disabled:pointer-events-none disabled:opacity-50`},info:{solid:`border border-info-foreground bg-info-foreground text-info-background transition-colors hover:opacity-90 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-info-foreground disabled:pointer-events-none disabled:opacity-50`,outline:`border border-info-foreground bg-transparent text-info-foreground transition-colors hover:bg-info-background focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-info-foreground disabled:pointer-events-none disabled:opacity-50`,soft:`border border-transparent bg-info-background text-info-foreground transition-colors hover:opacity-90 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-info-foreground disabled:pointer-events-none disabled:opacity-50`,ghost:`border border-transparent bg-transparent text-info-foreground transition-colors hover:bg-info-background focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-info-foreground disabled:pointer-events-none disabled:opacity-50`},success:{solid:`border border-success-foreground bg-success-foreground text-success-background transition-colors hover:opacity-90 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-success-foreground disabled:pointer-events-none disabled:opacity-50`,outline:`border border-success-foreground bg-transparent text-success-foreground transition-colors hover:bg-success-background focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-success-foreground disabled:pointer-events-none disabled:opacity-50`,soft:`border border-transparent bg-success-background text-success-foreground transition-colors hover:opacity-90 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-success-foreground disabled:pointer-events-none disabled:opacity-50`,ghost:`border border-transparent bg-transparent text-success-foreground transition-colors hover:bg-success-background focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-success-foreground disabled:pointer-events-none disabled:opacity-50`},warning:{solid:`border border-warning-foreground bg-warning-foreground text-warning-background transition-colors hover:opacity-90 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-warning-foreground disabled:pointer-events-none disabled:opacity-50`,outline:`border border-warning-foreground bg-transparent text-warning-foreground transition-colors hover:bg-warning-background focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-warning-foreground disabled:pointer-events-none disabled:opacity-50`,soft:`border border-transparent bg-warning-background text-warning-foreground transition-colors hover:opacity-90 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-warning-foreground disabled:pointer-events-none disabled:opacity-50`,ghost:`border border-transparent bg-transparent text-warning-foreground transition-colors hover:bg-warning-background focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-warning-foreground disabled:pointer-events-none disabled:opacity-50`},danger:{solid:`border border-danger-foreground bg-danger-foreground text-danger-background transition-colors hover:opacity-90 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-danger-foreground disabled:pointer-events-none disabled:opacity-50`,outline:`border border-danger-foreground bg-transparent text-danger-foreground transition-colors hover:bg-danger-background focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-danger-foreground disabled:pointer-events-none disabled:opacity-50`,soft:`border border-transparent bg-danger-background text-danger-foreground transition-colors hover:opacity-90 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-danger-foreground disabled:pointer-events-none disabled:opacity-50`,ghost:`border border-transparent bg-transparent text-danger-foreground transition-colors hover:bg-danger-background focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-danger-foreground disabled:pointer-events-none disabled:opacity-50`}},f={sm:`px-3 py-1.5 text-sm font-medium rounded`,md:`px-4 py-2 text-base font-medium rounded-md`,lg:`px-6 py-3 text-lg font-medium rounded-lg`},p=({color:e=`primary`,size:t=`md`,variant:r=`solid`,children:i,...a})=>{let o=d[e][r],s=f[t];return n(`button`,{class:[`inline-flex items-center justify-center font-medium transition-colors focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50`,s,o],...a,children:i})},m={primary:{solid:`border border-primary-foreground bg-primary-foreground text-primary-background transition-colors hover:opacity-90 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-foreground disabled:pointer-events-none disabled:opacity-50`,outline:`border border-primary-foreground bg-transparent text-primary-foreground transition-colors hover:bg-primary-background focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-foreground disabled:pointer-events-none disabled:opacity-50`,soft:`border border-transparent bg-primary-background text-primary-foreground transition-colors hover:opacity-90 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-foreground disabled:pointer-events-none disabled:opacity-50`,ghost:`border border-transparent bg-transparent text-primary-foreground transition-colors hover:bg-primary-background focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-foreground disabled:pointer-events-none disabled:opacity-50`},secondary:{solid:`border border-secondary-foreground bg-secondary-foreground text-secondary-background transition-colors hover:opacity-90 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-secondary-foreground disabled:pointer-events-none disabled:opacity-50`,outline:`border border-secondary-foreground bg-transparent text-secondary-foreground transition-colors hover:bg-secondary-background focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-secondary-foreground disabled:pointer-events-none disabled:opacity-50`,soft:`border border-transparent bg-secondary-background text-secondary-foreground transition-colors hover:opacity-90 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-secondary-foreground disabled:pointer-events-none disabled:opacity-50`,ghost:`border border-transparent bg-transparent text-secondary-foreground transition-colors hover:bg-secondary-background focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-secondary-foreground disabled:pointer-events-none disabled:opacity-50`},info:{solid:`border border-info-foreground bg-info-foreground text-info-background transition-colors hover:opacity-90 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-info-foreground disabled:pointer-events-none disabled:opacity-50`,outline:`border border-info-foreground bg-transparent text-info-foreground transition-colors hover:bg-info-background focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-info-foreground disabled:pointer-events-none disabled:opacity-50`,soft:`border border-transparent bg-info-background text-info-foreground transition-colors hover:opacity-90 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-info-foreground disabled:pointer-events-none disabled:opacity-50`,ghost:`border border-transparent bg-transparent text-info-foreground transition-colors hover:bg-info-background focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-info-foreground disabled:pointer-events-none disabled:opacity-50`},success:{solid:`border border-success-foreground bg-success-foreground text-success-background transition-colors hover:opacity-90 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-success-foreground disabled:pointer-events-none disabled:opacity-50`,outline:`border border-success-foreground bg-transparent text-success-foreground transition-colors hover:bg-success-background focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-success-foreground disabled:pointer-events-none disabled:opacity-50`,soft:`border border-transparent bg-success-background text-success-foreground transition-colors hover:opacity-90 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-success-foreground disabled:pointer-events-none disabled:opacity-50`,ghost:`border border-transparent bg-transparent text-success-foreground transition-colors hover:bg-success-background focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-success-foreground disabled:pointer-events-none disabled:opacity-50`},warning:{solid:`border border-warning-foreground bg-warning-foreground text-warning-background transition-colors hover:opacity-90 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-warning-foreground disabled:pointer-events-none disabled:opacity-50`,outline:`border border-warning-foreground bg-transparent text-warning-foreground transition-colors hover:bg-warning-background focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-warning-foreground disabled:pointer-events-none disabled:opacity-50`,soft:`border border-transparent bg-warning-background text-warning-foreground transition-colors hover:opacity-90 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-warning-foreground disabled:pointer-events-none disabled:opacity-50`,ghost:`border border-transparent bg-transparent text-warning-foreground transition-colors hover:bg-warning-background focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-warning-foreground disabled:pointer-events-none disabled:opacity-50`},danger:{solid:`border border-danger-foreground bg-danger-foreground text-danger-background transition-colors hover:opacity-90 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-danger-foreground disabled:pointer-events-none disabled:opacity-50`,outline:`border border-danger-foreground bg-transparent text-danger-foreground transition-colors hover:bg-danger-background focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-danger-foreground disabled:pointer-events-none disabled:opacity-50`,soft:`border border-transparent bg-danger-background text-danger-foreground transition-colors hover:opacity-90 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-danger-foreground disabled:pointer-events-none disabled:opacity-50`,ghost:`border border-transparent bg-transparent text-danger-foreground transition-colors hover:bg-danger-background focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-danger-foreground disabled:pointer-events-none disabled:opacity-50`}},h={sm:`px-3 py-1.5 text-sm font-medium rounded`,md:`px-4 py-2 text-base font-medium rounded-md`,lg:`px-6 py-3 text-lg font-medium rounded-lg`},g=({size:e=`md`,variant:t=`solid`,color:r=`primary`,...i})=>{let a=m[r][t],o=h[e];return n(`input`,{class:[`inline-flex items-center gap-1 font-medium`,`align-middle leading-none`,o,a],...i})},_={primary:{solid:`border border-primary-foreground bg-primary-foreground text-primary-background transition-colors hover:opacity-90 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-foreground disabled:pointer-events-none disabled:opacity-50`,outline:`border border-primary-foreground bg-transparent text-primary-foreground transition-colors hover:bg-primary-background focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-foreground disabled:pointer-events-none disabled:opacity-50`,soft:`border border-transparent bg-primary-background text-primary-foreground transition-colors hover:opacity-90 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-foreground disabled:pointer-events-none disabled:opacity-50`,ghost:`border border-transparent bg-transparent text-primary-foreground transition-colors hover:bg-primary-background focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-foreground disabled:pointer-events-none disabled:opacity-50`},secondary:{solid:`border border-secondary-foreground bg-secondary-foreground text-secondary-background transition-colors hover:opacity-90 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-secondary-foreground disabled:pointer-events-none disabled:opacity-50`,outline:`border border-secondary-foreground bg-transparent text-secondary-foreground transition-colors hover:bg-secondary-background focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-secondary-foreground disabled:pointer-events-none disabled:opacity-50`,soft:`border border-transparent bg-secondary-background text-secondary-foreground transition-colors hover:opacity-90 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-secondary-foreground disabled:pointer-events-none disabled:opacity-50`,ghost:`border border-transparent bg-transparent text-secondary-foreground transition-colors hover:bg-secondary-background focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-secondary-foreground disabled:pointer-events-none disabled:opacity-50`},info:{solid:`border border-info-foreground bg-info-foreground text-info-background transition-colors hover:opacity-90 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-info-foreground disabled:pointer-events-none disabled:opacity-50`,outline:`border border-info-foreground bg-transparent text-info-foreground transition-colors hover:bg-info-background focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-info-foreground disabled:pointer-events-none disabled:opacity-50`,soft:`border border-transparent bg-info-background text-info-foreground transition-colors hover:opacity-90 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-info-foreground disabled:pointer-events-none disabled:opacity-50`,ghost:`border border-transparent bg-transparent text-info-foreground transition-colors hover:bg-info-background focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-info-foreground disabled:pointer-events-none disabled:opacity-50`},success:{solid:`border border-success-foreground bg-success-foreground text-success-background transition-colors hover:opacity-90 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-success-foreground disabled:pointer-events-none disabled:opacity-50`,outline:`border border-success-foreground bg-transparent text-success-foreground transition-colors hover:bg-success-background focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-success-foreground disabled:pointer-events-none disabled:opacity-50`,soft:`border border-transparent bg-success-background text-success-foreground transition-colors hover:opacity-90 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-success-foreground disabled:pointer-events-none disabled:opacity-50`,ghost:`border border-transparent bg-transparent text-success-foreground transition-colors hover:bg-success-background focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-success-foreground disabled:pointer-events-none disabled:opacity-50`},warning:{solid:`border border-warning-foreground bg-warning-foreground text-warning-background transition-colors hover:opacity-90 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-warning-foreground disabled:pointer-events-none disabled:opacity-50`,outline:`border border-warning-foreground bg-transparent text-warning-foreground transition-colors hover:bg-warning-background focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-warning-foreground disabled:pointer-events-none disabled:opacity-50`,soft:`border border-transparent bg-warning-background text-warning-foreground transition-colors hover:opacity-90 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-warning-foreground disabled:pointer-events-none disabled:opacity-50`,ghost:`border border-transparent bg-transparent text-warning-foreground transition-colors hover:bg-warning-background focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-warning-foreground disabled:pointer-events-none disabled:opacity-50`},danger:{solid:`border border-danger-foreground bg-danger-foreground text-danger-background transition-colors hover:opacity-90 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-danger-foreground disabled:pointer-events-none disabled:opacity-50`,outline:`border border-danger-foreground bg-transparent text-danger-foreground transition-colors hover:bg-danger-background focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-danger-foreground disabled:pointer-events-none disabled:opacity-50`,soft:`border border-transparent bg-danger-background text-danger-foreground transition-colors hover:opacity-90 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-danger-foreground disabled:pointer-events-none disabled:opacity-50`,ghost:`border border-transparent bg-transparent text-danger-foreground transition-colors hover:bg-danger-background focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-danger-foreground disabled:pointer-events-none disabled:opacity-50`}},v={sm:`px-3 py-1.5 text-sm font-medium rounded`,md:`px-4 py-2 text-base font-medium rounded-md`,lg:`px-6 py-3 text-lg font-medium rounded-lg`},y=({size:e=`md`,variant:t=`solid`,color:r=`primary`,...i})=>{let a=_[r][t],o=v[e];return n(`textarea`,{class:[`inline-flex items-center gap-1 font-medium`,`align-middle leading-none`,o,a],...i})},b=({class:e,children:t,...r})=>n(`form`,{class:[`inline-flex items-center gap-1 font-medium`,`align-middle leading-none`,e],...r,children:t});export{s as Accordion,u as Badge,p as Button,b as Form,g as Input,y as Textarea};
@@ -1 +1 @@
1
- import{t as e}from"./virtual-from-jsx-BgQUXZ4d.js";import{n as t}from"./signal-store-0zk-69gB.js";import{t as n}from"./effect-hmzj-Jig.js";function r({domNode:e,virtualNode:t,replace:n=!1}){let r=[];for(let i of t){let t=a({domNode:e,virtualNode:i,replace:n});n=!1,r.push(t)}return r}const i=({element:e,key:r,val:i})=>{typeof i==`function`?r.startsWith(`on`)&&e.addEventListener(r.slice(2),i):typeof i==`string`||typeof i==`number`?(r===`className`&&(r=`class`),e.setAttribute(r,String(i))):i instanceof t.State||i instanceof t.Computed?n(()=>{e.setAttribute(r,String(i.get()))}):Array.isArray(i)?n(()=>{let n=i.map(e=>e instanceof t.State||e instanceof t.Computed?String(e.get()):String(e)).join(` `);e.setAttribute(r,n)}):typeof i==`boolean`&&(i?e.setAttribute(r,``):e.removeAttribute(r))};function a({domNode:t,virtualNode:s,replace:c=!1}){if(!s)return null;let l=[`svg`,`path`,`circle`];if(s.type===`element`){let e=l.includes(s.value)?document.createElementNS(`http://www.w3.org/2000/svg`,s.value):document.createElement(s.value);if(s.domNode=e,s.props.ref){let e=s.props.ref;console.log(`has ref`,e.get()),e.set(s.domNode),console.log(`assigned ref`,s.domNode),console.log(`has ref`,e.get())}for(let[t,n]of Object.entries(s.props))t!==`children`&&t!==`key`&&t!==`ref`&&i({element:e,key:t,val:n});if(s.children)for(let t of s.children)a({domNode:e,virtualNode:t});return t===document.documentElement?document.documentElement.replaceWith(e):c&&t.parentElement?t.parentElement.replaceChild(e,t):t.appendChild(e),e}if(s.type===`async`){let n=document.createElement(`template`);return s.domNode=n,t.appendChild(n),s.promise?.then(t=>{let i=e({node:t});Array.isArray(i)?r({domNode:n,virtualNode:i,replace:!0}):a({domNode:n,virtualNode:i,replace:!0})}),n}if(s.type===`text`){let e=document.createTextNode(s.value);return s.domNode=e,t.appendChild(e),e}if(s.type===`signal`){let e=s.value,r=document.createTextNode(``);return s.domNode=r,n(()=>{r.textContent=String(e.get())}),t.appendChild(r),r}if(s.type===`effect`){let e=s.value,n=null,r=null,i=e=>{Array.isArray(e)?console.warn(`EFFECT virtual node is array`):n?(n=o({domNode:n,newVirtualNode:e,oldVirtualNode:r}),r=e):(n=a({domNode:t,virtualNode:e,replace:c}),r=e,e=null)};s.addCallback(i),i(e)}return null}const o=({domNode:e,newVirtualNode:t,oldVirtualNode:n})=>{if(t&&n)if(t.type===n.type)if(t.type===`element`&&n.type===`element`)if(t.value===n.value){let r=e,s=n.props?Object.keys(n.props).filter(e=>!(e in t.props)):[];s.length&&s.map(e=>r.removeAttribute(e));for(let[e,a]of Object.entries(t.props))if(e!==`children`&&e!==`key`)if(n.props&&e in n.props){let t=n.props[e];typeof a==`function`||(Array.isArray(a)&&Array.isArray(t)?JSON.stringify(a)!==JSON.stringify(t)&&i({element:r,key:e,val:a}):n.props[e]!==a&&i({element:r,key:e,val:a}))}else i({element:r,key:e,val:a});if(t.children.length){let e=0;for(let i=0;i<t.children.length;i++){let s=t.children[i];if(s){let t=n.children?n.children[i-e]:void 0;if(t?.domNode)if(s.key===t.key)s.domNode=t.domNode,o({domNode:t.domNode,newVirtualNode:s,oldVirtualNode:t});else{let i=n.children.findIndex(e=>e?.key===s.key),a=i>-1?n.children[i]:null;a?.domNode&&(r.moveBefore(a.domNode,t.domNode),s.domNode=a.domNode,e++,o({domNode:a.domNode,newVirtualNode:s,oldVirtualNode:a}),n.children.splice(i,1))}else s.type!==`effect`&&a({domNode:r,virtualNode:s});n.children[i-e]=null}}if(n.children.length+e>t.children.length)for(let i=t.children.length;i<n.children.length+e;i++){let t=n.children[i-e]?.domNode;t&&r.removeChild(t)}}else n.children?.length&&r.replaceChildren()}else console.log(`Different node types`),n.domNode&&a({domNode:n.domNode,virtualNode:t,replace:!0});else t.type===`text`&&n.type===`text`&&t.value!==n.value&&(t.domNode=n.domNode,t.domNode.nodeValue=t.value);else console.warn(`Different node types`),n.domNode&&a({domNode:n.domNode,virtualNode:t,replace:!0});else console.warn(`Old or new node is null`);return e};export{a as n,r,o as t};
1
+ import{t as e}from"./virtual-from-jsx-kd8FG7Em.js";import{n as t}from"./signal-store-0zk-69gB.js";import{t as n}from"./effect-Bd9_A9t9.js";function r({domNode:e,virtualNode:t,replace:n=!1}){let r=[];for(let i of t){let t=a({domNode:e,virtualNode:i,replace:n});n=!1,r.push(t)}return r}const i=({element:e,key:r,val:i})=>{typeof i==`function`?r.startsWith(`on`)&&e.addEventListener(r.slice(2),i):typeof i==`string`||typeof i==`number`?(r===`className`&&(r=`class`),e.setAttribute(r,String(i))):i instanceof t.State||i instanceof t.Computed?n(()=>{e.setAttribute(r,String(i.get()))}):Array.isArray(i)?n(()=>{let n=i.map(e=>e instanceof t.State||e instanceof t.Computed?String(e.get()):String(e)).join(` `);e.setAttribute(r,n)}):typeof i==`boolean`&&(i?e.setAttribute(r,``):e.removeAttribute(r))};function a({domNode:t,virtualNode:s,replace:c=!1}){if(!s)return null;let l=[`svg`,`path`,`circle`];if(s.type===`element`){let e=l.includes(s.value)?document.createElementNS(`http://www.w3.org/2000/svg`,s.value):document.createElement(s.value);if(s.domNode=e,s.props.ref){let e=s.props.ref;console.log(`has ref`,e.get()),e.set(s.domNode),console.log(`assigned ref`,s.domNode),console.log(`has ref`,e.get())}for(let[t,n]of Object.entries(s.props))t!==`children`&&t!==`key`&&t!==`ref`&&i({element:e,key:t,val:n});if(s.children)for(let t of s.children)a({domNode:e,virtualNode:t});return t===document.documentElement?document.documentElement.replaceWith(e):c&&t.parentElement?t.parentElement.replaceChild(e,t):t.appendChild(e),e}if(s.type===`async`){let n=document.createElement(`template`);return s.domNode=n,t.appendChild(n),s.promise?.then(t=>{let i=e({node:t});Array.isArray(i)?r({domNode:n,virtualNode:i,replace:!0}):a({domNode:n,virtualNode:i,replace:!0})}),n}if(s.type===`text`){let e=document.createTextNode(s.value);return s.domNode=e,t.appendChild(e),e}if(s.type===`signal`){let e=s.value,r=document.createTextNode(``);return s.domNode=r,n(()=>{r.textContent=String(e.get())}),t.appendChild(r),r}if(s.type===`effect`){let e=s.value,n=null,r=null,i=e=>{Array.isArray(e)?console.warn(`EFFECT virtual node is array`):n?(n=o({domNode:n,newVirtualNode:e,oldVirtualNode:r}),r=e):(n=a({domNode:t,virtualNode:e,replace:c}),r=e,e=null)};s.addCallback(i),i(e)}return null}const o=({domNode:e,newVirtualNode:t,oldVirtualNode:n})=>{if(t&&n)if(t.type===n.type)if(t.type===`element`&&n.type===`element`)if(t.value===n.value){let r=e,s=n.props?Object.keys(n.props).filter(e=>!(e in t.props)):[];s.length&&s.map(e=>r.removeAttribute(e));for(let[e,a]of Object.entries(t.props))if(e!==`children`&&e!==`key`)if(n.props&&e in n.props){let t=n.props[e];typeof a==`function`||(Array.isArray(a)&&Array.isArray(t)?JSON.stringify(a)!==JSON.stringify(t)&&i({element:r,key:e,val:a}):n.props[e]!==a&&i({element:r,key:e,val:a}))}else i({element:r,key:e,val:a});if(t.children.length){let e=0;for(let i=0;i<t.children.length;i++){let s=t.children[i];if(s){let t=n.children?n.children[i-e]:void 0;if(t?.domNode)if(s.key===t.key)s.domNode=t.domNode,o({domNode:t.domNode,newVirtualNode:s,oldVirtualNode:t});else{let i=n.children.findIndex(e=>e?.key===s.key),a=i>-1?n.children[i]:null;a?.domNode&&(r.moveBefore(a.domNode,t.domNode),s.domNode=a.domNode,e++,o({domNode:a.domNode,newVirtualNode:s,oldVirtualNode:a}),n.children.splice(i,1))}else s.type!==`effect`&&a({domNode:r,virtualNode:s});n.children[i-e]=null}}if(n.children.length+e>t.children.length)for(let i=t.children.length;i<n.children.length+e;i++){let t=n.children[i-e]?.domNode;t&&r.removeChild(t)}}else n.children?.length&&r.replaceChildren()}else console.log(`Different node types`),n.domNode&&a({domNode:n.domNode,virtualNode:t,replace:!0});else t.type===`text`&&n.type===`text`&&t.value!==n.value&&(t.domNode=n.domNode,t.domNode.nodeValue=t.value);else console.warn(`Different node types`),n.domNode&&a({domNode:n.domNode,virtualNode:t,replace:!0});else console.warn(`Old or new node is null`);return e};export{a as n,r,o as t};
@@ -0,0 +1 @@
1
+ import{n as e,t}from"./signal-store-0zk-69gB.js";import{t as n}from"./context-store-BpRmbHKI.js";import{t as r}from"./effect-Bd9_A9t9.js";const i=e=>!Array.isArray(e)&&typeof e==`object`&&!!e&&typeof e.type==`function`&&e.type.name===`Fragment`,a=({node:e,asyncComponents:t=[],clientComponents:n=[]})=>{let r=[];if(Array.isArray(e))for(let i of e)r.push(...a({node:i,asyncComponents:t,clientComponents:n}));else if(e)if(i(e)){let i=e.type(e.props);r.push(...a({node:i,asyncComponents:t,clientComponents:n}))}else{let i=s({node:e,asyncComponents:t,clientComponents:n});Array.isArray(i)?r.push(...i):r.push(i)}return r},o=({fn:e,key:i,props:a,asyncComponents:o,clientComponents:c})=>{let l=null,u=null,d=e=>{l=e,u&&u(e)},f=[],p=n.current,m=p?new Map(p):new Map;return r(()=>{t.set(f),n.current=m;let r=e(a);if(r instanceof Promise){let e=c.length+o.length+1;o.push(new Promise(t=>{r.then(n=>{t({index:e,node:n})})})),d({type:`async`,key:i,promise:r,index:e})}else d(s({node:r,asyncComponents:o,clientComponents:c}))}),{type:`effect`,value:l,addCallback:e=>{u=e}}},s=({node:t,asyncComponents:n=[],clientComponents:r=[]})=>{if(Array.isArray(t))return a({node:t,asyncComponents:n,clientComponents:r});if(t===null)return null;if(typeof t==`string`||typeof t==`number`)return{type:`text`,value:String(t)};if(t instanceof e.Computed||t instanceof e.State)return{type:`signal`,value:t};if(typeof t==`object`&&typeof t.type==`function`&&!i(t)&&typeof t.type==`function`)return o({fn:t.type,key:t.key,props:t.props,asyncComponents:n,clientComponents:r});if(typeof t==`object`&&typeof t.type==`object`&&t.type.type===`client`)return r.push({path:t.type.path,name:t.type.name}),{type:`client`,key:t.key,props:t.props,path:t.type.path,name:t.type.name};if(typeof t==`object`&&typeof t.type==`string`){let e=a({node:t.props.children,asyncComponents:n,clientComponents:r});return{type:`element`,key:t.key,value:t.type,props:t.props,children:e}}return console.warn(`Unhandled node type`,t),null};export{o as n,s as t};
package/dist/vite.js CHANGED
@@ -4,4 +4,4 @@ import e from"node:fs";import t from"node:path";const n=new TextEncoder,r=async
4
4
  "${c||r}",
5
5
  "${e}"
6
6
  );\n`);return{code:s}}else if(e.startsWith(`"use server"`)){let t=l(e),n=`import { registerServerFunction } from "renku";
7
- `,o=a?i:await r(i);s.set(o,i);for(let e of t)c&&(n=n.concat(`export const ${e} = await registerServerFunction("${o}", "${e}");\n`));return c?{code:n}:void 0}},async buildStart(){if(n.mode===`production`){if(this.environment.name===`client`)for(let e of o)this.emitFile({type:`chunk`,id:e,preserveSignature:`exports-only`});else if(this.environment.name===`ssr`)for(let[e,n]of s){let r=t.join(`functions`,e);this.emitFile({type:`chunk`,id:n,name:r})}}},generateBundle(e,r){if(this.environment.name===`ssr`){for(let[e,i]of Object.entries(r))if(i.type===`asset`){let e=t.resolve(n.root,this.environment.config.build.outDir,i.fileName);c.add(e)}}else if(this.environment.name===`client`){for(let[e,i]of Object.entries(r))if(i.type===`chunk`&&i.isEntry&&((i.name===`main`||l===null)&&(l=n.base.concat(i.fileName)),i.facadeModuleId)){let e=n.base.concat(t.relative(n.root,i.facadeModuleId));o.has(e)&&u.set(e,n.base.concat(i.fileName))}}},config(){return{builder:{buildApp:async n=>{let r=[`ssr`,`client`,`ssr`],i=!1;for(let e of r)if(e in n.environments&&n.environments[e]){let t=n.environments[e];t.config.build.write=i,await n.build(t),i=!0}for(let n of c){let r=n.replace(`/ssr/`,`/client/`);console.log(`Moving asset from`,n,`to`,r);let i=t.dirname(r);e.mkdirSync(i,{recursive:!0}),e.renameSync(n,r)}}},build:{manifest:!0},resolve:{alias:{"/@renku/client":import.meta.resolve(`renku/client`)}},environments:{client:{build:{rollupOptions:{input:{main:`renku/client`}}}}}}}}}export{o as default};
7
+ `,o=a?i:await r(i);s.set(o,i);for(let e of t)c&&(n=n.concat(`export const ${e} = await registerServerFunction("${o}", "${e}");\n`));return c?{code:n}:void 0}},async buildStart(){if(n.mode===`production`){if(this.environment.name===`client`)for(let e of o)this.emitFile({type:`chunk`,id:e,preserveSignature:`exports-only`});else if(this.environment.name===`ssr`)for(let[e,n]of s){let r=t.join(`functions`,e);this.emitFile({type:`chunk`,id:n,name:r})}}},generateBundle(e,r){if(this.environment.name===`ssr`){for(let[e,i]of Object.entries(r))if(i.type===`asset`){let e=t.resolve(n.root,this.environment.config.build.outDir,i.fileName);c.add(e)}}else if(this.environment.name===`client`){for(let[e,i]of Object.entries(r))if(i.type===`chunk`&&i.isEntry&&((i.name===`main`||l===null)&&(l=n.base.concat(i.fileName)),i.facadeModuleId)){let e=n.base.concat(t.relative(n.root,i.facadeModuleId));o.has(e)&&u.set(e,n.base.concat(i.fileName))}}},config(){return{builder:{buildApp:async n=>{let r=[`ssr`,`client`,`ssr`],i=!1;for(let e of r)if(e in n.environments&&n.environments[e]){let t=n.environments[e];t.config.build.write=i,await n.build(t),i=!0}for(let n of c){let r=n.replace(`/ssr/`,`/client/`);console.log(`Moving asset from`,n,`to`,r);let i=t.dirname(r);e.mkdirSync(i,{recursive:!0}),e.renameSync(n,r)}}},build:{manifest:!0,rollupOptions:{output:{chunkFileNames:e=>e.name?.startsWith(`functions/`)?`assets/[name].js`:`assets/[name]-[hash].js`}}},resolve:{alias:{"/@renku/client":import.meta.resolve(`renku/client`)}},environments:{client:{build:{rollupOptions:{input:{main:`renku/client`}}}}}}}}}export{o as default};
package/package.json CHANGED
@@ -1,40 +1,23 @@
1
1
  {
2
2
  "name": "renku",
3
- "description": "Renku",
4
- "version": "0.0.3",
5
- "type": "module",
3
+ "version": "0.0.6",
6
4
  "private": false,
5
+ "description": "Renku",
7
6
  "homepage": "https://renku.dev",
8
7
  "bugs": {
9
8
  "url": "https://github.com/renkudev/renku/issues"
10
9
  },
10
+ "repository": "github:renkudev/renku",
11
11
  "author": {
12
12
  "name": "Benedikt Müller",
13
13
  "email": "ben@renku.dev",
14
14
  "url": "http://bndkt.com"
15
15
  },
16
- "repository": "github:renkudev/renku",
17
- "files": [
18
- "dist",
19
- "package.json",
20
- "README.md"
21
- ],
22
- "scripts": {
23
- "dev": "tsdown --watch",
24
- "lint": "oxlint",
25
- "tsc": "tsc",
26
- "build": "PREVIEW=true tsdown",
27
- "pub": "bun run build && bun publish --dry-run",
28
- "generate-types": "wrangler -c src/cloudflare/wrangler.jsonc types src/cloudflare/worker-configuration.d.ts"
29
- },
16
+ "type": "module",
30
17
  "imports": {
31
18
  "#renku/jsx-dev-runtime": "./src/jsx/jsx-dev-runtime.ts",
32
19
  "#renku/jsx-runtime": "./src/jsx/jsx-runtime.ts"
33
20
  },
34
- "bin": {
35
- "renku": "./dist/cli.js",
36
- "__renku_bash_complete": "./dist/bash-complete.js"
37
- },
38
21
  "exports": {
39
22
  ".": {
40
23
  "types": "./dist/index.d.ts",
@@ -76,10 +59,6 @@
76
59
  "types": "./dist/jsx-runtime.d.ts",
77
60
  "import": "./dist/jsx-runtime.js"
78
61
  },
79
- "./ui": {
80
- "types": "./dist/ui.d.ts",
81
- "import": "./dist/ui.js"
82
- },
83
62
  "./server": {
84
63
  "types": "./dist/server.d.ts",
85
64
  "import": "./dist/server.js"
@@ -89,24 +68,45 @@
89
68
  "import": "./dist/server-functions.js"
90
69
  },
91
70
  "./tsconfig": "./tsconfig.base.json",
71
+ "./ui": {
72
+ "types": "./dist/ui.d.ts",
73
+ "import": "./dist/ui.js"
74
+ },
75
+ "./ui/theme": "./dist/theme.css",
92
76
  "./vite": {
93
77
  "types": "./dist/vite.d.ts",
94
78
  "import": "./dist/vite.js"
95
79
  }
96
80
  },
81
+ "bin": {
82
+ "__renku_bash_complete": "./dist/bash-complete.js",
83
+ "renku": "./dist/cli.js"
84
+ },
85
+ "files": [
86
+ "README.md",
87
+ "dist",
88
+ "package.json"
89
+ ],
90
+ "scripts": {
91
+ "dev": "tsdown --watch",
92
+ "lint": "oxlint --type-aware",
93
+ "tsc": "tsc",
94
+ "build": "PREVIEW=true tsdown",
95
+ "generate-types": "wrangler -c src/cloudflare/wrangler.jsonc types src/cloudflare/worker-configuration.d.ts"
96
+ },
97
97
  "dependencies": {
98
- "@sqlite.org/sqlite-wasm": "3.51.1-build1",
99
- "@standard-schema/spec": "1.0.0",
100
- "capnweb": "0.2.0",
98
+ "@sqlite.org/sqlite-wasm": "3.51.1-build2",
99
+ "@standard-schema/spec": "1.1.0",
100
+ "capnweb": "0.3.0",
101
101
  "signal-polyfill": "0.2.2"
102
102
  },
103
103
  "devDependencies": {
104
104
  "@stricli/auto-complete": "1.2.4",
105
105
  "@stricli/core": "1.2.4",
106
- "@types/bun": "1.3.3",
107
- "tsdown": "0.17.0-beta.4",
106
+ "@types/bun": "1.3.4",
107
+ "tsdown": "0.18.1",
108
108
  "typescript": "5.9.3",
109
- "vite": "7.2.4",
110
- "wrangler": "4.51.0"
109
+ "vite": "7.3.0",
110
+ "wrangler": "4.55.0"
111
111
  }
112
112
  }
@@ -1 +0,0 @@
1
- import{n as e,t}from"./signal-store-0zk-69gB.js";const n=e=>t.get(e);function r(e,t){let r=n({status:`loading`,error:!1,data:null});return r.get().status===`loading`&&e().then(async e=>{if(!t)r.set({status:`success`,error:!1,data:e});else{let n=t(e),i=n instanceof Promise?await n:n;r.set({status:`success`,error:!1,data:i})}}).catch(e=>r.set({status:`error`,error:e,data:null})),r}const i=t=>new e.Computed(t);export{r as n,n as r,i as t};
@@ -1 +0,0 @@
1
- import{newWebSocketRpcSession as e}from"capnweb";const t=(t,n)=>{console.log(`☎️`,`Registering server function:`,t,n);let r=`/@renku/rpc/${encodeURIComponent(t)}/${encodeURIComponent(n)}`;return(...i)=>{let a=e(r);return console.log(`☎️`,`Calling server function:`,t,n,i),a(...i)}};export{t};
@@ -1 +0,0 @@
1
- import{n as e,t}from"./signal-store-0zk-69gB.js";import{t as n}from"./effect-hmzj-Jig.js";const r=e=>!Array.isArray(e)&&typeof e==`object`&&!!e&&typeof e.type==`function`&&e.type.name===`Fragment`,i=({node:e,asyncComponents:t=[],clientComponents:n=[]})=>{let a=[];if(Array.isArray(e))for(let r of e)a.push(...i({node:r,asyncComponents:t,clientComponents:n}));else if(e)if(r(e)){let r=e.type(e.props);a.push(...i({node:r,asyncComponents:t,clientComponents:n}))}else{let r=o({node:e,asyncComponents:t,clientComponents:n});Array.isArray(r)?a.push(...r):a.push(r)}return a},a=({fn:e,key:r,props:i,asyncComponents:a,clientComponents:s})=>{let c=null,l=null,u=e=>{c=e,l&&l(e)},d=[];return n(()=>{t.set(d);let n=e(i);if(n instanceof Promise){let e=s.length+a.length+1;a.push(new Promise(t=>{n.then(n=>{t({index:e,node:n})})})),u({type:`async`,key:r,promise:n,index:e})}else u(o({node:n,asyncComponents:a,clientComponents:s}))}),{type:`effect`,value:c,addCallback:e=>{l=e}}},o=({node:t,asyncComponents:n=[],clientComponents:o=[]})=>{if(Array.isArray(t))return i({node:t,asyncComponents:n,clientComponents:o});if(t===null)return null;if(typeof t==`string`||typeof t==`number`)return{type:`text`,value:String(t)};if(t instanceof e.Computed||t instanceof e.State)return{type:`signal`,value:t};if(typeof t==`object`&&typeof t.type==`function`&&!r(t)&&typeof t.type==`function`)return a({fn:t.type,key:t.key,props:t.props,asyncComponents:n,clientComponents:o});if(typeof t==`object`&&typeof t.type==`object`&&t.type.type===`client`)return o.push({path:t.type.path,name:t.type.name}),{type:`client`,key:t.key,props:t.props,path:t.type.path,name:t.type.name};if(typeof t==`object`&&typeof t.type==`string`){let e=i({node:t.props.children,asyncComponents:n,clientComponents:o});return{type:`element`,key:t.key,value:t.type,props:t.props,children:e}}return console.warn(`Unhandled node type`,t),null};export{a as n,o as t};
File without changes
File without changes
File without changes
File without changes