makepad-2-0-dsl
Faz seu agente entender o DSL (linguagem específica) no Makepad 2.0. É útil para quem está desenvolvendo ou corrigindo código de interface do usuário.
O que ela faz
Este guia ajuda você a entender e usar a linguagem de programação do Makepad 2.0 para criar interfaces de usuário. Ele explica como definir elementos visuais, suas propriedades e como eles interagem.
Quando usar
- ✓Ao criar a interface visual de um aplicativo com Makepad.
- ✓Ao tentar corrigir erros no código da interface do Makepad.
- ✓Ao aprender a sintaxe específica do Makepad para design.
Exemplo do que pedir para a IA
“Como eu defino um botão que muda de cor quando o mouse passa por cima?”
Quer saber mais? Abra as seções abaixo.
Como usar
O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.
Link da skill
Mensagem pronta para colar
Como funciona
O Makepad usa uma linguagem especial onde você escreve as definições da interface. Você usa sinais como ':' para definir propriedades e ':=' para dar nomes a elementos, permitindo que você os controle mais tarde.
Instalação
Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.
No terminal (Claude Code, Codex, Cursor), na pasta do projeto:
npx skills add sickn33/agentic-awesome-skills --skill makepad-2-0-dslOu baixe só o arquivo:
curl -L https://raw.githubusercontent.com/sickn33/agentic-awesome-skills/main/plugins/agentic-awesome-skills-claude/skills/makepad-2-0-dsl/SKILL.md -o SKILL.mdConteúdo técnico (SKILL.md)
Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.
Limitações
- Verifique com a documentação atual do Makepad 2.0; as APIs de upstream mudam frequentemente.
- Não execute scripts empacotados sem aprovação explícita do usuário.
Quando Usar
- Use quando este fluxo de trabalho de upstream corresponder ao objetivo declarado do usuário.
- Use quando a tarefa exigir os procedimentos documentados nesta habilidade.
Habilidade de Sintaxe DSL do Makepad 2.0
Visão Geral
O Makepad 2.0 substituiu a macro live_design! de tempo de compilação pela macro script_mod! de tempo de execução, alimentada pela linguagem de script Splash. Esta habilidade abrange a sintaxe completa da DSL, o sistema de propriedades, os padrões de registro e as armadilhas comuns.
Regras Chave de Sintaxe
Atribuição de Propriedade: Dois Pontos, NÃO Igual
key: value // CORRECT - colon syntax
key = value // WRONG - old 1.x syntax, no longer works
As propriedades são separadas por espaço em branco/nova linha. Sem vírgulas entre irmãos.
View{
width: Fill
height: Fit
flow: Down
spacing: 10
padding: 15
}
Instâncias Nomeadas: Operador :=
Use := para criar instâncias de widget nomeadas e endereçáveis:
my_button := Button{ text: "Click me" }
title := Label{ text: "Hello" }
Instâncias nomeadas são:
- Endereçáveis do código Rust via
id!(my_button)ouids!(my_button) - Substituíveis via sintaxe de caminho de ponto:
MyTemplate{ title.text: "New text" } - Armazenadas no objeto de script
vec(nãomap)
Propriedades regulares usam : e vão para map:
width: Fill // regular property -> map
label := Label{} // named child -> vec
Operador de Mesclagem: +:
O operador +: estende/mescla com o pai em vez de substituir:
draw_bg +: {
color: #f00 // Only overrides color, keeps all other draw_bg properties
}
Sem +:, você SUBSTITUI a propriedade inteira:
draw_bg: { color: #f00 } // REPLACES all of draw_bg - loses hover, border, etc.
draw_bg +: { color: #f00 } // MERGES - only changes color, keeps everything else
Atalho de Caminho de Ponto
O caminho de ponto é açúcar sintático para mesclagem:
draw_bg.color: #f00
// is equivalent to:
draw_bg +: { color: #f00 }
draw_text.text_style.font_size: 14
// is equivalent to:
draw_text +: { text_style +: { font_size: 14 } }
Ligações let: Modelos Locais
let cria modelos locais e reutilizáveis dentro de um bloco script_mod!:
let MyCard = RoundedView{
width: Fill height: Fit
padding: 16 flow: Down spacing: 8
draw_bg.color: #2a2a3d
draw_bg.border_radius: 8.0
title := Label{ text: "Default Title" draw_text.color: #fff }
body := Label{ text: "" draw_text.color: #aaa }
}
// Instantiate and override:
MyCard{ title.text: "Card 1" body.text: "Content here" }
MyCard{ title.text: "Card 2" body.text: "More content" }
IMPORTANTE: as ligações let são LOCAIS para o bloco script_mod!. Elas não podem ser acessadas de outros blocos script_mod!. Para compartilhar entre módulos, armazene em mod.widgets.*.
Operador Spread: ..
Herda todas as propriedades de outra definição:
set_type_default() do #(DrawMyShader::script_shader(vm)){
..mod.draw.DrawQuad // Inherit from DrawQuad
}
Estrutura do Módulo de Script
Estrutura Básica do Aplicativo
use makepad_widgets::*;
app_main!(App);
script_mod!{
use mod.prelude.widgets.*
load_all_resources() do #(App::script_component(vm)){
ui: Root{
main_window := Window{
window.inner_size: vec2(800, 600)
body +: {
// UI content here
my_button := Button{ text: "Click" }
}
}
}
}
}
impl App {
fn run(vm: &mut ScriptVm) -> Self {
crate::makepad_widgets::script_mod(vm); // 1. Register base widgets
App::from_script_mod(vm, self::script_mod)
}
}
#[derive(Script, ScriptHook)]
pub struct App {
#[source] source: ScriptObjectRef, // REQUIRED for Script-derived structs
#[live] ui: WidgetRef,
}
impl MatchEvent for App {
fn handle_actions(&mut self, cx: &mut Cx, actions: &Actions) {
if self.ui.button(ids!(my_button)).clicked(actions) {
log!("Button clicked!");
}
}
}
impl AppMain for App {
fn handle_event(&mut self, cx: &mut Cx, event: &Event) {
self.match_event(cx, event);
self.ui.handle_event(cx, event, &mut Scope::empty());
}
}
Módulo de Definição de Widget
script_mod!{
use mod.prelude.widgets_internal.* // Para os internos da biblioteca de widgets
use mod.widgets.* // Acessa outros widgets registrados
…
Perguntas frequentes
Qual a diferença entre ':' e '='?
Use ':' para definir propriedades de um elemento (como cor ou tamanho). O '=' era usado em versões antigas e não funciona mais.
Como eu crio um elemento que posso usar várias vezes?
Você pode usar a palavra-chave 'let' para criar um modelo reutilizável de um elemento. Isso ajuda a evitar repetição de código.
O que é o operador '+:'?
O '+:' permite que você modifique apenas algumas propriedades de um elemento existente, em vez de substituí-lo completamente. É útil para fazer pequenas alterações sem perder as configurações anteriores.
Detalhes
Descrição original do autor
Makepad 2.0 guidance for dsl; use when building or debugging Makepad UI code.
Popularidade
- Estrelas no GitHub
- 48 mil
- Posição no ranking
- #3526
- Licença
- MIT
- Atualizada em
- 15/10/2026
Comentários
- …
Mais skills deste repositório
00-andruia-consultant
Ajuda seu agente a iniciar ou melhorar projetos de IA. Ele analisa código, sugere ferramentas e cria planos de ação em espanhol.
sickn33/agentic-awesome-skills
007
Faz seu agente realizar auditorias de segurança e modelagem de ameaças. É útil para proteger projetos contra ataques e vulnerabilidades.
sickn33/agentic-awesome-skills
10-andruia-skill-smith
Ajuda seu agente a criar ou melhorar ferramentas de IA. Ele define como as ferramentas funcionam, escreve a documentação e valida a estrutura.
sickn33/agentic-awesome-skills
20-andruia-niche-intelligence
Faz seu agente criar um resumo sobre um setor específico. É útil para entender o contexto, regras, padrões de uso e riscos de um projeto, usando fontes confiáveis.
sickn33/agentic-awesome-skills
Skills parecidas
angular-developer
Ajuda seu agente a criar código Angular e a dar conselhos sobre a estrutura do projeto. É útil para iniciar novos projetos, criar partes do código ou melhorar a performance e acessibilidade.
affaan-m/ECC
frontend-a11y
Ajuda seu agente a tornar interfaces web acessíveis para todos. Ele garante que sites e apps funcionem bem com leitores de tela e navegação por teclado.
affaan-m/ECC
frontend-patterns
Faz seu agente aplicar padrões modernos no desenvolvimento frontend. Ele otimiza performance, gerencia estado e segue boas práticas em React e Next.js.
affaan-m/ECC