@caddis/cli 0.1.0 → 0.2.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/README.md +29 -16
- package/bundles/antigravity-plugin-extras/plugin.json +5 -0
- package/bundles/antigravity-plugin-extras/skills/_registry.md +154 -0
- package/bundles/antigravity-plugin-extras/skills/agent-md-refactor/SKILL.md +356 -0
- package/bundles/antigravity-plugin-extras/skills/agent-orchestration/SKILL.md +517 -0
- package/bundles/antigravity-plugin-extras/skills/algorithmic-art/SKILL.md +293 -0
- package/bundles/antigravity-plugin-extras/skills/anchor-review/SKILL.md +135 -0
- package/bundles/antigravity-plugin-extras/skills/api-client-patterns/SKILL.md +367 -0
- package/bundles/antigravity-plugin-extras/skills/architecture-design/SKILL.md +244 -0
- package/bundles/antigravity-plugin-extras/skills/architecture-diagram/SKILL.md +156 -0
- package/bundles/antigravity-plugin-extras/skills/architecture-document/SKILL.md +321 -0
- package/bundles/antigravity-plugin-extras/skills/artifacts-builder/LICENSE.txt +202 -0
- package/bundles/antigravity-plugin-extras/skills/artifacts-builder/SKILL.md +74 -0
- package/bundles/antigravity-plugin-extras/skills/artifacts-builder/scripts/bundle-artifact.sh +54 -0
- package/bundles/antigravity-plugin-extras/skills/artifacts-builder/scripts/init-artifact.sh +322 -0
- package/bundles/antigravity-plugin-extras/skills/artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
- package/bundles/antigravity-plugin-extras/skills/ascii-art/SKILL.md +144 -0
- package/bundles/antigravity-plugin-extras/skills/asking-questions/SKILL.md +81 -0
- package/bundles/antigravity-plugin-extras/skills/aws-agentic-ai/SKILL.md +118 -0
- package/bundles/antigravity-plugin-extras/skills/aws-agentic-ai/cross-service/credential-management.md +450 -0
- package/bundles/antigravity-plugin-extras/skills/aws-agentic-ai/services/browser/README.md +363 -0
- package/bundles/antigravity-plugin-extras/skills/aws-agentic-ai/services/code-interpreter/README.md +232 -0
- package/bundles/antigravity-plugin-extras/skills/aws-agentic-ai/services/gateway/README.md +100 -0
- package/bundles/antigravity-plugin-extras/skills/aws-agentic-ai/services/gateway/deploy-template.sh +117 -0
- package/bundles/antigravity-plugin-extras/skills/aws-agentic-ai/services/gateway/deployment-strategies.md +416 -0
- package/bundles/antigravity-plugin-extras/skills/aws-agentic-ai/services/gateway/troubleshooting-guide.md +384 -0
- package/bundles/antigravity-plugin-extras/skills/aws-agentic-ai/services/gateway/validate-deployment.sh +186 -0
- package/bundles/antigravity-plugin-extras/skills/aws-agentic-ai/services/identity/README.md +186 -0
- package/bundles/antigravity-plugin-extras/skills/aws-agentic-ai/services/memory/README.md +253 -0
- package/bundles/antigravity-plugin-extras/skills/aws-agentic-ai/services/observability/README.md +517 -0
- package/bundles/antigravity-plugin-extras/skills/aws-agentic-ai/services/runtime/README.md +215 -0
- package/bundles/antigravity-plugin-extras/skills/aws-cdk-development/SKILL.md +279 -0
- package/bundles/antigravity-plugin-extras/skills/aws-cdk-development/references/cdk-patterns.md +431 -0
- package/bundles/antigravity-plugin-extras/skills/aws-cdk-development/scripts/validate-stack.sh +240 -0
- package/bundles/antigravity-plugin-extras/skills/aws-cost-operations/SKILL.md +318 -0
- package/bundles/antigravity-plugin-extras/skills/aws-cost-operations/references/cloudwatch-alarms.md +567 -0
- package/bundles/antigravity-plugin-extras/skills/aws-cost-operations/references/operations-patterns.md +394 -0
- package/bundles/antigravity-plugin-extras/skills/aws-serverless-eda/SKILL.md +758 -0
- package/bundles/antigravity-plugin-extras/skills/aws-serverless-eda/references/deployment-best-practices.md +830 -0
- package/bundles/antigravity-plugin-extras/skills/aws-serverless-eda/references/eda-patterns.md +1002 -0
- package/bundles/antigravity-plugin-extras/skills/aws-serverless-eda/references/observability-best-practices.md +770 -0
- package/bundles/antigravity-plugin-extras/skills/aws-serverless-eda/references/performance-optimization.md +671 -0
- package/bundles/antigravity-plugin-extras/skills/aws-serverless-eda/references/security-best-practices.md +625 -0
- package/bundles/antigravity-plugin-extras/skills/aws-serverless-eda/references/serverless-patterns.md +838 -0
- package/bundles/antigravity-plugin-extras/skills/backend-to-frontend-handoff/SKILL.md +139 -0
- package/bundles/antigravity-plugin-extras/skills/banner-design/SKILL.md +188 -0
- package/bundles/antigravity-plugin-extras/skills/brand-design/SKILL.md +298 -0
- package/bundles/antigravity-plugin-extras/skills/brand-guidelines/LICENSE.txt +202 -0
- package/bundles/antigravity-plugin-extras/skills/brand-guidelines/SKILL.md +118 -0
- package/bundles/antigravity-plugin-extras/skills/brand-voice/SKILL.md +93 -0
- package/bundles/antigravity-plugin-extras/skills/building-ai-agent-on-cloudflare/SKILL.md +392 -0
- package/bundles/antigravity-plugin-extras/skills/building-ai-agent-on-cloudflare/references/agent-patterns.md +461 -0
- package/bundles/antigravity-plugin-extras/skills/building-ai-agent-on-cloudflare/references/examples.md +188 -0
- package/bundles/antigravity-plugin-extras/skills/building-ai-agent-on-cloudflare/references/state-patterns.md +360 -0
- package/bundles/antigravity-plugin-extras/skills/building-ai-agent-on-cloudflare/references/troubleshooting.md +362 -0
- package/bundles/antigravity-plugin-extras/skills/building-mcp-server-on-cloudflare/SKILL.md +266 -0
- package/bundles/antigravity-plugin-extras/skills/building-mcp-server-on-cloudflare/references/examples.md +115 -0
- package/bundles/antigravity-plugin-extras/skills/building-mcp-server-on-cloudflare/references/oauth-setup.md +338 -0
- package/bundles/antigravity-plugin-extras/skills/building-mcp-server-on-cloudflare/references/troubleshooting.md +317 -0
- package/bundles/antigravity-plugin-extras/skills/caching-patterns/SKILL.md +385 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/LICENSE.txt +202 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/SKILL.md +91 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/ArsenalSC-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/BigShoulders-Bold.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/BigShoulders-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/BigShoulders-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Boldonse-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Boldonse-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/BricolageGrotesque-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/CrimsonPro-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/DMMono-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/DMMono-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/EricaOne-OFL.txt +94 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/EricaOne-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/GeistMono-Bold.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/GeistMono-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/GeistMono-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Gloock-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Gloock-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/IBMPlexMono-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/InstrumentSans-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Italiana-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Italiana-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/JetBrainsMono-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Jura-Light.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Jura-Medium.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Jura-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/LibreBaskerville-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Lora-Bold.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Lora-BoldItalic.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Lora-Italic.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Lora-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Lora-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/NationalPark-Bold.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/NationalPark-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/NationalPark-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/NothingYouCouldDo-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Outfit-Bold.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Outfit-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Outfit-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/PixelifySans-Medium.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/PixelifySans-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/PoiretOne-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/PoiretOne-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/RedHatMono-Bold.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/RedHatMono-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/RedHatMono-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Silkscreen-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Silkscreen-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/SmoochSans-Medium.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/SmoochSans-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Tektur-Medium.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Tektur-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Tektur-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/WorkSans-Bold.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/WorkSans-Italic.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/WorkSans-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/WorkSans-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/YoungSerif-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/YoungSerif-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/changelog-generator/SKILL.md +105 -0
- package/bundles/antigravity-plugin-extras/skills/code-explainer/SKILL.md +91 -0
- package/bundles/antigravity-plugin-extras/skills/competitive-ads-extractor/SKILL.md +294 -0
- package/bundles/antigravity-plugin-extras/skills/component-testing/SKILL.md +310 -0
- package/bundles/antigravity-plugin-extras/skills/content-research-writer/SKILL.md +539 -0
- package/bundles/antigravity-plugin-extras/skills/cross-review/SKILL.md +51 -0
- package/bundles/antigravity-plugin-extras/skills/data-analysis/SKILL.md +111 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/README.md +248 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/SKILL.md +203 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/assets/adapter.py.template +44 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/assets/api-router.py.template +43 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/assets/contract-test.py.template +384 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/assets/display-dto.py.template +39 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/assets/frontend-service.ts.template +46 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/assets/frontend-types.ts.template +38 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/assets/ingestion-model.py.template +42 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/assets/mapping-doc.md.template +46 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/assets/normalizer.py.template +48 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/assets/prompts/extract_requirements.md +36 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/assets/prompts/extract_ui_demand.md +35 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/assets/prompts/reconcile_mapping.md +66 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/assets/query-catalog.md.template +62 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/references/consumer-driven-contracts.md +131 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/references/drift-check-catalog.md +305 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/references/layer-responsibilities.md +333 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/scripts/discover_connections.py +170 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/scripts/discover_sources.py +161 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/scripts/drift_check.py +171 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/scripts/extract_schema.py +1363 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/scripts/generate_gap_report.py +81 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/scripts/generate_mapping_doc.py +294 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/scripts/ts_dto_compare.py +214 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/scripts/validate_lineage.py +51 -0
- package/bundles/antigravity-plugin-extras/skills/data-loader/SKILL.md +753 -0
- package/bundles/antigravity-plugin-extras/skills/data-validation/SKILL.md +220 -0
- package/bundles/antigravity-plugin-extras/skills/db-testing/SKILL.md +117 -0
- package/bundles/antigravity-plugin-extras/skills/deploy-local/SKILL.md +259 -0
- package/bundles/antigravity-plugin-extras/skills/design-md/SKILL.md +167 -0
- package/bundles/antigravity-plugin-extras/skills/design-system-tokens/SKILL.md +240 -0
- package/bundles/antigravity-plugin-extras/skills/design-system-tokens/references/DESIGN-SYSTEM-TEMPLATE.md +577 -0
- package/bundles/antigravity-plugin-extras/skills/developer-growth-analysis/SKILL.md +323 -0
- package/bundles/antigravity-plugin-extras/skills/doc-coauthoring/SKILL.md +378 -0
- package/bundles/antigravity-plugin-extras/skills/documentation-analyzer/SKILL.md +78 -0
- package/bundles/antigravity-plugin-extras/skills/domain-name-brainstormer/SKILL.md +213 -0
- package/bundles/antigravity-plugin-extras/skills/enterprise-dashboard-aesthetic-system/SKILL.md +120 -0
- package/bundles/antigravity-plugin-extras/skills/excalidraw/SKILL.md +193 -0
- package/bundles/antigravity-plugin-extras/skills/excalidraw/references/element-types.md +497 -0
- package/bundles/antigravity-plugin-extras/skills/excalidraw/references/excalidraw-schema.md +356 -0
- package/bundles/antigravity-plugin-extras/skills/excalidraw/references/reliable-diagrams.md +115 -0
- package/bundles/antigravity-plugin-extras/skills/excalidraw/scripts/README.md +60 -0
- package/bundles/antigravity-plugin-extras/skills/excalidraw/scripts/add-arrow.py +354 -0
- package/bundles/antigravity-plugin-extras/skills/excalidraw/scripts/add-icon-to-diagram.py +412 -0
- package/bundles/antigravity-plugin-extras/skills/excalidraw/scripts/split-excalidraw-library.py +183 -0
- package/bundles/antigravity-plugin-extras/skills/excalidraw/templates/business-flow-swimlane-template.excalidraw +334 -0
- package/bundles/antigravity-plugin-extras/skills/excalidraw/templates/class-diagram-template.excalidraw +558 -0
- package/bundles/antigravity-plugin-extras/skills/excalidraw/templates/data-flow-diagram-template.excalidraw +279 -0
- package/bundles/antigravity-plugin-extras/skills/excalidraw/templates/er-diagram-template.excalidraw +662 -0
- package/bundles/antigravity-plugin-extras/skills/excalidraw/templates/flowchart-template.excalidraw +179 -0
- package/bundles/antigravity-plugin-extras/skills/excalidraw/templates/mindmap-template.excalidraw +244 -0
- package/bundles/antigravity-plugin-extras/skills/excalidraw/templates/relationship-template.excalidraw +145 -0
- package/bundles/antigravity-plugin-extras/skills/excalidraw/templates/reliable-flowchart.excalidraw +1 -0
- package/bundles/antigravity-plugin-extras/skills/excalidraw/templates/sequence-diagram-template.excalidraw +509 -0
- package/bundles/antigravity-plugin-extras/skills/file-organizer/SKILL.md +434 -0
- package/bundles/antigravity-plugin-extras/skills/game-changing-features/README.md +221 -0
- package/bundles/antigravity-plugin-extras/skills/game-changing-features/SKILL.md +265 -0
- package/bundles/antigravity-plugin-extras/skills/github-issues/SKILL.md +359 -0
- package/bundles/antigravity-plugin-extras/skills/github-issues/references/templates.md +90 -0
- package/bundles/antigravity-plugin-extras/skills/golden-nuggets/SKILL.md +192 -0
- package/bundles/antigravity-plugin-extras/skills/humanizer/SKILL.md +194 -0
- package/bundles/antigravity-plugin-extras/skills/image-enhancer/SKILL.md +100 -0
- package/bundles/antigravity-plugin-extras/skills/intent-writer/SKILL.md +201 -0
- package/bundles/antigravity-plugin-extras/skills/internal-comms/LICENSE.txt +202 -0
- package/bundles/antigravity-plugin-extras/skills/internal-comms/SKILL.md +124 -0
- package/bundles/antigravity-plugin-extras/skills/internal-comms/examples/3p-updates.md +47 -0
- package/bundles/antigravity-plugin-extras/skills/internal-comms/examples/company-newsletter.md +65 -0
- package/bundles/antigravity-plugin-extras/skills/internal-comms/examples/faq-answers.md +30 -0
- package/bundles/antigravity-plugin-extras/skills/internal-comms/examples/general-comms.md +16 -0
- package/bundles/antigravity-plugin-extras/skills/invoice-organizer/SKILL.md +447 -0
- package/bundles/antigravity-plugin-extras/skills/jira-issues/SKILL.md +182 -0
- package/bundles/antigravity-plugin-extras/skills/job-application/SKILL.md +188 -0
- package/bundles/antigravity-plugin-extras/skills/lead-research-assistant/SKILL.md +200 -0
- package/bundles/antigravity-plugin-extras/skills/llm-application-dev/SKILL.md +217 -0
- package/bundles/antigravity-plugin-extras/skills/mcp-builder/LICENSE.txt +202 -0
- package/bundles/antigravity-plugin-extras/skills/mcp-builder/SKILL.md +100 -0
- package/bundles/antigravity-plugin-extras/skills/mcp-builder/references/evaluation.md +602 -0
- package/bundles/antigravity-plugin-extras/skills/mcp-builder/references/mcp_best_practices.md +915 -0
- package/bundles/antigravity-plugin-extras/skills/mcp-builder/references/node_mcp_server.md +916 -0
- package/bundles/antigravity-plugin-extras/skills/mcp-builder/references/python_mcp_server.md +752 -0
- package/bundles/antigravity-plugin-extras/skills/mcp-builder/scripts/connections.py +151 -0
- package/bundles/antigravity-plugin-extras/skills/mcp-builder/scripts/evaluation.py +373 -0
- package/bundles/antigravity-plugin-extras/skills/mcp-builder/scripts/example_evaluation.xml +22 -0
- package/bundles/antigravity-plugin-extras/skills/mcp-builder/scripts/requirements.txt +2 -0
- package/bundles/antigravity-plugin-extras/skills/meeting-insights-analyzer/SKILL.md +328 -0
- package/bundles/antigravity-plugin-extras/skills/monorepo/SKILL.md +267 -0
- package/bundles/antigravity-plugin-extras/skills/naming-analyzer/SKILL.md +376 -0
- package/bundles/antigravity-plugin-extras/skills/nextjs-app-router/SKILL.md +271 -0
- package/bundles/antigravity-plugin-extras/skills/notebooklm/AUTHENTICATION.md +154 -0
- package/bundles/antigravity-plugin-extras/skills/notebooklm/SKILL.md +270 -0
- package/bundles/antigravity-plugin-extras/skills/notebooklm/references/api_reference.md +309 -0
- package/bundles/antigravity-plugin-extras/skills/notebooklm/references/troubleshooting.md +376 -0
- package/bundles/antigravity-plugin-extras/skills/notebooklm/references/usage_patterns.md +338 -0
- package/bundles/antigravity-plugin-extras/skills/notebooklm/scripts/__init__.py +81 -0
- package/bundles/antigravity-plugin-extras/skills/notebooklm/scripts/ask_question.py +256 -0
- package/bundles/antigravity-plugin-extras/skills/notebooklm/scripts/auth_manager.py +358 -0
- package/bundles/antigravity-plugin-extras/skills/notebooklm/scripts/browser_session.py +255 -0
- package/bundles/antigravity-plugin-extras/skills/notebooklm/scripts/browser_utils.py +107 -0
- package/bundles/antigravity-plugin-extras/skills/notebooklm/scripts/cleanup_manager.py +302 -0
- package/bundles/antigravity-plugin-extras/skills/notebooklm/scripts/config.py +44 -0
- package/bundles/antigravity-plugin-extras/skills/notebooklm/scripts/notebook_manager.py +410 -0
- package/bundles/antigravity-plugin-extras/skills/notebooklm/scripts/run.py +102 -0
- package/bundles/antigravity-plugin-extras/skills/notebooklm/scripts/setup_environment.py +204 -0
- package/bundles/antigravity-plugin-extras/skills/observability/SKILL.md +371 -0
- package/bundles/antigravity-plugin-extras/skills/onboard-project/SKILL.md +192 -0
- package/bundles/antigravity-plugin-extras/skills/performance-testing/SKILL.md +226 -0
- package/bundles/antigravity-plugin-extras/skills/pipeline-state/SKILL.md +208 -0
- package/bundles/antigravity-plugin-extras/skills/plantuml/SKILL.md +228 -0
- package/bundles/antigravity-plugin-extras/skills/popular-web-designs/SKILL.md +142 -0
- package/bundles/antigravity-plugin-extras/skills/popular-web-designs/templates/linear.app.md +196 -0
- package/bundles/antigravity-plugin-extras/skills/popular-web-designs/templates/stripe.md +214 -0
- package/bundles/antigravity-plugin-extras/skills/popular-web-designs/templates/vercel.md +218 -0
- package/bundles/antigravity-plugin-extras/skills/prd-to-code/SKILL.md +127 -0
- package/bundles/antigravity-plugin-extras/skills/raffle-winner-picker/SKILL.md +159 -0
- package/bundles/antigravity-plugin-extras/skills/react-useeffect/README.md +320 -0
- package/bundles/antigravity-plugin-extras/skills/react-useeffect/SKILL.md +53 -0
- package/bundles/antigravity-plugin-extras/skills/react-useeffect/alternatives.md +258 -0
- package/bundles/antigravity-plugin-extras/skills/react-useeffect/anti-patterns.md +290 -0
- package/bundles/antigravity-plugin-extras/skills/receiving-code-review/SKILL.md +213 -0
- package/bundles/antigravity-plugin-extras/skills/relay/SKILL.md +246 -0
- package/bundles/antigravity-plugin-extras/skills/requesting-code-review/SKILL.md +105 -0
- package/bundles/antigravity-plugin-extras/skills/requesting-code-review/code-reviewer.md +146 -0
- package/bundles/antigravity-plugin-extras/skills/responsive-mobile-native/SKILL.md +350 -0
- package/bundles/antigravity-plugin-extras/skills/responsive-mobile-native/references/pwa-checklist.md +226 -0
- package/bundles/antigravity-plugin-extras/skills/responsive-mobile-native/references/touch-and-interaction.md +265 -0
- package/bundles/antigravity-plugin-extras/skills/responsive-mobile-native/references/transformation-catalogue.md +326 -0
- package/bundles/antigravity-plugin-extras/skills/schema-migration/SKILL.md +275 -0
- package/bundles/antigravity-plugin-extras/skills/setup-project-ai/SKILL.md +120 -0
- package/bundles/antigravity-plugin-extras/skills/shadcn-radix/SKILL.md +330 -0
- package/bundles/antigravity-plugin-extras/skills/sketch/SKILL.md +104 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/LICENSE.txt +202 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/SKILL.md +646 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/core/color_palettes.py +302 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/core/easing.py +230 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/core/frame_composer.py +469 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/core/gif_builder.py +246 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/core/typography.py +357 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/core/validators.py +264 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/core/visual_effects.py +494 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/requirements.txt +4 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/templates/bounce.py +106 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/templates/explode.py +331 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/templates/fade.py +329 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/templates/flip.py +291 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/templates/kaleidoscope.py +211 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/templates/morph.py +329 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/templates/move.py +293 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/templates/pulse.py +268 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/templates/shake.py +127 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/templates/slide.py +291 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/templates/spin.py +269 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/templates/wiggle.py +300 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/templates/zoom.py +312 -0
- package/bundles/antigravity-plugin-extras/skills/slides/SKILL.md +38 -0
- package/bundles/antigravity-plugin-extras/skills/state-tracking/SKILL.md +131 -0
- package/bundles/antigravity-plugin-extras/skills/streamlit-dev/SKILL.md +268 -0
- package/bundles/antigravity-plugin-extras/skills/svg-create/SKILL.md +251 -0
- package/bundles/antigravity-plugin-extras/skills/theme-factory/LICENSE.txt +202 -0
- package/bundles/antigravity-plugin-extras/skills/theme-factory/SKILL.md +59 -0
- package/bundles/antigravity-plugin-extras/skills/theme-factory/theme-showcase.pdf +0 -0
- package/bundles/antigravity-plugin-extras/skills/theme-factory/themes/arctic-frost.md +19 -0
- package/bundles/antigravity-plugin-extras/skills/theme-factory/themes/botanical-garden.md +19 -0
- package/bundles/antigravity-plugin-extras/skills/theme-factory/themes/desert-rose.md +19 -0
- package/bundles/antigravity-plugin-extras/skills/theme-factory/themes/forest-canopy.md +19 -0
- package/bundles/antigravity-plugin-extras/skills/theme-factory/themes/golden-hour.md +19 -0
- package/bundles/antigravity-plugin-extras/skills/theme-factory/themes/midnight-galaxy.md +19 -0
- package/bundles/antigravity-plugin-extras/skills/theme-factory/themes/modern-minimalist.md +19 -0
- package/bundles/antigravity-plugin-extras/skills/theme-factory/themes/ocean-depths.md +19 -0
- package/bundles/antigravity-plugin-extras/skills/theme-factory/themes/sunset-boulevard.md +19 -0
- package/bundles/antigravity-plugin-extras/skills/theme-factory/themes/tech-innovation.md +19 -0
- package/bundles/antigravity-plugin-extras/skills/ui-styling-patterns/LICENSE.txt +202 -0
- package/bundles/antigravity-plugin-extras/skills/ui-styling-patterns/SKILL.md +320 -0
- package/bundles/antigravity-plugin-extras/skills/ui-testing/SKILL.md +660 -0
- package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/SKILL.md +660 -0
- package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/data/_sync_all.py +414 -0
- package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/data/app-interface.csv +31 -0
- package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/data/charts.csv +26 -0
- package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/data/colors.csv +162 -0
- package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/data/design.csv +1776 -0
- package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/data/draft.csv +1779 -0
- package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/data/google-fonts.csv +1924 -0
- package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/data/icons.csv +106 -0
- package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/data/landing.csv +35 -0
- package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/data/products.csv +162 -0
- package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/data/react-performance.csv +45 -0
- package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/data/styles.csv +85 -0
- package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/data/typography.csv +74 -0
- package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/data/ui-reasoning.csv +162 -0
- package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/data/ux-guidelines.csv +100 -0
- package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/scripts/core.py +247 -0
- package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/scripts/design_system.py +1067 -0
- package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/scripts/search.py +114 -0
- package/bundles/antigravity-plugin-extras/skills/understand-anything/SKILL.md +140 -0
- package/bundles/antigravity-plugin-extras/skills/understand-anything/references/commands.md +252 -0
- package/bundles/antigravity-plugin-extras/skills/understand-anything/references/graph-schema.md +116 -0
- package/bundles/antigravity-plugin-extras/skills/understand-anything/references/pipeline.md +331 -0
- package/bundles/antigravity-plugin-extras/skills/update-readme/SKILL.md +74 -0
- package/bundles/antigravity-plugin-extras/skills/verification-loop/SKILL.md +209 -0
- package/bundles/antigravity-plugin-extras/skills/video-downloader/SKILL.md +107 -0
- package/bundles/antigravity-plugin-extras/skills/webapp-development/SKILL.md +288 -0
- package/bundles/antigravity-plugin-extras/skills/word-cloud/SKILL.md +339 -0
- package/bundles/antigravity-plugin-extras/skills/word-cloud/agents/agent-interface.md +175 -0
- package/bundles/antigravity-plugin-extras/skills/word-cloud/references/html.md +384 -0
- package/bundles/antigravity-plugin-extras/skills/word-cloud/references/nlp-keywords.md +127 -0
- package/bundles/antigravity-plugin-extras/skills/word-cloud/references/palettes.md +149 -0
- package/bundles/antigravity-plugin-extras/skills/word-cloud/references/python.md +249 -0
- package/bundles/antigravity-plugin-extras/skills/word-cloud/references/react.md +427 -0
- package/bundles/antigravity-plugin-extras/skills/word-cloud/references/shapes.md +135 -0
- package/bundles/antigravity-plugin-extras/skills/word-cloud/references/stopwords.md +115 -0
- package/bundles/antigravity-plugin-extras/skills/youtube-transcript/SKILL.md +416 -0
- package/bundles/manifest.json +2 -1
- package/dist/cli.js +166 -37
- package/package.json +1 -1
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
# Touch & Interaction Reference
|
|
2
|
+
|
|
3
|
+
Complete rules for making web UI feel native on touch devices.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Tap Targets
|
|
8
|
+
|
|
9
|
+
Every interactive element must meet the **44×44px minimum** (Apple HIG, WCAG 2.5.8).
|
|
10
|
+
This includes buttons, links, nav items, table row actions, icon buttons, toggles,
|
|
11
|
+
checkboxes, and close/dismiss controls.
|
|
12
|
+
|
|
13
|
+
**Expanding small elements without changing visual size**:
|
|
14
|
+
|
|
15
|
+
```css
|
|
16
|
+
/* Use padding to expand the hit area without changing appearance */
|
|
17
|
+
.icon-btn {
|
|
18
|
+
padding: 12px; /* visual size + hit area expansion */
|
|
19
|
+
margin: -12px; /* negative margin to cancel layout effect */
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/* Or use pseudo-element hit area expansion */
|
|
23
|
+
.small-link {
|
|
24
|
+
position: relative;
|
|
25
|
+
}
|
|
26
|
+
.small-link::after {
|
|
27
|
+
content: '';
|
|
28
|
+
position: absolute;
|
|
29
|
+
inset: -10px; /* expand hit area 10px in all directions */
|
|
30
|
+
}
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## Removing Hover Dependencies
|
|
36
|
+
|
|
37
|
+
### Audit pattern
|
|
38
|
+
|
|
39
|
+
Search for every `:hover` style in the codebase. For each one, ask:
|
|
40
|
+
- Does this reveal content? → Must have a touch equivalent
|
|
41
|
+
- Does this change visual state (colour, shadow)? → Also apply to `:active` and `:focus-visible`
|
|
42
|
+
- Is it purely decorative (slight glow)? → Safe to leave but add `:active` too
|
|
43
|
+
|
|
44
|
+
### Fixing hover-only reveals
|
|
45
|
+
|
|
46
|
+
```css
|
|
47
|
+
/* BEFORE — only shows on hover */
|
|
48
|
+
.action-buttons {
|
|
49
|
+
opacity: 0;
|
|
50
|
+
transition: opacity 0.15s;
|
|
51
|
+
}
|
|
52
|
+
.table-row:hover .action-buttons {
|
|
53
|
+
opacity: 1;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/* AFTER — always visible on touch devices */
|
|
57
|
+
@media (hover: none) {
|
|
58
|
+
.action-buttons {
|
|
59
|
+
opacity: 1;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/* Desktop hover behaviour preserved via @media (hover: hover) */
|
|
63
|
+
@media (hover: hover) {
|
|
64
|
+
.action-buttons { opacity: 0; }
|
|
65
|
+
.table-row:hover .action-buttons { opacity: 1; }
|
|
66
|
+
}
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
The `@media (hover: hover)` / `@media (hover: none)` media query is the
|
|
70
|
+
correct way to distinguish touch from pointer devices. Do not use user-agent sniffing.
|
|
71
|
+
|
|
72
|
+
### Touch feedback
|
|
73
|
+
|
|
74
|
+
Every tappable element needs visible feedback on tap. Use `:active`:
|
|
75
|
+
|
|
76
|
+
```css
|
|
77
|
+
.btn:active,
|
|
78
|
+
.nav-item:active,
|
|
79
|
+
.card:active {
|
|
80
|
+
transform: scale(0.97);
|
|
81
|
+
opacity: 0.85;
|
|
82
|
+
transition: transform 0.1s, opacity 0.1s;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/* Prevent iOS default tap highlight (replace with your own) */
|
|
86
|
+
* {
|
|
87
|
+
-webkit-tap-highlight-color: transparent;
|
|
88
|
+
}
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
## Scroll Handling
|
|
94
|
+
|
|
95
|
+
### Smooth momentum scroll
|
|
96
|
+
|
|
97
|
+
```css
|
|
98
|
+
.scrollable-container {
|
|
99
|
+
overflow-y: auto;
|
|
100
|
+
-webkit-overflow-scrolling: touch; /* momentum scroll on iOS */
|
|
101
|
+
overscroll-behavior: contain; /* prevent scroll chaining to parent */
|
|
102
|
+
}
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### Horizontal scroll containers (KPI strips, tab bars, chip lists)
|
|
106
|
+
|
|
107
|
+
```css
|
|
108
|
+
.horizontal-scroll {
|
|
109
|
+
display: flex;
|
|
110
|
+
overflow-x: auto;
|
|
111
|
+
scroll-snap-type: x mandatory;
|
|
112
|
+
-webkit-overflow-scrolling: touch;
|
|
113
|
+
scrollbar-width: none; /* hide scrollbar on mobile */
|
|
114
|
+
gap: 10px;
|
|
115
|
+
padding-bottom: 4px; /* prevents shadow clipping */
|
|
116
|
+
}
|
|
117
|
+
.horizontal-scroll::-webkit-scrollbar { display: none; }
|
|
118
|
+
|
|
119
|
+
.scroll-item {
|
|
120
|
+
flex-shrink: 0;
|
|
121
|
+
scroll-snap-align: start;
|
|
122
|
+
}
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
### Preventing scroll bleed in modals / sheets
|
|
126
|
+
|
|
127
|
+
```css
|
|
128
|
+
/* When sheet/modal is open, lock the body */
|
|
129
|
+
body.sheet-open {
|
|
130
|
+
overflow: hidden;
|
|
131
|
+
/* iOS requires this too: */
|
|
132
|
+
position: fixed;
|
|
133
|
+
width: 100%;
|
|
134
|
+
}
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
---
|
|
138
|
+
|
|
139
|
+
## Safe Area Insets (iPhone Notch & Home Bar)
|
|
140
|
+
|
|
141
|
+
Required for any fixed elements at top or bottom of screen.
|
|
142
|
+
|
|
143
|
+
```css
|
|
144
|
+
/* Bottom nav bar */
|
|
145
|
+
.bottom-nav {
|
|
146
|
+
padding-bottom: env(safe-area-inset-bottom);
|
|
147
|
+
/* min height + safe area */
|
|
148
|
+
height: calc(56px + env(safe-area-inset-bottom));
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/* Content area */
|
|
152
|
+
.main-content {
|
|
153
|
+
padding-bottom: calc(64px + env(safe-area-inset-bottom));
|
|
154
|
+
padding-top: env(safe-area-inset-top);
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
/* Bottom sheets */
|
|
158
|
+
.bottom-sheet-content {
|
|
159
|
+
padding-bottom: max(16px, env(safe-area-inset-bottom));
|
|
160
|
+
}
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
Requires `viewport-fit=cover` in the viewport meta tag (covered in SKILL.md).
|
|
164
|
+
|
|
165
|
+
---
|
|
166
|
+
|
|
167
|
+
## Gesture Hooks
|
|
168
|
+
|
|
169
|
+
### Swipe to dismiss / navigate back
|
|
170
|
+
|
|
171
|
+
Implement with `touchstart` + `touchend` tracking:
|
|
172
|
+
|
|
173
|
+
```js
|
|
174
|
+
// Framework-agnostic swipe detector
|
|
175
|
+
function useSwipe({ onSwipeLeft, onSwipeRight, threshold = 50 }) {
|
|
176
|
+
let startX = null;
|
|
177
|
+
|
|
178
|
+
return {
|
|
179
|
+
onTouchStart: (e) => { startX = e.touches[0].clientX; },
|
|
180
|
+
onTouchEnd: (e) => {
|
|
181
|
+
if (startX === null) return;
|
|
182
|
+
const diff = e.changedTouches[0].clientX - startX;
|
|
183
|
+
if (Math.abs(diff) < threshold) return;
|
|
184
|
+
if (diff < 0) onSwipeLeft?.();
|
|
185
|
+
else onSwipeRight?.();
|
|
186
|
+
startX = null;
|
|
187
|
+
}
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
### Pull-to-refresh
|
|
193
|
+
|
|
194
|
+
Only implement if the page has data that updates in real time (queue, live map).
|
|
195
|
+
Use native `overscroll-behavior: contain` + CSS animation, or a lightweight library.
|
|
196
|
+
Do not build custom pull-to-refresh — it conflicts with browser scroll behaviour.
|
|
197
|
+
|
|
198
|
+
### Bottom sheet drag handle
|
|
199
|
+
|
|
200
|
+
```js
|
|
201
|
+
// Minimal drag-to-expand/collapse for a bottom sheet
|
|
202
|
+
function initSheetDrag(sheetEl) {
|
|
203
|
+
let startY, startHeight;
|
|
204
|
+
const handle = sheetEl.querySelector('.drag-handle');
|
|
205
|
+
|
|
206
|
+
handle.addEventListener('touchstart', (e) => {
|
|
207
|
+
startY = e.touches[0].clientY;
|
|
208
|
+
startHeight = sheetEl.getBoundingClientRect().height;
|
|
209
|
+
});
|
|
210
|
+
|
|
211
|
+
handle.addEventListener('touchmove', (e) => {
|
|
212
|
+
const delta = startY - e.touches[0].clientY;
|
|
213
|
+
const newHeight = Math.min(
|
|
214
|
+
Math.max(startHeight + delta, 120), // min 120px
|
|
215
|
+
window.innerHeight * 0.9 // max 90vh
|
|
216
|
+
);
|
|
217
|
+
sheetEl.style.height = newHeight + 'px';
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
---
|
|
223
|
+
|
|
224
|
+
## Input & Keyboard
|
|
225
|
+
|
|
226
|
+
### Prevent iOS zoom on input focus
|
|
227
|
+
|
|
228
|
+
```css
|
|
229
|
+
input, select, textarea {
|
|
230
|
+
font-size: 16px; /* minimum to prevent iOS auto-zoom */
|
|
231
|
+
}
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
If your design system uses smaller input text, use `font-size: 16px` on the
|
|
235
|
+
element itself and `transform: scale(0.875)` with `transform-origin: left` to
|
|
236
|
+
visually match your design.
|
|
237
|
+
|
|
238
|
+
### Keyboard-aware layout
|
|
239
|
+
|
|
240
|
+
When the virtual keyboard opens, fixed elements at the bottom of the screen can
|
|
241
|
+
end up behind it. Use the `visualViewport` API to detect this:
|
|
242
|
+
|
|
243
|
+
```js
|
|
244
|
+
window.visualViewport?.addEventListener('resize', () => {
|
|
245
|
+
const keyboardHeight = window.innerHeight - window.visualViewport.height;
|
|
246
|
+
document.querySelector('.bottom-bar').style.transform =
|
|
247
|
+
`translateY(-${keyboardHeight}px)`;
|
|
248
|
+
});
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
---
|
|
252
|
+
|
|
253
|
+
## CSS `touch-action` Property
|
|
254
|
+
|
|
255
|
+
Control which gestures the browser handles natively:
|
|
256
|
+
|
|
257
|
+
| Value | Use case |
|
|
258
|
+
|---|---|
|
|
259
|
+
| `touch-action: pan-y` | Vertical scroll only (carousel, horizontal swipe area) |
|
|
260
|
+
| `touch-action: pan-x` | Horizontal scroll only |
|
|
261
|
+
| `touch-action: none` | Fully custom gesture (drawing canvas, drag-and-drop) |
|
|
262
|
+
| `touch-action: manipulation` | Allow pan + pinch-zoom, disable double-tap zoom |
|
|
263
|
+
|
|
264
|
+
Apply `touch-action: manipulation` to all buttons and interactive elements to
|
|
265
|
+
eliminate the 300ms tap delay on older browsers.
|
|
@@ -0,0 +1,326 @@
|
|
|
1
|
+
# Transformation Catalogue
|
|
2
|
+
|
|
3
|
+
Complete catalogue of desktop UI primitive → mobile pattern mappings.
|
|
4
|
+
For each transformation: what it is, when to apply it, and the pattern to follow.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Table of Contents
|
|
9
|
+
|
|
10
|
+
1. Data Table → Card List
|
|
11
|
+
2. KPI Strip → Horizontal Scroll / Stacked Grid
|
|
12
|
+
3. Multi-column Form → Single Column
|
|
13
|
+
4. Map → Full-Screen with Floating Controls
|
|
14
|
+
5. Modal / Dialog → Bottom Sheet
|
|
15
|
+
6. Multi-tab Interface → Tab Bar or Accordion
|
|
16
|
+
7. Dense Toolbar / Filter Strip → Collapsible / Sheet
|
|
17
|
+
8. Sidebar Panel → Bottom Sheet or Drawer
|
|
18
|
+
9. Hover Cards / Tooltip Content → Always Visible or Tap-to-Reveal
|
|
19
|
+
10. Split Pane (master/detail) → Stack with Navigation
|
|
20
|
+
11. Dropdown Menus → Action Sheet
|
|
21
|
+
12. Pagination → Infinite Scroll or Load More
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## 1. Data Table → Card List
|
|
26
|
+
|
|
27
|
+
**When to apply**: Table has more than 3 columns, or any column would be less
|
|
28
|
+
than 80px wide at 375px viewport.
|
|
29
|
+
|
|
30
|
+
**Pattern**: Each table row becomes a card. The most important column value
|
|
31
|
+
becomes the card headline. All other columns become label–value pairs within
|
|
32
|
+
the card.
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
Desktop row: Mobile card:
|
|
36
|
+
│ #84201 │ Niamh O'S │ Dispatch │ ┌────────────────────────────┐
|
|
37
|
+
│ XGS-PON│ 27 Mar │ 91% │ │ #84201 [XGS-PON] │
|
|
38
|
+
│ Niamh O'Sullivan │
|
|
39
|
+
│ Fault Repair — No Service │
|
|
40
|
+
│ 27 Mar · 09:00–13:00 │
|
|
41
|
+
│ ✅ Dispatch 91% confident │
|
|
42
|
+
└────────────────────────────┘
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
**Rules**:
|
|
46
|
+
- Card min-height: 72px; padding: 14px 16px
|
|
47
|
+
- Primary identifier (ID, name) at top in bold
|
|
48
|
+
- Status badge always visible (not hidden in a column)
|
|
49
|
+
- Row actions (arrow, kebab) become a visible button at top-right of card
|
|
50
|
+
- Swipe-left to reveal destructive action (optional but native-feeling)
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## 2. KPI Strip → Horizontal Scroll or 2×N Grid
|
|
55
|
+
|
|
56
|
+
**When to apply**: KPI strip has more than 3 cards and does not fit at 375px.
|
|
57
|
+
|
|
58
|
+
**Option A — Horizontal scroll** (preferred when cards are equal weight):
|
|
59
|
+
```css
|
|
60
|
+
.kpi-strip {
|
|
61
|
+
display: flex;
|
|
62
|
+
overflow-x: auto;
|
|
63
|
+
scroll-snap-type: x mandatory;
|
|
64
|
+
-webkit-overflow-scrolling: touch;
|
|
65
|
+
gap: 10px;
|
|
66
|
+
padding-bottom: 4px; /* show scroll shadow */
|
|
67
|
+
}
|
|
68
|
+
.kpi-card {
|
|
69
|
+
flex: 0 0 160px; /* fixed width, scrollable */
|
|
70
|
+
scroll-snap-align: start;
|
|
71
|
+
}
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
**Option B — 2×N grid** (preferred when one KPI is primary):
|
|
75
|
+
```css
|
|
76
|
+
@media (max-width: 767px) {
|
|
77
|
+
.kpi-strip {
|
|
78
|
+
display: grid;
|
|
79
|
+
grid-template-columns: 1fr 1fr;
|
|
80
|
+
}
|
|
81
|
+
.kpi-card:first-child {
|
|
82
|
+
grid-column: 1 / -1; /* primary KPI spans full width */
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
## 3. Multi-column Form → Single Column
|
|
90
|
+
|
|
91
|
+
**When to apply**: Any form with more than 1 column at mobile widths.
|
|
92
|
+
|
|
93
|
+
**Rules**:
|
|
94
|
+
- All fields: `width: 100%`
|
|
95
|
+
- Labels above fields (not inline/floating on mobile)
|
|
96
|
+
- Input `font-size: 16px` minimum (prevents iOS zoom on focus)
|
|
97
|
+
- Grouping: use visual separators (border-top, section label) not columns
|
|
98
|
+
- Submit button: full width, 48px height, at the bottom of the form
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
## 4. Map → Full-Screen with Floating Controls
|
|
103
|
+
|
|
104
|
+
**When to apply**: Map is embedded in a split layout (map + sidebar).
|
|
105
|
+
|
|
106
|
+
**Pattern**: The map goes full-screen. Sidebar content moves to a
|
|
107
|
+
bottom sheet that the user can pull up.
|
|
108
|
+
|
|
109
|
+
```
|
|
110
|
+
Desktop: Mobile:
|
|
111
|
+
┌──────────┬─────────┐ ┌──────────────────────┐
|
|
112
|
+
│ │ Summary │ │ │
|
|
113
|
+
│ MAP │ Stats │ │ MAP │
|
|
114
|
+
│ │ Alerts │ │ (full screen) │
|
|
115
|
+
│ │ │ ├──────────────────────┤
|
|
116
|
+
└──────────┴─────────┘ │ ▲ Summary 38 jobs │
|
|
117
|
+
│ (pull up for detail) │
|
|
118
|
+
└──────────────────────┘
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
**Implementation**:
|
|
122
|
+
- Map container: `position: fixed; inset: 0; z-index: 0`
|
|
123
|
+
- Bottom sheet: `position: fixed; bottom: 0; left: 0; right: 0; z-index: 10`
|
|
124
|
+
- Bottom sheet default height: ~200px; expanded height: 50vh–80vh
|
|
125
|
+
- Use CSS `transform: translateY()` + `transition` for pull-up animation
|
|
126
|
+
- Add touch drag handle (40×4px rounded bar at top of sheet)
|
|
127
|
+
- Floating action controls (zoom, locate): `position: absolute` over map
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
## 5. Modal / Dialog → Bottom Sheet
|
|
132
|
+
|
|
133
|
+
**When to apply**: Any `position: fixed` modal / dialog on mobile.
|
|
134
|
+
|
|
135
|
+
**Pattern**: Modals on mobile should slide up from the bottom, not float
|
|
136
|
+
in the center. Center-modal on mobile = awkward dismiss, keyboard issues,
|
|
137
|
+
95% coverage.
|
|
138
|
+
|
|
139
|
+
```css
|
|
140
|
+
/* Desktop: centered modal */
|
|
141
|
+
@media (min-width: 768px) {
|
|
142
|
+
.modal {
|
|
143
|
+
top: 50%; left: 50%;
|
|
144
|
+
transform: translate(-50%, -50%);
|
|
145
|
+
max-width: 600px; border-radius: 16px;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/* Mobile: bottom sheet */
|
|
150
|
+
@media (max-width: 767px) {
|
|
151
|
+
.modal {
|
|
152
|
+
top: auto; left: 0; right: 0; bottom: 0;
|
|
153
|
+
transform: translateY(0);
|
|
154
|
+
border-radius: 20px 20px 0 0;
|
|
155
|
+
max-height: 90vh;
|
|
156
|
+
overflow-y: auto;
|
|
157
|
+
}
|
|
158
|
+
.modal-enter { transform: translateY(100%); }
|
|
159
|
+
.modal-enter-active { transform: translateY(0); transition: transform 0.3s ease; }
|
|
160
|
+
}
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
**Rules**:
|
|
164
|
+
- Add drag handle at top
|
|
165
|
+
- `padding-bottom: env(safe-area-inset-bottom)` on content
|
|
166
|
+
- Tap outside backdrop dismisses sheet
|
|
167
|
+
- Scrollable content inside sheet: `overflow-y: auto; -webkit-overflow-scrolling: touch`
|
|
168
|
+
|
|
169
|
+
---
|
|
170
|
+
|
|
171
|
+
## 6. Multi-tab Interface → Bottom Tab Bar or Accordion
|
|
172
|
+
|
|
173
|
+
**When to apply**: App has horizontal tab bar in the page body (not top nav).
|
|
174
|
+
|
|
175
|
+
**Option A — Bottom tab bar** (when tabs = primary navigation, 3–5 items):
|
|
176
|
+
Already covered in SKILL.md under Navigation Transformation.
|
|
177
|
+
|
|
178
|
+
**Option B — Accordion** (when tabs = secondary navigation or filtering):
|
|
179
|
+
|
|
180
|
+
```
|
|
181
|
+
Desktop: Mobile:
|
|
182
|
+
[ Tab1 ] [ Tab2 ] [ Tab3 ] ▼ Tab1 (expanded)
|
|
183
|
+
───────────────────────── content...
|
|
184
|
+
Tab1 content ▶ Tab2 (collapsed)
|
|
185
|
+
▶ Tab3 (collapsed)
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
Use accordion when:
|
|
189
|
+
- Tabs contain long-form content
|
|
190
|
+
- More than 5 tabs
|
|
191
|
+
- Tabs live inside a card or panel (not top-level)
|
|
192
|
+
|
|
193
|
+
---
|
|
194
|
+
|
|
195
|
+
## 7. Dense Toolbar / Filter Strip → Collapsible Row + Sheet
|
|
196
|
+
|
|
197
|
+
**When to apply**: Horizontal filter bar, action bar, or toolbar with 4+ controls.
|
|
198
|
+
|
|
199
|
+
**Pattern**:
|
|
200
|
+
- Show only the 1–2 most important controls inline
|
|
201
|
+
- Remaining controls behind a "Filters" or "More" button
|
|
202
|
+
- Tapping opens a bottom sheet with all filter options
|
|
203
|
+
|
|
204
|
+
```
|
|
205
|
+
Desktop: [Search___] [Date▼] [Status▼] [Type▼] [Sort▼] [Export]
|
|
206
|
+
Mobile: [Search___] [⚙ Filters (3)]
|
|
207
|
+
↕ (sheet opens)
|
|
208
|
+
Date: [...]
|
|
209
|
+
Status: [...]
|
|
210
|
+
Type: [...]
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
Active filter count badge on the "Filters" button shows how many are applied.
|
|
214
|
+
|
|
215
|
+
---
|
|
216
|
+
|
|
217
|
+
## 8. Sidebar Panel → Bottom Sheet or Off-canvas Drawer
|
|
218
|
+
|
|
219
|
+
**When to apply**: Right-side detail panel in a master/detail layout,
|
|
220
|
+
or a left sidebar with secondary navigation.
|
|
221
|
+
|
|
222
|
+
**For detail panels** (e.g., selected-case right pane in a queue):
|
|
223
|
+
|
|
224
|
+
```
|
|
225
|
+
Desktop: Mobile:
|
|
226
|
+
┌────────────┬──────────┐ ┌──────────────────┐
|
|
227
|
+
│ Queue list │ Detail │ → │ Queue list │
|
|
228
|
+
│ │ panel │ │ [tap row] │
|
|
229
|
+
└────────────┴──────────┘ └──────────────────┘
|
|
230
|
+
↓ (tap)
|
|
231
|
+
┌──────────────────┐
|
|
232
|
+
│ ← Back Detail │
|
|
233
|
+
│ (full-screen) │
|
|
234
|
+
└──────────────────┘
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
**Rules**:
|
|
238
|
+
- Stack becomes a navigation: list → push detail page onto stack
|
|
239
|
+
- Back button or swipe-right returns to list
|
|
240
|
+
- Alternatively: detail slides up as bottom sheet (simpler, no routing needed)
|
|
241
|
+
|
|
242
|
+
---
|
|
243
|
+
|
|
244
|
+
## 9. Hover Cards / Tooltips → Always Visible or Tap-to-Reveal
|
|
245
|
+
|
|
246
|
+
**When to apply**: Any content that only appears on `:hover`.
|
|
247
|
+
|
|
248
|
+
**Decision tree**:
|
|
249
|
+
```
|
|
250
|
+
Is the content critical to understanding the item?
|
|
251
|
+
YES → Make it always visible (move it below/beside the element)
|
|
252
|
+
NO → Is the content supplementary detail (e.g. full name for truncated text)?
|
|
253
|
+
YES → Show on tap (toggle visibility with :focus or JS)
|
|
254
|
+
NO → Remove it (was probably unnecessary)
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
**Never**: Leave hover-only content as-is on mobile. It simply never appears.
|
|
258
|
+
|
|
259
|
+
---
|
|
260
|
+
|
|
261
|
+
## 10. Split Pane (Master/Detail) → Stacked Navigation
|
|
262
|
+
|
|
263
|
+
**When to apply**: Two-panel layout where left = list, right = detail.
|
|
264
|
+
|
|
265
|
+
Already covered in item 8. The key pattern:
|
|
266
|
+
|
|
267
|
+
- On mobile, only one panel is visible at a time
|
|
268
|
+
- Tapping a list item pushes the detail view (slide in from right)
|
|
269
|
+
- Back button / swipe-right gesture returns to the list
|
|
270
|
+
- URL should reflect the detail state if the app has routing
|
|
271
|
+
|
|
272
|
+
**Routing approach** (framework-agnostic):
|
|
273
|
+
```
|
|
274
|
+
/queue → shows list only on mobile, both on desktop
|
|
275
|
+
/queue/:caseId → shows detail only on mobile, detail highlighted on desktop
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
---
|
|
279
|
+
|
|
280
|
+
## 11. Dropdown Menus → Action Sheet
|
|
281
|
+
|
|
282
|
+
**When to apply**: Click-triggered dropdown menus with 3+ options.
|
|
283
|
+
|
|
284
|
+
**Pattern**: On mobile, dropdowns become action sheets (list of options sliding
|
|
285
|
+
up from the bottom of the screen).
|
|
286
|
+
|
|
287
|
+
```
|
|
288
|
+
Desktop: [▼ Sort by Name ▼]
|
|
289
|
+
↓ hover/click
|
|
290
|
+
┌─────────────┐
|
|
291
|
+
│ Name ↑ │
|
|
292
|
+
│ Name ↓ │
|
|
293
|
+
│ Date │
|
|
294
|
+
└─────────────┘
|
|
295
|
+
|
|
296
|
+
Mobile: [⇅ Sort]
|
|
297
|
+
↓ tap
|
|
298
|
+
┌──────────────────────┐
|
|
299
|
+
│ Sort by │
|
|
300
|
+
├──────────────────────┤
|
|
301
|
+
│ ○ Name (A→Z) │
|
|
302
|
+
│ ● Name (Z→A) │
|
|
303
|
+
│ ○ Date │
|
|
304
|
+
├──────────────────────┤
|
|
305
|
+
│ [Cancel] │
|
|
306
|
+
└──────────────────────┘
|
|
307
|
+
```
|
|
308
|
+
|
|
309
|
+
---
|
|
310
|
+
|
|
311
|
+
## 12. Pagination → Infinite Scroll or Load More Button
|
|
312
|
+
|
|
313
|
+
**When to apply**: Page-number pagination at bottom of a list or table.
|
|
314
|
+
|
|
315
|
+
**Option A — "Load More" button** (recommended for internal tools):
|
|
316
|
+
- Simpler to implement, predictable position in the list
|
|
317
|
+
- User has control over loading
|
|
318
|
+
- Works well with slow network connections
|
|
319
|
+
|
|
320
|
+
**Option B — Infinite scroll**:
|
|
321
|
+
- Better for content-feed style lists
|
|
322
|
+
- Use `IntersectionObserver` to trigger next page load when sentinel element is visible
|
|
323
|
+
- Always show a loading indicator, never a blank gap
|
|
324
|
+
|
|
325
|
+
**Never** use page number pagination on mobile — tap targets are too small
|
|
326
|
+
and the UX is unexpected on touch devices.
|