@akanjs/cli 3.0.0-alpha.103 → 3.0.0-alpha.104

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 (68) hide show
  1. package/.build-stamp +1 -1
  2. package/{abstractCompactor-byytxs22.js → abstractCompactor-mjh5ppsq.js} +1 -1
  3. package/{agent.command-v1a4746v.js → agent.command-d2gfxfck.js} +5 -5
  4. package/{application.command-fzdcnzhg.js → application.command-xgphqs7k.js} +5 -5
  5. package/{applicationBuildRunner-s4gsk728.js → applicationBuildRunner-3d5q1yn7.js} +2 -2
  6. package/{applicationReleasePackager-28v9vbzk.js → applicationReleasePackager-4yasxwv9.js} +1 -1
  7. package/buildBatch.proc.js +2 -2
  8. package/{capacitorApp-8d6d4zkm.js → capacitorApp-36rbr858.js} +2 -2
  9. package/{cloud.command-wygy2z05.js → cloud.command-abgkk73f.js} +9 -9
  10. package/{context.command-4vdt1aqq.js → context.command-ez8a0zyz.js} +13 -13
  11. package/{devTui-qnf1txdz.js → devTui-70cjjtaw.js} +1 -1
  12. package/{devTuiView-yzct2cq6.js → devTuiView-71wnkjft.js} +1 -1
  13. package/{guideline.command-p92dq6ts.js → guideline.command-xmqwx8zm.js} +11 -7
  14. package/guidelines/agentRule/agentRule.instruction.md +6 -14
  15. package/guidelines/conventions/conventions.instruction.md +40 -25
  16. package/guidelines/mcpRule/mcpRule.instruction.md +61 -39
  17. package/guidelines/ssrRule/ssrRule.instruction.md +15 -13
  18. package/guidelines/workspaceOnboarding/workspaceOnboarding.instruction.md +4 -3
  19. package/guidelines/workspaceRecipes/workspaceRecipes.instruction.md +68 -3
  20. package/incrementalBuilder.proc.js +1 -1
  21. package/{index-p5neav9b.js → index-0vh9rgxz.js} +1 -1
  22. package/{index-gq44bqjt.js → index-259dsnz3.js} +2 -2
  23. package/{index-qsq3q8fy.js → index-2tv3fdx4.js} +21 -10
  24. package/{index-yks023mb.js → index-4c9ykbfq.js} +6 -6
  25. package/{index-qkk27bk6.js → index-4edzf1gr.js} +4 -4
  26. package/{index-yza7zkpt.js → index-600zhnve.js} +10 -10
  27. package/{index-srdssqj7.js → index-7737gxcp.js} +3 -3
  28. package/{index-zmjppp25.js → index-8pm30m73.js} +5 -5
  29. package/{index-0amdxycf.js → index-fz5q3gd7.js} +3 -3
  30. package/{index-fc1bh0a7.js → index-gyd220p2.js} +1 -1
  31. package/{index-5svjba73.js → index-j9yhg404.js} +1 -1
  32. package/{index-c69j78kk.js → index-kn1h7p1x.js} +1 -1
  33. package/{index-gtmz74tj.js → index-ktb5njgy.js} +2 -2
  34. package/{index-znynzt5w.js → index-mak3cd28.js} +1 -1
  35. package/{index-29sxqfaw.js → index-ne2qy0nk.js} +3 -3
  36. package/{index-hyywke0f.js → index-pnqbkf5p.js} +1 -1
  37. package/{index-8p8p0cf8.js → index-rwg2aa4f.js} +3 -3
  38. package/{index-7d6vny25.js → index-ws5e0j51.js} +2 -2
  39. package/{index-1yxtbmbj.js → index-wt7qrtd4.js} +1 -1
  40. package/{index-zz5jyd94.js → index-yecdrt9a.js} +9 -9
  41. package/{index-zxgr3s8s.js → index-yw4xj7pa.js} +4 -4
  42. package/index.js +19 -19
  43. package/{library.command-s4fszngs.js → library.command-nbsky672.js} +3 -3
  44. package/{localRegistry.command-gyw4da9z.js → localRegistry.command-namg61k1.js} +8 -8
  45. package/{module.command-6n7dwvav.js → module.command-29vqzrh8.js} +6 -6
  46. package/{package.command-gr82ypnr.js → package.command-axv0abmn.js} +3 -3
  47. package/package.json +2 -2
  48. package/{page.command-7gvgb3jb.js → page.command-vs9s3zrh.js} +3 -3
  49. package/{primitive.command-tk5ckw38.js → primitive.command-cbxmqbtc.js} +7 -7
  50. package/{quality.command-38v81baf.js → quality.command-gmbs7nws.js} +2 -2
  51. package/{repair.command-5xbwvsxp.js → repair.command-bqsjptsj.js} +5 -5
  52. package/{routeSourceValidator-ze6x894c.js → routeSourceValidator-apyqw7wk.js} +90 -17
  53. package/{scalar.command-0epwcr5k.js → scalar.command-6k1vhe9s.js} +5 -5
  54. package/{subspace.command-e2t36xb2.js → subspace.command-35a3t6vv.js} +3 -3
  55. package/templates/app/page/_index.tsx +3 -3
  56. package/templates/app/page/_layout.tsx +31 -32
  57. package/templates/appSample/page/task/[taskId]/_index.tsx +22 -27
  58. package/templates/appSample/page/task/[taskId]/edit.tsx +25 -30
  59. package/templates/appSample/page/task/_index.tsx +3 -7
  60. package/templates/appSample/page/task/_layout.tsx +4 -15
  61. package/templates/appSample/page/task/new.tsx +4 -10
  62. package/templates/crudPages/[__model__Id]/edit/page.tsx +26 -28
  63. package/templates/crudPages/[__model__Id]/page.tsx +20 -25
  64. package/templates/crudPages/new/page.tsx +24 -23
  65. package/templates/crudPages/page.tsx +25 -24
  66. package/templates/crudSinglePage/page.tsx +25 -24
  67. package/{workflow.command-kphbr7eh.js → workflow.command-nwpcdc8p.js} +10 -10
  68. package/{workspace.command-j1gatz3d.js → workspace.command-kah5jgg5.js} +20 -20
