@stacksjs/defaults 0.70.206 → 0.70.208

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 (408) hide show
  1. package/TODO.md +21 -0
  2. package/ai/AGENTS.md +79 -0
  3. package/ai/README.md +45 -0
  4. package/ai/claude/launch.json +12 -0
  5. package/ai/skills/stacks-actions/SKILL.md +128 -0
  6. package/ai/skills/stacks-ai/SKILL.md +276 -0
  7. package/ai/skills/stacks-alias/SKILL.md +94 -0
  8. package/ai/skills/stacks-analytics/SKILL.md +91 -0
  9. package/ai/skills/stacks-api/SKILL.md +738 -0
  10. package/ai/skills/stacks-arrays/SKILL.md +277 -0
  11. package/ai/skills/stacks-auth/SKILL.md +422 -0
  12. package/ai/skills/stacks-auto-imports/SKILL.md +138 -0
  13. package/ai/skills/stacks-brandkit/SKILL.md +811 -0
  14. package/ai/skills/stacks-browse/SKILL.md +127 -0
  15. package/ai/skills/stacks-browse/scripts/browse.ts +492 -0
  16. package/ai/skills/stacks-browser/SKILL.md +145 -0
  17. package/ai/skills/stacks-buddy/SKILL.md +676 -0
  18. package/ai/skills/stacks-build/SKILL.md +163 -0
  19. package/ai/skills/stacks-cache/SKILL.md +125 -0
  20. package/ai/skills/stacks-calendar/SKILL.md +113 -0
  21. package/ai/skills/stacks-chat/SKILL.md +371 -0
  22. package/ai/skills/stacks-cli/SKILL.md +112 -0
  23. package/ai/skills/stacks-cloud/SKILL.md +192 -0
  24. package/ai/skills/stacks-cms/SKILL.md +217 -0
  25. package/ai/skills/stacks-collections/SKILL.md +82 -0
  26. package/ai/skills/stacks-commerce/SKILL.md +114 -0
  27. package/ai/skills/stacks-composables/SKILL.md +161 -0
  28. package/ai/skills/stacks-config/SKILL.md +144 -0
  29. package/ai/skills/stacks-configuration/SKILL.md +154 -0
  30. package/ai/skills/stacks-cron/SKILL.md +123 -0
  31. package/ai/skills/stacks-crosswind/SKILL.md +190 -0
  32. package/ai/skills/stacks-dashboard/SKILL.md +173 -0
  33. package/ai/skills/stacks-database/SKILL.md +286 -0
  34. package/ai/skills/stacks-datetime/SKILL.md +269 -0
  35. package/ai/skills/stacks-dependencies/SKILL.md +111 -0
  36. package/ai/skills/stacks-deploy/SKILL.md +102 -0
  37. package/ai/skills/stacks-design-brutalist/SKILL.md +110 -0
  38. package/ai/skills/stacks-design-minimalist/SKILL.md +115 -0
  39. package/ai/skills/stacks-design-output/SKILL.md +55 -0
  40. package/ai/skills/stacks-design-soft/SKILL.md +156 -0
  41. package/ai/skills/stacks-design-taste/SKILL.md +1012 -0
  42. package/ai/skills/stacks-design-taste-codex/SKILL.md +294 -0
  43. package/ai/skills/stacks-desktop/SKILL.md +78 -0
  44. package/ai/skills/stacks-development/SKILL.md +298 -0
  45. package/ai/skills/stacks-dns/SKILL.md +149 -0
  46. package/ai/skills/stacks-docs/SKILL.md +109 -0
  47. package/ai/skills/stacks-email/SKILL.md +236 -0
  48. package/ai/skills/stacks-enums/SKILL.md +100 -0
  49. package/ai/skills/stacks-env/SKILL.md +181 -0
  50. package/ai/skills/stacks-error-handling/SKILL.md +137 -0
  51. package/ai/skills/stacks-events/SKILL.md +228 -0
  52. package/ai/skills/stacks-faker/SKILL.md +158 -0
  53. package/ai/skills/stacks-git/SKILL.md +158 -0
  54. package/ai/skills/stacks-guard/SKILL.md +98 -0
  55. package/ai/skills/stacks-health/SKILL.md +75 -0
  56. package/ai/skills/stacks-http/SKILL.md +316 -0
  57. package/ai/skills/stacks-i18n/SKILL.md +198 -0
  58. package/ai/skills/stacks-image-to-code/SKILL.md +629 -0
  59. package/ai/skills/stacks-imagegen-mobile/SKILL.md +1474 -0
  60. package/ai/skills/stacks-imagegen-web/SKILL.md +998 -0
  61. package/ai/skills/stacks-investigate/SKILL.md +119 -0
  62. package/ai/skills/stacks-jobs/SKILL.md +136 -0
  63. package/ai/skills/stacks-lint/SKILL.md +184 -0
  64. package/ai/skills/stacks-listeners/SKILL.md +99 -0
  65. package/ai/skills/stacks-logging/SKILL.md +78 -0
  66. package/ai/skills/stacks-mail/SKILL.md +120 -0
  67. package/ai/skills/stacks-middleware/SKILL.md +249 -0
  68. package/ai/skills/stacks-migrations/SKILL.md +105 -0
  69. package/ai/skills/stacks-models/SKILL.md +267 -0
  70. package/ai/skills/stacks-new-feature/SKILL.md +206 -0
  71. package/ai/skills/stacks-notifications/SKILL.md +210 -0
  72. package/ai/skills/stacks-objects/SKILL.md +205 -0
  73. package/ai/skills/stacks-office-hours/SKILL.md +134 -0
  74. package/ai/skills/stacks-orm/SKILL.md +342 -0
  75. package/ai/skills/stacks-path/SKILL.md +118 -0
  76. package/ai/skills/stacks-payments/SKILL.md +373 -0
  77. package/ai/skills/stacks-plan-review/SKILL.md +152 -0
  78. package/ai/skills/stacks-plugins/SKILL.md +149 -0
  79. package/ai/skills/stacks-push/SKILL.md +376 -0
  80. package/ai/skills/stacks-query-builder/SKILL.md +128 -0
  81. package/ai/skills/stacks-queue/SKILL.md +559 -0
  82. package/ai/skills/stacks-realtime/SKILL.md +442 -0
  83. package/ai/skills/stacks-redesign/SKILL.md +182 -0
  84. package/ai/skills/stacks-registry/SKILL.md +58 -0
  85. package/ai/skills/stacks-repl/SKILL.md +80 -0
  86. package/ai/skills/stacks-retro/SKILL.md +122 -0
  87. package/ai/skills/stacks-review/SKILL.md +135 -0
  88. package/ai/skills/stacks-router/SKILL.md +231 -0
  89. package/ai/skills/stacks-routes/SKILL.md +105 -0
  90. package/ai/skills/stacks-scaffolding/SKILL.md +162 -0
  91. package/ai/skills/stacks-scheduler/SKILL.md +363 -0
  92. package/ai/skills/stacks-search-engine/SKILL.md +112 -0
  93. package/ai/skills/stacks-security/SKILL.md +129 -0
  94. package/ai/skills/stacks-security-audit/SKILL.md +128 -0
  95. package/ai/skills/stacks-server/SKILL.md +458 -0
  96. package/ai/skills/stacks-shell/SKILL.md +62 -0
  97. package/ai/skills/stacks-slug/SKILL.md +87 -0
  98. package/ai/skills/stacks-sms/SKILL.md +385 -0
  99. package/ai/skills/stacks-socials/SKILL.md +303 -0
  100. package/ai/skills/stacks-storage/SKILL.md +576 -0
  101. package/ai/skills/stacks-strings/SKILL.md +416 -0
  102. package/ai/skills/stacks-stx/SKILL.md +176 -0
  103. package/ai/skills/stacks-technical-diagrams/LICENSE +22 -0
  104. package/ai/skills/stacks-technical-diagrams/SKILL.md +290 -0
  105. package/ai/skills/stacks-technical-diagrams/agents/openai.yaml +4 -0
  106. package/ai/skills/stacks-technical-diagrams/assets/template.html +1252 -0
  107. package/ai/skills/stacks-technical-diagrams/bin/technical-diagrams.mjs +289 -0
  108. package/ai/skills/stacks-technical-diagrams/bunfig.toml +1 -0
  109. package/ai/skills/stacks-technical-diagrams/examples/agent-run.lifecycle.json +64 -0
  110. package/ai/skills/stacks-technical-diagrams/examples/agent-tool-call.workflow.json +88 -0
  111. package/ai/skills/stacks-technical-diagrams/examples/cache-miss-request.sequence.json +75 -0
  112. package/ai/skills/stacks-technical-diagrams/examples/product-analytics.dataflow.json +70 -0
  113. package/ai/skills/stacks-technical-diagrams/examples/web-app.architecture.json +41 -0
  114. package/ai/skills/stacks-technical-diagrams/renderers/architecture/grid.mjs +62 -0
  115. package/ai/skills/stacks-technical-diagrams/renderers/architecture/render-architecture.mjs +371 -0
  116. package/ai/skills/stacks-technical-diagrams/renderers/dataflow/README.md +82 -0
  117. package/ai/skills/stacks-technical-diagrams/renderers/dataflow/render-dataflow.mjs +295 -0
  118. package/ai/skills/stacks-technical-diagrams/renderers/lifecycle/README.md +91 -0
  119. package/ai/skills/stacks-technical-diagrams/renderers/lifecycle/render-lifecycle.mjs +384 -0
  120. package/ai/skills/stacks-technical-diagrams/renderers/sequence/README.md +84 -0
  121. package/ai/skills/stacks-technical-diagrams/renderers/sequence/render-sequence.mjs +257 -0
  122. package/ai/skills/stacks-technical-diagrams/renderers/shared/cli.mjs +42 -0
  123. package/ai/skills/stacks-technical-diagrams/renderers/shared/generated-validators.mjs +13 -0
  124. package/ai/skills/stacks-technical-diagrams/renderers/shared/geometry.mjs +230 -0
  125. package/ai/skills/stacks-technical-diagrams/renderers/shared/layout-report.mjs +40 -0
  126. package/ai/skills/stacks-technical-diagrams/renderers/shared/utils.mjs +88 -0
  127. package/ai/skills/stacks-technical-diagrams/renderers/shared/validator.mjs +40 -0
  128. package/ai/skills/stacks-technical-diagrams/renderers/workflow/README.md +103 -0
  129. package/ai/skills/stacks-technical-diagrams/renderers/workflow/render-workflow.mjs +481 -0
  130. package/ai/skills/stacks-technical-diagrams/schemas/README.md +68 -0
  131. package/ai/skills/stacks-technical-diagrams/schemas/architecture.schema.json +121 -0
  132. package/ai/skills/stacks-technical-diagrams/schemas/common.schema.json +43 -0
  133. package/ai/skills/stacks-technical-diagrams/schemas/dataflow.schema.json +221 -0
  134. package/ai/skills/stacks-technical-diagrams/schemas/lifecycle.schema.json +241 -0
  135. package/ai/skills/stacks-technical-diagrams/schemas/sequence.schema.json +186 -0
  136. package/ai/skills/stacks-technical-diagrams/schemas/workflow.schema.json +332 -0
  137. package/ai/skills/stacks-technical-diagrams/scripts/check-render-output.mjs +297 -0
  138. package/ai/skills/stacks-technical-diagrams/scripts/render-examples.mjs +28 -0
  139. package/ai/skills/stacks-testing/SKILL.md +129 -0
  140. package/ai/skills/stacks-tunnel/SKILL.md +125 -0
  141. package/ai/skills/stacks-types/SKILL.md +178 -0
  142. package/ai/skills/stacks-ui/SKILL.md +246 -0
  143. package/ai/skills/stacks-utils/SKILL.md +444 -0
  144. package/ai/skills/stacks-validation/SKILL.md +371 -0
  145. package/ai/skills/stacks-whois/SKILL.md +315 -0
  146. package/assets/world-map-data.ts +121 -0
  147. package/bootstrap.ts +114 -0
  148. package/docs/api-examples.md +46 -0
  149. package/docs/index.md +24 -0
  150. package/docs/markdown-examples.md +87 -0
  151. package/functions/analytics.ts +97 -0
  152. package/functions/api.ts +143 -0
  153. package/functions/auth.ts +208 -0
  154. package/functions/billing/payments.ts +149 -0
  155. package/functions/blog.ts +120 -0
  156. package/functions/cms/categorizables.ts +107 -0
  157. package/functions/cms/pages.ts +108 -0
  158. package/functions/cms/posts.ts +100 -0
  159. package/functions/cms/taggables.ts +102 -0
  160. package/functions/commerce/coupons.ts +128 -0
  161. package/functions/commerce/customers.ts +128 -0
  162. package/functions/commerce/gift-cards.ts +119 -0
  163. package/functions/commerce/orders.ts +112 -0
  164. package/functions/commerce/payments.ts +119 -0
  165. package/functions/commerce/products/categories.ts +123 -0
  166. package/functions/commerce/products/manufacturers.ts +123 -0
  167. package/functions/commerce/products/products.ts +123 -0
  168. package/functions/commerce/products/reviews.ts +123 -0
  169. package/functions/commerce/products/units.ts +123 -0
  170. package/functions/commerce/products/variants.ts +123 -0
  171. package/functions/commerce/shippings/delivery-routes.ts +123 -0
  172. package/functions/commerce/shippings/digital-deliveries.ts +119 -0
  173. package/functions/commerce/shippings/drivers.ts +123 -0
  174. package/functions/commerce/shippings/license-keys.ts +123 -0
  175. package/functions/commerce/shippings/shipping-methods.ts +123 -0
  176. package/functions/commerce/shippings/shipping-rates.ts +119 -0
  177. package/functions/commerce/shippings/shipping-zones.ts +119 -0
  178. package/functions/commerce/taxes.ts +119 -0
  179. package/functions/commerce/waitlist/products.ts +123 -0
  180. package/functions/commerce/waitlist/restaurants.ts +123 -0
  181. package/functions/craft.ts +107 -0
  182. package/functions/dashboard.ts +153 -0
  183. package/functions/inbox.ts +95 -0
  184. package/functions/jobs.ts +86 -0
  185. package/functions/monitoring/errors.ts +295 -0
  186. package/functions/queue.ts +111 -0
  187. package/functions/realtime/websockets.ts +96 -0
  188. package/functions/realtime.ts +52 -0
  189. package/functions/releases.ts +49 -0
  190. package/functions/search.ts +126 -0
  191. package/functions/toasts.ts +95 -0
  192. package/functions/uploads.ts +216 -0
  193. package/ide/.gitignore +4 -0
  194. package/ide/cursor/rules/auto-imports.mdc +574 -0
  195. package/ide/cursor/rules/code-style.mdc +12 -0
  196. package/ide/cursor/rules/documentation.mdc +9 -0
  197. package/ide/cursor/rules/error-handling-validation.mdc +11 -0
  198. package/ide/cursor/rules/key-conventions.mdc +11 -0
  199. package/ide/cursor/rules/project-structure.mdc +169 -0
  200. package/ide/cursor/rules/readme.mdc +318 -0
  201. package/ide/cursor/rules/syntax-formatting.mdc +9 -0
  202. package/ide/cursor/rules/testing.mdc +10 -0
  203. package/ide/cursor/rules/typescript.mdc +9 -0
  204. package/ide/cursor/rules/ui-styling.mdc +0 -0
  205. package/ide/dictionary.txt +397 -0
  206. package/ide/jetbrains/.fleet/settings.json +4 -0
  207. package/ide/jetbrains/.idea/.gitignore +5 -0
  208. package/ide/jetbrains/.idea/.name +1 -0
  209. package/ide/jetbrains/.idea/inspectionProfiles/Project_Default.xml +6 -0
  210. package/ide/jetbrains/.idea/jsLinters/eslint.xml +7 -0
  211. package/ide/jetbrains/.idea/modules.xml +8 -0
  212. package/ide/jetbrains/.idea/stacks.iml +22 -0
  213. package/ide/jetbrains/.idea/vcs.xml +6 -0
  214. package/ide/jetbrains/.idea/webResources.xml +14 -0
  215. package/ide/jetbrains/IntelliJ IDEA Global Settings +0 -0
  216. package/ide/jetbrains/installed.txt +4 -0
  217. package/ide/jetbrains/options/github-copilot.xml +5 -0
  218. package/ide/jetbrains/options/nodejs.xml +7 -0
  219. package/ide/jetbrains/options/templates.xml +124 -0
  220. package/ide/jetbrains/templates/JavaScript.xml +6 -0
  221. package/ide/jetbrains/templates/Stacks.xml +8 -0
  222. package/ide/vscode/.vscode/README.md +23 -0
  223. package/ide/vscode/.vscode/extensions.json +5 -0
  224. package/ide/vscode/.vscode/settings.json +176 -0
  225. package/ide/vscode/.vscode/stacks.code-snippets +181 -0
  226. package/ide/vscode/LICENSE.md +21 -0
  227. package/ide/vscode/README.md +36 -0
  228. package/ide/vscode/logo.png +0 -0
  229. package/ide/vscode/package.json +79 -0
  230. package/ide/zed/.zed/settings.json +139 -0
  231. package/lang/README.md +28 -0
  232. package/lang/de.yml +14 -0
  233. package/lang/en.yml +15 -0
  234. package/package.json +19 -3
  235. package/project/bootstrap +161 -0
  236. package/project/buddy +175 -0
  237. package/project/storage/framework/tsconfig.app.json +50 -0
  238. package/project/storage/framework/tsconfig.base.json +58 -0
  239. package/routes/core.ts +78 -0
  240. package/routes/dashboard-api.ts +233 -0
  241. package/routes/dashboard.ts +739 -0
  242. package/routes/email.ts +129 -0
  243. package/stores/[name].stx +16 -0
  244. package/stores/git.ts +71 -0
  245. package/stores/payment.ts +474 -0
  246. package/stores/queue.ts +43 -0
  247. package/stores/user.ts +29 -0
  248. package/stx-components-plugin.ts +25 -0
  249. package/styles/design-tokens.css +597 -0
  250. package/types/dashboard.ts +70 -0
  251. package/types/defaults.ts +438 -0
  252. package/vcs/github/CODE_OF_CONDUCT.md +83 -0
  253. package/vcs/github/CONTRIBUTING.md +187 -0
  254. package/vcs/github/EXPLANATIONS.md +41 -0
  255. package/vcs/github/FUNDING.yml +1 -0
  256. package/vcs/github/ISSUE_TEMPLATE/bug_report.yml +49 -0
  257. package/vcs/github/ISSUE_TEMPLATE/config.yml +10 -0
  258. package/vcs/github/ISSUE_TEMPLATE/feature_request.yml +44 -0
  259. package/vcs/github/SECURITY.md +70 -0
  260. package/vcs/github/renovate.json +5 -0
  261. package/vcs/github/stale.yml +14 -0
  262. package/vcs/github/workflows/README.md +16 -0
  263. package/vcs/github/workflows/ci.yml +114 -0
  264. package/vcs/github/workflows/export-size.yml +25 -0
  265. package/vcs/github/workflows/labeler.yml +13 -0
  266. package/vcs/github/workflows/release.yml +219 -0
  267. package/views/[...all].stx +8 -0
  268. package/views/about.md +3 -0
  269. package/views/auth/login.stx +1 -0
  270. package/views/auth/signup.stx +85 -0
  271. package/views/dashboard/.discovered-models.json +542 -0
  272. package/views/dashboard/AUDIT.md +904 -0
  273. package/views/dashboard/[...all].stx +89 -0
  274. package/views/dashboard/access-tokens/index.stx +177 -0
  275. package/views/dashboard/actions/index.stx +129 -0
  276. package/views/dashboard/analytics/blog/index.stx +356 -0
  277. package/views/dashboard/analytics/browsers/index.stx +263 -0
  278. package/views/dashboard/analytics/commerce/sales/index.stx +329 -0
  279. package/views/dashboard/analytics/commerce/web/index.stx +379 -0
  280. package/views/dashboard/analytics/countries/index.stx +289 -0
  281. package/views/dashboard/analytics/devices/index.stx +305 -0
  282. package/views/dashboard/analytics/events/index.stx +536 -0
  283. package/views/dashboard/analytics/index.stx +88 -0
  284. package/views/dashboard/analytics/marketing/index.stx +315 -0
  285. package/views/dashboard/analytics/pages/index.stx +271 -0
  286. package/views/dashboard/analytics/referrers/index.stx +319 -0
  287. package/views/dashboard/analytics/web/index.stx +356 -0
  288. package/views/dashboard/buddy/index.stx +198 -0
  289. package/views/dashboard/ci/index.stx +462 -0
  290. package/views/dashboard/cloud/index.stx +452 -0
  291. package/views/dashboard/commands/index.stx +295 -0
  292. package/views/dashboard/commerce/categories/index.stx +406 -0
  293. package/views/dashboard/commerce/coupons/index.stx +485 -0
  294. package/views/dashboard/commerce/customers/index.stx +410 -0
  295. package/views/dashboard/commerce/dashboard/index.stx +287 -0
  296. package/views/dashboard/commerce/delivery/delivery-routes.stx +305 -0
  297. package/views/dashboard/commerce/delivery/digital-delivery.stx +332 -0
  298. package/views/dashboard/commerce/delivery/drivers.stx +397 -0
  299. package/views/dashboard/commerce/delivery/index.stx +18 -0
  300. package/views/dashboard/commerce/delivery/license-keys.stx +380 -0
  301. package/views/dashboard/commerce/delivery/shipping-methods.stx +346 -0
  302. package/views/dashboard/commerce/delivery/shipping-rates.stx +338 -0
  303. package/views/dashboard/commerce/delivery/shipping-zones.stx +302 -0
  304. package/views/dashboard/commerce/delivery/tabs.ts +25 -0
  305. package/views/dashboard/commerce/gift-cards/index.stx +561 -0
  306. package/views/dashboard/commerce/manufacturers/index.stx +308 -0
  307. package/views/dashboard/commerce/orders/index.stx +247 -0
  308. package/views/dashboard/commerce/payments/index.stx +535 -0
  309. package/views/dashboard/commerce/pos/index.stx +653 -0
  310. package/views/dashboard/commerce/printers/devices/index.stx +273 -0
  311. package/views/dashboard/commerce/printers/receipts/index.stx +308 -0
  312. package/views/dashboard/commerce/products/detail.stx +563 -0
  313. package/views/dashboard/commerce/products/index.stx +370 -0
  314. package/views/dashboard/commerce/reviews/index.stx +656 -0
  315. package/views/dashboard/commerce/reviews/index.ts +0 -0
  316. package/views/dashboard/commerce/taxes/index.stx +377 -0
  317. package/views/dashboard/commerce/units/index.stx +317 -0
  318. package/views/dashboard/commerce/variants/index.stx +319 -0
  319. package/views/dashboard/commerce/waitlist/products.stx +942 -0
  320. package/views/dashboard/commerce/waitlist/restaurant.stx +1024 -0
  321. package/views/dashboard/components/index.stx +330 -0
  322. package/views/dashboard/composables/index.ts +19 -0
  323. package/views/dashboard/composables/useChart.ts +77 -0
  324. package/views/dashboard/composables/useNavigation.ts +99 -0
  325. package/views/dashboard/composables/useRole.ts +58 -0
  326. package/views/dashboard/composables/useTheme.ts +74 -0
  327. package/views/dashboard/content/authors/index.stx +171 -0
  328. package/views/dashboard/content/blog/index.stx +493 -0
  329. package/views/dashboard/content/categories/index.stx +169 -0
  330. package/views/dashboard/content/comments/index.stx +189 -0
  331. package/views/dashboard/content/dashboard.stx +383 -0
  332. package/views/dashboard/content/files/index.stx +706 -0
  333. package/views/dashboard/content/pages/index.stx +174 -0
  334. package/views/dashboard/content/posts/index.stx +269 -0
  335. package/views/dashboard/content/seo/index.stx +240 -0
  336. package/views/dashboard/content/tags/index.stx +167 -0
  337. package/views/dashboard/data/activity/index.stx +261 -0
  338. package/views/dashboard/data/dashboard/index.stx +116 -0
  339. package/views/dashboard/data/subscribers.stx +270 -0
  340. package/views/dashboard/data/teams.stx +275 -0
  341. package/views/dashboard/data/users.stx +279 -0
  342. package/views/dashboard/dependencies/index.stx +178 -0
  343. package/views/dashboard/deployments/[id].stx +234 -0
  344. package/views/dashboard/deployments/index.stx +9 -0
  345. package/views/dashboard/dns/index.stx +163 -0
  346. package/views/dashboard/environment/index.stx +283 -0
  347. package/views/dashboard/errors/index.stx +274 -0
  348. package/views/dashboard/forgot-password.stx +57 -0
  349. package/views/dashboard/functions/index.stx +159 -0
  350. package/views/dashboard/health/index.stx +248 -0
  351. package/views/dashboard/inbox/activity.stx +350 -0
  352. package/views/dashboard/inbox/index.stx +452 -0
  353. package/views/dashboard/inbox/settings.stx +290 -0
  354. package/views/dashboard/index.stx +252 -0
  355. package/views/dashboard/insights/index.stx +529 -0
  356. package/views/dashboard/jobs/[id].stx +430 -0
  357. package/views/dashboard/jobs/history.stx +222 -0
  358. package/views/dashboard/jobs/index.stx +214 -0
  359. package/views/dashboard/kanban/[id].stx +899 -0
  360. package/views/dashboard/kanban/index.stx +260 -0
  361. package/views/dashboard/layouts/default.stx +565 -0
  362. package/views/dashboard/layouts/guest.stx +10 -0
  363. package/views/dashboard/login.stx +48 -0
  364. package/views/dashboard/logs/index.stx +540 -0
  365. package/views/dashboard/mailboxes/index.stx +149 -0
  366. package/views/dashboard/management/permissions/index.stx +490 -0
  367. package/views/dashboard/marketing/campaigns/index.stx +604 -0
  368. package/views/dashboard/marketing/lists/index.stx +514 -0
  369. package/views/dashboard/marketing/reviews/index.stx +475 -0
  370. package/views/dashboard/marketing/social-posts/index.stx +560 -0
  371. package/views/dashboard/models/[model].stx +195 -0
  372. package/views/dashboard/models/index.stx +159 -0
  373. package/views/dashboard/monitoring/errors/index.stx +415 -0
  374. package/views/dashboard/notifications/dashboard.stx +383 -0
  375. package/views/dashboard/notifications/email.stx +336 -0
  376. package/views/dashboard/notifications/history.stx +373 -0
  377. package/views/dashboard/notifications/sms.stx +332 -0
  378. package/views/dashboard/packages/index.stx +195 -0
  379. package/views/dashboard/queries/[id].stx +381 -0
  380. package/views/dashboard/queries/history.stx +227 -0
  381. package/views/dashboard/queries/index.stx +335 -0
  382. package/views/dashboard/queries/slow.stx +318 -0
  383. package/views/dashboard/queue/index.stx +427 -0
  384. package/views/dashboard/realtime/index.stx +429 -0
  385. package/views/dashboard/register.stx +46 -0
  386. package/views/dashboard/releases/index.stx +389 -0
  387. package/views/dashboard/requests/index.stx +462 -0
  388. package/views/dashboard/serverless/index.stx +475 -0
  389. package/views/dashboard/servers/[id].stx +299 -0
  390. package/views/dashboard/servers/index.stx +483 -0
  391. package/views/dashboard/settings/billing.stx +50 -0
  392. package/views/dashboard/settings/index.stx +256 -0
  393. package/views/dashboard/settings/mail.stx +252 -0
  394. package/views/dashboard/stores/auth.ts +123 -0
  395. package/views/dashboard/stores/ci.ts +342 -0
  396. package/views/dashboard/stores/index.ts +129 -0
  397. package/views/dashboard/stores/kanban.ts +723 -0
  398. package/views/dashboard/stores/rbac.ts +350 -0
  399. package/views/dashboard/stx.config.ts +34 -0
  400. package/views/dashboard/teams/[id].stx +170 -0
  401. package/views/forum/category.stx +92 -0
  402. package/views/forum/index.stx +209 -0
  403. package/views/forum/new-topic.stx +113 -0
  404. package/views/forum/profile.stx +1 -0
  405. package/views/forum/topic.stx +143 -0
  406. package/views/hello-world/[name].stx +47 -0
  407. package/views/index.stx +21 -0
  408. package/views/system-tray/index.stx +147 -0
