Files
Claude 7df2740f1c feat(furniture): пакет 0.4.0 — 60 дизайнерских символов вместо 44 плюс 12 примитивов
Встроенная библиотека мебели была смешанной: 44 предмета рисовал дизайнер, а
12 — код, прямоугольниками и эллипсами в unit box. Они выбивались из стиля, и
три категории меню (`computer`, `hood`, `oven`) вообще не открывались, потому
что вида сверху для них не было.

Пакет 0.4.0 перерисовывает все 56 существующих публичных ID и добавляет четыре
новых: `computer`, `hood`, `oven`, `cactus`. Каталог становится равен поставке:
60 символов, 32 непустые категории.

Совместимость. Ни один сохранённый план не мигрирует: положение, размер,
поворот, отражение, цвет, прозрачность и толщина линии не трогаются, а
default-размеры всех 56 прежних ID совпадают со старыми до числа — таблица
зашита в `test/furniture.test.mjs`, чтобы сдвиг было видно тестом, а не глазами.

Ловушка, ради которой примитивы удалены целиком. Библиотека собиралась союзом
каталога и `LEGACY_FURNITURE`, и обе половины несли ОДНИ И ТЕ ЖЕ публичные ID.
`BY_ID` — это `Map`, она оставляет последнюю запись, поэтому примитив молча
побеждал дизайнерский рисунок, который его заменял: задача выглядит выполненной,
12 предметов не обновились, ни один существующий тест этого не видит. Поэтому
`LEGACY_FURNITURE`, `RETAINED_IDS`, тип `Prim`, `box()` и `primitivePathD`
удалены, а на дубликаты в каталоге стоит тест и мутант.

