@nordicsemiconductor/pc-nrfconnect-shared 60.0.0-pre1

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 (367) hide show
  1. package/.github/ISSUE_TEMPLATE/custom.md +10 -0
  2. package/.husky/pre-push +3 -0
  3. package/.renovaterc.json +10 -0
  4. package/Changelog.md +2973 -0
  5. package/LICENSE +35 -0
  6. package/README.md +11 -0
  7. package/azure-pipelines.yml +34 -0
  8. package/config/eslintrc.js +190 -0
  9. package/config/jest.config.js +41 -0
  10. package/config/prettier.config.js +13 -0
  11. package/config/tsconfig.json +15 -0
  12. package/fw/bootloader/graviton_bootloader_v1.0.1-[nRF5_SDK_15.0.1-1.alpha_f76d012].zip +0 -0
  13. package/jest.config.js +7 -0
  14. package/main/index.ts +32 -0
  15. package/mocks/deviceLibMock.ts +21 -0
  16. package/mocks/electronMock.ts +15 -0
  17. package/mocks/electronStoreMock.ts +19 -0
  18. package/mocks/emptyMock.ts +7 -0
  19. package/mocks/fileMock.ts +13 -0
  20. package/mocks/gaMock.ts +9 -0
  21. package/mocks/mockTests.test.ts +15 -0
  22. package/mocks/packageJsonMock.ts +10 -0
  23. package/mocks/remoteMock.ts +17 -0
  24. package/package.json +132 -0
  25. package/scripts/check-app-properties.ts +197 -0
  26. package/scripts/check-for-typescript.ts +41 -0
  27. package/scripts/esbuild-bootstrap.js +15 -0
  28. package/scripts/esbuild-renderer.js +131 -0
  29. package/scripts/esbuild.js +57 -0
  30. package/scripts/installHusky.ts +17 -0
  31. package/scripts/nordic-publish.ts +485 -0
  32. package/scripts/nrfconnect-license.ts +277 -0
  33. package/scripts/prepare-shared-release.ts +122 -0
  34. package/scripts/release-shared.test.ts +132 -0
  35. package/scripts/release-shared.ts +207 -0
  36. package/src/About/About.tsx +25 -0
  37. package/src/About/AboutButton.tsx +28 -0
  38. package/src/About/ApplicationCard.tsx +83 -0
  39. package/src/About/DeviceCard.tsx +74 -0
  40. package/src/About/DocumentationCard.tsx +18 -0
  41. package/src/About/DocumentationSection.tsx +24 -0
  42. package/src/About/Section.tsx +21 -0
  43. package/src/About/ShortcutButton.tsx +41 -0
  44. package/src/About/SupportCard.tsx +97 -0
  45. package/src/About/about.scss +40 -0
  46. package/src/About/documentationSlice.ts +41 -0
  47. package/src/About/section.scss +15 -0
  48. package/src/About/shortcutSlice.ts +52 -0
  49. package/src/Alert/Alert.module.scss +29 -0
  50. package/src/Alert/Alert.tsx +37 -0
  51. package/src/App/App.test.tsx +47 -0
  52. package/src/App/App.tsx +227 -0
  53. package/src/App/ConnectedToStore.tsx +19 -0
  54. package/src/App/VisibilityBar.tsx +103 -0
  55. package/src/App/app.scss +83 -0
  56. package/src/App/appLayout.ts +95 -0
  57. package/src/App/shared.scss +49 -0
  58. package/src/App/visibility-bar.scss +55 -0
  59. package/src/Button/Button.tsx +66 -0
  60. package/src/Button/button.module.scss +154 -0
  61. package/src/Card/Card.tsx +26 -0
  62. package/src/Card/card.module.scss +28 -0
  63. package/src/Device/BrokenDeviceDialog/BrokenDeviceDialog.tsx +58 -0
  64. package/src/Device/BrokenDeviceDialog/broken-device-dialog.scss +18 -0
  65. package/src/Device/BrokenDeviceDialog/brokenDeviceDialogSlice.tsx +48 -0
  66. package/src/Device/DeviceSelector/BasicDeviceInfo.tsx +115 -0
  67. package/src/Device/DeviceSelector/DeviceIcon.tsx +27 -0
  68. package/src/Device/DeviceSelector/DeviceList/AnimatedList.tsx +62 -0
  69. package/src/Device/DeviceSelector/DeviceList/BrokenDevice.tsx +34 -0
  70. package/src/Device/DeviceSelector/DeviceList/Device.tsx +84 -0
  71. package/src/Device/DeviceSelector/DeviceList/DeviceList.tsx +113 -0
  72. package/src/Device/DeviceSelector/DeviceList/EditDeviceButtons.tsx +28 -0
  73. package/src/Device/DeviceSelector/DeviceList/MoreDeviceInfo.tsx +65 -0
  74. package/src/Device/DeviceSelector/DeviceList/RenameDevice.tsx +22 -0
  75. package/src/Device/DeviceSelector/DeviceList/broken-device.scss +32 -0
  76. package/src/Device/DeviceSelector/DeviceList/device-list.scss +64 -0
  77. package/src/Device/DeviceSelector/DeviceList/device.scss +28 -0
  78. package/src/Device/DeviceSelector/DeviceList/edit-device-buttons.scss +31 -0
  79. package/src/Device/DeviceSelector/DeviceList/more-device-info.scss +33 -0
  80. package/src/Device/DeviceSelector/DeviceList/rename-device.scss +13 -0
  81. package/src/Device/DeviceSelector/DeviceSelector.test.tsx +342 -0
  82. package/src/Device/DeviceSelector/DeviceSelector.tsx +173 -0
  83. package/src/Device/DeviceSelector/Favorite.tsx +49 -0
  84. package/src/Device/DeviceSelector/SelectDevice.tsx +36 -0
  85. package/src/Device/DeviceSelector/SelectedDevice.tsx +65 -0
  86. package/src/Device/DeviceSelector/arrow-down.svg +1 -0
  87. package/src/Device/DeviceSelector/basic-device-info.scss +62 -0
  88. package/src/Device/DeviceSelector/device-icon.scss +27 -0
  89. package/src/Device/DeviceSelector/favorite.scss +17 -0
  90. package/src/Device/DeviceSelector/select-device.scss +38 -0
  91. package/src/Device/DeviceSelector/selected-device.scss +57 -0
  92. package/src/Device/DeviceSetup/DeviceSetupView.tsx +102 -0
  93. package/src/Device/deviceAutoSelectSlice.ts +144 -0
  94. package/src/Device/deviceInfo/deviceInfo.ts +254 -0
  95. package/src/Device/deviceInfo/nRF51-Series-logo.svg +1 -0
  96. package/src/Device/deviceInfo/nRF52-Series-logo.svg +1 -0
  97. package/src/Device/deviceInfo/nRF53-Series-logo.svg +1 -0
  98. package/src/Device/deviceInfo/nRF70-Series_no-background_RGB.svg +36 -0
  99. package/src/Device/deviceInfo/nRF91-Series-logo.svg +1 -0
  100. package/src/Device/deviceInfo/ppk-logo.svg +1 -0
  101. package/src/Device/deviceInfo/unknown-logo.svg +30 -0
  102. package/src/Device/deviceInfo/unknown-nordic-logo.svg +25 -0
  103. package/src/Device/deviceLibWrapper.test.ts +97 -0
  104. package/src/Device/deviceLibWrapper.ts +133 -0
  105. package/src/Device/deviceLister.test.ts +89 -0
  106. package/src/Device/deviceLister.ts +396 -0
  107. package/src/Device/deviceSetup.ts +264 -0
  108. package/src/Device/deviceSetupSlice.ts +94 -0
  109. package/src/Device/deviceSlice.ts +248 -0
  110. package/src/Device/dfu-cc.ts +162 -0
  111. package/src/Device/initPacket.ts +402 -0
  112. package/src/Device/jprogOperations.ts +206 -0
  113. package/src/Device/sdfuOperations.ts +601 -0
  114. package/src/Dialog/Dialog.test.tsx +134 -0
  115. package/src/Dialog/Dialog.tsx +236 -0
  116. package/src/Dialog/dialog.scss +60 -0
  117. package/src/Dropdown/Dropdown.module.scss +83 -0
  118. package/src/Dropdown/Dropdown.test.tsx +62 -0
  119. package/src/Dropdown/Dropdown.tsx +106 -0
  120. package/src/ErrorBoundary/ErrorBoundary.test.tsx +105 -0
  121. package/src/ErrorBoundary/ErrorBoundary.tsx +186 -0
  122. package/src/ErrorBoundary/bug.svg +1 -0
  123. package/src/ErrorBoundary/error-boundary.scss +102 -0
  124. package/src/ErrorDialog/ErrorDialog.test.tsx +70 -0
  125. package/src/ErrorDialog/ErrorDialog.tsx +94 -0
  126. package/src/ErrorDialog/error.scss +14 -0
  127. package/src/ErrorDialog/errorDialogSlice.test.ts +64 -0
  128. package/src/ErrorDialog/errorDialogSlice.ts +80 -0
  129. package/src/FactoryReset/FactoryResetButton.test.tsx +46 -0
  130. package/src/FactoryReset/FactoryResetButton.tsx +81 -0
  131. package/src/InlineInput/InlineInput.tsx +170 -0
  132. package/src/InlineInput/NumberInlineInput.tsx +107 -0
  133. package/src/InlineInput/inline-input.scss +38 -0
  134. package/src/InlineInput/number-inline-input.scss +15 -0
  135. package/src/Log/LogEntry.tsx +62 -0
  136. package/src/Log/LogViewer.tsx +54 -0
  137. package/src/Log/log-entry.scss +30 -0
  138. package/src/Log/log-viewer.scss +24 -0
  139. package/src/Log/logSlice.ts +73 -0
  140. package/src/Log/syncLogToStore.ts +36 -0
  141. package/src/Logo/Logo.tsx +48 -0
  142. package/src/Logo/logo.scss +11 -0
  143. package/src/Logo/nordic-logo-blue-icon-only.png +0 -0
  144. package/src/Logo/nordic-logo-gray-icon-only.png +0 -0
  145. package/src/Logo/nordic-logo-white-icon-only.png +0 -0
  146. package/src/Main/Main.tsx +13 -0
  147. package/src/Main/main.scss +13 -0
  148. package/src/MasonryLayout/MasonryLayout.tsx +234 -0
  149. package/src/MasonryLayout/masonryLayout.module.scss +46 -0
  150. package/src/NavBar/NavBar.tsx +22 -0
  151. package/src/NavBar/NavMenu.test.tsx +41 -0
  152. package/src/NavBar/NavMenu.tsx +53 -0
  153. package/src/NavBar/NavMenuItem.tsx +41 -0
  154. package/src/NavBar/nav-bar.scss +26 -0
  155. package/src/NavBar/nav-menu-item.scss +34 -0
  156. package/src/OpenApp/openApp.ts +18 -0
  157. package/src/Panes/FeedbackPane.tsx +149 -0
  158. package/src/PseudoButton/PseudoButton.tsx +56 -0
  159. package/src/PseudoButton/pseudo-button.scss +11 -0
  160. package/src/SerialPort/ConflictingSettingsDialog.tsx +242 -0
  161. package/src/SerialPort/SerialPort.test.ts +54 -0
  162. package/src/SerialPort/SerialPort.ts +202 -0
  163. package/src/Shortcuts/Shortcut-item.scss +33 -0
  164. package/src/Shortcuts/Shortcut-modal.scss +20 -0
  165. package/src/Shortcuts/ShortcutItem.tsx +48 -0
  166. package/src/Shortcuts/ShortcutModal.tsx +67 -0
  167. package/src/SidePanel/Group.tsx +106 -0
  168. package/src/SidePanel/SidePanel.tsx +19 -0
  169. package/src/SidePanel/group.scss +42 -0
  170. package/src/SidePanel/sidepanel.scss +20 -0
  171. package/src/Slider/Bar.tsx +24 -0
  172. package/src/Slider/Factor.test.ts +48 -0
  173. package/src/Slider/Handle.tsx +121 -0
  174. package/src/Slider/Slider.test.tsx +25 -0
  175. package/src/Slider/Slider.tsx +91 -0
  176. package/src/Slider/Ticks.tsx +54 -0
  177. package/src/Slider/__snapshots__/Slider.test.tsx.snap +50 -0
  178. package/src/Slider/bar.scss +24 -0
  179. package/src/Slider/factor.ts +24 -0
  180. package/src/Slider/handle.scss +32 -0
  181. package/src/Slider/percentage.ts +67 -0
  182. package/src/Slider/range.ts +92 -0
  183. package/src/Slider/slider.scss +14 -0
  184. package/src/Slider/ticks.scss +28 -0
  185. package/src/Slider/variables.scss +16 -0
  186. package/src/StartStopButton/StartStopButton.tsx +60 -0
  187. package/src/StartStopButton/play-circle.svg +1 -0
  188. package/src/StartStopButton/start-stop-button.scss +47 -0
  189. package/src/StartStopButton/stop-circle.svg +1 -0
  190. package/src/StateSelector/StateSelector.tsx +64 -0
  191. package/src/StateSelector/state-selector.scss +38 -0
  192. package/src/Stepper/Stepper.tsx +139 -0
  193. package/src/Stepper/stepper.scss +127 -0
  194. package/src/Toggle/Toggle.tsx +120 -0
  195. package/src/Toggle/toggle.scss +109 -0
  196. package/src/bootstrap.scss +14 -0
  197. package/src/index.ts +146 -0
  198. package/src/logging/appTransport.test.ts +78 -0
  199. package/src/logging/appTransport.ts +41 -0
  200. package/src/logging/describeError.test.ts +38 -0
  201. package/src/logging/describeError.ts +56 -0
  202. package/src/logging/index.ts +103 -0
  203. package/src/logging/logBuffer.test.ts +41 -0
  204. package/src/logging/logBuffer.ts +24 -0
  205. package/src/logging/sendInitialLogMessages.ts +64 -0
  206. package/src/store.ts +60 -0
  207. package/src/svg.d.ts +15 -0
  208. package/src/utils/AppTypes.ts +60 -0
  209. package/src/utils/appDirs.ts +78 -0
  210. package/src/utils/bleChannels.ts +16 -0
  211. package/src/utils/classNames.test.ts +29 -0
  212. package/src/utils/classNames.ts +25 -0
  213. package/src/utils/colors.scss +46 -0
  214. package/src/utils/colors.ts +38 -0
  215. package/src/utils/describeVersion.ts +21 -0
  216. package/src/utils/environment.ts +6 -0
  217. package/src/utils/logLibVersions.ts +103 -0
  218. package/src/utils/open.ts +46 -0
  219. package/src/utils/packageJson.ts +60 -0
  220. package/src/utils/persistentStore.ts +144 -0
  221. package/src/utils/systemReport.ts +160 -0
  222. package/src/utils/truncateMiddle.test.ts +21 -0
  223. package/src/utils/truncateMiddle.ts +20 -0
  224. package/src/utils/usageData.ts +189 -0
  225. package/src/utils/useHotKey.ts +62 -0
  226. package/src/utils/useStopwatch.test.tsx +311 -0
  227. package/src/utils/useStopwatch.ts +140 -0
  228. package/src/variables.scss +820 -0
  229. package/styles.scss +88 -0
  230. package/test/dispatchTo.ts +23 -0
  231. package/test/index.ts +7 -0
  232. package/test/jestResolver.js +28 -0
  233. package/test/setupTests.ts +27 -0
  234. package/test/testUtil.ts +20 -0
  235. package/test/testrenderer.tsx +39 -0
  236. package/tsconfig.json +9 -0
  237. package/typings/externals.d.ts +31 -0
  238. package/typings/generated/main/index.d.ts +25 -0
  239. package/typings/generated/src/About/About.d.ts +4 -0
  240. package/typings/generated/src/About/AboutButton.d.ts +8 -0
  241. package/typings/generated/src/About/ApplicationCard.d.ts +3 -0
  242. package/typings/generated/src/About/DeviceCard.d.ts +3 -0
  243. package/typings/generated/src/About/DocumentationCard.d.ts +3 -0
  244. package/typings/generated/src/About/DocumentationSection.d.ts +9 -0
  245. package/typings/generated/src/About/Section.d.ts +8 -0
  246. package/typings/generated/src/About/ShortcutButton.d.ts +6 -0
  247. package/typings/generated/src/About/SupportCard.d.ts +3 -0
  248. package/typings/generated/src/About/documentationSlice.d.ts +12 -0
  249. package/typings/generated/src/About/shortcutSlice.d.ts +11 -0
  250. package/typings/generated/src/Alert/Alert.d.ts +10 -0
  251. package/typings/generated/src/App/App.d.ts +27 -0
  252. package/typings/generated/src/App/App.test.d.ts +1 -0
  253. package/typings/generated/src/App/ConnectedToStore.d.ts +7 -0
  254. package/typings/generated/src/App/VisibilityBar.d.ts +6 -0
  255. package/typings/generated/src/App/appLayout.d.ts +17 -0
  256. package/typings/generated/src/Button/Button.d.ts +13 -0
  257. package/typings/generated/src/Card/Card.d.ts +7 -0
  258. package/typings/generated/src/Device/BrokenDeviceDialog/BrokenDeviceDialog.d.ts +4 -0
  259. package/typings/generated/src/Device/BrokenDeviceDialog/brokenDeviceDialogSlice.d.ts +12 -0
  260. package/typings/generated/src/Device/DeviceSelector/BasicDeviceInfo.d.ts +11 -0
  261. package/typings/generated/src/Device/DeviceSelector/DeviceIcon.d.ts +7 -0
  262. package/typings/generated/src/Device/DeviceSelector/DeviceList/AnimatedList.d.ts +10 -0
  263. package/typings/generated/src/Device/DeviceSelector/DeviceList/BrokenDevice.d.ts +7 -0
  264. package/typings/generated/src/Device/DeviceSelector/DeviceList/Device.d.ts +10 -0
  265. package/typings/generated/src/Device/DeviceSelector/DeviceList/DeviceList.d.ts +10 -0
  266. package/typings/generated/src/Device/DeviceSelector/DeviceList/EditDeviceButtons.d.ts +9 -0
  267. package/typings/generated/src/Device/DeviceSelector/DeviceList/MoreDeviceInfo.d.ts +7 -0
  268. package/typings/generated/src/Device/DeviceSelector/DeviceList/RenameDevice.d.ts +6 -0
  269. package/typings/generated/src/Device/DeviceSelector/DeviceSelector.d.ts +20 -0
  270. package/typings/generated/src/Device/DeviceSelector/DeviceSelector.test.d.ts +1 -0
  271. package/typings/generated/src/Device/DeviceSelector/Favorite.d.ts +9 -0
  272. package/typings/generated/src/Device/DeviceSelector/SelectDevice.d.ts +8 -0
  273. package/typings/generated/src/Device/DeviceSelector/SelectedDevice.d.ts +7 -0
  274. package/typings/generated/src/Device/DeviceSetup/DeviceSetupView.d.ts +3 -0
  275. package/typings/generated/src/Device/deviceAutoSelectSlice.d.ts +28 -0
  276. package/typings/generated/src/Device/deviceInfo/deviceInfo.d.ts +18 -0
  277. package/typings/generated/src/Device/deviceLibWrapper.d.ts +8 -0
  278. package/typings/generated/src/Device/deviceLibWrapper.test.d.ts +1 -0
  279. package/typings/generated/src/Device/deviceLister.d.ts +25 -0
  280. package/typings/generated/src/Device/deviceLister.test.d.ts +2 -0
  281. package/typings/generated/src/Device/deviceSetup.d.ts +40 -0
  282. package/typings/generated/src/Device/deviceSetupSlice.d.ts +20 -0
  283. package/typings/generated/src/Device/deviceSlice.d.ts +30 -0
  284. package/typings/generated/src/Device/dfu-cc.d.ts +3 -0
  285. package/typings/generated/src/Device/initPacket.d.ts +109 -0
  286. package/typings/generated/src/Device/jprogOperations.d.ts +2 -0
  287. package/typings/generated/src/Device/sdfuOperations.d.ts +14 -0
  288. package/typings/generated/src/Dialog/Dialog.d.ts +64 -0
  289. package/typings/generated/src/Dialog/Dialog.test.d.ts +1 -0
  290. package/typings/generated/src/Dropdown/Dropdown.d.ts +16 -0
  291. package/typings/generated/src/Dropdown/Dropdown.test.d.ts +1 -0
  292. package/typings/generated/src/ErrorBoundary/ErrorBoundary.d.ts +26 -0
  293. package/typings/generated/src/ErrorBoundary/ErrorBoundary.test.d.ts +1 -0
  294. package/typings/generated/src/ErrorDialog/ErrorDialog.d.ts +4 -0
  295. package/typings/generated/src/ErrorDialog/ErrorDialog.test.d.ts +1 -0
  296. package/typings/generated/src/ErrorDialog/errorDialogSlice.d.ts +23 -0
  297. package/typings/generated/src/ErrorDialog/errorDialogSlice.test.d.ts +1 -0
  298. package/typings/generated/src/FactoryReset/FactoryResetButton.d.ts +12 -0
  299. package/typings/generated/src/FactoryReset/FactoryResetButton.test.d.ts +1 -0
  300. package/typings/generated/src/InlineInput/InlineInput.d.ts +14 -0
  301. package/typings/generated/src/InlineInput/NumberInlineInput.d.ts +12 -0
  302. package/typings/generated/src/Log/LogEntry.d.ts +7 -0
  303. package/typings/generated/src/Log/LogViewer.d.ts +5 -0
  304. package/typings/generated/src/Log/logSlice.d.ts +12 -0
  305. package/typings/generated/src/Log/syncLogToStore.d.ts +11 -0
  306. package/typings/generated/src/Logo/Logo.d.ts +6 -0
  307. package/typings/generated/src/Main/Main.d.ts +6 -0
  308. package/typings/generated/src/MasonryLayout/MasonryLayout.d.ts +14 -0
  309. package/typings/generated/src/NavBar/NavBar.d.ts +6 -0
  310. package/typings/generated/src/NavBar/NavMenu.d.ts +3 -0
  311. package/typings/generated/src/NavBar/NavMenu.test.d.ts +1 -0
  312. package/typings/generated/src/NavBar/NavMenuItem.d.ts +10 -0
  313. package/typings/generated/src/OpenApp/openApp.d.ts +7 -0
  314. package/typings/generated/src/Panes/FeedbackPane.d.ts +3 -0
  315. package/typings/generated/src/PseudoButton/PseudoButton.d.ts +10 -0
  316. package/typings/generated/src/SerialPort/ConflictingSettingsDialog.d.ts +13 -0
  317. package/typings/generated/src/SerialPort/SerialPort.d.ts +21 -0
  318. package/typings/generated/src/SerialPort/SerialPort.test.d.ts +1 -0
  319. package/typings/generated/src/Shortcuts/ShortcutItem.d.ts +8 -0
  320. package/typings/generated/src/Shortcuts/ShortcutModal.d.ts +8 -0
  321. package/typings/generated/src/SidePanel/Group.d.ts +16 -0
  322. package/typings/generated/src/SidePanel/SidePanel.d.ts +7 -0
  323. package/typings/generated/src/Slider/Bar.d.ts +7 -0
  324. package/typings/generated/src/Slider/Factor.test.d.ts +1 -0
  325. package/typings/generated/src/Slider/Handle.d.ts +13 -0
  326. package/typings/generated/src/Slider/Slider.d.ts +15 -0
  327. package/typings/generated/src/Slider/Slider.test.d.ts +1 -0
  328. package/typings/generated/src/Slider/Ticks.d.ts +12 -0
  329. package/typings/generated/src/Slider/factor.d.ts +1 -0
  330. package/typings/generated/src/Slider/percentage.d.ts +4 -0
  331. package/typings/generated/src/Slider/range.d.ts +13 -0
  332. package/typings/generated/src/StartStopButton/StartStopButton.d.ts +16 -0
  333. package/typings/generated/src/StateSelector/StateSelector.d.ts +15 -0
  334. package/typings/generated/src/Stepper/Stepper.d.ts +26 -0
  335. package/typings/generated/src/Toggle/Toggle.d.ts +19 -0
  336. package/typings/generated/src/index.d.ts +69 -0
  337. package/typings/generated/src/logging/appTransport.d.ts +12 -0
  338. package/typings/generated/src/logging/appTransport.test.d.ts +1 -0
  339. package/typings/generated/src/logging/describeError.d.ts +2 -0
  340. package/typings/generated/src/logging/describeError.test.d.ts +1 -0
  341. package/typings/generated/src/logging/index.d.ts +9 -0
  342. package/typings/generated/src/logging/logBuffer.d.ts +9 -0
  343. package/typings/generated/src/logging/logBuffer.test.d.ts +1 -0
  344. package/typings/generated/src/logging/sendInitialLogMessages.d.ts +2 -0
  345. package/typings/generated/src/store.d.ts +65 -0
  346. package/typings/generated/src/utils/AppTypes.d.ts +49 -0
  347. package/typings/generated/src/utils/appDirs.d.ts +35 -0
  348. package/typings/generated/src/utils/bleChannels.d.ts +6 -0
  349. package/typings/generated/src/utils/classNames.d.ts +17 -0
  350. package/typings/generated/src/utils/classNames.test.d.ts +1 -0
  351. package/typings/generated/src/utils/colors.d.ts +31 -0
  352. package/typings/generated/src/utils/describeVersion.d.ts +3 -0
  353. package/typings/generated/src/utils/environment.d.ts +1 -0
  354. package/typings/generated/src/utils/logLibVersions.d.ts +2 -0
  355. package/typings/generated/src/utils/open.d.ts +15 -0
  356. package/typings/generated/src/utils/packageJson.d.ts +4 -0
  357. package/typings/generated/src/utils/persistentStore.d.ts +35 -0
  358. package/typings/generated/src/utils/systemReport.d.ts +4 -0
  359. package/typings/generated/src/utils/truncateMiddle.d.ts +2 -0
  360. package/typings/generated/src/utils/truncateMiddle.test.d.ts +1 -0
  361. package/typings/generated/src/utils/usageData.d.ts +63 -0
  362. package/typings/generated/src/utils/useHotKey.d.ts +6 -0
  363. package/typings/generated/src/utils/useStopwatch.d.ts +22 -0
  364. package/typings/generated/src/utils/useStopwatch.test.d.ts +1 -0
  365. package/typings/generated/test/dispatchTo.d.ts +3 -0
  366. package/typings/generated/test/testrenderer.d.ts +5 -0
  367. package/typings/nrf-intel-hex.d.ts +58 -0
