📦 Component Library - VS Code Extension (v1.2.0)Uma extensão completa para VS Code com snippets de componentes UI pré-moldados para desenvolvimento rápido com HTML/CSS/JavaScript + PHP/Laravel Blade. Inclui gerador de Scaffold CRUD avançado com FormRequests e Policies, módulo de Auth & Permissions, e snippets de comportamentos JavaScript. ✨ Funcionalidades
🆕 Novidades v1.2.0🔐 Módulo Auth & Permissions (
|
| Comando | Atalho | Descrição |
|---|---|---|
Component Library: Open Documentation |
Ctrl+Shift+D |
Abre documentação interativa |
Component Library: Generate Scaffold |
Ctrl+Shift+G |
Gera CRUD completo |
Component Library: Setup Auth & Permissions |
Ctrl+Shift+A |
Configura autenticação |
⚡ Gerador de Scaffold Laravel 10
O que é gerado?
Com um único comando, gere um CRUD completo com:
- Controller - Resource Controller com métodos index, create, store, show, edit, update, destroy
- Model - Com $fillable, $casts e scopeSearch
- Migration - Com Schema::create e colunas baseadas nos campos
- StoreRequest - FormRequest com regras de validação para criação
- UpdateRequest - FormRequest com regras de validação para atualização
- Policy - Com métodos view, create, update, delete, restore, forceDelete
- Views - 4 páginas Blade usando os componentes da biblioteca:
index.blade.php- Listagem com tabela, busca e paginaçãocreate.blade.php- Formulário de criação com @error e old()edit.blade.php- Formulário de edição com @error e old()show.blade.php- Visualização detalhada
- Route - Route::resource injetado automaticamente em routes/web.php
Como usar o Scaffold
Método 1 - Via Comando (Ctrl+Shift+G):
- Abra um projeto Laravel no VS Code
- Pressione
Ctrl+Shift+G(ouCmd+Shift+Gno Mac) - Digite o nome da classe (ex:
Produto) - Digite os campos (ex:
nome:string, preco:decimal, descricao:text, email:email, ativo:boolean) - Os arquivos serão gerados automaticamente
Método 2 - Via Documentação:
- Abra a documentação (
Ctrl+Shift+D) - Vá para a aba "Scaffold"
- Preencha o formulário interativo (incluindo opção de middleware admin)
- Clique em "Gerar CRUD Completo"
Tipos de Campos Suportados
| Tipo | Descrição | Input HTML | Validação |
|---|---|---|---|
string |
Texto curto (max 255) | text | required\|string\|max:255 |
text |
Texto longo | textarea | required\|string |
integer |
Número inteiro | number (step=1) | required\|integer |
decimal |
Número decimal (2 casas) | number (step=0.01) | required\|numeric |
boolean |
Verdadeiro/Falso | checkbox | sometimes\|boolean |
date |
Data (sem hora) | date | required\|date |
datetime |
Data e hora | datetime-local | required\|date |
email |
Endereço de e-mail | required\|email\|unique:table |
Exemplo de Uso
# Comando via Command Palette
Component Library: Generate Scaffold
# Input 1 - Nome da Classe:
Produto
# Input 2 - Campos:
nome:string, preco:decimal, descricao:text, email_contato:email, estoque:integer, ativo:boolean
Arquivos gerados:
app/Http/Controllers/ProdutoController.php
app/Http/Requests/StoreProdutoRequest.php
app/Http/Requests/UpdateProdutoRequest.php
app/Models/Produto.php
app/Policies/ProdutoPolicy.php
database/migrations/2026_03_16_..._create_produtos_table.php
resources/views/produtos/index.blade.php
resources/views/produtos/create.blade.php
resources/views/produtos/edit.blade.php
resources/views/produtos/show.blade.php
routes/web.php (rota adicionada)
🔐 Auth & Permissions
O que é gerado?
Com Ctrl+Shift+A, configure autenticação completa:
- Migration - Adiciona coluna
is_adminà tabela users - Middleware AdminOnly - Protege rotas de administração
- View Login - Formulário de login com validação e @error
- View Register - Formulário de registro com validação e @error
Snippets de Auth (Blade)
| Prefixo | Descrição |
|---|---|
cl-auth-admin |
Bloco condicional para admin (@if(auth()->user()->is_admin)) |
cl-auth-user |
Bloco @auth para usuário logado |
cl-auth-guest |
Bloco @guest para visitante |
cl-auth-can |
Bloco @can para verificar permissão |
📁 Estrutura da Extensão
vscode_component_library_extension/
├── package.json # Manifesto da extensão (v1.2.0)
├── extension.js # Lógica dos comandos (Docs + Scaffold + Auth)
├── snippets/
│ ├── html.code-snippets # Navbar, Card, Table, Modal, Buttons, Search, Selects
│ ├── css.code-snippets # Snippets CSS (principal)
│ ├── css-variables.code-snippets # Variáveis :root, cores, tamanhos
│ ├── css-utilities.code-snippets # Classes utilitárias gerais
│ ├── css-flexbox.code-snippets # Utilitários Flexbox
│ ├── css-grid.code-snippets # Sistema de Grid
│ ├── css-spacing.code-snippets # Margens e paddings
│ ├── css-buttons.code-snippets # Estilos de botões
│ ├── css-forms.code-snippets # Estilos de formulários, inputs, selects
│ ├── javascript.code-snippets # Modal, Tabs, Sortable Table
│ ├── javascript-behaviors.code-snippets # 🆕 Confirm Delete, Toast, Toggle Password...
│ ├── php.code-snippets # Controller, Model, Migration
│ └── blade.code-snippets # Layout, CRUD views, Scaffold + Auth snippets
├── templates/
│ ├── scaffold/ # 🆕 Templates do Scaffold (reorganizados)
│ │ ├── controller.template.js # Controller com Store/Update FormRequests
│ │ ├── model.template.js # Model com $fillable e $casts
│ │ ├── migration.template.js # Migration com colunas
│ │ ├── request.template.js # 🆕 Store + Update FormRequests
│ │ ├── policy.template.js # 🆕 Policy com autorização
│ │ ├── view-index.template.js # View de listagem
│ │ ├── view-create.template.js # View de criação
│ │ ├── view-edit.template.js # View de edição
│ │ └── view-show.template.js # View de visualização
│ └── auth/ # 🆕 Templates de Auth
│ ├── migration-add-admin.template.js
│ ├── middleware-admin.template.js
│ ├── view-login.template.js
│ └── view-register.template.js
├── docs/
│ ├── index.html # Documentação interativa (7 abas)
│ └── best-practices.md # Guia de boas práticas
├── examples/
│ ├── listagem-crud.md # Diagrama de página de listagem
│ ├── cadastro-formulario.md # Diagrama de página de formulário
│ └── dashboard.md # Diagrama de dashboard
└── README.md # Este arquivo
🚀 Instalação
Pré-requisitos
Passo 1: Instalar o vsce
npm install -g @vscode/vsce
Passo 2: Empacotar a Extensão
cd /home/ubuntu/vscode_component_library_extension
# Criar o arquivo .vsix
vsce package
# Isso gerará: component-library-snippets-1.2.0.vsix
Passo 3: Instalar no VS Code
Método 1 - Via linha de comando:
code --install-extension component-library-snippets-1.2.0.vsix
Método 2 - Via interface do VS Code:
- Abra o VS Code
- Pressione
Ctrl+Shift+X(Extensions) - Clique nos
...(três pontos) no canto superior direito - Selecione "Install from VSIX..."
- Escolha o arquivo
component-library-snippets-1.2.0.vsix - Reinicie o VS Code
📖 Como Usar
Usando os Snippets
- Abra um arquivo com a linguagem desejada (
.html,.css,.js,.php,.blade.php) - Digite
cl-e aguarde o IntelliSense aparecer - Selecione o snippet desejado
- Use
Tabpara navegar entre os placeholders - Preencha os valores e finalize com
Escape
Abrindo a Documentação
- Pressione
Ctrl+Shift+P(Command Palette) - Digite "Component Library: Open Documentation"
- Pressione Enter
- A documentação abrirá ao lado do editor
Atalho: Ctrl+Shift+D (ou Cmd+Shift+D no Mac)
🎨 Lista de Snippets
HTML (cl-*)
| Prefixo | Descrição |
|---|---|
cl-navbar |
Navbar responsiva com logo e menu |
cl-card |
Card completo com header/body/footer |
cl-card-simple |
Card simples apenas com body |
cl-table |
Tabela responsiva com striped/hover |
cl-table-sortable |
Tabela com ordenação por clique |
cl-modal |
Modal acessível com backdrop |
cl-alert |
Alerta com ícone e botão fechar |
cl-badge |
Badge/Tag colorido |
cl-spinner |
Spinner de carregamento |
cl-tabs |
Sistema de abas com painéis |
cl-pagination |
Componente de paginação |
cl-form-group |
Grupo de formulário com label |
cl-form-select |
Select dropdown |
cl-form-textarea |
Textarea |
cl-row |
Row do grid |
cl-col |
Coluna do grid |
cl-grid |
Layout completo container/row/col |
cl-container |
Container responsivo |
cl-search |
Formulário de busca |
cl-breadcrumb |
Navegação breadcrumb |
cl-btn-group |
Grupo de botões |
cl-btn-primary |
Botão primário - ação principal |
cl-btn-secondary |
Botão secundário - cancelar/voltar |
cl-btn-outline |
Botão outline - estilo contornado |
cl-btn-danger |
Botão de perigo/excluir com confirmação |
cl-btn-success |
Botão de sucesso - confirmação positiva |
cl-btn-icon |
Botão com ícone e texto |
cl-search-bar |
Barra de pesquisa básica |
cl-search-icon |
Barra de pesquisa com ícone |
cl-search-filter |
Barra de pesquisa com filtros dropdown |
cl-select-basic |
Select dropdown básico |
cl-select-group |
Select com optgroups |
cl-select-multiple |
Select com seleção múltipla |
cl-select-custom |
Select customizado com estilo |
CSS (cl-css-*)
Arquivo: css-variables.code-snippets
| Prefixo | Descrição |
|---------|-----------|
| cl-css-root | Variáveis CSS completas (:root) |
| cl-css-colors-palette | Paleta de cores customizada |
| cl-css-sizes | Variáveis de tamanhos e breakpoints |
Arquivo: css-utilities.code-snippets
| Prefixo | Descrição |
|---------|-----------|
| cl-css-colors | Cores de fundo, texto, tipografia |
| cl-css-display | Display, visibilidade, posição |
| cl-css-borders | Bordas, radius, sombras |
Arquivo: css-flexbox.code-snippets
| Prefixo | Descrição |
|---------|-----------|
| cl-css-flexbox | Utilitários de Flexbox |
| cl-css-flex-container | Container flexbox customizável |
| cl-css-flex-center | Layout centralizado com flexbox |
Arquivo: css-grid.code-snippets
| Prefixo | Descrição |
|---------|-----------|
| cl-css-grid | Sistema de grid 12 colunas |
| cl-css-grid-template | Grid template responsivo com CSS Grid |
| cl-css-grid-areas | Layout com CSS Grid Areas nomeadas |
Arquivo: css-spacing.code-snippets
| Prefixo | Descrição |
|---------|-----------|
| cl-css-spacing | Utilitários de margin/padding |
Arquivo: css-buttons.code-snippets
| Prefixo | Descrição |
|---------|-----------|
| cl-css-buttons | Estilos base de botões |
| cl-css-buttons-variants | Variantes adicionais e grupos |
Arquivo: css-forms.code-snippets
| Prefixo | Descrição |
|---------|-----------|
| cl-css-forms | Estilos base de formulários |
| cl-css-selects | Estilos para select/dropdown |
| cl-css-searchbar | Estilos para barra de pesquisa |
| cl-css-checkbox-radio | Estilos para checkbox e radio |
JavaScript (cl-js-*)
Arquivo: javascript.code-snippets
| Prefixo | Descrição |
|---------|-----------|
| cl-js-modal | Script de toggle de modal |
| cl-js-tabs | Script de navegação de abas |
| cl-js-sortable-table | Script de ordenação de tabela |
| cl-js-alert | Script de fechar alertas |
| cl-js-form-validation | Validação de formulários |
| cl-js-dropdown | Menu dropdown |
Arquivo: javascript-behaviors.code-snippets 🆕
| Prefixo | Descrição |
|---------|-----------|
| cl-js-confirm-delete | Confirmação antes de excluir registro |
| cl-js-alert-close | Auto-fechar alertas com timer |
| cl-js-toggle-password | Mostrar/ocultar campo de senha |
| cl-js-image-preview | Preview de imagem antes do upload |
| cl-js-char-counter | Contador de caracteres em textarea |
| cl-js-toast | Notificação toast temporária |
PHP (cl-*)
| Prefixo | Descrição |
|---|---|
cl-controller-index |
Controller index com search/paginate |
cl-controller-crud |
Controller CRUD completo |
cl-form-request |
Form Request com validação |
cl-model |
Model com fillable e scopes |
cl-migration |
Migration completa |
cl-api-resource |
API Resource |
Blade (cl-blade-*)
| Prefixo | Descrição |
|---|---|
cl-blade-layout |
Layout base app.blade.php |
cl-blade-index |
Página de listagem completa |
cl-blade-create |
Página de cadastro |
cl-blade-edit |
Página de edição |
cl-blade-show |
Página de visualização completa |
cl-blade-table-search |
Card com busca + tabela + paginação |
cl-blade-table-forelse |
Tabela com @forelse e ações CRUD |
cl-blade-form |
Form com @csrf |
cl-blade-form-put |
Form de edição com @method('PUT') |
cl-blade-form-delete |
Form de exclusão com confirmação |
cl-blade-form-create |
Formulário de criação completo |
cl-blade-form-edit |
Formulário de edição completo |
cl-blade-dashboard |
Dashboard com KPIs e gráficos |
cl-blade-forelse |
Loop @forelse com @empty |
cl-blade-error |
Exibição de erro de validação |
cl-blade-input |
Input completo com old() e @error |
cl-auth-admin |
🆕 Bloco condicional para admin |
cl-auth-user |
🆕 Bloco @auth para usuário logado |
cl-auth-guest |
🆕 Bloco @guest para visitante |
cl-auth-can |
🆕 Bloco @can para verificar permissão |
🔒 Guia de Segurança
Boas Práticas Laravel
- Sempre use FormRequests para validação (gerados automaticamente pelo Scaffold)
- Use Policies para autorização (geradas automaticamente pelo Scaffold)
- Proteja rotas admin com middleware
AdminOnly - Use @csrf em todos os formulários (já incluído nos snippets)
- Use @method('PUT/DELETE') para métodos HTTP corretos
- Valide todos os inputs - nunca confie em dados do usuário
- Use
old()para preservar dados em caso de erro de validação
🏗️ Fluxo de Trabalho Recomendado
Criar uma página de listagem CRUD:
- Scaffold: Pressione
Ctrl+Shift+Ge gere o CRUD completo - Auth: Pressione
Ctrl+Shift+Apara configurar autenticação - Customize: Use os snippets para adicionar comportamentos JavaScript
- Proteja: Use os snippets de auth para controle de acesso nas views
Fluxo Manual:
- Controller:
cl-controller-indexoucl-controller-crud - View Index:
cl-blade-index - View Create:
cl-blade-create - View Edit:
cl-blade-edit - JavaScript:
cl-js-confirm-delete,cl-js-toast, etc. - Auth:
cl-auth-admin,cl-auth-can, etc.
🔧 Desenvolvimento
Executar em modo de desenvolvimento:
cd /home/ubuntu/vscode_component_library_extension
# Abrir no VS Code
code .
# Pressione F5 para iniciar a depuração
# Uma nova janela do VS Code abrirá com a extensão carregada
Atualizar a versão:
- Edite
package.jsone altere a versão - Execute
vsce packagenovamente - Reinstale o novo
.vsix
📝 Personalização
Adicionar novos snippets:
- Abra o arquivo
.code-snippetscorrespondente emsnippets/ - Adicione um novo objeto seguindo o padrão:
{
"Nome do Snippet": {
"prefix": "cl-meu-snippet",
"body": [
"<div>",
"\t${1:placeholder}",
"</div>"
],
"description": "Descrição do snippet"
}
}
Placeholders:
${1:texto}- Placeholder com texto padrão${1|op1,op2,op3|}- Placeholder com opções (dropdown)$0- Posição final do cursor\t- Tabulação\n- Nova linha
🤝 Contribuindo
- Fork o repositório
- Crie uma branch:
git checkout -b feature/meu-snippet - Faça suas alterações
- Commit:
git commit -m 'Adiciona novo snippet' - Push:
git push origin feature/meu-snippet - Abra um Pull Request
📄 Licença
MIT License - veja o arquivo LICENSE para detalhes.
🙏 Agradecimentos
- Inspirado nas melhores práticas de Laravel e Bootstrap
- Ícones por Unicode Emoji
Dica: Use Ctrl+Space dentro de um arquivo para forçar o IntelliSense a aparecer e mostrar todos os snippets disponíveis começando com cl-.