create-marp-presentation 1.1.0 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/README.md +45 -37
  2. package/cli/commands/add-themes-cli.js +85 -0
  3. package/cli/commands/create-project.js +199 -0
  4. package/cli/utils/file-utils.js +106 -0
  5. package/cli/utils/prompt-utils.js +89 -0
  6. package/docs/plans/2025-02-19-marp-template-design.md +207 -0
  7. package/docs/plans/2025-02-19-marp-template-implementation.md +848 -0
  8. package/docs/plans/2026-02-20-example-slides-design.md +179 -0
  9. package/docs/plans/2026-02-20-example-slides-implementation.md +811 -0
  10. package/docs/plans/2026-02-23-theme-management-design.md +836 -0
  11. package/docs/plans/2026-02-23-theme-management-implementation.md +3585 -0
  12. package/docs/plans/2026-02-26-theme-addition-refactoring-design.md +172 -0
  13. package/docs/plans/2026-02-26-theme-addition-refactoring.md +456 -0
  14. package/docs/plans/2026-02-27-theme-add-fix-design.md +136 -0
  15. package/docs/plans/2026-02-27-theme-add-fix.md +353 -0
  16. package/docs/plans/TODO.md +5 -0
  17. package/docs/reqs/themes-requirements.md +49 -0
  18. package/docs/theme-management.md +261 -0
  19. package/index.js +111 -164
  20. package/lib/add-themes-command.js +381 -0
  21. package/lib/errors.js +62 -0
  22. package/lib/frontmatter.js +71 -0
  23. package/lib/prompts.js +222 -0
  24. package/lib/theme-manager.js +238 -0
  25. package/lib/theme-resolver.js +227 -0
  26. package/lib/vscode-integration.js +198 -0
  27. package/package.json +15 -5
  28. package/template/README.md +28 -17
  29. package/template/package.json +13 -1
  30. package/template/scripts/theme-cli.js +248 -0
  31. package/themes/beam/beam.css +141 -0
  32. package/themes/default-clean/default-clean.css +57 -0
  33. package/themes/gaia-dark/gaia-dark.css +27 -0
  34. package/themes/marpx/marpx.css +1735 -0
  35. package/themes/marpx/socrates.css +105 -0
  36. package/themes/uncover-minimal/uncover-minimal.css +22 -0
