stella-coder 3.9.2 → 5.0.0

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 (176) hide show
  1. package/.mcp.json +11 -0
  2. package/.opencode/skills/banner-design/SKILL.md +196 -0
  3. package/.opencode/skills/banner-design/references/banner-sizes-and-styles.md +118 -0
  4. package/.opencode/skills/brand/SKILL.md +97 -0
  5. package/.opencode/skills/brand/references/approval-checklist.md +169 -0
  6. package/.opencode/skills/brand/references/asset-organization.md +157 -0
  7. package/.opencode/skills/brand/references/brand-guideline-template.md +140 -0
  8. package/.opencode/skills/brand/references/color-palette-management.md +186 -0
  9. package/.opencode/skills/brand/references/consistency-checklist.md +94 -0
  10. package/.opencode/skills/brand/references/logo-usage-rules.md +185 -0
  11. package/.opencode/skills/brand/references/messaging-framework.md +85 -0
  12. package/.opencode/skills/brand/references/typography-specifications.md +214 -0
  13. package/.opencode/skills/brand/references/update.md +118 -0
  14. package/.opencode/skills/brand/references/visual-identity.md +96 -0
  15. package/.opencode/skills/brand/references/voice-framework.md +88 -0
  16. package/.opencode/skills/brand/scripts/extract-colors.cjs +341 -0
  17. package/.opencode/skills/brand/scripts/inject-brand-context.cjs +349 -0
  18. package/.opencode/skills/brand/scripts/sync-brand-to-tokens.cjs +248 -0
  19. package/.opencode/skills/brand/scripts/tests/test_sync_brand_to_tokens.py +52 -0
  20. package/.opencode/skills/brand/scripts/validate-asset.cjs +387 -0
  21. package/.opencode/skills/brand/templates/brand-guidelines-starter.md +275 -0
  22. package/.opencode/skills/design/SKILL.md +313 -0
  23. package/.opencode/skills/design/data/cip/deliverables.csv +51 -0
  24. package/.opencode/skills/design/data/cip/industries.csv +21 -0
  25. package/.opencode/skills/design/data/cip/mockup-contexts.csv +21 -0
  26. package/.opencode/skills/design/data/cip/styles.csv +21 -0
  27. package/.opencode/skills/design/data/icon/styles.csv +16 -0
  28. package/.opencode/skills/design/data/logo/colors.csv +56 -0
  29. package/.opencode/skills/design/data/logo/industries.csv +56 -0
  30. package/.opencode/skills/design/data/logo/styles.csv +56 -0
  31. package/.opencode/skills/design/references/banner-sizes-and-styles.md +118 -0
  32. package/.opencode/skills/design/references/cip-deliverable-guide.md +95 -0
  33. package/.opencode/skills/design/references/cip-design.md +121 -0
  34. package/.opencode/skills/design/references/cip-prompt-engineering.md +84 -0
  35. package/.opencode/skills/design/references/cip-style-guide.md +68 -0
  36. package/.opencode/skills/design/references/design-routing.md +207 -0
  37. package/.opencode/skills/design/references/icon-design.md +122 -0
  38. package/.opencode/skills/design/references/logo-color-psychology.md +101 -0
  39. package/.opencode/skills/design/references/logo-design.md +92 -0
  40. package/.opencode/skills/design/references/logo-prompt-engineering.md +158 -0
  41. package/.opencode/skills/design/references/logo-style-guide.md +109 -0
  42. package/.opencode/skills/design/references/slides-copywriting-formulas.md +84 -0
  43. package/.opencode/skills/design/references/slides-create.md +4 -0
  44. package/.opencode/skills/design/references/slides-html-template.md +295 -0
  45. package/.opencode/skills/design/references/slides-layout-patterns.md +137 -0
  46. package/.opencode/skills/design/references/slides-strategies.md +94 -0
  47. package/.opencode/skills/design/references/slides.md +42 -0
  48. package/.opencode/skills/design/references/social-photos-design.md +329 -0
  49. package/.opencode/skills/design/scripts/cip/core.py +215 -0
  50. package/.opencode/skills/design/scripts/cip/generate.py +484 -0
  51. package/.opencode/skills/design/scripts/cip/render-html.py +424 -0
  52. package/.opencode/skills/design/scripts/cip/search.py +127 -0
  53. package/.opencode/skills/design/scripts/icon/generate.py +487 -0
  54. package/.opencode/skills/design/scripts/logo/core.py +175 -0
  55. package/.opencode/skills/design/scripts/logo/generate.py +362 -0
  56. package/.opencode/skills/design/scripts/logo/search.py +114 -0
  57. package/.opencode/skills/design-system/SKILL.md +244 -0
  58. package/.opencode/skills/design-system/data/slide-backgrounds.csv +11 -0
  59. package/.opencode/skills/design-system/data/slide-charts.csv +26 -0
  60. package/.opencode/skills/design-system/data/slide-color-logic.csv +14 -0
  61. package/.opencode/skills/design-system/data/slide-copy.csv +26 -0
  62. package/.opencode/skills/design-system/data/slide-layout-logic.csv +16 -0
  63. package/.opencode/skills/design-system/data/slide-layouts.csv +26 -0
  64. package/.opencode/skills/design-system/data/slide-strategies.csv +16 -0
  65. package/.opencode/skills/design-system/data/slide-typography.csv +15 -0
  66. package/.opencode/skills/design-system/references/component-specs.md +236 -0
  67. package/.opencode/skills/design-system/references/component-tokens.md +214 -0
  68. package/.opencode/skills/design-system/references/primitive-tokens.md +203 -0
  69. package/.opencode/skills/design-system/references/semantic-tokens.md +215 -0
  70. package/.opencode/skills/design-system/references/states-and-variants.md +241 -0
  71. package/.opencode/skills/design-system/references/tailwind-integration.md +251 -0
  72. package/.opencode/skills/design-system/references/token-architecture.md +224 -0
  73. package/.opencode/skills/design-system/scripts/embed-tokens.cjs +99 -0
  74. package/.opencode/skills/design-system/scripts/fetch-background.py +317 -0
  75. package/.opencode/skills/design-system/scripts/generate-slide.py +770 -0
  76. package/.opencode/skills/design-system/scripts/generate-tokens.cjs +205 -0
  77. package/.opencode/skills/design-system/scripts/html-token-validator.py +327 -0
  78. package/.opencode/skills/design-system/scripts/search-slides.py +218 -0
  79. package/.opencode/skills/design-system/scripts/slide-token-validator.py +35 -0
  80. package/.opencode/skills/design-system/scripts/slide_search_core.py +453 -0
  81. package/.opencode/skills/design-system/scripts/tests/test_validate_tokens.py +48 -0
  82. package/.opencode/skills/design-system/scripts/validate-tokens.cjs +246 -0
  83. package/.opencode/skills/design-system/templates/design-tokens-starter.json +143 -0
  84. package/.opencode/skills/slides/SKILL.md +40 -0
  85. package/.opencode/skills/slides/references/copywriting-formulas.md +84 -0
  86. package/.opencode/skills/slides/references/create.md +4 -0
  87. package/.opencode/skills/slides/references/html-template.md +295 -0
  88. package/.opencode/skills/slides/references/layout-patterns.md +137 -0
  89. package/.opencode/skills/slides/references/slide-strategies.md +94 -0
  90. package/.opencode/skills/ui-styling/LICENSE.txt +202 -0
  91. package/.opencode/skills/ui-styling/SKILL.md +324 -0
  92. package/.opencode/skills/ui-styling/references/canvas-design-system.md +320 -0
  93. package/.opencode/skills/ui-styling/references/shadcn-accessibility.md +471 -0
  94. package/.opencode/skills/ui-styling/references/shadcn-components.md +424 -0
  95. package/.opencode/skills/ui-styling/references/shadcn-theming.md +373 -0
  96. package/.opencode/skills/ui-styling/references/tailwind-customization.md +483 -0
  97. package/.opencode/skills/ui-styling/references/tailwind-responsive.md +382 -0
  98. package/.opencode/skills/ui-styling/references/tailwind-utilities.md +455 -0
  99. package/.opencode/skills/ui-styling/scripts/requirements.txt +17 -0
  100. package/.opencode/skills/ui-styling/scripts/shadcn_add.py +308 -0
  101. package/.opencode/skills/ui-styling/scripts/tailwind_config_gen.py +473 -0
  102. package/.opencode/skills/ui-styling/scripts/tests/coverage-ui.json +1 -0
  103. package/.opencode/skills/ui-styling/scripts/tests/requirements.txt +3 -0
  104. package/.opencode/skills/ui-styling/scripts/tests/test_shadcn_add.py +266 -0
  105. package/.opencode/skills/ui-styling/scripts/tests/test_tailwind_config_gen.py +394 -0
  106. package/.opencode/skills/ui-ux-pro-max/SKILL.md +396 -0
  107. package/.opencode/skills/ui-ux-pro-max/data/_sync_all.py +414 -0
  108. package/.opencode/skills/ui-ux-pro-max/data/app-interface.csv +31 -0
  109. package/.opencode/skills/ui-ux-pro-max/data/charts.csv +26 -0
  110. package/.opencode/skills/ui-ux-pro-max/data/colors.csv +193 -0
  111. package/.opencode/skills/ui-ux-pro-max/data/design.csv +1776 -0
  112. package/.opencode/skills/ui-ux-pro-max/data/draft.csv +1779 -0
  113. package/.opencode/skills/ui-ux-pro-max/data/google-fonts.csv +1924 -0
  114. package/.opencode/skills/ui-ux-pro-max/data/icons.csv +106 -0
  115. package/.opencode/skills/ui-ux-pro-max/data/landing.csv +35 -0
  116. package/.opencode/skills/ui-ux-pro-max/data/motion.csv +17 -0
  117. package/.opencode/skills/ui-ux-pro-max/data/products.csv +193 -0
  118. package/.opencode/skills/ui-ux-pro-max/data/react-performance.csv +45 -0
  119. package/.opencode/skills/ui-ux-pro-max/data/stacks/angular.csv +51 -0
  120. package/.opencode/skills/ui-ux-pro-max/data/stacks/astro.csv +54 -0
  121. package/.opencode/skills/ui-ux-pro-max/data/stacks/avalonia.csv +57 -0
  122. package/.opencode/skills/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
  123. package/.opencode/skills/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
  124. package/.opencode/skills/ui-ux-pro-max/data/stacks/javafx.csv +76 -0
  125. package/.opencode/skills/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
  126. package/.opencode/skills/ui-ux-pro-max/data/stacks/laravel.csv +51 -0
  127. package/.opencode/skills/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
  128. package/.opencode/skills/ui-ux-pro-max/data/stacks/nuxt-ui.csv +71 -0
  129. package/.opencode/skills/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
  130. package/.opencode/skills/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
  131. package/.opencode/skills/ui-ux-pro-max/data/stacks/react.csv +54 -0
  132. package/.opencode/skills/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
  133. package/.opencode/skills/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
  134. package/.opencode/skills/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
  135. package/.opencode/skills/ui-ux-pro-max/data/stacks/threejs.csv +54 -0
  136. package/.opencode/skills/ui-ux-pro-max/data/stacks/uno.csv +60 -0
  137. package/.opencode/skills/ui-ux-pro-max/data/stacks/uwp.csv +56 -0
  138. package/.opencode/skills/ui-ux-pro-max/data/stacks/vue.csv +50 -0
  139. package/.opencode/skills/ui-ux-pro-max/data/stacks/winui.csv +60 -0
  140. package/.opencode/skills/ui-ux-pro-max/data/stacks/wpf.csv +57 -0
  141. package/.opencode/skills/ui-ux-pro-max/data/styles.csv +85 -0
  142. package/.opencode/skills/ui-ux-pro-max/data/typography.csv +75 -0
  143. package/.opencode/skills/ui-ux-pro-max/data/ui-reasoning.csv +162 -0
  144. package/.opencode/skills/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
  145. package/.opencode/skills/ui-ux-pro-max/scripts/__pycache__/core.cpython-312.pyc +0 -0
  146. package/.opencode/skills/ui-ux-pro-max/scripts/__pycache__/design_system.cpython-312.pyc +0 -0
  147. package/.opencode/skills/ui-ux-pro-max/scripts/core.py +274 -0
  148. package/.opencode/skills/ui-ux-pro-max/scripts/design_system.py +1329 -0
  149. package/.opencode/skills/ui-ux-pro-max/scripts/search.py +127 -0
  150. package/README.md +25 -30
  151. package/STELLA.md +1 -1
  152. package/dist/antimalware/database.mjs +871 -0
  153. package/dist/antimalware/index.mjs +8 -0
  154. package/dist/antimalware/scanner.mjs +591 -0
  155. package/dist/antimalware/ui.mjs +570 -0
  156. package/dist/banner.mjs +46 -0
  157. package/dist/index.mjs +3073 -0
  158. package/dist/markdown.mjs +100 -0
  159. package/dist/sea-config.json +4 -0
  160. package/dist/security.mjs +237 -0
  161. package/dist/theme.mjs +89 -0
  162. package/dist/tools.mjs +3145 -0
  163. package/install-stella.bat +44 -0
  164. package/package.json +5 -4
  165. package/stella-cli/coding-brain.mjs +753 -0
  166. package/stella-cli/index.mjs +931 -15
  167. package/stella-cli/mcp.mjs +296 -0
  168. package/stella-cli/presentations.mjs +1106 -0
  169. package/stella-cli/subagents.mjs +142 -0
  170. package/stella-cli/telegram-bot.mjs +824 -0
  171. package/stella-cli/tg-bg.bat +13 -0
  172. package/stella-cli/tg-server.bat +15 -0
  173. package/stella-cli/tg-server.mjs +116 -0
  174. package/stella-cli/theme.mjs +6 -4
  175. package/create_cats_pptx.py +0 -121
  176. package/hello.py +0 -2
