PPlanMe

PlanMe · Designers

Покроковий процес

Десять кроків від чистого артборда до переданого пакета: налаштування документа, токени, денні аркуші, колір, шрифти, експорт, назва файлу і перевірка. Робіть їх по порядку — кожен наступний спирається на попередній.

Крок 1. Налаштуйте документ

Малюйте в точних пропорціях паперу — по одному артборду на файл. Полотно задавайте в міліметрах, а viewBox має збігатися з цими ж числами.

  1. 1Створіть документ із одним артбордом потрібного розміру (таблиця нижче).
  2. 2У налаштуваннях документа виберіть одиниці — міліметри.
  3. 3Переконайтеся, що артборд один. Другий артборд зламає імпорт.
  4. 4Тримайте виліт усередині полотна: сторінка обрізається рівно по цьому прямокутнику.
ФорматРозмір (мм)viewBox
A4210 × 2970 0 210 297
A5148 × 2100 0 148 210
Letter215.9 × 279.40 0 215.9 279.4
<svg xmlns="http://www.w3.org/2000/svg"
     width="210mm" height="297mm" viewBox="0 0 210 297"
     preserveAspectRatio="xMidYMid meet">

A4 і A5 мають однакові пропорції (1:√2), тому файл A4 автоматично використовується і для A5 — масштабується. Окремий файл потрібен лише для Letter. Тобто два файли на шаблон, а не три.

Крок 2. Намалюйте макет

Малюйте так, ніби це готова сторінка на конкретний місяць: реальна сітка, реальні заголовки, реальні лінійки. Тільки замість самого тексту ви поставите токени на наступному кроці.

Для сітки місяця намалюйте 42 текстові елементи — шість рядів по сім. Вирівнювання під потрібний день тижня і порожні клітинки на початку місяця PlanMe робить сам.

  1. 1Розмістіть фон, рамки, лінійки та декор.
  2. 2Створіть окремий текстовий об'єкт для кожного місця, де з'являтиметься змінний текст.
  3. 3Задайте кожному текстовому об'єкту фінальний кегль, накреслення й вирівнювання.
  4. 4Перевірте найдовший варіант підпису з маніфесту — чи вміщається він.

Крок 3. Поставте токени

Токен має вигляд [family.key] і пишеться або в тексті, або в значенні будь-якого атрибута. Під час рендеру кожен токен замінюється на реальне значення.

  1. 1Замініть змінний текст на відповідний токен (довідник — нижче на цій сторінці).
  2. 2Друкуйте токен одним рухом, не редагуючи його посередині.
  3. 3Виділіть увесь текстовий об'єкт і задайте стиль одразу всьому — не частинами.
  4. 4Ніколи не переводьте текст у криві: PlanMe має підставити в нього значення.
<rect fill="[color.primary]"/>
<text style="fill:[color.text];font-family:[font.heading]">
  [month.name] [year]
</text>

Невідомий токен замінюється на порожнечу — без попередження. Одруківка на кшталт [colour.primary] просто зітре текст. Тому крок 8 не пропускайте.

Крок 4. Денні аркуші — головна хитрість

Тиждень розкладається на ціле число аркушів за рахунок того, що вихідні займають половину висоти звичайного дня. Звідси п'ять денних шаблонів.

Найважливіше: аркуш нумерує свої дні ВІД СЕБЕ, а не від початку тижня. [sheet.date.0] — це той день, з якого починається саме цей аркуш. Тому одне креслення day-2-up обслуговує і понеділок+вівторок, і середу+четвер.

  1. 1Використовуйте [sheet.*] на денних аркушах — ніколи [week.day.N].
  2. 2Нумеруйте слоти від нуля згори вниз.
  3. 3У day-1-plus-2 і day-2-plus-2 останні два дні — це вихідні; дайте їм приблизно половину висоти решти.
  4. 4Можна намалювати більше слотів, ніж потрібно: зайві стануть порожніми самі.
ШаблонДнів на аркушіАркушів на тиждень
day-1-up1Mon 7 · Sun 7
day-2-up2Mon 2 · Sun 3
day-3-up3Mon 1 · Sun 2
day-1-plus-23Mon 1 · Sun —
day-2-plus-24Mon 1 · Sun —
day-1-plus-notes1Mon — · Sun 1

[week.day.N] на денному аркуші покаже правильну дату лише на першому аркуші тижня, а далі — чужі числа. Це найпоширеніша помилка в цій системі.

