cfsa-antigravity 1.0.0
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/bin/cli.mjs +324 -0
- package/package.json +34 -0
- package/template/.agent/instructions/commands.md +48 -0
- package/template/.agent/instructions/patterns.md +61 -0
- package/template/.agent/instructions/structure.md +29 -0
- package/template/.agent/instructions/tech-stack.md +43 -0
- package/template/.agent/instructions/workflow.md +41 -0
- package/template/.agent/kit-sync.md +15 -0
- package/template/.agent/rules/boundary-not-placeholder.md +146 -0
- package/template/.agent/rules/completion-checklist.md +48 -0
- package/template/.agent/rules/decision-classification.md +103 -0
- package/template/.agent/rules/extensibility.md +47 -0
- package/template/.agent/rules/question-vs-command.md +81 -0
- package/template/.agent/rules/security-first.md +43 -0
- package/template/.agent/rules/specificity-standards.md +54 -0
- package/template/.agent/rules/tdd-contract-first.md +57 -0
- package/template/.agent/rules/vertical-slices.md +42 -0
- package/template/.agent/skill-library/MANIFEST.md +480 -0
- package/template/.agent/skill-library/README.md +38 -0
- package/template/.agent/skill-library/meta/brand-guidelines/SKILL.md +73 -0
- package/template/.agent/skill-library/meta/claude-code/README.md +9 -0
- package/template/.agent/skill-library/meta/claude-code/agent-development/SKILL.md +415 -0
- package/template/.agent/skill-library/meta/claude-code/hook-development/SKILL.md +712 -0
- package/template/.agent/skill-library/meta/claude-code/plugin-structure/SKILL.md +476 -0
- package/template/.agent/skill-library/meta/git-advanced/SKILL.md +972 -0
- package/template/.agent/skill-library/meta/mcp-builder/SKILL.md +236 -0
- package/template/.agent/skill-library/meta/product-marketing-context/SKILL.md +241 -0
- package/template/.agent/skill-library/meta/regex-patterns/SKILL.md +751 -0
- package/template/.agent/skill-library/meta/tmux-processes/SKILL.md +210 -0
- package/template/.agent/skill-library/meta/using-tmux-for-interactive-commands/SKILL.md +178 -0
- package/template/.agent/skill-library/stack/3d/threejs-pro/SKILL.md +300 -0
- package/template/.agent/skill-library/stack/ai/ai-sdk/SKILL.md +77 -0
- package/template/.agent/skill-library/stack/ai/langchain/SKILL.md +530 -0
- package/template/.agent/skill-library/stack/ai/ollama/SKILL.md +321 -0
- package/template/.agent/skill-library/stack/ai/openai-sdk/SKILL.md +549 -0
- package/template/.agent/skill-library/stack/analytics/google-analytics/SKILL.md +153 -0
- package/template/.agent/skill-library/stack/api/graphql/SKILL.md +1061 -0
- package/template/.agent/skill-library/stack/api/trpc/SKILL.md +576 -0
- package/template/.agent/skill-library/stack/auth/authjs/SKILL.md +569 -0
- package/template/.agent/skill-library/stack/auth/clerk/SKILL.md +590 -0
- package/template/.agent/skill-library/stack/auth/firebase-auth/SKILL.md +734 -0
- package/template/.agent/skill-library/stack/cms/payload-cms/SKILL.md +573 -0
- package/template/.agent/skill-library/stack/cms/shopify/SKILL.md +1193 -0
- package/template/.agent/skill-library/stack/cms/wordpress/SKILL.md +1104 -0
- package/template/.agent/skill-library/stack/css/sass-scss/SKILL.md +1121 -0
- package/template/.agent/skill-library/stack/css/tailwind-css-patterns/SKILL.md +863 -0
- package/template/.agent/skill-library/stack/css/tailwind-design-system/SKILL.md +490 -0
- package/template/.agent/skill-library/stack/css/vanilla-css/SKILL.md +1078 -0
- package/template/.agent/skill-library/stack/databases/clickhouse/SKILL.md +311 -0
- package/template/.agent/skill-library/stack/databases/influxdb/SKILL.md +280 -0
- package/template/.agent/skill-library/stack/databases/lancedb/SKILL.md +415 -0
- package/template/.agent/skill-library/stack/databases/mongodb/SKILL.md +1169 -0
- package/template/.agent/skill-library/stack/databases/neo4j/SKILL.md +839 -0
- package/template/.agent/skill-library/stack/databases/pgvector/SKILL.md +241 -0
- package/template/.agent/skill-library/stack/databases/pinecone/SKILL.md +212 -0
- package/template/.agent/skill-library/stack/databases/postgresql/SKILL.md +658 -0
- package/template/.agent/skill-library/stack/databases/qdrant/SKILL.md +312 -0
- package/template/.agent/skill-library/stack/databases/redis/SKILL.md +1079 -0
- package/template/.agent/skill-library/stack/databases/spacetimedb/SKILL.md +532 -0
- package/template/.agent/skill-library/stack/databases/sqlite/SKILL.md +1132 -0
- package/template/.agent/skill-library/stack/databases/supabase/SKILL.md +640 -0
- package/template/.agent/skill-library/stack/databases/surrealdb-expert/SKILL.md +945 -0
- package/template/.agent/skill-library/stack/databases/timescaledb/SKILL.md +745 -0
- package/template/.agent/skill-library/stack/databases/weaviate/SKILL.md +218 -0
- package/template/.agent/skill-library/stack/devops/github-actions/SKILL.md +554 -0
- package/template/.agent/skill-library/stack/devops/kubernetes/SKILL.md +950 -0
- package/template/.agent/skill-library/stack/devops/nginx/SKILL.md +841 -0
- package/template/.agent/skill-library/stack/devops/terraform/SKILL.md +860 -0
- package/template/.agent/skill-library/stack/email/resend/SKILL.md +391 -0
- package/template/.agent/skill-library/stack/engines/godot/SKILL.md +488 -0
- package/template/.agent/skill-library/stack/extensions/chrome-extension/SKILL.md +375 -0
- package/template/.agent/skill-library/stack/extensions/vscode-extension/SKILL.md +453 -0
- package/template/.agent/skill-library/stack/frameworks/astro-framework/SKILL.md +162 -0
- package/template/.agent/skill-library/stack/frameworks/electron/SKILL.md +1286 -0
- package/template/.agent/skill-library/stack/frameworks/fastapi/SKILL.md +650 -0
- package/template/.agent/skill-library/stack/frameworks/hono/SKILL.md +90 -0
- package/template/.agent/skill-library/stack/frameworks/nestjs/SKILL.md +878 -0
- package/template/.agent/skill-library/stack/frameworks/nextjs/SKILL.md +635 -0
- package/template/.agent/skill-library/stack/frameworks/nuxt/SKILL.md +564 -0
- package/template/.agent/skill-library/stack/frameworks/sveltekit/SKILL.md +614 -0
- package/template/.agent/skill-library/stack/frameworks/tauri/SKILL.md +920 -0
- package/template/.agent/skill-library/stack/gamedev/godot/SKILL.md +1032 -0
- package/template/.agent/skill-library/stack/gamedev/unity/SKILL.md +1175 -0
- package/template/.agent/skill-library/stack/hosting/aws/SKILL.md +467 -0
- package/template/.agent/skill-library/stack/hosting/cloudflare/SKILL.md +201 -0
- package/template/.agent/skill-library/stack/hosting/docker-expert/SKILL.md +409 -0
- package/template/.agent/skill-library/stack/hosting/vercel/SKILL.md +484 -0
- package/template/.agent/skill-library/stack/languages/bash-scripting/SKILL.md +773 -0
- package/template/.agent/skill-library/stack/languages/c-cpp/SKILL.md +712 -0
- package/template/.agent/skill-library/stack/languages/gdscript/SKILL.md +789 -0
- package/template/.agent/skill-library/stack/languages/go/SKILL.md +664 -0
- package/template/.agent/skill-library/stack/languages/java/SKILL.md +778 -0
- package/template/.agent/skill-library/stack/languages/kotlin/SKILL.md +665 -0
- package/template/.agent/skill-library/stack/languages/python/SKILL.md +678 -0
- package/template/.agent/skill-library/stack/languages/rust/SKILL.md +673 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/SKILL.md +141 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/advanced-generics.md +90 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/branded-types.md +57 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/builder-pattern.md +71 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/common-pitfalls.md +135 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/conditional-types.md +27 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/decorators.md +98 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/discriminated-unions.md +62 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/mapped-types.md +53 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/performance-best-practices.md +104 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/template-literal-types.md +49 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/testing-types.md +112 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/type-guards.md +70 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/type-inference.md +101 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/utility-types.md +98 -0
- package/template/.agent/skill-library/stack/languages/vanilla-javascript/SKILL.md +803 -0
- package/template/.agent/skill-library/stack/messaging/kafka/SKILL.md +235 -0
- package/template/.agent/skill-library/stack/mobile/expo-react-native/SKILL.md +665 -0
- package/template/.agent/skill-library/stack/mobile/flutter/SKILL.md +316 -0
- package/template/.agent/skill-library/stack/mobile/react-native/SKILL.md +337 -0
- package/template/.agent/skill-library/stack/monitoring/posthog/SKILL.md +396 -0
- package/template/.agent/skill-library/stack/monitoring/sentry/SKILL.md +509 -0
- package/template/.agent/skill-library/stack/observability/datadog/SKILL.md +179 -0
- package/template/.agent/skill-library/stack/observability/distributed-tracing/SKILL.md +140 -0
- package/template/.agent/skill-library/stack/observability/logging-best-practices/SKILL.md +168 -0
- package/template/.agent/skill-library/stack/observability/opentelemetry/SKILL.md +164 -0
- package/template/.agent/skill-library/stack/observability/prometheus-grafana/SKILL.md +246 -0
- package/template/.agent/skill-library/stack/observability/python-observability/SKILL.md +158 -0
- package/template/.agent/skill-library/stack/orm/drizzle-orm/SKILL.md +613 -0
- package/template/.agent/skill-library/stack/orm/prisma/SKILL.md +744 -0
- package/template/.agent/skill-library/stack/payments/lemonsqueezy/SKILL.md +393 -0
- package/template/.agent/skill-library/stack/payments/stripe-integration/SKILL.md +457 -0
- package/template/.agent/skill-library/stack/queue/bullmq/SKILL.md +385 -0
- package/template/.agent/skill-library/stack/queue/inngest/SKILL.md +438 -0
- package/template/.agent/skill-library/stack/realtime/socketio/SKILL.md +595 -0
- package/template/.agent/skill-library/stack/search/elasticsearch/SKILL.md +248 -0
- package/template/.agent/skill-library/stack/search/meilisearch/SKILL.md +385 -0
- package/template/.agent/skill-library/stack/security/crypto-patterns/SKILL.md +437 -0
- package/template/.agent/skill-library/stack/security/csp-cors-headers/SKILL.md +588 -0
- package/template/.agent/skill-library/stack/security/dependency-auditing/SKILL.md +560 -0
- package/template/.agent/skill-library/stack/security/input-sanitization/SKILL.md +430 -0
- package/template/.agent/skill-library/stack/security/owasp-web-security/SKILL.md +421 -0
- package/template/.agent/skill-library/stack/state/tanstack-query/SKILL.md +637 -0
- package/template/.agent/skill-library/stack/state/zustand/SKILL.md +483 -0
- package/template/.agent/skill-library/stack/storage/aws-s3/SKILL.md +415 -0
- package/template/.agent/skill-library/stack/testing/playwright/SKILL.md +641 -0
- package/template/.agent/skill-library/stack/testing/storybook/SKILL.md +923 -0
- package/template/.agent/skill-library/stack/testing/testing-library/SKILL.md +872 -0
- package/template/.agent/skill-library/stack/testing/vitest/SKILL.md +714 -0
- package/template/.agent/skill-library/stack/ui/react-best-practices/SKILL.md +877 -0
- package/template/.agent/skill-library/stack/ui/react-composition-patterns/SKILL.md +1107 -0
- package/template/.agent/skill-library/stack/ui/react-flow/SKILL.md +425 -0
- package/template/.agent/skill-library/stack/ui/shadcn-ui/SKILL.md +703 -0
- package/template/.agent/skill-library/surface/api/api-caching/SKILL.md +458 -0
- package/template/.agent/skill-library/surface/api/api-documentation-openapi/SKILL.md +697 -0
- package/template/.agent/skill-library/surface/api/api-error-handling/SKILL.md +478 -0
- package/template/.agent/skill-library/surface/api/api-security-checklist/SKILL.md +147 -0
- package/template/.agent/skill-library/surface/api/api-versioning/SKILL.md +420 -0
- package/template/.agent/skill-library/surface/api/email-best-practices/SKILL.md +59 -0
- package/template/.agent/skill-library/surface/api/rate-limiting-abuse-protection/SKILL.md +147 -0
- package/template/.agent/skill-library/surface/api/rest-api-design/SKILL.md +478 -0
- package/template/.agent/skill-library/surface/api/webhook-design/SKILL.md +752 -0
- package/template/.agent/skill-library/surface/cli/cli-configuration-management/SKILL.md +445 -0
- package/template/.agent/skill-library/surface/cli/cli-error-diagnostics/SKILL.md +515 -0
- package/template/.agent/skill-library/surface/cli/cli-shell-integration/SKILL.md +479 -0
- package/template/.agent/skill-library/surface/cli/cli-ux-design/SKILL.md +477 -0
- package/template/.agent/skill-library/surface/desktop/desktop-app-distribution/SKILL.md +416 -0
- package/template/.agent/skill-library/surface/desktop/desktop-security-sandboxing/SKILL.md +407 -0
- package/template/.agent/skill-library/surface/desktop/desktop-ux-conventions/SKILL.md +361 -0
- package/template/.agent/skill-library/surface/desktop/native-os-integration/SKILL.md +563 -0
- package/template/.agent/skill-library/surface/extension/browser-extension-patterns/SKILL.md +482 -0
- package/template/.agent/skill-library/surface/extension/plugin-architecture-design/SKILL.md +632 -0
- package/template/.agent/skill-library/surface/extension/vscode-extension-development/SKILL.md +728 -0
- package/template/.agent/skill-library/surface/mobile/app-store-submission/SKILL.md +304 -0
- package/template/.agent/skill-library/surface/mobile/mobile-offline-sync/SKILL.md +443 -0
- package/template/.agent/skill-library/surface/mobile/mobile-responsive-patterns/SKILL.md +432 -0
- package/template/.agent/skill-library/surface/mobile/push-notifications/SKILL.md +495 -0
- package/template/.agent/skill-library/surface/web/accessibility-compliance/SKILL.md +827 -0
- package/template/.agent/skill-library/surface/web/ai-seo/SKILL.md +398 -0
- package/template/.agent/skill-library/surface/web/ai-seo/references/content-patterns.md +285 -0
- package/template/.agent/skill-library/surface/web/ai-seo/references/platform-ranking-factors.md +152 -0
- package/template/.agent/skill-library/surface/web/analytics-tracking/SKILL.md +309 -0
- package/template/.agent/skill-library/surface/web/analytics-tracking/references/event-library.md +260 -0
- package/template/.agent/skill-library/surface/web/analytics-tracking/references/ga4-implementation.md +300 -0
- package/template/.agent/skill-library/surface/web/analytics-tracking/references/gtm-implementation.md +390 -0
- package/template/.agent/skill-library/surface/web/authentication-ui-flows/SKILL.md +530 -0
- package/template/.agent/skill-library/surface/web/dark-mode-theming/SKILL.md +516 -0
- package/template/.agent/skill-library/surface/web/design-reference-data/SKILL.md +105 -0
- package/template/.agent/skill-library/surface/web/design-reference-data/data/charts.csv +26 -0
- package/template/.agent/skill-library/surface/web/design-reference-data/data/colors.csv +97 -0
- package/template/.agent/skill-library/surface/web/design-reference-data/data/landing.csv +31 -0
- package/template/.agent/skill-library/surface/web/design-reference-data/data/styles.csv +59 -0
- package/template/.agent/skill-library/surface/web/design-reference-data/data/typography.csv +58 -0
- package/template/.agent/skill-library/surface/web/design-reference-data/data/ux-guidelines.csv +100 -0
- package/template/.agent/skill-library/surface/web/design-reference-data/scripts/core.py +258 -0
- package/template/.agent/skill-library/surface/web/design-reference-data/scripts/design_system.py +1067 -0
- package/template/.agent/skill-library/surface/web/design-reference-data/scripts/search.py +106 -0
- package/template/.agent/skill-library/surface/web/form-handling-validation/SKILL.md +675 -0
- package/template/.agent/skill-library/surface/web/frontend-design/SKILL.md +1393 -0
- package/template/.agent/skill-library/surface/web/frontend-design/templates/cppn-hero.tsx +299 -0
- package/template/.agent/skill-library/surface/web/frontend-design/templates/wave-hero.tsx +875 -0
- package/template/.agent/skill-library/surface/web/frontend-verification/SKILL.md +111 -0
- package/template/.agent/skill-library/surface/web/frontend-verification/scripts/ux_audit.py +739 -0
- package/template/.agent/skill-library/surface/web/i18n-localization/SKILL.md +154 -0
- package/template/.agent/skill-library/surface/web/offline-first-pwa/SKILL.md +657 -0
- package/template/.agent/skill-library/surface/web/page-cro/SKILL.md +182 -0
- package/template/.agent/skill-library/surface/web/page-cro/references/experiments.md +248 -0
- package/template/.agent/skill-library/surface/web/programmatic-seo/SKILL.md +238 -0
- package/template/.agent/skill-library/surface/web/programmatic-seo/references/playbooks.md +308 -0
- package/template/.agent/skill-library/surface/web/schema-markup/SKILL.md +179 -0
- package/template/.agent/skill-library/surface/web/schema-markup/references/schema-examples.md +398 -0
- package/template/.agent/skill-library/surface/web/seo-audit/SKILL.md +394 -0
- package/template/.agent/skill-library/surface/web/seo-audit/references/ai-writing-detection.md +200 -0
- package/template/.agent/skill-library/surface/web/web-performance-optimization/SKILL.md +646 -0
- package/template/.agent/skill-library/surface/web/web-scraping/SKILL.md +58 -0
- package/template/.agent/skills/accessibility/SKILL.md +522 -0
- package/template/.agent/skills/accessibility/references/WCAG.md +162 -0
- package/template/.agent/skills/adversarial-review/SKILL.md +90 -0
- package/template/.agent/skills/antigravity-workflows/SKILL.md +81 -0
- package/template/.agent/skills/antigravity-workflows/resources/implementation-playbook.md +36 -0
- package/template/.agent/skills/api-design-principles/SKILL.md +37 -0
- package/template/.agent/skills/api-design-principles/assets/api-design-checklist.md +155 -0
- package/template/.agent/skills/api-design-principles/assets/rest-api-template.py +182 -0
- package/template/.agent/skills/api-design-principles/references/graphql-schema-design.md +583 -0
- package/template/.agent/skills/api-design-principles/references/rest-best-practices.md +408 -0
- package/template/.agent/skills/api-design-principles/resources/implementation-playbook.md +513 -0
- package/template/.agent/skills/api-versioning/SKILL.md +420 -0
- package/template/.agent/skills/architecture-mapping/SKILL.md +219 -0
- package/template/.agent/skills/bootstrap-agents/SKILL.md +259 -0
- package/template/.agent/skills/brainstorming/SKILL.md +236 -0
- package/template/.agent/skills/brand-guidelines/SKILL.md +44 -0
- package/template/.agent/skills/clean-code/SKILL.md +94 -0
- package/template/.agent/skills/code-review-pro/SKILL.md +152 -0
- package/template/.agent/skills/concise-planning/SKILL.md +68 -0
- package/template/.agent/skills/cross-layer-consistency/SKILL.md +117 -0
- package/template/.agent/skills/database-schema-design/SKILL.md +429 -0
- package/template/.agent/skills/deployment-procedures/SKILL.md +241 -0
- package/template/.agent/skills/design-anti-cliche/SKILL.md +159 -0
- package/template/.agent/skills/design-direction/SKILL.md +45 -0
- package/template/.agent/skills/error-handling-patterns/SKILL.md +721 -0
- package/template/.agent/skills/find-skills/SKILL.md +145 -0
- package/template/.agent/skills/git-advanced/SKILL.md +972 -0
- package/template/.agent/skills/git-workflow/SKILL.md +420 -0
- package/template/.agent/skills/idea-extraction/SKILL.md +271 -0
- package/template/.agent/skills/logging-best-practices/SKILL.md +851 -0
- package/template/.agent/skills/migration-management/SKILL.md +384 -0
- package/template/.agent/skills/minimalist-surgical-development/SKILL.md +69 -0
- package/template/.agent/skills/parallel-agents/SKILL.md +165 -0
- package/template/.agent/skills/parallel-debugging/SKILL.md +135 -0
- package/template/.agent/skills/parallel-feature-development/SKILL.md +166 -0
- package/template/.agent/skills/performance-budgeting/SKILL.md +144 -0
- package/template/.agent/skills/pipeline-rubrics/SKILL.md +51 -0
- package/template/.agent/skills/pipeline-rubrics/references/architecture-rubric.md +19 -0
- package/template/.agent/skills/pipeline-rubrics/references/be-rubric.md +21 -0
- package/template/.agent/skills/pipeline-rubrics/references/fe-rubric.md +20 -0
- package/template/.agent/skills/pipeline-rubrics/references/ia-rubric.md +19 -0
- package/template/.agent/skills/pipeline-rubrics/references/scoring.md +28 -0
- package/template/.agent/skills/pipeline-rubrics/references/vision-rubric.md +11 -0
- package/template/.agent/skills/prd-templates/SKILL.md +88 -0
- package/template/.agent/skills/prd-templates/references/architecture-design-template.md +88 -0
- package/template/.agent/skills/prd-templates/references/be-spec-template.md +101 -0
- package/template/.agent/skills/prd-templates/references/data-placement-template.md +74 -0
- package/template/.agent/skills/prd-templates/references/decomposition-templates.md +211 -0
- package/template/.agent/skills/prd-templates/references/design-system-decisions.md +198 -0
- package/template/.agent/skills/prd-templates/references/engineering-standards-template.md +124 -0
- package/template/.agent/skills/prd-templates/references/fe-classification-procedures.md +47 -0
- package/template/.agent/skills/prd-templates/references/fe-spec-template.md +84 -0
- package/template/.agent/skills/prd-templates/references/infrastructure-report-template.md +71 -0
- package/template/.agent/skills/prd-templates/references/operational-templates.md +116 -0
- package/template/.agent/skills/prd-templates/references/placeholder-guard-template.md +21 -0
- package/template/.agent/skills/prd-templates/references/surface-model.md +61 -0
- package/template/.agent/skills/prd-templates/references/vision-template.md +66 -0
- package/template/.agent/skills/prompt-engineer/README.md +659 -0
- package/template/.agent/skills/prompt-engineer/SKILL.md +249 -0
- package/template/.agent/skills/regex-patterns/SKILL.md +751 -0
- package/template/.agent/skills/resolve-ambiguity/SKILL.md +278 -0
- package/template/.agent/skills/rest-api-design/SKILL.md +478 -0
- package/template/.agent/skills/security-scanning-security-hardening/SKILL.md +231 -0
- package/template/.agent/skills/session-continuity/SKILL.md +730 -0
- package/template/.agent/skills/session-continuity/protocols/01-session-resumption.md +38 -0
- package/template/.agent/skills/session-continuity/protocols/02-progress-generation.md +85 -0
- package/template/.agent/skills/session-continuity/protocols/03-progress-update.md +70 -0
- package/template/.agent/skills/session-continuity/protocols/04-pattern-extraction.md +60 -0
- package/template/.agent/skills/session-continuity/protocols/05-session-close.md +37 -0
- package/template/.agent/skills/session-continuity/protocols/06-decision-analysis.md +84 -0
- package/template/.agent/skills/session-continuity/protocols/07-spec-pipeline-generation.md +48 -0
- package/template/.agent/skills/session-continuity/protocols/08-spec-pipeline-update.md +43 -0
- package/template/.agent/skills/session-continuity/protocols/09-parallel-claim.md +122 -0
- package/template/.agent/skills/session-continuity/protocols/10-placeholder-verification-gate.md +104 -0
- package/template/.agent/skills/session-continuity/protocols/ambiguity-gates.md +48 -0
- package/template/.agent/skills/skill-creator/LICENSE.txt +202 -0
- package/template/.agent/skills/skill-creator/README.md +270 -0
- package/template/.agent/skills/skill-creator/SKILL.md +590 -0
- package/template/.agent/skills/skill-creator/references/output-patterns.md +82 -0
- package/template/.agent/skills/skill-creator/references/workflows.md +28 -0
- package/template/.agent/skills/skill-creator/scripts/init_skill.py +303 -0
- package/template/.agent/skills/skill-creator/scripts/package_skill.py +110 -0
- package/template/.agent/skills/skill-creator/scripts/quick_validate.py +95 -0
- package/template/.agent/skills/spec-writing/SKILL.md +110 -0
- package/template/.agent/skills/systematic-debugging/CREATION-LOG.md +119 -0
- package/template/.agent/skills/systematic-debugging/SKILL.md +297 -0
- package/template/.agent/skills/systematic-debugging/condition-based-waiting-example.ts +158 -0
- package/template/.agent/skills/systematic-debugging/condition-based-waiting.md +115 -0
- package/template/.agent/skills/systematic-debugging/defense-in-depth.md +122 -0
- package/template/.agent/skills/systematic-debugging/find-polluter.sh +63 -0
- package/template/.agent/skills/systematic-debugging/root-cause-tracing.md +169 -0
- package/template/.agent/skills/systematic-debugging/test-academic.md +14 -0
- package/template/.agent/skills/systematic-debugging/test-pressure-1.md +58 -0
- package/template/.agent/skills/systematic-debugging/test-pressure-2.md +68 -0
- package/template/.agent/skills/systematic-debugging/test-pressure-3.md +69 -0
- package/template/.agent/skills/tdd-workflow/SKILL.md +409 -0
- package/template/.agent/skills/tech-stack-catalog/SKILL.md +49 -0
- package/template/.agent/skills/tech-stack-catalog/references/constraint-questions.md +21 -0
- package/template/.agent/skills/tech-stack-catalog/references/dev-tooling-decisions.md +37 -0
- package/template/.agent/skills/tech-stack-catalog/references/surface-decision-tables.md +69 -0
- package/template/.agent/skills/technical-writer/SKILL.md +242 -0
- package/template/.agent/skills/testing-strategist/SKILL.md +932 -0
- package/template/.agent/skills/verification-before-completion/SKILL.md +145 -0
- package/template/.agent/skills/workflow-automation/SKILL.md +73 -0
- package/template/.agent/workflows/audit-ambiguity-execute.md +165 -0
- package/template/.agent/workflows/audit-ambiguity-rubrics.md +83 -0
- package/template/.agent/workflows/audit-ambiguity.md +64 -0
- package/template/.agent/workflows/bootstrap-agents-fill.md +201 -0
- package/template/.agent/workflows/bootstrap-agents-provision.md +197 -0
- package/template/.agent/workflows/bootstrap-agents.md +66 -0
- package/template/.agent/workflows/create-prd-architecture.md +119 -0
- package/template/.agent/workflows/create-prd-compile.md +138 -0
- package/template/.agent/workflows/create-prd-design-system.md +135 -0
- package/template/.agent/workflows/create-prd-security.md +113 -0
- package/template/.agent/workflows/create-prd-stack.md +91 -0
- package/template/.agent/workflows/create-prd.md +168 -0
- package/template/.agent/workflows/decompose-architecture-structure.md +82 -0
- package/template/.agent/workflows/decompose-architecture-validate.md +119 -0
- package/template/.agent/workflows/decompose-architecture.md +111 -0
- package/template/.agent/workflows/evolve-contract.md +98 -0
- package/template/.agent/workflows/evolve-feature-cascade.md +140 -0
- package/template/.agent/workflows/evolve-feature-classify.md +116 -0
- package/template/.agent/workflows/evolve-feature.md +56 -0
- package/template/.agent/workflows/ideate-discover.md +144 -0
- package/template/.agent/workflows/ideate-extract.md +129 -0
- package/template/.agent/workflows/ideate-validate.md +117 -0
- package/template/.agent/workflows/ideate.md +113 -0
- package/template/.agent/workflows/implement-slice-setup.md +113 -0
- package/template/.agent/workflows/implement-slice-tdd.md +198 -0
- package/template/.agent/workflows/implement-slice.md +50 -0
- package/template/.agent/workflows/plan-phase.md +202 -0
- package/template/.agent/workflows/propagate-decision-apply.md +135 -0
- package/template/.agent/workflows/propagate-decision-scan.md +147 -0
- package/template/.agent/workflows/propagate-decision.md +56 -0
- package/template/.agent/workflows/remediate-pipeline-assess.md +138 -0
- package/template/.agent/workflows/remediate-pipeline-execute.md +135 -0
- package/template/.agent/workflows/remediate-pipeline.md +55 -0
- package/template/.agent/workflows/resolve-ambiguity.md +82 -0
- package/template/.agent/workflows/sync-kit.md +209 -0
- package/template/.agent/workflows/update-architecture-map.md +74 -0
- package/template/.agent/workflows/validate-phase.md +219 -0
- package/template/.agent/workflows/verify-infrastructure.md +207 -0
- package/template/.agent/workflows/write-architecture-spec-deepen.md +139 -0
- package/template/.agent/workflows/write-architecture-spec-design.md +202 -0
- package/template/.agent/workflows/write-architecture-spec.md +63 -0
- package/template/.agent/workflows/write-be-spec-classify.md +165 -0
- package/template/.agent/workflows/write-be-spec-write.md +98 -0
- package/template/.agent/workflows/write-be-spec.md +76 -0
- package/template/.agent/workflows/write-fe-spec-classify.md +170 -0
- package/template/.agent/workflows/write-fe-spec-write.md +94 -0
- package/template/.agent/workflows/write-fe-spec.md +71 -0
- package/template/AGENTS.md +176 -0
- package/template/GEMINI.md +177 -0
- package/template/docs/README.md +187 -0
- package/template/docs/audits/.gitkeep +0 -0
- package/template/docs/audits/README.md +10 -0
- package/template/docs/plans/.gitkeep +0 -0
- package/template/docs/plans/README.md +21 -0
- package/template/docs/plans/be/.gitkeep +0 -0
- package/template/docs/plans/be/README.md +11 -0
- package/template/docs/plans/fe/.gitkeep +0 -0
- package/template/docs/plans/fe/README.md +11 -0
- package/template/docs/plans/ia/.gitkeep +0 -0
- package/template/docs/plans/ia/README.md +17 -0
- package/template/docs/plans/ia/deep-dives/.gitkeep +0 -0
- package/template/docs/plans/ia/deep-dives/README.md +5 -0
- package/template/docs/plans/phases/.gitkeep +0 -0
- package/template/docs/plans/phases/README.md +11 -0
|
@@ -0,0 +1,361 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: desktop-ux-conventions
|
|
3
|
+
description: Platform-specific UX conventions for macOS, Windows, and Linux desktop applications covering keyboard shortcuts, window management, menus, preferences, dark mode, and interaction patterns. Use when designing or auditing desktop app user experience for platform consistency.
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Desktop UX Conventions
|
|
8
|
+
|
|
9
|
+
Build desktop applications that feel native on each platform by following established UX conventions.
|
|
10
|
+
|
|
11
|
+
## macOS vs Windows vs Linux UX Differences
|
|
12
|
+
|
|
13
|
+
| Convention | macOS | Windows | Linux (GNOME/KDE) |
|
|
14
|
+
|------------|-------|---------|-------------------|
|
|
15
|
+
| Close button position | Top-left (red circle) | Top-right (X) | Top-right (varies by DE) |
|
|
16
|
+
| Close behavior | Closes window, app stays in Dock | Closes window, may exit app | Closes window |
|
|
17
|
+
| Quit behavior | Cmd+Q quits app | Alt+F4 closes window | Ctrl+Q or Alt+F4 |
|
|
18
|
+
| Settings/Preferences | App menu > Preferences (Cmd+,) | File > Options or Tools > Settings | Edit > Preferences or hamburger menu |
|
|
19
|
+
| Primary action button | Right-most in dialog | Right-most in dialog | Right-most (GNOME HIG) |
|
|
20
|
+
| Destructive button color | No special color (text label) | No special color | Red (GNOME HIG) |
|
|
21
|
+
| Confirmation dialogs | Minimal (undo preferred over confirm) | Frequent (confirm before destructive) | Varies |
|
|
22
|
+
| Scrollbar visibility | Hidden until scroll (overlay) | Always visible (thin) | Follows DE settings |
|
|
23
|
+
| Title bar | Minimal, often no title text | Shows window title | Shows window title |
|
|
24
|
+
| Menu bar | Global (top of screen) | Per-window | Per-window or global (KDE) |
|
|
25
|
+
|
|
26
|
+
## Keyboard Shortcut Conventions
|
|
27
|
+
|
|
28
|
+
### Standard Shortcuts by Platform
|
|
29
|
+
|
|
30
|
+
| Action | macOS | Windows / Linux |
|
|
31
|
+
|--------|-------|----------------|
|
|
32
|
+
| Copy | Cmd+C | Ctrl+C |
|
|
33
|
+
| Paste | Cmd+V | Ctrl+V |
|
|
34
|
+
| Cut | Cmd+X | Ctrl+X |
|
|
35
|
+
| Undo | Cmd+Z | Ctrl+Z |
|
|
36
|
+
| Redo | Cmd+Shift+Z | Ctrl+Y or Ctrl+Shift+Z |
|
|
37
|
+
| Select All | Cmd+A | Ctrl+A |
|
|
38
|
+
| Find | Cmd+F | Ctrl+F |
|
|
39
|
+
| Save | Cmd+S | Ctrl+S |
|
|
40
|
+
| New | Cmd+N | Ctrl+N |
|
|
41
|
+
| Open | Cmd+O | Ctrl+O |
|
|
42
|
+
| Print | Cmd+P | Ctrl+P |
|
|
43
|
+
| Close window | Cmd+W | Ctrl+W or Alt+F4 |
|
|
44
|
+
| Quit app | Cmd+Q | Alt+F4 |
|
|
45
|
+
| Preferences | Cmd+, | Ctrl+, (no universal standard) |
|
|
46
|
+
| Zoom in | Cmd+= | Ctrl+= |
|
|
47
|
+
| Zoom out | Cmd+- | Ctrl+- |
|
|
48
|
+
| Full screen | Ctrl+Cmd+F or globe+F | F11 |
|
|
49
|
+
| Switch tab | Cmd+Shift+[ / ] | Ctrl+Tab / Ctrl+Shift+Tab |
|
|
50
|
+
|
|
51
|
+
```typescript
|
|
52
|
+
// Electron - Platform-aware accelerator
|
|
53
|
+
const isMac = process.platform === 'darwin';
|
|
54
|
+
|
|
55
|
+
const shortcuts = {
|
|
56
|
+
save: isMac ? 'Cmd+S' : 'Ctrl+S',
|
|
57
|
+
preferences: isMac ? 'Cmd+,' : 'Ctrl+,',
|
|
58
|
+
quit: isMac ? 'Cmd+Q' : 'Alt+F4',
|
|
59
|
+
redo: isMac ? 'Cmd+Shift+Z' : 'Ctrl+Y',
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
// Electron uses 'CommandOrControl' as a platform-adaptive modifier
|
|
63
|
+
Menu.buildFromTemplate([
|
|
64
|
+
{
|
|
65
|
+
label: 'Save',
|
|
66
|
+
accelerator: 'CommandOrControl+S', // Cmd on macOS, Ctrl on Windows/Linux
|
|
67
|
+
click: () => saveFile(),
|
|
68
|
+
},
|
|
69
|
+
]);
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
**Rule**: Use `CommandOrControl` in Electron for cross-platform shortcuts. Never hardcode `Cmd` or `Ctrl` alone.
|
|
73
|
+
**Anti-pattern**: Using Ctrl+Q on macOS. The standard quit shortcut is Cmd+Q. Ctrl+Q has no meaning on macOS.
|
|
74
|
+
|
|
75
|
+
## Window Management
|
|
76
|
+
|
|
77
|
+
### Remember Position and Size
|
|
78
|
+
|
|
79
|
+
```typescript
|
|
80
|
+
// Persist and restore window geometry
|
|
81
|
+
interface WindowState {
|
|
82
|
+
x: number;
|
|
83
|
+
y: number;
|
|
84
|
+
width: number;
|
|
85
|
+
height: number;
|
|
86
|
+
isMaximized: boolean;
|
|
87
|
+
displayId?: string; // Track which monitor
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
function restoreWindowState(id: string, defaults: { width: number; height: number }): WindowState {
|
|
91
|
+
const saved = store.get(`windowState.${id}`) as WindowState | undefined;
|
|
92
|
+
|
|
93
|
+
if (saved) {
|
|
94
|
+
// Verify the saved position is still on a connected display
|
|
95
|
+
const displays = screen.getAllDisplays();
|
|
96
|
+
const isOnScreen = displays.some((display) => {
|
|
97
|
+
const { x, y, width, height } = display.bounds;
|
|
98
|
+
return saved.x >= x && saved.x < x + width &&
|
|
99
|
+
saved.y >= y && saved.y < y + height;
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
if (isOnScreen) return saved;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// Center on primary display
|
|
106
|
+
const primary = screen.getPrimaryDisplay();
|
|
107
|
+
return {
|
|
108
|
+
x: Math.round((primary.bounds.width - defaults.width) / 2),
|
|
109
|
+
y: Math.round((primary.bounds.height - defaults.height) / 2),
|
|
110
|
+
width: defaults.width,
|
|
111
|
+
height: defaults.height,
|
|
112
|
+
isMaximized: false,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
**Rule**: Always validate that saved window coordinates are on a connected display. Users disconnect monitors, and saved positions off-screen make the app invisible.
|
|
118
|
+
|
|
119
|
+
### macOS Window Behavior
|
|
120
|
+
|
|
121
|
+
```typescript
|
|
122
|
+
// macOS: closing all windows should NOT quit the app
|
|
123
|
+
app.on('window-all-closed', () => {
|
|
124
|
+
if (process.platform !== 'darwin') {
|
|
125
|
+
app.quit();
|
|
126
|
+
}
|
|
127
|
+
// macOS: app stays in Dock, Cmd+Q to quit
|
|
128
|
+
});
|
|
129
|
+
|
|
130
|
+
// macOS: clicking Dock icon should re-create window
|
|
131
|
+
app.on('activate', () => {
|
|
132
|
+
if (BrowserWindow.getAllWindows().length === 0) {
|
|
133
|
+
createMainWindow();
|
|
134
|
+
}
|
|
135
|
+
});
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
## Menu Bar Structure
|
|
139
|
+
|
|
140
|
+
### macOS Standard Menu Order
|
|
141
|
+
|
|
142
|
+
```
|
|
143
|
+
[App Name] | File | Edit | View | [App-Specific] | Window | Help
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
### Windows / Linux Standard Menu Order
|
|
147
|
+
|
|
148
|
+
```
|
|
149
|
+
File | Edit | View | [App-Specific] | Tools | Help
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
| Menu | Expected Contents |
|
|
153
|
+
|------|-------------------|
|
|
154
|
+
| File | New, Open, Save, Save As, Export, separator, Close/Quit |
|
|
155
|
+
| Edit | Undo, Redo, separator, Cut, Copy, Paste, Select All, separator, Find |
|
|
156
|
+
| View | Zoom In/Out, Reset Zoom, separator, Toggle Sidebar, Full Screen |
|
|
157
|
+
| Window (macOS) | Minimize, Zoom, separator, Bring All to Front |
|
|
158
|
+
| Help | Documentation link, About (Windows/Linux), Report Issue |
|
|
159
|
+
|
|
160
|
+
**Rule**: macOS `About` goes in the app menu, not Help. Windows/Linux `About` goes in Help.
|
|
161
|
+
**Rule**: macOS `Preferences` goes in the app menu. Windows `Options`/`Settings` goes in File or Tools.
|
|
162
|
+
|
|
163
|
+
## Undo/Redo Stacks
|
|
164
|
+
|
|
165
|
+
```typescript
|
|
166
|
+
// Generic undo/redo manager
|
|
167
|
+
interface UndoAction {
|
|
168
|
+
type: string;
|
|
169
|
+
description: string; // For Edit menu: "Undo Paste", "Redo Delete"
|
|
170
|
+
undo: () => void;
|
|
171
|
+
redo: () => void;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
class UndoManager {
|
|
175
|
+
private undoStack: UndoAction[] = [];
|
|
176
|
+
private redoStack: UndoAction[] = [];
|
|
177
|
+
private maxSize = 100;
|
|
178
|
+
|
|
179
|
+
execute(action: UndoAction): void {
|
|
180
|
+
action.redo(); // Execute the action
|
|
181
|
+
this.undoStack.push(action);
|
|
182
|
+
this.redoStack = []; // Clear redo stack on new action
|
|
183
|
+
|
|
184
|
+
if (this.undoStack.length > this.maxSize) {
|
|
185
|
+
this.undoStack.shift();
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
undo(): string | null {
|
|
190
|
+
const action = this.undoStack.pop();
|
|
191
|
+
if (!action) return null;
|
|
192
|
+
|
|
193
|
+
action.undo();
|
|
194
|
+
this.redoStack.push(action);
|
|
195
|
+
return action.description;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
redo(): string | null {
|
|
199
|
+
const action = this.redoStack.pop();
|
|
200
|
+
if (!action) return null;
|
|
201
|
+
|
|
202
|
+
action.redo();
|
|
203
|
+
this.undoStack.push(action);
|
|
204
|
+
return action.description;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
// For Edit menu label: "Undo Paste" vs "Undo"
|
|
208
|
+
get undoLabel(): string {
|
|
209
|
+
const top = this.undoStack.at(-1);
|
|
210
|
+
return top ? `Undo ${top.description}` : 'Undo';
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
get redoLabel(): string {
|
|
214
|
+
const top = this.redoStack.at(-1);
|
|
215
|
+
return top ? `Redo ${top.description}` : 'Redo';
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
## Preferences / Settings Patterns
|
|
221
|
+
|
|
222
|
+
| Platform | Location | Pattern |
|
|
223
|
+
|----------|----------|---------|
|
|
224
|
+
| macOS | App menu > Preferences (Cmd+,) | Modal window or panel |
|
|
225
|
+
| Windows | File > Options or dedicated Settings view | Full window or dialog |
|
|
226
|
+
| Linux | Edit > Preferences or hamburger > Preferences | Full window (GNOME) |
|
|
227
|
+
|
|
228
|
+
```tsx
|
|
229
|
+
// Preferences layout - follow platform conventions
|
|
230
|
+
function PreferencesWindow() {
|
|
231
|
+
const categories = [
|
|
232
|
+
{ id: 'general', label: 'General', icon: <GearIcon /> },
|
|
233
|
+
{ id: 'appearance', label: 'Appearance', icon: <PaletteIcon /> },
|
|
234
|
+
{ id: 'editor', label: 'Editor', icon: <CodeIcon /> },
|
|
235
|
+
{ id: 'keybindings', label: 'Keyboard Shortcuts', icon: <KeyboardIcon /> },
|
|
236
|
+
{ id: 'advanced', label: 'Advanced', icon: <WrenchIcon /> },
|
|
237
|
+
];
|
|
238
|
+
|
|
239
|
+
const [activeCategory, setActiveCategory] = useState('general');
|
|
240
|
+
|
|
241
|
+
return (
|
|
242
|
+
<div className="preferences">
|
|
243
|
+
{/* macOS: toolbar-style tabs at top */}
|
|
244
|
+
{/* Windows/Linux: sidebar navigation */}
|
|
245
|
+
<nav className="preferences-nav">
|
|
246
|
+
{categories.map((cat) => (
|
|
247
|
+
<button
|
|
248
|
+
key={cat.id}
|
|
249
|
+
className={`nav-item ${activeCategory === cat.id ? 'active' : ''}`}
|
|
250
|
+
onClick={() => setActiveCategory(cat.id)}
|
|
251
|
+
>
|
|
252
|
+
{cat.icon}
|
|
253
|
+
<span>{cat.label}</span>
|
|
254
|
+
</button>
|
|
255
|
+
))}
|
|
256
|
+
</nav>
|
|
257
|
+
<main className="preferences-content">
|
|
258
|
+
<PreferencesPanel category={activeCategory} />
|
|
259
|
+
</main>
|
|
260
|
+
</div>
|
|
261
|
+
);
|
|
262
|
+
}
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
**Rule**: Settings should take effect immediately (live preview). Avoid "Apply" buttons unless the change requires a restart.
|
|
266
|
+
|
|
267
|
+
## Dark Mode Integration
|
|
268
|
+
|
|
269
|
+
```typescript
|
|
270
|
+
// Electron - Follow OS dark mode preference
|
|
271
|
+
import { nativeTheme } from 'electron';
|
|
272
|
+
|
|
273
|
+
// Read current OS theme
|
|
274
|
+
const isDark = nativeTheme.shouldUseDarkColors;
|
|
275
|
+
|
|
276
|
+
// Listen for OS theme changes
|
|
277
|
+
nativeTheme.on('updated', () => {
|
|
278
|
+
const theme = nativeTheme.shouldUseDarkColors ? 'dark' : 'light';
|
|
279
|
+
mainWindow?.webContents.send('theme-changed', theme);
|
|
280
|
+
});
|
|
281
|
+
|
|
282
|
+
// Allow user override: 'system', 'light', 'dark'
|
|
283
|
+
function setThemePreference(preference: 'system' | 'light' | 'dark') {
|
|
284
|
+
nativeTheme.themeSource = preference;
|
|
285
|
+
store.set('theme', preference);
|
|
286
|
+
}
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
```css
|
|
290
|
+
/* CSS - Respect OS preference with user override */
|
|
291
|
+
:root {
|
|
292
|
+
--bg: #ffffff;
|
|
293
|
+
--text: #1a1a1a;
|
|
294
|
+
--border: #e5e5e5;
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
@media (prefers-color-scheme: dark) {
|
|
298
|
+
:root:not([data-theme="light"]) {
|
|
299
|
+
--bg: #1a1a1a;
|
|
300
|
+
--text: #e5e5e5;
|
|
301
|
+
--border: #333333;
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
[data-theme="dark"] {
|
|
306
|
+
--bg: #1a1a1a;
|
|
307
|
+
--text: #e5e5e5;
|
|
308
|
+
--border: #333333;
|
|
309
|
+
}
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
**Rule**: Always support at least three options: System (follow OS), Light, Dark. "System" should be the default.
|
|
313
|
+
|
|
314
|
+
## Drag-and-Drop Feedback
|
|
315
|
+
|
|
316
|
+
| State | Visual Feedback |
|
|
317
|
+
|-------|----------------|
|
|
318
|
+
| Drag started | Source item shows drag preview (ghost image) |
|
|
319
|
+
| Over valid target | Target highlights (border, background color change) |
|
|
320
|
+
| Over invalid target | Cursor shows "not allowed" (no-drop cursor) |
|
|
321
|
+
| Drop | Brief animation showing item landing |
|
|
322
|
+
| Cancel (Escape or drop outside) | Item snaps back to original position |
|
|
323
|
+
|
|
324
|
+
## Right-Click Context Menus
|
|
325
|
+
|
|
326
|
+
| Item Type | Expected Context Menu Actions |
|
|
327
|
+
|-----------|------------------------------|
|
|
328
|
+
| Text field | Cut, Copy, Paste, Select All, Spell Check |
|
|
329
|
+
| File/item in list | Open, Rename, Duplicate, Delete, Show in Finder/Explorer |
|
|
330
|
+
| Image | Copy Image, Save Image As, Open in Viewer |
|
|
331
|
+
| Link | Open Link, Copy Link Address |
|
|
332
|
+
| Tab | Close Tab, Close Other Tabs, Duplicate Tab |
|
|
333
|
+
| Empty area | Paste, New Item, Sort Options |
|
|
334
|
+
|
|
335
|
+
**Rule**: Context menus should contain only actions relevant to the clicked item. Do not dump all possible actions into every context menu.
|
|
336
|
+
|
|
337
|
+
## Status Bar Patterns
|
|
338
|
+
|
|
339
|
+
| Content | Example |
|
|
340
|
+
|---------|---------|
|
|
341
|
+
| Cursor position | `Ln 42, Col 17` |
|
|
342
|
+
| File encoding | `UTF-8` |
|
|
343
|
+
| Language/mode | `TypeScript` |
|
|
344
|
+
| Sync status | `Synced` / `2 pending` |
|
|
345
|
+
| Connection status | `Connected` / `Offline` |
|
|
346
|
+
| Background task progress | `Indexing: 73%` |
|
|
347
|
+
|
|
348
|
+
**Rule**: Status bar items should be informational. Clickable status bar items should open relevant settings or dialogs, not trigger destructive actions.
|
|
349
|
+
|
|
350
|
+
## Output Checklist
|
|
351
|
+
|
|
352
|
+
- [ ] Keyboard shortcuts use platform-correct modifiers (Cmd on macOS, Ctrl on Windows/Linux)
|
|
353
|
+
- [ ] Window position and size remembered and validated against connected displays
|
|
354
|
+
- [ ] Close behavior follows platform convention (macOS: app stays in Dock)
|
|
355
|
+
- [ ] Menu bar follows platform standard order (app-name menu on macOS)
|
|
356
|
+
- [ ] Undo/redo stack implemented for all destructive user actions
|
|
357
|
+
- [ ] Preferences accessible via platform-standard shortcut and menu location
|
|
358
|
+
- [ ] Dark mode follows OS preference with user override option
|
|
359
|
+
- [ ] Context menus contain relevant actions for the clicked element
|
|
360
|
+
- [ ] Drag-and-drop provides clear visual feedback for all states
|
|
361
|
+
- [ ] Status bar shows useful, non-intrusive information
|