@robdobsn/raftjs 1.7.1 → 1.7.3

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 (205) hide show
  1. package/dist/web/RaftAttributeHandler.js +5 -5
  2. package/dist/web/RaftAttributeHandler.js.map +1 -1
  3. package/dist/web/RaftChannel.d.ts +2 -0
  4. package/dist/web/RaftChannelBLE.web.d.ts +2 -0
  5. package/dist/web/RaftChannelBLE.web.js +10 -0
  6. package/dist/web/RaftChannelBLE.web.js.map +1 -1
  7. package/dist/{react-native/RaftChannelWebSocket.d.ts → web/RaftChannelSimulated.d.ts} +9 -5
  8. package/dist/web/RaftChannelSimulated.js +418 -0
  9. package/dist/web/RaftChannelSimulated.js.map +1 -0
  10. package/dist/web/RaftChannelWebSerial.d.ts +2 -0
  11. package/dist/web/RaftChannelWebSerial.js +10 -0
  12. package/dist/web/RaftChannelWebSerial.js.map +1 -1
  13. package/dist/web/RaftChannelWebSocket.d.ts +2 -0
  14. package/dist/web/RaftChannelWebSocket.js +10 -0
  15. package/dist/web/RaftChannelWebSocket.js.map +1 -1
  16. package/dist/web/RaftConnector.js +5 -0
  17. package/dist/web/RaftConnector.js.map +1 -1
  18. package/dist/web/RaftDeviceInfo.d.ts +1 -1
  19. package/dist/web/RaftMsgHandler.d.ts +5 -0
  20. package/dist/web/RaftMsgHandler.js +32 -0
  21. package/dist/web/RaftMsgHandler.js.map +1 -1
  22. package/dist/web/main.d.ts +1 -0
  23. package/dist/web/main.js +3 -1
  24. package/dist/web/main.js.map +1 -1
  25. package/package.json +5 -2
  26. package/.editorconfig +0 -14
  27. package/.gitattributes +0 -11
  28. package/.nvmrc +0 -1
  29. package/TODO.md +0 -1
  30. package/dist/react-native/RaftAttributeHandler.d.ts +0 -12
  31. package/dist/react-native/RaftAttributeHandler.js +0 -249
  32. package/dist/react-native/RaftAttributeHandler.js.map +0 -1
  33. package/dist/react-native/RaftChannel.d.ts +0 -18
  34. package/dist/react-native/RaftChannel.js +0 -12
  35. package/dist/react-native/RaftChannel.js.map +0 -1
  36. package/dist/react-native/RaftChannelBLE.native.d.ts +0 -93
  37. package/dist/react-native/RaftChannelBLE.native.js +0 -472
  38. package/dist/react-native/RaftChannelBLE.native.js.map +0 -1
  39. package/dist/react-native/RaftChannelBLE.web.d.ts +0 -38
  40. package/dist/react-native/RaftChannelBLE.web.js +0 -290
  41. package/dist/react-native/RaftChannelBLE.web.js.map +0 -1
  42. package/dist/react-native/RaftChannelBLEFactory.d.ts +0 -10
  43. package/dist/react-native/RaftChannelBLEFactory.js +0 -17
  44. package/dist/react-native/RaftChannelBLEFactory.js.map +0 -1
  45. package/dist/react-native/RaftChannelBLEScanner.native.d.ts +0 -18
  46. package/dist/react-native/RaftChannelBLEScanner.native.js +0 -138
  47. package/dist/react-native/RaftChannelBLEScanner.native.js.map +0 -1
  48. package/dist/react-native/RaftChannelWebSerial.d.ts +0 -37
  49. package/dist/react-native/RaftChannelWebSerial.js +0 -319
  50. package/dist/react-native/RaftChannelWebSerial.js.map +0 -1
  51. package/dist/react-native/RaftChannelWebSocket.js +0 -197
  52. package/dist/react-native/RaftChannelWebSocket.js.map +0 -1
  53. package/dist/react-native/RaftCommsStats.d.ts +0 -39
  54. package/dist/react-native/RaftCommsStats.js +0 -128
  55. package/dist/react-native/RaftCommsStats.js.map +0 -1
  56. package/dist/react-native/RaftConnEvents.d.ts +0 -39
  57. package/dist/react-native/RaftConnEvents.js +0 -54
  58. package/dist/react-native/RaftConnEvents.js.map +0 -1
  59. package/dist/react-native/RaftConnector.d.ts +0 -245
  60. package/dist/react-native/RaftConnector.js +0 -616
  61. package/dist/react-native/RaftConnector.js.map +0 -1
  62. package/dist/react-native/RaftCustomAttrHandler.d.ts +0 -4
  63. package/dist/react-native/RaftCustomAttrHandler.js +0 -50
  64. package/dist/react-native/RaftCustomAttrHandler.js.map +0 -1
  65. package/dist/react-native/RaftDeviceInfo.d.ts +0 -63
  66. package/dist/react-native/RaftDeviceInfo.js +0 -36
  67. package/dist/react-native/RaftDeviceInfo.js.map +0 -1
  68. package/dist/react-native/RaftDeviceManager.d.ts +0 -40
  69. package/dist/react-native/RaftDeviceManager.js +0 -499
  70. package/dist/react-native/RaftDeviceManager.js.map +0 -1
  71. package/dist/react-native/RaftDeviceMgrIF.d.ts +0 -15
  72. package/dist/react-native/RaftDeviceMgrIF.js +0 -11
  73. package/dist/react-native/RaftDeviceMgrIF.js.map +0 -1
  74. package/dist/react-native/RaftDeviceMsg.d.ts +0 -9
  75. package/dist/react-native/RaftDeviceMsg.js +0 -11
  76. package/dist/react-native/RaftDeviceMsg.js.map +0 -1
  77. package/dist/react-native/RaftDeviceStates.d.ts +0 -37
  78. package/dist/react-native/RaftDeviceStates.js +0 -60
  79. package/dist/react-native/RaftDeviceStates.js.map +0 -1
  80. package/dist/react-native/RaftFileHandler.d.ts +0 -52
  81. package/dist/react-native/RaftFileHandler.js +0 -502
  82. package/dist/react-native/RaftFileHandler.js.map +0 -1
  83. package/dist/react-native/RaftLog.d.ts +0 -22
  84. package/dist/react-native/RaftLog.js +0 -63
  85. package/dist/react-native/RaftLog.js.map +0 -1
  86. package/dist/react-native/RaftMiniHDLC.d.ts +0 -18
  87. package/dist/react-native/RaftMiniHDLC.js +0 -383
  88. package/dist/react-native/RaftMiniHDLC.js.map +0 -1
  89. package/dist/react-native/RaftMsgHandler.d.ts +0 -57
  90. package/dist/react-native/RaftMsgHandler.js +0 -479
  91. package/dist/react-native/RaftMsgHandler.js.map +0 -1
  92. package/dist/react-native/RaftMsgTrackInfo.d.ts +0 -17
  93. package/dist/react-native/RaftMsgTrackInfo.js +0 -42
  94. package/dist/react-native/RaftMsgTrackInfo.js.map +0 -1
  95. package/dist/react-native/RaftProtocolDefs.d.ts +0 -30
  96. package/dist/react-native/RaftProtocolDefs.js +0 -48
  97. package/dist/react-native/RaftProtocolDefs.js.map +0 -1
  98. package/dist/react-native/RaftStreamHandler.d.ts +0 -38
  99. package/dist/react-native/RaftStreamHandler.js +0 -257
  100. package/dist/react-native/RaftStreamHandler.js.map +0 -1
  101. package/dist/react-native/RaftStruct.d.ts +0 -3
  102. package/dist/react-native/RaftStruct.js +0 -208
  103. package/dist/react-native/RaftStruct.js.map +0 -1
  104. package/dist/react-native/RaftSysTypeManager.d.ts +0 -14
  105. package/dist/react-native/RaftSysTypeManager.js +0 -53
  106. package/dist/react-native/RaftSysTypeManager.js.map +0 -1
  107. package/dist/react-native/RaftSystemType.d.ts +0 -28
  108. package/dist/react-native/RaftSystemType.js +0 -3
  109. package/dist/react-native/RaftSystemType.js.map +0 -1
  110. package/dist/react-native/RaftSystemUtils.d.ts +0 -136
  111. package/dist/react-native/RaftSystemUtils.js +0 -410
  112. package/dist/react-native/RaftSystemUtils.js.map +0 -1
  113. package/dist/react-native/RaftTypes.d.ts +0 -194
  114. package/dist/react-native/RaftTypes.js +0 -153
  115. package/dist/react-native/RaftTypes.js.map +0 -1
  116. package/dist/react-native/RaftUpdateEvents.d.ts +0 -33
  117. package/dist/react-native/RaftUpdateEvents.js +0 -46
  118. package/dist/react-native/RaftUpdateEvents.js.map +0 -1
  119. package/dist/react-native/RaftUpdateManager.d.ts +0 -61
  120. package/dist/react-native/RaftUpdateManager.js +0 -621
  121. package/dist/react-native/RaftUpdateManager.js.map +0 -1
  122. package/dist/react-native/RaftUtils.d.ts +0 -126
  123. package/dist/react-native/RaftUtils.js +0 -467
  124. package/dist/react-native/RaftUtils.js.map +0 -1
  125. package/dist/react-native/RaftWifiTypes.d.ts +0 -23
  126. package/dist/react-native/RaftWifiTypes.js +0 -43
  127. package/dist/react-native/RaftWifiTypes.js.map +0 -1
  128. package/dist/react-native/main.d.ts +0 -24
  129. package/dist/react-native/main.js +0 -49
  130. package/dist/react-native/main.js.map +0 -1
  131. package/eslint.config.mjs +0 -33
  132. package/examples/dashboard/package.json +0 -36
  133. package/examples/dashboard/src/CommandPanel.tsx +0 -147
  134. package/examples/dashboard/src/ConnManager.ts +0 -164
  135. package/examples/dashboard/src/DeviceActionsForm.tsx +0 -133
  136. package/examples/dashboard/src/DeviceAttrsForm.tsx +0 -49
  137. package/examples/dashboard/src/DeviceLineChart.tsx +0 -163
  138. package/examples/dashboard/src/DevicePanel.tsx +0 -166
  139. package/examples/dashboard/src/DevicesPanel.tsx +0 -58
  140. package/examples/dashboard/src/DispLedGrid.tsx +0 -110
  141. package/examples/dashboard/src/DispOneLed.tsx +0 -20
  142. package/examples/dashboard/src/LatencyTest.ts +0 -130
  143. package/examples/dashboard/src/LatencyTestPanel.tsx +0 -92
  144. package/examples/dashboard/src/Main.tsx +0 -234
  145. package/examples/dashboard/src/SettingsManager.ts +0 -67
  146. package/examples/dashboard/src/SettingsScreen.tsx +0 -174
  147. package/examples/dashboard/src/StatusPanel.tsx +0 -71
  148. package/examples/dashboard/src/SystemTypeCog/CogStateInfo.ts +0 -163
  149. package/examples/dashboard/src/SystemTypeCog/SystemTypeCog.ts +0 -91
  150. package/examples/dashboard/src/SystemTypeGeneric/StateInfoGeneric.ts +0 -30
  151. package/examples/dashboard/src/SystemTypeGeneric/SystemTypeGeneric.ts +0 -91
  152. package/examples/dashboard/src/SystemTypeMarty/RICAddOn.ts +0 -70
  153. package/examples/dashboard/src/SystemTypeMarty/RICAddOnBase.ts +0 -33
  154. package/examples/dashboard/src/SystemTypeMarty/RICAddOnManager.ts +0 -342
  155. package/examples/dashboard/src/SystemTypeMarty/RICCommsStats.ts +0 -170
  156. package/examples/dashboard/src/SystemTypeMarty/RICHWElem.ts +0 -123
  157. package/examples/dashboard/src/SystemTypeMarty/RICLEDPatternChecker.ts +0 -207
  158. package/examples/dashboard/src/SystemTypeMarty/RICROSSerial.ts +0 -464
  159. package/examples/dashboard/src/SystemTypeMarty/RICServoFaultDetector.ts +0 -146
  160. package/examples/dashboard/src/SystemTypeMarty/RICStateInfo.ts +0 -97
  161. package/examples/dashboard/src/SystemTypeMarty/RICSystemUtils.ts +0 -371
  162. package/examples/dashboard/src/SystemTypeMarty/RICTypes.ts +0 -20
  163. package/examples/dashboard/src/SystemTypeMarty/SystemTypeMarty.ts +0 -119
  164. package/examples/dashboard/src/index.html +0 -15
  165. package/examples/dashboard/src/index.tsx +0 -13
  166. package/examples/dashboard/src/styles.css +0 -408
  167. package/examples/dashboard/tsconfig.json +0 -18
  168. package/jest.config.js +0 -11
  169. package/src/RaftAttributeHandler.ts +0 -298
  170. package/src/RaftChannel.ts +0 -30
  171. package/src/RaftChannelBLE.native.ts +0 -604
  172. package/src/RaftChannelBLE.web.ts +0 -359
  173. package/src/RaftChannelBLEFactory.ts +0 -13
  174. package/src/RaftChannelBLEScanner.native.ts +0 -184
  175. package/src/RaftChannelWebSerial.ts +0 -408
  176. package/src/RaftChannelWebSocket.ts +0 -245
  177. package/src/RaftCommsStats.ts +0 -142
  178. package/src/RaftConnEvents.ts +0 -58
  179. package/src/RaftConnector.ts +0 -739
  180. package/src/RaftCustomAttrHandler.ts +0 -54
  181. package/src/RaftDeviceInfo.ts +0 -102
  182. package/src/RaftDeviceManager.ts +0 -607
  183. package/src/RaftDeviceMgrIF.ts +0 -33
  184. package/src/RaftDeviceMsg.ts +0 -20
  185. package/src/RaftDeviceStates.ts +0 -92
  186. package/src/RaftFileHandler.ts +0 -668
  187. package/src/RaftLog.ts +0 -70
  188. package/src/RaftMiniHDLC.ts +0 -396
  189. package/src/RaftMsgHandler.ts +0 -777
  190. package/src/RaftMsgTrackInfo.ts +0 -51
  191. package/src/RaftProtocolDefs.ts +0 -46
  192. package/src/RaftStreamHandler.ts +0 -328
  193. package/src/RaftStruct.ts +0 -209
  194. package/src/RaftSysTypeManager.ts +0 -60
  195. package/src/RaftSystemType.ts +0 -32
  196. package/src/RaftSystemUtils.ts +0 -487
  197. package/src/RaftTypes.ts +0 -278
  198. package/src/RaftUpdateEvents.ts +0 -48
  199. package/src/RaftUpdateManager.ts +0 -781
  200. package/src/RaftUtils.ts +0 -494
  201. package/src/RaftWifiTypes.ts +0 -36
  202. package/src/main.ts +0 -37
  203. package/testdata/TestDeviceTypeRecs.json +0 -492
  204. package/tsconfig.json +0 -30
  205. package/tsconfig.react-native.json +0 -29
