Skip to content

[Product Gate] D2 — журнал решений по новому интерфейсу #113

Open

Description

@sunpole

D2 — живой журнал продуктовых решений

Этот issue фиксирует ход продуктового интервью по переработке интерфейса design/next-ui-d.

Статус: Product Gate / уточнение требований.
Код и production solver не изменяются до явного подтверждения владельца:
Общее понимание достигнуто. Можно переходить к спецификации и реализации.

Основа дизайна

  • Сохраняется визуальная основа Concept D2: тёмный графитовый интерфейс, жёлтый акцент, голубая живая информация, нижняя навигация.
  • Основной сценарий — операторская работа на телефоне шириной 360–390 px; затем desktop/tablet.
  • Текущая ветка прототипа: design/next-ui-concept-d.
  • Текущий D2 является демонстрационным прототипом с упрощёнными формулами, а не интеграцией production solver.

Верхняя панель приложения

  • Высота строго 26 px, панель закреплена сверху.
  • В одной строке: выбранный формат печатного листа, количество заданий, пластин и листов.
  • Счётчики двухстрочные: крупное число сверху, подписи ЗАДАНИЯ, ПЛАСТИНЫ, ЛИСТЫ снизу.
  • Машина не показывается, но пока остаётся в данных/логике.
  • Справа отдельные кнопки: +, TXT, настройки; настройки справа.
  • + без маркера раскрытия; TXT и настройки с маркером.
  • Панель не меняет высоту при выборе строки.

Пресеты печатного листа

  • Постоянная панель пресетов удаляется.
  • Нажатие на оранжевую кнопку текущего пресета открывает overlay под верхней панелью без сдвига страницы.
  • Кнопки переносятся слева направо; выбор применяется и закрывает overlay.
  • Закрытие также по клику вне панели и Esc.
  • Есть Свой формат.
  • Текущий набор: 616×446, 616×466, 636×448, 646×466, 650×313, 716×326, 716×336, 716×516, 500×350, 450×320.

Универсальный маркер раскрытия

  • Название: Маркер раскрытия.
  • Только на элементах, которые открывают/закрывают скрытую поверхность.
  • Круг 2×2 px, без рамки, свечения и тени; расположен сверху справа с отступом около 4–5 px.
  • Закрыто: мягко мигающий красный; открыто: мягко мигающий зелёный.
  • При prefers-reduced-motion — статичный.
  • Одновременно открыта только одна поверхность; новая закрывает предыдущую.

Таблица заказов

  • Отдельный блок «Быстрый заказ» удаляется.
  • Первая строка под заголовком — редактируемая строка нового заказа.
  • Видов удалено: каждый вид является отдельным заказом.
  • Термин везде: Красочность.
  • Колонки: Название, Формат, Ширина, кнопка перестановки сторон, Высота, Красочность, Выпуск, Страниц, Тираж, копирование, удаление.
  • Заголовок таблицы — 6 px.
  • Обычная строка — 8 px.
  • Активная строка — 16 px, чёрная; одновременно активна только одна строка.
  • Столбцы занимают всю ширину. Узкие столбцы подстраиваются под содержимое, название забирает остаток.
  • Копирование и удаление видимы всегда; кликабельна вся ячейка действия.
  • Нажатие действия не обязано предварительно выбирать строку.

Новая строка и кнопка +

  • Новые заказы создаются только сверху, сразу под заголовком.
  • Начальное состояние строки полностью пустое: название пустое, формат Не выбран, ширина/высота пустые, красочность и выпуск не выбраны, страницы/тираж пустые.
  • Название необязательно; все остальные поля обязательны и должны быть валидны.
  • Пока строка неполная, + неактивен.
  • После + строка становится обычным заказом, а сверху создаётся новая пустая чёрная строка; фокус переходит в название.
  • Повторное нажатие не создаёт несколько пустых строк.
  • Выбор существующего заказа очищает незавершённую верхнюю строку и отключает +.
  • Незавершённая строка восстанавливается после перезагрузки, если пользователь не выбрал другой заказ намеренно.

Автосохранение

  • Изменения существующего заказа сохраняются сразу, без кнопки «Сохранить».
  • Версионированный ключ, например uimposition.workspace.v1.
  • У каждого заказа стабильный id.
  • Сохраняются: выбранный пресет, заказы, незавершённая верхняя строка, счётчики и служебная последовательность.
  • Схема проверяется при восстановлении; повреждённые данные не должны ломать приложение.
  • Ввод сохраняется с debounce около 150 ms и принудительно перед закрытием страницы.

