@h-ai/cli 0.1.0-alpha.19 → 0.1.0-alpha.21

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 (219) hide show
  1. package/README.md +10 -7
  2. package/dist/{chunk-GSMXGUYF.js → chunk-5IGMJVV5.js} +56 -38
  3. package/dist/chunk-5IGMJVV5.js.map +1 -0
  4. package/dist/{chunk-BPO34NRL.js → chunk-CFCXOKGV.js} +27 -5
  5. package/dist/chunk-CFCXOKGV.js.map +1 -0
  6. package/dist/cli-config-templates-5J5VKWWD.js +5 -0
  7. package/dist/{cli-config-templates-JCS7T3NU.js.map → cli-config-templates-5J5VKWWD.js.map} +1 -1
  8. package/dist/cli-skill-templates-JMSV2SVW.js +5 -0
  9. package/dist/{cli-skill-templates-IMYZPQRG.js.map → cli-skill-templates-JMSV2SVW.js.map} +1 -1
  10. package/dist/index.js +627 -107
  11. package/dist/index.js.map +1 -1
  12. package/dist/{src-N4NPS7AG.js → src-QNEJJ3BV.js} +261 -103
  13. package/dist/src-QNEJJ3BV.js.map +1 -0
  14. package/package.json +3 -2
  15. package/templates/README.md +40 -29
  16. package/templates/apps/admin/messages/en-US.json +5 -0
  17. package/templates/apps/admin/messages/zh-CN.json +5 -0
  18. package/templates/apps/admin/src/routes/+layout.svelte.hbs +5 -5
  19. package/templates/apps/admin/src/routes/+page.svelte.hbs +32 -12
  20. package/templates/apps/admin/src/routes/admin/+layout.svelte.hbs +37 -20
  21. package/templates/apps/admin/src/routes/admin/+page.svelte.hbs +33 -24
  22. package/templates/apps/admin/src/routes/admin/settings/+page.svelte.hbs +16 -13
  23. package/templates/apps/api/apps/{{projectName}}-contract/README.md.hbs +16 -0
  24. package/templates/apps/api/apps/{{projectName}}-contract/package.json.hbs +38 -0
  25. package/templates/apps/api/apps/{{projectName}}-contract/src/app-contract.ts.hbs +27 -0
  26. package/templates/apps/api/apps/{{projectName}}-contract/src/app-schemas.ts.hbs +33 -0
  27. package/templates/apps/api/apps/{{projectName}}-contract/src/index.ts.hbs +3 -0
  28. package/templates/apps/api/apps/{{projectName}}-contract/src/{{projectName}}-contract.ts.hbs +12 -0
  29. package/templates/apps/api/apps/{{projectName}}-contract/tests/contract.test.ts.hbs +18 -0
  30. package/templates/apps/api/apps/{{projectName}}-contract/tsconfig.json.hbs +12 -0
  31. package/templates/apps/api/apps/{{projectName}}-contract/tsup.config.ts.hbs +11 -0
  32. package/templates/apps/api/apps/{{projectName}}-contract/vitest.config.ts.hbs +9 -0
  33. package/templates/apps/api/apps/{{projectName}}-service/README.md.hbs +17 -0
  34. package/templates/apps/api/apps/{{projectName}}-service/config/_core.yml.hbs +19 -0
  35. package/templates/apps/api/apps/{{projectName}}-service/config/_serv.yml.hbs +26 -0
  36. package/templates/apps/api/apps/{{projectName}}-service/package.json.hbs +55 -0
  37. package/templates/apps/api/apps/{{projectName}}-service/src/app.ts.hbs +98 -0
  38. package/templates/apps/api/apps/{{projectName}}-service/src/index.ts.hbs +21 -0
  39. package/templates/apps/api/apps/{{projectName}}-service/src/lib/server/init.ts.hbs +184 -0
  40. package/templates/apps/api/apps/{{projectName}}-service/src/server/procedures/app-procedures.ts.hbs +49 -0
  41. package/templates/apps/api/apps/{{projectName}}-service/src/server/procedures/index.ts.hbs +18 -0
  42. package/templates/apps/api/apps/{{projectName}}-service/tests/service.test.ts.hbs +168 -0
  43. package/templates/apps/api/apps/{{projectName}}-service/tsconfig.json.hbs +16 -0
  44. package/templates/apps/api/apps/{{projectName}}-service/tsup.config.ts.hbs +11 -0
  45. package/templates/apps/api/apps/{{projectName}}-service/vitest.config.ts.hbs +9 -0
  46. package/templates/apps/api/e2e/api-service.spec.ts.hbs +18 -0
  47. package/templates/apps/api/eslint.config.js +32 -0
  48. package/templates/apps/api/package.json.hbs +29 -0
  49. package/templates/apps/api/playwright.config.ts.hbs +58 -0
  50. package/templates/apps/api/pnpm-workspace.yaml.hbs +14 -0
  51. package/templates/apps/api/tsconfig.base.json +15 -0
  52. package/templates/apps/fullstack/apps/{{projectName}}-app/.env.example.hbs +10 -0
  53. package/templates/apps/fullstack/apps/{{projectName}}-app/README.md.hbs +24 -7
  54. package/templates/apps/fullstack/apps/{{projectName}}-app/capacitor.config.ts.hbs +18 -0
  55. package/templates/apps/fullstack/apps/{{projectName}}-app/eslint.config.js.hbs +1 -1
  56. package/templates/apps/fullstack/apps/{{projectName}}-app/index.html.hbs +16 -0
  57. package/templates/apps/fullstack/apps/{{projectName}}-app/messages/en-US.json.hbs +6 -0
  58. package/templates/apps/fullstack/apps/{{projectName}}-app/messages/zh-CN.json.hbs +6 -0
  59. package/templates/apps/fullstack/apps/{{projectName}}-app/package.json.hbs +51 -29
  60. package/templates/apps/fullstack/apps/{{projectName}}-app/src/App.svelte.hbs +186 -0
  61. package/templates/apps/fullstack/apps/{{projectName}}-app/src/app.css.hbs +2 -0
  62. package/templates/apps/fullstack/apps/{{projectName}}-app/src/app.d.ts.hbs +0 -1
  63. package/templates/apps/fullstack/apps/{{projectName}}-app/src/lib/capacitor.ts.hbs +18 -0
  64. package/templates/apps/fullstack/apps/{{projectName}}-app/src/main.ts.hbs +14 -0
  65. package/templates/apps/fullstack/apps/{{projectName}}-app/svelte.config.js.hbs +1 -5
  66. package/templates/apps/fullstack/apps/{{projectName}}-app/tsconfig.json.hbs +10 -4
  67. package/templates/apps/fullstack/apps/{{projectName}}-app/vite.config.ts.hbs +4 -3
  68. package/templates/apps/fullstack/apps/{{projectName}}-desktop/.env.example.hbs +6 -0
  69. package/templates/apps/fullstack/apps/{{projectName}}-desktop/README.md.hbs +20 -6
  70. package/templates/apps/fullstack/apps/{{projectName}}-desktop/eslint.config.js.hbs +1 -1
  71. package/templates/apps/fullstack/apps/{{projectName}}-desktop/index.html.hbs +15 -0
  72. package/templates/apps/fullstack/apps/{{projectName}}-desktop/package.json.hbs +33 -30
  73. package/templates/apps/fullstack/apps/{{projectName}}-desktop/src/App.svelte.hbs +152 -0
  74. package/templates/apps/fullstack/apps/{{projectName}}-desktop/src/app.d.ts.hbs +1 -2
  75. package/templates/apps/fullstack/apps/{{projectName}}-desktop/src/main.ts.hbs +13 -0
  76. package/templates/apps/fullstack/apps/{{projectName}}-desktop/src-tauri/Cargo.toml.hbs +22 -0
  77. package/templates/apps/fullstack/apps/{{projectName}}-desktop/src-tauri/build.rs.hbs +6 -0
  78. package/templates/apps/fullstack/apps/{{projectName}}-desktop/src-tauri/capabilities/default.json.hbs +12 -0
  79. package/templates/apps/fullstack/apps/{{projectName}}-desktop/src-tauri/icons/128x128.png +0 -0
  80. package/templates/apps/fullstack/apps/{{projectName}}-desktop/src-tauri/icons/128x128@2x.png +0 -0
  81. package/templates/apps/fullstack/apps/{{projectName}}-desktop/src-tauri/icons/32x32.png +0 -0
  82. package/templates/apps/fullstack/apps/{{projectName}}-desktop/src-tauri/icons/icon.icns +0 -0
  83. package/templates/apps/fullstack/apps/{{projectName}}-desktop/src-tauri/icons/icon.ico +0 -0
  84. package/templates/apps/fullstack/apps/{{projectName}}-desktop/src-tauri/src/lib.rs.hbs +16 -0
  85. package/templates/apps/fullstack/apps/{{projectName}}-desktop/src-tauri/src/main.rs.hbs +8 -0
  86. package/templates/apps/fullstack/apps/{{projectName}}-desktop/src-tauri/tauri.conf.json.hbs +41 -0
  87. package/templates/apps/fullstack/apps/{{projectName}}-desktop/svelte.config.js.hbs +2 -8
  88. package/templates/apps/fullstack/apps/{{projectName}}-desktop/tsconfig.json.hbs +9 -4
  89. package/templates/apps/fullstack/apps/{{projectName}}-desktop/vite.config.ts.hbs +44 -21
  90. package/templates/apps/fullstack/apps/{{projectName}}-web/README.md.hbs +15 -6
  91. package/templates/apps/fullstack/apps/{{projectName}}-web/eslint.config.js.hbs +1 -1
  92. package/templates/apps/fullstack/apps/{{projectName}}-web/index.html.hbs +15 -0
  93. package/templates/apps/fullstack/apps/{{projectName}}-web/package.json.hbs +25 -27
  94. package/templates/apps/fullstack/apps/{{projectName}}-web/src/App.svelte.hbs +153 -0
  95. package/templates/apps/fullstack/apps/{{projectName}}-web/src/app.d.ts.hbs +0 -1
  96. package/templates/apps/fullstack/apps/{{projectName}}-web/src/main.ts.hbs +14 -0
  97. package/templates/apps/fullstack/apps/{{projectName}}-web/svelte.config.js.hbs +1 -5
  98. package/templates/apps/fullstack/apps/{{projectName}}-web/tsconfig.json.hbs +10 -4
  99. package/templates/apps/fullstack/apps/{{projectName}}-web/vite.config.ts.hbs +3 -2
  100. package/templates/apps/fullstack/e2e/fullstack.spec.ts.hbs +2 -1
  101. package/templates/apps/fullstack/eslint.config.js +0 -1
  102. package/templates/apps/fullstack/package.json.hbs +18 -17
  103. package/templates/apps/fullstack/packages/{{projectName}}-contract/package.json.hbs +3 -3
  104. package/templates/apps/fullstack/packages/{{projectName}}-serv/README.md.hbs +5 -2
  105. package/templates/apps/fullstack/packages/{{projectName}}-serv/config/_core.yml.hbs +14 -0
  106. package/templates/apps/fullstack/packages/{{projectName}}-serv/config/_serv.yml.hbs +13 -0
  107. package/templates/apps/fullstack/packages/{{projectName}}-serv/package.json.hbs +2 -2
  108. package/templates/apps/fullstack/packages/{{projectName}}-serv/src/{server-app.ts.hbs → app-server.ts.hbs} +23 -3
  109. package/templates/apps/fullstack/packages/{{projectName}}-serv/src/index.ts.hbs +4 -1
  110. package/templates/apps/fullstack/packages/{{projectName}}-serv/tests/{server-app.test.ts.hbs → app-server.test.ts.hbs} +1 -1
  111. package/templates/apps/fullstack/packages/{{projectName}}-shared/package.json.hbs +9 -8
  112. package/templates/apps/fullstack/packages/{{projectName}}-shared/src/index.ts.hbs +1 -1
  113. package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/api/api-client.ts.hbs +5 -1
  114. package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/components/ThemeSwitcher.svelte.hbs +1 -1
  115. package/templates/apps/fullstack/packages/{{projectName}}-shared/tsconfig.json.hbs +1 -1
  116. package/templates/apps/fullstack/playwright.config.ts.hbs +41 -4
  117. package/templates/apps/fullstack/pnpm-workspace.yaml.hbs +15 -0
  118. package/templates/apps/h5/messages/en-US.json +3 -0
  119. package/templates/apps/h5/messages/zh-CN.json +3 -0
  120. package/templates/apps/h5/src/routes/+layout.svelte.hbs +30 -29
  121. package/templates/apps/h5/src/routes/+page.svelte.hbs +17 -6
  122. package/templates/apps/h5/src/routes/discover/+page.svelte.hbs +17 -6
  123. package/templates/apps/h5/src/routes/profile/+page.svelte.hbs +17 -6
  124. package/templates/apps/mobile-app/.env.hbs +3 -0
  125. package/templates/apps/{android-app → mobile-app}/capacitor.config.ts.hbs +2 -2
  126. package/templates/apps/mobile-app/index.html.hbs +13 -0
  127. package/templates/apps/mobile-app/messages/en-US.json +36 -0
  128. package/templates/apps/mobile-app/messages/zh-CN.json +36 -0
  129. package/templates/apps/mobile-app/src/App.svelte.hbs +162 -0
  130. package/templates/apps/mobile-app/src/lib/api.ts.hbs +54 -0
  131. package/templates/apps/{android-app → mobile-app}/src/lib/capacitor.ts +6 -7
  132. package/templates/apps/mobile-app/src/main.ts.hbs +11 -0
  133. package/templates/apps/website/src/routes/+layout.svelte.hbs +35 -26
  134. package/templates/apps/website/src/routes/+page.svelte.hbs +28 -10
  135. package/templates/apps/website/src/routes/about/+page.svelte.hbs +11 -6
  136. package/templates/apps/website/src/routes/contact/+page.svelte.hbs +37 -34
  137. package/templates/apps/website/src/routes/services/+page.svelte.hbs +27 -40
  138. package/templates/base/.gitignore.hbs +16 -0
  139. package/templates/base/{eslint.config.js → eslint.config.js.hbs} +4 -1
  140. package/templates/base/package.json.hbs +55 -31
  141. package/templates/base/playwright.config.ts +30 -3
  142. package/templates/base/pnpm-workspace.yaml.hbs +14 -0
  143. package/templates/base/src/app.d.ts.hbs +3 -0
  144. package/templates/base/src/app.html.hbs +7 -0
  145. package/templates/base/src/hooks.server.ts.hbs +17 -7
  146. package/templates/base/src/lib/server/init.ts.hbs +20 -12
  147. package/templates/base/static/favicon.png +0 -0
  148. package/templates/base/svelte.config.js.hbs +43 -3
  149. package/templates/base/tests/scaffold.test.ts.hbs +16 -1
  150. package/templates/base/tsconfig.json.hbs +50 -0
  151. package/templates/base/vite.config.ts.hbs +13 -3
  152. package/templates/features/iam/routes-admin/(auth)/+layout.svelte.hbs +5 -5
  153. package/templates/features/iam/routes-admin/(auth)/auth/login/+page.svelte.hbs +34 -32
  154. package/templates/features/iam/routes-admin/(auth)/auth/register/+page.svelte.hbs +46 -48
  155. package/templates/features/iam/routes-h5/auth/login/+page.svelte.hbs +35 -31
  156. package/templates/features/iam/routes-h5/auth/register/+page.svelte.hbs +41 -38
  157. package/templates/skills/AGENTS.md +60 -17
  158. package/templates/skills/CLAUDE.md +18 -6
  159. package/templates/skills/bridges/admin/AGENTS.md +66 -0
  160. package/templates/skills/bridges/admin/CLAUDE.md +19 -0
  161. package/templates/skills/bridges/admin/copilot-instructions.md +46 -0
  162. package/templates/skills/bridges/api/AGENTS.md +65 -0
  163. package/templates/skills/bridges/api/CLAUDE.md +19 -0
  164. package/templates/skills/bridges/api/copilot-instructions.md +46 -0
  165. package/templates/skills/bridges/fullstack/AGENTS.md +84 -0
  166. package/templates/skills/bridges/fullstack/CLAUDE.md +19 -0
  167. package/templates/skills/bridges/fullstack/copilot-instructions.md +54 -0
  168. package/templates/skills/bridges/h5/AGENTS.md +65 -0
  169. package/templates/skills/bridges/h5/CLAUDE.md +19 -0
  170. package/templates/skills/bridges/h5/copilot-instructions.md +44 -0
  171. package/templates/skills/bridges/mobile-app/AGENTS.md +77 -0
  172. package/templates/skills/bridges/mobile-app/CLAUDE.md +19 -0
  173. package/templates/skills/bridges/mobile-app/copilot-instructions.md +45 -0
  174. package/templates/skills/bridges/website/AGENTS.md +65 -0
  175. package/templates/skills/bridges/website/CLAUDE.md +19 -0
  176. package/templates/skills/bridges/website/copilot-instructions.md +44 -0
  177. package/templates/skills/copilot-instructions.md +29 -50
  178. package/templates/skills/hai-ai/SKILL.md +115 -648
  179. package/templates/skills/hai-ai/reference.md +197 -0
  180. package/templates/skills/hai-api-client/SKILL.md +3 -1
  181. package/templates/skills/hai-app-create/SKILL.md +2 -1
  182. package/templates/skills/hai-app-review/SKILL.md +2 -2
  183. package/templates/skills/hai-app-tests/SKILL.md +28 -3
  184. package/templates/skills/hai-capacitor/SKILL.md +14 -22
  185. package/templates/skills/hai-deploy/SKILL.md +12 -9
  186. package/templates/skills/hai-kit/SKILL.md +5 -3
  187. package/templates/skills/hai-serv/SKILL.md +2 -0
  188. package/templates/skills/hai-ui/SKILL.md +25 -11
  189. package/templates/skills/opencode.json +1 -6
  190. package/dist/chunk-BPO34NRL.js.map +0 -1
  191. package/dist/chunk-GSMXGUYF.js.map +0 -1
  192. package/dist/cli-config-templates-JCS7T3NU.js +0 -5
  193. package/dist/cli-skill-templates-IMYZPQRG.js +0 -5
  194. package/dist/src-N4NPS7AG.js.map +0 -1
  195. package/templates/apps/android-app/.env.hbs +0 -3
  196. package/templates/apps/android-app/messages/en-US.json +0 -24
  197. package/templates/apps/android-app/messages/zh-CN.json +0 -24
  198. package/templates/apps/android-app/src/lib/api.ts.hbs +0 -31
  199. package/templates/apps/android-app/src/routes/+layout.svelte.hbs +0 -42
  200. package/templates/apps/android-app/src/routes/+layout.ts +0 -7
  201. package/templates/apps/android-app/src/routes/+page.svelte.hbs +0 -27
  202. package/templates/apps/api/src/routes/+layout.svelte +0 -14
  203. package/templates/apps/api/src/routes/+page.svelte +0 -11
  204. package/templates/apps/api/src/routes/api/v1/health/+server.ts +0 -14
  205. package/templates/apps/api/src/routes/api/v1/items/+server.ts +0 -37
  206. package/templates/apps/api/src/routes/api/v1/items/[id]/+server.ts +0 -30
  207. package/templates/apps/api/tests/health.test.ts.hbs +0 -26
  208. package/templates/apps/fullstack/apps/{{projectName}}-app/src/app.html.hbs +0 -14
  209. package/templates/apps/fullstack/apps/{{projectName}}-app/src/routes/+layout.svelte.hbs +0 -18
  210. package/templates/apps/fullstack/apps/{{projectName}}-app/src/routes/+page.svelte.hbs +0 -162
  211. package/templates/apps/fullstack/apps/{{projectName}}-desktop/src/app.html.hbs +0 -14
  212. package/templates/apps/fullstack/apps/{{projectName}}-desktop/src/routes/+layout.svelte.hbs +0 -18
  213. package/templates/apps/fullstack/apps/{{projectName}}-desktop/src/routes/+page.svelte.hbs +0 -162
  214. package/templates/apps/fullstack/apps/{{projectName}}-web/src/app.html.hbs +0 -14
  215. package/templates/apps/fullstack/apps/{{projectName}}-web/src/routes/+layout.svelte.hbs +0 -18
  216. package/templates/apps/fullstack/apps/{{projectName}}-web/src/routes/+page.svelte.hbs +0 -162
  217. package/templates/apps/fullstack/pnpm-workspace.yaml +0 -7
  218. package/templates/base/tsconfig.json +0 -20
  219. /package/templates/apps/fullstack/packages/{{projectName}}-shared/src/lib/stores/{theme.svelte.ts.hbs → theme-store.svelte.ts.hbs} +0 -0
