@nordicsemiconductor/pc-nrfconnect-shared 60.0.0-pre1 → 76.0.0

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 (323) hide show
  1. package/Changelog.md +222 -5
  2. package/config/colors.js +46 -0
  3. package/config/tailwind.config.js +25 -0
  4. package/config/tsconfig.json +2 -1
  5. package/dist/bootstrap.css +8951 -0
  6. package/package.json +28 -10
  7. package/scripts/esbuild-renderer.js +25 -17
  8. package/scripts/nordic-publish.js +89 -0
  9. package/src/About/About.tsx +9 -3
  10. package/src/About/ApplicationCard.tsx +20 -22
  11. package/src/About/DeviceCard.tsx +28 -26
  12. package/src/About/DocumentationCard.tsx +12 -9
  13. package/src/About/Section.tsx +5 -5
  14. package/src/About/SupportCard.tsx +61 -56
  15. package/src/App/App.tsx +36 -11
  16. package/src/App/appLayout.ts +0 -1
  17. package/src/App/preflight.scss +443 -0
  18. package/src/App/tailwind.css +12 -0
  19. package/src/Button/Button.tsx +34 -24
  20. package/src/Device/DeviceSelector/DeviceSelector.tsx +5 -2
  21. package/src/Device/DeviceSetup/DeviceSetupView.tsx +6 -3
  22. package/src/Device/deviceAutoSelectSlice.ts +14 -8
  23. package/src/Device/deviceLibWrapper.ts +0 -1
  24. package/src/Device/deviceLister.ts +68 -40
  25. package/src/Device/deviceSetup.ts +15 -20
  26. package/src/Device/jprogOperations.ts +5 -5
  27. package/src/Device/sdfuOperations.ts +43 -37
  28. package/src/Dialog/dialog.scss +0 -4
  29. package/src/Dropdown/Dropdown.module.scss +2 -70
  30. package/src/Dropdown/Dropdown.tsx +20 -14
  31. package/src/ErrorBoundary/ErrorBoundary.test.tsx +1 -18
  32. package/src/FlashMessage/FlashMessage.tsx +159 -0
  33. package/src/FlashMessage/FlashMessageSlice.ts +88 -0
  34. package/src/FlashMessage/flashMessage.css +32 -0
  35. package/src/NavBar/NavMenu.tsx +1 -2
  36. package/src/NavBar/NavMenuItem.tsx +5 -7
  37. package/src/NavBar/nav-bar.scss +2 -1
  38. package/src/NavBar/nav-menu-item.scss +0 -5
  39. package/src/NumberInputWithSlider/NumberInputSliderWithUnit.tsx +74 -0
  40. package/src/Panes/FeedbackPane.tsx +83 -48
  41. package/src/SerialPort/ConflictingSettingsDialog.tsx +50 -66
  42. package/src/StateSelector/StateSelector.tsx +1 -1
  43. package/src/Stepper/Stepper.tsx +2 -3
  44. package/src/index.ts +14 -3
  45. package/src/store.ts +10 -3
  46. package/src/utils/colors.ts +147 -12
  47. package/src/utils/usageData.ts +59 -52
  48. package/src/utils/useFocusedOnVisible.ts +26 -0
  49. package/src/variables.scss +5 -5
  50. package/typings/generated/main/index.d.ts +1 -0
  51. package/typings/generated/main/index.d.ts.map +1 -0
  52. package/typings/generated/src/About/About.d.ts +6 -2
  53. package/typings/generated/src/About/About.d.ts.map +1 -0
  54. package/typings/generated/src/About/AboutButton.d.ts +1 -0
  55. package/typings/generated/src/About/AboutButton.d.ts.map +1 -0
  56. package/typings/generated/src/About/ApplicationCard.d.ts +1 -0
  57. package/typings/generated/src/About/ApplicationCard.d.ts.map +1 -0
  58. package/typings/generated/src/About/DeviceCard.d.ts +1 -0
  59. package/typings/generated/src/About/DeviceCard.d.ts.map +1 -0
  60. package/typings/generated/src/About/DocumentationCard.d.ts +5 -2
  61. package/typings/generated/src/About/DocumentationCard.d.ts.map +1 -0
  62. package/typings/generated/src/About/DocumentationSection.d.ts +1 -0
  63. package/typings/generated/src/About/DocumentationSection.d.ts.map +1 -0
  64. package/typings/generated/src/About/Section.d.ts +1 -1
  65. package/typings/generated/src/About/Section.d.ts.map +1 -0
  66. package/typings/generated/src/About/ShortcutButton.d.ts +1 -0
  67. package/typings/generated/src/About/ShortcutButton.d.ts.map +1 -0
  68. package/typings/generated/src/About/SupportCard.d.ts +1 -0
  69. package/typings/generated/src/About/SupportCard.d.ts.map +1 -0
  70. package/typings/generated/src/About/shortcutSlice.d.ts +1 -0
  71. package/typings/generated/src/About/shortcutSlice.d.ts.map +1 -0
  72. package/typings/generated/src/Alert/Alert.d.ts +1 -0
  73. package/typings/generated/src/Alert/Alert.d.ts.map +1 -0
  74. package/typings/generated/src/App/App.d.ts +4 -0
  75. package/typings/generated/src/App/App.d.ts.map +1 -0
  76. package/typings/generated/src/App/App.test.d.ts +1 -0
  77. package/typings/generated/src/App/App.test.d.ts.map +1 -0
  78. package/typings/generated/src/App/ConnectedToStore.d.ts +1 -0
  79. package/typings/generated/src/App/ConnectedToStore.d.ts.map +1 -0
  80. package/typings/generated/src/App/VisibilityBar.d.ts +1 -0
  81. package/typings/generated/src/App/VisibilityBar.d.ts.map +1 -0
  82. package/typings/generated/src/App/appLayout.d.ts +1 -1
  83. package/typings/generated/src/App/appLayout.d.ts.map +1 -0
  84. package/typings/generated/src/Button/Button.d.ts +2 -1
  85. package/typings/generated/src/Button/Button.d.ts.map +1 -0
  86. package/typings/generated/src/Card/Card.d.ts +1 -0
  87. package/typings/generated/src/Card/Card.d.ts.map +1 -0
  88. package/typings/generated/src/Device/BrokenDeviceDialog/BrokenDeviceDialog.d.ts +1 -0
  89. package/typings/generated/src/Device/BrokenDeviceDialog/BrokenDeviceDialog.d.ts.map +1 -0
  90. package/typings/generated/src/Device/BrokenDeviceDialog/brokenDeviceDialogSlice.d.ts +1 -0
  91. package/typings/generated/src/Device/BrokenDeviceDialog/brokenDeviceDialogSlice.d.ts.map +1 -0
  92. package/typings/generated/src/Device/DeviceSelector/BasicDeviceInfo.d.ts +1 -0
  93. package/typings/generated/src/Device/DeviceSelector/BasicDeviceInfo.d.ts.map +1 -0
  94. package/typings/generated/src/Device/DeviceSelector/DeviceIcon.d.ts +1 -0
  95. package/typings/generated/src/Device/DeviceSelector/DeviceIcon.d.ts.map +1 -0
  96. package/typings/generated/src/Device/DeviceSelector/DeviceList/AnimatedList.d.ts +1 -0
  97. package/typings/generated/src/Device/DeviceSelector/DeviceList/AnimatedList.d.ts.map +1 -0
  98. package/typings/generated/src/Device/DeviceSelector/DeviceList/BrokenDevice.d.ts +1 -0
  99. package/typings/generated/src/Device/DeviceSelector/DeviceList/BrokenDevice.d.ts.map +1 -0
  100. package/typings/generated/src/Device/DeviceSelector/DeviceList/Device.d.ts +1 -0
  101. package/typings/generated/src/Device/DeviceSelector/DeviceList/Device.d.ts.map +1 -0
  102. package/typings/generated/src/Device/DeviceSelector/DeviceList/DeviceList.d.ts +1 -0
  103. package/typings/generated/src/Device/DeviceSelector/DeviceList/DeviceList.d.ts.map +1 -0
  104. package/typings/generated/src/Device/DeviceSelector/DeviceList/EditDeviceButtons.d.ts +1 -0
  105. package/typings/generated/src/Device/DeviceSelector/DeviceList/EditDeviceButtons.d.ts.map +1 -0
  106. package/typings/generated/src/Device/DeviceSelector/DeviceList/MoreDeviceInfo.d.ts +1 -0
  107. package/typings/generated/src/Device/DeviceSelector/DeviceList/MoreDeviceInfo.d.ts.map +1 -0
  108. package/typings/generated/src/Device/DeviceSelector/DeviceList/RenameDevice.d.ts +1 -0
  109. package/typings/generated/src/Device/DeviceSelector/DeviceList/RenameDevice.d.ts.map +1 -0
  110. package/typings/generated/src/Device/DeviceSelector/DeviceSelector.d.ts +1 -0
  111. package/typings/generated/src/Device/DeviceSelector/DeviceSelector.d.ts.map +1 -0
  112. package/typings/generated/src/Device/DeviceSelector/DeviceSelector.test.d.ts +1 -0
  113. package/typings/generated/src/Device/DeviceSelector/DeviceSelector.test.d.ts.map +1 -0
  114. package/typings/generated/src/Device/DeviceSelector/Favorite.d.ts +1 -0
  115. package/typings/generated/src/Device/DeviceSelector/Favorite.d.ts.map +1 -0
  116. package/typings/generated/src/Device/DeviceSelector/SelectDevice.d.ts +1 -0
  117. package/typings/generated/src/Device/DeviceSelector/SelectDevice.d.ts.map +1 -0
  118. package/typings/generated/src/Device/DeviceSelector/SelectedDevice.d.ts +1 -0
  119. package/typings/generated/src/Device/DeviceSelector/SelectedDevice.d.ts.map +1 -0
  120. package/typings/generated/src/Device/DeviceSetup/DeviceSetupView.d.ts +1 -0
  121. package/typings/generated/src/Device/DeviceSetup/DeviceSetupView.d.ts.map +1 -0
  122. package/typings/generated/src/Device/deviceAutoSelectSlice.d.ts +3 -1
  123. package/typings/generated/src/Device/deviceAutoSelectSlice.d.ts.map +1 -0
  124. package/typings/generated/src/Device/deviceInfo/deviceInfo.d.ts +1 -0
  125. package/typings/generated/src/Device/deviceInfo/deviceInfo.d.ts.map +1 -0
  126. package/typings/generated/src/Device/deviceLibWrapper.d.ts +1 -0
  127. package/typings/generated/src/Device/deviceLibWrapper.d.ts.map +1 -0
  128. package/typings/generated/src/Device/deviceLibWrapper.test.d.ts +1 -0
  129. package/typings/generated/src/Device/deviceLibWrapper.test.d.ts.map +1 -0
  130. package/typings/generated/src/Device/deviceLister.d.ts +4 -2
  131. package/typings/generated/src/Device/deviceLister.d.ts.map +1 -0
  132. package/typings/generated/src/Device/deviceLister.test.d.ts +1 -0
  133. package/typings/generated/src/Device/deviceLister.test.d.ts.map +1 -0
  134. package/typings/generated/src/Device/deviceSetup.d.ts +8 -7
  135. package/typings/generated/src/Device/deviceSetup.d.ts.map +1 -0
  136. package/typings/generated/src/Device/deviceSetupSlice.d.ts +1 -0
  137. package/typings/generated/src/Device/deviceSetupSlice.d.ts.map +1 -0
  138. package/typings/generated/src/Device/deviceSlice.d.ts +1 -0
  139. package/typings/generated/src/Device/deviceSlice.d.ts.map +1 -0
  140. package/typings/generated/src/Device/dfu-cc.d.ts +1 -0
  141. package/typings/generated/src/Device/dfu-cc.d.ts.map +1 -0
  142. package/typings/generated/src/Device/initPacket.d.ts +1 -0
  143. package/typings/generated/src/Device/initPacket.d.ts.map +1 -0
  144. package/typings/generated/src/Device/jprogOperations.d.ts +1 -0
  145. package/typings/generated/src/Device/jprogOperations.d.ts.map +1 -0
  146. package/typings/generated/src/Device/sdfuOperations.d.ts +4 -3
  147. package/typings/generated/src/Device/sdfuOperations.d.ts.map +1 -0
  148. package/typings/generated/src/Dialog/Dialog.d.ts +1 -0
  149. package/typings/generated/src/Dialog/Dialog.d.ts.map +1 -0
  150. package/typings/generated/src/Dialog/Dialog.test.d.ts +1 -0
  151. package/typings/generated/src/Dialog/Dialog.test.d.ts.map +1 -0
  152. package/typings/generated/src/Dropdown/Dropdown.d.ts +3 -1
  153. package/typings/generated/src/Dropdown/Dropdown.d.ts.map +1 -0
  154. package/typings/generated/src/Dropdown/Dropdown.test.d.ts +1 -0
  155. package/typings/generated/src/Dropdown/Dropdown.test.d.ts.map +1 -0
  156. package/typings/generated/src/ErrorBoundary/ErrorBoundary.d.ts +1 -0
  157. package/typings/generated/src/ErrorBoundary/ErrorBoundary.d.ts.map +1 -0
  158. package/typings/generated/src/ErrorBoundary/ErrorBoundary.test.d.ts +1 -0
  159. package/typings/generated/src/ErrorBoundary/ErrorBoundary.test.d.ts.map +1 -0
  160. package/typings/generated/src/ErrorDialog/ErrorDialog.d.ts +1 -0
  161. package/typings/generated/src/ErrorDialog/ErrorDialog.d.ts.map +1 -0
  162. package/typings/generated/src/ErrorDialog/ErrorDialog.test.d.ts +1 -0
  163. package/typings/generated/src/ErrorDialog/ErrorDialog.test.d.ts.map +1 -0
  164. package/typings/generated/src/ErrorDialog/errorDialogSlice.d.ts +1 -0
  165. package/typings/generated/src/ErrorDialog/errorDialogSlice.d.ts.map +1 -0
  166. package/typings/generated/src/ErrorDialog/errorDialogSlice.test.d.ts +1 -0
  167. package/typings/generated/src/ErrorDialog/errorDialogSlice.test.d.ts.map +1 -0
  168. package/typings/generated/src/FactoryReset/FactoryResetButton.d.ts +1 -0
  169. package/typings/generated/src/FactoryReset/FactoryResetButton.d.ts.map +1 -0
  170. package/typings/generated/src/FactoryReset/FactoryResetButton.test.d.ts +1 -0
  171. package/typings/generated/src/FactoryReset/FactoryResetButton.test.d.ts.map +1 -0
  172. package/typings/generated/src/FlashMessage/FlashMessage.d.ts +5 -0
  173. package/typings/generated/src/FlashMessage/FlashMessage.d.ts.map +1 -0
  174. package/typings/generated/src/FlashMessage/FlashMessageSlice.d.ts +20 -0
  175. package/typings/generated/src/FlashMessage/FlashMessageSlice.d.ts.map +1 -0
  176. package/typings/generated/src/InlineInput/InlineInput.d.ts +1 -0
  177. package/typings/generated/src/InlineInput/InlineInput.d.ts.map +1 -0
  178. package/typings/generated/src/InlineInput/NumberInlineInput.d.ts +1 -0
  179. package/typings/generated/src/InlineInput/NumberInlineInput.d.ts.map +1 -0
  180. package/typings/generated/src/Log/LogEntry.d.ts +1 -0
  181. package/typings/generated/src/Log/LogEntry.d.ts.map +1 -0
  182. package/typings/generated/src/Log/LogViewer.d.ts +1 -0
  183. package/typings/generated/src/Log/LogViewer.d.ts.map +1 -0
  184. package/typings/generated/src/Log/logSlice.d.ts +1 -0
  185. package/typings/generated/src/Log/logSlice.d.ts.map +1 -0
  186. package/typings/generated/src/Log/syncLogToStore.d.ts +1 -0
  187. package/typings/generated/src/Log/syncLogToStore.d.ts.map +1 -0
  188. package/typings/generated/src/Logo/Logo.d.ts +1 -0
  189. package/typings/generated/src/Logo/Logo.d.ts.map +1 -0
  190. package/typings/generated/src/Main/Main.d.ts +1 -0
  191. package/typings/generated/src/Main/Main.d.ts.map +1 -0
  192. package/typings/generated/src/MasonryLayout/MasonryLayout.d.ts +1 -0
  193. package/typings/generated/src/MasonryLayout/MasonryLayout.d.ts.map +1 -0
  194. package/typings/generated/src/NavBar/NavBar.d.ts +1 -0
  195. package/typings/generated/src/NavBar/NavBar.d.ts.map +1 -0
  196. package/typings/generated/src/NavBar/NavMenu.d.ts +1 -0
  197. package/typings/generated/src/NavBar/NavMenu.d.ts.map +1 -0
  198. package/typings/generated/src/NavBar/NavMenu.test.d.ts +1 -0
  199. package/typings/generated/src/NavBar/NavMenu.test.d.ts.map +1 -0
  200. package/typings/generated/src/NavBar/NavMenuItem.d.ts +1 -1
  201. package/typings/generated/src/NavBar/NavMenuItem.d.ts.map +1 -0
  202. package/typings/generated/src/NumberInputWithSlider/NumberInputSliderWithUnit.d.ts +14 -0
  203. package/typings/generated/src/NumberInputWithSlider/NumberInputSliderWithUnit.d.ts.map +1 -0
  204. package/typings/generated/src/OpenApp/openApp.d.ts +1 -0
  205. package/typings/generated/src/OpenApp/openApp.d.ts.map +1 -0
  206. package/typings/generated/src/Panes/FeedbackPane.d.ts +5 -1
  207. package/typings/generated/src/Panes/FeedbackPane.d.ts.map +1 -0
  208. package/typings/generated/src/PseudoButton/PseudoButton.d.ts +1 -0
  209. package/typings/generated/src/PseudoButton/PseudoButton.d.ts.map +1 -0
  210. package/typings/generated/src/SerialPort/ConflictingSettingsDialog.d.ts +1 -0
  211. package/typings/generated/src/SerialPort/ConflictingSettingsDialog.d.ts.map +1 -0
  212. package/typings/generated/src/SerialPort/SerialPort.d.ts +1 -0
  213. package/typings/generated/src/SerialPort/SerialPort.d.ts.map +1 -0
  214. package/typings/generated/src/SerialPort/SerialPort.test.d.ts +1 -0
  215. package/typings/generated/src/SerialPort/SerialPort.test.d.ts.map +1 -0
  216. package/typings/generated/src/Shortcuts/ShortcutItem.d.ts +1 -0
  217. package/typings/generated/src/Shortcuts/ShortcutItem.d.ts.map +1 -0
  218. package/typings/generated/src/Shortcuts/ShortcutModal.d.ts +1 -0
  219. package/typings/generated/src/Shortcuts/ShortcutModal.d.ts.map +1 -0
  220. package/typings/generated/src/SidePanel/Group.d.ts +1 -0
  221. package/typings/generated/src/SidePanel/Group.d.ts.map +1 -0
  222. package/typings/generated/src/SidePanel/SidePanel.d.ts +1 -0
  223. package/typings/generated/src/SidePanel/SidePanel.d.ts.map +1 -0
  224. package/typings/generated/src/Slider/Bar.d.ts +1 -0
  225. package/typings/generated/src/Slider/Bar.d.ts.map +1 -0
  226. package/typings/generated/src/Slider/Factor.test.d.ts +1 -0
  227. package/typings/generated/src/Slider/Factor.test.d.ts.map +1 -0
  228. package/typings/generated/src/Slider/Handle.d.ts +1 -0
  229. package/typings/generated/src/Slider/Handle.d.ts.map +1 -0
  230. package/typings/generated/src/Slider/Slider.d.ts +1 -0
  231. package/typings/generated/src/Slider/Slider.d.ts.map +1 -0
  232. package/typings/generated/src/Slider/Slider.test.d.ts +1 -0
  233. package/typings/generated/src/Slider/Slider.test.d.ts.map +1 -0
  234. package/typings/generated/src/Slider/Ticks.d.ts +1 -0
  235. package/typings/generated/src/Slider/Ticks.d.ts.map +1 -0
  236. package/typings/generated/src/Slider/factor.d.ts +1 -0
  237. package/typings/generated/src/Slider/factor.d.ts.map +1 -0
  238. package/typings/generated/src/Slider/percentage.d.ts +1 -0
  239. package/typings/generated/src/Slider/percentage.d.ts.map +1 -0
  240. package/typings/generated/src/Slider/range.d.ts +1 -0
  241. package/typings/generated/src/Slider/range.d.ts.map +1 -0
  242. package/typings/generated/src/StartStopButton/StartStopButton.d.ts +1 -0
  243. package/typings/generated/src/StartStopButton/StartStopButton.d.ts.map +1 -0
  244. package/typings/generated/src/StateSelector/StateSelector.d.ts +1 -0
  245. package/typings/generated/src/StateSelector/StateSelector.d.ts.map +1 -0
  246. package/typings/generated/src/Stepper/Stepper.d.ts +1 -0
  247. package/typings/generated/src/Stepper/Stepper.d.ts.map +1 -0
  248. package/typings/generated/src/Toggle/Toggle.d.ts +1 -0
  249. package/typings/generated/src/Toggle/Toggle.d.ts.map +1 -0
  250. package/typings/generated/src/index.d.ts +8 -4
  251. package/typings/generated/src/index.d.ts.map +1 -0
  252. package/typings/generated/src/logging/appTransport.d.ts +1 -0
  253. package/typings/generated/src/logging/appTransport.d.ts.map +1 -0
  254. package/typings/generated/src/logging/appTransport.test.d.ts +1 -0
  255. package/typings/generated/src/logging/appTransport.test.d.ts.map +1 -0
  256. package/typings/generated/src/logging/describeError.d.ts +1 -0
  257. package/typings/generated/src/logging/describeError.d.ts.map +1 -0
  258. package/typings/generated/src/logging/describeError.test.d.ts +1 -0
  259. package/typings/generated/src/logging/describeError.test.d.ts.map +1 -0
  260. package/typings/generated/src/logging/index.d.ts +1 -0
  261. package/typings/generated/src/logging/index.d.ts.map +1 -0
  262. package/typings/generated/src/logging/logBuffer.d.ts +1 -0
  263. package/typings/generated/src/logging/logBuffer.d.ts.map +1 -0
  264. package/typings/generated/src/logging/logBuffer.test.d.ts +1 -0
  265. package/typings/generated/src/logging/logBuffer.test.d.ts.map +1 -0
  266. package/typings/generated/src/logging/sendInitialLogMessages.d.ts +1 -0
  267. package/typings/generated/src/logging/sendInitialLogMessages.d.ts.map +1 -0
  268. package/typings/generated/src/store.d.ts +21 -18
  269. package/typings/generated/src/store.d.ts.map +1 -0
  270. package/typings/generated/src/utils/AppTypes.d.ts +1 -0
  271. package/typings/generated/src/utils/AppTypes.d.ts.map +1 -0
  272. package/typings/generated/src/utils/appDirs.d.ts +1 -0
  273. package/typings/generated/src/utils/appDirs.d.ts.map +1 -0
  274. package/typings/generated/src/utils/bleChannels.d.ts +1 -0
  275. package/typings/generated/src/utils/bleChannels.d.ts.map +1 -0
  276. package/typings/generated/src/utils/classNames.d.ts +1 -0
  277. package/typings/generated/src/utils/classNames.d.ts.map +1 -0
  278. package/typings/generated/src/utils/classNames.test.d.ts +1 -0
  279. package/typings/generated/src/utils/classNames.test.d.ts.map +1 -0
  280. package/typings/generated/src/utils/colors.d.ts +126 -3
  281. package/typings/generated/src/utils/colors.d.ts.map +1 -0
  282. package/typings/generated/src/utils/describeVersion.d.ts +1 -0
  283. package/typings/generated/src/utils/describeVersion.d.ts.map +1 -0
  284. package/typings/generated/src/utils/environment.d.ts +1 -0
  285. package/typings/generated/src/utils/environment.d.ts.map +1 -0
  286. package/typings/generated/src/utils/logLibVersions.d.ts +1 -0
  287. package/typings/generated/src/utils/logLibVersions.d.ts.map +1 -0
  288. package/typings/generated/src/utils/open.d.ts +1 -0
  289. package/typings/generated/src/utils/open.d.ts.map +1 -0
  290. package/typings/generated/src/utils/packageJson.d.ts +1 -0
  291. package/typings/generated/src/utils/packageJson.d.ts.map +1 -0
  292. package/typings/generated/src/utils/persistentStore.d.ts +1 -0
  293. package/typings/generated/src/utils/persistentStore.d.ts.map +1 -0
  294. package/typings/generated/src/utils/systemReport.d.ts +1 -0
  295. package/typings/generated/src/utils/systemReport.d.ts.map +1 -0
  296. package/typings/generated/src/utils/truncateMiddle.d.ts +1 -0
  297. package/typings/generated/src/utils/truncateMiddle.d.ts.map +1 -0
  298. package/typings/generated/src/utils/truncateMiddle.test.d.ts +1 -0
  299. package/typings/generated/src/utils/truncateMiddle.test.d.ts.map +1 -0
  300. package/typings/generated/src/utils/usageData.d.ts +4 -3
  301. package/typings/generated/src/utils/usageData.d.ts.map +1 -0
  302. package/typings/generated/src/utils/useFocusedOnVisible.d.ts +11 -0
  303. package/typings/generated/src/utils/useFocusedOnVisible.d.ts.map +1 -0
  304. package/typings/generated/src/utils/useHotKey.d.ts +1 -0
  305. package/typings/generated/src/utils/useHotKey.d.ts.map +1 -0
  306. package/typings/generated/src/utils/useStopwatch.d.ts +1 -0
  307. package/typings/generated/src/utils/useStopwatch.d.ts.map +1 -0
  308. package/typings/generated/src/utils/useStopwatch.test.d.ts +1 -0
  309. package/typings/generated/src/utils/useStopwatch.test.d.ts.map +1 -0
  310. package/typings/generated/test/dispatchTo.d.ts +1 -0
  311. package/typings/generated/test/dispatchTo.d.ts.map +1 -0
  312. package/typings/generated/test/testrenderer.d.ts +1 -0
  313. package/typings/generated/test/testrenderer.d.ts.map +1 -0
  314. package/.github/ISSUE_TEMPLATE/custom.md +0 -10
  315. package/.husky/pre-push +0 -3
  316. package/.renovaterc.json +0 -10
  317. package/azure-pipelines.yml +0 -34
  318. package/jest.config.js +0 -7
  319. package/src/About/documentationSlice.ts +0 -41
  320. package/src/About/section.scss +0 -15
  321. package/src/Button/button.module.scss +0 -154
  322. package/tsconfig.json +0 -9
  323. package/typings/generated/src/About/documentationSlice.d.ts +0 -12
