@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.
- package/TODO.md +21 -0
- package/ai/AGENTS.md +79 -0
- package/ai/README.md +45 -0
- package/ai/claude/launch.json +12 -0
- package/ai/skills/stacks-actions/SKILL.md +128 -0
- package/ai/skills/stacks-ai/SKILL.md +276 -0
- package/ai/skills/stacks-alias/SKILL.md +94 -0
- package/ai/skills/stacks-analytics/SKILL.md +91 -0
- package/ai/skills/stacks-api/SKILL.md +738 -0
- package/ai/skills/stacks-arrays/SKILL.md +277 -0
- package/ai/skills/stacks-auth/SKILL.md +422 -0
- package/ai/skills/stacks-auto-imports/SKILL.md +138 -0
- package/ai/skills/stacks-brandkit/SKILL.md +811 -0
- package/ai/skills/stacks-browse/SKILL.md +127 -0
- package/ai/skills/stacks-browse/scripts/browse.ts +492 -0
- package/ai/skills/stacks-browser/SKILL.md +145 -0
- package/ai/skills/stacks-buddy/SKILL.md +676 -0
- package/ai/skills/stacks-build/SKILL.md +163 -0
- package/ai/skills/stacks-cache/SKILL.md +125 -0
- package/ai/skills/stacks-calendar/SKILL.md +113 -0
- package/ai/skills/stacks-chat/SKILL.md +371 -0
- package/ai/skills/stacks-cli/SKILL.md +112 -0
- package/ai/skills/stacks-cloud/SKILL.md +192 -0
- package/ai/skills/stacks-cms/SKILL.md +217 -0
- package/ai/skills/stacks-collections/SKILL.md +82 -0
- package/ai/skills/stacks-commerce/SKILL.md +114 -0
- package/ai/skills/stacks-composables/SKILL.md +161 -0
- package/ai/skills/stacks-config/SKILL.md +144 -0
- package/ai/skills/stacks-configuration/SKILL.md +154 -0
- package/ai/skills/stacks-cron/SKILL.md +123 -0
- package/ai/skills/stacks-crosswind/SKILL.md +190 -0
- package/ai/skills/stacks-dashboard/SKILL.md +173 -0
- package/ai/skills/stacks-database/SKILL.md +286 -0
- package/ai/skills/stacks-datetime/SKILL.md +269 -0
- package/ai/skills/stacks-dependencies/SKILL.md +111 -0
- package/ai/skills/stacks-deploy/SKILL.md +102 -0
- package/ai/skills/stacks-design-brutalist/SKILL.md +110 -0
- package/ai/skills/stacks-design-minimalist/SKILL.md +115 -0
- package/ai/skills/stacks-design-output/SKILL.md +55 -0
- package/ai/skills/stacks-design-soft/SKILL.md +156 -0
- package/ai/skills/stacks-design-taste/SKILL.md +1012 -0
- package/ai/skills/stacks-design-taste-codex/SKILL.md +294 -0
- package/ai/skills/stacks-desktop/SKILL.md +78 -0
- package/ai/skills/stacks-development/SKILL.md +298 -0
- package/ai/skills/stacks-dns/SKILL.md +149 -0
- package/ai/skills/stacks-docs/SKILL.md +109 -0
- package/ai/skills/stacks-email/SKILL.md +236 -0
- package/ai/skills/stacks-enums/SKILL.md +100 -0
- package/ai/skills/stacks-env/SKILL.md +181 -0
- package/ai/skills/stacks-error-handling/SKILL.md +137 -0
- package/ai/skills/stacks-events/SKILL.md +228 -0
- package/ai/skills/stacks-faker/SKILL.md +158 -0
- package/ai/skills/stacks-git/SKILL.md +158 -0
- package/ai/skills/stacks-guard/SKILL.md +98 -0
- package/ai/skills/stacks-health/SKILL.md +75 -0
- package/ai/skills/stacks-http/SKILL.md +316 -0
- package/ai/skills/stacks-i18n/SKILL.md +198 -0
- package/ai/skills/stacks-image-to-code/SKILL.md +629 -0
- package/ai/skills/stacks-imagegen-mobile/SKILL.md +1474 -0
- package/ai/skills/stacks-imagegen-web/SKILL.md +998 -0
- package/ai/skills/stacks-investigate/SKILL.md +119 -0
- package/ai/skills/stacks-jobs/SKILL.md +136 -0
- package/ai/skills/stacks-lint/SKILL.md +184 -0
- package/ai/skills/stacks-listeners/SKILL.md +99 -0
- package/ai/skills/stacks-logging/SKILL.md +78 -0
- package/ai/skills/stacks-mail/SKILL.md +120 -0
- package/ai/skills/stacks-middleware/SKILL.md +249 -0
- package/ai/skills/stacks-migrations/SKILL.md +105 -0
- package/ai/skills/stacks-models/SKILL.md +267 -0
- package/ai/skills/stacks-new-feature/SKILL.md +206 -0
- package/ai/skills/stacks-notifications/SKILL.md +210 -0
- package/ai/skills/stacks-objects/SKILL.md +205 -0
- package/ai/skills/stacks-office-hours/SKILL.md +134 -0
- package/ai/skills/stacks-orm/SKILL.md +342 -0
- package/ai/skills/stacks-path/SKILL.md +118 -0
- package/ai/skills/stacks-payments/SKILL.md +373 -0
- package/ai/skills/stacks-plan-review/SKILL.md +152 -0
- package/ai/skills/stacks-plugins/SKILL.md +149 -0
- package/ai/skills/stacks-push/SKILL.md +376 -0
- package/ai/skills/stacks-query-builder/SKILL.md +128 -0
- package/ai/skills/stacks-queue/SKILL.md +559 -0
- package/ai/skills/stacks-realtime/SKILL.md +442 -0
- package/ai/skills/stacks-redesign/SKILL.md +182 -0
- package/ai/skills/stacks-registry/SKILL.md +58 -0
- package/ai/skills/stacks-repl/SKILL.md +80 -0
- package/ai/skills/stacks-retro/SKILL.md +122 -0
- package/ai/skills/stacks-review/SKILL.md +135 -0
- package/ai/skills/stacks-router/SKILL.md +231 -0
- package/ai/skills/stacks-routes/SKILL.md +105 -0
- package/ai/skills/stacks-scaffolding/SKILL.md +162 -0
- package/ai/skills/stacks-scheduler/SKILL.md +363 -0
- package/ai/skills/stacks-search-engine/SKILL.md +112 -0
- package/ai/skills/stacks-security/SKILL.md +129 -0
- package/ai/skills/stacks-security-audit/SKILL.md +128 -0
- package/ai/skills/stacks-server/SKILL.md +458 -0
- package/ai/skills/stacks-shell/SKILL.md +62 -0
- package/ai/skills/stacks-slug/SKILL.md +87 -0
- package/ai/skills/stacks-sms/SKILL.md +385 -0
- package/ai/skills/stacks-socials/SKILL.md +303 -0
- package/ai/skills/stacks-storage/SKILL.md +576 -0
- package/ai/skills/stacks-strings/SKILL.md +416 -0
- package/ai/skills/stacks-stx/SKILL.md +176 -0
- package/ai/skills/stacks-technical-diagrams/LICENSE +22 -0
- package/ai/skills/stacks-technical-diagrams/SKILL.md +290 -0
- package/ai/skills/stacks-technical-diagrams/agents/openai.yaml +4 -0
- package/ai/skills/stacks-technical-diagrams/assets/template.html +1252 -0
- package/ai/skills/stacks-technical-diagrams/bin/technical-diagrams.mjs +289 -0
- package/ai/skills/stacks-technical-diagrams/bunfig.toml +1 -0
- package/ai/skills/stacks-technical-diagrams/examples/agent-run.lifecycle.json +64 -0
- package/ai/skills/stacks-technical-diagrams/examples/agent-tool-call.workflow.json +88 -0
- package/ai/skills/stacks-technical-diagrams/examples/cache-miss-request.sequence.json +75 -0
- package/ai/skills/stacks-technical-diagrams/examples/product-analytics.dataflow.json +70 -0
- package/ai/skills/stacks-technical-diagrams/examples/web-app.architecture.json +41 -0
- package/ai/skills/stacks-technical-diagrams/renderers/architecture/grid.mjs +62 -0
- package/ai/skills/stacks-technical-diagrams/renderers/architecture/render-architecture.mjs +371 -0
- package/ai/skills/stacks-technical-diagrams/renderers/dataflow/README.md +82 -0
- package/ai/skills/stacks-technical-diagrams/renderers/dataflow/render-dataflow.mjs +295 -0
- package/ai/skills/stacks-technical-diagrams/renderers/lifecycle/README.md +91 -0
- package/ai/skills/stacks-technical-diagrams/renderers/lifecycle/render-lifecycle.mjs +384 -0
- package/ai/skills/stacks-technical-diagrams/renderers/sequence/README.md +84 -0
- package/ai/skills/stacks-technical-diagrams/renderers/sequence/render-sequence.mjs +257 -0
- package/ai/skills/stacks-technical-diagrams/renderers/shared/cli.mjs +42 -0
- package/ai/skills/stacks-technical-diagrams/renderers/shared/generated-validators.mjs +13 -0
- package/ai/skills/stacks-technical-diagrams/renderers/shared/geometry.mjs +230 -0
- package/ai/skills/stacks-technical-diagrams/renderers/shared/layout-report.mjs +40 -0
- package/ai/skills/stacks-technical-diagrams/renderers/shared/utils.mjs +88 -0
- package/ai/skills/stacks-technical-diagrams/renderers/shared/validator.mjs +40 -0
- package/ai/skills/stacks-technical-diagrams/renderers/workflow/README.md +103 -0
- package/ai/skills/stacks-technical-diagrams/renderers/workflow/render-workflow.mjs +481 -0
- package/ai/skills/stacks-technical-diagrams/schemas/README.md +68 -0
- package/ai/skills/stacks-technical-diagrams/schemas/architecture.schema.json +121 -0
- package/ai/skills/stacks-technical-diagrams/schemas/common.schema.json +43 -0
- package/ai/skills/stacks-technical-diagrams/schemas/dataflow.schema.json +221 -0
- package/ai/skills/stacks-technical-diagrams/schemas/lifecycle.schema.json +241 -0
- package/ai/skills/stacks-technical-diagrams/schemas/sequence.schema.json +186 -0
- package/ai/skills/stacks-technical-diagrams/schemas/workflow.schema.json +332 -0
- package/ai/skills/stacks-technical-diagrams/scripts/check-render-output.mjs +297 -0
- package/ai/skills/stacks-technical-diagrams/scripts/render-examples.mjs +28 -0
- package/ai/skills/stacks-testing/SKILL.md +129 -0
- package/ai/skills/stacks-tunnel/SKILL.md +125 -0
- package/ai/skills/stacks-types/SKILL.md +178 -0
- package/ai/skills/stacks-ui/SKILL.md +246 -0
- package/ai/skills/stacks-utils/SKILL.md +444 -0
- package/ai/skills/stacks-validation/SKILL.md +371 -0
- package/ai/skills/stacks-whois/SKILL.md +315 -0
- package/assets/world-map-data.ts +121 -0
- package/bootstrap.ts +114 -0
- package/docs/api-examples.md +46 -0
- package/docs/index.md +24 -0
- package/docs/markdown-examples.md +87 -0
- package/functions/analytics.ts +97 -0
- package/functions/api.ts +143 -0
- package/functions/auth.ts +208 -0
- package/functions/billing/payments.ts +149 -0
- package/functions/blog.ts +120 -0
- package/functions/cms/categorizables.ts +107 -0
- package/functions/cms/pages.ts +108 -0
- package/functions/cms/posts.ts +100 -0
- package/functions/cms/taggables.ts +102 -0
- package/functions/commerce/coupons.ts +128 -0
- package/functions/commerce/customers.ts +128 -0
- package/functions/commerce/gift-cards.ts +119 -0
- package/functions/commerce/orders.ts +112 -0
- package/functions/commerce/payments.ts +119 -0
- package/functions/commerce/products/categories.ts +123 -0
- package/functions/commerce/products/manufacturers.ts +123 -0
- package/functions/commerce/products/products.ts +123 -0
- package/functions/commerce/products/reviews.ts +123 -0
- package/functions/commerce/products/units.ts +123 -0
- package/functions/commerce/products/variants.ts +123 -0
- package/functions/commerce/shippings/delivery-routes.ts +123 -0
- package/functions/commerce/shippings/digital-deliveries.ts +119 -0
- package/functions/commerce/shippings/drivers.ts +123 -0
- package/functions/commerce/shippings/license-keys.ts +123 -0
- package/functions/commerce/shippings/shipping-methods.ts +123 -0
- package/functions/commerce/shippings/shipping-rates.ts +119 -0
- package/functions/commerce/shippings/shipping-zones.ts +119 -0
- package/functions/commerce/taxes.ts +119 -0
- package/functions/commerce/waitlist/products.ts +123 -0
- package/functions/commerce/waitlist/restaurants.ts +123 -0
- package/functions/craft.ts +107 -0
- package/functions/dashboard.ts +153 -0
- package/functions/inbox.ts +95 -0
- package/functions/jobs.ts +86 -0
- package/functions/monitoring/errors.ts +295 -0
- package/functions/queue.ts +111 -0
- package/functions/realtime/websockets.ts +96 -0
- package/functions/realtime.ts +52 -0
- package/functions/releases.ts +49 -0
- package/functions/search.ts +126 -0
- package/functions/toasts.ts +95 -0
- package/functions/uploads.ts +216 -0
- package/ide/.gitignore +4 -0
- package/ide/cursor/rules/auto-imports.mdc +574 -0
- package/ide/cursor/rules/code-style.mdc +12 -0
- package/ide/cursor/rules/documentation.mdc +9 -0
- package/ide/cursor/rules/error-handling-validation.mdc +11 -0
- package/ide/cursor/rules/key-conventions.mdc +11 -0
- package/ide/cursor/rules/project-structure.mdc +169 -0
- package/ide/cursor/rules/readme.mdc +318 -0
- package/ide/cursor/rules/syntax-formatting.mdc +9 -0
- package/ide/cursor/rules/testing.mdc +10 -0
- package/ide/cursor/rules/typescript.mdc +9 -0
- package/ide/cursor/rules/ui-styling.mdc +0 -0
- package/ide/dictionary.txt +397 -0
- package/ide/jetbrains/.fleet/settings.json +4 -0
- package/ide/jetbrains/.idea/.gitignore +5 -0
- package/ide/jetbrains/.idea/.name +1 -0
- package/ide/jetbrains/.idea/inspectionProfiles/Project_Default.xml +6 -0
- package/ide/jetbrains/.idea/jsLinters/eslint.xml +7 -0
- package/ide/jetbrains/.idea/modules.xml +8 -0
- package/ide/jetbrains/.idea/stacks.iml +22 -0
- package/ide/jetbrains/.idea/vcs.xml +6 -0
- package/ide/jetbrains/.idea/webResources.xml +14 -0
- package/ide/jetbrains/IntelliJ IDEA Global Settings +0 -0
- package/ide/jetbrains/installed.txt +4 -0
- package/ide/jetbrains/options/github-copilot.xml +5 -0
- package/ide/jetbrains/options/nodejs.xml +7 -0
- package/ide/jetbrains/options/templates.xml +124 -0
- package/ide/jetbrains/templates/JavaScript.xml +6 -0
- package/ide/jetbrains/templates/Stacks.xml +8 -0
- package/ide/vscode/.vscode/README.md +23 -0
- package/ide/vscode/.vscode/extensions.json +5 -0
- package/ide/vscode/.vscode/settings.json +176 -0
- package/ide/vscode/.vscode/stacks.code-snippets +181 -0
- package/ide/vscode/LICENSE.md +21 -0
- package/ide/vscode/README.md +36 -0
- package/ide/vscode/logo.png +0 -0
- package/ide/vscode/package.json +79 -0
- package/ide/zed/.zed/settings.json +139 -0
- package/lang/README.md +28 -0
- package/lang/de.yml +14 -0
- package/lang/en.yml +15 -0
- package/package.json +19 -3
- package/project/bootstrap +161 -0
- package/project/buddy +175 -0
- package/project/storage/framework/tsconfig.app.json +50 -0
- package/project/storage/framework/tsconfig.base.json +58 -0
- package/routes/core.ts +78 -0
- package/routes/dashboard-api.ts +233 -0
- package/routes/dashboard.ts +739 -0
- package/routes/email.ts +129 -0
- package/stores/[name].stx +16 -0
- package/stores/git.ts +71 -0
- package/stores/payment.ts +474 -0
- package/stores/queue.ts +43 -0
- package/stores/user.ts +29 -0
- package/stx-components-plugin.ts +25 -0
- package/styles/design-tokens.css +597 -0
- package/types/dashboard.ts +70 -0
- package/types/defaults.ts +438 -0
- package/vcs/github/CODE_OF_CONDUCT.md +83 -0
- package/vcs/github/CONTRIBUTING.md +187 -0
- package/vcs/github/EXPLANATIONS.md +41 -0
- package/vcs/github/FUNDING.yml +1 -0
- package/vcs/github/ISSUE_TEMPLATE/bug_report.yml +49 -0
- package/vcs/github/ISSUE_TEMPLATE/config.yml +10 -0
- package/vcs/github/ISSUE_TEMPLATE/feature_request.yml +44 -0
- package/vcs/github/SECURITY.md +70 -0
- package/vcs/github/renovate.json +5 -0
- package/vcs/github/stale.yml +14 -0
- package/vcs/github/workflows/README.md +16 -0
- package/vcs/github/workflows/ci.yml +114 -0
- package/vcs/github/workflows/export-size.yml +25 -0
- package/vcs/github/workflows/labeler.yml +13 -0
- package/vcs/github/workflows/release.yml +219 -0
- package/views/[...all].stx +8 -0
- package/views/about.md +3 -0
- package/views/auth/login.stx +1 -0
- package/views/auth/signup.stx +85 -0
- package/views/dashboard/.discovered-models.json +542 -0
- package/views/dashboard/AUDIT.md +904 -0
- package/views/dashboard/[...all].stx +89 -0
- package/views/dashboard/access-tokens/index.stx +177 -0
- package/views/dashboard/actions/index.stx +129 -0
- package/views/dashboard/analytics/blog/index.stx +356 -0
- package/views/dashboard/analytics/browsers/index.stx +263 -0
- package/views/dashboard/analytics/commerce/sales/index.stx +329 -0
- package/views/dashboard/analytics/commerce/web/index.stx +379 -0
- package/views/dashboard/analytics/countries/index.stx +289 -0
- package/views/dashboard/analytics/devices/index.stx +305 -0
- package/views/dashboard/analytics/events/index.stx +536 -0
- package/views/dashboard/analytics/index.stx +88 -0
- package/views/dashboard/analytics/marketing/index.stx +315 -0
- package/views/dashboard/analytics/pages/index.stx +271 -0
- package/views/dashboard/analytics/referrers/index.stx +319 -0
- package/views/dashboard/analytics/web/index.stx +356 -0
- package/views/dashboard/buddy/index.stx +198 -0
- package/views/dashboard/ci/index.stx +462 -0
- package/views/dashboard/cloud/index.stx +452 -0
- package/views/dashboard/commands/index.stx +295 -0
- package/views/dashboard/commerce/categories/index.stx +406 -0
- package/views/dashboard/commerce/coupons/index.stx +485 -0
- package/views/dashboard/commerce/customers/index.stx +410 -0
- package/views/dashboard/commerce/dashboard/index.stx +287 -0
- package/views/dashboard/commerce/delivery/delivery-routes.stx +305 -0
- package/views/dashboard/commerce/delivery/digital-delivery.stx +332 -0
- package/views/dashboard/commerce/delivery/drivers.stx +397 -0
- package/views/dashboard/commerce/delivery/index.stx +18 -0
- package/views/dashboard/commerce/delivery/license-keys.stx +380 -0
- package/views/dashboard/commerce/delivery/shipping-methods.stx +346 -0
- package/views/dashboard/commerce/delivery/shipping-rates.stx +338 -0
- package/views/dashboard/commerce/delivery/shipping-zones.stx +302 -0
- package/views/dashboard/commerce/delivery/tabs.ts +25 -0
- package/views/dashboard/commerce/gift-cards/index.stx +561 -0
- package/views/dashboard/commerce/manufacturers/index.stx +308 -0
- package/views/dashboard/commerce/orders/index.stx +247 -0
- package/views/dashboard/commerce/payments/index.stx +535 -0
- package/views/dashboard/commerce/pos/index.stx +653 -0
- package/views/dashboard/commerce/printers/devices/index.stx +273 -0
- package/views/dashboard/commerce/printers/receipts/index.stx +308 -0
- package/views/dashboard/commerce/products/detail.stx +563 -0
- package/views/dashboard/commerce/products/index.stx +370 -0
- package/views/dashboard/commerce/reviews/index.stx +656 -0
- package/views/dashboard/commerce/reviews/index.ts +0 -0
- package/views/dashboard/commerce/taxes/index.stx +377 -0
- package/views/dashboard/commerce/units/index.stx +317 -0
- package/views/dashboard/commerce/variants/index.stx +319 -0
- package/views/dashboard/commerce/waitlist/products.stx +942 -0
- package/views/dashboard/commerce/waitlist/restaurant.stx +1024 -0
- package/views/dashboard/components/index.stx +330 -0
- package/views/dashboard/composables/index.ts +19 -0
- package/views/dashboard/composables/useChart.ts +77 -0
- package/views/dashboard/composables/useNavigation.ts +99 -0
- package/views/dashboard/composables/useRole.ts +58 -0
- package/views/dashboard/composables/useTheme.ts +74 -0
- package/views/dashboard/content/authors/index.stx +171 -0
- package/views/dashboard/content/blog/index.stx +493 -0
- package/views/dashboard/content/categories/index.stx +169 -0
- package/views/dashboard/content/comments/index.stx +189 -0
- package/views/dashboard/content/dashboard.stx +383 -0
- package/views/dashboard/content/files/index.stx +706 -0
- package/views/dashboard/content/pages/index.stx +174 -0
- package/views/dashboard/content/posts/index.stx +269 -0
- package/views/dashboard/content/seo/index.stx +240 -0
- package/views/dashboard/content/tags/index.stx +167 -0
- package/views/dashboard/data/activity/index.stx +261 -0
- package/views/dashboard/data/dashboard/index.stx +116 -0
- package/views/dashboard/data/subscribers.stx +270 -0
- package/views/dashboard/data/teams.stx +275 -0
- package/views/dashboard/data/users.stx +279 -0
- package/views/dashboard/dependencies/index.stx +178 -0
- package/views/dashboard/deployments/[id].stx +234 -0
- package/views/dashboard/deployments/index.stx +9 -0
- package/views/dashboard/dns/index.stx +163 -0
- package/views/dashboard/environment/index.stx +283 -0
- package/views/dashboard/errors/index.stx +274 -0
- package/views/dashboard/forgot-password.stx +57 -0
- package/views/dashboard/functions/index.stx +159 -0
- package/views/dashboard/health/index.stx +248 -0
- package/views/dashboard/inbox/activity.stx +350 -0
- package/views/dashboard/inbox/index.stx +452 -0
- package/views/dashboard/inbox/settings.stx +290 -0
- package/views/dashboard/index.stx +252 -0
- package/views/dashboard/insights/index.stx +529 -0
- package/views/dashboard/jobs/[id].stx +430 -0
- package/views/dashboard/jobs/history.stx +222 -0
- package/views/dashboard/jobs/index.stx +214 -0
- package/views/dashboard/kanban/[id].stx +899 -0
- package/views/dashboard/kanban/index.stx +260 -0
- package/views/dashboard/layouts/default.stx +565 -0
- package/views/dashboard/layouts/guest.stx +10 -0
- package/views/dashboard/login.stx +48 -0
- package/views/dashboard/logs/index.stx +540 -0
- package/views/dashboard/mailboxes/index.stx +149 -0
- package/views/dashboard/management/permissions/index.stx +490 -0
- package/views/dashboard/marketing/campaigns/index.stx +604 -0
- package/views/dashboard/marketing/lists/index.stx +514 -0
- package/views/dashboard/marketing/reviews/index.stx +475 -0
- package/views/dashboard/marketing/social-posts/index.stx +560 -0
- package/views/dashboard/models/[model].stx +195 -0
- package/views/dashboard/models/index.stx +159 -0
- package/views/dashboard/monitoring/errors/index.stx +415 -0
- package/views/dashboard/notifications/dashboard.stx +383 -0
- package/views/dashboard/notifications/email.stx +336 -0
- package/views/dashboard/notifications/history.stx +373 -0
- package/views/dashboard/notifications/sms.stx +332 -0
- package/views/dashboard/packages/index.stx +195 -0
- package/views/dashboard/queries/[id].stx +381 -0
- package/views/dashboard/queries/history.stx +227 -0
- package/views/dashboard/queries/index.stx +335 -0
- package/views/dashboard/queries/slow.stx +318 -0
- package/views/dashboard/queue/index.stx +427 -0
- package/views/dashboard/realtime/index.stx +429 -0
- package/views/dashboard/register.stx +46 -0
- package/views/dashboard/releases/index.stx +389 -0
- package/views/dashboard/requests/index.stx +462 -0
- package/views/dashboard/serverless/index.stx +475 -0
- package/views/dashboard/servers/[id].stx +299 -0
- package/views/dashboard/servers/index.stx +483 -0
- package/views/dashboard/settings/billing.stx +50 -0
- package/views/dashboard/settings/index.stx +256 -0
- package/views/dashboard/settings/mail.stx +252 -0
- package/views/dashboard/stores/auth.ts +123 -0
- package/views/dashboard/stores/ci.ts +342 -0
- package/views/dashboard/stores/index.ts +129 -0
- package/views/dashboard/stores/kanban.ts +723 -0
- package/views/dashboard/stores/rbac.ts +350 -0
- package/views/dashboard/stx.config.ts +34 -0
- package/views/dashboard/teams/[id].stx +170 -0
- package/views/forum/category.stx +92 -0
- package/views/forum/index.stx +209 -0
- package/views/forum/new-topic.stx +113 -0
- package/views/forum/profile.stx +1 -0
- package/views/forum/topic.stx +143 -0
- package/views/hello-world/[name].stx +47 -0
- package/views/index.stx +21 -0
- package/views/system-tray/index.stx +147 -0
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
@extends('layouts/default')
|
|
2
|
+
|
|
3
|
+
@section('content')
|
|
4
|
+
@title('Server Details')
|
|
5
|
+
<div class="py-4 lg:py-8 min-h-screen dark:bg-neutral-800">
|
|
6
|
+
<div class="px-4 sm:px-6 lg:px-8">
|
|
7
|
+
<div class="mb-8">
|
|
8
|
+
<div class="flex items-center justify-between">
|
|
9
|
+
<div class="flex gap-2 items-center">
|
|
10
|
+
<div>
|
|
11
|
+
<h3 class="font-semibold leading-6 text-base text-gray-900 dark:text-neutral-100">{{ serverName() }}</h3>
|
|
12
|
+
<p class="mt-2 text-gray-700 text-sm dark:text-neutral-400">Server details and firewall rules.</p>
|
|
13
|
+
</div>
|
|
14
|
+
</div>
|
|
15
|
+
|
|
16
|
+
<div class="flex gap-4 items-center">
|
|
17
|
+
<StxLink to="/servers" class="inline-flex gap-1 items-center text-blue-600 text-sm dark:text-blue-400 hover:text-blue-800 dark:hover:text-blue-300 duration-200 transition-colors">
|
|
18
|
+
<div class="h-4 w-4 i-hugeicons-arrow-left"></div>
|
|
19
|
+
Back to Servers
|
|
20
|
+
</StxLink>
|
|
21
|
+
</div>
|
|
22
|
+
</div>
|
|
23
|
+
</div>
|
|
24
|
+
|
|
25
|
+
<div class="mb-8 bg-white dark:bg-neutral-700 rounded-lg shadow">
|
|
26
|
+
<div class="px-4 py-5 sm:p-6">
|
|
27
|
+
<h4 class="mb-4 font-medium text-gray-900 text-lg dark:text-neutral-100">Server Information</h4>
|
|
28
|
+
<dl class="grid gap-x-4 gap-y-6 grid-cols-1 sm:grid-cols-2 lg:grid-cols-3">
|
|
29
|
+
<div>
|
|
30
|
+
<dt class="font-medium text-gray-500 text-sm dark:text-neutral-400">Domain</dt>
|
|
31
|
+
<dd class="mt-1 text-gray-900 text-sm dark:text-neutral-100">{{ serverDomain() }}</dd>
|
|
32
|
+
</div>
|
|
33
|
+
<div>
|
|
34
|
+
<dt class="font-medium text-gray-500 text-sm dark:text-neutral-400">Region</dt>
|
|
35
|
+
<dd class="mt-1 text-gray-900 text-sm dark:text-neutral-100">{{ serverRegion() }}</dd>
|
|
36
|
+
</div>
|
|
37
|
+
<div>
|
|
38
|
+
<dt class="font-medium text-gray-500 text-sm dark:text-neutral-400">Type</dt>
|
|
39
|
+
<dd class="mt-1 text-gray-900 text-sm dark:text-neutral-100">{{ serverType() }}</dd>
|
|
40
|
+
</div>
|
|
41
|
+
<div>
|
|
42
|
+
<dt class="font-medium text-gray-500 text-sm dark:text-neutral-400">Size</dt>
|
|
43
|
+
<dd class="mt-1 text-gray-900 text-sm dark:text-neutral-100">{{ serverSize() }}</dd>
|
|
44
|
+
</div>
|
|
45
|
+
<div>
|
|
46
|
+
<dt class="font-medium text-gray-500 text-sm dark:text-neutral-400">Operating System</dt>
|
|
47
|
+
<dd class="mt-1 text-gray-900 text-sm dark:text-neutral-100">{{ serverOS() }}</dd>
|
|
48
|
+
</div>
|
|
49
|
+
<div>
|
|
50
|
+
<dt class="font-medium text-gray-500 text-sm dark:text-neutral-400">Disk Size</dt>
|
|
51
|
+
<dd class="mt-1 text-gray-900 text-sm dark:text-neutral-100">{{ serverDiskSize() }}GB</dd>
|
|
52
|
+
</div>
|
|
53
|
+
<div :show="hasBunVersion">
|
|
54
|
+
<dt class="font-medium text-gray-500 text-sm dark:text-neutral-400">Bun Version</dt>
|
|
55
|
+
<dd class="mt-1 text-gray-900 text-sm dark:text-neutral-100">{{ serverBunVersion() }}</dd>
|
|
56
|
+
</div>
|
|
57
|
+
<div :show="hasDatabase">
|
|
58
|
+
<dt class="font-medium text-gray-500 text-sm dark:text-neutral-400">Database</dt>
|
|
59
|
+
<dd class="mt-1 text-gray-900 text-sm dark:text-neutral-100">{{ serverDatabase() }}</dd>
|
|
60
|
+
</div>
|
|
61
|
+
<div :show="hasSearchEngine">
|
|
62
|
+
<dt class="font-medium text-gray-500 text-sm dark:text-neutral-400">Search Engine</dt>
|
|
63
|
+
<dd class="mt-1 text-gray-900 text-sm dark:text-neutral-100">{{ serverSearchEngine() }}</dd>
|
|
64
|
+
</div>
|
|
65
|
+
</dl>
|
|
66
|
+
</div>
|
|
67
|
+
</div>
|
|
68
|
+
|
|
69
|
+
<div class="bg-white dark:bg-neutral-700 rounded-lg shadow">
|
|
70
|
+
<div class="px-4 py-5 sm:p-6">
|
|
71
|
+
<div class="flex items-center justify-between mb-6">
|
|
72
|
+
<div>
|
|
73
|
+
<h4 class="font-medium text-gray-900 text-lg dark:text-neutral-100">Firewall Rules (UFW)</h4>
|
|
74
|
+
<p class="mt-1 text-gray-500 text-sm dark:text-neutral-400">Manage incoming and outgoing traffic to your server.</p>
|
|
75
|
+
</div>
|
|
76
|
+
<button @click="openAddRule()" type="button" class="inline-flex gap-2 items-center px-3.5 py-2.5 font-semibold text-sm text-white bg-blue-600 hover:bg-blue-500 rounded-md focus-visible:outline focus-visible:outline-2 focus-visible:outline-blue-600 focus-visible:outline-offset-2 shadow-sm duration-200 transition-colors">
|
|
77
|
+
<span class="text-lg">+</span>
|
|
78
|
+
Add Rule
|
|
79
|
+
</button>
|
|
80
|
+
</div>
|
|
81
|
+
|
|
82
|
+
<div :show="isAddingRule" class="mb-6 p-4 bg-gray-50 dark:bg-neutral-600 rounded-lg">
|
|
83
|
+
<div class="grid gap-4 grid-cols-1 sm:grid-cols-2 lg:grid-cols-6">
|
|
84
|
+
<div class="lg:col-span-1">
|
|
85
|
+
<label class="block mb-1 font-medium text-gray-700 text-sm dark:text-neutral-300">Port</label>
|
|
86
|
+
<select x-model="newRulePort" class="block px-3 py-2 h-10 w-full text-gray-900 text-sm dark:text-neutral-100 bg-white dark:bg-neutral-700 border-0 ring-1 ring-gray-300 ring-inset rounded-md dark:ring-neutral-600 focus:ring-2 focus:ring-blue-600 duration-200 transition-colors">
|
|
87
|
+
<option value="" disabled>Select a port</option>
|
|
88
|
+
<template :for="port in commonPorts">
|
|
89
|
+
<option :value="port.port">{{ port.port }} ({{ port.name }})</option>
|
|
90
|
+
</template>
|
|
91
|
+
<option value="custom">Custom Port</option>
|
|
92
|
+
</select>
|
|
93
|
+
<input :show="isCustomPort" x-model="newRuleCustomPort" type="text" placeholder="Enter port number" class="block mt-2 px-3 py-2 h-10 w-full text-gray-900 text-sm dark:text-neutral-100 bg-white dark:bg-neutral-700 border-0 ring-1 ring-gray-300 ring-inset rounded-md dark:ring-neutral-600 focus:ring-2 focus:ring-blue-600 duration-200 transition-colors" />
|
|
94
|
+
</div>
|
|
95
|
+
<div class="lg:col-span-1">
|
|
96
|
+
<label class="block mb-1 font-medium text-gray-700 text-sm dark:text-neutral-300">From IP</label>
|
|
97
|
+
<input x-model="newRuleFrom" type="text" placeholder="0.0.0.0" class="block px-3 py-2 h-10 w-full text-gray-900 text-sm dark:text-neutral-100 bg-white dark:bg-neutral-700 border-0 ring-1 ring-gray-300 ring-inset rounded-md dark:ring-neutral-600 focus:ring-2 focus:ring-blue-600 duration-200 transition-colors" />
|
|
98
|
+
</div>
|
|
99
|
+
<div class="lg:col-span-1">
|
|
100
|
+
<label class="block mb-1 font-medium text-gray-700 text-sm dark:text-neutral-300">Protocol</label>
|
|
101
|
+
<select x-model="newRuleProtocol" class="block px-3 py-2 h-10 w-full text-gray-900 text-sm dark:text-neutral-100 bg-white dark:bg-neutral-700 border-0 ring-1 ring-gray-300 ring-inset rounded-md dark:ring-neutral-600 focus:ring-2 focus:ring-blue-600 duration-200 transition-colors">
|
|
102
|
+
<option value="tcp">TCP</option>
|
|
103
|
+
<option value="udp">UDP</option>
|
|
104
|
+
<option value="any">Any</option>
|
|
105
|
+
</select>
|
|
106
|
+
</div>
|
|
107
|
+
<div class="lg:col-span-1">
|
|
108
|
+
<label class="block mb-1 font-medium text-gray-700 text-sm dark:text-neutral-300">Action</label>
|
|
109
|
+
<select x-model="newRuleAction" class="block px-3 py-2 h-10 w-full text-gray-900 text-sm dark:text-neutral-100 bg-white dark:bg-neutral-700 border-0 ring-1 ring-gray-300 ring-inset rounded-md dark:ring-neutral-600 focus:ring-2 focus:ring-blue-600 duration-200 transition-colors">
|
|
110
|
+
<option value="ALLOW">Allow</option>
|
|
111
|
+
<option value="DENY">Deny</option>
|
|
112
|
+
</select>
|
|
113
|
+
</div>
|
|
114
|
+
<div class="lg:col-span-2">
|
|
115
|
+
<label class="block mb-1 font-medium text-gray-700 text-sm dark:text-neutral-300">Description</label>
|
|
116
|
+
<input x-model="newRuleDescription" type="text" placeholder="Rule description" class="block px-3 py-2 h-10 w-full text-gray-900 text-sm dark:text-neutral-100 bg-white dark:bg-neutral-700 border-0 ring-1 ring-gray-300 ring-inset rounded-md dark:ring-neutral-600 focus:ring-2 focus:ring-blue-600 duration-200 transition-colors" />
|
|
117
|
+
</div>
|
|
118
|
+
</div>
|
|
119
|
+
<div class="flex gap-3 justify-end mt-4">
|
|
120
|
+
<button @click="cancelAddRule()" type="button" class="inline-flex items-center px-3 py-2 font-medium text-gray-700 text-sm dark:text-neutral-300 bg-white dark:bg-neutral-600 hover:bg-gray-50 dark:hover:bg-neutral-500 ring-1 ring-gray-300 ring-inset rounded-md dark:ring-neutral-600 focus-visible:outline focus-visible:outline-2 focus-visible:outline-blue-600 focus-visible:outline-offset-2 shadow-sm duration-200 transition-colors">Cancel</button>
|
|
121
|
+
<button @click="addRule()" type="button" class="inline-flex items-center px-3 py-2 font-medium text-sm text-white bg-blue-600 hover:bg-blue-500 rounded-md focus-visible:outline focus-visible:outline-2 focus-visible:outline-blue-600 focus-visible:outline-offset-2 shadow-sm duration-200 transition-colors">Add Rule</button>
|
|
122
|
+
</div>
|
|
123
|
+
</div>
|
|
124
|
+
|
|
125
|
+
<div class="mt-4">
|
|
126
|
+
<div class="overflow-x-auto">
|
|
127
|
+
<table class="min-w-full divide-gray-200 divide-y dark:divide-neutral-600">
|
|
128
|
+
<thead>
|
|
129
|
+
<tr>
|
|
130
|
+
<th class="px-6 py-3 font-medium text-gray-500 text-left text-xs tracking-wider uppercase dark:text-neutral-400 bg-gray-50 dark:bg-neutral-600">Port</th>
|
|
131
|
+
<th class="px-6 py-3 font-medium text-gray-500 text-left text-xs tracking-wider uppercase dark:text-neutral-400 bg-gray-50 dark:bg-neutral-600">From</th>
|
|
132
|
+
<th class="px-6 py-3 font-medium text-gray-500 text-left text-xs tracking-wider uppercase dark:text-neutral-400 bg-gray-50 dark:bg-neutral-600">Protocol</th>
|
|
133
|
+
<th class="px-6 py-3 font-medium text-gray-500 text-left text-xs tracking-wider uppercase dark:text-neutral-400 bg-gray-50 dark:bg-neutral-600">Action</th>
|
|
134
|
+
<th class="px-6 py-3 font-medium text-gray-500 text-left text-xs tracking-wider uppercase dark:text-neutral-400 bg-gray-50 dark:bg-neutral-600">Description</th>
|
|
135
|
+
<th class="px-6 py-3 font-medium text-gray-500 text-right text-xs tracking-wider uppercase dark:text-neutral-400 bg-gray-50 dark:bg-neutral-600">Actions</th>
|
|
136
|
+
</tr>
|
|
137
|
+
</thead>
|
|
138
|
+
<tbody class="bg-white dark:bg-neutral-700 divide-gray-200 divide-y dark:divide-neutral-600">
|
|
139
|
+
<template :for="rule in ufwRulesList">
|
|
140
|
+
<tr>
|
|
141
|
+
<td class="px-6 py-4 text-gray-900 text-sm whitespace-nowrap dark:text-neutral-100">{{ rule.port }}</td>
|
|
142
|
+
<td class="px-6 py-4 text-gray-500 text-sm whitespace-nowrap dark:text-neutral-400">{{ rule.from }}</td>
|
|
143
|
+
<td class="px-6 py-4 text-gray-500 text-sm whitespace-nowrap dark:text-neutral-400">{{ rule.protocol.toUpperCase() }}</td>
|
|
144
|
+
<td class="px-6 py-4 whitespace-nowrap">
|
|
145
|
+
<span :class="ruleActionClass(rule.action)" class="inline-flex items-center px-2.5 py-0.5 font-medium text-xs rounded-full">{{ rule.action }}</span>
|
|
146
|
+
</td>
|
|
147
|
+
<td class="px-6 py-4 text-gray-500 text-sm whitespace-nowrap dark:text-neutral-400">{{ rule.description }}</td>
|
|
148
|
+
<td class="px-6 py-4 font-medium text-right text-sm whitespace-nowrap">
|
|
149
|
+
<button @click="removeRule(rule.id)" class="text-red-600 dark:text-red-400 hover:text-red-900 dark:hover:text-red-300">Remove</button>
|
|
150
|
+
</td>
|
|
151
|
+
</tr>
|
|
152
|
+
</template>
|
|
153
|
+
</tbody>
|
|
154
|
+
</table>
|
|
155
|
+
</div>
|
|
156
|
+
</div>
|
|
157
|
+
</div>
|
|
158
|
+
</div>
|
|
159
|
+
</div>
|
|
160
|
+
</div>
|
|
161
|
+
|
|
162
|
+
<script client>
|
|
163
|
+
// Common port preset list — moved out of the former `<script server>`
|
|
164
|
+
// block (stacksjs/stacks#1838).
|
|
165
|
+
const commonPorts = [
|
|
166
|
+
{ port: '22', name: 'SSH' },
|
|
167
|
+
{ port: '80', name: 'HTTP' },
|
|
168
|
+
{ port: '443', name: 'HTTPS' },
|
|
169
|
+
{ port: '3306', name: 'MySQL' },
|
|
170
|
+
{ port: '5432', name: 'PostgreSQL' },
|
|
171
|
+
{ port: '6379', name: 'Redis' },
|
|
172
|
+
{ port: '11211', name: 'Memcached' },
|
|
173
|
+
{ port: '7700', name: 'Meilisearch' },
|
|
174
|
+
]
|
|
175
|
+
|
|
176
|
+
interface ServerConfig {
|
|
177
|
+
name: string
|
|
178
|
+
domain: string
|
|
179
|
+
region: string
|
|
180
|
+
type: string
|
|
181
|
+
size: string
|
|
182
|
+
diskSize: number
|
|
183
|
+
serverOS: string
|
|
184
|
+
bunVersion?: string
|
|
185
|
+
database?: string
|
|
186
|
+
databaseName?: string
|
|
187
|
+
searchEngine?: string
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
interface UfwRule {
|
|
191
|
+
id: number
|
|
192
|
+
port: string
|
|
193
|
+
from: string
|
|
194
|
+
to: string
|
|
195
|
+
protocol: 'tcp' | 'udp' | 'any'
|
|
196
|
+
action: 'ALLOW' | 'DENY'
|
|
197
|
+
description: string
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
const route = useRoute()
|
|
201
|
+
|
|
202
|
+
const server = state<ServerConfig>({
|
|
203
|
+
name: 'app-cosmic-nebula',
|
|
204
|
+
domain: 'stacksjs.com',
|
|
205
|
+
region: 'us-east-1',
|
|
206
|
+
type: 'app',
|
|
207
|
+
size: 't3.micro',
|
|
208
|
+
diskSize: 20,
|
|
209
|
+
serverOS: 'ubuntu-24-lts-x86_64',
|
|
210
|
+
bunVersion: 'v1.2.3',
|
|
211
|
+
database: 'sqlite',
|
|
212
|
+
databaseName: 'stacks',
|
|
213
|
+
searchEngine: 'meilisearch',
|
|
214
|
+
})
|
|
215
|
+
|
|
216
|
+
const ufwRules = state<UfwRule[]>([
|
|
217
|
+
{ id: 1, port: '22', from: '0.0.0.0', to: 'any', protocol: 'tcp', action: 'ALLOW', description: 'SSH Access' },
|
|
218
|
+
{ id: 2, port: '80', from: '0.0.0.0', to: 'any', protocol: 'tcp', action: 'ALLOW', description: 'HTTP Traffic' },
|
|
219
|
+
{ id: 3, port: '443', from: '0.0.0.0', to: 'any', protocol: 'tcp', action: 'ALLOW', description: 'HTTPS Traffic' },
|
|
220
|
+
])
|
|
221
|
+
|
|
222
|
+
const isAddingRule = state(false)
|
|
223
|
+
const newRulePort = state('')
|
|
224
|
+
const newRuleCustomPort = state('')
|
|
225
|
+
const newRuleFrom = state('0.0.0.0')
|
|
226
|
+
const newRuleTo = state('any')
|
|
227
|
+
const newRuleProtocol = state<'tcp' | 'udp' | 'any'>('tcp')
|
|
228
|
+
const newRuleAction = state<'ALLOW' | 'DENY'>('ALLOW')
|
|
229
|
+
const newRuleDescription = state('')
|
|
230
|
+
|
|
231
|
+
const isCustomPort = derived(() => newRulePort() === 'custom')
|
|
232
|
+
const hasBunVersion = derived(() => Boolean(server().bunVersion))
|
|
233
|
+
const hasDatabase = derived(() => Boolean(server().database))
|
|
234
|
+
const hasSearchEngine = derived(() => Boolean(server().searchEngine))
|
|
235
|
+
|
|
236
|
+
function serverName(): string { return server().name }
|
|
237
|
+
function serverDomain(): string { return server().domain }
|
|
238
|
+
function serverRegion(): string { return server().region }
|
|
239
|
+
function serverType(): string { return server().type }
|
|
240
|
+
function serverSize(): string { return server().size }
|
|
241
|
+
function serverOS(): string { return server().serverOS }
|
|
242
|
+
function serverDiskSize(): number { return server().diskSize }
|
|
243
|
+
function serverBunVersion(): string { return server().bunVersion ?? '' }
|
|
244
|
+
function serverDatabase(): string { return server().database ?? '' }
|
|
245
|
+
function serverSearchEngine(): string { return server().searchEngine ?? '' }
|
|
246
|
+
function ufwRulesList(): UfwRule[] { return ufwRules() }
|
|
247
|
+
|
|
248
|
+
function ruleActionClass(action: string): string {
|
|
249
|
+
return action === 'ALLOW'
|
|
250
|
+
? 'bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-300'
|
|
251
|
+
: 'bg-red-100 text-red-800 dark:bg-red-900 dark:text-red-300'
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
function openAddRule(): void {
|
|
255
|
+
isAddingRule.set(true)
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
function cancelAddRule(): void {
|
|
259
|
+
isAddingRule.set(false)
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
function resetNewRule(): void {
|
|
263
|
+
newRulePort.set('')
|
|
264
|
+
newRuleCustomPort.set('')
|
|
265
|
+
newRuleFrom.set('0.0.0.0')
|
|
266
|
+
newRuleTo.set('any')
|
|
267
|
+
newRuleProtocol.set('tcp')
|
|
268
|
+
newRuleAction.set('ALLOW')
|
|
269
|
+
newRuleDescription.set('')
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
function addRule(): void {
|
|
273
|
+
const port = newRulePort() === 'custom' ? newRuleCustomPort() : newRulePort()
|
|
274
|
+
if (!port || !newRuleDescription())
|
|
275
|
+
return
|
|
276
|
+
const rules = ufwRules()
|
|
277
|
+
ufwRules.set([...rules, {
|
|
278
|
+
id: Math.max(0, ...rules.map(r => r.id)) + 1,
|
|
279
|
+
port,
|
|
280
|
+
from: newRuleFrom(),
|
|
281
|
+
to: newRuleTo(),
|
|
282
|
+
protocol: newRuleProtocol(),
|
|
283
|
+
action: newRuleAction(),
|
|
284
|
+
description: newRuleDescription(),
|
|
285
|
+
}])
|
|
286
|
+
resetNewRule()
|
|
287
|
+
isAddingRule.set(false)
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
function removeRule(id: number): void {
|
|
291
|
+
ufwRules.set(ufwRules().filter(r => r.id !== id))
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
onMount(() => {
|
|
295
|
+
void route.params.id
|
|
296
|
+
})
|
|
297
|
+
</script>
|
|
298
|
+
|
|
299
|
+
@endsection
|