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,497 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: makepad-2-0-events
|
|
3
|
+
description: Makepad 2.0 guidance for events; use when building or debugging Makepad UI code.
|
|
4
|
+
source_repo: zhanghandong/makepad-skills
|
|
5
|
+
source_type: community
|
|
6
|
+
source: community
|
|
7
|
+
date_added: '2026-09-21'
|
|
8
|
+
risk: unknown
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Limitations
|
|
12
|
+
|
|
13
|
+
- Verify against current Makepad 2.0 docs; upstream APIs change frequently.
|
|
14
|
+
- Do not run bundled scripts without explicit user approval.
|
|
15
|
+
|
|
16
|
+
## When to Use
|
|
17
|
+
- Use when this upstream workflow matches the user's stated goal.
|
|
18
|
+
- Use when the task requires the procedures documented in this skill.
|
|
19
|
+
|
|
20
|
+
# Makepad 2.0 Event & Action System
|
|
21
|
+
|
|
22
|
+
## Overview
|
|
23
|
+
|
|
24
|
+
Makepad 2.0 uses a **two-layer event system**:
|
|
25
|
+
|
|
26
|
+
1. **Splash Layer** -- Inline event handlers written directly in `script_mod!` Splash code
|
|
27
|
+
(`on_click`, `on_render`, `on_return`, `on_startup`). These handle UI interactions
|
|
28
|
+
declaratively inside the script, close to the widget definitions.
|
|
29
|
+
|
|
30
|
+
2. **Rust Layer** -- The `MatchEvent` trait with `handle_actions`, `handle_timer`,
|
|
31
|
+
`handle_http_response`, etc. These handle business logic, external I/O, and
|
|
32
|
+
anything that needs full Rust power.
|
|
33
|
+
|
|
34
|
+
Both layers communicate through two bridge macros:
|
|
35
|
+
- `script_eval!(cx, { ... })` -- Execute Splash code from Rust (update state, trigger renders)
|
|
36
|
+
- `script_apply_eval!(cx, widget_ref, { ... })` -- Patch widget properties from Rust at runtime
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## 1. Splash Inline Event Handlers
|
|
41
|
+
|
|
42
|
+
Event handlers are attached directly to widgets inside `script_mod!` blocks. They use
|
|
43
|
+
closure syntax with `||` for no arguments or `|arg|` for callbacks that receive a value.
|
|
44
|
+
|
|
45
|
+
### on_click -- Button/widget click
|
|
46
|
+
|
|
47
|
+
Fires when the user clicks a button or clickable widget. No arguments for plain buttons,
|
|
48
|
+
or `|checked|` for CheckBox which passes the new boolean state.
|
|
49
|
+
|
|
50
|
+
```splash
|
|
51
|
+
// Plain button click
|
|
52
|
+
add_button := Button{
|
|
53
|
+
text: "Add"
|
|
54
|
+
on_click: ||{
|
|
55
|
+
let text = ui.todo_input.text()
|
|
56
|
+
if text != "" {
|
|
57
|
+
add_todo(text, "")
|
|
58
|
+
ui.todo_input.set_text("")
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// CheckBox click with checked state argument
|
|
64
|
+
check.on_click: |checked| toggle_todo(i, checked)
|
|
65
|
+
|
|
66
|
+
// Inline delete with closure capturing loop variable
|
|
67
|
+
delete.on_click: || delete_todo(i)
|
|
68
|
+
|
|
69
|
+
// Calling another widget's click programmatically
|
|
70
|
+
clear_done := ButtonFlatter{
|
|
71
|
+
text: "Clear completed"
|
|
72
|
+
on_click: ||{
|
|
73
|
+
todos.retain(|todo| !todo.done)
|
|
74
|
+
ui.todo_list.render()
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
### on_render -- Dynamic rendering
|
|
80
|
+
|
|
81
|
+
Fires when `.render()` is called on the target view. This is the primary mechanism for
|
|
82
|
+
dynamic content. The body replaces the previous draw content of the view.
|
|
83
|
+
|
|
84
|
+
```splash
|
|
85
|
+
main_view := View{
|
|
86
|
+
width: Fill
|
|
87
|
+
height: Fill
|
|
88
|
+
on_render: ||{
|
|
89
|
+
counter_label := Label{
|
|
90
|
+
text: "Count: " + state.counter
|
|
91
|
+
draw_text.text_style.font_size: 24
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
// List rendering with for loop and per-item event handlers
|
|
97
|
+
todo_list := ScrollYView{
|
|
98
|
+
width: Fill height: Fill
|
|
99
|
+
new_batch: true
|
|
100
|
+
on_render: ||{
|
|
101
|
+
if todos.len() == 0
|
|
102
|
+
EmptyState{}
|
|
103
|
+
else for i, todo in todos {
|
|
104
|
+
TodoItem{
|
|
105
|
+
label.text: todo.text
|
|
106
|
+
check.active: todo.done
|
|
107
|
+
check.on_click: |checked| toggle_todo(i, checked)
|
|
108
|
+
delete.on_click: || delete_todo(i)
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
EmptyState{}
|
|
113
|
+
}
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
**Key point**: `on_render` is NOT called automatically. You must call `ui.widget_name.render()`
|
|
117
|
+
to trigger it. The `new_batch: true` property on a view tells the system to clear previous
|
|
118
|
+
draw content before re-rendering.
|
|
119
|
+
|
|
120
|
+
### on_return -- TextInput enter key
|
|
121
|
+
|
|
122
|
+
Fires when the user presses Enter/Return inside a TextInput. Commonly used to submit forms.
|
|
123
|
+
|
|
124
|
+
```splash
|
|
125
|
+
todo_input := TextInput{
|
|
126
|
+
width: Fill height: 9. * theme.space_1
|
|
127
|
+
empty_text: "What needs to be done?"
|
|
128
|
+
on_return: || ui.add_button.on_click()
|
|
129
|
+
}
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
### on_startup -- App startup
|
|
133
|
+
|
|
134
|
+
Fires once when the application starts. Defined at the `Root` level. Commonly used
|
|
135
|
+
to trigger initial renders.
|
|
136
|
+
|
|
137
|
+
```splash
|
|
138
|
+
ui: Root{
|
|
139
|
+
on_startup: ||{
|
|
140
|
+
ui.main_view.render()
|
|
141
|
+
}
|
|
142
|
+
main_window := Window{
|
|
143
|
+
// ...
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
### Event handler capabilities
|
|
149
|
+
|
|
150
|
+
Inside event handlers you can:
|
|
151
|
+
- Call Splash functions: `add_todo(text, "dev")`
|
|
152
|
+
- Read widget values: `let text = ui.todo_input.text()`
|
|
153
|
+
- Set widget values: `ui.todo_input.set_text("")`
|
|
154
|
+
- Trigger re-renders: `ui.todo_list.render()`
|
|
155
|
+
- Trigger other widget clicks: `ui.add_button.on_click()`
|
|
156
|
+
- Modify state variables: `state.counter += 1`
|
|
157
|
+
- Use array methods: `todos.push({text: "new", done: false})`
|
|
158
|
+
- Use control flow: `if text != "" { ... }`
|
|
159
|
+
|
|
160
|
+
---
|
|
161
|
+
|
|
162
|
+
## 2. Rust Event Handling -- MatchEvent Trait
|
|
163
|
+
|
|
164
|
+
The `MatchEvent` trait is the Rust-side event dispatcher. It receives platform events
|
|
165
|
+
and widget actions through a set of handler methods.
|
|
166
|
+
|
|
167
|
+
### Core trait definition (from `draw/src/match_event.rs`)
|
|
168
|
+
|
|
169
|
+
```rust
|
|
170
|
+
pub trait MatchEvent {
|
|
171
|
+
// Lifecycle
|
|
172
|
+
fn handle_startup(&mut self, _cx: &mut Cx) {}
|
|
173
|
+
fn handle_shutdown(&mut self, _cx: &mut Cx) {}
|
|
174
|
+
fn handle_foreground(&mut self, _cx: &mut Cx) {}
|
|
175
|
+
fn handle_background(&mut self, _cx: &mut Cx) {}
|
|
176
|
+
fn handle_pause(&mut self, _cx: &mut Cx) {}
|
|
177
|
+
fn handle_resume(&mut self, _cx: &mut Cx) {}
|
|
178
|
+
|
|
179
|
+
// Window focus
|
|
180
|
+
fn handle_window_got_focus(&mut self, _cx: &mut Cx, _window_id: &WindowId) {}
|
|
181
|
+
fn handle_window_lost_focus(&mut self, _cx: &mut Cx, _window_id: &WindowId) {}
|
|
182
|
+
|
|
183
|
+
// Frame
|
|
184
|
+
fn handle_next_frame(&mut self, _cx: &mut Cx, _e: &NextFrameEvent) {}
|
|
185
|
+
|
|
186
|
+
// Widget actions (most commonly used)
|
|
187
|
+
fn handle_action(&mut self, _cx: &mut Cx, _e: &Action) {}
|
|
188
|
+
fn handle_actions(&mut self, cx: &mut Cx, actions: &Actions) {
|
|
189
|
+
for action in actions {
|
|
190
|
+
self.handle_action(cx, action);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
// Input
|
|
195
|
+
fn handle_key_down(&mut self, _cx: &mut Cx, _e: &KeyEvent) {}
|
|
196
|
+
fn handle_key_up(&mut self, _cx: &mut Cx, _e: &KeyEvent) {}
|
|
197
|
+
fn handle_back_pressed(&mut self, _cx: &mut Cx) -> bool { false }
|
|
198
|
+
|
|
199
|
+
// Timer
|
|
200
|
+
fn handle_timer(&mut self, _cx: &mut Cx, _e: &TimerEvent) {}
|
|
201
|
+
|
|
202
|
+
// Drawing
|
|
203
|
+
fn handle_draw(&mut self, _cx: &mut Cx, _e: &DrawEvent) {}
|
|
204
|
+
fn handle_draw_2d(&mut self, _cx: &mut Cx2d) {}
|
|
205
|
+
|
|
206
|
+
// Network
|
|
207
|
+
fn handle_http_response(&mut self, _cx: &mut Cx, _request_id: LiveId, _response: &HttpResponse) {}
|
|
208
|
+
fn handle_http_request_error(&mut self, _cx: &mut Cx, _request_id: LiveId, _err: &HttpError) {}
|
|
209
|
+
fn handle_http_progress(&mut self, _cx: &mut Cx, _request_id: LiveId, _progress: &HttpProgress) {}
|
|
210
|
+
fn handle_http_stream(&mut self, _cx: &mut Cx, _request_id: LiveId, _data: &HttpResponse) {}
|
|
211
|
+
fn handle_http_stream_complete(&mut self, _cx: &mut Cx, _request_id: LiveId, _data: &HttpResponse) {}
|
|
212
|
+
|
|
213
|
+
// Signals
|
|
214
|
+
fn handle_signal(&mut self, _cx: &mut Cx) {}
|
|
215
|
+
|
|
216
|
+
// Media devices
|
|
217
|
+
fn handle_audio_devices(&mut self, _cx: &mut Cx, _e: &AudioDevicesEvent) {}
|
|
218
|
+
fn handle_midi_ports(&mut self, _cx: &mut Cx, _e: &MidiPortsEvent) {}
|
|
219
|
+
fn handle_video_inputs(&mut self, _cx: &mut Cx, _e: &VideoInputsEvent) {}
|
|
220
|
+
}
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
### Standard App boilerplate (required)
|
|
224
|
+
|
|
225
|
+
Every Makepad 2.0 app needs this Rust structure:
|
|
226
|
+
|
|
227
|
+
```rust
|
|
228
|
+
use makepad_widgets::*;
|
|
229
|
+
|
|
230
|
+
app_main!(App);
|
|
231
|
+
|
|
232
|
+
script_mod! {
|
|
233
|
+
// ... Splash UI code ...
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
impl App {
|
|
237
|
+
fn run(vm: &mut ScriptVm) -> Self {
|
|
238
|
+
crate::makepad_widgets::script_mod(vm);
|
|
239
|
+
App::from_script_mod(vm, self::script_mod)
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
#[derive(Script, ScriptHook)]
|
|
244
|
+
pub struct App {
|
|
245
|
+
#[live]
|
|
246
|
+
ui: WidgetRef,
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
impl MatchEvent for App {
|
|
250
|
+
fn handle_actions(&mut self, cx: &mut Cx, actions: &Actions) {
|
|
251
|
+
// Handle widget actions here
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
impl AppMain for App {
|
|
256
|
+
fn handle_event(&mut self, cx: &mut Cx, event: &Event) {
|
|
257
|
+
self.match_event(cx, event);
|
|
258
|
+
self.ui.handle_event(cx, event, &mut Scope::empty());
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
**CRITICAL**: `handle_event` must call BOTH `self.match_event(cx, event)` (to dispatch
|
|
264
|
+
to the MatchEvent handlers) AND `self.ui.handle_event(cx, event, &mut Scope::empty())`
|
|
265
|
+
(to propagate events to widgets).
|
|
266
|
+
|
|
267
|
+
---
|
|
268
|
+
|
|
269
|
+
## 3. Widget Action API
|
|
270
|
+
|
|
271
|
+
Access widgets from Rust using `self.ui.widget_type(cx, ids!(name))`, then query their
|
|
272
|
+
action state by passing the `&Actions` reference.
|
|
273
|
+
|
|
274
|
+
### Button
|
|
275
|
+
|
|
276
|
+
```rust
|
|
277
|
+
// Access: self.ui.button(cx, ids!(my_button))
|
|
278
|
+
// Returns ButtonRef
|
|
279
|
+
|
|
280
|
+
.clicked(actions) -> bool // Was clicked (finger down + up inside)
|
|
281
|
+
.pressed(actions) -> bool // Was pressed down
|
|
282
|
+
.long_pressed(actions) -> bool // Was long-pressed (not yet released)
|
|
283
|
+
.released(actions) -> bool // Was released (NOT a click)
|
|
284
|
+
.clicked_modifiers(actions) -> Option<KeyModifiers> // Clicked with modifier keys
|
|
285
|
+
.pressed_modifiers(actions) -> Option<KeyModifiers>
|
|
286
|
+
.released_modifiers(actions) -> Option<KeyModifiers>
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
### TextInput
|
|
290
|
+
|
|
291
|
+
```rust
|
|
292
|
+
// Access: self.ui.text_input(cx, ids!(my_input))
|
|
293
|
+
// Returns TextInputRef
|
|
294
|
+
|
|
295
|
+
.changed(actions) -> Option<String> // Text changed, returns new text
|
|
296
|
+
.returned(actions) -> Option<(String, KeyModifiers)> // Enter pressed, returns text + mods
|
|
297
|
+
.escaped(actions) -> bool // Escape pressed
|
|
298
|
+
.key_down_unhandled(actions) -> Option<KeyEvent> // Unhandled key event
|
|
299
|
+
.selected_text() -> String // Current selection (no actions needed)
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
### CheckBox
|
|
303
|
+
|
|
304
|
+
```rust
|
|
305
|
+
// Access: self.ui.check_box(cx, ids!(my_check))
|
|
306
|
+
// Returns CheckBoxRef
|
|
307
|
+
|
|
308
|
+
.changed(actions) -> Option<bool> // Toggled, returns new checked state
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
### DropDown
|
|
312
|
+
|
|
313
|
+
```rust
|
|
314
|
+
// Access: self.ui.drop_down(cx, ids!(my_dropdown))
|
|
315
|
+
// Returns DropDownRef
|
|
316
|
+
|
|
317
|
+
.selected(actions) -> Option<usize> // Item selected, returns index
|
|
318
|
+
.changed(actions) -> Option<usize> // Same as selected
|
|
319
|
+
.changed_label(actions) -> Option<String> // Item selected, returns label string
|
|
320
|
+
.selected_item() -> usize // Current selection (no actions needed)
|
|
321
|
+
.selected_label() -> String // Current label (no actions needed)
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
### Slider
|
|
325
|
+
|
|
326
|
+
```rust
|
|
327
|
+
// Access: self.ui.slider(cx, ids!(my_slider))
|
|
328
|
+
// Returns SliderRef
|
|
329
|
+
|
|
330
|
+
.slided(actions) -> Option<f64> // Value changed during slide or text edit
|
|
331
|
+
.end_slide(actions) -> Option<f64> // Slide ended or text committed
|
|
332
|
+
.value() -> Option<f64> // Current value (no actions needed)
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
### RadioButton / RadioButtonGroup
|
|
336
|
+
|
|
337
|
+
```rust
|
|
338
|
+
// Access: self.ui.radio_button(cx, ids!(my_radio))
|
|
339
|
+
// Returns RadioButtonRef
|
|
340
|
+
|
|
341
|
+
.clicked(actions) -> bool // Was clicked
|
|
342
|
+
// For groups:
|
|
343
|
+
.selected(cx, actions) -> Option<usize> // Selected index in group
|
|
344
|
+
```
|
|
345
|
+
|
|
346
|
+
### LinkLabel
|
|
347
|
+
|
|
348
|
+
```rust
|
|
349
|
+
// Access: self.ui.link_label(cx, ids!(my_link))
|
|
350
|
+
// Returns LinkLabelRef
|
|
351
|
+
|
|
352
|
+
.clicked(actions) -> bool
|
|
353
|
+
.clicked_modifiers(actions) -> Option<KeyModifiers>
|
|
354
|
+
```
|
|
355
|
+
|
|
356
|
+
### Complete example
|
|
357
|
+
|
|
358
|
+
```rust
|
|
359
|
+
impl MatchEvent for App {
|
|
360
|
+
fn handle_actions(&mut self, cx: &mut Cx, actions: &Actions) {
|
|
361
|
+
if self.ui.button(cx, ids!(increment_button)).clicked(actions) {
|
|
362
|
+
script_eval!(cx, {
|
|
363
|
+
mod.state.counter += 1
|
|
364
|
+
ui.main_view.render()
|
|
365
|
+
});
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
if let Some(text) = self.ui.text_input(cx, ids!(search_input)).changed(actions) {
|
|
369
|
+
self.perform_search(cx, &text);
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
if let Some(checked) = self.ui.check_box(cx, ids!(dark_mode)).changed(actions) {
|
|
373
|
+
self.set_theme(cx, checked);
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
if let Some(index) = self.ui.drop_down(cx, ids!(language)).selected(actions) {
|
|
377
|
+
self.change_language(cx, index);
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
```
|
|
382
|
+
|
|
383
|
+
---
|
|
384
|
+
|
|
385
|
+
## 4. script_eval! Macro -- Rust to Splash Communication
|
|
386
|
+
|
|
387
|
+
`script_eval!` executes Splash code from within Rust handlers. It is the primary
|
|
388
|
+
bridge for updating Splash state and triggering UI re-renders from Rust.
|
|
389
|
+
|
|
390
|
+
**Signature**: `script_eval!(cx_or_vm, { splash_code })`
|
|
391
|
+
|
|
392
|
+
The first argument can be `&mut Cx` (inside event handlers) or `&mut ScriptVm`
|
|
393
|
+
(during initialization).
|
|
394
|
+
|
|
395
|
+
```rust
|
|
396
|
+
// Update Splash state and re-render
|
|
397
|
+
if self.ui.button(cx, ids!(increment_button)).clicked(actions) {
|
|
398
|
+
script_eval!(cx, {
|
|
399
|
+
mod.state.counter += 1
|
|
400
|
+
ui.main_view.render()
|
|
401
|
+
});
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
// Pass Rust values into Splash using #(expr) interpolation
|
|
405
|
+
let rust_string = "Hello from Rust";
|
|
406
|
+
script_eval!(cx, {
|
|
407
|
+
mod.value = #(rust_string)
|
|
408
|
+
});
|
|
409
|
+
|
|
410
|
+
// During init (inside App::run), use vm instead of cx
|
|
411
|
+
impl App {
|
|
412
|
+
fn run(vm: &mut ScriptVm) -> Self {
|
|
413
|
+
crate::makepad_widgets::theme_mod(vm);
|
|
414
|
+
script_eval!(vm, {
|
|
415
|
+
mod.theme = mod.themes.light
|
|
416
|
+
});
|
|
417
|
+
crate::makepad_widgets::widgets_mod(vm);
|
|
418
|
+
App::from_script_mod(vm, self::script_mod)
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
```
|
|
422
|
+
|
|
423
|
+
### Value interpolation with `#(expr)`
|
|
424
|
+
|
|
425
|
+
Inside `script_eval!`, use `#(rust_expression)` to inject Rust values into Splash:
|
|
426
|
+
|
|
427
|
+
```rust
|
|
428
|
+
let count = 42_u64;
|
|
429
|
+
let message = "items found".to_string();
|
|
430
|
+
script_eval!(cx, {
|
|
431
|
+
mod.state.count = #(count)
|
|
432
|
+
mod.state.message = #(message)
|
|
433
|
+
ui.results_view.render()
|
|
434
|
+
});
|
|
435
|
+
```
|
|
436
|
+
|
|
437
|
+
---
|
|
438
|
+
|
|
439
|
+
## 5. script_apply_eval! Macro -- Runtime Property Patching
|
|
440
|
+
|
|
441
|
+
`script_apply_eval!` patches widget properties at runtime from Rust. Unlike
|
|
442
|
+
`script_eval!` which runs general Splash code, this targets a specific widget
|
|
443
|
+
reference and applies property changes directly.
|
|
444
|
+
|
|
445
|
+
**Signature**: `script_apply_eval!(cx, widget_ref, { property_patches })`
|
|
446
|
+
|
|
447
|
+
```rust
|
|
448
|
+
// Patch a single property
|
|
449
|
+
let height = 500.0_f64;
|
|
450
|
+
script_apply_eval!(cx, item, {
|
|
451
|
+
page_view: { height: #(height) }
|
|
452
|
+
});
|
|
453
|
+
|
|
454
|
+
// Patch margin
|
|
455
|
+
let margin = Inset { top: 10.0, bottom: 10.0, left: 5.0, right: 5.0 };
|
|
456
|
+
script_apply_eval!(cx, content_view, {
|
|
457
|
+
margin: #(margin)
|
|
458
|
+
});
|
|
459
|
+
|
|
460
|
+
// Patch width with a Makepad type
|
|
461
|
+
script_apply_eval!(cx, content_view, {
|
|
462
|
+
width: #(Size::fit())
|
|
463
|
+
});
|
|
464
|
+
|
|
465
|
+
// Patch nested draw shader properties
|
|
466
|
+
let bg_color = vec4(0.2, 0.3, 0.4, 1.0);
|
|
467
|
+
let triangle_height = 8.0_f64;
|
|
468
|
+
script_apply_eval!(cx, content, {
|
|
469
|
+
draw_bg +: {
|
|
470
|
+
triangle_height: #(triangle_height)
|
|
471
|
+
background_color: #(bg_color)
|
|
472
|
+
}
|
|
473
|
+
});
|
|
474
|
+
```
|
|
475
|
+
|
|
476
|
+
---
|
|
477
|
+
|
|
478
|
+
## 6. Widget Reference Access from Rust
|
|
479
|
+
|
|
480
|
+
### Accessing widgets by ID
|
|
481
|
+
|
|
482
|
+
Use `self.ui.widget_type(cx, ids!(name))` to get a typed reference:
|
|
483
|
+
|
|
484
|
+
```rust
|
|
485
|
+
self.ui.button(cx, ids!(increment_button)) // -> ButtonRef
|
|
486
|
+
self.ui.label(cx, ids!(status_label)) // -> LabelRef
|
|
487
|
+
self.ui.text_input(cx, ids!(search_input)) // -> TextInputRef
|
|
488
|
+
self.ui.check_box(cx, ids!(dark_mode)) // -> CheckBoxRef
|
|
489
|
+
self.ui.drop_down(cx, ids!(language)) // -> DropDownRef
|
|
490
|
+
self.ui.slider(cx, ids!(volume)) // -> SliderRef
|
|
491
|
+
self.ui.view(cx, ids!(content)) // -> ViewRef
|
|
492
|
+
self.ui.radio_button(cx, ids!(option_a)) // -> RadioButtonRef
|
|
493
|
+
```
|
|
494
|
+
|
|
495
|
+
### Nested widget access with ids!
|
|
496
|
+
|
|
497
|
+
See [references/extended-guide.md](references/extended-guide.md) for nested access patterns.
|