@@ -0,0 +1,159 @@
1
+ /*
2
+ * Copyright (c) 2023 Nordic Semiconductor ASA
3
+ *
4
+ * SPDX-License-Identifier: LicenseRef-Nordic-4-Clause
5
+ */
6
+
7
+ /* eslint-disable jsx-a11y/no-static-element-interactions */
8
+ /* eslint-disable jsx-a11y/click-events-have-key-events */
9
+ import React, { useRef, useState } from 'react';
10
+ import { useDispatch, useSelector } from 'react-redux';
11
+ import { mdiClose } from '@mdi/js';
12
+ import Icon from '@mdi/react';
13
+
14
+ import classNames from '../utils/classNames';
15
+ import { colors } from '../utils/colors';
16
+ import { FlashMessage, getMessages, removeMessage } from './FlashMessageSlice';
17
+
18
+ import './flashMessage.css';
19
+
20
+ const SLIDE_IN_DURATION_MS = 300;
21
+ const SLIDE_IN_ANIMATION = `${SLIDE_IN_DURATION_MS}ms slide-in`;
22
+
23
+ const SLIDE_OUT_DURATION_MS = 1000;
24
+ const SLIDE_OUT_ANIMATION = (dismissTime: number) =>
25
+ `${SLIDE_OUT_DURATION_MS}ms slide-out ${
26
+ dismissTime - SLIDE_OUT_DURATION_MS
27
+ }ms`;
28
+
29
+ const LOADER_ANIMATION = (dismissTime: number) =>
30
+ `${
31
+ dismissTime - SLIDE_OUT_DURATION_MS
32
+ }ms flash-message-loader linear forwards`;
33
+
34
+ interface FlashMessageProps {
35
+ flashMessage: FlashMessage;
36
+ }
37
+
38
+ const FlashMessage = ({ flashMessage }: FlashMessageProps) => {
39
+ const { id, message, variant, dismissTime } = flashMessage;
40
+
41
+ const dispatch = useDispatch();
42
+ const divRef = useRef(null);
43
+ const [fadeoutTimer, setFadeoutTimer] = useState<string>(
44
+ dismissTime == null ? 'unset' : `${dismissTime}ms`
45
+ );
46
+ const timeoutHandler = useRef<NodeJS.Timeout | undefined>(undefined);
47
+
48
+ if (timeoutHandler.current == null && dismissTime != null) {
49
+ timeoutHandler.current = setTimeout(() => {
50
+ dispatch(removeMessage(id));
51
+ }, dismissTime);
52
+ }
53
+
54
+ const close = () => {
55
+ clearTimeout(timeoutHandler.current);
56
+ dispatch(removeMessage(id));
57
+ };
58
+
59
+ const addFadeout = () => {
60
+ if (dismissTime) {
61
+ timeoutHandler.current = setTimeout(() => {
62
+ dispatch(removeMessage(id));
63
+ }, dismissTime);
64
+ setFadeoutTimer(`${dismissTime}ms`);
65
+ }
66
+ };
67
+
68
+ const removeFadeout = () => {
69
+ clearTimeout(timeoutHandler.current);
70
+ setFadeoutTimer('unset');
71
+ };
72
+
73
+ const initialRender = () => divRef.current == null;
74
+
75
+ return (
76
+ <div
77
+ ref={divRef}
78
+ className={`tw-flex tw-w-full tw-flex-col tw-justify-between tw-p-4 tw-text-white ${classNames(
79
+ variant === 'error' && 'tw-bg-red',
80
+ variant === 'success' && 'tw-bg-green',
81
+ variant === 'info' && 'tw-bg-nordicBlue',
82
+ variant === 'warning' && 'tw-bg-orange'
83
+ )}`}
84
+ style={{
85
+ zIndex: 1000,
86
+ animation:
87
+ fadeoutTimer !== 'unset'
88
+ ? flashMessageAnimations(initialRender(), dismissTime)
89
+ : 'unset',
90
+ }}
91
+ onMouseEnter={removeFadeout}
92
+ onMouseLeave={addFadeout}
93
+ >
94
+ <div className="tw-flex tw-w-full tw-justify-between">
95
+ {message}
96
+ <div onClick={close}>
97
+ <Icon path={mdiClose} size={0.8} />
98
+ </div>
99
+ </div>
100
+ {dismissTime != null ? (
101
+ <div
102
+ style={{
103
+ backgroundColor: colors.white,
104
+ width: 'calc(100% + 32px)',
105
+ height: '2px',
106
+ margin: '-16px',
107
+ marginTop: '8px',
108
+ animation:
109
+ fadeoutTimer !== 'unset'
110
+ ? LOADER_ANIMATION(dismissTime)
111
+ : 'unset',
112
+ }}
113
+ />
114
+ ) : null}
115
+ </div>
116
+ );
117
+ };
118
+
119
+ const FlashMessages = () => {
120
+ const messages = useSelector(getMessages);
121
+
122
+ if (messages.length === 0) return null;
123
+
124
+ return (
125
+ <div
126
+ style={{
127
+ position: 'absolute',
128
+ bottom: '32px',
129
+ right: '16px',
130
+ width: '256px',
131
+ gap: '16px',
132
+ display: 'flex',
133
+ flexDirection: 'column-reverse',
134
+ }}
135
+ >
136
+ {messages.map(flashMessage => (
137
+ <FlashMessage
138
+ key={flashMessage.id}
139
+ flashMessage={flashMessage}
140
+ />
141
+ ))}
142
+ </div>
143
+ );
144
+ };
145
+
146
+ const flashMessageAnimations = (
147
+ initialRender2: boolean,
148
+ dismissTime2?: number
149
+ ): string => {
150
+ if (!dismissTime2) {
151
+ return initialRender2 ? SLIDE_IN_ANIMATION : 'unset';
152
+ }
153
+
154
+ return `${SLIDE_OUT_ANIMATION(dismissTime2)},${
155
+ initialRender2 ? SLIDE_IN_ANIMATION : ''
156
+ }`;
157
+ };
158
+
159
+ export default FlashMessages;
@@ -0,0 +1,88 @@
1
+ /*
2
+ * Copyright (c) 2023 Nordic Semiconductor ASA
3
+ *
4
+ * SPDX-License-Identifier: LicenseRef-Nordic-4-Clause
5
+ */
6
+
7
+ import { createSlice, nanoid, PayloadAction } from '@reduxjs/toolkit';
8
+
9
+ import type { AppThunk, RootState } from '../store';
10
+
11
+ export interface FlashMessages {
12
+ messages: FlashMessage[];
13
+ }
14
+
15
+ export type FlashMessageVariant = 'success' | 'warning' | 'error' | 'info';
16
+
17
+ export interface FlashMessage {
18
+ id: string;
19
+ message: string;
20
+ variant: FlashMessageVariant;
21
+ dismissTime?: number;
22
+ }
23
+
24
+ export type FlashMessagePayload = Omit<FlashMessage, 'id'>;
25
+
26
+ const initialState: FlashMessages = {
27
+ messages: [],
28
+ };
29
+
30
+ const slice = createSlice({
31
+ name: 'flashMessages',
32
+ initialState,
33
+ reducers: {
34
+ addNewMessage: (
35
+ state,
36
+ { payload: message }: PayloadAction<FlashMessagePayload>
37
+ ) => {
38
+ state.messages.push({ ...message, id: nanoid() });
39
+ },
40
+ removeMessage: (state, { payload: id }: PayloadAction<string>) => {
41
+ state.messages = state.messages.filter(
42
+ message => message.id !== id
43
+ );
44
+ },
45
+ },
46
+ });
47
+
48
+ export const newCopiedFlashMessage = (): AppThunk => dispatch =>
49
+ dispatch(newInfoFlashMessage('Copied to clipboard!', 3000));
50
+
51
+ export const newSuccessFlashMessage =
52
+ (message: string, dismissTime?: number): AppThunk =>
53
+ dispatch =>
54
+ dispatch(newFlashMessage({ message, variant: 'success', dismissTime }));
55
+
56
+ export const newWarningFlashMessage =
57
+ (message: string, dismissTime?: number): AppThunk =>
58
+ dispatch =>
59
+ dispatch(newFlashMessage({ message, variant: 'warning', dismissTime }));
60
+
61
+ export const newErrorFlashMessage =
62
+ (message: string, dismissTime?: number): AppThunk =>
63
+ dispatch =>
64
+ dispatch(newFlashMessage({ message, variant: 'error', dismissTime }));
65
+
66
+ export const newInfoFlashMessage =
67
+ (message: string, dismissTime?: number): AppThunk =>
68
+ dispatch =>
69
+ dispatch(newFlashMessage({ message, variant: 'info', dismissTime }));
70
+
71
+ const newFlashMessage =
72
+ ({ message, variant, dismissTime }: FlashMessagePayload): AppThunk =>
73
+ dispatch => {
74
+ dispatch(
75
+ addNewMessage({
76
+ message,
77
+ variant,
78
+ dismissTime,
79
+ })
80
+ );
81
+ };
82
+
83
+ export const getMessages = (state: RootState) => state.flashMessages.messages;
84
+
85
+ export const {
86
+ reducer,
87
+ actions: { addNewMessage, removeMessage },
88
+ } = slice;
@@ -0,0 +1,32 @@
1
+ /*
2
+ * Copyright (c) 2023 Nordic Semiconductor ASA
3
+ *
4
+ * SPDX-License-Identifier: LicenseRef-Nordic-4-Clause
5
+ */
6
+
7
+ @keyframes flash-message-loader {
8
+ from {
9
+ width: 100%;
10
+ }
11
+ to {
12
+ width: 0;
13
+ }
14
+ }
15
+
16
+ @keyframes slide-in {
17
+ from {
18
+ transform: translateX(110%);
19
+ }
20
+ to {
21
+ transform: translateX(0);
22
+ }
23
+ }
24
+
25
+ @keyframes slide-out {
26
+ from {
27
+ transform: translateX(0);
28
+ }
29
+ to {
30
+ transform: translateX(110%);
31
+ }
32
+ }
@@ -36,12 +36,11 @@ const NavMenu = () => {
36
36
  });