Удаление и отмена

  • Удаление немедленное, без модального подтверждения.
  • Снизу около 5 секунд: Заказ удалён · Вернуть.
  • Отменить можно только последнее удаление.
  • Восстанавливается прежняя позиция, данные и тот же id.
  • После удаления активной становится верхняя пустая строка.
  • После отмены активной становится восстановленная строка.

Копирование

  • Копирование выполняется сразу и не требует предварительного выбора строки.
  • Копия вставляется непосредственно под оригиналом, получает новый стабильный id и становится активной.
  • Верхняя строка очищается, + отключается.
  • Имена: Визитка → Визитка 2 → Визитка 3.
  • При копировании Визитка 2 используется база Визитка и следующий номер.
  • Удалённые номера не используются повторно.
  • Максимальный когда-либо использованный номер сохраняется в localStorage.

Название заказа

  • Название необязательно.
  • Пустому названию автоматически присваивается Заказ 1, Заказ 2 и далее.
  • Номер не повторяется после удаления и сохраняется между запусками.
  • Пользовательское название имеет приоритет.

Формат изделия и размеры

  • Варианты: A4, A5, A6, A7, Произвольный.
  • Стандарт отображается крупно (A4) и мелко (210×297).
  • Произвольный формат отображается крупно размером и мелко подписью произвольный.
  • Стандартные размеры по умолчанию книжные:
    • A4 — 210×297;
    • A5 — 148×210;
    • A6 — 105×148;
    • A7 — 74×105.
  • Выбор стандарта заполняет ширину и высоту.
  • Кнопка между шириной и высотой только переставляет стороны: 90×50 ↔ 50×90; она не задаёт голову/ноги изделия.
  • При ручном вводе стандарт распознаётся автоматически только при точном совпадении, включая повёрнутый вариант.
  • Никаких допусков: 210×297 — A4, 209×297 — произвольный.
  • Точность ширины и высоты — до 0,01 мм.
  • Можно вводить точку и запятую; точка автоматически превращается в запятую.
  • Лишние нули не показываются: 90,00 → 90, 90,50 → 90,5, 90,05 остаётся 90,05.

Красочность

  • Быстрые варианты: 1+0, 1+1, 4+0, 4+1, 4+4, Ручной ввод.
  • Ручной формат: число+число, пробелы допускаются и автоматически удаляются.
  • Ведущие нули удаляются: 04+01 → 4+1.
  • Первая сторона: от 1 до 20.
  • Вторая сторона: от 0 до 20.
  • Минимум 1+0; 0+0 и любые варианты с нулевой первой стороной запрещены.

Выпуск

  • Быстрые варианты: 0, 2, 3, 5 мм, Ручной ввод.
  • Диапазон: от 0 до 20 мм.
  • Итоговая точность и шаг: 0,1 мм.
  • Точка и запятая допускаются; отображается запятая.
  • Значение округляется до ближайшей десятой во время ввода и повторно при Enter/выходе из поля.
  • Пример: 2,55 → 2,6.
  • Значения выше 20 автоматически ограничиваются до 20; ниже 0 — до 0.
  • Лишние нули не показываются.

Страницы и тираж

  • Страниц: только целое число от 1 и выше.
  • Тираж: только целое число от 1 и выше.
  • Тираж можно вводить с пробелами и без.
  • В интерфейсе цифры автоматически группируются по три: 12500 → 12 500, 1000000 → 1 000 000.
  • В расчёте хранится целое число без разделителей.
  • Ведущие нули удаляются.

Вместимость изделия

  • Максимальный размер динамический и зависит от выбранной печатной области после полей/допусков.
  • Проверяется итоговый размер изделия вместе с выпусками: width + 2×bleed, height + 2×bleed.
  • Заказ допустим, если помещается прямо или после производственного поворота на 90°.
  • При этом исходные ширина/высота заказа не меняются автоматически.
  • Во время заполнения таблицы не показывается отметка «помещается только с поворотом»; это выводится только в результатах монтажа.

