@askrjs/cli 0.0.2 → 0.0.4
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.
- package/README.md +46 -7
- package/dist/add.d.ts +16 -0
- package/dist/add.js +558 -1
- package/dist/cli.d.ts +5 -0
- package/dist/cli.js +43 -16
- package/dist/create.d.ts +5 -0
- package/dist/create.js +104 -26
- package/dist/directory-swap-DWoHtx7C.js +35 -0
- package/dist/discovery-Difb7Y4G.js +323 -0
- package/dist/generate.d.ts +5 -0
- package/dist/generate.js +461 -0
- package/dist/is-direct-execution-Cdlr-ZUl.js +0 -2
- package/dist/openapi.d.ts +25 -0
- package/dist/openapi.js +49 -16
- package/dist/planner-VAj7qlxr.js +285 -0
- package/dist/range-YUs9eimn.js +125 -0
- package/dist/registry-CyrRHRG5.js +209 -0
- package/dist/skills/askr-dashboard-charts/SKILL.md +61 -44
- package/dist/skills/askr-dashboard-charts/agents/openai.yaml +2 -2
- package/dist/skills/askr-ssr-ssg/SKILL.md +3 -1
- package/dist/{skills-Bh0mEhIx.js → skills-B7CbWur9.js} +89 -26
- package/dist/skills.d.ts +18 -0
- package/dist/skills.js +1 -1
- package/dist/specification-DXnDOC-0.js +49 -0
- package/dist/ssg-config.d.ts +41 -0
- package/dist/ssg-config.js +1 -0
- package/dist/ssg.d.ts +61 -0
- package/dist/ssg.js +360 -24
- package/dist/templates/full-stack/AGENTS.md +0 -1
- package/dist/templates/full-stack/README.md +0 -1
- package/dist/templates/full-stack/index.html +0 -1
- package/dist/templates/full-stack/package.json +5 -3
- package/dist/templates/full-stack/server.ts +5 -9
- package/dist/templates/full-stack/src/action-authorizations.ts +2 -2
- package/dist/templates/full-stack/src/actions/create-message.ts +5 -5
- package/dist/templates/full-stack/src/i18n.ts +4 -4
- package/dist/templates/full-stack/src/main.tsx +4 -5
- package/dist/templates/full-stack/src/pages/home.tsx +5 -5
- package/dist/templates/full-stack/src/pages/layout.tsx +15 -5
- package/dist/templates/full-stack/src/pages/not-found.tsx +5 -2
- package/dist/templates/full-stack/src/routes.tsx +11 -12
- package/dist/templates/full-stack/src/schemas.ts +1 -2
- package/dist/templates/full-stack/src/server/action-registry.ts +5 -10
- package/dist/templates/full-stack/src/server/actions/create-message.ts +4 -4
- package/dist/templates/full-stack/src/server/app.ts +67 -57
- package/dist/templates/full-stack/src/server/dependencies.ts +10 -10
- package/dist/templates/full-stack/src/server/entry-server.ts +3 -3
- package/dist/templates/full-stack/src/telemetry.ts +1 -2
- package/dist/templates/full-stack/tests/actions/create-message.test.ts +7 -8
- package/dist/templates/full-stack/tsconfig.json +1 -2
- package/dist/templates/full-stack/vite.config.ts +5 -6
- package/dist/templates/spa/AGENTS.md +1 -1
- package/dist/templates/spa/package.json +3 -4
- package/dist/templates/spa/src/adapters/operations-client.ts +7 -2
- package/dist/templates/spa/src/pages/app/_routes.tsx +2 -0
- package/dist/templates/spa/src/pages/app/admin-home.tsx +21 -3
- package/dist/templates/spa/src/pages/public/_routes.tsx +2 -0
- package/dist/templates/spa/src/styles.css +1 -1
- package/dist/templates/spa/tsconfig.json +2 -1
- package/dist/templates/spa/vitest.config.ts +0 -4
- package/dist/templates/ssg/README.md +1 -1
- package/dist/templates/ssg/package.json +1 -1
- package/dist/templates/ssg/ssg.config.ts +7 -0
- package/dist/templates/ssg/tests/ssg-config.test.ts +5 -3
- package/dist/templates/ssg/tsconfig.json +2 -1
- package/dist/templates/ssg/vitest.config.ts +0 -4
- package/dist/templates/ssr/package.json +2 -2
- package/dist/templates/ssr/server.ts +4 -10
- package/dist/templates/ssr/src/entry-server.tsx +6 -4
- package/dist/templates/startkit/package.json +2 -2
- package/dist/templates/startkit/src/lib/mock-data.ts +17 -39
- package/dist/templates/startkit/tsconfig.json +2 -1
- package/dist/update.d.ts +41 -0
- package/dist/update.js +282 -2
- package/dist/writer-D8qe_7ud.js +226 -0
- package/package.json +23 -22
- package/dist/add-DqhqRzBQ.js +0 -555
- package/dist/add-DqhqRzBQ.js.map +0 -1
- package/dist/cli.js.map +0 -1
- package/dist/create.js.map +0 -1
- package/dist/is-direct-execution-Cdlr-ZUl.js.map +0 -1
- package/dist/openapi.js.map +0 -1
- package/dist/skills-Bh0mEhIx.js.map +0 -1
- package/dist/ssg.js.map +0 -1
- package/dist/templates/full-stack/src/vite-server.d.ts +0 -6
- package/dist/templates/spa/src/styles.d.ts +0 -1
- package/dist/templates/ssg/src/vite-env.d.ts +0 -5
- package/dist/templates/ssr/src/vite-server.d.ts +0 -7
- package/dist/templates/startkit/src/vite-env.d.ts +0 -5
- package/dist/update-DyW1na5V.js +0 -1140
- package/dist/update-DyW1na5V.js.map +0 -1
- package/skills/askr-accessibility/SKILL.md +0 -68
- package/skills/askr-accessibility/agents/openai.yaml +0 -4
- package/skills/askr-agent-execution/SKILL.md +0 -85
- package/skills/askr-agent-execution/agents/openai.yaml +0 -4
- package/skills/askr-agent-workflows/SKILL.md +0 -57
- package/skills/askr-agent-workflows/agents/openai.yaml +0 -4
- package/skills/askr-api-integration/SKILL.md +0 -79
- package/skills/askr-api-integration/agents/openai.yaml +0 -4
- package/skills/askr-app-builder/SKILL.md +0 -99
- package/skills/askr-app-builder/agents/openai.yaml +0 -4
- package/skills/askr-auth-access/SKILL.md +0 -74
- package/skills/askr-auth-access/agents/openai.yaml +0 -4
- package/skills/askr-cli-vite/SKILL.md +0 -76
- package/skills/askr-cli-vite/agents/openai.yaml +0 -4
- package/skills/askr-dashboard-charts/SKILL.md +0 -82
- package/skills/askr-dashboard-charts/agents/openai.yaml +0 -4
- package/skills/askr-design-system/SKILL.md +0 -86
- package/skills/askr-design-system/agents/openai.yaml +0 -4
- package/skills/askr-env-config/SKILL.md +0 -74
- package/skills/askr-env-config/agents/openai.yaml +0 -4
- package/skills/askr-error-loading-empty/SKILL.md +0 -89
- package/skills/askr-error-loading-empty/agents/openai.yaml +0 -4
- package/skills/askr-file-upload-artifacts/SKILL.md +0 -77
- package/skills/askr-file-upload-artifacts/agents/openai.yaml +0 -4
- package/skills/askr-forms-tables-crud/SKILL.md +0 -98
- package/skills/askr-forms-tables-crud/agents/openai.yaml +0 -4
- package/skills/askr-mental-model/SKILL.md +0 -109
- package/skills/askr-mental-model/agents/openai.yaml +0 -4
- package/skills/askr-migration-react/SKILL.md +0 -81
- package/skills/askr-migration-react/agents/openai.yaml +0 -4
- package/skills/askr-observability-debugging/SKILL.md +0 -83
- package/skills/askr-observability-debugging/agents/openai.yaml +0 -4
- package/skills/askr-project-structure/SKILL.md +0 -79
- package/skills/askr-project-structure/agents/openai.yaml +0 -4
- package/skills/askr-query-mutation/SKILL.md +0 -115
- package/skills/askr-query-mutation/agents/openai.yaml +0 -4
- package/skills/askr-realtime-streaming/SKILL.md +0 -76
- package/skills/askr-realtime-streaming/agents/openai.yaml +0 -4
- package/skills/askr-resources-data/SKILL.md +0 -100
- package/skills/askr-resources-data/agents/openai.yaml +0 -4
- package/skills/askr-routing-layouts/SKILL.md +0 -107
- package/skills/askr-routing-layouts/agents/openai.yaml +0 -4
- package/skills/askr-runtime-reactivity/SKILL.md +0 -92
- package/skills/askr-runtime-reactivity/agents/openai.yaml +0 -4
- package/skills/askr-ssr-ssg/SKILL.md +0 -76
- package/skills/askr-ssr-ssg/agents/openai.yaml +0 -4
- package/skills/askr-testing-determinism/SKILL.md +0 -75
- package/skills/askr-testing-determinism/agents/openai.yaml +0 -4
- package/skills/askr-theming/SKILL.md +0 -86
- package/skills/askr-theming/agents/openai.yaml +0 -4
- package/skills/askr-ui-composition/SKILL.md +0 -92
- package/skills/askr-ui-composition/agents/openai.yaml +0 -4
- package/templates/full-stack/AGENTS.md +0 -12
- package/templates/full-stack/README.md +0 -18
- package/templates/full-stack/gitignore.template +0 -4
- package/templates/full-stack/index.html +0 -14
- package/templates/full-stack/package.json +0 -37
- package/templates/full-stack/server.ts +0 -13
- package/templates/full-stack/src/action-authorizations.ts +0 -10
- package/templates/full-stack/src/actions/create-message.ts +0 -10
- package/templates/full-stack/src/i18n.ts +0 -8
- package/templates/full-stack/src/main.tsx +0 -12
- package/templates/full-stack/src/pages/home.tsx +0 -25
- package/templates/full-stack/src/pages/layout.tsx +0 -33
- package/templates/full-stack/src/pages/not-found.tsx +0 -4
- package/templates/full-stack/src/routes.tsx +0 -20
- package/templates/full-stack/src/schemas.ts +0 -11
- package/templates/full-stack/src/server/action-registry.ts +0 -12
- package/templates/full-stack/src/server/actions/create-message.ts +0 -14
- package/templates/full-stack/src/server/app.ts +0 -66
- package/templates/full-stack/src/server/dependencies.ts +0 -55
- package/templates/full-stack/src/server/entry-server.ts +0 -8
- package/templates/full-stack/src/telemetry.ts +0 -4
- package/templates/full-stack/src/vite-server.d.ts +0 -6
- package/templates/full-stack/tests/actions/create-message.test.ts +0 -13
- package/templates/full-stack/tsconfig.json +0 -16
- package/templates/full-stack/vite.config.ts +0 -11
- package/templates/spa/AGENTS.md +0 -60
- package/templates/spa/README.md +0 -96
- package/templates/spa/gitignore.template +0 -16
- package/templates/spa/index.html +0 -13
- package/templates/spa/package.json +0 -35
- package/templates/spa/src/adapters/operations-client.ts +0 -90
- package/templates/spa/src/components/shared/metric-card.tsx +0 -27
- package/templates/spa/src/components/shared/status-badge.tsx +0 -24
- package/templates/spa/src/features/operations/operations.query.ts +0 -9
- package/templates/spa/src/main.tsx +0 -10
- package/templates/spa/src/pages/_layout.tsx +0 -9
- package/templates/spa/src/pages/_routes.tsx +0 -27
- package/templates/spa/src/pages/app/_layout.tsx +0 -94
- package/templates/spa/src/pages/app/_routes.tsx +0 -10
- package/templates/spa/src/pages/app/admin-home.tsx +0 -152
- package/templates/spa/src/pages/app/agent-runs.tsx +0 -93
- package/templates/spa/src/pages/app/settings.tsx +0 -91
- package/templates/spa/src/pages/auth/_layout.tsx +0 -38
- package/templates/spa/src/pages/auth/_routes.tsx +0 -6
- package/templates/spa/src/pages/auth/login.tsx +0 -63
- package/templates/spa/src/pages/not-found.tsx +0 -22
- package/templates/spa/src/pages/public/_layout.tsx +0 -47
- package/templates/spa/src/pages/public/_routes.tsx +0 -6
- package/templates/spa/src/pages/public/home.tsx +0 -143
- package/templates/spa/src/shared/format.ts +0 -12
- package/templates/spa/src/shared/navigation.ts +0 -15
- package/templates/spa/src/styles/components.css +0 -49
- package/templates/spa/src/styles/layout.css +0 -192
- package/templates/spa/src/styles/reset.css +0 -44
- package/templates/spa/src/styles/theme.css +0 -57
- package/templates/spa/src/styles/tokens.css +0 -20
- package/templates/spa/src/styles.css +0 -7
- package/templates/spa/src/styles.d.ts +0 -1
- package/templates/spa/tests/app.test.tsx +0 -37
- package/templates/spa/tests/components/shared.test.tsx +0 -12
- package/templates/spa/tests/resources.test.ts +0 -22
- package/templates/spa/tsconfig.json +0 -20
- package/templates/spa/tsconfig.node.json +0 -10
- package/templates/spa/vite.config.ts +0 -24
- package/templates/spa/vitest.config.ts +0 -17
- package/templates/ssg/AGENTS.md +0 -55
- package/templates/ssg/README.md +0 -39
- package/templates/ssg/gitignore.template +0 -17
- package/templates/ssg/index.html +0 -13
- package/templates/ssg/package.json +0 -35
- package/templates/ssg/src/app.tsx +0 -14
- package/templates/ssg/src/components/badge.tsx +0 -3
- package/templates/ssg/src/components/counter.tsx +0 -30
- package/templates/ssg/src/components/site-shell.tsx +0 -111
- package/templates/ssg/src/jsx.d.ts +0 -23
- package/templates/ssg/src/main.tsx +0 -8
- package/templates/ssg/src/pages/about.tsx +0 -82
- package/templates/ssg/src/pages/content.tsx +0 -63
- package/templates/ssg/src/pages/example.tsx +0 -97
- package/templates/ssg/src/pages/home.tsx +0 -51
- package/templates/ssg/src/resources/user.ts +0 -15
- package/templates/ssg/src/routes.tsx +0 -15
- package/templates/ssg/src/styles.css +0 -89
- package/templates/ssg/src/vite-env.d.ts +0 -5
- package/templates/ssg/ssg.config.ts +0 -34
- package/templates/ssg/tests/app.test.tsx +0 -19
- package/templates/ssg/tests/components/counter.test.tsx +0 -18
- package/templates/ssg/tests/resources.test.ts +0 -11
- package/templates/ssg/tests/ssg-config.test.ts +0 -11
- package/templates/ssg/tsconfig.json +0 -20
- package/templates/ssg/tsconfig.node.json +0 -10
- package/templates/ssg/vite.config.ts +0 -24
- package/templates/ssg/vitest.config.ts +0 -17
- package/templates/ssr/AGENTS.md +0 -28
- package/templates/ssr/README.md +0 -38
- package/templates/ssr/gitignore.template +0 -16
- package/templates/ssr/index.html +0 -13
- package/templates/ssr/package.json +0 -34
- package/templates/ssr/server.ts +0 -16
- package/templates/ssr/src/app.tsx +0 -21
- package/templates/ssr/src/components/counter.tsx +0 -26
- package/templates/ssr/src/entry-server.tsx +0 -10
- package/templates/ssr/src/main.tsx +0 -11
- package/templates/ssr/src/pages/about.tsx +0 -75
- package/templates/ssr/src/pages/example.tsx +0 -113
- package/templates/ssr/src/pages/home.tsx +0 -56
- package/templates/ssr/src/resources/user.ts +0 -15
- package/templates/ssr/src/routes.tsx +0 -13
- package/templates/ssr/src/styles.css +0 -148
- package/templates/ssr/src/vite-server.d.ts +0 -7
- package/templates/ssr/tests/app.test.tsx +0 -24
- package/templates/ssr/tests/components/counter.test.tsx +0 -13
- package/templates/ssr/tests/resources.test.ts +0 -11
- package/templates/ssr/tsconfig.json +0 -22
- package/templates/ssr/tsconfig.node.json +0 -10
- package/templates/ssr/tsconfig.server.json +0 -15
- package/templates/ssr/vite.config.ts +0 -25
- package/templates/ssr/vitest.config.ts +0 -13
- package/templates/startkit/AGENTS.md +0 -77
- package/templates/startkit/README.md +0 -192
- package/templates/startkit/gitignore.template +0 -16
- package/templates/startkit/index.html +0 -13
- package/templates/startkit/package.json +0 -35
- package/templates/startkit/src/components/app-header.tsx +0 -93
- package/templates/startkit/src/components/app-sidebar.tsx +0 -95
- package/templates/startkit/src/components/data-table.tsx +0 -80
- package/templates/startkit/src/components/empty-state.tsx +0 -13
- package/templates/startkit/src/components/page-header.tsx +0 -23
- package/templates/startkit/src/components/stat-card.tsx +0 -24
- package/templates/startkit/src/features/accounts/account-filters.tsx +0 -61
- package/templates/startkit/src/features/accounts/account-table.tsx +0 -79
- package/templates/startkit/src/lib/format.ts +0 -31
- package/templates/startkit/src/lib/mock-data.ts +0 -441
- package/templates/startkit/src/lib/routes.ts +0 -116
- package/templates/startkit/src/main.tsx +0 -12
- package/templates/startkit/src/pages/_layout.tsx +0 -56
- package/templates/startkit/src/pages/auth/_layout.tsx +0 -7
- package/templates/startkit/src/pages/auth/login.tsx +0 -129
- package/templates/startkit/src/pages/home.tsx +0 -83
- package/templates/startkit/src/pages/not-found.tsx +0 -24
- package/templates/startkit/src/pages/workspace/_layout.tsx +0 -17
- package/templates/startkit/src/pages/workspace/accounts/index.tsx +0 -217
- package/templates/startkit/src/pages/workspace/dashboard.tsx +0 -118
- package/templates/startkit/src/pages/workspace/settings.tsx +0 -218
- package/templates/startkit/src/router.tsx +0 -7
- package/templates/startkit/src/routes/auth-config.ts +0 -38
- package/templates/startkit/src/routes/auth.ts +0 -8
- package/templates/startkit/src/routes/index.ts +0 -28
- package/templates/startkit/src/routes/public.ts +0 -8
- package/templates/startkit/src/routes/workspace/accounts.ts +0 -8
- package/templates/startkit/src/routes/workspace/index.ts +0 -14
- package/templates/startkit/src/styles/components.css +0 -396
- package/templates/startkit/src/styles/layout.css +0 -192
- package/templates/startkit/src/styles/reset.css +0 -38
- package/templates/startkit/src/styles/theme.css +0 -76
- package/templates/startkit/src/styles/tokens.css +0 -67
- package/templates/startkit/src/styles.css +0 -7
- package/templates/startkit/src/toast.ts +0 -55
- package/templates/startkit/src/utils/join-classes.ts +0 -4
- package/templates/startkit/src/vite-env.d.ts +0 -5
- package/templates/startkit/tests/app.test.tsx +0 -32
- package/templates/startkit/tests/preferences.test.ts +0 -43
- package/templates/startkit/tests/resources.test.ts +0 -82
- package/templates/startkit/tsconfig.json +0 -20
- package/templates/startkit/tsconfig.node.json +0 -10
- package/templates/startkit/vite.config.ts +0 -32
- package/templates/startkit/vitest.config.ts +0 -13
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
@layer theme {
|
|
2
|
-
body {
|
|
3
|
-
background:
|
|
4
|
-
radial-gradient(
|
|
5
|
-
1100px 620px at 100% -12%,
|
|
6
|
-
color-mix(in srgb, var(--ak-color-primary) 13%, transparent),
|
|
7
|
-
transparent 60%
|
|
8
|
-
),
|
|
9
|
-
radial-gradient(
|
|
10
|
-
820px 420px at -8% 14%,
|
|
11
|
-
color-mix(in srgb, var(--ak-color-primary) 8%, transparent),
|
|
12
|
-
transparent 64%
|
|
13
|
-
),
|
|
14
|
-
var(--ak-color-bg);
|
|
15
|
-
color: var(--ak-color-fg);
|
|
16
|
-
font-family: var(--ak-font-family);
|
|
17
|
-
font-size: var(--ak-font-size-md);
|
|
18
|
-
line-height: 1.55;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
h1 {
|
|
22
|
-
font-size: var(--ak-font-size-display);
|
|
23
|
-
line-height: 1.06;
|
|
24
|
-
letter-spacing: -0.03em;
|
|
25
|
-
text-wrap: balance;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
h2 {
|
|
29
|
-
font-size: var(--ak-font-size-heading);
|
|
30
|
-
line-height: 1.3;
|
|
31
|
-
letter-spacing: -0.015em;
|
|
32
|
-
text-wrap: balance;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
.lead,
|
|
36
|
-
.muted,
|
|
37
|
-
p {
|
|
38
|
-
color: var(--ak-color-muted);
|
|
39
|
-
line-height: 1.65;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
::selection {
|
|
43
|
-
background: color-mix(in srgb, var(--ak-color-primary) 30%, transparent);
|
|
44
|
-
color: var(--ak-color-fg);
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
@media (prefers-reduced-motion: reduce) {
|
|
48
|
-
*,
|
|
49
|
-
*::before,
|
|
50
|
-
*::after {
|
|
51
|
-
animation-duration: 0.01ms !important;
|
|
52
|
-
animation-iteration-count: 1 !important;
|
|
53
|
-
transition-duration: 0.01ms !important;
|
|
54
|
-
scroll-behavior: auto !important;
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
@layer tokens {
|
|
2
|
-
:root {
|
|
3
|
-
--spa-shell-gutter: clamp(var(--ak-space-lg), 2vw, var(--ak-space-xl));
|
|
4
|
-
--spa-shell-max-width: min(
|
|
5
|
-
var(--ak-layout-content-max-width),
|
|
6
|
-
calc(100% - 2 * var(--spa-shell-gutter))
|
|
7
|
-
);
|
|
8
|
-
--spa-auth-card-width: min(100%, 28rem);
|
|
9
|
-
--spa-header-backdrop: color-mix(
|
|
10
|
-
in srgb,
|
|
11
|
-
var(--ak-color-bg) 92%,
|
|
12
|
-
transparent
|
|
13
|
-
);
|
|
14
|
-
--spa-surface-glow: linear-gradient(
|
|
15
|
-
180deg,
|
|
16
|
-
color-mix(in srgb, var(--ak-color-surface-muted) 58%, transparent),
|
|
17
|
-
transparent 22rem
|
|
18
|
-
);
|
|
19
|
-
}
|
|
20
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
declare module '*.css';
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from 'vite-plus/test';
|
|
2
|
-
|
|
3
|
-
describe('SPA template structure', () => {
|
|
4
|
-
it('documents the route-first shell and theme layers the app should keep', () => {
|
|
5
|
-
const structure = [
|
|
6
|
-
'src/main.tsx',
|
|
7
|
-
'src/pages/_routes.tsx',
|
|
8
|
-
'src/pages/_layout.tsx',
|
|
9
|
-
'src/pages/public/_routes.tsx',
|
|
10
|
-
'src/pages/public/_layout.tsx',
|
|
11
|
-
'src/pages/public/home.tsx',
|
|
12
|
-
'src/pages/auth/_routes.tsx',
|
|
13
|
-
'src/pages/auth/_layout.tsx',
|
|
14
|
-
'src/pages/auth/login.tsx',
|
|
15
|
-
'src/pages/app/_routes.tsx',
|
|
16
|
-
'src/pages/app/_layout.tsx',
|
|
17
|
-
'src/pages/app/admin-home.tsx',
|
|
18
|
-
'src/styles.css',
|
|
19
|
-
'src/styles/reset.css',
|
|
20
|
-
'src/styles/tokens.css',
|
|
21
|
-
'src/styles/theme.css',
|
|
22
|
-
'src/styles/layout.css',
|
|
23
|
-
'src/styles/components.css',
|
|
24
|
-
'src/features/operations/operations.query.ts',
|
|
25
|
-
'src/adapters/operations-client.ts',
|
|
26
|
-
'src/components/shared/metric-card.tsx',
|
|
27
|
-
];
|
|
28
|
-
|
|
29
|
-
expect(structure).toContain('src/pages/_routes.tsx');
|
|
30
|
-
expect(structure).toContain('src/pages/app/_layout.tsx');
|
|
31
|
-
expect(structure).toContain('src/pages/auth/_layout.tsx');
|
|
32
|
-
expect(structure).toContain('src/styles/tokens.css');
|
|
33
|
-
expect(structure).toContain('src/styles/layout.css');
|
|
34
|
-
expect(structure).toContain('src/features/operations/operations.query.ts');
|
|
35
|
-
expect(structure).toContain('src/adapters/operations-client.ts');
|
|
36
|
-
});
|
|
37
|
-
});
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from 'vite-plus/test';
|
|
2
|
-
import MetricCard from '../../src/components/shared/metric-card';
|
|
3
|
-
import StatusBadge from '../../src/components/shared/status-badge';
|
|
4
|
-
|
|
5
|
-
describe('shared app components', () => {
|
|
6
|
-
it('exports small app-local wrappers around theme primitives', () => {
|
|
7
|
-
expect(MetricCard).toBeDefined();
|
|
8
|
-
expect(StatusBadge).toBeDefined();
|
|
9
|
-
expect(typeof MetricCard).toBe('function');
|
|
10
|
-
expect(typeof StatusBadge).toBe('function');
|
|
11
|
-
});
|
|
12
|
-
});
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from 'vite-plus/test';
|
|
2
|
-
import { getOperationsSnapshot } from '../src/adapters/operations-client';
|
|
3
|
-
import { loadOperations } from '../src/features/operations/operations.query';
|
|
4
|
-
|
|
5
|
-
describe('operations data flow', () => {
|
|
6
|
-
it('loads the dashboard snapshot through the feature query boundary', async () => {
|
|
7
|
-
const snapshot = await loadOperations({});
|
|
8
|
-
|
|
9
|
-
expect(snapshot.metrics.length).toBeGreaterThan(0);
|
|
10
|
-
expect(snapshot.runs.length).toBeGreaterThan(0);
|
|
11
|
-
expect(snapshot.lastEventId).toMatch(/^evt_/);
|
|
12
|
-
});
|
|
13
|
-
|
|
14
|
-
it('keeps cancellation owned by the adapter', async () => {
|
|
15
|
-
const controller = new AbortController();
|
|
16
|
-
const request = getOperationsSnapshot({ signal: controller.signal });
|
|
17
|
-
|
|
18
|
-
controller.abort();
|
|
19
|
-
|
|
20
|
-
await expect(request).rejects.toThrow(/aborted/i);
|
|
21
|
-
});
|
|
22
|
-
});
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"compilerOptions": {
|
|
3
|
-
"target": "ES2020",
|
|
4
|
-
"useDefineForClassFields": true,
|
|
5
|
-
"lib": ["ES2020", "DOM", "DOM.Iterable"],
|
|
6
|
-
"module": "ESNext",
|
|
7
|
-
"moduleResolution": "bundler",
|
|
8
|
-
"skipLibCheck": true,
|
|
9
|
-
"esModuleInterop": true,
|
|
10
|
-
"allowSyntheticDefaultImports": true,
|
|
11
|
-
"strict": true,
|
|
12
|
-
"resolveJsonModule": true,
|
|
13
|
-
"isolatedModules": true,
|
|
14
|
-
"noEmit": true,
|
|
15
|
-
"jsx": "preserve",
|
|
16
|
-
"jsxImportSource": "@askrjs/askr"
|
|
17
|
-
},
|
|
18
|
-
"include": ["src", "tests"],
|
|
19
|
-
"references": [{ "path": "./tsconfig.node.json" }]
|
|
20
|
-
}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { defineConfig } from 'vite-plus';
|
|
2
|
-
import { askr } from '@askrjs/vite';
|
|
3
|
-
|
|
4
|
-
export default defineConfig({
|
|
5
|
-
plugins: [askr()],
|
|
6
|
-
lint: {
|
|
7
|
-
ignorePatterns: ['dist/**', 'node_modules/**', 'coverage/**'],
|
|
8
|
-
},
|
|
9
|
-
fmt: {
|
|
10
|
-
semi: true,
|
|
11
|
-
singleQuote: true,
|
|
12
|
-
trailingComma: 'es5',
|
|
13
|
-
printWidth: 80,
|
|
14
|
-
tabWidth: 2,
|
|
15
|
-
},
|
|
16
|
-
server: {
|
|
17
|
-
port: 5173,
|
|
18
|
-
open: true,
|
|
19
|
-
},
|
|
20
|
-
build: {
|
|
21
|
-
outDir: 'dist',
|
|
22
|
-
sourcemap: true,
|
|
23
|
-
},
|
|
24
|
-
});
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { defineConfig } from 'vite-plus';
|
|
2
|
-
import { askr } from '@askrjs/vite';
|
|
3
|
-
|
|
4
|
-
export default defineConfig({
|
|
5
|
-
plugins: [askr()],
|
|
6
|
-
esbuild: {
|
|
7
|
-
jsx: 'automatic',
|
|
8
|
-
jsxImportSource: '@askrjs/askr',
|
|
9
|
-
},
|
|
10
|
-
test: {
|
|
11
|
-
environment: 'jsdom',
|
|
12
|
-
globals: true,
|
|
13
|
-
coverage: {
|
|
14
|
-
reporter: ['text', 'json', 'html'],
|
|
15
|
-
},
|
|
16
|
-
},
|
|
17
|
-
});
|
package/templates/ssg/AGENTS.md
DELETED
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
# {{appName}}
|
|
2
|
-
|
|
3
|
-
Static site built with Askr, askr-ui, askr-themes, and the Askr CLI.
|
|
4
|
-
|
|
5
|
-
## Commands
|
|
6
|
-
|
|
7
|
-
```bash
|
|
8
|
-
npm run dev # Vite dev server (runs as SPA for development)
|
|
9
|
-
npm run build # Build client assets and atomically publish dist/
|
|
10
|
-
npm run generate # Run full SSG through `askr ssg`
|
|
11
|
-
npm run preview # Serve production build locally
|
|
12
|
-
npm test # Vitest (jsdom)
|
|
13
|
-
npm run typecheck # tsc --noEmit
|
|
14
|
-
npm run lint # vite-plus lint
|
|
15
|
-
npm run fmt # vite-plus format
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
## Architecture
|
|
19
|
-
|
|
20
|
-
- **Framework:** Askr - actor-backed, fine-grained reactive UI. No virtual DOM.
|
|
21
|
-
- **Boot flow:** `src/main.tsx` starts the browser app with the shared `pageRegistry`.
|
|
22
|
-
- **SSG flow:** `ssg.config.ts` passes that same registry to the complete executable SSG config. `askr ssg` owns full and incremental generation.
|
|
23
|
-
- **Pages:** `src/pages/home.tsx`, `src/pages/about.tsx`, `src/pages/content.tsx`, and `src/pages/example.tsx` form the sample site.
|
|
24
|
-
- **Shell:** `src/app.tsx` owns the nav and page frame.
|
|
25
|
-
- **Theme primitives:** the starter composes `Header`, `Nav`, `NavLink`, `Container`, `Section`, `Stack`, `Box`, and `Block` from `@askrjs/themes` instead of hand-rolling shell/layout wrappers.
|
|
26
|
-
- **Components:** askr-ui headless components. Props use `onPress` (not `onClick`) and `asChild` for polymorphism.
|
|
27
|
-
- **Styling:** askr-themes CSS via public classes and `data-slot` selectors. Theme import lives in `src/styles.css`.
|
|
28
|
-
- **Routing:** keep `pageRegistry` in `src/routes.tsx` as the single route source of truth for both dev and SSG.
|
|
29
|
-
- **State:** `const [value, setValue] = state(initial)` and `derive()`. Keep starter routes synchronously prerenderable; if you add async data back, provide an SSR-safe strategy before expecting SSG to render it.
|
|
30
|
-
- **Vite plugin:** `askr()` from `@askrjs/vite` handles JSX transform.
|
|
31
|
-
|
|
32
|
-
## File Structure
|
|
33
|
-
|
|
34
|
-
```
|
|
35
|
-
ssg.config.ts # Routes, document renderer, and static asset sources
|
|
36
|
-
src/
|
|
37
|
-
main.tsx # Client entry: registers routes and boots createSPA
|
|
38
|
-
app.tsx # Root layout with nav
|
|
39
|
-
routes.tsx # Shared route registration source of truth
|
|
40
|
-
styles.css # Theme import + layout CSS
|
|
41
|
-
components/ # Reusable components
|
|
42
|
-
pages/ # Route page components
|
|
43
|
-
tests/ # Vitest tests
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
## Conventions
|
|
47
|
-
|
|
48
|
-
- TypeScript strict mode, ESM-only
|
|
49
|
-
- JSX import source: `@askrjs/askr`
|
|
50
|
-
- Add new pages in `src/pages/`, then update `pageRegistry` in `src/routes.tsx`
|
|
51
|
-
- Pass the shared registry through `ssg.config.ts` instead of maintaining a second hand-written route list
|
|
52
|
-
- Keep SSG execution behind `askr ssg`; do not add a parallel project-local generator
|
|
53
|
-
- Use askr-ui components for interactive elements and askr-themes layout/shell primitives for structure
|
|
54
|
-
- Style with `--ak-*` tokens
|
|
55
|
-
- Keep SSG routes synchronous at render time unless you intentionally wire SSR data into generation
|
package/templates/ssg/README.md
DELETED
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
# {{appName}}
|
|
2
|
-
|
|
3
|
-
Static site built with [Askr](https://github.com/askrjs/askr).
|
|
4
|
-
|
|
5
|
-
## Development workflow
|
|
6
|
-
|
|
7
|
-
The starter keeps the authoring loop small and explicit:
|
|
8
|
-
|
|
9
|
-
1. Run `npm run dev` for the SPA-style editing experience.
|
|
10
|
-
2. Edit the page components in `src/pages/`.
|
|
11
|
-
3. Register routes in `src/routes.tsx`.
|
|
12
|
-
4. Run `npm run build` to build client assets and atomically generate `dist/`.
|
|
13
|
-
5. Run `npm run preview` to check the production build locally.
|
|
14
|
-
|
|
15
|
-
## Sample pages
|
|
16
|
-
|
|
17
|
-
- `/` introduces the starter and the basic developer loop.
|
|
18
|
-
- `/workflow` explains the edit, generate, and preview loop.
|
|
19
|
-
- `/content` shows the small explicit route map.
|
|
20
|
-
- `/preview` keeps one interactive page so you can verify hydration.
|
|
21
|
-
|
|
22
|
-
## Commands
|
|
23
|
-
|
|
24
|
-
```bash
|
|
25
|
-
npm run dev # Start dev server (runs as SPA)
|
|
26
|
-
npm run build # Build assets and generate the complete static site
|
|
27
|
-
npm run generate # Regenerate static HTML with the Askr CLI
|
|
28
|
-
npm run preview # Preview production build
|
|
29
|
-
npm test # Run tests
|
|
30
|
-
npm run lint # Lint code
|
|
31
|
-
npm run fmt # Format code
|
|
32
|
-
npm run typecheck # Type check
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
## Static generation
|
|
36
|
-
|
|
37
|
-
Run `npm run build` to compile browser assets and pre-render every route into `dist/`. The `askr ssg` command owns both full and incremental generation, and publishes routes, metadata, the incremental manifest, and browser assets together.
|
|
38
|
-
|
|
39
|
-
`ssg.config.ts` passes the same immutable route registry used in dev mode, so the shell and leaf pages stay in sync.
|
package/templates/ssg/index.html
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
<!doctype html>
|
|
2
|
-
<html lang="en">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="UTF-8" />
|
|
5
|
-
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
|
|
6
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
7
|
-
<title>{{appName}}</title>
|
|
8
|
-
</head>
|
|
9
|
-
<body>
|
|
10
|
-
<div id="app"></div>
|
|
11
|
-
<script type="module" src="/src/main.tsx"></script>
|
|
12
|
-
</body>
|
|
13
|
-
</html>
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "{{appName}}",
|
|
3
|
-
"version": "0.1.0",
|
|
4
|
-
"type": "module",
|
|
5
|
-
"scripts": {
|
|
6
|
-
"dev": "vp dev",
|
|
7
|
-
"build": "npm run build:client && npm run generate",
|
|
8
|
-
"build:client": "vp build --outDir .askr/client",
|
|
9
|
-
"generate": "askr ssg --config ./ssg.config.ts --output ./dist",
|
|
10
|
-
"generate:incremental": "npm run generate -- --incremental",
|
|
11
|
-
"preview": "vp preview",
|
|
12
|
-
"test": "vp test run -c ./vitest.config.ts",
|
|
13
|
-
"typecheck": "tsc --noEmit",
|
|
14
|
-
"lint": "vp lint .",
|
|
15
|
-
"lint:fix": "npm run lint -- --fix",
|
|
16
|
-
"fmt": "vp fmt .",
|
|
17
|
-
"check": "npm run lint && npm run typecheck && npm test && npm run build"
|
|
18
|
-
},
|
|
19
|
-
"dependencies": {
|
|
20
|
-
"@askrjs/askr": ">=0.0.53 <0.1.0",
|
|
21
|
-
"@askrjs/themes": ">=0.0.12 <0.1.0",
|
|
22
|
-
"@askrjs/ui": ">=0.0.13 <0.1.0"
|
|
23
|
-
},
|
|
24
|
-
"devDependencies": {
|
|
25
|
-
"@askrjs/cli": ">=0.0.2 <0.1.0",
|
|
26
|
-
"@askrjs/vite": ">=0.0.6 <0.1.0",
|
|
27
|
-
"@types/node": "^26.0.0",
|
|
28
|
-
"jsdom": "^29.1.1",
|
|
29
|
-
"typescript": "^6.0.3",
|
|
30
|
-
"vite-plus": "^0.2.4"
|
|
31
|
-
},
|
|
32
|
-
"engines": {
|
|
33
|
-
"node": "^20.19.0 || >=22.12.0"
|
|
34
|
-
}
|
|
35
|
-
}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { PageFrame, SiteHeader } from './components/site-shell';
|
|
2
|
-
|
|
3
|
-
export { navItems } from './components/site-shell';
|
|
4
|
-
|
|
5
|
-
export default function App({ children }: { children?: unknown }) {
|
|
6
|
-
return (
|
|
7
|
-
<div class="site-shell">
|
|
8
|
-
<SiteHeader />
|
|
9
|
-
<main class="site-main">
|
|
10
|
-
<PageFrame>{children}</PageFrame>
|
|
11
|
-
</main>
|
|
12
|
-
</div>
|
|
13
|
-
);
|
|
14
|
-
}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { state, derive } from '@askrjs/askr';
|
|
2
|
-
import { Button } from '@askrjs/ui';
|
|
3
|
-
import { Box, Stack } from '@askrjs/themes/components';
|
|
4
|
-
import Badge from './badge';
|
|
5
|
-
|
|
6
|
-
export default function Counter() {
|
|
7
|
-
const [count, setCount] = state(0);
|
|
8
|
-
const parity = derive(() => (count() % 2 === 0 ? 'even' : 'odd'));
|
|
9
|
-
|
|
10
|
-
return (
|
|
11
|
-
<Box class="card counter">
|
|
12
|
-
<Stack gap="3">
|
|
13
|
-
<h2>Hydration check</h2>
|
|
14
|
-
<p class="text-muted">
|
|
15
|
-
This counter should still feel live after static generation.
|
|
16
|
-
</p>
|
|
17
|
-
<div class="counter-value">{count()}</div>
|
|
18
|
-
<div>
|
|
19
|
-
<Badge>{parity()}</Badge>
|
|
20
|
-
</div>
|
|
21
|
-
<div class="counter-controls">
|
|
22
|
-
<Button onPress={() => setCount((c) => Math.max(0, c - 1))}>
|
|
23
|
-
- Decrement
|
|
24
|
-
</Button>
|
|
25
|
-
<Button onPress={() => setCount((c) => c + 1)}>+ Increment</Button>
|
|
26
|
-
</div>
|
|
27
|
-
</Stack>
|
|
28
|
-
</Box>
|
|
29
|
-
);
|
|
30
|
-
}
|
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
import { Link } from '@askrjs/askr/router';
|
|
2
|
-
import { Header } from '@askrjs/themes/components';
|
|
3
|
-
import {
|
|
4
|
-
Block,
|
|
5
|
-
Box,
|
|
6
|
-
Container,
|
|
7
|
-
Section,
|
|
8
|
-
Stack,
|
|
9
|
-
} from '@askrjs/themes/components';
|
|
10
|
-
import { Nav, NavLink } from '@askrjs/themes/components';
|
|
11
|
-
import Badge from './badge';
|
|
12
|
-
|
|
13
|
-
export const navItems = [
|
|
14
|
-
{ href: '/', label: 'Home' },
|
|
15
|
-
{ href: '/workflow', label: 'Workflow' },
|
|
16
|
-
{ href: '/content', label: 'Content' },
|
|
17
|
-
{ href: '/preview', label: 'Preview' },
|
|
18
|
-
] as const;
|
|
19
|
-
|
|
20
|
-
export function SiteHeader() {
|
|
21
|
-
return (
|
|
22
|
-
<Header position="sticky">
|
|
23
|
-
<Container size="xl" paddingY="md">
|
|
24
|
-
<Box class="navbar-shell">
|
|
25
|
-
<Box class="navbar-brand">
|
|
26
|
-
<Link class="brand" href="/">
|
|
27
|
-
<strong>{'{{appName}}'}</strong>
|
|
28
|
-
<span>Static site generation sample</span>
|
|
29
|
-
</Link>
|
|
30
|
-
</Box>
|
|
31
|
-
|
|
32
|
-
<Nav
|
|
33
|
-
as="div"
|
|
34
|
-
aria-label="Primary navigation"
|
|
35
|
-
class="navbar-group"
|
|
36
|
-
data-align="end"
|
|
37
|
-
>
|
|
38
|
-
{navItems.map((item) => (
|
|
39
|
-
<NavLink href={item.href}>{item.label}</NavLink>
|
|
40
|
-
))}
|
|
41
|
-
</Nav>
|
|
42
|
-
</Box>
|
|
43
|
-
</Container>
|
|
44
|
-
</Header>
|
|
45
|
-
);
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
export function PageFrame({ children }: { children?: unknown }) {
|
|
49
|
-
return (
|
|
50
|
-
<Container size="xl" paddingY="2xl">
|
|
51
|
-
<Stack gap="8">{children}</Stack>
|
|
52
|
-
</Container>
|
|
53
|
-
);
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
export function SectionHeader({
|
|
57
|
-
eyebrow,
|
|
58
|
-
title,
|
|
59
|
-
description,
|
|
60
|
-
actions,
|
|
61
|
-
}: {
|
|
62
|
-
eyebrow: string;
|
|
63
|
-
title: string;
|
|
64
|
-
description: string;
|
|
65
|
-
actions?: unknown;
|
|
66
|
-
}) {
|
|
67
|
-
return (
|
|
68
|
-
<Section class="section-header" paddingY="xl">
|
|
69
|
-
<Block gap="md">
|
|
70
|
-
<Stack gap="3" class="section-header-copy">
|
|
71
|
-
<Badge>{eyebrow}</Badge>
|
|
72
|
-
<h1>{title}</h1>
|
|
73
|
-
<p class="section-header-description">{description}</p>
|
|
74
|
-
</Stack>
|
|
75
|
-
|
|
76
|
-
{actions ?? null}
|
|
77
|
-
</Block>
|
|
78
|
-
</Section>
|
|
79
|
-
);
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
export function CardGrid({ children }: { children?: unknown }) {
|
|
83
|
-
return <Box class="card-grid">{children}</Box>;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
export function Card({
|
|
87
|
-
eyebrow,
|
|
88
|
-
title,
|
|
89
|
-
description,
|
|
90
|
-
children,
|
|
91
|
-
}: {
|
|
92
|
-
eyebrow?: string;
|
|
93
|
-
title: string;
|
|
94
|
-
description?: string;
|
|
95
|
-
children?: unknown;
|
|
96
|
-
}) {
|
|
97
|
-
return (
|
|
98
|
-
<Box class="card">
|
|
99
|
-
<Stack gap="3">
|
|
100
|
-
{eyebrow ? <Badge>{eyebrow}</Badge> : null}
|
|
101
|
-
<h2>{title}</h2>
|
|
102
|
-
{description ? <p>{description}</p> : null}
|
|
103
|
-
{children}
|
|
104
|
-
</Stack>
|
|
105
|
-
</Box>
|
|
106
|
-
);
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
export function ActionRow({ children }: { children?: unknown }) {
|
|
110
|
-
return <Box class="action-row">{children}</Box>;
|
|
111
|
-
}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import type { JSXElement } from '@askrjs/askr/foundations';
|
|
2
|
-
|
|
3
|
-
declare global {
|
|
4
|
-
namespace JSX {
|
|
5
|
-
interface Element extends JSXElement {
|
|
6
|
-
readonly __askrSsgJsxElementBrand?: never;
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
interface IntrinsicElements {
|
|
10
|
-
[elem: string]: Record<string, unknown>;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
interface ElementAttributesProperty {
|
|
14
|
-
props: Record<string, unknown>;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
interface ElementChildrenAttribute {
|
|
18
|
-
children: unknown;
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
export {};
|