@tpitre/story-ui 2.2.0 → 2.3.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 (188) hide show
  1. package/.env.sample +82 -11
  2. package/README.md +89 -0
  3. package/dist/cli/deploy.d.ts +17 -0
  4. package/dist/cli/deploy.d.ts.map +1 -0
  5. package/dist/cli/deploy.js +696 -0
  6. package/dist/cli/index.d.ts +3 -0
  7. package/dist/cli/index.d.ts.map +1 -0
  8. package/dist/cli/index.js +26 -2
  9. package/dist/cli/setup.d.ts +11 -0
  10. package/dist/cli/setup.d.ts.map +1 -0
  11. package/dist/cli/setup.js +437 -110
  12. package/dist/mcp-server/index.d.ts +2 -0
  13. package/dist/mcp-server/index.d.ts.map +1 -0
  14. package/dist/mcp-server/index.js +120 -2
  15. package/dist/mcp-server/mcp-stdio-server.d.ts +3 -0
  16. package/dist/mcp-server/mcp-stdio-server.d.ts.map +1 -0
  17. package/dist/mcp-server/mcp-stdio-server.js +8 -1
  18. package/dist/mcp-server/routes/claude.d.ts +3 -0
  19. package/dist/mcp-server/routes/claude.d.ts.map +1 -0
  20. package/dist/mcp-server/routes/claude.js +60 -23
  21. package/dist/mcp-server/routes/components.d.ts +4 -0
  22. package/dist/mcp-server/routes/components.d.ts.map +1 -0
  23. package/dist/mcp-server/routes/frameworks.d.ts +38 -0
  24. package/dist/mcp-server/routes/frameworks.d.ts.map +1 -0
  25. package/dist/mcp-server/routes/frameworks.js +183 -0
  26. package/dist/mcp-server/routes/generateStory.d.ts +3 -0
  27. package/dist/mcp-server/routes/generateStory.d.ts.map +1 -0
  28. package/dist/mcp-server/routes/generateStory.js +160 -76
  29. package/dist/mcp-server/routes/generateStoryStream.d.ts +12 -0
  30. package/dist/mcp-server/routes/generateStoryStream.d.ts.map +1 -0
  31. package/dist/mcp-server/routes/generateStoryStream.js +947 -0
  32. package/dist/mcp-server/routes/hybridStories.d.ts +18 -0
  33. package/dist/mcp-server/routes/hybridStories.d.ts.map +1 -0
  34. package/dist/mcp-server/routes/mcpRemote.d.ts +14 -0
  35. package/dist/mcp-server/routes/mcpRemote.d.ts.map +1 -0
  36. package/dist/mcp-server/routes/mcpRemote.js +489 -0
  37. package/dist/mcp-server/routes/memoryStories.d.ts +26 -0
  38. package/dist/mcp-server/routes/memoryStories.d.ts.map +1 -0
  39. package/dist/mcp-server/routes/providers.d.ts +89 -0
  40. package/dist/mcp-server/routes/providers.d.ts.map +1 -0
  41. package/dist/mcp-server/routes/providers.js +369 -0
  42. package/dist/mcp-server/routes/storySync.d.ts +26 -0
  43. package/dist/mcp-server/routes/storySync.d.ts.map +1 -0
  44. package/dist/mcp-server/routes/streamTypes.d.ts +110 -0
  45. package/dist/mcp-server/routes/streamTypes.d.ts.map +1 -0
  46. package/dist/mcp-server/routes/streamTypes.js +18 -0
  47. package/dist/mcp-server/sessionManager.d.ts +50 -0
  48. package/dist/mcp-server/sessionManager.d.ts.map +1 -0
  49. package/dist/story-generator/componentBlacklist.d.ts +21 -0
  50. package/dist/story-generator/componentBlacklist.d.ts.map +1 -0
  51. package/dist/story-generator/componentDiscovery.d.ts +28 -0
  52. package/dist/story-generator/componentDiscovery.d.ts.map +1 -0
  53. package/dist/story-generator/componentRegistryGenerator.d.ts +49 -0
  54. package/dist/story-generator/componentRegistryGenerator.d.ts.map +1 -0
  55. package/dist/story-generator/componentRegistryGenerator.js +205 -0
  56. package/dist/story-generator/configLoader.d.ts +33 -0
  57. package/dist/story-generator/configLoader.d.ts.map +1 -0
  58. package/dist/story-generator/considerationsLoader.d.ts +32 -0
  59. package/dist/story-generator/considerationsLoader.d.ts.map +1 -0
  60. package/dist/story-generator/documentation-sources.d.ts +28 -0
  61. package/dist/story-generator/documentation-sources.d.ts.map +1 -0
  62. package/dist/story-generator/documentationLoader.d.ts +64 -0
  63. package/dist/story-generator/documentationLoader.d.ts.map +1 -0
  64. package/dist/story-generator/dynamicPackageDiscovery.d.ts +97 -0
  65. package/dist/story-generator/dynamicPackageDiscovery.d.ts.map +1 -0
  66. package/dist/story-generator/enhancedComponentDiscovery.d.ts +125 -0
  67. package/dist/story-generator/enhancedComponentDiscovery.d.ts.map +1 -0
  68. package/dist/story-generator/enhancedComponentDiscovery.js +111 -11
  69. package/dist/story-generator/framework-adapters/angular-adapter.d.ts +40 -0
  70. package/dist/story-generator/framework-adapters/angular-adapter.d.ts.map +1 -0
  71. package/dist/story-generator/framework-adapters/angular-adapter.js +427 -0
  72. package/dist/story-generator/framework-adapters/base-adapter.d.ts +75 -0
  73. package/dist/story-generator/framework-adapters/base-adapter.d.ts.map +1 -0
  74. package/dist/story-generator/framework-adapters/base-adapter.js +147 -0
  75. package/dist/story-generator/framework-adapters/framework-detector.d.ts +55 -0
  76. package/dist/story-generator/framework-adapters/framework-detector.d.ts.map +1 -0
  77. package/dist/story-generator/framework-adapters/framework-detector.js +323 -0
  78. package/dist/story-generator/framework-adapters/index.d.ts +97 -0
  79. package/dist/story-generator/framework-adapters/index.d.ts.map +1 -0
  80. package/dist/story-generator/framework-adapters/index.js +198 -0
  81. package/dist/story-generator/framework-adapters/react-adapter.d.ts +40 -0
  82. package/dist/story-generator/framework-adapters/react-adapter.d.ts.map +1 -0
  83. package/dist/story-generator/framework-adapters/react-adapter.js +316 -0
  84. package/dist/story-generator/framework-adapters/svelte-adapter.d.ts +40 -0
  85. package/dist/story-generator/framework-adapters/svelte-adapter.d.ts.map +1 -0
  86. package/dist/story-generator/framework-adapters/svelte-adapter.js +372 -0
  87. package/dist/story-generator/framework-adapters/types.d.ts +182 -0
  88. package/dist/story-generator/framework-adapters/types.d.ts.map +1 -0
  89. package/dist/story-generator/framework-adapters/types.js +8 -0
  90. package/dist/story-generator/framework-adapters/vue-adapter.d.ts +36 -0
  91. package/dist/story-generator/framework-adapters/vue-adapter.d.ts.map +1 -0
  92. package/dist/story-generator/framework-adapters/vue-adapter.js +336 -0
  93. package/dist/story-generator/framework-adapters/web-components-adapter.d.ts +54 -0
  94. package/dist/story-generator/framework-adapters/web-components-adapter.d.ts.map +1 -0
  95. package/dist/story-generator/framework-adapters/web-components-adapter.js +387 -0
  96. package/dist/story-generator/generateStory.d.ts +7 -0
  97. package/dist/story-generator/generateStory.d.ts.map +1 -0
  98. package/dist/story-generator/gitignoreManager.d.ts +50 -0
  99. package/dist/story-generator/gitignoreManager.d.ts.map +1 -0
  100. package/dist/story-generator/imageProcessor.d.ts +80 -0
  101. package/dist/story-generator/imageProcessor.d.ts.map +1 -0
  102. package/dist/story-generator/imageProcessor.js +391 -0
  103. package/dist/story-generator/inMemoryStoryService.d.ts +89 -0
  104. package/dist/story-generator/inMemoryStoryService.d.ts.map +1 -0
  105. package/dist/story-generator/llm-providers/base-provider.d.ts +36 -0
  106. package/dist/story-generator/llm-providers/base-provider.d.ts.map +1 -0
  107. package/dist/story-generator/llm-providers/base-provider.js +135 -0
  108. package/dist/story-generator/llm-providers/claude-provider.d.ts +23 -0
  109. package/dist/story-generator/llm-providers/claude-provider.d.ts.map +1 -0
  110. package/dist/story-generator/llm-providers/claude-provider.js +414 -0
  111. package/dist/story-generator/llm-providers/gemini-provider.d.ts +24 -0
  112. package/dist/story-generator/llm-providers/gemini-provider.d.ts.map +1 -0
  113. package/dist/story-generator/llm-providers/gemini-provider.js +406 -0
  114. package/dist/story-generator/llm-providers/index.d.ts +63 -0
  115. package/dist/story-generator/llm-providers/index.d.ts.map +1 -0
  116. package/dist/story-generator/llm-providers/index.js +169 -0
  117. package/dist/story-generator/llm-providers/openai-provider.d.ts +24 -0
  118. package/dist/story-generator/llm-providers/openai-provider.d.ts.map +1 -0
  119. package/dist/story-generator/llm-providers/openai-provider.js +458 -0
  120. package/dist/story-generator/llm-providers/settings-manager.d.ts +75 -0
  121. package/dist/story-generator/llm-providers/settings-manager.d.ts.map +1 -0
  122. package/dist/story-generator/llm-providers/settings-manager.js +173 -0
  123. package/dist/story-generator/llm-providers/story-llm-service.d.ts +79 -0
  124. package/dist/story-generator/llm-providers/story-llm-service.d.ts.map +1 -0
  125. package/dist/story-generator/llm-providers/story-llm-service.js +240 -0
  126. package/dist/story-generator/llm-providers/types.d.ts +153 -0
  127. package/dist/story-generator/llm-providers/types.d.ts.map +1 -0
  128. package/dist/story-generator/llm-providers/types.js +8 -0
  129. package/dist/story-generator/logger.d.ts +14 -0
  130. package/dist/story-generator/logger.d.ts.map +1 -0
  131. package/dist/story-generator/logger.js +96 -29
  132. package/dist/story-generator/postProcessStory.d.ts +6 -0
  133. package/dist/story-generator/postProcessStory.d.ts.map +1 -0
  134. package/dist/story-generator/productionGitignoreManager.d.ts +91 -0
  135. package/dist/story-generator/productionGitignoreManager.d.ts.map +1 -0
  136. package/dist/story-generator/promptGenerator.d.ts +48 -0
  137. package/dist/story-generator/promptGenerator.d.ts.map +1 -0
  138. package/dist/story-generator/promptGenerator.js +186 -1
  139. package/dist/story-generator/storyHistory.d.ts +44 -0
  140. package/dist/story-generator/storyHistory.d.ts.map +1 -0
  141. package/dist/story-generator/storySync.d.ts +68 -0
  142. package/dist/story-generator/storySync.d.ts.map +1 -0
  143. package/dist/story-generator/storyTracker.d.ts +48 -0
  144. package/dist/story-generator/storyTracker.d.ts.map +1 -0
  145. package/dist/story-generator/storyValidator.d.ts +6 -0
  146. package/dist/story-generator/storyValidator.d.ts.map +1 -0
  147. package/dist/story-generator/universalDesignSystemAdapter.d.ts +68 -0
  148. package/dist/story-generator/universalDesignSystemAdapter.d.ts.map +1 -0
  149. package/dist/story-generator/universalDesignSystemAdapter.js +138 -1
  150. package/dist/story-generator/urlRedirectService.d.ts +21 -0
  151. package/dist/story-generator/urlRedirectService.d.ts.map +1 -0
  152. package/dist/story-generator/validateStory.d.ts +19 -0
  153. package/dist/story-generator/validateStory.d.ts.map +1 -0
  154. package/dist/story-generator/validateStory.js +6 -2
  155. package/dist/story-generator/visionPrompts.d.ts +88 -0
  156. package/dist/story-generator/visionPrompts.d.ts.map +1 -0
  157. package/dist/story-generator/visionPrompts.js +462 -0
  158. package/dist/story-ui.config.d.ts +78 -0
  159. package/dist/story-ui.config.d.ts.map +1 -0
  160. package/dist/templates/StoryUI/StoryUIPanel.d.ts +4 -0
  161. package/dist/templates/StoryUI/StoryUIPanel.d.ts.map +1 -0
  162. package/dist/templates/StoryUI/StoryUIPanel.js +1874 -0
  163. package/dist/templates/StoryUI/StoryUIPanel.stories.d.ts +18 -0
  164. package/dist/templates/StoryUI/StoryUIPanel.stories.d.ts.map +1 -0
  165. package/dist/templates/StoryUI/StoryUIPanel.stories.js +37 -0
  166. package/dist/templates/StoryUI/index.d.ts +3 -0
  167. package/dist/templates/StoryUI/index.d.ts.map +1 -0
  168. package/dist/templates/StoryUI/index.js +2 -0
  169. package/package.json +17 -3
  170. package/templates/StoryUI/StoryUIPanel.tsx +1960 -384
  171. package/templates/StoryUI/index.tsx +1 -1
  172. package/templates/StoryUI/manager.tsx +264 -0
  173. package/templates/production-app/.env.example +11 -0
  174. package/templates/production-app/index.html +66 -0
  175. package/templates/production-app/package.json +30 -0
  176. package/templates/production-app/public/favicon.svg +5 -0
  177. package/templates/production-app/src/App.tsx +1157 -0
  178. package/templates/production-app/src/LivePreviewRenderer.tsx +420 -0
  179. package/templates/production-app/src/componentRegistry.ts +315 -0
  180. package/templates/production-app/src/considerations.ts +16 -0
  181. package/templates/production-app/src/index.css +284 -0
  182. package/templates/production-app/src/main.tsx +25 -0
  183. package/templates/production-app/tsconfig.json +32 -0
  184. package/templates/production-app/tsconfig.node.json +11 -0
  185. package/templates/production-app/vite.config.ts +83 -0
  186. package/templates/react-import-rule.json +2 -2
  187. package/dist/index.js +0 -12
  188. package/dist/story-ui.config.loader.js +0 -205