Направление экземпляров на монтаже

  • В таблице заказов нет определения головы/ног и нет четырёх направлений.
  • Четыре направления существуют только в рассчитанных монтажах: ↑, →, ↓, ←.
  • На каждом экземпляре изделия обязательно показывается своё направление, чтобы допечатник понимал поворот файла.
  • Крупное название/номер позиции (A1) находится по центру и всегда читается относительно всего печатного листа — не поворачивается вместе с изделием.
  • Стрелка находится рядом с текстом и её положение всегда совпадает с направлением:
    • ↑ над текстом;
    • → справа;
    • ↓ под текстом;
    • ← слева.
  • Обозначения и стрелки в PDF — чёрные векторные элементы, пригодные для чёрно-белой печати.

Продолжение журнала

Следующие ответы и решения добавляются комментариями в этот issue, а после завершения Product Gate будут собраны в формальную спецификацию и задачи реализации.

Activity

  1. sunpole commented on Aug 2, 2026

    @sunpole
    OwnerAuthor

    Решение после вопроса 69 — обозначение экземпляра на монтаже

    В центре каждого экземпляра показывается не название заказа, а связка:

    номер заказа.номер страницы

    Пример: 01.1 — заказ 01, страница 1.

    Правила, уже согласованные ранее, сохраняются:

    • обозначение находится крупно по центру;
    • всегда читается относительно всего печатного листа и не поворачивается вместе с изделием;
    • стрелка направления размещается рядом и всегда совпадает с направлением (↑ сверху, → справа, ↓ снизу, ← слева);
    • в PDF обозначения и стрелки выводятся чёрными векторными элементами.

    Следующий уточняющий вопрос: использовать ли ведущий ноль у номера заказа (01.1) или выводить без него (1.1).

  2. sunpole commented on Aug 2, 2026

    @sunpole
    OwnerAuthor

    Решение по обозначению экземпляра на монтаже

    Центральное обозначение выводится без ведущего нуля в формате:

    номер заказа.номер страницы

    Примеры:

    • 1.1 — заказ 1, страница 1;
    • 1.2 — заказ 1, страница 2;
    • 10.1 — заказ 10, страница 1.

    Обозначение остаётся крупным, горизонтальным и читаемым относительно всего печатного листа. Название заказа внутри экземпляра не показывается.

  3. sunpole commented on Aug 2, 2026

    @sunpole
    OwnerAuthor

    Решение по центральному обозначению экземпляра

    Вместо номера заказа используется сокращение от названия заказа:

    первые 4 символа названия.номер страницы

    Примеры:

    • Визи.1 — заказ «Визитка», страница 1;
    • Лист.2 — заказ «Листовка», страница 2;
    • Букл.4 — заказ «Буклет», страница 4.

    Название/обозначение располагается крупно по центру экземпляра и всегда читается относительно всего печатного листа. Стрелка поворота остаётся рядом с обозначением и размещается со стороны своего направления. Если название короче четырёх символов, используется оно целиком.

  4. sunpole commented on Aug 2, 2026

    @sunpole
    OwnerAuthor

    Решение по обозначению экземпляров — верхний регистр

    Утверждено:

    • центральное обозначение строится из первых четырёх символов названия заказа и номера страницы;
    • четыре символа автоматически переводятся в верхний регистр;
    • формат: ВИЗИ.1, ЛИСТ.2, БУКЛ.4;
    • обозначение всегда остаётся горизонтальным и читаемым относительно всего печатного листа;
    • стрелка направления располагается рядом и не изменяет ориентацию текста.
  5. sunpole commented on Aug 2, 2026

    @sunpole
    OwnerAuthor

    Решение по совпадающим четырёхсимвольным обозначениям

    Владелец отклонил добавление цифрового суффикса (ВИЗИ1, ВИЗИ2). При совпадении первых четырёх символов нужно сохранять длину обозначения в 4 символа и заменять четвёртый символ, чтобы получить различимые коды. Точное правило выбора заменяющего символа уточняется следующим вопросом продуктового интервью.

  6. sunpole commented on Aug 2, 2026

    @sunpole
    OwnerAuthor

    Решение: устранение совпадений обозначений на монтаже

    Если первые 4 символа названия у нескольких заказов совпадают, обозначение расширяется до 5 символов:

    • сохраняются первые 3 буквы названия;
    • 4-й и 5-й символы заменяются двухзначным номером 01, 02, 03 и далее;
    • после точки указывается номер страницы.

    Примеры:

    • первый заказ с базой «Виз…» → ВИЗ01.1;
    • второй совпадающий заказ → ВИЗ02.1;
    • следующая страница второго заказа → ВИЗ02.2.

    Обозначение остаётся крупным, чёрным, векторным и читаемым относительно всего печатного листа.

  7. sunpole commented on Aug 2, 2026

    @sunpole
    OwnerAuthor

    Коррекция и готовность стартовой страницы

    • Предыдущая трактовка правила коллизий обозначений (ВИЗ01.1, ВИЗ02.1) как логики только при совпадении признана неверной и не считается окончательно утверждённой.
    • Эта деталь не блокирует разработку стартовой страницы и будет уточнена позже вместе с экраном монтажей.
    • По стартовой странице блокирующих неясностей больше нет: можно переходить к формальной спецификации и реализации отдельного интерактивного прототипа на основе D2.
    • Производственный solver и экраны результатов монтажа пока не затрагиваются.
    • Код репозитория по-прежнему не изменён; это обновление только журнала Product Gate.
  8. sunpole commented on Aug 2, 2026

    @sunpole
    OwnerAuthor

    Уточнение к вопросу 75 и переход к этапам

    Исправление владельца:

    • Суффикс 01, 02, 03 применяется только при совпадении первых четырёх символов у разных заказов.
    • Без совпадения используется обычное обозначение из первых четырёх символов названия в верхнем регистре: ВИЗИ.1.
    • При совпадении первые три символа сохраняются, а позиции 4–5 заменяются двухзначным номером группы: ВИЗ01.1, ВИЗ02.1.

    Разделение оставшихся продуктовых вопросов

    1. Стартовая страница / таблица заказов — блокирующих вопросов больше нет. Остались только проверки удобства на интерактивном прототипе: ширины колонок, работа клавиатуры, сообщения ошибок, поведение TXT-импорта и мобильная плотность.
    2. Варианты расчёта и solver — правила оптимизации, критерии выбора плана, допустимый перерасход, формы/пластины, смешанные тиражи.
    3. Монтажи — раскладка, обороты, ориентации, нумерация, стрелки, подписи, несколько форм и страниц.
    4. Печать и производство — последовательность форм, тиражи форм, приладка, перепечатка, производственный отчёт.
    5. Вывод и экспорт — PDF-схемы, отчёт PDF, TXT/JSON, размеры/масштаб, чёрно-белая печать.
    6. Настройки и данные — пользовательские пресеты, импорт/экспорт рабочего состояния, восстановление, миграции localStorage.
    7. Проверка и релиз — мобильные/desktop-тесты, accessibility, браузеры, документация, релизный процесс.

    Решение по процессу: не продолжать бесконечный опрос по одному вопросу. Для следующих разделов сначала готовить групповой проект решения с рекомендуемыми значениями, а владельцу выносить только реальные блокирующие развилки.

  9. sunpole commented on Aug 2, 2026

    @sunpole
    OwnerAuthor

    Переход к реализации стартовой страницы

    Владелец проекта запросил создание полного кода новой стартовой страницы по согласованным решениям. Перед началом изменения файлов остаётся формальный Product Gate из AGENTS.md: требуется явная фраза владельца

    Общее понимание достигнуто. Можно переходить к спецификации и реализации.

    После неё работа перейдёт к спецификации, отдельной ветке, реализации HTML/CSS/JS, проверкам на 360/390 px и desktop, затем PR.

  10. sunpole commented on Aug 2, 2026

    @sunpole
    OwnerAuthor

    Уточнение: D3 — рабочая стартовая страница

    Владелец уточнил целевой подход:

    • предварительно подготовленный вариант D3 является основой новой стартовой страницы;
    • D3 не остаётся отдельным декоративным макетом;
    • интерфейс D3 нужно связать с существующими функциями, модулями и скриптами проекта uImposition;
    • существующую расчётную и производственную логику не переписываем без необходимости: сначала определяем точки подключения и адаптер между D3 и текущим ядром;
    • визуальные решения, согласованные в Product Gate, применяются к D3;
    • дальнейшая реализация должна дать полноценную рабочую стартовую страницу, а не ещё один изолированный прототип.

    Следующий технический шаг: аудит фактической структуры текущего приложения и карта интеграции D3 → существующие функции/скрипты.

  11. sunpole commented on Aug 2, 2026

    @sunpole
    OwnerAuthor

    Точное понимание D3 после проверки main

    Проверено фактическое состояние GitHub: в main уже существует рабочий R3-маршрут /app/, объединённый ранее, с подключёнными state/persistence, product-row model, uniform calculation adapter и PDF export.

    Поэтому целевая работа трактуется так:

    • D3 — выбранная визуальная и операторская версия стартовой страницы;
    • R3 — уже существующий технический рабочий слой проекта;
    • D3 не создаётся как отдельная демонстрация и не заменяет расчётное ядро;
    • D3 внедряется в /app/index.html, /app/app.css, /app/app.js как новая оболочка существующего рабочего маршрута;
    • интерфейс D3 подключается к:
      • src/sheet-press-presets.js;
      • src/application-state.js;
      • src/application-state-persistence.js;
      • src/local-state-repository.js;
      • src/application-product-rows.js;
      • src/operator-workspace-calculation.js;
      • src/operator-workspace-export.js;
      • существующим PDF renderers;
    • production formulas, solver и проверенный PDF pipeline не переписываются без отдельной причины;
    • задача первой страницы — заменить представление и пользовательский ввод, сохранив существующую рабочую функциональность R3.

    Иными словами: D3 = новый интерфейс поверх уже работающих функций и скриптов R3.

  12. sunpole commented on Aug 2, 2026

    @sunpole
    OwnerAuthor

    Product Gate закрыт — переход к реализации D3

    Владелец явно подтвердил:

    Общее понимание достигнуто. Можно переходить к спецификации и реализации.

    Полная спецификация опубликована в #114. Реализация идёт одним vertical slice: новая стартовая table-first страница D3 поверх существующих R2 application state/repositories, product-row actions и R3 calculation pipeline. Production solver, формулы и PDF-алгоритмы в этом slice не меняются.

    Следующие изменения выполняются в отдельной ветке и draft PR с TDD на pure D3 seam и Chromium evidence для /app/.

  13. sunpole commented on Aug 3, 2026

    @sunpole
    OwnerAuthor

    Дополнение: отдельный Full HD-режим D3

    По решению владельца компактная мобильная версия не должна просто растягиваться на рабочем мониторе. Для калькулятора /app/ добавлена отдельная desktop-композиция для экранов Full HD-класса.

    Утверждённая граница:

    • mobile/compact сохраняет размеры 6 / 8 / 16 px для заголовка, обычной и активной строки;
    • desktop-режим включается от 1600×900 и рассчитан прежде всего на 1920×1080;
    • верхняя панель остаётся строго 26 px;
    • desktop использует отдельные ширины колонок, поля по краям, увеличенные шрифты и рабочие зоны;
    • заголовок таблицы 24 px, обычная строка 24 px, активная строка 38 px;
    • расширены overlay-поверхности, экраны вариантов и схемы;
    • production solver и формулы не изменяются.

    Реализация и Chromium evidence находятся в draft PR #115. Exact head проверки: c585253f0d61584ac02231d3af3c78608d1197ae.

  14. sunpole commented on Aug 3, 2026

    @sunpole
    OwnerAuthor

    Решение владельца — увеличенный desktop D3 без изменения мобильного режима

    Для рабочих ПК утверждён отдельный крупный режим интерфейса. Он включается только медиазапросом @media (min-width: 1600px) and (min-height: 900px); базовые мобильные размеры 360/390 px и их стили не меняются.

    Реализованные Full HD-метрики:

    • верхняя панель — 44 px;
    • заголовок таблицы — 34 px;
    • обычная строка и неактивный черновик — 32 px;
    • активная строка — 48 px;
    • пропорционально увеличены счётчики, кнопки, поля, раскрывающиеся панели, варианты, схема, диалоги и нижняя навигация.

    Exact head: d54700b12f8b77987cb145d2d7f9f966a081b920.

    Проверки GitHub Actions:

    • Quality checks — success;
    • Chromium/PDF — 12/12 success;
    • в одном прогоне сохранены сценарии 360/390 px и пройден новый точный сценарий 1920×1080 без горизонтального overflow.

    Artifact: 8852635998, digest sha256:59b360f998c8949e5638bc9cc10dbd9b5e617503baa5e7194400b4db788e4cb7.

  15. sunpole commented on Aug 3, 2026

    @sunpole
    OwnerAuthor

    Уточнение владельца: фирменный логотип в шапке

    Владелец заметил отсутствие логотипа в новой D3-шапке. Решение: вернуть существующий знак uI; на мобильном показывать компактную марку, на Full HD — марку с названием uImposition.

    Исправление выполнено в PR #115 на head 0733777ffd72516b1e17051ce51f01fa6bbf4779. Мобильный вид 360/390 px сохранён, горизонтального overflow нет; Quality checks и Chromium/PDF workflow прошли успешно.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions