@adcops/autocore-react 3.3.8 → 3.3.10

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 (215) hide show
  1. package/LICENSE +58 -58
  2. package/additional-docs/AutoCoreTagContext.md +441 -441
  3. package/additional-docs/ButtonApiSpecs.md +48 -48
  4. package/additional-docs/GlobalEventEmitter.md +243 -243
  5. package/additional-docs/general_recommendations.md +22 -22
  6. package/additional-docs/react_performance_notes.md +94 -94
  7. package/dist/assets/svg/blockly_logo.svg +82 -82
  8. package/dist/assets/svg/distance.svg +40 -40
  9. package/dist/assets/svg/python_logo.svg +246 -246
  10. package/dist/assets/svg/rotation_ccw.svg +50 -50
  11. package/dist/assets/svg/rotation_ccw_a.svg +57 -57
  12. package/dist/assets/svg/rotation_ccw_b.svg +57 -57
  13. package/dist/assets/svg/rotation_ccw_c.svg +57 -57
  14. package/dist/assets/svg/rotation_cw.svg +49 -49
  15. package/dist/assets/svg/rotation_cw_a.svg +30 -30
  16. package/dist/assets/svg/rotation_cw_b.svg +30 -30
  17. package/dist/assets/svg/rotation_cw_c.svg +30 -30
  18. package/dist/assets/svg/speed.svg +39 -39
  19. package/dist/components/BlocklyEditor.css +93 -93
  20. package/dist/components/JogPanel.css +41 -41
  21. package/dist/components/ProgressBarWithValue.css +27 -27
  22. package/dist/components/ValueIndicator.css +31 -31
  23. package/dist/components/osk.css +123 -123
  24. package/dist/core/AutoCoreTagContext.d.ts.map +1 -1
  25. package/dist/core/AutoCoreTagContext.js +1 -1
  26. package/dist/hub/HubBase.d.ts +3 -3
  27. package/dist/hub/HubBase.d.ts.map +1 -1
  28. package/dist/hub/HubBase.js +1 -1
  29. package/package.json +104 -104
  30. package/readme.md +343 -343
  31. package/src/assets/BlocklyLogo.tsx +27 -27
  32. package/src/assets/Distance.tsx +18 -18
  33. package/src/assets/JogLong.tsx +13 -13
  34. package/src/assets/JogMedium.tsx +13 -13
  35. package/src/assets/JogShort.tsx +13 -13
  36. package/src/assets/PythonLogo.tsx +83 -83
  37. package/src/assets/Rotation3D.tsx +13 -13
  38. package/src/assets/RotationCcw.tsx +33 -33
  39. package/src/assets/RotationCcwA.tsx +45 -45
  40. package/src/assets/RotationCcwB.tsx +45 -45
  41. package/src/assets/RotationCcwC.tsx +45 -45
  42. package/src/assets/RotationCw.tsx +31 -31
  43. package/src/assets/RotationCwA.tsx +42 -42
  44. package/src/assets/RotationCwB.tsx +42 -42
  45. package/src/assets/RotationCwC.tsx +42 -42
  46. package/src/assets/Run.tsx +13 -13
  47. package/src/assets/Speed.tsx +18 -18
  48. package/src/assets/SpeedFast.tsx +13 -13
  49. package/src/assets/SpeedMedium.tsx +13 -13
  50. package/src/assets/SpeedNone.tsx +13 -13
  51. package/src/assets/SpeedSlow.tsx +13 -13
  52. package/src/assets/Walk.tsx +13 -13
  53. package/src/assets/index.ts +22 -22
  54. package/src/assets/svg/blockly_logo.svg +82 -82
  55. package/src/assets/svg/distance.svg +40 -40
  56. package/src/assets/svg/python_logo.svg +246 -246
  57. package/src/assets/svg/rotation_ccw.svg +50 -50
  58. package/src/assets/svg/rotation_ccw_a.svg +57 -57
  59. package/src/assets/svg/rotation_ccw_b.svg +57 -57
  60. package/src/assets/svg/rotation_ccw_c.svg +57 -57
  61. package/src/assets/svg/rotation_cw.svg +49 -49
  62. package/src/assets/svg/rotation_cw_a.svg +30 -30
  63. package/src/assets/svg/rotation_cw_b.svg +30 -30
  64. package/src/assets/svg/rotation_cw_c.svg +30 -30
  65. package/src/assets/svg/speed.svg +39 -39
  66. package/src/components/AutoCoreDevPanel.tsx +414 -414
  67. package/src/components/BlocklyEditor.css +93 -93
  68. package/src/components/BlocklyEditor.tsx +609 -609
  69. package/src/components/CodeEditor.tsx +155 -155
  70. package/src/components/FileList.tsx +390 -390
  71. package/src/components/FileSelect.tsx +128 -128
  72. package/src/components/FitText.tsx +35 -35
  73. package/src/components/Indicator.tsx +188 -188
  74. package/src/components/IndicatorButton.tsx +214 -214
  75. package/src/components/IndicatorRect.tsx +172 -172
  76. package/src/components/JogPanel.css +41 -41
  77. package/src/components/JogPanel.tsx +461 -461
  78. package/src/components/Lamp.tsx +243 -243
  79. package/src/components/Osk.tsx +192 -192
  80. package/src/components/OskDialog.tsx +164 -164
  81. package/src/components/ProgressBarWithValue.css +27 -27
  82. package/src/components/ProgressBarWithValue.tsx +48 -48
  83. package/src/components/TextInput.tsx +195 -195
  84. package/src/components/ToggleGroup.tsx +322 -322
  85. package/src/components/ValueDisplay.tsx +236 -236
  86. package/src/components/ValueIndicator.css +31 -31
  87. package/src/components/ValueIndicator.tsx +135 -135
  88. package/src/components/ValueInput.tsx +368 -368
  89. package/src/components/osk.css +123 -123
  90. package/src/core/ActionMode.ts +19 -19
  91. package/src/core/AutoCoreTagContext.tsx +625 -614
  92. package/src/core/AutoCoreTagTypes.ts +334 -334
  93. package/src/core/CoreStreamTypes.ts +512 -512
  94. package/src/core/EventEmitterContext.tsx +434 -434
  95. package/src/core/IndicatorButtonState.ts +34 -34
  96. package/src/core/IndicatorColor.ts +35 -35
  97. package/src/core/MaskPatterns.ts +87 -87
  98. package/src/core/NumerableTypes.ts +80 -80
  99. package/src/core/PositionContext.ts +59 -59
  100. package/src/core/UniqueId.ts +41 -41
  101. package/src/core/ValueSimulator.ts +166 -166
  102. package/src/core/hoc.tsx +65 -65
  103. package/src/hooks/adsHooks.tsx +287 -287
  104. package/src/hooks/commandHooks.tsx +300 -300
  105. package/src/hooks/index.ts +12 -12
  106. package/src/hooks/useAutoCoreTag.ts +103 -103
  107. package/src/hooks/useScaledValue.tsx +99 -99
  108. package/src/hub/CommandMessage.ts +89 -89
  109. package/src/hub/DebugPanel.ts +307 -307
  110. package/src/hub/HubBase.ts +249 -236
  111. package/src/hub/HubSimulate.ts +124 -124
  112. package/src/hub/HubTauri.ts +140 -140
  113. package/src/hub/HubWebSocket.ts +250 -250
  114. package/src/hub/debug.ts +211 -211
  115. package/src/hub/index.ts +81 -81
  116. package/src/themes/adc-dark/_extensions.scss +166 -166
  117. package/src/themes/adc-dark/_variables.scss +913 -913
  118. package/src/themes/adc-dark/blue/_fonts.scss +23 -23
  119. package/src/themes/adc-dark/blue/adc_theme.scss +31 -31
  120. package/src/themes/adc-dark/blue/theme.scss +14 -14
  121. package/src/themes/theme-base/_colors.scss +17 -17
  122. package/src/themes/theme-base/_common.scss +74 -74
  123. package/src/themes/theme-base/_components.scss +111 -111
  124. package/src/themes/theme-base/_mixins.scss +243 -243
  125. package/src/themes/theme-base/components/button/_button.scss +644 -644
  126. package/src/themes/theme-base/components/button/_speeddial.scss +91 -91
  127. package/src/themes/theme-base/components/button/_splitbutton.scss +358 -358
  128. package/src/themes/theme-base/components/data/_carousel.scss +39 -39
  129. package/src/themes/theme-base/components/data/_datascroller.scss +47 -47
  130. package/src/themes/theme-base/components/data/_datatable.scss +388 -388
  131. package/src/themes/theme-base/components/data/_dataview.scss +47 -47
  132. package/src/themes/theme-base/components/data/_filter.scss +137 -137
  133. package/src/themes/theme-base/components/data/_orderlist.scss +86 -86
  134. package/src/themes/theme-base/components/data/_organizationchart.scss +50 -50
  135. package/src/themes/theme-base/components/data/_paginator.scss +91 -91
  136. package/src/themes/theme-base/components/data/_picklist.scss +73 -73
  137. package/src/themes/theme-base/components/data/_timeline.scss +38 -38
  138. package/src/themes/theme-base/components/data/_tree.scss +184 -184
  139. package/src/themes/theme-base/components/data/_treetable.scss +431 -431
  140. package/src/themes/theme-base/components/file/_fileupload.scss +41 -41
  141. package/src/themes/theme-base/components/input/_autocomplete.scss +94 -94
  142. package/src/themes/theme-base/components/input/_calendar.scss +251 -251
  143. package/src/themes/theme-base/components/input/_cascadeselect.scss +107 -107
  144. package/src/themes/theme-base/components/input/_checkbox.scss +181 -181
  145. package/src/themes/theme-base/components/input/_chips.scss +102 -102
  146. package/src/themes/theme-base/components/input/_colorpicker.scss +17 -17
  147. package/src/themes/theme-base/components/input/_dropdown.scss +252 -252
  148. package/src/themes/theme-base/components/input/_editor.scss +122 -122
  149. package/src/themes/theme-base/components/input/_iconfield.scss +9 -9
  150. package/src/themes/theme-base/components/input/_inputgroup.scss +74 -74
  151. package/src/themes/theme-base/components/input/_inputicon.scss +14 -14
  152. package/src/themes/theme-base/components/input/_inputnumber.scss +4 -4
  153. package/src/themes/theme-base/components/input/_inputotp.scss +10 -10
  154. package/src/themes/theme-base/components/input/_inputswitch.scss +99 -99
  155. package/src/themes/theme-base/components/input/_inputtext.scss +101 -101
  156. package/src/themes/theme-base/components/input/_listbox.scss +138 -138
  157. package/src/themes/theme-base/components/input/_mention.scss +30 -30
  158. package/src/themes/theme-base/components/input/_multiselect.scss +278 -278
  159. package/src/themes/theme-base/components/input/_password.scss +32 -32
  160. package/src/themes/theme-base/components/input/_radiobutton.scss +169 -169
  161. package/src/themes/theme-base/components/input/_rating.scss +80 -80
  162. package/src/themes/theme-base/components/input/_selectbutton.scss +49 -49
  163. package/src/themes/theme-base/components/input/_slider.scss +49 -49
  164. package/src/themes/theme-base/components/input/_togglebutton.scss +99 -99
  165. package/src/themes/theme-base/components/input/_treeselect.scss +151 -151
  166. package/src/themes/theme-base/components/input/_tristatecheckbox.scss +46 -46
  167. package/src/themes/theme-base/components/menu/_breadcrumb.scss +42 -42
  168. package/src/themes/theme-base/components/menu/_contextmenu.scss +39 -39
  169. package/src/themes/theme-base/components/menu/_dock.scss +109 -109
  170. package/src/themes/theme-base/components/menu/_megamenu.scss +141 -141
  171. package/src/themes/theme-base/components/menu/_menu.scss +33 -33
  172. package/src/themes/theme-base/components/menu/_menubar.scss +216 -216
  173. package/src/themes/theme-base/components/menu/_panelmenu.scss +153 -153
  174. package/src/themes/theme-base/components/menu/_slidemenu.scss +60 -60
  175. package/src/themes/theme-base/components/menu/_steps.scss +57 -57
  176. package/src/themes/theme-base/components/menu/_tabmenu.scss +50 -50
  177. package/src/themes/theme-base/components/menu/_tieredmenu.scss +43 -43
  178. package/src/themes/theme-base/components/messages/_inlinemessage.scss +69 -69
  179. package/src/themes/theme-base/components/messages/_message.scss +107 -107
  180. package/src/themes/theme-base/components/messages/_toast.scss +100 -100
  181. package/src/themes/theme-base/components/misc/_avatar.scss +33 -33
  182. package/src/themes/theme-base/components/misc/_badge.scss +76 -76
  183. package/src/themes/theme-base/components/misc/_chip.scss +38 -38
  184. package/src/themes/theme-base/components/misc/_inplace.scss +17 -17
  185. package/src/themes/theme-base/components/misc/_metergroup.scss +80 -80
  186. package/src/themes/theme-base/components/misc/_progressbar.scss +17 -17
  187. package/src/themes/theme-base/components/misc/_scrolltop.scss +24 -24
  188. package/src/themes/theme-base/components/misc/_skeleton.scss +7 -7
  189. package/src/themes/theme-base/components/misc/_tag.scss +39 -39
  190. package/src/themes/theme-base/components/misc/_terminal.scss +12 -12
  191. package/src/themes/theme-base/components/multimedia/_galleria.scss +153 -153
  192. package/src/themes/theme-base/components/multimedia/_image.scss +53 -53
  193. package/src/themes/theme-base/components/overlay/_confirmpopup.scss +72 -72
  194. package/src/themes/theme-base/components/overlay/_dialog.scss +78 -78
  195. package/src/themes/theme-base/components/overlay/_overlaypanel.scss +64 -64
  196. package/src/themes/theme-base/components/overlay/_sidebar.scss +23 -23
  197. package/src/themes/theme-base/components/overlay/_tooltip.scss +33 -33
  198. package/src/themes/theme-base/components/panel/_accordion.scss +118 -118
  199. package/src/themes/theme-base/components/panel/_card.scss +30 -30
  200. package/src/themes/theme-base/components/panel/_divider.scss +30 -30
  201. package/src/themes/theme-base/components/panel/_fieldset.scss +47 -47
  202. package/src/themes/theme-base/components/panel/_panel.scss +47 -47
  203. package/src/themes/theme-base/components/panel/_scrollpanel.scss +10 -10
  204. package/src/themes/theme-base/components/panel/_splitter.scss +23 -23
  205. package/src/themes/theme-base/components/panel/_stepper.scss +136 -136
  206. package/src/themes/theme-base/components/panel/_tabview.scss +147 -147
  207. package/src/themes/theme-base/components/panel/_toolbar.scss +11 -11
  208. package/terser.config.cjs +25 -25
  209. package/todo.md +18 -18
  210. package/tools/build-themes.cjs +65 -65
  211. package/tools/copy-distribution-files.cjs +77 -77
  212. package/tools/minify.cjs +55 -55
  213. package/tsconfig.json +48 -48
  214. package/typedoc.json +12 -12
  215. package/.claude/settings.local.json +0 -7