package/.env.sample CHANGED
@@ -1,20 +1,91 @@
1
1
  # Story UI Configuration
2
- # Copy this file to .env and add your Claude API key
2
+ # Copy this file to .env and configure your API keys
3
3
 
4
- # Claude API Configuration
4
+ # =============================================================================
5
+ # LLM Provider API Keys
6
+ # =============================================================================
7
+ # Configure one or more providers. Story UI will use the first available.
8
+
9
+ # Claude (Anthropic)
5
10
  # Get your API key from: https://console.anthropic.com/
6
- CLAUDE_API_KEY=your-claude-api-key-here
11
+ CLAUDE_API_KEY=your-claude-api-key
12
+ # Alternative key name also supported:
13
+ # ANTHROPIC_API_KEY=your-claude-api-key
14
+
15
+ # OpenAI
16
+ # Get your API key from: https://platform.openai.com/api-keys
17
+ OPENAI_API_KEY=your-openai-api-key
18
+ # Optional: Organization ID for team accounts
19
+ # OPENAI_ORG_ID=your-org-id
20
+
21
+ # Google Gemini
22
+ # Get your API key from: https://aistudio.google.com/apikey
23
+ GEMINI_API_KEY=your-gemini-api-key
24
+ # Alternative key name also supported:
25
+ # GOOGLE_API_KEY=your-gemini-api-key
26
+
27
+ # =============================================================================
28
+ # Default Model Selection
29
+ # =============================================================================
30
+ # These settings define the default provider and model for story generation.
7
31
 
