@refraction-ui/react 0.18.2 → 0.18.4

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.
Files changed (35) hide show
  1. package/dist/dist-IBD7CHHX.js +649 -0
  2. package/dist/dist-IBD7CHHX.js.map +1 -0
  3. package/dist/index.cjs +3712 -1306
  4. package/dist/index.cjs.map +1 -1
  5. package/dist/index.d.cts +5 -0
  6. package/dist/index.d.ts +5 -0
  7. package/dist/index.js +1727 -72
  8. package/dist/index.js.map +1 -1
  9. package/dist/internal/ai/index.d.cts +111 -0
  10. package/dist/internal/ai/index.d.ts +111 -0
  11. package/dist/internal/charts/index.d.cts +95 -0
  12. package/dist/internal/charts/index.d.ts +95 -0
  13. package/dist/internal/command-input/index.d.cts +41 -0
  14. package/dist/internal/command-input/index.d.ts +41 -0
  15. package/dist/internal/diff-viewer/index.d.cts +118 -0
  16. package/dist/internal/diff-viewer/index.d.ts +118 -0
  17. package/dist/internal/react-ai/index.d.cts +59 -0
  18. package/dist/internal/react-ai/index.d.ts +59 -0
  19. package/dist/internal/react-charts/index.d.cts +108 -0
  20. package/dist/internal/react-charts/index.d.ts +108 -0
  21. package/dist/internal/react-command-input/index.d.cts +21 -0
  22. package/dist/internal/react-command-input/index.d.ts +21 -0
  23. package/dist/internal/react-diff-viewer/index.d.cts +45 -0
  24. package/dist/internal/react-diff-viewer/index.d.ts +45 -0
  25. package/dist/internal/react-dropdown-menu/index.d.cts +5 -0
  26. package/dist/internal/react-dropdown-menu/index.d.ts +5 -0
  27. package/dist/internal/react-feedback-dialog/index.d.cts +5 -19
  28. package/dist/internal/react-feedback-dialog/index.d.ts +5 -19
  29. package/dist/internal/react-location-selector/index.d.cts +14 -0
  30. package/dist/internal/react-location-selector/index.d.ts +14 -0
  31. package/dist/theme.cjs +10 -10
  32. package/dist/theme.cjs.map +1 -1
  33. package/dist/theme.js +10 -10
  34. package/dist/theme.js.map +1 -1
  35. package/package.json +2 -1