@@ -0,0 +1,26 @@
1
+ /*
2
+ * Copyright (c) 2021 Nordic Semiconductor ASA
3
+ *
4
+ * SPDX-License-Identifier: LicenseRef-Nordic-4-Clause
5
+ */
6
+
7
+ @import "../variables";
8
+
9
+ .core19-nav-bar {
10
+ width: 100%;
11
+ height: $nav-bar-height;
12
+
13
+ background-color: $white;
14
+
15
+ display: flex;
16
+ flex: none;
17
+ flex-direction: row;
18
+ align-items: center;
19
+
20
+ z-index: 100;
21
+
22
+ .core19-nav-bar-device-selector {
23
+ width: $side-panel-width;
24
+ align-self: start;
25
+ }
26
+ }
@@ -0,0 +1,34 @@
1
+ /*
2
+ * Copyright (c) 2021 Nordic Semiconductor ASA
3
+ *
4
+ * SPDX-License-Identifier: LicenseRef-Nordic-4-Clause
5
+ */
6
+
7
+ @import '../variables';
8
+
9
+ .core19-nav-menu-item {
10
+ margin-left: 29px;
11
+ border: none;
12
+ background: none;
13
+
14
+ &.first {
15
+ margin-left: 20px;
16
+ }
17
+
18
+ padding: 0;
19
+
20
+ font-size: 14px;
21
+ font-weight: $font-weight-light;
22
+ color: $gray-700;
23
+ text-transform: uppercase;
24
+
25
+ &.selected {
26
+ font-weight: $font-weight-bold;
27
+ }
28
+
29
+ &:focus,
30
+ &:hover {
31
+ text-decoration: none;
32
+ color: inherit;
33
+ }
34
+ }
@@ -0,0 +1,18 @@
1
+ /*
2
+ * Copyright (c) 2023 Nordic Semiconductor ASA
3
+ *
4
+ * SPDX-License-Identifier: LicenseRef-Nordic-4-Clause
5
+ */
6
+
7
+ import { ipcRenderer } from 'electron';
8
+
9
+ import type { OpenAppOptions } from '../../main';
10
+
11
+ type AppSpec = { name: string; source: string };
12
+
13
+ export const openAppWindow = (
14
+ app: AppSpec,
15
+ openAppOptions?: OpenAppOptions
16
+ ) => {
17
+ ipcRenderer.send('open:app', app, openAppOptions);
18
+ };
@@ -0,0 +1,149 @@
1
+ /*
2
+ * Copyright (c) 2023 Nordic Semiconductor ASA
3
+ *
4
+ * SPDX-License-Identifier: LicenseRef-Nordic-4-Clause
5
+ */
6
+
7
+ import React, { useState } from 'react';
8
+
9
+ import Button from '../Button/Button';
10
+ import logger from '../logging';
11
+ import { isDevelopment } from '../utils/environment';
12
+ import packageJson from '../utils/packageJson';
13
+
14
+ export default () => {
15
+ const [feedback, setFeedback] = useState('');
16
+ const [sayThankYou, setSayThankYou] = useState(false);
17
+
18
+ if (sayThankYou === true) {
19
+ return (
20
+ <div className="w-100 d-flex justify-content-center">
21
+ <div className="d-flex flex-column justify-content-center align-items-start bg-white px-3 py-4">
22
+ <b className="mb-3">Thank you!</b>
23
+ <section>
24
+ <p>
25
+ We value your feedback and any ideas you may have
26
+ for improving our applications.
27
+ </p>
28
+ <p>
29
+ Click the button below in order to send more
30
+ feedback.
31
+ </p>
32
+ </section>
33
+ <Button
34
+ large
35
+ className="align-self-end"
36
+ onClick={() => {
37
+ setSayThankYou(false);
38
+ setFeedback('');
39
+ }}
40
+ variant="secondary"
41
+ >
42
+ Give more feedback
43
+ </Button>
44
+ </div>
45
+ </div>
46
+ );
47
+ }
48
+
49
+ return (
50
+ <div className="w-100 d-flex justify-content-center">
51
+ <div className="d-flex flex-column justify-content-center align-items-start bg-white px-3 py-4">
52
+ <b className="mb-3">Give Feedback</b>
53
+ <section>
54
+ <p>
55
+ We value your feedback and any ideas you may have for
56
+ improving our applications. Please use the form below to
57
+ give feedback.
58
+ </p>
59
+ <p>
60
+ Note: this is not a support channel, and you will not
61
+ receive a response. For help and support, visit the{' '}
62
+ <a
63
+ href="https://devzone.nordicsemi.com/"
64
+ target="_blank"
65
+ rel="noreferrer noopener"
66
+ >
67
+ Nordic DevZone
68
+ </a>
69
+ .
70
+ </p>
71
+ </section>
72
+ <form className="d-flex flex-column w-100">
73
+ <label htmlFor="feedback-text">
74
+ <b>What is your feedback?</b>
75
+ <textarea
76
+ name="feedback-text"
77
+ className="w-100 mb-3"
78
+ style={{ height: '8rem' }}
79
+ required
80
+ value={feedback}
81
+ onChange={e => setFeedback(e.target.value)}
82
+ />
83
+ </label>
84
+ </form>
85
+ <section>
86
+ <p>
87
+ We only collect this information when you send feedback:
88
+ </p>
89
+ <ul>
90
+ <li>Application name</li>
91
+ <li>Your feedback</li>
92
+ <li>Operating system</li>
93
+ </ul>
94
+ </section>
95
+ <Button
96
+ large
97
+ className="align-self-end"
98
+ variant="primary"
99
+ onClick={() => handleFormData(feedback, setSayThankYou)}
100
+ disabled={feedback === ''}
101
+ >
102
+ Send Feedback
103
+ </Button>
104
+ </div>
105
+ </div>
106
+ );
107
+ };
108
+
109
+ const formURL =
110
+ isDevelopment === true
111
+ ? 'https://formkeep.com/f/8deb409a565'
112
+ : 'https://formkeep.com/f/36b394b92851';
113
+
114
+ const handleFormData = async (
115
+ feedback: string,
116
+ setResponse: (response: boolean) => void
117
+ ) => {
118
+ const data = {
119
+ name: getAppName(),
120
+ feedback,
121
+ platform: process.platform,
122
+ };
123
+
124
+ try {
125
+ const response = await fetch(formURL, {
126
+ method: 'POST',
127
+ body: JSON.stringify(data),
128
+ headers: {
129
+ 'Content-Type': 'application/json',
130
+ enctype: 'multipart/form-data',
131
+ },
132
+ });
133
+
134
+ if (response.ok) {
135
+ setResponse(true);
136
+ return;
137
+ }
138
+
139
+ logger.error(
140
+ `FeedbackForm: Server responded with status code ${response.status}`
141
+ );
142
+ } catch (error: unknown) {
143
+ logger.error(
144
+ `FeedbackForm: Could not send feedback. ${JSON.stringify(error)}`
145
+ );
146
+ }
147
+ };
148
+
149
+ const getAppName = () => packageJson().name;
@@ -0,0 +1,56 @@
1
+ /*
2
+ * Copyright (c) 2015 Nordic Semiconductor ASA
3
+ *
4
+ * SPDX-License-Identifier: LicenseRef-Nordic-4-Clause
5
+ */
6
+
7
+ import React from 'react';
8
+
9
+ import './pseudo-button.scss';
10
+
11
+ const invokeIfSpaceOrEnterPressed =
12
+ (onClick: React.KeyboardEventHandler<Element>) =>
13
+ (event: React.KeyboardEvent) => {
14
+ event.stopPropagation();
15
+ if (event.key === ' ' || event.key === 'Enter') {
16
+ onClick(event);
17
+ }
18
+ };
19
+
20
+ const blurAndInvoke =
21
+ (
22
+ onClick: React.MouseEventHandler<HTMLElement>
23
+ ): React.MouseEventHandler<HTMLElement> =>
24
+ (event: React.MouseEvent<HTMLElement>) => {
25
+ event.stopPropagation();
26
+ event.currentTarget.blur();
27
+ onClick(event);
28
+ };
29
+
30
+ // Motivation for this class: A normal button in HTML must not contain divs or other buttons,
31
+ // but we do have things that behave like buttons and at the same time should contain such things
32
+ export default ({
33
+ onClick = () => {},
34
+ className = '',
35
+ children,
36
+ title,
37
+ testId,
38
+ }: {
39
+ onClick?: React.EventHandler<React.SyntheticEvent>;
40
+ className?: string;
41
+ children?: React.ReactNode;
42
+ title?: string;
43
+ testId?: string;
44
+ }) => (
45
+ <div
46
+ role="button"
47
+ className={`core19-pseudo-button ${className}`}
48
+ tabIndex={0}
49
+ onClick={blurAndInvoke(onClick)}
50
+ onKeyUp={invokeIfSpaceOrEnterPressed(onClick)}
51
+ title={title}
52
+ data-testid={testId}
53
+ >
54
+ {children}
55
+ </div>
56
+ );
@@ -0,0 +1,11 @@
1
+ /*
2
+ * Copyright (c) 2021 Nordic Semiconductor ASA
3
+ *
4
+ * SPDX-License-Identifier: LicenseRef-Nordic-4-Clause
5
+ */
6
+
7
+ @import "../variables";
8
+
9
+ .core19-pseudo-button {
10
+ cursor: pointer;
11
+ }
@@ -0,0 +1,242 @@
1
+ /*
2
+ * Copyright (c) 2023 Nordic Semiconductor ASA
3
+ *
4
+ * SPDX-License-Identifier: LicenseRef-Nordic-4-Clause
5
+ */
6
+
7
+ import React, { useEffect, useState } from 'react';
8
+ import type { AutoDetectTypes } from '@serialport/bindings-cpp';
9
+ import { SerialPortOpenOptions } from 'serialport';
10
+
11
+ import { ConfirmationDialog } from '../Dialog/Dialog';
12
+ import logger from '../logging';
13
+ import {
14
+ createSerialPort,
15
+ getSerialPortOptions,
16
+ SerialPort,
17
+ } from './SerialPort';
18
+
19
+ const getCurrentOptions = async (
20
+ portPath: string,
21
+ setSettings: (options: SerialPortOpenOptions<AutoDetectTypes>) => void
22
+ ) => {
23
+ try {
24
+ const options = await getSerialPortOptions(portPath);
25
+ if (options) {
26
+ setSettings(options);
27
+ }
28
+ } catch (err) {
29
+ console.error(err);
30
+ }
31
+ };
32
+
33
+ interface ConflictingSettingsDialog {
34
+ isVisible: boolean;
35
+ onOverwrite: () => void;
36
+ onCancel: () => void;
37
+ localSettings: SerialPortOpenOptions<AutoDetectTypes>;
38
+ setSerialPortCallback: (serialPort: SerialPort) => void;
39
+ }
40
+
41
+ const ConflictingSettingsDialog = ({
42
+ isVisible,
43
+ onOverwrite,
44
+ onCancel,
45
+ localSettings,
46
+ setSerialPortCallback,
47
+ }: ConflictingSettingsDialog) => {
48
+ const [activeSettings, setSettings] =
49
+ useState<SerialPortOpenOptions<AutoDetectTypes>>();
50
+
51
+ useEffect(() => {
52
+ if (!activeSettings) {
53
+ getCurrentOptions(localSettings.path, setSettings);
54
+ }
55
+ }, [isVisible, activeSettings, localSettings.path]);
56
+
57
+ const connectToSelectedSerialPort = async (
58
+ overwrite: boolean,
59
+ newSettings: SerialPortOpenOptions<AutoDetectTypes>
60
+ ) => {
61
+ try {
62
+ const port = await createSerialPort(newSettings, {
63
+ overwrite,
64
+ settingsLocked: false,
65
+ });
66
+ setSerialPortCallback(port);
67
+ } catch (error) {
68
+ const msg = (error as Error).message;
69
+ if (msg.includes('FAILED_DIFFERENT_SETTINGS')) {
70
+ onCancel();
71
+ } else {
72
+ console.error(
73
+ 'Port could not be opened. Verify it is not used by some other applications'
74
+ );
75
+ }
76
+ }
77
+ };
78
+
79
+ return (
80
+ <ConfirmationDialog
81
+ title={`Conflicting Serial Settings for ${localSettings.path}`}
82
+ isVisible={isVisible}
83
+ size="lg"
84
+ onCancel={onCancel}
85
+ optionalLabel="Overwrite with Selected"
86
+ onOptional={onOverwrite}
87
+ confirmLabel="Continue with Active"
88
+ onConfirm={() => {
89
+ onCancel();
90
+ if (activeSettings) {
91
+ connectToSelectedSerialPort(true, activeSettings);
92
+ } else {
93
+ logger.error(
94
+ 'Could not get the active serial port settings.'
95
+ );
96
+ }
97
+ }}
98
+ >
99
+ <p>
100
+ You are about to connect to <code>{localSettings.path}</code>.
101
+ This port is already active with different serial settings -
102
+ most likely it is opened by another nRF Connect app running on
103
+ your computer.
104
+ </p>
105
+ <p>
106
+ You may continue with the active serial port settings or choose
107
+ to overwrite these with the settings you have selected. If you
108
+ choose to overwrite the active settings, the port will be closed
109
+ and reopened with the new settings. Alternatively, you can close
110
+ the port in the other app and try again.
111
+ </p>
112
+ <p>
113
+ The serial settings depend on the attached device and it&apos;s
114
+ embedded application, and normally the serial port settings for
115
+ all nRF Connect apps should be the same for a given serial port.
116
+ </p>
117
+
118
+ <DisplayConflictingSettings
119
+ activeSettings={activeSettings}
120
+ localSettings={localSettings}
121
+ />
122
+ </ConfirmationDialog>
123
+ );
124
+ };
125
+
126
+ type DisplayConflictingSettings = {
127
+ activeSettings?: SerialPortOpenOptions<AutoDetectTypes>;
128
+ localSettings: SerialPortOpenOptions<AutoDetectTypes>;
129
+ };
130
+
131
+ const DisplayConflictingSettings = ({
132
+ activeSettings,
133
+ localSettings,
134
+ }: DisplayConflictingSettings) => {
135
+ const allKeys = Object.keys(localSettings);
136
+ if (activeSettings) {
137
+ Object.keys(activeSettings).forEach(key => {
138
+ if (!allKeys.includes(key)) {
139
+ allKeys.push(key);
140
+ }
141
+ });
142
+ }
143
+
144
+ const conflictingSettings = activeSettings
145
+ ? allKeys.filter(
146
+ key =>
147
+ activeSettings[key as keyof typeof activeSettings] !==
148
+ localSettings[key as keyof typeof localSettings]
149
+ )
150
+ : [];
151
+
152
+ return (
153
+ <div
154
+ style={{
155
+ width: '100%',
156
+ display: 'flex',
157
+ justifyContent: 'flex-start',
158
+ margin: '32px 0',
159
+ }}
160
+ >
161
+ <div style={{ marginRight: '128px' }}>
162
+ <b>Active settings</b>
163
+ {activeSettings ? (
164
+ <ul style={listStyle}>
165
+ {allKeys.map(key => (
166
+ <li
167
+ key={key}
168
+ style={{
169
+ ...listItemStyle,
170
+ backgroundColor:
171
+ conflictingSettings.includes(key)
172
+ ? '#FFCDD2'
173
+ : undefined,
174
+ }}
175
+ >
176
+ {key}:
177
+ {prettifyValue(
178
+ activeSettings[
179
+ key as keyof typeof activeSettings
180
+ ]
181
+ )}
182
+ </li>
183
+ ))}
184
+ </ul>
185
+ ) : (
186
+ <p>Could not retrieve the current settings</p>
187
+ )}
188
+ </div>
189
+ <div>
190
+ <b>Selected settings</b>
191
+ <ul style={listStyle}>
192
+ {allKeys.map(key => (
193
+ <li
194
+ key={key}
195
+ style={{
196
+ ...listItemStyle,
197
+ backgroundColor: conflictingSettings.includes(
198
+ key
199
+ )
200
+ ? '#FFCDD2'
201
+ : undefined,
202
+ }}
203
+ >
204
+ {key}:
205
+ {prettifyValue(
206
+ localSettings[key as keyof typeof localSettings]
207
+ )}
208
+ </li>
209
+ ))}
210
+ </ul>
211
+ </div>
212
+ </div>
213
+ );
214
+ };
215
+
216
+ const prettifyValue = (value: unknown) => {
217
+ if (typeof value === 'boolean') {
218
+ return value ? 'on' : 'off';
219
+ }
220
+
221
+ if (typeof value === 'string' || typeof value === 'number') {
222
+ return value;
223
+ }
224
+
225
+ if (value == null) {
226
+ return 'N/A';
227
+ }
228
+
229
+ return JSON.stringify(value);
230
+ };
231
+
232
+ export default ConflictingSettingsDialog;
233
+
234
+ const listStyle: React.CSSProperties = {
235
+ listStyleType: 'none',
236
+ margin: 0,
237
+ padding: 0,
238
+ };
239
+
240
+ const listItemStyle: React.CSSProperties = {
241
+ padding: '4px 0',
242
+ };
@@ -0,0 +1,54 @@
1
+ /*
2
+ * Copyright (c) 2022 Nordic Semiconductor ASA
3
+ *
4
+ * SPDX-License-Identifier: LicenseRef-Nordic-4-Clause
5
+ */
6
+
7
+ import { ipcRenderer } from 'electron';
8
+
9
+ import { OverwriteOptions, SERIALPORT_CHANNEL } from '../../main';
10
+ import { createSerialPort } from './SerialPort';
11
+
12
+ jest.mock('electron', () => ({
13
+ ipcRenderer: { invoke: jest.fn(), on: jest.fn(), send: jest.fn() },
14
+ }));
15
+
16
+ const defaultOptions = { path: '/dev/ROBOT', baudRate: 115200 };
17
+
18
+ test('SerialPort is initialized with the correct setup', async () => {
19
+ const port = await createSerialPort(defaultOptions);
20
+
21
+ expect(ipcRenderer.invoke).toHaveBeenCalledWith(
22
+ SERIALPORT_CHANNEL.OPEN,
23
+ defaultOptions,
24
+ { overwrite: false, settingsLocked: false }
25
+ );
26
+
27
+ expect(port.path).toBe(defaultOptions.path);
28
+ });
29
+
30
+ test('SerialPort may be initialized with overwrite and settingsLocked', async () => {
31
+ let overwriteOptions: OverwriteOptions = { overwrite: true };
32
+ await createSerialPort(defaultOptions, overwriteOptions);
33
+ expect(ipcRenderer.invoke).toHaveBeenCalledWith(
34
+ SERIALPORT_CHANNEL.OPEN,
35
+ defaultOptions,
36
+ overwriteOptions
37
+ );
38
+
39
+ overwriteOptions = { settingsLocked: true };
40
+ await createSerialPort(defaultOptions, overwriteOptions);
41
+ expect(ipcRenderer.invoke).toHaveBeenCalledWith(
42
+ SERIALPORT_CHANNEL.OPEN,
43
+ defaultOptions,
44
+ overwriteOptions
45
+ );
46
+
47
+ overwriteOptions = { settingsLocked: true, overwrite: true };
48
+ await createSerialPort(defaultOptions, overwriteOptions);
49
+ expect(ipcRenderer.invoke).toHaveBeenCalledWith(
50
+ SERIALPORT_CHANNEL.OPEN,
51
+ defaultOptions,
52
+ overwriteOptions
53
+ );
54
+ });