Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
88 changes: 88 additions & 0 deletions .claude/instructions/android-patterns.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
# Android / KMP — Instruções de plataforma

> Leia este arquivo ao iniciar qualquer task Android/KMP. Ignore `ios/` e `flutter/`.

---

## Abstrações principais

| Classe | Papel |
|---|---|
| `CraftDBuilder` | Interface base para criar componentes |
| `CraftDBuilderManager` | Registra e resolve builders pelo `key` |
| `CraftDynamic` | Composable principal que renderiza o SDUI |
| `SimpleProperties` | Modelo base de dados (`key` + `value` JSON) |
| `ActionProperties` | Dados de ação (deeplink + analytics) |
| `CraftDComponentKey` | Enum com as chaves de componentes built-in |
| `CraftDViewListener` | Callback de ações para o consumidor |

---

## Estrutura de pastas

### craftd-core (modelos e abstrações)
```
commonMain/
data/
model/
base/ → SimpleProperties, SimplePropertiesResponse
action/ → ActionProperties, AnalyticsProperties
[name]/ → [Name]Properties.kt para cada componente
domain/ → enums e sealed classes (CraftDAlign, CraftDTextStyle)
presentation/ → CraftDViewListener, CraftDComponentKey
extensions/ → funções de extensão
```

### craftd-compose (implementação Compose/KMP)
```
commonMain/
builder/ → CraftDBuilder.kt (interface), CraftDBuilderManager.kt
ui/
[name]/
CraftD[Name].kt → o @Composable do componente
CraftD[Name]Builder.kt → implementa CraftDBuilder
extensions/ → funções utilitárias Compose
```

### craftd-xml (implementação View System)
```
src/main/kotlin/.../
ui/
[name]/
CraftD[Name]Component.kt → custom View
CraftD[Name]ComponentRender.kt → implementa CraftDViewRenderer
builder/
CraftDBuilderManager.kt → getBuilderRenders()
```

### Padrão por novo componente (exemplo: CraftDFoo)

1. `craftd-core/commonMain/data/model/foo/FooProperties.kt` — data class do modelo
2. `craftd-compose/commonMain/ui/foo/CraftDFoo.kt` — composable
3. `craftd-compose/commonMain/ui/foo/CraftDFooBuilder.kt` — builder
4. `craftd-xml/src/main/kotlin/.../ui/foo/CraftDFooComponent.kt` — custom View
5. `craftd-xml/src/main/kotlin/.../ui/foo/CraftDFooComponentRender.kt` — render
6. Registrar no `CraftDBuilderManager` de cada módulo
7. Adicionar ao `app-sample-android` (Compose + XML) e ao `dynamic.json`

---

## Princípios Compose

- Composables **stateless** — estado vem do caller (state hoisting)
- Todo componente expõe `modifier: Modifier = Modifier`
- Sem valores hardcoded de cor ou tipografia — usar `MaterialTheme.colorScheme` e `MaterialTheme.typography`
- Todo componente interativo: touch target mínimo de 48x48dp

## Build

- Dependências sempre via `libs.versions.toml` — nunca versão hardcoded no `build.gradle.kts`
- Configuração compartilhada entre módulos vai em convention plugin no `build-logic/`
- Rodar `./gradlew build` em `android_kmp/` após cada task antes de marcar `[x]`

## Testes

- JUnit4 + MockK para testes Android
- `kotlin("test")` + `kotlinx.serialization` + `compose.runtime` para commonTest
- Nomenclatura em backtick: `` `given X when Y then Z` ``
- Path espelha o source: `src/commonTest/kotlin/...`
50 changes: 50 additions & 0 deletions .claude/instructions/flutter-patterns.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
# Flutter — Instruções de plataforma

> Leia este arquivo ao iniciar qualquer task Flutter. Ignore `android_kmp/` e `ios/`.

---

## Abstrações principais

| Classe | Papel |
|---|---|
| `CraftDynamic` | Widget principal que renderiza o SDUI |
| `CraftDViewListener` | Callback de ações para o consumidor |
| `SimpleProperties` | Modelo base de dados |
| `ActionProperties` | Dados de ação (deeplink + analytics) |
| `CraftDAlign` | Alinhamento de componentes |

---

## Estrutura de pastas

```
flutter/craftd_widget/
lib/
src/
builder/ → CraftDBuilder (abstract), CraftDBuilderManager
ui/
[name]/
craftd_[name].dart → Widget do componente
craftd_[name]_builder.dart → implementa CraftDBuilder
model/
[name]_properties.dart → classe do modelo
```

## Padrão por novo componente (exemplo: CraftDFoo)

1. `lib/src/model/foo_properties.dart` — classe do modelo
2. `lib/src/ui/foo/craftd_foo.dart` — Widget
3. `lib/src/ui/foo/craftd_foo_builder.dart` — implementa CraftDBuilder
4. Registrar no `CraftDBuilderManager`
5. Adicionar ao sample app Flutter

## Convenções

- Nomes de arquivos em `snake_case`
- Classes em `PascalCase` com prefixo `CraftD`
- Dependências externas (ex: cached_network_image) injetadas via construtor, nunca acopladas no builder

## Referência

Consultar `CraftDButton` / `CraftDButtonBuilder` como padrão antes de criar algo novo.
44 changes: 44 additions & 0 deletions .claude/instructions/ios-patterns.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
# iOS / SwiftUI — Instruções de plataforma

> Leia este arquivo ao iniciar qualquer task iOS. Ignore `android_kmp/` e `flutter/`.

---

## Abstrações principais

| Classe | Papel |
|---|---|
| `CraftDBuilder` | Protocol base para criar componentes |
| `CraftDBuilderManager` | Registra e resolve builders pelo `key` |
| `CraftDynamic` | View principal que renderiza o SDUI |
| `SimpleProperties` | Modelo base de dados |
| `ActionProperties` | Dados de ação (deeplink + analytics) |
| `CraftDViewListener` | Callback de ações para o consumidor |

---

## Estrutura de pastas

```
ios/craftd-swiftui/
Sources/CraftD/
builder/ → CraftDBuilder.swift (protocol), CraftDBuilderManager.swift
ui/
[name]/
CraftD[Name].swift → SwiftUI View do componente
CraftD[Name]Builder.swift → implementa CraftDBuilder
model/
[Name]Properties.swift → struct do modelo
```

## Padrão por novo componente (exemplo: CraftDFoo)

1. `Sources/CraftD/model/FooProperties.swift` — struct do modelo
2. `Sources/CraftD/ui/foo/CraftDFoo.swift` — SwiftUI View
3. `Sources/CraftD/ui/foo/CraftDFooBuilder.swift` — implementa CraftDBuilder
4. Registrar no `CraftDBuilderManager`
5. Adicionar ao sample app iOS

## Referência

Consultar `CraftDButton` / `CraftDButtonBuilder` como padrão antes de criar algo novo.
34 changes: 0 additions & 34 deletions .claude/skills/android-accessibility/SKILL.md

This file was deleted.

11 changes: 1 addition & 10 deletions .claude/skills/android-testing/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ description: Testing strategies for Android/KMP. Use when creating or reviewing
| Nível | Foco | Ferramentas |
|---|---|---|
| Unit | Lógica isolada (ViewModels, Repositories, Builders) | JUnit4, MockK |
| Integration | Interação entre componentes | AndroidX Test, Hilt |
| Integration | Interação entre componentes | AndroidX Test |
| Screenshot | Verificação visual de UI | Roborazzi (roda na JVM, sem emulador) |

## Padrão no CraftD
Expand Down Expand Up @@ -62,12 +62,3 @@ androidUnitTest.dependencies {
./gradlew recordRoborazziDebug # grava baseline
./gradlew verifyRoborazziDebug # verifica regressão
```

## Hilt em testes

```kotlin
@HiltAndroidTest
class MyTest {
@get:Rule val hiltRule = HiltAndroidRule(this)
}
```
33 changes: 0 additions & 33 deletions .claude/skills/compose-performance-audit/SKILL.md

This file was deleted.

Loading
Loading