uilint-react 0.2.47 → 0.2.49

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 (174) hide show
  1. package/dist/DevTool.d.ts +1 -2
  2. package/dist/DevTool.d.ts.map +1 -1
  3. package/dist/components/ui-lint/index.d.ts +3 -10
  4. package/dist/components/ui-lint/index.d.ts.map +1 -1
  5. package/dist/consistency/highlights.d.ts.map +1 -1
  6. package/dist/core/index.d.ts +13 -0
  7. package/dist/core/index.d.ts.map +1 -0
  8. package/dist/core/plugin-system/index.d.ts +7 -0
  9. package/dist/core/plugin-system/index.d.ts.map +1 -0
  10. package/dist/core/plugin-system/loader.d.ts +38 -0
  11. package/dist/core/plugin-system/loader.d.ts.map +1 -0
  12. package/dist/core/plugin-system/registry.d.ts +130 -0
  13. package/dist/core/plugin-system/registry.d.ts.map +1 -0
  14. package/dist/core/plugin-system/types.d.ts +353 -0
  15. package/dist/core/plugin-system/types.d.ts.map +1 -0
  16. package/dist/core/services/dom-observer.d.ts +171 -0
  17. package/dist/core/services/dom-observer.d.ts.map +1 -0
  18. package/dist/core/services/index.d.ts +6 -0
  19. package/dist/core/services/index.d.ts.map +1 -0
  20. package/dist/core/services/websocket.d.ts +112 -0
  21. package/dist/core/services/websocket.d.ts.map +1 -0
  22. package/dist/core/store/composed-store.d.ts +212 -0
  23. package/dist/core/store/composed-store.d.ts.map +1 -0
  24. package/dist/core/store/core-slice.d.ts +126 -0
  25. package/dist/core/store/core-slice.d.ts.map +1 -0
  26. package/dist/core/store/index.d.ts +6 -0
  27. package/dist/core/store/index.d.ts.map +1 -0
  28. package/dist/devtools.js +117 -136
  29. package/dist/devtools.js.map +1 -1
  30. package/dist/index.d.ts +4 -2
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +1675 -12464
  33. package/dist/index.js.map +1 -1
  34. package/dist/plugins/eslint/commands.d.ts +6 -0
  35. package/dist/plugins/eslint/commands.d.ts.map +1 -0
  36. package/dist/plugins/eslint/index.d.ts +10 -0
  37. package/dist/plugins/eslint/index.d.ts.map +1 -0
  38. package/dist/plugins/eslint/slice.d.ts +66 -0
  39. package/dist/plugins/eslint/slice.d.ts.map +1 -0
  40. package/dist/plugins/eslint/types.d.ts +128 -0
  41. package/dist/plugins/eslint/types.d.ts.map +1 -0
  42. package/dist/plugins/semantic/commands.d.ts +6 -0
  43. package/dist/plugins/semantic/commands.d.ts.map +1 -0
  44. package/dist/plugins/semantic/index.d.ts +15 -0
  45. package/dist/plugins/semantic/index.d.ts.map +1 -0
  46. package/dist/plugins/semantic/slice.d.ts +52 -0
  47. package/dist/plugins/semantic/slice.d.ts.map +1 -0
  48. package/dist/plugins/semantic/types.d.ts +121 -0
  49. package/dist/plugins/semantic/types.d.ts.map +1 -0
  50. package/dist/plugins/vision/commands.d.ts +6 -0
  51. package/dist/plugins/vision/commands.d.ts.map +1 -0
  52. package/dist/plugins/vision/index.d.ts +12 -0
  53. package/dist/plugins/vision/index.d.ts.map +1 -0
  54. package/dist/plugins/vision/slice.d.ts +104 -0
  55. package/dist/plugins/vision/slice.d.ts.map +1 -0
  56. package/dist/plugins/vision/types.d.ts +169 -0
  57. package/dist/plugins/vision/types.d.ts.map +1 -0
  58. package/dist/scanner/vision-capture.d.ts.map +1 -1
  59. package/dist/ui/UILint.d.ts +11 -0
  60. package/dist/ui/UILint.d.ts.map +1 -0
  61. package/dist/ui/components/CommandPalette/CommandPalette.d.ts +3 -0
  62. package/dist/ui/components/CommandPalette/CommandPalette.d.ts.map +1 -0
  63. package/dist/ui/components/CommandPalette/ResultItem.d.ts +9 -0
  64. package/dist/ui/components/CommandPalette/ResultItem.d.ts.map +1 -0
  65. package/dist/ui/components/CommandPalette/SearchInput.d.ts +8 -0
  66. package/dist/ui/components/CommandPalette/SearchInput.d.ts.map +1 -0
  67. package/dist/ui/components/CommandPalette/index.d.ts +2 -0
  68. package/dist/ui/components/CommandPalette/index.d.ts.map +1 -0
  69. package/dist/ui/components/FloatingIcon.d.ts +3 -0
  70. package/dist/ui/components/FloatingIcon.d.ts.map +1 -0
  71. package/dist/ui/components/HeatmapOverlay.d.ts.map +1 -0
  72. package/dist/ui/components/Inspector/ElementDetail.d.ts +8 -0
  73. package/dist/ui/components/Inspector/ElementDetail.d.ts.map +1 -0
  74. package/dist/ui/components/Inspector/InspectorSidebar.d.ts +3 -0
  75. package/dist/ui/components/Inspector/InspectorSidebar.d.ts.map +1 -0
  76. package/dist/ui/components/Inspector/IssueDetail.d.ts +7 -0
  77. package/dist/ui/components/Inspector/IssueDetail.d.ts.map +1 -0
  78. package/dist/ui/components/Inspector/index.d.ts +2 -0
  79. package/dist/ui/components/Inspector/index.d.ts.map +1 -0
  80. package/dist/ui/hooks/index.d.ts +4 -0
  81. package/dist/ui/hooks/index.d.ts.map +1 -0
  82. package/dist/ui/hooks/useElementRects.d.ts +12 -0
  83. package/dist/ui/hooks/useElementRects.d.ts.map +1 -0
  84. package/dist/ui/hooks/useIssues.d.ts +17 -0
  85. package/dist/ui/hooks/useIssues.d.ts.map +1 -0
  86. package/dist/ui/hooks/useKeyboardShortcuts.d.ts +8 -0
  87. package/dist/ui/hooks/useKeyboardShortcuts.d.ts.map +1 -0
  88. package/dist/ui/icons.d.ts +20 -0
  89. package/dist/ui/icons.d.ts.map +1 -0
  90. package/dist/ui/index.d.ts +16 -0
  91. package/dist/ui/index.d.ts.map +1 -0
  92. package/dist/ui/types.d.ts +69 -0
  93. package/dist/ui/types.d.ts.map +1 -0
  94. package/package.json +3 -3
  95. package/dist/components/ui-lint/FloatingIcon.d.ts +0 -3
  96. package/dist/components/ui-lint/FloatingIcon.d.ts.map +0 -1
  97. package/dist/components/ui-lint/HeatmapOverlay.d.ts.map +0 -1
  98. package/dist/components/ui-lint/IndexingIndicator.d.ts +0 -3
  99. package/dist/components/ui-lint/IndexingIndicator.d.ts.map +0 -1
  100. package/dist/components/ui-lint/RegionSelector.d.ts +0 -18
  101. package/dist/components/ui-lint/RegionSelector.d.ts.map +0 -1
  102. package/dist/components/ui-lint/ScreenshotViewer.d.ts +0 -11
  103. package/dist/components/ui-lint/ScreenshotViewer.d.ts.map +0 -1
  104. package/dist/components/ui-lint/UILintUI.d.ts +0 -5
  105. package/dist/components/ui-lint/UILintUI.d.ts.map +0 -1
  106. package/dist/components/ui-lint/VisionIssuesPanel.d.ts +0 -12
  107. package/dist/components/ui-lint/VisionIssuesPanel.d.ts.map +0 -1
  108. package/dist/components/ui-lint/command-palette/CategorySidebar.d.ts +0 -29
  109. package/dist/components/ui-lint/command-palette/CategorySidebar.d.ts.map +0 -1
  110. package/dist/components/ui-lint/command-palette/CommandPalette.d.ts +0 -7
  111. package/dist/components/ui-lint/command-palette/CommandPalette.d.ts.map +0 -1
  112. package/dist/components/ui-lint/command-palette/CommandPaletteInput.d.ts +0 -18
  113. package/dist/components/ui-lint/command-palette/CommandPaletteInput.d.ts.map +0 -1
  114. package/dist/components/ui-lint/command-palette/CommandPaletteItem.d.ts +0 -26
  115. package/dist/components/ui-lint/command-palette/CommandPaletteItem.d.ts.map +0 -1
  116. package/dist/components/ui-lint/command-palette/CommandPaletteResults.d.ts +0 -46
  117. package/dist/components/ui-lint/command-palette/CommandPaletteResults.d.ts.map +0 -1
  118. package/dist/components/ui-lint/command-palette/FilterChips.d.ts +0 -11
  119. package/dist/components/ui-lint/command-palette/FilterChips.d.ts.map +0 -1
  120. package/dist/components/ui-lint/command-palette/RuleDetailItem.d.ts +0 -15
  121. package/dist/components/ui-lint/command-palette/RuleDetailItem.d.ts.map +0 -1
  122. package/dist/components/ui-lint/command-palette/RuleEditor.d.ts +0 -22
  123. package/dist/components/ui-lint/command-palette/RuleEditor.d.ts.map +0 -1
  124. package/dist/components/ui-lint/command-palette/RuleToggleItem.d.ts +0 -20
  125. package/dist/components/ui-lint/command-palette/RuleToggleItem.d.ts.map +0 -1
  126. package/dist/components/ui-lint/command-palette/SourceCodePreview.d.ts +0 -17
  127. package/dist/components/ui-lint/command-palette/SourceCodePreview.d.ts.map +0 -1
  128. package/dist/components/ui-lint/command-palette/icons.d.ts +0 -39
  129. package/dist/components/ui-lint/command-palette/icons.d.ts.map +0 -1
  130. package/dist/components/ui-lint/command-palette/index.d.ts +0 -13
  131. package/dist/components/ui-lint/command-palette/index.d.ts.map +0 -1
  132. package/dist/components/ui-lint/command-palette/types.d.ts +0 -160
  133. package/dist/components/ui-lint/command-palette/types.d.ts.map +0 -1
  134. package/dist/components/ui-lint/command-palette/use-fuzzy-search.d.ts +0 -19
  135. package/dist/components/ui-lint/command-palette/use-fuzzy-search.d.ts.map +0 -1
  136. package/dist/components/ui-lint/command-palette/use-keyboard-navigation.d.ts +0 -10
  137. package/dist/components/ui-lint/command-palette/use-keyboard-navigation.d.ts.map +0 -1
  138. package/dist/components/ui-lint/hooks/index.d.ts +0 -4
  139. package/dist/components/ui-lint/hooks/index.d.ts.map +0 -1
  140. package/dist/components/ui-lint/hooks/useAutoScans.d.ts +0 -5
  141. package/dist/components/ui-lint/hooks/useAutoScans.d.ts.map +0 -1
  142. package/dist/components/ui-lint/hooks/useDevToolEventHandlers.d.ts +0 -5
  143. package/dist/components/ui-lint/hooks/useDevToolEventHandlers.d.ts.map +0 -1
  144. package/dist/components/ui-lint/hooks/useNavigationDetection.d.ts +0 -6
  145. package/dist/components/ui-lint/hooks/useNavigationDetection.d.ts.map +0 -1
  146. package/dist/components/ui-lint/inspector/ElementInspector.d.ts +0 -9
  147. package/dist/components/ui-lint/inspector/ElementInspector.d.ts.map +0 -1
  148. package/dist/components/ui-lint/inspector/FixesInspector.d.ts +0 -6
  149. package/dist/components/ui-lint/inspector/FixesInspector.d.ts.map +0 -1
  150. package/dist/components/ui-lint/inspector/FullFileViewer.d.ts +0 -17
  151. package/dist/components/ui-lint/inspector/FullFileViewer.d.ts.map +0 -1
  152. package/dist/components/ui-lint/inspector/InspectorSidebar.d.ts +0 -12
  153. package/dist/components/ui-lint/inspector/InspectorSidebar.d.ts.map +0 -1
  154. package/dist/components/ui-lint/inspector/IssueInspector.d.ts +0 -12
  155. package/dist/components/ui-lint/inspector/IssueInspector.d.ts.map +0 -1
  156. package/dist/components/ui-lint/inspector/MarkdownRenderer.d.ts +0 -11
  157. package/dist/components/ui-lint/inspector/MarkdownRenderer.d.ts.map +0 -1
  158. package/dist/components/ui-lint/inspector/ResizeHandle.d.ts +0 -19
  159. package/dist/components/ui-lint/inspector/ResizeHandle.d.ts.map +0 -1
  160. package/dist/components/ui-lint/inspector/RuleInspector.d.ts +0 -10
  161. package/dist/components/ui-lint/inspector/RuleInspector.d.ts.map +0 -1
  162. package/dist/components/ui-lint/inspector/index.d.ts +0 -8
  163. package/dist/components/ui-lint/inspector/index.d.ts.map +0 -1
  164. package/dist/components/ui-lint/portal-host.d.ts +0 -3
  165. package/dist/components/ui-lint/portal-host.d.ts.map +0 -1
  166. package/dist/components/ui-lint/store.d.ts +0 -431
  167. package/dist/components/ui-lint/store.d.ts.map +0 -1
  168. package/dist/components/ui-lint/useDOMObserver.d.ts +0 -11
  169. package/dist/components/ui-lint/useDOMObserver.d.ts.map +0 -1
  170. package/dist/index-L3Zm-CoX.js +0 -513
  171. package/dist/index-L3Zm-CoX.js.map +0 -1
  172. package/dist/vision-capture-8mhdjw77.js +0 -235
  173. package/dist/vision-capture-8mhdjw77.js.map +0 -1
  174. /package/dist/{components/ui-lint → ui/components}/HeatmapOverlay.d.ts +0 -0
