@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,329 @@
1
+ @extends('layouts/default')
2
+
3
+ @section('content')
4
+ @title('Dashboard - Commerce Sales Analytics')
5
+ <PageLayout>
6
+ <div class="flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between mb-6">
7
+ <div class="flex items-center space-x-2">
8
+ <div class="h-5 w-5 text-gray-500 dark:text-neutral-400 i-hugeicons-calendar-03"></div>
9
+ <span class="font-medium text-gray-700 text-sm dark:text-neutral-300">{{ dateRangeDisplay }}</span>
10
+ </div>
11
+
12
+ <div class="flex flex-wrap gap-2 items-center">
13
+ <span class="text-gray-500 text-sm dark:text-neutral-400">compared to</span>
14
+ <div class="relative">
15
+ <select x-model="comparisonType" class="block pl-3 pr-10 py-1.5 w-full text-gray-900 sm:leading-6 sm:text-sm dark:text-white dark:bg-neutral-800 border-0 ring-1 ring-gray-300 ring-inset rounded-md dark:ring-neutral-700 focus:ring-2 focus:ring-blue-600 focus:ring-inset">
16
+ <option value="no-comparison">No comparison</option>
17
+ <option value="previous-period">Previous period</option>
18
+ <option value="previous-year">Previous year</option>
19
+ </select>
20
+ </div>
21
+ <button type="button" class="inline-flex items-center px-3 py-1.5 font-semibold text-gray-900 text-sm dark:text-white bg-white dark:bg-neutral-700 hover:bg-gray-50 dark:hover:bg-neutral-600 ring-1 ring-gray-300 ring-inset rounded-md dark:ring-neutral-600 shadow-sm">
22
+ <div class="mr-1 h-4 w-4 i-hugeicons-settings-01"></div>
23
+ Auto
24
+ </button>
25
+ </div>
26
+ </div>
27
+
28
+ <div class="grid gap-4 grid-cols-1 sm:grid-cols-2 lg:grid-cols-6 mb-8 p-4 bg-black dark:bg-neutral-900 rounded-lg">
29
+ <div class="flex flex-col items-center justify-center">
30
+ <div class="font-bold text-4xl text-white">$1.25M</div>
31
+ <div class="text-gray-400 text-sm">Total Revenue</div>
32
+ </div>
33
+ <div class="flex flex-col items-center justify-center">
34
+ <div class="font-bold text-4xl text-white">34.6k</div>
35
+ <div class="text-gray-400 text-sm">Total Orders</div>
36
+ </div>
37
+ <div class="flex flex-col items-center justify-center">
38
+ <div class="font-bold text-4xl text-white">${{ salesOverview.averageOrderValue }}</div>
39
+ <div class="text-gray-400 text-sm">Avg Order Value</div>
40
+ </div>
41
+ <div class="flex flex-col items-center justify-center">
42
+ <div class="font-bold text-4xl text-white">{{ salesOverview.conversionRate }}</div>
43
+ <div class="text-gray-400 text-sm">Conversion Rate</div>
44
+ </div>
45
+ <div class="flex flex-col items-center justify-center">
46
+ <div class="font-bold text-4xl text-white">{{ salesOverview.returnRate }}</div>
47
+ <div class="text-gray-400 text-sm">Return Rate</div>
48
+ </div>
49
+ <div class="flex flex-col items-center justify-center">
50
+ <div class="font-bold text-4xl text-white">{{ salesOverview.repeatCustomerRate }}</div>
51
+ <div class="text-gray-400 text-sm">Repeat Customers</div>
52
+ </div>
53
+ </div>
54
+
55
+ <div class="mb-8 p-4 bg-white dark:bg-neutral-800 rounded-lg shadow">
56
+ <div class="mb-4">
57
+ <h3 class="font-medium leading-6 text-gray-900 text-lg dark:text-white">Sales Overview</h3>
58
+ <p class="mt-1 text-gray-500 text-sm dark:text-neutral-400">Revenue and order volume over time</p>
59
+ </div>
60
+ <div class="h-80 w-full">
61
+ <canvas id="commerce_sales_chart"></canvas>
62
+ </div>
63
+ </div>
64
+
65
+ <div class="grid gap-8 grid-cols-1 lg:grid-cols-2">
66
+ <div>
67
+ <div class="mb-4">
68
+ <h3 class="font-medium text-gray-900 text-lg dark:text-white">Top Products</h3>
69
+ </div>
70
+ <div class="overflow-hidden border border-gray-200 rounded-lg dark:border-neutral-700">
71
+ <table class="min-w-full divide-gray-200 divide-y dark:divide-neutral-700">
72
+ <thead class="bg-gray-50 dark:bg-neutral-700/50">
73
+ <tr>
74
+ <th scope="col" class="px-4 py-3 font-medium text-gray-500 text-left text-xs tracking-wider uppercase dark:text-neutral-300">Product</th>
75
+ <th scope="col" class="px-4 py-3 font-medium text-gray-500 text-right text-xs tracking-wider uppercase dark:text-neutral-300">Sales</th>
76
+ <th scope="col" class="px-4 py-3 font-medium text-gray-500 text-right text-xs tracking-wider uppercase dark:text-neutral-300">Revenue</th>
77
+ <th scope="col" class="px-4 py-3 font-medium text-gray-500 text-right text-xs tracking-wider uppercase dark:text-neutral-300">%</th>
78
+ </tr>
79
+ </thead>
80
+ <tbody class="bg-white dark:bg-neutral-800 divide-gray-200 divide-y dark:divide-neutral-700">
81
+ <template :for="product in productsData">
82
+ <tr class="relative hover:bg-gray-50 dark:hover:bg-neutral-700/50">
83
+ <td class="px-4 py-3 text-gray-900 text-sm whitespace-nowrap dark:text-white">
84
+ <div class="absolute inset-0 bg-green-100/50 dark:bg-green-900/50" :style="'width: ' + product.percentage + '%'"></div>
85
+ <span class="relative z-10">{{ product.name }}</span>
86
+ <span class="block relative z-10 text-gray-500 text-xs dark:text-neutral-400">{{ product.sku }}</span>
87
+ </td>
88
+ <td class="relative px-4 py-3 text-gray-500 text-right text-sm whitespace-nowrap dark:text-neutral-300">
89
+ <span class="relative z-10">{{ formatNumber(product.sales) }}</span>
90
+ </td>
91
+ <td class="relative px-4 py-3 text-gray-500 text-right text-sm whitespace-nowrap dark:text-neutral-300">
92
+ <span class="relative z-10">{{ formatCurrency(product.revenue) }}</span>
93
+ </td>
94
+ <td class="relative px-4 py-3 text-gray-500 text-right text-sm whitespace-nowrap dark:text-neutral-300">
95
+ <span class="relative z-10">{{ product.percentage }}%</span>
96
+ </td>
97
+ </tr>
98
+ </template>
99
+ </tbody>
100
+ </table>
101
+ </div>
102
+ <div class="flex justify-end mt-2">
103
+ <StxLink to="/dashboard/commerce/analytics/sales/products" class="text-blue-600 text-sm dark:text-blue-400 hover:text-blue-800 dark:hover:text-blue-300">View all products</StxLink>
104
+ </div>
105
+ </div>
106
+
107
+ <div>
108
+ <div class="mb-4">
109
+ <h3 class="font-medium text-gray-900 text-lg dark:text-white">Categories</h3>
110
+ </div>
111
+ <div class="overflow-hidden border border-gray-200 rounded-lg dark:border-neutral-700">
112
+ <table class="min-w-full divide-gray-200 divide-y dark:divide-neutral-700">
113
+ <thead class="bg-gray-50 dark:bg-neutral-700/50">
114
+ <tr>
115
+ <th scope="col" class="px-4 py-3 font-medium text-gray-500 text-left text-xs tracking-wider uppercase dark:text-neutral-300">Category</th>
116
+ <th scope="col" class="px-4 py-3 font-medium text-gray-500 text-right text-xs tracking-wider uppercase dark:text-neutral-300">Sales</th>
117
+ <th scope="col" class="px-4 py-3 font-medium text-gray-500 text-right text-xs tracking-wider uppercase dark:text-neutral-300">Revenue</th>
118
+ <th scope="col" class="px-4 py-3 font-medium text-gray-500 text-right text-xs tracking-wider uppercase dark:text-neutral-300">%</th>
119
+ </tr>
120
+ </thead>
121
+ <tbody class="bg-white dark:bg-neutral-800 divide-gray-200 divide-y dark:divide-neutral-700">
122
+ <template :for="category in categoriesData">
123
+ <tr class="relative hover:bg-gray-50 dark:hover:bg-neutral-700/50">
124
+ <td class="px-4 py-3 text-gray-900 text-sm whitespace-nowrap dark:text-white">
125
+ <div class="absolute inset-0 bg-blue-100/50 dark:bg-blue-900/50" :style="'width: ' + category.percentage + '%'"></div>
126
+ <span class="relative z-10">{{ category.name }}</span>
127
+ </td>
128
+ <td class="relative px-4 py-3 text-gray-500 text-right text-sm whitespace-nowrap dark:text-neutral-300">
129
+ <span class="relative z-10">{{ formatNumber(category.sales) }}</span>
130
+ </td>
131
+ <td class="relative px-4 py-3 text-gray-500 text-right text-sm whitespace-nowrap dark:text-neutral-300">
132
+ <span class="relative z-10">{{ formatCurrency(category.revenue) }}</span>
133
+ </td>
134
+ <td class="relative px-4 py-3 text-gray-500 text-right text-sm whitespace-nowrap dark:text-neutral-300">
135
+ <span class="relative z-10">{{ category.percentage }}%</span>
136
+ </td>
137
+ </tr>
138
+ </template>
139
+ </tbody>
140
+ </table>
141
+ </div>
142
+ <div class="flex justify-end mt-2">
143
+ <StxLink to="/dashboard/commerce/analytics/sales/categories" class="text-blue-600 text-sm dark:text-blue-400 hover:text-blue-800 dark:hover:text-blue-300">View all categories</StxLink>
144
+ </div>
145
+ </div>
146
+ </div>
147
+
148
+ <div class="mt-8">
149
+ <div class="mb-4">
150
+ <h3 class="font-medium text-gray-900 text-lg dark:text-white">Top Customers</h3>
151
+ </div>
152
+ <div class="overflow-hidden border border-gray-200 rounded-lg dark:border-neutral-700">
153
+ <table class="min-w-full divide-gray-200 divide-y dark:divide-neutral-700">
154
+ <thead class="bg-gray-50 dark:bg-neutral-700/50">
155
+ <tr>
156
+ <th scope="col" class="px-4 py-3 font-medium text-gray-500 text-left text-xs tracking-wider uppercase dark:text-neutral-300">Customer</th>
157
+ <th scope="col" class="px-4 py-3 font-medium text-gray-500 text-right text-xs tracking-wider uppercase dark:text-neutral-300">Orders</th>
158
+ <th scope="col" class="px-4 py-3 font-medium text-gray-500 text-right text-xs tracking-wider uppercase dark:text-neutral-300">Total Spent</th>
159
+ <th scope="col" class="px-4 py-3 font-medium text-gray-500 text-right text-xs tracking-wider uppercase dark:text-neutral-300">%</th>
160
+ </tr>
161
+ </thead>
162
+ <tbody class="bg-white dark:bg-neutral-800 divide-gray-200 divide-y dark:divide-neutral-700">
163
+ <template :for="customer in customersData">
164
+ <tr class="relative hover:bg-gray-50 dark:hover:bg-neutral-700/50">
165
+ <td class="px-4 py-3 text-gray-900 text-sm whitespace-nowrap dark:text-white">
166
+ <div class="absolute inset-0 bg-purple-100/50 dark:bg-purple-900/50" :style="'width: ' + customer.percentage + '%'"></div>
167
+ <span class="relative z-10">{{ customer.name }}</span>
168
+ </td>
169
+ <td class="relative px-4 py-3 text-gray-500 text-right text-sm whitespace-nowrap dark:text-neutral-300">
170
+ <span class="relative z-10">{{ customer.orders }}</span>
171
+ </td>
172
+ <td class="relative px-4 py-3 text-gray-500 text-right text-sm whitespace-nowrap dark:text-neutral-300">
173
+ <span class="relative z-10">{{ formatCurrency(customer.spent) }}</span>
174
+ </td>
175
+ <td class="relative px-4 py-3 text-gray-500 text-right text-sm whitespace-nowrap dark:text-neutral-300">
176
+ <span class="relative z-10">{{ customer.percentage }}%</span>
177
+ </td>
178
+ </tr>
179
+ </template>
180
+ </tbody>
181
+ </table>
182
+ </div>
183
+ <div class="flex justify-end mt-2">
184
+ <StxLink to="/dashboard/commerce/analytics/sales/customers" class="text-blue-600 text-sm dark:text-blue-400 hover:text-blue-800 dark:hover:text-blue-300">View all customers</StxLink>
185
+ </div>
186
+ </div>
187
+ </PageLayout>
188
+ <script client>
189
+
190
+ interface ChartLike { destroy: () => void }
191
+ type ChartCtor = new (canvas: HTMLElement, config: { type: string, data: unknown, options?: unknown }) => ChartLike
192
+
193
+ // Static analytics tables + overview — moved out of the former
194
+ // `<script server>` block (stacksjs/stacks#1838).
195
+ const productsRaw = [
196
+ { name: 'Smartphone X Pro', sku: 'SP-X-PRO', sales: 1245, revenue: 623450 },
197
+ { name: 'Wireless Earbuds', sku: 'WE-200', sales: 3567, revenue: 178350 },
198
+ { name: 'Smart Watch Series 5', sku: 'SW-S5', sales: 2134, revenue: 149380 },
199
+ { name: 'Laptop Ultra Slim', sku: 'LT-US-15', sales: 876, revenue: 131400 },
200
+ { name: 'Bluetooth Speaker', sku: 'BS-100', sales: 1543, revenue: 61720 },
201
+ { name: 'Fitness Tracker', sku: 'FT-300', sales: 1876, revenue: 56280 },
202
+ { name: 'Tablet Pro 12', sku: 'TB-P12', sales: 654, revenue: 45780 },
203
+ { name: 'Gaming Mouse', sku: 'GM-RGB', sales: 1234, revenue: 43190 },
204
+ { name: 'Mechanical Keyboard', sku: 'KB-MECH', sales: 987, revenue: 39480 },
205
+ { name: 'External SSD 1TB', sku: 'SSD-1TB', sales: 765, revenue: 38250 },
206
+ ]
207
+
208
+ const categoriesRaw = [
209
+ { name: 'Electronics', sales: 5678, revenue: 850200 },
210
+ { name: 'Clothing', sales: 4532, revenue: 226600 },
211
+ { name: 'Home & Kitchen', sales: 3210, revenue: 160500 },
212
+ { name: 'Beauty & Personal Care', sales: 2876, revenue: 143800 },
213
+ { name: 'Sports & Outdoors', sales: 1987, revenue: 99350 },
214
+ { name: 'Books', sales: 1654, revenue: 33080 },
215
+ { name: 'Toys & Games', sales: 1432, revenue: 57280 },
216
+ { name: 'Health & Household', sales: 1234, revenue: 61700 },
217
+ { name: 'Automotive', sales: 876, revenue: 43800 },
218
+ { name: 'Pet Supplies', sales: 765, revenue: 38250 },
219
+ ]
220
+
221
+ const customersRaw = [
222
+ { name: 'John Smith', orders: 24, spent: 4800 },
223
+ { name: 'Sarah Johnson', orders: 18, spent: 3600 },
224
+ { name: 'Michael Brown', orders: 15, spent: 3000 },
225
+ { name: 'Emily Davis', orders: 12, spent: 2400 },
226
+ { name: 'David Wilson', orders: 10, spent: 2000 },
227
+ ]
228
+
229
+ const totalProductRevenue = productsRaw.reduce((s, p) => s + p.revenue, 0)
230
+ const totalCategoryRevenue = categoriesRaw.reduce((s, c) => s + c.revenue, 0)
231
+ const totalCustomerSpent = customersRaw.reduce((s, c) => s + c.spent, 0)
232
+
233
+ const productsData = productsRaw.map(p => ({ ...p, percentage: Math.round((p.revenue / totalProductRevenue) * 100) }))
234
+ const categoriesData = categoriesRaw.map(c => ({ ...c, percentage: Math.round((c.revenue / totalCategoryRevenue) * 100) }))
235
+ const customersData = customersRaw.map(c => ({ ...c, percentage: Math.round((c.spent / totalCustomerSpent) * 100) }))
236
+
237
+ const salesOverview = {
238
+ averageOrderValue: 36.04,
239
+ conversionRate: '2.4%',
240
+ returnRate: '5.2%',
241
+ repeatCustomerRate: '28%',
242
+ }
243
+
244
+ function formatNumber(n) {
245
+ return n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',')
246
+ }
247
+
248
+ function formatCurrency(amount) {
249
+ return `$${amount.toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 })}`
250
+ }
251
+
252
+ const dateRangeDisplay = state('All Time: Sep 7, 2023 to Mar 6, 2025')
253
+ const comparisonType = state('no-comparison')
254
+
255
+ const salesData = state<Array<{ date: string, revenue: number, orders: number }>>([
256
+ { date: '2023-11-01', revenue: 25000, orders: 980 },
257
+ { date: '2023-12-01', revenue: 35000, orders: 1220 },
258
+ { date: '2024-01-01', revenue: 42000, orders: 1440 },
259
+ { date: '2024-02-01', revenue: 68000, orders: 2100 },
260
+ { date: '2024-03-01', revenue: 85000, orders: 2700 },
261
+ { date: '2024-04-01', revenue: 65000, orders: 1900 },
262
+ { date: '2024-05-01', revenue: 45000, orders: 1200 },
263
+ { date: '2024-06-01', revenue: 30000, orders: 800 },
264
+ { date: '2024-07-01', revenue: 45000, orders: 1200 },
265
+ { date: '2024-08-01', revenue: 30000, orders: 800 },
266
+ { date: '2024-09-01', revenue: 30000, orders: 800 },
267
+ { date: '2024-10-01', revenue: 45000, orders: 1200 },
268
+ { date: '2024-11-01', revenue: 24000, orders: 600 },
269
+ { date: '2024-12-01', revenue: 90000, orders: 2300 },
270
+ { date: '2025-01-01', revenue: 30000, orders: 800 },
271
+ { date: '2025-02-01', revenue: 18000, orders: 400 },
272
+ ])
273
+
274
+ let chartHandle: { destroy: () => void } | null = null
275
+
276
+ onMount(async () => {
277
+ const { Chart, registerables } = await import('@stacksjs/charts')
278
+ Chart.register(...registerables)
279
+ const Ctor = Chart as unknown as ChartCtor
280
+
281
+ chartHandle = useChart({
282
+ Chart: Ctor,
283
+ id: 'commerce_sales_chart',
284
+ type: 'line',
285
+ data: {
286
+ labels: salesData().map(item => item.date),
287
+ datasets: [
288
+ { label: 'Revenue ($)', data: salesData().map(item => item.revenue), backgroundColor: 'rgba(16, 185, 129, 0.3)', borderColor: 'rgba(16, 185, 129, 0.8)', borderWidth: 2, tension: 0.4, fill: true, yAxisID: 'y' },
289
+ { label: 'Orders', data: salesData().map(item => item.orders), backgroundColor: 'rgba(245, 158, 11, 0.1)', borderColor: 'rgba(245, 158, 11, 0.8)', borderWidth: 2, tension: 0.4, fill: false, yAxisID: 'y1' },
290
+ ],
291
+ },
292
+ options: {
293
+ responsive: true,
294
+ maintainAspectRatio: false,
295
+ scales: {
296
+ x: { grid: { display: false }, ticks: { maxTicksLimit: 4 } },
297
+ y: { type: 'linear', display: true, position: 'left', beginAtZero: true, grid: { borderDash: [2, 4], color: 'rgba(160, 174, 192, 0.2)' }, ticks: { maxTicksLimit: 6, callback: (value: number | string) => `$${Number(value).toLocaleString()}` } },
298
+ y1: { type: 'linear', display: true, position: 'right', beginAtZero: true, grid: { display: false }, ticks: { maxTicksLimit: 6 } },
299
+ },
300
+ plugins: {
301
+ legend: { display: true, position: 'top' },
302
+ tooltip: {
303
+ mode: 'index',
304
+ intersect: false,
305
+ callbacks: {
306
+ label(context: { dataset: { label?: string, yAxisID?: string }, parsed: { y: number } }) {
307
+ let label = context.dataset.label || ''
308
+ if (label)
309
+ label += ': '
310
+ if (context.dataset.yAxisID === 'y')
311
+ label += `$${context.parsed.y.toLocaleString()}`
312
+ else
313
+ label += String(context.parsed.y)
314
+ return label
315
+ },
316
+ },
317
+ },
318
+ },
319
+ },
320
+ })
321
+ })
322
+
323
+ onDestroy(() => {
324
+ chartHandle?.destroy()
325
+ chartHandle = null
326
+ })
327
+ </script>
328
+
329
+ @endsection