# Migration AppV2 - Item Sheets
## Vue d'ensemble
Migration des feuilles d'items de BoL vers l'architecture **ApplicationV2** de Foundry VTT v12+.
## Fichiers créés
### Classes AppV2 (module/applications/sheets/)
1. **base-item-sheet.mjs** - Classe de base pour tous les item sheets
- Hérite de `foundry.applications.sheets.ItemSheetV2`
- Utilise `HandlebarsApplicationMixin`
- Gère les tabs, drag & drop, actions communes
- 272 lignes de code
2. **item-sheet.mjs** - Sheet pour le type "item"
- Équipements, armes, protections, sorts, etc.
- Hérite de `BoLBaseItemSheet`
- Contexte spécifique aux items
3. **feature-sheet.mjs** - Sheet pour le type "feature"
- Boons, flaws, careers, origins, races, etc.
- Hérite de `BoLBaseItemSheet`
- Contexte spécifique aux features
4. **_module.mjs** - Export des sheets
### Templates (templates/item/)
1. **item-sheet.hbs** - Template pour les items
2. **feature-sheet.hbs** - Template pour les features
3. **parts/item-header.hbs** - Header mis à jour pour AppV2
### Backups
- `templates/item.backup/` - Backup des templates originaux
- `module/item.backup/` - Backup de l'ancienne classe ItemSheet
- `templates/item/parts/item-header.hbs.backup` - Backup du header
## Architecture AppV2
### Différences avec AppV1
| Aspect | AppV1 (avant) | AppV2 (après) |
|--------|---------------|---------------|
| Classe de base | `ItemSheet` | `ItemSheetV2` |
| Options | `static get defaultOptions()` | `static DEFAULT_OPTIONS` |
| getData | `async getData()` | `async _prepareContext()` |
| Template | Unique | Peut utiliser PARTS |
| Tabs | Automatiques | Gestion manuelle |
| Actions | Event listeners | `actions:` dans OPTIONS |
| Render | `activateListeners()` | `_onRender()` |
### Structure de BoLBaseItemSheet
```javascript
class BoLBaseItemSheet extends ItemSheetV2 {
// Options statiques
static DEFAULT_OPTIONS = {
classes, position, form, window,
actions, dragDrop, tabs
}
// State
tabGroups = { primary: "description" }
// Méthodes principales
async _prepareContext() // Prépare les données
_onRender() // Après le render
_activateTabs() // Active les tabs
_activateListeners() // Event listeners
// Actions
static #onEditImage() // data-action="editImage"
static #onPostItem() // data-action="postItem"
// Drag & Drop
#createDragDropHandlers()
_canDragStart()
_onDragStart()
}
```
## Fonctionnalités migrées
### ✅ Depuis l'ancien BoLItemSheet
1. **getData** → **_prepareContext**
- Enrichissement de la description
- Configuration des données dynamiques
- Gestion des catégories
- Propriétés des items
- Careers depuis l'actor
2. **Tabs**
- Navigation entre Description et Properties
- State persistant avec `tabGroups`
- Activation manuelle des tabs
3. **Actions**
- Edit Image (FilePicker)
- Post Item (chat)
4. **Listeners spécifiques**
- Armor quality → soak formula
5. **Dynamic defaults**
- Category par défaut
- Spell conditions (mandatory/optional)
- Equipment slots
## Utilisation dans les templates
### Actions (data-action)
```handlebars
{{!-- Éditer l'image --}}
{{!-- Poster au chat --}}
```
### Tabs
```handlebars
{{!-- Navigation --}}
{{!-- Contenu --}}