@@ -4,39 +4,34 @@ export default function getContent(scanInfo: AppInfo | LibInfo | null, dict: { a
4
4
  return {
5
5
  filename: "edit.tsx",
6
6
  content: `import { fetch, Task } from "@apps/${dict.appName}/client";
7
+ import { ID } from "akanjs/base";
8
+ import { page } from "akanjs/client";
7
9
  import { Load, Link, buttonRecipe } from "akanjs/ui";
8
10
 
9
- // ===== page/task/[taskId]/edit.tsx =====
10
- // Convention: Server-side edit form page using Load.Edit from akanjs/ui.
11
- // async Page() — fetches model data on the server via fetch.editTask(params.taskId).
12
- // The same Template (Task.Template.General) is reused here — no separate edit template needed.
13
- // Load.Edit with type="form" provides the submit/cancel wrapper with the pre-loaded model.
11
+ export default page()
12
+ .param("taskId", ID)
13
+ .render(async ({ taskId }) => {
14
+ const { taskEdit } = await fetch.editTask(taskId);
14
15
 
15
- interface PageProps {
16
- params: { taskId: string };
17
- }
18
- export default async function Page({ params: { taskId } }: PageProps) {
19
- const { taskEdit } = await fetch.editTask(taskId);
20
-
21
- return (
22
- <main className="mx-auto max-w-2xl px-6 py-8">
23
- <div className="mb-6">
24
- <Link href={\`/task/\${taskId}\`} className={buttonRecipe({ variant: "ghost", size: "sm" })}>
25
- ← Back to Task
26
- </Link>
27
- </div>
28
- <div className="mb-6">
29
- <h1 className="font-extrabold text-3xl text-foreground">Edit Task</h1>
30
- <p className="mt-1 text-foreground/60 text-sm">Update the task details</p>
31
- </div>
32
- <div className="rounded-xl border border-foreground/10 bg-background p-6 shadow-sm">
33
- <Load.Edit slice={fetch.slice.taskInPublic} edit={taskEdit} type="form" onSubmit={\`/task/\${taskId}\`}>
34
- <Task.Template.General />
35
- </Load.Edit>
36
- </div>
37
- </main>
38
- );
39
- }
16
+ return (
17
+ <main className="mx-auto max-w-2xl px-6 py-8">
18
+ <div className="mb-6">
19
+ <Link href={\`/task/\${taskId}\`} className={buttonRecipe({ variant: "ghost", size: "sm" })}>
20
+ ← Back to Task
21
+ </Link>
22
+ </div>
23
+ <div className="mb-6">
24
+ <h1 className="font-extrabold text-3xl text-foreground">Edit Task</h1>
25
+ <p className="mt-1 text-foreground/60 text-sm">Update the task details</p>
26
+ </div>
27
+ <div className="rounded-xl border border-foreground/10 bg-background p-6 shadow-sm">
28
+ <Load.Edit slice={fetch.slice.taskInPublic} edit={taskEdit} type="form" onSubmit={\`/task/\${taskId}\`}>
29
+ <Task.Template.General />
30
+ </Load.Edit>
31
+ </div>
32
+ </main>
33
+ );
34
+ });
40
35
  `,
41
36
  };
42
37
  }
@@ -4,14 +4,10 @@ export default function getContent(scanInfo: AppInfo | LibInfo | null, dict: { a
4
4
  return {
5
5
  filename: "_index.tsx",
6
6
  content: `import { fetch, Task, usePage } from "@apps/${dict.appName}/client";
7
+ import { page } from "akanjs/client";
7
8
  import { Link, buttonRecipe } from "akanjs/ui";
8
9
 
9
- // ===== page/task/_index.tsx =====
10
- // Convention: Akan.js file-based routing — _index.tsx is the index page for /task.
11
- // Server-side data loading via loader() at the page level; passes init/view props to Zone components.
12
- // Uses usePage().l() for i18n — the framework convention for dictionary-based translations.
13
-
14
- export default async function Page() {
10
+ export default page().render(async () => {
15
11
  const { l } = usePage();
16
12
  const { taskInitInPublic } = await fetch.initTaskInPublic();
17
13
  return (
@@ -29,6 +25,6 @@ export default async function Page() {
29
25
  <Task.Zone.Card className="flex flex-col gap-3" init={taskInitInPublic} />
30
26
  </main>
31
27
  );
32
- }`,
28
+ });`,
33
29
  };
34
30
  }
@@ -3,22 +3,11 @@ import type { AppInfo, LibInfo } from "akanjs";
3
3
  export default function getContent(scanInfo: AppInfo | LibInfo | null, dict: { appName: string }) {
4
4
  return {
5
5
  filename: "_layout.tsx",
6
- content: `
7
- // ===== page/task/_layout.tsx =====
8
- // Convention: Akan.js file-based routing — _layout.tsx wraps every sub-page under /task/*.
9
- // The underscores mark it as a routing file; children = sub-page component from nested routes.
10
- // Rendered by Akan's router: URL → _layout.tsx → children (e.g., _index.tsx or [taskId]/_index.tsx).
6
+ content: `import { layout } from "akanjs/client";
11
7
 
12
- interface LayoutProps {
13
- children: React.ReactNode;
14
- }
15
- export default function Layout({ children }: LayoutProps) {
16
- return (
17
- <div className="min-h-screen bg-muted">
18
- {children}
19
- </div>
20
- );
21
- }
8
+ export default layout().render(({ children }) => {
9
+ return <div className="min-h-screen bg-muted">{children}</div>;
10
+ });
22
11
  `,
23
12
  };
24
13
  }
