renku 0.0.11 → 0.0.13

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 (52) hide show
  1. package/dist/async-context.browser.d.ts +13 -0
  2. package/dist/async-context.browser.js +1 -0
  3. package/dist/async-context.server.d.ts +13 -0
  4. package/dist/async-context.server.js +1 -0
  5. package/dist/{async-generator-to-readable-stream-5pOhiwD8.js → async-generator-to-readable-stream-SYqrIInH.js} +1 -1
  6. package/dist/{auth-4756QcgX.js → auth-CFd7zVNL.js} +1 -1
  7. package/dist/auth.js +1 -1
  8. package/dist/bash-complete.js +1 -1
  9. package/dist/bun.d.ts +1 -3
  10. package/dist/bun.js +1 -1
  11. package/dist/cli.js +1 -1
  12. package/dist/client.js +3 -1
  13. package/dist/{cloudflare-DarCw7vT.js → cloudflare-D6q_bWsO.js} +1 -1
  14. package/dist/cloudflare.d.ts +2 -2
  15. package/dist/cloudflare.js +1 -1
  16. package/dist/cloudflare.worker.d.ts +2 -2
  17. package/dist/cloudflare.worker.js +1 -1
  18. package/dist/{context-C1t1GsoU.js → context-C8lLS_E1.js} +1 -1
  19. package/dist/context-store-D9atdfKO.js +1 -0
  20. package/dist/create-computed-DTLDV6XM.js +1 -0
  21. package/dist/create-context-Ccu6Wido.js +1 -0
  22. package/dist/create-signal-2H8hjZy6.js +1 -0
  23. package/dist/data.d.ts +18 -18
  24. package/dist/data.js +1 -1
  25. package/dist/dom.d.ts +1 -1
  26. package/dist/dom.js +1 -1
  27. package/dist/{effect-Bd9_A9t9.js → effect-CQrGu-8V.js} +1 -1
  28. package/dist/{index-DWK1eOW-.d.ts → index-B747aB5c.d.ts} +5 -5
  29. package/dist/index.d.ts +2 -2
  30. package/dist/index.js +1 -1
  31. package/dist/jsx-dev-runtime.js +1 -1
  32. package/dist/jsx-runtime.js +1 -1
  33. package/dist/jsx-to-virtual-node-CMwF0-OF.js +1 -0
  34. package/dist/{register-server-function-C48-V7Zl.d.ts → register-server-function-RuJLKnp7.d.ts} +0 -1
  35. package/dist/render-dom-node-drdl_pap.js +1 -0
  36. package/dist/server.d.ts +1 -1
  37. package/dist/theme.css +114 -46
  38. package/dist/{types-BYprbzJ7.d.ts → types-B2azyMGn.d.ts} +6 -6
  39. package/dist/ui.d.ts +58 -83
  40. package/dist/ui.js +1 -1
  41. package/package.json +24 -13
  42. package/dist/context-store-ptQxy_Tf.js +0 -1
  43. package/dist/create-computed-lI_3nbQK.js +0 -1
  44. package/dist/create-context-HSD02vmk.js +0 -1
  45. package/dist/create-loader-MWloSurG.js +0 -1
  46. package/dist/jsx-runtime-CwvSR9n_.js +0 -0
  47. package/dist/jsx-to-virtual-node-CKXtqFFH.js +0 -1
  48. package/dist/render-dom-node-BMsKFUby.js +0 -1
  49. /package/dist/{create-element-CkxIHf8j.js → create-element-Cir0MD8J.js} +0 -0
  50. /package/dist/{fragment-Be4WKiZ3.js → fragment-DqC2avbk.js} +0 -0
  51. /package/dist/{get-route-vX5hwL4r.js → get-route--eZsPlal.js} +0 -0
  52. /package/dist/{signal-store-0zk-69gB.js → signal-store-B0_cH-Uu.js} +0 -0
