@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,43 @@
1
+ import type { Ref } from '@stacksjs/stx'
2
+ import { ref } from '@stacksjs/stx'
3
+
4
+ interface Queue {
5
+ id?: number
6
+ queue: string
7
+ payload: string
8
+ attempts?: number
9
+ available_at?: number
10
+ reserved_at?: Date | null
11
+ created_at: string
12
+ updated_at?: string | null
13
+ }
14
+
15
+ export const useQueueStore = defineStore('queue', () => {
16
+ const queues: Ref<Queue[]> = ref([])
17
+
18
+ async function fetchQueues(): Promise<void> {
19
+ const url = `http://localhost:3008/queues`
20
+
21
+ const response = await fetch(url, {
22
+ method: 'GET',
23
+ headers: {
24
+ 'Content-Type': 'application/json',
25
+ 'Accept': 'application/json',
26
+ },
27
+ })
28
+
29
+ if (!response.ok) {
30
+ console.error(`Failed to fetch queues: ${response.status}`)
31
+ return
32
+ }
33
+
34
+ const res = await response.json() as Queue[]
35
+
36
+ queues.value = res
37
+ }
38
+
39
+ return {
40
+ queues,
41
+ fetchQueues,
42
+ }
43
+ })
package/stores/user.ts ADDED
@@ -0,0 +1,29 @@
1
+ export const useUserStore = defineStore('user', () => {
2
+ /**
3
+ * Current name of the user.
4
+ */
5
+ const savedName = ref('')
6
+ const previousNames = ref(new Set<string>())
7
+
8
+ const usedNames = computed(() => Array.from(previousNames.value))
9
+ const otherNames = computed(() => usedNames.value.filter((name: any) => name !== savedName.value))
10
+
11
+ /**
12
+ * Changes the current name of the user and saves the one that was used
13
+ * before.
14
+ *
15
+ * @param name - new name to set
16
+ */
17
+ function setNewName(name: string) {
18
+ if (savedName.value)
19
+ previousNames.value.add(savedName.value)
20
+
21
+ savedName.value = name
22
+ }
23
+
24
+ return {
25
+ setNewName,
26
+ otherNames,
27
+ savedName,
28
+ }
29
+ })
@@ -0,0 +1,25 @@
1
+ import { existsSync } from 'node:fs'
2
+ import { homedir } from 'node:os'
3
+ import { join } from 'node:path'
4
+
5
+ /**
6
+ * stx plugin exposing `@stacksjs/components`' ui library (<Sidebar>,
7
+ * <Button>, …) to tag resolution in every Stacks stx server — the
8
+ * dashboard uses it for the macOS-style web sidebar.
9
+ *
10
+ * The library ships its .stx sources in the package, so the installed
11
+ * copy is used when present. A local stx checkout wins during framework
12
+ * development (same convention as the Craft SDK resolution in
13
+ * `core/actions/src/dev/dashboard.ts`), and `STX_COMPONENTS_DIR` can
14
+ * point anywhere explicitly.
15
+ */
16
+ const candidates = [
17
+ process.env.STX_COMPONENTS_DIR,
18
+ join(homedir(), 'Code/Tools/stx/packages/components/src/ui'),
19
+ join(process.cwd(), 'node_modules/@stacksjs/components/src/ui'),
20
+ ].filter((dir): dir is string => Boolean(dir))
21
+
22
+ export default {
23
+ name: '@stacksjs/components',
24
+ components: candidates.find(dir => existsSync(dir)) ?? candidates[candidates.length - 1],
25
+ }
@@ -0,0 +1,597 @@
1
+ /**
2
+ * Stacks Dashboard Design System - macOS Inspired
3
+ * ================================================
4
+ * A modern design system inspired by macOS aesthetics.
5
+ * Features vibrancy, SF-style typography, generous rounded corners,
6
+ * and native macOS UI patterns.
7
+ */
8
+
9
+ :root {
10
+ /* ========================================
11
+ * macOS System Colors - Light Mode
12
+ * Based on Apple's Human Interface Guidelines
13
+ * ======================================== */
14
+
15
+ /* Primary - macOS Blue */
16
+ --color-primary-50: #e5f2ff;
17
+ --color-primary-100: #cce5ff;
18
+ --color-primary-200: #99cbff;
19
+ --color-primary-300: #66b0ff;
20
+ --color-primary-400: #3396ff;
21
+ --color-primary-500: #007aff; /* macOS Blue */
22
+ --color-primary-600: #0066d6;
23
+ --color-primary-700: #0052ad;
24
+ --color-primary-800: #003d82;
25
+ --color-primary-900: #002959;
26
+
27
+ /* Neutral Colors - macOS Gray Scale */
28
+ --color-neutral-0: #ffffff;
29
+ --color-neutral-50: #fafafa;
30
+ --color-neutral-100: #f5f5f7; /* macOS background */
31
+ --color-neutral-200: #e8e8ed;
32
+ --color-neutral-300: #d2d2d7;
33
+ --color-neutral-400: #aeaeb2;
34
+ --color-neutral-500: #8e8e93; /* macOS secondary label */
35
+ --color-neutral-600: #636366;
36
+ --color-neutral-700: #48484a;
37
+ --color-neutral-800: #3a3a3c;
38
+ --color-neutral-900: #2c2c2e;
39
+ --color-neutral-950: #1c1c1e; /* macOS dark background */
40
+
41
+ /* Success - macOS Green */
42
+ --color-success-50: #e8f9ed;
43
+ --color-success-100: #d1f3db;
44
+ --color-success-200: #a3e7b7;
45
+ --color-success-300: #75db93;
46
+ --color-success-400: #47cf6f;
47
+ --color-success-500: #34c759; /* macOS Green */
48
+ --color-success-600: #2aa147;
49
+ --color-success-700: #207b36;
50
+ --color-success-800: #155524;
51
+ --color-success-900: #0b2f13;
52
+
53
+ /* Warning - macOS Orange */
54
+ --color-warning-50: #fff5e5;
55
+ --color-warning-100: #ffebcc;
56
+ --color-warning-200: #ffd699;
57
+ --color-warning-300: #ffc266;
58
+ --color-warning-400: #ffad33;
59
+ --color-warning-500: #ff9500; /* macOS Orange */
60
+ --color-warning-600: #cc7700;
61
+ --color-warning-700: #995900;
62
+ --color-warning-800: #663c00;
63
+ --color-warning-900: #331e00;
64
+
65
+ /* Danger - macOS Red */
66
+ --color-danger-50: #ffebeb;
67
+ --color-danger-100: #ffd6d6;
68
+ --color-danger-200: #ffadad;
69
+ --color-danger-300: #ff8585;
70
+ --color-danger-400: #ff5c5c;
71
+ --color-danger-500: #ff3b30; /* macOS Red */
72
+ --color-danger-600: #d62f26;
73
+ --color-danger-700: #ad241c;
74
+ --color-danger-800: #851912;
75
+ --color-danger-900: #5c0e08;
76
+
77
+ /* Info - macOS Teal */
78
+ --color-info-50: #e5fafa;
79
+ --color-info-100: #ccf5f5;
80
+ --color-info-200: #99ebeb;
81
+ --color-info-300: #66e0e0;
82
+ --color-info-400: #40d4d4;
83
+ --color-info-500: #5ac8fa; /* macOS Teal/Cyan */
84
+ --color-info-600: #32ade6;
85
+ --color-info-700: #2490c3;
86
+ --color-info-800: #176f96;
87
+ --color-info-900: #0a4d6a;
88
+
89
+ /* Purple - macOS Purple */
90
+ --color-purple-500: #af52de;
91
+
92
+ /* Pink - macOS Pink */
93
+ --color-pink-500: #ff2d55;
94
+
95
+ /* Indigo - macOS Indigo */
96
+ --color-indigo-500: #5856d6;
97
+
98
+ /* ========================================
99
+ * macOS Vibrancy & Materials
100
+ * ======================================== */
101
+
102
+ /* Vibrancy backgrounds (frosted glass effect) */
103
+ --vibrancy-light: rgba(255, 255, 255, 0.72);
104
+ --vibrancy-dark: rgba(30, 30, 30, 0.72);
105
+ --vibrancy-ultra-thin-light: rgba(255, 255, 255, 0.4);
106
+ --vibrancy-ultra-thin-dark: rgba(30, 30, 30, 0.4);
107
+
108
+ /* Material backgrounds */
109
+ --material-thin: rgba(255, 255, 255, 0.5);
110
+ --material-regular: rgba(255, 255, 255, 0.72);
111
+ --material-thick: rgba(255, 255, 255, 0.85);
112
+
113
+ /* Blur amounts */
114
+ --blur-none: 0;
115
+ --blur-sm: 8px;
116
+ --blur-md: 12px;
117
+ --blur-lg: 20px;
118
+ --blur-xl: 30px;
119
+ --blur-2xl: 40px;
120
+ --blur-macos: 20px; /* Standard macOS blur */
121
+
122
+ /* ========================================
123
+ * Semantic Colors - Light Mode
124
+ * ======================================== */
125
+
126
+ /* Background */
127
+ --bg-primary: var(--color-neutral-0);
128
+ --bg-secondary: var(--color-neutral-100);
129
+ --bg-tertiary: var(--color-neutral-200);
130
+ --bg-elevated: var(--color-neutral-0);
131
+ --bg-sunken: var(--color-neutral-100);
132
+ --bg-hover: rgba(0, 0, 0, 0.04);
133
+ --bg-active: rgba(0, 0, 0, 0.08);
134
+ --bg-selected: rgba(0, 122, 255, 0.12);
135
+
136
+ /* Vibrancy backgrounds */
137
+ --bg-vibrancy: var(--vibrancy-light);
138
+ --bg-vibrancy-sidebar: rgba(246, 246, 246, 0.8);
139
+ --bg-vibrancy-navbar: rgba(255, 255, 255, 0.72);
140
+ --bg-vibrancy-popover: rgba(255, 255, 255, 0.85);
141
+
142
+ /* Foreground/Text - SF Pro style */
143
+ --text-primary: rgba(0, 0, 0, 0.85);
144
+ --text-secondary: rgba(0, 0, 0, 0.55);
145
+ --text-tertiary: rgba(0, 0, 0, 0.35);
146
+ --text-muted: rgba(0, 0, 0, 0.25);
147
+ --text-inverted: rgba(255, 255, 255, 0.95);
148
+ --text-link: var(--color-primary-500);
149
+ --text-link-hover: var(--color-primary-600);
150
+
151
+ /* Border - Subtle macOS style */
152
+ --border-default: rgba(0, 0, 0, 0.1);
153
+ --border-muted: rgba(0, 0, 0, 0.06);
154
+ --border-emphasis: rgba(0, 0, 0, 0.15);
155
+ --border-focus: var(--color-primary-500);
156
+ --border-separator: rgba(0, 0, 0, 0.08);
157
+
158
+ /* Shadow - macOS elevation */
159
+ --shadow-xs: 0 0 0 1px rgba(0, 0, 0, 0.04);
160
+ --shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.08), 0 1px 2px rgba(0, 0, 0, 0.06);
161
+ --shadow-md: 0 4px 12px rgba(0, 0, 0, 0.08), 0 2px 4px rgba(0, 0, 0, 0.04);
162
+ --shadow-lg: 0 8px 24px rgba(0, 0, 0, 0.12), 0 4px 8px rgba(0, 0, 0, 0.06);
163
+ --shadow-xl: 0 16px 48px rgba(0, 0, 0, 0.16), 0 8px 16px rgba(0, 0, 0, 0.08);
164
+ --shadow-2xl: 0 24px 64px rgba(0, 0, 0, 0.2), 0 12px 24px rgba(0, 0, 0, 0.1);
165
+
166
+ /* macOS-specific shadows */
167
+ --shadow-window: 0 22px 70px rgba(0, 0, 0, 0.25), 0 0 0 1px rgba(0, 0, 0, 0.1);
168
+ --shadow-popover: 0 4px 16px rgba(0, 0, 0, 0.12), 0 0 0 1px rgba(0, 0, 0, 0.05);
169
+ --shadow-dropdown: 0 10px 38px -10px rgba(22, 23, 24, 0.35), 0 10px 20px -15px rgba(22, 23, 24, 0.2);
170
+
171
+ /* ========================================
172
+ * Typography - SF Pro Inspired
173
+ * ======================================== */
174
+
175
+ /* Font Families - System fonts with SF Pro priority */
176
+ --font-sans: -apple-system, BlinkMacSystemFont, "SF Pro Display", "SF Pro Text", "Helvetica Neue", "Segoe UI", Roboto, sans-serif;
177
+ --font-mono: "SF Mono", SFMono-Regular, ui-monospace, Menlo, Monaco, "Cascadia Mono", "Segoe UI Mono", monospace;
178
+ --font-rounded: -apple-system, BlinkMacSystemFont, "SF Pro Rounded", "SF Pro Display", system-ui, sans-serif;
179
+
180
+ /* Font Sizes - macOS scale */
181
+ --text-xs: 0.6875rem; /* 11px - Caption 2 */
182
+ --text-sm: 0.8125rem; /* 13px - Subheadline */
183
+ --text-base: 0.9375rem; /* 15px - Body */
184
+ --text-lg: 1.0625rem; /* 17px - Headline */
185
+ --text-xl: 1.25rem; /* 20px - Title 3 */
186
+ --text-2xl: 1.375rem; /* 22px - Title 2 */
187
+ --text-3xl: 1.75rem; /* 28px - Title 1 */
188
+ --text-4xl: 2.125rem; /* 34px - Large Title */
189
+
190
+ /* Line Heights - Tighter for SF Pro */
191
+ --leading-none: 1;
192
+ --leading-tight: 1.15;
193
+ --leading-snug: 1.25;
194
+ --leading-normal: 1.4;
195
+ --leading-relaxed: 1.5;
196
+ --leading-loose: 1.75;
197
+
198
+ /* Font Weights - SF Pro weights */
199
+ --font-light: 300;
200
+ --font-regular: 400;
201
+ --font-medium: 500;
202
+ --font-semibold: 600;
203
+ --font-bold: 700;
204
+
205
+ /* Letter Spacing - macOS style */
206
+ --tracking-tighter: -0.03em;
207
+ --tracking-tight: -0.02em;
208
+ --tracking-normal: -0.01em;
209
+ --tracking-wide: 0;
210
+ --tracking-wider: 0.01em;
211
+
212
+ /* ========================================
213
+ * Spacing Scale
214
+ * ======================================== */
215
+
216
+ --space-0: 0;
217
+ --space-px: 1px;
218
+ --space-0-5: 0.125rem; /* 2px */
219
+ --space-1: 0.25rem; /* 4px */
220
+ --space-1-5: 0.375rem; /* 6px */
221
+ --space-2: 0.5rem; /* 8px */
222
+ --space-2-5: 0.625rem; /* 10px */
223
+ --space-3: 0.75rem; /* 12px */
224
+ --space-3-5: 0.875rem; /* 14px */
225
+ --space-4: 1rem; /* 16px */
226
+ --space-5: 1.25rem; /* 20px */
227
+ --space-6: 1.5rem; /* 24px */
228
+ --space-7: 1.75rem; /* 28px */
229
+ --space-8: 2rem; /* 32px */
230
+ --space-9: 2.25rem; /* 36px */
231
+ --space-10: 2.5rem; /* 40px */
232
+ --space-12: 3rem; /* 48px */
233
+ --space-14: 3.5rem; /* 56px */
234
+ --space-16: 4rem; /* 64px */
235
+ --space-20: 5rem; /* 80px */
236
+ --space-24: 6rem; /* 96px */
237
+
238
+ /* ========================================
239
+ * Border Radius - macOS Generous Corners
240
+ * ======================================== */
241
+
242
+ --radius-none: 0;
243
+ --radius-sm: 4px;
244
+ --radius-default: 6px;
245
+ --radius-md: 8px;
246
+ --radius-lg: 10px;
247
+ --radius-xl: 12px; /* Common macOS radius */
248
+ --radius-2xl: 16px;
249
+ --radius-3xl: 20px;
250
+ --radius-4xl: 24px;
251
+ --radius-full: 9999px;
252
+
253
+ /* macOS-specific radii */
254
+ --radius-button: 8px;
255
+ --radius-input: 8px;
256
+ --radius-card: 12px;
257
+ --radius-modal: 12px;
258
+ --radius-popover: 10px;
259
+ --radius-window: 10px;
260
+
261
+ /* ========================================
262
+ * Transitions - macOS Smooth Animations
263
+ * ======================================== */
264
+
265
+ --transition-fast: 100ms;
266
+ --transition-normal: 200ms;
267
+ --transition-slow: 300ms;
268
+ --transition-slower: 400ms;
269
+
270
+ /* macOS spring-like easings */
271
+ --ease-default: cubic-bezier(0.25, 0.1, 0.25, 1);
272
+ --ease-in: cubic-bezier(0.42, 0, 1, 1);
273
+ --ease-out: cubic-bezier(0, 0, 0.58, 1);
274
+ --ease-in-out: cubic-bezier(0.42, 0, 0.58, 1);
275
+ --ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1);
276
+ --ease-bounce: cubic-bezier(0.68, -0.55, 0.265, 1.55);
277
+
278
+ /* ========================================
279
+ * Z-Index Scale
280
+ * ======================================== */
281
+
282
+ --z-base: 0;
283
+ --z-dropdown: 1000;
284
+ --z-sticky: 1020;
285
+ --z-fixed: 1030;
286
+ --z-modal-backdrop: 1040;
287
+ --z-modal: 1050;
288
+ --z-popover: 1060;
289
+ --z-tooltip: 1070;
290
+ --z-toast: 1080;
291
+ --z-window-controls: 1090;
292
+
293
+ /* ========================================
294
+ * Component-specific tokens - macOS Style
295
+ * ======================================== */
296
+
297
+ /* Window Controls */
298
+ --window-control-close: #ff5f57;
299
+ --window-control-minimize: #febc2e;
300
+ --window-control-maximize: #28c840;
301
+ --window-control-size: 12px;
302
+ --window-control-spacing: 8px;
303
+
304
+ /* Sidebar - macOS Finder style */
305
+ --sidebar-width: 240px;
306
+ --sidebar-width-collapsed: 64px;
307
+ --sidebar-bg: var(--bg-vibrancy-sidebar);
308
+ --sidebar-border: var(--border-separator);
309
+ --sidebar-item-radius: 6px;
310
+ --sidebar-item-padding: 6px 10px;
311
+
312
+ /* Navbar/Toolbar - macOS style */
313
+ --navbar-height: 52px;
314
+ --navbar-bg: var(--bg-vibrancy-navbar);
315
+ --navbar-border: var(--border-separator);
316
+
317
+ /* Card - Elevated macOS panels */
318
+ --card-bg: var(--bg-primary);
319
+ --card-border: var(--border-muted);
320
+ --card-radius: var(--radius-card);
321
+ --card-shadow: var(--shadow-sm);
322
+ --card-padding: 16px;
323
+
324
+ /* Input - macOS text field */
325
+ --input-bg: var(--bg-primary);
326
+ --input-border: var(--border-default);
327
+ --input-border-focus: var(--color-primary-500);
328
+ --input-radius: var(--radius-input);
329
+ --input-height: 28px;
330
+ --input-height-lg: 36px;
331
+
332
+ /* Button - macOS push button */
333
+ --button-radius: var(--radius-button);
334
+ --button-height: 28px;
335
+ --button-height-lg: 36px;
336
+ --button-padding: 0 12px;
337
+
338
+ /* Popover/Menu */
339
+ --popover-bg: var(--bg-vibrancy-popover);
340
+ --popover-border: var(--border-muted);
341
+ --popover-radius: var(--radius-popover);
342
+ --popover-shadow: var(--shadow-popover);
343
+
344
+ /* Selection */
345
+ --selection-bg: var(--color-primary-500);
346
+ --selection-text: white;
347
+ }
348
+
349
+ /* ========================================
350
+ * Dark Mode - macOS Dark Appearance
351
+ * ======================================== */
352
+
353
+ .dark,
354
+ [data-theme="dark"] {
355
+ /* Vibrancy - Dark mode */
356
+ --vibrancy-light: rgba(40, 40, 40, 0.72);
357
+ --vibrancy-dark: rgba(30, 30, 30, 0.85);
358
+
359
+ /* Background */
360
+ --bg-primary: var(--color-neutral-950);
361
+ --bg-secondary: var(--color-neutral-900);
362
+ --bg-tertiary: var(--color-neutral-800);
363
+ --bg-elevated: var(--color-neutral-900);
364
+ --bg-sunken: #000000;
365
+ --bg-hover: rgba(255, 255, 255, 0.06);
366
+ --bg-active: rgba(255, 255, 255, 0.1);
367
+ --bg-selected: rgba(0, 122, 255, 0.25);
368
+
369
+ /* Vibrancy backgrounds - Dark */
370
+ --bg-vibrancy: var(--vibrancy-dark);
371
+ --bg-vibrancy-sidebar: rgba(30, 30, 30, 0.85);
372
+ --bg-vibrancy-navbar: rgba(28, 28, 30, 0.85);
373
+ --bg-vibrancy-popover: rgba(40, 40, 42, 0.95);
374
+
375
+ /* Text - Dark mode */
376
+ --text-primary: rgba(255, 255, 255, 0.92);
377
+ --text-secondary: rgba(255, 255, 255, 0.6);
378
+ --text-tertiary: rgba(255, 255, 255, 0.4);
379
+ --text-muted: rgba(255, 255, 255, 0.25);
380
+ --text-inverted: rgba(0, 0, 0, 0.85);
381
+ --text-link: #0a84ff; /* macOS dark mode blue */
382
+ --text-link-hover: #409cff;
383
+
384
+ /* Border - Dark mode */
385
+ --border-default: rgba(255, 255, 255, 0.1);
386
+ --border-muted: rgba(255, 255, 255, 0.06);
387
+ --border-emphasis: rgba(255, 255, 255, 0.15);
388
+ --border-focus: #0a84ff;
389
+ --border-separator: rgba(255, 255, 255, 0.08);
390
+
391
+ /* Shadow - Dark mode (more prominent) */
392
+ --shadow-xs: 0 0 0 1px rgba(255, 255, 255, 0.04);
393
+ --shadow-sm: 0 2px 8px rgba(0, 0, 0, 0.4);
394
+ --shadow-md: 0 4px 16px rgba(0, 0, 0, 0.5);
395
+ --shadow-lg: 0 8px 32px rgba(0, 0, 0, 0.6);
396
+ --shadow-xl: 0 16px 48px rgba(0, 0, 0, 0.7);
397
+ --shadow-2xl: 0 24px 64px rgba(0, 0, 0, 0.8);
398
+ --shadow-window: 0 22px 70px rgba(0, 0, 0, 0.5), 0 0 0 1px rgba(255, 255, 255, 0.05);
399
+ --shadow-popover: 0 4px 24px rgba(0, 0, 0, 0.5), 0 0 0 1px rgba(255, 255, 255, 0.05);
400
+
401
+ /* Component overrides - Dark */
402
+ --sidebar-bg: var(--bg-vibrancy-sidebar);
403
+ --navbar-bg: var(--bg-vibrancy-navbar);
404
+ --card-bg: var(--color-neutral-900);
405
+ --card-border: var(--border-muted);
406
+ --input-bg: rgba(255, 255, 255, 0.06);
407
+ --popover-bg: var(--bg-vibrancy-popover);
408
+
409
+ /* macOS Dark mode colors */
410
+ --color-primary-500: #0a84ff;
411
+ --color-success-500: #30d158;
412
+ --color-warning-500: #ff9f0a;
413
+ --color-danger-500: #ff453a;
414
+ }
415
+
416
+ /* ========================================
417
+ * macOS Utility Classes
418
+ * ======================================== */
419
+
420
+ /* Vibrancy/Blur effect */
421
+ .vibrancy {
422
+ background: var(--bg-vibrancy);
423
+ backdrop-filter: blur(var(--blur-macos)) saturate(180%);
424
+ -webkit-backdrop-filter: blur(var(--blur-macos)) saturate(180%);
425
+ }
426
+
427
+ .vibrancy-sidebar {
428
+ background: var(--bg-vibrancy-sidebar);
429
+ backdrop-filter: blur(var(--blur-macos)) saturate(180%);
430
+ -webkit-backdrop-filter: blur(var(--blur-macos)) saturate(180%);
431
+ }
432
+
433
+ .vibrancy-navbar {
434
+ background: var(--bg-vibrancy-navbar);
435
+ backdrop-filter: blur(var(--blur-macos)) saturate(180%);
436
+ -webkit-backdrop-filter: blur(var(--blur-macos)) saturate(180%);
437
+ }
438
+
439
+ /* Focus ring - macOS style */
440
+ .focus-ring {
441
+ outline: none;
442
+ }
443
+
444
+ .focus-ring:focus-visible {
445
+ box-shadow: 0 0 0 3px rgba(0, 122, 255, 0.4);
446
+ outline: none;
447
+ }
448
+
449
+ /* macOS selection highlight */
450
+ ::selection {
451
+ background: var(--selection-bg);
452
+ color: var(--selection-text);
453
+ }
454
+
455
+ /* Smooth scrolling */
456
+ .smooth-scroll {
457
+ scroll-behavior: smooth;
458
+ -webkit-overflow-scrolling: touch;
459
+ }
460
+
461
+ /* Hide scrollbar but keep functionality */
462
+ .scrollbar-hidden {
463
+ scrollbar-width: none;
464
+ -ms-overflow-style: none;
465
+ }
466
+
467
+ .scrollbar-hidden::-webkit-scrollbar {
468
+ display: none;
469
+ }
470
+
471
+ /* macOS-style thin scrollbar */
472
+ .scrollbar-thin {
473
+ scrollbar-width: thin;
474
+ scrollbar-color: rgba(0, 0, 0, 0.2) transparent;
475
+ }
476
+
477
+ .scrollbar-thin::-webkit-scrollbar {
478
+ width: 8px;
479
+ height: 8px;
480
+ }
481
+
482
+ .scrollbar-thin::-webkit-scrollbar-track {
483
+ background: transparent;
484
+ }
485
+
486
+ .scrollbar-thin::-webkit-scrollbar-thumb {
487
+ background: rgba(0, 0, 0, 0.2);
488
+ border-radius: 4px;
489
+ border: 2px solid transparent;
490
+ background-clip: padding-box;
491
+ }
492
+
493
+ .scrollbar-thin::-webkit-scrollbar-thumb:hover {
494
+ background: rgba(0, 0, 0, 0.35);
495
+ border: 2px solid transparent;
496
+ background-clip: padding-box;
497
+ }
498
+
499
+ .dark .scrollbar-thin {
500
+ scrollbar-color: rgba(255, 255, 255, 0.2) transparent;
501
+ }
502
+
503
+ .dark .scrollbar-thin::-webkit-scrollbar-thumb {
504
+ background: rgba(255, 255, 255, 0.2);
505
+ }
506
+
507
+ .dark .scrollbar-thin::-webkit-scrollbar-thumb:hover {
508
+ background: rgba(255, 255, 255, 0.35);
509
+ }
510
+
511
+ /* Truncate text */
512
+ .truncate {
513
+ overflow: hidden;
514
+ text-overflow: ellipsis;
515
+ white-space: nowrap;
516
+ }
517
+
518
+ /* Line clamp */
519
+ .line-clamp-1 {
520
+ display: -webkit-box;
521
+ -webkit-line-clamp: 1;
522
+ -webkit-box-orient: vertical;
523
+ overflow: hidden;
524
+ }
525
+
526
+ .line-clamp-2 {
527
+ display: -webkit-box;
528
+ -webkit-line-clamp: 2;
529
+ -webkit-box-orient: vertical;
530
+ overflow: hidden;
531
+ }
532
+
533
+ .line-clamp-3 {
534
+ display: -webkit-box;
535
+ -webkit-line-clamp: 3;
536
+ -webkit-box-orient: vertical;
537
+ overflow: hidden;
538
+ }
539
+
540
+ /* Screen reader only */
541
+ .sr-only {
542
+ position: absolute;
543
+ width: 1px;
544
+ height: 1px;
545
+ padding: 0;
546
+ margin: -1px;
547
+ overflow: hidden;
548
+ clip: rect(0, 0, 0, 0);
549
+ white-space: nowrap;
550
+ border: 0;
551
+ }
552
+
553
+ /* Transitions */
554
+ .transition-colors {
555
+ transition-property: color, background-color, border-color, fill, stroke;
556
+ transition-duration: var(--transition-normal);
557
+ transition-timing-function: var(--ease-default);
558
+ }
559
+
560
+ .transition-all {
561
+ transition-property: all;
562
+ transition-duration: var(--transition-normal);
563
+ transition-timing-function: var(--ease-default);
564
+ }
565
+
566
+ .transition-transform {
567
+ transition-property: transform;
568
+ transition-duration: var(--transition-normal);
569
+ transition-timing-function: var(--ease-default);
570
+ }
571
+
572
+ .transition-opacity {
573
+ transition-property: opacity;
574
+ transition-duration: var(--transition-normal);
575
+ transition-timing-function: var(--ease-default);
576
+ }
577
+
578
+ /* Spring animation */
579
+ .transition-spring {
580
+ transition-timing-function: var(--ease-spring);
581
+ }
582
+
583
+ /* macOS-style active state (press down) */
584
+ .active-scale:active {
585
+ transform: scale(0.97);
586
+ }
587
+
588
+ /* Draggable region for Tauri/Electron */
589
+ .drag-region {
590
+ -webkit-app-region: drag;
591
+ app-region: drag;
592
+ }
593
+
594
+ .no-drag {
595
+ -webkit-app-region: no-drag;
596
+ app-region: no-drag;
597
+ }