package/src/hub/debug.ts CHANGED
@@ -1,211 +1,211 @@
1
- /*
2
- * Copyright (C) 2026 Automated Design Corp. All Rights Reserved.
3
- *
4
- * Debug Logging Utility for CoreStream/Hub Communication
5
- *
6
- * This utility provides debug logging that won't be stripped by production builds.
7
- * It uses console.warn/console.error which are typically preserved, and stores
8
- * logs in a buffer that can be inspected from the browser console.
9
- *
10
- * Usage in browser console:
11
- * window.__AUTOCORE_DEBUG__.enable() - Enable debug logging
12
- * window.__AUTOCORE_DEBUG__.disable() - Disable debug logging
13
- * window.__AUTOCORE_DEBUG__.logs - View all logged messages
14
- * window.__AUTOCORE_DEBUG__.clear() - Clear log buffer
15
- * window.__AUTOCORE_DEBUG__.dump() - Dump all logs to console
16
- */
17
-
18
- export interface DebugLogEntry {
19
- timestamp: number;
20
- source: string;
21
- level: "info" | "warn" | "error" | "send" | "recv";
22
- message: string;
23
- data?: unknown;
24
- }
25
-
26
- interface DebugState {
27
- enabled: boolean;
28
- logs: DebugLogEntry[];
29
- maxLogs: number;
30
- }
31
-
32
- // Global state - attached to window for browser console access
33
- const state: DebugState = {
34
- enabled: true, // Start enabled for debugging
35
- logs: [],
36
- maxLogs: 1000,
37
- };
38
-
39
- // Format timestamp as HH:MM:SS.mmm
40
- function formatTime(ts: number): string {
41
- const d = new Date(ts);
42
- return d.toTimeString().slice(0, 8) + "." + String(d.getMilliseconds()).padStart(3, "0");
43
- }
44
-
45
- // Format log entry for console output
46
- function formatEntry(entry: DebugLogEntry): string {
47
- return `[${formatTime(entry.timestamp)}] [${entry.source}] ${entry.message}`;
48
- }
49
-
50
- // Add a log entry
51
- function addLog(
52
- source: string,
53
- level: DebugLogEntry["level"],
54
- message: string,
55
- data?: unknown
56
- ): void {
57
- const entry: DebugLogEntry = {
58
- timestamp: Date.now(),
59
- source,
60
- level,
61
- message,
62
- data,
63
- };
64
-
65
- // Add to buffer (with size limit)
66
- state.logs.push(entry);
67
- if (state.logs.length > state.maxLogs) {
68
- state.logs.shift();
69
- }
70
-
71
- // Output to console if enabled
72
- if (state.enabled) {
73
- const formatted = formatEntry(entry);
74
- const style = getLogStyle(level);
75
-
76
- switch (level) {
77
- case "error":
78
- console.error(`%c${formatted}`, style, data !== undefined ? data : "");
79
- break;
80
- case "warn":
81
- console.warn(`%c${formatted}`, style, data !== undefined ? data : "");
82
- break;
83
- case "send":
84
- console.warn(`%c>>> ${formatted}`, style, data !== undefined ? data : "");
85
- break;
86
- case "recv":
87
- console.warn(`%c<<< ${formatted}`, style, data !== undefined ? data : "");
88
- break;
89
- default:
90
- console.warn(`%c${formatted}`, style, data !== undefined ? data : "");
91
- }
92
- }
93
- }
94
-
95
- // Get console style for log level
96
- function getLogStyle(level: DebugLogEntry["level"]): string {
97
- switch (level) {
98
- case "error":
99
- return "color: #ff4444; font-weight: bold;";
100
- case "warn":
101
- return "color: #ffaa00;";
102
- case "send":
103
- return "color: #44ff44;"; // Green for outgoing
104
- case "recv":
105
- return "color: #4444ff;"; // Blue for incoming
106
- default:
107
- return "color: #888888;";
108
- }
109
- }
110
-
111
- // Public debug API
112
- export const debug = {
113
- /** Log an info message */
114
- info(source: string, message: string, data?: unknown): void {
115
- addLog(source, "info", message, data);
116
- },
117
-
118
- /** Log a warning message */
119
- warn(source: string, message: string, data?: unknown): void {
120
- addLog(source, "warn", message, data);
121
- },
122
-
123
- /** Log an error message */
124
- error(source: string, message: string, data?: unknown): void {
125
- addLog(source, "error", message, data);
126
- },
127
-
128
- /** Log an outgoing message (to server) */
129
- send(source: string, message: string, data?: unknown): void {
130
- addLog(source, "send", message, data);
131
- },
132
-
133
- /** Log an incoming message (from server) */
134
- recv(source: string, message: string, data?: unknown): void {
135
- addLog(source, "recv", message, data);
136
- },
137
-
138
- /** Check if debug is enabled */
139
- isEnabled(): boolean {
140
- return state.enabled;
141
- },
142
- };
143
-
144
- // Browser console API
145
- const consoleAPI = {
146
- enable(): void {
147
- state.enabled = true;
148
- console.warn("%c[AutoCore Debug] Logging ENABLED", "color: #44ff44; font-weight: bold;");
149
- },
150
-
151
- disable(): void {
152
- state.enabled = false;
153
- console.warn("%c[AutoCore Debug] Logging DISABLED", "color: #ff4444; font-weight: bold;");
154
- },
155
-
156
- get logs(): DebugLogEntry[] {
157
- return [...state.logs];
158
- },
159
-
160
- clear(): void {
161
- state.logs = [];
162
- console.warn("%c[AutoCore Debug] Logs cleared", "color: #ffaa00;");
163
- },
164
-
165
- dump(): void {
166
- console.group("[AutoCore Debug] Full Log Dump");
167
- for (const entry of state.logs) {
168
- const formatted = formatEntry(entry);
169
- switch (entry.level) {
170
- case "send":
171
- console.log(`%c>>> ${formatted}`, "color: #44ff44;", entry.data);
172
- break;
173
- case "recv":
174
- console.log(`%c<<< ${formatted}`, "color: #4444ff;", entry.data);
175
- break;
176
- case "error":
177
- console.log(`%c${formatted}`, "color: #ff4444;", entry.data);
178
- break;
179
- default:
180
- console.log(formatted, entry.data);
181
- }
182
- }
183
- console.groupEnd();
184
- },
185
-
186
- /** Filter logs by source */
187
- filterBySource(source: string): DebugLogEntry[] {
188
- return state.logs.filter((e) => e.source.includes(source));
189
- },
190
-
191
- /** Filter logs by level */
192
- filterByLevel(level: DebugLogEntry["level"]): DebugLogEntry[] {
193
- return state.logs.filter((e) => e.level === level);
194
- },
195
-
196
- /** Get only send/recv messages */
197
- getMessages(): DebugLogEntry[] {
198
- return state.logs.filter((e) => e.level === "send" || e.level === "recv");
199
- },
200
- };
201
-
202
- // Attach to window for browser console access
203
- if (typeof window !== "undefined") {
204
- (window as unknown as { __AUTOCORE_DEBUG__: typeof consoleAPI }).__AUTOCORE_DEBUG__ = consoleAPI;
205
- console.warn(
206
- "%c[AutoCore Debug] Debug utility loaded. Access via window.__AUTOCORE_DEBUG__",
207
- "color: #44ff44; font-weight: bold;"
208
- );
209
- }
210
-
211
- export default debug;
1
+ /*
2
+ * Copyright (C) 2026 Automated Design Corp. All Rights Reserved.
3
+ *
4
+ * Debug Logging Utility for CoreStream/Hub Communication
5
+ *
6
+ * This utility provides debug logging that won't be stripped by production builds.
7
+ * It uses console.warn/console.error which are typically preserved, and stores
8
+ * logs in a buffer that can be inspected from the browser console.
9
+ *
10
+ * Usage in browser console:
11
+ * window.__AUTOCORE_DEBUG__.enable() - Enable debug logging
12
+ * window.__AUTOCORE_DEBUG__.disable() - Disable debug logging
13
+ * window.__AUTOCORE_DEBUG__.logs - View all logged messages
14
+ * window.__AUTOCORE_DEBUG__.clear() - Clear log buffer
15
+ * window.__AUTOCORE_DEBUG__.dump() - Dump all logs to console
16
+ */
17
+
18
+ export interface DebugLogEntry {
19
+ timestamp: number;
20
+ source: string;
21
+ level: "info" | "warn" | "error" | "send" | "recv";
22
+ message: string;
23
+ data?: unknown;
24
+ }
25
+
26
+ interface DebugState {
27
+ enabled: boolean;
28
+ logs: DebugLogEntry[];
29
+ maxLogs: number;
30
+ }
31
+
32
+ // Global state - attached to window for browser console access
33
+ const state: DebugState = {
34
+ enabled: true, // Start enabled for debugging
35
+ logs: [],
36
+ maxLogs: 1000,
37
+ };
38
+
39
+ // Format timestamp as HH:MM:SS.mmm
40
+ function formatTime(ts: number): string {
41
+ const d = new Date(ts);
42
+ return d.toTimeString().slice(0, 8) + "." + String(d.getMilliseconds()).padStart(3, "0");
43
+ }
44
+
45
+ // Format log entry for console output
46
+ function formatEntry(entry: DebugLogEntry): string {
47
+ return `[${formatTime(entry.timestamp)}] [${entry.source}] ${entry.message}`;
48
+ }
49
+
50
+ // Add a log entry
51
+ function addLog(
52
+ source: string,
53
+ level: DebugLogEntry["level"],
54
+ message: string,
55
+ data?: unknown
56
+ ): void {
57
+ const entry: DebugLogEntry = {
58
+ timestamp: Date.now(),
59
+ source,
60
+ level,
61
+ message,
62
+ data,
63
+ };
64
+
65
+ // Add to buffer (with size limit)
66
+ state.logs.push(entry);
67
+ if (state.logs.length > state.maxLogs) {
68
+ state.logs.shift();
69
+ }
70
+
71
+ // Output to console if enabled
72
+ if (state.enabled) {
73
+ const formatted = formatEntry(entry);
74
+ const style = getLogStyle(level);
75
+
76
+ switch (level) {
77
+ case "error":
78
+ console.error(`%c${formatted}`, style, data !== undefined ? data : "");
79
+ break;
80
+ case "warn":
81
+ console.warn(`%c${formatted}`, style, data !== undefined ? data : "");
82
+ break;
83
+ case "send":
84
+ console.warn(`%c>>> ${formatted}`, style, data !== undefined ? data : "");
85
+ break;
86
+ case "recv":
87
+ console.warn(`%c<<< ${formatted}`, style, data !== undefined ? data : "");
88
+ break;
89
+ default:
90
+ console.warn(`%c${formatted}`, style, data !== undefined ? data : "");
91
+ }
92
+ }
93
+ }
94
+
95
+ // Get console style for log level
96
+ function getLogStyle(level: DebugLogEntry["level"]): string {
97
+ switch (level) {
98
+ case "error":
99
+ return "color: #ff4444; font-weight: bold;";
100
+ case "warn":
101
+ return "color: #ffaa00;";
102
+ case "send":
103
+ return "color: #44ff44;"; // Green for outgoing
104
+ case "recv":
105
+ return "color: #4444ff;"; // Blue for incoming
106
+ default:
107
+ return "color: #888888;";
108
+ }
109
+ }
110
+
111
+ // Public debug API
112
+ export const debug = {
113
+ /** Log an info message */
114
+ info(source: string, message: string, data?: unknown): void {
115
+ addLog(source, "info", message, data);
116
+ },
117
+
118
+ /** Log a warning message */
119
+ warn(source: string, message: string, data?: unknown): void {
120
+ addLog(source, "warn", message, data);
121
+ },
122
+
123
+ /** Log an error message */
124
+ error(source: string, message: string, data?: unknown): void {
125
+ addLog(source, "error", message, data);
126
+ },
127
+
128
+ /** Log an outgoing message (to server) */
129
+ send(source: string, message: string, data?: unknown): void {
130
+ addLog(source, "send", message, data);
131
+ },
132
+
133
+ /** Log an incoming message (from server) */
134
+ recv(source: string, message: string, data?: unknown): void {
135
+ addLog(source, "recv", message, data);
136
+ },
137
+
138
+ /** Check if debug is enabled */
139
+ isEnabled(): boolean {
140
+ return state.enabled;
141
+ },
142
+ };
143
+
144
+ // Browser console API
145
+ const consoleAPI = {
146
+ enable(): void {
147
+ state.enabled = true;
148
+ console.warn("%c[AutoCore Debug] Logging ENABLED", "color: #44ff44; font-weight: bold;");
149
+ },
150
+
151
+ disable(): void {
152
+ state.enabled = false;
153
+ console.warn("%c[AutoCore Debug] Logging DISABLED", "color: #ff4444; font-weight: bold;");
154
+ },
155
+
156
+ get logs(): DebugLogEntry[] {
157
+ return [...state.logs];
158
+ },
159
+
160
+ clear(): void {
161
+ state.logs = [];
162
+ console.warn("%c[AutoCore Debug] Logs cleared", "color: #ffaa00;");
163
+ },
164
+
165
+ dump(): void {
166
+ console.group("[AutoCore Debug] Full Log Dump");
167
+ for (const entry of state.logs) {
168
+ const formatted = formatEntry(entry);
169
+ switch (entry.level) {
170
+ case "send":
171
+ console.log(`%c>>> ${formatted}`, "color: #44ff44;", entry.data);
172
+ break;
173
+ case "recv":
174
+ console.log(`%c<<< ${formatted}`, "color: #4444ff;", entry.data);
175
+ break;
176
+ case "error":
177
+ console.log(`%c${formatted}`, "color: #ff4444;", entry.data);
178
+ break;
179
+ default:
180
+ console.log(formatted, entry.data);
181
+ }
182
+ }
183
+ console.groupEnd();
184
+ },
185
+
186
+ /** Filter logs by source */
187
+ filterBySource(source: string): DebugLogEntry[] {
188
+ return state.logs.filter((e) => e.source.includes(source));
189
+ },
190
+
191
+ /** Filter logs by level */
192
+ filterByLevel(level: DebugLogEntry["level"]): DebugLogEntry[] {
193
+ return state.logs.filter((e) => e.level === level);
194
+ },
195
+
196
+ /** Get only send/recv messages */
197
+ getMessages(): DebugLogEntry[] {
198
+ return state.logs.filter((e) => e.level === "send" || e.level === "recv");
199
+ },
200
+ };
201
+
202
+ // Attach to window for browser console access
203
+ if (typeof window !== "undefined") {
204
+ (window as unknown as { __AUTOCORE_DEBUG__: typeof consoleAPI }).__AUTOCORE_DEBUG__ = consoleAPI;
205
+ console.warn(
206
+ "%c[AutoCore Debug] Debug utility loaded. Access via window.__AUTOCORE_DEBUG__",
207
+ "color: #44ff44; font-weight: bold;"
208
+ );
209
+ }
210
+
211
+ export default debug;
package/src/hub/index.ts CHANGED
@@ -1,82 +1,82 @@
1
- /*
2
- * Copyright (C) 2024 Automated Design Corp. All Rights Reserved.
3
- * Created Date: 2024-01-16 21:07:29
4
- * -----
5
- * Last Modified: 2026-01-29 09:34:39
6
- * Modified By: ADC
7
- * -----
8
- *
9
- */
10
-
11
- console.log("[hub/index.ts] Module loading...");
12
-
13
- import { HubBase as Hub } from './HubBase';
14
- import { HubTauri } from './HubTauri';
15
- import { HubWebSocket } from "./HubWebSocket";
16
- import { HubSimulate } from "./HubSimulate";
17
- import { getDebugPanel } from "./DebugPanel";
18
-
19
- console.log("[hub/index.ts] Imports complete");
20
-
21
- /**
22
- * Singleton hub instance.
23
- * This ensures all components share the same connection to the backend.
24
- */
25
- let hubInstance: Hub | null = null;
26
-
27
- /**
28
- * Creates or returns the singleton Hub connection to the backend.
29
- *
30
- * The hub type is determined automatically:
31
- * - If running in Tauri: HubTauri (direct Rust IPC)
32
- * - Otherwise: HubWebSocket (WebSocket to autocore-server)
33
- *
34
- * @returns Hub The singleton hub instance
35
- */
36
- export function createHub(): Hub {
37
- console.log("[HUB] createHub() called");
38
- const panel = getDebugPanel();
39
- panel.log("info", "createHub", `called (hasInstance: ${!!hubInstance})`);
40
-
41
- if (!hubInstance) {
42
- if (typeof window !== 'undefined' && (window as any).__TAURI__ !== undefined && (window as any).__TAURI__ !== null) {
43
- panel.log("info", "createHub", "Creating HubTauri instance");
44
- hubInstance = new HubTauri();
45
- } else {
46
- panel.log("info", "createHub", "Creating HubWebSocket instance");
47
- hubInstance = new HubWebSocket();
48
- }
49
- } else {
50
- panel.log("info", "createHub", "Returning existing hub instance");
51
- }
52
- return hubInstance;
53
- }
54
-
55
- /**
56
- * Returns the current hub instance, or null if not yet created.
57
- * Useful for checking if a hub exists without creating one.
58
- */
59
- export function getHubInstance(): Hub | null {
60
- return hubInstance;
61
- }
62
-
63
- /**
64
- * Resets the singleton hub instance.
65
- * This should only be used for testing or when intentionally reconnecting.
66
- */
67
- export function resetHub(): void {
68
- hubInstance = null;
69
- }
70
-
71
- // Export HubBase for convenience to save importing throughout the application.
72
- export { HubBase as Hub } from './HubBase';
73
- export { HubTauri };
74
- export { HubWebSocket };
75
- export { HubSimulate };
76
-
77
- // Export CommandMessage types
78
- export type { CommandMessage } from './CommandMessage';
79
- export { MessageType } from './CommandMessage';
80
-
81
- // Export DebugPanel utilities
1
+ /*
2
+ * Copyright (C) 2024 Automated Design Corp. All Rights Reserved.
3
+ * Created Date: 2024-01-16 21:07:29
4
+ * -----
5
+ * Last Modified: 2026-01-29 09:34:39
6
+ * Modified By: ADC
7
+ * -----
8
+ *
9
+ */
10
+
11
+ console.log("[hub/index.ts] Module loading...");
12
+
13
+ import { HubBase as Hub } from './HubBase';
14
+ import { HubTauri } from './HubTauri';
15
+ import { HubWebSocket } from "./HubWebSocket";
16
+ import { HubSimulate } from "./HubSimulate";
17
+ import { getDebugPanel } from "./DebugPanel";
18
+
19
+ console.log("[hub/index.ts] Imports complete");
20
+
21
+ /**
22
+ * Singleton hub instance.
23
+ * This ensures all components share the same connection to the backend.
24
+ */
25
+ let hubInstance: Hub | null = null;
26
+
27
+ /**
28
+ * Creates or returns the singleton Hub connection to the backend.
29
+ *
30
+ * The hub type is determined automatically:
31
+ * - If running in Tauri: HubTauri (direct Rust IPC)
32
+ * - Otherwise: HubWebSocket (WebSocket to autocore-server)
33
+ *
34
+ * @returns Hub The singleton hub instance
35
+ */
36
+ export function createHub(): Hub {
37
+ console.log("[HUB] createHub() called");
38
+ const panel = getDebugPanel();
39
+ panel.log("info", "createHub", `called (hasInstance: ${!!hubInstance})`);
40
+
41
+ if (!hubInstance) {
42
+ if (typeof window !== 'undefined' && (window as any).__TAURI__ !== undefined && (window as any).__TAURI__ !== null) {
43
+ panel.log("info", "createHub", "Creating HubTauri instance");
44
+ hubInstance = new HubTauri();
45
+ } else {
46
+ panel.log("info", "createHub", "Creating HubWebSocket instance");
47
+ hubInstance = new HubWebSocket();
48
+ }
49
+ } else {
50
+ panel.log("info", "createHub", "Returning existing hub instance");
51
+ }
52
+ return hubInstance;
53
+ }
54
+
55
+ /**
56
+ * Returns the current hub instance, or null if not yet created.
57
+ * Useful for checking if a hub exists without creating one.
58
+ */
59
+ export function getHubInstance(): Hub | null {
60
+ return hubInstance;
61
+ }
62
+
63
+ /**
64
+ * Resets the singleton hub instance.
65
+ * This should only be used for testing or when intentionally reconnecting.
66
+ */
67
+ export function resetHub(): void {
68
+ hubInstance = null;
69
+ }
70
+
71
+ // Export HubBase for convenience to save importing throughout the application.
72
+ export { HubBase as Hub } from './HubBase';
73
+ export { HubTauri };
74
+ export { HubWebSocket };
75
+ export { HubSimulate };
76
+
77
+ // Export CommandMessage types
78
+ export type { CommandMessage } from './CommandMessage';
79
+ export { MessageType } from './CommandMessage';
80
+
81
+ // Export DebugPanel utilities
82
82
  export { enableDebugPanel } from './DebugPanel';