@@ -0,0 +1,195 @@
1
+ @extends('layouts/default')
2
+
3
+ @section('content')
4
+ <script client>
5
+ // Dynamic model page (stacksjs/stacks#1838). Previously a 136-line
6
+ // `<script server>` block doing ORM lookup + raw-SQLite fallback at
7
+ // render time; now backed by
8
+ // `GET /api/dashboard/models/{slug}` (Action:
9
+ // `Dashboard/Models/ModelShowAction`) which returns the same shape.
10
+ //
11
+ // The URL slug is pulled with `useNavigation().urlSegment(-1)` instead
12
+ // of `route.params.model` (which only existed inside the old server
13
+ // block).
14
+ import { useNavigation } from '../composables/useNavigation'
15
+
16
+ interface ResponseShape {
17
+ modelName: string
18
+ tableName: string
19
+ rows: Array<Record<string, unknown>>
20
+ columns: string[]
21
+ displayColumns: string[]
22
+ totalCount: number
23
+ source: 'orm' | 'sqlite-fallback'
24
+ error: string | null
25
+ }
26
+
27
+ const modelName = state('')
28
+ const tableName = state('')
29
+ const rows = state<Array<Record<string, unknown>>>([])
30
+ const displayColumns = state<string[]>([])
31
+ const totalCount = state(0)
32
+ const source = state<'orm' | 'sqlite-fallback'>('orm')
33
+ const error = state<string | null>(null)
34
+ const loading = state(true)
35
+
36
+ const sourceLabel = derived(() => {
37
+ return source() === 'orm' ? 'via Stacks ORM' : 'raw SQLite (no model file)'
38
+ })
39
+
40
+ const recordCountLabel = derived(() => {
41
+ return totalCount() + ' record' + (totalCount() === 1 ? '' : 's')
42
+ })
43
+
44
+ function formatDate(value: unknown): string {
45
+ if (!value) return '-'
46
+ try {
47
+ const date = new Date(value as string | number)
48
+ if (Number.isNaN(date.getTime())) return String(value)
49
+ return date.toLocaleDateString('en-US', { year: 'numeric', month: 'short', day: 'numeric', hour: '2-digit', minute: '2-digit' })
50
+ }
51
+ catch {
52
+ return String(value)
53
+ }
54
+ }
55
+
56
+ function formatCell(value: unknown, column: string): string {
57
+ if (value === null || value === undefined) return '-'
58
+ if (column === 'created_at' || column === 'updated_at' || column.endsWith('_at')) return formatDate(value)
59
+ if (typeof value === 'object') {
60
+ try { return JSON.stringify(value).slice(0, 80) }
61
+ catch { return '[object]' }
62
+ }
63
+ if (typeof value === 'string' && value.length > 100) return value.slice(0, 100) + '…'
64
+ return String(value)
65
+ }
66
+
67
+ function cellValue(row: Record<string, unknown>, col: string): string {
68
+ return formatCell(row[col], col)
69
+ }
70
+
71
+ async function load() {
72
+ loading.set(true)
73
+ error.set(null)
74
+ const slug = useNavigation().urlSegment(-1)
75
+ if (!slug) {
76
+ error.set('Missing model slug in URL.')
77
+ loading.set(false)
78
+ return
79
+ }
80
+ try {
81
+ const res = await fetch(`/api/dashboard/models/${encodeURIComponent(slug)}`, {
82
+ headers: { accept: 'application/json' },
83
+ })
84
+ if (!res.ok) throw new Error(`HTTP ${res.status}`)
85
+ const data = await res.json() as Partial<ResponseShape>
86
+ modelName.set(data.modelName ?? '')
87
+ tableName.set(data.tableName ?? '')
88
+ rows.set(data.rows ?? [])
89
+ displayColumns.set(data.displayColumns ?? [])
90
+ totalCount.set(data.totalCount ?? 0)
91
+ source.set(data.source ?? 'orm')
92
+ error.set(data.error ?? null)
93
+ }
94
+ catch (e) {
95
+ error.set(e instanceof Error ? e.message : String(e))
96
+ }
97
+ finally {
98
+ loading.set(false)
99
+ }
100
+ }
101
+
102
+ void load()
103
+ </script>
104
+
105
+ <div class="p-6 space-y-6">
106
+
107
+ <PageHeader :title="modelName()" :description="recordCountLabel() + ' · ' + sourceLabel()">
108
+ <template #actions>
109
+ <Button variant="primary">
110
+ <div class="h-4 w-4 i-hugeicons-add-01"></div>
111
+ New <span :text="modelName()"></span>
112
+ </Button>
113
+ </template>
114
+ </PageHeader>
115
+
116
+ <div :if="error()" class="p-6 bg-red-50 dark:bg-red-900/20 border border-red-200 rounded-xl dark:border-red-800">
117
+ <div class="flex gap-3 items-start">
118
+ <span class="flex-shrink-0 mt-0.5 h-5 w-5 text-red-500 i-hugeicons-alert-02"></span>
119
+ <div>
120
+ <h3 class="font-medium text-red-800 dark:text-red-200">Couldn't load <span :text="modelName()"></span></h3>
121
+ <p class="mt-1 text-red-600 text-sm dark:text-red-300" :text="error()"></p>
122
+ <p class="mt-2 text-red-500 text-xs dark:text-red-400">
123
+ Looked for an ORM model named <code :text="modelName()"></code> and a SQLite table named <code :text="tableName()"></code>.
124
+ </p>
125
+ </div>
126
+ </div>
127
+ </div>
128
+
129
+ <div :if="!error() && !loading() && rows().length === 0" class="p-12 text-center bg-white dark:bg-neutral-900 border border-neutral-200 rounded-xl dark:border-neutral-800">
130
+ <span class="mx-auto h-12 w-12 text-neutral-300 dark:text-neutral-600 i-hugeicons-database-01"></span>
131
+ <h3 class="mt-4 font-medium text-lg text-neutral-900 dark:text-white">No <span :text="modelName()"></span> records</h3>
132
+ <p class="mt-2 text-neutral-500 text-sm dark:text-neutral-400">Get started by creating a new <span :text="modelName()"></span>.</p>
133
+ </div>
134
+
135
+ <div :if="!error() && rows().length > 0" class="overflow-hidden bg-white dark:bg-neutral-900 border border-neutral-200 rounded-xl dark:border-neutral-800">
136
+ <div class="overflow-x-auto">
137
+ <table class="min-w-full divide-neutral-200 divide-y dark:divide-neutral-800">
138
+ <thead class="bg-neutral-50 dark:bg-neutral-800/50">
139
+ <tr>
140
+ <template :for="column in displayColumns">
141
+ <th class="px-4 py-3 font-medium text-left text-neutral-500 text-xs tracking-wider uppercase whitespace-nowrap dark:text-neutral-400">
142
+ {{ column.replace(/_/g, ' ') }}
143
+ </th>
144
+ </template>
145
+ <th class="px-4 py-3 font-medium text-neutral-500 text-right text-xs tracking-wider uppercase dark:text-neutral-400">Actions</th>
146
+ </tr>
147
+ </thead>
148
+ <tbody class="divide-neutral-200 divide-y dark:divide-neutral-800">
149
+ <template :for="row in rows">
150
+ <tr class="hover:bg-neutral-50 dark:hover:bg-neutral-800/50 transition-colors">
151
+ <template :for="column in displayColumns">
152
+ <td class="px-4 py-3 max-w-xs text-neutral-900 text-sm truncate whitespace-nowrap dark:text-neutral-100">
153
+ {{ cellValue(row, column) }}
154
+ </td>
155
+ </template>
156
+ <td class="px-4 py-3 text-right">
157
+ <div class="flex gap-2 items-center justify-end">
158
+ <button class="p-1.5 text-neutral-400 hover:text-neutral-600 dark:hover:text-neutral-300 transition-colors" title="View">
159
+ <span class="h-4 w-4 i-hugeicons-view"></span>
160
+ </button>
161
+ <button class="p-1.5 text-neutral-400 hover:text-blue-600 transition-colors" title="Edit">
162
+ <span class="h-4 w-4 i-hugeicons-edit-02"></span>
163
+ </button>
164
+ <button class="p-1.5 text-neutral-400 hover:text-red-600 transition-colors" title="Delete">
165
+ <span class="h-4 w-4 i-hugeicons-delete-02"></span>
166
+ </button>
167
+ </div>
168
+ </td>
169
+ </tr>
170
+ </template>
171
+ </tbody>
172
+ </table>
173
+ </div>
174
+
175
+ <div class="px-4 py-3 bg-neutral-50 dark:bg-neutral-800/30 border-neutral-200 border-t dark:border-neutral-800">
176
+ <div class="flex items-center justify-between">
177
+ <p class="text-neutral-500 text-sm dark:text-neutral-400">
178
+ Showing <span class="font-medium">{{ rows().length }}</span> of <span class="font-medium">{{ totalCount() }}</span>
179
+ </p>
180
+ <div class="flex gap-2 items-center">
181
+ <button class="px-3 py-1.5 font-medium text-neutral-600 text-sm dark:text-neutral-300 bg-white dark:bg-neutral-800 hover:bg-neutral-50 dark:hover:bg-neutral-700 border border-neutral-300 rounded-lg dark:border-neutral-600 disabled:opacity-50 transition-colors" disabled>
182
+ Previous
183
+ </button>
184
+ <button class="px-3 py-1.5 font-medium text-neutral-600 text-sm dark:text-neutral-300 bg-white dark:bg-neutral-800 hover:bg-neutral-50 dark:hover:bg-neutral-700 border border-neutral-300 rounded-lg dark:border-neutral-600 transition-colors">
185
+ Next
186
+ </button>
187
+ </div>
188
+ </div>
189
+ </div>
190
+ </div>
191
+ </div>
192
+ <style>
193
+ .overflow-x-auto { -webkit-overflow-scrolling: touch; }
194
+ </style>
195
+ @endsection
@@ -0,0 +1,159 @@
1
+ @extends('layouts/default')
2
+
3
+ @section('content')
4
+ <script client>
5
+ // Models overview (stacksjs/stacks#1838). Previously a 142-line
6
+ // `<script server>` block that walked `app/Models/` + the framework
7
+ // defaults tree, imported each model dynamically via `loadModel`, and
8
+ // counted rows with `safeCount` — all inline at render time.
9
+ //
10
+ // Now backed by `GET /api/dashboard/models` (Action:
11
+ // `Dashboard/Models/ModelsIndexAction`), which does the same work
12
+ // server-side and returns grouped JSON. The page renders empty
13
+ // counts on initial paint and populates after the fetch resolves.
14
+ interface ModelRow {
15
+ name: string
16
+ table: string
17
+ href: string
18
+ count: number
19
+ category: string
20
+ source: 'userland' | 'framework'
21
+ }
22
+
23
+ interface ModelGroup {
24
+ key: string
25
+ label: string
26
+ models: ModelRow[]
27
+ countLabel: string
28
+ }
29
+
30
+ const totalModels = state(0)
31
+ const totalRecords = state(0)
32
+ const userlandCount = state(0)
33
+ const categoryGroups = state<ModelGroup[]>([])
34
+ const loading = state(true)
35
+ const error = state<string | null>(null)
36
+
37
+ async function loadModels() {
38
+ loading.set(true)
39
+ error.set(null)
40
+ try {
41
+ const res = await fetch('/api/dashboard/models', {
42
+ headers: { accept: 'application/json' },
43
+ })
44
+ if (!res.ok) throw new Error(`HTTP ${res.status}`)
45
+ const data = await res.json() as {
46
+ totalModels?: number
47
+ totalRecords?: number
48
+ userlandCount?: number
49
+ categoryGroups?: ModelGroup[]
50
+ }
51
+ totalModels.set(data.totalModels ?? 0)
52
+ totalRecords.set(data.totalRecords ?? 0)
53
+ userlandCount.set(data.userlandCount ?? 0)
54
+ categoryGroups.set(data.categoryGroups ?? [])
55
+ }
56
+ catch (e) {
57
+ error.set(e instanceof Error ? e.message : String(e))
58
+ }
59
+ finally {
60
+ loading.set(false)
61
+ }
62
+ }
63
+
64
+ void loadModels()
65
+ </script>
66
+
67
+ <div class="p-6 space-y-6">
68
+
69
+ <PageHeader title="Models" :description="totalModels() + ' models · ' + userlandCount() + ' userland · ' + totalRecords().toLocaleString() + ' total records'">
70
+ <template #actions>
71
+ <Button variant="primary">
72
+ <div class="h-4 w-4 i-hugeicons-add-01"></div>
73
+ New Model
74
+ </Button>
75
+ </template>
76
+ </PageHeader>
77
+
78
+ <div :if="error()" class="px-4 py-3 text-red-700 text-sm dark:text-red-300 bg-red-50 dark:bg-red-950 border border-red-300 rounded-md dark:border-red-800">
79
+ <span :text="error()"></span>
80
+ </div>
81
+
82
+ <div class="grid gap-4 grid-cols-1 md:grid-cols-3">
83
+ <div class="p-5 bg-white dark:bg-neutral-900 border border-neutral-200 rounded-xl dark:border-neutral-800">
84
+ <div class="flex gap-4 items-center">
85
+ <div class="p-3 bg-blue-100 dark:bg-blue-900/30 rounded-lg">
86
+ <span class="h-6 w-6 text-blue-600 dark:text-blue-400 i-hugeicons-database"></span>
87
+ </div>
88
+ <div>
89
+ <p class="text-neutral-500 text-sm dark:text-neutral-400">Total Models</p>
90
+ <p class="font-semibold text-2xl text-neutral-900 dark:text-white">{{ totalModels() }}</p>
91
+ </div>
92
+ </div>
93
+ </div>
94
+ <div class="p-5 bg-white dark:bg-neutral-900 border border-neutral-200 rounded-xl dark:border-neutral-800">
95
+ <div class="flex gap-4 items-center">
96
+ <div class="p-3 bg-green-100 dark:bg-green-900/30 rounded-lg">
97
+ <span class="h-6 w-6 text-green-600 dark:text-green-400 i-hugeicons-rows-01"></span>
98
+ </div>
99
+ <div>
100
+ <p class="text-neutral-500 text-sm dark:text-neutral-400">Total Records</p>
101
+ <p class="font-semibold text-2xl text-neutral-900 dark:text-white">{{ totalRecords().toLocaleString() }}</p>
102
+ </div>
103
+ </div>
104
+ </div>
105
+ <div class="p-5 bg-white dark:bg-neutral-900 border border-neutral-200 rounded-xl dark:border-neutral-800">
106
+ <div class="flex gap-4 items-center">
107
+ <div class="p-3 bg-purple-100 dark:bg-purple-900/30 rounded-lg">
108
+ <span class="h-6 w-6 text-purple-600 dark:text-purple-400 i-hugeicons-folder-02"></span>
109
+ </div>
110
+ <div>
111
+ <p class="text-neutral-500 text-sm dark:text-neutral-400">Your Models</p>
112
+ <p class="font-semibold text-2xl text-neutral-900 dark:text-white">{{ userlandCount() }}</p>
113
+ </div>
114
+ </div>
115
+ </div>
116
+ </div>
117
+
118
+ <template :for="group in categoryGroups">
119
+ <div class="space-y-3">
120
+ <div class="flex items-baseline justify-between">
121
+ <h3 class="font-semibold text-base text-neutral-900 dark:text-white">{{ group.label }}</h3>
122
+ <span class="text-neutral-500 text-xs dark:text-neutral-400">{{ group.countLabel }}</span>
123
+ </div>
124
+ <div class="grid gap-4 grid-cols-1 md:grid-cols-2 lg:grid-cols-3">
125
+ <template :for="m in group.models">
126
+ <a
127
+ :href="m.href"
128
+ class="p-5 bg-white dark:bg-neutral-900 border border-neutral-200 rounded-xl dark:border-neutral-800 hover:border-blue-300 dark:hover:border-blue-700 hover:shadow-sm transition-all group"
129
+ >
130
+ <div class="flex items-start justify-between">
131
+ <div class="flex gap-3 items-center">
132
+ <div class="p-2 bg-neutral-100 dark:bg-neutral-800 group-hover:bg-blue-100 dark:group-hover:bg-blue-900/30 rounded-lg transition-colors">
133
+ <span class="h-5 w-5 text-neutral-500 dark:text-neutral-400 group-hover:text-blue-600 dark:group-hover:text-blue-400 i-hugeicons-database-01"></span>
134
+ </div>
135
+ <div>
136
+ <h3 class="font-medium text-neutral-900 dark:text-white group-hover:text-blue-600 dark:group-hover:text-blue-400 transition-colors">{{ m.name }}</h3>
137
+ <p class="font-mono text-neutral-500 text-xs dark:text-neutral-400">{{ m.table }}</p>
138
+ </div>
139
+ </div>
140
+ <span class="h-5 w-5 text-neutral-300 dark:text-neutral-600 group-hover:text-blue-500 transition-colors i-hugeicons-arrow-right-01"></span>
141
+ </div>
142
+ <div class="flex items-center justify-between mt-4 pt-4 text-sm border-neutral-100 border-t dark:border-neutral-800">
143
+ <span class="text-neutral-500 dark:text-neutral-400">Records</span>
144
+ <span class="font-medium text-neutral-900 dark:text-white">{{ m.count.toLocaleString() }}</span>
145
+ </div>
146
+ </a>
147
+ </template>
148
+ </div>
149
+ </div>
150
+ </template>
151
+
152
+ <div :if="!loading() && totalModels() === 0" class="p-12 text-center bg-white dark:bg-neutral-900 border border-neutral-200 rounded-xl dark:border-neutral-800">
153
+ <span class="mx-auto h-12 w-12 text-neutral-300 dark:text-neutral-600 i-hugeicons-database-01"></span>
154
+ <h3 class="mt-4 font-medium text-lg text-neutral-900 dark:text-white">No models found</h3>
155
+ <p class="mt-2 text-neutral-500 text-sm dark:text-neutral-400">Create your first model with <code>./buddy make:model</code> to get started.</p>
156
+ </div>
157
+ </div>
158
+
159
+ @endsection