Крок 5. Колір

Два робочі підходи — обирайте під пакет.

  1. 1Найпростіше: візьміть hex-значення палітри цього пакета з маніфесту (stylePacks[].palette) і малюйте прямо ними. Для чорно-білого пакета це майже завжди правильний вибір — там лише чорний, сірий і білий.
  2. 2Якщо одне креслення має обслуговувати кілька пакетів: після експорту відкрийте .svg у текстовому редакторі й замініть кожен hex на відповідний [color.*]. В Illustrator токен у піпетку не введеш.

Для внутрішніх сторінок не використовуйте світло-сірий тонше за 0,5 pt — домашній лазерний принтер його просто не надрукує.

Крок 6. Шрифти

Системні стеки працюють без жодних дій. Якщо пакет використовує власний шрифт, покладіть файл .woff2 у теку fonts/ і опишіть його в pack.json.

  1. 1Складіть шрифт у fonts/ поруч зі своїми SVG.
  2. 2Додайте його до масиву fonts у pack.json.
  3. 3У самому SVG посилайтеся на нього через звичайний font-family або через [font.heading].
  4. 4Переконайтеся, що ліцензія шрифту дозволяє вбудовування у веб і в PDF.
{
  "slug": "mono-serif",
  "name": "Serif",
  "fonts": [
    { "family": "MyDisplay", "weight": 700, "file": "MyDisplay.woff2" }
  ]
}

Крок 7. Експорт з Illustrator

Налаштування експорту важливіші, ніж здається: половина проблем із артворком починається саме тут.

  1. 1File → Export → Export As… → формат SVG.
  2. 2Styling: Presentation Attributes. НЕ Internal CSS — інакше кольори не підмінятимуться.
  3. 3Font: SVG (жодних Convert to outlines).
  4. 4Images: Embed.
  5. 5Object IDs: Layer Names. Decimal: 2.
  6. 6Minify — вимкнено. Responsive — вимкнено.

Internal CSS видно за класами на кшталт .st0 у файлі. Перевірка з кроку 8 ловить це одразу.

Крок 8. Назвіть файл

Назва файлу — це не опис, а адреса. За нею PlanMe розуміє, яку сторінку і в якому форматі ви намалювали.

  1. 1Формат назви: <ключ-шаблону>.<формат>.svg — наприклад month-calendar.A4.svg.
  2. 2Ключ беріть зі списку внизу цієї сторінки, символ у символ.
  3. 3Формат — рівно A4, A5 або Letter, з великої літери.

Файл із помилкою в ключі імпортується мовчки й ніколи не відрендериться. Це відома гостра грань — саме тому є перевірка.

Крок 9. Перевірте перед відправкою

Перевірка знаходить усе, що система інакше проковтне мовчки: невідомі токени, Internal CSS, текст у кривих, токени, розірвані на кілька tspan, неправильні пропорції артборда.

  1. 1Покладіть файли у storage/assets/<slug>/.
  2. 2Запустіть перевірку (команда нижче).
  3. 3Виправте все, що вона позначила як помилку. Попередження — на ваш розсуд.
  4. 4Надішліть один готовий файл на початку роботи, а не двадцять наприкінці.
npm run assets:check

Крок 10. Передайте пакет

Одна тека на пакет. pack.json потрібен лише якщо пакет має власні шрифти — інакше ми його додамо самі.

<pack-slug>/
  pack.json
  cover.A4.svg
  cover.Letter.svg
  month-calendar.A4.svg
  ...
  fonts/
    MyDisplay.woff2

Slug теки має точно збігатися зі slug набору зі списку в розділі «Набори стилів».

Довідник токенів

Три правила, які варто знати до початку: токен не можна вкладати в токен; усередині токена не буває дужок; підставлені значення екрануються для XML, тому шрифтові стеки повертаються з &#39; замість апострофів — це нормально.

