canicode 0.7.0 → 0.8.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/dist/index.d.ts CHANGED
@@ -1,6 +1,8 @@
1
1
  import { z } from 'zod';
2
2
  import { GetFileResponse } from '@figma/rest-api-spec';
3
3
 
4
+ var version = "0.8.0";
5
+
4
6
  declare const SeveritySchema: z.ZodEnum<{
5
7
  blocking: "blocking";
6
8
  risk: "risk";
@@ -668,6 +670,19 @@ declare class FigmaFileLoadError extends Error {
668
670
  * DOCUMENT node and fill in minimal file metadata.
669
671
  */
670
672
  declare function parseMcpMetadataXml(xml: string, fileKey: string, fileName?: string): AnalysisFile;
673
+ /**
674
+ * Enrich an AnalysisFile (from get_metadata) with style data extracted
675
+ * from get_design_context code output.
676
+ *
677
+ * The design context code is React+Tailwind generated for a specific node.
678
+ * We parse Tailwind classes to extract layout, color, spacing, and effect
679
+ * properties, then merge them into matching AnalysisNodes in the tree.
680
+ *
681
+ * @param file - AnalysisFile from parseMcpMetadataXml
682
+ * @param designContextCode - Code string from get_design_context
683
+ * @param targetNodeId - The node ID that get_design_context was called for (optional)
684
+ */
685
+ declare function enrichWithDesignContext(file: AnalysisFile, designContextCode: string, targetNodeId?: string): void;
671
686
 
672
687
  declare const SamplingStrategySchema: z.ZodEnum<{
673
688
  all: "all";
@@ -1113,6 +1128,4 @@ declare class ActivityLogger {
1113
1128
  getLogPath(): string;
1114
1129
  }
1115
1130
 
1116
- declare const VERSION = "0.1.0";
1117
-
1118
- export { ActivityLogger, type AnalysisAgentInput, type AnalysisAgentOutput, type AnalysisFile, AnalysisFileSchema, type AnalysisIssue, type AnalysisNode, AnalysisNodeSchema, type AnalysisNodeType, AnalysisNodeTypeSchema, type AnalysisResult, CATEGORIES, CATEGORY_LABELS, type CalibrationConfig, CalibrationConfigSchema, type CalibrationRun, type CalibrationStatus, CalibrationStatusSchema, type Category, CategorySchema, type CategoryScore, type CategoryScoreResult, CategoryScoreSchema, type Confidence, ConfidenceSchema, type ConversionAgentInput, type ConversionAgentOutput, type ConversionExecutor, type ConversionExecutorResult, type ConversionRecord, ConversionRecordSchema, DEPTH_WEIGHT_CATEGORIES, type Difficulty, DifficultySchema, type EvaluationAgentInput, type EvaluationAgentOutput, FigmaClient, FigmaClientError, type FigmaClientOptions, FigmaFileLoadError, type FigmaUrlInfo, FigmaUrlInfoSchema, FigmaUrlParseError, type Grade, type Issue, IssueSchema, type LayoutAlign, LayoutAlignSchema, type LayoutMode, LayoutModeSchema, type LayoutPositioning, LayoutPositioningSchema, type MismatchCase, MismatchCaseSchema, type MismatchType, MismatchTypeSchema, type NewRuleProposal, NewRuleProposalSchema, type NodeIssueDetail, type NodeIssueSummary, NodeIssueSummarySchema, type Preset, RULE_CONFIGS, type Report, type ReportMetadata, ReportMetadataSchema, ReportSchema, type Rule, type RuleCheckFn, type RuleConfig, RuleConfigSchema, type RuleContext, type RuleDefinition, RuleDefinitionSchema, RuleEngine, type RuleEngineOptions, type RuleId, type RuleRelatedStruggle, RuleRelatedStruggleSchema, type RuleViolation, SEVERITY_LABELS, SEVERITY_WEIGHT, type SamplingStrategy, SamplingStrategySchema, type ScoreAdjustment, ScoreAdjustmentSchema, type ScoreReport, type Severity, SeveritySchema, type TuningAgentInput, type TuningAgentOutput, type UncoveredStruggle, UncoveredStruggleSchema, VERSION, absolutePositionInAutoLayout, ambiguousStructure, analyzeFile, buildConversionPrompt, buildFigmaDeepLink, calculateScores, componentPropertyUnused, createRuleEngine, deepNesting, defaultName, defineRule, detachedInstance, emptyFrame, extractRuleScores, fixedSizeInAutoLayout, fixedWidthInResponsiveContext, formatScoreSummary, generateCalibrationReport, getCategoryLabel, getConfigsWithPreset, getRuleOption, getSeverityLabel, gradeToClassName, groupUsage, hardcodeRisk, imageNoPlaceholder, inconsistentNamingConvention, inconsistentSiblingLayoutDirection, inconsistentSpacing, invisibleLayer, loadFigmaFileFromJson, magicNumberSpacing, missingComponent, missingLayoutHint, missingMaxWidth, missingMinWidth, missingResponsiveBehavior, multipleFillColors, nestedInstanceOverride, noAutoLayout, noDevStatus, nonSemanticName, numericSuffixName, overflowHiddenAbuse, parseFigmaJson, parseFigmaUrl, parseMcpMetadataXml, prototypeLinkInDesign, rawColor, rawFont, rawOpacity, rawShadow, ruleRegistry, runAnalysisAgent, runCalibration, runCalibrationAnalyze, runCalibrationEvaluate, runConversionAgent, runEvaluationAgent, runTuningAgent, singleUseComponent, supportsDepthWeight, textTruncationUnhandled, tooLongName, transformFigmaResponse, variantNotUsed, zIndexDependentLayout };
1131
+ export { ActivityLogger, type AnalysisAgentInput, type AnalysisAgentOutput, type AnalysisFile, AnalysisFileSchema, type AnalysisIssue, type AnalysisNode, AnalysisNodeSchema, type AnalysisNodeType, AnalysisNodeTypeSchema, type AnalysisResult, CATEGORIES, CATEGORY_LABELS, type CalibrationConfig, CalibrationConfigSchema, type CalibrationRun, type CalibrationStatus, CalibrationStatusSchema, type Category, CategorySchema, type CategoryScore, type CategoryScoreResult, CategoryScoreSchema, type Confidence, ConfidenceSchema, type ConversionAgentInput, type ConversionAgentOutput, type ConversionExecutor, type ConversionExecutorResult, type ConversionRecord, ConversionRecordSchema, DEPTH_WEIGHT_CATEGORIES, type Difficulty, DifficultySchema, type EvaluationAgentInput, type EvaluationAgentOutput, FigmaClient, FigmaClientError, type FigmaClientOptions, FigmaFileLoadError, type FigmaUrlInfo, FigmaUrlInfoSchema, FigmaUrlParseError, type Grade, type Issue, IssueSchema, type LayoutAlign, LayoutAlignSchema, type LayoutMode, LayoutModeSchema, type LayoutPositioning, LayoutPositioningSchema, type MismatchCase, MismatchCaseSchema, type MismatchType, MismatchTypeSchema, type NewRuleProposal, NewRuleProposalSchema, type NodeIssueDetail, type NodeIssueSummary, NodeIssueSummarySchema, type Preset, RULE_CONFIGS, type Report, type ReportMetadata, ReportMetadataSchema, ReportSchema, type Rule, type RuleCheckFn, type RuleConfig, RuleConfigSchema, type RuleContext, type RuleDefinition, RuleDefinitionSchema, RuleEngine, type RuleEngineOptions, type RuleId, type RuleRelatedStruggle, RuleRelatedStruggleSchema, type RuleViolation, SEVERITY_LABELS, SEVERITY_WEIGHT, type SamplingStrategy, SamplingStrategySchema, type ScoreAdjustment, ScoreAdjustmentSchema, type ScoreReport, type Severity, SeveritySchema, type TuningAgentInput, type TuningAgentOutput, type UncoveredStruggle, UncoveredStruggleSchema, version as VERSION, absolutePositionInAutoLayout, ambiguousStructure, analyzeFile, buildConversionPrompt, buildFigmaDeepLink, calculateScores, componentPropertyUnused, createRuleEngine, deepNesting, defaultName, defineRule, detachedInstance, emptyFrame, enrichWithDesignContext, extractRuleScores, fixedSizeInAutoLayout, fixedWidthInResponsiveContext, formatScoreSummary, generateCalibrationReport, getCategoryLabel, getConfigsWithPreset, getRuleOption, getSeverityLabel, gradeToClassName, groupUsage, hardcodeRisk, imageNoPlaceholder, inconsistentNamingConvention, inconsistentSiblingLayoutDirection, inconsistentSpacing, invisibleLayer, loadFigmaFileFromJson, magicNumberSpacing, missingComponent, missingLayoutHint, missingMaxWidth, missingMinWidth, missingResponsiveBehavior, multipleFillColors, nestedInstanceOverride, noAutoLayout, noDevStatus, nonSemanticName, numericSuffixName, overflowHiddenAbuse, parseFigmaJson, parseFigmaUrl, parseMcpMetadataXml, prototypeLinkInDesign, rawColor, rawFont, rawOpacity, rawShadow, ruleRegistry, runAnalysisAgent, runCalibration, runCalibrationAnalyze, runCalibrationEvaluate, runConversionAgent, runEvaluationAgent, runTuningAgent, singleUseComponent, supportsDepthWeight, textTruncationUnhandled, tooLongName, transformFigmaResponse, variantNotUsed, zIndexDependentLayout };
package/dist/index.js CHANGED
@@ -3,7 +3,8 @@ import { readFile, writeFile, appendFile } from 'fs/promises';
3
3
  import { basename, resolve, dirname } from 'path';
4
4
  import { existsSync, mkdirSync } from 'fs';
5
5
 
6
- // src/core/contracts/severity.ts
6
+ // package.json
7
+ var version = "0.8.0";
7
8
  var SeveritySchema = z.enum([
8
9
  "blocking",
9
10
  "risk",
@@ -2372,6 +2373,211 @@ var FigmaFileLoadError = class extends Error {
2372
2373
  }
2373
2374
  };
2374
2375
 
2376
+ // src/core/adapters/tailwind-parser.ts
2377
+ var SPACING_SCALE = {
2378
+ "0": 0,
2379
+ "px": 1,
2380
+ "0.5": 2,
2381
+ "1": 4,
2382
+ "1.5": 6,
2383
+ "2": 8,
2384
+ "2.5": 10,
2385
+ "3": 12,
2386
+ "3.5": 14,
2387
+ "4": 16,
2388
+ "5": 20,
2389
+ "6": 24,
2390
+ "7": 28,
2391
+ "8": 32,
2392
+ "9": 36,
2393
+ "10": 40,
2394
+ "11": 44,
2395
+ "12": 48,
2396
+ "14": 56,
2397
+ "16": 64,
2398
+ "20": 80,
2399
+ "24": 96,
2400
+ "28": 112,
2401
+ "32": 128,
2402
+ "36": 144,
2403
+ "40": 160,
2404
+ "44": 176,
2405
+ "48": 192,
2406
+ "52": 208,
2407
+ "56": 224,
2408
+ "60": 240,
2409
+ "64": 256,
2410
+ "72": 288,
2411
+ "80": 320,
2412
+ "96": 384
2413
+ };
2414
+ function resolveSpacing(value) {
2415
+ const arbMatch = value.match(/^\[(\d+(?:\.\d+)?)px\]$/);
2416
+ if (arbMatch?.[1]) return parseFloat(arbMatch[1]);
2417
+ return SPACING_SCALE[value];
2418
+ }
2419
+ function extractStylesFromClasses(classes) {
2420
+ const styles = {};
2421
+ const tokens = classes.split(/\s+/);
2422
+ for (const token of tokens) {
2423
+ if (token === "flex" || token === "flex-row") {
2424
+ styles.layoutMode = "HORIZONTAL";
2425
+ } else if (token === "flex-col") {
2426
+ styles.layoutMode = "VERTICAL";
2427
+ } else if (token === "absolute") {
2428
+ styles.layoutPositioning = "ABSOLUTE";
2429
+ } else if (token === "relative" || token === "static") {
2430
+ styles.layoutPositioning = "AUTO";
2431
+ } else if (token === "w-full") {
2432
+ styles.layoutSizingHorizontal = "FILL";
2433
+ } else if (token === "h-full") {
2434
+ styles.layoutSizingVertical = "FILL";
2435
+ } else if (token === "w-fit") {
2436
+ styles.layoutSizingHorizontal = "HUG";
2437
+ } else if (token === "h-fit") {
2438
+ styles.layoutSizingVertical = "HUG";
2439
+ } else if (token.match(/^w-\[.+\]$/) || token.match(/^w-\d/)) {
2440
+ styles.layoutSizingHorizontal = "FIXED";
2441
+ } else if (token.match(/^h-\[.+\]$/) || token.match(/^h-\d/)) {
2442
+ styles.layoutSizingVertical = "FIXED";
2443
+ } else if (token.startsWith("gap-")) {
2444
+ const val = token.slice(4);
2445
+ const px = resolveSpacing(val);
2446
+ if (px !== void 0) styles.itemSpacing = px;
2447
+ } else if (token.startsWith("p-") && !token.startsWith("pl-") && !token.startsWith("pr-") && !token.startsWith("pt-") && !token.startsWith("pb-") && !token.startsWith("px-") && !token.startsWith("py-")) {
2448
+ const val = token.slice(2);
2449
+ const px = resolveSpacing(val);
2450
+ if (px !== void 0) {
2451
+ styles.paddingLeft = px;
2452
+ styles.paddingRight = px;
2453
+ styles.paddingTop = px;
2454
+ styles.paddingBottom = px;
2455
+ }
2456
+ } else if (token.startsWith("px-")) {
2457
+ const px = resolveSpacing(token.slice(3));
2458
+ if (px !== void 0) {
2459
+ styles.paddingLeft = px;
2460
+ styles.paddingRight = px;
2461
+ }
2462
+ } else if (token.startsWith("py-")) {
2463
+ const px = resolveSpacing(token.slice(3));
2464
+ if (px !== void 0) {
2465
+ styles.paddingTop = px;
2466
+ styles.paddingBottom = px;
2467
+ }
2468
+ } else if (token.startsWith("pl-")) {
2469
+ const px = resolveSpacing(token.slice(3));
2470
+ if (px !== void 0) styles.paddingLeft = px;
2471
+ } else if (token.startsWith("pr-")) {
2472
+ const px = resolveSpacing(token.slice(3));
2473
+ if (px !== void 0) styles.paddingRight = px;
2474
+ } else if (token.startsWith("pt-")) {
2475
+ const px = resolveSpacing(token.slice(3));
2476
+ if (px !== void 0) styles.paddingTop = px;
2477
+ } else if (token.startsWith("pb-")) {
2478
+ const px = resolveSpacing(token.slice(3));
2479
+ if (px !== void 0) styles.paddingBottom = px;
2480
+ } else if (token.startsWith("bg-[")) {
2481
+ const colorMatch = token.match(/^bg-\[(.+)\]$/);
2482
+ if (colorMatch?.[1]) {
2483
+ const color = colorMatch[1];
2484
+ if (!styles.fills) styles.fills = [];
2485
+ if (color.startsWith("var(")) {
2486
+ styles.fills.push({ type: "SOLID", color: {}, boundVariable: color });
2487
+ } else {
2488
+ styles.fills.push({ type: "SOLID", color: parseHexColor(color) });
2489
+ }
2490
+ }
2491
+ } else if (token === "shadow" || token.startsWith("shadow-")) {
2492
+ if (!styles.effects) styles.effects = [];
2493
+ styles.effects.push({ type: "DROP_SHADOW" });
2494
+ }
2495
+ }
2496
+ return styles;
2497
+ }
2498
+ function parseHexColor(hex) {
2499
+ const clean = hex.replace("#", "");
2500
+ if (clean.length === 6 || clean.length === 8) {
2501
+ return {
2502
+ r: parseInt(clean.slice(0, 2), 16) / 255,
2503
+ g: parseInt(clean.slice(2, 4), 16) / 255,
2504
+ b: parseInt(clean.slice(4, 6), 16) / 255,
2505
+ a: clean.length === 8 ? parseInt(clean.slice(6, 8), 16) / 255 : 1
2506
+ };
2507
+ }
2508
+ return { r: 0, g: 0, b: 0, a: 1 };
2509
+ }
2510
+ function extractRootClasses(code) {
2511
+ const match = code.match(/className="([^"]+)"/);
2512
+ return match?.[1] ?? "";
2513
+ }
2514
+ function extractAllClasses(code) {
2515
+ const classes = [];
2516
+ const regex = /className="([^"]+)"/g;
2517
+ let match;
2518
+ while ((match = regex.exec(code)) !== null) {
2519
+ if (match[1]) classes.push(match[1]);
2520
+ }
2521
+ return classes;
2522
+ }
2523
+ function parseDesignContextCode(code) {
2524
+ const rootClasses = extractRootClasses(code);
2525
+ const rootStyles = extractStylesFromClasses(rootClasses);
2526
+ const allClasses = extractAllClasses(code);
2527
+ const aggregatedFills = [...rootStyles.fills ?? []];
2528
+ const aggregatedEffects = [...rootStyles.effects ?? []];
2529
+ for (const cls of allClasses) {
2530
+ const styles = extractStylesFromClasses(cls);
2531
+ if (styles.fills) {
2532
+ for (const fill of styles.fills) aggregatedFills.push(fill);
2533
+ }
2534
+ if (styles.effects) {
2535
+ for (const effect of styles.effects) aggregatedEffects.push(effect);
2536
+ }
2537
+ }
2538
+ return {
2539
+ ...rootStyles,
2540
+ ...aggregatedFills.length > 0 ? { fills: aggregatedFills } : {},
2541
+ ...aggregatedEffects.length > 0 ? { effects: aggregatedEffects } : {}
2542
+ };
2543
+ }
2544
+ function parseCodeHeader(code) {
2545
+ const headerMatch = code.match(/\/\*\s*(.+?)\s*\*\//);
2546
+ if (!headerMatch?.[1]) return {};
2547
+ const header = headerMatch[1];
2548
+ const result = {};
2549
+ const nameParts = header.split(" \u2014 ");
2550
+ if (nameParts[0]) result.name = nameParts[0].trim();
2551
+ const dimMatch = header.match(/(\d+)x(\d+)/);
2552
+ if (dimMatch?.[1] && dimMatch[2]) {
2553
+ result.width = parseInt(dimMatch[1]);
2554
+ result.height = parseInt(dimMatch[2]);
2555
+ }
2556
+ const typeMatch = header.match(/\b(COMPONENT|FRAME|INSTANCE|GROUP|SECTION)\b/);
2557
+ if (typeMatch?.[1]) result.type = typeMatch[1];
2558
+ if (header.includes("no auto-layout")) {
2559
+ result.hasAutoLayout = false;
2560
+ } else if (header.includes("auto-layout")) {
2561
+ result.hasAutoLayout = true;
2562
+ if (header.includes("vertical auto-layout")) result.layoutDirection = "VERTICAL";
2563
+ else if (header.includes("horizontal auto-layout")) result.layoutDirection = "HORIZONTAL";
2564
+ }
2565
+ return result;
2566
+ }
2567
+ function enrichNodeWithStyles(node, styles) {
2568
+ if (styles.layoutMode && !node.layoutMode) node.layoutMode = styles.layoutMode;
2569
+ if (styles.layoutPositioning && !node.layoutPositioning) node.layoutPositioning = styles.layoutPositioning;
2570
+ if (styles.layoutSizingHorizontal && !node.layoutSizingHorizontal) node.layoutSizingHorizontal = styles.layoutSizingHorizontal;
2571
+ if (styles.layoutSizingVertical && !node.layoutSizingVertical) node.layoutSizingVertical = styles.layoutSizingVertical;
2572
+ if (styles.itemSpacing !== void 0 && node.itemSpacing === void 0) node.itemSpacing = styles.itemSpacing;
2573
+ if (styles.paddingLeft !== void 0 && node.paddingLeft === void 0) node.paddingLeft = styles.paddingLeft;
2574
+ if (styles.paddingRight !== void 0 && node.paddingRight === void 0) node.paddingRight = styles.paddingRight;
2575
+ if (styles.paddingTop !== void 0 && node.paddingTop === void 0) node.paddingTop = styles.paddingTop;
2576
+ if (styles.paddingBottom !== void 0 && node.paddingBottom === void 0) node.paddingBottom = styles.paddingBottom;
2577
+ if (styles.fills && !node.fills) node.fills = styles.fills;
2578
+ if (styles.effects && !node.effects) node.effects = styles.effects;
2579
+ }
2580
+
2375
2581
  // src/core/adapters/figma-mcp-adapter.ts
2376
2582
  var TAG_TYPE_MAP = {
2377
2583
  canvas: "CANVAS",
@@ -2502,6 +2708,54 @@ function parseMcpMetadataXml(xml, fileKey, fileName) {
2502
2708
  styles: {}
2503
2709
  };
2504
2710
  }
2711
+ function enrichWithDesignContext(file, designContextCode, targetNodeId) {
2712
+ const header = parseCodeHeader(designContextCode);
2713
+ const styles = parseDesignContextCode(designContextCode);
2714
+ if (header.hasAutoLayout === true && header.layoutDirection) {
2715
+ if (!styles.layoutMode) styles.layoutMode = header.layoutDirection;
2716
+ } else if (header.hasAutoLayout === false) {
2717
+ delete styles.layoutMode;
2718
+ }
2719
+ if (targetNodeId) {
2720
+ const node = findNodeById2(file.document, targetNodeId);
2721
+ if (node) {
2722
+ enrichNodeWithStyles(node, styles);
2723
+ enrichChildrenFromCode(node, designContextCode);
2724
+ return;
2725
+ }
2726
+ }
2727
+ enrichNodeWithStyles(file.document, styles);
2728
+ enrichChildrenFromCode(file.document, designContextCode);
2729
+ }
2730
+ function enrichChildrenFromCode(parent, code) {
2731
+ if (!parent.children) return;
2732
+ for (const child of parent.children) {
2733
+ const escapedName = child.name.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
2734
+ const commentPattern = new RegExp(
2735
+ `\\{/\\*\\s*${escapedName}(?:\\s*\u2014[^*]*)?\\s*\\*/\\}\\s*\\n\\s*<\\w+[^>]*className="([^"]*)"`
2736
+ );
2737
+ const match = code.match(commentPattern);
2738
+ if (match?.[1]) {
2739
+ const childStyles = parseDesignContextCode(
2740
+ `<div className="${match[1]}">`
2741
+ );
2742
+ enrichNodeWithStyles(child, childStyles);
2743
+ }
2744
+ if (child.children) {
2745
+ enrichChildrenFromCode(child, code);
2746
+ }
2747
+ }
2748
+ }
2749
+ function findNodeById2(node, id) {
2750
+ if (node.id === id) return node;
2751
+ if (node.children) {
2752
+ for (const child of node.children) {
2753
+ const found = findNodeById2(child, id);
2754
+ if (found) return found;
2755
+ }
2756
+ }
2757
+ return void 0;
2758
+ }
2505
2759
  var SamplingStrategySchema = z.enum(["all", "top-issues", "random"]);
2506
2760
  var CalibrationStatusSchema = z.enum([
2507
2761
  "pending",
@@ -3535,9 +3789,6 @@ async function runCalibration(config, executor, options) {
3535
3789
  }
3536
3790
  }
3537
3791
 
3538
- // src/index.ts
3539
- var VERSION = "0.1.0";
3540
-
3541
- export { ActivityLogger, AnalysisFileSchema, AnalysisNodeSchema, AnalysisNodeTypeSchema, CATEGORIES, CATEGORY_LABELS, CalibrationConfigSchema, CalibrationStatusSchema, CategorySchema, CategoryScoreSchema, ConfidenceSchema, ConversionRecordSchema, DEPTH_WEIGHT_CATEGORIES, DifficultySchema, FigmaClient, FigmaClientError, FigmaFileLoadError, FigmaUrlInfoSchema, FigmaUrlParseError, IssueSchema, LayoutAlignSchema, LayoutModeSchema, LayoutPositioningSchema, MismatchCaseSchema, MismatchTypeSchema, NewRuleProposalSchema, NodeIssueSummarySchema, RULE_CONFIGS, ReportMetadataSchema, ReportSchema, RuleConfigSchema, RuleDefinitionSchema, RuleEngine, RuleRelatedStruggleSchema, SEVERITY_LABELS, SEVERITY_WEIGHT, SamplingStrategySchema, ScoreAdjustmentSchema, SeveritySchema, UncoveredStruggleSchema, VERSION, absolutePositionInAutoLayout, ambiguousStructure, analyzeFile, buildConversionPrompt, buildFigmaDeepLink, calculateScores, componentPropertyUnused, createRuleEngine, deepNesting, defaultName, defineRule, detachedInstance, emptyFrame, extractRuleScores, fixedSizeInAutoLayout, fixedWidthInResponsiveContext, formatScoreSummary, generateCalibrationReport, getCategoryLabel, getConfigsWithPreset, getRuleOption, getSeverityLabel, gradeToClassName, groupUsage, hardcodeRisk, imageNoPlaceholder, inconsistentNamingConvention, inconsistentSiblingLayoutDirection, inconsistentSpacing, invisibleLayer, loadFigmaFileFromJson, magicNumberSpacing, missingComponent, missingLayoutHint, missingMaxWidth, missingMinWidth, missingResponsiveBehavior, multipleFillColors, nestedInstanceOverride, noAutoLayout, noDevStatus, nonSemanticName, numericSuffixName, overflowHiddenAbuse, parseFigmaJson, parseFigmaUrl, parseMcpMetadataXml, prototypeLinkInDesign, rawColor, rawFont, rawOpacity, rawShadow, ruleRegistry, runAnalysisAgent, runCalibration, runCalibrationAnalyze, runCalibrationEvaluate, runConversionAgent, runEvaluationAgent, runTuningAgent, singleUseComponent, supportsDepthWeight, textTruncationUnhandled, tooLongName, transformFigmaResponse, variantNotUsed, zIndexDependentLayout };
3792
+ export { ActivityLogger, AnalysisFileSchema, AnalysisNodeSchema, AnalysisNodeTypeSchema, CATEGORIES, CATEGORY_LABELS, CalibrationConfigSchema, CalibrationStatusSchema, CategorySchema, CategoryScoreSchema, ConfidenceSchema, ConversionRecordSchema, DEPTH_WEIGHT_CATEGORIES, DifficultySchema, FigmaClient, FigmaClientError, FigmaFileLoadError, FigmaUrlInfoSchema, FigmaUrlParseError, IssueSchema, LayoutAlignSchema, LayoutModeSchema, LayoutPositioningSchema, MismatchCaseSchema, MismatchTypeSchema, NewRuleProposalSchema, NodeIssueSummarySchema, RULE_CONFIGS, ReportMetadataSchema, ReportSchema, RuleConfigSchema, RuleDefinitionSchema, RuleEngine, RuleRelatedStruggleSchema, SEVERITY_LABELS, SEVERITY_WEIGHT, SamplingStrategySchema, ScoreAdjustmentSchema, SeveritySchema, UncoveredStruggleSchema, version as VERSION, absolutePositionInAutoLayout, ambiguousStructure, analyzeFile, buildConversionPrompt, buildFigmaDeepLink, calculateScores, componentPropertyUnused, createRuleEngine, deepNesting, defaultName, defineRule, detachedInstance, emptyFrame, enrichWithDesignContext, extractRuleScores, fixedSizeInAutoLayout, fixedWidthInResponsiveContext, formatScoreSummary, generateCalibrationReport, getCategoryLabel, getConfigsWithPreset, getRuleOption, getSeverityLabel, gradeToClassName, groupUsage, hardcodeRisk, imageNoPlaceholder, inconsistentNamingConvention, inconsistentSiblingLayoutDirection, inconsistentSpacing, invisibleLayer, loadFigmaFileFromJson, magicNumberSpacing, missingComponent, missingLayoutHint, missingMaxWidth, missingMinWidth, missingResponsiveBehavior, multipleFillColors, nestedInstanceOverride, noAutoLayout, noDevStatus, nonSemanticName, numericSuffixName, overflowHiddenAbuse, parseFigmaJson, parseFigmaUrl, parseMcpMetadataXml, prototypeLinkInDesign, rawColor, rawFont, rawOpacity, rawShadow, ruleRegistry, runAnalysisAgent, runCalibration, runCalibrationAnalyze, runCalibrationEvaluate, runConversionAgent, runEvaluationAgent, runTuningAgent, singleUseComponent, supportsDepthWeight, textTruncationUnhandled, tooLongName, transformFigmaResponse, variantNotUsed, zIndexDependentLayout };
3542
3793
  //# sourceMappingURL=index.js.map
3543
3794
  //# sourceMappingURL=index.js.map