@@ -3,17 +3,11 @@ import type { AppInfo, LibInfo } from "akanjs";
3
3
  export default function getContent(scanInfo: AppInfo | LibInfo | null, dict: { appName: string }) {
4
4
  return {
5
5
  filename: "new.tsx",
6
- content: `import { type cnst, fetch, Task, usePage } from "@apps/${dict.appName}/client";
6
+ content: `import { type cnst, fetch, Task } from "@apps/${dict.appName}/client";
7
+ import { page } from "akanjs/client";
7
8
  import { Load, Link, buttonRecipe } from "akanjs/ui";
8
9
 
9
- // ===== page/task/new.tsx =====
10
- // Convention: Server-side form page using Load.Edit from akanjs/ui.
11
- // async Page() — server-side component that pre-initializes form data before rendering.
12
- // Load.Edit with type="form" renders the Template inside a form wrapper with submit/cancel actions.
13
- // onCancel="back" navigates to the previous page; onSubmit specifies the redirect after success.
14
- // Template is reused — same Task.Template.General used for create, edit, and client-side modals.
15
-
16
- export default async function Page() {
10
+ export default page().render(() => {
17
11
  const taskForm: Partial<cnst.Task> = { status: "todo" };
18
12
 
19
13
  return (
@@ -34,6 +28,6 @@ export default async function Page() {
34
28
  </div>
35
29
  </main>
36
30
  );
37
- }`,
31
+ });`,
38
32
  };
39
33
  }
@@ -10,38 +10,36 @@ export default function getContent(scanInfo: AppInfo | LibInfo | null, dict: Dic
10
10
  filename: "_index.tsx",
11
11
  content: `
12
12
  import { ${dict.Model}, fetch, usePage } from "@apps/${dict.appName}/client";
13
- import type { PageConfig } from "akanjs/client";
13
+ import { ID } from "akanjs/base";
14
+ import { page } from "akanjs/client";
14
15
  import { Load } from "akanjs/ui";
15
16
 
16
- interface PageProps {
17
- params: { ${dict.model}Id: string };
18
- }
19
-
20
- export default async function Page({ params }: PageProps) {
21
- const { l } = usePage();
22
- const { ${dict.model}Id } = params;
23
- const [{ ${dict.model}Edit }] = await Promise.all([fetch.edit${dict.Model}(${dict.model}Id)]);
24
- return (
25
- <div className="container">
26
- <div className="m-4 mt-8 flex justify-between">
27
- <div className="flex items-center gap-2 text-primary text-xl">
28
- {l("base.updateModel", { model: l("${dict.model}.modelName") })}
17
+ export default page()
18
+ .param("${dict.model}Id", ID)
19
+ .config({ transition: "none" })
20
+ .render(async ({ ${dict.model}Id }) => {
21
+ const { l } = usePage();
22
+ const [{ ${dict.model}Edit }] = await Promise.all([fetch.edit${dict.Model}(${dict.model}Id)]);
23
+ return (
24
+ <div className="container">
25
+ <div className="m-4 mt-8 flex justify-between">
26
+ <div className="flex items-center gap-2 text-primary text-xl">
27
+ {l("base.updateModel", { model: l("${dict.model}.modelName") })}
28
+ </div>
29
29
  </div>
30
+ <Load.Edit
31
+ className="flex flex-col items-center"
32
+ slice={fetch.slice.${dict.model}InPublic}
33
+ edit={${dict.model}Edit}
34
+ type="form"
35
+ onCancel="back"
36
+ onSubmit="/${dict.model}"
37
+ >
38
+ <${dict.Model}.Template.General />
39
+ </Load.Edit>
30
40
  </div>
31
- <Load.Edit
32
- className="flex flex-col items-center"
33
- slice={fetch.slice.${dict.model}InPublic}
34
- edit={${dict.model}Edit}
35
- type="form"
36
- onCancel="back"
37
- onSubmit="/${dict.model}"
38
- >
39
- <${dict.Model}.Template.General />
40
- </Load.Edit>
41
- </div>
42
- );
43
- }
44
- export const pageConfig = { transition: "none" } satisfies PageConfig;
41
+ );
42
+ });
45
43
  `,
46
44
  };
47
45
  }
@@ -10,40 +10,35 @@ export default function getContent(scanInfo: AppInfo | LibInfo | null, dict: Dic
10
10
  filename: "_index.tsx",
11
11
  content: `
12
12
  import { ${dict.Model}, fetch, usePage } from "@apps/${dict.appName}/client";
13
- import type { PageConfig } from "akanjs/client";
13
+ import { ID } from "akanjs/base";
14
+ import { page } from "akanjs/client";
14
15
  import { buttonRecipe, Link } from "akanjs/ui";
15
16
 
16
- interface PageProps {
17
- params: { ${dict.model}Id: string };
18
- }
19
-
20
- export function generateHead({ params }: PageProps) {
21
- const { ${dict.model}Id } = params;
22
- return (
17
+ export default page()
18
+ .param("${dict.model}Id", ID)
19
+ .config({ transition: "none" })
20
+ .head(({ ${dict.model}Id }) => (
23
21
  <>
24
22
  <title>{${dict.model}Id}</title>
25
23
  <meta name="description" content={${dict.model}Id} />
26
24
  <meta property="og:title" content={${dict.model}Id} />
27
25
  <meta property="og:description" content={${dict.model}Id} />
28
26
  </>
29
- );
30
- }
31
- export default async function Page({ params }: PageProps) {
32
- const { l } = usePage();
33
- const { ${dict.model}Id } = params;
34
- const [{ ${dict.model}, ${dict.model}View }] = await Promise.all([fetch.view${dict.Model}(${dict.model}Id)]);
35
- return (
36
- <div className="container flex flex-col gap-4">
37
- <div className="flex items-center gap-4 font-bold text-lg">
38
- <${dict.Model}.Zone.View view={${dict.model}View} />
39
- <Link className={buttonRecipe()} href={\`/${dict.model}/\${${dict.model}.id}/edit\`}>
40
- {l("base.updateModel", { model: l("${dict.model}.modelName") })}
41
- </Link>
27
+ ))
28
+ .render(async ({ ${dict.model}Id }) => {
29
+ const { l } = usePage();
30
+ const [{ ${dict.model}, ${dict.model}View }] = await Promise.all([fetch.view${dict.Model}(${dict.model}Id)]);
31
+ return (
32
+ <div className="container flex flex-col gap-4">
33
+ <div className="flex items-center gap-4 font-bold text-lg">
34
+ <${dict.Model}.Zone.View view={${dict.model}View} />
35
+ <Link className={buttonRecipe()} href={\`/${dict.model}/\${${dict.model}.id}/edit\`}>
36
+ {l("base.updateModel", { model: l("${dict.model}.modelName") })}
37
+ </Link>
38
+ </div>
42
39
  </div>
43
- </div>
44
- );
45
- }
46
- export const pageConfig = { transition: "none" } satisfies PageConfig;
40
+ );
41
+ });
47
42
  `,
48
43
  };
49
44
  }
@@ -10,33 +10,34 @@ export default function getContent(scanInfo: AppInfo | LibInfo | null, dict: Dic
10
10
  filename: "_index.tsx",
11
11
  content: `
12
12
  import { type cnst, fetch, usePage, ${dict.Model} } from "@apps/${dict.appName}/client";
13
- import type { PageConfig } from "akanjs/client";
13
+ import { page } from "akanjs/client";
14
14
  import { Load } from "akanjs/ui";
15
15
 
16
- export default function Page() {
17
- const { l } = usePage();
18
- const ${dict.model}Form: Partial<cnst.${dict.Model}> = {};
19
- return (
20
- <div className="container">
21
- <div className="m-4 mt-8 flex justify-between">
22
- <div className="flex items-center gap-2 text-primary text-xl">
23
- + {l("base.createModel", { model: l("${dict.model}.modelName") })}
16
+ export default page()
17
+ .config({ transition: "none" })
18
+ .render(() => {
19
+ const { l } = usePage();
20
+ const ${dict.model}Form: Partial<cnst.${dict.Model}> = {};
21
+ return (
22
+ <div className="container">
23
+ <div className="m-4 mt-8 flex justify-between">
24
+ <div className="flex items-center gap-2 text-primary text-xl">
25
+ + {l("base.createModel", { model: l("${dict.model}.modelName") })}
26
+ </div>
24
27
  </div>
28
+ <Load.Edit
29
+ className="flex flex-col items-center"
30
+ slice={fetch.slice.${dict.model}InPublic}
31
+ edit={${dict.model}Form}
32
+ type="form"
33
+ onCancel="back"
34
+ onSubmit="/${dict.model}"
35
+ >
36
+ <${dict.Model}.Template.General />
37
+ </Load.Edit>
25
38
  </div>
26
- <Load.Edit
27
- className="flex flex-col items-center"
28
- slice={fetch.slice.${dict.model}InPublic}
29
- edit={${dict.model}Form}
30
- type="form"
31
- onCancel="back"
32
- onSubmit="/${dict.model}"
33
- >
34
- <${dict.Model}.Template.General />
35
- </Load.Edit>
36
- </div>
37
- );
38
- }
39
- export const pageConfig = { transition: "none" } satisfies PageConfig;
39
+ );
40
+ });
40
41
  `,
41
42
  };
42
43
  }