Два продуктовых решения владельца (#593):

- `cactus` живёт в категории `plant`, а не `exercise`, как предлагал пакет:
  плитка «Тренажёр» рисует тренажёр, и открывать её на кактус — врать о
  содержимом палитры. `exercise` остаётся скрытой пустой категорией, непустых
  становится 32, а не 33;
- при отказе ленивого чанка с рисунками не рисуется НИЧЕГО. Прежде 12
  примитивов рисовались всегда, и `docs/FURNITURE.md` это обещал; обещание
  снято. Это единственное место, где задача ухудшает наблюдаемое поведение, и
  оно проверяется смоком, а не словом.

Бюджеты. Ревью ТЗ показало, что «бюджет ленивого графа защищён» было
заявлением без гейта: размеры печатались в отчёт и ни с чем не сравнивались.
Добавлены `lazyGraphCeilingViolation` и два настоящих потолка со своим мутантом.
Стартовый граф ушёл ниже полосы, поэтому `INITIAL_VIEW_GZIP_CEILING` опущен
292 400 → 291 400 — вторая половина храповика, без которой выигрыш отыграется.

Провенанс. Документ пакета воссоздан под 0.4.0: грант владельца, имя архива и
его SHA-256. Это единственная исполнимая защита от повторения истории #159, и
она не ослаблена — число проверок в тесте не уменьшилось, а мутант подменяет
хеш и обязан её покраснить.

Свидетели: пять новых мутантов, новая golden-сцена `furniture-new-symbols-light`
для четырёх новых ID, матрица 63 → 64. Шестой мутант правится, а не добавляется:
`furniture-placement-needs-art` ссылался на удалённое поле `g` и переставал
компилироваться — раннер честно отличал это от «пойман» и отчитывался
setup-failure. Ложь мутанта осталась прежней по смыслу, убрана только ветка про
примитив.

i18n: 7 ключей × 4 локали. `furn.cat_exercise` не добавлен — категория скрыта.

Issue: #593
User-Visible: yes
2026-09-19 13:38:49 +03:00

1027 lines
35 KiB
JSON

{
"schema_version": 1,
"view_schema": 2,
"pack_id": "houseplan",
"pack_version": "0.4.0",
"title_ru": "Набор мебели: меню и план",
"title_en": "Furniture pack: menu and plan",
"author": "Sergey Matyunin (Matysh)",
"license": "MIT",
"source_url": "https://www.figma.com/design/cpGN8MhJGydwVOUzZv8dia/House-plan?node-id=271-95",
"menu_icons": [
{
"id": "air_conditioner",
"name_ru": "Кондиционер",
"name_en": "Air conditioner",
"group": "appliance",
"file": "svg/menu/air_conditioner.svg"
},
{
"id": "armchair",
"name_ru": "Кресла",
"name_en": "Armchairs",
"group": "furniture",
"file": "svg/menu/armchair.svg"
},
{
"id": "bathtub",
"name_ru": "Ванны",
"name_en": "Bathtubs",
"group": "sanitary",
"file": "svg/menu/bathtub.svg"
},
{
"id": "bed",
"name_ru": "Кровати",
"name_en": "Beds",
"group": "furniture",
"file": "svg/menu/bed.svg"
},
{
"id": "bidet",
"name_ru": "Биде",
"name_en": "Bidets",
"group": "sanitary",
"file": "svg/menu/bidet.svg"
},
{
"id": "boiler",
"name_ru": "Бойлер",
"name_en": "Water heater",
"group": "appliance",
"file": "svg/menu/boiler.svg"
},
{
"id": "chair",
"name_ru": "Стулья",
"name_en": "Chairs",
"group": "furniture",
"file": "svg/menu/chair.svg"
},
{
"id": "coffee_table",
"name_ru": "Журнальные столы",
"name_en": "Coffee tables",
"group": "furniture",
"file": "svg/menu/coffee_table.svg"
},
{
"id": "computer",
"name_ru": "Компьютер",
"name_en": "Computer",
"group": "appliance",
"file": "svg/menu/computer.svg"
},
{
"id": "cooktop",
"name_ru": "Варочные панели",
"name_en": "Cooktops",
"group": "appliance",
"file": "svg/menu/cooktop.svg"
},
{
"id": "dining_table",
"name_ru": "Обеденные столы",
"name_en": "Dining tables",
"group": "furniture",
"file": "svg/menu/dining_table.svg"
},
{
"id": "dishwasher",
"name_ru": "Посудомоечная машина",
"name_en": "Dishwasher",
"group": "appliance",
"file": "svg/menu/dishwasher.svg"
},
{
"id": "dryer",
"name_ru": "Сушильная машина",
"name_en": "Dryer",
"group": "appliance",
"file": "svg/menu/dryer.svg"
},
{
"id": "exercise",
"name_ru": "Тренажёр",
"name_en": "Exercise equipment",
"group": "other",
"file": "svg/menu/exercise.svg"
},
{
"id": "fireplace",
"name_ru": "Камин",
"name_en": "Fireplace",
"group": "other",
"file": "svg/menu/fireplace.svg"
},
{
"id": "fridge",
"name_ru": "Холодильник",
"name_en": "Refrigerator",
"group": "appliance",
"file": "svg/menu/fridge.svg"
},
{
"id": "hood",
"name_ru": "Вытяжка",
"name_en": "Range hood",
"group": "appliance",
"file": "svg/menu/hood.svg"
},
{
"id": "kitchen_cabinet",
"name_ru": "Кухонные шкафы",
"name_en": "Kitchen cabinets",
"group": "furniture",
"file": "svg/menu/kitchen_cabinet.svg"
},
{
"id": "kitchen_sink",
"name_ru": "Кухонные мойки",
"name_en": "Kitchen sinks",
"group": "sanitary",
"file": "svg/menu/kitchen_sink.svg"
},
{
"id": "nightstand",
"name_ru": "Тумбы",
"name_en": "Cabinets",
"group": "furniture",
"file": "svg/menu/nightstand.svg"
},
{
"id": "oven",
"name_ru": "Духовка",
"name_en": "Oven",
"group": "appliance",
"file": "svg/menu/oven.svg"
},
{
"id": "plant",
"name_ru": "Растение",
"name_en": "Plant",
"group": "other",
"file": "svg/menu/plant.svg"
},
{
"id": "rug",
"name_ru": "Ковер",
"name_en": "Rug",
"group": "other",
"file": "svg/menu/rug.svg"
},
{
"id": "shelving",
"name_ru": "Стеллажи",
"name_en": "Shelving",
"group": "furniture",
"file": "svg/menu/shelving.svg"
},
{
"id": "shower",
"name_ru": "Душ",
"name_en": "Shower",
"group": "sanitary",
"file": "svg/menu/shower.svg"
},
{
"id": "sink",
"name_ru": "Раковина",
"name_en": "Sink",
"group": "sanitary",
"file": "svg/menu/sink.svg"
},
{
"id": "sofa",
"name_ru": "Диваны",
"name_en": "Sofas",
"group": "furniture",
"file": "svg/menu/sofa.svg"
},
{
"id": "stairs",
"name_ru": "Лестница",
"name_en": "Stairs",
"group": "other",
"file": "svg/menu/stairs.svg"
},
{
"id": "toilet",
"name_ru": "Унитазы",
"name_en": "Toilets",
"group": "sanitary",
"file": "svg/menu/toilet.svg"
},
{
"id": "tv",
"name_ru": "Телевизоры",
"name_en": "Televisions",
"group": "appliance",
"file": "svg/menu/tv.svg"
},
{
"id": "wardrobe",
"name_ru": "Шкафы",
"name_en": "Wardrobes",
"group": "furniture",
"file": "svg/menu/wardrobe.svg"
},
{
"id": "washer",
"name_ru": "Стиральная машина",
"name_en": "Washing machine",
"group": "appliance",
"file": "svg/menu/washer.svg"
},
{
"id": "work_table",
"name_ru": "Рабочие столы",
"name_en": "Desks",
"group": "furniture",
"file": "svg/menu/work_table.svg"
}
],
"symbols": [
{
"id": "coffee_table",
"operation": "replace",
"name_ru": "Журнальный стол, прямоугольный",
"name_en": "Rectangular coffee table",
"group": "furniture",
"width_cm": 120,
"depth_cm": 60,
"back": "top",
"file": "svg/plan/coffee_table.svg",
"menu_icon": "coffee_table",
"notes": "Существующий публичный ID House Plan; меняются только рисунок и default-размер нового размещения."
},
{
"id": "coffee_table_round",
"operation": "replace",
"name_ru": "Журнальный стол, круглый",
"name_en": "Round coffee table",
"group": "furniture",
"width_cm": 80,
"depth_cm": 80,
"back": "top",
"file": "svg/plan/coffee_table_round.svg",
"menu_icon": "coffee_table",
"notes": "Существующий публичный ID House Plan; меняются только рисунок и default-размер нового размещения."
},
{
"id": "coffee_table_oval",
"operation": "replace",
"name_ru": "Журнальный стол, овальный",
"name_en": "Oval coffee table",
"group": "furniture",
"width_cm": 120,
"depth_cm": 60,
"back": "top",
"file": "svg/plan/coffee_table_oval.svg",
"menu_icon": "coffee_table",
"notes": "Существующий публичный ID House Plan; меняются только рисунок и default-размер нового размещения."
},
{
"id": "coffee_table_rounded",
"operation": "replace",
"name_ru": "Журнальный стол, скруглённый",
"name_en": "Rounded coffee table",
"group": "furniture",
"width_cm": 120,
"depth_cm": 60,
"back": "top",
"file": "svg/plan/coffee_table_rounded.svg",
"menu_icon": "coffee_table",
"notes": "Существующий публичный ID House Plan; меняются только рисунок и default-размер нового размещения."
},
{
"id": "table_dining",
"operation": "replace",
"name_ru": "Обеденный стол, прямоугольный",
"name_en": "Rectangular dining table",
"group": "furniture",
"width_cm": 160,
"depth_cm": 90,
"back": "top",
"file": "svg/plan/table_dining.svg",
"menu_icon": "dining_table",
"notes": "Существующий публичный ID House Plan; меняются только рисунок и default-размер нового размещения."
},
{
"id": "table_round",
"operation": "replace",
"name_ru": "Обеденный стол, круглый",
"name_en": "Round dining table",
"group": "furniture",
"width_cm": 110,
"depth_cm": 110,
"back": "top",
"file": "svg/plan/table_round.svg",
"menu_icon": "dining_table",
"notes": "Существующий публичный ID House Plan; меняются только рисунок и default-размер нового размещения."
},
{
"id": "table_dining_oval",
"operation": "replace",
"name_ru": "Обеденный стол, овальный",
"name_en": "Oval dining table",
"group": "furniture",
"width_cm": 180,
"depth_cm": 100,
"back": "top",
"file": "svg/plan/table_dining_oval.svg",
"menu_icon": "dining_table",
"notes": "Существующий публичный ID House Plan; меняются только рисунок и default-размер нового размещения."
},
{
"id": "table_dining_rounded",
"operation": "replace",
"name_ru": "Обеденный стол, скруглённый",
"name_en": "Rounded dining table",
"group": "furniture",
"width_cm": 160,
"depth_cm": 90,
"back": "top",
"file": "svg/plan/table_dining_rounded.svg",
"menu_icon": "dining_table",
"notes": "Существующий публичный ID House Plan; меняются только рисунок и default-размер нового размещения."
},
{
"id": "desk",
"operation": "replace",
"name_ru": "Рабочий стол, прямоугольный",
"name_en": "Rectangular desk",
"group": "furniture",
"width_cm": 140,
"depth_cm": 70,
"back": "top",
"file": "svg/plan/desk.svg",
"menu_icon": "work_table",
"notes": "Существующий публичный ID House Plan; меняются только рисунок и default-размер нового размещения."
},
{
"id": "desk_corner",
"operation": "replace",
"name_ru": "Рабочий стол, угловой",
"name_en": "Corner desk",
"group": "furniture",
"width_cm": 160,
"depth_cm": 160,
"back": "top",
"file": "svg/plan/desk_corner.svg",
"menu_icon": "work_table",
"notes": "Существующий публичный ID House Plan; меняются только рисунок и default-размер нового размещения."
},
{
"id": "chair",
"operation": "replace",
"name_ru": "Стул",
"name_en": "Chair",
"group": "furniture",
"width_cm": 50,
"depth_cm": 50,
"back": "top",
"file": "svg/plan/chair.svg",
"menu_icon": "chair",
"notes": "Существующий публичный ID House Plan; меняются только рисунок и default-размер нового размещения."
},
{
"id": "chair_bar",
"operation": "replace",
"name_ru": "Барный стул",
"name_en": "Bar stool",
"group": "furniture",
"width_cm": 45,
"depth_cm": 48,
"back": "top",
"file": "svg/plan/chair_bar.svg",
"menu_icon": "chair",
"notes": "Существующий публичный ID House Plan; меняются только рисунок и default-размер нового размещения."
},
{
"id": "armchair",
"operation": "replace",
"name_ru": "Кресло мягкое",
"name_en": "Soft armchair",
"group": "furniture",
"width_cm": 90,
"depth_cm": 90,
"back": "top",
"file": "svg/plan/armchair.svg",
"menu_icon": "armchair",
"notes": "Существующий публичный ID House Plan; меняются только рисунок и default-размер нового размещения."
},
{
"id": "armchair_office",
"operation": "replace",
"name_ru": "Кресло офисное",
"name_en": "Office chair",
"group": "furniture",
"width_cm": 65,
"depth_cm": 65,
"back": "top",
"file": "svg/plan/armchair_office.svg",
"menu_icon": "armchair",
"notes": "Существующий публичный ID House Plan; меняются только рисунок и default-размер нового размещения."
},
{
"id": "sofa",
"operation": "replace",
"name_ru": "Диван двухместный",
"name_en": "Two-seat sofa",
"group": "furniture",
"width_cm": 180,
"depth_cm": 90,
"back": "top",
"file": "svg/plan/sofa.svg",
"menu_icon": "sofa",
"notes": "Существующий публичный ID House Plan; меняются только рисунок и default-размер нового размещения."
},
{
"id": "sofa_three_seat",
"operation": "replace",
"name_ru": "Диван трёхместный",
"name_en": "Three-seat sofa",
"group": "furniture",
"width_cm": 240,
"depth_cm": 90,
"back": "top",
"file": "svg/plan/sofa_three_seat.svg",
"menu_icon": "sofa",
"notes": "Существующий публичный ID House Plan; меняются только рисунок и default-размер нового размещения."
},
{
"id": "sofa_corner_right",
"operation": "replace",
"name_ru": "Угловой диван, правый",
"name_en": "Right sectional sofa",
"group": "furniture",
"width_cm": 260,
"depth_cm": 170,
"back": "top",
"file": "svg/plan/sofa_corner_right.svg",
"menu_icon": "sofa",
"notes": "Существующий публичный ID House Plan; меняются только рисунок и default-размер нового размещения."
},
{
"id": "bed_single",
"operation": "replace",
"name_ru": "Кровать односпальная",
"name_en": "Single bed",
"group": "furniture",
"width_cm": 90,
"depth_cm": 200,
"back": "top",
"file": "svg/plan/bed_single.svg",
"menu_icon": "bed",
"notes": "Существующий публичный ID House Plan; меняются только рисунок и default-размер нового размещения."
},
{
"id": "bed_double",
"operation": "replace",
"name_ru": "Кровать двуспальная",
"name_en": "Double bed",
"group": "furniture",
"width_cm": 160,
"depth_cm": 200,
"back": "top",
"file": "svg/plan/bed_double.svg",
"menu_icon": "bed",
"notes": "Существующий публичный ID House Plan; меняются только рисунок и default-размер нового размещения."
},
{
"id": "nightstand",
"operation": "replace",
"name_ru": "Тумба прикроватная",
"name_en": "Bedside table",
"group": "furniture",
"width_cm": 50,
"depth_cm": 40,
"back": "top",
"file": "svg/plan/nightstand.svg",
"menu_icon": "nightstand",
"notes": "Существующий публичный ID House Plan; меняются только рисунок и default-размер нового размещения."
},
{
"id": "cabinet_tv",
"operation": "replace",
"name_ru": "Тумба под телевизор",
"name_en": "TV cabinet",
"group": "furniture",
"width_cm": 140,
"depth_cm": 45,
"back": "top",
"file": "svg/plan/cabinet_tv.svg",
"menu_icon": "nightstand",
"notes": "Существующий публичный ID House Plan; меняются только рисунок и default-размер нового размещения."
},
{
"id": "cabinet_shoe",
"operation": "replace",
"name_ru": "Тумба для обуви",
"name_en": "Shoe cabinet",
"group": "furniture",
"width_cm": 80,
"depth_cm": 35,
"back": "top",
"file": "svg/plan/cabinet_shoe.svg",
"menu_icon": "nightstand",
"notes": "Существующий публичный ID House Plan; меняются только рисунок и default-размер нового размещения."
},
{
"id": "cabinet_sink",
"operation": "replace",
"name_ru": "Тумба под раковину",
"name_en": "Sink cabinet",
"group": "furniture",
"width_cm": 80,
"depth_cm": 50,
"back": "top",
"file": "svg/plan/cabinet_sink.svg",
"menu_icon": "nightstand",
"notes": "Существующий публичный ID House Plan; меняются только рисунок и default-размер нового размещения."
},
{
"id": "bookshelf",
"operation": "replace",
"name_ru": "Шкаф книжный",
"name_en": "Bookcase",
"group": "furniture",
"width_cm": 100,
"depth_cm": 35,
"back": "top",
"file": "svg/plan/bookshelf.svg",
"menu_icon": "wardrobe",
"notes": "Существующий публичный ID House Plan; меняются только рисунок и default-размер нового размещения."
},
{
"id": "wall_unit",
"operation": "replace",
"name_ru": "Шкаф-стенка",
"name_en": "Wall unit",
"group": "furniture",
"width_cm": 240,
"depth_cm": 45,
"back": "top",
"file": "svg/plan/wall_unit.svg",
"menu_icon": "wardrobe",
"notes": "Существующий публичный ID House Plan; меняются только рисунок и default-размер нового размещения."
},
{
"id": "wardrobe",
"operation": "replace",
"name_ru": "Шкаф гардеробный",
"name_en": "Wardrobe",
"group": "furniture",
"width_cm": 180,
"depth_cm": 60,
"back": "top",
"file": "svg/plan/wardrobe.svg",
"menu_icon": "wardrobe",
"notes": "Существующий публичный ID House Plan; меняются только рисунок и default-размер нового размещения."
},
{
"id": "kitchen_floor",
"operation": "replace",
"name_ru": "Кухонный напольный модуль",
"name_en": "Kitchen floor module",
"group": "furniture",
"width_cm": 60,
"depth_cm": 60,
"back": "top",
"file": "svg/plan/kitchen_floor.svg",
"menu_icon": "kitchen_cabinet",
"notes": "Существующий публичный ID House Plan; меняются только рисунок и default-размер нового размещения."
},
{
"id": "kitchen_floor_corner",
"operation": "replace",
"name_ru": "Кухонный напольный угловой модуль",
"name_en": "Kitchen floor corner module",
"group": "furniture",
"width_cm": 90,
"depth_cm": 90,
"back": "top",
"file": "svg/plan/kitchen_floor_corner.svg",
"menu_icon": "kitchen_cabinet",
"notes": "Существующий публичный ID House Plan; меняются только рисунок и default-размер нового размещения."
},
{
"id": "kitchen_wall",
"operation": "replace",
"name_ru": "Кухонный навесной модуль",
"name_en": "Kitchen wall module",
"group": "furniture",
"width_cm": 60,
"depth_cm": 35,
"back": "top",
"file": "svg/plan/kitchen_wall.svg",
"menu_icon": "kitchen_cabinet",
"notes": "Существующий публичный ID House Plan; меняются только рисунок и default-размер нового размещения."
},
{
"id": "kitchen_wall_corner",
"operation": "replace",
"name_ru": "Кухонный навесной угловой модуль",
"name_en": "Kitchen wall corner module",
"group": "furniture",
"width_cm": 60,
"depth_cm": 60,
"back": "top",
"file": "svg/plan/kitchen_wall_corner.svg",
"menu_icon": "kitchen_cabinet",
"notes": "Существующий публичный ID House Plan; меняются только рисунок и default-размер нового размещения."
},
{
"id": "shelf_floor",
"operation": "replace",
"name_ru": "Стеллаж напольный",
"name_en": "Floor shelving unit",
"group": "furniture",
"width_cm": 100,
"depth_cm": 35,
"back": "top",
"file": "svg/plan/shelf_floor.svg",
"menu_icon": "shelving",
"notes": "Существующий публичный ID House Plan; меняются только рисунок и default-размер нового размещения."
},
{
"id": "shelf_wall",
"operation": "replace",
"name_ru": "Полка настенная",
"name_en": "Wall shelf",
"group": "furniture",
"width_cm": 100,
"depth_cm": 25,
"back": "top",
"file": "svg/plan/shelf_wall.svg",
"menu_icon": "shelving",
"notes": "Существующий публичный ID House Plan; меняются только рисунок и default-размер нового размещения."
},
{
"id": "cooktop_two",
"operation": "replace",
"name_ru": "Варочная панель, 2 конфорки",
"name_en": "Two-burner cooktop",
"group": "appliance",
"width_cm": 30,
"depth_cm": 50,
"back": "top",
"file": "svg/plan/cooktop_two.svg",
"menu_icon": "cooktop",
"notes": "Существующий публичный ID House Plan; меняются только рисунок и default-размер нового размещения."
},
{
"id": "stove",
"operation": "replace",
"name_ru": "Варочная панель, 4 конфорки",
"name_en": "Four-burner cooktop",
"group": "appliance",
"width_cm": 60,
"depth_cm": 60,
"back": "top",
"file": "svg/plan/stove.svg",
"menu_icon": "cooktop",
"notes": "Существующий публичный ID House Plan; меняются только рисунок и default-размер нового размещения."
},
{
"id": "tv",
"operation": "replace",
"name_ru": "Телевизор на подставке",
"name_en": "TV on stand",
"group": "appliance",
"width_cm": 120,
"depth_cm": 28,
"back": "top",
"file": "svg/plan/tv.svg",
"menu_icon": "tv",
"notes": "Существующий публичный ID House Plan; меняются только рисунок и default-размер нового размещения."
},
{
"id": "tv_wall",
"operation": "replace",
"name_ru": "Телевизор на кронштейне",
"name_en": "Wall-mounted TV",
"group": "appliance",
"width_cm": 120,
"depth_cm": 15,
"back": "top",
"file": "svg/plan/tv_wall.svg",
"menu_icon": "tv",
"notes": "Существующий публичный ID House Plan; меняются только рисунок и default-размер нового размещения."
},
{
"id": "toilet",
"operation": "replace",
"name_ru": "Унитаз напольный",
"name_en": "Floor-standing toilet",
"group": "sanitary",
"width_cm": 40,
"depth_cm": 70,
"back": "top",
"file": "svg/plan/toilet.svg",
"menu_icon": "toilet",
"notes": "Существующий публичный ID House Plan; меняются только рисунок и default-размер нового размещения."
},
{
"id": "toilet_built_in",
"operation": "replace",
"name_ru": "Унитаз встроенный",
"name_en": "Built-in toilet",
"group": "sanitary",
"width_cm": 40,
"depth_cm": 55,
"back": "top",
"file": "svg/plan/toilet_built_in.svg",
"menu_icon": "toilet",
"notes": "Существующий публичный ID House Plan; меняются только рисунок и default-размер нового размещения."
},
{
"id": "bathtub",
"operation": "replace",
"name_ru": "Ванна прямоугольная",
"name_en": "Rectangular bathtub",
"group": "sanitary",
"width_cm": 170,
"depth_cm": 75,
"back": "top",
"file": "svg/plan/bathtub.svg",
"menu_icon": "bathtub",
"notes": "Существующий публичный ID House Plan; меняются только рисунок и default-размер нового размещения."
},
{
"id": "bathtub_corner",
"operation": "replace",
"name_ru": "Ванна угловая",
"name_en": "Corner bathtub",
"group": "sanitary",
"width_cm": 140,
"depth_cm": 140,
"back": "top",
"file": "svg/plan/bathtub_corner.svg",
"menu_icon": "bathtub",
"notes": "Существующий публичный ID House Plan; меняются только рисунок и default-размер нового размещения."
},
{
"id": "bidet",
"operation": "replace",
"name_ru": "Биде напольное",
"name_en": "Floor-standing bidet",
"group": "sanitary",
"width_cm": 40,
"depth_cm": 60,
"back": "top",
"file": "svg/plan/bidet.svg",
"menu_icon": "bidet",
"notes": "Существующий публичный ID House Plan; меняются только рисунок и default-размер нового размещения."
},
{
"id": "bidet_built_in",
"operation": "replace",
"name_ru": "Биде встроенное",
"name_en": "Built-in bidet",
"group": "sanitary",
"width_cm": 40,
"depth_cm": 50,
"back": "top",
"file": "svg/plan/bidet_built_in.svg",
"menu_icon": "bidet",
"notes": "Существующий публичный ID House Plan; меняются только рисунок и default-размер нового размещения."
},
{
"id": "kitchen_sink",
"operation": "replace",
"name_ru": "Кухонная мойка одинарная",
"name_en": "Single kitchen sink",
"group": "sanitary",
"width_cm": 60,
"depth_cm": 50,
"back": "top",
"file": "svg/plan/kitchen_sink.svg",
"menu_icon": "kitchen_sink",
"notes": "Существующий публичный ID House Plan; меняются только рисунок и default-размер нового размещения."
},
{
"id": "kitchen_sink_double",
"operation": "replace",
"name_ru": "Кухонная мойка двойная",
"name_en": "Double kitchen sink",
"group": "sanitary",
"width_cm": 90,
"depth_cm": 50,
"back": "top",
"file": "svg/plan/kitchen_sink_double.svg",
"menu_icon": "kitchen_sink",
"notes": "Существующий публичный ID House Plan; меняются только рисунок и default-размер нового размещения."
},
{
"id": "fridge",
"operation": "replace",
"name_ru": "Холодильник",
"name_en": "Refrigerator",
"group": "appliance",
"width_cm": 60,
"depth_cm": 65,
"back": "top",
"file": "svg/plan/fridge.svg",
"menu_icon": "fridge",
"notes": "Существующий публичный ID House Plan; меняются только рисунок и default-размер нового размещения."
},
{
"id": "dishwasher",
"operation": "replace",
"name_ru": "Посудомоечная машина",
"name_en": "Dishwasher",
"group": "appliance",
"width_cm": 60,
"depth_cm": 60,
"back": "top",
"file": "svg/plan/dishwasher.svg",
"menu_icon": "dishwasher",
"notes": "Существующий публичный ID House Plan; меняются только рисунок и default-размер нового размещения."
},
{
"id": "washer",
"operation": "replace",
"name_ru": "Стиральная машина",
"name_en": "Washing machine",
"group": "appliance",
"width_cm": 60,
"depth_cm": 60,
"back": "top",
"file": "svg/plan/washer.svg",
"menu_icon": "washer",
"notes": "Существующий публичный ID House Plan; меняются только рисунок и default-размер нового размещения."
},
{
"id": "dryer",
"operation": "replace",
"name_ru": "Сушильная машина",
"name_en": "Dryer",
"group": "appliance",
"width_cm": 60,
"depth_cm": 60,
"back": "top",
"file": "svg/plan/dryer.svg",
"menu_icon": "dryer",
"notes": "Существующий публичный ID House Plan; меняются только рисунок и default-размер нового размещения."
},
{
"id": "ac",
"operation": "replace",
"name_ru": "Кондиционер",
"name_en": "Air conditioner",
"group": "appliance",
"width_cm": 90,
"depth_cm": 25,
"back": "top",
"file": "svg/plan/ac.svg",
"menu_icon": "air_conditioner",
"notes": "Существующий публичный ID House Plan; меняются только рисунок и default-размер нового размещения."
},
{
"id": "water_heater",
"operation": "replace",
"name_ru": "Бойлер",
"name_en": "Water heater",
"group": "appliance",
"width_cm": 45,
"depth_cm": 45,
"back": "top",
"file": "svg/plan/water_heater.svg",
"menu_icon": "boiler",
"notes": "Существующий публичный ID House Plan; меняются только рисунок и default-размер нового размещения."
},
{
"id": "shower",
"operation": "replace",
"name_ru": "Душ",
"name_en": "Shower",
"group": "sanitary",
"width_cm": 90,
"depth_cm": 90,
"back": "top",
"file": "svg/plan/shower.svg",
"menu_icon": "shower",
"notes": "Существующий публичный ID House Plan; меняются только рисунок и default-размер нового размещения."
},
{
"id": "sink",
"operation": "replace",
"name_ru": "Раковина",
"name_en": "Sink",
"group": "sanitary",
"width_cm": 60,
"depth_cm": 45,
"back": "top",
"file": "svg/plan/sink.svg",
"menu_icon": "sink",
"notes": "Существующий публичный ID House Plan; меняются только рисунок и default-размер нового размещения."
},
{
"id": "stairs",
"operation": "replace",
"name_ru": "Лестница",
"name_en": "Stairs",
"group": "other",
"width_cm": 100,
"depth_cm": 280,
"back": "top",
"file": "svg/plan/stairs.svg",
"menu_icon": "stairs",
"notes": "Существующий публичный ID House Plan; меняются только рисунок и default-размер нового размещения."
},
{
"id": "fireplace",
"operation": "replace",
"name_ru": "Камин",
"name_en": "Fireplace",
"group": "other",
"width_cm": 120,
"depth_cm": 40,
"back": "top",
"file": "svg/plan/fireplace.svg",
"menu_icon": "fireplace",
"notes": "Существующий публичный ID House Plan; меняются только рисунок и default-размер нового размещения."
},
{
"id": "plant",
"operation": "replace",
"name_ru": "Растение",
"name_en": "Plant",
"group": "other",
"width_cm": 40,
"depth_cm": 40,
"back": "top",
"file": "svg/plan/plant.svg",
"menu_icon": "plant",
"notes": "Существующий публичный ID House Plan; меняются только рисунок и default-размер нового размещения."
},
{
"id": "rug",
"operation": "replace",
"name_ru": "Ковёр",
"name_en": "Rug",
"group": "other",
"width_cm": 200,
"depth_cm": 140,
"back": "top",
"file": "svg/plan/rug.svg",
"menu_icon": "rug",
"notes": "Существующий публичный ID House Plan; меняются только рисунок и default-размер нового размещения."
},
{
"id": "computer",
"operation": "add",
"name_ru": "Компьютер",
"name_en": "Computer",
"group": "appliance",
"width_cm": 120,
"depth_cm": 60,
"back": "top",
"file": "svg/plan/computer.svg",
"menu_icon": "computer",
"notes": "Новый ID для расширения встроенной библиотеки House Plan."
},
{
"id": "hood",
"operation": "add",
"name_ru": "Вытяжка",
"name_en": "Range hood",
"group": "appliance",
"width_cm": 60,
"depth_cm": 50,
"back": "top",
"file": "svg/plan/hood.svg",
"menu_icon": "hood",
"notes": "Новый ID для расширения встроенной библиотеки House Plan."
},
{
"id": "oven",
"operation": "add",
"name_ru": "Духовка",
"name_en": "Oven",
"group": "appliance",
"width_cm": 60,
"depth_cm": 60,
"back": "top",
"file": "svg/plan/oven.svg",
"menu_icon": "oven",
"notes": "Новый ID для расширения встроенной библиотеки House Plan."
},
{
"id": "cactus",
"operation": "add",
"name_ru": "Кактус",
"name_en": "Cactus",
"group": "other",
"width_cm": 70,
"depth_cm": 120,
"back": "top",
"file": "svg/plan/cactus.svg",
"menu_icon": "plant",
"notes": "Новый ID для расширения встроенной библиотеки House Plan."
}
]
}