@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,83 @@
|
|
|
1
|
+
import { defineConfig, loadEnv } from 'vite';
|
|
2
|
+
import react from '@vitejs/plugin-react';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
|
|
5
|
+
// https://vitejs.dev/config/
|
|
6
|
+
export default defineConfig(({ mode }) => {
|
|
7
|
+
// Load env file based on mode
|
|
8
|
+
const env = loadEnv(mode, process.cwd(), '');
|
|
9
|
+
|
|
10
|
+
return {
|
|
11
|
+
plugins: [react()],
|
|
12
|
+
|
|
13
|
+
// Define environment variables to expose to the client
|
|
14
|
+
define: {
|
|
15
|
+
// Backend API URL - required for production
|
|
16
|
+
'import.meta.env.VITE_BACKEND_URL': JSON.stringify(
|
|
17
|
+
env.VITE_BACKEND_URL || 'http://localhost:4001'
|
|
18
|
+
),
|
|
19
|
+
// App title customization
|
|
20
|
+
'import.meta.env.VITE_APP_TITLE': JSON.stringify(
|
|
21
|
+
env.VITE_APP_TITLE || 'Story UI'
|
|
22
|
+
),
|
|
23
|
+
},
|
|
24
|
+
|
|
25
|
+
// Resolve aliases for cleaner imports
|
|
26
|
+
resolve: {
|
|
27
|
+
alias: {
|
|
28
|
+
'@': path.resolve(__dirname, './src'),
|
|
29
|
+
'@components': path.resolve(__dirname, './src/components'),
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
|
|
33
|
+
// Server configuration for development
|
|
34
|
+
server: {
|
|
35
|
+
port: 5173,
|
|
36
|
+
strictPort: false,
|
|
37
|
+
host: true, // Listen on all addresses
|
|
38
|
+
// Proxy API requests to backend in development
|
|
39
|
+
proxy: {
|
|
40
|
+
'/mcp': {
|
|
41
|
+
target: env.VITE_BACKEND_URL || 'http://localhost:4001',
|
|
42
|
+
changeOrigin: true,
|
|
43
|
+
},
|
|
44
|
+
'/story-ui': {
|
|
45
|
+
target: env.VITE_BACKEND_URL || 'http://localhost:4001',
|
|
46
|
+
changeOrigin: true,
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
|
|
51
|
+
// Build configuration
|
|
52
|
+
build: {
|
|
53
|
+
outDir: 'dist',
|
|
54
|
+
sourcemap: mode === 'development',
|
|
55
|
+
// Optimize chunk size
|
|
56
|
+
rollupOptions: {
|
|
57
|
+
output: {
|
|
58
|
+
manualChunks: {
|
|
59
|
+
// Split vendor chunks for better caching
|
|
60
|
+
'vendor-react': ['react', 'react-dom'],
|
|
61
|
+
'vendor-babel': ['@babel/standalone'],
|
|
62
|
+
},
|
|
63
|
+
},
|
|
64
|
+
},
|
|
65
|
+
// Target modern browsers
|
|
66
|
+
target: 'es2020',
|
|
67
|
+
// Minification
|
|
68
|
+
minify: 'esbuild',
|
|
69
|
+
},
|
|
70
|
+
|
|
71
|
+
// Optimize dependencies
|
|
72
|
+
optimizeDeps: {
|
|
73
|
+
include: ['react', 'react-dom', '@babel/standalone'],
|
|
74
|
+
},
|
|
75
|
+
|
|
76
|
+
// Preview server configuration (for testing production build locally)
|
|
77
|
+
preview: {
|
|
78
|
+
port: 4173,
|
|
79
|
+
strictPort: false,
|
|
80
|
+
host: true,
|
|
81
|
+
},
|
|
82
|
+
};
|
|
83
|
+
});
|
|
@@ -13,11 +13,11 @@
|
|
|
13
13
|
"correct": [
|
|
14
14
|
"import React from 'react';",
|
|
15
15
|
"import type { Meta, StoryObj } from '@storybook/react-webpack5';",
|
|
16
|
-
"import { Button, Card } from '
|
|
16
|
+
"import { Button, Card } from 'your-component-library';"
|
|
17
17
|
],
|
|
18
18
|
"incorrect": [
|
|
19
19
|
"import type { Meta, StoryObj } from '@storybook/react-webpack5';",
|
|
20
|
-
"import { Button, Card } from '
|
|
20
|
+
"import { Button, Card } from 'your-component-library';",
|
|
21
21
|
"// Missing React import!"
|
|
22
22
|
]
|
|
23
23
|
}
|
package/dist/index.js
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
// Main exports for Story UI package
|
|
2
|
-
export * from './story-ui.config.js';
|
|
3
|
-
export * from './story-ui.config.loader.js';
|
|
4
|
-
export * from './story-generator/componentDiscovery.js';
|
|
5
|
-
export * from './story-generator/promptGenerator.js';
|
|
6
|
-
export { createStoryUIConfig, DEFAULT_CONFIG, GENERIC_CONFIG_TEMPLATE } from './story-ui.config.js';
|
|
7
|
-
export { configLoader, loadStoryUIConfig } from './story-ui.config.loader.js';
|
|
8
|
-
export { discoverComponents, discoverComponentsFromDirectory, discoverComponentsFromCustomElements, discoverComponentsFromPackage } from './story-generator/componentDiscovery.js';
|
|
9
|
-
export { generatePrompt, buildClaudePrompt } from './story-generator/promptGenerator.js';
|
|
10
|
-
export { ProductionGitignoreManager, setupProductionGitignore } from './story-generator/productionGitignoreManager.js';
|
|
11
|
-
export { InMemoryStoryService, getInMemoryStoryService } from './story-generator/inMemoryStoryService.js';
|
|
12
|
-
export { StorySyncService, getStorySyncService } from './story-generator/storySync.js';
|
|
@@ -1,205 +0,0 @@
|
|
|
1
|
-
import fs from 'fs';
|
|
2
|
-
import path from 'path';
|
|
3
|
-
import { createStoryUIConfig, GENERIC_CONFIG_TEMPLATE } from './story-ui.config.js';
|
|
4
|
-
/**
|
|
5
|
-
* Loads Story UI configuration from various sources
|
|
6
|
-
*/
|
|
7
|
-
export class StoryUIConfigLoader {
|
|
8
|
-
constructor() {
|
|
9
|
-
this.config = null;
|
|
10
|
-
}
|
|
11
|
-
static getInstance() {
|
|
12
|
-
if (!StoryUIConfigLoader.instance) {
|
|
13
|
-
StoryUIConfigLoader.instance = new StoryUIConfigLoader();
|
|
14
|
-
}
|
|
15
|
-
return StoryUIConfigLoader.instance;
|
|
16
|
-
}
|
|
17
|
-
/**
|
|
18
|
-
* Load configuration from a file
|
|
19
|
-
*/
|
|
20
|
-
async loadFromFile(configPath) {
|
|
21
|
-
if (!fs.existsSync(configPath)) {
|
|
22
|
-
throw new Error(`Configuration file not found: ${configPath}`);
|
|
23
|
-
}
|
|
24
|
-
try {
|
|
25
|
-
// Support both .js and .json config files
|
|
26
|
-
let userConfig;
|
|
27
|
-
if (configPath.endsWith('.json')) {
|
|
28
|
-
const configContent = fs.readFileSync(configPath, 'utf-8');
|
|
29
|
-
userConfig = JSON.parse(configContent);
|
|
30
|
-
}
|
|
31
|
-
else {
|
|
32
|
-
// Dynamic import for .js/.ts files
|
|
33
|
-
const configModule = await import(configPath);
|
|
34
|
-
userConfig = configModule.default || configModule.config || configModule;
|
|
35
|
-
}
|
|
36
|
-
this.config = createStoryUIConfig(userConfig);
|
|
37
|
-
return this.config;
|
|
38
|
-
}
|
|
39
|
-
catch (error) {
|
|
40
|
-
throw new Error(`Failed to load configuration from ${configPath}: ${error}`);
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* Load configuration from package.json
|
|
45
|
-
*/
|
|
46
|
-
loadFromPackageJson(packagePath = process.cwd()) {
|
|
47
|
-
const packageJsonPath = path.join(packagePath, 'package.json');
|
|
48
|
-
if (!fs.existsSync(packageJsonPath)) {
|
|
49
|
-
throw new Error(`package.json not found at ${packageJsonPath}`);
|
|
50
|
-
}
|
|
51
|
-
try {
|
|
52
|
-
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
|
|
53
|
-
const storyUIConfig = packageJson.storyUI || {};
|
|
54
|
-
// Auto-detect common paths if not specified
|
|
55
|
-
if (!storyUIConfig.generatedStoriesPath) {
|
|
56
|
-
const possiblePaths = [
|
|
57
|
-
path.join(packagePath, 'src/stories/generated'),
|
|
58
|
-
path.join(packagePath, 'stories/generated'),
|
|
59
|
-
path.join(packagePath, '.storybook/generated'),
|
|
60
|
-
path.join(packagePath, 'src/components/generated')
|
|
61
|
-
];
|
|
62
|
-
for (const possiblePath of possiblePaths) {
|
|
63
|
-
if (fs.existsSync(path.dirname(possiblePath))) {
|
|
64
|
-
storyUIConfig.generatedStoriesPath = possiblePath;
|
|
65
|
-
break;
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
// Auto-detect components path
|
|
70
|
-
if (!storyUIConfig.componentsPath) {
|
|
71
|
-
const possiblePaths = [
|
|
72
|
-
path.join(packagePath, 'src/components'),
|
|
73
|
-
path.join(packagePath, 'lib/components'),
|
|
74
|
-
path.join(packagePath, 'components'),
|
|
75
|
-
path.join(packagePath, 'src')
|
|
76
|
-
];
|
|
77
|
-
for (const possiblePath of possiblePaths) {
|
|
78
|
-
if (fs.existsSync(possiblePath)) {
|
|
79
|
-
storyUIConfig.componentsPath = possiblePath;
|
|
80
|
-
break;
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
// Auto-detect import path from package name
|
|
85
|
-
if (!storyUIConfig.importPath && packageJson.name) {
|
|
86
|
-
storyUIConfig.importPath = packageJson.name;
|
|
87
|
-
}
|
|
88
|
-
this.config = createStoryUIConfig(storyUIConfig);
|
|
89
|
-
return this.config;
|
|
90
|
-
}
|
|
91
|
-
catch (error) {
|
|
92
|
-
throw new Error(`Failed to load configuration from package.json: ${error}`);
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
/**
|
|
96
|
-
* Auto-detect configuration from project structure
|
|
97
|
-
*/
|
|
98
|
-
autoDetectConfig(projectPath = process.cwd()) {
|
|
99
|
-
const config = { ...GENERIC_CONFIG_TEMPLATE };
|
|
100
|
-
// Try to detect from package.json first
|
|
101
|
-
try {
|
|
102
|
-
return this.loadFromPackageJson(projectPath);
|
|
103
|
-
}
|
|
104
|
-
catch (error) {
|
|
105
|
-
console.warn('Could not load from package.json, using auto-detection');
|
|
106
|
-
}
|
|
107
|
-
// Auto-detect paths
|
|
108
|
-
const possibleComponentPaths = [
|
|
109
|
-
path.join(projectPath, 'src/components'),
|
|
110
|
-
path.join(projectPath, 'lib/components'),
|
|
111
|
-
path.join(projectPath, 'components'),
|
|
112
|
-
path.join(projectPath, 'src')
|
|
113
|
-
];
|
|
114
|
-
for (const possiblePath of possibleComponentPaths) {
|
|
115
|
-
if (fs.existsSync(possiblePath)) {
|
|
116
|
-
config.componentsPath = possiblePath;
|
|
117
|
-
break;
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
// Set generated stories path
|
|
121
|
-
config.generatedStoriesPath = path.join(projectPath, 'src/stories/generated');
|
|
122
|
-
// Try to detect component prefix from existing components
|
|
123
|
-
if (config.componentsPath) {
|
|
124
|
-
const componentDirs = fs.readdirSync(config.componentsPath, { withFileTypes: true })
|
|
125
|
-
.filter(d => d.isDirectory())
|
|
126
|
-
.map(d => d.name)
|
|
127
|
-
.slice(0, 5); // Check first 5 components
|
|
128
|
-
// Look for common prefixes
|
|
129
|
-
const prefixes = ['UI', 'App', 'My', 'Custom'];
|
|
130
|
-
for (const prefix of prefixes) {
|
|
131
|
-
if (componentDirs.some(name => name.startsWith(prefix))) {
|
|
132
|
-
config.componentPrefix = prefix;
|
|
133
|
-
break;
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
this.config = createStoryUIConfig(config);
|
|
138
|
-
return this.config;
|
|
139
|
-
}
|
|
140
|
-
/**
|
|
141
|
-
* Get current configuration
|
|
142
|
-
*/
|
|
143
|
-
getConfig() {
|
|
144
|
-
return this.config;
|
|
145
|
-
}
|
|
146
|
-
/**
|
|
147
|
-
* Set configuration directly
|
|
148
|
-
*/
|
|
149
|
-
setConfig(config) {
|
|
150
|
-
this.config = config;
|
|
151
|
-
}
|
|
152
|
-
/**
|
|
153
|
-
* Generate a sample configuration file
|
|
154
|
-
*/
|
|
155
|
-
generateSampleConfig(outputPath, type = 'json') {
|
|
156
|
-
const sampleConfig = {
|
|
157
|
-
generatedStoriesPath: './src/stories/generated',
|
|
158
|
-
componentsPath: './src/components',
|
|
159
|
-
storyPrefix: 'Generated/',
|
|
160
|
-
defaultAuthor: 'Story UI AI',
|
|
161
|
-
importPath: 'your-component-library',
|
|
162
|
-
componentPrefix: 'UI',
|
|
163
|
-
layoutRules: {
|
|
164
|
-
multiColumnWrapper: 'div',
|
|
165
|
-
columnComponent: 'div',
|
|
166
|
-
layoutExamples: {
|
|
167
|
-
twoColumn: `<div style={{display: 'grid', gridTemplateColumns: '1fr 1fr', gap: '1rem'}}>
|
|
168
|
-
<div>Column 1 content</div>
|
|
169
|
-
<div>Column 2 content</div>
|
|
170
|
-
</div>`,
|
|
171
|
-
threeColumn: `<div style={{display: 'grid', gridTemplateColumns: '1fr 1fr 1fr', gap: '1rem'}}>
|
|
172
|
-
<div>Column 1 content</div>
|
|
173
|
-
<div>Column 2 content</div>
|
|
174
|
-
<div>Column 3 content</div>
|
|
175
|
-
</div>`
|
|
176
|
-
},
|
|
177
|
-
prohibitedElements: []
|
|
178
|
-
}
|
|
179
|
-
};
|
|
180
|
-
if (type === 'json') {
|
|
181
|
-
fs.writeFileSync(outputPath, JSON.stringify(sampleConfig, null, 2));
|
|
182
|
-
}
|
|
183
|
-
else {
|
|
184
|
-
const jsContent = `export default ${JSON.stringify(sampleConfig, null, 2)};`;
|
|
185
|
-
fs.writeFileSync(outputPath, jsContent);
|
|
186
|
-
}
|
|
187
|
-
console.log(`Sample configuration written to: ${outputPath}`);
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
// Convenience functions
|
|
191
|
-
export const configLoader = StoryUIConfigLoader.getInstance();
|
|
192
|
-
export function loadStoryUIConfig(configPath) {
|
|
193
|
-
if (configPath) {
|
|
194
|
-
return configLoader.loadFromFile(configPath);
|
|
195
|
-
}
|
|
196
|
-
else {
|
|
197
|
-
// Try auto-detection
|
|
198
|
-
try {
|
|
199
|
-
return Promise.resolve(configLoader.loadFromPackageJson());
|
|
200
|
-
}
|
|
201
|
-
catch {
|
|
202
|
-
return Promise.resolve(configLoader.autoDetectConfig());
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
}
|