@@ -1,162 +0,0 @@
1
- {{! @skipIfEmpty }}
2
- {{#if fullstack.frontends.desktop}}
3
- <script lang="ts">
4
- import type { AppInfo } from '{{fullstack.sharedPackageName}}'
5
- import * as appM from '$lib/paraglide/messages.js'
6
- import { Alert, Button, Card, Skeleton } from '@h-ai/ui'
7
- import { onMount } from 'svelte'
8
- import { fetchAppInfo, messages as sharedM } from '{{fullstack.sharedPackageName}}'
9
-
10
- let info = $state<AppInfo | null>(null)
11
- let loading = $state(true)
12
- let errorMessage = $state('')
13
-
14
- async function refreshStatus() {
15
- loading = true
16
- errorMessage = ''
17
- try {
18
- info = await fetchAppInfo()
19
- }
20
- catch {
21
- info = null
22
- errorMessage = sharedM.home_error()
23
- }
24
- finally {
25
- loading = false
26
- }
27
- }
28
-
29
- onMount(() => {
30
- void refreshStatus()
31
- })
32
- </script>
33
-
34
- <svelte:head>
35
- <title>{appM.page_title({ name: sharedM.app_name() })}</title>
36
- </svelte:head>
37
-
38
- <section class="space-y-8">
39
- <div class="grid gap-6 lg:grid-cols-[1.2fr_0.8fr]">
40
- <section class="relative overflow-hidden rounded-[2rem] border border-base-300/70 bg-gradient-to-br from-primary/15 via-base-100 to-secondary/15 p-6 shadow-2xl shadow-primary/10 lg:p-10">
41
- <div class="absolute right-8 top-8 hidden size-28 rounded-full bg-primary/20 blur-3xl sm:block"></div>
42
- <div class="relative z-10 max-w-2xl space-y-6">
43
- <span class="badge badge-primary badge-lg gap-2">
44
- <span class="icon-[tabler--rocket] size-4"></span>
45
- {appM.hero_badge()}
46
- </span>
47
- <div class="space-y-4">
48
- <h1 class="text-4xl font-black tracking-tight text-base-content sm:text-5xl">
49
- {appM.hero_title({ name: sharedM.app_name() })}
50
- </h1>
51
- <p class="max-w-xl text-lg leading-8 text-base-content/70">
52
- {appM.hero_subtitle()}
53
- </p>
54
- </div>
55
- <div class="flex flex-wrap gap-3">
56
- <a class="btn btn-primary shadow-lg shadow-primary/20" href="#status">
57
- <span class="icon-[tabler--activity-heartbeat] size-5"></span>
58
- {appM.hero_primary_action()}
59
- </a>
60
- <a class="btn btn-ghost" href="#customize">
61
- <span class="icon-[tabler--adjustments] size-5"></span>
62
- {appM.hero_secondary_action()}
63
- </a>
64
- </div>
65
- </div>
66
- </section>
67
-
68
- <aside class="rounded-[2rem] border border-base-300/70 bg-base-100/80 p-5 shadow-xl backdrop-blur">
69
- <div class="mockup-window border border-base-300 bg-base-200/70">
70
- <div class="space-y-4 bg-base-100 p-5">
71
- <div class="flex items-center justify-between">
72
- <div>
73
- <p class="text-sm font-semibold">{appM.preview_title()}</p>
74
- <p class="text-xs text-base-content/55">{appM.preview_body()}</p>
75
- </div>
76
- <span class="badge badge-success badge-outline">{appM.platform_name()}</span>
77
- </div>
78
- <div class="grid gap-3 text-sm">
79
- <div class="rounded-2xl bg-primary/10 p-4">
80
- <span class="icon-[tabler--components] mb-2 size-6 text-primary"></span>
81
- <p class="font-semibold">{appM.preview_metric_shared()}</p>
82
- </div>
83
- <div class="grid grid-cols-2 gap-3">
84
- <div class="rounded-2xl bg-secondary/10 p-4">
85
- <span class="icon-[tabler--language] mb-2 size-6 text-secondary"></span>
86
- <p class="font-semibold">{appM.preview_metric_local()}</p>
87
- </div>
88
- <div class="rounded-2xl bg-accent/10 p-4">
89
- <span class="icon-[tabler--palette] mb-2 size-6 text-accent"></span>
90
- <p class="font-semibold">{appM.preview_metric_theme()}</p>
91
- </div>
92
- </div>
93
- </div>
94
- </div>
95
- </div>
96
- </aside>
97
- </div>
98
-
99
- <div class="grid gap-6 lg:grid-cols-[0.95fr_1.05fr]">
100
- <div id="status">
101
- <Card title={appM.status_title()} bordered shadow="md" class="bg-base-100/90 backdrop-blur">
102
- <p class="mb-5 text-sm text-base-content/65">{appM.status_description()}</p>
103
- {#if loading}
104
- <Skeleton variant="title" class="mb-3" />
105
- <Skeleton count={3} />
106
- <p class="sr-only" data-testid="service-status">{sharedM.home_loading()}</p>
107
- {:else if info}
108
- <Alert variant="success" title={appM.status_online({ name: info.name })}>
109
- <p data-testid="service-status">{info.name}</p>
110
- </Alert>
111
- <dl class="mt-5 grid gap-3 sm:grid-cols-2 text-sm">
112
- <div class="rounded-box border border-base-300/70 bg-base-200/60 p-4">
113
- <dt class="text-xs text-base-content/55">{appM.status_version()}</dt>
114
- <dd class="mt-1 font-semibold">{info.version}</dd>
115
- </div>
116
- <div class="rounded-box border border-base-300/70 bg-base-200/60 p-4">
117
- <dt class="text-xs text-base-content/55">{appM.status_started({ time: info.startedAt })}</dt>
118
- <dd class="mt-1 font-semibold">{appM.status_frontends_count({ count: String(info.frontends.length) })}</dd>
119
- </div>
120
- <div class="rounded-box border border-base-300/70 bg-base-200/60 p-4 sm:col-span-2">
121
- <dt class="text-xs text-base-content/55">{appM.status_frontends({ list: info.frontends.join(' / ') })}</dt>
122
- <dd class="mt-1 font-semibold">{sharedM.home_subtitle()}</dd>
123
- </div>
124
- </dl>
125
- {:else}
126
- <Alert variant="error" title={sharedM.home_error()}>
127
- <p data-testid="service-status">{errorMessage}</p>
128
- </Alert>
129
- {/if}
130
-
131
- <div class="mt-5">
132
- <Button type="button" variant="primary" loading={loading} onclick={refreshStatus}>
133
- {sharedM.home_refresh()}
134
- </Button>
135
- </div>
136
- </Card>
137
- </div>
138
-
139
- <section id="customize" class="grid gap-4 sm:grid-cols-2">
140
- <div class="rounded-[1.5rem] border border-base-300/70 bg-base-100/90 p-5 shadow-md">
141
- <span class="icon-[tabler--package] mb-4 size-7 text-primary"></span>
142
- <h2 class="text-lg font-bold">{appM.custom_shared_title()}</h2>
143
- <p class="mt-2 text-sm leading-6 text-base-content/65">{appM.custom_shared_body()}</p>
144
- </div>
145
- <div class="rounded-[1.5rem] border border-base-300/70 bg-base-100/90 p-5 shadow-md">
146
- <span class="icon-[tabler--message-language] mb-4 size-7 text-secondary"></span>
147
- <h2 class="text-lg font-bold">{appM.custom_local_title()}</h2>
148
- <p class="mt-2 text-sm leading-6 text-base-content/65">{appM.custom_local_body()}</p>
149
- </div>
150
- <div class="rounded-[1.5rem] border border-base-300/70 bg-base-100/90 p-5 shadow-md sm:col-span-2">
151
- <h2 class="text-lg font-bold">{appM.flow_title()}</h2>
152
- <ol class="mt-4 grid gap-3 md:grid-cols-4">
153
- <li class="rounded-box bg-base-200/70 p-4 text-sm">{appM.flow_contract()}</li>
154
- <li class="rounded-box bg-base-200/70 p-4 text-sm">{appM.flow_service()}</li>
155
- <li class="rounded-box bg-base-200/70 p-4 text-sm">{appM.flow_shared()}</li>
156
- <li class="rounded-box bg-base-200/70 p-4 text-sm">{appM.flow_frontend()}</li>
157
- </ol>
158
- </div>
159
- </section>
160
- </div>
161
- </section>
162
- {{/if}}
@@ -1,14 +0,0 @@
1
- {{! @skipIfEmpty }}
2
- {{#if fullstack.frontends.web}}
3
- <!doctype html>
4
- <html lang="%paraglide.lang%">
5
- <head>
6
- <meta charset="utf-8" />
7
- <meta name="viewport" content="width=device-width, initial-scale=1" />
8
- %sveltekit.head%
9
- </head>
10
- <body data-sveltekit-preload-data="hover">
11
- <div style="display: contents">%sveltekit.body%</div>
12
- </body>
13
- </html>
14
- {{/if}}
@@ -1,18 +0,0 @@
1
- {{! @skipIfEmpty }}
2
- {{#if fullstack.frontends.web}}
3
- <script lang="ts">
4
- import { setLocale } from '$lib/paraglide/runtime.js'
5
- import { AppShell } from '{{fullstack.sharedPackageName}}'
6
- import '../app.css'
7
-
8
- const { children } = $props()
9
-
10
- function syncLocale(locale: string) {
11
- setLocale(locale as Parameters<typeof setLocale>[0])
12
- }
13
- </script>
14
-
15
- <AppShell platform="web" onLocaleChange={syncLocale}>
16
- {@render children()}
17
- </AppShell>
18
- {{/if}}
@@ -1,162 +0,0 @@
1
- {{! @skipIfEmpty }}
2
- {{#if fullstack.frontends.web}}
3
- <script lang="ts">
4
- import type { AppInfo } from '{{fullstack.sharedPackageName}}'
5
- import * as appM from '$lib/paraglide/messages.js'
6
- import { Alert, Button, Card, Skeleton } from '@h-ai/ui'
7
- import { onMount } from 'svelte'
8
- import { fetchAppInfo, messages as sharedM } from '{{fullstack.sharedPackageName}}'
9
-
10
- let info = $state<AppInfo | null>(null)
11
- let loading = $state(true)
12
- let errorMessage = $state('')
13
-
14
- async function refreshStatus() {
15
- loading = true
16
- errorMessage = ''
17
- try {
18
- info = await fetchAppInfo()
19
- }
20
- catch {
21
- info = null
22
- errorMessage = sharedM.home_error()
23
- }
24
- finally {
25
- loading = false
26
- }
27
- }
28
-
29
- onMount(() => {
30
- void refreshStatus()
31
- })
32
- </script>
33
-
34
- <svelte:head>
35
- <title>{appM.page_title({ name: sharedM.app_name() })}</title>
36
- </svelte:head>
37
-
38
- <section class="space-y-8">
39
- <div class="grid gap-6 lg:grid-cols-[1.2fr_0.8fr]">
40
- <section class="relative overflow-hidden rounded-[2rem] border border-base-300/70 bg-gradient-to-br from-primary/15 via-base-100 to-secondary/15 p-6 shadow-2xl shadow-primary/10 lg:p-10">
41
- <div class="absolute right-8 top-8 hidden size-28 rounded-full bg-primary/20 blur-3xl sm:block"></div>
42
- <div class="relative z-10 max-w-2xl space-y-6">
43
- <span class="badge badge-primary badge-lg gap-2">
44
- <span class="icon-[tabler--rocket] size-4"></span>
45
- {appM.hero_badge()}
46
- </span>
47
- <div class="space-y-4">
48
- <h1 class="text-4xl font-black tracking-tight text-base-content sm:text-5xl">
49
- {appM.hero_title({ name: sharedM.app_name() })}
50
- </h1>
51
- <p class="max-w-xl text-lg leading-8 text-base-content/70">
52
- {appM.hero_subtitle()}
53
- </p>
54
- </div>
55
- <div class="flex flex-wrap gap-3">
56
- <a class="btn btn-primary shadow-lg shadow-primary/20" href="#status">
57
- <span class="icon-[tabler--activity-heartbeat] size-5"></span>
58
- {appM.hero_primary_action()}
59
- </a>
60
- <a class="btn btn-ghost" href="#customize">
61
- <span class="icon-[tabler--adjustments] size-5"></span>
62
- {appM.hero_secondary_action()}
63
- </a>
64
- </div>
65
- </div>
66
- </section>
67
-
68
- <aside class="rounded-[2rem] border border-base-300/70 bg-base-100/80 p-5 shadow-xl backdrop-blur">
69
- <div class="mockup-window border border-base-300 bg-base-200/70">
70
- <div class="space-y-4 bg-base-100 p-5">
71
- <div class="flex items-center justify-between">
72
- <div>
73
- <p class="text-sm font-semibold">{appM.preview_title()}</p>
74
- <p class="text-xs text-base-content/55">{appM.preview_body()}</p>
75
- </div>
76
- <span class="badge badge-success badge-outline">{appM.platform_name()}</span>
77
- </div>
78
- <div class="grid gap-3 text-sm">
79
- <div class="rounded-2xl bg-primary/10 p-4">
80
- <span class="icon-[tabler--components] mb-2 size-6 text-primary"></span>
81
- <p class="font-semibold">{appM.preview_metric_shared()}</p>
82
- </div>
83
- <div class="grid grid-cols-2 gap-3">
84
- <div class="rounded-2xl bg-secondary/10 p-4">
85
- <span class="icon-[tabler--language] mb-2 size-6 text-secondary"></span>
86
- <p class="font-semibold">{appM.preview_metric_local()}</p>
87
- </div>
88
- <div class="rounded-2xl bg-accent/10 p-4">
89
- <span class="icon-[tabler--palette] mb-2 size-6 text-accent"></span>
90
- <p class="font-semibold">{appM.preview_metric_theme()}</p>
91
- </div>
92
- </div>
93
- </div>
94
- </div>
95
- </div>
96
- </aside>
97
- </div>
98
-
99
- <div class="grid gap-6 lg:grid-cols-[0.95fr_1.05fr]">
100
- <div id="status">
101
- <Card title={appM.status_title()} bordered shadow="md" class="bg-base-100/90 backdrop-blur">
102
- <p class="mb-5 text-sm text-base-content/65">{appM.status_description()}</p>
103
- {#if loading}
104
- <Skeleton variant="title" class="mb-3" />
105
- <Skeleton count={3} />
106
- <p class="sr-only" data-testid="service-status">{sharedM.home_loading()}</p>
107
- {:else if info}
108
- <Alert variant="success" title={appM.status_online({ name: info.name })}>
109
- <p data-testid="service-status">{info.name}</p>
110
- </Alert>
111
- <dl class="mt-5 grid gap-3 sm:grid-cols-2 text-sm">
112
- <div class="rounded-box border border-base-300/70 bg-base-200/60 p-4">
113
- <dt class="text-xs text-base-content/55">{appM.status_version()}</dt>
114
- <dd class="mt-1 font-semibold">{info.version}</dd>
115
- </div>
116
- <div class="rounded-box border border-base-300/70 bg-base-200/60 p-4">
117
- <dt class="text-xs text-base-content/55">{appM.status_started({ time: info.startedAt })}</dt>
118
- <dd class="mt-1 font-semibold">{appM.status_frontends_count({ count: String(info.frontends.length) })}</dd>
119
- </div>
120
- <div class="rounded-box border border-base-300/70 bg-base-200/60 p-4 sm:col-span-2">
121
- <dt class="text-xs text-base-content/55">{appM.status_frontends({ list: info.frontends.join(' / ') })}</dt>
122
- <dd class="mt-1 font-semibold">{sharedM.home_subtitle()}</dd>
123
- </div>
124
- </dl>
125
- {:else}
126
- <Alert variant="error" title={sharedM.home_error()}>
127
- <p data-testid="service-status">{errorMessage}</p>
128
- </Alert>
129
- {/if}
130
-
131
- <div class="mt-5">
132
- <Button type="button" variant="primary" loading={loading} onclick={refreshStatus}>
133
- {sharedM.home_refresh()}
134
- </Button>
135
- </div>
136
- </Card>
137
- </div>
138
-
139
- <section id="customize" class="grid gap-4 sm:grid-cols-2">
140
- <div class="rounded-[1.5rem] border border-base-300/70 bg-base-100/90 p-5 shadow-md">
141
- <span class="icon-[tabler--package] mb-4 size-7 text-primary"></span>
142
- <h2 class="text-lg font-bold">{appM.custom_shared_title()}</h2>
143
- <p class="mt-2 text-sm leading-6 text-base-content/65">{appM.custom_shared_body()}</p>
144
- </div>
145
- <div class="rounded-[1.5rem] border border-base-300/70 bg-base-100/90 p-5 shadow-md">
146
- <span class="icon-[tabler--message-language] mb-4 size-7 text-secondary"></span>
147
- <h2 class="text-lg font-bold">{appM.custom_local_title()}</h2>
148
- <p class="mt-2 text-sm leading-6 text-base-content/65">{appM.custom_local_body()}</p>
149
- </div>
150
- <div class="rounded-[1.5rem] border border-base-300/70 bg-base-100/90 p-5 shadow-md sm:col-span-2">
151
- <h2 class="text-lg font-bold">{appM.flow_title()}</h2>
152
- <ol class="mt-4 grid gap-3 md:grid-cols-4">
153
- <li class="rounded-box bg-base-200/70 p-4 text-sm">{appM.flow_contract()}</li>
154
- <li class="rounded-box bg-base-200/70 p-4 text-sm">{appM.flow_service()}</li>
155
- <li class="rounded-box bg-base-200/70 p-4 text-sm">{appM.flow_shared()}</li>
156
- <li class="rounded-box bg-base-200/70 p-4 text-sm">{appM.flow_frontend()}</li>
157
- </ol>
158
- </div>
159
- </section>
160
- </div>
161
- </section>
162
- {{/if}}
@@ -1,7 +0,0 @@
1
- shellEmulator: true
2
-
3
- trustPolicy: no-downgrade
4
-
5
- packages:
6
- - 'packages/*'
7
- - 'apps/*'
@@ -1,20 +0,0 @@
1
- {
2
- "extends": "./.svelte-kit/tsconfig.json",
3
- "compilerOptions": {
4
- "moduleResolution": "bundler",
5
- "allowImportingTsExtensions": true,
6
- "allowJs": true,
7
- "checkJs": false,
8
- "strict": true,
9
- "verbatimModuleSyntax": true,
10
- "skipLibCheck": true
11
- },
12
- "include": [
13
- "src/**/*",
14
- "src/**/*.svelte"
15
- ],
16
- "exclude": [
17
- "node_modules",
18
- ".svelte-kit"
19
- ]
20
- }