@@ -10,34 +10,35 @@ export default function getContent(scanInfo: AppInfo | LibInfo | null, dict: Dic
10
10
  filename: "_index.tsx",
11
11
  content: `
12
12
  import { ${dict.Model}, fetch, usePage } from "@apps/${dict.appName}/client";
13
- import type { PageConfig } from "akanjs/client";
13
+ import { page } from "akanjs/client";
14
14
  import { buttonRecipe, Link } from "akanjs/ui";
15
15
 
16
- export default async function Page() {
17
- const { l } = usePage();
18
- const [{ ${dict.model}InitInPublic }] = await Promise.all([fetch.init${dict.Model}InPublic()]);
19
- return (
20
- <div className="container flex flex-col gap-4">
21
- <div className="mt-5 h-full w-full px-5">
22
- <div>{l("${dict.model}.modelName")}</div>
23
- <div className="flex animate-fadeIn items-center gap-4 px-4 pt-4">
24
- <div className="font-bold text-lg md:text-4xl">${dict.Model}s</div>
25
- <Link className={buttonRecipe()} href="/${dict.model}/new">
26
- + {l("base.createModel", { model: l("${dict.model}.modelName") })}
27
- </Link>
28
- </div>
29
- <div>{l("${dict.model}.modelDesc")}</div>
30
- <div className="mt-3 flex gap-4 px-6">
31
- <${dict.Model}.Zone.Card
32
- className="grid w-full animate-fadeIn grid-cols-1 justify-center gap-4 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 2xl:grid-cols-5"
33
- init={${dict.model}InitInPublic}
34
- />
16
+ export default page()
17
+ .config({ transition: "none" })
18
+ .render(async () => {
19
+ const { l } = usePage();
20
+ const [{ ${dict.model}InitInPublic }] = await Promise.all([fetch.init${dict.Model}InPublic()]);
21
+ return (
22
+ <div className="container flex flex-col gap-4">
23
+ <div className="mt-5 h-full w-full px-5">
24
+ <div>{l("${dict.model}.modelName")}</div>
25
+ <div className="flex animate-fadeIn items-center gap-4 px-4 pt-4">
26
+ <div className="font-bold text-lg md:text-4xl">${dict.Model}s</div>
27
+ <Link className={buttonRecipe()} href="/${dict.model}/new">
28
+ + {l("base.createModel", { model: l("${dict.model}.modelName") })}
29
+ </Link>
30
+ </div>
31
+ <div>{l("${dict.model}.modelDesc")}</div>
32
+ <div className="mt-3 flex gap-4 px-6">
33
+ <${dict.Model}.Zone.Card
34
+ className="grid w-full animate-fadeIn grid-cols-1 justify-center gap-4 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 2xl:grid-cols-5"
35
+ init={${dict.model}InitInPublic}
36
+ />
37
+ </div>
35
38
  </div>
36
39
  </div>
37
- </div>
38
- );
39
- }
40
- export const pageConfig = { transition: "none" } satisfies PageConfig;
40
+ );
41
+ });
41
42
  `,
42
43
  };