ТокенЩо підставляється
[color.primary] … [color.line]Кольори палітри пакета: primary, accent, background, surface, text, muted, line.
[font.heading] / [font.body]Шрифтові стеки пакета — заголовковий і основний.
[themeName] / [motif]Назва пакета та його короткий декоративний мотив.
[title] / [subtitle] / [heading]Назва планера, підзаголовок і заголовок сторінки з налаштувань користувача.
[year]Рік планера.
[label.*]Статичні підписи, перекладені на мову планера. Повний список — нижче.
[month.name] / [month.short]Назва місяця сторінки, повна й скорочена.
[month.year]Рік, до якого належить місяць — діапазон може охоплювати два роки.
[month.days]Кількість днів у місяці сторінки.
[weekday.long.N] / [weekday.short.N]Заголовки днів тижня 0–6, повернуті під початок тижня користувача.
[grid.0] … [grid.41]Сітка місяця, шість рядів по сім. Клітинки до 1-го і після останнього дня — порожні.
[monthday.1] … [monthday.31]Номер дня, якщо він існує цього місяця, інакше порожньо: рядок із 31 слота сам скорочується в лютому.
[day.1] … [day.31]Літеральні цифри 1–31. НЕ календарні — лише для фіксованих заголовків стовпців.
[week.day.N] / [week.date.N] / [week.iso.N]День N (0–6) тижня сторінки: число, повна дата, ISO-дата.
[week.range] / [week.number] / [week.month]Заголовки тижня: діапазон, номер за ISO, назва місяця першого дня.
[sheet.date.N] / [sheet.day.N] / [sheet.iso.N]День N ЦЬОГО аркуша — нумерація від аркуша, не від тижня. Слоти понад місткість аркуша — порожні.
[sheet.weekday.long.N] / [sheet.weekday.short.N]Назва дня тижня для дня N цього аркуша.
[sheet.range] / [sheet.count]Діапазон дат аркуша та кількість днів на ньому.
[date] / [date.day] / [date.weekday] / [date.iso]Перший день аркуша: повна дата, число, день тижня, ISO.
[config.<key>]Будь-яке значення з конфігурації сторінки; порожньо, якщо його немає.

Часті помилки

  • Текст переведено в криві. PlanMe нема куди підставляти значення — сторінка залишиться з вашим тестовим текстом назавжди.
  • Токен розірвано на кілька tspan. Так буває, якщо редагувати текст посередині або застосувати стиль до частини рядка. [month.name] перетворюється на [mon + th.name] і не спрацьовує.
  • Експорт з Internal CSS. Кольори перестають підмінюватися під пакет.
  • [week.day.N] на денному аркуші замість [sheet.*]. Дати збігаються лише на першому аркуші тижня.
  • Одруківка в токені. Значення зникає без жодного попередження.
  • Два артборди в одному файлі. Імпортується лише перший.
  • Жорстко вписаний рік або назва місяця. Файл працюватиме рівно один рік.

Усі токени [label.*]

Це статичні підписи, які PlanMe перекладає сам. Пишіть [label.notes], а не «Нотатки» — інакше сторінка залишиться англійською в українському планері.

КлючТокен
amount[label.amount]
atAGlance[label.atAGlance]
bed[label.bed]
budget[label.budget]
career[label.career]
dailyPlan[label.dailyPlan]
dailyTracker[label.dailyTracker]
date[label.date]
description[label.description]
edition[label.edition]
expenses[label.expenses]
finance[label.finance]
freeReflection[label.freeReflection]
goals[label.goals]
gratefulFor[label.gratefulFor]
gratitude[label.gratitude]
habitTracker[label.habitTracker]
health[label.health]
healthWellness[label.healthWellness]
hours[label.hours]
income[label.income]
intentions[label.intentions]
meals[label.meals]
moodEnergy[label.moodEnergy]
notes[label.notes]
personal[label.personal]
quality[label.quality]
reflectAppreciate[label.reflectAppreciate]
savings[label.savings]
schedule[label.schedule]
sleep[label.sleep]
smallWin[label.smallWin]
thisYearIWill[label.thisYearIWill]
todo[label.todo]
top3[label.top3]
topPriorities[label.topPriorities]
transactions[label.transactions]
wake[label.wake]
water[label.water]
waterIntake[label.waterIntake]
watermark[label.watermark]
weekNotes[label.weekNotes]
weekSpread[label.weekSpread]
weeklyPlan[label.weeklyPlan]
yearOverview[label.yearOverview]

Ключі шаблонів сторінок

Перша частина назви файлу. Помилка в ключі означає, що файл імпортується, але ніколи не відрендериться.

coveryear-overviewmonth-calendarweek-one-pageday-1-upday-2-upday-3-upday-1-plus-2day-2-plus-2day-1-plus-noteshabit-trackerhealth-trackernotes-linedgoalsbudgetgratitude