@@ -0,0 +1,13 @@
1
+ @echo off
2
+ title Stella Telegram Bot - Background Service
3
+ echo Starting Stella Telegram Bot in background...
4
+
5
+ cd /d "%~dp0"
6
+
7
+ :: Start as background process
8
+ start /B node tg-server.mjs > nul 2>&1
9
+
10
+ echo Bot started! Check %USERPROFILE%\.stella\tg-bot.log for logs.
11
+ echo.
12
+ echo To stop: tg-server.bat --stop
13
+ echo To check status: tg-server.bat --status
@@ -0,0 +1,15 @@
1
+ @echo off
2
+ title Stella Telegram Bot Server
3
+ echo ============================================
4
+ echo Stella Telegram Bot Server
5
+ echo ============================================
6
+ echo.
7
+
8
+ cd /d "%~dp0"
9
+
10
+ :loop
11
+ echo [%date% %time%] Starting bot...
12
+ node tg-server.mjs
13
+ echo [%date% %time%] Bot stopped, restarting in 5 seconds...
14
+ timeout /t 5 /nobreak >nul
15
+ goto loop
@@ -0,0 +1,116 @@
1
+ import fs from "node:fs"
2
+ import path from "node:path"
3
+ import os from "node:os"
4
+ import { execSync, spawn } from "node:child_process"
5
+ import { startBot, stopBot } from "./telegram-bot.mjs"
6
+
7
+ // ═══════════════════════════════════════════════════════════════════
8
+ // STELLA TELEGRAM SERVER — постоянная работа бота
9
+ // ═══════════════════════════════════════════════════════════════════
10
+
11
+ const CONFIG_DIR = path.join(os.homedir(), ".stella")
12
+ const PID_FILE = path.join(CONFIG_DIR, "tg-bot.pid")
13
+ const LOG_FILE = path.join(CONFIG_DIR, "tg-bot.log")
14
+
15
+ function log(msg) {
16
+ const timestamp = new Date().toLocaleString("ru-RU")
17
+ const line = `[${timestamp}] ${msg}`
18
+ console.log(line)
19
+ try {
20
+ fs.mkdirSync(CONFIG_DIR, { recursive: true })
21
+ fs.appendFileSync(LOG_FILE, line + "\n")
22
+ } catch {}
23
+ }
24
+
25
+ function savePID() {
26
+ fs.mkdirSync(CONFIG_DIR, { recursive: true })
27
+ fs.writeFileSync(PID_FILE, String(process.pid))
28
+ }
29
+
30
+ function removePID() {
31
+ try { fs.unlinkSync(PID_FILE) } catch {}
32
+ }
33
+
34
+ function isRunning() {
35
+ try {
36
+ if (!fs.existsSync(PID_FILE)) return false
37
+ const pid = parseInt(fs.readFileSync(PID_FILE, "utf8"))
38
+ process.kill(pid, 0)
39
+ return true
40
+ } catch {
41
+ return false
42
+ }
43
+ }
44
+
45
+ // Handle cleanup
46
+ process.on("SIGINT", () => {
47
+ log("Bot shutting down (SIGINT)")
48
+ removePID()
49
+ process.exit(0)
50
+ })
51
+
52
+ process.on("SIGTERM", () => {
53
+ log("Bot shutting down (SIGTERM)")
54
+ removePID()
55
+ process.exit(0)
56
+ })
57
+
58
+ process.on("exit", () => {
59
+ removePID()
60
+ })
61
+
62
+ // Main
63
+ async function main() {
64
+ const args = process.argv.slice(2)
65
+
66
+ if (args.includes("--stop")) {
67
+ if (!isRunning()) {
68
+ console.log("Bot is not running")
69
+ return
70
+ }
71
+ const pid = parseInt(fs.readFileSync(PID_FILE, "utf8"))
72
+ try {
73
+ process.kill(pid, "SIGTERM")
74
+ console.log(`Bot stopped (PID: ${pid})`)
75
+ removePID()
76
+ } catch (e) {
77
+ console.log(`Failed to stop: ${e.message}`)
78
+ }
79
+ return
80
+ }
81
+
82
+ if (args.includes("--status")) {
83
+ if (isRunning()) {
84
+ const pid = fs.readFileSync(PID_FILE, "utf8")
85
+ console.log(`Bot is running (PID: ${pid})`)
86
+ } else {
87
+ console.log("Bot is not running")
88
+ }
89
+ return
90
+ }
91
+
92
+ if (isRunning()) {
93
+ const pid = fs.readFileSync(PID_FILE, "utf8")
94
+ console.log(`Bot already running (PID: ${pid})`)
95
+ return
96
+ }
97
+
98
+ // Start bot
99
+ savePID()
100
+ log(`Bot starting (PID: ${process.pid})`)
101
+ log(`Platform: ${os.platform()} ${os.release()}`)
102
+ log(`Node: ${process.version}`)
103
+
104
+ const result = await startBot()
105
+ if (result) {
106
+ log("Bot started successfully")
107
+ console.log("Stella Telegram Bot is running!")
108
+ console.log("Press Ctrl+C to stop")
109
+ } else {
110
+ log("Bot failed to start")
111
+ removePID()
112
+ process.exit(1)
113
+ }
114
+ }
115
+
116
+ main()
@@ -66,11 +66,13 @@ export function box(lines, { color = purple, padding = 1, title = "" } = {}) {
66
66
  const width = Math.max(...lines.map((l) => strip(l).length), strip(title).length + 2)
67
67
  const pad = " ".repeat(padding)
68
68
  const inner = width + padding * 2
69
+ // Handle color as array [r,g,b] or function
70
+ const colorFn = Array.isArray(color) ? rgb(color[0], color[1], color[2]) : color
69
71
  const top = title
70
- ? color("╭─ ") + bold(violet(title)) + color(" " + "─".repeat(Math.max(inner - strip(title).length - 3, 0)) + "╮")
71
- : color("╭" + "─".repeat(inner) + "╮")
72
- const body = lines.map((l) => color("│") + pad + l + " ".repeat(width - strip(l).length) + pad + color("│"))
73
- const bottom = color("╰" + "─".repeat(inner) + "╯")
72
+ ? colorFn("╭─ ") + bold(violet(title)) + colorFn(" " + "─".repeat(Math.max(inner - strip(title).length - 3, 0)) + "╮")
73
+ : colorFn("╭" + "─".repeat(inner) + "╮")
74
+ const body = lines.map((l) => colorFn("│") + pad + l + " ".repeat(width - strip(l).length) + pad + colorFn("│"))
75
+ const bottom = colorFn("╰" + "─".repeat(inner) + "╯")
74
76
  return [top, ...body, bottom].join("\n")
75
77
  }