43
44
  }
@@ -10,32 +10,33 @@ export default function getContent(scanInfo: AppInfo | LibInfo | null, dict: Dic
10
10
  filename: "_index.tsx",
11
11
  content: `
12
12
  import { ${dict.Model}, fetch, usePage } from "@apps/${dict.appName}/client";
13
- import type { PageConfig } from "akanjs/client";
13
+ import { page } from "akanjs/client";
14
14
  import { buttonRecipe, Model } from "akanjs/ui";
15
15
 
16
- export default async function Page() {
17
- const { l } = usePage();
18
- const [{ ${dict.model}InitInPublic }] = await Promise.all([fetch.init${dict.Model}InPublic()]);
19
- return (
20
- <>
21
- <div className="flex animate-fadeIn items-center gap-4 px-4 pt-4">
22
- <div className="font-bold text-lg md:text-4xl">{l("${dict.model}.modelName")}</div>
23
- <Model.New
24
- className={buttonRecipe({ size: "sm", variant: "ghost" })}
25
- slice={fetch.slice.${dict.model}InPublic}
26
- renderTitle="id"
27
- >
28
- <${dict.Model}.Template.General />
29
- </Model.New>
30
- </div>
31
- <${dict.Model}.Zone.Card
32
- className="mt-2 grid w-full animate-fadeIn grid-cols-1 justify-center gap-4 md:grid-cols-2 xl:grid-cols-3"
33
- init={${dict.model}InitInPublic}
34
- />
35
- </>
36
- );
37
- }
38
- export const pageConfig = { transition: "none" } satisfies PageConfig;
16
+ export default page()
17
+ .config({ transition: "none" })
18
+ .render(async () => {
19
+ const { l } = usePage();
20
+ const [{ ${dict.model}InitInPublic }] = await Promise.all([fetch.init${dict.Model}InPublic()]);
21
+ return (
22
+ <>
23
+ <div className="flex animate-fadeIn items-center gap-4 px-4 pt-4">
24
+ <div className="font-bold text-lg md:text-4xl">{l("${dict.model}.modelName")}</div>
25
+ <Model.New
26
+ className={buttonRecipe({ size: "sm", variant: "ghost" })}
27
+ slice={fetch.slice.${dict.model}InPublic}
28
+ renderTitle="id"
29
+ >
30
+ <${dict.Model}.Template.General />
31
+ </Model.New>
32
+ </div>
33
+ <${dict.Model}.Zone.Card
34
+ className="mt-2 grid w-full animate-fadeIn grid-cols-1 justify-center gap-4 md:grid-cols-2 xl:grid-cols-3"
35
+ init={${dict.model}InitInPublic}
36
+ />
37
+ </>
38
+ );
39
+ });
39
40
  `,
40
41
  };