@@ -0,0 +1,13 @@
1
+ //#region src/reactivity/async-context.browser.d.ts
2
+ declare class AsyncContextVariable<T> {
3
+ #private;
4
+ get(): T | undefined;
5
+ set(value: T | undefined): void;
6
+ run<R>(value: T, fn: () => R): R;
7
+ }
8
+ type AsyncContextObject = {
9
+ Variable: typeof AsyncContextVariable;
10
+ };
11
+ declare const AsyncContext: AsyncContextObject;
12
+ //#endregion
13
+ export { AsyncContext, AsyncContextVariable };
@@ -0,0 +1 @@
1
+ var e=class{#e;get(){return this.#e}set(e){this.#e=e}run(e,t){let n=this.#e;this.#e=e;try{return t()}finally{this.#e=n}}};const t={Variable:e};export{t as AsyncContext,e as AsyncContextVariable};
@@ -0,0 +1,13 @@
1
+ //#region src/reactivity/async-context.server.d.ts
2
+ declare class AsyncContextVariable<T> {
3
+ #private;
4
+ get(): T | undefined;
5
+ set(_value: T | undefined): void;
6
+ run<R>(value: T, fn: () => R): R;
7
+ }
8
+ type AsyncContextObject = {
9
+ Variable: typeof AsyncContextVariable;
10
+ };
11
+ declare const AsyncContext: AsyncContextObject;
12
+ //#endregion
13
+ export { AsyncContext, AsyncContextVariable };
@@ -0,0 +1 @@
1
+ import{AsyncLocalStorage as e}from"node:async_hooks";var t=class{#e=new e;get(){return this.#e.getStore()}set(e){throw Error(`Cannot set AsyncContext value on server. Use run().`)}run(e,t){return this.#e.run(e,t)}};const n={Variable:t};export{n as AsyncContext,t as AsyncContextVariable};
@@ -1,4 +1,4 @@
1
- import{n as e}from"./signal-store-0zk-69gB.js";import{t}from"./jsx-to-virtual-node-CKXtqFFH.js";async function*n(e){yield`<!DOCTYPE html>`;for await(let t of e)t[1]&&(yield t[1])}async function*r(e){for await(let t of e)t[0]&&(yield t[0])}async function*i(e){let n=new Set(e.map(e=>e.then(({index:e,node:n})=>({index:e,virtualNode:t({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*a({key:t,val:n,trailingComma:r,output:i}){if(typeof n==`string`||typeof n==`number`){t===`className`&&(t=`class`);let e=typeof n==`number`?String(n):`"${String(n)}"`;return yield i(`${r?`,`:``}"${t}":${e}`,` ${t}="${String(n)}"`),!0}if(n instanceof e.State||n instanceof e.Computed)return yield i(`${r?`,`:``}"${t}":"${String(n.get())}"`,` ${t}="${String(n.get())}"`),!0;if(Array.isArray(n)){let a=n.map(t=>t instanceof e.State||t instanceof e.Computed?String(t.get()):String(t)).join(` `);return yield i(`${r?`,`:``}"${t}":"${a}"`,` ${t}="${a}"`),!0}}const o=new Set([`area`,`base`,`br`,`col`,`embed`,`hr`,`img`,`input`,`link`,`meta`,`source`,`track`,`wbr`]);async function*s({virtualNode:e,asyncVirtualNodes:t,leadingComma:n=!1,rscBuffer:r=[]}){let i=(e,t)=>(e&&r.push(e),[e,t]),c=(e,t)=>i(e,null);if(Array.isArray(e))for(let i of e)yield*s({virtualNode:i,asyncVirtualNodes:t,leadingComma:n,rscBuffer:r}),n=!0;else if(e?.type===`element`){yield i(`${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*a({key:t,val:n,trailingComma:!c,output:i}))&&(c=!1);if(yield i(null,o.has(e.value)?` />`:`>`),e.children.length>0){let n=!0;yield i(`${c?``:`,`}"children":[`,null);for(let i of e.children)(yield*s({virtualNode:i,asyncVirtualNodes:t,leadingComma:!n,rscBuffer:r}))&&(n=!1);e.value!==`html`&&(yield i(`]`,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{n as e}from"./signal-store-B0_cH-Uu.js";import{t}from"./jsx-to-virtual-node-CMwF0-OF.js";async function*n(e){yield`<!DOCTYPE html>`;for await(let t of e)t[1]&&(yield t[1])}async function*r(e){for await(let t of e)t[0]&&(yield t[0])}async function*i(e){let n=new Set(e.map(e=>e.then(({index:e,node:n})=>({index:e,virtualNode:t({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*a({key:t,val:n,trailingComma:r,output:i}){if(typeof n==`string`||typeof n==`number`){t===`className`&&(t=`class`);let e=typeof n==`number`?String(n):`"${String(n)}"`;return yield i(`${r?`,`:``}"${t}":${e}`,` ${t}="${String(n)}"`),!0}if(n instanceof e.State||n instanceof e.Computed)return yield i(`${r?`,`:``}"${t}":"${String(n.get())}"`,` ${t}="${String(n.get())}"`),!0;if(Array.isArray(n)){let a=n.map(t=>t instanceof e.State||t instanceof e.Computed?String(t.get()):String(t)).join(` `);return yield i(`${r?`,`:``}"${t}":"${a}"`,` ${t}="${a}"`),!0}}const o=new Set([`area`,`base`,`br`,`col`,`embed`,`hr`,`img`,`input`,`link`,`meta`,`source`,`track`,`wbr`]);async function*s({virtualNode:e,asyncVirtualNodes:t,leadingComma:n=!1,rscBuffer:r=[]}){let i=(e,t)=>(e&&r.push(e),[e,t]),c=(e,t)=>i(e,null);if(Array.isArray(e))for(let i of e)yield*s({virtualNode:i,asyncVirtualNodes:t,leadingComma:n,rscBuffer:r}),n=!0;else if(e?.type===`element`){yield i(`${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*a({key:t,val:n,trailingComma:!c,output:i}))&&(c=!1);if(yield i(null,o.has(e.value)?` />`:`>`),e.children.length>0){let n=!0;yield i(`${c?``:`,`}"children":[`,null);for(let i of e.children)(yield*s({virtualNode:i,asyncVirtualNodes:t,leadingComma:!n,rscBuffer:r}))&&(n=!1);e.value!==`html`&&(yield i(`]`,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*s({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}"]`}\`);
@@ -1 +1 @@
1
- import{t as e}from"./context-store-ptQxy_Tf.js";const t=Symbol(`auth-context`),n=()=>({sessionId:null,userId:null}),r=()=>{let r=e.get(t);if(r)return r;let i=n();return e.set(t,i),i};export{t as n,n as r,r as t};
1
+ import{t as e}from"./context-store-D9atdfKO.js";const t=Symbol(`auth-context`),n=()=>({sessionId:null,userId:null}),r=()=>{let r=e.get(t);if(r)return r;let i=n();return e.set(t,i),i};export{t as n,n as r,r as t};
package/dist/auth.js CHANGED
@@ -1 +1 @@
1
- import"./context-store-ptQxy_Tf.js";import{t as e}from"./auth-4756QcgX.js";export{e as auth};
1
+ import"./context-store-D9atdfKO.js";import{t as e}from"./auth-CFd7zVNL.js";export{e as auth};
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env bun
2
- import{n as e,t}from"./context-C1t1GsoU.js";import{proposeCompletions as n}from"@stricli/core";const r=process.argv.slice(3);process.env.COMP_LINE?.endsWith(` `)&&r.push(``),await n(e,r,t(process));try{for(let{completion:i}of await n(e,r,t(process)))process.stdout.write(`${i}\n`)}catch{}
2
+ import{n as e,t}from"./context-C8lLS_E1.js";import{proposeCompletions as n}from"@stricli/core";const r=process.argv.slice(3);process.env.COMP_LINE?.endsWith(` `)&&r.push(``),await n(e,r,t(process));try{for(let{completion:i}of await n(e,r,t(process)))process.stdout.write(`${i}\n`)}catch{}
package/dist/bun.d.ts CHANGED
@@ -1,7 +1,5 @@
1
- import { Bake, BunPlugin } from "bun";
2
-
3
1
  //#region src/bun/render.d.ts
4
- declare const render: (request: Request, routeMetadata: Bake.RouteMetadata) => Promise<Response>;
2
+ declare const render: (request: Request, routeMetadata: Bake$1.RouteMetadata) => Promise<Response>;
5
3
  //#endregion
6
4
  //#region src/bun/types.d.ts
7
5
  type RenkuBunBake = (props: {
package/dist/bun.js CHANGED
@@ -1 +1 @@
1
- import"./context-store-ptQxy_Tf.js";import{i as e,n as t,r as n,t as r}from"./async-generator-to-readable-stream-5pOhiwD8.js";import"./signal-store-0zk-69gB.js";import"./jsx-to-virtual-node-CKXtqFFH.js";import"./effect-Bd9_A9t9.js";import"./fragment-Be4WKiZ3.js";const i=async(i,a)=>{let{styles:o,modules:s,pageModule:c,layouts:l}=a,u=await c.default();for(let e of l)u=await e.default({children:[u],_renku:{styles:o,modules:s}});let d=t(u);if(i.headers.get(`Accept`)===`text/x-component`){let e=n(d);return new Response(r(e),{headers:{"Content-Type":`text/x-component`}})}let f=e(d);return new Response(r(f),{headers:{"Content-Type":`text/html`}})},a=({plugins:e})=>({app:{framework:{fileSystemRouterTypes:[{root:`./pages`,serverEntryPoint:`renku/bun`,clientEntryPoint:`renku/client`,style:`nextjs-pages`,layouts:!0,extensions:[`ts`,`tsx`,`md`,`mdx`]}],serverComponents:{separateSSRGraph:!1,serverRuntimeImportSource:`renku/server`},plugins:e}}});export{i as render,a as renku};
1
+ import"./context-store-D9atdfKO.js";import{i as e,n as t,r as n,t as r}from"./async-generator-to-readable-stream-SYqrIInH.js";import"./signal-store-B0_cH-Uu.js";import"./jsx-to-virtual-node-CMwF0-OF.js";import"./effect-CQrGu-8V.js";import"./fragment-DqC2avbk.js";const i=async(i,a)=>{let{styles:o,modules:s,pageModule:c,layouts:l}=a,u=await c.default();for(let e of l)u=await e.default({children:[u],_renku:{styles:o,modules:s}});let d=t(u);if(i.headers.get(`Accept`)===`text/x-component`){let e=n(d);return new Response(r(e),{headers:{"Content-Type":`text/x-component`}})}let f=e(d);return new Response(r(f),{headers:{"Content-Type":`text/html`}})},a=({plugins:e})=>({app:{framework:{fileSystemRouterTypes:[{root:`./pages`,serverEntryPoint:`renku/bun`,clientEntryPoint:`renku/client`,style:`nextjs-pages`,layouts:!0,extensions:[`ts`,`tsx`,`md`,`mdx`]}],serverComponents:{separateSSRGraph:!1,serverRuntimeImportSource:`renku/server`},plugins:e}}});export{i as render,a as renku};
package/dist/cli.js CHANGED
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env bun
2
- import{n as e,t}from"./context-C1t1GsoU.js";import{run as n}from"@stricli/core";await n(e,process.argv.slice(2),t(process));
2
+ import{n as e,t}from"./context-C8lLS_E1.js";import{run as n}from"@stricli/core";await n(e,process.argv.slice(2),t(process));
package/dist/client.js CHANGED
@@ -1 +1,3 @@
1
- import"./context-store-ptQxy_Tf.js";import"./signal-store-0zk-69gB.js";import{n as e}from"./jsx-to-virtual-node-CKXtqFFH.js";import"./effect-Bd9_A9t9.js";import"./fragment-Be4WKiZ3.js";import{n as t,r as n,t as r}from"./render-dom-node-BMsKFUby.js";const i=e=>Array.isArray(e)&&e[0]===`E`,a=e=>Array.isArray(e)&&e[0]===`A`,o=e=>Array.isArray(e)&&e[0]===`C`,s=e=>{if(i(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 a(e)?{type:`async`,key:e[1],index:e[2]}:o(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=(t,i)=>{if(i?.type===`element`&&i.value.toLowerCase()===t.tagName.toLowerCase()){i.domNode=t;for(let[a,o]of i.children.entries()){let s=t.childNodes[a];if(s)if(o?.type===`element`)s instanceof HTMLElement&&c(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(t=>{let i=e({fn:t[o.name],key:o.key,props:o.props,asyncComponents:[],clientComponents:[]});Array.isArray(i)?n({domNode:s,virtualNode:i,replace:!0}):r({domNode:s,virtualNode:i,replace:!0})}))}}},l={virtualNode:void 0},u=e=>{try{let t=JSON.parse(e);if(i(t)){let e=s(t);c(document.documentElement,e),l.virtualNode=e}else console.warn(`Unhandled: Not RSC Element`)}catch(e){console.error(`Failed to parse RSC chunk:`,e)}},d=async e=>{let n=await fetch(e.pathname,{headers:{Accept:`text/x-component`}});if(n.body&&l.virtualNode){let e=s(await n.json());t({domNode:document.documentElement,oldVirtualNode:l.virtualNode,newVirtualNode:e}),l.virtualNode=e;return}console.error(`No body`)},f=e=>!e.canIntercept||e.hashChange||!!e.downloadRequest||!!e.formData||e.destination.sameDocument;window.navigation.addEventListener(`navigate`,e=>{if(f(e))return;let t=new URL(e.destination.url);e.intercept({async handler(){await d(t)}})}),window.__RSC||=[];for(let e of window.__RSC)u(e);window.__RSC.push=e=>(console.log(`streamed rsc line`,e),window.__RSC.length);
1
+ import"./context-store-D9atdfKO.js";import"./signal-store-B0_cH-Uu.js";import{n as e}from"./jsx-to-virtual-node-CMwF0-OF.js";import"./effect-CQrGu-8V.js";import"./fragment-DqC2avbk.js";import{n as t,t as n}from"./render-dom-node-drdl_pap.js";const r=e=>Array.isArray(e)&&e[0]===`A`,i=e=>Array.isArray(e)&&e[0]===`C`,a=e=>Array.isArray(e)&&e[0]===`E`,o=e=>{if(a(e)){let t=[],{children:n,...r}=e[3];if(n)for(let e of n)t.push(o(e));return{type:`element`,value:e[1],key:e[2],props:r,children:t}}return r(e)?{type:`async`,key:e[1],index:e[2]}:i(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},s=(r,i)=>{if(i?.type===`element`&&i.value.toLowerCase()===r.tagName.toLowerCase()){i.domNode=r;for(let[a,o]of i.children.entries()){let c=r.childNodes[a];if(c)if(o?.type===`element`)c instanceof HTMLElement&&s(c,o);else if(o?.type===`text`){if(c.textContent===o.value)o.domNode=c;else if(c.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;c.textContent===e&&(o.domNode=c)}}else o?.type===`signal`?c.textContent===String(o.value.get())&&(o.domNode=c):o?.type===`async`?c.nodeType===Node.COMMENT_NODE&&(o.domNode=c):o?.type===`client`&&c.nodeType===Node.COMMENT_NODE&&(o.domNode=c,import(o.path).then(r=>{let i=e({fn:r[o.name],key:o.key,props:o.props,asyncComponents:[],clientComponents:[]});Array.isArray(i)?t({domNode:c,virtualNode:i,replace:!0}):n({domNode:c,virtualNode:i,replace:!0})}))}}},c={mode:`hydrate`,rootApplied:!1,pendingAsyncPlaceholders:[],pendingClientPlaceholders:[]},l=()=>{c.pendingAsyncPlaceholders=Array.from(document.querySelectorAll(`template[data-id^="async-placeholder-"]`))},u=()=>{let e=[],t=document.createTreeWalker(document.documentElement,NodeFilter.SHOW_COMMENT),n=t.nextNode();for(;n;)n.nodeValue?.trim()===`CLIENT`&&e.push(n),n=t.nextNode();c.pendingClientPlaceholders=e},d=e=>{let t=o(e);t&&(c.mode===`hydrate`?document.documentElement instanceof HTMLElement&&s(document.documentElement,t):n({domNode:document.documentElement,virtualNode:t,replace:!0}),l(),u(),c.rootApplied=!0)},f=e=>a(e)&&e[1]===`html`,p=(e,r)=>{Array.isArray(r)?t({domNode:e,virtualNode:r,replace:!0}):n({domNode:e,virtualNode:r,replace:!0})},m=(r,i)=>{import(i.path).then(a=>{let o=e({fn:a[i.name],key:i.key,props:i.props,asyncComponents:[],clientComponents:[]});Array.isArray(o)?t({domNode:r,virtualNode:o,replace:!0}):n({domNode:r,virtualNode:o,replace:!0})})},h=e=>{let t=c.pendingAsyncPlaceholders.shift();if(!t)return;let n=o(e);n&&p(t,n)},g=e=>{let t=c.pendingClientPlaceholders.shift();if(!t)return;let n=o(e);!n||n.type!==`client`||m(t,n)},_=()=>{c.mode=`hydrate`,c.rootApplied=!1,c.pendingAsyncPlaceholders=[],c.pendingClientPlaceholders=[]},v=()=>{c.mode=`replace`,c.rootApplied=!1,c.pendingAsyncPlaceholders=[],c.pendingClientPlaceholders=[]},y=e=>{let t=e.trim();if(!t)return;let n;try{n=JSON.parse(t)}catch(e){console.error(`Failed to parse RSC chunk:`,e);return}if(a(n)){!c.rootApplied&&f(n)?d(n):c.rootApplied&&h(n);return}if(i(n)){if(!c.rootApplied)return;g(n);return}r(n)},b=async e=>{console.log(`🧭`,`Loading`,e.pathname);let t=await fetch(e.pathname,{headers:{Accept:`text/x-component`}});if(!t.body){console.error(`🧭`,`No body returned`);return}v();let n=t.body.getReader(),r=new TextDecoder,i=``;for(;;){let{value:e,done:t}=await n.read();if(t)break;i+=r.decode(e,{stream:!0});let a=i.indexOf(`
2
+ `);for(;a!==-1;){let e=i.slice(0,a).trim();e&&y(e),i=i.slice(a+1),a=i.indexOf(`
3
+ `)}}let a=i.trim();a&&y(a)},x=e=>!e.canIntercept||e.hashChange||!!e.downloadRequest||!!e.formData||e.destination.sameDocument;window.navigation.addEventListener(`navigate`,e=>{if(x(e))return;let t=new URL(e.destination.url);console.log(`🧭`,`Intercepted nav to`,t.pathname),e.intercept({async handler(){await b(t)}})}),window.__RSC||=[],_();for(let e of window.__RSC)y(e);const S=window.__RSC.push.bind(window.__RSC);window.__RSC.push=e=>{let t=S(e);return y(e),t};
@@ -1 +1 @@
1
- import{t as e}from"./context-store-ptQxy_Tf.js";import{n as t,r as n,t as r}from"./auth-4756QcgX.js";import{i,n as a,r as o,t as s}from"./async-generator-to-readable-stream-5pOhiwD8.js";import{n as c,t as l}from"./get-route-vX5hwL4r.js";import{newWorkersRpcResponse as u}from"capnweb";import{clientEntry as d}from"virtual:renku";const f=({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)},p=({rpName:e,sessionExpiryInMinutes:t})=>{t??=60;let n=e=>e*60*1e3;return{"/validate-session":{GET:async(e,t,n)=>r().sessionId?Response.json({isAuthenticated:!0}):Response.json({isAuthenticated:!1})},"/logout":{POST:async(e,t,i)=>{let a=r();a.sessionId&&await t.AUTH_DO.getByName(`session:${a.sessionId}`).logout();let o=new Date(Date.now()-n(10)).toUTCString();return new Response(null,{headers:{"Set-Cookie":`sessionId=; Path=/; SameSite=Strict; Secure; Expires=${o}`}})},GET:async(e,t,i)=>{let a=r();a.sessionId&&await t.AUTH_DO.getByName(`session:${a.sessionId}`).logout();let o=new Date(Date.now()-n(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,r,i)=>{let{id:a,credential:o}=await e.json(),s=await r.AUTH_DO.getByName(`challenge:${a}`).validateRequest({credential:o,sessionExpiryInMinutes:t});if(s){let e=new Date(Date.now()+n(t)).toUTCString();return Response.json({success:!0},{headers:{"Set-Cookie":`sessionId=${s}; Path=/; SameSite=Strict; Secure; Expires=${e}`}})}return Response.json({error:!0})}}}},m=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},h=async({request:e,env:t,authFn:n})=>{let i=r(),a=m(e.headers.get(`cookie`));if(`sessionId`in a&&a.sessionId){if(i.sessionId=a.sessionId,t?.AUTH_DO){let e=await t.AUTH_DO.getByName(`session:${i.sessionId}`).validateSession({sessionExpiryInMinutes:1440});e&&(i.userId=e.userId)}}else i.sessionId=null;return n?n({request:e,authContext:i}):!0},g=[`favicon.ico`,`.well-known`],_=({routes:r})=>async(f,p,m)=>{let _=new Map([[t,n()]]);return e.run(_,async()=>{let e=new URL(f.url),t=e.pathname.split(`/`),n=t[1];if(n&&g.includes(n))return new Response(null,{status:404});let _=l({request:f,routes:r});console.log(`routingResult`,_);let v=await h({request:f,env:p,authFn:_?_.auth:null});if(v!==!0)return v||new Response(null,{status:401});if(n===`@renku`){if(t[2]===`rpc`&&t[3]&&t[4]){let e=decodeURIComponent(t[3]),n=decodeURIComponent(t[4]);import.meta.env.DEV||(e=`/assets/functions/${e}.js`),console.log(`☎️ Server function was called:`,e,n);let r=(await import(e))[n];return u(f,r)}return new Response(null,{status:404})}if(!_)return console.warn(`No routing result`,e.pathname),new Response(null,{status:404});if(_.api){let e=Object.assign(f,{params:_.params});return _.api(e,p,m)}let y=await c(_.route,_.params);if(y instanceof Response)return y;if(y==null)return new Response(null,{status:404});let b={styles:[],modules:[]};import.meta.env.DEV?(b.modules.push(`/@vite/client`),b.modules.push(`/@renku/client`)):d&&b.modules.push(d);for(let e of _.layouts){let t=await c(e,{children:y,_renku:b});if(t instanceof Response)return t;if(t==null)return new Response(null,{status:404});y=t}let x=a(y);if(f.headers.get(`Accept`)===`text/x-component`){let e=s(o(x));return new Response(e,{headers:{"Content-Type":`text/x-component`}})}let S=s(i(x));return new Response(S,{headers:{"Content-Type":`text/html`}})})},v=({routes:e,queue:t})=>({fetch:_({routes:e}),queue:t});export{p as n,f as r,v as t};
1
+ import{t as e}from"./context-store-D9atdfKO.js";import{n as t,r as n,t as r}from"./auth-CFd7zVNL.js";import{i,n as a,r as o,t as s}from"./async-generator-to-readable-stream-SYqrIInH.js";import{n as c,t as l}from"./get-route--eZsPlal.js";import{newWorkersRpcResponse as u}from"capnweb";import{clientEntry as d}from"virtual:renku";const f=({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)},p=({rpName:e,sessionExpiryInMinutes:t})=>{t??=60;let n=e=>e*60*1e3;return{"/validate-session":{GET:async(e,t,n)=>r().sessionId?Response.json({isAuthenticated:!0}):Response.json({isAuthenticated:!1})},"/logout":{POST:async(e,t,i)=>{let a=r();a.sessionId&&await t.AUTH_DO.getByName(`session:${a.sessionId}`).logout();let o=new Date(Date.now()-n(10)).toUTCString();return new Response(null,{headers:{"Set-Cookie":`sessionId=; Path=/; SameSite=Strict; Secure; Expires=${o}`}})},GET:async(e,t,i)=>{let a=r();a.sessionId&&await t.AUTH_DO.getByName(`session:${a.sessionId}`).logout();let o=new Date(Date.now()-n(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,r,i)=>{let{id:a,credential:o}=await e.json(),s=await r.AUTH_DO.getByName(`challenge:${a}`).validateRequest({credential:o,sessionExpiryInMinutes:t});if(s){let e=new Date(Date.now()+n(t)).toUTCString();return Response.json({success:!0},{headers:{"Set-Cookie":`sessionId=${s}; Path=/; SameSite=Strict; Secure; Expires=${e}`}})}return Response.json({error:!0})}}}},m=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},h=async({request:e,env:t,authFn:n})=>{let i=r(),a=m(e.headers.get(`cookie`));if(`sessionId`in a&&a.sessionId){if(i.sessionId=a.sessionId,t?.AUTH_DO){let e=await t.AUTH_DO.getByName(`session:${i.sessionId}`).validateSession({sessionExpiryInMinutes:1440});e&&(i.userId=e.userId)}}else i.sessionId=null;return n?n({request:e,authContext:i}):!0},g=[`favicon.ico`,`.well-known`],_=({routes:r})=>async(f,p,m)=>{let _=new Map([[t,n()]]);return e.run(_,async()=>{let e=new URL(f.url),t=e.pathname.split(`/`),n=t[1];if(n&&g.includes(n))return new Response(null,{status:404});let _=l({request:f,routes:r});console.log(`routingResult`,_);let v=await h({request:f,env:p,authFn:_?_.auth:null});if(v!==!0)return v||new Response(null,{status:401});if(n===`@renku`){if(t[2]===`rpc`&&t[3]&&t[4]){let e=decodeURIComponent(t[3]),n=decodeURIComponent(t[4]);import.meta.env.DEV||(e=`/assets/functions/${e}.js`),console.log(`☎️ Server function was called:`,e,n);let r=(await import(e))[n];return u(f,r)}return new Response(null,{status:404})}if(!_)return console.warn(`No routing result`,e.pathname),new Response(null,{status:404});if(_.api){let e=Object.assign(f,{params:_.params});if(!p)throw Error(`Missing env for API route handler.`);return _.api(e,p,m)}let y=await c(_.route,_.params);if(y instanceof Response)return y;if(y==null)return new Response(null,{status:404});let b={styles:[],modules:[]};import.meta.env.DEV?(b.modules.push(`/@vite/client`),b.modules.push(`/@renku/client`)):d&&b.modules.push(d);for(let e of _.layouts){let t=await c(e,{children:y,_renku:b});if(t instanceof Response)return t;if(t==null)return new Response(null,{status:404});y=t}let x=a(y);if(f.headers.get(`Accept`)===`text/x-component`){let e=s(o(x));return new Response(e,{headers:{"Content-Type":`text/x-component`}})}let S=s(i(x));return new Response(S,{headers:{"Content-Type":`text/html`}})})},v=({routes:e,queue:t})=>({fetch:_({routes:e}),queue:t});export{p as n,f as r,v as t};
@@ -1,5 +1,5 @@
1
1
  import "./signal-CqB2Ey1W.js";
2
2
  import "./types-C7G4uVGb.js";
3
- import { t as Routes } from "./types-BYprbzJ7.js";
4
- import { n as getAuthRoutes, r as durableObjectHandler, t as renku } from "./index-DWK1eOW-.js";
3
+ import { t as Routes } from "./types-B2azyMGn.js";
4
+ import { n as getAuthRoutes, r as durableObjectHandler, t as renku } from "./index-B747aB5c.js";
5
5
  export { Routes, durableObjectHandler, getAuthRoutes, renku };
@@ -1 +1 @@
1
- import"./context-store-ptQxy_Tf.js";import"./auth-4756QcgX.js";import"./async-generator-to-readable-stream-5pOhiwD8.js";import"./signal-store-0zk-69gB.js";import"./jsx-to-virtual-node-CKXtqFFH.js";import"./effect-Bd9_A9t9.js";import"./fragment-Be4WKiZ3.js";import{n as e,r as t,t as n}from"./cloudflare-DarCw7vT.js";export{t as durableObjectHandler,e as getAuthRoutes,n as renku};
1
+ import"./context-store-D9atdfKO.js";import"./auth-CFd7zVNL.js";import"./async-generator-to-readable-stream-SYqrIInH.js";import"./signal-store-B0_cH-Uu.js";import"./jsx-to-virtual-node-CMwF0-OF.js";import"./effect-CQrGu-8V.js";import"./fragment-DqC2avbk.js";import{n as e,r as t,t as n}from"./cloudflare-D6q_bWsO.js";export{t as durableObjectHandler,e as getAuthRoutes,n as renku};
@@ -1,7 +1,7 @@
1
1
  import "./signal-CqB2Ey1W.js";
2
2
  import "./types-C7G4uVGb.js";
3
- import { t as Routes } from "./types-BYprbzJ7.js";
4
- import { n as getAuthRoutes, r as durableObjectHandler, t as renku } from "./index-DWK1eOW-.js";
3
+ import { t as Routes } from "./types-B2azyMGn.js";
4
+ import { n as getAuthRoutes, r as durableObjectHandler, t as renku } from "./index-B747aB5c.js";
5
5
  import { DurableObject } from "cloudflare:workers";
6
6
 
7
7
  //#region src/cloudflare/durable-objects/auth.d.ts
@@ -1 +1 @@
1
- import"./context-store-ptQxy_Tf.js";import"./auth-4756QcgX.js";import"./async-generator-to-readable-stream-5pOhiwD8.js";import"./signal-store-0zk-69gB.js";import"./jsx-to-virtual-node-CKXtqFFH.js";import"./effect-Bd9_A9t9.js";import"./fragment-Be4WKiZ3.js";import{n as e,r as t,t as n}from"./cloudflare-DarCw7vT.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"./context-store-D9atdfKO.js";import"./auth-CFd7zVNL.js";import"./async-generator-to-readable-stream-SYqrIInH.js";import"./signal-store-B0_cH-Uu.js";import"./jsx-to-virtual-node-CMwF0-OF.js";import"./effect-CQrGu-8V.js";import"./fragment-DqC2avbk.js";import{n as e,r as t,t as n}from"./cloudflare-D6q_bWsO.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 +1 @@
1
- import{buildApplication as e,buildCommand as t,buildRouteMap as n}from"@stricli/core";import{buildInstallCommand as r,buildUninstallCommand as i}from"@stricli/auto-complete";import a from"node:fs";import o from"node:os";import s from"node:path";var c=`renku`,l=`0.0.11`,u=`Renku`;const d=n({routes:{ios:t({loader:async()=>{let{ios:e}=await import(`./impl-O6JZ4waj.js`);return e},parameters:{positional:{kind:`tuple`,parameters:[]},flags:{foo:{kind:`parsed`,optional:!0,parse:String,brief:`Foo`}}},docs:{brief:`Nested ios command`}}),sim:t({loader:async()=>{let{sim:e}=await import(`./impl-O6JZ4waj.js`);return e},parameters:{positional:{kind:`tuple`,parameters:[]},flags:{foo:{kind:`parsed`,optional:!0,parse:String,brief:`Foo`}}},docs:{brief:`Nested sim command`}}),android:t({loader:async()=>{let{android:e}=await import(`./impl-O6JZ4waj.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`}}),f=n({routes:{foo:t({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:t({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`}}),p=e(n({routes:{subdir:t({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:f,native:d,install:r(`renku`,{bash:`__renku_bash_complete`}),uninstall:i(`renku`,{bash:!0})},docs:{brief:u,hideRoute:{install:!0,uninstall:!0}}}),{name:c,versionInfo:{currentVersion:l}});function m(e){return{process:e,os:o,fs:a,path:s}}export{p as n,m as t};
1
+ import{buildApplication as e,buildCommand as t,buildRouteMap as n}from"@stricli/core";import{buildInstallCommand as r,buildUninstallCommand as i}from"@stricli/auto-complete";import a from"node:fs";import o from"node:os";import s from"node:path";var c=`renku`,l=`0.0.13`,u=`Renku`;const d=n({routes:{ios:t({loader:async()=>{let{ios:e}=await import(`./impl-O6JZ4waj.js`);return e},parameters:{positional:{kind:`tuple`,parameters:[]},flags:{foo:{kind:`parsed`,optional:!0,parse:String,brief:`Foo`}}},docs:{brief:`Nested ios command`}}),sim:t({loader:async()=>{let{sim:e}=await import(`./impl-O6JZ4waj.js`);return e},parameters:{positional:{kind:`tuple`,parameters:[]},flags:{foo:{kind:`parsed`,optional:!0,parse:String,brief:`Foo`}}},docs:{brief:`Nested sim command`}}),android:t({loader:async()=>{let{android:e}=await import(`./impl-O6JZ4waj.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`}}),f=n({routes:{foo:t({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:t({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`}}),p=e(n({routes:{subdir:t({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:f,native:d,install:r(`renku`,{bash:`__renku_bash_complete`}),uninstall:i(`renku`,{bash:!0})},docs:{brief:u,hideRoute:{install:!0,uninstall:!0}}}),{name:c,versionInfo:{currentVersion:l}});function m(e){return{process:e,os:o,fs:a,path:s}}export{p as n,m as t};
@@ -0,0 +1 @@
1
+ import{AsyncContext as e}from"#renku/async-context";const t=new e.Variable,n={get current(){return t.get()},set current(e){t.set(e)},run(e,n){return t.run(e,n)},set(e,n){let r=t.get();r||(r=new Map,t.set(r)),r.set(e,n)},get(e){return t.get()?.get(e)}};export{n as t};
@@ -0,0 +1 @@
1
+ import{n as e}from"./signal-store-B0_cH-Uu.js";import{t}from"./create-signal-2H8hjZy6.js";function n(e,n){let r=t({status:`loading`,error:!1,data:null});return r.get().status===`loading`&&e().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}const r=t=>new e.Computed(t);export{n,r as t};
@@ -0,0 +1 @@
1
+ import{t as e}from"./context-store-D9atdfKO.js";const t=t=>{let n=Symbol(`renku-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{t as e}from"./signal-store-B0_cH-Uu.js";const t=t=>e.get(t);export{t};
package/dist/data.d.ts CHANGED
@@ -64,7 +64,7 @@ declare class MessageQueue {
64
64
  }
65
65
  //#endregion
66
66
  //#region src/data/collection/collection.d.ts
67
- declare class Collection<T extends Schema, K$1 extends keyof T> {
67
+ declare class Collection<T extends Schema, K extends keyof T> {
68
68
  #private;
69
69
  constructor({
70
70
  name,
@@ -73,32 +73,32 @@ declare class Collection<T extends Schema, K$1 extends keyof T> {
73
73
  messageQueue
74
74
  }: {
75
75
  name: string;
76
- obj: T[K$1];
76
+ obj: T[K];
77
77
  clientId: string;
78
78
  messageQueue: MessageQueue;
79
79
  });
80
- mock(): Item<T[K$1]>;
81
- get items(): Signal.State<Item<T[K$1]>[]>;
80
+ mock(): Item<T[K]>;
81
+ get items(): Signal.State<Item<T[K]>[]>;
82
82
  query({
83
83
  filter,
84
84
  limit,
85
85
  first
86
- }?: QueryParams<T, K$1>): Signal.Computed<Item<T[K$1]>[]>;
87
- first(params?: Omit<QueryParams<T, K$1>, "single" | "limit">): Signal.Computed<Item<T[K$1]> | undefined>;
88
- all(): Signal.Computed<Item<T[K$1]>[]>;
89
- add(item: Item<T[K$1]>): Item<T[K$1]>;
90
- loadItems(items: Item<T[K$1]>[]): void;
86
+ }?: QueryParams<T, K>): Signal.Computed<Item<T[K]>[]>;
87
+ first(params?: Omit<QueryParams<T, K>, "single" | "limit">): Signal.Computed<Item<T[K]> | undefined>;
88
+ all(): Signal.Computed<Item<T[K]>[]>;
89
+ add(item: Item<T[K]>): Item<T[K]>;
90
+ loadItems(items: Item<T[K]>[]): void;
91
91
  }
92
92
  //#endregion
93
93
  //#region src/data/collection/remote-collection.d.ts
94
- declare class RemoteCollection<T extends Schema, K$1 extends keyof T> extends RpcTarget {
94
+ declare class RemoteCollection<T extends Schema, K extends keyof T> extends RpcTarget {
95
95
  #private;
96
- constructor(collection: Collection<T, K$1>);
97
- get items(): Item<T[K$1]>[];
98
- query(params?: QueryParams<T, K$1>): Item<T[K$1]>[];
99
- first(params?: Omit<QueryParams<T, K$1>, "single" | "limit">): Item<T[K$1]> | undefined;
100
- all(): Item<T[K$1]>[];
101
- add(item: Item<T[K$1]>): void;
96
+ constructor(collection: Collection<T, K>);
97
+ get items(): Item<T[K]>[];
98
+ query(params?: QueryParams<T, K>): Item<T[K]>[];
99
+ first(params?: Omit<QueryParams<T, K>, "single" | "limit">): Item<T[K]> | undefined;
100
+ all(): Item<T[K]>[];
101
+ add(item: Item<T[K]>): void;
102
102
  }
103
103
  //#endregion
104
104
  //#region src/data/collection/types.d.ts
@@ -118,8 +118,8 @@ type Item<T extends ObjectSchema> = { [K in keyof T as T[K] extends {
118
118
  };
119
119
  type Collections<T extends Schema> = { [K in keyof T]: Collection<T, K> };
120
120
  type RemoteCollections<T extends Schema> = { [K in keyof T]: RemoteCollection<T, K> };
121
- type QueryParams<T extends Schema, K$1 extends keyof T> = {
122
- filter?: (item: Item<T[K$1]>) => boolean;
121
+ type QueryParams<T extends Schema, K extends keyof T> = {
122
+ filter?: (item: Item<T[K]>) => boolean;
123
123
  limit?: number;
124
124
  first?: boolean;
125
125
  };
package/dist/data.js CHANGED
@@ -1 +1 @@
1
- import"./signal-store-0zk-69gB.js";import{n as e,t}from"./create-computed-lI_3nbQK.js";import{t as n}from"./create-loader-MWloSurG.js";import{RpcTarget as r}from"capnweb";const i=e=>{switch(e){case`string`:return`TEXT`;case`number`:return`INTEGER`;case`boolean`:return`INTEGER`;default:throw Error(`Unsupported type: ${String(e)}`)}},a=e=>{let t=``;for(let[n,r]of Object.entries(e).filter(([e])=>e!==`~standard`)){let e=Object.entries(r).filter(([e])=>e!==`~standard`).map(([e,t])=>`${e} ${i(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},o=({db:e,schema:t})=>{let n=a(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},s=({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 c=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)}},l=class{#e;#t;#n;#r=e([]);#i;constructor({name:e,obj:t,clientId:n,messageQueue:r}){this.#e=n,this.#t=e,this.#n=t,this.#i=r,this.#i.subscribe({subscriber:e=>this.#a(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),{})}#a(e){let t=this.#r.get(),n=t.findIndex(t=>t.id===e.item);if(e.updates===`DELETE`){if(n<0)return;let e=t.slice();e.splice(n,1),this.#r.set(e);return}let r=JSON.parse(e.updates),i={...n>=0?t[n]:void 0,...r,id:e.item};if(n>=0){let e=t.slice();e[n]=i,this.#r.set(e);return}this.#r.set(t.concat(i))}get items(){return 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=s({client:this.#e,object:this.#t,item:e});return this.#i.add(t),e}loadItems(e){this.#r.set(e)}};const u=({schema:e,clientId:t,messageQueue:n})=>Object.entries(e).reduce((e,[r,i])=>{let a=r;return e[a]=new l({name:r,obj:i,clientId:t,messageQueue:n}),e},{});var d=class extends r{#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 f=e=>{let t=Object.entries(e).reduce((e,[t,n])=>{let r=t;return e[r]=new d(n),e},{});return console.log(`remoteCollections:`,t),t},p=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 m=class extends r{#e;#t;#n;messageQueue=new c;#r;#i;#a=!1;constructor({schema:e,db:t}){super(),this.#e=e,t?(this.#n=t,this.#t=this.#n.clientId,this.messageQueue.subscribe({subscriber:p(this.#n),label:`Local database (Client ID: ${this.#t})`})):this.#t=crypto.randomUUID(),this.#r=u({schema:this.#e,clientId:this.#t,messageQueue:this.messageQueue}),this.#i=f(this.#r)}get _collections(){return this.#r}get _remoteCollections(){return this.#i}get _db(){return this.#n}_rehydrateCollectionsFromDb(){if(!(!this.#n||this.#a)){for(let e of Object.keys(this.#e)){let t=e,n=this.#n.query(`SELECT * FROM obj_${e}`)??[];this.#r[t].loadItems(n)}this.#a=!0}}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})`)}},h=class e extends m{#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=>(this.#t=e,this.load())).catch(e=>{console.error(`Remote connect or load 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 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(){if(!this.#e)return;let e=await this.#e.load();for(let t of Object.keys(e)){let n=t,r=e[n];this._collections[n].loadItems(r)}}async[Symbol.dispose](){console.log(`🗑️ Client Data RPC disposing (CID: ${this.clientId})`),this.#t&&await this.#t()}};const g=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 _=class e extends m{constructor({schema:e,db:t}){super({schema:e,db:t}),this._rehydrateCollectionsFromDb()}static durableObject({schema:t,storage:n}){let r=g(n);return o({db:r,schema:t}),new e({schema:t,db:r})}get collections(){return this._rehydrateCollectionsFromDb(),this._remoteCollections}load(){this._rehydrateCollectionsFromDb();let e={};for(let t of Object.keys(this.schema)){let n=t;e[n]=this._db?.query(`SELECT * FROM obj_${t}`)??[]}return e}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}`})}};const v=e=>e;function y(e){let t={};return t.type=e.type,t}function b(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]=y(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}}function x(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 S(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=x(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 C(e,t){return x(e,t,`property`)}const w=e=>{let t={};for(let[n,r]of Object.entries(e))t[n]={...r,"~standard":{version:1,vendor:`renku`,validate:S(n,r),jsonSchema:b(r),types:{input:void 0,output:void 0}}};return t},T={type:`string`,required:!0,unique:!0,mock:()=>crypto.randomUUID().toString()};export{h as ClientData,_ as ServerData,w as enhancedSchema,T as id,v as schema,C as validatePropertyValue};
1
+ import"./signal-store-B0_cH-Uu.js";import{t as e}from"./create-signal-2H8hjZy6.js";import{n as t,t as n}from"./create-computed-DTLDV6XM.js";import{RpcTarget as r}from"capnweb";const i=e=>{switch(e){case`string`:return`TEXT`;case`number`:return`INTEGER`;case`boolean`:return`INTEGER`;default:throw Error(`Unsupported type: ${String(e)}`)}},a=e=>{let t=``;for(let[n,r]of Object.entries(e).filter(([e])=>e!==`~standard`)){let e=Object.entries(r).filter(([e])=>e!==`~standard`).map(([e,t])=>`${e} ${i(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},o=({db:e,schema:t})=>{let n=a(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},s=({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 c=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)}},l=class{#e;#t;#n;#r=e([]);#i;constructor({name:e,obj:t,clientId:n,messageQueue:r}){this.#e=n,this.#t=e,this.#n=t,this.#i=r,this.#i.subscribe({subscriber:e=>this.#a(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),{})}#a(e){let t=this.#r.get(),n=t.findIndex(t=>t.id===e.item);if(e.updates===`DELETE`){if(n<0)return;let e=t.slice();e.splice(n,1),this.#r.set(e);return}let r=JSON.parse(e.updates),i={...n>=0?t[n]:void 0,...r,id:e.item};if(n>=0){let e=t.slice();e[n]=i,this.#r.set(e);return}this.#r.set(t.concat(i))}get items(){return 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=s({client:this.#e,object:this.#t,item:e});return this.#i.add(t),e}loadItems(e){this.#r.set(e)}};const u=({schema:e,clientId:t,messageQueue:n})=>Object.entries(e).reduce((e,[r,i])=>{let a=r;return e[a]=new l({name:r,obj:i,clientId:t,messageQueue:n}),e},{});var d=class extends r{#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 f=e=>{let t=Object.entries(e).reduce((e,[t,n])=>{let r=t;return e[r]=new d(n),e},{});return console.log(`remoteCollections:`,t),t},p=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 m=class extends r{#e;#t;#n;messageQueue=new c;#r;#i;#a=!1;constructor({schema:e,db:t}){super(),this.#e=e,t?(this.#n=t,this.#t=this.#n.clientId,this.messageQueue.subscribe({subscriber:p(this.#n),label:`Local database (Client ID: ${this.#t})`})):this.#t=crypto.randomUUID(),this.#r=u({schema:this.#e,clientId:this.#t,messageQueue:this.messageQueue}),this.#i=f(this.#r)}get _collections(){return this.#r}get _remoteCollections(){return this.#i}get _db(){return this.#n}_rehydrateCollectionsFromDb(){if(!(!this.#n||this.#a)){for(let e of Object.keys(this.#e)){let t=e,n=this.#n.query(`SELECT * FROM obj_${e}`)??[];this.#r[t].loadItems(n)}this.#a=!0}}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})`)}},h=class e extends m{#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=>(this.#t=e,this.load())).catch(e=>{console.error(`Remote connect or load 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 new e({schema:t,db:!1,remote:n})}static signal({schema:e,remote:n}){return t(()=>this.client({schema:e,remote:n}))}get collections(){return this._collections}async load(){if(!this.#e)return;let e=await this.#e.load();for(let t of Object.keys(e)){let n=t,r=e[n];this._collections[n].loadItems(r)}}async[Symbol.dispose](){console.log(`🗑️ Client Data RPC disposing (CID: ${this.clientId})`),this.#t&&await this.#t()}};const g=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 _=class e extends m{constructor({schema:e,db:t}){super({schema:e,db:t}),this._rehydrateCollectionsFromDb()}static durableObject({schema:t,storage:n}){let r=g(n);return o({db:r,schema:t}),new e({schema:t,db:r})}get collections(){return this._rehydrateCollectionsFromDb(),this._remoteCollections}load(){this._rehydrateCollectionsFromDb();let e={};for(let t of Object.keys(this.schema)){let n=t;e[n]=this._db?.query(`SELECT * FROM obj_${t}`)??[]}return e}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}`})}};const v=e=>e;function y(e){let t={};return t.type=e.type,t}function b(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]=y(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}}function x(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 S(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=x(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 C(e,t){return x(e,t,`property`)}const w=e=>{let t={};for(let[n,r]of Object.entries(e))t[n]={...r,"~standard":{version:1,vendor:`renku`,validate:S(n,r),jsonSchema:b(r),types:{input:void 0,output:void 0}}};return t},T={type:`string`,required:!0,unique:!0,mock:()=>crypto.randomUUID().toString()};export{h as ClientData,_ as ServerData,w as enhancedSchema,T as id,v as schema,C as validatePropertyValue};
package/dist/dom.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import "./signal-CqB2Ey1W.js";
2
2
  import { a as RenkuNode, n as FunctionComponent, s as SuspenseComponent } from "./types-C7G4uVGb.js";
3
- import { t as Routes } from "./types-BYprbzJ7.js";
3
+ import { t as Routes } from "./types-B2azyMGn.js";
4
4
 
5
5
  //#region src/router/router.d.ts
6
6
  declare const Router: FunctionComponent<{
package/dist/dom.js CHANGED
@@ -1 +1 @@
1
- import"./context-store-ptQxy_Tf.js";import"./signal-store-0zk-69gB.js";import{r as e,t}from"./jsx-to-virtual-node-CKXtqFFH.js";import"./effect-Bd9_A9t9.js";import"./fragment-Be4WKiZ3.js";import{r as n,t as r}from"./render-dom-node-BMsKFUby.js";import{n as i,t as a}from"./get-route-vX5hwL4r.js";import{t as o}from"./create-element-CkxIHf8j.js";import"./jsx-runtime-CwvSR9n_.js";const s=async({routes:e})=>{let t=a({request:new Request(window.location.href),routes:e});if(!t||t.api)return o(`div`,{children:`Not Found`});let n=await i(t.route,t.params);if(n instanceof Response||n==null)return o(`div`,{children:`Not Found`});for(let e of t.layouts){let t=await i(e,{children:n});if(t instanceof Response||t==null)return o(`div`,{children:`Not Found`});n=t}return n},c=(e,i)=>{let a=t({node:e});i.replaceChildren(),Array.isArray(a)?n({domNode:i,virtualNode:a}):r({domNode:i,virtualNode:a})},l=Object.assign(({fallback:e,children:t})=>(console.log(`Suspense`,{fallback:e,children:t}),{fallback:e,children:t}),{[e]:!0});export{s as Router,l as Suspense,c as render};
1
+ import"./context-store-D9atdfKO.js";import"./signal-store-B0_cH-Uu.js";import{r as e,t}from"./jsx-to-virtual-node-CMwF0-OF.js";import"./effect-CQrGu-8V.js";import"./fragment-DqC2avbk.js";import{n,t as r}from"./render-dom-node-drdl_pap.js";import{n as i,t as a}from"./get-route--eZsPlal.js";import{jsx as o}from"#renku/jsx-runtime";const s=async({routes:e})=>{let t=a({request:new Request(window.location.href),routes:e});if(!t||t.api)return o(`div`,{children:`Not Found`});let n=await i(t.route,t.params);if(n instanceof Response||n==null)return o(`div`,{children:`Not Found`});for(let e of t.layouts){let t=await i(e,{children:n});if(t instanceof Response||t==null)return o(`div`,{children:`Not Found`});n=t}return n},c=(e,i)=>{let a=t({node:e});i.replaceChildren(),Array.isArray(a)?n({domNode:i,virtualNode:a}):r({domNode:i,virtualNode:a})},l=Object.assign(({fallback:e,children:t})=>(console.log(`Suspense`,{fallback:e,children:t}),{fallback:e,children:t}),{[e]:!0});export{s as Router,l as Suspense,c as render};
@@ -1 +1 @@
1
- import{n as e}from"./signal-store-0zk-69gB.js";let t=!0;const n=new e.subtle.Watcher(()=>{t&&(t=!1,queueMicrotask(r))});function r(){t=!0;for(let e of n.getPending())e.get();n.watch()}const i=t=>{let r,i=new e.Computed(()=>{typeof r==`function`&&r();let e=t();r=typeof e==`function`?e:void 0});return n.watch(i),i.get(),()=>{n.unwatch(i),typeof r==`function`&&r(),r=void 0}};export{i as t};
1
+ import{n as e}from"./signal-store-B0_cH-Uu.js";let t=!0;const n=new e.subtle.Watcher(()=>{t&&(t=!1,queueMicrotask(r))});function r(){t=!0;for(let e of n.getPending())e.get();n.watch()}const i=t=>{let r,i=new e.Computed(()=>{typeof r==`function`&&r();let e=t();r=typeof e==`function`?e:void 0});return n.watch(i),i.get(),()=>{n.unwatch(i),typeof r==`function`&&r(),r=void 0}};export{i as t};
@@ -1,4 +1,4 @@
1
- import { t as Routes } from "./types-BYprbzJ7.js";
1
+ import { t as Routes } from "./types-B2azyMGn.js";
2
2
 
3
3
  //#region src/cloudflare/durable-object-handler.d.ts
4
4
  declare const durableObjectHandler: ({
@@ -19,12 +19,12 @@ interface AuthOptions {
19
19
  declare const getAuthRoutes: (options: AuthOptions) => Routes<Env>;
20
20
  //#endregion
21
21
  //#region src/cloudflare/renku.d.ts
22
- declare const renku: <Env$1 = unknown>({
22
+ declare const renku: <Env = unknown>({
23
23
  routes,
24
24
  queue
25
25
  }: {
26
- routes: Routes<Env$1>;
27
- queue?: ExportedHandlerQueueHandler<Env$1>;
28
- }) => ExportedHandler<Env$1>;
26
+ routes: Routes<Env>;
27
+ queue?: ExportedHandlerQueueHandler<Env>;
28
+ }) => ExportedHandler<Env>;
29
29
  //#endregion
30
30
  export { getAuthRoutes as n, durableObjectHandler as r, renku as t };
package/dist/index.d.ts CHANGED
@@ -1,8 +1,8 @@
1
1
  import { t as Signal } from "./signal-CqB2Ey1W.js";
2
2
  import { a as RenkuNode, i as LayoutComponent, n as FunctionComponent, o as Fragment } from "./types-C7G4uVGb.js";
3
- import { t as Routes } from "./types-BYprbzJ7.js";
3
+ import { t as Routes } from "./types-B2azyMGn.js";
4
4
  import { a as RpcTarget, i as RpcStub, n as Loader, r as RpcCompatible, t as Context } from "./types-dktP5VqD.js";
5
- import { t as registerServerFunction } from "./register-server-function-C48-V7Zl.js";
5
+ import { t as registerServerFunction } from "./register-server-function-RuJLKnp7.js";
6
6
 
7
7
  //#region src/reactivity/create-computed.d.ts
8
8
  declare const createComputed: <T>(fn: () => T) => Signal.Computed<T>;
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- import"./context-store-ptQxy_Tf.js";import{n as e}from"./signal-store-0zk-69gB.js";import{t}from"./effect-Bd9_A9t9.js";import{t as n}from"./fragment-Be4WKiZ3.js";import{n as r,t as i}from"./create-computed-lI_3nbQK.js";import{t as a}from"./create-loader-MWloSurG.js";import{t as o}from"./create-context-HSD02vmk.js";import{t as s}from"./register-server-function-B1SlD-tr.js";import{RpcStub as c,RpcTarget as l}from"capnweb";const u=(e,t)=>a(()=>fetch(e).then(async e=>await t(e))),d=(e,n=!0)=>a(async()=>{let i=await e(),a=r(await i.get());return i.subscribe(e=>a.set(e)),t(()=>{n&&i.set(a.get())}),a});var f=class extends l{#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{n as Fragment,f as RemoteSignal,c as RpcStub,l as RpcTarget,e as Signal,i as createComputed,o as createContext,u as createFetched,a as createLoader,d as createRemoteSignal,r as createSignal,t as effect,s as registerServerFunction};
1
+ import"./context-store-D9atdfKO.js";import{n as e}from"./signal-store-B0_cH-Uu.js";import{t}from"./effect-CQrGu-8V.js";import{t as n}from"./fragment-DqC2avbk.js";import{t as r}from"./create-signal-2H8hjZy6.js";import{n as i,t as a}from"./create-computed-DTLDV6XM.js";import{t as o}from"./create-context-Ccu6Wido.js";import{t as s}from"./register-server-function-B1SlD-tr.js";import{RpcStub as c,RpcTarget as l}from"capnweb";const u=(e,t)=>i(()=>fetch(e).then(async e=>await t(e))),d=(e,n=!0)=>i(async()=>{let i=await e(),a=r(await i.get());return i.subscribe(e=>a.set(e)),t(()=>{n&&i.set(a.get())}),a});var f=class extends l{#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{n as Fragment,f as RemoteSignal,c as RpcStub,l as RpcTarget,e as Signal,a as createComputed,o as createContext,u as createFetched,i as createLoader,d as createRemoteSignal,r as createSignal,t as effect,s as registerServerFunction};
@@ -1 +1 @@
1
- import{t as e}from"./fragment-Be4WKiZ3.js";import{t}from"./create-element-CkxIHf8j.js";const n=(e,n,r,i,a,o)=>t(e,n,r);export{e as Fragment,n as jsxDEV};
1
+ import{t as e}from"./fragment-DqC2avbk.js";import{t}from"./create-element-Cir0MD8J.js";const n=(e,n,r,i,a,o)=>t(e,n,r);export{e as Fragment,n as jsxDEV};
@@ -1 +1 @@
1
- import{t as e}from"./fragment-Be4WKiZ3.js";import{t}from"./create-element-CkxIHf8j.js";import"./jsx-runtime-CwvSR9n_.js";export{e as Fragment,t as jsx,t as jsxs};
1
+ import{t as e}from"./fragment-DqC2avbk.js";import{t}from"./create-element-Cir0MD8J.js";export{e as Fragment,t as jsx,t as jsxs};
@@ -0,0 +1 @@
1
+ import{t as e}from"./context-store-D9atdfKO.js";import{n as t,t as n}from"./signal-store-B0_cH-Uu.js";import{t as r}from"./effect-CQrGu-8V.js";import{n as i}from"./fragment-DqC2avbk.js";const a=Symbol(`renku:suspense`),o=e=>e&&typeof e.type==`function`&&e.type[a]===!0,s=({fn:t,key:i,props:a,asyncComponents:o,clientComponents:s})=>{let c=null,l=null,d=e=>{c=e,l&&l(e)},f=[],p=e.current,m=p?new Map(p):new Map;return r(()=>{n.set(f),d(e.run(m,()=>{let e=t(a);if(e instanceof Promise){let t=s.length+o.length+1;return o.push(new Promise(n=>{e.then(e=>{n({index:t,node:e})})})),{type:`async`,key:i,promise:e,index:t}}return u({node:e,asyncComponents:o,clientComponents:s})}))}),{type:`effect`,value:c,addCallback:e=>{l=e}}},c=e=>typeof e==`object`&&!!e&&!Array.isArray(e)&&`type`in e&&typeof e.type==`function`&&e.type[i]===!0,l=({node:e,asyncComponents:t=[],clientComponents:n=[]})=>{let r=[];if(Array.isArray(e))for(let i of e)r.push(...l({node:i,asyncComponents:t,clientComponents:n}));else if(e)if(c(e)){let i=e.type(e.props);r.push(...l({node:i,asyncComponents:t,clientComponents:n}))}else{let i=u({node:e,asyncComponents:t,clientComponents:n});Array.isArray(i)?r.push(...i):r.push(i)}return r},u=({node:e,asyncComponents:n=[],clientComponents:r=[]})=>{if(Array.isArray(e))return l({node:e,asyncComponents:n,clientComponents:r});if(e==null)return null;if(typeof e==`string`||typeof e==`number`)return{type:`text`,value:String(e)};if(e instanceof t.Computed||e instanceof t.State)return{type:`signal`,value:e};if(typeof e==`object`){if(typeof e.type==`function`){if(o(e)){console.log(`🚨`,`Suspense`,e);let t=l({node:e.props.children,asyncComponents:n,clientComponents:r}),i=l({node:e.props.fallback,asyncComponents:n,clientComponents:r});return{type:`suspense`,key:e.key,suspended:t,fallback:i}}return s({fn:e.type,key:e.key,props:e.props,asyncComponents:n,clientComponents:r})}if(typeof e.type==`object`&&e.type.type===`client`)return r.push({path:e.type.path,name:e.type.name}),{type:`client`,key:e.key,props:e.props,path:e.type.path,name:e.type.name};if(typeof e.type==`string`){let{children:t,...i}=e.props,a=l({node:t,asyncComponents:n,clientComponents:r});return{type:`element`,key:e.key,value:e.type,props:i,children:a}}}return console.warn(`⚠️`,`UNHANDLED NODE TYPE`,e),null};export{s as n,a as r,u as t};
@@ -1,7 +1,6 @@
1
1
  import { RpcStub, RpcTarget } from "capnweb";
2
2
 
3
3
  //#region src/server/types.d.ts
4
-
5
4
  type ServerFunction = (...args: unknown[]) => RpcStub<RpcTarget>;
6
5
  //#endregion
7
6
  //#region src/server/register-server-function.d.ts
@@ -0,0 +1 @@
1
+ import{n as e}from"./signal-store-B0_cH-Uu.js";import{t}from"./jsx-to-virtual-node-CMwF0-OF.js";import{t as n}from"./effect-CQrGu-8V.js";function r({domNode:e,virtualNode:t,replace:n=!1}){let r=[];for(let i of t){let t=o({domNode:e,virtualNode:i,replace:n});n=!1,r.push(t)}return r}const i=({element:t,key:r,val:i})=>{typeof i==`function`?r.startsWith(`on`)&&t.addEventListener(r.slice(2),i):typeof i==`string`||typeof i==`number`?(r===`className`&&(r=`class`),t.setAttribute(r,String(i))):i instanceof e.State||i instanceof e.Computed?n(()=>{t.setAttribute(r,String(i.get()))}):Array.isArray(i)?n(()=>{let n=i.map(t=>t instanceof e.State||t instanceof e.Computed?String(t.get()):String(t)).join(` `);t.setAttribute(r,n)}):typeof i==`boolean`&&(i?t.setAttribute(r,``):t.removeAttribute(r))},a=({domNode:e,newVirtualNode:t,oldVirtualNode:n})=>{let r=e=>e&&`key`in e?e.key??null:null;if(t&&n)if(t.type===n.type){if(t.type===`effect`&&n.type===`effect`)return n.domNode&&(t.domNode=o({domNode:n.domNode,virtualNode:t,replace:!0})??void 0),e;if(t.type===`element`&&n.type===`element`)if(t.value===n.value){let s=e,c=n.props?Object.keys(n.props).filter(e=>!(e in t.props)):[];c.length&&c.map(e=>s.removeAttribute(e));for(let[e,r]of Object.entries(t.props))if(e!==`children`&&e!==`key`)if(n.props&&e in n.props){let t=n.props[e];typeof r==`function`||(Array.isArray(r)&&Array.isArray(t)?JSON.stringify(r)!==JSON.stringify(t)&&i({element:s,key:e,val:r}):n.props[e]!==r&&i({element:s,key:e,val:r}))}else i({element:s,key:e,val:r});if(t.children.length){let e=0,i=n.children?[...n.children]:[];for(let n=0;n<t.children.length;n++){let c=t.children[n];if(c){let t=i[n-e];if(t?.domNode)if(r(c)===r(t))c.domNode=t.domNode,a({domNode:t.domNode,newVirtualNode:c,oldVirtualNode:t});else{let n=r(c),o=i.findIndex(e=>r(e)===n),l=o>-1?i[o]:null;l?.domNode&&(s.moveBefore(l.domNode,t.domNode),c.domNode=l.domNode,e++,a({domNode:l.domNode,newVirtualNode:c,oldVirtualNode:l}),i.splice(o,1))}else{let t=n-e,r=s.childNodes[t];o(r?{domNode:r,virtualNode:c,replace:!0}:{domNode:s,virtualNode:c})}i[n-e]=null}}if(i.length+e>t.children.length)for(let n=t.children.length;n<i.length+e;n++){let t=i[n-e]?.domNode;t&&s.removeChild(t)}}else n.children?.length&&s.replaceChildren()}else console.log(`Different node types`),n.domNode&&o({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&&o({domNode:n.domNode,virtualNode:t,replace:!0});else console.warn(`Old or new node is null`);return e};function o({domNode:e,virtualNode:s,replace:c=!1}){if(!s)return null;let l=[`svg`,`path`,`circle`];if(s.type===`element`){let t=l.includes(s.value)?document.createElementNS(`http://www.w3.org/2000/svg`,s.value):document.createElement(s.value);if(s.domNode=t,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[e,n]of Object.entries(s.props))e!==`children`&&e!==`key`&&e!==`ref`&&i({element:t,key:e,val:n});if(s.children)for(let e of s.children)o({domNode:t,virtualNode:e});if(e===document.documentElement)document.documentElement.replaceWith(t);else{let n=e.parentNode;c&&n?n.replaceChild(t,e):e.appendChild(t)}return t}if(s.type===`async`){let n=document.createElement(`template`);return s.domNode=n,s.index!==void 0&&(n.dataset.id=`async-placeholder-${s.index}`),e.appendChild(n),s.promise?.then(e=>{let i=t({node:e});Array.isArray(i)?r({domNode:n,virtualNode:i,replace:!0}):o({domNode:n,virtualNode:i,replace:!0})}),n}if(s.type===`client`){let t=document.createComment(`CLIENT`);return s.domNode=t,e.appendChild(t),t}if(s.type===`text`){let t=document.createTextNode(s.value);return s.domNode=t,e.appendChild(t),t}if(s.type===`signal`){let t=s.value,r=document.createTextNode(``);return s.domNode=r,n(()=>{r.textContent=String(t.get())}),e.appendChild(r),r}if(s.type===`suspense`){let t=document.createTextNode(``);t.textContent=`SUSPENSE`;let n=document.createElement(`div`);if(n.appendChild(t),s.domNode=n,console.log(`render suspense`,e,t),e===document.documentElement)document.documentElement.replaceWith(n);else{let t=e.parentNode;c&&t?t.replaceChild(n,e):e.appendChild(n)}return n}if(s.type===`effect`){let t=s.value,n=null,i=null,l=t=>{Array.isArray(t)?r({domNode:e,virtualNode:t,replace:c}):n?(n=a({domNode:n,newVirtualNode:t,oldVirtualNode:i}),i=t,s.domNode=n):(n=o({domNode:e,virtualNode:t,replace:c}),i=t,s.domNode=n,t=null)};s.addCallback(l),l(t)}return null}export{r as n,o as t};
package/dist/server.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import "./signal-CqB2Ey1W.js";
2
2
  import { t as ClientComponent } from "./types-C7G4uVGb.js";
3
- import { t as registerServerFunction } from "./register-server-function-C48-V7Zl.js";
3
+ import { t as registerServerFunction } from "./register-server-function-RuJLKnp7.js";
4
4
 
5
5
  //#region src/server/register-client-reference.d.ts
6
6
  declare const registerClientReference: (_fn: () => void, path: string, name: string) => ClientComponent;
package/dist/theme.css CHANGED
@@ -1,59 +1,127 @@
1
1
  /* https://tailwindcss.com/docs/dark-mode#using-a-data-attribute */
2
2
  @custom-variant dark (&:where([data-theme=dark], [data-theme=dark] *));
3
+ /* @custom-variant dark (&:is(.dark *)); */
3
4
 
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);
5
+ @theme inline {
6
+ --radius-sm: calc(var(--radius) - 4px);
7
+ --radius-md: calc(var(--radius) - 2px);
8
+ --radius-lg: var(--radius);
9
+ --radius-xl: calc(var(--radius) + 4px);
10
+ --radius-2xl: calc(var(--radius) + 8px);
11
+ --radius-3xl: calc(var(--radius) + 12px);
12
+ --radius-4xl: calc(var(--radius) + 16px);
13
+ --color-background: var(--background);
14
+ --color-foreground: var(--foreground);
15
+ --color-card: var(--card);
16
+ --color-card-foreground: var(--card-foreground);
17
+ --color-popover: var(--popover);
18
+ --color-popover-foreground: var(--popover-foreground);
19
+ --color-primary: var(--primary);
20
+ --color-primary-foreground: var(--primary-foreground);
21
+ --color-secondary: var(--secondary);
22
+ --color-secondary-foreground: var(--secondary-foreground);
23
+ --color-muted: var(--muted);
24
+ --color-muted-foreground: var(--muted-foreground);
25
+ --color-accent: var(--accent);
26
+ --color-accent-foreground: var(--accent-foreground);
27
+ --color-destructive: var(--destructive);
28
+ --color-border: var(--border);
29
+ --color-input: var(--input);
30
+ --color-ring: var(--ring);
31
+ --color-chart-1: var(--chart-1);
32
+ --color-chart-2: var(--chart-2);
33
+ --color-chart-3: var(--chart-3);
34
+ --color-chart-4: var(--chart-4);
35
+ --color-chart-5: var(--chart-5);
36
+ --color-sidebar: var(--sidebar);
37
+ --color-sidebar-foreground: var(--sidebar-foreground);
38
+ --color-sidebar-primary: var(--sidebar-primary);
39
+ --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
40
+ --color-sidebar-accent: var(--sidebar-accent);
41
+ --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
42
+ --color-sidebar-border: var(--sidebar-border);
43
+ --color-sidebar-ring: var(--sidebar-ring);
44
+ }
24
45
 
25
- /* INFO (sky) */
26
- --color-info-foreground: var(--color-sky-600);
27
- --color-info-background: var(--color-sky-50);
46
+ :root {
47
+ --radius: 0.625rem;
48
+ --background: oklch(1 0 0);
49
+ --foreground: oklch(0.145 0 0);
50
+ --card: oklch(1 0 0);
51
+ --card-foreground: oklch(0.145 0 0);
52
+ --popover: oklch(1 0 0);
53
+ --popover-foreground: oklch(0.145 0 0);
54
+ --primary: oklch(0.205 0 0);
55
+ --primary-foreground: oklch(0.985 0 0);
56
+ --secondary: oklch(0.97 0 0);
57
+ --secondary-foreground: oklch(0.205 0 0);
58
+ --muted: oklch(0.97 0 0);
59
+ --muted-foreground: oklch(0.556 0 0);
60
+ --accent: oklch(0.97 0 0);
61
+ --accent-foreground: oklch(0.205 0 0);
62
+ --destructive: oklch(0.577 0.245 27.325);
63
+ --border: oklch(0.922 0 0);
64
+ --input: oklch(0.922 0 0);
65
+ --ring: oklch(0.708 0 0);
66
+ --chart-1: oklch(0.646 0.222 41.116);
67
+ --chart-2: oklch(0.6 0.118 184.704);
68
+ --chart-3: oklch(0.398 0.07 227.392);
69
+ --chart-4: oklch(0.828 0.189 84.429);
70
+ --chart-5: oklch(0.769 0.188 70.08);
71
+ --sidebar: oklch(0.985 0 0);
72
+ --sidebar-foreground: oklch(0.145 0 0);
73
+ --sidebar-primary: oklch(0.205 0 0);
74
+ --sidebar-primary-foreground: oklch(0.985 0 0);
75
+ --sidebar-accent: oklch(0.97 0 0);
76
+ --sidebar-accent-foreground: oklch(0.205 0 0);
77
+ --sidebar-border: oklch(0.922 0 0);
78
+ --sidebar-ring: oklch(0.708 0 0);
28
79
  }
29
80
 
30
81
  @layer theme {
31
82
  * {
32
83
  @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);
84
+ --background: oklch(0.145 0 0);
85
+ --foreground: oklch(0.985 0 0);
86
+ --card: oklch(0.205 0 0);
87
+ --card-foreground: oklch(0.985 0 0);
88
+ --popover: oklch(0.205 0 0);
89
+ --popover-foreground: oklch(0.985 0 0);
90
+ --primary: oklch(0.922 0 0);
91
+ --primary-foreground: oklch(0.205 0 0);
92
+ --secondary: oklch(0.269 0 0);
93
+ --secondary-foreground: oklch(0.985 0 0);
94
+ --muted: oklch(0.269 0 0);
95
+ --muted-foreground: oklch(0.708 0 0);
96
+ --accent: oklch(0.269 0 0);
97
+ --accent-foreground: oklch(0.985 0 0);
98
+ --destructive: oklch(0.704 0.191 22.216);
99
+ --border: oklch(1 0 0 / 10%);
100
+ --input: oklch(1 0 0 / 15%);
101
+ --ring: oklch(0.556 0 0);
102
+ --chart-1: oklch(0.488 0.243 264.376);
103
+ --chart-2: oklch(0.696 0.17 162.48);
104
+ --chart-3: oklch(0.769 0.188 70.08);
105
+ --chart-4: oklch(0.627 0.265 303.9);
106
+ --chart-5: oklch(0.645 0.246 16.439);
107
+ --sidebar: oklch(0.205 0 0);
108
+ --sidebar-foreground: oklch(0.985 0 0);
109
+ --sidebar-primary: oklch(0.488 0.243 264.376);
110
+ --sidebar-primary-foreground: oklch(0.985 0 0);
111
+ --sidebar-accent: oklch(0.269 0 0);
112
+ --sidebar-accent-foreground: oklch(0.985 0 0);
113
+ --sidebar-border: oklch(1 0 0 / 10%);
114
+ --sidebar-ring: oklch(0.556 0 0);
56
115
  }
57
116
  }
58
117
  }
59
118
 
119
+ @layer base {
120
+ * {
121
+ @apply border-border outline-ring/50;
122
+ }
123
+ body {
124
+ @apply bg-background text-foreground;
125
+ }
126
+ }
127
+
@@ -10,11 +10,11 @@ type AugmentedRequest<Params extends ParamsBase> = Request & {
10
10
  params: Partial<Params>;
11
11
  };
12
12
  type ParamsBase = Record<string, string>;
13
- type ApiHandler<Params extends ParamsBase, Env = unknown, ExecutionContext$1 = unknown> = (request: AugmentedRequest<Params>, env: Env, ctx: ExecutionContext$1) => Response | Promise<Response>;
14
- type MethodRoute<Params extends ParamsBase, Env = unknown, ExecutionContext$1 = unknown> = {
15
- GET?: ApiHandler<Params, Env, ExecutionContext$1> | ResolvableRouteModule<Params>;
16
- POST?: ApiHandler<Params, Env, ExecutionContext$1>;
17
- ALL?: ApiHandler<Params, Env, ExecutionContext$1>;
13
+ type ApiHandler<Params extends ParamsBase, Env = unknown> = (request: AugmentedRequest<Params>, env: Env, ctx: unknown) => Response | Promise<Response>;
14
+ type MethodRoute<Params extends ParamsBase, Env = unknown> = {
15
+ GET?: ApiHandler<Params, Env> | ResolvableRouteModule<Params>;
16
+ POST?: ApiHandler<Params, Env>;
17
+ ALL?: ApiHandler<Params, Env>;
18
18
  };
19
19
  type RouteModule<Params> = {
20
20
  default: FunctionComponent<Params>;
@@ -22,7 +22,7 @@ type RouteModule<Params> = {
22
22
  type RouteModulePromise<Params> = Promise<RouteModule<Params>>;
23
23
  type RouteModuleLoader<Params> = () => Promise<RouteModule<Params>>;
24
24
  type ResolvableRouteModule<Params> = RouteModule<Params> | RouteModulePromise<Params> | RouteModuleLoader<Params>;
25
- type Route<Params extends ParamsBase = any, Env = unknown> = FunctionComponent<Params> | ResolvableRouteModule<Params> | MethodRoute<Params, Env, ExecutionContext>;
25
+ type Route<Params extends ParamsBase = any, Env = unknown> = FunctionComponent<Params> | ResolvableRouteModule<Params> | MethodRoute<Params, Env>;
26
26
  interface Routes<Env = unknown> {
27
27
  auth?: AuthFn;
28
28
  layout?: Route<any, Env>;
package/dist/ui.d.ts CHANGED
@@ -1,106 +1,91 @@
1
1
  import "./signal-CqB2Ey1W.js";
2
2
  import { n as FunctionComponent } from "./types-C7G4uVGb.js";
3
3
 
4
- //#region src/ui/types.d.ts
5
- type Size = "sm" | "md" | "lg";
6
- type Variant = "solid" | "outline" | "soft" | "ghost";
7
- type SemanticColor = "primary" | "secondary" | "info" | "success" | "warning" | "danger";
8
- //#endregion
9
4
  //#region src/ui/accordion/types.d.ts
10
- type AccordionSize = Size;
11
- type AccordionVariant = Variant;
12
- type AccordionColor = SemanticColor;
13
- type AccordionRootProps = {
14
- size?: AccordionSize;
15
- variant?: AccordionVariant;
16
- color?: AccordionColor;
17
- class?: string | string[];
18
- multiple?: boolean;
5
+ type AccordionType = "single" | "multiple";
6
+ type AccordionProps = {
7
+ type: AccordionType;
8
+ defaultValue?: string | string[];
9
+ collapsible?: boolean;
10
+ disabled?: boolean;
11
+ class?: string | string[];
19
12
  } & Partial<Omit<HTMLDivElement, "children">>;
20
13
  type AccordionItemProps = {
21
- size?: AccordionSize;
22
- variant?: AccordionVariant;
23
- color?: AccordionColor;
14
+ disabled?: boolean;
24
15
  class?: string | string[];
25
16
  } & Partial<Omit<HTMLDivElement, "children">>;
26
- type AccordionHeaderProps = {
27
- size?: AccordionSize;
28
- variant?: AccordionVariant;
29
- color?: AccordionColor;
17
+ type AccordionTriggerProps = {
18
+ value: string;
30
19
  class?: string | string[];
31
- } & Partial<Omit<HTMLDivElement, "children">>;
32
- type AccordionPanelProps = {
33
- size?: AccordionSize;
34
- variant?: AccordionVariant;
35
- color?: AccordionColor;
20
+ } & Partial<Omit<HTMLButtonElement, "children">>;
21
+ type AccordionContentProps = {
22
+ value: string;
36
23
  class?: string | string[];
37
24
  } & Partial<Omit<HTMLDivElement, "children">>;
38
25
  //#endregion
39
26
  //#region src/ui/accordion/accordion.d.ts
40
- declare const Accordion: {
41
- Root: FunctionComponent<AccordionRootProps>;
42
- Item: FunctionComponent<AccordionItemProps>;
43
- Header: FunctionComponent<AccordionHeaderProps>;
44
- Panel: FunctionComponent<AccordionPanelProps>;
45
- };
27
+ declare const Accordion: FunctionComponent<AccordionProps>;
28
+ declare const AccordionItem: FunctionComponent<AccordionItemProps>;
29
+ declare const AccordionTrigger: FunctionComponent<AccordionTriggerProps>;
30
+ declare const AccordionContent: FunctionComponent<AccordionContentProps>;
46
31
  //#endregion
47
32
  //#region src/ui/badge/types.d.ts
48
- type BadgeSize = Size;
49
- type BadgeVariant = Variant;
50
- type BadgeColor = SemanticColor;
33
+ type BadgeVariant = "default" | "secondary" | "destructive" | "outline";
51
34
  type BadgeProps = {
52
- size?: BadgeSize;
53
35
  variant?: BadgeVariant;
54
- color?: BadgeColor;
55
- pill?: boolean;
56
36
  class?: string | string[];
57
- } & Partial<Omit<HTMLDivElement, "children">>;
37
+ } & Partial<Omit<HTMLSpanElement, "children">>;
58
38
  //#endregion
59
39
  //#region src/ui/badge/badge.d.ts
60
40
  declare const Badge: FunctionComponent<BadgeProps>;
61
41
  //#endregion
62
42
  //#region src/ui/button/types.d.ts
63
- type ButtonSize = Size;
64
- type ButtonVariant = Variant;
65
- type ButtonColor = SemanticColor;
43
+ type ButtonVariant = "default" | "outline" | "secondary" | "ghost" | "destructive" | "link";
44
+ type ButtonSize = "default" | "sm" | "lg" | "icon" | "icon-sm" | "icon-lg";
66
45
  type ButtonProps = {
67
46
  size?: ButtonSize;
68
47
  variant?: ButtonVariant;
69
- color?: ButtonColor;
70
48
  class?: string | string[];
71
49
  } & Partial<Omit<HTMLButtonElement, "children">>;
72
50
  //#endregion
73
51
  //#region src/ui/button/button.d.ts
74
52
  declare const Button: FunctionComponent<ButtonProps>;
75
53
  //#endregion
54
+ //#region src/ui/checkbox/types.d.ts
55
+ type CheckboxProps = {
56
+ checked?: boolean;
57
+ defaultChecked?: boolean;
58
+ onCheckedChange?: (checked: boolean) => void;
59
+ disabled?: boolean;
60
+ required?: boolean;
61
+ name?: string;
62
+ value?: string;
63
+ class?: string | string[];
64
+ } & Partial<Omit<HTMLInputElement, "children" | "checked" | "defaultChecked" | "onChange" | "disabled" | "required" | "name" | "value">>;
65
+ //#endregion
66
+ //#region src/ui/checkbox/checkbox.d.ts
67
+ declare const Checkbox: FunctionComponent<CheckboxProps>;
68
+ //#endregion
69
+ //#region src/ui/form/types.d.ts
70
+ type FormProps = {
71
+ onSubmit?: (event: Event) => void;
72
+ action?: string;
73
+ method?: "get" | "post" | "put" | "patch" | "delete";
74
+ enctype?: string;
75
+ class?: string | string[];
76
+ } & Partial<Omit<HTMLFormElement, "children" | "onSubmit" | "action" | "method" | "enctype">>;
77
+ //#endregion
78
+ //#region src/ui/form/form.d.ts
79
+ declare const Form: FunctionComponent<FormProps>;
80
+ //#endregion
76
81
  //#region src/ui/input/types.d.ts
77
- type InputSize = Size;
78
- type InputVariant = Variant;
79
- type InputColor = SemanticColor;
80
82
  type InputProps = {
81
- size?: InputSize;
82
- variant?: InputVariant;
83
- color?: InputColor;
84
83
  class?: string | string[];
85
- } & Partial<Omit<HTMLInputElement, "children">>;
84
+ } & Partial<HTMLInputElement>;
86
85
  //#endregion
87
86
  //#region src/ui/input/input.d.ts
88
87
  declare const Input: FunctionComponent<InputProps>;
89
88
  //#endregion
90
- //#region src/ui/textarea/types.d.ts
91
- type TextareaSize = Size;
92
- type TextareaVariant = Variant;
93
- type TextareaColor = SemanticColor;
94
- type TextareaProps = {
95
- size?: TextareaSize;
96
- variant?: TextareaVariant;
97
- color?: TextareaColor;
98
- class?: string | string[];
99
- } & Partial<Omit<HTMLTextAreaElement, "children">>;
100
- //#endregion
101
- //#region src/ui/textarea/textarea.d.ts
102
- declare const Textarea: FunctionComponent<TextareaProps>;
103
- //#endregion
104
89
  //#region src/ui/table/types.d.ts
105
90
  type TableProps = {
106
91
  class?: string | string[];
@@ -128,23 +113,13 @@ type TableCaptionProps = {
128
113
  } & Partial<Omit<HTMLTableCaptionElement, "children">>;
129
114
  //#endregion
130
115
  //#region src/ui/table/table.d.ts
131
- declare const Table: {
132
- Root: FunctionComponent<TableProps>;
133
- Header: FunctionComponent<TableHeaderProps>;
134
- Body: FunctionComponent<TableBodyProps>;
135
- Footer: FunctionComponent<TableFooterProps>;
136
- Row: FunctionComponent<TableRowProps>;
137
- Head: FunctionComponent<TableHeadProps>;
138
- Cell: FunctionComponent<TableCellProps>;
139
- Caption: FunctionComponent<TableCaptionProps>;
140
- };
141
- //#endregion
142
- //#region src/ui/form/types.d.ts
143
- type FormProps = {
144
- class?: string | string[];
145
- } & Partial<Omit<HTMLFormElement, "children">>;
146
- //#endregion
147
- //#region src/ui/form/form.d.ts
148
- declare const Form: FunctionComponent<FormProps>;
116
+ declare const Table: FunctionComponent<TableProps>;
117
+ declare const TableHeader: FunctionComponent<TableHeaderProps>;
118
+ declare const TableBody: FunctionComponent<TableBodyProps>;
119
+ declare const TableFooter: FunctionComponent<TableFooterProps>;
120
+ declare const TableRow: FunctionComponent<TableRowProps>;
121
+ declare const TableHead: FunctionComponent<TableHeadProps>;
122
+ declare const TableCell: FunctionComponent<TableCellProps>;
123
+ declare const TableCaption: FunctionComponent<TableCaptionProps>;
149
124
  //#endregion
150
- 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, Table, TableBodyProps, TableCaptionProps, TableCellProps, TableFooterProps, TableHeadProps, TableHeaderProps, TableProps, TableRowProps, Textarea, TextareaColor, TextareaProps, TextareaSize, TextareaVariant, Variant };
125
+ export { Accordion, AccordionContent, AccordionContentProps, AccordionItem, AccordionItemProps, AccordionProps, AccordionTrigger, AccordionTriggerProps, AccordionType, Badge, BadgeProps, BadgeVariant, Button, ButtonProps, ButtonSize, ButtonVariant, Checkbox, CheckboxProps, Form, FormProps, Input, InputProps, Table, TableBody, TableBodyProps, TableCaption, TableCaptionProps, TableCell, TableCellProps, TableFooter, TableFooterProps, TableHead, TableHeadProps, TableHeader, TableHeaderProps, TableProps, TableRow, TableRowProps };
package/dist/ui.js CHANGED
@@ -1 +1 @@
1
- import"./context-store-ptQxy_Tf.js";import"./signal-store-0zk-69gB.js";import"./fragment-Be4WKiZ3.js";import{n as e,t}from"./create-computed-lI_3nbQK.js";import{t as n}from"./create-element-CkxIHf8j.js";import"./jsx-runtime-CwvSR9n_.js";import{t as r}from"./create-context-HSD02vmk.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={Root:({class:e,children:t,...r})=>n(`div`,{class:[`w-full overflow-auto`],children:n(`table`,{class:[`w-full caption-bottom text-sm`,...Array.isArray(e)?e:e?[e]:[]],...r,children:t})}),Header:({class:e,children:t,...r})=>n(`thead`,{class:[`border-b border-secondary-foreground/20`,...Array.isArray(e)?e:e?[e]:[]],...r,children:t}),Body:({class:e,children:t,...r})=>n(`tbody`,{class:[`[&>tr:last-child]:border-0`,...Array.isArray(e)?e:e?[e]:[]],...r,children:t}),Footer:({class:e,children:t,...r})=>n(`tfoot`,{class:[`border-t border-secondary-foreground/20 bg-secondary-background`,`font-medium text-secondary-foreground`,...Array.isArray(e)?e:e?[e]:[]],...r,children:t}),Row:({class:e,children:t,...r})=>n(`tr`,{class:[`border-b border-secondary-foreground/20 transition-colors`,`hover:bg-secondary-background`,`data-[state=selected]:bg-secondary-background`,...Array.isArray(e)?e:e?[e]:[]],...r,children:t}),Head:({class:e,children:t,...r})=>n(`th`,{class:[`h-12 px-4 text-left align-middle text-sm font-medium`,`text-secondary-foreground`,...Array.isArray(e)?e:e?[e]:[]],...r,children:t}),Cell:({class:e,children:t,...r})=>n(`td`,{class:[`p-4 align-middle`,...Array.isArray(e)?e:e?[e]:[]],...r,children:t}),Caption:({class:e,children:t,...r})=>n(`caption`,{class:[`mt-4 text-sm text-secondary-foreground`,...Array.isArray(e)?e:e?[e]:[]],...r,children:t})},x=({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,x as Form,g as Input,b as Table,y as Textarea};
1
+ import"./context-store-D9atdfKO.js";import"./signal-store-B0_cH-Uu.js";import{t as e}from"./create-signal-2H8hjZy6.js";import{t}from"./create-context-Ccu6Wido.js";import{jsx as n,jsxs as r}from"#renku/jsx-runtime";const i=t(),a=({type:t,defaultValue:r,children:a,...o})=>{let s=e(Array.isArray(r)?r:r?[r]:[]);return i.set({type:t,openValues:s,toggle:e=>{let n=s.get();t===`single`?s.set(n.includes(e)?[]:[e]):n.includes(e)?s.set(n.filter(t=>t!==e)):s.set([...n,e])}}),n(`div`,{"data-slot":`accordion`,class:[``,...o.class?[o.class].flat():[]],...o,children:a})},o=({children:e,...t})=>n(`div`,{"data-slot":`accordion-item`,class:[`border-b last:border-b-0`,...t.class?[t.class].flat():[]],...t,children:e}),s=({value:e,children:t,...a})=>{let o=i.get(),s=o.openValues.get().includes(e),c=()=>{a.disabled||o.toggle(e)};return r(`button`,{"data-slot":`accordion-trigger`,class:[`focus-visible:border-ring focus-visible:ring-ring/50 flex flex-1 items-start justify-between gap-4 rounded-md py-4 text-left text-sm font-medium transition-all outline-none hover:underline focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&[data-state=open]>svg]:rotate-180`,...a.class?[a.class].flat():[]],onclick:c,"data-state":s?`open`:`closed`,"aria-expanded":s,...a,children:[t,n(`svg`,{class:`text-muted-foreground pointer-events-none size-4 shrink-0 translate-y-0.5 transition-transform duration-200`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,children:n(`path`,{d:`M6 9l6 6 6-6`})})]})},c=({value:e,children:t,...r})=>{let a=i.get().openValues.get().includes(e);return n(`div`,{"data-slot":`accordion-content`,class:[`overflow-hidden text-sm data-[state=closed]:hidden`,...r.class?[r.class].flat():[]],"data-state":a?`open`:`closed`,...r,children:n(`div`,{class:`pt-0 pb-4`,children:t})})},l={default:`border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90`,secondary:`border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90`,destructive:`border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60`,outline:`text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground`},u=({variant:e=`default`,children:t,...r})=>{let i=l[e];return n(`span`,{class:[`focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-full border px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] [&>svg]:pointer-events-none [&>svg]:size-3`,i],...r,children:t})},d={default:`bg-primary text-primary-foreground hover:bg-primary/90`,outline:`border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50`,secondary:`bg-secondary text-secondary-foreground hover:bg-secondary/80`,ghost:`hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50`,destructive:`bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60`,link:`text-primary underline-offset-4 hover:underline`},f={default:`h-9 px-4 py-2 has-[>svg]:px-3`,sm:`h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5`,lg:`h-10 rounded-md px-6 has-[>svg]:px-4`,icon:`size-9`,"icon-sm":`size-8`,"icon-lg":`size-10`},p=({size:e=`default`,variant:t=`default`,children:r,...i})=>{let a=d[t],o=f[e];return n(`button`,{class:[`focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive inline-flex shrink-0 items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4`,o,a],...i,children:r})},m=({checked:e,defaultChecked:t,onCheckedChange:i,disabled:a,required:o,name:s,value:c,class:l,...u})=>{let d=e=>{let t=e.target;i?.(t.checked)},f=e===void 0?t:e;return r(`div`,{"data-slot":`checkbox`,class:[`peer border-input dark:bg-input/30 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground dark:data-[state=checked]:bg-primary data-[state=checked]:border-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive size-4 shrink-0 rounded-[4px] border shadow-xs transition-shadow outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50`,...l?[l].flat():[]],"data-state":f?`checked`:`unchecked`,...u,children:[n(`input`,{type:`checkbox`,checked:f,disabled:a,required:o,name:s,value:c,onchange:d,class:`sr-only`}),f&&n(`div`,{"data-slot":`checkbox-indicator`,class:`grid place-content-center text-current transition-none`,children:n(`svg`,{class:`size-3.5`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`3`,children:n(`path`,{d:`M20 6L9 17l-5-5`})})})]})},h=({onSubmit:e,action:t,method:r=`post`,enctype:i,children:a,class:o,...s})=>n(`form`,{action:t,method:r,enctype:i,onsubmit:t=>{t.preventDefault(),e?.(t)},class:[`space-y-4`,...o?[o].flat():[]],...s,children:a}),g=({class:e,...t})=>n(`input`,{class:[`file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm`,`focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]`,`aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive`,...Array.isArray(e)?e:e?[e]:[]],...t}),_=({children:e,...t})=>n(`div`,{"data-slot":`table-container`,class:`relative w-full overflow-x-auto`,children:n(`table`,{"data-slot":`table`,class:[`w-full caption-bottom text-sm`,...t.class?[t.class].flat():[]],...t,children:e})}),v=({children:e,...t})=>n(`thead`,{"data-slot":`table-header`,class:[`[&_tr]:border-b`,...t.class?[t.class].flat():[]],...t,children:e}),y=({children:e,...t})=>n(`tbody`,{"data-slot":`table-body`,class:[`[&_tr:last-child]:border-0`,...t.class?[t.class].flat():[]],...t,children:e}),b=({children:e,...t})=>n(`tfoot`,{"data-slot":`table-footer`,class:[`bg-muted/50 border-t font-medium [&>tr]:last:border-b-0`,...t.class?[t.class].flat():[]],...t,children:e}),x=({children:e,...t})=>n(`tr`,{"data-slot":`table-row`,class:[`hover:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors`,...t.class?[t.class].flat():[]],...t,children:e}),S=({children:e,...t})=>n(`th`,{"data-slot":`table-head`,class:[`text-foreground h-10 px-2 text-left align-middle font-medium whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]`,...t.class?[t.class].flat():[]],...t,children:e}),C=({children:e,...t})=>n(`td`,{"data-slot":`table-cell`,class:[`p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]`,...t.class?[t.class].flat():[]],...t,children:e}),w=({children:e,...t})=>n(`caption`,{"data-slot":`table-caption`,class:[`text-muted-foreground mt-4 text-sm`,...t.class?[t.class].flat():[]],...t,children:e});export{a as Accordion,c as AccordionContent,o as AccordionItem,s as AccordionTrigger,u as Badge,p as Button,m as Checkbox,h as Form,g as Input,_ as Table,y as TableBody,w as TableCaption,C as TableCell,b as TableFooter,S as TableHead,v as TableHeader,x as TableRow};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "renku",
3
- "version": "0.0.11",
3
+ "version": "0.0.13",
4
4
  "private": false,
5
5
  "description": "Renku",
6
6
  "homepage": "https://renku.dev",
@@ -28,8 +28,19 @@
28
28
  ],
29
29
  "type": "module",
30
30
  "imports": {
31
- "#renku/jsx-dev-runtime": "./src/jsx/jsx-dev-runtime.ts",
32
- "#renku/jsx-runtime": "./src/jsx/jsx-runtime.ts"
31
+ "#renku/jsx-dev-runtime": {
32
+ "types": "./dist/jsx-dev-runtime.d.ts",
33
+ "import": "./dist/jsx-dev-runtime.js"
34
+ },
35
+ "#renku/jsx-runtime": {
36
+ "types": "./dist/jsx-runtime.d.ts",
37
+ "import": "./dist/jsx-runtime.js"
38
+ },
39
+ "#renku/async-context": {
40
+ "types": "./dist/async-context.server.d.ts",
41
+ "browser": "./dist/async-context.browser.js",
42
+ "default": "./dist/async-context.server.js"
43
+ }
33
44
  },
34
45
  "exports": {
35
46
  ".": {
@@ -92,11 +103,11 @@
92
103
  }
93
104
  },
94
105
  "scripts": {
106
+ "build": "PREVIEW=true tsdown",
95
107
  "dev": "tsdown --watch",
108
+ "generate-types": "wrangler -c src/cloudflare/wrangler.jsonc types src/cloudflare/worker-configuration.d.ts",
96
109
  "lint": "oxlint --type-aware",
97
- "tsc": "tsc",
98
- "build": "PREVIEW=true tsdown",
99
- "generate-types": "wrangler -c src/cloudflare/wrangler.jsonc types src/cloudflare/worker-configuration.d.ts"
110
+ "tsc": "tsc"
100
111
  },
101
112
  "dependencies": {
102
113
  "@sqlite.org/sqlite-wasm": "3.51.1-build2",
@@ -104,15 +115,15 @@
104
115
  "signal-polyfill": "0.2.2"
105
116
  },
106
117
  "devDependencies": {
107
- "@happy-dom/global-registrator": "20.1.0",
118
+ "@happy-dom/global-registrator": "20.3.3",
108
119
  "@standard-schema/spec": "1.1.0",
109
120
  "@stricli/auto-complete": "1.2.5",
110
121
  "@stricli/core": "1.2.5",
111
- "@types/bun": "1.3.5",
112
- "@types/node": "25.0.5",
113
- "happy-dom": "20.1.0",
114
- "tsdown": "0.19.0",
115
- "vite": "8.0.0-beta.7",
116
- "wrangler": "4.58.0"
122
+ "@types/bun": "1.3.6",
123
+ "@types/node": "25.0.9",
124
+ "happy-dom": "20.3.3",
125
+ "tsdown": "0.20.0-beta.3",
126
+ "vite": "8.0.0-beta.8",
127
+ "wrangler": "4.59.2"
117
128
  }
118
129
  }
@@ -1 +0,0 @@
1
- const e=typeof window<`u`&&typeof document<`u`;let t,n=null;if(!e){let{AsyncLocalStorage:e}=await import(`node:async_hooks`);n=new e}const r=()=>n?n.getStore():t,i=e=>{if(n)throw Error(`contextStore.current cannot be set on the server. Use run().`);t=e},a=(e,r)=>n?n.run(e,r):(t=e,r()),o={get current(){return r()},set current(e){i(e)},run(e,t){return a(e,t)},set(e,i){let a=r();if(!a){if(n)throw Error(`Context store missing in server environment. Make sure to use contextStore.run().`);t=new Map([[e,i]]);return}a.set(e,i)},get(e){return r()?.get(e)}};export{o as t};
@@ -1 +0,0 @@
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};
@@ -1 +0,0 @@
1
- import{t as e}from"./context-store-ptQxy_Tf.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};
@@ -1 +0,0 @@
1
- import{n as e}from"./create-computed-lI_3nbQK.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};
File without changes
@@ -1 +0,0 @@
1
- import{t as e}from"./context-store-ptQxy_Tf.js";import{n as t,t as n}from"./signal-store-0zk-69gB.js";import{t as r}from"./effect-Bd9_A9t9.js";import{n as i}from"./fragment-Be4WKiZ3.js";const a=Symbol(`renku:suspense`),o=e=>e&&typeof e.type==`function`&&e.type[a]===!0,s=({fn:t,key:i,props:a,asyncComponents:o,clientComponents:s})=>{let c=null,l=null,d=e=>{c=e,l&&l(e)},f=[],p=e.current,m=p?new Map(p):new Map;return r(()=>{n.set(f);let r=e.run(m,()=>t(a));if(r instanceof Promise){let e=s.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(u({node:r,asyncComponents:o,clientComponents:s}))}),{type:`effect`,value:c,addCallback:e=>{l=e}}},c=e=>typeof e==`object`&&!!e&&!Array.isArray(e)&&`type`in e&&typeof e.type==`function`&&e.type[i]===!0,l=({node:e,asyncComponents:t=[],clientComponents:n=[]})=>{let r=[];if(Array.isArray(e))for(let i of e)r.push(...l({node:i,asyncComponents:t,clientComponents:n}));else if(e)if(c(e)){let i=e.type(e.props);r.push(...l({node:i,asyncComponents:t,clientComponents:n}))}else{let i=u({node:e,asyncComponents:t,clientComponents:n});Array.isArray(i)?r.push(...i):r.push(i)}return r},u=({node:e,asyncComponents:n=[],clientComponents:r=[]})=>{if(Array.isArray(e))return l({node:e,asyncComponents:n,clientComponents:r});if(e==null)return null;if(typeof e==`string`||typeof e==`number`)return{type:`text`,value:String(e)};if(e instanceof t.Computed||e instanceof t.State)return{type:`signal`,value:e};if(typeof e==`object`){if(typeof e.type==`function`){if(o(e)){console.log(`🚨`,`Suspense`,e);let t=l({node:e.props.children,asyncComponents:n,clientComponents:r}),i=l({node:e.props.fallback,asyncComponents:n,clientComponents:r});return{type:`suspense`,key:e.key,suspended:t,fallback:i}}return s({fn:e.type,key:e.key,props:e.props,asyncComponents:n,clientComponents:r})}if(typeof e.type==`object`&&e.type.type===`client`)return r.push({path:e.type.path,name:e.type.name}),{type:`client`,key:e.key,props:e.props,path:e.type.path,name:e.type.name};if(typeof e.type==`string`){let{children:t,...i}=e.props,a=l({node:t,asyncComponents:n,clientComponents:r});return{type:`element`,key:e.key,value:e.type,props:i,children:a}}}return console.warn(`⚠️`,`UNHANDLED NODE TYPE`,e),null};export{s as n,a as r,u as t};
@@ -1 +0,0 @@
1
- import{n as e}from"./signal-store-0zk-69gB.js";import{t}from"./jsx-to-virtual-node-CKXtqFFH.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=o({domNode:e,virtualNode:i,replace:n});n=!1,r.push(t)}return r}const i=({element:t,key:r,val:i})=>{typeof i==`function`?r.startsWith(`on`)&&t.addEventListener(r.slice(2),i):typeof i==`string`||typeof i==`number`?(r===`className`&&(r=`class`),t.setAttribute(r,String(i))):i instanceof e.State||i instanceof e.Computed?n(()=>{t.setAttribute(r,String(i.get()))}):Array.isArray(i)?n(()=>{let n=i.map(t=>t instanceof e.State||t instanceof e.Computed?String(t.get()):String(t)).join(` `);t.setAttribute(r,n)}):typeof i==`boolean`&&(i?t.setAttribute(r,``):t.removeAttribute(r))},a=({domNode:e,newVirtualNode:t,oldVirtualNode:n})=>{let r=e=>e&&`key`in e?e.key??null:null;if(t&&n)if(t.type===n.type){if(t.type===`effect`&&n.type===`effect`)return n.domNode&&(t.domNode=o({domNode:n.domNode,virtualNode:t,replace:!0})??void 0),e;if(t.type===`element`&&n.type===`element`)if(t.value===n.value){let s=e,c=n.props?Object.keys(n.props).filter(e=>!(e in t.props)):[];c.length&&c.map(e=>s.removeAttribute(e));for(let[e,r]of Object.entries(t.props))if(e!==`children`&&e!==`key`)if(n.props&&e in n.props){let t=n.props[e];typeof r==`function`||(Array.isArray(r)&&Array.isArray(t)?JSON.stringify(r)!==JSON.stringify(t)&&i({element:s,key:e,val:r}):n.props[e]!==r&&i({element:s,key:e,val:r}))}else i({element:s,key:e,val:r});if(t.children.length){let e=0;for(let i=0;i<t.children.length;i++){let c=t.children[i];if(c){let t=n.children?n.children[i-e]:void 0;if(t?.domNode)if(r(c)===r(t))c.domNode=t.domNode,a({domNode:t.domNode,newVirtualNode:c,oldVirtualNode:t});else{let i=r(c),o=n.children.findIndex(e=>r(e)===i),l=o>-1?n.children[o]:null;l?.domNode&&(s.moveBefore(l.domNode,t.domNode),c.domNode=l.domNode,e++,a({domNode:l.domNode,newVirtualNode:c,oldVirtualNode:l}),n.children.splice(o,1))}else o({domNode:s,virtualNode:c});n.children[i-e]=null}}if(n.children.length+e>t.children.length)for(let r=t.children.length;r<n.children.length+e;r++){let t=n.children[r-e]?.domNode;t&&s.removeChild(t)}}else n.children?.length&&s.replaceChildren()}else console.log(`Different node types`),n.domNode&&o({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&&o({domNode:n.domNode,virtualNode:t,replace:!0});else console.warn(`Old or new node is null`);return e};function o({domNode:e,virtualNode:s,replace:c=!1}){if(!s)return null;let l=[`svg`,`path`,`circle`];if(s.type===`element`){let t=l.includes(s.value)?document.createElementNS(`http://www.w3.org/2000/svg`,s.value):document.createElement(s.value);if(s.domNode=t,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[e,n]of Object.entries(s.props))e!==`children`&&e!==`key`&&e!==`ref`&&i({element:t,key:e,val:n});if(s.children)for(let e of s.children)o({domNode:t,virtualNode:e});if(e===document.documentElement)document.documentElement.replaceWith(t);else{let n=e.parentNode;c&&n?n.replaceChild(t,e):e.appendChild(t)}return t}if(s.type===`async`){let n=document.createElement(`template`);return s.domNode=n,e.appendChild(n),s.promise?.then(e=>{let i=t({node:e});Array.isArray(i)?r({domNode:n,virtualNode:i,replace:!0}):o({domNode:n,virtualNode:i,replace:!0})}),n}if(s.type===`text`){let t=document.createTextNode(s.value);return s.domNode=t,e.appendChild(t),t}if(s.type===`signal`){let t=s.value,r=document.createTextNode(``);return s.domNode=r,n(()=>{r.textContent=String(t.get())}),e.appendChild(r),r}if(s.type===`suspense`){let t=document.createTextNode(``);t.textContent=`SUSPENSE`;let n=document.createElement(`div`);if(n.appendChild(t),s.domNode=n,console.log(`render suspense`,e,t),e===document.documentElement)document.documentElement.replaceWith(n);else{let t=e.parentNode;c&&t?t.replaceChild(n,e):e.appendChild(n)}return n}if(s.type===`effect`){let t=s.value,n=null,i=null,l=t=>{Array.isArray(t)?r({domNode:e,virtualNode:t,replace:c}):n?(n=a({domNode:n,newVirtualNode:t,oldVirtualNode:i}),i=t,s.domNode=n??void 0):(n=o({domNode:e,virtualNode:t,replace:c}),i=t,s.domNode=n??void 0,t=null)};s.addCallback(l),l(t)}return null}export{a as n,r,o as t};