37
37
 
38
38
  return (
39
- <div data-testid="nav-menu">
39
+ <div data-testid="nav-menu" className="d-flex ml-3 flex-wrap">
40
40
  {paneNames.map((name, index: number) => (
41
41
  <NavMenuItem
42
42
  key={name}
43
43
  index={index}
44
- isFirst={index === 0}
45
44
  isSelected={currentPane === index}
46
45
  label={name}
47
46
  />
@@ -8,33 +8,31 @@ import React, { FC } from 'react';
8
8
  import { useDispatch } from 'react-redux';
9
9
 
10
10
  import { setCurrentPane } from '../App/appLayout';
11
- import Button from '../Button/Button';
12
11
  import classNames from '../utils/classNames';
13
12
 
14
13
  import './nav-menu-item.scss';
15
14
 
16
15
  interface Props {
17
16
  index: number;
18
- isFirst: boolean;
19
17
  isSelected: boolean;
20
18
  label: string;
21
19
  }
22
20
 
23
- const NavMenuItem: FC<Props> = ({ index, isFirst, isSelected, label }) => {
21
+ const NavMenuItem: FC<Props> = ({ index, isSelected, label }) => {
24
22
  const dispatch = useDispatch();
25
23
 
26
24
  return (
27
- <Button
28
- variant="custom"
25
+ <button
26
+ type="button"
29
27
  className={classNames(
30
28
  'core19-nav-menu-item',
31
29
  isSelected && 'selected',
32
- isFirst && 'first'
30
+ 'mr-4'
33
31
  )}
34
32
  onClick={() => dispatch(setCurrentPane(index))}
35
33
  >
36
34
  {label}
37
- </Button>
35
+ </button>
38
36
  );
39
37
  };
40
38
 
@@ -4,7 +4,7 @@
4
4
  * SPDX-License-Identifier: LicenseRef-Nordic-4-Clause
5
5
  */
6
6
 
7
- @import "../variables";
7
+ @import '../variables';
8
8
 
9
9
  .core19-nav-bar {
10
10
  width: 100%;
@@ -21,6 +21,7 @@
21
21
 
22
22
  .core19-nav-bar-device-selector {
23
23
  width: $side-panel-width;
24
+ min-width: $side-panel-width;
24
25
  align-self: start;
25
26
  }
26
27
  }
@@ -7,14 +7,9 @@
7
7
  @import '../variables';
8
8
 
9
9
  .core19-nav-menu-item {
10
- margin-left: 29px;
11
10
  border: none;
12
11
  background: none;
13
12
 
14
- &.first {
15
- margin-left: 20px;
16
- }
17
-
18
13
  padding: 0;
19
14
 
20
15
  font-size: 14px;
@@ -0,0 +1,74 @@
1
+ /*
2
+ * Copyright (c) 2023 Nordic Semiconductor ASA
3
+ *
4
+ * SPDX-License-Identifier: LicenseRef-Nordic-4-Clause
5
+ */
6
+
7
+ import React from 'react';
8
+
9
+ import NumberInlineInput from '../InlineInput/NumberInlineInput';
10
+ import { RangeOrValues } from '../Slider/range';
11
+ import Slider from '../Slider/Slider';
12
+ import classNames from '../utils/classNames';
13
+
14
+ export default ({
15
+ range,
16
+ value,
17
+ onChange,
18
+ onChangeComplete,
19
+ className,
20
+ disabled,
21
+ label,
22
+ unit,
23
+ }: {
24
+ range: RangeOrValues;
25
+ value: number;
26
+ onChange: (value: number) => void;
27
+ onChangeComplete?: (value: number) => void;
28
+ className?: string;
29
+ disabled?: boolean;
30
+ label?: React.ReactNode;
31
+ unit?: React.ReactNode;
32
+ }) => (
33
+ <div
34
+ className={`tw-flex tw-flex-col tw-gap-1 tw-text-xs ${classNames(
35
+ className
36
+ )}`}
37
+ >
38
+ {label && (
39
+ <div className="tw-flex tw-justify-between">
40
+ {label}
41
+ <div className="tw-flex tw-flex-row">
42
+ <NumberInlineInput
43
+ value={value}
44
+ range={range}
45
+ onChange={onChange}
46
+ onChangeComplete={onChangeComplete}
47
+ disabled={disabled}
48
+ />
49
+ {unit}
50
+ </div>
51
+ </div>
52
+ )}
53
+ {Array.isArray(range) ? (
54
+ <Slider
55
+ values={[range.indexOf(value)]}
56
+ onChange={[i => onChange(range[i])]}
57
+ onChangeComplete={() => onChangeComplete?.(value)}
58
+ range={{
59
+ min: 0,
60
+ max: range.length - 1,
61
+ }}
62
+ disabled={disabled}
63
+ />
64
+ ) : (
65
+ <Slider
66
+ values={[value]}
67
+ onChange={[onChange]}
68
+ onChangeComplete={() => onChangeComplete?.(value)}
69
+ range={range}
70
+ disabled={disabled}
71
+ />
72
+ )}
73
+ </div>
74
+ );
@@ -4,22 +4,41 @@
4
4
  * SPDX-License-Identifier: LicenseRef-Nordic-4-Clause
5
5
  */
6
6
 
7
- import React, { useState } from 'react';
7
+ import React, { useMemo, useState } from 'react';
8
8
 
9
9
  import Button from '../Button/Button';
10
+ import Dropdown, { DropdownItem } from '../Dropdown/Dropdown';
10
11
  import logger from '../logging';
11
12
  import { isDevelopment } from '../utils/environment';
12
13
  import packageJson from '../utils/packageJson';
13
14
 
14
- export default () => {
15
+ export interface FeedbackPaneProps {
16
+ categories?: string[];
17
+ }
18
+
19
+ export default ({ categories }: FeedbackPaneProps) => {
15
20
  const [feedback, setFeedback] = useState('');
16
21
  const [sayThankYou, setSayThankYou] = useState(false);
17
22
 
23
+ const categoryItems = useMemo(() => {
24
+ if (!categories?.length) return undefined;
25
+
26
+ const items = ['Select a category', ...categories].map(category => ({
27
+ label: category,
28
+ value: category,
29
+ }));
30
+ return items;
31
+ }, [categories]);
32
+
33
+ const [selectedCategory, setSelectedCategory] = useState<
34
+ DropdownItem | undefined
35
+ >(categoryItems ? categoryItems[0] : undefined);
36
+
18
37
  if (sayThankYou === true) {
19
38
  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>
39
+ <div className="tw-preflight tw-flex tw-w-full tw-justify-center">
40
+ <div className="tw-mb-3 tw-flex tw-flex-col tw-items-start tw-justify-center tw-bg-white tw-px-3 tw-py-4">
41
+ <b className="tw-mb-3">Thank you!</b>
23
42
  <section>
24
43
  <p>
25
44
  We value your feedback and any ideas you may have
@@ -32,7 +51,7 @@ export default () => {
32
51
  </section>
33
52
  <Button
34
53
  large
35
- className="align-self-end"
54
+ className="tw-align-self-end tw-self-end"
36
55
  onClick={() => {
37
56
  setSayThankYou(false);
38
57
  setFeedback('');
@@ -47,56 +66,67 @@ export default () => {
47
66
  }
48
67
 
49
68
  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">
69
+ <div className="tw-preflight tw-flex tw-w-full tw-justify-center">
70
+ <div className="tw-mb-3 tw-flex tw-flex-col tw-items-start tw-justify-center tw-gap-4 tw-bg-white tw-px-3 tw-py-4">
71
+ <b>Give Feedback</b>
72
+ <p>
73
+ We value your feedback and any ideas you may have for
74
+ improving our applications. Please use the form below to
75
+ give feedback.
76
+ </p>
77
+ <p>
78
+ Note: this is not a support channel, and you will not
79
+ receive a response. For help and support, visit the{' '}
80
+ <a
81
+ href="https://devzone.nordicsemi.com/"
82
+ target="_blank"
83
+ rel="noreferrer noopener"
84
+ className="tw-text-nordicBlue"
85
+ >
86
+ Nordic DevZone
87
+ </a>
88
+ .
89
+ </p>
90
+ <form className="tw-flex tw-w-full tw-flex-col tw-gap-4">
91
+ {categoryItems?.length && (
92
+ <div className="tw-w-52">
93
+ <Dropdown
94
+ items={categoryItems}
95
+ onSelect={setSelectedCategory}
96
+ selectedItem={
97
+ selectedCategory || categoryItems[0]
98
+ }
99
+ />
100
+ </div>
101
+ )}
102
+ <div>
74
103
  <b>What is your feedback?</b>
75
104
  <textarea
76
105
  name="feedback-text"
77
- className="w-100 mb-3"
78
- style={{ height: '8rem' }}
106
+ className="tw-h-32 tw-w-full tw-border tw-border-gray-700"
79
107
  required
80
108
  value={feedback}
81
109
  onChange={e => setFeedback(e.target.value)}
82
110
  />
83
- </label>
111
+ </div>
84
112
  </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>
113
+ <p>We only collect this information when you send feedback:</p>
114
+ <ul className="tw-list-disc tw-pl-8">
115
+ <li>Application name</li>
116
+ <li>Your feedback</li>
117
+ <li>Operating system</li>
118
+ </ul>
95
119
  <Button
96
120
  large
97
- className="align-self-end"
121
+ className="tw-self-end"
98
122
  variant="primary"
99
- onClick={() => handleFormData(feedback, setSayThankYou)}
123
+ onClick={() =>
124
+ handleFormData(
125
+ feedback,
126
+ setSayThankYou,
127
+ selectedCategory?.value
128
+ )
129
+ }
100
130
  disabled={feedback === ''}
101
131
  >
102
132
  Send Feedback
@@ -108,19 +138,24 @@ export default () => {
108
138
 
109
139
  const formURL =
110
140
  isDevelopment === true
111
- ? 'https://formkeep.com/f/8deb409a565'
141
+ ? 'https://formkeep.com/f/87deb409a565'
112
142
  : 'https://formkeep.com/f/36b394b92851';
113
143
 
114
144
  const handleFormData = async (
115
145
  feedback: string,
116
- setResponse: (response: boolean) => void
146
+ setResponse: (response: boolean) => void,
147
+ category?: string
117
148
  ) => {
118
- const data = {
149
+ const data: Record<string, unknown> = {
119
150
  name: getAppName(),
120
151
  feedback,
121
152
  platform: process.platform,
122
153
  };
123
154
 
155
+ if (category && category !== 'Select a category') {
156
+ data.category = category;
157
+ }
158
+
124
159
  try {
125
160
  const response = await fetch(formURL, {
126
161
  method: 'POST',