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

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 (232) hide show
  1. package/dist/bootstrap.css +8951 -0
  2. package/dist/index.css +1451 -0
  3. package/dist/index.js +122119 -0
  4. package/{src/Logo/nordic-logo-blue-icon-only.png → dist/nordic-logo-blue-icon-only-H7BABN6D.png} +0 -0
  5. package/{src/Logo/nordic-logo-gray-icon-only.png → dist/nordic-logo-gray-icon-only-GATOTR3L.png} +0 -0
  6. package/package.json +12 -3
  7. package/typings/generated/src/Device/deviceInfo/deviceInfo.d.ts +1 -2
  8. package/.github/ISSUE_TEMPLATE/custom.md +0 -10
  9. package/.husky/pre-push +0 -3
  10. package/.renovaterc.json +0 -10
  11. package/Changelog.md +0 -2973
  12. package/azure-pipelines.yml +0 -34
  13. package/config/eslintrc.js +0 -190
  14. package/config/jest.config.js +0 -41
  15. package/config/prettier.config.js +0 -13
  16. package/config/tsconfig.json +0 -15
  17. package/fw/bootloader/graviton_bootloader_v1.0.1-[nRF5_SDK_15.0.1-1.alpha_f76d012].zip +0 -0
  18. package/jest.config.js +0 -7
  19. package/main/index.ts +0 -32
  20. package/mocks/deviceLibMock.ts +0 -21
  21. package/mocks/electronMock.ts +0 -15
  22. package/mocks/electronStoreMock.ts +0 -19
  23. package/mocks/emptyMock.ts +0 -7
  24. package/mocks/fileMock.ts +0 -13
  25. package/mocks/gaMock.ts +0 -9
  26. package/mocks/mockTests.test.ts +0 -15
  27. package/mocks/packageJsonMock.ts +0 -10
  28. package/mocks/remoteMock.ts +0 -17
  29. package/scripts/esbuild-bootstrap.js +0 -15
  30. package/scripts/esbuild-renderer.js +0 -131
  31. package/scripts/installHusky.ts +0 -17
  32. package/scripts/prepare-shared-release.ts +0 -122
  33. package/scripts/release-shared.test.ts +0 -132
  34. package/scripts/release-shared.ts +0 -207
  35. package/src/About/About.tsx +0 -25
  36. package/src/About/AboutButton.tsx +0 -28
  37. package/src/About/ApplicationCard.tsx +0 -83
  38. package/src/About/DeviceCard.tsx +0 -74
  39. package/src/About/DocumentationCard.tsx +0 -18
  40. package/src/About/DocumentationSection.tsx +0 -24
  41. package/src/About/Section.tsx +0 -21
  42. package/src/About/ShortcutButton.tsx +0 -41
  43. package/src/About/SupportCard.tsx +0 -97
  44. package/src/About/about.scss +0 -40
  45. package/src/About/documentationSlice.ts +0 -41
  46. package/src/About/section.scss +0 -15
  47. package/src/About/shortcutSlice.ts +0 -52
  48. package/src/Alert/Alert.module.scss +0 -29
  49. package/src/Alert/Alert.tsx +0 -37
  50. package/src/App/App.test.tsx +0 -47
  51. package/src/App/App.tsx +0 -227
  52. package/src/App/ConnectedToStore.tsx +0 -19
  53. package/src/App/VisibilityBar.tsx +0 -103
  54. package/src/App/app.scss +0 -83
  55. package/src/App/appLayout.ts +0 -95
  56. package/src/App/shared.scss +0 -49
  57. package/src/App/visibility-bar.scss +0 -55
  58. package/src/Button/Button.tsx +0 -66
  59. package/src/Button/button.module.scss +0 -154
  60. package/src/Card/Card.tsx +0 -26
  61. package/src/Card/card.module.scss +0 -28
  62. package/src/Device/BrokenDeviceDialog/BrokenDeviceDialog.tsx +0 -58
  63. package/src/Device/BrokenDeviceDialog/broken-device-dialog.scss +0 -18
  64. package/src/Device/BrokenDeviceDialog/brokenDeviceDialogSlice.tsx +0 -48
  65. package/src/Device/DeviceSelector/BasicDeviceInfo.tsx +0 -115
  66. package/src/Device/DeviceSelector/DeviceIcon.tsx +0 -27
  67. package/src/Device/DeviceSelector/DeviceList/AnimatedList.tsx +0 -62
  68. package/src/Device/DeviceSelector/DeviceList/BrokenDevice.tsx +0 -34
  69. package/src/Device/DeviceSelector/DeviceList/Device.tsx +0 -84
  70. package/src/Device/DeviceSelector/DeviceList/DeviceList.tsx +0 -113
  71. package/src/Device/DeviceSelector/DeviceList/EditDeviceButtons.tsx +0 -28
  72. package/src/Device/DeviceSelector/DeviceList/MoreDeviceInfo.tsx +0 -65
  73. package/src/Device/DeviceSelector/DeviceList/RenameDevice.tsx +0 -22
  74. package/src/Device/DeviceSelector/DeviceList/broken-device.scss +0 -32
  75. package/src/Device/DeviceSelector/DeviceList/device-list.scss +0 -64
  76. package/src/Device/DeviceSelector/DeviceList/device.scss +0 -28
  77. package/src/Device/DeviceSelector/DeviceList/edit-device-buttons.scss +0 -31
  78. package/src/Device/DeviceSelector/DeviceList/more-device-info.scss +0 -33
  79. package/src/Device/DeviceSelector/DeviceList/rename-device.scss +0 -13
  80. package/src/Device/DeviceSelector/DeviceSelector.test.tsx +0 -342
  81. package/src/Device/DeviceSelector/DeviceSelector.tsx +0 -173
  82. package/src/Device/DeviceSelector/Favorite.tsx +0 -49
  83. package/src/Device/DeviceSelector/SelectDevice.tsx +0 -36
  84. package/src/Device/DeviceSelector/SelectedDevice.tsx +0 -65
  85. package/src/Device/DeviceSelector/arrow-down.svg +0 -1
  86. package/src/Device/DeviceSelector/basic-device-info.scss +0 -62
  87. package/src/Device/DeviceSelector/device-icon.scss +0 -27
  88. package/src/Device/DeviceSelector/favorite.scss +0 -17
  89. package/src/Device/DeviceSelector/select-device.scss +0 -38
  90. package/src/Device/DeviceSelector/selected-device.scss +0 -57
  91. package/src/Device/DeviceSetup/DeviceSetupView.tsx +0 -102
  92. package/src/Device/deviceAutoSelectSlice.ts +0 -144
  93. package/src/Device/deviceInfo/deviceInfo.ts +0 -254
  94. package/src/Device/deviceInfo/nRF51-Series-logo.svg +0 -1
  95. package/src/Device/deviceInfo/nRF52-Series-logo.svg +0 -1
  96. package/src/Device/deviceInfo/nRF53-Series-logo.svg +0 -1
  97. package/src/Device/deviceInfo/nRF70-Series_no-background_RGB.svg +0 -36
  98. package/src/Device/deviceInfo/nRF91-Series-logo.svg +0 -1
  99. package/src/Device/deviceInfo/ppk-logo.svg +0 -1
  100. package/src/Device/deviceInfo/unknown-logo.svg +0 -30
  101. package/src/Device/deviceInfo/unknown-nordic-logo.svg +0 -25
  102. package/src/Device/deviceLibWrapper.test.ts +0 -97
  103. package/src/Device/deviceLibWrapper.ts +0 -133
  104. package/src/Device/deviceLister.test.ts +0 -89
  105. package/src/Device/deviceLister.ts +0 -396
  106. package/src/Device/deviceSetup.ts +0 -264
  107. package/src/Device/deviceSetupSlice.ts +0 -94
  108. package/src/Device/deviceSlice.ts +0 -248
  109. package/src/Device/dfu-cc.ts +0 -162
  110. package/src/Device/initPacket.ts +0 -402
  111. package/src/Device/jprogOperations.ts +0 -206
  112. package/src/Device/sdfuOperations.ts +0 -601
  113. package/src/Dialog/Dialog.test.tsx +0 -134
  114. package/src/Dialog/Dialog.tsx +0 -236
  115. package/src/Dialog/dialog.scss +0 -60
  116. package/src/Dropdown/Dropdown.module.scss +0 -83
  117. package/src/Dropdown/Dropdown.test.tsx +0 -62
  118. package/src/Dropdown/Dropdown.tsx +0 -106
  119. package/src/ErrorBoundary/ErrorBoundary.test.tsx +0 -105
  120. package/src/ErrorBoundary/ErrorBoundary.tsx +0 -186
  121. package/src/ErrorBoundary/bug.svg +0 -1
  122. package/src/ErrorBoundary/error-boundary.scss +0 -102
  123. package/src/ErrorDialog/ErrorDialog.test.tsx +0 -70
  124. package/src/ErrorDialog/ErrorDialog.tsx +0 -94
  125. package/src/ErrorDialog/error.scss +0 -14
  126. package/src/ErrorDialog/errorDialogSlice.test.ts +0 -64
  127. package/src/ErrorDialog/errorDialogSlice.ts +0 -80
  128. package/src/FactoryReset/FactoryResetButton.test.tsx +0 -46
  129. package/src/FactoryReset/FactoryResetButton.tsx +0 -81
  130. package/src/InlineInput/InlineInput.tsx +0 -170
  131. package/src/InlineInput/NumberInlineInput.tsx +0 -107
  132. package/src/InlineInput/inline-input.scss +0 -38
  133. package/src/InlineInput/number-inline-input.scss +0 -15
  134. package/src/Log/LogEntry.tsx +0 -62
  135. package/src/Log/LogViewer.tsx +0 -54
  136. package/src/Log/log-entry.scss +0 -30
  137. package/src/Log/log-viewer.scss +0 -24
  138. package/src/Log/logSlice.ts +0 -73
  139. package/src/Log/syncLogToStore.ts +0 -36
  140. package/src/Logo/Logo.tsx +0 -48
  141. package/src/Logo/logo.scss +0 -11
  142. package/src/Main/Main.tsx +0 -13
  143. package/src/Main/main.scss +0 -13
  144. package/src/MasonryLayout/MasonryLayout.tsx +0 -234
  145. package/src/MasonryLayout/masonryLayout.module.scss +0 -46
  146. package/src/NavBar/NavBar.tsx +0 -22
  147. package/src/NavBar/NavMenu.test.tsx +0 -41
  148. package/src/NavBar/NavMenu.tsx +0 -53
  149. package/src/NavBar/NavMenuItem.tsx +0 -41
  150. package/src/NavBar/nav-bar.scss +0 -26
  151. package/src/NavBar/nav-menu-item.scss +0 -34
  152. package/src/OpenApp/openApp.ts +0 -18
  153. package/src/Panes/FeedbackPane.tsx +0 -149
  154. package/src/PseudoButton/PseudoButton.tsx +0 -56
  155. package/src/PseudoButton/pseudo-button.scss +0 -11
  156. package/src/SerialPort/ConflictingSettingsDialog.tsx +0 -242
  157. package/src/SerialPort/SerialPort.test.ts +0 -54
  158. package/src/SerialPort/SerialPort.ts +0 -202
  159. package/src/Shortcuts/Shortcut-item.scss +0 -33
  160. package/src/Shortcuts/Shortcut-modal.scss +0 -20
  161. package/src/Shortcuts/ShortcutItem.tsx +0 -48
  162. package/src/Shortcuts/ShortcutModal.tsx +0 -67
  163. package/src/SidePanel/Group.tsx +0 -106
  164. package/src/SidePanel/SidePanel.tsx +0 -19
  165. package/src/SidePanel/group.scss +0 -42
  166. package/src/SidePanel/sidepanel.scss +0 -20
  167. package/src/Slider/Bar.tsx +0 -24
  168. package/src/Slider/Factor.test.ts +0 -48
  169. package/src/Slider/Handle.tsx +0 -121
  170. package/src/Slider/Slider.test.tsx +0 -25
  171. package/src/Slider/Slider.tsx +0 -91
  172. package/src/Slider/Ticks.tsx +0 -54
  173. package/src/Slider/__snapshots__/Slider.test.tsx.snap +0 -50
  174. package/src/Slider/bar.scss +0 -24
  175. package/src/Slider/factor.ts +0 -24
  176. package/src/Slider/handle.scss +0 -32
  177. package/src/Slider/percentage.ts +0 -67
  178. package/src/Slider/range.ts +0 -92
  179. package/src/Slider/slider.scss +0 -14
  180. package/src/Slider/ticks.scss +0 -28
  181. package/src/Slider/variables.scss +0 -16
  182. package/src/StartStopButton/StartStopButton.tsx +0 -60
  183. package/src/StartStopButton/play-circle.svg +0 -1
  184. package/src/StartStopButton/start-stop-button.scss +0 -47
  185. package/src/StartStopButton/stop-circle.svg +0 -1
  186. package/src/StateSelector/StateSelector.tsx +0 -64
  187. package/src/StateSelector/state-selector.scss +0 -38
  188. package/src/Stepper/Stepper.tsx +0 -139
  189. package/src/Stepper/stepper.scss +0 -127
  190. package/src/Toggle/Toggle.tsx +0 -120
  191. package/src/Toggle/toggle.scss +0 -109
  192. package/src/bootstrap.scss +0 -14
  193. package/src/index.ts +0 -146
  194. package/src/logging/appTransport.test.ts +0 -78
  195. package/src/logging/appTransport.ts +0 -41
  196. package/src/logging/describeError.test.ts +0 -38
  197. package/src/logging/describeError.ts +0 -56
  198. package/src/logging/index.ts +0 -103
  199. package/src/logging/logBuffer.test.ts +0 -41
  200. package/src/logging/logBuffer.ts +0 -24
  201. package/src/logging/sendInitialLogMessages.ts +0 -64
  202. package/src/store.ts +0 -60
  203. package/src/svg.d.ts +0 -15
  204. package/src/utils/AppTypes.ts +0 -60
  205. package/src/utils/appDirs.ts +0 -78
  206. package/src/utils/bleChannels.ts +0 -16
  207. package/src/utils/classNames.test.ts +0 -29
  208. package/src/utils/classNames.ts +0 -25
  209. package/src/utils/colors.scss +0 -46
  210. package/src/utils/colors.ts +0 -38
  211. package/src/utils/describeVersion.ts +0 -21
  212. package/src/utils/environment.ts +0 -6
  213. package/src/utils/logLibVersions.ts +0 -103
  214. package/src/utils/open.ts +0 -46
  215. package/src/utils/packageJson.ts +0 -60
  216. package/src/utils/persistentStore.ts +0 -144
  217. package/src/utils/systemReport.ts +0 -160
  218. package/src/utils/truncateMiddle.test.ts +0 -21
  219. package/src/utils/truncateMiddle.ts +0 -20
  220. package/src/utils/usageData.ts +0 -189
  221. package/src/utils/useHotKey.ts +0 -62
  222. package/src/utils/useStopwatch.test.tsx +0 -311
  223. package/src/utils/useStopwatch.ts +0 -140
  224. package/src/variables.scss +0 -820
  225. package/styles.scss +0 -88
  226. package/test/dispatchTo.ts +0 -23
  227. package/test/index.ts +0 -7
  228. package/test/jestResolver.js +0 -28
  229. package/test/setupTests.ts +0 -27
  230. package/test/testUtil.ts +0 -20
  231. package/test/testrenderer.tsx +0 -39
  232. /package/{src/Logo/nordic-logo-white-icon-only.png → dist/nordic-logo-white-icon-only-XIZBW537.png} +0 -0
