/** * Dispositions types intégrées, insérées dans `layout_presets` (une fois par seed_key). * Le client normalise ensuite blocks / rayons (positions System 32, rayon structurel, etc.). */ const TYPE_DEFAULTS = { penderie: { shelves: 1, drawers: 0, hasRod: true }, tiroirs: { shelves: 1, drawers: 3, hasRod: false }, rayonnage: { shelves: 4, drawers: 0, hasRod: false }, bloc_carre: { shelves: 0, drawers: 0, hasRod: false }, mixte: { shelves: 2, drawers: 2, hasRod: true } }; function column(key, index, type, widthMm, overrides = {}) { const hasBack = overrides.hasBack ?? false; return { id: `preset-${key}-c${index + 1}`, type, moduleCode: type, widthMm, minWidth: 300, maxWidth: type === 'tiroirs' || type === 'mixte' ? 1000 : 1200, position: index, locked: false, ...TYPE_DEFAULTS[type], drawerType: 'visible', hasBack, hasBackTop: hasBack, ...overrides }; } function layout(key, { name, description, widthMm, heightMm = 2400, depthMm = 600, plinthHeightMm = 100, hasBack = false, columns }) { return { seedKey: key, name, description, config: { widthMm, heightMm, depthMm, plinthHeightMm, hasBack, stackEnabled: columns.some((c) => Array.isArray(c[2]?.blockHeightsMm) && c[2].blockHeightsMm.length >= 2), horizontalSpans: [], modules: columns.map(([type, w, overrides], i) => column(key, i, type, w, { hasBack, ...overrides })) } }; } /* * Penderie au-delà de 2000 mm: une colonne en un seul block exige un rayon structurel à mi-hauteur, * ce qui coupe la penderie (< 1100 mm sous tringle). Les penderies sont donc empilées: block bas de * 1800 mm (≈ 1710 mm sous tringle, manteaux longs ≥ 1600 mm) + surmeuble; la jonction sert de chapelier. */ const HANGING = { blockHeightsMm: [1800, 500], shelves: 0 }; const SURMEUBLE = { blockHeightsMm: [2000, 500] }; const OPEN = { blockDoors: [false] }; export const DEFAULT_LAYOUT_PRESETS = [ layout('penderie-double', { name: 'Penderie double', description: 'Deux penderies manteaux longs avec surmeubles', widthMm: 1200, columns: [['penderie', 600, HANGING], ['penderie', 600, HANGING]] }), layout('classique-3', { name: 'Classique 3 colonnes', description: 'Penderie, rayonnage et tiroirs', widthMm: 1800, columns: [['penderie', 600, HANGING], ['rayonnage', 600], ['tiroirs', 600]] }), layout('dressing-4', { name: 'Dressing 4 colonnes', description: 'Deux penderies encadrant tiroirs et rayonnage', widthMm: 2400, columns: [['penderie', 600, HANGING], ['tiroirs', 600], ['rayonnage', 600], ['penderie', 600, HANGING]] }), layout('grande-penderie', { name: 'Grande penderie', description: 'Penderie large, rayonnage et penderie avec tiroirs', widthMm: 2000, columns: [['penderie', 1000, HANGING], ['rayonnage', 500], ['mixte', 500, HANGING]] }), layout('surmeubles', { name: 'Avec surmeubles', description: 'Dressing 4 colonnes surmonté de rangements hauts', widthMm: 2400, heightMm: 2600, columns: [ ['penderie', 600, { ...SURMEUBLE, shelves: 0 }], ['rayonnage', 600, SURMEUBLE], ['tiroirs', 600, SURMEUBLE], ['penderie', 600, { ...SURMEUBLE, shelves: 0 }] ] }), layout('bibliotheque', { name: 'Bibliothèque ouverte', description: 'Trois colonnes de rayonnage sans portes, avec dos', widthMm: 1500, heightMm: 2200, depthMm: 350, hasBack: true, columns: [ ['rayonnage', 500, { ...OPEN, shelves: 5 }], ['rayonnage', 500, { ...OPEN, shelves: 5 }], ['rayonnage', 500, { ...OPEN, shelves: 5 }] ] }) ];