@@ -0,0 +1,171 @@
1
+ /**
2
+ * DOM Observer Service
3
+ *
4
+ * A shared service that watches for elements with data-loc attributes.
5
+ * Used to track DOM elements for source visualization and scanning.
6
+ *
7
+ * Features:
8
+ * - MutationObserver-based tracking of data-loc elements
9
+ * - Debounced reconciliation for handling streaming/suspense
10
+ * - Subscribe/unsubscribe pattern for add/remove notifications
11
+ * - Filtering for node_modules and UILint's own UI
12
+ * - Dependency injection for testability
13
+ */
14
+ /** The attribute used to identify source-mapped elements */
15
+ export declare const DATA_LOC_ATTR = "data-loc";
16
+ /** Debounce delay for reconciliation to handle rapid DOM changes */
17
+ export declare const RECONCILE_DEBOUNCE_MS = 100;
18
+ /**
19
+ * Generate a unique element ID from data-loc and occurrence number
20
+ * @param dataLoc - The parsed data-loc value (path:line:column)
21
+ * @param occurrence - The occurrence number (1-based) for elements with same dataLoc
22
+ * @returns Unique ID in format "loc:path:line:column#occurrence"
23
+ */
24
+ export declare function generateElementId(dataLoc: string, occurrence: number): string;
25
+ /**
26
+ * Parse a raw data-loc attribute value, normalizing runtime ID format if present
27
+ * @param rawDataLoc - The raw data-loc attribute value
28
+ * @returns The normalized data-loc value (path:line:column) or null if invalid
29
+ */
30
+ export declare function parseDataLoc(rawDataLoc: string): string | null;
31
+ /**
32
+ * Check if a path should be filtered based on node_modules presence
33
+ * @param path - The file path to check
34
+ * @param hideNodeModules - Whether to filter node_modules paths
35
+ * @returns True if the path should be filtered out
36
+ */
37
+ export declare function shouldFilterPath(path: string, hideNodeModules: boolean): boolean;
38
+ /**
39
+ * Options for creating a DOMObserverService instance
40
+ * Enables dependency injection for testing
41
+ */
42
+ export interface DOMObserverOptions {
43
+ /** Root element to observe (defaults to document.body) */
44
+ root?: Element;
45
+ /** MutationObserver implementation (defaults to window.MutationObserver) */
46
+ MutationObserverImpl?: typeof MutationObserver;
47
+ /** Custom querySelectorAll function (defaults to document.querySelectorAll) */
48
+ querySelectorAll?: (selector: string) => NodeListOf<Element>;
49
+ }
50
+ /**
51
+ * Information about a scanned DOM element with data-loc attribute
52
+ */
53
+ export interface ScannedElementInfo {
54
+ /**
55
+ * Unique per-instance ID derived from data-loc.
56
+ * Format: "loc:path:line:column#occurrence"
57
+ */
58
+ id: string;
59
+ /** The raw data-loc attribute value (path:line:column) */
60
+ dataLoc: string;
61
+ /** Reference to the DOM element */
62
+ element: Element;
63
+ /** Lowercase tag name of the element */
64
+ tagName: string;
65
+ /** Current bounding client rect */
66
+ rect: DOMRect;
67
+ }
68
+ /** Handler called when new elements with data-loc are detected */
69
+ export type ElementAddedHandler = (elements: ScannedElementInfo[]) => void;
70
+ /** Handler called when elements with data-loc are removed */
71
+ export type ElementRemovedHandler = (elementIds: string[]) => void;
72
+ /**
73
+ * Interface for the DOM Observer Service
74
+ */
75
+ export interface DOMObserverService {
76
+ /** Configure whether to filter out node_modules paths */
77
+ setHideNodeModules(hide: boolean): void;
78
+ /** Start observing the DOM */
79
+ start(): void;
80
+ /** Stop observing and clear state */
81
+ stop(): void;
82
+ /** Subscribe to element addition events, returns unsubscribe function */
83
+ onElementsAdded(handler: ElementAddedHandler): () => void;
84
+ /** Subscribe to element removal events, returns unsubscribe function */
85
+ onElementsRemoved(handler: ElementRemovedHandler): () => void;
86
+ /** Get all currently tracked elements */
87
+ getElements(): ScannedElementInfo[];
88
+ }
89
+ /**
90
+ * DOM Observer Service Implementation
91
+ *
92
+ * Service that tracks data-loc elements in the DOM.
93
+ * Supports dependency injection for testability.
94
+ */
95
+ export declare class DOMObserverServiceImpl implements DOMObserverService {
96
+ private observer;
97
+ private reconcileTimeout;
98
+ private knownElements;
99
+ private addedHandlers;
100
+ private removedHandlers;
101
+ private isRunning;
102
+ private hideNodeModules;
103
+ private readonly options;
104
+ /**
105
+ * Create a new DOMObserverService instance
106
+ * @param options - Optional configuration for dependency injection
107
+ */
108
+ constructor(options?: DOMObserverOptions);
109
+ /**
110
+ * Configure whether to filter out elements from node_modules
111
+ */
112
+ setHideNodeModules(hide: boolean): void;
113
+ /**
114
+ * Start observing the DOM for data-loc elements
115
+ */
116
+ start(): void;
117
+ /**
118
+ * Stop observing and clear all state
119
+ */
120
+ stop(): void;
121
+ /**
122
+ * Subscribe to element addition events
123
+ * @returns Unsubscribe function
124
+ */
125
+ onElementsAdded(handler: ElementAddedHandler): () => void;
126
+ /**
127
+ * Subscribe to element removal events
128
+ * @returns Unsubscribe function
129
+ */
130
+ onElementsRemoved(handler: ElementRemovedHandler): () => void;
131
+ /**
132
+ * Get all currently tracked elements
133
+ */
134
+ getElements(): ScannedElementInfo[];
135
+ /**
136
+ * Handle MutationObserver callbacks
137
+ */
138
+ private handleMutations;
139
+ /**
140
+ * Check if a node or its descendants have data-loc attributes
141
+ */
142
+ private hasDataLocElements;
143
+ /**
144
+ * Debounced reconciliation to handle rapid DOM updates
145
+ */
146
+ private debouncedReconcile;
147
+ /**
148
+ * Full reconciliation: scan DOM, diff with known elements, emit events
149
+ */
150
+ private reconcile;
151
+ /**
152
+ * Scan the DOM for all elements with data-loc attributes
153
+ */
154
+ private scanElements;
155
+ /**
156
+ * Check if an element is inside UILint's own UI
157
+ */
158
+ private isInsideUILintUI;
159
+ }
160
+ /**
161
+ * Create a new DOMObserverService instance with optional dependency injection
162
+ * @param options - Optional configuration for dependency injection (useful for testing)
163
+ * @returns A new DOMObserverService instance
164
+ */
165
+ export declare function createDOMObserverService(options?: DOMObserverOptions): DOMObserverService;
166
+ /**
167
+ * Shared DOM observer service instance
168
+ * @deprecated Use createDOMObserverService() for new code that needs testability
169
+ */
170
+ export declare const domObserver: DOMObserverService;
171
+ //# sourceMappingURL=dom-observer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dom-observer.d.ts","sourceRoot":"","sources":["../../../src/core/services/dom-observer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Core Services - Shared services for all plugins
3
+ */
4
+ export { websocket, WebSocketServiceImpl, createWebSocketService, DEFAULT_WS_URL, MAX_RECONNECT_ATTEMPTS, RECONNECT_BASE_DELAY, type WebSocketService, type WebSocketServiceOptions, type MessageHandler, type ConnectionHandler, } from './websocket';
5
+ export { domObserver, createDOMObserverService, DOMObserverServiceImpl, generateElementId, parseDataLoc, shouldFilterPath, DATA_LOC_ATTR, RECONCILE_DEBOUNCE_MS, type DOMObserverOptions, type DOMObserverService, type ScannedElementInfo, type ElementAddedHandler, type ElementRemovedHandler, } from './dom-observer';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/services/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EACL,SAAS,EACT,oBAAoB,EACpB,sBAAsB,EACtB,cAAc,EACd,sBAAsB,EACtB,oBAAoB,EACpB,KAAK,gBAAgB,EACrB,KAAK,uBAAuB,EAC5B,KAAK,cAAc,EACnB,KAAK,iBAAiB,GACvB,MAAM,aAAa,CAAC;AAGrB,OAAO,EAEL,WAAW,EAEX,wBAAwB,EAExB,sBAAsB,EAEtB,iBAAiB,EACjB,YAAY,EACZ,gBAAgB,EAEhB,aAAa,EACb,qBAAqB,EAErB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,GAC3B,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,112 @@
1
+ /**
2
+ * WebSocket Service - Singleton shared by all plugins
3
+ *
4
+ * Provides connection management, message routing, and automatic reconnection
5
+ * with exponential backoff.
6
+ */
7
+ export declare const DEFAULT_WS_URL = "ws://localhost:9234";
8
+ export declare const MAX_RECONNECT_ATTEMPTS = 5;
9
+ export declare const RECONNECT_BASE_DELAY = 1000;
10
+ export type MessageHandler<T = unknown> = (data: T) => void;
11
+ export type ConnectionHandler = (connected: boolean) => void;
12
+ /**
13
+ * Options for dependency injection in WebSocketService
14
+ * Allows injecting mock implementations for testing
15
+ */
16
+ export interface WebSocketServiceOptions {
17
+ /** Factory function to create WebSocket instances */
18
+ createWebSocket?: (url: string) => WebSocket;
19
+ /** Custom setTimeout implementation */
20
+ setTimeout?: typeof globalThis.setTimeout;
21
+ /** Custom clearTimeout implementation */
22
+ clearTimeout?: typeof globalThis.clearTimeout;
23
+ }
24
+ /**
25
+ * WebSocket service interface
26
+ */
27
+ export interface WebSocketService {
28
+ readonly isConnected: boolean;
29
+ readonly url: string;
30
+ connect(url?: string): void;
31
+ disconnect(): void;
32
+ send(message: unknown): void;
33
+ on<T>(type: string, handler: MessageHandler<T>): () => void;
34
+ onConnectionChange(handler: ConnectionHandler): () => void;
35
+ }
36
+ /**
37
+ * WebSocket service implementation
38
+ */
39
+ export declare class WebSocketServiceImpl implements WebSocketService {
40
+ private options;
41
+ private ws;
42
+ private handlers;
43
+ private connectionHandlers;
44
+ private reconnectAttempts;
45
+ private reconnectTimeout;
46
+ private intentionalDisconnect;
47
+ private readonly createWebSocket;
48
+ private readonly _setTimeout;
49
+ private readonly _clearTimeout;
50
+ isConnected: boolean;
51
+ url: string;
52
+ /**
53
+ * Create a new WebSocket service instance
54
+ * @param options - Optional dependency injection options for testing
55
+ */
56
+ constructor(options?: WebSocketServiceOptions);
57
+ /**
58
+ * Connect to the WebSocket server
59
+ * @param url - Optional URL to connect to (defaults to DEFAULT_WS_URL)
60
+ */
61
+ connect(url?: string): void;
62
+ /**
63
+ * Disconnect from the WebSocket server
64
+ * Prevents automatic reconnection
65
+ */
66
+ disconnect(): void;
67
+ /**
68
+ * Send a message to the WebSocket server
69
+ * @param message - The message to send (will be JSON stringified)
70
+ */
71
+ send(message: unknown): void;
72
+ /**
73
+ * Subscribe to messages of a specific type
74
+ * @param type - Message type to subscribe to, or "*" for all messages
75
+ * @param handler - Handler function to call when message is received
76
+ * @returns Unsubscribe function
77
+ */
78
+ on<T>(type: string, handler: MessageHandler<T>): () => void;
79
+ /**
80
+ * Subscribe to connection status changes
81
+ * @param handler - Handler function to call when connection status changes
82
+ * @returns Unsubscribe function
83
+ */
84
+ onConnectionChange(handler: ConnectionHandler): () => void;
85
+ /**
86
+ * Set up WebSocket event handlers
87
+ */
88
+ private setupEventHandlers;
89
+ /**
90
+ * Dispatch a message to registered handlers
91
+ * @param type - Message type
92
+ * @param data - Message data
93
+ */
94
+ private dispatch;
95
+ /**
96
+ * Notify all connection handlers of a status change
97
+ * @param connected - Current connection status
98
+ */
99
+ private notifyConnectionChange;
100
+ /**
101
+ * Schedule a reconnection attempt with exponential backoff
102
+ */
103
+ private scheduleReconnect;
104
+ }
105
+ /**
106
+ * Factory function to create a WebSocket service instance
107
+ * @param options - Optional dependency injection options for testing
108
+ * @returns A new WebSocket service instance
109
+ */
110
+ export declare function createWebSocketService(options?: WebSocketServiceOptions): WebSocketService;
111
+ export declare const websocket: WebSocketServiceImpl;
112
+ //# sourceMappingURL=websocket.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocket.d.ts","sourceRoot":"","sources":["../../../src/core/services/websocket.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,eAAO,MAAM,cAAc,wBAAwB,CAAC;AACpD,eAAO,MAAM,sBAAsB,IAAI,CAAC;AACxC,eAAO,MAAM,oBAAoB,OAAO,CAAC;AAGzC,MAAM,MAAM,cAAc,CAAC,CAAC,GAAG,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC;AAC5D,MAAM,MAAM,iBAAiB,GAAG,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;AAE7D;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACtC,qDAAqD;IACrD,eAAe,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,SAAS,CAAC;IAC7C,uCAAuC;IACvC,UAAU,CAAC,EAAE,OAAO,UAAU,CAAC,UAAU,CAAC;IAC1C,yCAAyC;IACzC,YAAY,CAAC,EAAE,OAAO,UAAU,CAAC,YAAY,CAAC;CAC/C;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,IAAI,IAAI,CAAC;IACnB,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IAC7B,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,CAAC;IAC5D,kBAAkB,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,IAAI,CAAC;CAC5D;AAED;;GAEG;AACH,qBAAa,oBAAqB,YAAW,gBAAgB;IAoB/C,OAAO,CAAC,OAAO;IAnB3B,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,QAAQ,CAA+C;IAC/D,OAAO,CAAC,kBAAkB,CAAqC;IAC/D,OAAO,CAAC,iBAAiB,CAAa;IACtC,OAAO,CAAC,gBAAgB,CAA8C;IACtE,OAAO,CAAC,qBAAqB,CAAkB;IAG/C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA6B;IAC7D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA+B;IAC3D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAiC;IAExD,WAAW,EAAE,OAAO,CAAS;IAC7B,GAAG,EAAE,MAAM,CAAkB;IAEpC;;;OAGG;gBACiB,OAAO,GAAE,uBAA4B;IAOzD;;;OAGG;IACH,OAAO,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI;IA8B3B;;;OAGG;IACH,UAAU,IAAI,IAAI;IAkBlB;;;OAGG;IACH,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAa5B;;;;;OAKG;IACH,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI;IAiB3D;;;;OAIG;IACH,kBAAkB,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,IAAI;IAY1D;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAuC1B;;;;OAIG;IACH,OAAO,CAAC,QAAQ;IA4BhB;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IAU9B;;OAEG;IACH,OAAO,CAAC,iBAAiB;CA8B1B;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,CAAC,EAAE,uBAAuB,GAChC,gBAAgB,CAElB;AAGD,eAAO,MAAM,SAAS,sBAA6B,CAAC"}
@@ -0,0 +1,212 @@
1
+ import { StoreApi, UseBoundStore } from 'zustand';
2
+ import { CoreSlice } from './core-slice';
3
+ import { PluginRegistry } from '../plugin-system/registry';
4
+ import { PluginServices, WebSocketService, DOMObserverService } from '../plugin-system/types';
5
+ import { ESLintPluginSlice } from '../../plugins/eslint/slice';
6
+ import { VisionSlice } from '../../plugins/vision/slice';
7
+ import { SemanticPluginSlice } from '../../plugins/semantic/slice';
8
+ /**
9
+ * Options for creating a composed store instance.
10
+ * Allows dependency injection for testing and customization.
11
+ */
12
+ export interface ComposedStoreOptions {
13
+ /** Custom WebSocket service implementation */
14
+ websocket?: WebSocketService;
15
+ /** Custom DOM observer service implementation */
16
+ domObserver?: DOMObserverService;
17
+ /** Custom plugin registry instance */
18
+ registry?: PluginRegistry;
19
+ }
20
+ /**
21
+ * Map of plugin IDs to their slice types.
22
+ * Extend this interface when adding new plugins.
23
+ */
24
+ export interface PluginSliceMap {
25
+ eslint: ESLintPluginSlice;
26
+ vision: VisionSlice;
27
+ semantic: SemanticPluginSlice;
28
+ }
29
+ /**
30
+ * Type for all possible plugin slices (union of all plugin slice types).
31
+ */
32
+ export type AnyPluginSlice = PluginSliceMap[keyof PluginSliceMap];
33
+ /**
34
+ * Namespace-prefixed plugin slices.
35
+ * Each plugin's state is accessible via `plugins.{pluginId}`.
36
+ */
37
+ export interface PluginSlices {
38
+ plugins: {
39
+ [K in keyof PluginSliceMap]?: PluginSliceMap[K];
40
+ };
41
+ }
42
+ /**
43
+ * The composed store state combines:
44
+ * 1. CoreSlice - Core UI state (floating icon, command palette, inspector, etc.)
45
+ * 2. PluginSlices - Namespaced plugin state accessible via `plugins.{pluginId}`
46
+ */
47
+ export type ComposedState = CoreSlice & PluginSlices;
48
+ /**
49
+ * Actions for managing the composed store
50
+ */
51
+ export interface ComposedStoreActions {
52
+ /**
53
+ * Register a plugin's slice into the store.
54
+ * Called when a plugin is initialized with its createSlice method.
55
+ *
56
+ * @param pluginId - The unique plugin identifier
57
+ * @param slice - The plugin's state slice
58
+ */
59
+ registerPluginSlice: <K extends keyof PluginSliceMap>(pluginId: K, slice: PluginSliceMap[K]) => void;
60
+ /**
61
+ * Unregister a plugin's slice from the store.
62
+ * Called when a plugin is disposed.
63
+ *
64
+ * @param pluginId - The unique plugin identifier
65
+ */
66
+ unregisterPluginSlice: (pluginId: keyof PluginSliceMap) => void;
67
+ /**
68
+ * Get a specific plugin's slice.
69
+ * Returns undefined if the plugin is not registered.
70
+ *
71
+ * @param pluginId - The unique plugin identifier
72
+ * @returns The plugin's slice or undefined
73
+ */
74
+ getPluginSlice: <K extends keyof PluginSliceMap>(pluginId: K) => PluginSliceMap[K] | undefined;
75
+ /**
76
+ * Update a specific plugin's slice.
77
+ * Merges the partial update with the existing slice.
78
+ *
79
+ * @param pluginId - The unique plugin identifier
80
+ * @param partial - Partial update to merge into the slice
81
+ */
82
+ setPluginSlice: <K extends keyof PluginSliceMap>(pluginId: K, partial: Partial<PluginSliceMap[K]>) => void;
83
+ }
84
+ /**
85
+ * Full composed store type including state and actions
86
+ */
87
+ export type ComposedStore = ComposedState & ComposedStoreActions;
88
+ /**
89
+ * Factory function for creating isolated store instances.
90
+ * Use this in tests to get fresh stores with injected dependencies.
91
+ *
92
+ * Unlike createComposedStore(), this does NOT use a singleton pattern.
93
+ * Each call creates a completely new, isolated store instance.
94
+ *
95
+ * @param options - Dependencies and configuration for the store
96
+ * @returns A new store instance (not a singleton)
97
+ *
98
+ * @example
99
+ * ```typescript
100
+ * // In tests
101
+ * const mockWebSocket = createMockWebSocketService();
102
+ * const mockDomObserver = createMockDOMObserverService();
103
+ * const testRegistry = createPluginRegistry();
104
+ *
105
+ * const store = createComposedStoreFactory({
106
+ * websocket: mockWebSocket,
107
+ * domObserver: mockDomObserver,
108
+ * registry: testRegistry,
109
+ * });
110
+ *
111
+ * // Each test gets its own isolated store
112
+ * expect(store.getState().commandPalette.open).toBe(false);
113
+ * ```
114
+ */
115
+ export declare function createComposedStoreFactory(options?: ComposedStoreOptions): UseBoundStore<StoreApi<ComposedStore>>;
116
+ /**
117
+ * Create the composed store with core slice and plugin support.
118
+ * Uses a singleton pattern - returns the same instance if already created.
119
+ *
120
+ * For testing, use createComposedStoreFactory() instead which creates
121
+ * isolated instances.
122
+ *
123
+ * @param options - Optional configuration for the store
124
+ * @returns The singleton store instance
125
+ */
126
+ export declare function createComposedStore(options?: ComposedStoreOptions): UseBoundStore<StoreApi<ComposedStore>>;
127
+ /**
128
+ * Hook to access the composed store.
129
+ * This is the primary way components should access the store.
130
+ *
131
+ * If the store hasn't been created yet, it will be created with default options.
132
+ *
133
+ * @example
134
+ * ```tsx
135
+ * function MyComponent() {
136
+ * // Access core state
137
+ * const isOpen = useComposedStore((state) => state.commandPalette.open);
138
+ *
139
+ * // Access plugin state
140
+ * const eslintSlice = useComposedStore((state) => state.plugins.eslint);
141
+ *
142
+ * return <div>...</div>;
143
+ * }
144
+ * ```
145
+ */
146
+ export declare function useComposedStore(): ComposedStore;
147
+ export declare function useComposedStore<T>(selector: (state: ComposedStore) => T): T;
148
+ /**
149
+ * Initialize all registered plugins and merge their slices into the store.
150
+ * This should be called after the store is created and before rendering.
151
+ *
152
+ * @param options - Optional configuration for services and registry
153
+ * @returns Promise that resolves when all plugins are initialized
154
+ */
155
+ export declare function initializePlugins(options?: ComposedStoreOptions): Promise<void>;
156
+ /**
157
+ * Get the raw store API for advanced use cases.
158
+ * Prefer using useComposedStore hook in React components.
159
+ *
160
+ * @returns The store API or null if not created
161
+ */
162
+ export declare function getStoreApi(): StoreApi<ComposedStore> | null;
163
+ /**
164
+ * Get the plugin services instance.
165
+ * Useful for plugins that need to access services outside of React.
166
+ *
167
+ * @returns The plugin services or null if not created
168
+ */
169
+ export declare function getPluginServices(): PluginServices | null;
170
+ /**
171
+ * Reset the store instance.
172
+ * Primarily useful for testing.
173
+ *
174
+ * @param options - Optional configuration to immediately create a new store with
175
+ * @returns The new store instance if options were provided, undefined otherwise
176
+ *
177
+ * @example
178
+ * ```typescript
179
+ * // Simple reset
180
+ * resetStore();
181
+ *
182
+ * // Reset and immediately create new store with mocks
183
+ * const store = resetStore({
184
+ * websocket: mockWebSocket,
185
+ * domObserver: mockDomObserver,
186
+ * });
187
+ * ```
188
+ */
189
+ export declare function resetStore(options?: ComposedStoreOptions): UseBoundStore<StoreApi<ComposedStore>> | void;
190
+ /**
191
+ * Check if a plugin slice is registered in the store.
192
+ *
193
+ * @param pluginId - The plugin ID to check
194
+ * @returns true if the plugin slice is registered
195
+ */
196
+ export declare function hasPluginSlice(pluginId: string): boolean;
197
+ /**
198
+ * Get typed plugin slice with proper type inference.
199
+ *
200
+ * @param pluginId - The plugin ID
201
+ * @returns The plugin slice or undefined
202
+ */
203
+ export declare function getPluginSlice<K extends keyof PluginSliceMap>(pluginId: K): PluginSliceMap[K] | undefined;
204
+ /**
205
+ * Create typed plugin services for a specific plugin.
206
+ * This provides getState/setState scoped to the plugin's slice.
207
+ *
208
+ * @param pluginId - The plugin ID
209
+ * @returns Scoped plugin services
210
+ */
211
+ export declare function createScopedPluginServices<K extends keyof PluginSliceMap>(pluginId: K): PluginServices | null;
212
+ //# sourceMappingURL=composed-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"composed-store.d.ts","sourceRoot":"","sources":["../../../src/core/store/composed-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,126 @@
1
+ import { StateCreator } from 'zustand';
2
+ import { PluginServices } from '../plugin-system/types';
3
+ /**
4
+ * Position of the floating icon in pixel coordinates.
5
+ */
6
+ export interface FloatingIconPosition {
7
+ x: number;
8
+ y: number;
9
+ }
10
+ /**
11
+ * Filter chip for the command palette search.
12
+ * Allows filtering by rule, issue, loc (source location), file, capture, or plugin.
13
+ */
14
+ export interface CommandPaletteFilter {
15
+ type: "rule" | "issue" | "loc" | "file" | "capture" | "plugin";
16
+ value: string;
17
+ label: string;
18
+ }
19
+ /**
20
+ * Command palette state.
21
+ */
22
+ export interface CommandPaletteState {
23
+ /** Whether the command palette is open */
24
+ open: boolean;
25
+ /** Current search query */
26
+ query: string;
27
+ /** Currently selected index for keyboard navigation */
28
+ selectedIndex: number;
29
+ /** Active filters (shown as chips) */
30
+ filters: CommandPaletteFilter[];
31
+ }
32
+ /**
33
+ * Inspector sidebar state.
34
+ */
35
+ export interface InspectorState {
36
+ /** Whether the inspector is open */
37
+ open: boolean;
38
+ /** Which plugin panel is currently shown (null if none) */
39
+ panelId: string | null;
40
+ /** Data passed to the panel */
41
+ data: Record<string, unknown> | null;
42
+ /** Whether inspector is docked (participates in layout) or floating */
43
+ docked: boolean;
44
+ /** Width when docked (resizable) */
45
+ width: number;
46
+ /** Position when floating */
47
+ floatingPosition: {
48
+ x: number;
49
+ y: number;
50
+ } | null;
51
+ /** Size when floating */
52
+ floatingSize: {
53
+ width: number;
54
+ height: number;
55
+ } | null;
56
+ }
57
+ /**
58
+ * Core UI state slice interface.
59
+ * Contains state and actions for core UI functionality.
60
+ */
61
+ export interface CoreSlice {
62
+ /** Floating icon position (null = default top-center) */
63
+ floatingIconPosition: FloatingIconPosition | null;
64
+ /** Set floating icon position and persist to localStorage */
65
+ setFloatingIconPosition: (position: FloatingIconPosition) => void;
66
+ /** Whether the Alt key is currently held */
67
+ altKeyHeld: boolean;
68
+ /** Set Alt key held state */
69
+ setAltKeyHeld: (held: boolean) => void;
70
+ /** Currently selected element ID */
71
+ selectedElementId: string | null;
72
+ /** Currently hovered element ID (for overlay highlighting) */
73
+ hoveredElementId: string | null;
74
+ /** Set selected element ID */
75
+ setSelectedElementId: (id: string | null) => void;
76
+ /** Set hovered element ID */
77
+ setHoveredElementId: (id: string | null) => void;
78
+ /** Command palette state */
79
+ commandPalette: CommandPaletteState;
80
+ /** Open the command palette */
81
+ openCommandPalette: () => void;
82
+ /** Close the command palette */
83
+ closeCommandPalette: () => void;
84
+ /** Set the command palette search query */
85
+ setCommandPaletteQuery: (query: string) => void;
86
+ /** Set the selected index for keyboard navigation */
87
+ setCommandPaletteSelectedIndex: (index: number) => void;
88
+ /** Add a filter to the command palette */
89
+ addFilter: (filter: CommandPaletteFilter) => void;
90
+ /** Remove a filter at the specified index */
91
+ removeFilter: (index: number) => void;
92
+ /** Clear all command palette filters */
93
+ clearFilters: () => void;
94
+ /** Inspector sidebar state */
95
+ inspector: InspectorState;
96
+ /** Open the inspector with a specific panel */
97
+ openInspector: (panelId: string, data?: Record<string, unknown>) => void;
98
+ /** Close the inspector */
99
+ closeInspector: () => void;
100
+ /** Toggle between docked and floating mode */
101
+ toggleInspectorDocked: () => void;
102
+ /** Set inspector width (docked mode) */
103
+ setInspectorWidth: (width: number) => void;
104
+ /** Set inspector position (floating mode) */
105
+ setInspectorFloatingPosition: (position: {
106
+ x: number;
107
+ y: number;
108
+ }) => void;
109
+ /** Set inspector size (floating mode) */
110
+ setInspectorFloatingSize: (size: {
111
+ width: number;
112
+ height: number;
113
+ }) => void;
114
+ /** Whether connected to the WebSocket server */
115
+ wsConnected: boolean;
116
+ /** WebSocket server URL */
117
+ wsUrl: string;
118
+ }
119
+ /**
120
+ * Create the core UI state slice.
121
+ *
122
+ * @param services - Plugin services for accessing WebSocket and storage
123
+ * @returns StateCreator for the core slice
124
+ */
125
+ export declare const createCoreSlice: (services: PluginServices) => StateCreator<CoreSlice>;
126
+ //# sourceMappingURL=core-slice.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core-slice.d.ts","sourceRoot":"","sources":["../../../src/core/store/core-slice.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Core Store - UI state management
3
+ */
4
+ export { createCoreSlice, type CoreSlice, type FloatingIconPosition, type CommandPaletteState, type CommandPaletteFilter, type InspectorState, } from './core-slice';
5
+ export { createComposedStore, createComposedStoreFactory, useComposedStore, initializePlugins, getStoreApi, getPluginServices, resetStore, hasPluginSlice, getPluginSlice, createScopedPluginServices, type ComposedStoreOptions, type PluginSliceMap, type AnyPluginSlice, type PluginSlices, type ComposedState, type ComposedStoreActions, type ComposedStore, } from './composed-store';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/store/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EACL,eAAe,EACf,KAAK,SAAS,EACd,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,cAAc,GACpB,MAAM,cAAc,CAAC;AAGtB,OAAO,EAEL,mBAAmB,EACnB,0BAA0B,EAC1B,gBAAgB,EAChB,iBAAiB,EAEjB,WAAW,EACX,iBAAiB,EACjB,UAAU,EACV,cAAc,EACd,cAAc,EACd,0BAA0B,EAE1B,KAAK,oBAAoB,EACzB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,oBAAoB,EACzB,KAAK,aAAa,GACnB,MAAM,kBAAkB,CAAC"}