@@ -1,202 +0,0 @@
1
- /*
2
- * Copyright (c) 2021 Nordic Semiconductor ASA
3
- *
4
- * SPDX-License-Identifier: LicenseRef-Nordic-4-Clause
5
- */
6
-
7
- import type {
8
- AutoDetectTypes,
9
- SetOptions,
10
- UpdateOptions,
11
- } from '@serialport/bindings-cpp';
12
- import { ipcRenderer } from 'electron';
13
- import EventEmitter from 'events';
14
- import type { SerialPortOpenOptions } from 'serialport';
15
-
16
- import { OverwriteOptions, SERIALPORT_CHANNEL } from '../../main';
17
- import logger from '../logging';
18
-
19
- export type SerialPort = Awaited<ReturnType<typeof createSerialPort>>;
20
-
21
- export const createSerialPort = async (
22
- options: SerialPortOpenOptions<AutoDetectTypes>,
23
- overwriteOptions: OverwriteOptions = {
24
- overwrite: false,
25
- settingsLocked: false,
26
- }
27
- ) => {
28
- const { path } = options;
29
- const eventEmitter = new EventEmitter();
30
- let closed = false;
31
-
32
- ipcRenderer.on(`${SERIALPORT_CHANNEL.ON_DATA}_${path}`, (_event, data) =>
33
- eventEmitter.emit('onData', data)
34
- );
35
- ipcRenderer.on(`${SERIALPORT_CHANNEL.ON_CLOSED}_${path}`, () => {
36
- eventEmitter.emit('onClosed');
37
- closed = true;
38
- });
39
- ipcRenderer.on(
40
- `${SERIALPORT_CHANNEL.ON_UPDATE}_${path}`,
41
- (_event, newOptions) => eventEmitter.emit('onUpdate', newOptions)
42
- );
43
- ipcRenderer.on(
44
- `${SERIALPORT_CHANNEL.ON_SET}_${path}`,
45
- (_event, newOptions) => eventEmitter.emit('onSet', newOptions)
46
- );
47
- ipcRenderer.on(
48
- `${SERIALPORT_CHANNEL.ON_CHANGED}_${path}`,
49
- (_event, newOptions) => eventEmitter.emit('onChange', newOptions)
50
- );
51
-
52
- // The origin of this event is emitted when a renderer writes to the port.
53
- ipcRenderer.on(`${SERIALPORT_CHANNEL.ON_WRITE}_${path}`, (_event, data) =>
54
- eventEmitter.emit('onDataWritten', data)
55
- );
56
-
57
- const write = (data: string | number[] | Buffer): void => {
58
- ipcRenderer.invoke(SERIALPORT_CHANNEL.WRITE, path, data);
59
- };
60
-
61
- const isOpen = (): Promise<boolean> =>
62
- ipcRenderer.invoke(SERIALPORT_CHANNEL.IS_OPEN, path);
63
-
64
- const close = async () => {
65
- if (closed) return;
66
- const error = await ipcRenderer.invoke(SERIALPORT_CHANNEL.CLOSE, path);
67
- if (error) {
68
- // IPC only carries the error message, that's why we throw new Error.
69
- throw new Error(error);
70
- }
71
-
72
- try {
73
- if (await isOpen()) {
74
- logger.info(
75
- `Port ${options.path} still in use by other window(s)`
76
- );
77
- }
78
- } catch {
79
- logger.info(`Closed port: ${options.path}`);
80
- }
81
- };
82
-
83
- // Only supports baudRate, same as serialport.io
84
- const update = (newOptions: UpdateOptions) => {
85
- ipcRenderer.invoke(SERIALPORT_CHANNEL.UPDATE, path, newOptions);
86
- };
87
-
88
- const set = (newOptions: SetOptions) => {
89
- ipcRenderer.invoke(SERIALPORT_CHANNEL.SET, path, newOptions);
90
- };
91
-
92
- const getOptions = ():
93
- | Promise<SerialPortOpenOptions<AutoDetectTypes>>
94
- | undefined => ipcRenderer.invoke(SERIALPORT_CHANNEL.GET_OPTIONS, path);
95
-
96
- const openWithRetries = async (retryCount: number) => {
97
- try {
98
- return (await ipcRenderer.invoke(
99
- SERIALPORT_CHANNEL.OPEN,
100
- options,
101
- overwriteOptions
102
- )) as string;
103
- } catch (error) {
104
- if (
105
- (error as Error).message.includes(
106
- 'PORT_IS_ALREADY_BEING_OPENED'
107
- ) &&
108
- retryCount > 0
109
- ) {
110
- return new Promise<string>(resolve => {
111
- setTimeout(async () => {
112
- resolve(
113
- (await openWithRetries(retryCount - 1)) as string
114
- );
115
- }, 50 + Math.random() * 100);
116
- });
117
- }
118
- return Promise.resolve<string>((error as Error).message);
119
- }
120
- };
121
-
122
- const error = await openWithRetries(3);
123
-
124
- if (error) {
125
- if (error.includes('FAILED_DIFFERENT_SETTINGS')) {
126
- logger.warn(
127
- `Failed to connect to port: ${path}. Port is open with different settings.`
128
- );
129
- } else {
130
- logger.error(
131
- `Failed to connect to port: ${path}. Make sure the port is not already taken, if you are not sure, try to power cycle the device and try to connect again.`
132
- );
133
- }
134
- throw new Error(error);
135
- } else {
136
- logger.info(`Opened port with options: ${JSON.stringify(options)}`);
137
- }
138
-
139
- return {
140
- path,
141
- write,
142
- close,
143
- isOpen,
144
- update,
145
- set,
146
- getOptions,
147
- onData: (handler: (data: Uint8Array) => void) => {
148
- eventEmitter.on('onData', handler);
149
- return () => {
150
- eventEmitter.removeListener('onData', handler);
151
- };
152
- },
153
- onClosed: (handler: () => void) => {
154
- eventEmitter.on('onClosed', handler);
155
- return () => {
156
- eventEmitter.removeListener('onClosed', handler);
157
- };
158
- },
159
- onUpdate: (handler: (newOptions: UpdateOptions) => void) => {
160
- eventEmitter.on('onUpdate', handler);
161
- return () => {
162
- eventEmitter.removeListener('onUpdate', handler);
163
- };
164
- },
165
- onSet: (handler: (newOptions: SetOptions) => void) => {
166
- eventEmitter.on('onSet', handler);
167
- return () => {
168
- eventEmitter.removeListener('onSet', handler);
169
- };
170
- },
171
- onChange: (
172
- handler: (
173
- newOptions: SerialPortOpenOptions<AutoDetectTypes>
174
- ) => void
175
- ) => {
176
- eventEmitter.on('onChange', handler);
177
- return () => {
178
- eventEmitter.removeListener('onChange', handler);
179
- };
180
- },
181
- onDataWritten: (handler: (data: Uint8Array) => void) => {
182
- eventEmitter.on('onDataWritten', handler);
183
- return () => {
184
- eventEmitter.removeListener('onDataWritten', handler);
185
- };
186
- },
187
- };
188
- };
189
-
190
- export const getSerialPortOptions = async (
191
- path: string
192
- ): Promise<SerialPortOpenOptions<AutoDetectTypes> | undefined> => {
193
- try {
194
- console.log('will fetch options from path=', path);
195
- return (await ipcRenderer.invoke(
196
- SERIALPORT_CHANNEL.GET_OPTIONS,
197
- path
198
- )) as SerialPortOpenOptions<AutoDetectTypes> | undefined;
199
- } catch (error) {
200
- logger.error(`Failed to get options for port: ${path}`);
201
- }
202
- };
@@ -1,33 +0,0 @@
1
- /*
2
- * Copyright (c) 2021 Nordic Semiconductor ASA
3
- *
4
- * SPDX-License-Identifier: LicenseRef-Nordic-4-Clause
5
- */
6
-
7
- @import '../variables.scss';
8
-
9
- .shortcut-item {
10
- border-top: 1px solid $gray-100;
11
- padding-top: 20px;
12
- overflow: auto;
13
- .shortcut-title {
14
- display: inline;
15
- }
16
- .shortcuts {
17
- float: right;
18
- .shortcut-element {
19
- display: 'block';
20
- margin-bottom: 20px;
21
- .shortcut-span {
22
- background-color: $gray-100;
23
- padding: 8px;
24
- border-radius: 5px;
25
- box-shadow: 0 2px $gray-200;
26
- }
27
- .separator-span {
28
- background-color: $white;
29
- padding: 8px;
30
- }
31
- }
32
- }
33
- }
@@ -1,20 +0,0 @@
1
- /*
2
- * Copyright (c) 2021 Nordic Semiconductor ASA
3
- *
4
- * SPDX-License-Identifier: LicenseRef-Nordic-4-Clause
5
- */
6
-
7
- @import '../variables.scss';
8
-
9
- .shortcut-modal {
10
- color: $gray-900;
11
- .list-header {
12
- margin-bottom: 20px;
13
- }
14
- .shortcut-lists {
15
- margin: 10px 20px;
16
- display: grid;
17
- grid-template-columns: 1fr 1fr;
18
- column-gap: 10ex;
19
- }
20
- }
@@ -1,48 +0,0 @@
1
- /*
2
- * Copyright (c) 2015 Nordic Semiconductor ASA
3
- *
4
- * SPDX-License-Identifier: LicenseRef-Nordic-4-Clause
5
- */
6
-
7
- import React, { FC } from 'react';
8
-
9
- import './Shortcut-item.scss';
10
-
11
- export interface Props {
12
- title: string;
13
- hotKey: string[] | string;
14
- }
15
-
16
- const ShortcutItem: FC<Props> = ({ title, hotKey }) => {
17
- const shortcutComboKeys: string[][] = !Array.isArray(hotKey)
18
- ? [hotKey.split('+')]
19
- : hotKey.map(element => element.split('+'));
20
-
21
- return (
22
- <div className="shortcut-item">
23
- <h5 className="shortcut-title">{title}</h5>
24
- <div className="shortcuts">
25
- {shortcutComboKeys.map(shortcutKeys => (
26
- <div
27
- key={shortcutKeys.toString()}
28
- className="shortcut-element"
29
- >
30
- {shortcutKeys.map(shortcutKey => (
31
- <span key={shortcutKey}>
32
- <span className="shortcut-span">
33
- {shortcutKey}
34
- </span>
35
- {shortcutKey !==
36
- shortcutKeys[shortcutKeys.length - 1] && (
37
- <span className="separator-span">+</span>
38
- )}
39
- </span>
40
- ))}
41
- </div>
42
- ))}
43
- </div>
44
- </div>
45
- );
46
- };
47
-
48
- export default ShortcutItem;
@@ -1,67 +0,0 @@
1
- /*
2
- * Copyright (c) 2015 Nordic Semiconductor ASA
3
- *
4
- * SPDX-License-Identifier: LicenseRef-Nordic-4-Clause
5
- */
6
-
7
- import React, { FC } from 'react';
8
- import Modal from 'react-bootstrap/Modal';
9
- import { useSelector } from 'react-redux';
10
-
11
- import { globalShortcuts, localShortcuts } from '../About/shortcutSlice';
12
- import ShortcutItem from './ShortcutItem';
13
-
14
- import './Shortcut-modal.scss';
15
-
16
- export interface Props {
17
- isVisible: boolean;
18
- onCancel: () => void;
19
- }
20
-
21
- const ShortcutModal: FC<Props> = ({ isVisible, onCancel }) => {
22
- const local = useSelector(localShortcuts);
23
- const global = useSelector(globalShortcuts);
24
-
25
- return (
26
- <Modal
27
- show={isVisible}
28
- onHide={onCancel}
29
- size="lg"
30
- className="shortcut-modal"
31
- >
32
- <Modal.Header closeButton>
33
- <Modal.Title>
34
- <h3>Shortcuts</h3>
35
- </Modal.Title>
36
- </Modal.Header>
37
- <Modal.Body className="shortcut-lists">
38
- <>
39
- {local.length > 0 && (
40
- <div>
41
- <h4 className="list-header">In this app</h4>
42
- {local.map(shortcut => (
43
- <ShortcutItem
44
- key={shortcut.title}
45
- title={shortcut.title}
46
- hotKey={shortcut.hotKey}
47
- />
48
- ))}
49
- </div>
50
- )}
51
- <div>
52
- <h4 className="list-header">In all apps</h4>
53
- {global.map(shortcut => (
54
- <ShortcutItem
55
- key={shortcut.title}
56
- title={shortcut.title}
57
- hotKey={shortcut.hotKey}
58
- />
59
- ))}
60
- </div>
61
- </>
62
- </Modal.Body>
63
- </Modal>
64
- );
65
- };
66
-
67
- export default ShortcutModal;
@@ -1,106 +0,0 @@
1
- /*
2
- * Copyright (c) 2015 Nordic Semiconductor ASA
3
- *
4
- * SPDX-License-Identifier: LicenseRef-Nordic-4-Clause
5
- */
6
-
7
- import React, { useContext, useRef } from 'react';
8
- import Accordion from 'react-bootstrap/Accordion';
9
- import AccordionContext from 'react-bootstrap/AccordionContext';
10
- import { useAccordionToggle } from 'react-bootstrap/AccordionToggle';
11
-
12
- import PseudoButton from '../PseudoButton/PseudoButton';
13
- import classNames from '../utils/classNames';
14
-
15
- import './group.scss';
16
-
17
- const Heading = ({ label, title }: { label?: string; title?: string }) =>
18
- label == null ? null : (
19
- <h2 className="heading" title={title}>
20
- {label}
21
- </h2>
22
- );
23
-
24
- const ContextAwareToggle = ({
25
- heading,
26
- title,
27
- eventKey,
28
- onToggled,
29
- }: {
30
- heading: string;
31
- title?: string;
32
- eventKey: string;
33
- onToggled?: ((isNowExpanded: boolean) => void) | null;
34
- }) => {
35
- const currentEventKey = useContext(AccordionContext);
36
- const isCurrentEventKey = currentEventKey === eventKey;
37
- const decoratedOnClick = useAccordionToggle(
38
- eventKey,
39
- () => onToggled && onToggled(!isCurrentEventKey)
40
- );
41
-
42
- return (
43
- <PseudoButton
44
- onClick={decoratedOnClick}
45
- className={classNames('group-toggle', isCurrentEventKey && 'show')}
46
- >
47
- <Heading label={heading} title={title} />
48
- <span className="mdi mdi-chevron-down" />
49
- </PseudoButton>
50
- );
51
- };
52
-
53
- export const CollapsibleGroup = ({
54
- className = '',
55
- heading,
56
- title,
57
- children = null,
58
- defaultCollapsed = true,
59
- onToggled,
60
- }: {
61
- className?: string;
62
- heading: string;
63
- title?: string;
64
- children?: React.ReactNode;
65
- defaultCollapsed?: boolean | null;
66
- onToggled?: ((isNowExpanded: boolean) => void) | null;
67
- }) => {
68
- const eventKey = useRef(Math.random().toString());
69
-
70
- return (
71
- <div className={`sidepanel-group ${className}`}>
72
- <Accordion
73
- defaultActiveKey={defaultCollapsed ? '' : eventKey.current}
74
- >
75
- <div className="collapse-container">
76
- <ContextAwareToggle
77
- heading={heading}
78
- title={title}
79
- eventKey={eventKey.current}
80
- onToggled={onToggled}
81
- />
82
- <Accordion.Collapse eventKey={eventKey.current}>
83
- <div className="body">{children}</div>
84
- </Accordion.Collapse>
85
- </div>
86
- </Accordion>
87
- </div>
88
- );
89
- };
90
-
91
- export const Group = ({
92
- className = '',
93
- heading,
94
- title,
95
- children,
96
- }: {
97
- className?: string;
98
- heading?: string;
99
- title?: string;
100
- children?: React.ReactNode;
101
- }) => (
102
- <div className={`sidepanel-group ${className}`}>
103
- <Heading label={heading} title={title} />
104
- <div className="body">{children}</div>
105
- </div>
106
- );
@@ -1,19 +0,0 @@
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 './sidepanel.scss';
10
-
11
- const SidePanel = ({
12
- children,
13
- className = '',
14
- }: {
15
- children?: React.ReactNode;
16
- className?: string;
17
- }) => <div className={`core19-side-panel ${className}`}>{children}</div>;
18
-
19
- export default SidePanel;
@@ -1,42 +0,0 @@
1
- /*
2
- * Copyright (c) 2021 Nordic Semiconductor ASA
3
- *
4
- * SPDX-License-Identifier: LicenseRef-Nordic-4-Clause
5
- */
6
-
7
- .sidepanel-group {
8
- .body {
9
- > * {
10
- margin-bottom: 8px;
11
- }
12
-
13
- > *:last-child {
14
- margin-bottom: 0px;
15
- }
16
- }
17
-
18
- .heading {
19
- margin-bottom: 16px;
20
-
21
- font-size: 10px;
22
- font-weight: normal;
23
- letter-spacing: 0.5ex;
24
-
25
- text-transform: uppercase;
26
- }
27
-
28
- .group-toggle {
29
- display: flex;
30
- justify-content: space-between;
31
-
32
- .mdi-chevron-down::before {
33
- font-size: 20px;
34
- position: relative;
35
- top: -9px;
36
- }
37
-
38
- &.show .mdi-chevron-down::before {
39
- transform: rotate(180deg);
40
- }
41
- }
42
- }
@@ -1,20 +0,0 @@
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-side-panel {
10
- font-size: 12px;
11
- color: $gray-700;
12
-
13
- > * {
14
- margin-top: 32px;
15
-
16
- &:last-child {
17
- margin-bottom: 32px;
18
- }
19
- }
20
- }
@@ -1,24 +0,0 @@
1
- /*
2
- * Copyright (c) 2015 Nordic Semiconductor ASA
3
- *
4
- * SPDX-License-Identifier: LicenseRef-Nordic-4-Clause
5
- */
6
-
7
- import React, { FC } from 'react';
8
-
9
- import './bar.scss';
10
-
11
- const Bar: FC<{ start: number; end: number }> = ({ start, end }) => (
12
- <>
13
- <div className="bar background" />
14
- <div
15
- className="bar foreground"
16
- style={{
17
- left: `${start}%`,
18
- width: `${end - start}%`,
19
- }}
20
- />
21
- </>
22
- );
23
-
24
- export default Bar;
@@ -1,48 +0,0 @@
1
- /*
2
- * Copyright (c) 2015 Nordic Semiconductor ASA
3
- *
4
- * SPDX-License-Identifier: LicenseRef-Nordic-4-Clause
5
- */
6
-
7
- import { isFactor } from './factor';
8
-
9
- describe('Factor', () => {
10
- it('Test valid integer factors ', () => {
11
- expect(isFactor(20, 5)).toBe(true);
12
- expect(isFactor(28, 2)).toBe(true);
13
- expect(isFactor(27, 3)).toBe(true);
14
- expect(isFactor(27, 9)).toBe(true);
15
- expect(isFactor(144, 12)).toBe(true);
16
- expect(isFactor(21, 7)).toBe(true);
17
- });
18
-
19
- it('Test invalid integer factors ', () => {
20
- expect(isFactor(20, 6)).toBe(false);
21
- expect(isFactor(28, 3)).toBe(false);
22
- expect(isFactor(27, 4)).toBe(false);
23
- expect(isFactor(27, 10)).toBe(false);
24
- expect(isFactor(144, 11)).toBe(false);
25
- expect(isFactor(21, 8)).toBe(false);
26
- });
27
-
28
- it('Test valid decimal factors ', () => {
29
- expect(isFactor(0.15, 0.05)).toBe(true);
30
- expect(isFactor(0.2331, 0.0001)).toBe(true);
31
- expect(isFactor(0.22, 0.02)).toBe(true);
32
- expect(isFactor(0.2, 0.02)).toBe(true);
33
- expect(isFactor(144.05, 0.01)).toBe(true);
34
- expect(isFactor(74.8706915963, 37.43534579815)).toBe(true);
35
- expect(isFactor(0.333333333, 0.3)).toBe(true);
36
- expect(isFactor(0.2331, 0.1)).toBe(true);
37
- });
38
-
39
- it('Test invalid decimal factors ', () => {
40
- expect(isFactor(0.16, 0.05)).toBe(false);
41
- expect(isFactor(0.2331, 0.0002)).toBe(false);
42
- expect(isFactor(0.22, 0.03)).toBe(false);
43
- expect(isFactor(0.2, 0.06)).toBe(false);
44
- expect(isFactor(144.05, 0.08)).toBe(false);
45
- expect(isFactor(0.3433333333, 0.03)).toBe(false);
46
- expect(isFactor(74.8806915963, 37.43534579815)).toBe(false);
47
- });
48
- });