@tpitre/story-ui 2.2.0 → 2.3.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.
- package/.env.sample +82 -11
- package/README.md +89 -0
- package/dist/cli/deploy.d.ts +17 -0
- package/dist/cli/deploy.d.ts.map +1 -0
- package/dist/cli/deploy.js +696 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +26 -2
- package/dist/cli/setup.d.ts +11 -0
- package/dist/cli/setup.d.ts.map +1 -0
- package/dist/cli/setup.js +437 -110
- package/dist/mcp-server/index.d.ts +2 -0
- package/dist/mcp-server/index.d.ts.map +1 -0
- package/dist/mcp-server/index.js +120 -2
- package/dist/mcp-server/mcp-stdio-server.d.ts +3 -0
- package/dist/mcp-server/mcp-stdio-server.d.ts.map +1 -0
- package/dist/mcp-server/mcp-stdio-server.js +8 -1
- package/dist/mcp-server/routes/claude.d.ts +3 -0
- package/dist/mcp-server/routes/claude.d.ts.map +1 -0
- package/dist/mcp-server/routes/claude.js +60 -23
- package/dist/mcp-server/routes/components.d.ts +4 -0
- package/dist/mcp-server/routes/components.d.ts.map +1 -0
- package/dist/mcp-server/routes/frameworks.d.ts +38 -0
- package/dist/mcp-server/routes/frameworks.d.ts.map +1 -0
- package/dist/mcp-server/routes/frameworks.js +183 -0
- package/dist/mcp-server/routes/generateStory.d.ts +3 -0
- package/dist/mcp-server/routes/generateStory.d.ts.map +1 -0
- package/dist/mcp-server/routes/generateStory.js +160 -76
- package/dist/mcp-server/routes/generateStoryStream.d.ts +12 -0
- package/dist/mcp-server/routes/generateStoryStream.d.ts.map +1 -0
- package/dist/mcp-server/routes/generateStoryStream.js +947 -0
- package/dist/mcp-server/routes/hybridStories.d.ts +18 -0
- package/dist/mcp-server/routes/hybridStories.d.ts.map +1 -0
- package/dist/mcp-server/routes/mcpRemote.d.ts +14 -0
- package/dist/mcp-server/routes/mcpRemote.d.ts.map +1 -0
- package/dist/mcp-server/routes/mcpRemote.js +489 -0
- package/dist/mcp-server/routes/memoryStories.d.ts +26 -0
- package/dist/mcp-server/routes/memoryStories.d.ts.map +1 -0
- package/dist/mcp-server/routes/providers.d.ts +89 -0
- package/dist/mcp-server/routes/providers.d.ts.map +1 -0
- package/dist/mcp-server/routes/providers.js +369 -0
- package/dist/mcp-server/routes/storySync.d.ts +26 -0
- package/dist/mcp-server/routes/storySync.d.ts.map +1 -0
- package/dist/mcp-server/routes/streamTypes.d.ts +110 -0
- package/dist/mcp-server/routes/streamTypes.d.ts.map +1 -0
- package/dist/mcp-server/routes/streamTypes.js +18 -0
- package/dist/mcp-server/sessionManager.d.ts +50 -0
- package/dist/mcp-server/sessionManager.d.ts.map +1 -0
- package/dist/story-generator/componentBlacklist.d.ts +21 -0
- package/dist/story-generator/componentBlacklist.d.ts.map +1 -0
- package/dist/story-generator/componentDiscovery.d.ts +28 -0
- package/dist/story-generator/componentDiscovery.d.ts.map +1 -0
- package/dist/story-generator/componentRegistryGenerator.d.ts +49 -0
- package/dist/story-generator/componentRegistryGenerator.d.ts.map +1 -0
- package/dist/story-generator/componentRegistryGenerator.js +205 -0
- package/dist/story-generator/configLoader.d.ts +33 -0
- package/dist/story-generator/configLoader.d.ts.map +1 -0
- package/dist/story-generator/considerationsLoader.d.ts +32 -0
- package/dist/story-generator/considerationsLoader.d.ts.map +1 -0
- package/dist/story-generator/documentation-sources.d.ts +28 -0
- package/dist/story-generator/documentation-sources.d.ts.map +1 -0
- package/dist/story-generator/documentationLoader.d.ts +64 -0
- package/dist/story-generator/documentationLoader.d.ts.map +1 -0
- package/dist/story-generator/dynamicPackageDiscovery.d.ts +97 -0
- package/dist/story-generator/dynamicPackageDiscovery.d.ts.map +1 -0
- package/dist/story-generator/enhancedComponentDiscovery.d.ts +125 -0
- package/dist/story-generator/enhancedComponentDiscovery.d.ts.map +1 -0
- package/dist/story-generator/enhancedComponentDiscovery.js +111 -11
- package/dist/story-generator/framework-adapters/angular-adapter.d.ts +40 -0
- package/dist/story-generator/framework-adapters/angular-adapter.d.ts.map +1 -0
- package/dist/story-generator/framework-adapters/angular-adapter.js +427 -0
- package/dist/story-generator/framework-adapters/base-adapter.d.ts +75 -0
- package/dist/story-generator/framework-adapters/base-adapter.d.ts.map +1 -0
- package/dist/story-generator/framework-adapters/base-adapter.js +147 -0
- package/dist/story-generator/framework-adapters/framework-detector.d.ts +55 -0
- package/dist/story-generator/framework-adapters/framework-detector.d.ts.map +1 -0
- package/dist/story-generator/framework-adapters/framework-detector.js +323 -0
- package/dist/story-generator/framework-adapters/index.d.ts +97 -0
- package/dist/story-generator/framework-adapters/index.d.ts.map +1 -0
- package/dist/story-generator/framework-adapters/index.js +198 -0
- package/dist/story-generator/framework-adapters/react-adapter.d.ts +40 -0
- package/dist/story-generator/framework-adapters/react-adapter.d.ts.map +1 -0
- package/dist/story-generator/framework-adapters/react-adapter.js +316 -0
- package/dist/story-generator/framework-adapters/svelte-adapter.d.ts +40 -0
- package/dist/story-generator/framework-adapters/svelte-adapter.d.ts.map +1 -0
- package/dist/story-generator/framework-adapters/svelte-adapter.js +372 -0
- package/dist/story-generator/framework-adapters/types.d.ts +182 -0
- package/dist/story-generator/framework-adapters/types.d.ts.map +1 -0
- package/dist/story-generator/framework-adapters/types.js +8 -0
- package/dist/story-generator/framework-adapters/vue-adapter.d.ts +36 -0
- package/dist/story-generator/framework-adapters/vue-adapter.d.ts.map +1 -0
- package/dist/story-generator/framework-adapters/vue-adapter.js +336 -0
- package/dist/story-generator/framework-adapters/web-components-adapter.d.ts +54 -0
- package/dist/story-generator/framework-adapters/web-components-adapter.d.ts.map +1 -0
- package/dist/story-generator/framework-adapters/web-components-adapter.js +387 -0
- package/dist/story-generator/generateStory.d.ts +7 -0
- package/dist/story-generator/generateStory.d.ts.map +1 -0
- package/dist/story-generator/gitignoreManager.d.ts +50 -0
- package/dist/story-generator/gitignoreManager.d.ts.map +1 -0
- package/dist/story-generator/imageProcessor.d.ts +80 -0
- package/dist/story-generator/imageProcessor.d.ts.map +1 -0
- package/dist/story-generator/imageProcessor.js +391 -0
- package/dist/story-generator/inMemoryStoryService.d.ts +89 -0
- package/dist/story-generator/inMemoryStoryService.d.ts.map +1 -0
- package/dist/story-generator/llm-providers/base-provider.d.ts +36 -0
- package/dist/story-generator/llm-providers/base-provider.d.ts.map +1 -0
- package/dist/story-generator/llm-providers/base-provider.js +135 -0
- package/dist/story-generator/llm-providers/claude-provider.d.ts +23 -0
- package/dist/story-generator/llm-providers/claude-provider.d.ts.map +1 -0
- package/dist/story-generator/llm-providers/claude-provider.js +414 -0
- package/dist/story-generator/llm-providers/gemini-provider.d.ts +24 -0
- package/dist/story-generator/llm-providers/gemini-provider.d.ts.map +1 -0
- package/dist/story-generator/llm-providers/gemini-provider.js +406 -0
- package/dist/story-generator/llm-providers/index.d.ts +63 -0
- package/dist/story-generator/llm-providers/index.d.ts.map +1 -0
- package/dist/story-generator/llm-providers/index.js +169 -0
- package/dist/story-generator/llm-providers/openai-provider.d.ts +24 -0
- package/dist/story-generator/llm-providers/openai-provider.d.ts.map +1 -0
- package/dist/story-generator/llm-providers/openai-provider.js +458 -0
- package/dist/story-generator/llm-providers/settings-manager.d.ts +75 -0
- package/dist/story-generator/llm-providers/settings-manager.d.ts.map +1 -0
- package/dist/story-generator/llm-providers/settings-manager.js +173 -0
- package/dist/story-generator/llm-providers/story-llm-service.d.ts +79 -0
- package/dist/story-generator/llm-providers/story-llm-service.d.ts.map +1 -0
- package/dist/story-generator/llm-providers/story-llm-service.js +240 -0
- package/dist/story-generator/llm-providers/types.d.ts +153 -0
- package/dist/story-generator/llm-providers/types.d.ts.map +1 -0
- package/dist/story-generator/llm-providers/types.js +8 -0
- package/dist/story-generator/logger.d.ts +14 -0
- package/dist/story-generator/logger.d.ts.map +1 -0
- package/dist/story-generator/logger.js +96 -29
- package/dist/story-generator/postProcessStory.d.ts +6 -0
- package/dist/story-generator/postProcessStory.d.ts.map +1 -0
- package/dist/story-generator/productionGitignoreManager.d.ts +91 -0
- package/dist/story-generator/productionGitignoreManager.d.ts.map +1 -0
- package/dist/story-generator/promptGenerator.d.ts +48 -0
- package/dist/story-generator/promptGenerator.d.ts.map +1 -0
- package/dist/story-generator/promptGenerator.js +186 -1
- package/dist/story-generator/storyHistory.d.ts +44 -0
- package/dist/story-generator/storyHistory.d.ts.map +1 -0
- package/dist/story-generator/storySync.d.ts +68 -0
- package/dist/story-generator/storySync.d.ts.map +1 -0
- package/dist/story-generator/storyTracker.d.ts +48 -0
- package/dist/story-generator/storyTracker.d.ts.map +1 -0
- package/dist/story-generator/storyValidator.d.ts +6 -0
- package/dist/story-generator/storyValidator.d.ts.map +1 -0
- package/dist/story-generator/universalDesignSystemAdapter.d.ts +68 -0
- package/dist/story-generator/universalDesignSystemAdapter.d.ts.map +1 -0
- package/dist/story-generator/universalDesignSystemAdapter.js +138 -1
- package/dist/story-generator/urlRedirectService.d.ts +21 -0
- package/dist/story-generator/urlRedirectService.d.ts.map +1 -0
- package/dist/story-generator/validateStory.d.ts +19 -0
- package/dist/story-generator/validateStory.d.ts.map +1 -0
- package/dist/story-generator/validateStory.js +6 -2
- package/dist/story-generator/visionPrompts.d.ts +88 -0
- package/dist/story-generator/visionPrompts.d.ts.map +1 -0
- package/dist/story-generator/visionPrompts.js +462 -0
- package/dist/story-ui.config.d.ts +78 -0
- package/dist/story-ui.config.d.ts.map +1 -0
- package/dist/templates/StoryUI/StoryUIPanel.d.ts +4 -0
- package/dist/templates/StoryUI/StoryUIPanel.d.ts.map +1 -0
- package/dist/templates/StoryUI/StoryUIPanel.js +1874 -0
- package/dist/templates/StoryUI/StoryUIPanel.stories.d.ts +18 -0
- package/dist/templates/StoryUI/StoryUIPanel.stories.d.ts.map +1 -0
- package/dist/templates/StoryUI/StoryUIPanel.stories.js +37 -0
- package/dist/templates/StoryUI/index.d.ts +3 -0
- package/dist/templates/StoryUI/index.d.ts.map +1 -0
- package/dist/templates/StoryUI/index.js +2 -0
- package/package.json +17 -3
- package/templates/StoryUI/StoryUIPanel.tsx +1960 -384
- package/templates/StoryUI/index.tsx +1 -1
- package/templates/StoryUI/manager.tsx +264 -0
- package/templates/production-app/.env.example +11 -0
- package/templates/production-app/index.html +66 -0
- package/templates/production-app/package.json +30 -0
- package/templates/production-app/public/favicon.svg +5 -0
- package/templates/production-app/src/App.tsx +1560 -0
- package/templates/production-app/src/LivePreviewRenderer.tsx +420 -0
- package/templates/production-app/src/componentRegistry.ts +315 -0
- package/templates/production-app/src/considerations.ts +16 -0
- package/templates/production-app/src/index.css +284 -0
- package/templates/production-app/src/main.tsx +25 -0
- package/templates/production-app/tsconfig.json +32 -0
- package/templates/production-app/tsconfig.node.json +11 -0
- package/templates/production-app/vite.config.ts +83 -0
- package/templates/react-import-rule.json +2 -2
- package/dist/index.js +0 -12
- package/dist/story-ui.config.loader.js +0 -205
|
@@ -0,0 +1,462 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vision Prompts Module
|
|
3
|
+
*
|
|
4
|
+
* Provides specialized prompt templates for image-to-story generation using vision-capable LLMs.
|
|
5
|
+
* These prompts guide the AI to analyze UI screenshots, design mockups, and component layouts,
|
|
6
|
+
* then generate accurate Storybook CSF 3.0 stories.
|
|
7
|
+
*
|
|
8
|
+
* Critical Success Factors:
|
|
9
|
+
* - Precise visual-to-code mapping instructions
|
|
10
|
+
* - Explicit output format requirements
|
|
11
|
+
* - Edge case handling (unclear images, partial views)
|
|
12
|
+
* - Framework and design system awareness
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* Vision prompt types for different image analysis scenarios
|
|
16
|
+
*/
|
|
17
|
+
export var VisionPromptType;
|
|
18
|
+
(function (VisionPromptType) {
|
|
19
|
+
/** Convert a UI screenshot to a complete Storybook story */
|
|
20
|
+
VisionPromptType["SCREENSHOT_TO_STORY"] = "screenshot_to_story";
|
|
21
|
+
/** Convert a design mockup (Figma, Sketch, etc.) to a story */
|
|
22
|
+
VisionPromptType["DESIGN_TO_STORY"] = "design_to_story";
|
|
23
|
+
/** Analyze and identify components present in an image */
|
|
24
|
+
VisionPromptType["COMPONENT_ANALYSIS"] = "component_analysis";
|
|
25
|
+
/** Analyze layout structure, spacing, and responsive behavior */
|
|
26
|
+
VisionPromptType["LAYOUT_ANALYSIS"] = "layout_analysis";
|
|
27
|
+
})(VisionPromptType || (VisionPromptType = {}));
|
|
28
|
+
/**
|
|
29
|
+
* Generate system prompt for vision-based story generation
|
|
30
|
+
*
|
|
31
|
+
* This prompt establishes the AI's role, capabilities, and expected output format.
|
|
32
|
+
* It's crucial for consistent, high-quality story generation from images.
|
|
33
|
+
*/
|
|
34
|
+
export function getVisionSystemPrompt(type, availableComponents) {
|
|
35
|
+
const baseInstructions = `You are an expert UI/UX engineer specializing in converting visual designs into production-ready Storybook stories. Your task is to analyze the provided image and generate accurate, well-structured Storybook Component Story Format (CSF) 3.0 code.
|
|
36
|
+
|
|
37
|
+
## Core Capabilities
|
|
38
|
+
|
|
39
|
+
1. **Visual Analysis**: Precisely identify UI components, layout patterns, spacing, colors, typography, and interactive states
|
|
40
|
+
2. **Component Mapping**: Match visual elements to appropriate component implementations
|
|
41
|
+
3. **Code Generation**: Produce valid, type-safe Storybook stories following CSF 3.0 standards
|
|
42
|
+
4. **Best Practices**: Apply accessibility, responsive design, and component composition patterns
|
|
43
|
+
|
|
44
|
+
## Critical Requirements
|
|
45
|
+
|
|
46
|
+
### Output Format
|
|
47
|
+
- Generate ONLY valid Storybook CSF 3.0 code
|
|
48
|
+
- Use TypeScript interfaces for prop types
|
|
49
|
+
- Include meta export with component metadata
|
|
50
|
+
- Create multiple story variants when appropriate (Default, variants, states)
|
|
51
|
+
- Add JSDoc comments for complex props or logic
|
|
52
|
+
|
|
53
|
+
### Code Quality Standards
|
|
54
|
+
- Type-safe: All props must have explicit types
|
|
55
|
+
- Semantic: Use meaningful variable and story names
|
|
56
|
+
- Accessible: Include ARIA labels and roles where needed
|
|
57
|
+
- Maintainable: Clear structure with proper imports
|
|
58
|
+
- DRY: Extract common patterns into reusable configurations
|
|
59
|
+
|
|
60
|
+
### Visual Fidelity
|
|
61
|
+
- Match spacing and layout precisely (use exact px/rem values when clear)
|
|
62
|
+
- Preserve color schemes (use hex/rgb values or design token references)
|
|
63
|
+
- Replicate typography hierarchy (font sizes, weights, line heights)
|
|
64
|
+
- Maintain responsive behavior patterns
|
|
65
|
+
- Capture interactive states (hover, focus, active, disabled)`;
|
|
66
|
+
const componentGuidance = availableComponents && availableComponents.length > 0
|
|
67
|
+
? `\n\n## Available Components\n\nYou have access to these pre-built components:\n${availableComponents.map(c => `- ${c}`).join('\n')}\n\n**IMPORTANT**: Prefer using these existing components over creating custom implementations. If a visual element matches one of these components, use it directly. Only suggest custom components if no suitable match exists.`
|
|
68
|
+
: '';
|
|
69
|
+
const typeSpecificInstructions = getTypeSpecificSystemInstructions(type);
|
|
70
|
+
return `${baseInstructions}${componentGuidance}\n\n${typeSpecificInstructions}`;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Get type-specific system instructions for different analysis modes
|
|
74
|
+
*/
|
|
75
|
+
function getTypeSpecificSystemInstructions(type) {
|
|
76
|
+
switch (type) {
|
|
77
|
+
case VisionPromptType.SCREENSHOT_TO_STORY:
|
|
78
|
+
return `## Screenshot-to-Story Mode
|
|
79
|
+
|
|
80
|
+
You are analyzing a screenshot of an existing UI implementation. Your goal is to recreate it as a Storybook story.
|
|
81
|
+
|
|
82
|
+
### Analysis Checklist
|
|
83
|
+
|
|
84
|
+
1. **Component Identification**
|
|
85
|
+
- What is the primary component being displayed?
|
|
86
|
+
- Are there nested child components?
|
|
87
|
+
- What are the component boundaries?
|
|
88
|
+
|
|
89
|
+
2. **Props and Configuration**
|
|
90
|
+
- What props are being used? (text content, icons, images, etc.)
|
|
91
|
+
- What variants or states are visible? (size, color, disabled, etc.)
|
|
92
|
+
- Are there event handlers needed? (onClick, onChange, etc.)
|
|
93
|
+
|
|
94
|
+
3. **Layout and Styling**
|
|
95
|
+
- Container dimensions and constraints
|
|
96
|
+
- Spacing between elements (margin, padding, gap)
|
|
97
|
+
- Alignment and positioning (flexbox, grid patterns)
|
|
98
|
+
- Responsive breakpoint behaviors (if visible)
|
|
99
|
+
|
|
100
|
+
4. **Content and Data**
|
|
101
|
+
- Static text content
|
|
102
|
+
- Dynamic data patterns (lists, tables, forms)
|
|
103
|
+
- Placeholder vs. real content
|
|
104
|
+
|
|
105
|
+
5. **Edge Cases to Handle**
|
|
106
|
+
- If the screenshot is partial, note what's visible vs. inferred
|
|
107
|
+
- If image quality is poor, indicate assumptions made
|
|
108
|
+
- If multiple components overlap, suggest the component hierarchy
|
|
109
|
+
|
|
110
|
+
### Output Structure
|
|
111
|
+
|
|
112
|
+
Generate a complete .stories.tsx file with:
|
|
113
|
+
1. Imports (React, component, types)
|
|
114
|
+
2. Meta export with title, component, tags, and argTypes
|
|
115
|
+
3. Default story showing the exact screenshot state
|
|
116
|
+
4. Additional stories for variants/states if they're inferable
|
|
117
|
+
5. Inline comments explaining non-obvious decisions`;
|
|
118
|
+
case VisionPromptType.DESIGN_TO_STORY:
|
|
119
|
+
return `## Design-to-Story Mode
|
|
120
|
+
|
|
121
|
+
You are analyzing a design mockup (from Figma, Sketch, etc.) that needs to be implemented as a Storybook story.
|
|
122
|
+
|
|
123
|
+
### Design Analysis Approach
|
|
124
|
+
|
|
125
|
+
1. **Design Intent vs. Implementation**
|
|
126
|
+
- Identify the designer's intent (not just pixel-perfect copying)
|
|
127
|
+
- Recognize standard UI patterns and components
|
|
128
|
+
- Distinguish decorative elements from functional ones
|
|
129
|
+
|
|
130
|
+
2. **Component Architecture**
|
|
131
|
+
- How should this design be broken into components?
|
|
132
|
+
- Which parts should be props vs. composition?
|
|
133
|
+
- What component variants are needed?
|
|
134
|
+
|
|
135
|
+
3. **Design System Alignment**
|
|
136
|
+
- Does this match existing design system patterns?
|
|
137
|
+
- Are there custom elements that need new components?
|
|
138
|
+
- Can we use composition of existing components?
|
|
139
|
+
|
|
140
|
+
4. **Responsive Considerations**
|
|
141
|
+
- What breakpoints are implied by the design?
|
|
142
|
+
- How should content reflow on smaller screens?
|
|
143
|
+
- Are there mobile-specific design variations?
|
|
144
|
+
|
|
145
|
+
5. **State Management**
|
|
146
|
+
- What interactive states exist? (hover, active, focus, disabled, loading, error)
|
|
147
|
+
- Are there animations or transitions?
|
|
148
|
+
- What user interactions are expected?
|
|
149
|
+
|
|
150
|
+
### Design Mockup Specifics
|
|
151
|
+
|
|
152
|
+
- **Annotations**: Look for design specs (spacing, colors, fonts) in the image
|
|
153
|
+
- **Redlines**: Note any measurement indicators or spacing guides
|
|
154
|
+
- **Style Guide**: Reference any visible design tokens or style definitions
|
|
155
|
+
- **Multiple Artboards**: If multiple screens/states are visible, create separate stories
|
|
156
|
+
|
|
157
|
+
### Output Approach
|
|
158
|
+
|
|
159
|
+
1. Start with component structure and hierarchy
|
|
160
|
+
2. Map visual styles to CSS/styled-components/CSS-in-JS
|
|
161
|
+
3. Define prop interfaces that enable design flexibility
|
|
162
|
+
4. Create stories for each design variant shown
|
|
163
|
+
5. Add notes about implementation assumptions or questions`;
|
|
164
|
+
case VisionPromptType.COMPONENT_ANALYSIS:
|
|
165
|
+
return `## Component Analysis Mode
|
|
166
|
+
|
|
167
|
+
You are performing a detailed component inventory analysis of the UI shown in the image.
|
|
168
|
+
|
|
169
|
+
### Analysis Objectives
|
|
170
|
+
|
|
171
|
+
1. **Component Catalog**
|
|
172
|
+
- Identify every distinct UI component
|
|
173
|
+
- Classify by type (button, input, card, modal, etc.)
|
|
174
|
+
- Note component instances vs. unique components
|
|
175
|
+
|
|
176
|
+
2. **Component Characteristics**
|
|
177
|
+
- Props and configurations for each component
|
|
178
|
+
- Variants observed (sizes, colors, states)
|
|
179
|
+
- Nested component relationships
|
|
180
|
+
|
|
181
|
+
3. **Hierarchy and Composition**
|
|
182
|
+
- Parent-child relationships
|
|
183
|
+
- Container components vs. presentational components
|
|
184
|
+
- Composition patterns (slots, render props, etc.)
|
|
185
|
+
|
|
186
|
+
4. **Reusability Assessment**
|
|
187
|
+
- Which components are reusable primitives?
|
|
188
|
+
- Which are specialized/composite components?
|
|
189
|
+
- What components could be shared across the app?
|
|
190
|
+
|
|
191
|
+
### Output Format
|
|
192
|
+
|
|
193
|
+
Provide a structured analysis:
|
|
194
|
+
|
|
195
|
+
\`\`\`typescript
|
|
196
|
+
// Component Inventory Analysis
|
|
197
|
+
|
|
198
|
+
interface ComponentAnalysis {
|
|
199
|
+
components: {
|
|
200
|
+
name: string; // Suggested component name
|
|
201
|
+
type: string; // Component category
|
|
202
|
+
instances: number; // How many times it appears
|
|
203
|
+
props: Record<string, any>; // Observed props/config
|
|
204
|
+
variants: string[]; // Different variants seen
|
|
205
|
+
location: string; // Where in the UI hierarchy
|
|
206
|
+
notes: string; // Implementation notes
|
|
207
|
+
}[];
|
|
208
|
+
|
|
209
|
+
hierarchy: {
|
|
210
|
+
component: string;
|
|
211
|
+
children: string[];
|
|
212
|
+
}[];
|
|
213
|
+
|
|
214
|
+
recommendations: string[]; // Suggestions for component structure
|
|
215
|
+
}
|
|
216
|
+
\`\`\`
|
|
217
|
+
|
|
218
|
+
Then provide the analysis object with detailed observations.`;
|
|
219
|
+
case VisionPromptType.LAYOUT_ANALYSIS:
|
|
220
|
+
return `## Layout Analysis Mode
|
|
221
|
+
|
|
222
|
+
You are analyzing the structural layout, spacing system, and responsive patterns in the UI.
|
|
223
|
+
|
|
224
|
+
### Layout Analysis Dimensions
|
|
225
|
+
|
|
226
|
+
1. **Container Structure**
|
|
227
|
+
- Root container type (full-width, max-width, centered)
|
|
228
|
+
- Main layout pattern (single column, grid, sidebar, dashboard)
|
|
229
|
+
- Section divisions and boundaries
|
|
230
|
+
|
|
231
|
+
2. **Spacing System**
|
|
232
|
+
- Consistent spacing units (4px, 8px, 16px scale?)
|
|
233
|
+
- Margin patterns between sections
|
|
234
|
+
- Padding within containers
|
|
235
|
+
- Gap between grid/flex items
|
|
236
|
+
|
|
237
|
+
3. **Grid and Alignment**
|
|
238
|
+
- Grid structure (12-column, custom?)
|
|
239
|
+
- Column widths and gutters
|
|
240
|
+
- Alignment patterns (start, center, end, stretch)
|
|
241
|
+
- Vertical rhythm and baseline grid
|
|
242
|
+
|
|
243
|
+
4. **Responsive Behavior**
|
|
244
|
+
- Breakpoint thresholds (mobile, tablet, desktop)
|
|
245
|
+
- Content reflow patterns
|
|
246
|
+
- Component stacking order on mobile
|
|
247
|
+
- Hidden/shown elements per breakpoint
|
|
248
|
+
|
|
249
|
+
5. **Z-Index and Layering**
|
|
250
|
+
- Element stacking order
|
|
251
|
+
- Overlays and modals
|
|
252
|
+
- Sticky/fixed positioning
|
|
253
|
+
- Dropdown and menu layers
|
|
254
|
+
|
|
255
|
+
### Output Structure
|
|
256
|
+
|
|
257
|
+
Provide CSS/styled-components code showing:
|
|
258
|
+
|
|
259
|
+
1. Container and wrapper styles
|
|
260
|
+
2. Layout primitives (Box, Stack, Grid, Flex)
|
|
261
|
+
3. Spacing constants and design tokens
|
|
262
|
+
4. Responsive breakpoint configurations
|
|
263
|
+
5. Example component using these layout patterns
|
|
264
|
+
|
|
265
|
+
Include comments explaining the layout decisions and how they create the observed visual structure.`;
|
|
266
|
+
default:
|
|
267
|
+
return '';
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
/**
|
|
271
|
+
* Generate user prompt to accompany the image
|
|
272
|
+
*
|
|
273
|
+
* This is the direct instruction sent with the image to the LLM.
|
|
274
|
+
*/
|
|
275
|
+
export function getVisionUserPrompt(type, additionalContext) {
|
|
276
|
+
const contextSection = additionalContext
|
|
277
|
+
? `\n\n## Additional Context\n${additionalContext}\n`
|
|
278
|
+
: '';
|
|
279
|
+
switch (type) {
|
|
280
|
+
case VisionPromptType.SCREENSHOT_TO_STORY:
|
|
281
|
+
return `Please analyze the attached screenshot and generate a complete Storybook story that recreates this UI exactly.
|
|
282
|
+
|
|
283
|
+
**Your Task:**
|
|
284
|
+
1. Identify the main component and all sub-components visible
|
|
285
|
+
2. Determine the props and configuration used
|
|
286
|
+
3. Generate a complete .stories.tsx file in CSF 3.0 format
|
|
287
|
+
4. Include the default story matching the screenshot
|
|
288
|
+
5. Add variant stories if you can infer other states
|
|
289
|
+
|
|
290
|
+
**Important:**
|
|
291
|
+
- Be precise about spacing, colors, and typography
|
|
292
|
+
- If you can't determine exact values, use reasonable defaults and add a comment
|
|
293
|
+
- If the screenshot is partial or unclear, note your assumptions
|
|
294
|
+
- Generate production-ready, type-safe code${contextSection}
|
|
295
|
+
|
|
296
|
+
**Output:** A complete, runnable .stories.tsx file with all necessary imports and exports.`;
|
|
297
|
+
case VisionPromptType.DESIGN_TO_STORY:
|
|
298
|
+
return `Please analyze the attached design mockup and generate a Storybook story implementation.
|
|
299
|
+
|
|
300
|
+
**Your Task:**
|
|
301
|
+
1. Understand the design intent and component structure
|
|
302
|
+
2. Map visual elements to appropriate component patterns
|
|
303
|
+
3. Extract design tokens (colors, spacing, typography)
|
|
304
|
+
4. Generate a complete .stories.tsx file in CSF 3.0 format
|
|
305
|
+
5. Create stories for all design variants shown
|
|
306
|
+
|
|
307
|
+
**Important:**
|
|
308
|
+
- Focus on design intent, not just pixel-perfect copying
|
|
309
|
+
- Use semantic component names that reflect purpose
|
|
310
|
+
- Leverage design system components when possible
|
|
311
|
+
- Consider responsive behavior and state variations
|
|
312
|
+
- Note any assumptions about interactions or behaviors${contextSection}
|
|
313
|
+
|
|
314
|
+
**Output:** A complete, runnable .stories.tsx file that faithfully implements the design.`;
|
|
315
|
+
case VisionPromptType.COMPONENT_ANALYSIS:
|
|
316
|
+
return `Please analyze the attached image and provide a detailed component inventory.
|
|
317
|
+
|
|
318
|
+
**Your Task:**
|
|
319
|
+
1. Identify every distinct UI component in the image
|
|
320
|
+
2. Classify components by type and purpose
|
|
321
|
+
3. Note all variants and states observed
|
|
322
|
+
4. Map out the component hierarchy
|
|
323
|
+
5. Provide recommendations for component structure
|
|
324
|
+
|
|
325
|
+
**Important:**
|
|
326
|
+
- Be thorough - catalog every button, input, icon, card, etc.
|
|
327
|
+
- Distinguish between component instances and unique components
|
|
328
|
+
- Identify composition patterns and reusable primitives
|
|
329
|
+
- Suggest how components should be organized${contextSection}
|
|
330
|
+
|
|
331
|
+
**Output:** A structured ComponentAnalysis object (see system prompt for format) with detailed observations.`;
|
|
332
|
+
case VisionPromptType.LAYOUT_ANALYSIS:
|
|
333
|
+
return `Please analyze the layout structure and spacing system in the attached image.
|
|
334
|
+
|
|
335
|
+
**Your Task:**
|
|
336
|
+
1. Identify the overall layout pattern and container structure
|
|
337
|
+
2. Measure and document the spacing system
|
|
338
|
+
3. Analyze grid/flex patterns and alignment
|
|
339
|
+
4. Infer responsive behavior and breakpoints
|
|
340
|
+
5. Generate layout code showing the structure
|
|
341
|
+
|
|
342
|
+
**Important:**
|
|
343
|
+
- Be precise about spacing values (try to identify consistent units)
|
|
344
|
+
- Document the grid system or layout primitives
|
|
345
|
+
- Note any responsive patterns or breakpoint behaviors
|
|
346
|
+
- Explain how the layout creates the visual hierarchy${contextSection}
|
|
347
|
+
|
|
348
|
+
**Output:** Layout code (CSS/styled-components) with detailed comments explaining the spatial relationships.`;
|
|
349
|
+
default:
|
|
350
|
+
return 'Please analyze the attached image.';
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
/**
|
|
354
|
+
* Build a complete vision-aware prompt combining system and user prompts
|
|
355
|
+
*
|
|
356
|
+
* This is the main entry point for generating vision prompts with full context.
|
|
357
|
+
*/
|
|
358
|
+
export function buildVisionAwarePrompt(options) {
|
|
359
|
+
const { promptType, userDescription, availableComponents, framework = 'react', designSystem, additionalContext, } = options;
|
|
360
|
+
// Build framework and design system context
|
|
361
|
+
let enhancedContext = additionalContext || '';
|
|
362
|
+
if (framework) {
|
|
363
|
+
enhancedContext += `\n\n**Target Framework:** ${framework}`;
|
|
364
|
+
enhancedContext += `\n- Generate ${framework}-specific code and patterns`;
|
|
365
|
+
enhancedContext += `\n- Use ${framework} conventions for component structure`;
|
|
366
|
+
}
|
|
367
|
+
if (designSystem) {
|
|
368
|
+
enhancedContext += `\n\n**Design System:** ${designSystem}`;
|
|
369
|
+
enhancedContext += `\n- Use ${designSystem} components and patterns`;
|
|
370
|
+
enhancedContext += `\n- Reference ${designSystem} design tokens when applicable`;
|
|
371
|
+
enhancedContext += `\n- Follow ${designSystem} best practices and composition patterns`;
|
|
372
|
+
}
|
|
373
|
+
if (userDescription) {
|
|
374
|
+
enhancedContext += `\n\n**User Request:**\n${userDescription}`;
|
|
375
|
+
}
|
|
376
|
+
// Generate system prompt with component context
|
|
377
|
+
const systemPrompt = getVisionSystemPrompt(promptType, availableComponents);
|
|
378
|
+
// Generate user prompt with enhanced context
|
|
379
|
+
const userPrompt = getVisionUserPrompt(promptType, enhancedContext);
|
|
380
|
+
return {
|
|
381
|
+
systemPrompt,
|
|
382
|
+
userPrompt,
|
|
383
|
+
};
|
|
384
|
+
}
|
|
385
|
+
/**
|
|
386
|
+
* Helper function to validate image input for vision analysis
|
|
387
|
+
*
|
|
388
|
+
* Checks that the image is in a supported format and provides guidance if not.
|
|
389
|
+
*/
|
|
390
|
+
export function validateImageInput(imagePath) {
|
|
391
|
+
const supportedExtensions = ['.png', '.jpg', '.jpeg', '.webp', '.gif'];
|
|
392
|
+
const extension = imagePath.toLowerCase().substring(imagePath.lastIndexOf('.'));
|
|
393
|
+
if (!supportedExtensions.includes(extension)) {
|
|
394
|
+
return {
|
|
395
|
+
valid: false,
|
|
396
|
+
error: `Unsupported image format: ${extension}`,
|
|
397
|
+
suggestions: [
|
|
398
|
+
'Convert the image to PNG, JPG, or WebP format',
|
|
399
|
+
'Ensure the image file has a valid extension',
|
|
400
|
+
`Supported formats: ${supportedExtensions.join(', ')}`,
|
|
401
|
+
],
|
|
402
|
+
};
|
|
403
|
+
}
|
|
404
|
+
return { valid: true };
|
|
405
|
+
}
|
|
406
|
+
/**
|
|
407
|
+
* Helper function to suggest optimal image quality for vision analysis
|
|
408
|
+
*/
|
|
409
|
+
export function getImageQualityGuidelines() {
|
|
410
|
+
return [
|
|
411
|
+
'Resolution: Minimum 800x600px, optimal 1920x1080px or higher',
|
|
412
|
+
'Clarity: Ensure text is readable and UI elements are clearly visible',
|
|
413
|
+
'Cropping: Include the full component/layout, avoid cutting off edges',
|
|
414
|
+
'Format: PNG for UI screenshots (lossless), JPG for photos (compressed)',
|
|
415
|
+
'Size: Under 20MB for best performance',
|
|
416
|
+
'Color: Use sRGB color space for accurate color representation',
|
|
417
|
+
'Zoom: Capture at 100% zoom level, not zoomed in or out',
|
|
418
|
+
'Annotations: Include design specs/measurements if available',
|
|
419
|
+
];
|
|
420
|
+
}
|
|
421
|
+
/**
|
|
422
|
+
* Extract framework-specific import patterns for generated stories
|
|
423
|
+
*/
|
|
424
|
+
export function getFrameworkImports(framework) {
|
|
425
|
+
const imports = {
|
|
426
|
+
react: `import React from 'react';
|
|
427
|
+
import type { Meta, StoryObj } from '@storybook/react';`,
|
|
428
|
+
vue: `import type { Meta, StoryObj } from '@storybook/vue3';`,
|
|
429
|
+
angular: `import type { Meta, StoryObj } from '@storybook/angular';`,
|
|
430
|
+
svelte: `import type { Meta, StoryObj } from '@storybook/svelte';`,
|
|
431
|
+
'web-components': `import type { Meta, StoryObj } from '@storybook/web-components';`,
|
|
432
|
+
};
|
|
433
|
+
return imports[framework.toLowerCase()] || imports.react;
|
|
434
|
+
}
|
|
435
|
+
/**
|
|
436
|
+
* Get design system specific import hints
|
|
437
|
+
*/
|
|
438
|
+
export function getDesignSystemImports(designSystem) {
|
|
439
|
+
const imports = {
|
|
440
|
+
'chakra-ui': [
|
|
441
|
+
"import { ChakraProvider } from '@chakra-ui/react';",
|
|
442
|
+
"// Wrap stories in ChakraProvider if needed",
|
|
443
|
+
],
|
|
444
|
+
'mantine': [
|
|
445
|
+
"import { MantineProvider } from '@mantine/core';",
|
|
446
|
+
"// Wrap stories in MantineProvider if needed",
|
|
447
|
+
],
|
|
448
|
+
'material-ui': [
|
|
449
|
+
"import { ThemeProvider } from '@mui/material/styles';",
|
|
450
|
+
"// Wrap stories in ThemeProvider if needed",
|
|
451
|
+
],
|
|
452
|
+
'ant-design': [
|
|
453
|
+
"import { ConfigProvider } from 'antd';",
|
|
454
|
+
"// Wrap stories in ConfigProvider if needed",
|
|
455
|
+
],
|
|
456
|
+
'tailwind': [
|
|
457
|
+
"// Ensure Tailwind CSS is imported in your Storybook preview",
|
|
458
|
+
"// import '../styles/globals.css';",
|
|
459
|
+
],
|
|
460
|
+
};
|
|
461
|
+
return imports[designSystem.toLowerCase()] || [];
|
|
462
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
export interface ComponentConfig {
|
|
2
|
+
name: string;
|
|
3
|
+
displayName?: string;
|
|
4
|
+
importPath?: string;
|
|
5
|
+
props?: string[];
|
|
6
|
+
examples?: string[];
|
|
7
|
+
description?: string;
|
|
8
|
+
category?: 'layout' | 'content' | 'form' | 'navigation' | 'feedback' | 'other';
|
|
9
|
+
slots?: string[];
|
|
10
|
+
}
|
|
11
|
+
export interface LayoutRules {
|
|
12
|
+
multiColumnWrapper: string;
|
|
13
|
+
columnComponent: string;
|
|
14
|
+
containerComponent?: string;
|
|
15
|
+
layoutExamples?: {
|
|
16
|
+
twoColumn?: string;
|
|
17
|
+
threeColumn?: string;
|
|
18
|
+
[key: string]: string | undefined;
|
|
19
|
+
};
|
|
20
|
+
prohibitedElements?: string[];
|
|
21
|
+
}
|
|
22
|
+
export interface AdditionalImport {
|
|
23
|
+
path: string;
|
|
24
|
+
components: string[];
|
|
25
|
+
}
|
|
26
|
+
export interface DesignSystemGuidelines {
|
|
27
|
+
name: string;
|
|
28
|
+
preferredComponents?: {
|
|
29
|
+
[category: string]: string;
|
|
30
|
+
};
|
|
31
|
+
spacingTokens?: {
|
|
32
|
+
prefix: string;
|
|
33
|
+
values: string[];
|
|
34
|
+
};
|
|
35
|
+
colorTokens?: {
|
|
36
|
+
prefix: string;
|
|
37
|
+
categories: string[];
|
|
38
|
+
};
|
|
39
|
+
prohibitedPatterns?: {
|
|
40
|
+
cssFrameworks?: string[];
|
|
41
|
+
classNamePatterns?: string[];
|
|
42
|
+
inlineStyles?: string[];
|
|
43
|
+
};
|
|
44
|
+
enforcementRules?: {
|
|
45
|
+
requireDesignTokens?: boolean;
|
|
46
|
+
prohibitArbitraryValues?: boolean;
|
|
47
|
+
enforceComponentLibrary?: boolean;
|
|
48
|
+
};
|
|
49
|
+
/** Additional notes/guidelines for AI story generation (e.g., shadcn-specific instructions) */
|
|
50
|
+
additionalNotes?: string;
|
|
51
|
+
}
|
|
52
|
+
export interface StoryUIConfig {
|
|
53
|
+
generatedStoriesPath: string;
|
|
54
|
+
componentsPath?: string;
|
|
55
|
+
componentsMetadataPath?: string;
|
|
56
|
+
storyPrefix: string;
|
|
57
|
+
defaultAuthor: string;
|
|
58
|
+
importPath: string;
|
|
59
|
+
componentPrefix: string;
|
|
60
|
+
/** Framework type for story generation (e.g., 'react', 'web-components', 'angular', 'vue', 'svelte') */
|
|
61
|
+
framework?: string;
|
|
62
|
+
components: ComponentConfig[];
|
|
63
|
+
layoutComponents?: ComponentConfig[];
|
|
64
|
+
layoutRules: LayoutRules;
|
|
65
|
+
sampleStory: string;
|
|
66
|
+
systemPrompt?: string;
|
|
67
|
+
layoutInstructions?: string[];
|
|
68
|
+
examples?: string[];
|
|
69
|
+
additionalImports?: AdditionalImport[];
|
|
70
|
+
considerationsPath?: string;
|
|
71
|
+
storybookFramework?: string;
|
|
72
|
+
designSystemGuidelines?: DesignSystemGuidelines;
|
|
73
|
+
}
|
|
74
|
+
export declare const DEFAULT_CONFIG: StoryUIConfig;
|
|
75
|
+
export declare const GENERIC_CONFIG_TEMPLATE: Partial<StoryUIConfig>;
|
|
76
|
+
export declare const STORY_UI_CONFIG: StoryUIConfig;
|
|
77
|
+
export declare function createStoryUIConfig(userConfig: Partial<StoryUIConfig>): StoryUIConfig;
|
|
78
|
+
//# sourceMappingURL=story-ui.config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"story-ui.config.d.ts","sourceRoot":"","sources":["../story-ui.config.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,YAAY,GAAG,UAAU,GAAG,OAAO,CAAC;IAC/E,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAGD,MAAM,WAAW,WAAW;IAC1B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,cAAc,CAAC,EAAE;QACf,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;KACnC,CAAC;IACF,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC/B;AAGD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAKD,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,mBAAmB,CAAC,EAAE;QACpB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC;KAC5B,CAAC;IACF,aAAa,CAAC,EAAE;QACd,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,EAAE,CAAC;KAClB,CAAC;IACF,WAAW,CAAC,EAAE;QACZ,MAAM,EAAE,MAAM,CAAC;QACf,UAAU,EAAE,MAAM,EAAE,CAAC;KACtB,CAAC;IACF,kBAAkB,CAAC,EAAE;QACnB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;QACzB,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;QAC7B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;KACzB,CAAC;IACF,gBAAgB,CAAC,EAAE;QACjB,mBAAmB,CAAC,EAAE,OAAO,CAAC;QAC9B,uBAAuB,CAAC,EAAE,OAAO,CAAC;QAClC,uBAAuB,CAAC,EAAE,OAAO,CAAC;KACnC,CAAC;IACF,+FAA+F;IAC/F,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAGD,MAAM,WAAW,aAAa;IAC5B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,wGAAwG;IACxG,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,eAAe,EAAE,CAAC;IAC9B,gBAAgB,CAAC,EAAE,eAAe,EAAE,CAAC;IACrC,WAAW,EAAE,WAAW,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,iBAAiB,CAAC,EAAE,gBAAgB,EAAE,CAAC;IACvC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,sBAAsB,CAAC,EAAE,sBAAsB,CAAC;CACjD;AAGD,eAAO,MAAM,cAAc,EAAE,aA4E5B,CAAC;AAGF,eAAO,MAAM,uBAAuB,EAAE,OAAO,CAAC,aAAa,CAoB1D,CAAC;AAGF,eAAO,MAAM,eAAe,EAAE,aAA8B,CAAC;AAG7D,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,aAAa,CAarF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StoryUIPanel.d.ts","sourceRoot":"","sources":["../../../templates/StoryUI/StoryUIPanel.tsx"],"names":[],"mappings":"AAs4CA,iBAAS,YAAY,4CAqsCpB;AAED,eAAe,YAAY,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAE,CAAC"}
|