@tachui/devtools 0.8.1-alpha → 0.8.8
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 +2 -2
- package/dist/debug/index.d.ts +1 -0
- package/dist/debug/index.d.ts.map +1 -1
- package/dist/debug/index.js +0 -1
- package/dist/import-guide.d.ts +50 -0
- package/dist/import-guide.d.ts.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +741 -1
- package/dist/index.prod.js +0 -1
- package/dist/inspector/index.js +0 -1
- package/dist/modifier-metadata.d.ts +4 -0
- package/dist/modifier-metadata.d.ts.map +1 -0
- package/dist/modifier-parameter-system.d.ts +69 -0
- package/dist/modifier-parameter-system.d.ts.map +1 -0
- package/dist/profiler/index.js +0 -1
- package/dist/runtime-modifier-validation.d.ts +72 -0
- package/dist/runtime-modifier-validation.d.ts.map +1 -0
- package/dist/testing/index.js +0 -1
- package/dist/vite-plugin-import-optimizer.d.ts +33 -0
- package/dist/vite-plugin-import-optimizer.d.ts.map +1 -0
- package/dist/vscode-extension/modifier-intellisense.d.ts +36 -0
- package/dist/vscode-extension/modifier-intellisense.d.ts.map +1 -0
- package/package.json +9 -4
- package/dist/debug/index.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/index.prod.js.map +0 -1
- package/dist/inspector/index.js.map +0 -1
- package/dist/profiler/index.js.map +0 -1
- package/dist/testing/index.js.map +0 -1
package/dist/index.prod.js
CHANGED
package/dist/inspector/index.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modifier-metadata.d.ts","sourceRoot":"","sources":["../src/modifier-metadata.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAiExD,wBAAgB,wBAAwB,CACtC,QAAQ,GAAE,gBAAyC,GAClD,IAAI,CA8BN;AAED,eAAe,wBAAwB,CAAA"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TachUI Modifier Parameter Insight System
|
|
3
|
+
*
|
|
4
|
+
* Provides comprehensive parameter documentation and validation for all modifiers
|
|
5
|
+
* across all TachUI plugins
|
|
6
|
+
*/
|
|
7
|
+
export interface ModifierParameter {
|
|
8
|
+
name: string;
|
|
9
|
+
type: string;
|
|
10
|
+
required: boolean;
|
|
11
|
+
description: string;
|
|
12
|
+
defaultValue?: any;
|
|
13
|
+
examples: string[];
|
|
14
|
+
validation?: {
|
|
15
|
+
min?: number;
|
|
16
|
+
max?: number;
|
|
17
|
+
pattern?: RegExp;
|
|
18
|
+
enum?: string[];
|
|
19
|
+
};
|
|
20
|
+
category: 'layout' | 'appearance' | 'interaction' | 'animation' | 'responsive';
|
|
21
|
+
plugin: string;
|
|
22
|
+
swiftUIEquivalent?: string;
|
|
23
|
+
}
|
|
24
|
+
export interface ModifierSignature {
|
|
25
|
+
name: string;
|
|
26
|
+
plugin: string;
|
|
27
|
+
category: string;
|
|
28
|
+
description: string;
|
|
29
|
+
parameters: ModifierParameter[];
|
|
30
|
+
usage: {
|
|
31
|
+
basic: string[];
|
|
32
|
+
advanced: string[];
|
|
33
|
+
};
|
|
34
|
+
relatedModifiers?: string[];
|
|
35
|
+
swiftUIEquivalent?: string;
|
|
36
|
+
bundleSize: string;
|
|
37
|
+
}
|
|
38
|
+
export declare class ModifierParameterRegistry {
|
|
39
|
+
private modifiers;
|
|
40
|
+
constructor();
|
|
41
|
+
private registerCoreModifiers;
|
|
42
|
+
private registerPrimitivesModifiers;
|
|
43
|
+
private registerEffectsModifiers;
|
|
44
|
+
private registerResponsiveModifiers;
|
|
45
|
+
private registerModifiersPackage;
|
|
46
|
+
register(signature: ModifierSignature): void;
|
|
47
|
+
getModifier(name: string): ModifierSignature | undefined;
|
|
48
|
+
getAllModifiers(): ModifierSignature[];
|
|
49
|
+
getModifiersByPlugin(plugin: string): ModifierSignature[];
|
|
50
|
+
getModifiersByCategory(category: string): ModifierSignature[];
|
|
51
|
+
searchModifiers(query: string): ModifierSignature[];
|
|
52
|
+
/**
|
|
53
|
+
* Generate parameter hints for IDE integration
|
|
54
|
+
*/
|
|
55
|
+
generateParameterHints(modifierName: string): string[];
|
|
56
|
+
/**
|
|
57
|
+
* Validate modifier parameters at runtime (dev mode)
|
|
58
|
+
*/
|
|
59
|
+
validateParameters(modifierName: string, params: any): {
|
|
60
|
+
valid: boolean;
|
|
61
|
+
errors: string[];
|
|
62
|
+
};
|
|
63
|
+
/**
|
|
64
|
+
* Generate comprehensive documentation for all modifiers
|
|
65
|
+
*/
|
|
66
|
+
generateDocumentation(): string;
|
|
67
|
+
}
|
|
68
|
+
export declare const modifierParameterRegistry: ModifierParameterRegistry;
|
|
69
|
+
//# sourceMappingURL=modifier-parameter-system.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modifier-parameter-system.d.ts","sourceRoot":"","sources":["../src/modifier-parameter-system.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,OAAO,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,GAAG,CAAA;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,UAAU,CAAC,EAAE;QACX,GAAG,CAAC,EAAE,MAAM,CAAA;QACZ,GAAG,CAAC,EAAE,MAAM,CAAA;QACZ,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;KAChB,CAAA;IACD,QAAQ,EAAE,QAAQ,GAAG,YAAY,GAAG,aAAa,GAAG,WAAW,GAAG,YAAY,CAAA;IAC9E,MAAM,EAAE,MAAM,CAAA;IACd,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC3B;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,iBAAiB,EAAE,CAAA;IAC/B,KAAK,EAAE;QACL,KAAK,EAAE,MAAM,EAAE,CAAA;QACf,QAAQ,EAAE,MAAM,EAAE,CAAA;KACnB,CAAA;IACD,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC3B,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,qBAAa,yBAAyB;IACpC,OAAO,CAAC,SAAS,CAAuC;;IAUxD,OAAO,CAAC,qBAAqB;IAoH7B,OAAO,CAAC,2BAA2B;IAkFnC,OAAO,CAAC,wBAAwB;IA4FhC,OAAO,CAAC,2BAA2B;IAkCnC,OAAO,CAAC,wBAAwB;IAKhC,QAAQ,CAAC,SAAS,EAAE,iBAAiB;IAIrC,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;IAIxD,eAAe,IAAI,iBAAiB,EAAE;IAItC,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,iBAAiB,EAAE;IAIzD,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,iBAAiB,EAAE;IAI7D,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,iBAAiB,EAAE;IAcnD;;OAEG;IACH,sBAAsB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,EAAE;IAetD;;OAEG;IACH,kBAAkB,CAChB,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,GAAG,GACV;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE;IAwDvC;;OAEG;IACH,qBAAqB,IAAI,MAAM;CAuDhC;AAGD,eAAO,MAAM,yBAAyB,2BAAkC,CAAA"}
|
package/dist/profiler/index.js
CHANGED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime Modifier Parameter Validation & Development Helpers
|
|
3
|
+
*
|
|
4
|
+
* Provides development-time validation, warnings, and helpful error messages for modifier usage
|
|
5
|
+
*/
|
|
6
|
+
interface ValidationError {
|
|
7
|
+
modifier: string;
|
|
8
|
+
parameter?: string;
|
|
9
|
+
message: string;
|
|
10
|
+
suggestion?: string;
|
|
11
|
+
severity: 'error' | 'warning' | 'info';
|
|
12
|
+
type?: string;
|
|
13
|
+
}
|
|
14
|
+
interface UsageStats {
|
|
15
|
+
modifier: string;
|
|
16
|
+
usageCount: number;
|
|
17
|
+
bundleContribution: string;
|
|
18
|
+
alternatives?: string[];
|
|
19
|
+
}
|
|
20
|
+
export declare class RuntimeModifierValidator {
|
|
21
|
+
private usageStats;
|
|
22
|
+
private validationErrors;
|
|
23
|
+
private isDevMode;
|
|
24
|
+
/**
|
|
25
|
+
* Validate modifier parameters when modifier is applied
|
|
26
|
+
*/
|
|
27
|
+
validateModifier(modifierName: string, parameters: any, componentName?: string): ValidationError[];
|
|
28
|
+
private findSimilarModifier;
|
|
29
|
+
private calculateSimilarity;
|
|
30
|
+
private levenshteinDistance;
|
|
31
|
+
private checkPerformanceConcerns;
|
|
32
|
+
private parseBundleSize;
|
|
33
|
+
private suggestAlternatives;
|
|
34
|
+
private trackUsage;
|
|
35
|
+
private logValidationErrors;
|
|
36
|
+
/**
|
|
37
|
+
* Generate usage report for development insights
|
|
38
|
+
*/
|
|
39
|
+
generateUsageReport(): {
|
|
40
|
+
summary: UsageStats[];
|
|
41
|
+
totalBundleSize: string;
|
|
42
|
+
recommendations: string[];
|
|
43
|
+
};
|
|
44
|
+
private generateRecommendations;
|
|
45
|
+
/**
|
|
46
|
+
* Clear validation errors and usage stats
|
|
47
|
+
*/
|
|
48
|
+
reset(): void;
|
|
49
|
+
/**
|
|
50
|
+
* Get all validation errors
|
|
51
|
+
*/
|
|
52
|
+
getValidationErrors(): ValidationError[];
|
|
53
|
+
/**
|
|
54
|
+
* Display development dashboard
|
|
55
|
+
*/
|
|
56
|
+
showDevelopmentDashboard(): void;
|
|
57
|
+
}
|
|
58
|
+
export declare const runtimeValidator: RuntimeModifierValidator;
|
|
59
|
+
/**
|
|
60
|
+
* Development helper: log modifier parameters
|
|
61
|
+
*/
|
|
62
|
+
export declare function logModifierUsage(modifierName: string, parameters: any, componentName?: string): void;
|
|
63
|
+
/**
|
|
64
|
+
* Development helper: validate and provide hints
|
|
65
|
+
*/
|
|
66
|
+
export declare function validateAndHint(modifierName: string, parameters: any, componentName?: string): ValidationError[];
|
|
67
|
+
/**
|
|
68
|
+
* Auto-setup development helpers (call once in development)
|
|
69
|
+
*/
|
|
70
|
+
export declare function setupDevelopmentHelpers(): void;
|
|
71
|
+
export {};
|
|
72
|
+
//# sourceMappingURL=runtime-modifier-validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-modifier-validation.d.ts","sourceRoot":"","sources":["../src/runtime-modifier-validation.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,UAAU,eAAe;IACvB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAA;IACtC,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,UAAU,UAAU;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,kBAAkB,EAAE,MAAM,CAAA;IAC1B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;CACxB;AAED,qBAAa,wBAAwB;IACnC,OAAO,CAAC,UAAU,CAA4B;IAC9C,OAAO,CAAC,gBAAgB,CAAwB;IAChD,OAAO,CAAC,SAAS,CACyD;IAE1E;;OAEG;IACH,gBAAgB,CACd,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,GAAG,EACf,aAAa,CAAC,EAAE,MAAM,GACrB,eAAe,EAAE;IAqDpB,OAAO,CAAC,mBAAmB;IAe3B,OAAO,CAAC,mBAAmB;IAO3B,OAAO,CAAC,mBAAmB;IA4B3B,OAAO,CAAC,wBAAwB;IAqBhC,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,mBAAmB;IA6B3B,OAAO,CAAC,UAAU;IAKlB,OAAO,CAAC,mBAAmB;IAyB3B;;OAEG;IACH,mBAAmB,IAAI;QACrB,OAAO,EAAE,UAAU,EAAE,CAAA;QACrB,eAAe,EAAE,MAAM,CAAA;QACvB,eAAe,EAAE,MAAM,EAAE,CAAA;KAC1B;IAkCD,OAAO,CAAC,uBAAuB;IAiC/B;;OAEG;IACH,KAAK;IAKL;;OAEG;IACH,mBAAmB,IAAI,eAAe,EAAE;IAIxC;;OAEG;IACH,wBAAwB;CA4BzB;AAGD,eAAO,MAAM,gBAAgB,0BAAiC,CAAA;AAE9D;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,GAAG,EACf,aAAa,CAAC,EAAE,MAAM,QAUvB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,GAAG,EACf,aAAa,CAAC,EAAE,MAAM,qBAwBvB;AAED;;GAEG;AACH,wBAAgB,uBAAuB,SAetC"}
|
package/dist/testing/index.js
CHANGED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vite Plugin for TachUI Import Optimization
|
|
3
|
+
*
|
|
4
|
+
* Automatically optimizes imports during build for better bundle size
|
|
5
|
+
*/
|
|
6
|
+
import type { Plugin } from 'vite';
|
|
7
|
+
interface TachUIImportOptimizerOptions {
|
|
8
|
+
/**
|
|
9
|
+
* Enable automatic import optimization
|
|
10
|
+
* @default true
|
|
11
|
+
*/
|
|
12
|
+
autoOptimize?: boolean;
|
|
13
|
+
/**
|
|
14
|
+
* Show bundle size warnings
|
|
15
|
+
* @default true
|
|
16
|
+
*/
|
|
17
|
+
showWarnings?: boolean;
|
|
18
|
+
/**
|
|
19
|
+
* Target bundle size goals (in KB)
|
|
20
|
+
*/
|
|
21
|
+
bundleTargets?: {
|
|
22
|
+
minimal: number;
|
|
23
|
+
standard: number;
|
|
24
|
+
full: number;
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Import transformation rules
|
|
28
|
+
*/
|
|
29
|
+
transforms?: Record<string, string | ((namedImports: string[]) => string)>;
|
|
30
|
+
}
|
|
31
|
+
export declare function tachUIImportOptimizer(options?: TachUIImportOptimizerOptions): Plugin;
|
|
32
|
+
export {};
|
|
33
|
+
//# sourceMappingURL=vite-plugin-import-optimizer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vite-plugin-import-optimizer.d.ts","sourceRoot":"","sources":["../src/vite-plugin-import-optimizer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;AAIlC,UAAU,4BAA4B;IACpC;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAA;IAEtB;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAA;IAEtB;;OAEG;IACH,aAAa,CAAC,EAAE;QACd,OAAO,EAAE,MAAM,CAAA;QACf,QAAQ,EAAE,MAAM,CAAA;QAChB,IAAI,EAAE,MAAM,CAAA;KACb,CAAA;IAED;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,MAAM,CAAC,CAAC,CAAA;CAC3E;AA+CD,wBAAgB,qBAAqB,CACnC,OAAO,GAAE,4BAAiC,GACzC,MAAM,CAkMR"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* VS Code Extension for TachUI Modifier IntelliSense
|
|
3
|
+
*
|
|
4
|
+
* Provides parameter hints, autocomplete, and documentation for all modifiers
|
|
5
|
+
*/
|
|
6
|
+
import * as vscode from 'vscode';
|
|
7
|
+
export declare class TachUIModifierProvider implements vscode.CompletionItemProvider, vscode.HoverProvider {
|
|
8
|
+
/**
|
|
9
|
+
* Provide completion items for modifier methods
|
|
10
|
+
*/
|
|
11
|
+
provideCompletionItems(document: vscode.TextDocument, position: vscode.Position, _token: vscode.CancellationToken, _context: vscode.CompletionContext): vscode.ProviderResult<vscode.CompletionItem[]>;
|
|
12
|
+
/**
|
|
13
|
+
* Provide hover information for modifiers
|
|
14
|
+
*/
|
|
15
|
+
provideHover(document: vscode.TextDocument, position: vscode.Position, _token: vscode.CancellationToken): vscode.ProviderResult<vscode.Hover>;
|
|
16
|
+
private isInModifierContext;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Signature help provider for modifier parameters
|
|
20
|
+
*/
|
|
21
|
+
export declare class TachUISignatureHelpProvider implements vscode.SignatureHelpProvider {
|
|
22
|
+
provideSignatureHelp(document: vscode.TextDocument, position: vscode.Position, _token: vscode.CancellationToken, _context: vscode.SignatureHelpContext): vscode.ProviderResult<vscode.SignatureHelp>;
|
|
23
|
+
private buildSignatureLabel;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Code action provider for modifier optimization
|
|
27
|
+
*/
|
|
28
|
+
export declare class TachUICodeActionProvider implements vscode.CodeActionProvider {
|
|
29
|
+
provideCodeActions(document: vscode.TextDocument, range: vscode.Range | vscode.Selection, context: vscode.CodeActionContext, _token: vscode.CancellationToken): vscode.ProviderResult<vscode.CodeAction[]>;
|
|
30
|
+
private parseParameters;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Register all providers
|
|
34
|
+
*/
|
|
35
|
+
export declare function activate(context: vscode.ExtensionContext): void;
|
|
36
|
+
//# sourceMappingURL=modifier-intellisense.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modifier-intellisense.d.ts","sourceRoot":"","sources":["../../src/vscode-extension/modifier-intellisense.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAA;AAMhC,qBAAa,sBACX,YAAW,MAAM,CAAC,sBAAsB,EAAE,MAAM,CAAC,aAAa;IAE9D;;OAEG;IACH,sBAAsB,CACpB,QAAQ,EAAE,MAAM,CAAC,YAAY,EAC7B,QAAQ,EAAE,MAAM,CAAC,QAAQ,EACzB,MAAM,EAAE,MAAM,CAAC,iBAAiB,EAChC,QAAQ,EAAE,MAAM,CAAC,iBAAiB,GACjC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;IAmFjD;;OAEG;IACH,YAAY,CACV,QAAQ,EAAE,MAAM,CAAC,YAAY,EAC7B,QAAQ,EAAE,MAAM,CAAC,QAAQ,EACzB,MAAM,EAAE,MAAM,CAAC,iBAAiB,GAC/B,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC;IAmDtC,OAAO,CAAC,mBAAmB;CAc5B;AAED;;GAEG;AACH,qBAAa,2BACX,YAAW,MAAM,CAAC,qBAAqB;IAEvC,oBAAoB,CAClB,QAAQ,EAAE,MAAM,CAAC,YAAY,EAC7B,QAAQ,EAAE,MAAM,CAAC,QAAQ,EACzB,MAAM,EAAE,MAAM,CAAC,iBAAiB,EAChC,QAAQ,EAAE,MAAM,CAAC,oBAAoB,GACpC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,aAAa,CAAC;IAyC9C,OAAO,CAAC,mBAAmB;CAc5B;AAED;;GAEG;AACH,qBAAa,wBAAyB,YAAW,MAAM,CAAC,kBAAkB;IACxE,kBAAkB,CAChB,QAAQ,EAAE,MAAM,CAAC,YAAY,EAC7B,KAAK,EAAE,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,SAAS,EACtC,OAAO,EAAE,MAAM,CAAC,iBAAiB,EACjC,MAAM,EAAE,MAAM,CAAC,iBAAiB,GAC/B,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;IAuC7C,OAAO,CAAC,eAAe;CAcxB;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,gBAAgB,QAwDxD"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tachui/devtools",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.8",
|
|
4
4
|
"description": "Development & debugging tools for tachUI framework",
|
|
5
5
|
"homepage": "https://tachui.dev/",
|
|
6
6
|
"type": "module",
|
|
@@ -41,12 +41,15 @@
|
|
|
41
41
|
"dist"
|
|
42
42
|
],
|
|
43
43
|
"dependencies": {
|
|
44
|
-
"
|
|
45
|
-
"@tachui/core": "0.8.
|
|
44
|
+
"magic-string": "^0.30.0",
|
|
45
|
+
"@tachui/core": "0.8.8",
|
|
46
|
+
"@tachui/primitives": "0.8.8",
|
|
47
|
+
"@tachui/registry": "0.8.8"
|
|
46
48
|
},
|
|
47
49
|
"devDependencies": {
|
|
48
50
|
"@types/node": "^20.0.0",
|
|
49
51
|
"@types/jsdom": "^21.1.6",
|
|
52
|
+
"@types/vscode": "^1.80.0",
|
|
50
53
|
"@vitest/coverage-v8": "^3.2.4",
|
|
51
54
|
"jsdom": "^23.2.0",
|
|
52
55
|
"typescript": "^5.8.0",
|
|
@@ -74,7 +77,9 @@
|
|
|
74
77
|
},
|
|
75
78
|
"sideEffects": false,
|
|
76
79
|
"scripts": {
|
|
77
|
-
"build": "vite build && tsc --emitDeclarationOnly",
|
|
80
|
+
"build": "vite build && tsc --project tsconfig.json --emitDeclarationOnly",
|
|
81
|
+
"build:dev": "vite build --mode development && tsc --project tsconfig.json --emitDeclarationOnly",
|
|
82
|
+
"build:prod": "vite build --mode production && tsc --project tsconfig.json --emitDeclarationOnly",
|
|
78
83
|
"dev": "vite build --watch",
|
|
79
84
|
"clean": "rm -rf dist",
|
|
80
85
|
"test": "vitest run",
|
package/dist/debug/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/debug/debug.ts","../../src/debug/enhanced-errors.ts","../../src/debug/development-warnings.ts","../../src/debug/validation-debug-tools.ts"],"sourcesContent":["/**\n * TachUI Debug System\n *\n * Provides visual debugging tools for component hierarchy and layout\n */\n\nexport interface DebugConfig {\n enabled: boolean\n showLabels: boolean\n showBounds: boolean\n logComponentTree: boolean\n}\n\nclass DebugManager {\n private config: DebugConfig = {\n enabled: false,\n showLabels: false,\n showBounds: false,\n logComponentTree: false,\n }\n\n private componentTree: Array<{ label: string; type: string; depth: number }> =\n []\n\n /**\n * Enable debug mode with optional configuration\n */\n enable(options: Partial<DebugConfig> = {}): void {\n this.config = {\n enabled: true,\n showLabels: true,\n showBounds: true,\n logComponentTree: true,\n ...options,\n }\n\n if (this.config.enabled) {\n this.injectDebugStyles()\n // Only log in development mode\n if (typeof import.meta !== 'undefined' && (import.meta as any).env?.DEV) {\n console.log('🔧 TachUI Debug Mode Enabled')\n }\n }\n }\n\n /**\n * Disable debug mode\n */\n disable(): void {\n this.config.enabled = false\n this.removeDebugStyles()\n if (typeof import.meta !== 'undefined' && (import.meta as any).env?.DEV) {\n console.log('🔧 TachUI Debug Mode Disabled')\n }\n }\n\n /**\n * Check if debug mode is enabled\n */\n isEnabled(): boolean {\n return this.config.enabled\n }\n\n /**\n * Get current debug configuration\n */\n getConfig(): DebugConfig {\n return { ...this.config }\n }\n\n /**\n * Add debug attributes to DOM element\n */\n addDebugAttributes(\n element: HTMLElement,\n componentType: string,\n debugLabel?: string\n ): void {\n if (!this.config.enabled) return\n\n element.setAttribute('data-tachui-component', componentType)\n\n if (debugLabel) {\n element.setAttribute('data-tachui-label', debugLabel)\n }\n\n if (this.config.showLabels || this.config.showBounds) {\n element.classList.add('tachui-debug')\n }\n\n if (this.config.showLabels && debugLabel) {\n element.classList.add('tachui-debug-labeled')\n }\n\n if (this.config.showBounds) {\n element.classList.add('tachui-debug-bounds')\n }\n }\n\n /**\n * Log component to tree (for hierarchical debugging)\n */\n logComponent(type: string, label?: string, depth: number = 0): void {\n if (!this.config.enabled || !this.config.logComponentTree) return\n\n this.componentTree.push({\n label: label || `<${type}>`,\n type,\n depth,\n })\n }\n\n /**\n * Print component tree to console\n */\n printComponentTree(): void {\n if (!this.config.enabled || !this.config.logComponentTree) return\n\n console.group('🌳 TachUI Component Tree:')\n this.componentTree.forEach(({ label, type, depth }) => {\n const indent = ' '.repeat(depth)\n const icon = this.getComponentIcon(type)\n console.log(`${indent}${icon} ${type}: \"${label}\"`)\n })\n console.groupEnd()\n\n // Clear tree for next render cycle\n this.componentTree = []\n }\n\n /**\n * Get icon for component type\n */\n private getComponentIcon(type: string): string {\n const icons: Record<string, string> = {\n VStack: '📚',\n HStack: '➡️',\n ZStack: '📑',\n Button: '🔘',\n Text: '📝',\n Image: '🖼️',\n ScrollView: '📜',\n List: '📋',\n Form: '📋',\n Section: '📁',\n default: '🧩',\n }\n return icons[type] || icons.default\n }\n\n /**\n * Inject debug CSS styles\n */\n private injectDebugStyles(): void {\n if (document.getElementById('tachui-debug-styles')) return\n\n const styles = `\n /* TachUI Debug Styles */\n .tachui-debug {\n position: relative;\n }\n\n .tachui-debug-bounds {\n outline: 1px dashed rgba(255, 0, 0, 0.3) !important;\n outline-offset: -1px;\n }\n\n .tachui-debug-labeled::before {\n content: attr(data-tachui-label);\n position: absolute;\n top: -1px;\n left: -1px;\n background: rgba(255, 0, 0, 0.9);\n color: white;\n font-family: 'Monaco', 'Menlo', 'Consolas', monospace;\n font-size: 10px;\n font-weight: bold;\n line-height: 1;\n padding: 2px 4px;\n border-radius: 2px;\n z-index: 9999;\n pointer-events: none;\n white-space: nowrap;\n max-width: 200px;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .tachui-debug-labeled:hover::before {\n background: rgba(255, 0, 0, 1);\n max-width: none;\n white-space: normal;\n }\n\n /* Component type indicators */\n [data-tachui-component=\"VStack\"] {\n border-left: 2px solid rgba(0, 255, 0, 0.5) !important;\n }\n\n [data-tachui-component=\"HStack\"] {\n border-top: 2px solid rgba(0, 0, 255, 0.5) !important;\n }\n\n [data-tachui-component=\"Button\"] {\n box-shadow: inset 0 0 0 1px rgba(255, 165, 0, 0.5) !important;\n }\n `\n\n const styleElement = document.createElement('style')\n styleElement.id = 'tachui-debug-styles'\n styleElement.textContent = styles\n document.head.appendChild(styleElement)\n }\n\n /**\n * Remove debug CSS styles\n */\n private removeDebugStyles(): void {\n const styleElement = document.getElementById('tachui-debug-styles')\n if (styleElement) {\n styleElement.remove()\n }\n\n // Remove debug classes from all elements\n document.querySelectorAll('.tachui-debug').forEach(el => {\n el.classList.remove(\n 'tachui-debug',\n 'tachui-debug-labeled',\n 'tachui-debug-bounds'\n )\n })\n }\n}\n\n// Global debug instance\nexport const debugManager = new DebugManager()\n\n// Convenience functions\nexport const enableDebug = (options?: Partial<DebugConfig>) =>\n debugManager.enable(options)\nexport const disableDebug = () => debugManager.disable()\nexport const isDebugEnabled = () => debugManager.isEnabled()\n\n// Auto-enable debug mode based on URL parameters\nif (typeof window !== 'undefined') {\n const urlParams = new URLSearchParams(window.location.search)\n const debugParam = urlParams.get('debug')\n\n if (debugParam === 'true' || debugParam === '1') {\n // Enable full debug mode\n debugManager.enable({\n enabled: true,\n showLabels: true,\n showBounds: true,\n logComponentTree: true,\n })\n console.log('🔧 TachUI Debug Mode: Enabled via URL parameter (?debug=true)')\n } else if (debugParam === 'labels') {\n // Enable only labels\n debugManager.enable({\n enabled: true,\n showLabels: true,\n showBounds: false,\n logComponentTree: false,\n })\n console.log('🔧 TachUI Debug Mode: Labels only (?debug=labels)')\n } else if (debugParam === 'bounds') {\n // Enable only bounds\n debugManager.enable({\n enabled: true,\n showLabels: false,\n showBounds: true,\n logComponentTree: false,\n })\n console.log('🔧 TachUI Debug Mode: Bounds only (?debug=bounds)')\n }\n}\n","/**\n * Enhanced Error Messages and Developer Experience\n *\n * Provides better error messages, debugging aids, and developer-friendly\n * error reporting for the TachUI framework.\n */\n\nimport type { Modifier } from '@tachui/core'\nimport type { ComponentInstance } from '@tachui/core'\n\n/**\n * Enhanced error with developer-friendly context\n */\nexport interface EnhancedTachUIError extends Error {\n code: string\n category: 'modifier' | 'component' | 'runtime' | 'reactive' | 'validation'\n severity: 'warning' | 'error' | 'fatal'\n component?: string\n suggestion: string\n documentation?: string\n examples?: string[]\n relatedErrors?: string[]\n}\n\n/**\n * Developer experience error factory\n */\n// eslint-disable-next-line typescript-eslint/no-extraneous-class\nexport class DeveloperErrorFactory {\n /**\n * Create modifier validation error\n */\n static modifierValidationError(\n modifier: string,\n issue: string,\n component?: ComponentInstance\n ): EnhancedTachUIError {\n const componentName = component?.type || 'Unknown'\n\n const error = new Error(\n `Invalid modifier usage: ${modifier} - ${issue}`\n ) as EnhancedTachUIError\n\n error.code = 'MODIFIER_VALIDATION_ERROR'\n error.category = 'modifier'\n error.severity = 'error'\n error.component = componentName\n error.suggestion = DeveloperErrorFactory.getModifierSuggestion(\n modifier,\n issue\n )\n error.documentation = `https://docs.tachui.dev/modifiers/${modifier.toLowerCase()}`\n error.examples = DeveloperErrorFactory.getModifierExamples(modifier)\n\n return error\n }\n\n /**\n * Create component validation error\n */\n static componentValidationError(\n componentType: string,\n prop: string,\n expectedType: string,\n actualValue: any\n ): EnhancedTachUIError {\n const actualType = Array.isArray(actualValue)\n ? `array[${actualValue.length}]`\n : typeof actualValue\n\n const error = new Error(\n `Component validation failed: ${componentType}.${prop} expected ${expectedType}, got ${actualType}`\n ) as EnhancedTachUIError\n\n error.code = 'COMPONENT_VALIDATION_ERROR'\n error.category = 'component'\n error.severity = 'error'\n error.component = componentType\n error.suggestion = `Ensure ${prop} is of type ${expectedType}. ${DeveloperErrorFactory.getTypeConversionSuggestion(expectedType, actualValue)}`\n error.documentation = `https://docs.tachui.dev/components/${componentType.toLowerCase()}`\n error.examples = DeveloperErrorFactory.getComponentExamples(\n componentType,\n prop\n )\n\n return error\n }\n\n /**\n * Create reactive system error\n */\n static reactiveSystemError(\n operation: string,\n issue: string,\n context?: string\n ): EnhancedTachUIError {\n const error = new Error(\n `Reactive system error: ${operation} - ${issue}`\n ) as EnhancedTachUIError\n\n error.code = 'REACTIVE_SYSTEM_ERROR'\n error.category = 'reactive'\n error.severity = 'error'\n error.suggestion = DeveloperErrorFactory.getReactiveSuggestion(\n operation,\n issue\n )\n error.documentation = 'https://docs.tachui.dev/reactive/signals'\n error.examples = DeveloperErrorFactory.getReactiveExamples(operation)\n\n if (context) {\n error.message += ` (Context: ${context})`\n }\n\n return error\n }\n\n /**\n * Create runtime error\n */\n static runtimeError(\n operation: string,\n issue: string,\n component?: string\n ): EnhancedTachUIError {\n const error = new Error(\n `Runtime error: ${operation} - ${issue}`\n ) as EnhancedTachUIError\n\n error.code = 'RUNTIME_ERROR'\n error.category = 'runtime'\n error.severity = 'fatal'\n error.component = component\n error.suggestion = DeveloperErrorFactory.getRuntimeSuggestion(\n operation,\n issue\n )\n error.documentation = 'https://docs.tachui.dev/runtime/renderer'\n\n return error\n }\n\n /**\n * Get modifier-specific suggestion\n */\n private static getModifierSuggestion(\n modifier: string,\n issue: string\n ): string {\n const suggestions = {\n padding: {\n 'conflicting properties':\n 'Use either .padding(number) for all sides, or .padding({ horizontal, vertical }) for symmetric padding, or individual directional functions like .paddingTop()',\n 'invalid value':\n 'Padding values must be numbers (pixels) or valid CSS length strings',\n 'negative padding':\n 'Negative padding values are not recommended and may cause layout issues',\n },\n frame: {\n 'missing dimensions':\n 'Frame modifier requires at least width or height: .frame(width, height) or .frame({ width: 100 })',\n 'invalid dimensions':\n 'Frame dimensions must be positive numbers or valid CSS length values',\n },\n backgroundColor: {\n 'invalid color':\n 'Use valid color formats: hex (#ff0000), rgb (rgb(255,0,0)), or named colors (red)',\n 'asset not found':\n 'Color asset not found. Check your asset definitions or use getColor() to verify',\n },\n onTap: {\n 'not a function':\n 'onTap requires a function: .onTap(() => { /* your code */ })',\n 'missing parameter':\n 'onTap handler will receive a MouseEvent: .onTap((event) => { /* handle event */ })',\n },\n }\n\n const modifierSuggestions = suggestions[\n modifier as keyof typeof suggestions\n ] as Record<string, string> | undefined\n return (\n modifierSuggestions?.[issue] ||\n `Check the ${modifier} modifier documentation for proper usage`\n )\n }\n\n /**\n * Get modifier examples\n */\n private static getModifierExamples(modifier: string): string[] {\n const examples = {\n padding: [\n '.padding(16)',\n '.padding({ horizontal: 20, vertical: 12 })',\n '.paddingTop(8).paddingHorizontal(16)',\n '.paddingLeading(20) // SwiftUI-style',\n ],\n frame: [\n '.frame(100, 200)',\n '.frame({ width: 100, height: 200 })',\n '.frame({ minWidth: 50, maxWidth: 200 })',\n ],\n backgroundColor: [\n '.backgroundColor(\"#ff0000\")',\n '.backgroundColor(\"rgb(255, 0, 0)\")',\n '.backgroundColor(Colors.primary) // Asset',\n ],\n onTap: [\n '.onTap(() => console.log(\"Tapped!\"))',\n '.onTap((event) => handleTap(event))',\n ],\n }\n\n return examples[modifier as keyof typeof examples] || []\n }\n\n /**\n * Get component examples\n */\n private static getComponentExamples(\n componentType: string,\n prop: string\n ): string[] {\n const examples = {\n Text: {\n children: ['Text(\"Hello World\")', 'Text(() => dynamicText())'],\n style: [\n 'Text(\"Hello\").fontSize(16)',\n 'Text(\"Hello\").foregroundColor(\"red\")',\n ],\n },\n Button: {\n children: [\n 'Button({ children: \"Click me\" })',\n 'Button({ children: () => buttonText() })',\n ],\n onPress: ['Button({ onPress: () => handlePress() })'],\n },\n VStack: {\n children: [\n 'VStack([Text(\"Item 1\"), Text(\"Item 2\")])',\n 'VStack({ children: childComponents })',\n ],\n spacing: [\n 'VStack({ spacing: 16 })',\n 'VStack({ spacing: 8, children: items })',\n ],\n },\n }\n\n const componentExamples = examples[\n componentType as keyof typeof examples\n ] as Record<string, string[]> | undefined\n return (\n componentExamples?.[prop] || [\n `${componentType}({ ${prop}: /* your value */ })`,\n ]\n )\n }\n\n /**\n * Get type conversion suggestion\n */\n private static getTypeConversionSuggestion(\n expectedType: string,\n actualValue: any\n ): string {\n if (expectedType.includes('string') && typeof actualValue === 'number') {\n return `Convert number to string: \"${actualValue}\"`\n }\n\n if (expectedType.includes('number') && typeof actualValue === 'string') {\n const parsed = parseFloat(actualValue)\n if (!Number.isNaN(parsed)) {\n return `Convert string to number: ${parsed}`\n }\n }\n\n if (expectedType.includes('array') && !Array.isArray(actualValue)) {\n return `Wrap value in array: [${JSON.stringify(actualValue)}]`\n }\n\n if (\n expectedType.includes('function') &&\n typeof actualValue !== 'function'\n ) {\n return 'Provide a function: () => { /* your code */ }'\n }\n\n return `Expected ${expectedType}, ensure the value matches this type`\n }\n\n /**\n * Get reactive system suggestion\n */\n private static getReactiveSuggestion(\n operation: string,\n issue: string\n ): string {\n const suggestions = {\n createSignal: {\n 'invalid initial value':\n 'Signal initial value should match the expected type',\n 'mutation attempt':\n 'Signals are immutable. Use the setter function: const [value, setValue] = createSignal(0); setValue(newValue)',\n },\n createEffect: {\n 'missing dependencies':\n 'Effect will only run when accessed signals change. Ensure all dependencies are accessed within the effect',\n 'infinite loop':\n 'Effect creates infinite loop. Avoid setting signals that the effect depends on',\n },\n createComputed: {\n 'side effects':\n 'Computed values should be pure. Avoid side effects like console.log or API calls',\n 'circular dependency':\n 'Computed value depends on itself, creating circular dependency',\n },\n }\n\n const operationSuggestions = suggestions[\n operation as keyof typeof suggestions\n ] as Record<string, string> | undefined\n return (\n operationSuggestions?.[issue] ||\n `Check reactive system documentation for ${operation} usage`\n )\n }\n\n /**\n * Get reactive examples\n */\n private static getReactiveExamples(operation: string): string[] {\n const examples = {\n createSignal: [\n 'const [count, setCount] = createSignal(0)',\n 'const [text, setText] = createSignal(\"Hello\")',\n 'const [user, setUser] = createSignal<User | null>(null)',\n ],\n createEffect: [\n 'createEffect(() => { console.log(\"Count:\", count()) })',\n 'createEffect(() => { localStorage.setItem(\"count\", count().toString()) })',\n ],\n createComputed: [\n 'const doubled = createComputed(() => count() * 2)',\n 'const fullName = createComputed(() => `${firstName()} ${lastName()}`)',\n ],\n }\n\n return examples[operation as keyof typeof examples] || []\n }\n\n /**\n * Get runtime suggestion\n */\n private static getRuntimeSuggestion(\n operation: string,\n issue: string\n ): string {\n const suggestions = {\n render: 'Ensure all components return valid virtual DOM nodes',\n mount: 'Check that the mount target element exists in the DOM',\n update: 'Verify component state and props are valid before updating',\n }\n\n return (\n suggestions[operation as keyof typeof suggestions] ||\n `Runtime issue in ${operation}: ${issue}`\n )\n }\n}\n\n/**\n * Enhanced warning system\n */\n// eslint-disable-next-line typescript-eslint/no-extraneous-class\nexport class DeveloperWarnings {\n private static warningsSeen = new Set<string>()\n\n /**\n * Warn about deprecated API usage\n */\n static deprecation(\n oldAPI: string,\n newAPI: string,\n component?: string,\n willBeRemovedIn?: string\n ): void {\n const key = `deprecation:${oldAPI}:${component || 'global'}`\n if (DeveloperWarnings.warningsSeen.has(key)) return\n\n DeveloperWarnings.warningsSeen.add(key)\n\n const componentContext = component ? ` in ${component}` : ''\n const removalVersion = willBeRemovedIn\n ? ` (will be removed in ${willBeRemovedIn})`\n : ''\n\n console.warn(\n `🟡 TachUI Deprecation Warning${componentContext}: ` +\n `\"${oldAPI}\" is deprecated. Use \"${newAPI}\" instead${removalVersion}.\\n` +\n `See: https://docs.tachui.dev/migration/deprecations`\n )\n }\n\n /**\n * Warn about performance issues\n */\n static performance(\n issue: string,\n suggestion: string,\n component?: string\n ): void {\n const key = `performance:${issue}:${component || 'global'}`\n if (DeveloperWarnings.warningsSeen.has(key)) return\n\n DeveloperWarnings.warningsSeen.add(key)\n\n const componentContext = component ? ` in ${component}` : ''\n\n console.warn(\n `⚡ TachUI Performance Warning${componentContext}: ${issue}\\n` +\n `💡 Suggestion: ${suggestion}\\n` +\n `See: https://docs.tachui.dev/performance/optimization`\n )\n }\n\n /**\n * Warn about accessibility issues\n */\n static accessibility(\n issue: string,\n suggestion: string,\n component?: string\n ): void {\n const key = `a11y:${issue}:${component || 'global'}`\n if (DeveloperWarnings.warningsSeen.has(key)) return\n\n DeveloperWarnings.warningsSeen.add(key)\n\n const componentContext = component ? ` in ${component}` : ''\n\n console.warn(\n `♿ TachUI Accessibility Warning${componentContext}: ${issue}\\n` +\n `💡 Suggestion: ${suggestion}\\n` +\n `See: https://docs.tachui.dev/accessibility/guidelines`\n )\n }\n\n /**\n * Clear warning cache (for testing)\n */\n static clearWarnings(): void {\n DeveloperWarnings.warningsSeen.clear()\n }\n\n /**\n * Get count of unique warnings shown\n */\n static getWarningCount(): number {\n return DeveloperWarnings.warningsSeen.size\n }\n}\n\n/**\n * Type validation helpers\n */\n// eslint-disable-next-line typescript-eslint/no-extraneous-class\nexport class TypeValidation {\n /**\n * Validate component props with enhanced error messages\n */\n static validateComponentProps<T extends Record<string, any>>(\n componentType: string,\n props: T,\n schema: Record<\n keyof T,\n {\n type: string\n required?: boolean\n validator?: (value: any) => boolean\n message?: string\n }\n >\n ): void {\n for (const [prop, config] of Object.entries(schema)) {\n const value = props[prop]\n\n // Check required\n if (config.required && (value === undefined || value === null)) {\n throw DeveloperErrorFactory.componentValidationError(\n componentType,\n prop,\n `${config.type} (required)`,\n value\n )\n }\n\n // Skip validation for optional undefined values\n if (value === undefined && !config.required) continue\n\n // Check type\n if (!TypeValidation.validateType(value, config.type)) {\n throw DeveloperErrorFactory.componentValidationError(\n componentType,\n prop,\n config.type,\n value\n )\n }\n\n // Custom validation\n if (config.validator && !config.validator(value)) {\n const error = DeveloperErrorFactory.componentValidationError(\n componentType,\n prop,\n config.type,\n value\n )\n if (config.message) {\n ;(error as any).suggestion = config.message\n }\n throw error\n }\n }\n }\n\n /**\n * Validate type\n */\n private static validateType(value: any, type: string): boolean {\n switch (type) {\n case 'string':\n return typeof value === 'string'\n case 'number':\n return typeof value === 'number' && !Number.isNaN(value)\n case 'boolean':\n return typeof value === 'boolean'\n case 'function':\n return typeof value === 'function'\n case 'array':\n return Array.isArray(value)\n case 'object':\n return (\n typeof value === 'object' && value !== null && !Array.isArray(value)\n )\n case 'ComponentInstance':\n return value && typeof value === 'object' && 'type' in value\n case 'Signal':\n return typeof value === 'function' && 'peek' in value\n default:\n // Handle union types like 'string | number'\n if (type.includes('|')) {\n return type\n .split('|')\n .some(t => TypeValidation.validateType(value, t.trim()))\n }\n return true // Unknown types pass validation\n }\n }\n\n /**\n * Validate modifier combination\n */\n static validateModifierCombination(modifiers: Modifier[]): void {\n const conflicts = [\n {\n types: ['padding', 'padding'],\n message:\n 'Multiple padding modifiers detected. Combine into single .padding() call or use specific directional functions',\n },\n {\n types: ['size', 'size'],\n message:\n 'Multiple size modifiers detected. Combine into single .size() call',\n },\n ]\n\n for (const conflict of conflicts) {\n const matchingModifiers = modifiers.filter(m =>\n conflict.types.includes(m.type)\n )\n if (matchingModifiers.length > 1) {\n DeveloperWarnings.performance(\n 'Redundant modifiers detected',\n conflict.message\n )\n }\n }\n }\n}\n\n/**\n * Formatted error message type\n */\nexport interface FormattedErrorMessage {\n code: string\n message: string\n suggestion: string\n severity: 'warning' | 'error' | 'fatal'\n component?: string\n documentation?: string\n examples?: string[]\n template?: {\n severity: string\n message: string\n }\n error?: {\n message: string\n }\n}\n\n/**\n * Developer experience utilities\n */\nexport class DeveloperExperienceUtils {\n /**\n * Format error message for better developer experience\n */\n static formatError(error: EnhancedTachUIError): FormattedErrorMessage {\n return {\n code: error.code,\n message: error.message,\n suggestion: error.suggestion,\n severity: error.severity,\n component: error.component,\n documentation: error.documentation,\n examples: error.examples,\n }\n }\n\n /**\n * Get statistics about developer experience features\n */\n static getStatistics(): {\n errorCount: number\n warningCount: number\n suggestionCount: number\n } {\n return {\n errorCount: 0,\n warningCount: 0,\n suggestionCount: 0,\n }\n }\n\n /**\n * Get suggestions for a diagnostic\n */\n static getSuggestions(_code: string, _data?: any): any[] {\n // Placeholder implementation - return empty suggestions for now\n return []\n }\n\n /**\n * Test developer experience features\n */\n static async test(): Promise<void> {\n console.log('🛠️ Developer Experience Utils test completed')\n }\n}\n\n/**\n * Development mode utilities\n */\nexport const devMode = {\n /**\n * Enable enhanced error reporting in development\n */\n enableEnhancedErrors(): void {\n // Override console.error to provide enhanced formatting\n const originalError = console.error\n console.error = (...args) => {\n const firstArg = args[0]\n if (firstArg && typeof firstArg === 'object' && 'code' in firstArg) {\n const error = firstArg as EnhancedTachUIError\n console.group(\n `🚨 TachUI ${error.severity.toUpperCase()}: ${error.code}`\n )\n console.error(error.message)\n if (error.component) console.log(`📦 Component: ${error.component}`)\n console.log(`💡 Suggestion: ${error.suggestion}`)\n if (error.documentation) console.log(`📖 Docs: ${error.documentation}`)\n if (error.examples?.length) {\n console.group('💻 Examples:')\n error.examples.forEach(example => console.log(` ${example}`))\n console.groupEnd()\n }\n console.groupEnd()\n } else {\n originalError(...args)\n }\n }\n },\n\n /**\n * Log component tree for debugging\n */\n logComponentTree(root: any, depth = 0): void {\n const indent = ' '.repeat(depth)\n const modifierCount = root.modifiers?.length || 0\n const modifierInfo =\n modifierCount > 0 ? ` (${modifierCount} modifiers)` : ''\n\n console.log(`${indent}${root.type}${modifierInfo}`)\n\n // Log children if they exist\n if ('children' in root.props && Array.isArray(root.props.children)) {\n root.props.children.forEach((child: any) => {\n if (child && typeof child === 'object' && 'type' in child) {\n this.logComponentTree(child, depth + 1)\n }\n })\n }\n },\n}\n","/**\n * Development Warning System - Tag Override Safety\n *\n * Provides helpful console warnings during development when components\n * use tag overrides, particularly for potentially problematic combinations.\n */\n\nexport class DevelopmentWarnings {\n private static warningsShown = new Set<string>()\n\n /**\n * Warn about element tag overrides in development\n */\n static warnElementOverride(\n componentType: string,\n originalTag: string,\n overrideTag: string\n ): void {\n if (process.env.NODE_ENV === 'production') return\n\n const warningKey = `${componentType}-${originalTag}-${overrideTag}`\n if (this.warningsShown.has(warningKey)) return\n\n this.warningsShown.add(warningKey)\n\n console.warn(\n `[tachUI] ${componentType} (${originalTag}) overridden to <${overrideTag}>. ` +\n `Ensure this maintains expected behavior and accessibility.`\n )\n }\n\n /**\n * Error for invalid HTML tags\n */\n static errorInvalidTag(tag: string, componentType: string): void {\n if (process.env.NODE_ENV === 'production') return\n\n console.error(\n `[tachUI] Invalid HTML tag '${tag}' specified for ${componentType}. ` +\n `Using tag as-is - ensure this is intentional.`\n )\n }\n\n /**\n * Info message for semantic role application\n */\n static infoSemanticRole(tag: string, role: string): void {\n if (process.env.NODE_ENV !== 'development') return\n\n console.info(`[tachUI] Applied semantic role '${role}' to <${tag}> element`)\n }\n\n /**\n * Warn about potentially problematic tag combinations\n */\n static warnProblematicCombination(\n componentType: string,\n tag: string,\n issue: string,\n severity: 'warning' | 'info' = 'warning'\n ): void {\n if (process.env.NODE_ENV === 'production') return\n\n const warningKey = `${componentType}-${tag}-${issue}`\n if (this.warningsShown.has(warningKey)) return\n\n this.warningsShown.add(warningKey)\n\n const logFunction = severity === 'warning' ? console.warn : console.info\n logFunction(`[tachUI] ${componentType}: ${issue}`)\n }\n\n /**\n * Warn about accessibility concerns\n */\n static warnAccessibility(\n componentType: string,\n tag: string,\n accessibilityIssue: string\n ): void {\n if (process.env.NODE_ENV === 'production') return\n\n const warningKey = `a11y-${componentType}-${tag}-${accessibilityIssue}`\n if (this.warningsShown.has(warningKey)) return\n\n this.warningsShown.add(warningKey)\n\n console.warn(\n `[tachUI A11y] ${componentType} with <${tag}>: ${accessibilityIssue}. ` +\n `Consider using appropriate ARIA attributes or different semantic structure.`\n )\n }\n\n /**\n * Clear all shown warnings (useful for testing)\n */\n static clearWarnings(): void {\n this.warningsShown.clear()\n }\n\n /**\n * Check if a warning has been shown\n */\n static hasWarningBeenShown(warningKey: string): boolean {\n return this.warningsShown.has(warningKey)\n }\n\n /**\n * Get count of unique warnings shown\n */\n static getWarningCount(): number {\n return this.warningsShown.size\n }\n}\n","/**\n * Validation Debugging Tools - Phase 1C\n *\n * Comprehensive debugging helpers, diagnostic tools, validation inspector,\n * and developer utilities for analyzing validation behavior.\n *\n * Moved from @tachui/core to @tachui/devtools for better separation of concerns.\n */\n\n// Note: These imports will need to be adapted for devtools package\n// import type { ComponentInstance } from '../runtime/types'\n// For now, we'll create local types or import from @tachui/core\nexport type ComponentInstance = any // TODO: Import from @tachui/core when available\n\n// Enhanced runtime imports - these will need to be handled differently in devtools\n// For now, we'll create mocks or import what's needed\nconst _enhancedConfig = { recovery: { enableRecovery: true } }\nconst performanceMonitor = {\n getSnapshot: () => ({\n memory: 0,\n timing: {},\n validationOverhead: 0,\n cacheEfficiency: 0.85,\n }),\n}\nconst _validationCache = { size: 0, hitRate: 0 }\n\n/**\n * Debug session information\n */\nexport interface DebugSession {\n id: string\n startTime: number\n endTime?: number\n validationEvents: DebugEvent[]\n components: ComponentDebugInfo[]\n errors: any[]\n performance: PerformanceSnapshot\n}\n\n/**\n * Debug event types\n */\nexport type ValidationDebugEventType =\n | 'validation-start'\n | 'validation-end'\n | 'validation-error'\n | 'validation-warning'\n | 'validation-recovery'\n | 'component-mount'\n | 'component-update'\n | 'component-unmount'\n | 'cache-hit'\n | 'cache-miss'\n | 'performance-warning'\n\n/**\n * Debug event\n */\nexport interface DebugEvent {\n id: string\n type: ValidationDebugEventType\n timestamp: number\n componentType?: string\n componentId?: string\n message: string\n data?: any\n duration?: number\n stackTrace?: string\n}\n\n/**\n * Component debug information\n */\nexport interface ComponentDebugInfo {\n type: string\n id: string\n props: any\n lifecycle: {\n created: number\n mounted?: number\n lastUpdate?: number\n unmounted?: number\n }\n validation: {\n passed: boolean\n errors: string[]\n warnings: string[]\n lastCheck: number\n }\n performance: {\n mountTime?: number\n updateTimes: number[]\n validationTime: number\n }\n}\n\n/**\n * Performance snapshot\n */\nexport interface PerformanceSnapshot {\n memory: number\n timing: {\n [key: string]: number\n }\n validationOverhead: number\n cacheEfficiency: number\n}\n\n/**\n * Validation debugging inspector\n */\nexport class ValidationDebugger {\n private static instance: ValidationDebugger\n private sessions = new Map<string, DebugSession>()\n private currentSession: DebugSession | null = null\n private eventListeners = new Map<ValidationDebugEventType, Function[]>()\n private componentRegistry = new Map<string, ComponentDebugInfo>()\n\n static getInstance(): ValidationDebugger {\n if (!this.instance) {\n this.instance = new ValidationDebugger()\n }\n return this.instance\n }\n\n /**\n * Start a debugging session\n */\n startSession(sessionId?: string): string {\n const id =\n sessionId ||\n `debug-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`\n\n const session: DebugSession = {\n id,\n startTime: Date.now(),\n validationEvents: [],\n components: [],\n errors: [],\n performance: performanceMonitor.getSnapshot(),\n }\n\n this.sessions.set(id, session)\n this.currentSession = session\n\n this.logEvent('validation-start', `Debug session ${id} started`)\n\n if (process.env.NODE_ENV !== 'production') {\n console.info(`🔍 TachUI Debug Session Started: ${id}`)\n }\n\n return id\n }\n\n /**\n * End the current debugging session\n */\n endSession(): DebugSession | null {\n if (!this.currentSession) {\n console.warn('No active debug session to end')\n return null\n }\n\n this.currentSession.endTime = Date.now()\n\n this.logEvent(\n 'validation-end',\n `Debug session ${this.currentSession.id} ended`\n )\n\n const session = this.currentSession\n this.currentSession = null\n\n if (process.env.NODE_ENV !== 'production') {\n console.info(`🔍 TachUI Debug Session Ended: ${session.id}`)\n this.printSessionSummary(session)\n }\n\n return session\n }\n\n /**\n * Log a debug event\n */\n logEvent(type: ValidationDebugEventType, message: string, data?: any): void {\n if (!this.currentSession) return\n\n const event: DebugEvent = {\n id: `event-${Date.now()}-${Math.random().toString(36).substr(2, 6)}`,\n type,\n timestamp: Date.now(),\n message,\n data,\n stackTrace:\n process.env.NODE_ENV !== 'production' ? new Error().stack : undefined,\n }\n\n this.currentSession.validationEvents.push(event)\n\n // Notify event listeners\n const listeners = this.eventListeners.get(type) || []\n listeners.forEach(listener => {\n try {\n listener(event)\n } catch (error) {\n console.error('Debug event listener error:', error)\n }\n })\n }\n\n /**\n * Register component for debugging\n */\n registerComponent(\n _component: ComponentInstance,\n type: string,\n props: any\n ): string {\n const componentId = `${type}-${Date.now()}-${Math.random().toString(36).substr(2, 6)}`\n\n const debugInfo: ComponentDebugInfo = {\n type,\n id: componentId,\n props,\n lifecycle: {\n created: Date.now(),\n },\n validation: {\n passed: true,\n errors: [],\n warnings: [],\n lastCheck: Date.now(),\n },\n performance: {\n updateTimes: [],\n validationTime: 0,\n },\n }\n\n this.componentRegistry.set(componentId, debugInfo)\n\n if (this.currentSession) {\n this.currentSession.components.push(debugInfo)\n this.logEvent('component-mount', `Component ${type} registered`, {\n componentId,\n props,\n })\n }\n\n return componentId\n }\n\n /**\n * Update component debug info\n */\n updateComponent(\n componentId: string,\n phase: 'mount' | 'update' | 'unmount',\n data?: any\n ): void {\n const debugInfo = this.componentRegistry.get(componentId)\n if (!debugInfo) return\n\n const timestamp = Date.now()\n\n switch (phase) {\n case 'mount':\n debugInfo.lifecycle.mounted = timestamp\n if (data?.performance) {\n debugInfo.performance.mountTime = data.performance.duration\n }\n this.logEvent(\n 'component-mount',\n `Component ${debugInfo.type} mounted`,\n { componentId, data }\n )\n break\n\n case 'update':\n debugInfo.lifecycle.lastUpdate = timestamp\n if (data?.performance) {\n debugInfo.performance.updateTimes.push(data.performance.duration)\n }\n if (data?.props) {\n debugInfo.props = { ...data.props }\n }\n this.logEvent(\n 'component-update',\n `Component ${debugInfo.type} updated`,\n { componentId, data }\n )\n break\n\n case 'unmount':\n debugInfo.lifecycle.unmounted = timestamp\n this.logEvent(\n 'component-unmount',\n `Component ${debugInfo.type} unmounted`,\n { componentId }\n )\n break\n }\n }\n\n /**\n * Record validation error for debugging\n */\n recordValidationError(error: any, componentId?: string): void {\n if (this.currentSession) {\n this.currentSession.errors.push(error)\n this.logEvent('validation-error', `Validation error: ${error.message}`, {\n error,\n componentId,\n })\n }\n\n if (componentId) {\n const debugInfo = this.componentRegistry.get(componentId)\n if (debugInfo) {\n debugInfo.validation.passed = false\n debugInfo.validation.errors.push(error.message)\n }\n }\n }\n\n /**\n * Record validation recovery for debugging\n */\n recordValidationRecovery(\n originalError: string,\n recoveryStrategy: string,\n componentId?: string\n ): void {\n this.logEvent(\n 'validation-recovery',\n `Recovered from validation error using ${recoveryStrategy}`,\n { originalError, recoveryStrategy, componentId }\n )\n\n if (componentId) {\n const debugInfo = this.componentRegistry.get(componentId)\n if (debugInfo) {\n debugInfo.validation.warnings.push(`Recovered from: ${originalError}`)\n }\n }\n }\n\n /**\n * Add event listener for debug events\n */\n addEventListener(\n type: ValidationDebugEventType,\n listener: (event: DebugEvent) => void\n ): void {\n if (!this.eventListeners.has(type)) {\n this.eventListeners.set(type, [])\n }\n this.eventListeners.get(type)!.push(listener)\n }\n\n /**\n * Remove event listener\n */\n removeEventListener(\n type: ValidationDebugEventType,\n listener: Function\n ): void {\n const listeners = this.eventListeners.get(type)\n if (listeners) {\n const index = listeners.indexOf(listener)\n if (index > -1) {\n listeners.splice(index, 1)\n }\n }\n }\n\n /**\n * Get debug session by ID\n */\n getSession(sessionId: string): DebugSession | undefined {\n return this.sessions.get(sessionId)\n }\n\n /**\n * Get current active session\n */\n getCurrentSession(): DebugSession | null {\n return this.currentSession\n }\n\n /**\n * Get all debug sessions\n */\n getAllSessions(): DebugSession[] {\n return Array.from(this.sessions.values())\n }\n\n /**\n * Search debug events by criteria\n */\n searchEvents(criteria: {\n type?: ValidationDebugEventType\n componentType?: string\n timeRange?: { start: number; end: number }\n messageContains?: string\n }): DebugEvent[] {\n if (!this.currentSession) return []\n\n return this.currentSession.validationEvents.filter(event => {\n if (criteria.type && event.type !== criteria.type) return false\n if (\n criteria.componentType &&\n event.componentType !== criteria.componentType\n )\n return false\n if (criteria.timeRange) {\n if (\n event.timestamp < criteria.timeRange.start ||\n event.timestamp > criteria.timeRange.end\n )\n return false\n }\n if (\n criteria.messageContains &&\n !event.message.includes(criteria.messageContains)\n )\n return false\n return true\n })\n }\n\n /**\n * Analyze component performance\n */\n analyzeComponent(componentId: string): ComponentDebugInfo | null {\n const debugInfo = this.componentRegistry.get(componentId)\n if (!debugInfo) return null\n\n // Calculate average update time\n if (debugInfo.performance.updateTimes.length > 0) {\n const average =\n debugInfo.performance.updateTimes.reduce((sum, time) => sum + time, 0) /\n debugInfo.performance.updateTimes.length\n console.info(\n `📊 Component ${debugInfo.type} average update time: ${average.toFixed(2)}ms`\n )\n }\n\n // Calculate component age\n const age = Date.now() - debugInfo.lifecycle.created\n console.info(`📊 Component ${debugInfo.type} age: ${age}ms`)\n\n return debugInfo\n }\n\n /**\n * Generate performance report\n */\n generatePerformanceReport(): string {\n if (!this.currentSession) return 'No active debug session'\n\n const components = this.currentSession.components\n const totalValidationTime = components.reduce(\n (sum, comp) => sum + comp.performance.validationTime,\n 0\n )\n const averageValidationTime =\n components.length > 0 ? totalValidationTime / components.length : 0\n\n const report = [\n '🔍 TachUI Validation Performance Report',\n `Session ID: ${this.currentSession.id}`,\n `Duration: ${this.currentSession.endTime ? this.currentSession.endTime - this.currentSession.startTime : 'Ongoing'}ms`,\n `Components: ${components.length}`,\n `Validation Events: ${this.currentSession.validationEvents.length}`,\n `Errors: ${this.currentSession.errors.length}`,\n `Average Validation Time: ${averageValidationTime.toFixed(2)}ms`,\n '',\n 'Component Performance:',\n ...components.map(comp => {\n const updateCount = comp.performance.updateTimes.length\n const avgUpdateTime =\n updateCount > 0\n ? comp.performance.updateTimes.reduce(\n (sum, time) => sum + time,\n 0\n ) / updateCount\n : 0\n return ` ${comp.type} (${comp.id}): ${comp.performance.validationTime}ms validation, ${avgUpdateTime.toFixed(2)}ms avg update, ${updateCount} updates`\n }),\n ].join('\\n')\n\n return report\n }\n\n /**\n * Clear all debug data\n */\n clearDebugData(): void {\n this.sessions.clear()\n this.currentSession = null\n this.componentRegistry.clear()\n this.eventListeners.clear()\n console.info('🔍 Debug data cleared')\n }\n\n /**\n * Export debug data for external analysis\n */\n exportDebugData(): string {\n const data = {\n sessions: Array.from(this.sessions.entries()),\n currentSession: this.currentSession,\n components: Array.from(this.componentRegistry.entries()),\n timestamp: Date.now(),\n }\n return JSON.stringify(data, null, 2)\n }\n\n /**\n * Import debug data from external source\n */\n importDebugData(jsonData: string): void {\n try {\n const data = JSON.parse(jsonData)\n\n if (data.sessions) {\n this.sessions = new Map(data.sessions)\n }\n\n if (data.components) {\n this.componentRegistry = new Map(data.components)\n }\n\n if (data.currentSession) {\n this.currentSession = data.currentSession\n }\n\n console.info('🔍 Debug data imported successfully')\n } catch (error) {\n console.error('Failed to import debug data:', error)\n }\n }\n\n /**\n * Print session summary to console\n */\n private printSessionSummary(session: DebugSession): void {\n const duration = session.endTime ? session.endTime - session.startTime : 0\n const errorCount = session.errors.length\n const componentCount = session.components.length\n const eventCount = session.validationEvents.length\n\n console.group(`📊 Debug Session Summary: ${session.id}`)\n console.info(`Duration: ${duration}ms`)\n console.info(`Components: ${componentCount}`)\n console.info(`Events: ${eventCount}`)\n console.info(`Errors: ${errorCount}`)\n\n if (errorCount > 0) {\n console.warn(\n 'Errors encountered:',\n session.errors.map(e => e.message)\n )\n }\n\n const performanceEvents = session.validationEvents.filter(\n e => e.type === 'performance-warning'\n )\n if (performanceEvents.length > 0) {\n console.warn(`Performance warnings: ${performanceEvents.length}`)\n }\n\n console.groupEnd()\n }\n}\n\n/**\n * Global validation debugger instance\n */\nexport const validationDebugger = ValidationDebugger.getInstance()\n\n/**\n * Validation debugging utilities\n */\nexport const ValidationDebugUtils = {\n /**\n * Start debugging session\n */\n startSession: (sessionId?: string) =>\n validationDebugger.startSession(sessionId),\n\n /**\n * End debugging session\n */\n endSession: () => validationDebugger.endSession(),\n\n /**\n * Log debug event\n */\n logEvent: (type: ValidationDebugEventType, message: string, data?: any) =>\n validationDebugger.logEvent(type, message, data),\n\n /**\n * Register component for debugging\n */\n registerComponent: (component: ComponentInstance, type: string, props: any) =>\n validationDebugger.registerComponent(component, type, props),\n\n /**\n * Record validation error\n */\n recordError: (error: any, componentId?: string) =>\n validationDebugger.recordValidationError(error, componentId),\n\n /**\n * Record validation recovery\n */\n recordRecovery: (\n originalError: string,\n strategy: string,\n componentId?: string\n ) =>\n validationDebugger.recordValidationRecovery(\n originalError,\n strategy,\n componentId\n ),\n\n /**\n * Get performance report\n */\n getPerformanceReport: () => validationDebugger.generatePerformanceReport(),\n\n /**\n * Search events\n */\n searchEvents: (criteria: any) => validationDebugger.searchEvents(criteria),\n\n /**\n * Export debug data\n */\n export: () => validationDebugger.exportDebugData(),\n\n /**\n * Import debug data\n */\n import: (data: string) => validationDebugger.importDebugData(data),\n\n /**\n * Clear all debug data\n */\n clear: () => validationDebugger.clearDebugData(),\n\n /**\n * Test debugging system\n */\n test: () => {\n console.group('🔍 Validation Debug System Test')\n\n try {\n // Start a test session\n const sessionId = validationDebugger.startSession('test-session')\n console.info('✅ Debug session started:', sessionId)\n\n // Register a test component\n const componentId = validationDebugger.registerComponent(\n {} as ComponentInstance,\n 'TestComponent',\n { prop: 'value' }\n )\n console.info('✅ Test component registered:', componentId)\n\n // Log some test events\n validationDebugger.logEvent('validation-start', 'Test validation started')\n validationDebugger.logEvent('cache-hit', 'Test cache hit', {\n key: 'test-key',\n })\n validationDebugger.logEvent('validation-end', 'Test validation completed')\n\n // Update component\n validationDebugger.updateComponent(componentId, 'mount', {\n performance: { duration: 5 },\n })\n validationDebugger.updateComponent(componentId, 'update', {\n props: { updated: true },\n })\n\n // Record a test error and recovery\n validationDebugger.recordValidationError(\n new Error('Test error'),\n componentId\n )\n validationDebugger.recordValidationRecovery(\n 'Test error',\n 'fallback',\n componentId\n )\n\n // Generate and log performance report\n const _report = validationDebugger.generatePerformanceReport()\n console.info('✅ Performance report generated')\n\n // Search events\n const errorEvents = validationDebugger.searchEvents({\n type: 'validation-error',\n })\n console.info('✅ Event search:', errorEvents.length, 'error events found')\n\n // End session\n const session = validationDebugger.endSession()\n console.info('✅ Debug session ended:', session?.id)\n\n console.info('✅ Validation debugging system is working correctly')\n } catch (error) {\n console.error('❌ Validation debugging test failed:', error)\n }\n\n console.groupEnd()\n },\n}\n"],"names":[],"mappings":"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"}
|