@stacksjs/defaults 0.70.207 → 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,416 @@
1
+ ---
2
+ name: stacks-strings
3
+ description: Use when working with string utilities in Stacks — case conversion (camelCase, PascalCase, snake_case, kebab-case, CONSTANT_CASE, Train-Case, etc.), pluralization, string validation (email, URL, UUID, credit card, etc.), slug generation, random strings, template interpolation, or the Str facade. Covers @stacksjs/strings.
4
+ license: MIT
5
+ compatibility: Bun >= 1.3.0, TypeScript
6
+ allowed-tools: Read Edit Write Bash Grep Glob
7
+ ---
8
+
9
+ # Stacks Strings
10
+
11
+ ## Key Paths
12
+ - Core package: `storage/framework/core/strings/src/`
13
+ - Package: `@stacksjs/strings`
14
+ - Entry: `storage/framework/core/strings/src/string.ts` (re-exports all submodules)
15
+
16
+ ## Architecture
17
+
18
+ The package re-exports from these submodules:
19
+ - `case.ts` — case conversion functions (camelCase, pascalCase, snakeCase, etc.)
20
+ - `pluralize.ts` — English pluralization/singularization with rule engine
21
+ - `slug.ts` — URL slug generation with extensive character map
22
+ - `utils.ts` — random strings, template interpolation, slash, prefix/suffix, truncate, detect-indent, detect-newline
23
+ - `macro.ts` — `Str` and `str` facade objects
24
+ - `validators.ts` — re-exports from `is.ts` (native string validators)
25
+ - `sponge-case.ts` — random upper/lower case
26
+ - `swap-case.ts` — swap upper/lower case
27
+ - `title-case.ts` — intelligent title case with small word handling
28
+
29
+ The top-level `index.ts` does:
30
+ ```typescript
31
+ export * from './string'
32
+ export * as string from './string'
33
+ ```
34
+
35
+ And `string.ts` does:
36
+ ```typescript
37
+ export * from './case'
38
+ export * from './helpers'
39
+ export * from './macro'
40
+ export * from './pluralize'
41
+ export * from './slug'
42
+ export * from './utils'
43
+ export * from './validators'
44
+ ```
45
+
46
+ ## Case Conversion Functions
47
+
48
+ All accept `(input: string, options?: CaseOptions)` and use Unicode-aware word boundary detection via regex patterns (`\p{Ll}`, `\p{Lu}`).
49
+
50
+ ```typescript
51
+ interface CaseOptions {
52
+ locale?: string[] | string | false | undefined
53
+ split?: (value: string) => string[]
54
+ delimiter?: string
55
+ prefixCharacters?: string // characters to preserve as prefix
56
+ suffixCharacters?: string // characters to preserve as suffix
57
+ }
58
+
59
+ interface PascalCaseOptions extends CaseOptions {
60
+ mergeAmbiguousCharacters?: boolean
61
+ }
62
+ ```
63
+
64
+ ### Functions
65
+
66
+ ```typescript
67
+ camelCase('hello world') // 'helloWorld' — first word lowercase, rest capitalized
68
+ pascalCase('hello world') // 'HelloWorld' — all words capitalized
69
+ snakeCase('hello world') // 'hello_world' — alias for noCase with '_' delimiter
70
+ kebabCase('hello world') // 'hello-world' — alias for noCase with '-' delimiter
71
+ constantCase('hello world') // 'HELLO_WORLD' — all uppercase with '_' delimiter
72
+ trainCase('hello world') // 'Hello-World' — capitalCase with '-' delimiter
73
+ dotCase('hello world') // 'hello.world' — noCase with '.' delimiter
74
+ pathCase('hello world') // 'hello/world' — noCase with '/' delimiter
75
+ sentenceCase('hello world') // 'Hello world' — first word capitalized, rest lowercase
76
+ capitalCase('hello world') // 'Hello World' — all words capitalized, space delimiter
77
+ noCase('helloWorld') // 'hello world' — lowercase with space delimiter
78
+ pascalSnakeCase('hello world') // 'Hello_World' — capitalCase with '_' delimiter
79
+ paramCase('hello world') // 'hello-world' — alias for kebabCase
80
+ ```
81
+
82
+ ### Special Case Functions
83
+
84
+ ```typescript
85
+ spongeCase('hello world') // 'hElLo wOrLd' — random upper/lower per character
86
+ spongeCase('hello', 'en') // accepts optional locale
87
+
88
+ swapCase('Hello') // 'hELLO' — swaps each character's case
89
+ swapCase('Hello', 'en') // accepts optional locale
90
+ ```
91
+
92
+ ### Title Case
93
+
94
+ ```typescript
95
+ titleCase('hello world') // 'Hello World'
96
+ titleCase('the quick brown fox') // 'The Quick Brown Fox'
97
+ titleCase('the quick brown fox', { sentenceCase: true }) // 'The quick brown fox'
98
+
99
+ interface TitleCaseOptions {
100
+ locale?: string | string[]
101
+ sentenceCase?: boolean // only capitalize first word + after terminators
102
+ sentenceTerminators?: Set<string> // default: '.', '!', '?'
103
+ titleTerminators?: Set<string> // default: '.', '!', '?', ':', '"', "'", '"'
104
+ smallWords?: Set<string> // words not capitalized (see SMALL_WORDS)
105
+ wordSeparators?: Set<string> // default: '---', '--', '-', '---', '/'
106
+ }
107
+ ```
108
+
109
+ Handles special cases: URLs, email addresses, acronyms (e.g., "U.S.A."), camelCase words (e.g., "iPhone"), and hyphenated compound words.
110
+
111
+ ### Word Splitting
112
+
113
+ ```typescript
114
+ split('camelCase') // ['camel', 'Case']
115
+ split('hello_world') // ['hello', 'world']
116
+ split('HTTPSRequest') // ['HTTPS', 'Request']
117
+ splitSeparateNumbers('test123') // ['test', '123']
118
+ ```
119
+
120
+ Uses Unicode-aware regex for word boundary detection. Handles camelCase, PascalCase, snake_case, UPPER_CASE, and mixed formats.
121
+
122
+ ## Pluralization
123
+
124
+ Full English pluralization engine with irregular words, custom rules, and uncountable nouns.
125
+
126
+ ```typescript
127
+ import { plural, singular, pluralize } from '@stacksjs/strings'
128
+
129
+ // Basic usage
130
+ plural('person') // 'people'
131
+ plural('person', 1) // 'person' (count-aware)
132
+ singular('people') // 'person'
133
+
134
+ // Pluralize function with options
135
+ pluralize('mouse') // 'mice'
136
+ pluralize('mouse', { count: 1 }) // 'mouse'
137
+ pluralize('mouse', { count: 2 }) // 'mice'
138
+ pluralize('mouse', { count: 5, inclusive: true }) // '5 mice'
139
+
140
+ // Boolean checks
141
+ pluralize.isPlural('dogs') // true
142
+ pluralize.isSingular('dog') // true
143
+
144
+ // Custom rules
145
+ pluralize.addPluralRule(/gex$/i, 'gices')
146
+ pluralize.addSingularRule(/gices$/i, 'gex')
147
+ pluralize.addIrregularRule('person', 'people')
148
+ pluralize.addUncountableRule('sheep')
149
+ ```
150
+
151
+ ### Built-in Irregular Words
152
+ The engine includes 48 irregular word pairs (e.g., ox/oxen, foot/feet, goose/geese, child/children, person/people, die/dice, tooth/teeth, quiz/quizzes, etc.).
153
+
154
+ ### Built-in Uncountable Words
155
+ Includes 74 uncountable words (e.g., sheep, fish, moose, aircraft, software, equipment, information, etc.) plus regex patterns for Pokemon, words ending in non-ASCII `ese`, deer, fish, measles, pox, sheep.
156
+
157
+ ### Case Preservation
158
+ The pluralization engine preserves the case pattern of the input word:
159
+ - `'PERSON'` -> `'PEOPLE'`
160
+ - `'Person'` -> `'People'`
161
+ - `'person'` -> `'people'`
162
+
163
+ ## Slug Generation
164
+
165
+ Two slug functions with different defaults:
166
+
167
+ ### `slug(str, options?)` — Simple slug (strict + lowercase by default)
168
+ ```typescript
169
+ slug('Hello World') // 'hello-world'
170
+ slug('Hello World', { lower: false }) // 'Hello-World'
171
+ ```
172
+
173
+ ### `slugify(str, options?)` — Full-featured slug
174
+ ```typescript
175
+ slugify('Hello World!') // 'Hello-World!' (not strict/lowercase by default)
176
+ slugify('Hello World!', { lower: true, strict: true }) // 'hello-world'
177
+
178
+ interface SlugifyOptions {
179
+ replacement?: string // default: '-'
180
+ remove?: RegExp // chars to remove (default: /[^\w\s$*+~.()'"!\-:@]+/g)
181
+ lower?: boolean // default: false
182
+ strict?: boolean // strip non-alphanumeric (default: false)
183
+ locale?: string // locale-specific char mapping
184
+ trim?: boolean // trim result (default: true)
185
+ }
186
+ ```
187
+
188
+ ### Character Map
189
+ Extensive built-in character map covering:
190
+ - Latin extended (accented chars): A-Z with diacritics
191
+ - Greek alphabet
192
+ - Cyrillic alphabet
193
+ - Armenian alphabet
194
+ - Arabic alphabet and numerals
195
+ - Georgian alphabet
196
+ - Vietnamese diacritics
197
+ - Currency symbols ($, EUR, GBP, YEN, etc.)
198
+ - Special characters (trademark, copyright, etc.)
199
+
200
+ ### Locale Support
201
+ Locale-specific character mappings for: `bg`, `de`, `es`, `fr`, `pt`, `uk`, `vi`, `da`, `nb`, `it`, `nl`, `sv`.
202
+
203
+ ```typescript
204
+ slugify('AE', { locale: 'de' }) // 'AE' (German)
205
+ slugify('AE') // 'A' (default)
206
+ ```
207
+
208
+ ### Extending the Character Map
209
+ ```typescript
210
+ extendCharMap({ 'EUR': 'EUR', 'GBP': 'GBP' })
211
+ ```
212
+
213
+ ## String Utilities
214
+
215
+ ```typescript
216
+ capitalize('hello world') // 'Hello world' — first char upper, rest lower
217
+ lowercase('HELLO') // 'hello'
218
+ slash('path\\to\\file') // 'path/to/file'
219
+ ensurePrefix('https://', 'google.com') // 'https://google.com'
220
+ ensurePrefix('https://', 'https://x.com') // 'https://x.com' (already has prefix)
221
+ ensureSuffix('.ts', 'file') // 'file.ts'
222
+ ensureSuffix('.ts', 'file.ts') // 'file.ts' (already has suffix)
223
+ template('Hello {0}! My name is {1}.', 'Buddy', 'Chris') // 'Hello Buddy! My name is Chris.'
224
+ truncate('long text here', 10, '...') // 'long te...'
225
+ truncate('short', 10) // 'short' (no truncation needed)
226
+ random() // 16-char random string (nanoid-style)
227
+ random(21) // 21-char random string
228
+ random(10, 'abc') // 10-char string from custom alphabet
229
+ ```
230
+
231
+ ### `urlAlphabet` Constant
232
+ ```typescript
233
+ // 64 URL-safe characters used by random() by default
234
+ const urlAlphabet = 'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict'
235
+ ```
236
+
237
+ ## String Validators
238
+
239
+ Native TypeScript implementations (no external validator dependency). All accept a string and return boolean.
240
+
241
+ ### Core Validators
242
+ ```typescript
243
+ isEmail('user@example.com') // true -- regex: /^[^\s@]+@[^\s@]+\.[^\s@]+$/
244
+ isStrongPassword('Abc123!@#') // true -- min 8 chars, upper, lower, digit, symbol
245
+ isAlphanumeric('abc123') // true -- /^[a-zA-Z0-9]+$/
246
+ isAlpha('abcdef') // true -- /^[a-zA-Z]+$/
247
+ isNumeric('123') // true -- /^[0-9]+$/ (whole numbers only)
248
+ isURL('https://example.com') // true -- uses URL constructor, requires http(s) protocol
249
+ ```
250
+
251
+ ### Format Validators
252
+ ```typescript
253
+ isHexColor('#ff0000') // true -- 3 or 6 hex digits with #
254
+ isHexadecimal('deadbeef') // true -- hex chars only
255
+ isBase64('SGVsbG8=') // true -- btoa(atob(x)) === x
256
+ isBase32('MFZWI===') // true -- /^[A-Z2-7]+=*$/
257
+ isAscii('hello') // true -- /^[\x00-\x7F]*$/
258
+ isJSON('{"key":"value"}') // true -- JSON.parse succeeds
259
+ isHSL('hsl(0, 100%, 50%)') // true
260
+ isMimeType('text/html') // true -- /^[a-z]+\/[a-z0-9\-+.]+$/i
261
+ isDataURI('data:text/plain;base64,...') // true
262
+ isJWT('eyJhbGciOi...') // true -- 3 dot-separated base64url segments
263
+ ```
264
+
265
+ ### Network Validators
266
+ ```typescript
267
+ isIP('192.168.1.1') // true -- IPv4 and IPv6
268
+ isIPRange('192.168.1.0/24') // true -- CIDR notation (IPv4: 0-32, IPv6: 0-128)
269
+ isMACAddress('00:11:22:33:44:55') // true -- colon or hyphen separated
270
+ isFQDN('example.com') // true -- fully qualified domain name
271
+ ```
272
+
273
+ ### Financial Validators
274
+ ```typescript
275
+ isCreditCard('4111111111111111') // true -- Luhn algorithm, 13-19 digits
276
+ isISBN('978-3-16-148410-0') // true -- ISBN-10 and ISBN-13 with checksum
277
+ isCurrency('$1,234.56') // true -- supports $, GBP, EUR, YEN
278
+ isIBAN('DE89370400440532013000') // true -- mod 97 check
279
+ isISIN('US0378331005') // true -- Luhn algorithm
280
+ isISSN('0378-5955') // true -- mod 11 check
281
+ ```
282
+
283
+ ### Geographic Validators
284
+ ```typescript
285
+ isLatLong('40.7128,-74.0060') // true -- lat: -90..90, long: -180..180
286
+ isLatitude('40.7128') // true
287
+ isLongitude('-74.0060') // true
288
+ isPostalCode('12345') // true -- US, UK, Canada, generic formats
289
+ ```
290
+
291
+ ### Phone, Identity, Date Validators
292
+ ```typescript
293
+ isMobilePhone('+1234567890') // true -- international format, min 7 digits
294
+ isUUID('550e8400-e29b-41d4-a716...') // true -- v1-v5
295
+ isISO8601('2024-01-01T00:00:00Z') // true -- with Date validity check
296
+ isIdentityCard('AB123456') // true -- generic 5-20 alphanumeric
297
+ isISRC('USRC17607839') // true
298
+ isISO31661Alpha2('US') // true
299
+ isISO31661Alpha3('USA') // true
300
+ validateUsername('user123') // true -- alias for isAlphanumeric
301
+ isHash('abc123...', 'md5') // true -- supports md5(32), sha1(40), sha256(64), sha384(96), sha512(128)
302
+ isByteLength('hello', { min: 1, max: 10 }) // true
303
+ isFullWidth('\uFF21') // true
304
+ isHalfWidth('a') // true
305
+ ```
306
+
307
+ ## Newline & Indentation Detection
308
+
309
+ ### Newline Detection (from `detect-newline.ts`)
310
+ ```typescript
311
+ detectNewline('line1\r\nline2') // '\r\n'
312
+ detectNewline('line1\nline2') // '\n'
313
+ detectNewline('no newline') // undefined
314
+ detectNewlineGraceful(text) // '\n' (fallback when no newline found)
315
+ ```
316
+
317
+ The detection counts CRLF vs LF occurrences and returns the dominant type.
318
+
319
+ ### Indentation Detection (from `detect-indent.ts`)
320
+ ```typescript
321
+ detectIndent(' hello\n world')
322
+ // { amount: 2, type: 'space', indent: ' ' }
323
+
324
+ detectIndent('\thello\n\t\tworld')
325
+ // { amount: 1, type: 'tab', indent: '\t' }
326
+
327
+ detectIndent('no indent')
328
+ // { amount: 0, type: undefined, indent: '' }
329
+ ```
330
+
331
+ Algorithm: builds a frequency map of indent changes (type + size), handles edge cases like single-space indentation (skipped by default to avoid false positives from code comments), then selects the most common indent pattern.
332
+
333
+ ## Str Facade Object
334
+
335
+ Both `Str` and `str` are exported as equivalent facade objects providing all functions as methods.
336
+
337
+ ```typescript
338
+ import { Str, str } from '@stacksjs/strings'
339
+
340
+ // Case conversion
341
+ Str.camelCase('hello world') // 'helloWorld'
342
+ Str.pascalCase('hello world') // 'HelloWorld'
343
+ Str.snakeCase('hello world') // 'hello_world'
344
+ Str.kebabCase('hello world') // 'hello-world'
345
+ Str.constantCase('hello world') // 'HELLO_WORLD'
346
+ Str.dotCase('hello world') // 'hello.world'
347
+ Str.noCase('helloWorld') // 'hello world'
348
+ Str.paramCase('hello world') // 'hello-world'
349
+ Str.pathCase('hello world') // 'hello/world'
350
+ Str.sentenceCase('hello world') // 'Hello world'
351
+ Str.capitalCase('hello world') // 'Hello World'
352
+ Str.titleCase('hello world') // 'Hello World'
353
+
354
+ // Utilities
355
+ Str.capitalize('hello') // 'Hello'
356
+ Str.slug('Hello World') // 'hello-world'
357
+ Str.random(16) // random string
358
+ Str.random(10, 'abc') // random from custom dict
359
+ Str.template('{0} {1}', 'a', 'b') // 'a b'
360
+ Str.truncate('long text', 5) // 'lo...'
361
+ Str.slash('path\\to') // 'path/to'
362
+ Str.ensurePrefix('/', 'path') // '/path'
363
+ Str.ensureSuffix('.ts', 'file') // 'file.ts'
364
+ Str.detectIndent(text) // { amount, type, indent }
365
+ Str.detectNewline(text) // '\n' | '\r\n' | undefined
366
+
367
+ // Pluralization
368
+ Str.plural('person') // 'people'
369
+ Str.singular('people') // 'person'
370
+ Str.isPlural('dogs') // true
371
+ Str.isSingular('dog') // true
372
+ Str.addPluralRule(/ox$/i, 'oxen')
373
+ Str.addSingularRule(/oxen$/i, 'ox')
374
+ Str.addIrregularRule('goose', 'geese')
375
+ Str.addUncountableRule('sheep')
376
+ ```
377
+
378
+ ## Exported Constants
379
+
380
+ ```typescript
381
+ // From title-case.ts
382
+ WORD_SEPARATORS: Set<string> // '---', '--', '-', '---', '/'
383
+ SENTENCE_TERMINATORS: Set<string> // '.', '!', '?'
384
+ TITLE_TERMINATORS: Set<string> // '.', '!', '?', ':', '"', "'", '"'
385
+ SMALL_WORDS: Set<string> // 'a', 'an', 'and', 'as', 'at', 'because', 'but', 'by',
386
+ // 'en', 'for', 'if', 'in', 'neither', 'nor', 'of', 'on',
387
+ // 'only', 'or', 'over', 'per', 'so', 'some', 'than', 'that',
388
+ // 'the', 'to', 'up', 'upon', 'v', 'versus', 'via', 'vs',
389
+ // 'when', 'with', 'without', 'yet'
390
+
391
+ // From utils.ts
392
+ urlAlphabet: string // 64 URL-safe chars for random()
393
+ ```
394
+
395
+ ## Exported Types
396
+
397
+ ```typescript
398
+ type Locale = string[] | string | false | undefined
399
+ interface CaseOptions { locale?, split?, delimiter?, prefixCharacters?, suffixCharacters? }
400
+ interface PascalCaseOptions extends CaseOptions { mergeAmbiguousCharacters? }
401
+ interface TitleCaseOptions { locale?, sentenceCase?, sentenceTerminators?, smallWords?, titleTerminators?, wordSeparators? }
402
+ interface SlugifyOptions { replacement?, remove?, lower?, strict?, locale?, trim? }
403
+ interface PluralizeOptions { count?, inclusive? }
404
+ ```
405
+
406
+ ## Gotchas
407
+ - Case conversion uses Unicode-aware word boundary detection (`\p{Ll}`, `\p{Lu}`) -- handles international characters
408
+ - `slug()` calls `slugify()` under the hood but defaults to `{ lower: true, strict: true }`; `slugify()` defaults to `{ lower: false, strict: false }`
409
+ - `pascalCase` and `camelCase` accept `PascalCaseOptions` with `mergeAmbiguousCharacters` to control number-prefixed word handling
410
+ - All case functions support `prefixCharacters`/`suffixCharacters` to preserve leading/trailing non-word characters
411
+ - `pluralize()` is both a function AND an object with methods -- `pluralize.plural()`, `pluralize.singular()`, etc.
412
+ - The `random()` function uses `Math.random()`, not crypto -- fine for IDs but not for security tokens
413
+ - `isNumeric()` only matches whole numbers (`/^\d+$/`), not floats -- use parseFloat for float checking
414
+ - `isURL()` requires `http:` or `https:` protocol -- rejects other protocols and bare domains
415
+ - The `Str` facade does NOT include validators -- only case, utility, and pluralization methods
416
+ - `helpers.ts` only exports `toString()` which returns `Object.prototype.toString.call(v)`
@@ -0,0 +1,176 @@
1
+ ---
2
+ name: stacks-stx
3
+ description: Use when working with STX templates in a Stacks application — template syntax, components, directives, signals, reactivity, SSR, streaming, hydration, or debugging STX rendering. STX is the ONLY templating system for Stacks.
4
+ license: MIT
5
+ compatibility: Bun >= 1.3.0, TypeScript
6
+ allowed-tools: Read Edit Write Bash Grep Glob
7
+ ---
8
+
9
+ # STX Templating Engine
10
+
11
+ STX is the full-stack templating and component framework for Stacks. It handles template rendering, reactivity, SSR, streaming, hydration, and more.
12
+
13
+ ## Design & anti-slop skills
14
+
15
+ When the task is how a page should *look* (not just how stx renders), pair this skill with the design-taste family: `stacks-design-taste` (flagship), the aesthetic presets `stacks-design-soft` / `stacks-design-minimalist` / `stacks-design-brutalist`, `stacks-redesign`, `stacks-design-output`, and the image-first `stacks-image-to-code` / `stacks-imagegen-web` / `stacks-imagegen-mobile` / `stacks-brandkit`. They translate premium design rules into stx + Crosswind + composables.
16
+
17
+ ## Key Paths
18
+ - STX config: `config/ui.ts`
19
+ - STX plugin: `bun-plugin-stx` (loaded via bunfig.toml)
20
+ - STX build cache + route manifest: `storage/framework/stx/` (stx's `stateDir`, set in `config/ui.ts`)
21
+ - Components: `resources/components/`
22
+ - Layouts: `resources/layouts/`
23
+ - Partials: `resources/partials/`
24
+ - Views: `resources/views/`
25
+ - Package: `@stacksjs/stx`
26
+
27
+ ## CRITICAL Rules
28
+ 1. **ALWAYS use STX** for templating — never write vanilla JS
29
+ 2. **NEVER use** `var`, `document.*`, `window.*` in STX templates
30
+ 3. STX `<script>` tags should ONLY contain stx-compatible code (signals, composables, directives)
31
+
32
+ ## Template Structure
33
+
34
+ ```html
35
+ <template>
36
+ <div class="container">
37
+ <h1>{{ title }}</h1>
38
+ <p x-if="showDescription">{{ description }}</p>
39
+ <button @click="increment">Count: {{ count }}</button>
40
+ </div>
41
+ </template>
42
+
43
+ <script>
44
+ import { ref, computed } from '@stacksjs/composables'
45
+
46
+ const count = ref(0)
47
+ const title = ref('Hello STX')
48
+ const showDescription = ref(true)
49
+
50
+ function increment() {
51
+ count.value++
52
+ }
53
+ </script>
54
+
55
+ <style>
56
+ /* Use crosswind utility classes or custom CSS */
57
+ .container { max-width: 1200px; margin: 0 auto; }
58
+ </style>
59
+ ```
60
+
61
+ ## Configuration (config/ui.ts)
62
+
63
+ ```typescript
64
+ import type { StxOptions } from '@stacksjs/stx'
65
+
66
+ export default {
67
+ componentsDir: 'resources/components',
68
+ layoutsDir: 'resources/layouts',
69
+ partialsDir: 'resources/partials',
70
+ } satisfies StxOptions
71
+ ```
72
+
73
+ ### Full StxConfig
74
+
75
+ ```typescript
76
+ interface StxConfig {
77
+ enabled: boolean
78
+ debug: boolean
79
+ componentsDir: string
80
+ partialsDir: string
81
+ layoutsDir?: string
82
+ defaultLayout?: string
83
+ templatesDir?: string
84
+ cachePath: string
85
+ ssr?: boolean
86
+ cache?: boolean
87
+ defaultTitle?: string
88
+ defaultDescription?: string
89
+
90
+ // Feature modules
91
+ i18n?: Partial<I18nConfig>
92
+ webComponents?: Partial<WebComponentConfig>
93
+ streaming?: Partial<StreamingConfig>
94
+ hydration?: Partial<HydrationConfig>
95
+ a11y?: Partial<A11yConfig>
96
+ seo?: Partial<SeoFeatureConfig>
97
+ animation?: Partial<AnimationConfig>
98
+ markdown?: Partial<MarkdownConfig>
99
+ forms?: Partial<FormConfig>
100
+ pwa?: Partial<PwaConfig>
101
+ components?: Partial<ComponentConfig>
102
+ media?: Partial<MediaConfig>
103
+ strict?: boolean | StrictModeConfig
104
+ customDirectives?: CustomDirective[]
105
+ }
106
+ ```
107
+
108
+ ## STX Capabilities (118+ modules)
109
+
110
+ ### Core
111
+ - Template parsing and compilation
112
+ - Reactivity system (ref, computed, watch)
113
+ - Component composition and lifecycle
114
+ - Dependency injection (provide/inject)
115
+
116
+ ### Rendering
117
+ - **SSR** — Server-Side Rendering
118
+ - **Streaming** — Progressive HTML streaming
119
+ - **Hydration** — Progressive and islands-based hydration
120
+ - **Suspense** — Async component loading with fallbacks
121
+ - **Error boundaries** — Graceful error handling in components
122
+
123
+ ### Features
124
+ - **Router** — Client-side routing
125
+ - **Forms** — Built-in form handling and validation
126
+ - **i18n** — Internationalization support
127
+ - **SEO** — Meta tags, Open Graph, Twitter cards, structured data
128
+ - **PWA** — Progressive Web App support
129
+ - **Animation** — CSS and JS animation system
130
+ - **Markdown** — Markdown rendering with syntax highlighting
131
+ - **A11y** — Accessibility checking and auto-fixing
132
+
133
+ ### Dev Tools
134
+ - **Dev server** with HMR (Hot Module Replacement)
135
+ - **Image optimization**
136
+ - **Asset pipeline**
137
+ - **Testing utilities**
138
+
139
+ ## Plugin Loading
140
+
141
+ ```toml
142
+ # bunfig.toml
143
+ [serve]
144
+ plugins = ["bun-plugin-stx"]
145
+ ```
146
+
147
+ The STX plugin processes `.stx` files during serve and build.
148
+
149
+ ## Scaffolding
150
+
151
+ ```typescript
152
+ import { createProject, addComponent, addPage, addStore, addLayout } from '@stacksjs/stx'
153
+
154
+ // Create a new project
155
+ await createProject('my-app', { template: 'dashboard' })
156
+
157
+ // Add to existing project
158
+ await addComponent('UserCard', { props: true, styles: true })
159
+ await addPage('about', { layout: 'default' })
160
+ await addStore('cart', { persist: true, actions: true })
161
+ await addLayout('admin', { nav: true, footer: true })
162
+ ```
163
+
164
+ ### Project Templates
165
+ `default`, `minimal`, `full`, `blog`, `dashboard`, `landing`
166
+
167
+ ## Gotchas
168
+ - **STX is the ONLY templating system** — do not use other template engines
169
+ - **`bun-plugin-stx` must be loaded** — without it, `.stx` files won't be processed
170
+ - **Auto-imports** — browser auto-imports defined in `storage/framework/browser-auto-imports.json`
171
+ - **`storage/framework/stx/`** — stx build cache and the generated route manifest. `config/ui.ts` sets stx's `stateDir` here, so nothing lands in the project root. Gitignored; safe to delete
172
+ - **Reactivity is custom** — `ref()` and `computed()` from STX are not Vue's implementation
173
+ - **Crosswind for styling** — use utility classes, not inline styles
174
+ - **Script block restrictions** — only stx-compatible code (signals, composables, directives), no vanilla DOM APIs
175
+ - **Components go in `resources/`** — not in `app/` or `storage/`
176
+ - **118+ modules** — STX is a comprehensive framework covering rendering, routing, forms, i18n, SEO, PWA, and more
@@ -0,0 +1,22 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 tt-a1i (Archify)
4
+ Copyright (c) 2025 Cocoon AI (original "architecture-diagram-generator")
5
+
6
+ Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ of this software and associated documentation files (the "Software"), to deal
8
+ in the Software without restriction, including without limitation the rights
9
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ copies of the Software, and to permit persons to whom the Software is
11
+ furnished to do so, subject to the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be included in all
14
+ copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
+ SOFTWARE.