@robdobsn/raftjs 1.8.5 → 1.11.5

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 (240) hide show
  1. package/.editorconfig +14 -0
  2. package/.gitattributes +11 -0
  3. package/.nvmrc +1 -0
  4. package/TODO.md +1 -0
  5. package/dist/react-native/RaftAttributeHandler.d.ts +14 -0
  6. package/dist/react-native/RaftAttributeHandler.js +375 -0
  7. package/dist/react-native/RaftAttributeHandler.js.map +1 -0
  8. package/dist/react-native/RaftChannel.d.ts +20 -0
  9. package/dist/react-native/RaftChannel.js +12 -0
  10. package/dist/react-native/RaftChannel.js.map +1 -0
  11. package/dist/react-native/RaftChannelBLE.native.d.ts +95 -0
  12. package/dist/react-native/RaftChannelBLE.native.js +483 -0
  13. package/dist/react-native/RaftChannelBLE.native.js.map +1 -0
  14. package/dist/react-native/RaftChannelBLE.web.d.ts +40 -0
  15. package/dist/react-native/RaftChannelBLE.web.js +302 -0
  16. package/dist/react-native/RaftChannelBLE.web.js.map +1 -0
  17. package/dist/react-native/RaftChannelBLEFactory.d.ts +10 -0
  18. package/dist/react-native/RaftChannelBLEFactory.js +17 -0
  19. package/dist/react-native/RaftChannelBLEFactory.js.map +1 -0
  20. package/dist/react-native/RaftChannelBLEScanner.native.d.ts +18 -0
  21. package/dist/react-native/RaftChannelBLEScanner.native.js +138 -0
  22. package/dist/react-native/RaftChannelBLEScanner.native.js.map +1 -0
  23. package/dist/react-native/RaftChannelSimulated.d.ts +42 -0
  24. package/dist/react-native/RaftChannelSimulated.js +1001 -0
  25. package/dist/react-native/RaftChannelSimulated.js.map +1 -0
  26. package/dist/react-native/RaftChannelWebSerial.d.ts +39 -0
  27. package/dist/react-native/RaftChannelWebSerial.js +329 -0
  28. package/dist/react-native/RaftChannelWebSerial.js.map +1 -0
  29. package/dist/react-native/RaftChannelWebSocket.d.ts +30 -0
  30. package/dist/react-native/RaftChannelWebSocket.js +222 -0
  31. package/dist/react-native/RaftChannelWebSocket.js.map +1 -0
  32. package/dist/react-native/RaftCommsStats.d.ts +39 -0
  33. package/dist/react-native/RaftCommsStats.js +128 -0
  34. package/dist/react-native/RaftCommsStats.js.map +1 -0
  35. package/dist/react-native/RaftConnEvents.d.ts +39 -0
  36. package/dist/react-native/RaftConnEvents.js +54 -0
  37. package/dist/react-native/RaftConnEvents.js.map +1 -0
  38. package/dist/react-native/RaftConnector.d.ts +257 -0
  39. package/dist/react-native/RaftConnector.js +671 -0
  40. package/dist/react-native/RaftConnector.js.map +1 -0
  41. package/dist/react-native/RaftCustomAttrHandler.d.ts +6 -0
  42. package/dist/react-native/RaftCustomAttrHandler.js +93 -0
  43. package/dist/react-native/RaftCustomAttrHandler.js.map +1 -0
  44. package/dist/react-native/RaftDeviceInfo.d.ts +71 -0
  45. package/dist/react-native/RaftDeviceInfo.js +50 -0
  46. package/dist/react-native/RaftDeviceInfo.js.map +1 -0
  47. package/dist/react-native/RaftDeviceManager.d.ts +73 -0
  48. package/dist/react-native/RaftDeviceManager.js +812 -0
  49. package/dist/react-native/RaftDeviceManager.js.map +1 -0
  50. package/dist/react-native/RaftDeviceMgrIF.d.ts +19 -0
  51. package/dist/react-native/RaftDeviceMgrIF.js +11 -0
  52. package/dist/react-native/RaftDeviceMgrIF.js.map +1 -0
  53. package/dist/react-native/RaftDeviceMsg.d.ts +9 -0
  54. package/dist/react-native/RaftDeviceMsg.js +11 -0
  55. package/dist/react-native/RaftDeviceMsg.js.map +1 -0
  56. package/dist/react-native/RaftDeviceStates.d.ts +55 -0
  57. package/dist/react-native/RaftDeviceStates.js +81 -0
  58. package/dist/react-native/RaftDeviceStates.js.map +1 -0
  59. package/dist/react-native/RaftFileHandler.d.ts +52 -0
  60. package/dist/react-native/RaftFileHandler.js +502 -0
  61. package/dist/react-native/RaftFileHandler.js.map +1 -0
  62. package/dist/react-native/RaftLog.d.ts +22 -0
  63. package/dist/react-native/RaftLog.js +63 -0
  64. package/dist/react-native/RaftLog.js.map +1 -0
  65. package/dist/react-native/RaftMiniHDLC.d.ts +18 -0
  66. package/dist/react-native/RaftMiniHDLC.js +383 -0
  67. package/dist/react-native/RaftMiniHDLC.js.map +1 -0
  68. package/dist/react-native/RaftMsgHandler.d.ts +62 -0
  69. package/dist/react-native/RaftMsgHandler.js +511 -0
  70. package/dist/react-native/RaftMsgHandler.js.map +1 -0
  71. package/dist/react-native/RaftMsgTrackInfo.d.ts +17 -0
  72. package/dist/react-native/RaftMsgTrackInfo.js +42 -0
  73. package/dist/react-native/RaftMsgTrackInfo.js.map +1 -0
  74. package/dist/react-native/RaftProtocolDefs.d.ts +30 -0
  75. package/dist/react-native/RaftProtocolDefs.js +48 -0
  76. package/dist/react-native/RaftProtocolDefs.js.map +1 -0
  77. package/dist/react-native/RaftPublish.d.ts +2 -0
  78. package/dist/react-native/RaftPublish.js +81 -0
  79. package/dist/react-native/RaftPublish.js.map +1 -0
  80. package/dist/react-native/RaftStreamHandler.d.ts +49 -0
  81. package/dist/react-native/RaftStreamHandler.js +324 -0
  82. package/dist/react-native/RaftStreamHandler.js.map +1 -0
  83. package/dist/react-native/RaftStruct.d.ts +3 -0
  84. package/dist/react-native/RaftStruct.js +258 -0
  85. package/dist/react-native/RaftStruct.js.map +1 -0
  86. package/dist/react-native/RaftSysTypeManager.d.ts +16 -0
  87. package/dist/react-native/RaftSysTypeManager.js +78 -0
  88. package/dist/react-native/RaftSysTypeManager.js.map +1 -0
  89. package/dist/react-native/RaftSystemType.d.ts +30 -0
  90. package/dist/react-native/RaftSystemType.js +3 -0
  91. package/dist/react-native/RaftSystemType.js.map +1 -0
  92. package/dist/react-native/RaftSystemUtils.d.ts +152 -0
  93. package/dist/react-native/RaftSystemUtils.js +463 -0
  94. package/dist/react-native/RaftSystemUtils.js.map +1 -0
  95. package/dist/react-native/RaftTypes.d.ts +216 -0
  96. package/dist/react-native/RaftTypes.js +153 -0
  97. package/dist/react-native/RaftTypes.js.map +1 -0
  98. package/dist/react-native/RaftUpdateEvents.d.ts +33 -0
  99. package/dist/react-native/RaftUpdateEvents.js +46 -0
  100. package/dist/react-native/RaftUpdateEvents.js.map +1 -0
  101. package/dist/react-native/RaftUpdateManager.d.ts +61 -0
  102. package/dist/react-native/RaftUpdateManager.js +621 -0
  103. package/dist/react-native/RaftUpdateManager.js.map +1 -0
  104. package/dist/react-native/RaftUtils.d.ts +128 -0
  105. package/dist/react-native/RaftUtils.js +487 -0
  106. package/dist/react-native/RaftUtils.js.map +1 -0
  107. package/dist/react-native/RaftWifiTypes.d.ts +23 -0
  108. package/dist/react-native/RaftWifiTypes.js +43 -0
  109. package/dist/react-native/RaftWifiTypes.js.map +1 -0
  110. package/dist/react-native/main.d.ts +27 -0
  111. package/dist/react-native/main.js +52 -0
  112. package/dist/react-native/main.js.map +1 -0
  113. package/dist/web/RaftAttributeHandler.js +1 -1
  114. package/dist/web/RaftAttributeHandler.js.map +1 -1
  115. package/dist/web/RaftChannelBLE.web.js +8 -6
  116. package/dist/web/RaftChannelBLE.web.js.map +1 -1
  117. package/dist/web/RaftChannelSimulated.d.ts +10 -0
  118. package/dist/web/RaftChannelSimulated.js +665 -82
  119. package/dist/web/RaftChannelSimulated.js.map +1 -1
  120. package/dist/web/RaftChannelWebSerial.js +2 -2
  121. package/dist/web/RaftChannelWebSerial.js.map +1 -1
  122. package/dist/web/RaftChannelWebSocket.js +16 -1
  123. package/dist/web/RaftChannelWebSocket.js.map +1 -1
  124. package/dist/web/RaftConnector.d.ts +12 -1
  125. package/dist/web/RaftConnector.js +45 -9
  126. package/dist/web/RaftConnector.js.map +1 -1
  127. package/dist/web/RaftCustomAttrHandler.d.ts +2 -0
  128. package/dist/web/RaftCustomAttrHandler.js +54 -26
  129. package/dist/web/RaftCustomAttrHandler.js.map +1 -1
  130. package/dist/web/RaftDeviceInfo.d.ts +3 -1
  131. package/dist/web/RaftDeviceInfo.js +17 -3
  132. package/dist/web/RaftDeviceInfo.js.map +1 -1
  133. package/dist/web/RaftDeviceManager.d.ts +32 -2
  134. package/dist/web/RaftDeviceManager.js +307 -74
  135. package/dist/web/RaftDeviceManager.js.map +1 -1
  136. package/dist/web/RaftDeviceMgrIF.d.ts +5 -1
  137. package/dist/web/RaftDeviceStates.d.ts +20 -2
  138. package/dist/web/RaftDeviceStates.js +25 -4
  139. package/dist/web/RaftDeviceStates.js.map +1 -1
  140. package/dist/web/RaftMsgHandler.js.map +1 -1
  141. package/dist/web/RaftPublish.d.ts +2 -0
  142. package/dist/web/RaftPublish.js +81 -0
  143. package/dist/web/RaftPublish.js.map +1 -0
  144. package/dist/web/RaftStreamHandler.d.ts +11 -0
  145. package/dist/web/RaftStreamHandler.js +68 -1
  146. package/dist/web/RaftStreamHandler.js.map +1 -1
  147. package/dist/web/RaftStruct.js +197 -147
  148. package/dist/web/RaftStruct.js.map +1 -1
  149. package/dist/web/RaftSystemUtils.d.ts +17 -1
  150. package/dist/web/RaftSystemUtils.js +51 -0
  151. package/dist/web/RaftSystemUtils.js.map +1 -1
  152. package/dist/web/RaftTypes.d.ts +21 -0
  153. package/dist/web/RaftTypes.js.map +1 -1
  154. package/dist/web/RaftUpdateManager.js +1 -1
  155. package/dist/web/RaftUpdateManager.js.map +1 -1
  156. package/dist/web/RaftUtils.d.ts +2 -0
  157. package/dist/web/RaftUtils.js +20 -0
  158. package/dist/web/RaftUtils.js.map +1 -1
  159. package/dist/web/main.d.ts +2 -0
  160. package/dist/web/main.js +1 -0
  161. package/dist/web/main.js.map +1 -1
  162. package/eslint.config.mjs +33 -0
  163. package/examples/dashboard/package.json +36 -0
  164. package/examples/dashboard/src/CommandPanel.tsx +147 -0
  165. package/examples/dashboard/src/ConnManager.ts +166 -0
  166. package/examples/dashboard/src/DeviceActionsForm.tsx +133 -0
  167. package/examples/dashboard/src/DeviceAttrsForm.tsx +49 -0
  168. package/examples/dashboard/src/DeviceLineChart.tsx +163 -0
  169. package/examples/dashboard/src/DevicePanel.tsx +247 -0
  170. package/examples/dashboard/src/DeviceStatsPanel.tsx +65 -0
  171. package/examples/dashboard/src/DevicesPanel.tsx +69 -0
  172. package/examples/dashboard/src/DispLedGrid.tsx +110 -0
  173. package/examples/dashboard/src/DispOneLed.tsx +20 -0
  174. package/examples/dashboard/src/LatencyTest.ts +130 -0
  175. package/examples/dashboard/src/LatencyTestPanel.tsx +92 -0
  176. package/examples/dashboard/src/Main.tsx +234 -0
  177. package/examples/dashboard/src/SettingsManager.ts +67 -0
  178. package/examples/dashboard/src/SettingsScreen.tsx +179 -0
  179. package/examples/dashboard/src/StatusPanel.tsx +71 -0
  180. package/examples/dashboard/src/SystemTypeCog/CogStateInfo.ts +170 -0
  181. package/examples/dashboard/src/SystemTypeCog/SystemTypeCog.ts +125 -0
  182. package/examples/dashboard/src/SystemTypeGeneric/StateInfoGeneric.ts +38 -0
  183. package/examples/dashboard/src/SystemTypeGeneric/SystemTypeGeneric.ts +125 -0
  184. package/examples/dashboard/src/SystemTypeMarty/RICAddOn.ts +70 -0
  185. package/examples/dashboard/src/SystemTypeMarty/RICAddOnBase.ts +33 -0
  186. package/examples/dashboard/src/SystemTypeMarty/RICAddOnManager.ts +342 -0
  187. package/examples/dashboard/src/SystemTypeMarty/RICCommsStats.ts +170 -0
  188. package/examples/dashboard/src/SystemTypeMarty/RICHWElem.ts +123 -0
  189. package/examples/dashboard/src/SystemTypeMarty/RICLEDPatternChecker.ts +207 -0
  190. package/examples/dashboard/src/SystemTypeMarty/RICROSSerial.ts +464 -0
  191. package/examples/dashboard/src/SystemTypeMarty/RICServoFaultDetector.ts +146 -0
  192. package/examples/dashboard/src/SystemTypeMarty/RICStateInfo.ts +105 -0
  193. package/examples/dashboard/src/SystemTypeMarty/RICSystemUtils.ts +371 -0
  194. package/examples/dashboard/src/SystemTypeMarty/RICTypes.ts +20 -0
  195. package/examples/dashboard/src/SystemTypeMarty/SystemTypeMarty.ts +119 -0
  196. package/examples/dashboard/src/index.html +15 -0
  197. package/examples/dashboard/src/index.tsx +13 -0
  198. package/examples/dashboard/src/styles.css +570 -0
  199. package/examples/dashboard/tsconfig.json +18 -0
  200. package/jest.config.js +11 -0
  201. package/package.json +49 -52
  202. package/src/RaftAttributeHandler.ts +450 -0
  203. package/src/RaftChannel.ts +32 -0
  204. package/src/RaftChannelBLE.native.ts +617 -0
  205. package/src/RaftChannelBLE.web.ts +374 -0
  206. package/src/RaftChannelBLEFactory.ts +13 -0
  207. package/src/RaftChannelBLEScanner.native.ts +184 -0
  208. package/src/RaftChannelSimulated.ts +1177 -0
  209. package/src/RaftChannelWebSerial.ts +420 -0
  210. package/src/RaftChannelWebSocket.ts +272 -0
  211. package/src/RaftCommsStats.ts +142 -0
  212. package/src/RaftConnEvents.ts +58 -0
  213. package/src/RaftConnector.ts +806 -0
  214. package/src/RaftCustomAttrHandler.ts +117 -0
  215. package/src/RaftDeviceInfo.ts +125 -0
  216. package/src/RaftDeviceManager.ts +1014 -0
  217. package/src/RaftDeviceMgrIF.ts +37 -0
  218. package/src/RaftDeviceMsg.ts +20 -0
  219. package/src/RaftDeviceStates.ts +122 -0
  220. package/src/RaftFileHandler.ts +668 -0
  221. package/src/RaftLog.ts +70 -0
  222. package/src/RaftMiniHDLC.ts +396 -0
  223. package/src/RaftMsgHandler.ts +812 -0
  224. package/src/RaftMsgTrackInfo.ts +51 -0
  225. package/src/RaftProtocolDefs.ts +46 -0
  226. package/src/RaftPublish.ts +92 -0
  227. package/src/RaftStreamHandler.ts +412 -0
  228. package/src/RaftStruct.ts +282 -0
  229. package/src/RaftSysTypeManager.ts +87 -0
  230. package/src/RaftSystemType.ts +34 -0
  231. package/src/RaftSystemUtils.ts +548 -0
  232. package/src/RaftTypes.ts +306 -0
  233. package/src/RaftUpdateEvents.ts +48 -0
  234. package/src/RaftUpdateManager.ts +781 -0
  235. package/src/RaftUtils.ts +514 -0
  236. package/src/RaftWifiTypes.ts +36 -0
  237. package/src/main.ts +40 -0
  238. package/testdata/TestDeviceTypeRecs.json +492 -0
  239. package/tsconfig.json +30 -0
  240. package/tsconfig.react-native.json +29 -0