8
- # Optional: Specify Claude model (defaults to claude-sonnet-4-20250514)
9
- # Available models:
10
- # claude-opus-4-20250514 - Most capable, highest quality
11
- # claude-sonnet-4-20250514 - Great balance of speed and quality (recommended)
32
+ # Default LLM provider (claude, openai, gemini)
33
+ DEFAULT_PROVIDER=claude
34
+
35
+ # Default model ID
36
+ # Claude models:
37
+ # claude-opus-4-5-20251101 - Most capable, highest quality
38
+ # claude-sonnet-4-5-20250514 - Great balance of speed and quality (recommended)
12
39
  # claude-3-7-sonnet-20250219 - Fast and efficient
13
40
  # claude-3-5-haiku-20241022 - Fastest, good for simple tasks
14
- CLAUDE_MODEL=claude-sonnet-4-20250514
41
+ # OpenAI models:
42
+ # gpt-5.1 - Latest GPT-5 with adaptive reasoning
43
+ # gpt-5.1-thinking - Extended thinking for complex tasks
44
+ # gpt-5 - Original GPT-5
45
+ # gpt-4o - Fast multimodal (recommended)
46
+ # gpt-4o-mini - Budget option
47
+ # o1 - Reasoning model
48
+ # Gemini models:
49
+ # gemini-3-pro - Most intelligent Gemini (recommended)
50
+ # gemini-2.0-flash - Fast and efficient
51
+ # gemini-1.5-pro - Legacy, large context
52
+ DEFAULT_MODEL=claude-sonnet-4-5-20250514
15
53
 
