# Configurateur socle modulaire MIDI — **v1.0**

Application web locale pour concevoir la disposition des modules (pots, sliders, Arduino Pro Micro, multiplexeurs CD74HC4067) sur un socle en grille, générer un sketch **Arduino** (`.ino`), une **documentation PDF**, et télécharger un **PDF BOM & CC** pour l’atelier.

## Prérequis

- Navigateur récent (Chrome, Edge, Firefox).
- Pour le **PDF** : accès réseau la première fois (jsPDF chargé depuis un CDN). Pour un usage 100 % hors ligne, tu peux héberger `jspdf.umd.min.js` à côté de `index.html` et adapter la balise `<script>` dans `index.html`.

## Lancer l’application

### Option A — Serveur statique (recommandé)

Les modules ES (`app.js` + `grid-logic.js`) se chargent correctement avec un petit serveur HTTP.

Depuis le dossier **`website/`** (recommandé : tout le site + éditeur au même niveau) :

```bash
cd website
python -m http.server 8080
```

Puis ouvre : `http://localhost:8080/` (vitrine) et `http://localhost:8080/layout_editor/` (éditeur).

Tu peux aussi lancer le serveur à la racine du dépôt parent : alors l’URL de l’éditeur est `http://localhost:8080/website/layout_editor/`.

### Option B — Ouverture directe du fichier

Tu peux ouvrir `website/layout_editor/index.html` en double-cliquant : `app.js` est chargé en **script classique** (sans modules ES) pour rester compatible avec `file://`. Un serveur statique reste recommandé pour éviter d’autres limitations (CDN jsPDF, etc.).

Note : en mode hébergé, l’accès passe par `website/layout_editor/index.php` (protection par compte + clé).

## Fonctionnalités v1.0

- Grille dimensionnable, placement des modules, pivot des **sliders** uniquement.
- Indicateur **MUX requis** (16 canaux par puce) vs **MUX placés** sur la grille.
- **Blocage** du téléchargement du **firmware** et du **PDF** si les **MUX placés** sur la grille sont **insuffisants** par rapport au besoin (message d’alerte).
- Ordre des panneaux déplaçable (mémorisé), nom du contrôleur (mémorisé).

## Tests automatisés (logique grille)

Les fonctions sans DOM sont dans `grid-logic.js`. Les tests utilisent **Node.js** (module natif `node:test`).

```bash
cd website/layout_editor
npm test
```

Sans npm, équivalent :

```bash
cd website/layout_editor
node --test grid-logic.test.mjs
```

Nécessite **Node.js 18+**.

## Captures d’écran (optionnel)

Ajoute tes images sous `docs/screenshots/` puis référence-les ici pour la doc :

| Fichier suggéré        | Description        |
|------------------------|--------------------|
| `docs/screenshots/grille.png` | Vue de la grille |
| `docs/screenshots/bom.png`    | Exemple PDF BOM / CC ou bouton associé |
| `docs/screenshots/firmware.png` | Panneau firmware |

## Structure utile

| Fichier / dossier | Rôle |
|-------------------|------|
| `index.html` | Page principale |
| `app.js` | UI, génération `.ino` / PDF |
| `grid-logic.js` | Logique pure (collisions, collecte des entrées analogiques, BOM) |
| `grid-logic.test.mjs` | Tests Node |
| `style.css` | Styles + impression |
| `package.json` | Script `npm test` |

## Licence

Voir le fichier [`LICENSE`](../../LICENSE) à la racine du dépôt (MIT).