76
78
 
@@ -1,121 +0,0 @@
1
- from pptx import Presentation
2
- from pptx.util import Inches, Pt, Emu
3
- from pptx.dml.color import RGBColor
4
- from pptx.enum.text import PP_ALIGN
5
-
6
- prs = Presentation()
7
- prs.slide_width = Inches(13.333)
8
- prs.slide_height = Inches(7.5)
9
-
10
- # Цвета
11
- ORANGE = RGBColor(0xFF, 0x8C, 0x00)
12
- DARK = RGBColor(0x2D, 0x2D, 0x2D)
13
- WHITE = RGBColor(0xFF, 0xFF, 0xFF)
14
- LIGHT_BG = RGBColor(0xFF, 0xF5, 0xE6)
15
-
16
- def set_slide_bg(slide, r, g, b):
17
- background = slide.background
18
- fill = background.fill
19
- fill.solid()
20
- fill.fore_color.rgb = RGBColor(r, g, b)
21
-
22
- def add_text_box(slide, left, top, width, height, text, font_size=24, bold=False, color=DARK, alignment=PP_ALIGN.LEFT):
23
- txBox = slide.shapes.add_textbox(Inches(left), Inches(top), Inches(width), Inches(height))
24
- tf = txBox.text_frame
25
- tf.word_wrap = True
26
- p = tf.paragraphs[0]
27
- p.text = text
28
- p.font.size = Pt(font_size)
29
- p.font.bold = bold
30
- p.font.color.rgb = color
31
- p.alignment = alignment
32
- return txBox
33
-
34
- def add_bullets(slide, left, top, width, height, items, font_size=20, color=DARK):
35
- txBox = slide.shapes.add_textbox(Inches(left), Inches(top), Inches(width), Inches(height))
36
- tf = txBox.text_frame
37
- tf.word_wrap = True
38
- for i, item in enumerate(items):
39
- if i == 0:
40
- p = tf.paragraphs[0]
41
- else:
42
- p = tf.add_paragraph()
43
- p.text = item
44
- p.font.size = Pt(font_size)
45
- p.font.color.rgb = color
46
- p.space_after = Pt(12)
47
- p.level = 0
48
- return txBox
49
-
50
- # Слайд 1 — Титульный
51
- slide = prs.slides.add_slide(prs.slide_layouts[6]) # Blank
52
- set_slide_bg(slide, 0xFF, 0x8C, 0x00)
53
- add_text_box(slide, 1, 1.5, 11, 2, "🐱 КОТЫ", font_size=72, bold=True, color=WHITE, alignment=PP_ALIGN.CENTER)
54
- add_text_box(slide, 1, 3.5, 11, 1.5, "Лучшие друзья человека", font_size=36, color=WHITE, alignment=PP_ALIGN.CENTER)
55
- add_text_box(slide, 1, 5.5, 11, 1, "🐾 🐾 🐾 🐾 🐾", font_size=36, color=WHITE, alignment=PP_ALIGN.CENTER)
56
-
57
- # Слайд 2 — Интересные факты
58
- slide = prs.slides.add_slide(prs.slide_layouts[6])
59
- set_slide_bg(slide, 0xFF, 0xF5, 0xE6)
60
- add_text_box(slide, 0.5, 0.5, 12, 1.2, "🔍 Интересные факты о котах", font_size=40, bold=True, color=ORANGE, alignment=PP_ALIGN.CENTER)
61
- facts = [
62
- "😴 Коты проводят 70% своей жизни во сне",
63
- "👃 У каждого кота уникальный рисунок носа — как отпечаток пальца",
64
- "🔊 Коты могут издавать более 100 различных звуков",
65
- "🏆 Самый старый кот прожил 38 лет",
66
- "🏃 Коты бегают со скоростью до 48 км/ч",
67
- "❤️ Коты мурлыкают на частоте 25-150 Гц — это помогает заживлению тканей",
68
- ]
69
- add_bullets(slide, 1.5, 2, 10, 5, facts, font_size=24, color=DARK)
70
-
71
- # Слайд 3 — Популярные породы
72
- slide = prs.slides.add_slide(prs.slide_layouts[6])
73
- set_slide_bg(slide, 0xFF, 0xF5, 0xE6)
74
- add_text_box(slide, 0.5, 0.5, 12, 1.2, "🐈 Популярные породы", font_size=40, bold=True, color=ORANGE, alignment=PP_ALIGN.CENTER)
75
- breeds = [
76
- "🦁 Мейн-кун — гигант среди домашних котов (до 12 кг!)",
77
- "👻 Сфинкс — бесшёрстная, но очень ласковая порода",
78
- "🇬🇧 Британская короткошёрстная — классика жанра",
79
- "🦄 Шотландская вислоухая — с милыми загнутыми ушами",
80
- "🇹🇭 Сиамская — умная и голосистая порода",
81
- "👑 Персидская — царственная красота и спокойный характер",
82
- ]
83
- add_bullets(slide, 1.5, 2, 10, 5, breeds, font_size=24, color=DARK)
84
-
85
- # Слайд 4 — Польза для здоровья
86
- slide = prs.slides.add_slide(prs.slide_layouts[6])
87
- set_slide_bg(slide, 0xFF, 0xF5, 0xE6)
88
- add_text_box(slide, 0.5, 0.5, 12, 1.2, "💚 Польза котов для здоровья", font_size=40, bold=True, color=ORANGE, alignment=PP_ALIGN.CENTER)
89
- health = [
90
- "😌 Снижают уровень стресса и тревожности",
91
- "🎵 Мурлыкание помогает заживлять кости и ткани",
92
- "💊 Понижают давление и уровень холестерина",
93
- "🫀 Уменьшают риск инфаркта на 40%",
94
- "🤗 Помогают бороться с одиночеством",
95
- "👶 Дети, растущие с котами, реже болеют аллергией",
96
- ]
97
- add_bullets(slide, 1.5, 2, 10, 5, health, font_size=24, color=DARK)
98
-
99
- # Слайд 5 — Коты в культуре
100
- slide = prs.slides.add_slide(prs.slide_layouts[6])
101
- set_slide_bg(slide, 0xFF, 0xF5, 0xE6)
102
- add_text_box(slide, 0.5, 0.5, 12, 1.2, "🌍 Коты в культуре", font_size=40, bold=True, color=ORANGE, alignment=PP_ALIGN.CENTER)
103
- culture = [
104
- "🏛️ В Древнем Египте котов боготворили и мумифицировали",
105
- "📱 Интернет-мемы сделали котов самыми популярными животными онлайн",
106
- "🎨 Сальвадор Дали был известным любителем котов",
107
- "🇯🇵 В Японии манэки-нэко (кот-привет) приносит удачу",
108
- "🐈 Кот Боб — знаменитый рыжий уличный кот из Лондона",
109
- "📚 Кошка Бегемот из «Мастера и Маргариты» — один из самых известных котов в литературе",
110
- ]
111
- add_bullets(slide, 1.5, 2, 10, 5, culture, font_size=24, color=DARK)
112
-
113
- # Слайд 6 — Заключительный
114
- slide = prs.slides.add_slide(prs.slide_layouts[6])
115
- set_slide_bg(slide, 0xFF, 0x8C, 0x00)
116
- add_text_box(slide, 1, 2, 11, 2, "Спасибо за внимание!", font_size=60, bold=True, color=WHITE, alignment=PP_ALIGN.CENTER)
117
- add_text_box(slide, 1, 4.2, 11, 1.5, "🐾 Возьмите кота — и ваша жизнь станет ярче! 🐾", font_size=28, color=WHITE, alignment=PP_ALIGN.CENTER)
118
-
119
- output = r"C:\Users\user\Desktop\cats.pptx"
120
- prs.save(output)
121
- print(f"Презентация сохранена: {output}")
package/hello.py DELETED
@@ -1,2 +0,0 @@
1
- print("Привет, мир!")
2
- input("Нажмите Enter для закрытия...")