@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,159 @@
|
|
|
1
|
+
@extends('layouts/default')
|
|
2
|
+
|
|
3
|
+
@section('content')
|
|
4
|
+
<script client>
|
|
5
|
+
|
|
6
|
+
interface FunctionRow {
|
|
7
|
+
name: string
|
|
8
|
+
size: string
|
|
9
|
+
path: string
|
|
10
|
+
updatedAt: string
|
|
11
|
+
createdAt: string
|
|
12
|
+
status: 'active' | 'draft' | 'archived'
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
// Placeholder data — moved out of the former `<script server>` block
|
|
16
|
+
// (stacksjs/stacks#1838). Wire this up to whatever lists
|
|
17
|
+
// `./resources/functions/*` once the framework exposes a directory
|
|
18
|
+
// walker — the table renders against
|
|
19
|
+
// `name/size/path/updatedAt/createdAt/status` so the swap is a one-line
|
|
20
|
+
// replacement of `functions = …`.
|
|
21
|
+
const functions: FunctionRow[] = [
|
|
22
|
+
{ name: 'sendInvoice', size: '5.2 kB', path: './resources/functions/send-invoice.ts', updatedAt: '2026-04-19 09:04', createdAt: '2025-11-03 08:23', status: 'active' },
|
|
23
|
+
{ name: 'syncCustomer', size: '3.8 kB', path: './resources/functions/sync-customer.ts', updatedAt: '2026-04-12 14:11', createdAt: '2025-12-01 11:45', status: 'active' },
|
|
24
|
+
{ name: 'cleanupSessions', size: '2.1 kB', path: './resources/functions/cleanup-sessions.ts', updatedAt: '2026-03-30 22:08', createdAt: '2026-01-14 09:02', status: 'active' },
|
|
25
|
+
{ name: 'reportDigest', size: '6.4 kB', path: './resources/functions/report-digest.ts', updatedAt: '2026-04-22 07:55', createdAt: '2026-02-09 13:31', status: 'draft' },
|
|
26
|
+
]
|
|
27
|
+
|
|
28
|
+
const totalCount = functions.length
|
|
29
|
+
const activeCount = functions.filter(f => f.status === 'active').length
|
|
30
|
+
const draftCount = functions.filter(f => f.status === 'draft').length
|
|
31
|
+
|
|
32
|
+
function statusVariant(status: string) {
|
|
33
|
+
if (status === 'active') return 'success'
|
|
34
|
+
if (status === 'draft') return 'warning'
|
|
35
|
+
if (status === 'archived') return 'default'
|
|
36
|
+
return 'default'
|
|
37
|
+
}
|
|
38
|
+
</script>
|
|
39
|
+
|
|
40
|
+
<div class="mx-auto pb-12 pt-6 px-6 space-y-6 max-w-6xl">
|
|
41
|
+
|
|
42
|
+
<PageHeader
|
|
43
|
+
title="Functions"
|
|
44
|
+
description="Serverless functions defined in resources/functions"
|
|
45
|
+
>
|
|
46
|
+
<template #actions>
|
|
47
|
+
<Button variant="primary" size="md">Create function</Button>
|
|
48
|
+
</template>
|
|
49
|
+
</PageHeader>
|
|
50
|
+
|
|
51
|
+
<!-- Stats -->
|
|
52
|
+
<div class="grid gap-3 grid-cols-3">
|
|
53
|
+
<Card variant="default" padding="md">
|
|
54
|
+
<div class="flex gap-3 items-center">
|
|
55
|
+
<div class="flex flex-shrink-0 items-center justify-center h-10 w-10 text-blue-600 dark:text-blue-400 bg-blue-500/10 dark:bg-blue-400/15 rounded-lg">
|
|
56
|
+
<svg class="h-5 w-5" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.8">
|
|
57
|
+
<path stroke-linecap="round" stroke-linejoin="round" d="M10 20l4-16m4 4l4 4-4 4M6 16l-4-4 4-4"/>
|
|
58
|
+
</svg>
|
|
59
|
+
</div>
|
|
60
|
+
<div class="min-w-0">
|
|
61
|
+
<p class="text-[11px] text-neutral-500 tracking-wider uppercase dark:text-neutral-400">Total</p>
|
|
62
|
+
<p class="font-semibold leading-tight text-2xl text-neutral-900 tracking-tight dark:text-white">{{ totalCount }}</p>
|
|
63
|
+
</div>
|
|
64
|
+
</div>
|
|
65
|
+
</Card>
|
|
66
|
+
<Card variant="default" padding="md">
|
|
67
|
+
<div class="flex gap-3 items-center">
|
|
68
|
+
<div class="flex flex-shrink-0 items-center justify-center h-10 w-10 text-green-600 dark:text-green-400 bg-green-500/10 dark:bg-green-400/15 rounded-lg">
|
|
69
|
+
<svg class="h-5 w-5" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2">
|
|
70
|
+
<path stroke-linecap="round" stroke-linejoin="round" d="M5 13l4 4L19 7"/>
|
|
71
|
+
</svg>
|
|
72
|
+
</div>
|
|
73
|
+
<div class="min-w-0">
|
|
74
|
+
<p class="text-[11px] text-neutral-500 tracking-wider uppercase dark:text-neutral-400">Active</p>
|
|
75
|
+
<p class="font-semibold leading-tight text-2xl text-neutral-900 tracking-tight dark:text-white">{{ activeCount }}</p>
|
|
76
|
+
</div>
|
|
77
|
+
</div>
|
|
78
|
+
</Card>
|
|
79
|
+
<Card variant="default" padding="md">
|
|
80
|
+
<div class="flex gap-3 items-center">
|
|
81
|
+
<div class="flex flex-shrink-0 items-center justify-center h-10 w-10 text-amber-600 dark:text-amber-400 bg-amber-500/10 dark:bg-amber-400/15 rounded-lg">
|
|
82
|
+
<svg class="h-5 w-5" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2">
|
|
83
|
+
<path stroke-linecap="round" stroke-linejoin="round" d="M12 4v16m8-8H4"/>
|
|
84
|
+
</svg>
|
|
85
|
+
</div>
|
|
86
|
+
<div class="min-w-0">
|
|
87
|
+
<p class="text-[11px] text-neutral-500 tracking-wider uppercase dark:text-neutral-400">Draft</p>
|
|
88
|
+
<p class="font-semibold leading-tight text-2xl text-neutral-900 tracking-tight dark:text-white">{{ draftCount }}</p>
|
|
89
|
+
</div>
|
|
90
|
+
</div>
|
|
91
|
+
</Card>
|
|
92
|
+
</div>
|
|
93
|
+
|
|
94
|
+
<!-- Functions table -->
|
|
95
|
+
<Card variant="default" padding="none">
|
|
96
|
+
<div class="flex items-baseline justify-between px-5 py-4 border-b border-neutral-200/60 dark:border-white/5">
|
|
97
|
+
<div>
|
|
98
|
+
<h3 class="font-semibold text-base text-neutral-900 dark:text-white">All functions</h3>
|
|
99
|
+
<p class="mt-0.5 text-neutral-500 text-xs dark:text-neutral-400">
|
|
100
|
+
{{ totalCount }} {{ totalCount === 1 ? 'function' : 'functions' }} loaded from <code class="px-1 py-0.5 font-mono text-[11px] bg-black/5 dark:bg-white/10 rounded">resources/functions</code>
|
|
101
|
+
</p>
|
|
102
|
+
</div>
|
|
103
|
+
</div>
|
|
104
|
+
|
|
105
|
+
@if(functions.length === 0)
|
|
106
|
+
<div class="p-8">
|
|
107
|
+
<EmptyState
|
|
108
|
+
title="No functions yet"
|
|
109
|
+
description="Create your first function in resources/functions/."
|
|
110
|
+
/>
|
|
111
|
+
</div>
|
|
112
|
+
@else
|
|
113
|
+
<div class="overflow-x-auto">
|
|
114
|
+
<table class="min-w-full divide-neutral-200/60 divide-y dark:divide-white/5">
|
|
115
|
+
<thead class="bg-neutral-50/60 dark:bg-white/[0.02]">
|
|
116
|
+
<tr>
|
|
117
|
+
<th class="px-5 py-2.5 font-medium text-[11px] text-left text-neutral-500 tracking-wider uppercase dark:text-neutral-400">Name</th>
|
|
118
|
+
<th class="px-5 py-2.5 font-medium text-[11px] text-left text-neutral-500 tracking-wider uppercase dark:text-neutral-400">Path</th>
|
|
119
|
+
<th class="px-5 py-2.5 font-medium text-[11px] text-left text-neutral-500 tracking-wider uppercase dark:text-neutral-400">Size</th>
|
|
120
|
+
<th class="px-5 py-2.5 font-medium text-[11px] text-left text-neutral-500 tracking-wider uppercase dark:text-neutral-400">Status</th>
|
|
121
|
+
<th class="px-5 py-2.5 font-medium text-[11px] text-left text-neutral-500 tracking-wider uppercase dark:text-neutral-400">Updated</th>
|
|
122
|
+
<th class="px-5 py-2.5 text-right">
|
|
123
|
+
<span class="sr-only">Actions</span>
|
|
124
|
+
</th>
|
|
125
|
+
</tr>
|
|
126
|
+
</thead>
|
|
127
|
+
<tbody class="divide-neutral-200/60 divide-y dark:divide-white/5">
|
|
128
|
+
<template :for="fn in functions">
|
|
129
|
+
<tr class="hover:bg-neutral-50/60 dark:hover:bg-white/[0.02] transition-colors">
|
|
130
|
+
<td class="px-5 py-3 font-medium text-neutral-900 text-sm whitespace-nowrap dark:text-white">
|
|
131
|
+
{{ fn.name }}
|
|
132
|
+
</td>
|
|
133
|
+
<td class="px-5 py-3 font-mono text-neutral-500 text-xs whitespace-nowrap dark:text-neutral-400">
|
|
134
|
+
{{ fn.path }}
|
|
135
|
+
</td>
|
|
136
|
+
<td class="px-5 py-3 font-mono text-neutral-600 text-xs whitespace-nowrap dark:text-neutral-300">
|
|
137
|
+
{{ fn.size }}
|
|
138
|
+
</td>
|
|
139
|
+
<td class="px-5 py-3 whitespace-nowrap">
|
|
140
|
+
<Badge :variant="statusVariant(fn.status)" size="sm">{{ fn.status }}</Badge>
|
|
141
|
+
</td>
|
|
142
|
+
<td class="px-5 py-3 text-neutral-500 text-xs whitespace-nowrap dark:text-neutral-400">
|
|
143
|
+
{{ fn.updatedAt }}
|
|
144
|
+
</td>
|
|
145
|
+
<td class="px-5 py-3 text-right whitespace-nowrap">
|
|
146
|
+
<a href="#" class="text-blue-600 text-sm dark:text-blue-400 hover:underline">
|
|
147
|
+
Edit
|
|
148
|
+
</a>
|
|
149
|
+
</td>
|
|
150
|
+
</tr>
|
|
151
|
+
</template>
|
|
152
|
+
</tbody>
|
|
153
|
+
</table>
|
|
154
|
+
</div>
|
|
155
|
+
@endif
|
|
156
|
+
</Card>
|
|
157
|
+
|
|
158
|
+
</div>
|
|
159
|
+
@endsection
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
@extends('layouts/default')
|
|
2
|
+
|
|
3
|
+
@section('content')
|
|
4
|
+
<script client>
|
|
5
|
+
|
|
6
|
+
// Health checks demo data — moved out of the former `<script server>`
|
|
7
|
+
// block (stacksjs/stacks#1838).
|
|
8
|
+
interface Metric {
|
|
9
|
+
label: string
|
|
10
|
+
value: string
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
interface HealthCheck {
|
|
14
|
+
name: string
|
|
15
|
+
status: 'success' | 'info' | 'warning' | 'danger'
|
|
16
|
+
description: string
|
|
17
|
+
/** Inline SVG path data — `d=""` content for a 24x24 stroke icon. */
|
|
18
|
+
iconPath: string
|
|
19
|
+
metrics: Metric[]
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
// Placeholder data — moved out of the former `<script server>` block
|
|
23
|
+
// (stacksjs/stacks#1838). Wire this to a real health endpoint once the
|
|
24
|
+
// dashboard exposes one (e.g. `GET /api/dashboard/health`). The
|
|
25
|
+
// `iconPath` strings are inline SVG `d` attributes — we render them
|
|
26
|
+
// with a single shared <svg> wrapper so the icon system doesn't
|
|
27
|
+
// depend on a CSS engine.
|
|
28
|
+
const checks: HealthCheck[] = [
|
|
29
|
+
{
|
|
30
|
+
name: 'Uptime',
|
|
31
|
+
status: 'success',
|
|
32
|
+
description: 'Your site is up. Last checked less than a minute ago.',
|
|
33
|
+
iconPath: 'M13 10V3L4 14h7v7l9-11h-7z',
|
|
34
|
+
metrics: [
|
|
35
|
+
{ label: 'Past 7 days', value: '100%' },
|
|
36
|
+
{ label: 'Past 14 days', value: '100%' },
|
|
37
|
+
{ label: 'Past 30 days', value: '100%' },
|
|
38
|
+
],
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
name: 'Performance',
|
|
42
|
+
status: 'success',
|
|
43
|
+
description: 'Your site is fast. Last checked 3 minutes ago.',
|
|
44
|
+
iconPath: 'M13 10V3L4 14h7v7l9-11h-7z',
|
|
45
|
+
metrics: [
|
|
46
|
+
{ label: 'Response time', value: '235ms' },
|
|
47
|
+
{ label: 'Success rate', value: '99.95%' },
|
|
48
|
+
],
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
name: 'Certificate health',
|
|
52
|
+
status: 'success',
|
|
53
|
+
description: 'TLS certificate is healthy. Last checked 3 minutes ago.',
|
|
54
|
+
iconPath: 'M9 12l2 2 4-4M21 12c0 4.97-4.03 9-9 9s-9-4.03-9-9 4.03-9 9-9 9 4.03 9 9z',
|
|
55
|
+
metrics: [
|
|
56
|
+
{ label: 'Expires in', value: '274 days' },
|
|
57
|
+
{ label: 'Last renewal', value: '2 months ago' },
|
|
58
|
+
],
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
name: 'Broken links',
|
|
62
|
+
status: 'success',
|
|
63
|
+
description: 'No broken links found across crawled pages.',
|
|
64
|
+
iconPath: 'M13.828 10.172a4 4 0 00-5.656 0l-4 4a4 4 0 105.656 5.656l1.102-1.101m-.758-4.899a4 4 0 005.656 0l4-4a4 4 0 00-5.656-5.656l-1.1 1.1',
|
|
65
|
+
metrics: [
|
|
66
|
+
{ label: 'Broken links', value: '0' },
|
|
67
|
+
{ label: 'URLs crawled', value: '583' },
|
|
68
|
+
],
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
name: 'Mixed content',
|
|
72
|
+
status: 'success',
|
|
73
|
+
description: 'No mixed content found. Last checked an hour ago.',
|
|
74
|
+
iconPath: 'M12 15v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2zm10-10V7a4 4 0 00-8 0v4h8z',
|
|
75
|
+
metrics: [
|
|
76
|
+
{ label: 'Mixed content', value: '0' },
|
|
77
|
+
{ label: 'URLs crawled', value: '583' },
|
|
78
|
+
],
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
name: 'Certificate transparency',
|
|
82
|
+
status: 'info',
|
|
83
|
+
description: 'CT log entry verified. Last checked less than a minute ago.',
|
|
84
|
+
iconPath: 'M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z',
|
|
85
|
+
metrics: [
|
|
86
|
+
{ label: 'Last check', value: '< 1 min ago' },
|
|
87
|
+
{ label: 'Status', value: 'Verified' },
|
|
88
|
+
],
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
name: 'Application health',
|
|
92
|
+
status: 'success',
|
|
93
|
+
description: 'All application checks passing. Last checked 10 minutes ago.',
|
|
94
|
+
iconPath: 'M5 13l4 4L19 7',
|
|
95
|
+
metrics: [
|
|
96
|
+
{ label: 'Total checks', value: '2' },
|
|
97
|
+
{ label: 'Failed', value: '0' },
|
|
98
|
+
{ label: 'Last check', value: '10 min ago' },
|
|
99
|
+
],
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
name: 'DNS',
|
|
103
|
+
status: 'success',
|
|
104
|
+
description: 'DNS records resolved cleanly. Last checked an hour ago.',
|
|
105
|
+
iconPath: 'M3.055 11H5a2 2 0 012 2v1a2 2 0 002 2 2 2 0 012 2v2.945M8 3.935V5.5A2.5 2.5 0 0010.5 8h.5a2 2 0 012 2 2 2 0 104 0 2 2 0 012-2h1.064M15 20.488V18a2 2 0 012-2h3.064M21 12a9 9 0 11-18 0 9 9 0 0118 0z',
|
|
106
|
+
metrics: [
|
|
107
|
+
{ label: 'Records', value: '18' },
|
|
108
|
+
{ label: 'URLs crawled', value: '20' },
|
|
109
|
+
],
|
|
110
|
+
},
|
|
111
|
+
]
|
|
112
|
+
|
|
113
|
+
const passingCount = checks.filter(c => c.status === 'success').length
|
|
114
|
+
const totalCount = checks.length
|
|
115
|
+
const overallStatus: 'success' | 'warning' | 'danger' =
|
|
116
|
+
checks.some(c => c.status === 'danger')
|
|
117
|
+
? 'danger'
|
|
118
|
+
: checks.some(c => c.status === 'warning')
|
|
119
|
+
? 'warning'
|
|
120
|
+
: 'success'
|
|
121
|
+
|
|
122
|
+
const statusIconBg = {
|
|
123
|
+
success: 'bg-green-500/10 text-green-600 dark:bg-green-400/15 dark:text-green-400',
|
|
124
|
+
info: 'bg-blue-500/10 text-blue-600 dark:bg-blue-400/15 dark:text-blue-400',
|
|
125
|
+
warning: 'bg-orange-500/10 text-orange-600 dark:bg-orange-400/15 dark:text-orange-400',
|
|
126
|
+
danger: 'bg-red-500/10 text-red-600 dark:bg-red-400/15 dark:text-red-400',
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
const statusBadgeVariant = {
|
|
130
|
+
success: 'success',
|
|
131
|
+
info: 'primary',
|
|
132
|
+
warning: 'warning',
|
|
133
|
+
danger: 'danger',
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
// Pluralize the metrics-grid columns based on count. Done here in JS
|
|
137
|
+
// because STX templates do not accept array values in `:class`
|
|
138
|
+
// binding (`class="{{ a }} {{ cond ? b : c }}"`); a precomputed string is
|
|
139
|
+
// simpler than threading conditional classes through the template.
|
|
140
|
+
function metricsGridCols(count: number) {
|
|
141
|
+
if (count <= 1) return 'grid-cols-1'
|
|
142
|
+
if (count === 2) return 'grid-cols-2'
|
|
143
|
+
return 'grid-cols-3'
|
|
144
|
+
}
|
|
145
|
+
</script>
|
|
146
|
+
|
|
147
|
+
<div class="mx-auto pb-12 pt-6 px-6 space-y-6 max-w-6xl">
|
|
148
|
+
|
|
149
|
+
<PageHeader title="Health" description="System uptime, performance, and certificate checks">
|
|
150
|
+
<template #actions>
|
|
151
|
+
<Badge :variant="statusBadgeVariant[overallStatus]" size="md">
|
|
152
|
+
{{ overallStatus === 'success' ? 'All systems normal' : overallStatus === 'warning' ? 'Degraded' : 'Critical' }}
|
|
153
|
+
</Badge>
|
|
154
|
+
</template>
|
|
155
|
+
</PageHeader>
|
|
156
|
+
|
|
157
|
+
<!-- Overview stats -->
|
|
158
|
+
<div class="grid gap-4 grid-cols-2 lg:grid-cols-4">
|
|
159
|
+
<Card variant="default" padding="md">
|
|
160
|
+
<div class="flex gap-3 items-center">
|
|
161
|
+
<div class="flex flex-shrink-0 items-center justify-center h-10 w-10 text-green-600 dark:text-green-400 bg-green-500/10 dark:bg-green-400/15 rounded-lg">
|
|
162
|
+
<svg class="h-5 w-5" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2">
|
|
163
|
+
<path stroke-linecap="round" stroke-linejoin="round" d="M13 10V3L4 14h7v7l9-11h-7z"/>
|
|
164
|
+
</svg>
|
|
165
|
+
</div>
|
|
166
|
+
<div class="min-w-0">
|
|
167
|
+
<p class="text-[11px] text-neutral-500 tracking-wider uppercase dark:text-neutral-400">Uptime</p>
|
|
168
|
+
<p class="font-semibold leading-tight text-2xl text-neutral-900 tracking-tight dark:text-white">100%</p>
|
|
169
|
+
</div>
|
|
170
|
+
</div>
|
|
171
|
+
</Card>
|
|
172
|
+
<Card variant="default" padding="md">
|
|
173
|
+
<div class="flex gap-3 items-center">
|
|
174
|
+
<div class="flex flex-shrink-0 items-center justify-center h-10 w-10 text-blue-600 dark:text-blue-400 bg-blue-500/10 dark:bg-blue-400/15 rounded-lg">
|
|
175
|
+
<svg class="h-5 w-5" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2">
|
|
176
|
+
<path stroke-linecap="round" stroke-linejoin="round" d="M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z"/>
|
|
177
|
+
</svg>
|
|
178
|
+
</div>
|
|
179
|
+
<div class="min-w-0">
|
|
180
|
+
<p class="text-[11px] text-neutral-500 tracking-wider uppercase dark:text-neutral-400">Health checks</p>
|
|
181
|
+
<p class="font-semibold leading-tight text-2xl text-neutral-900 tracking-tight dark:text-white">{{ passingCount }}/{{ totalCount }}</p>
|
|
182
|
+
</div>
|
|
183
|
+
</div>
|
|
184
|
+
</Card>
|
|
185
|
+
<Card variant="default" padding="md">
|
|
186
|
+
<div class="flex gap-3 items-center">
|
|
187
|
+
<div class="flex flex-shrink-0 items-center justify-center h-10 w-10 text-purple-600 dark:text-purple-400 bg-purple-500/10 dark:bg-purple-400/15 rounded-lg">
|
|
188
|
+
<svg class="h-5 w-5" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2">
|
|
189
|
+
<path stroke-linecap="round" stroke-linejoin="round" d="M13.828 10.172a4 4 0 00-5.656 0l-4 4a4 4 0 105.656 5.656l1.102-1.101m-.758-4.899a4 4 0 005.656 0l4-4a4 4 0 00-5.656-5.656l-1.1 1.1"/>
|
|
190
|
+
</svg>
|
|
191
|
+
</div>
|
|
192
|
+
<div class="min-w-0">
|
|
193
|
+
<p class="text-[11px] text-neutral-500 tracking-wider uppercase dark:text-neutral-400">URLs monitored</p>
|
|
194
|
+
<p class="font-semibold leading-tight text-2xl text-neutral-900 tracking-tight dark:text-white">583</p>
|
|
195
|
+
</div>
|
|
196
|
+
</div>
|
|
197
|
+
</Card>
|
|
198
|
+
<Card variant="default" padding="md">
|
|
199
|
+
<div class="flex gap-3 items-center">
|
|
200
|
+
<div class="flex flex-shrink-0 items-center justify-center h-10 w-10 text-cyan-600 dark:text-cyan-400 bg-cyan-500/10 dark:bg-cyan-400/15 rounded-lg">
|
|
201
|
+
<svg class="h-5 w-5" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2">
|
|
202
|
+
<path stroke-linecap="round" stroke-linejoin="round" d="M3.055 11H5a2 2 0 012 2v1a2 2 0 002 2 2 2 0 012 2v2.945M8 3.935V5.5A2.5 2.5 0 0010.5 8h.5a2 2 0 012 2 2 2 0 104 0 2 2 0 012-2h1.064M15 20.488V18a2 2 0 012-2h3.064M21 12a9 9 0 11-18 0 9 9 0 0118 0z"/>
|
|
203
|
+
</svg>
|
|
204
|
+
</div>
|
|
205
|
+
<div class="min-w-0">
|
|
206
|
+
<p class="text-[11px] text-neutral-500 tracking-wider uppercase dark:text-neutral-400">DNS records</p>
|
|
207
|
+
<p class="font-semibold leading-tight text-2xl text-neutral-900 tracking-tight dark:text-white">18</p>
|
|
208
|
+
</div>
|
|
209
|
+
</div>
|
|
210
|
+
</Card>
|
|
211
|
+
</div>
|
|
212
|
+
|
|
213
|
+
<!-- Detailed checks -->
|
|
214
|
+
<div class="grid gap-4 grid-cols-1 lg:grid-cols-2">
|
|
215
|
+
<template :for="check in checks">
|
|
216
|
+
<Card variant="default" padding="md" hoverable>
|
|
217
|
+
<div class="flex gap-4 items-start">
|
|
218
|
+
<div :class="statusIconBg[check.status]" class="flex flex-shrink-0 items-center justify-center h-10 w-10 rounded-lg">
|
|
219
|
+
<svg class="h-5 w-5" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2">
|
|
220
|
+
<path stroke-linecap="round" stroke-linejoin="round" :d="check.iconPath"/>
|
|
221
|
+
</svg>
|
|
222
|
+
</div>
|
|
223
|
+
|
|
224
|
+
<div class="flex-1 min-w-0">
|
|
225
|
+
<div class="flex gap-2 items-center justify-between">
|
|
226
|
+
<h3 class="font-medium text-[14px] text-neutral-900 truncate dark:text-white">{{ check.name }}</h3>
|
|
227
|
+
<Badge :variant="statusBadgeVariant[check.status]" size="sm">{{ check.status }}</Badge>
|
|
228
|
+
</div>
|
|
229
|
+
<p class="mt-1 line-clamp-2 text-[12px] text-neutral-500 dark:text-neutral-400">
|
|
230
|
+
{{ check.description }}
|
|
231
|
+
</p>
|
|
232
|
+
|
|
233
|
+
<dl :class="'grid gap-2 mt-4 ' + metricsGridCols(check.metrics.length)">
|
|
234
|
+
<template :for="m in check.metrics">
|
|
235
|
+
<div class="overflow-hidden px-3 py-2 bg-black/[0.03] dark:bg-white/[0.05] rounded-lg">
|
|
236
|
+
<dt class="font-medium text-[11px] text-neutral-500 truncate dark:text-neutral-400">{{ m.label }}</dt>
|
|
237
|
+
<dd class="mt-0.5 font-semibold text-[14px] text-neutral-900 tracking-tight dark:text-white">{{ m.value }}</dd>
|
|
238
|
+
</div>
|
|
239
|
+
</template>
|
|
240
|
+
</dl>
|
|
241
|
+
</div>
|
|
242
|
+
</div>
|
|
243
|
+
</Card>
|
|
244
|
+
</template>
|
|
245
|
+
</div>
|
|
246
|
+
</div>
|
|
247
|
+
|
|
248
|
+
@endsection
|