@@ -0,0 +1,570 @@
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
+ .menu-item-toggle {
385
+ padding: 6px 10px;
386
+ }
387
+
388
+ .menu-toggle {
389
+ display: flex;
390
+ align-items: center;
391
+ gap: 8px;
392
+ cursor: pointer;
393
+ }
394
+
395
+ .menu-toggle input {
396
+ margin: 0;
397
+ }
398
+
399
+ .device-stats-panel {
400
+ flex: 0 0 220px;
401
+ min-width: 220px;
402
+ padding: 10px;
403
+ border: 1px solid #666;
404
+ border-radius: 4px;
405
+ background: #444;
406
+ display: flex;
407
+ flex-direction: column;
408
+ gap: 10px;
409
+ }
410
+
411
+ .device-stats-header {
412
+ display: flex;
413
+ justify-content: space-between;
414
+ align-items: center;
415
+ font-weight: bold;
416
+ }
417
+
418
+ .device-stats-reset {
419
+ background: #555;
420
+ color: #fff;
421
+ border: none;
422
+ border-radius: 4px;
423
+ padding: 4px 8px;
424
+ cursor: pointer;
425
+ font-size: 0.8em;
426
+ }
427
+
428
+ .device-stats-reset:hover {
429
+ background: #666;
430
+ }
431
+
432
+ .device-stats-grid {
433
+ display: grid;
434
+ grid-template-columns: 1fr;
435
+ gap: 8px;
436
+ }
437
+
438
+ .device-stats-item {
439
+ display: flex;
440
+ justify-content: space-between;
441
+ gap: 10px;
442
+ }
443
+
444
+ .device-stats-label {
445
+ color: #bbb;
446
+ font-size: 0.85em;
447
+ }
448
+
449
+ .device-stats-value {
450
+ font-weight: 600;
451
+ font-size: 0.9em;
452
+ }
453
+
454
+ .poll-rate-dialog-overlay {
455
+ position: fixed;
456
+ inset: 0;
457
+ background: rgba(0, 0, 0, 0.5);
458
+ z-index: 100;
459
+ display: flex;
460
+ align-items: center;
461
+ justify-content: center;
462
+ }
463
+
464
+ .poll-rate-dialog {
465
+ background: #333;
466
+ border: 1px solid #666;
467
+ border-radius: 6px;
468
+ padding: 18px 22px;
469
+ min-width: 240px;
470
+ display: flex;
471
+ flex-direction: column;
472
+ gap: 10px;
473
+ color: #fff;
474
+ }
475
+
476
+ .poll-rate-dialog-title {
477
+ font-size: 1em;
478
+ font-weight: bold;
479
+ margin-bottom: 4px;
480
+ }
481
+
482
+ .poll-rate-dialog-row {
483
+ display: flex;
484
+ align-items: center;
485
+ gap: 8px;
486
+ }
487
+
488
+ .poll-rate-input {
489
+ flex: 1;
490
+ background: #222;
491
+ border: 1px solid #666;
492
+ border-radius: 4px;
493
+ color: #fff;
494
+ padding: 6px 8px;
495
+ font-size: 1em;
496
+ width: 100%;
497
+ }
498
+
499
+ .poll-rate-unit {
500
+ color: #aaa;
501
+ font-size: 0.9em;
502
+ }
503
+
504
+ .poll-rate-preview {
505
+ font-size: 0.8em;
506
+ color: #aaa;
507
+ }
508
+
509
+ .poll-rate-status {
510
+ font-size: 0.85em;
511
+ color: #f90;
512
+ }
513
+
514
+ .poll-rate-dialog-buttons {
515
+ display: flex;
516
+ gap: 8px;
517
+ justify-content: flex-end;
518
+ }
519
+
520
+ .poll-rate-btn {
521
+ padding: 6px 14px;
522
+ border: none;
523
+ border-radius: 4px;
524
+ cursor: pointer;
525
+ font-size: 0.9em;
526
+ }
527
+
528
+ .poll-rate-btn-set {
529
+ background: #4a7;
530
+ color: #fff;
531
+ }
532
+
533
+ .poll-rate-btn-set:hover {
534
+ background: #5b8;
535
+ }
536
+
537
+ .poll-rate-btn-cancel {
538
+ background: #555;
539
+ color: #fff;
540
+ }
541
+
542
+ .poll-rate-btn-cancel:hover {
543
+ background: #666;
544
+ }
545
+
546
+ /* Adjust height for portrait orientation */
547
+ @media (orientation: portrait) {
548
+ .device-line-chart {
549
+ height: 16.67vh;
550
+ /* Chart is approximately 1/6 of the viewport height in portrait */
551
+ }
552
+ }
553
+
554
+ /* Responsive adjustments for smaller screens */
555
+ @media (max-width: 600px) {
556
+
557
+ .device-line-chart,
558
+ .device-attrs-form {
559
+ height: 25vh;
560
+ /* Adjust height to a suitable value on small screens */
561
+ }
562
+ }
563
+
564
+ /* Considerations for very large screens or high aspect ratios */
565
+ @media (min-width: 1200px) {
566
+ .device-line-chart {
567
+ height: 20vh;
568
+ /* Slightly reduce the height for very wide screens */
569
+ }
570
+ }
@@ -0,0 +1,18 @@
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 ADDED
@@ -0,0 +1,11 @@
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
+
package/package.json CHANGED
@@ -1,54 +1,51 @@
1
1
  {
2
- "name": "@robdobsn/raftjs",
3
- "version": "1.8.5",
4
- "description": "Javascript/TS library for Raft library",
5
- "main": "dist/web/main.js",
6
- "types": "dist/web/main.d.ts",
7
- "react-native": "dist/react-native/main.js",
8
- "author": "Rob Dobson <rob@dobson.com>",
9
- "repository": {
10
- "type": "git",
11
- "url": "https://github.com/robdobsn/raftjs.git"
12
- },
13
- "bugs": {
14
- "url": "https://github.com/robdobsn/raftjs/issues"
15
- },
16
- "license": "MIT",
17
- "keywords": [
18
- "Raft"
19
- ],
20
- "publishConfig": {
21
- "registry": "https://registry.npmjs.org/",
22
- "access": "public"
23
- },
24
- "scripts": {
25
- "build": "tsc -p tsconfig.json",
26
- "build:phone": "tsc -p tsconfig.react-native.json",
27
- "build-all": "npm run clean && npm run build && npm run build:phone",
28
- "lint": "eslint ./src",
29
- "clean": "rimraf dist build package",
30
- "docs": "typedoc --entryPoints src/main.ts",
31
- "watch-all": "tsc -p tsconfig.json --watch & tsc -p tsconfig.react-native.json --watch"
32
- },
33
- "devDependencies": {
34
- "@types/node": "^22.13.11",
35
- "@types/web-bluetooth": "^0.0.21",
36
- "@typescript-eslint/eslint-plugin": "^8.27.0",
37
- "eslint": "^9.23.0",
38
- "react-native-ble-plx": "^3.5.0",
39
- "typescript": "^5.8.2",
40
- "rimraf": "^6.0.1",
41
- "@types/text-encoding": "^0.0.40"
42
- },
43
- "dependencies": {
44
- "isomorphic-ws": "^5.0.0",
45
- "tslib": "^2.8.1"
46
- },
47
- "peerDependencies": {
48
- "react-native-ble-plx": "^3.5.0",
49
- "react-native": "^0.78.1"
50
- },
51
- "files": [
52
- "dist/web/**/*"
53
- ]
2
+ "name": "@robdobsn/raftjs",
3
+ "version": "1.11.5",
4
+ "description": "Javascript/TS library for Raft library",
5
+ "main": "dist/web/main.js",
6
+ "types": "dist/web/main.d.ts",
7
+ "react-native": "dist/react-native/main.js",
8
+ "author": "Rob Dobson <rob@dobson.com>",
9
+ "repository": {
10
+ "type": "git",
11
+ "url": "https://github.com/robdobsn/raftjs.git"
12
+ },
13
+ "bugs": {
14
+ "url": "https://github.com/robdobsn/raftjs/issues"
15
+ },
16
+ "license": "MIT",
17
+ "keywords": [
18
+ "Raft"
19
+ ],
20
+ "publishConfig": {
21
+ "registry": "https://registry.npmjs.org/",
22
+ "access": "public"
23
+ },
24
+ "scripts": {
25
+ "build": "tsc -p tsconfig.json",
26
+ "build:phone": "tsc -p tsconfig.react-native.json",
27
+ "build-all": "npm run clean && npm run build && npm run build:phone",
28
+ "lint": "eslint ./src",
29
+ "clean": "rimraf dist build package",
30
+ "docs": "typedoc --entryPoints src/main.ts",
31
+ "watch-all": "tsc -p tsconfig.json --watch & tsc -p tsconfig.react-native.json --watch"
32
+ },
33
+ "devDependencies": {
34
+ "@types/node": "^22.13.11",
35
+ "@types/web-bluetooth": "^0.0.21",
36
+ "@typescript-eslint/eslint-plugin": "^8.27.0",
37
+ "eslint": "^9.23.0",
38
+ "react-native-ble-plx": "^3.5.0",
39
+ "typescript": "^5.8.2",
40
+ "rimraf": "^6.0.1",
41
+ "@types/text-encoding": "^0.0.40"
42
+ },
43
+ "dependencies": {
44
+ "isomorphic-ws": "^5.0.0",
45
+ "tslib": "^2.8.1"
46
+ },
47
+ "peerDependencies": {
48
+ "react-native-ble-plx": "*",
49
+ "react-native": "*"
50
+ }
54
51
  }