41
42
  }
@@ -3,30 +3,30 @@ import {
3
3
  Workspace,
4
4
  script,
5
5
  command
6
- } from "./index-znynzt5w.js";
6
+ } from "./index-mak3cd28.js";
7
7
  import"./index-q0y2jq9j.js";
8
- import"./index-qsq3q8fy.js";
8
+ import"./index-2tv3fdx4.js";
9
9
  import"./index-6wwzs1bc.js";
10
10
  import {
11
11
  createWorkflowStepRegistry
12
- } from "./index-fc1bh0a7.js";
13
- import"./index-c69j78kk.js";
12
+ } from "./index-gyd220p2.js";
13
+ import"./index-kn1h7p1x.js";
14
14
  import {
15
15
  ModuleScript
16
- } from "./index-zmjppp25.js";
17
- import"./index-hyywke0f.js";
16
+ } from "./index-8pm30m73.js";
17
+ import"./index-pnqbkf5p.js";
18
18
  import"./index-h7yw2z9n.js";
19
19
  import {
20
20
  PrimitiveScript
21
- } from "./index-qkk27bk6.js";
21
+ } from "./index-4edzf1gr.js";
22
22
  import {
23
23
  ScalarScript
24
- } from "./index-8p8p0cf8.js";
24
+ } from "./index-rwg2aa4f.js";
25
25
  import"./index-by5gpp8x.js";
