powerapps-canvas
Skill3 starsChanged 41 days agoMITView on GitHub
Use quando o trabalho for Power Apps Canvas: criar ou alterar tela, galeria, modal, toast, loading, filtro, aba ou formulário; escrever ou corrigir fórmula Power Fx; gerar ou revisar YAML .pa.yaml para colar no Studio (\"não cola\", PA2108, `;` ou `;;`); combo/ComboBox que não acha o valor (SearchFields, DisplayFields); delegação no conector SQL (\"a galeria vem vazia\", \"o contador mostra 2.000\", CountRows, filtro de data); timers, auto-refresh e debounce; a chamada .Run() de um flow do lado do app (loading, IfError, toast); tokens fx*, nomenclatura, acessibilidade e escopo por perfil e unidade na tela. Não use para divergência entre KPI e galeria sem causa óbvia (use `power-platform`), definição do flow, Try/Catch e HTTP (use `power-automate`), procedure, DDL e coluna calculada (use `sql-procedures`), tabelas, Choice, Security Role e delegação no Dataverse (use `dataverse`), ALM, Power BI, model-driven ou Power Pages.
In this repository17 other files it gives its agents.
- CLAUDE.mdCLAUDE.md
- arquiteturaSkill
- brainstormSkill
- construirSkill
- dataverseSkill
- designSkill
- homologarSkill
- mockupsSkill
- mudancaSkill
- novoSkill
- power-automateSkill
- power-platformSkill
- progressoSkill
- prototipoSkill
- publicarSkill
- sql-proceduresSkill
- testarSkill
The file
Files
Power Apps Canvas
Produz e revisa telas Canvas como YAML .pa.yaml colável no Studio e Power Fx no dialeto
certo para o destino. Padrão: ManualLayout + controles Classic, canvas 1920x1080, tokens fx*,
escrita sempre por flow. Os padrões decididos do kit (contrato app e flow, separadores, telas,
nomes) estão em
decisoes-padrao.md; esta skill os aplica.
Regras inegociáveis
- Separador por destino. YAML colado:
,entre argumentos,;encadeia,.decimal. Barra de fórmulas pt-BR (App.OnStart,App.Formulas):;,;;,,. Nunca;;em YAML. Todo bloco de código diz o destino. Por quê: misturar não parseia em nenhum dos dois. - YAML válido pelo schema. Toda propriedade começa com
=; indentação de 2 espaços;Control: Tipo@versãocom a versão do app; fórmula de várias linhas em|-;ControleVariantsem fórmula; a ordem deChildrené o z-index. Por quê: o Studio valida antes de colar e rejeita o bloco inteiro. - Só propriedade atestada naquele tipo de controle. Antes de emitir propriedade nova, procure-a no mesmo tipo já usado no app; recusas conhecidas em propriedades-inexistentes.md. Por quê: uma propriedade inexistente (PA2108) derruba o bloco inteiro.
- Cor, fonte, medida e texto por token
fx*. Nada deRGBA(literal em tela. Por quê: um valor, um lugar; migrar literais depois é trabalho manual e caro. - Delegação declarada por escrito. Todo
Filter,LookUp,CountRowse filtro de data tem delegação conferida e declarada no cabeçalho da tela, e o teto aparece na UI (2.000+). PrefiraStartsWith.Searche"x" in colunadelegam só em texto (viramLIKE '%x%', sem índice);coluna in [lista]/coleção não delega no SQL; nuncaLookUp(fonte)dentro de galeria. Por quê: falha calada, sem erro e sem aviso. delegacao.md - Toda chamada
.Run()dentro deIfError; sucesso éstatus <> "error"(resposta em branco é erro); ids comText(id, "[$-en-US]0")(YAML); depois de gravar,Refreshe recontagem. Por quê: timeout ou flow desligado deixa o overlay preso ou fecha o modal como sucesso. chamada-flow.md - A tela não grava direto com regra de negócio e não autoriza. Escrita passa por flow; permissão na tela é flag do perfil (UX); sem perfil resolvido, sem acesso (fail-closed). Por quê: o cliente é manipulável e a conta do conector é compartilhada. escopo-e-permissao.md
- Toda global nasce no
OnStart; named formula não lê global. Por quê:Blank() = 0é falso (galeria vazia sem erro) e named formula não recalcula comRefresh(). - O nome vem do ambiente real, não do dicionário: coluna, tabela e prefixo de
NOMES-AS-BUILT(skilldataverse); extrato filtrado não prova esquema. Por quê: coluna errada emSearchFields/SortByColumnsnão dá erro. - O validador não é o portão suficiente: o portão é o script mais colar no Studio (e Data row limit = 1 num clone). Por quê: o script só vê o que está no arquivo; PA2108 e delegação só o Studio confirma.
- Fim de
Childrenda tela: conteúdo, modais, loading, toast. Todo timer tem regra de parada. Por quê: modal acima do toast eRepeatsem parada foram defeitos reais.
Fluxo de trabalho
1. Carregue só o que a tarefa exige
| Tarefa | Carregue |
| tela ou componente novo | catálogo primeiro: assets/componentes/INDICE.md (25 componentes coláveis); depois assets/tela-molde.md, ux-componentes.md, yaml-pa-formato.md, nomenclatura.md |
| modal, toast, loading | ux-feedback.md, chamada-flow.md |
| fórmula Power Fx | powerfx-essencial.md |
| dado, filtro, contador, data, "vem vazio" | delegacao.md |
| app lento, galeria travando | performance.md, delegacao.md |
| auto-refresh, debounce, polling, toast que não some | timers-async.md |
| botão que grava (chama flow) | chamada-flow.md |
| perfil, unidade, "vê dado de outra unidade" | escopo-e-permissao.md |
| cor, fonte, medida, mensagens | design-tokens.md, assets/app-formulas-tokens.md |
OnStart e globais | assets/app-onstart-molde.md |
| contraste, foco, leitor de tela | acessibilidade.md |
| "PA2108", "não cola" | propriedades-inexistentes.md, yaml-pa-formato.md |
| auditoria de uma tela | anti-padroes.md, estilo.md e o que o achado indicar |
Arquivo de tela grande: nunca leia inteiro; Grep para localizar e Read com janelas de 200 a
400 linhas.
2. Antes de gerar, responda a si mesmo
- Qual tela e qual prefixo? Qual a trilha de dados (
trilha_dadosnopower-platform.config.json)? - Quais fontes e colunas reais? São delegáveis para o filtro pedido? Qual é o teto?
- O dado vai no
OnStart, noOnVisible, em named formula ou sob demanda? - Já existe bloco equivalente em ux-componentes.md? Reutilize.
- Esta ação precisa de flow (regra de negócio, mais de um efeito, autorização)? Se sim, o flow é
da skill
power-automate; aqui só o lado da tela.
3. Entregue, nesta ordem
- O YAML ou Power Fx pronto, sem placeholder que o usuário precise adivinhar.
- Como aplicar, em uma das três vias (detalhe em
yaml-pa-formato.md §7): Code view (bloco de controle, diga o
controle-pai); barra de fórmulas (propriedade isolada: controle e propriedade); objeto App
(
OnStarteFormulas: digitar; não há Code view do App). Diga o dialeto. - Avisos: delegação e teto, dependência de variável não inicializada, impacto de desempenho, o que não foi verificado no Studio.
4. Valide
Rode o script e cole no Studio (regra 10). Corrija antes de responder: não entregue YAML que o Studio vai recusar.
5. Sub-comandos
/powerapps-canvas <sub> <alvo>; sem sub-comando, infira pela pergunta.
| Sub | Faz |
tela <nome> | tela completa a partir de assets/tela-molde.md |
componente <tipo> | bloco de ux-componentes.md: header, kpi, abas, filtros, galeria, badge, modal, loading, toast, selecao, vazio |
formula <descrição> | Power Fx com delegação verificada e tratamento de erro; diz a propriedade e o dialeto |
auditar <arquivo|tela> | achados com severidade, arquivo e código do validador, em 5 eixos: dados e delegação, desempenho, UX, acessibilidade, convenções |
refactor <trecho> | antes e depois, com o ganho esperado, mantendo o comportamento |
performance | o que carrega quando, o que vira named formula, o que adia, o que paraleliza, que timers rodam |
Referências
| Arquivo | Quando ler |
| yaml-pa-formato.md | gramática, escape, indentação, versões de controle, colar no Studio |
| powerfx-essencial.md | variáveis, coleções, erro, datas, texto, navegação, Patch x flow |
| delegacao.md | o que delega (SQL e Dataverse), teto, contagem, data Ref_*, busca |
| performance.md | OnStart, Concurrent, carga adiada, paginação, medir |
| timers-async.md | Timer: auto-refresh, debounce, toast, timeout, polling |
| chamada-flow.md | botão que grava: loading, IfError(.Run), toast, refresh |
| escopo-e-permissao.md | flags por perfil, fail-closed, "" = todas, unidade de gravação |
| ux-componentes.md | catálogo de blocos corrigido (cabeçalho, filtros, galeria, botões) |
| ux-feedback.md | modal, loading, toast |
| design-tokens.md | famílias fx*, contraste, tipografia, grid, mensagens |
| acessibilidade.md | checklist WCAG AA e limites da plataforma |
| nomenclatura.md | controle, variável, coleção, token, flow |
| propriedades-inexistentes.md | tabela PA2108 e como verificar no Studio |
| estilo.md | anatomia de arquivo, golden files, gate, decisão Classic |
| anti-padroes.md | os mais caros, com porquê, correção e código do validador |
| licoes-de-campo.md | o que já deu errado em apps reais e qual regra previne |
| assets/componentes/INDICE.md | catálogo de componentes coláveis (cabeçalho, menu lateral, menu no topo, tela inicial com cartões, filtros, galeria-tabela, modais, toast, loading…): um .md por componente, validado |
| assets/tela-molde.md | tela YAML completa e colável |
| assets/app-formulas-tokens.md | bloco App.Formulas com os tokens |
| assets/app-onstart-molde.md | App.OnStart em ordem de dependência |
Scripts
Lê blocos cercados e YAML puro (sem verde falso). Só lê; lê power-platform.config.json (pastas.telas,
telas_formato, ignorar, trilha_dados, prefixo_publisher) subindo diretórios ou por
--config. Rode da raiz do projeto (o script procura power-platform.config.json do
diretório atual para cima) ou passe --config; a pasta da skill aparece como Base directory
quando ela é carregada.
| Comando | O que checa | Exit |
python <pasta-da-skill>/scripts/validar-telas.py <arquivo-ou-pasta> | parse com linha (T001), = (T002), Control@versão (T003 a T005), nome duplicado (T006), ;; (T007), PA2108 (T008), RGBA( (T009), kebab-case (T010), in/Search (T011), chave repetida (T012), .Run( sem IfError (T018), z-order (T016) | 0 sem erro, 1 com erro, 2 uso incorreto |
python <pasta-da-skill>/scripts/validar-telas.py --trilha sql-server <pasta> | acrescenta CountRows/CountIf sem delegação (T013) | idem |
python <pasta-da-skill>/scripts/validar-telas.py --codigos | lista os códigos | 0 |
Formato auto: .md com blocos ```yaml valida cada bloco; .md sem cerca é YAML puro,
lido inteiro; arquivo que não é tela (documentação, bloco de barra de fórmulas) gera um aviso T020. Bloco com
# validador: ignorar é pulado. Tabela completa dos códigos em
anti-padroes.md §7.
Definição de pronto
python <pasta-da-skill>/scripts/validar-telas.py <tela>devolve0 erro(s)(avisos justificados por escrito).- O bloco foi colado no Studio sem
PA2108(evidência: o controle aparece na árvore). - Data row limit = 1 num clone: a galeria continua listando (evidência: lista não vazia).
- Cabeçalho de delegação escrito; contadores com teto
fxTxtTeto(grep deCountRows). grep -c "RGBA(" <tela>= 0 fora de fórmula multilinha de status.- Todo botão que chama flow:
IfError,varShowLoadingdesligado em todos os caminhos, testado com o flow desligado (evidência: toast vermelho, overlay fechado). - Todo
Filterde fonte com escopo tem o predicado (grep dosFilter(). - Contraste >= 4,5:1 e Accessibility checker sem erro novo (evidência: relatório do checker).
- Timers com parada (
Reset: =!flag,Startligado à tela);.Run()fora deItems. - Dialeto do destino declarado em cada bloco entregue.
Armadilhas
As dez mais caras (detalhe e correção em anti-padroes.md):
CountRowssobre SQL mostrando o teto como total: delegacao.md §3..Run()semIfError; overlay preso: chamada-flow.md.- Filtro de data direto atrás de gateway: coluna
Ref_*: delegacao.md §4. Filtercom escopo sem o predicado de unidade (vazamento sem aviso): escopo-e-permissao.md §5.;;em YAML ou,na barra de fórmulas: yaml-pa-formato.md §2.- Propriedade não atestada derrubando o bloco (PA2108): propriedades-inexistentes.md.
SearchFields/SortByColumnscom coluna errada (falha calada): delegacao.md §7.- Timer com
Repeatsem parada e toast semReset: timers-async.md §7. - Fórmula de linha única com
:ou#(quebra ou trunca): yaml-pa-formato.md §4. - Global não declarada no
OnStart(Blank() = 0): app-onstart-molde.md.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