54
+ # Legacy model config (still supported):
55
+ # CLAUDE_MODEL=claude-sonnet-4-20250514
56
+ # OPENAI_MODEL=gpt-4o
57
+ # GEMINI_MODEL=gemini-2.0-flash
16
58
 
17
- # Optional: Story UI configuration file path
18
- # STORY_UI_CONFIG_PATH=./story-ui.config.js
59
+ # =============================================================================
60
+ # DevOps Guardrails (Optional)
61
+ # =============================================================================
62
+ # These settings restrict which providers and models users can select in the UI.
63
+ # Useful for enterprise deployments or cost control.
64
+
65
+ # Allowed providers (comma-separated)
66
+ # If not set, all configured providers are available
67
+ # ALLOWED_PROVIDERS=claude,openai,gemini
19
68
 
20
- VITE_STORY_UI_PORT=4001
69
+ # Allowed models (comma-separated)
70
+ # If not set, all models from allowed providers are available
71
+ # ALLOWED_MODELS=claude-sonnet-4-5-20250514,gpt-4o,gemini-2.0-flash
72
+
73
+ # Single provider mode - hide provider selection in UI
74
+ # Set to 'true' to lock users to the default provider
75
+ # SINGLE_PROVIDER_MODE=false
76
+
77
+ # =============================================================================
78
+ # Server Configuration
79
+ # =============================================================================
80
+
81
+ # MCP server port (default: 4001)
82
+ # PORT=4001
83
+
84
+ # Production mode - use in-memory story storage
85
+ # STORY_UI_PRODUCTION=true
86
+
87
+ # CORS allowed origins (comma-separated) for external access
88
+ # STORY_UI_ALLOWED_ORIGINS=https://your-domain.com,https://storybook.your-domain.com
89
+
90
+ # Optional: Custom config file path
91
+ # STORY_UI_CONFIG_PATH=./story-ui.config.js
package/README.md CHANGED
@@ -17,6 +17,16 @@ Story UI revolutionizes component documentation by automatically generating Stor
17
17
  - **Intelligent Component Discovery**: Automatically finds and analyzes your components