26
- import"./index-gtmz74tj.js";
26
+ import"./index-ktb5njgy.js";
27
27
  import {
28
28
  WorkflowRunner
29
- } from "./index-srdssqj7.js";
29
+ } from "./index-7737gxcp.js";
30
30
 
31
31
  // pkgs/@akanjs/cli/workflow/workflow.script.ts
32
32
  import { Logger } from "akanjs/common";
@@ -4,14 +4,14 @@ import {
4
4
  } from "./index-q0y2jq9j.js";
5
5
  import {
6
6
  GlobalConfig
7
- } from "./index-c69j78kk.js";
7
+ } from "./index-kn1h7p1x.js";
8
8
  import {
9
9
  Exec,
10
10
  Workspace,
11
11
  runner,
12
12
  script,
13
13
  command
14
- } from "./index-znynzt5w.js";
14
+ } from "./index-mak3cd28.js";
15
15
  import {
16
16
  extractAgentBlock,
17
17
  collectScopeRecipeSources,
@@ -21,7 +21,7 @@ import {
21
21
  AppExecutor,
22
22
  LibExecutor,
23
23
  PkgExecutor
24
- } from "./index-qsq3q8fy.js";
24
+ } from "./index-2tv3fdx4.js";
25
25
  import"./index-6wwzs1bc.js";
