Pular para o conteúdo
Skillpedia
Sites e telas (frontend)48 mil · #3526

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

https://github.com/sickn33/agentic-awesome-skills/blob/main/plugins/agentic-awesome-skills-claude/skills/makepad-2-0-dsl/SKILL.md

Mensagem pronta para colar

Use esta skill para me ajudar: https://github.com/sickn33/agentic-awesome-skills/blob/main/plugins/agentic-awesome-skills-claude/skills/makepad-2-0-dsl/SKILL.md Leia o arquivo SKILL.md desse link e siga as instruções dele na minha tarefa.
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-dsl

Ou 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.md
Conteú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) ou ids!(my_button)
  • Substituíveis via sintaxe de caminho de ponto: MyTemplate{ title.text: "New text" }
  • Armazenadas no objeto de script vec (não map)

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.

repo: sickn33/agentic-awesome-skills

Popularidade

Estrelas no GitHub
48 mil
Posição no ranking
#3526
Licença
MIT
Atualizada em
15/10/2026

Essa skill é útil?

0

Entre para votar.

Comentários

  • …

Mais skills deste repositório

Skills parecidas