@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.
- package/dist/bootstrap.css +8951 -0
- package/dist/index.css +1451 -0
- package/dist/index.js +122119 -0
- package/{src/Logo/nordic-logo-blue-icon-only.png → dist/nordic-logo-blue-icon-only-H7BABN6D.png} +0 -0
- package/{src/Logo/nordic-logo-gray-icon-only.png → dist/nordic-logo-gray-icon-only-GATOTR3L.png} +0 -0
- package/package.json +12 -3
- package/typings/generated/src/Device/deviceInfo/deviceInfo.d.ts +1 -2
- package/.github/ISSUE_TEMPLATE/custom.md +0 -10
- package/.husky/pre-push +0 -3
- package/.renovaterc.json +0 -10
- package/Changelog.md +0 -2973
- package/azure-pipelines.yml +0 -34
- package/config/eslintrc.js +0 -190
- package/config/jest.config.js +0 -41
- package/config/prettier.config.js +0 -13
- package/config/tsconfig.json +0 -15
- package/fw/bootloader/graviton_bootloader_v1.0.1-[nRF5_SDK_15.0.1-1.alpha_f76d012].zip +0 -0
- package/jest.config.js +0 -7
- package/main/index.ts +0 -32
- package/mocks/deviceLibMock.ts +0 -21
- package/mocks/electronMock.ts +0 -15
- package/mocks/electronStoreMock.ts +0 -19
- package/mocks/emptyMock.ts +0 -7
- package/mocks/fileMock.ts +0 -13
- package/mocks/gaMock.ts +0 -9
- package/mocks/mockTests.test.ts +0 -15
- package/mocks/packageJsonMock.ts +0 -10
- package/mocks/remoteMock.ts +0 -17
- package/scripts/esbuild-bootstrap.js +0 -15
- package/scripts/esbuild-renderer.js +0 -131
- package/scripts/installHusky.ts +0 -17
- package/scripts/prepare-shared-release.ts +0 -122
- package/scripts/release-shared.test.ts +0 -132
- package/scripts/release-shared.ts +0 -207
- package/src/About/About.tsx +0 -25
- package/src/About/AboutButton.tsx +0 -28
- package/src/About/ApplicationCard.tsx +0 -83
- package/src/About/DeviceCard.tsx +0 -74
- package/src/About/DocumentationCard.tsx +0 -18
- package/src/About/DocumentationSection.tsx +0 -24
- package/src/About/Section.tsx +0 -21
- package/src/About/ShortcutButton.tsx +0 -41
- package/src/About/SupportCard.tsx +0 -97
- package/src/About/about.scss +0 -40
- package/src/About/documentationSlice.ts +0 -41
- package/src/About/section.scss +0 -15
- package/src/About/shortcutSlice.ts +0 -52
- package/src/Alert/Alert.module.scss +0 -29
- package/src/Alert/Alert.tsx +0 -37
- package/src/App/App.test.tsx +0 -47
- package/src/App/App.tsx +0 -227
- package/src/App/ConnectedToStore.tsx +0 -19
- package/src/App/VisibilityBar.tsx +0 -103
- package/src/App/app.scss +0 -83
- package/src/App/appLayout.ts +0 -95
- package/src/App/shared.scss +0 -49
- package/src/App/visibility-bar.scss +0 -55
- package/src/Button/Button.tsx +0 -66
- package/src/Button/button.module.scss +0 -154
- package/src/Card/Card.tsx +0 -26
- package/src/Card/card.module.scss +0 -28
- package/src/Device/BrokenDeviceDialog/BrokenDeviceDialog.tsx +0 -58
- package/src/Device/BrokenDeviceDialog/broken-device-dialog.scss +0 -18
- package/src/Device/BrokenDeviceDialog/brokenDeviceDialogSlice.tsx +0 -48
- package/src/Device/DeviceSelector/BasicDeviceInfo.tsx +0 -115
- package/src/Device/DeviceSelector/DeviceIcon.tsx +0 -27
- package/src/Device/DeviceSelector/DeviceList/AnimatedList.tsx +0 -62
- package/src/Device/DeviceSelector/DeviceList/BrokenDevice.tsx +0 -34
- package/src/Device/DeviceSelector/DeviceList/Device.tsx +0 -84
- package/src/Device/DeviceSelector/DeviceList/DeviceList.tsx +0 -113
- package/src/Device/DeviceSelector/DeviceList/EditDeviceButtons.tsx +0 -28
- package/src/Device/DeviceSelector/DeviceList/MoreDeviceInfo.tsx +0 -65
- package/src/Device/DeviceSelector/DeviceList/RenameDevice.tsx +0 -22
- package/src/Device/DeviceSelector/DeviceList/broken-device.scss +0 -32
- package/src/Device/DeviceSelector/DeviceList/device-list.scss +0 -64
- package/src/Device/DeviceSelector/DeviceList/device.scss +0 -28
- package/src/Device/DeviceSelector/DeviceList/edit-device-buttons.scss +0 -31
- package/src/Device/DeviceSelector/DeviceList/more-device-info.scss +0 -33
- package/src/Device/DeviceSelector/DeviceList/rename-device.scss +0 -13
- package/src/Device/DeviceSelector/DeviceSelector.test.tsx +0 -342
- package/src/Device/DeviceSelector/DeviceSelector.tsx +0 -173
- package/src/Device/DeviceSelector/Favorite.tsx +0 -49
- package/src/Device/DeviceSelector/SelectDevice.tsx +0 -36
- package/src/Device/DeviceSelector/SelectedDevice.tsx +0 -65
- package/src/Device/DeviceSelector/arrow-down.svg +0 -1
- package/src/Device/DeviceSelector/basic-device-info.scss +0 -62
- package/src/Device/DeviceSelector/device-icon.scss +0 -27
- package/src/Device/DeviceSelector/favorite.scss +0 -17
- package/src/Device/DeviceSelector/select-device.scss +0 -38
- package/src/Device/DeviceSelector/selected-device.scss +0 -57
- package/src/Device/DeviceSetup/DeviceSetupView.tsx +0 -102
- package/src/Device/deviceAutoSelectSlice.ts +0 -144
- package/src/Device/deviceInfo/deviceInfo.ts +0 -254
- package/src/Device/deviceInfo/nRF51-Series-logo.svg +0 -1
- package/src/Device/deviceInfo/nRF52-Series-logo.svg +0 -1
- package/src/Device/deviceInfo/nRF53-Series-logo.svg +0 -1
- package/src/Device/deviceInfo/nRF70-Series_no-background_RGB.svg +0 -36
- package/src/Device/deviceInfo/nRF91-Series-logo.svg +0 -1
- package/src/Device/deviceInfo/ppk-logo.svg +0 -1
- package/src/Device/deviceInfo/unknown-logo.svg +0 -30
- package/src/Device/deviceInfo/unknown-nordic-logo.svg +0 -25
- package/src/Device/deviceLibWrapper.test.ts +0 -97
- package/src/Device/deviceLibWrapper.ts +0 -133
- package/src/Device/deviceLister.test.ts +0 -89
- package/src/Device/deviceLister.ts +0 -396
- package/src/Device/deviceSetup.ts +0 -264
- package/src/Device/deviceSetupSlice.ts +0 -94
- package/src/Device/deviceSlice.ts +0 -248
- package/src/Device/dfu-cc.ts +0 -162
- package/src/Device/initPacket.ts +0 -402
- package/src/Device/jprogOperations.ts +0 -206
- package/src/Device/sdfuOperations.ts +0 -601
- package/src/Dialog/Dialog.test.tsx +0 -134
- package/src/Dialog/Dialog.tsx +0 -236
- package/src/Dialog/dialog.scss +0 -60
- package/src/Dropdown/Dropdown.module.scss +0 -83
- package/src/Dropdown/Dropdown.test.tsx +0 -62
- package/src/Dropdown/Dropdown.tsx +0 -106
- package/src/ErrorBoundary/ErrorBoundary.test.tsx +0 -105
- package/src/ErrorBoundary/ErrorBoundary.tsx +0 -186
- package/src/ErrorBoundary/bug.svg +0 -1
- package/src/ErrorBoundary/error-boundary.scss +0 -102
- package/src/ErrorDialog/ErrorDialog.test.tsx +0 -70
- package/src/ErrorDialog/ErrorDialog.tsx +0 -94
- package/src/ErrorDialog/error.scss +0 -14
- package/src/ErrorDialog/errorDialogSlice.test.ts +0 -64
- package/src/ErrorDialog/errorDialogSlice.ts +0 -80
- package/src/FactoryReset/FactoryResetButton.test.tsx +0 -46
- package/src/FactoryReset/FactoryResetButton.tsx +0 -81
- package/src/InlineInput/InlineInput.tsx +0 -170
- package/src/InlineInput/NumberInlineInput.tsx +0 -107
- package/src/InlineInput/inline-input.scss +0 -38
- package/src/InlineInput/number-inline-input.scss +0 -15
- package/src/Log/LogEntry.tsx +0 -62
- package/src/Log/LogViewer.tsx +0 -54
- package/src/Log/log-entry.scss +0 -30
- package/src/Log/log-viewer.scss +0 -24
- package/src/Log/logSlice.ts +0 -73
- package/src/Log/syncLogToStore.ts +0 -36
- package/src/Logo/Logo.tsx +0 -48
- package/src/Logo/logo.scss +0 -11
- package/src/Main/Main.tsx +0 -13
- package/src/Main/main.scss +0 -13
- package/src/MasonryLayout/MasonryLayout.tsx +0 -234
- package/src/MasonryLayout/masonryLayout.module.scss +0 -46
- package/src/NavBar/NavBar.tsx +0 -22
- package/src/NavBar/NavMenu.test.tsx +0 -41
- package/src/NavBar/NavMenu.tsx +0 -53
- package/src/NavBar/NavMenuItem.tsx +0 -41
- package/src/NavBar/nav-bar.scss +0 -26
- package/src/NavBar/nav-menu-item.scss +0 -34
- package/src/OpenApp/openApp.ts +0 -18
- package/src/Panes/FeedbackPane.tsx +0 -149
- package/src/PseudoButton/PseudoButton.tsx +0 -56
- package/src/PseudoButton/pseudo-button.scss +0 -11
- package/src/SerialPort/ConflictingSettingsDialog.tsx +0 -242
- package/src/SerialPort/SerialPort.test.ts +0 -54
- package/src/SerialPort/SerialPort.ts +0 -202
- package/src/Shortcuts/Shortcut-item.scss +0 -33
- package/src/Shortcuts/Shortcut-modal.scss +0 -20
- package/src/Shortcuts/ShortcutItem.tsx +0 -48
- package/src/Shortcuts/ShortcutModal.tsx +0 -67
- package/src/SidePanel/Group.tsx +0 -106
- package/src/SidePanel/SidePanel.tsx +0 -19
- package/src/SidePanel/group.scss +0 -42
- package/src/SidePanel/sidepanel.scss +0 -20
- package/src/Slider/Bar.tsx +0 -24
- package/src/Slider/Factor.test.ts +0 -48
- package/src/Slider/Handle.tsx +0 -121
- package/src/Slider/Slider.test.tsx +0 -25
- package/src/Slider/Slider.tsx +0 -91
- package/src/Slider/Ticks.tsx +0 -54
- package/src/Slider/__snapshots__/Slider.test.tsx.snap +0 -50
- package/src/Slider/bar.scss +0 -24
- package/src/Slider/factor.ts +0 -24
- package/src/Slider/handle.scss +0 -32
- package/src/Slider/percentage.ts +0 -67
- package/src/Slider/range.ts +0 -92
- package/src/Slider/slider.scss +0 -14
- package/src/Slider/ticks.scss +0 -28
- package/src/Slider/variables.scss +0 -16
- package/src/StartStopButton/StartStopButton.tsx +0 -60
- package/src/StartStopButton/play-circle.svg +0 -1
- package/src/StartStopButton/start-stop-button.scss +0 -47
- package/src/StartStopButton/stop-circle.svg +0 -1
- package/src/StateSelector/StateSelector.tsx +0 -64
- package/src/StateSelector/state-selector.scss +0 -38
- package/src/Stepper/Stepper.tsx +0 -139
- package/src/Stepper/stepper.scss +0 -127
- package/src/Toggle/Toggle.tsx +0 -120
- package/src/Toggle/toggle.scss +0 -109
- package/src/bootstrap.scss +0 -14
- package/src/index.ts +0 -146
- package/src/logging/appTransport.test.ts +0 -78
- package/src/logging/appTransport.ts +0 -41
- package/src/logging/describeError.test.ts +0 -38
- package/src/logging/describeError.ts +0 -56
- package/src/logging/index.ts +0 -103
- package/src/logging/logBuffer.test.ts +0 -41
- package/src/logging/logBuffer.ts +0 -24
- package/src/logging/sendInitialLogMessages.ts +0 -64
- package/src/store.ts +0 -60
- package/src/svg.d.ts +0 -15
- package/src/utils/AppTypes.ts +0 -60
- package/src/utils/appDirs.ts +0 -78
- package/src/utils/bleChannels.ts +0 -16
- package/src/utils/classNames.test.ts +0 -29
- package/src/utils/classNames.ts +0 -25
- package/src/utils/colors.scss +0 -46
- package/src/utils/colors.ts +0 -38
- package/src/utils/describeVersion.ts +0 -21
- package/src/utils/environment.ts +0 -6
- package/src/utils/logLibVersions.ts +0 -103
- package/src/utils/open.ts +0 -46
- package/src/utils/packageJson.ts +0 -60
- package/src/utils/persistentStore.ts +0 -144
- package/src/utils/systemReport.ts +0 -160
- package/src/utils/truncateMiddle.test.ts +0 -21
- package/src/utils/truncateMiddle.ts +0 -20
- package/src/utils/usageData.ts +0 -189
- package/src/utils/useHotKey.ts +0 -62
- package/src/utils/useStopwatch.test.tsx +0 -311
- package/src/utils/useStopwatch.ts +0 -140
- package/src/variables.scss +0 -820
- package/styles.scss +0 -88
- package/test/dispatchTo.ts +0 -23
- package/test/index.ts +0 -7
- package/test/jestResolver.js +0 -28
- package/test/setupTests.ts +0 -27
- package/test/testUtil.ts +0 -20
- package/test/testrenderer.tsx +0 -39
- /package/{src/Logo/nordic-logo-white-icon-only.png → dist/nordic-logo-white-icon-only-XIZBW537.png} +0 -0
package/src/Slider/Handle.tsx
DELETED
|
@@ -1,121 +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, MouseEventHandler, useRef, useState } from 'react';
|
|
8
|
-
|
|
9
|
-
import classNames from '../utils/classNames';
|
|
10
|
-
import {
|
|
11
|
-
constrainedToPercentage,
|
|
12
|
-
fromPercentage,
|
|
13
|
-
toPercentage,
|
|
14
|
-
} from './percentage';
|
|
15
|
-
import { RangeOrValues } from './range';
|
|
16
|
-
|
|
17
|
-
import './handle.scss';
|
|
18
|
-
|
|
19
|
-
const useAutoupdatingRef = (value: (number: number) => void) => {
|
|
20
|
-
const ref = useRef(value);
|
|
21
|
-
if (ref.current !== value) ref.current = value;
|
|
22
|
-
return ref;
|
|
23
|
-
};
|
|
24
|
-
|
|
25
|
-
interface Props {
|
|
26
|
-
value: number;
|
|
27
|
-
disabled: boolean;
|
|
28
|
-
range: RangeOrValues;
|
|
29
|
-
onChange: (number: number) => void;
|
|
30
|
-
onChangeComplete?: () => void;
|
|
31
|
-
sliderWidth?: number;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
const noop = () => {};
|
|
35
|
-
const Handle: FC<Props> = ({
|
|
36
|
-
value,
|
|
37
|
-
disabled,
|
|
38
|
-
range,
|
|
39
|
-
onChange,
|
|
40
|
-
onChangeComplete = noop,
|
|
41
|
-
sliderWidth,
|
|
42
|
-
}) => {
|
|
43
|
-
const [currentlyDragged, setCurrentlyDragged] = useState(false);
|
|
44
|
-
const percentage = toPercentage(value, range);
|
|
45
|
-
|
|
46
|
-
const onMouseDragStart = useRef<{
|
|
47
|
-
mousePosition: number;
|
|
48
|
-
percentage: number;
|
|
49
|
-
lastValue: number;
|
|
50
|
-
}>();
|
|
51
|
-
|
|
52
|
-
// We have to put the callbacks into refs, so that we do not call outdated references later
|
|
53
|
-
const onChangeRef = useAutoupdatingRef(onChange);
|
|
54
|
-
const onChangeCompleteRef = useAutoupdatingRef(onChangeComplete);
|
|
55
|
-
|
|
56
|
-
const grabHandle: MouseEventHandler<HTMLDivElement> = (
|
|
57
|
-
event: React.MouseEvent
|
|
58
|
-
) => {
|
|
59
|
-
const sliderWidthStillUnknown = sliderWidth == null;
|
|
60
|
-
if (sliderWidthStillUnknown) return;
|
|
61
|
-
|
|
62
|
-
const mousePosition = event.clientX;
|
|
63
|
-
const lastValue = value;
|
|
64
|
-
onMouseDragStart.current = { mousePosition, percentage, lastValue };
|
|
65
|
-
setCurrentlyDragged(true);
|
|
66
|
-
|
|
67
|
-
window.addEventListener('mousemove', dragHandle);
|
|
68
|
-
window.addEventListener('mouseup', releaseHandle);
|
|
69
|
-
};
|
|
70
|
-
|
|
71
|
-
const dragHandle = (event: MouseEvent) => {
|
|
72
|
-
const oldMousePosition = onMouseDragStart.current
|
|
73
|
-
?.mousePosition as number;
|
|
74
|
-
const newMousePosition = event.clientX;
|
|
75
|
-
const percentageChange =
|
|
76
|
-
((oldMousePosition - newMousePosition) * 100) /
|
|
77
|
-
(sliderWidth as number);
|
|
78
|
-
|
|
79
|
-
const oldPercentage = onMouseDragStart.current?.percentage as number;
|
|
80
|
-
const newPercentage = constrainedToPercentage(
|
|
81
|
-
oldPercentage - percentageChange
|
|
82
|
-
);
|
|
83
|
-
|
|
84
|
-
const lastValue = onMouseDragStart.current?.lastValue as number;
|
|
85
|
-
|
|
86
|
-
const newValue = fromPercentage(
|
|
87
|
-
lastValue,
|
|
88
|
-
newPercentage,
|
|
89
|
-
range,
|
|
90
|
-
event.movementX > 0
|
|
91
|
-
);
|
|
92
|
-
onMouseDragStart.current = {
|
|
93
|
-
mousePosition: oldMousePosition,
|
|
94
|
-
percentage: oldPercentage,
|
|
95
|
-
lastValue: newValue,
|
|
96
|
-
};
|
|
97
|
-
onChangeRef.current(newValue);
|
|
98
|
-
};
|
|
99
|
-
|
|
100
|
-
const releaseHandle = () => {
|
|
101
|
-
window.removeEventListener('mousemove', dragHandle);
|
|
102
|
-
window.removeEventListener('mouseup', releaseHandle);
|
|
103
|
-
setCurrentlyDragged(false);
|
|
104
|
-
onChangeCompleteRef.current(0);
|
|
105
|
-
};
|
|
106
|
-
|
|
107
|
-
return (
|
|
108
|
-
<div
|
|
109
|
-
className={classNames('handle', currentlyDragged && 'dragged')}
|
|
110
|
-
style={{ left: `${percentage}%` }}
|
|
111
|
-
onMouseDown={disabled ? noop : grabHandle}
|
|
112
|
-
role="slider"
|
|
113
|
-
tabIndex={disabled ? -1 : 0}
|
|
114
|
-
aria-valuemin={0}
|
|
115
|
-
aria-valuemax={100}
|
|
116
|
-
aria-valuenow={value}
|
|
117
|
-
/>
|
|
118
|
-
);
|
|
119
|
-
};
|
|
120
|
-
|
|
121
|
-
export default Handle;
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright (c) 2022 Nordic Semiconductor ASA
|
|
3
|
-
*
|
|
4
|
-
* SPDX-License-Identifier: LicenseRef-Nordic-4-Clause
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
import React from 'react';
|
|
8
|
-
|
|
9
|
-
import render from '../../test/testrenderer';
|
|
10
|
-
import Slider from './Slider';
|
|
11
|
-
|
|
12
|
-
describe('Slider component', () => {
|
|
13
|
-
it('renders correct with ticks', () => {
|
|
14
|
-
expect(
|
|
15
|
-
render(
|
|
16
|
-
<Slider
|
|
17
|
-
ticks
|
|
18
|
-
values={[2]}
|
|
19
|
-
range={{ min: 0, max: 5 }}
|
|
20
|
-
onChange={[() => {}]}
|
|
21
|
-
/>
|
|
22
|
-
).baseElement
|
|
23
|
-
).toMatchSnapshot();
|
|
24
|
-
});
|
|
25
|
-
});
|
package/src/Slider/Slider.tsx
DELETED
|
@@ -1,91 +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, useEffect } from 'react';
|
|
8
|
-
import { useResizeDetector } from 'react-resize-detector';
|
|
9
|
-
|
|
10
|
-
import classNames from '../utils/classNames';
|
|
11
|
-
import Bar from './Bar';
|
|
12
|
-
import Handle from './Handle';
|
|
13
|
-
import { toPercentage } from './percentage';
|
|
14
|
-
import { getMin, RangeOrValues, useValidatedRangeOrValues } from './range';
|
|
15
|
-
import Ticks from './Ticks';
|
|
16
|
-
|
|
17
|
-
import './slider.scss';
|
|
18
|
-
|
|
19
|
-
const useValidatedArraySizes = (
|
|
20
|
-
values: readonly number[],
|
|
21
|
-
onChange: ((v: number) => void)[]
|
|
22
|
-
) => {
|
|
23
|
-
useEffect(() => {
|
|
24
|
-
if (values.length === 0)
|
|
25
|
-
console.error('"values" must contain at least on element');
|
|
26
|
-
if (values.length !== onChange.length)
|
|
27
|
-
console.error(
|
|
28
|
-
`Props 'values' and 'onChange' must have the same size but were ${values} and ${onChange}`
|
|
29
|
-
);
|
|
30
|
-
}, [onChange, values]);
|
|
31
|
-
};
|
|
32
|
-
|
|
33
|
-
export interface Props {
|
|
34
|
-
id?: string;
|
|
35
|
-
title?: string;
|
|
36
|
-
disabled?: boolean;
|
|
37
|
-
values: readonly number[];
|
|
38
|
-
range: RangeOrValues;
|
|
39
|
-
ticks?: boolean;
|
|
40
|
-
onChange: ((v: number) => void)[];
|
|
41
|
-
onChangeComplete?: () => void;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
const Slider: FC<Props> = ({
|
|
45
|
-
id,
|
|
46
|
-
title,
|
|
47
|
-
disabled = false,
|
|
48
|
-
values,
|
|
49
|
-
range: rangeOrValues,
|
|
50
|
-
ticks,
|
|
51
|
-
onChange,
|
|
52
|
-
onChangeComplete,
|
|
53
|
-
}) => {
|
|
54
|
-
useValidatedArraySizes(values, onChange);
|
|
55
|
-
useValidatedRangeOrValues(rangeOrValues);
|
|
56
|
-
|
|
57
|
-
const { width, ref } = useResizeDetector();
|
|
58
|
-
|
|
59
|
-
const valueRange = {
|
|
60
|
-
min: values.length === 1 ? getMin(rangeOrValues) : Math.min(...values),
|
|
61
|
-
max: Math.max(...values),
|
|
62
|
-
};
|
|
63
|
-
|
|
64
|
-
return (
|
|
65
|
-
<div
|
|
66
|
-
className={classNames('slider', disabled && 'disabled')}
|
|
67
|
-
id={id}
|
|
68
|
-
title={title}
|
|
69
|
-
ref={ref as React.MutableRefObject<HTMLDivElement>}
|
|
70
|
-
>
|
|
71
|
-
<Bar
|
|
72
|
-
start={toPercentage(valueRange.min, rangeOrValues)}
|
|
73
|
-
end={toPercentage(valueRange.max, rangeOrValues)}
|
|
74
|
-
/>
|
|
75
|
-
{ticks && <Ticks valueRange={valueRange} range={rangeOrValues} />}
|
|
76
|
-
{values.map((value, index) => (
|
|
77
|
-
<Handle
|
|
78
|
-
key={index} // eslint-disable-line react/no-array-index-key
|
|
79
|
-
value={value}
|
|
80
|
-
range={rangeOrValues}
|
|
81
|
-
disabled={disabled}
|
|
82
|
-
onChange={onChange[index]}
|
|
83
|
-
onChangeComplete={onChangeComplete}
|
|
84
|
-
sliderWidth={width}
|
|
85
|
-
/>
|
|
86
|
-
))}
|
|
87
|
-
</div>
|
|
88
|
-
);
|
|
89
|
-
};
|
|
90
|
-
|
|
91
|
-
export default Slider;
|
package/src/Slider/Ticks.tsx
DELETED
|
@@ -1,54 +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, useEffect } from 'react';
|
|
8
|
-
import lodashRange from 'lodash.range';
|
|
9
|
-
|
|
10
|
-
import classNames from '../utils/classNames';
|
|
11
|
-
import { getStep, isValues, RangeOrValues } from './range';
|
|
12
|
-
|
|
13
|
-
import './ticks.scss';
|
|
14
|
-
|
|
15
|
-
interface Props {
|
|
16
|
-
range: RangeOrValues;
|
|
17
|
-
valueRange: { min: number; max: number };
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
const Ticks: FC<Props> = ({ valueRange, range: rangeOrValues }) => {
|
|
21
|
-
useEffect(() => {
|
|
22
|
-
if (isValues(rangeOrValues)) {
|
|
23
|
-
console.error(
|
|
24
|
-
'Ticks are not yet implemented for explicit values. Not showing ticks.'
|
|
25
|
-
);
|
|
26
|
-
}
|
|
27
|
-
}, [rangeOrValues]);
|
|
28
|
-
|
|
29
|
-
if (isValues(rangeOrValues)) {
|
|
30
|
-
return null;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
const range = rangeOrValues;
|
|
34
|
-
|
|
35
|
-
const step = getStep(range);
|
|
36
|
-
const isSelected = (value: number) =>
|
|
37
|
-
value >= valueRange.min && value <= valueRange.max;
|
|
38
|
-
|
|
39
|
-
return (
|
|
40
|
-
<div className="ticks">
|
|
41
|
-
{lodashRange(range.min, range.max + step, step).map(value => (
|
|
42
|
-
<div
|
|
43
|
-
key={String(value)}
|
|
44
|
-
className={classNames(
|
|
45
|
-
'tick',
|
|
46
|
-
isSelected(value) && 'selected'
|
|
47
|
-
)}
|
|
48
|
-
/>
|
|
49
|
-
))}
|
|
50
|
-
</div>
|
|
51
|
-
);
|
|
52
|
-
};
|
|
53
|
-
|
|
54
|
-
export default Ticks;
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
|
2
|
-
|
|
3
|
-
exports[`Slider component renders correct with ticks 1`] = `
|
|
4
|
-
<body>
|
|
5
|
-
<div>
|
|
6
|
-
<div
|
|
7
|
-
class="slider"
|
|
8
|
-
>
|
|
9
|
-
<div
|
|
10
|
-
class="bar background"
|
|
11
|
-
/>
|
|
12
|
-
<div
|
|
13
|
-
class="bar foreground"
|
|
14
|
-
style="left: 0%; width: 40%;"
|
|
15
|
-
/>
|
|
16
|
-
<div
|
|
17
|
-
class="ticks"
|
|
18
|
-
>
|
|
19
|
-
<div
|
|
20
|
-
class="tick selected"
|
|
21
|
-
/>
|
|
22
|
-
<div
|
|
23
|
-
class="tick selected"
|
|
24
|
-
/>
|
|
25
|
-
<div
|
|
26
|
-
class="tick selected"
|
|
27
|
-
/>
|
|
28
|
-
<div
|
|
29
|
-
class="tick"
|
|
30
|
-
/>
|
|
31
|
-
<div
|
|
32
|
-
class="tick"
|
|
33
|
-
/>
|
|
34
|
-
<div
|
|
35
|
-
class="tick"
|
|
36
|
-
/>
|
|
37
|
-
</div>
|
|
38
|
-
<div
|
|
39
|
-
aria-valuemax="100"
|
|
40
|
-
aria-valuemin="0"
|
|
41
|
-
aria-valuenow="2"
|
|
42
|
-
class="handle"
|
|
43
|
-
role="slider"
|
|
44
|
-
style="left: 40%;"
|
|
45
|
-
tabindex="0"
|
|
46
|
-
/>
|
|
47
|
-
</div>
|
|
48
|
-
</div>
|
|
49
|
-
</body>
|
|
50
|
-
`;
|
package/src/Slider/bar.scss
DELETED
|
@@ -1,24 +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
|
-
.slider .bar {
|
|
10
|
-
position: absolute;
|
|
11
|
-
top: $handle-radius-selected - 0.5 * $bar-height;
|
|
12
|
-
height: $bar-height;
|
|
13
|
-
margin: 0 (-$handle-radius);
|
|
14
|
-
|
|
15
|
-
&.background {
|
|
16
|
-
left: 0;
|
|
17
|
-
right: 0;
|
|
18
|
-
background-color: $color-unselected;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
&.foreground {
|
|
22
|
-
background-color: $color-selected;
|
|
23
|
-
}
|
|
24
|
-
}
|
package/src/Slider/factor.ts
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright (c) 2015 Nordic Semiconductor ASA
|
|
3
|
-
*
|
|
4
|
-
* SPDX-License-Identifier: LicenseRef-Nordic-4-Clause
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
// We only care about the decimals of the divisor i.e if divisor has 2 decimal points
|
|
8
|
-
// we will only care if the dividend up to 2 decimal points is divisable by the divisor
|
|
9
|
-
|
|
10
|
-
export const isFactor = (dividend: number, divisor: number): boolean => {
|
|
11
|
-
let exp = 0;
|
|
12
|
-
const originalDivisor = divisor;
|
|
13
|
-
|
|
14
|
-
while (divisor !== Number(divisor.toFixed(0))) {
|
|
15
|
-
divisor = originalDivisor;
|
|
16
|
-
exp += 1;
|
|
17
|
-
divisor *= 10 ** exp;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
divisor = Number(divisor.toFixed(0));
|
|
21
|
-
dividend = Number((dividend * 10 ** exp).toFixed(0));
|
|
22
|
-
|
|
23
|
-
return dividend % divisor === 0;
|
|
24
|
-
};
|
package/src/Slider/handle.scss
DELETED
|
@@ -1,32 +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
|
-
.slider .handle {
|
|
10
|
-
position: absolute;
|
|
11
|
-
border-style: solid;
|
|
12
|
-
border-radius: 50%;
|
|
13
|
-
outline: 0;
|
|
14
|
-
|
|
15
|
-
border-color: $color-selected;
|
|
16
|
-
border-width: $handle-radius;
|
|
17
|
-
top: $handle-radius-selected - $handle-radius;
|
|
18
|
-
margin-left: -$handle-radius;
|
|
19
|
-
|
|
20
|
-
transition-property: border-color, border-width, top, margin-left;
|
|
21
|
-
transition-duration: 100ms;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
.slider:not(.disabled) {
|
|
25
|
-
.handle:hover, .handle.dragged {
|
|
26
|
-
border-width: $handle-radius-selected;
|
|
27
|
-
top: 0;
|
|
28
|
-
margin-left: -$handle-radius-selected;
|
|
29
|
-
|
|
30
|
-
z-index: 1;
|
|
31
|
-
}
|
|
32
|
-
}
|
package/src/Slider/percentage.ts
DELETED
|
@@ -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 { getMax, getMin, isValues, RangeOrValues } from './range';
|
|
8
|
-
|
|
9
|
-
export const constrainedToPercentage = (percentage: number) => {
|
|
10
|
-
if (percentage < 0) return 0;
|
|
11
|
-
if (percentage > 100) return 100;
|
|
12
|
-
return percentage;
|
|
13
|
-
};
|
|
14
|
-
|
|
15
|
-
export const toPercentage = (value: number, rangeOrValues: RangeOrValues) => {
|
|
16
|
-
const min = getMin(rangeOrValues);
|
|
17
|
-
const max = getMax(rangeOrValues);
|
|
18
|
-
|
|
19
|
-
return ((value - min) * 100) / (max - min);
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
export const fromPercentage = (
|
|
23
|
-
lastValue: number,
|
|
24
|
-
value: number,
|
|
25
|
-
rangeOrValues: RangeOrValues,
|
|
26
|
-
directionForward: boolean
|
|
27
|
-
) => {
|
|
28
|
-
const min = getMin(rangeOrValues);
|
|
29
|
-
const max = getMax(rangeOrValues);
|
|
30
|
-
|
|
31
|
-
if (isValues(rangeOrValues)) {
|
|
32
|
-
const values = rangeOrValues;
|
|
33
|
-
const noOfIndexes = values.length - 1;
|
|
34
|
-
const computedValue = (value * (max - min)) / 100 + min;
|
|
35
|
-
|
|
36
|
-
const lastValueIndex = values.indexOf(lastValue);
|
|
37
|
-
const closestPrevIndex = lastValueIndex === 0 ? 0 : lastValueIndex - 1;
|
|
38
|
-
const closestNextIndex =
|
|
39
|
-
lastValueIndex === noOfIndexes ? noOfIndexes : lastValueIndex + 1;
|
|
40
|
-
|
|
41
|
-
let closestIndex = -1;
|
|
42
|
-
|
|
43
|
-
if (directionForward) {
|
|
44
|
-
closestIndex =
|
|
45
|
-
values[closestNextIndex] > computedValue
|
|
46
|
-
? lastValueIndex
|
|
47
|
-
: closestNextIndex;
|
|
48
|
-
} else {
|
|
49
|
-
closestIndex =
|
|
50
|
-
values[closestPrevIndex] < computedValue
|
|
51
|
-
? lastValueIndex
|
|
52
|
-
: closestPrevIndex;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
return values[closestIndex];
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
const range = rangeOrValues;
|
|
59
|
-
if (range.step != null) {
|
|
60
|
-
const noOfSteps = (max - min) / range.step;
|
|
61
|
-
const closestStep = Math.round((value / 100) * noOfSteps);
|
|
62
|
-
|
|
63
|
-
return Number((min + closestStep * range.step).toFixed(range.decimals));
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
return Number(((value * (max - min)) / 100 + min).toFixed(range.decimals));
|
|
67
|
-
};
|
package/src/Slider/range.ts
DELETED
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright (c) 2015 Nordic Semiconductor ASA
|
|
3
|
-
*
|
|
4
|
-
* SPDX-License-Identifier: LicenseRef-Nordic-4-Clause
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
import { useEffect } from 'react';
|
|
8
|
-
|
|
9
|
-
import { isFactor } from './factor';
|
|
10
|
-
|
|
11
|
-
export type Values = readonly number[];
|
|
12
|
-
export type Range = {
|
|
13
|
-
min: number;
|
|
14
|
-
max: number;
|
|
15
|
-
decimals?: number;
|
|
16
|
-
step?: number; // positive number
|
|
17
|
-
};
|
|
18
|
-
|
|
19
|
-
export type RangeOrValues = Range | Values;
|
|
20
|
-
|
|
21
|
-
export const isValues = (
|
|
22
|
-
rangeOrValues: RangeOrValues
|
|
23
|
-
): rangeOrValues is Values => Array.isArray(rangeOrValues);
|
|
24
|
-
|
|
25
|
-
export const getMin = (rangeOrValues: RangeOrValues) =>
|
|
26
|
-
isValues(rangeOrValues) ? rangeOrValues[0] : rangeOrValues.min;
|
|
27
|
-
|
|
28
|
-
export const getMax = (rangeOrValues: RangeOrValues) =>
|
|
29
|
-
isValues(rangeOrValues)
|
|
30
|
-
? rangeOrValues[rangeOrValues.length - 1]
|
|
31
|
-
: rangeOrValues.max;
|
|
32
|
-
|
|
33
|
-
export const getStep = (range: Range) =>
|
|
34
|
-
range.step != null ? range.step : 0.1 ** (range.decimals ?? 0);
|
|
35
|
-
|
|
36
|
-
const assert = (expectedToBeTrue: boolean, warning: string) => {
|
|
37
|
-
if (!expectedToBeTrue) {
|
|
38
|
-
console.error(warning);
|
|
39
|
-
}
|
|
40
|
-
};
|
|
41
|
-
|
|
42
|
-
const validateValues = (values: Values) => {
|
|
43
|
-
for (let i = 0; i < values.length - 1; i += 1) {
|
|
44
|
-
assert(
|
|
45
|
-
values[i] < values[i + 1],
|
|
46
|
-
`The values of the range must be sorted correctly, but ${
|
|
47
|
-
values[i]
|
|
48
|
-
} is larger then ${values[i + 1]} in ${values}`
|
|
49
|
-
);
|
|
50
|
-
}
|
|
51
|
-
};
|
|
52
|
-
|
|
53
|
-
const validateRange = (range: Range) => {
|
|
54
|
-
assert(
|
|
55
|
-
!(`explicitRange` in range),
|
|
56
|
-
'Using `explicitRange` is not supported anymore, use only an array instead of a range object.'
|
|
57
|
-
);
|
|
58
|
-
|
|
59
|
-
assert(
|
|
60
|
-
range.min < range.max,
|
|
61
|
-
`range.min must not be higher than range.max: ${JSON.stringify(range)}`
|
|
62
|
-
);
|
|
63
|
-
|
|
64
|
-
if (range.decimals != null)
|
|
65
|
-
assert(
|
|
66
|
-
range.decimals >= 0 && Number.isInteger(range.decimals),
|
|
67
|
-
`range.decimals must be non-negative integer but is ${range.decimals}`
|
|
68
|
-
);
|
|
69
|
-
|
|
70
|
-
if (range.step != null) {
|
|
71
|
-
assert(
|
|
72
|
-
range.step > 0,
|
|
73
|
-
`range.step must be larger than zero but is ${range.step}`
|
|
74
|
-
);
|
|
75
|
-
assert(
|
|
76
|
-
isFactor(range.max - range.min, range.step),
|
|
77
|
-
`range.step must be a factor of range.max - range.min: ${JSON.stringify(
|
|
78
|
-
range
|
|
79
|
-
)}`
|
|
80
|
-
);
|
|
81
|
-
}
|
|
82
|
-
};
|
|
83
|
-
|
|
84
|
-
export const useValidatedRangeOrValues = (rangeOrValues: RangeOrValues) => {
|
|
85
|
-
useEffect(() => {
|
|
86
|
-
if (isValues(rangeOrValues)) {
|
|
87
|
-
validateValues(rangeOrValues);
|
|
88
|
-
} else {
|
|
89
|
-
validateRange(rangeOrValues);
|
|
90
|
-
}
|
|
91
|
-
}, [rangeOrValues]);
|
|
92
|
-
};
|
package/src/Slider/slider.scss
DELETED
|
@@ -1,14 +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
|
-
.slider {
|
|
10
|
-
height: 2*$handle-radius-selected;
|
|
11
|
-
|
|
12
|
-
position: relative;
|
|
13
|
-
margin: 0 $handle-radius;
|
|
14
|
-
}
|
package/src/Slider/ticks.scss
DELETED
|
@@ -1,28 +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
|
-
.slider .ticks {
|
|
10
|
-
display: flex;
|
|
11
|
-
justify-content: space-between;
|
|
12
|
-
margin-right: -$handle-radius;
|
|
13
|
-
|
|
14
|
-
.tick {
|
|
15
|
-
border-style: solid;
|
|
16
|
-
border-radius: 50%;
|
|
17
|
-
outline: 0;
|
|
18
|
-
|
|
19
|
-
border-color: $color-unselected;
|
|
20
|
-
border-width: $tick-radius;
|
|
21
|
-
margin-top: $handle-radius-selected - $tick-radius;
|
|
22
|
-
margin-left: -$handle-radius;
|
|
23
|
-
|
|
24
|
-
&.selected {
|
|
25
|
-
border-color: $color-selected;
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
}
|
|
@@ -1,16 +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
|
-
$bar-height: 2px;
|
|
10
|
-
$handle-radius: 6px;
|
|
11
|
-
$handle-radius-selected: 8px;
|
|
12
|
-
|
|
13
|
-
$tick-radius: 3px;
|
|
14
|
-
|
|
15
|
-
$color-selected: $gray-700;
|
|
16
|
-
$color-unselected: $gray-200;
|