26
26
  import {
27
27
  countBlocking,
@@ -32,41 +32,41 @@ import {
32
32
  collectRecipeSources2,
33
33
  scanRecipes2
34
34
  } from "./index-by5gpp8x.js";
35
- import"./index-fc1bh0a7.js";
36
- import"./index-gtmz74tj.js";
35
+ import"./index-gyd220p2.js";
36
+ import"./index-ktb5njgy.js";
37
37
  import"./index-h7yw2z9n.js";
38
38
  import {
39
39
  AgentScript
40
- } from "./index-29sxqfaw.js";
40
+ } from "./index-ne2qy0nk.js";
41
41
  import {
42
42
  ApplicationScript
43
- } from "./index-zz5jyd94.js";
43
+ } from "./index-yecdrt9a.js";
44
44
  import {
45
45
  LibraryScript
46
- } from "./index-gq44bqjt.js";
46
+ } from "./index-259dsnz3.js";
47
47
  import"./index-hwkygn9s.js";
48
48
  import"./index-kcxmv48c.js";
49
49
  import {
50
50
  PackageScript
51
- } from "./index-7d6vny25.js";
51
+ } from "./index-ws5e0j51.js";
52
52
  import {
53
53
  getNpmRegistryUrl,
54
54
  getLatestPackageVersion
55
- } from "./index-zxgr3s8s.js";
55
+ } from "./index-yw4xj7pa.js";
56
56
  import {
57
57
  CloudScript
58
- } from "./index-yks023mb.js";
58
+ } from "./index-4c9ykbfq.js";
59
59
  import {
60
60
  ContextScript
61
- } from "./index-yza7zkpt.js";
62
- import"./index-1yxtbmbj.js";
63
- import"./index-0amdxycf.js";
64
- import"./index-srdssqj7.js";
65
- import"./index-zmjppp25.js";
66
- import"./index-hyywke0f.js";
67
- import"./index-qkk27bk6.js";
68
- import"./index-8p8p0cf8.js";
69
- import"./index-5svjba73.js";
61
+ } from "./index-600zhnve.js";
62
+ import"./index-wt7qrtd4.js";
63
+ import"./index-fz5q3gd7.js";
64
+ import"./index-7737gxcp.js";
65
+ import"./index-8pm30m73.js";
66
+ import"./index-pnqbkf5p.js";
67
+ import"./index-4edzf1gr.js";
68
+ import"./index-rwg2aa4f.js";
69
+ import"./index-j9yhg404.js";
70
70
 
71
71
  // pkgs/@akanjs/cli/workspace/workspace.runner.ts
72
72
  import path from "path";