# Kirby Map Editor Plugin Plugin d'édition de cartes interactives pour Kirby CMS avec marqueurs enrichis et géocodage. ## Structure du code ``` map-editor/ ├── index.php # Enregistrement du plugin Kirby ├── lib/fields/ │ └── map-editor.php # Définition du champ custom ├── src/ │ ├── index.js # Entry point │ ├── composables/ # Logique métier réutilisable │ │ ├── useMarkers.js # Gestion des marqueurs (CRUD) │ │ └── useMapData.js # Gestion des données YAML │ ├── components/ │ │ ├── field/ │ │ │ └── MapEditor.vue # Composant principal (orchestrateur) │ │ └── map/ │ │ ├── MapPreview.vue # Carte MapLibre interactive │ │ ├── MarkerList.vue # Liste des marqueurs (sidebar) │ │ ├── MarkerEditor.vue # Modal d'édition de marqueur │ │ └── GeocodeSearch.vue # Recherche d'adresse │ └── utils/ │ ├── constants.js # Constantes globales │ ├── api/ │ │ └── nominatim.js # Client API Nominatim │ └── helpers/ │ └── debounce.js # Fonction de debounce ├── package.json └── README.md ``` ## Composables ### useMarkers Gère l'état et les opérations CRUD sur les marqueurs. **Utilisation** : \`\`\`javascript import { useMarkers } from '../../composables/useMarkers.js'; const { markers, selectedMarkerId, canAddMarker, addMarker, deleteMarker, } = useMarkers({ maxMarkers: 50 }); \`\`\` ### useMapData Gère le chargement/sauvegarde des données de carte en YAML. **Utilisation** : \`\`\`javascript import { useMapData } from '../../composables/useMapData.js'; const { center, zoom, loadMapData, debouncedSave } = useMapData({ defaultCenter: { lat: 43.836699, lon: 4.360054 }, defaultZoom: 13, onSave: (yamlString) => emit('input', yamlString), }); \`\`\` ## Build \`\`\`bash npm install npm run build \`\`\` Build avec Kirbyup → \`/index.js\` et \`/index.css\` ## Avantages du refactoring - **Réutilisabilité** : Composables utilisables dans d'autres composants - **Testabilité** : Fonctions pures testables indépendamment - **Maintenabilité** : Code organisé par responsabilité - **Lisibilité** : MapEditor réduit de 370 → 230 lignes - **Performance** : Auto-save optimisé ## Technologies - Vue 3 Composition API - MapLibre GL JS 3.6+ - Nominatim API (OpenStreetMap) - js-yaml pour parsing YAML