18
18
  - **TypeScript Support**: Full TypeScript integration with type-aware story generation
19
19
 
20
+ ### 🆕 Version 3.0 Features
21
+ - **Multi-Provider LLM Support**: Choose between Claude, OpenAI, or Gemini
22
+ - **Production Deployment**: Deploy as a standalone web app with Railway or Cloudflare
23
+ - **Post-Generation Validation**: Automatic syntax validation with error detection
24
+ - **Children Props Preservation**: Intelligent handling of `children: 'text'` in args
25
+ - **Image/Vision Support**: Attach screenshots for visual component requests
26
+ - **In-Memory Storage**: Production mode without file system writes
27
+ - **REST API**: Full CRUD operations for story management
28
+ - **Design System Agnosticism**: Core code is framework-independent
29
+
20
30
  ### 📚 Documentation System (New!)
21
31
  - **Auto-Generated Structure**: `npx story-ui init` creates a `story-ui-docs/` directory template
22
32
  - **Directory-Based Documentation**: Organize design system docs in a structured directory
@@ -255,6 +265,85 @@ npx story-ui start --port 4005
255
265
  npx story-ui start --config custom-config.js
256
266
  ```
257
267
 
268
+ ## 🚢 Production Deployment
269
+
270
+ Story UI v3 can be deployed as a standalone web application with multiple backend options.
271
+
272
+ ### Prerequisites
273
+
274
+ Install the required CLI tools:
275
+
276
+ ```bash
277
+ # Railway CLI (for backend deployment)
278
+ npm install -g @railway/cli
279
+ railway login
280
+
281
+ # Wrangler (for Cloudflare Workers - optional)
282
+ npm install -g wrangler
283
+ wrangler login
284
+ ```
285
+
286
+ ### Option 1: Railway Backend (Recommended)
287
+
288
+ Deploy the backend to Railway for a fully managed Node.js environment:
289
+
290
+ ```bash
291
+ # From the project root
292
+ cd mcp-server
293
+ railway up
294
+
295
+ # Set environment variables in Railway dashboard:
296
+ # - ANTHROPIC_API_KEY (required for Claude)
297
+ # - OPENAI_API_KEY (optional for OpenAI)
298
+ # - GEMINI_API_KEY (optional for Gemini)
299
+ ```
300
+
301
+ ### Option 2: Cloudflare Workers Edge
302
+
303
+ Deploy an edge proxy to Cloudflare Workers:
304
+
305
+ ```bash
306
+ # From the project root
307
+ cd cloudflare-edge
308
+ wrangler deploy
309
+
310
+ # Set secrets:
311
+ wrangler secret put ANTHROPIC_API_KEY
312
+ wrangler secret put OPENAI_API_KEY # optional
313
+ wrangler secret put GEMINI_API_KEY # optional
314
+ ```
315
+
316
+ ### Frontend Deployment
317
+
318
+ Deploy the chat UI to Cloudflare Pages:
319
+
320
+ ```bash
321
+ cd test-storybooks/mantine-storybook/.story-ui-build
322
+ npm run build
323
+ wrangler pages deploy dist --project-name=story-ui-app
324
+ ```
325
+
326
+ ### Environment Variables
327
+
328
+ | Variable | Required | Description |
329
+ |----------|----------|-------------|
330
+ | `ANTHROPIC_API_KEY` | Yes | Claude API key from Anthropic |
331
+ | `OPENAI_API_KEY` | No | OpenAI API key for GPT models |
332
+ | `GEMINI_API_KEY` | No | Google Gemini API key |
333
+ | `DEFAULT_MODEL` | No | Default LLM model to use |
334
+
335
+ ### REST API Endpoints
336
+
337
+ The backend provides these endpoints:
338
+
339
+ | Method | Endpoint | Description |
340
+ |--------|----------|-------------|
341
+ | `GET` | `/story-ui/providers` | List available LLM providers |
342
+ | `POST` | `/story-ui/generate` | Generate a new story |
343
+ | `GET` | `/story-ui/stories` | List all stories |
344
+ | `GET` | `/story-ui/stories/:id` | Get a specific story |
345
+ | `DELETE` | `/story-ui/stories/:id` | Delete a story |
346
+
258
347
  ## 🤝 Contributing
259
348
 
260
349
  We welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for details.
@@ -0,0 +1,17 @@
1
+ interface DeployOptions {
2
+ backend?: boolean;
3
+ frontend?: boolean;
4
+ app?: boolean;
5
+ platform?: 'railway' | 'render' | 'fly';
6
+ backendUrl?: string;
7
+ storybookDir?: string;
8
+ projectName?: string;
9
+ dryRun?: boolean;
10
+ init?: boolean;
11
+ edge?: boolean;
12
+ pages?: boolean;
13
+ all?: boolean;
14
+ }
15
+ export declare function deployCommand(options: DeployOptions): Promise<void>;
16
+ export {};
17
+ //# sourceMappingURL=deploy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../cli/deploy.ts"],"names":[],"mappings":"AASA,UAAU,aAAa;IAErB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,QAAQ,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,KAAK,CAAC;IACxC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAqpBD,wBAAsB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAwHzE"}