@@ -1,119 +0,0 @@
1
- import { RaftSystemType } from "../../../../src/RaftSystemType";
2
- import { RaftLog, RaftSystemUtils, RaftOKFail, RaftConnEventFn, RaftEventFn, RaftPublishEvent, RaftPublishEventNames } from "../../../../src/main";
3
- import RICAddOnManager from "./RICAddOnManager";
4
- import RICCommsStats from "./RICCommsStats";
5
- import RICLEDPatternChecker from "./RICLEDPatternChecker";
6
- import RICServoFaultDetector from "./RICServoFaultDetector";
7
- import { RICStateInfo } from "./RICStateInfo";
8
-
9
- export default class SystemTypeMarty implements RaftSystemType {
10
- nameForDialogs = "Robotical Marty";
11
- defaultWiFiHostname = "Marty";
12
- firmwareDestName = "ricfw";
13
- normalFileDestName = "fs";
14
- connectorOptions = {wsSuffix: "ws", bleConnItvlMs: 7.5};
15
- BLEServiceUUIDs = ["aa76677e-9cfd-4626-a510-0d305be57c8d"];
16
- BLECmdUUID = "aa76677e-9cfd-4626-a510-0d305be57c8e";
17
- BLERespUUID = "aa76677e-9cfd-4626-a510-0d305be57c8f";
18
-
19
- // LED Pattern checker
20
- private _ledPatternChecker: RICLEDPatternChecker = new RICLEDPatternChecker();
21
- getLEDPatternChecker(): RICLEDPatternChecker {
22
- return this._ledPatternChecker;
23
- }
24
-
25
- // Latest data from servos, IMU, etc
26
- private _ricStateInfo: RICStateInfo = new RICStateInfo();
27
- getStateInfo(): RICStateInfo {
28
- return this._ricStateInfo;
29
- }
30
-
31
- // Add-on Manager
32
- private _addOnManager = new RICAddOnManager();
33
- getAddOnManager(): RICAddOnManager {
34
- return this._addOnManager;
35
- }
36
-
37
- // Properties for Marty
38
- private _ricServoFaultDetector: RICServoFaultDetector | null = null;
39
- getRICServoFaultDetector(): RICServoFaultDetector {
40
- return this._ricServoFaultDetector!;
41
- }
42
-
43
- // RIC comms stats
44
- private _commsStats = new RICCommsStats();
45
- getCommsStats(): RICCommsStats {
46
- return this._commsStats;
47
- }
48
-
49
- // Event handler
50
- private _onEvent: RaftEventFn | null = null;
51
-
52
- // Raft system utils
53
- private _systemUtils: RaftSystemUtils | null = null;
54
-
55
- // Setup
56
- setup(systemUtils: RaftSystemUtils, onEvent: RaftEventFn | null): void {
57
- this._systemUtils = systemUtils;
58
- this._onEvent = onEvent;
59
- this._ricServoFaultDetector = new RICServoFaultDetector(this._systemUtils!.getMsgHandler(), this._ricStateInfo);
60
- }
61
-
62
- // Subscribe for updates
63
- async subscribeForUpdates(systemUtils: RaftSystemUtils, enable: boolean): Promise<void> {
64
- // Subscription rate
65
- const subscribeRateHz = 10;
66
- try {
67
- const subscribeDisable = '{"cmdName":"subscription","action":"update",' +
68
- '"pubRecs":[' +
69
- `{"name":"MultiStatus","rateHz":0,}` +
70
- '{"name":"PowerStatus","rateHz":0},' +
71
- `{"name":"AddOnStatus","rateHz":0}` +
72
- ']}';
73
- const subscribeEnable = '{"cmdName":"subscription","action":"update",' +
74
- '"pubRecs":[' +
75
- `{"name":"MultiStatus","rateHz":${subscribeRateHz.toString()}}` +
76
- `{"name":"PowerStatus","rateHz":1.0},` +
77
- `{"name":"AddOnStatus","rateHz":${subscribeRateHz.toString()}}` +
78
- ']}';
79
-
80
- const msgHandler = systemUtils.getMsgHandler();
81
- const ricResp = await msgHandler.sendRICRESTCmdFrame<RaftOKFail>(
82
- enable ? subscribeEnable : subscribeDisable
83
- );
84
-
85
- // Debug
86
- RaftLog.debug(`subscribe enable/disable returned ${JSON.stringify(ricResp)}`);
87
- } catch (error: unknown) {
88
- RaftLog.warn(`getRICCalibInfo Failed subscribe for updates ${error}`);
89
- }
90
- }
91
-
92
- // Invalidate state
93
- stateIsInvalid(): void {
94
- if (this._systemUtils) {
95
- this._systemUtils.invalidate();
96
- }
97
- }
98
-
99
- // Other message type
100
- rxOtherMsgType(payload: Uint8Array, frameTimeMs: number) {
101
- // RICLog.debug(`onRxROSSerialMsg payload ${RaftUtils.bufferToHex(payload)}`);
102
- RaftLog.verbose(`onRxROSSerialMsg payloadLen ${payload.length}`);
103
- const topicIDs = this._ricStateInfo.updateFromROSSerialMsg(payload, this._commsStats, this._addOnManager, frameTimeMs);
104
-
105
- // Call event handler if registered
106
- if (this._onEvent) {
107
- this._onEvent("pub", RaftPublishEvent.PUBLISH_EVENT_DATA, RaftPublishEventNames[RaftPublishEvent.PUBLISH_EVENT_DATA],
108
- {
109
- topicIDs: topicIDs,
110
- payload: payload,
111
- frameTimeMs: frameTimeMs
112
- });
113
- }
114
- }
115
-
116
- // Device manager interface
117
- deviceMgrIF = this._ricStateInfo;
118
- }
119
-
@@ -1,15 +0,0 @@
1
- <!-- index.html -->
2
- <!DOCTYPE html>
3
- <html lang="en">
4
- <head>
5
- <meta charset="UTF-8">
6
- <meta name="viewport" content="width=device-width,initial-scale=1">
7
- <meta name="description" content="RaftJS Dashboard">
8
- <title>RaftJS Dashboard</title>
9
- <link rel="icon" href="data:image/svg+xml;base64, PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB3aWR0aD0iNTExIgogICBoZWlnaHQ9IjUxMSIKICAgdmlld0JveD0iMCAwIDEzNS4yMDIwOSAxMzUuMjAyMDkiCiAgIHZlcnNpb249IjEuMSIKICAgaWQ9InN2ZzE3OCIKICAgaW5rc2NhcGU6dmVyc2lvbj0iMS4zLjIgKDA5MWUyMGUsIDIwMjMtMTEtMjUsIGN1c3RvbSkiCiAgIHNvZGlwb2RpOmRvY25hbWU9IlNjYWRlclVpTG9nby5zdmciCiAgIGlua3NjYXBlOmV4cG9ydC1maWxlbmFtZT0ibG9nbzUxMi5wbmciCiAgIGlua3NjYXBlOmV4cG9ydC14ZHBpPSI5Ni4xODc4NjYiCiAgIGlua3NjYXBlOmV4cG9ydC15ZHBpPSI5Ni4xODc4NjYiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgogIDxzb2RpcG9kaTpuYW1lZHZpZXcKICAgICBpZD0ibmFtZWR2aWV3MTgwIgogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgICAgaW5rc2NhcGU6c2hvd3BhZ2VzaGFkb3c9IjIiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAiCiAgICAgaW5rc2NhcGU6cGFnZWNoZWNrZXJib2FyZD0iMCIKICAgICBpbmtzY2FwZTpkZXNrY29sb3I9IiNkMWQxZDEiCiAgICAgaW5rc2NhcGU6ZG9jdW1lbnQtdW5pdHM9Im1tIgogICAgIHNob3dncmlkPSJmYWxzZSIKICAgICBzaG93Z3VpZGVzPSJ0cnVlIgogICAgIGlua3NjYXBlOnpvb209IjEiCiAgICAgaW5rc2NhcGU6Y3g9IjU3OCIKICAgICBpbmtzY2FwZTpjeT0iNTM2LjUiCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIzODQwIgogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjE1MjkiCiAgICAgaW5rc2NhcGU6d2luZG93LXg9IjI1NTIiCiAgICAgaW5rc2NhcGU6d2luZG93LXk9Ii04IgogICAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjEiCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ibGF5ZXIxIj4KICAgIDxzb2RpcG9kaTpndWlkZQogICAgICAgcG9zaXRpb249IjM4Ljc1MTcwNSw1NS4yMDIwODIiCiAgICAgICBvcmllbnRhdGlvbj0iMCwxIgogICAgICAgaWQ9Imd1aWRlMzg4IgogICAgICAgaW5rc2NhcGU6bG9ja2VkPSJmYWxzZSIKICAgICAgIGlua3NjYXBlOmxhYmVsPSIiCiAgICAgICBpbmtzY2FwZTpjb2xvcj0icmdiKDAsMTM0LDIyOSkiIC8+CiAgICA8c29kaXBvZGk6Z3VpZGUKICAgICAgIHBvc2l0aW9uPSI2Ny43NTAwMDMsMTQzLjQwNDE3IgogICAgICAgb3JpZW50YXRpb249Ii0xLDAiCiAgICAgICBpZD0iZ3VpZGUzOTAiCiAgICAgICBpbmtzY2FwZTpsb2NrZWQ9ImZhbHNlIgogICAgICAgaW5rc2NhcGU6bGFiZWw9IiIKICAgICAgIGlua3NjYXBlOmNvbG9yPSJyZ2IoMCwxMzQsMjI5KSIgLz4KICAgIDxzb2RpcG9kaTpndWlkZQogICAgICAgcG9zaXRpb249IjEzNSw2Ni4wODUyNDUiCiAgICAgICBvcmllbnRhdGlvbj0iLTEsMCIKICAgICAgIGlkPSJndWlkZTM5MiIKICAgICAgIGlua3NjYXBlOmxvY2tlZD0iZmFsc2UiCiAgICAgICBpbmtzY2FwZTpsYWJlbD0iIgogICAgICAgaW5rc2NhcGU6Y29sb3I9InJnYigwLDEzNCwyMjkpIiAvPgogICAgPHNvZGlwb2RpOmd1aWRlCiAgICAgICBwb3NpdGlvbj0iMzUuMDAwMDAyLDkyLjY5MDg5MyIKICAgICAgIG9yaWVudGF0aW9uPSItMSwwIgogICAgICAgaWQ9Imd1aWRlMzk0IgogICAgICAgaW5rc2NhcGU6bG9ja2VkPSJmYWxzZSIKICAgICAgIGlua3NjYXBlOmxhYmVsPSIiCiAgICAgICBpbmtzY2FwZTpjb2xvcj0icmdiKDAsMTM0LDIyOSkiIC8+CiAgICA8c29kaXBvZGk6Z3VpZGUKICAgICAgIHBvc2l0aW9uPSIxNDkuMjc3MzQsLTE0Ljc5NzkyIgogICAgICAgb3JpZW50YXRpb249IjAsMSIKICAgICAgIGlkPSJndWlkZTM5NiIKICAgICAgIGlua3NjYXBlOmxvY2tlZD0iZmFsc2UiCiAgICAgICBpbmtzY2FwZTpsYWJlbD0iIgogICAgICAgaW5rc2NhcGU6Y29sb3I9InJnYigwLDEzNCwyMjkpIiAvPgogICAgPHNvZGlwb2RpOmd1aWRlCiAgICAgICBwb3NpdGlvbj0iNDUuMDAwMDAzLDk4LjQxMzY5MyIKICAgICAgIG9yaWVudGF0aW9uPSItMSwwIgogICAgICAgaWQ9Imd1aWRlNDMxIgogICAgICAgaW5rc2NhcGU6bG9ja2VkPSJmYWxzZSIKICAgICAgIGlua3NjYXBlOmxhYmVsPSIiCiAgICAgICBpbmtzY2FwZTpjb2xvcj0icmdiKDAsMTM0LDIyOSkiIC8+CiAgICA8c29kaXBvZGk6Z3VpZGUKICAgICAgIHBvc2l0aW9uPSItNDEuMTAyMzkyLC00Ljc5NzkyMTEiCiAgICAgICBvcmllbnRhdGlvbj0iMCwxIgogICAgICAgaWQ9Imd1aWRlNDMzIgogICAgICAgaW5rc2NhcGU6bG9ja2VkPSJmYWxzZSIKICAgICAgIGlua3NjYXBlOmxhYmVsPSIiCiAgICAgICBpbmtzY2FwZTpjb2xvcj0icmdiKDAsMTM0LDIyOSkiIC8+CiAgICA8c29kaXBvZGk6Z3VpZGUKICAgICAgIHBvc2l0aW9uPSIxMjUsODQuMDc5NzE3IgogICAgICAgb3JpZW50YXRpb249Ii0xLDAiCiAgICAgICBpZD0iZ3VpZGU0MzUiCiAgICAgICBpbmtzY2FwZTpsb2NrZWQ9ImZhbHNlIgogICAgICAgaW5rc2NhcGU6bGFiZWw9IiIKICAgICAgIGlua3NjYXBlOmNvbG9yPSJyZ2IoMCwxMzQsMjI5KSIgLz4KICAgIDxzb2RpcG9kaTpndWlkZQogICAgICAgcG9zaXRpb249IjE0LjMxNDI2Niw1MS4yMDIwODUiCiAgICAgICBvcmllbnRhdGlvbj0iMCwxIgogICAgICAgaWQ9Imd1aWRlNDM3IgogICAgICAgaW5rc2NhcGU6bG9ja2VkPSJmYWxzZSIKICAgICAgIGlua3NjYXBlOmxhYmVsPSIiCiAgICAgICBpbmtzY2FwZTpjb2xvcj0icmdiKDAsMTM0LDIyOSkiIC8+CiAgICA8c29kaXBvZGk6Z3VpZGUKICAgICAgIHBvc2l0aW9uPSI1NS4wMDAwMDMsNzMuODg3ODUzIgogICAgICAgb3JpZW50YXRpb249Ii0xLDAiCiAgICAgICBpZD0iZ3VpZGU0MzkiCiAgICAgICBpbmtzY2FwZTpsb2NrZWQ9ImZhbHNlIgogICAgICAgaW5rc2NhcGU6bGFiZWw9IiIKICAgICAgIGlua3NjYXBlOmNvbG9yPSJyZ2IoMCwxMzQsMjI5KSIgLz4KICAgIDxzb2RpcG9kaTpndWlkZQogICAgICAgcG9zaXRpb249Ijk3Ljc1MDAwNSwxNTUuODM5NTkiCiAgICAgICBvcmllbnRhdGlvbj0iLTEsMCIKICAgICAgIGlkPSJndWlkZTQ0MSIKICAgICAgIGlua3NjYXBlOmxvY2tlZD0iZmFsc2UiCiAgICAgICBpbmtzY2FwZTpsYWJlbD0iIgogICAgICAgaW5rc2NhcGU6Y29sb3I9InJnYigwLDEzNCwyMjkpIiAvPgogICAgPHNvZGlwb2RpOmd1aWRlCiAgICAgICBwb3NpdGlvbj0iLTM2LjYwMzYyMSw1LjIwMjA3OTQiCiAgICAgICBvcmllbnRhdGlvbj0iMCwxIgogICAgICAgaWQ9Imd1aWRlNDQzIgogICAgICAgaW5rc2NhcGU6bG9ja2VkPSJmYWxzZSIKICAgICAgIGlua3NjYXBlOmxhYmVsPSIiCiAgICAgICBpbmtzY2FwZTpjb2xvcj0icmdiKDAsMTM0LDIyOSkiIC8+CiAgICA8c29kaXBvZGk6Z3VpZGUKICAgICAgIHBvc2l0aW9uPSItMjAuNjUzNDQsNDcuMjAyMDg1IgogICAgICAgb3JpZW50YXRpb249IjAsMSIKICAgICAgIGlkPSJndWlkZTQ0NSIKICAgICAgIGlua3NjYXBlOmxvY2tlZD0iZmFsc2UiCiAgICAgICBpbmtzY2FwZTpsYWJlbD0iIgogICAgICAgaW5rc2NhcGU6Y29sb3I9InJnYigwLDEzNCwyMjkpIiAvPgogIDwvc29kaXBvZGk6bmFtZWR2aWV3PgogIDxkZWZzCiAgICAgaWQ9ImRlZnMxNzUiPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ0ODEzIgogICAgICAgaW5rc2NhcGU6c3dhdGNoPSJzb2xpZCI+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMwMDAwMDA7c3RvcC1vcGFjaXR5OjE7IgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIGlkPSJzdG9wNDgxMSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDQ4MTMiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ0ODE1IgogICAgICAgeDE9IjY0LjY0NDQzNyIKICAgICAgIHkxPSI2NS44Njc1ODUiCiAgICAgICB4Mj0iOTcuNDU5NTYxIgogICAgICAgeTI9IjY1Ljg2NzU4NSIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiAvPgogICAgPGZpbHRlcgogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgc3R5bGU9ImNvbG9yLWludGVycG9sYXRpb24tZmlsdGVyczpzUkdCIgogICAgICAgaWQ9ImZpbHRlcjEwIgogICAgICAgeD0iLTAuMDMyNzgxOTciCiAgICAgICB5PSItMC4wMjQ3MTkxNSIKICAgICAgIHdpZHRoPSIxLjA2NTU2MzkiCiAgICAgICBoZWlnaHQ9IjEuMDUzNzIxMyI+CiAgICAgIDxmZUdhdXNzaWFuQmx1cgogICAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICAgIHN0ZERldmlhdGlvbj0iMC41MzI1ODIwNCIKICAgICAgICAgaWQ9ImZlR2F1c3NpYW5CbHVyMTAiIC8+CiAgICA8L2ZpbHRlcj4KICAgIDxmaWx0ZXIKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHN0eWxlPSJjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM6c1JHQiIKICAgICAgIGlkPSJmaWx0ZXIxMSIKICAgICAgIHg9Ii0wLjAzNzc2MjYyMiIKICAgICAgIHk9Ii0wLjAyODE4ODY5OCIKICAgICAgIHdpZHRoPSIxLjA3NTUyNTIiCiAgICAgICBoZWlnaHQ9IjEuMDYxNjkyOCI+CiAgICAgIDxmZUdhdXNzaWFuQmx1cgogICAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICAgIHN0ZERldmlhdGlvbj0iMC40MjU0MjA3MSIKICAgICAgICAgaWQ9ImZlR2F1c3NpYW5CbHVyMTEiIC8+CiAgICA8L2ZpbHRlcj4KICAgIDxmaWx0ZXIKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHN0eWxlPSJjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM6c1JHQiIKICAgICAgIGlkPSJmaWx0ZXIxMiIKICAgICAgIHg9Ii0wLjAyOTI5NjUwOSIKICAgICAgIHk9Ii0wLjAxNzUwNzUyNCIKICAgICAgIHdpZHRoPSIxLjA1ODU5MyIKICAgICAgIGhlaWdodD0iMS4wMzUwMTUiPgogICAgICA8ZmVHYXVzc2lhbkJsdXIKICAgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgICBzdGREZXZpYXRpb249IjAuMzU1NDU5NiIKICAgICAgICAgaWQ9ImZlR2F1c3NpYW5CbHVyMTIiIC8+CiAgICA8L2ZpbHRlcj4KICA8L2RlZnM+CiAgPGcKICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSIKICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIgogICAgIGlkPSJsYXllcjEiPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTpub3JtYWw7ZmlsbDojZTY3MTFlO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDo0O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOmJldmVsO3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxO2ZpbHRlcjp1cmwoI2ZpbHRlcjEwKSIKICAgICAgIGQ9Ik0gMTcuODAyMDgzLDEyMy4wMTI1IFYgNTMuMDEyNTAxIGwgNTAsLTQzLjAzMjgyMSA0OS45OTk5OTcsNDMuMDMyODIxIFYgMTIzLjAxMjUgWiIKICAgICAgIGlkPSJwYXRoNDA3IgogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2MiCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgxLjE2NzE5ODQsMCwwLDEuMTE0OTM2MiwtMTAuOTM5NTI4LC04LjE5OTc5MjkpIiAvPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOiNlNjcxMWU7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjQ7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46YmV2ZWw7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjE7ZmlsdGVyOnVybCgjZmlsdGVyMTEpIgogICAgICAgZD0iTSAyNy44MDIwODMsMTEzLjAxMjUgViA1Ny4wMTI1MDEgbCA0MCwtMzQuMTY4Mjg3IDM5Ljk5OTk5NywzNC4xNjgyODcgViAxMTMuMDEyNSBaIgogICAgICAgaWQ9InBhdGg0MDctOSIKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2NjIgogICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMS4xMDQ3NjAzLDAsMCwxLjA5MzkzODYsLTUuNTE1NDYxNywtNS44NzQ0NDU0KSIgLz4KICAgIDxyZWN0CiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDowLjI2NDU4MztzdHJva2UtbGluZWpvaW46YmV2ZWw7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjA7ZmlsbC1vcGFjaXR5OjEiCiAgICAgICBpZD0icmVjdDI3NzciCiAgICAgICB3aWR0aD0iMTM1LjIwMjA5IgogICAgICAgaGVpZ2h0PSIxMzUuMjAyMDkiCiAgICAgICB4PSIwIgogICAgICAgeT0iMCIgLz4KICAgIDx0ZXh0CiAgICAgICB4bWw6c3BhY2U9InByZXNlcnZlIgogICAgICAgc3R5bGU9ImZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtdmFyaWFudDpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc3RyZXRjaDpub3JtYWw7Zm9udC1zaXplOjk3LjEwNDhweDtsaW5lLWhlaWdodDoxLjI1O2ZvbnQtZmFtaWx5OkNhbGlicmk7LWlua3NjYXBlLWZvbnQtc3BlY2lmaWNhdGlvbjonQ2FsaWJyaSwgTm9ybWFsJztmb250LXZhcmlhbnQtbGlnYXR1cmVzOm5vcm1hbDtmb250LXZhcmlhbnQtY2Fwczpub3JtYWw7Zm9udC12YXJpYW50LW51bWVyaWM6bm9ybWFsO2ZvbnQtdmFyaWFudC1lYXN0LWFzaWFuOm5vcm1hbDttaXgtYmxlbmQtbW9kZTpub3JtYWw7ZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDowLjUwNTIwNjtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MTtmaWx0ZXI6dXJsKCNmaWx0ZXIxMikiCiAgICAgICB4PSIzOS4zOTM2NjEiCiAgICAgICB5PSIxMTYuMTE2OCIKICAgICAgIGlkPSJ0ZXh0Mjg1NCIKICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDEuMjIwMTU3OCwwLDAsMC45NDYxNTE3NSwtNS43NTQ3Mzk5LC0yLjU0ODUyODQpIj48dHNwYW4KICAgICAgICAgc29kaXBvZGk6cm9sZT0ibGluZSIKICAgICAgICAgaWQ9InRzcGFuMjg1MiIKICAgICAgICAgeD0iMzkuMzkzNjYxIgogICAgICAgICB5PSIxMTYuMTE2OCIKICAgICAgICAgc3R5bGU9ImZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtdmFyaWFudDpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc3RyZXRjaDpub3JtYWw7Zm9udC1zaXplOjk3LjEwNDhweDtmb250LWZhbWlseTpDYWxpYnJpOy1pbmtzY2FwZS1mb250LXNwZWNpZmljYXRpb246J0NhbGlicmksIE5vcm1hbCc7Zm9udC12YXJpYW50LWxpZ2F0dXJlczpub3JtYWw7Zm9udC12YXJpYW50LWNhcHM6bm9ybWFsO2ZvbnQtdmFyaWFudC1udW1lcmljOm5vcm1hbDtmb250LXZhcmlhbnQtZWFzdC1hc2lhbjpub3JtYWw7ZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDowLjUwNTIwNjtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSI+UzwvdHNwYW4+PC90ZXh0PgogIDwvZz4KPC9zdmc+Cg==" type="image/svg+xml" />
10
- </head>
11
- <body>
12
- <div id="root"></div>
13
- <script type="module" src="./index.tsx"></script>
14
- </body>
15
- </html>
@@ -1,13 +0,0 @@
1
- import React from 'react';
2
- import { createRoot } from 'react-dom/client';
3
- import Main from './Main';
4
- import './styles.css';
5
-
6
- // Find the root element
7
- const rootElement = document.getElementById('root');
8
-
9
- // Create a root
10
- const root = createRoot(rootElement!);
11
-
12
- // Render the Main component into the root
13
- root.render(<Main />);
@@ -1,408 +0,0 @@
1
- /* Main.css */
2
-
3
- /* General styling for the dark theme */
4
- body,
5
- .device-panel,
6
- .device-block-heading,
7
- .device-attrs-and-actions,
8
- .device-attrs-form,
9
- .device-actions-form,
10
- .device-line-chart {
11
- /* Dark background for all components */
12
- color: #fff;
13
- /* Light text for better readability */
14
- font-family: 'Segoe UI', 'Roboto', 'Oxygen',
15
- 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
16
- sans-serif;
17
- -webkit-font-smoothing: antialiased;
18
- -moz-osx-font-smoothing: grayscale;
19
- background-color: #282c34;
20
- color: #ffffff;
21
- }
22
-
23
- code {
24
- font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',
25
- monospace;
26
- }
27
-
28
- .header {
29
- display: flex;
30
- align-items: center;
31
- justify-content: space-between;
32
- padding: 10px 20px;
33
- border: 1px solid #666;
34
- /* Adjusting border color for dark theme */
35
- border-radius: 8px;
36
- margin-bottom: 10px;
37
- }
38
-
39
- h1 {
40
- margin: 0;
41
- }
42
-
43
- .always-enabled {
44
- pointer-events: auto !important;
45
- /* Ensures interactions are always enabled */
46
- }
47
-
48
- .content-body {
49
- display: flex;
50
- flex-direction: column;
51
- gap: 10px;
52
- }
53
-
54
- .content-row {
55
- display: flex;
56
- justify-content: space-between;
57
- margin-bottom: 10px;
58
- flex-direction: col;
59
- }
60
-
61
- .conn-indication {
62
- display: flex;
63
- align-items: center;
64
- justify-content: center;
65
- padding: 10px;
66
- border-radius: 8px;
67
- margin-bottom: 10px;
68
- }
69
-
70
- .action-button {
71
- color: #fff;
72
- cursor: pointer;
73
- background-color: #007bff;
74
- border: none;
75
- border-radius: 4px;
76
- padding: 10px 20px;
77
- font-size: 1rem;
78
- }
79
-
80
- .settings-item {
81
- display: flex;
82
- justify-content: space-between;
83
- align-items: center;
84
- padding: 10px;
85
- border: 1px solid #666;
86
- border-radius: 4px;
87
- margin-bottom: 10px;
88
- }
89
-
90
- .info-boxes {
91
- display: flex;
92
- justify-content: flex-start;
93
- margin-bottom: 10px;
94
- gap: 10px;
95
- }
96
-
97
- .connected-panel {
98
- display: flex;
99
- justify-content: flex-start;
100
- gap: 20px;
101
- align-items: stretch;
102
- flex-direction: row;
103
- width: 100%;
104
- /* Space between the Connected panel and StatusPanel */
105
- }
106
-
107
- .info-box {
108
- display: flex;
109
- flex-direction: column;
110
- align-items: center;
111
- border-radius: 10px;
112
- padding: 10px 20px;
113
- border: 1px solid #666;
114
- }
115
-
116
- .ip-addr-input {
117
- border: 1px solid #ccc;
118
- border-radius: 4px;
119
- margin-bottom: 10px;
120
- padding: 10px;
121
- width: 100%;
122
- }
123
-
124
- .serial-no-input {
125
- border: 1px solid #ccc;
126
- border-radius: 4px;
127
- margin-bottom: 10px;
128
- padding: 10px;
129
- width: 100%;
130
- }
131
-
132
- .command-input {
133
- padding: 10px;
134
- margin-bottom: 10px;
135
- border: 1px solid #ccc;
136
- border-radius: 4px;
137
- }
138
-
139
- .send-command-button {
140
- padding: 10px 20px;
141
- border: none;
142
- border-radius: 4px;
143
- background-color: #007bff;
144
- color: white;
145
- cursor: pointer;
146
- font-size: 1rem;
147
- }
148
-
149
- .send-command-button:hover {
150
- background-color: #0056b3;
151
- }
152
-
153
- .info {
154
- display: flex;
155
- flex-direction: column;
156
- justify-content: space-between;
157
- }
158
-
159
- .info-line {
160
- display: flex;
161
- justify-content: space-between;
162
- }
163
-
164
- .info-label {
165
- font-weight: bold;
166
- margin-right: 10px;
167
- }
168
-
169
- .info-value {
170
- font-weight: normal;
171
- }
172
-
173
- .info-columns {
174
- display: flex;
175
- gap: 20px;
176
- }
177
-
178
- .info-column {
179
- display: flex;
180
- flex-direction: column;
181
- }
182
-
183
- .collapsible-section {
184
- display: flex;
185
- flex-direction: column;
186
- margin-bottom: 10px;
187
- }
188
-
189
- .collapsible-header {
190
- background-color: #444;
191
- color: #fff;
192
- border: none;
193
- padding: 10px;
194
- cursor: pointer;
195
- text-align: left;
196
- width: 100%;
197
- font-size: 16px;
198
- outline: none;
199
- border-radius: 4px;
200
- }
201
-
202
- .collapsible-content {
203
- padding: 10px;
204
- background-color: #333;
205
- border: 1px solid #666;
206
- border-radius: 4px;
207
- }
208
-
209
- .command-input-column {
210
- display: flex;
211
- flex-direction: column;
212
- }
213
-
214
- .example-commands-column {
215
- display: flex;
216
- flex-direction: column;
217
- }
218
-
219
- .example-command {
220
- display: flex;
221
- justify-content: space-between;
222
- align-items: center;
223
- margin-bottom: 5px;
224
- }
225
-
226
- .example-load-button {
227
- padding: 5px 10px;
228
- background-color: #007bff;
229
- border: none;
230
- border-radius: 4px;
231
- color: #fff;
232
- cursor: pointer;
233
- margin-left: 10px;
234
- font-size: 1rem;
235
- }
236
-
237
- .example-load-button:hover {
238
- background-color: #0056b3;
239
- }
240
-
241
- /* Style for the overall container that holds all devices */
242
- .devices-container {
243
- display: flex;
244
- flex-direction: column;
245
- gap: 10px;
246
- /* Adds space between each DeviceScreen */
247
- }
248
-
249
- /* Style for each individual device screen */
250
- .device-panel {
251
- display: flex;
252
- flex-direction: column;
253
- /* Stack heading and data blocks vertically */
254
- gap: 10px;
255
- /* Adds space between the heading and the data block */
256
- padding: 10px;
257
- border: 1px solid #666;
258
- /* Adjusting border color for dark theme */
259
- border-radius: 8px;
260
- }
261
-
262
- .device-panel.offline {
263
- opacity: 0.5;
264
- /* Reduces the opacity to 50% */
265
- background-color: rgba(50, 50, 50, 0.8);
266
- /* Optional: Adds a grey tint */
267
- pointer-events: none;
268
- /* Disables interactions with all child elements */
269
- }
270
-
271
- /* Style for the device heading */
272
- .device-block-heading {
273
- display: flex;
274
- padding: 5px 10px;
275
- /* Padding inside the heading block */
276
- background: #444;
277
- /* Slightly lighter dark background for distinction */
278
- border-radius: 4px;
279
- /* Slight rounding of corners */
280
- }
281
-
282
- /* Style for the text inside the heading */
283
- .device-block-heading-text {
284
- font-weight: bold;
285
- /* Keep heading text bold */
286
- }
287
-
288
- /* Style for the data block containing the form and chart */
289
- .device-block-data {
290
- display: flex;
291
- gap: 20px;
292
- /* Space between the form and the chart */
293
- align-items: flex-start;
294
- /* Align items at their top edge */
295
- min-height: 10rem;
296
- /* Minimum height to ensure sufficient visibility */
297
- }
298
-
299
- .device-attrs-and-actions {
300
- display: flex;
301
- flex-direction: column;
302
- gap: 10px;
303
- /* Space between the form and the actions */
304
- }
305
-
306
-
307
- /* Styles for the form and chart to adjust space */
308
- .device-attrs-form {
309
- flex: 0 1 auto;
310
- /* Don't grow, but allow shrinking */
311
- width: auto;
312
- /* Adjust based on content or set a max-width */
313
- min-width: 200px;
314
- /* Ensure it doesn't shrink too much */
315
- padding: 10px;
316
- border: 1px solid #666;
317
- /* Adjusting border color for dark theme */
318
- border-radius: 4px;
319
- background: #444;
320
- /* Slightly lighter dark background for distinction */
321
- }
322
-
323
- .device-actions-form {
324
- flex: 0 1 auto;
325
- /* Don't grow, but allow shrinking */
326
- width: auto;
327
- /* Adjust based on content or set a max-width */
328
- min-width: 200px;
329
- /* Ensure it doesn't shrink too much */
330
- padding: 10px;
331
- border: 1px solid #666;
332
- /* Adjusting border color for dark theme */
333
- border-radius: 4px;
334
- background: #444;
335
- /* Slightly lighter dark background for distinction */
336
- }
337
-
338
- .device-line-chart {
339
- flex: 1 1 auto;
340
- min-width: 50%;
341
- padding: 10px;
342
- border: 1px solid #666;
343
- /* Adjusting border color for dark theme */
344
- border-radius: 4px;
345
- min-height: 15rem;
346
- /* Setting a minimum height to ensure the chart is clearly visible */
347
- height: 25vh;
348
- /* Chart is approximately 1/4 of the viewport height in landscape */
349
- }
350
-
351
- .menu-icon,
352
- .header-menu-icon {
353
- cursor: pointer;
354
- font-size: 1.5rem;
355
- margin-left: auto;
356
- margin-right: 10px;
357
- color: #fff;
358
- }
359
-
360
- .dropdown-menu {
361
- position: absolute;
362
- right: 70px;
363
- background-color: #444;
364
- border: 1px solid #666;
365
- border-radius: 4px;
366
- padding: 5px;
367
- z-index: 10;
368
- }
369
-
370
- .header .dropdown-menu {
371
- margin-top: 30px;
372
- }
373
-
374
- .menu-item {
375
- padding: 10px;
376
- cursor: pointer;
377
- color: #fff;
378
- }
379
-
380
- .menu-item:hover {
381
- background-color: #555;
382
- }
383
-
384
- /* Adjust height for portrait orientation */
385
- @media (orientation: portrait) {
386
- .device-line-chart {
387
- height: 16.67vh;
388
- /* Chart is approximately 1/6 of the viewport height in portrait */
389
- }
390
- }
391
-
392
- /* Responsive adjustments for smaller screens */
393
- @media (max-width: 600px) {
394
-
395
- .device-line-chart,
396
- .device-attrs-form {
397
- height: 25vh;
398
- /* Adjust height to a suitable value on small screens */
399
- }
400
- }
401
-
402
- /* Considerations for very large screens or high aspect ratios */
403
- @media (min-width: 1200px) {
404
- .device-line-chart {
405
- height: 20vh;
406
- /* Slightly reduce the height for very wide screens */
407
- }
408
- }
@@ -1,18 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "jsx": "react",
4
- "esModuleInterop": true,
5
- "resolveJsonModule": true,
6
- "module": "esnext",
7
- "target": "es2017",
8
- "strict": true,
9
- "moduleResolution": "node",
10
- "lib": [
11
- "ES2017",
12
- "DOM"
13
- ]
14
- },
15
- "include": [
16
- "src"
17
- ]
18
- }
package/jest.config.js DELETED
@@ -1,11 +0,0 @@
1
- module.exports = {
2
- roots: ['<rootDir>'],
3
- testMatch: [
4
- "**/__tests__/**/*.+(ts|tsx|js)",
5
- "**/?(*.)+(spec|test).+(ts|tsx|js)"
6
- ],
7
- transform: {
8
- "^.+\\.(ts|tsx)$": "ts-jest"
9
- },
10
- }
11
-