opencode-skills-collection 4.0.68 → 4.0.70
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/bundled-skills/.antigravity-install-manifest.json +304 -1
- package/bundled-skills/access-review/SKILL.md +394 -0
- package/bundled-skills/access-review/references/details.md +121 -0
- package/bundled-skills/agent-evals/SKILL.md +420 -0
- package/bundled-skills/agent-observability/SKILL.md +346 -0
- package/bundled-skills/agent-observability/references/details.md +786 -0
- package/bundled-skills/ai-agent-security/SKILL.md +393 -0
- package/bundled-skills/ai-agent-security/references/details.md +912 -0
- package/bundled-skills/ai-coding-agent-guardrails/SKILL.md +442 -0
- package/bundled-skills/ai-coding-agent-guardrails/references/details.md +753 -0
- package/bundled-skills/ai-inference-service-mesh/SKILL.md +449 -0
- package/bundled-skills/ai-pipeline-orchestration/SKILL.md +287 -0
- package/bundled-skills/ai-red-teaming/SKILL.md +409 -0
- package/bundled-skills/ai-security-hardening/SKILL.md +343 -0
- package/bundled-skills/ai-sre-incident-response/SKILL.md +336 -0
- package/bundled-skills/alerting-oncall/SKILL.md +458 -0
- package/bundled-skills/alerting-oncall/references/details.md +84 -0
- package/bundled-skills/api-integration-architect/SKILL.md +241 -0
- package/bundled-skills/apify-generate-output-schema/SKILL.md +438 -0
- package/bundled-skills/apify-integration-development/SKILL.md +168 -0
- package/bundled-skills/apify-integration-development/references/ai-framework-package.md +158 -0
- package/bundled-skills/apify-integration-development/references/ai-harness-plugin.md +192 -0
- package/bundled-skills/apify-integration-development/references/sdk-integration.md +236 -0
- package/bundled-skills/apify-integration-development/references/workflow-automation.md +163 -0
- package/bundled-skills/apk-redteam-pipeline/SKILL.md +446 -0
- package/bundled-skills/architecture-review/README.md +42 -0
- package/bundled-skills/architecture-review/SKILL.md +77 -0
- package/bundled-skills/architecture-review/examples.md +11 -0
- package/bundled-skills/architecture-review/reference/best-practices.md +7 -0
- package/bundled-skills/architecture-review/reference/capabilities.md +20 -0
- package/bundled-skills/architecture-review/reference/fallbacks.md +11 -0
- package/bundled-skills/architecture-review/reference/graph.md +15 -0
- package/bundled-skills/architecture-review/reference/mcp.md +14 -0
- package/bundled-skills/architecture-review/reference/workflow.md +15 -0
- package/bundled-skills/architecture-review/templates/architecture-review.md +21 -0
- package/bundled-skills/argocd-gitops/SKILL.md +469 -0
- package/bundled-skills/arm-templates/SKILL.md +438 -0
- package/bundled-skills/arm-templates/references/details.md +64 -0
- package/bundled-skills/asset-inventory/SKILL.md +412 -0
- package/bundled-skills/asset-inventory/references/details.md +127 -0
- package/bundled-skills/audit-logging/SKILL.md +476 -0
- package/bundled-skills/aws-cloudtrail/SKILL.md +486 -0
- package/bundled-skills/aws-cost-optimization/SKILL.md +331 -0
- package/bundled-skills/aws-ec2/SKILL.md +426 -0
- package/bundled-skills/aws-ecs-fargate/SKILL.md +388 -0
- package/bundled-skills/aws-iam/SKILL.md +463 -0
- package/bundled-skills/aws-lambda/SKILL.md +428 -0
- package/bundled-skills/aws-rds/SKILL.md +380 -0
- package/bundled-skills/aws-s3/SKILL.md +434 -0
- package/bundled-skills/aws-secrets-manager/SKILL.md +486 -0
- package/bundled-skills/aws-vpc/SKILL.md +436 -0
- package/bundled-skills/azure-ai-document-intelligence-ts/SKILL.md +1 -1
- package/bundled-skills/azure-aks/SKILL.md +423 -0
- package/bundled-skills/azure-devops/SKILL.md +457 -0
- package/bundled-skills/azure-functions-devsec/SKILL.md +436 -0
- package/bundled-skills/azure-keyvault/SKILL.md +455 -0
- package/bundled-skills/azure-keyvault/references/details.md +83 -0
- package/bundled-skills/azure-monitor-audit/SKILL.md +379 -0
- package/bundled-skills/azure-networking/SKILL.md +448 -0
- package/bundled-skills/azure-networking/references/details.md +135 -0
- package/bundled-skills/azure-sql/SKILL.md +413 -0
- package/bundled-skills/azure-sql/references/details.md +113 -0
- package/bundled-skills/azure-vms/SKILL.md +402 -0
- package/bundled-skills/azure-vms/references/details.md +134 -0
- package/bundled-skills/backup-recovery/SKILL.md +388 -0
- package/bundled-skills/bb-methodology/SKILL.md +451 -0
- package/bundled-skills/bb-methodology/references/details.md +120 -0
- package/bundled-skills/block-storage/SKILL.md +371 -0
- package/bundled-skills/blue-green-deploy/SKILL.md +453 -0
- package/bundled-skills/blue-green-deploy/references/details.md +90 -0
- package/bundled-skills/bug-bounty/SKILL.md +447 -0
- package/bundled-skills/bug-bounty/references/details.md +1316 -0
- package/bundled-skills/bugcrowd-reporting/SKILL.md +351 -0
- package/bundled-skills/business-continuity/SKILL.md +463 -0
- package/bundled-skills/career-ops/SKILL.md +186 -0
- package/bundled-skills/cdn-setup/SKILL.md +374 -0
- package/bundled-skills/change-management/SKILL.md +438 -0
- package/bundled-skills/change-management/references/details.md +105 -0
- package/bundled-skills/circleci/SKILL.md +475 -0
- package/bundled-skills/cis-benchmarks/SKILL.md +150 -0
- package/bundled-skills/cloudflare-pages/SKILL.md +318 -0
- package/bundled-skills/cloudflare-r2/SKILL.md +353 -0
- package/bundled-skills/cloudflare-workers/SKILL.md +415 -0
- package/bundled-skills/cloudflare-zero-trust/SKILL.md +361 -0
- package/bundled-skills/cloudformation/SKILL.md +461 -0
- package/bundled-skills/code-review-sensei/SKILL.md +177 -0
- package/bundled-skills/codebase-onboarding/README.md +42 -0
- package/bundled-skills/codebase-onboarding/SKILL.md +77 -0
- package/bundled-skills/codebase-onboarding/examples.md +11 -0
- package/bundled-skills/codebase-onboarding/reference/best-practices.md +7 -0
- package/bundled-skills/codebase-onboarding/reference/capabilities.md +20 -0
- package/bundled-skills/codebase-onboarding/reference/fallbacks.md +11 -0
- package/bundled-skills/codebase-onboarding/reference/graph.md +15 -0
- package/bundled-skills/codebase-onboarding/reference/mcp.md +14 -0
- package/bundled-skills/codebase-onboarding/reference/workflow.md +15 -0
- package/bundled-skills/codebase-onboarding/templates/repository-onboarding.md +21 -0
- package/bundled-skills/connection-auth-rules/SKILL.md +199 -0
- package/bundled-skills/connection-auth-rules/fetch_schema.py +320 -0
- package/bundled-skills/constraint-driven-development/SKILL.md +335 -0
- package/bundled-skills/constraint-driven-development/references/floor-guard.md +99 -0
- package/bundled-skills/container-hardening/SKILL.md +126 -0
- package/bundled-skills/container-registries/SKILL.md +435 -0
- package/bundled-skills/container-scanning/SKILL.md +416 -0
- package/bundled-skills/convex-backend/SKILL.md +338 -0
- package/bundled-skills/dast-scanning/SKILL.md +437 -0
- package/bundled-skills/database-backups/SKILL.md +425 -0
- package/bundled-skills/datadog/SKILL.md +487 -0
- package/bundled-skills/dependency-analysis/README.md +42 -0
- package/bundled-skills/dependency-analysis/SKILL.md +76 -0
- package/bundled-skills/dependency-analysis/examples.md +11 -0
- package/bundled-skills/dependency-analysis/reference/best-practices.md +7 -0
- package/bundled-skills/dependency-analysis/reference/capabilities.md +20 -0
- package/bundled-skills/dependency-analysis/reference/fallbacks.md +11 -0
- package/bundled-skills/dependency-analysis/reference/graph.md +15 -0
- package/bundled-skills/dependency-analysis/reference/mcp.md +14 -0
- package/bundled-skills/dependency-analysis/reference/workflow.md +15 -0
- package/bundled-skills/dependency-analysis/templates/dependency-review.md +21 -0
- package/bundled-skills/dependency-scanning/SKILL.md +457 -0
- package/bundled-skills/devcontainers-nix/SKILL.md +416 -0
- package/bundled-skills/devops-pipeline-builder/SKILL.md +200 -0
- package/bundled-skills/disaster-recovery/SKILL.md +374 -0
- package/bundled-skills/disaster-recovery/references/details.md +219 -0
- package/bundled-skills/dns-management/SKILL.md +375 -0
- package/bundled-skills/docker-compose/SKILL.md +482 -0
- package/bundled-skills/docker-management/SKILL.md +426 -0
- package/bundled-skills/eas-app-stores/SKILL.md +197 -0
- package/bundled-skills/eas-app-stores/agents/openai.yaml +4 -0
- package/bundled-skills/eas-app-stores/references/app-store-metadata.md +497 -0
- package/bundled-skills/eas-app-stores/references/ios-app-store.md +376 -0
- package/bundled-skills/eas-app-stores/references/native-ios.md +167 -0
- package/bundled-skills/eas-app-stores/references/play-store.md +244 -0
- package/bundled-skills/eas-app-stores/references/testflight.md +62 -0
- package/bundled-skills/eas-app-stores/references/workflows.md +120 -0
- package/bundled-skills/eas-hosting/SKILL.md +448 -0
- package/bundled-skills/eas-hosting/agents/openai.yaml +4 -0
- package/bundled-skills/eas-observe/SKILL.md +75 -0
- package/bundled-skills/eas-observe/agents/openai.yaml +4 -0
- package/bundled-skills/eas-observe/references/metrics.md +98 -0
- package/bundled-skills/eas-observe/references/queries.md +403 -0
- package/bundled-skills/eas-observe/references/setup.md +476 -0
- package/bundled-skills/eas-observe/references/third-party.md +136 -0
- package/bundled-skills/eas-simulator/SKILL.md +251 -0
- package/bundled-skills/eas-simulator/agents/openai.yaml +4 -0
- package/bundled-skills/eas-simulator/references/controllers.md +135 -0
- package/bundled-skills/eas-simulator/references/run-your-app.md +240 -0
- package/bundled-skills/eas-simulator/references/troubleshooting.md +47 -0
- package/bundled-skills/eas-workflows/SKILL.md +119 -0
- package/bundled-skills/eas-workflows/agents/openai.yaml +4 -0
- package/bundled-skills/eas-workflows/scripts/fetch.js +109 -0
- package/bundled-skills/ebpf-observability/SKILL.md +436 -0
- package/bundled-skills/ebpf-observability/references/details.md +542 -0
- package/bundled-skills/elk-stack/SKILL.md +487 -0
- package/bundled-skills/enterprise-vpn-attack/SKILL.md +395 -0
- package/bundled-skills/evidence-hygiene/SKILL.md +404 -0
- package/bundled-skills/expo-animation/LICENSE +21 -0
- package/bundled-skills/expo-animation/RECIPES.md +385 -0
- package/bundled-skills/expo-animation/SKILL.md +295 -0
- package/bundled-skills/expo-animation/agents/openai.yaml +4 -0
- package/bundled-skills/fact-check-x-unified/SKILL.md +178 -0
- package/bundled-skills/fact-check-x-unified/agents/openai.yaml +4 -0
- package/bundled-skills/fact-check-x-unified/references/acceptance-criteria.md +44 -0
- package/bundled-skills/fact-check-x-unified/references/contracts.md +39 -0
- package/bundled-skills/fact-check-x-unified/scripts/common.py +31 -0
- package/bundled-skills/fact-check-x-unified/scripts/fact_check_x.py +1832 -0
- package/bundled-skills/fact-check-x-unified/scripts/trusted_search_config.py +324 -0
- package/bundled-skills/fact-check-x-unified/tests/anchor_downgrade_test.py +90 -0
- package/bundled-skills/fact-check-x-unified/tests/multi_platform_test.py +369 -0
- package/bundled-skills/fact-check-x-unified/tests/smoke_test.py +740 -0
- package/bundled-skills/fact-check-x-unified/tests/stage_checkpoint_test.py +103 -0
- package/bundled-skills/fact-check-x-unified/tests/trusted_search_config_test.py +156 -0
- package/bundled-skills/feature-flags/SKILL.md +426 -0
- package/bundled-skills/feature-flags/references/details.md +86 -0
- package/bundled-skills/fedramp-compliance/SKILL.md +453 -0
- package/bundled-skills/firebase-app-platform/SKILL.md +381 -0
- package/bundled-skills/firewall-config/SKILL.md +479 -0
- package/bundled-skills/gcp-audit-logs/SKILL.md +452 -0
- package/bundled-skills/gcp-audit-logs/references/details.md +56 -0
- package/bundled-skills/gcp-cloud-functions/SKILL.md +284 -0
- package/bundled-skills/gcp-cloud-sql/SKILL.md +277 -0
- package/bundled-skills/gcp-compute/SKILL.md +319 -0
- package/bundled-skills/gcp-gke/SKILL.md +307 -0
- package/bundled-skills/gcp-networking/SKILL.md +293 -0
- package/bundled-skills/gcp-secret-manager/SKILL.md +421 -0
- package/bundled-skills/gcp-secret-manager/references/details.md +131 -0
- package/bundled-skills/gdpr-compliance/SKILL.md +451 -0
- package/bundled-skills/gdpr-compliance/references/details.md +145 -0
- package/bundled-skills/geo-audit/SKILL.md +368 -0
- package/bundled-skills/geo-brand-mentions/SKILL.md +68 -0
- package/bundled-skills/geo-brand-mentions/references/details.md +471 -0
- package/bundled-skills/geo-citability/SKILL.md +350 -0
- package/bundled-skills/geo-compare/SKILL.md +340 -0
- package/bundled-skills/geo-content/SKILL.md +383 -0
- package/bundled-skills/geo-crawlers/SKILL.md +408 -0
- package/bundled-skills/geo-llmstxt/SKILL.md +464 -0
- package/bundled-skills/geo-platform-optimizer/SKILL.md +314 -0
- package/bundled-skills/geo-proposal/SKILL.md +378 -0
- package/bundled-skills/geo-prospect/SKILL.md +225 -0
- package/bundled-skills/geo-report/SKILL.md +436 -0
- package/bundled-skills/geo-report-pdf/SKILL.md +157 -0
- package/bundled-skills/geo-schema/SKILL.md +408 -0
- package/bundled-skills/geo-technical/SKILL.md +78 -0
- package/bundled-skills/geo-technical/references/details.md +543 -0
- package/bundled-skills/git-workflow/SKILL.md +460 -0
- package/bundled-skills/github-actions/SKILL.md +368 -0
- package/bundled-skills/gitlab-ci/SKILL.md +340 -0
- package/bundled-skills/gpt-taste/SKILL.md +8 -1
- package/bundled-skills/gpu-kubernetes-operations/SKILL.md +468 -0
- package/bundled-skills/gpu-server-management/SKILL.md +236 -0
- package/bundled-skills/hashicorp-vault/SKILL.md +408 -0
- package/bundled-skills/helm-charts/SKILL.md +469 -0
- package/bundled-skills/hf-cli/SKILL.md +263 -0
- package/bundled-skills/hipaa-compliance/SKILL.md +451 -0
- package/bundled-skills/huggingface-community-evals/SKILL.md +228 -0
- package/bundled-skills/huggingface-community-evals/examples/.env.example +3 -0
- package/bundled-skills/huggingface-community-evals/examples/USAGE_EXAMPLES.md +101 -0
- package/bundled-skills/huggingface-community-evals/scripts/inspect_eval_uv.py +104 -0
- package/bundled-skills/huggingface-community-evals/scripts/inspect_vllm_uv.py +306 -0
- package/bundled-skills/huggingface-community-evals/scripts/lighteval_vllm_uv.py +297 -0
- package/bundled-skills/huggingface-datasets/SKILL.md +130 -0
- package/bundled-skills/hunt-aspnet/SKILL.md +321 -0
- package/bundled-skills/hunt-ato/SKILL.md +184 -0
- package/bundled-skills/hunt-auth-bypass/SKILL.md +426 -0
- package/bundled-skills/hunt-auth-bypass/references/details.md +80 -0
- package/bundled-skills/hunt-brute-force/SKILL.md +341 -0
- package/bundled-skills/hunt-business-logic/SKILL.md +281 -0
- package/bundled-skills/hunt-cache-poison/SKILL.md +382 -0
- package/bundled-skills/hunt-captcha-bypass/SKILL.md +136 -0
- package/bundled-skills/hunt-cicd/SKILL.md +311 -0
- package/bundled-skills/hunt-clickjacking/SKILL.md +110 -0
- package/bundled-skills/hunt-cors/SKILL.md +335 -0
- package/bundled-skills/hunt-dom/SKILL.md +323 -0
- package/bundled-skills/hunt-exceptional-conditions/SKILL.md +111 -0
- package/bundled-skills/hunt-file-upload/SKILL.md +202 -0
- package/bundled-skills/hunt-fintech-graphql/SKILL.md +289 -0
- package/bundled-skills/hunt-forgot-password/SKILL.md +114 -0
- package/bundled-skills/hunt-grpc/SKILL.md +317 -0
- package/bundled-skills/hunt-host-header/SKILL.md +309 -0
- package/bundled-skills/hunt-html-injection/SKILL.md +106 -0
- package/bundled-skills/hunt-http-smuggling/SKILL.md +129 -0
- package/bundled-skills/hunt-http-smuggling/references/phase2h-smuggling-cachepoison.md +177 -0
- package/bundled-skills/hunt-idor/SKILL.md +434 -0
- package/bundled-skills/hunt-jwt-crypto/SKILL.md +221 -0
- package/bundled-skills/hunt-k8s/SKILL.md +337 -0
- package/bundled-skills/hunt-laravel/SKILL.md +255 -0
- package/bundled-skills/hunt-ldap/SKILL.md +351 -0
- package/bundled-skills/hunt-lfi/SKILL.md +311 -0
- package/bundled-skills/hunt-llm-ai/SKILL.md +289 -0
- package/bundled-skills/hunt-mfa-bypass/SKILL.md +177 -0
- package/bundled-skills/hunt-misc/SKILL.md +378 -0
- package/bundled-skills/hunt-nextjs/SKILL.md +299 -0
- package/bundled-skills/hunt-nodejs/SKILL.md +263 -0
- package/bundled-skills/hunt-nosqli/SKILL.md +210 -0
- package/bundled-skills/hunt-ntlm-info/SKILL.md +314 -0
- package/bundled-skills/hunt-oauth/SKILL.md +459 -0
- package/bundled-skills/hunt-open-redirect/SKILL.md +223 -0
- package/bundled-skills/hunt-race-condition/SKILL.md +381 -0
- package/bundled-skills/hunt-race-condition/references/details.md +159 -0
- package/bundled-skills/hunt-rag-vector/SKILL.md +212 -0
- package/bundled-skills/hunt-rce/SKILL.md +444 -0
- package/bundled-skills/hunt-rce/references/details.md +110 -0
- package/bundled-skills/hunt-saml/SKILL.md +156 -0
- package/bundled-skills/hunt-session/SKILL.md +342 -0
- package/bundled-skills/hunt-shadow-api/SKILL.md +198 -0
- package/bundled-skills/hunt-source-leak/SKILL.md +345 -0
- package/bundled-skills/hunt-spa-api/SKILL.md +163 -0
- package/bundled-skills/hunt-springboot/SKILL.md +285 -0
- package/bundled-skills/hunt-sqli/SKILL.md +466 -0
- package/bundled-skills/hunt-ssrf/SKILL.md +396 -0
- package/bundled-skills/hunt-ssrf/references/details.md +179 -0
- package/bundled-skills/hunt-ssti/SKILL.md +163 -0
- package/bundled-skills/hunt-subdomain/SKILL.md +379 -0
- package/bundled-skills/hunt-tls-network/SKILL.md +399 -0
- package/bundled-skills/hunt-xxe/SKILL.md +466 -0
- package/bundled-skills/i-have-adhd/SKILL.md +170 -0
- package/bundled-skills/identity-access-management/SKILL.md +382 -0
- package/bundled-skills/identity-access-management/references/details.md +524 -0
- package/bundled-skills/incident-management/SKILL.md +484 -0
- package/bundled-skills/incident-response/SKILL.md +448 -0
- package/bundled-skills/incident-response/references/details.md +113 -0
- package/bundled-skills/interview-me/SKILL.md +248 -0
- package/bundled-skills/iso27001-compliance/SKILL.md +460 -0
- package/bundled-skills/jenkins/SKILL.md +462 -0
- package/bundled-skills/jev-social/SKILL.md +182 -0
- package/bundled-skills/jev-use/SKILL.md +158 -0
- package/bundled-skills/kubernetes-hardening/SKILL.md +154 -0
- package/bundled-skills/kubernetes-ops/SKILL.md +449 -0
- package/bundled-skills/kubernetes-ops/references/details.md +108 -0
- package/bundled-skills/kustomize/SKILL.md +478 -0
- package/bundled-skills/linux-administration/SKILL.md +367 -0
- package/bundled-skills/linux-hardening/SKILL.md +154 -0
- package/bundled-skills/llm-app-security/SKILL.md +389 -0
- package/bundled-skills/llm-app-security/references/details.md +674 -0
- package/bundled-skills/llm-caching/SKILL.md +334 -0
- package/bundled-skills/llm-cost-optimization/SKILL.md +311 -0
- package/bundled-skills/llm-fine-tuning/SKILL.md +329 -0
- package/bundled-skills/llm-gateway/SKILL.md +282 -0
- package/bundled-skills/llm-inference-scaling/SKILL.md +286 -0
- package/bundled-skills/llmops-platform-engineering/SKILL.md +472 -0
- package/bundled-skills/load-balancing/SKILL.md +403 -0
- package/bundled-skills/loki-logging/SKILL.md +479 -0
- package/bundled-skills/longbridge-derivatives/SKILL.md +117 -0
- package/bundled-skills/longbridge-derivatives/references/option.md +36 -0
- package/bundled-skills/longbridge-derivatives/references/options-advanced.md +101 -0
- package/bundled-skills/longbridge-derivatives/references/options-pnl.md +74 -0
- package/bundled-skills/longbridge-derivatives/references/options-strategy.md +82 -0
- package/bundled-skills/longbridge-derivatives/references/options-volatility.md +70 -0
- package/bundled-skills/longbridge-derivatives/references/warrant.md +12 -0
- package/bundled-skills/longbridge-quant/SKILL.md +151 -0
- package/bundled-skills/longbridge-quant/references/correlation.md +51 -0
- package/bundled-skills/longbridge-quant/references/execution-model.md +68 -0
- package/bundled-skills/longbridge-quant/references/factor-research.md +95 -0
- package/bundled-skills/longbridge-quant/references/factor-screen.md +101 -0
- package/bundled-skills/longbridge-quant/references/hedging.md +136 -0
- package/bundled-skills/longbridge-quant/references/ml-strategy.md +77 -0
- package/bundled-skills/longbridge-quant/references/multifactor.md +68 -0
- package/bundled-skills/longbridge-quant/references/pairs-trading.md +61 -0
- package/bundled-skills/longbridge-quant/references/quant-cli.md +133 -0
- package/bundled-skills/longbridge-quant/references/quant-stats.md +150 -0
- package/bundled-skills/longbridge-quant/references/seasonality.md +50 -0
- package/bundled-skills/longbridge-quant/references/strategy-optimizer.md +68 -0
- package/bundled-skills/longbridge-quant/references/volatility-strategy.md +52 -0
- package/bundled-skills/longbridge-research/SKILL.md +187 -0
- package/bundled-skills/longbridge-research/references/company-profile.md +96 -0
- package/bundled-skills/longbridge-research/references/company-tearsheet.md +82 -0
- package/bundled-skills/longbridge-research/references/competitive-analysis.md +81 -0
- package/bundled-skills/longbridge-research/references/consensus.md +92 -0
- package/bundled-skills/longbridge-research/references/coverage-initiation.md +76 -0
- package/bundled-skills/longbridge-research/references/defi-yield.md +60 -0
- package/bundled-skills/longbridge-research/references/finance-calendar.md +165 -0
- package/bundled-skills/longbridge-research/references/financial-planning.md +77 -0
- package/bundled-skills/longbridge-research/references/forecast-eps.md +39 -0
- package/bundled-skills/longbridge-research/references/fund-holder.md +44 -0
- package/bundled-skills/longbridge-research/references/hkipo-analysis.md +101 -0
- package/bundled-skills/longbridge-research/references/industry-peers.md +46 -0
- package/bundled-skills/longbridge-research/references/industry-rank.md +62 -0
- package/bundled-skills/longbridge-research/references/insider-trades.md +48 -0
- package/bundled-skills/longbridge-research/references/institution-rating.md +62 -0
- package/bundled-skills/longbridge-research/references/investment-ideas.md +69 -0
- package/bundled-skills/longbridge-research/references/investment-proposal.md +95 -0
- package/bundled-skills/longbridge-research/references/investors.md +87 -0
- package/bundled-skills/longbridge-research/references/onchain.md +70 -0
- package/bundled-skills/longbridge-research/references/post-investment.md +76 -0
- package/bundled-skills/longbridge-research/references/shareholder.md +72 -0
- package/bundled-skills/longbridge-research/references/short-positions.md +50 -0
- package/bundled-skills/longbridge-research/references/short-trades.md +50 -0
- package/bundled-skills/longbridge-research/references/stock-research.md +61 -0
- package/bundled-skills/longbridge-research/references/thesis-tracker.md +64 -0
- package/bundled-skills/m365-entra-attack/SKILL.md +423 -0
- package/bundled-skills/mac-mini-llm-lab/SKILL.md +350 -0
- package/bundled-skills/makepad-2-0-animation/SKILL.md +318 -0
- package/bundled-skills/makepad-2-0-animation/references/animator-reference.md +433 -0
- package/bundled-skills/makepad-2-0-dsl/SKILL.md +492 -0
- package/bundled-skills/makepad-2-0-dsl/references/dsl-syntax-reference.md +511 -0
- package/bundled-skills/makepad-2-0-dsl/references/extended-guide.md +56 -0
- package/bundled-skills/makepad-2-0-dsl/references/property-system.md +757 -0
- package/bundled-skills/makepad-2-0-events/SKILL.md +497 -0
- package/bundled-skills/makepad-2-0-events/references/event-patterns.md +802 -0
- package/bundled-skills/makepad-2-0-events/references/extended-guide.md +590 -0
- package/bundled-skills/makepad-2-0-layout/SKILL.md +499 -0
- package/bundled-skills/makepad-2-0-layout/references/extended-guide.md +243 -0
- package/bundled-skills/makepad-2-0-layout/references/layout-patterns.md +881 -0
- package/bundled-skills/makepad-2-0-widgets/SKILL.md +261 -0
- package/bundled-skills/makepad-2-0-widgets/references/widget-advanced.md +648 -0
- package/bundled-skills/makepad-2-0-widgets/references/widget-catalog.md +547 -0
- package/bundled-skills/mcp-server-security/SKILL.md +356 -0
- package/bundled-skills/mcp-server-security/references/details.md +745 -0
- package/bundled-skills/mdm-device-management/SKILL.md +404 -0
- package/bundled-skills/mdm-device-management/references/details.md +410 -0
- package/bundled-skills/meeting-distiller-pro/SKILL.md +120 -0
- package/bundled-skills/meme-coin-audit/SKILL.md +402 -0
- package/bundled-skills/mid-engagement-ir-detection/SKILL.md +377 -0
- package/bundled-skills/model-registry-governance/SKILL.md +452 -0
- package/bundled-skills/model-serving-kubernetes/SKILL.md +339 -0
- package/bundled-skills/model-supply-chain-security/SKILL.md +427 -0
- package/bundled-skills/mongodb/SKILL.md +436 -0
- package/bundled-skills/monte-carlo-analyze-root-cause/SKILL.md +12 -1
- package/bundled-skills/monte-carlo-asset-health/SKILL.md +12 -1
- package/bundled-skills/monte-carlo-context-detection/SKILL.md +170 -0
- package/bundled-skills/monte-carlo-context-detection/references/signal-definitions.md +46 -0
- package/bundled-skills/multi-tenant-llm-hosting/SKILL.md +435 -0
- package/bundled-skills/multi-tenant-llm-hosting/references/details.md +211 -0
- package/bundled-skills/mysql/SKILL.md +390 -0
- package/bundled-skills/new-relic/SKILL.md +472 -0
- package/bundled-skills/nfs-storage/SKILL.md +356 -0
- package/bundled-skills/object-storage/SKILL.md +378 -0
- package/bundled-skills/offensive-osint/SKILL.md +443 -0
- package/bundled-skills/okta-attack/SKILL.md +436 -0
- package/bundled-skills/ollama-stack/SKILL.md +379 -0
- package/bundled-skills/openclaw-deployment-hardening/SKILL.md +135 -0
- package/bundled-skills/openclaw-local-mac-mini/SKILL.md +426 -0
- package/bundled-skills/openclaw-local-mac-mini/references/details.md +221 -0
- package/bundled-skills/openclaw-security-hardening/SKILL.md +135 -0
- package/bundled-skills/openshift/SKILL.md +485 -0
- package/bundled-skills/opentelemetry/SKILL.md +438 -0
- package/bundled-skills/opentelemetry/references/details.md +78 -0
- package/bundled-skills/opentofu-migration/SKILL.md +349 -0
- package/bundled-skills/osint-methodology/SKILL.md +460 -0
- package/bundled-skills/osint-methodology/references/details.md +1350 -0
- package/bundled-skills/pci-dss-compliance/SKILL.md +446 -0
- package/bundled-skills/penetration-testing/SKILL.md +152 -0
- package/bundled-skills/performance-tuning/SKILL.md +381 -0
- package/bundled-skills/planetscale/SKILL.md +297 -0
- package/bundled-skills/platform-engineering/SKILL.md +348 -0
- package/bundled-skills/platform-engineering/references/details.md +944 -0
- package/bundled-skills/podman/SKILL.md +405 -0
- package/bundled-skills/policy-as-code/SKILL.md +434 -0
- package/bundled-skills/policy-as-code/references/details.md +204 -0
- package/bundled-skills/postgresql-devsec/SKILL.md +378 -0
- package/bundled-skills/prometheus-grafana/SKILL.md +469 -0
- package/bundled-skills/prompt-injection-defense/SKILL.md +483 -0
- package/bundled-skills/rag-infrastructure/SKILL.md +269 -0
- package/bundled-skills/rag-observability-evals/SKILL.md +444 -0
- package/bundled-skills/rag-observability-evals/references/details.md +92 -0
- package/bundled-skills/recon-scope-triage/SKILL.md +128 -0
- package/bundled-skills/redis/SKILL.md +421 -0
- package/bundled-skills/redteam-report-template/SKILL.md +370 -0
- package/bundled-skills/remotion-captions/SKILL.md +57 -0
- package/bundled-skills/remotion-captions/agents/openai.yaml +7 -0
- package/bundled-skills/remotion-captions/assets/remotion-icon.svg +4 -0
- package/bundled-skills/remotion-captions/display-captions.md +190 -0
- package/bundled-skills/remotion-captions/import-srt-captions.md +73 -0
- package/bundled-skills/remotion-captions/transcribe-captions.md +70 -0
- package/bundled-skills/remotion-create/SKILL.md +106 -0
- package/bundled-skills/remotion-create/agents/openai.yaml +7 -0
- package/bundled-skills/remotion-create/assets/remotion-icon.svg +4 -0
- package/bundled-skills/remotion-create/tailwind.md +11 -0
- package/bundled-skills/remotion-create/video-layout.md +9 -0
- package/bundled-skills/remotion-docs/SKILL.md +67 -0
- package/bundled-skills/remotion-docs/agents/openai.yaml +7 -0
- package/bundled-skills/remotion-docs/assets/remotion-icon.svg +4 -0
- package/bundled-skills/remotion-interactivity/SKILL.md +270 -0
- package/bundled-skills/remotion-interactivity/agents/openai.yaml +7 -0
- package/bundled-skills/remotion-interactivity/assets/remotion-icon.svg +4 -0
- package/bundled-skills/remotion-render/SKILL.md +48 -0
- package/bundled-skills/remotion-render/agents/openai.yaml +7 -0
- package/bundled-skills/remotion-render/assets/remotion-icon.svg +4 -0
- package/bundled-skills/remotion-render/transparent-videos.md +106 -0
- package/bundled-skills/report-writing/SKILL.md +426 -0
- package/bundled-skills/report-writing/references/details.md +187 -0
- package/bundled-skills/reverse-proxy/SKILL.md +420 -0
- package/bundled-skills/runbook-creation/SKILL.md +438 -0
- package/bundled-skills/runbook-creation/references/details.md +71 -0
- package/bundled-skills/saas-pricing-strategist/SKILL.md +169 -0
- package/bundled-skills/saas-security-posture/SKILL.md +415 -0
- package/bundled-skills/sast-scanning/SKILL.md +444 -0
- package/bundled-skills/sbom-supply-chain/SKILL.md +433 -0
- package/bundled-skills/score-eval/SKILL.md +35 -0
- package/bundled-skills/security-arsenal/SKILL.md +446 -0
- package/bundled-skills/security-arsenal/references/details.md +540 -0
- package/bundled-skills/security-automation/SKILL.md +146 -0
- package/bundled-skills/semantic-versioning/SKILL.md +434 -0
- package/bundled-skills/semantic-versioning/references/details.md +83 -0
- package/bundled-skills/service-mesh/SKILL.md +422 -0
- package/bundled-skills/soc2-compliance/SKILL.md +409 -0
- package/bundled-skills/sops-encryption/SKILL.md +124 -0
- package/bundled-skills/sre-dashboards/SKILL.md +143 -0
- package/bundled-skills/ssh-configuration/SKILL.md +324 -0
- package/bundled-skills/ssl-tls-management/SKILL.md +428 -0
- package/bundled-skills/ssl-tls-management/references/details.md +99 -0
- package/bundled-skills/startup-it-troubleshooting/SKILL.md +415 -0
- package/bundled-skills/supply-chain-attack-recon/SKILL.md +453 -0
- package/bundled-skills/supply-chain-attack-recon/references/details.md +258 -0
- package/bundled-skills/systemd-services/SKILL.md +379 -0
- package/bundled-skills/terraform-aws/SKILL.md +125 -0
- package/bundled-skills/terraform-azure/SKILL.md +415 -0
- package/bundled-skills/terraform-azure/references/details.md +231 -0
- package/bundled-skills/terraform-gcp/SKILL.md +369 -0
- package/bundled-skills/threat-modeling/SKILL.md +487 -0
- package/bundled-skills/user-management/SKILL.md +383 -0
- package/bundled-skills/using-agent-skills/SKILL.md +220 -0
- package/bundled-skills/vector-database-ops/SKILL.md +300 -0
- package/bundled-skills/vendor-management/SKILL.md +439 -0
- package/bundled-skills/vendor-management/references/details.md +109 -0
- package/bundled-skills/vercel-deployments/SKILL.md +296 -0
- package/bundled-skills/vllm-server/SKILL.md +236 -0
- package/bundled-skills/vmware-vcenter-attack/SKILL.md +412 -0
- package/bundled-skills/vpn-setup/SKILL.md +452 -0
- package/bundled-skills/vulnerability-scanning/SKILL.md +448 -0
- package/bundled-skills/waf-setup/SKILL.md +354 -0
- package/bundled-skills/waf-setup/references/details.md +211 -0
- package/bundled-skills/web2-recon/SKILL.md +440 -0
- package/bundled-skills/web2-recon/references/details.md +319 -0
- package/bundled-skills/web3-audit/SKILL.md +445 -0
- package/bundled-skills/web3-audit/references/details.md +224 -0
- package/bundled-skills/windows-hardening/SKILL.md +454 -0
- package/bundled-skills/windows-hardening/references/details.md +204 -0
- package/bundled-skills/windows-server/SKILL.md +318 -0
- package/bundled-skills/writing-guidelines/SKILL.md +60 -0
- package/bundled-skills/zero-trust/SKILL.md +461 -0
- package/package.json +1 -1
- package/skills_index.json +7874 -277
|
@@ -0,0 +1,648 @@
|
|
|
1
|
+
# Makepad 2.0 Advanced Widget Patterns
|
|
2
|
+
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
## PortalList Usage Pattern
|
|
6
|
+
|
|
7
|
+
PortalList is a virtualized list widget that only renders visible items. It requires a Rust-side draw loop to populate items.
|
|
8
|
+
|
|
9
|
+
### DSL Definition (in script_mod!)
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
list := PortalList{
|
|
13
|
+
width: Fill
|
|
14
|
+
height: Fill
|
|
15
|
+
flow: Down
|
|
16
|
+
scroll_bar: ScrollBar{}
|
|
17
|
+
|
|
18
|
+
// Templates are defined with := syntax
|
|
19
|
+
// These become entries in the templates HashMap
|
|
20
|
+
Item := View{
|
|
21
|
+
width: Fill
|
|
22
|
+
height: Fit
|
|
23
|
+
padding: 10
|
|
24
|
+
|
|
25
|
+
title := Label{
|
|
26
|
+
text: ""
|
|
27
|
+
draw_text.color: #fff
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
Header := View{
|
|
32
|
+
width: Fill
|
|
33
|
+
height: 40
|
|
34
|
+
show_bg: true
|
|
35
|
+
draw_bg.color: #333
|
|
36
|
+
|
|
37
|
+
label := Label{
|
|
38
|
+
text: "Section Header"
|
|
39
|
+
draw_text.color: #aaa
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### Rust Draw Loop
|
|
46
|
+
|
|
47
|
+
```rust
|
|
48
|
+
// In your Widget's draw_walk implementation
|
|
49
|
+
while let Some(item) = self.view.draw_walk(cx, scope, walk).step() {
|
|
50
|
+
if let Some(mut list) = item.borrow_mut::<PortalList>() {
|
|
51
|
+
// Tell the list how many total items exist
|
|
52
|
+
list.set_item_range(cx, 0, count);
|
|
53
|
+
|
|
54
|
+
// Iterate over visible items only
|
|
55
|
+
while let Some(item_id) = list.next_visible_item(cx) {
|
|
56
|
+
// Create/reuse a widget from a template by LiveId
|
|
57
|
+
let item = list.item(cx, item_id, id!(Item));
|
|
58
|
+
|
|
59
|
+
// Populate the item's children
|
|
60
|
+
item.label(ids!(title)).set_text(cx, &format!("Item {}", item_id));
|
|
61
|
+
|
|
62
|
+
// Draw the item
|
|
63
|
+
item.draw_all(cx, &mut Scope::empty());
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### Templates in PortalList
|
|
70
|
+
|
|
71
|
+
- Named IDs using `:=` define templates stored in the widget's `templates` HashMap
|
|
72
|
+
- Regular properties (like `flow`, `scroll_bar`) go into struct fields
|
|
73
|
+
- Templates are collected during `on_after_apply` via `vm.vec_with()`
|
|
74
|
+
- Multiple template types can be used: select which template to instantiate based on `item_id`
|
|
75
|
+
|
|
76
|
+
```rust
|
|
77
|
+
// Using different templates for different item types
|
|
78
|
+
while let Some(item_id) = list.next_visible_item(cx) {
|
|
79
|
+
let template = if item_id == 0 { id!(Header) } else { id!(Item) };
|
|
80
|
+
let item = list.item(cx, item_id, template);
|
|
81
|
+
// ... populate and draw
|
|
82
|
+
item.draw_all(cx, &mut Scope::empty());
|
|
83
|
+
}
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### PortalList Scrolling API
|
|
87
|
+
|
|
88
|
+
```rust
|
|
89
|
+
// Scroll to specific item
|
|
90
|
+
list.scroll_to_item(cx, item_index);
|
|
91
|
+
|
|
92
|
+
// Smooth scroll to item
|
|
93
|
+
list.smooth_scroll_to_item(cx, item_index);
|
|
94
|
+
|
|
95
|
+
// Get scroll position
|
|
96
|
+
let pos = list.scroll_position();
|
|
97
|
+
|
|
98
|
+
// Enable tail mode (auto-scroll to bottom)
|
|
99
|
+
list.set_tail(cx, true);
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## Dock System Complete Example
|
|
105
|
+
|
|
106
|
+
The Dock widget provides a tabbed, splittable panel layout system.
|
|
107
|
+
|
|
108
|
+
### 1. Dock Definition
|
|
109
|
+
|
|
110
|
+
```
|
|
111
|
+
dock := Dock{
|
|
112
|
+
width: Fill
|
|
113
|
+
height: Fill
|
|
114
|
+
|
|
115
|
+
// Override tab bar template
|
|
116
|
+
tab_bar +: {
|
|
117
|
+
TabTemplate := IconTab{
|
|
118
|
+
// custom tab appearance
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
// Root layout structure
|
|
123
|
+
root := DockSplitter{
|
|
124
|
+
axis: Horizontal
|
|
125
|
+
align: Weighted(0.3)
|
|
126
|
+
|
|
127
|
+
// Left panel: tabs
|
|
128
|
+
a: DockTabs{
|
|
129
|
+
tabs: [
|
|
130
|
+
DockTab{name: "Files" template: FilesView}
|
|
131
|
+
DockTab{name: "Search" template: SearchView}
|
|
132
|
+
]
|
|
133
|
+
selected: 0
|
|
134
|
+
closable: false
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
// Right panel: further split
|
|
138
|
+
b: DockSplitter{
|
|
139
|
+
axis: Vertical
|
|
140
|
+
align: Weighted(0.7)
|
|
141
|
+
|
|
142
|
+
a: DockTabs{
|
|
143
|
+
tabs: [
|
|
144
|
+
DockTab{name: "Editor" template: EditorView}
|
|
145
|
+
]
|
|
146
|
+
selected: 0
|
|
147
|
+
}
|
|
148
|
+
b: DockTabs{
|
|
149
|
+
tabs: [
|
|
150
|
+
DockTab{name: "Console" template: ConsoleView}
|
|
151
|
+
]
|
|
152
|
+
selected: 0
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
// 2. Content templates (matched by DockTab.template)
|
|
158
|
+
FilesView := View{
|
|
159
|
+
width: Fill height: Fill
|
|
160
|
+
flow: Down
|
|
161
|
+
Label{text: "File list here"}
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
EditorView := View{
|
|
165
|
+
width: Fill height: Fill
|
|
166
|
+
Label{text: "Editor content"}
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
SearchView := View{
|
|
170
|
+
width: Fill height: Fill
|
|
171
|
+
Label{text: "Search panel"}
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
ConsoleView := View{
|
|
175
|
+
width: Fill height: Fill
|
|
176
|
+
Label{text: "Console output"}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
### Dock Sub-Types Reference
|
|
182
|
+
|
|
183
|
+
**DockSplitter:**
|
|
184
|
+
- `axis` - `Horizontal` or `Vertical`
|
|
185
|
+
- `align` - `Weighted(ratio)`, `FromA(pixels)`, `FromB(pixels)`
|
|
186
|
+
- `a` - First pane content (DockTabs or DockSplitter)
|
|
187
|
+
- `b` - Second pane content (DockTabs or DockSplitter)
|
|
188
|
+
|
|
189
|
+
**DockTabs:**
|
|
190
|
+
- `tabs` - Array of DockTab definitions
|
|
191
|
+
- `selected` - Index of selected tab
|
|
192
|
+
- `closable` - Whether tabs can be closed (bool)
|
|
193
|
+
|
|
194
|
+
**DockTab:**
|
|
195
|
+
- `name` - Tab display text
|
|
196
|
+
- `template` - LiveId matching a content template defined in the Dock
|
|
197
|
+
- `kind` - Tab kind identifier
|
|
198
|
+
|
|
199
|
+
---
|
|
200
|
+
|
|
201
|
+
## Custom Widget Creation
|
|
202
|
+
|
|
203
|
+
### Basic Custom Widget
|
|
204
|
+
|
|
205
|
+
To create a custom widget in Makepad 2.0, derive the required traits:
|
|
206
|
+
|
|
207
|
+
```rust
|
|
208
|
+
#[derive(Script, ScriptHook, Widget)]
|
|
209
|
+
pub struct MyWidget {
|
|
210
|
+
#[uid]
|
|
211
|
+
uid: WidgetUid,
|
|
212
|
+
#[source]
|
|
213
|
+
source: ScriptObjectRef, // REQUIRED: links to DSL definition
|
|
214
|
+
#[walk]
|
|
215
|
+
walk: Walk, // Size and position
|
|
216
|
+
#[layout]
|
|
217
|
+
layout: Layout, // Child layout rules
|
|
218
|
+
#[redraw]
|
|
219
|
+
#[live]
|
|
220
|
+
draw_bg: DrawQuad, // Background draw primitive
|
|
221
|
+
#[live]
|
|
222
|
+
draw_text: DrawText, // Text draw primitive
|
|
223
|
+
#[live]
|
|
224
|
+
text: String, // A DSL-settable property
|
|
225
|
+
#[rust]
|
|
226
|
+
my_state: i32, // Rust-only state (not settable from DSL)
|
|
227
|
+
#[rust]
|
|
228
|
+
area: Area, // Widget area for hit testing
|
|
229
|
+
}
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
**Key derive macros:**
|
|
233
|
+
- `Script` - Enables Splash script integration
|
|
234
|
+
- `ScriptHook` - Enables lifecycle hooks (on_before_apply, on_after_apply)
|
|
235
|
+
- `Widget` - Implements the Widget trait
|
|
236
|
+
- `Animator` - Adds animation support (optional)
|
|
237
|
+
- `WidgetRef` - Generates the WidgetRef wrapper type
|
|
238
|
+
- `WidgetSet` - Generates the WidgetSet type
|
|
239
|
+
- `WidgetRegister` - Enables widget registration
|
|
240
|
+
|
|
241
|
+
**Field attributes:**
|
|
242
|
+
- `#[source]` - ScriptObjectRef linking to DSL (REQUIRED)
|
|
243
|
+
- `#[uid]` - Unique widget identifier
|
|
244
|
+
- `#[walk]` - Walk (width, height, margin)
|
|
245
|
+
- `#[layout]` - Layout (flow, spacing, padding, align)
|
|
246
|
+
- `#[redraw]` - Mark field as triggering redraw when changed
|
|
247
|
+
- `#[live]` - DSL-settable field with default
|
|
248
|
+
- `#[live(default_value)]` - DSL-settable with explicit default
|
|
249
|
+
- `#[rust]` - Rust-only field, not settable from DSL
|
|
250
|
+
- `#[apply_default]` - Apply default values from DSL
|
|
251
|
+
- `#[deref]` - Delegate to inner widget (for wrapper widgets)
|
|
252
|
+
- `#[visible]` - Widget visibility field
|
|
253
|
+
|
|
254
|
+
### Register Widget in script_mod!
|
|
255
|
+
|
|
256
|
+
```rust
|
|
257
|
+
script_mod! {
|
|
258
|
+
use mod.prelude.widgets_internal.*
|
|
259
|
+
use mod.widgets.*
|
|
260
|
+
|
|
261
|
+
mod.widgets.MyWidgetBase = #(MyWidget::register_widget(vm))
|
|
262
|
+
|
|
263
|
+
mod.widgets.MyWidget = set_type_default() do mod.widgets.MyWidgetBase{
|
|
264
|
+
width: Fit
|
|
265
|
+
height: Fit
|
|
266
|
+
// default property values
|
|
267
|
+
draw_bg +: {
|
|
268
|
+
color: #333
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
### Custom Draw Widget
|
|
275
|
+
|
|
276
|
+
For widgets that need custom drawing logic:
|
|
277
|
+
|
|
278
|
+
```rust
|
|
279
|
+
impl Widget for CustomDraw {
|
|
280
|
+
fn draw_walk(&mut self, cx: &mut Cx2d, _scope: &mut Scope, walk: Walk) -> DrawStep {
|
|
281
|
+
// Begin layout turtle
|
|
282
|
+
cx.begin_turtle(walk, self.layout);
|
|
283
|
+
|
|
284
|
+
// Get the computed rect
|
|
285
|
+
let rect = cx.turtle().rect();
|
|
286
|
+
|
|
287
|
+
// Draw custom shapes
|
|
288
|
+
self.draw_bg.draw_abs(cx, rect);
|
|
289
|
+
|
|
290
|
+
// Draw text at specific position
|
|
291
|
+
// self.draw_text.draw_walk(cx, walk, align, text);
|
|
292
|
+
|
|
293
|
+
// End turtle and capture area
|
|
294
|
+
cx.end_turtle_with_area(&mut self.area);
|
|
295
|
+
DrawStep::done()
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
fn handle_event(&mut self, cx: &mut Cx, event: &Event, scope: &mut Scope) {
|
|
299
|
+
// Handle hit events
|
|
300
|
+
match event.hits(cx, self.area) {
|
|
301
|
+
Hit::FingerDown(_fe) => {
|
|
302
|
+
// Handle touch/click down
|
|
303
|
+
}
|
|
304
|
+
Hit::FingerUp(_fe) => {
|
|
305
|
+
// Handle touch/click up
|
|
306
|
+
}
|
|
307
|
+
Hit::FingerHoverIn(_) => {
|
|
308
|
+
// Handle hover enter
|
|
309
|
+
}
|
|
310
|
+
Hit::FingerHoverOut(_) => {
|
|
311
|
+
// Handle hover leave
|
|
312
|
+
}
|
|
313
|
+
_ => ()
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
### Widget with Children (Container)
|
|
320
|
+
|
|
321
|
+
For container widgets that hold child widgets:
|
|
322
|
+
|
|
323
|
+
```rust
|
|
324
|
+
impl Widget for MyContainer {
|
|
325
|
+
fn draw_walk(&mut self, cx: &mut Cx2d, scope: &mut Scope, walk: Walk) -> DrawStep {
|
|
326
|
+
cx.begin_turtle(walk, self.layout);
|
|
327
|
+
|
|
328
|
+
// Draw background if enabled
|
|
329
|
+
if self.show_bg {
|
|
330
|
+
self.draw_bg.begin(cx, walk, self.layout);
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
// Draw children
|
|
334
|
+
for (_id, child) in &self.children {
|
|
335
|
+
child.draw_all(cx, scope);
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
if self.show_bg {
|
|
339
|
+
self.draw_bg.end(cx);
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
cx.end_turtle_with_area(&mut self.area);
|
|
343
|
+
DrawStep::done()
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
```
|
|
347
|
+
|
|
348
|
+
---
|
|
349
|
+
|
|
350
|
+
## MapView Critical Rules
|
|
351
|
+
|
|
352
|
+
MapView renders vector tile-based geographic maps. It has strict requirements:
|
|
353
|
+
|
|
354
|
+
### MUST use fixed pixel height
|
|
355
|
+
|
|
356
|
+
```
|
|
357
|
+
// CORRECT: fixed pixel height
|
|
358
|
+
MapView{
|
|
359
|
+
width: Fill
|
|
360
|
+
height: 400
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
// WRONG: will cause rendering issues
|
|
364
|
+
MapView{
|
|
365
|
+
width: Fill
|
|
366
|
+
height: Fill // NEVER use Fill
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
// WRONG: will cause rendering issues
|
|
370
|
+
MapView{
|
|
371
|
+
width: Fill
|
|
372
|
+
height: Fit // NEVER use Fit
|
|
373
|
+
}
|
|
374
|
+
```
|
|
375
|
+
|
|
376
|
+
### MUST wrap in container with new_batch
|
|
377
|
+
|
|
378
|
+
```
|
|
379
|
+
map_container := View{
|
|
380
|
+
new_batch: true // REQUIRED for MapView
|
|
381
|
+
width: Fill
|
|
382
|
+
height: 400
|
|
383
|
+
|
|
384
|
+
map := MapView{
|
|
385
|
+
width: Fill
|
|
386
|
+
height: 400
|
|
387
|
+
center_lon: -73.9857
|
|
388
|
+
center_lat: 40.7484
|
|
389
|
+
zoom: 14.0
|
|
390
|
+
dark_theme: true
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
```
|
|
394
|
+
|
|
395
|
+
### MapView Data Sources
|
|
396
|
+
- `use_local_mbtiles: true` - Load tiles from local `.mbtiles` file (default, offline)
|
|
397
|
+
- `use_network: true` - Fetch tiles from network (online mode)
|
|
398
|
+
- If both are enabled, offline mode takes priority
|
|
399
|
+
- `style_light` / `style_dark` - Theme style configurations with map rendering rules
|
|
400
|
+
|
|
401
|
+
---
|
|
402
|
+
|
|
403
|
+
## Draw Batching (new_batch) - Detailed Rules
|
|
404
|
+
|
|
405
|
+
### How Batching Works
|
|
406
|
+
|
|
407
|
+
Makepad batches consecutive draw calls using the same shader into a single GPU draw call for performance. The draw order follows the widget tree order.
|
|
408
|
+
|
|
409
|
+
### The Text Visibility Problem
|
|
410
|
+
|
|
411
|
+
When a View with `show_bg: true` contains text widgets, the background quad and text quads may be batched into the same draw call. Since the background quad covers the entire view area, text drawn in the same batch appears behind the background, making it invisible.
|
|
412
|
+
|
|
413
|
+
### Setting new_batch
|
|
414
|
+
|
|
415
|
+
```
|
|
416
|
+
// Pattern: colored container with text
|
|
417
|
+
card := RoundedView{
|
|
418
|
+
new_batch: true // Forces a new GPU draw batch
|
|
419
|
+
show_bg: true
|
|
420
|
+
draw_bg.color: #2a2a3a
|
|
421
|
+
|
|
422
|
+
title := Label{
|
|
423
|
+
text: "Card Title"
|
|
424
|
+
draw_text.color: #fff
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
```
|
|
428
|
+
|
|
429
|
+
### When new_batch is CRITICAL
|
|
430
|
+
|
|
431
|
+
1. **Any View with show_bg containing text children:**
|
|
432
|
+
```
|
|
433
|
+
SolidView{
|
|
434
|
+
new_batch: true
|
|
435
|
+
show_bg: true
|
|
436
|
+
draw_bg.color: #444
|
|
437
|
+
Label{text: "Must be visible"}
|
|
438
|
+
}
|
|
439
|
+
```
|
|
440
|
+
|
|
441
|
+
2. **Views with hover/press effects containing text:**
|
|
442
|
+
Without `new_batch`, text vanishes during hover because the draw_bg shader re-renders with different instance values, pushing text behind the background.
|
|
443
|
+
|
|
444
|
+
3. **MapView containers:**
|
|
445
|
+
```
|
|
446
|
+
View{
|
|
447
|
+
new_batch: true
|
|
448
|
+
MapView{...}
|
|
449
|
+
}
|
|
450
|
+
```
|
|
451
|
+
|
|
452
|
+
### When new_batch is NOT needed
|
|
453
|
+
|
|
454
|
+
- `View{}` without `show_bg` (invisible layout only)
|
|
455
|
+
- Views containing only other Views (no direct text widgets)
|
|
456
|
+
- Text widgets themselves (Label, H1, etc.)
|
|
457
|
+
- Widgets that already force their own batch internally
|
|
458
|
+
|
|
459
|
+
---
|
|
460
|
+
|
|
461
|
+
## Splitter Usage Pattern
|
|
462
|
+
|
|
463
|
+
```
|
|
464
|
+
content := Splitter{
|
|
465
|
+
axis: Horizontal
|
|
466
|
+
align: Weighted(0.3)
|
|
467
|
+
|
|
468
|
+
a := View{
|
|
469
|
+
width: Fill
|
|
470
|
+
height: Fill
|
|
471
|
+
// Left/top panel content
|
|
472
|
+
Label{text: "Panel A"}
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
b := View{
|
|
476
|
+
width: Fill
|
|
477
|
+
height: Fill
|
|
478
|
+
// Right/bottom panel content
|
|
479
|
+
Label{text: "Panel B"}
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
```
|
|
483
|
+
|
|
484
|
+
### Splitter Axis Values
|
|
485
|
+
- `SplitterAxis.Horizontal` - Left/right split (default)
|
|
486
|
+
- `SplitterAxis.Vertical` - Top/bottom split
|
|
487
|
+
|
|
488
|
+
### Splitter Align Values
|
|
489
|
+
- `SplitterAlign.Weighted(0.5)` - Proportional split (0.0 to 1.0)
|
|
490
|
+
- `SplitterAlign.FromA(200.0)` - Fixed pixels from left/top
|
|
491
|
+
- `SplitterAlign.FromB(200.0)` - Fixed pixels from right/bottom
|
|
492
|
+
|
|
493
|
+
---
|
|
494
|
+
|
|
495
|
+
## FoldHeader Usage Pattern
|
|
496
|
+
|
|
497
|
+
```
|
|
498
|
+
FoldHeader{
|
|
499
|
+
header := View{
|
|
500
|
+
width: Fill
|
|
501
|
+
height: Fit
|
|
502
|
+
padding: 10
|
|
503
|
+
|
|
504
|
+
FoldButton{}
|
|
505
|
+
Label{text: "Section Title"}
|
|
506
|
+
}
|
|
507
|
+
|
|
508
|
+
body := View{
|
|
509
|
+
width: Fill
|
|
510
|
+
height: Fit
|
|
511
|
+
padding: Inset{left: 20}
|
|
512
|
+
|
|
513
|
+
Label{text: "Collapsible content here"}
|
|
514
|
+
}
|
|
515
|
+
}
|
|
516
|
+
```
|
|
517
|
+
|
|
518
|
+
The `opened` value animates between 0.0 (closed) and 1.0 (open). The body's height is interpolated based on this value.
|
|
519
|
+
|
|
520
|
+
---
|
|
521
|
+
|
|
522
|
+
## Modal Usage Pattern
|
|
523
|
+
|
|
524
|
+
```
|
|
525
|
+
modal := Modal{
|
|
526
|
+
// Override the content slot
|
|
527
|
+
content +: {
|
|
528
|
+
width: 400
|
|
529
|
+
height: Fit
|
|
530
|
+
padding: 20
|
|
531
|
+
flow: Down
|
|
532
|
+
spacing: 10
|
|
533
|
+
|
|
534
|
+
show_bg: true
|
|
535
|
+
draw_bg.color: #333
|
|
536
|
+
|
|
537
|
+
H3{text: "Dialog Title"}
|
|
538
|
+
P{text: "Dialog message content"}
|
|
539
|
+
|
|
540
|
+
View{
|
|
541
|
+
width: Fill
|
|
542
|
+
height: Fit
|
|
543
|
+
flow: Right
|
|
544
|
+
align: Align{x: 1.0}
|
|
545
|
+
spacing: 10
|
|
546
|
+
|
|
547
|
+
Button{text: "Cancel"}
|
|
548
|
+
Button{text: "OK"}
|
|
549
|
+
}
|
|
550
|
+
}
|
|
551
|
+
}
|
|
552
|
+
```
|
|
553
|
+
|
|
554
|
+
### Modal Control (from Rust)
|
|
555
|
+
|
|
556
|
+
```rust
|
|
557
|
+
// Open modal
|
|
558
|
+
self.modal(id!(modal)).open(cx);
|
|
559
|
+
|
|
560
|
+
// Close modal
|
|
561
|
+
self.modal(id!(modal)).close(cx);
|
|
562
|
+
```
|
|
563
|
+
|
|
564
|
+
---
|
|
565
|
+
|
|
566
|
+
## PageFlip Usage Pattern
|
|
567
|
+
|
|
568
|
+
```
|
|
569
|
+
page_flip := PageFlip{
|
|
570
|
+
active_page: page_one
|
|
571
|
+
|
|
572
|
+
page_one := View{
|
|
573
|
+
width: Fill height: Fill
|
|
574
|
+
Label{text: "Page One"}
|
|
575
|
+
}
|
|
576
|
+
|
|
577
|
+
page_two := View{
|
|
578
|
+
width: Fill height: Fill
|
|
579
|
+
Label{text: "Page Two"}
|
|
580
|
+
}
|
|
581
|
+
}
|
|
582
|
+
```
|
|
583
|
+
|
|
584
|
+
### Switching Pages (from Rust)
|
|
585
|
+
|
|
586
|
+
```rust
|
|
587
|
+
self.page_flip(id!(page_flip)).set_active_page(cx, id!(page_two));
|
|
588
|
+
```
|
|
589
|
+
|
|
590
|
+
---
|
|
591
|
+
|
|
592
|
+
## Common Widget Access Patterns (Rust)
|
|
593
|
+
|
|
594
|
+
### Accessing Child Widgets
|
|
595
|
+
|
|
596
|
+
```rust
|
|
597
|
+
// Access a specific child by id path
|
|
598
|
+
self.view.label(ids!(title)).set_text(cx, "New Title");
|
|
599
|
+
self.view.button(ids!(submit_btn)).set_text(cx, "Submit");
|
|
600
|
+
self.view.text_input(ids!(name_input)).set_text(cx, "default");
|
|
601
|
+
|
|
602
|
+
// Access nested children
|
|
603
|
+
self.view.label(ids!(container.inner.title)).set_text(cx, "Nested");
|
|
604
|
+
|
|
605
|
+
// Read text input value
|
|
606
|
+
let text = self.view.text_input(ids!(name_input)).text();
|
|
607
|
+
|
|
608
|
+
// Get/set slider value
|
|
609
|
+
let val = self.view.slider(ids!(volume)).value();
|
|
610
|
+
|
|
611
|
+
// Get selected dropdown item
|
|
612
|
+
let idx = self.view.drop_down(ids!(selector)).selected_item();
|
|
613
|
+
```
|
|
614
|
+
|
|
615
|
+
### Handling Widget Actions
|
|
616
|
+
|
|
617
|
+
```rust
|
|
618
|
+
fn handle_event(&mut self, cx: &mut Cx, event: &Event, scope: &mut Scope) {
|
|
619
|
+
self.view.handle_event(cx, event, scope);
|
|
620
|
+
|
|
621
|
+
for action in cx.actions() {
|
|
622
|
+
// Button clicked
|
|
623
|
+
if self.view.button(ids!(my_btn)).clicked(action) {
|
|
624
|
+
// handle click
|
|
625
|
+
}
|
|
626
|
+
|
|
627
|
+
// Text input changed
|
|
628
|
+
if let Some(text) = self.view.text_input(ids!(my_input)).changed(action) {
|
|
629
|
+
log!("Text changed: {}", text);
|
|
630
|
+
}
|
|
631
|
+
|
|
632
|
+
// Slider changed
|
|
633
|
+
if let Some(val) = self.view.slider(ids!(my_slider)).changed(action) {
|
|
634
|
+
log!("Slider: {}", val);
|
|
635
|
+
}
|
|
636
|
+
|
|
637
|
+
// CheckBox/Toggle toggled
|
|
638
|
+
if let Some(active) = self.view.check_box(ids!(my_check)).changed(action) {
|
|
639
|
+
log!("Active: {}", active);
|
|
640
|
+
}
|
|
641
|
+
|
|
642
|
+
// DropDown selected
|
|
643
|
+
if let Some(item) = self.view.drop_down(ids!(my_dd)).selected(action) {
|
|
644
|
+
log!("Selected: {}", item);
|
|
645
|
+
}
|
|
646
|
+
}
|
|
647
|
+
}
|
|
648
|
+
```
|