floor-planner/src/lib/defaults.ts
Andras Schmelczer 8bf3e3b705
Some checks failed
Deploy to Pages / build (push) Failing after 10m45s
Simplify
2026-09-11 23:27:29 +01:00

71 lines
1.7 KiB
TypeScript

import type { Project, Room, Wall, UrlState } from './types';
export function rectangle(id = 'room-1', name = 'Living room', width = 4800, height = 3600): Room {
return {
id,
name,
direction: 0,
walls: [width, height, width, height].map((length, i) => ({
id: `${id}-w${i + 1}`,
length,
turn: 90,
doors: i === 3 ? [{ id: `${id}-door-1`, offset: 500, width: 826 }] : [],
})),
};
}
export function fireplace(id: string, name: string): Room {
const measures = [
[4800, 90],
[3600, 90],
[1650, 90],
[450, -90],
[1500, -90],
[450, 90],
[1650, 90],
[3600, 90],
];
const walls: Wall[] = measures.map(([length, turn], i) => ({
id: `${id}-w${i + 1}`,
length,
turn,
doors: i === 7 ? [{ id: `${id}-door-1`, offset: 500, width: 826 }] : [],
}));
return { id, name, direction: 0, walls };
}
export function defaultProject(): Project {
return {
rooms: [rectangle()],
tolerance: 10,
completedBoards: [],
flooring: {
length: 1200,
width: 190,
gap: 10,
pattern: 'random',
optimisation: 'cuts',
minOffset: 300,
maxOffset: 600,
minLength: 200,
minWidth: 60,
kerf: 3,
},
skirting: { stockLength: 2400, thickness: 18, minLength: 200, kerf: 3 },
};
}
export function defaultState(): UrlState {
return {
project: defaultProject(),
view: {
roomId: 'room-1',
selectedPiece: null,
focus: null,
search: '',
collapsedSections: [],
material: 'flooring',
},
};
}
export function nextId(prefix: string, existing: string[]): string {
let n = 1;
while (existing.includes(`${prefix}-${n}`)) n++;
return `${prefix}-${n}`;
}