@@ -0,0 +1,179 @@
1
+ # Design: Опциональные примеры слайдов для Marp-шаблона
2
+
3
+ **Дата:** 2026-02-20
4
+ **Статус:** Approved
5
+
6
+ ## Обзор
7
+
8
+ Добавить опциональный файл с примерами слайдов, демонстрирующими все возможности Marp. Пользователь выбирает при создании проекта — создавать ли файл с примерами.
9
+
10
+ ## Архитектура
11
+
12
+ ### Структура файлов
13
+
14
+ ```
15
+ marp-presentation-template/
16
+ ├── index.js # + интерактивный запрос + условное копирование
17
+ ├── template/ # базовый шаблон (копируется всегда)
18
+ │ ├── presentation.md
19
+ │ ├── marp.config.js
20
+ │ ├── package.json
21
+ │ ├── static/
22
+ │ └── scripts/
23
+ ├── template-optional/ # опциональные файлы
24
+ │ ├── examples.md # копируется при запросе
25
+ │ └── static/ # демо-изображения для examples
26
+ │ └── demo-image.png # минималистичное демо-изображение
27
+ └── package.json # files: ["index.js", "template/", "template-optional/"]
28
+ ```
29
+
30
+ ### Принцип
31
+
32
+ - `template/` — базовый шаблон, копируется всегда
33
+ - `template-optional/` — опциональные файлы, копируются только при согласии пользователя
34
+ - Масштабируемо: в будущем можно добавить другие опциональные файлы
35
+
36
+ ## CLI изменения (index.js)
37
+
38
+ ### Новый flow
39
+
40
+ ```
41
+ валидация имени → запрос примеров → создание папки
42
+ → копирование template/
43
+ → (если да) копирование template-optional/
44
+ → npm install
45
+ ```
46
+
47
+ ### Реализация запроса
48
+
49
+ ```javascript
50
+ const readline = require('readline');
51
+
52
+ async function askCreateExamples() {
53
+ // Неинтерактивный режим — по умолчанию создаём примеры
54
+ if (!process.stdin.isTTY) {
55
+ return true;
56
+ }
57
+
58
+ const rl = readline.createInterface({
59
+ input: process.stdin,
60
+ output: process.stdout
61
+ });
62
+
63
+ return new Promise((resolve) => {
64
+ rl.question('Create example slides file? (Y/n) ', (answer) => {
65
+ rl.close();
66
+ const normalized = answer.toLowerCase().trim();
67
+ resolve(normalized !== 'n' && normalized !== 'no');
68
+ });
69
+ });
70
+ }
71
+ ```
72
+
73
+ ### Копирование опциональных файлов
74
+
75
+ ```javascript
76
+ if (createExamples) {
77
+ // Копируем examples.md
78
+ fs.copyFileSync(
79
+ path.join(__dirname, 'template-optional', 'examples.md'),
80
+ path.join(projectPath, 'examples.md')
81
+ );
82
+
83
+ // Копируем демо-изображение в static/
84
+ const demoImageSrc = path.join(__dirname, 'template-optional', 'static', 'demo-image.png');
85
+ const demoImageDest = path.join(projectPath, 'static', 'demo-image.png');
86
+ fs.copyFileSync(demoImageSrc, demoImageDest);
87
+ }
88
+ ```
89
+
90
+ ### Вывод в консоль
91
+
92
+ ```
93
+ Creating Marp presentation: my-project
94
+
95
+ Create example slides file? (Y/n) y
96
+
97
+ ✓ Project created
98
+ ✓ Example slides added
99
+ ✓ Demo image added to static/
100
+
101
+ Installing dependencies...
102
+ ✓ Dependencies installed
103
+
104
+ Next steps:
105
+ cd my-slides
106
+ npm run dev # preview presentation.md
107
+ marp examples.md # preview examples.md
108
+ ```
109
+
110
+ ## Структура examples.md
111
+
112
+ **13 слайдов-примеров:**
113
+
114
+ | # | Слайд | Демонстрирует |
115
+ |---|-------|---------------|
116
+ | 1 | Титульный | Титульный слайд, theme, paginate |
117
+ | 2 | Оглавление | Автоматическое оглавление Marp |
118
+ | 3 | Базовое форматирование | Заголовки, **жирный**, *курсив*, ~~зачёркнутый~~, `inline code` |
119
+ | 4 | Списки | Маркированные, нумерованные, вложенные |
120
+ | 5 | Цитаты и сноски | > Блок-цитаты, [^1] сноски |
121
+ | 6 | Код | Блоки кода с подсветкой (JS, Python, Bash) |
122
+ | 7 | Таблицы | Простая и сложная таблица |
123
+ | 8 | Формулы LaTeX | Inline `$...$`, блоки `$$...$$`, уравнения |
124
+ | 9 | Изображения | Вставка, размеры, позиционирование |
125
+ | 10 | Многоколоночный layout | `<div class="columns">` или HTML-таблицы |
126
+ | 11 | Фоны и стилизация | `<!-- _backgroundColor: -->`, gradient, background-image |
127
+ | 12 | Фрагменты (анимация) | `* item` — пошаговое появление |
128
+ | 13 | Контакты / Q&A | Финальный слайд |
129
+
130
+ ## Демо-изображение
131
+
132
+ - Минималистичная графика (геометрические фигуры, абстрактный паттерн)
133
+ - Размер: ~800x400px, оптимизированный PNG
134
+ - Назначение: демонстрация вставки изображений в слайдах
135
+
136
+ ## Обработка ошибок
137
+
138
+ ### Неинтерактивный режим (CI/CD, скрипты)
139
+
140
+ - Если `process.stdin.isTTY === false` — создаём примеры по умолчанию
141
+ - Это позволяет использовать CLI в пайплайнах без зависания
142
+
143
+ ### Пользовательский ввод
144
+
145
+ - `y`, `Y`, `yes`, `YES`, пустой ввод (Enter) → создаём примеры
146
+ - `n`, `N`, `no`, `NO` → пропускаем примеры
147
+ - Любой другой ввод → создаём примеры (безопасное значение по умолчанию)
148
+
149
+ ### Обработка отсутствия файла
150
+
151
+ - Если `template-optional/examples.md` не найден — предупреждение, но продолжаем без краха
152
+ - Логируем ошибку, но не прерываем создание проекта
153
+
154
+ ## Итоговая структура проекта пользователя
155
+
156
+ ```
157
+ my-slides/
158
+ ├── presentation.md # рабочий шаблон
159
+ ├── examples.md # справочник возможностей Marp
160
+ ├── static/
161
+ │ ├── .gitkeep
162
+ │ └── demo-image.png # для демонстрации изображений
163
+ ├── marp.config.js
164
+ ├── package.json
165
+ └── scripts/
166
+ ```
167
+
168
+ ## Файлы для изменения
169
+
170
+ 1. **Создать:**
171
+ - `template-optional/examples.md` — примеры слайдов
172
+ - `template-optional/static/demo-image.png` — демо-изображение
173
+
174
+ 2. **Изменить:**
175
+ - `index.js` — добавить интерактивный запрос и условное копирование
176
+ - `package.json` — обновить поле `files`
177
+
178
+ 3. **Не изменять:**
179
+ - `template/` — остаётся без изменений