@@ -0,0 +1,111 @@
1
+ /** AI provider interface — implemented by adapter packages (OpenAI, Anthropic, etc.) */
2
+ interface AIProvider {
3
+ name: string;
4
+ generateText(prompt: string, opts?: GenerateOptions): Promise<string>;
5
+ generateJSON<T = unknown>(prompt: string, opts?: GenerateOptions): Promise<T>;
6
+ supportsVision: boolean;
7
+ }
8
+ /** Options passed to generate calls */
9
+ interface GenerateOptions {
10
+ provider?: string;
11
+ model?: string;
12
+ intent?: string;
13
+ image?: unknown;
14
+ maxTokens?: number;
15
+ temperature?: number;
16
+ [key: string]: unknown;
17
+ }
18
+ /** TTS provider interface — implemented by TTS adapter packages */
19
+ interface TTSProvider {
20
+ name: string;
21
+ speak(text: string, opts?: TTSOptions): void;
22
+ stop(): void;
23
+ isSupported: boolean;
24
+ }
25
+ /** Options passed to TTS calls */
26
+ interface TTSOptions {
27
+ provider?: string;
28
+ voice?: string;
29
+ language?: string;
30
+ speed?: number;
31
+ onEnd?: () => void;
32
+ [key: string]: unknown;
33
+ }
34
+ /** Router function — picks a provider name given a request and context */
35
+ type RouterFn<T> = (request: T, context: {
36
+ providers: string[];
37
+ default: string;
38
+ }) => string;
39
+ /** Config for createAI */
40
+ interface AIConfig {
41
+ default?: string;
42
+ fallback?: string[];
43
+ router?: RouterFn<GenerateOptions>;
44
+ }
45
+ /** Config for createTTS */
46
+ interface TTSConfig {
47
+ default?: string;
48
+ router?: RouterFn<TTSOptions>;
49
+ }
50
+ /** Return type of createAI */
51
+ interface AIAPI {
52
+ providers: string[];
53
+ generateText(prompt: string, opts?: GenerateOptions): Promise<string>;
54
+ generateJSON<T = unknown>(prompt: string, opts?: GenerateOptions): Promise<T>;
55
+ addProvider(name: string, provider: AIProvider): void;
56
+ removeProvider(name: string): void;
57
+ }
58
+ /** Return type of createTTS */
59
+ interface TTSAPI {
60
+ providers: string[];
61
+ speak(text: string, opts?: TTSOptions): void;
62
+ stop(): void;
63
+ addProvider(name: string, provider: TTSProvider): void;
64
+ }
65
+
66
+ /**
67
+ * createAI — creates an AI manager that routes requests to registered providers.
68
+ *
69
+ * Resolution order: explicit opts.provider -> router -> default -> first available
70
+ * Fallback: on error, try next in fallback chain
71
+ */
72
+ declare function createAI(config?: AIConfig): AIAPI;
73
+
74
+ /**
75
+ * createTTS — creates a TTS manager that routes requests to registered providers.
76
+ *
77
+ * Resolution order: explicit opts.provider -> router -> default -> first available
78
+ */
79
+ declare function createTTS(config?: TTSConfig): TTSAPI;
80
+
81
+ interface MockAIResponses {
82
+ text?: string[];
83
+ json?: unknown[];
84
+ }
85
+ interface MockTTSProviderExtended extends TTSProvider {
86
+ speakCalls: Array<{
87
+ text: string;
88
+ opts?: TTSOptions;
89
+ }>;
90
+ stopCalls: number;
91
+ }
92
+ /**
93
+ * createMockAIProvider — returns an AIProvider that returns canned responses.
94
+ * Used for testing without real API calls.
95
+ */
96
+ declare function createMockAIProvider(name?: string, responses?: MockAIResponses): AIProvider;
97
+ /**
98
+ * createMockTTSProvider — returns a TTSProvider that tracks calls for assertion.
99
+ * Used for testing without real speech synthesis.
100
+ */
101
+ declare function createMockTTSProvider(name?: string): MockTTSProviderExtended;
102
+
103
+ /**
104
+ * sanitizeForSpeech — converts AI-generated text (with markdown, LaTeX, HTML)
105
+ * into clean, speakable plain text suitable for TTS engines.
106
+ *
107
+ * 30+ regex-based transformation rules applied in order.
108
+ */
109
+ declare function sanitizeForSpeech(text: string): string;
110
+
111
+ export { type AIAPI, type AIConfig, type AIProvider, type GenerateOptions, type MockAIResponses, type MockTTSProviderExtended, type RouterFn, type TTSAPI, type TTSConfig, type TTSOptions, type TTSProvider, createAI, createMockAIProvider, createMockTTSProvider, createTTS, sanitizeForSpeech };
@@ -0,0 +1,111 @@
1
+ /** AI provider interface — implemented by adapter packages (OpenAI, Anthropic, etc.) */
2
+ interface AIProvider {
3
+ name: string;
4
+ generateText(prompt: string, opts?: GenerateOptions): Promise<string>;
5
+ generateJSON<T = unknown>(prompt: string, opts?: GenerateOptions): Promise<T>;
6
+ supportsVision: boolean;
7
+ }
8
+ /** Options passed to generate calls */
9
+ interface GenerateOptions {
10
+ provider?: string;
11
+ model?: string;
12
+ intent?: string;
13
+ image?: unknown;
14
+ maxTokens?: number;
15
+ temperature?: number;
16
+ [key: string]: unknown;
17
+ }
18
+ /** TTS provider interface — implemented by TTS adapter packages */
19
+ interface TTSProvider {
20
+ name: string;
21
+ speak(text: string, opts?: TTSOptions): void;
22
+ stop(): void;
23
+ isSupported: boolean;
24
+ }
25
+ /** Options passed to TTS calls */
26
+ interface TTSOptions {
27
+ provider?: string;
28
+ voice?: string;
29
+ language?: string;
30
+ speed?: number;
31
+ onEnd?: () => void;
32
+ [key: string]: unknown;
33
+ }
34
+ /** Router function — picks a provider name given a request and context */
35
+ type RouterFn<T> = (request: T, context: {
36
+ providers: string[];
37
+ default: string;
38
+ }) => string;
39
+ /** Config for createAI */
40
+ interface AIConfig {
41
+ default?: string;
42
+ fallback?: string[];
43
+ router?: RouterFn<GenerateOptions>;
44
+ }
45
+ /** Config for createTTS */
46
+ interface TTSConfig {
47
+ default?: string;
48
+ router?: RouterFn<TTSOptions>;
49
+ }
50
+ /** Return type of createAI */
51
+ interface AIAPI {
52
+ providers: string[];
53
+ generateText(prompt: string, opts?: GenerateOptions): Promise<string>;
54
+ generateJSON<T = unknown>(prompt: string, opts?: GenerateOptions): Promise<T>;
55
+ addProvider(name: string, provider: AIProvider): void;
56
+ removeProvider(name: string): void;
57
+ }
58
+ /** Return type of createTTS */
59
+ interface TTSAPI {
60
+ providers: string[];
61
+ speak(text: string, opts?: TTSOptions): void;
62
+ stop(): void;
63
+ addProvider(name: string, provider: TTSProvider): void;
64
+ }
65
+
66
+ /**
67
+ * createAI — creates an AI manager that routes requests to registered providers.
68
+ *
69
+ * Resolution order: explicit opts.provider -> router -> default -> first available
70
+ * Fallback: on error, try next in fallback chain
71
+ */
72
+ declare function createAI(config?: AIConfig): AIAPI;
73
+
74
+ /**
75
+ * createTTS — creates a TTS manager that routes requests to registered providers.
76
+ *
77
+ * Resolution order: explicit opts.provider -> router -> default -> first available
78
+ */
79
+ declare function createTTS(config?: TTSConfig): TTSAPI;
80
+
81
+ interface MockAIResponses {
82
+ text?: string[];
83
+ json?: unknown[];
84
+ }
85
+ interface MockTTSProviderExtended extends TTSProvider {
86
+ speakCalls: Array<{
87
+ text: string;
88
+ opts?: TTSOptions;
89
+ }>;
90
+ stopCalls: number;
91
+ }
92
+ /**
93
+ * createMockAIProvider — returns an AIProvider that returns canned responses.
94
+ * Used for testing without real API calls.
95
+ */
96
+ declare function createMockAIProvider(name?: string, responses?: MockAIResponses): AIProvider;
97
+ /**
98
+ * createMockTTSProvider — returns a TTSProvider that tracks calls for assertion.
99
+ * Used for testing without real speech synthesis.
100
+ */
101
+ declare function createMockTTSProvider(name?: string): MockTTSProviderExtended;
102
+
103
+ /**
104
+ * sanitizeForSpeech — converts AI-generated text (with markdown, LaTeX, HTML)
105
+ * into clean, speakable plain text suitable for TTS engines.
106
+ *
107
+ * 30+ regex-based transformation rules applied in order.
108
+ */
109
+ declare function sanitizeForSpeech(text: string): string;
110
+
111
+ export { type AIAPI, type AIConfig, type AIProvider, type GenerateOptions, type MockAIResponses, type MockTTSProviderExtended, type RouterFn, type TTSAPI, type TTSConfig, type TTSOptions, type TTSProvider, createAI, createMockAIProvider, createMockTTSProvider, createTTS, sanitizeForSpeech };
@@ -0,0 +1,95 @@
1
+ interface LinearScale {
2
+ (value: number): number;
3
+ invert: (value: number) => number;
4
+ ticks: (count?: number) => number[];
5
+ type: 'linear';
6
+ domain: [number, number];
7
+ range: [number, number];
8
+ }
9
+ declare function createLinearScale(domain: [number, number], range: [number, number]): LinearScale;
10
+ interface BandScale {
11
+ (value: string): number;
12
+ bandwidth: () => number;
13
+ type: 'band';
14
+ domain: string[];
15
+ range: [number, number];
16
+ }
17
+ declare function createBandScale(domain: string[], range: [number, number], padding?: number): BandScale;
18
+ interface TimeScale {
19
+ (value: Date): number;
20
+ invert: (value: number) => Date;
21
+ ticks: (count?: number) => Date[];
22
+ type: 'time';
23
+ domain: [Date, Date];
24
+ range: [number, number];
25
+ }
26
+ declare function createTimeScale(domain: [Date, Date], range: [number, number]): TimeScale;
27
+
28
+ interface HistogramBin {
29
+ x0: number;
30
+ x1: number;
31
+ count: number;
32
+ }
33
+ declare function computeExtent(data: number[]): [number, number];
34
+ declare function computeMean(data: number[]): number;
35
+ declare function computeHistogramBins(data: number[], binCount?: number): HistogramBin[];
36
+ declare function normalizeData<T>(data: T[], accessor: string | ((d: T) => unknown)): unknown[];
37
+
38
+ interface Point {
39
+ x: number;
40
+ y: number;
41
+ }
42
+ declare function linePath(points: Point[]): string;
43
+ declare function areaPath(points: Point[], baseline: number): string;
44
+ declare function arcPath(cx: number, cy: number, radius: number, startAngle: number, endAngle: number): string;
45
+
46
+ interface Margin {
47
+ top: number;
48
+ right: number;
49
+ bottom: number;
50
+ left: number;
51
+ }
52
+ interface Dimensions {
53
+ width: number;
54
+ height: number;
55
+ margin: Margin;
56
+ boundedWidth: number;
57
+ boundedHeight: number;
58
+ }
59
+ interface ChartConfig {
60
+ width?: number;
61
+ height?: number;
62
+ margin?: Partial<Margin>;
63
+ data?: unknown[];
64
+ }
65
+ interface ChartAPI {
66
+ dimensions: Dimensions;
67
+ scales: Record<string, unknown>;
68
+ updateDimensions: (partial: Partial<ChartConfig>) => void;
69
+ }
70
+ declare function combineDimensions(partial: Partial<ChartConfig>): Dimensions;
71
+ declare function createChart(config: ChartConfig): ChartAPI;
72
+
73
+ type AnyScale = LinearScale | BandScale | TimeScale;
74
+ declare function generateTicks(scale: AnyScale, count?: number): (number | string | Date)[];
75
+ declare function formatTick(value: number | string | Date, type: 'number' | 'date' | 'string'): string;
76
+
77
+ /**
78
+ * Colorblind-safe color palettes for charts.
79
+ * Based on Wong (2011) "Points of view: Color blindness" — Nature Methods.
80
+ * These 8 colors are distinguishable by people with all types of color vision deficiency.
81
+ */
82
+ declare const COLORBLIND_SAFE_PALETTE: readonly ["#0072B2", "#E69F00", "#009E73", "#F0E442", "#56B4E9", "#D55E00", "#CC79A7", "#000000"];
83
+ /** Convert hex to HSL string for CSS variables */
84
+ declare function hexToHSL(hex: string): string;
85
+ /** Get a colorblind-safe color by index (wraps around) */
86
+ declare function getChartColor(index: number): string;
87
+ /**
88
+ * Pattern fills for charts — when color alone isn't enough.
89
+ * Returns SVG pattern definitions that can be used as fill.
90
+ */
91
+ type PatternType = 'solid' | 'diagonal' | 'dots' | 'crosshatch' | 'horizontal' | 'vertical' | 'zigzag' | 'checker';
92
+ declare function getPatternDef(type: PatternType, color: string, id: string): string;
93
+ declare const PATTERNS: PatternType[];
94
+
95
+ export { type BandScale, COLORBLIND_SAFE_PALETTE, type ChartAPI, type ChartConfig, type Dimensions, type HistogramBin, type LinearScale, type Margin, PATTERNS, type PatternType, type Point, type TimeScale, arcPath, areaPath, combineDimensions, computeExtent, computeHistogramBins, computeMean, createBandScale, createChart, createLinearScale, createTimeScale, formatTick, generateTicks, getChartColor, getPatternDef, hexToHSL, linePath, normalizeData };
@@ -0,0 +1,95 @@
1
+ interface LinearScale {
2
+ (value: number): number;
3
+ invert: (value: number) => number;
4
+ ticks: (count?: number) => number[];
5
+ type: 'linear';
6
+ domain: [number, number];
7
+ range: [number, number];
8
+ }
9
+ declare function createLinearScale(domain: [number, number], range: [number, number]): LinearScale;
10
+ interface BandScale {
11
+ (value: string): number;
12
+ bandwidth: () => number;
13
+ type: 'band';
14
+ domain: string[];
15
+ range: [number, number];
16
+ }
17
+ declare function createBandScale(domain: string[], range: [number, number], padding?: number): BandScale;
18
+ interface TimeScale {
19
+ (value: Date): number;
20
+ invert: (value: number) => Date;
21
+ ticks: (count?: number) => Date[];
22
+ type: 'time';
23
+ domain: [Date, Date];
24
+ range: [number, number];
25
+ }
26
+ declare function createTimeScale(domain: [Date, Date], range: [number, number]): TimeScale;
27
+
28
+ interface HistogramBin {
29
+ x0: number;
30
+ x1: number;
31
+ count: number;
32
+ }
33
+ declare function computeExtent(data: number[]): [number, number];
34
+ declare function computeMean(data: number[]): number;
35
+ declare function computeHistogramBins(data: number[], binCount?: number): HistogramBin[];
36
+ declare function normalizeData<T>(data: T[], accessor: string | ((d: T) => unknown)): unknown[];
37
+
38
+ interface Point {
39
+ x: number;
40
+ y: number;
41
+ }
42
+ declare function linePath(points: Point[]): string;
43
+ declare function areaPath(points: Point[], baseline: number): string;
44
+ declare function arcPath(cx: number, cy: number, radius: number, startAngle: number, endAngle: number): string;
45
+
46
+ interface Margin {
47
+ top: number;
48
+ right: number;
49
+ bottom: number;
50
+ left: number;
51
+ }
52
+ interface Dimensions {
53
+ width: number;
54
+ height: number;
55
+ margin: Margin;
56
+ boundedWidth: number;
57
+ boundedHeight: number;
58
+ }
59
+ interface ChartConfig {
60
+ width?: number;
61
+ height?: number;
62
+ margin?: Partial<Margin>;
63
+ data?: unknown[];
64
+ }
65
+ interface ChartAPI {
66
+ dimensions: Dimensions;
67
+ scales: Record<string, unknown>;
68
+ updateDimensions: (partial: Partial<ChartConfig>) => void;
69
+ }
70
+ declare function combineDimensions(partial: Partial<ChartConfig>): Dimensions;
71
+ declare function createChart(config: ChartConfig): ChartAPI;
72
+
73
+ type AnyScale = LinearScale | BandScale | TimeScale;
74
+ declare function generateTicks(scale: AnyScale, count?: number): (number | string | Date)[];
75
+ declare function formatTick(value: number | string | Date, type: 'number' | 'date' | 'string'): string;
76
+
77
+ /**
78
+ * Colorblind-safe color palettes for charts.
79
+ * Based on Wong (2011) "Points of view: Color blindness" — Nature Methods.
80
+ * These 8 colors are distinguishable by people with all types of color vision deficiency.
81
+ */
82
+ declare const COLORBLIND_SAFE_PALETTE: readonly ["#0072B2", "#E69F00", "#009E73", "#F0E442", "#56B4E9", "#D55E00", "#CC79A7", "#000000"];
83
+ /** Convert hex to HSL string for CSS variables */
84
+ declare function hexToHSL(hex: string): string;
85
+ /** Get a colorblind-safe color by index (wraps around) */
86
+ declare function getChartColor(index: number): string;
87
+ /**
88
+ * Pattern fills for charts — when color alone isn't enough.
89
+ * Returns SVG pattern definitions that can be used as fill.
90
+ */
91
+ type PatternType = 'solid' | 'diagonal' | 'dots' | 'crosshatch' | 'horizontal' | 'vertical' | 'zigzag' | 'checker';
92
+ declare function getPatternDef(type: PatternType, color: string, id: string): string;
93
+ declare const PATTERNS: PatternType[];
94
+
95
+ export { type BandScale, COLORBLIND_SAFE_PALETTE, type ChartAPI, type ChartConfig, type Dimensions, type HistogramBin, type LinearScale, type Margin, PATTERNS, type PatternType, type Point, type TimeScale, arcPath, areaPath, combineDimensions, computeExtent, computeHistogramBins, computeMean, createBandScale, createChart, createLinearScale, createTimeScale, formatTick, generateTicks, getChartColor, getPatternDef, hexToHSL, linePath, normalizeData };
@@ -0,0 +1,41 @@
1
+ interface Trigger {
2
+ char: string;
3
+ pattern?: RegExp;
4
+ }
5
+ interface CommandNode {
6
+ type: 'command';
7
+ trigger: string;
8
+ text: string;
9
+ }
10
+ interface TextNode {
11
+ type: 'text';
12
+ text: string;
13
+ }
14
+ type InputNode = TextNode | CommandNode;
15
+ interface CommandInputState {
16
+ nodes: InputNode[];
17
+ rawText: string;
18
+ cursorPosition: number;
19
+ activeTrigger: Trigger | null;
20
+ activeCommandText: string | null;
21
+ }
22
+ interface CommandInputOptions {
23
+ triggers: Trigger[];
24
+ onCommandTriggered?: (trigger: Trigger, text: string) => void;
25
+ onStateChange?: (state: CommandInputState) => void;
26
+ onCommandCommit?: (trigger: Trigger, text: string) => void;
27
+ onCommandCancel?: () => void;
28
+ }
29
+ declare class CommandInput {
30
+ private state;
31
+ private options;
32
+ constructor(options: CommandInputOptions);
33
+ handleInput(text: string, cursorPosition: number): void;
34
+ handleKeyDown(key: string, event?: Event): void;
35
+ get value(): InputNode[];
36
+ getState(): CommandInputState;
37
+ private parseInput;
38
+ private notifyStateChange;
39
+ }
40
+
41
+ export { CommandInput, type CommandInputOptions, type CommandInputState, type CommandNode, type InputNode, type TextNode, type Trigger };
@@ -0,0 +1,41 @@
1
+ interface Trigger {
2
+ char: string;
3
+ pattern?: RegExp;
4
+ }
5
+ interface CommandNode {
6
+ type: 'command';
7
+ trigger: string;
8
+ text: string;
9
+ }
10
+ interface TextNode {
11
+ type: 'text';
12
+ text: string;
13
+ }
14
+ type InputNode = TextNode | CommandNode;
15
+ interface CommandInputState {
16
+ nodes: InputNode[];
17
+ rawText: string;
18
+ cursorPosition: number;
19
+ activeTrigger: Trigger | null;
20
+ activeCommandText: string | null;
21
+ }
22
+ interface CommandInputOptions {
23
+ triggers: Trigger[];
24
+ onCommandTriggered?: (trigger: Trigger, text: string) => void;
25
+ onStateChange?: (state: CommandInputState) => void;
26
+ onCommandCommit?: (trigger: Trigger, text: string) => void;
27
+ onCommandCancel?: () => void;
28
+ }
29
+ declare class CommandInput {
30
+ private state;
31
+ private options;
32
+ constructor(options: CommandInputOptions);
33
+ handleInput(text: string, cursorPosition: number): void;
34
+ handleKeyDown(key: string, event?: Event): void;
35
+ get value(): InputNode[];
36
+ getState(): CommandInputState;
37
+ private parseInput;
38
+ private notifyStateChange;
39
+ }
40
+
41
+ export { CommandInput, type CommandInputOptions, type CommandInputState, type CommandNode, type InputNode, type TextNode, type Trigger };
@@ -0,0 +1,118 @@
1
+ import { AccessibilityProps, TokenContract } from '../shared/index.cjs';
2
+
3
+ type DiffViewerTheme = 'light' | 'dark';
4
+ type DiffViewMode = 'side-by-side' | 'inline';
5
+ type DiffFileStatus = 'added' | 'modified' | 'deleted' | 'renamed';
6
+ interface DiffFile {
7
+ /** File path */
8
+ path: string;
9
+ /** Change status */
10
+ status: DiffFileStatus;
11
+ /** Lines added */
12
+ additions: number;
13
+ /** Lines deleted */
14
+ deletions: number;
15
+ /** Unified diff content for this file */
16
+ diff?: string;
17
+ /** Old path for renamed files */
18
+ oldPath?: string;
19
+ }
20
+ interface DiffViewerProps {
21
+ /** Files in this diff */
22
+ files?: DiffFile[];
23
+ /** Index of the active file */
24
+ activeFileIndex?: number;
25
+ /** View mode */
26
+ viewMode?: DiffViewMode;
27
+ /** Theme */
28
+ theme?: DiffViewerTheme;
29
+ /** Language for syntax highlighting */
30
+ language?: string;
31
+ /** Whether the sidebar is visible */
32
+ sidebarOpen?: boolean;
33
+ /** Callback when active file changes */
34
+ onFileSelect?: (index: number) => void;
35
+ /** Callback when view mode changes */
36
+ onViewModeChange?: (mode: DiffViewMode) => void;
37
+ /** Callback when sidebar toggled */
38
+ onSidebarToggle?: () => void;
39
+ }
40
+ interface DiffViewerState {
41
+ activeFileIndex: number;
42
+ viewMode: DiffViewMode;
43
+ theme: DiffViewerTheme;
44
+ language: string;
45
+ sidebarOpen: boolean;
46
+ files: DiffFile[];
47
+ }
48
+ interface DiffViewerAPI {
49
+ /** Current viewer state */
50
+ state: DiffViewerState;
51
+ /** ARIA attributes for the root element */
52
+ ariaProps: Partial<AccessibilityProps> & Record<string, unknown>;
53
+ /** Data attributes for CSS styling hooks */
54
+ dataAttributes: Record<string, string>;
55
+ /** Select a file by index */
56
+ selectFile: (index: number) => void;
57
+ /** Move to next file */
58
+ nextFile: () => void;
59
+ /** Move to previous file */
60
+ prevFile: () => void;
61
+ /** Toggle view mode */
62
+ toggleViewMode: () => void;
63
+ /** Toggle sidebar */
64
+ toggleSidebar: () => void;
65
+ /** Get language label for a file path */
66
+ getLanguageForFile: (path: string) => string;
67
+ /** Get human-readable file status icon */
68
+ getFileStatusIcon: (status: DiffFileStatus) => string;
69
+ /** Get total additions across all files */
70
+ totalAdditions: () => number;
71
+ /** Get total deletions across all files */
72
+ totalDeletions: () => number;
73
+ }
74
+ /**
75
+ * Create a headless diff viewer API.
76
+ *
77
+ * Manages file selection, view mode, sidebar state, and produces ARIA/data
78
+ * attributes. The actual rendering (Monaco DiffEditor, custom renderer, etc.)
79
+ * is handled by framework-specific wrappers.
80
+ */
81
+ declare function createDiffViewer(props?: DiffViewerProps): DiffViewerAPI;
82
+
83
+ declare const diffViewerTokens: TokenContract;
84
+ declare const diffViewerVariants: (props?: ({
85
+ theme?: "light" | "dark" | undefined;
86
+ fullscreen?: "true" | "false" | undefined;
87
+ } & {
88
+ className?: string;
89
+ }) | undefined) => string;
90
+ declare const sidebarVariants: (props?: ({
91
+ theme?: "light" | "dark" | undefined;
92
+ } & {
93
+ className?: string;
94
+ }) | undefined) => string;
95
+ declare const sidebarItemVariants: (props?: ({
96
+ active?: "true" | "false" | undefined;
97
+ theme?: "light" | "dark" | undefined;
98
+ } & {
99
+ className?: string;
100
+ }) | undefined) => string;
101
+ declare const tabBarVariants: (props?: ({
102
+ theme?: "light" | "dark" | undefined;
103
+ } & {
104
+ className?: string;
105
+ }) | undefined) => string;
106
+ declare const tabVariants: (props?: ({
107
+ active?: "true" | "false" | undefined;
108
+ theme?: "light" | "dark" | undefined;
109
+ } & {
110
+ className?: string;
111
+ }) | undefined) => string;
112
+ declare const statusBarVariants: (props?: ({
113
+ theme?: "light" | "dark" | undefined;
114
+ } & {
115
+ className?: string;
116
+ }) | undefined) => string;
117
+
118
+ export { type DiffFile, type DiffFileStatus, type DiffViewMode, type DiffViewerAPI, type DiffViewerProps, type DiffViewerState, type DiffViewerTheme, createDiffViewer, diffViewerTokens, diffViewerVariants, sidebarItemVariants, sidebarVariants, statusBarVariants, tabBarVariants, tabVariants };