@phantom-pm/cli 1.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.
package/README.md ADDED
@@ -0,0 +1,52 @@
1
+ # @phantom-pm/cli
2
+
3
+ PHANTOM - The invisible force behind every great product.
4
+
5
+ Open-source PM operating system for developers and AI agents.
6
+
7
+ ## Installation
8
+
9
+ ```bash
10
+ npm install -g @phantom-pm/cli
11
+ ```
12
+
13
+ ## Quick Start
14
+
15
+ ```bash
16
+ # Initialize PHANTOM with your project
17
+ phantom context add ./my-project
18
+
19
+ # Generate a PRD in seconds
20
+ phantom prd create "User Authentication System"
21
+
22
+ # Get AI-powered analysis
23
+ phantom swarm "Should we add social login?"
24
+
25
+ # Create user stories
26
+ phantom stories generate "Payment processing"
27
+ ```
28
+
29
+ ## Features
30
+
31
+ - 🧠 **Context Engine** - Understands your entire codebase
32
+ - 🤖 **Agent Swarm** - 7 specialized PM agents analyze decisions
33
+ - 📦 **Module System** - 40+ installable capabilities
34
+ - 🔒 **100% Local** - Your data never leaves your machine
35
+ - 🌉 **The Bridge** - Translates PM ↔ Dev automatically
36
+ - ⚡ **MCP Integration** - Works with Claude Code, Cursor, VS Code
37
+
38
+ ## Documentation
39
+
40
+ - [Getting Started](https://phantom.pm/docs/getting-started)
41
+ - [CLI Reference](https://phantom.pm/docs/cli)
42
+ - [Modules Guide](https://phantom.pm/docs/modules)
43
+
44
+ ## Links
45
+
46
+ - Website: https://phantom.pm
47
+ - GitHub: https://github.com/PhantomPM/phantom
48
+ - Discord: https://discord.gg/phantom
49
+
50
+ ## License
51
+
52
+ MIT
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerConfigCommands(program: Command): void;
3
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,QAiMtD"}
@@ -0,0 +1,173 @@
1
+ // PHANTOM CLI - Configuration Commands
2
+ import { getConfig } from '@phantom-pm/core';
3
+ import { input, password } from '@inquirer/prompts';
4
+ export function registerConfigCommands(program) {
5
+ const config = program
6
+ .command('config')
7
+ .description('Manage PHANTOM configuration and API keys');
8
+ config
9
+ .command('set')
10
+ .description('Set configuration values')
11
+ .argument('<key>', 'Configuration key (e.g., apiKey.openai)')
12
+ .argument('<value>', 'Configuration value')
13
+ .action(async (key, value) => {
14
+ const cfg = getConfig();
15
+ // Parse nested keys like apiKey.openai
16
+ const parts = key.split('.');
17
+ if (parts.length === 1) {
18
+ // Top-level config
19
+ cfg.set(key, value);
20
+ }
21
+ else if (parts[0] === 'apiKeys') {
22
+ // API key
23
+ cfg.setAPIKey(parts[1], value);
24
+ }
25
+ console.log(`✅ Set ${key} = ${value.replace(/./g, '*').slice(0, 10)}...`);
26
+ });
27
+ config
28
+ .command('get')
29
+ .description('Get configuration value')
30
+ .argument('[key]', 'Configuration key (e.g., apiKey.openai)')
31
+ .action((key) => {
32
+ const cfg = getConfig();
33
+ if (!key) {
34
+ // Show all config (filter sensitive data)
35
+ const allConfig = cfg.get();
36
+ const filtered = {
37
+ ...allConfig,
38
+ apiKeys: Object.keys(allConfig.apiKeys).reduce((acc, k) => ({
39
+ ...acc,
40
+ [k]: allConfig.apiKeys[k]
41
+ ? '******'
42
+ : undefined
43
+ }), {}),
44
+ };
45
+ console.log(JSON.stringify(filtered, null, 2));
46
+ }
47
+ else {
48
+ const parts = key.split('.');
49
+ if (parts.length === 1) {
50
+ // Top-level config
51
+ const value = cfg.get()[key];
52
+ console.log(value);
53
+ }
54
+ else if (parts[0] === 'apiKeys') {
55
+ // API key
56
+ const value = cfg.getAPIKey(parts[1]);
57
+ console.log(value ? '******' : '(not set)');
58
+ }
59
+ }
60
+ });
61
+ config
62
+ .command('setup')
63
+ .description('Interactive configuration setup wizard')
64
+ .action(async () => {
65
+ console.log('🔧 PHANTOM Configuration Wizard\n');
66
+ const cfg = getConfig();
67
+ // OpenAI API Key
68
+ const openaiKey = await input({
69
+ message: 'OpenAI API Key (optional, for GPT-4, embeddings):',
70
+ default: cfg.getAPIKey('openai') || '',
71
+ });
72
+ if (openaiKey) {
73
+ cfg.setAPIKey('openai', openaiKey);
74
+ console.log('✅ OpenAI API key saved');
75
+ }
76
+ // Anthropic API Key
77
+ const anthropicKey = await input({
78
+ message: 'Anthropic API Key (optional, for Claude):',
79
+ default: cfg.getAPIKey('anthropic') || '',
80
+ });
81
+ if (anthropicKey) {
82
+ cfg.setAPIKey('anthropic', anthropicKey);
83
+ console.log('✅ Anthropic API key saved');
84
+ }
85
+ // GitHub OAuth
86
+ console.log('\n📦 GitHub Integration (for cloning repos, creating issues):');
87
+ const githubClientId = await input({
88
+ message: 'GitHub OAuth Client ID (optional):',
89
+ default: cfg.getAPIKey('githubClientId') || '',
90
+ });
91
+ const githubClientSecret = await password({
92
+ message: 'GitHub OAuth Client Secret (optional):',
93
+ mask: true,
94
+ });
95
+ if (githubClientId && githubClientSecret) {
96
+ cfg.setAPIKey('githubClientId', githubClientId);
97
+ cfg.setAPIKey('githubClientSecret', githubClientSecret);
98
+ console.log('✅ GitHub OAuth credentials saved');
99
+ }
100
+ // Theme
101
+ const theme = await input({
102
+ message: 'Theme (matrix, cyberpunk, minimal):',
103
+ default: cfg.get().theme || 'matrix',
104
+ validate: (value) => ['matrix', 'cyberpunk', 'minimal'].includes(value)
105
+ ? true
106
+ : 'Please choose matrix, cyberpunk, or minimal',
107
+ });
108
+ cfg.set('theme', theme);
109
+ // Save config
110
+ cfg.completeFirstRun();
111
+ console.log('\n🎉 Configuration complete!');
112
+ console.log('You can now use:');
113
+ console.log(' phantom swarm "Should we add dark mode?"');
114
+ console.log(' phantom prd create "New Feature"');
115
+ console.log(' phantom config get');
116
+ });
117
+ config
118
+ .command('clear')
119
+ .description('Clear configuration (including API keys)')
120
+ .option('--api-keys', 'Clear only API keys')
121
+ .action((options) => {
122
+ const cfg = getConfig();
123
+ if (options.apiKeys) {
124
+ cfg.clearAPIKeys();
125
+ console.log('✅ Cleared all API keys');
126
+ }
127
+ else {
128
+ // Reset to defaults
129
+ const defaultConfig = cfg.get();
130
+ defaultConfig.firstRun = true;
131
+ defaultConfig.integrations = [];
132
+ defaultConfig.projects = [];
133
+ defaultConfig.installedModules = [];
134
+ defaultConfig.apiKeys = {};
135
+ cfg.save();
136
+ console.log('✅ Cleared all configuration (reset to defaults)');
137
+ }
138
+ });
139
+ config
140
+ .command('env')
141
+ .description('Show environment configuration status')
142
+ .action(() => {
143
+ const cfg = getConfig();
144
+ const configData = cfg.get();
145
+ console.log('🔍 PHANTOM Configuration Status\n');
146
+ console.log('📊 General:');
147
+ console.log(` Version: ${configData.version}`);
148
+ console.log(` Theme: ${configData.theme}`);
149
+ console.log(` Data Mode: ${configData.dataMode}`);
150
+ console.log(` First Run: ${configData.firstRun}`);
151
+ console.log(` Installed Modules: ${configData.installedModules.length}`);
152
+ console.log('\n🔑 API Keys:');
153
+ const apiKeys = configData.apiKeys;
154
+ console.log(` OpenAI: ${apiKeys.openai ? '✅ Set' : '❌ Not set'}`);
155
+ console.log(` Anthropic: ${apiKeys.anthropic ? '✅ Set' : '❌ Not set'}`);
156
+ console.log(` GitHub OAuth: ${apiKeys.githubClientId ? '✅ Set' : '❌ Not set'}`);
157
+ console.log('\n🤖 AI Models:');
158
+ console.log(` Primary: ${configData.primaryModel.provider} (${configData.primaryModel.model})`);
159
+ console.log(` Status: ${configData.primaryModel.status}`);
160
+ if (configData.fallbackModel) {
161
+ console.log(` Fallback: ${configData.fallbackModel.provider} (${configData.fallbackModel.model})`);
162
+ }
163
+ console.log('\n🔗 Integrations:');
164
+ configData.integrations.forEach((integration, i) => {
165
+ console.log(` ${i + 1}. ${integration.name}: ${integration.connected ? '✅ Connected' : '❌ Disconnected'}`);
166
+ });
167
+ console.log('\n💡 Environment Variables:');
168
+ console.log(` OPENAI_API_KEY: ${process.env.OPENAI_API_KEY ? '✅ Set' : '❌ Not set'}`);
169
+ console.log(` ANTHROPIC_API_KEY: ${process.env.ANTHROPIC_API_KEY ? '✅ Set' : '❌ Not set'}`);
170
+ console.log(` GITHUB_CLIENT_ID: ${process.env.GITHUB_CLIENT_ID ? '✅ Set' : '❌ Not set'}`);
171
+ });
172
+ }
173
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerStoriesCommands(program: Command): void;
3
+ //# sourceMappingURL=stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stories.d.ts","sourceRoot":"","sources":["../../src/commands/stories.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,QAyHvD"}
@@ -0,0 +1,119 @@
1
+ // PHANTOM CLI - Stories Commands
2
+ import { getModuleManager } from '@phantom-pm/core';
3
+ import { theme } from '@phantom-pm/tui';
4
+ export function registerStoriesCommands(program) {
5
+ const stories = program
6
+ .command('stories')
7
+ .description('Generate user stories from feature description or PRD');
8
+ stories
9
+ .command('generate')
10
+ .description('Generate user stories from a feature description')
11
+ .argument('<feature>', 'Feature description')
12
+ .option('-c, --count <number>', 'Number of stories to generate', '5')
13
+ .option('--no-edge-cases', 'Skip edge case stories')
14
+ .option('-o, --output <filename>', 'Output filename', 'user-stories.md')
15
+ .option('--json', 'Output as JSON')
16
+ .action(async (feature, options) => {
17
+ try {
18
+ const moduleManager = getModuleManager();
19
+ // Ensure story-writer module is installed
20
+ if (!moduleManager.isInstalled('story-writer')) {
21
+ console.log('');
22
+ console.log(theme.warning(' Story Writer module not installed. Installing...'));
23
+ await moduleManager.install('story-writer');
24
+ }
25
+ const result = await moduleManager.executeCommand('story-writer', 'stories generate', {
26
+ feature,
27
+ count: parseInt(options.count || '5'),
28
+ includeEdgeCases: options.edgeCases !== false,
29
+ output: options.output,
30
+ _: ['generate', feature],
31
+ });
32
+ if (options.json) {
33
+ console.log(JSON.stringify(result, null, 2));
34
+ return;
35
+ }
36
+ console.log('');
37
+ console.log(theme.success(' Stories generated successfully!'));
38
+ console.log(` ${theme.secondary('Feature:')} ${feature}`);
39
+ console.log(` ${theme.secondary('Stories:')} ${result.stories?.length || 0}`);
40
+ console.log(` ${theme.secondary('Total Points:')} ${result.totalPoints || 0}`);
41
+ if (result.filePath) {
42
+ console.log(` ${theme.secondary('Output:')} ${result.filePath}`);
43
+ }
44
+ console.log('');
45
+ }
46
+ catch (err) {
47
+ const message = err instanceof Error ? err.message : 'Failed to generate stories';
48
+ if (options.json) {
49
+ console.log(JSON.stringify({ status: 'error', error: message }, null, 2));
50
+ }
51
+ else {
52
+ console.log('');
53
+ console.log(theme.error(` ${message}`));
54
+ console.log('');
55
+ }
56
+ process.exitCode = 1;
57
+ }
58
+ });
59
+ stories
60
+ .command('from-prd')
61
+ .description('Generate user stories from a PRD file')
62
+ .argument('<prd-path>', 'Path to PRD file')
63
+ .option('-s, --sprints <number>', 'Number of sprints to plan', '2')
64
+ .option('--json', 'Output as JSON')
65
+ .action(async (prdPath, options) => {
66
+ try {
67
+ const moduleManager = getModuleManager();
68
+ // Ensure story-writer module is installed
69
+ if (!moduleManager.isInstalled('story-writer')) {
70
+ console.log('');
71
+ console.log(theme.warning(' Story Writer module not installed. Installing...'));
72
+ await moduleManager.install('story-writer');
73
+ }
74
+ const result = await moduleManager.executeCommand('story-writer', 'stories from-prd', {
75
+ prdPath,
76
+ sprintCount: parseInt(options.sprints || '2'),
77
+ _: ['from-prd', prdPath],
78
+ });
79
+ if (options.json) {
80
+ console.log(JSON.stringify(result, null, 2));
81
+ return;
82
+ }
83
+ console.log('');
84
+ console.log(theme.success(' Stories generated from PRD successfully!'));
85
+ console.log(` ${theme.secondary('PRD Path:')} ${prdPath}`);
86
+ console.log(` ${theme.secondary('Sprints:')} ${result.sprints?.length || 0}`);
87
+ console.log(` ${theme.secondary('Total Stories:')} ${result.totalStories || 0}`);
88
+ if (result.outputPath) {
89
+ console.log(` ${theme.secondary('Output:')} ${result.outputPath}`);
90
+ }
91
+ console.log('');
92
+ }
93
+ catch (err) {
94
+ const message = err instanceof Error ? err.message : 'Failed to generate stories from PRD';
95
+ if (options.json) {
96
+ console.log(JSON.stringify({ status: 'error', error: message }, null, 2));
97
+ }
98
+ else {
99
+ console.log('');
100
+ console.log(theme.error(` ${message}`));
101
+ console.log('');
102
+ }
103
+ process.exitCode = 1;
104
+ }
105
+ });
106
+ stories
107
+ .description('Show story generation usage')
108
+ .action(() => {
109
+ console.log('');
110
+ console.log(theme.title(' USER STORY GENERATION'));
111
+ console.log(theme.secondary(' AI-powered user story generation from features or PRDs'));
112
+ console.log('');
113
+ console.log(` ${theme.accent('phantom stories generate "User authentication system"')}`);
114
+ console.log(` ${theme.accent('phantom stories from-prd ./my-product-prd.md')}`);
115
+ console.log(` ${theme.accent('phantom stories generate "Payment processing" --count 8')}`);
116
+ console.log('');
117
+ });
118
+ }
119
+ //# sourceMappingURL=stories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stories.js","sourceRoot":"","sources":["../../src/commands/stories.ts"],"names":[],"mappings":"AAAA,iCAAiC;AAGjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAExC,MAAM,UAAU,uBAAuB,CAAC,OAAgB;IACtD,MAAM,OAAO,GAAG,OAAO;SACpB,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,uDAAuD,CAAC,CAAC;IAExE,OAAO;SACJ,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CAAC,kDAAkD,CAAC;SAC/D,QAAQ,CAAC,WAAW,EAAE,qBAAqB,CAAC;SAC5C,MAAM,CAAC,sBAAsB,EAAE,+BAA+B,EAAE,GAAG,CAAC;SACpE,MAAM,CAAC,iBAAiB,EAAE,wBAAwB,CAAC;SACnD,MAAM,CAAC,yBAAyB,EAAE,iBAAiB,EAAE,iBAAiB,CAAC;SACvE,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,KAAK,EAAE,OAAe,EAAE,OAAiF,EAAE,EAAE;QACnH,IAAI,CAAC;YACH,MAAM,aAAa,GAAG,gBAAgB,EAAE,CAAC;YAEzC,0CAA0C;YAC1C,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,cAAc,CAAC,EAAE,CAAC;gBAC/C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,oDAAoD,CAAC,CAAC,CAAC;gBACjF,MAAM,aAAa,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;YAC9C,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,cAAc,CAAC,cAAc,EAAE,kBAAkB,EAAE;gBACpF,OAAO;gBACP,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,KAAK,IAAI,GAAG,CAAC;gBACrC,gBAAgB,EAAE,OAAO,CAAC,SAAS,KAAK,KAAK;gBAC7C,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,CAAC,EAAE,CAAC,UAAU,EAAE,OAAO,CAAC;aACzB,CAAC,CAAC;YAEH,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC7C,OAAO;YACT,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,mCAAmC,CAAC,CAAC,CAAC;YAChE,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC;YAC3D,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;YAC/E,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,SAAS,CAAC,eAAe,CAAC,IAAI,MAAM,CAAC,WAAW,IAAI,CAAC,EAAE,CAAC,CAAC;YAChF,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACpB,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;YACpE,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClB,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,4BAA4B,CAAC;YAClF,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC5E,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC;gBACzC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAClB,CAAC;YACD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACvB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CAAC,uCAAuC,CAAC;SACpD,QAAQ,CAAC,YAAY,EAAE,kBAAkB,CAAC;SAC1C,MAAM,CAAC,wBAAwB,EAAE,2BAA2B,EAAE,GAAG,CAAC;SAClE,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,KAAK,EAAE,OAAe,EAAE,OAA6C,EAAE,EAAE;QAC/E,IAAI,CAAC;YACH,MAAM,aAAa,GAAG,gBAAgB,EAAE,CAAC;YAEzC,0CAA0C;YAC1C,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,cAAc,CAAC,EAAE,CAAC;gBAC/C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,oDAAoD,CAAC,CAAC,CAAC;gBACjF,MAAM,aAAa,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;YAC9C,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,cAAc,CAAC,cAAc,EAAE,kBAAkB,EAAE;gBACpF,OAAO;gBACP,WAAW,EAAE,QAAQ,CAAC,OAAO,CAAC,OAAO,IAAI,GAAG,CAAC;gBAC7C,CAAC,EAAE,CAAC,UAAU,EAAE,OAAO,CAAC;aACzB,CAAC,CAAC;YAEH,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC7C,OAAO;YACT,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,4CAA4C,CAAC,CAAC,CAAC;YACzE,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC;YAC5D,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;YAC/E,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,SAAS,CAAC,gBAAgB,CAAC,IAAI,MAAM,CAAC,YAAY,IAAI,CAAC,EAAE,CAAC,CAAC;YAClF,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;gBACtB,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;YACtE,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClB,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,qCAAqC,CAAC;YAC3F,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC5E,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC;gBACzC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAClB,CAAC;YACD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACvB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,WAAW,CAAC,6BAA6B,CAAC;SAC1C,MAAM,CAAC,GAAG,EAAE;QACX,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,0DAA0D,CAAC,CAAC,CAAC;QACzF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,MAAM,CAAC,uDAAuD,CAAC,EAAE,CAAC,CAAC;QAC1F,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,MAAM,CAAC,8CAA8C,CAAC,EAAE,CAAC,CAAC;QACjF,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,MAAM,CAAC,yDAAyD,CAAC,EAAE,CAAC,CAAC;QAC5F,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":""}