@darajs/ui-components 1.0.0-a.1
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/LICENSE +201 -0
- package/dist/accordion/accordion-item.d.ts +25 -0
- package/dist/accordion/accordion-item.d.ts.map +1 -0
- package/dist/accordion/accordion-item.js +90 -0
- package/dist/accordion/accordion-item.js.map +1 -0
- package/dist/accordion/accordion.d.ts +33 -0
- package/dist/accordion/accordion.d.ts.map +1 -0
- package/dist/accordion/accordion.js +86 -0
- package/dist/accordion/accordion.js.map +1 -0
- package/dist/badge/badge.d.ts +21 -0
- package/dist/badge/badge.d.ts.map +1 -0
- package/dist/badge/badge.js +42 -0
- package/dist/badge/badge.js.map +1 -0
- package/dist/button/button.d.ts +35 -0
- package/dist/button/button.d.ts.map +1 -0
- package/dist/button/button.js +169 -0
- package/dist/button/button.js.map +1 -0
- package/dist/button-bar/button-bar.d.ts +19 -0
- package/dist/button-bar/button-bar.d.ts.map +1 -0
- package/dist/button-bar/button-bar.js +123 -0
- package/dist/button-bar/button-bar.js.map +1 -0
- package/dist/carousel/carousel.d.ts +24 -0
- package/dist/carousel/carousel.d.ts.map +1 -0
- package/dist/carousel/carousel.js +175 -0
- package/dist/carousel/carousel.js.map +1 -0
- package/dist/checkbox/checkbox-group.d.ts +36 -0
- package/dist/checkbox/checkbox-group.d.ts.map +1 -0
- package/dist/checkbox/checkbox-group.js +116 -0
- package/dist/checkbox/checkbox-group.js.map +1 -0
- package/dist/checkbox/checkbox.d.ts +28 -0
- package/dist/checkbox/checkbox.d.ts.map +1 -0
- package/dist/checkbox/checkbox.js +162 -0
- package/dist/checkbox/checkbox.js.map +1 -0
- package/dist/checkbox/tri-state-checkbox.d.ts +23 -0
- package/dist/checkbox/tri-state-checkbox.d.ts.map +1 -0
- package/dist/checkbox/tri-state-checkbox.js +87 -0
- package/dist/checkbox/tri-state-checkbox.js.map +1 -0
- package/dist/combo-box/combo-box.d.ts +328 -0
- package/dist/combo-box/combo-box.d.ts.map +1 -0
- package/dist/combo-box/combo-box.js +213 -0
- package/dist/combo-box/combo-box.js.map +1 -0
- package/dist/component-select-list/component-select-list.d.ts +27 -0
- package/dist/component-select-list/component-select-list.d.ts.map +1 -0
- package/dist/component-select-list/component-select-list.js +129 -0
- package/dist/component-select-list/component-select-list.js.map +1 -0
- package/dist/constants.d.ts +33 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +47 -0
- package/dist/constants.js.map +1 -0
- package/dist/context-menu/context-menu.d.ts +24 -0
- package/dist/context-menu/context-menu.d.ts.map +1 -0
- package/dist/context-menu/context-menu.js +112 -0
- package/dist/context-menu/context-menu.js.map +1 -0
- package/dist/datepicker/datepicker-select.d.ts +50 -0
- package/dist/datepicker/datepicker-select.d.ts.map +1 -0
- package/dist/datepicker/datepicker-select.js +211 -0
- package/dist/datepicker/datepicker-select.js.map +1 -0
- package/dist/datepicker/datepicker.d.ts +57 -0
- package/dist/datepicker/datepicker.d.ts.map +1 -0
- package/dist/datepicker/datepicker.js +608 -0
- package/dist/datepicker/datepicker.js.map +1 -0
- package/dist/dropzone/dropzone.d.ts +20 -0
- package/dist/dropzone/dropzone.d.ts.map +1 -0
- package/dist/dropzone/dropzone.js +77 -0
- package/dist/dropzone/dropzone.js.map +1 -0
- package/dist/error-boundary/error-boundary.d.ts +33 -0
- package/dist/error-boundary/error-boundary.d.ts.map +1 -0
- package/dist/error-boundary/error-boundary.js +72 -0
- package/dist/error-boundary/error-boundary.js.map +1 -0
- package/dist/filter/categorical-filter.d.ts +27 -0
- package/dist/filter/categorical-filter.d.ts.map +1 -0
- package/dist/filter/categorical-filter.js +150 -0
- package/dist/filter/categorical-filter.js.map +1 -0
- package/dist/filter/datetime-filter.d.ts +29 -0
- package/dist/filter/datetime-filter.d.ts.map +1 -0
- package/dist/filter/datetime-filter.js +196 -0
- package/dist/filter/datetime-filter.js.map +1 -0
- package/dist/filter/numeric-filter.d.ts +25 -0
- package/dist/filter/numeric-filter.d.ts.map +1 -0
- package/dist/filter/numeric-filter.js +146 -0
- package/dist/filter/numeric-filter.js.map +1 -0
- package/dist/hierarchy-selector/hierarchy-selector.d.ts +31 -0
- package/dist/hierarchy-selector/hierarchy-selector.d.ts.map +1 -0
- package/dist/hierarchy-selector/hierarchy-selector.js +65 -0
- package/dist/hierarchy-selector/hierarchy-selector.js.map +1 -0
- package/dist/hierarchy-selector/node/branch.d.ts +47 -0
- package/dist/hierarchy-selector/node/branch.d.ts.map +1 -0
- package/dist/hierarchy-selector/node/branch.js +133 -0
- package/dist/hierarchy-selector/node/branch.js.map +1 -0
- package/dist/index.d.ts +54 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +52 -0
- package/dist/index.js.map +1 -0
- package/dist/input/input.d.ts +58 -0
- package/dist/input/input.d.ts.map +1 -0
- package/dist/input/input.js +102 -0
- package/dist/input/input.js.map +1 -0
- package/dist/jest-setup.d.ts +18 -0
- package/dist/jest-setup.d.ts.map +1 -0
- package/dist/jest-setup.js +18 -0
- package/dist/jest-setup.js.map +1 -0
- package/dist/modal/modal.d.ts +37 -0
- package/dist/modal/modal.d.ts.map +1 -0
- package/dist/modal/modal.js +120 -0
- package/dist/modal/modal.js.map +1 -0
- package/dist/multiselect/multiselect.d.ts +31 -0
- package/dist/multiselect/multiselect.d.ts.map +1 -0
- package/dist/multiselect/multiselect.js +282 -0
- package/dist/multiselect/multiselect.js.map +1 -0
- package/dist/numeric-input/input-stepper.d.ts +33 -0
- package/dist/numeric-input/input-stepper.d.ts.map +1 -0
- package/dist/numeric-input/input-stepper.js +54 -0
- package/dist/numeric-input/input-stepper.js.map +1 -0
- package/dist/numeric-input/numeric-input.d.ts +48 -0
- package/dist/numeric-input/numeric-input.d.ts.map +1 -0
- package/dist/numeric-input/numeric-input.js +199 -0
- package/dist/numeric-input/numeric-input.js.map +1 -0
- package/dist/progress-bar/progress-bar.d.ts +23 -0
- package/dist/progress-bar/progress-bar.d.ts.map +1 -0
- package/dist/progress-bar/progress-bar.js +88 -0
- package/dist/progress-bar/progress-bar.js.map +1 -0
- package/dist/radio/radio-group.d.ts +20 -0
- package/dist/radio/radio-group.d.ts.map +1 -0
- package/dist/radio/radio-group.js +158 -0
- package/dist/radio/radio-group.js.map +1 -0
- package/dist/search-bar/search-bar.d.ts +34 -0
- package/dist/search-bar/search-bar.d.ts.map +1 -0
- package/dist/search-bar/search-bar.js +39 -0
- package/dist/search-bar/search-bar.js.map +1 -0
- package/dist/sectioned-list/sectioned-list.d.ts +29 -0
- package/dist/sectioned-list/sectioned-list.d.ts.map +1 -0
- package/dist/sectioned-list/sectioned-list.js +208 -0
- package/dist/sectioned-list/sectioned-list.js.map +1 -0
- package/dist/select/select.d.ts +54 -0
- package/dist/select/select.d.ts.map +1 -0
- package/dist/select/select.js +159 -0
- package/dist/select/select.js.map +1 -0
- package/dist/slider/slider-inputs.d.ts +36 -0
- package/dist/slider/slider-inputs.d.ts.map +1 -0
- package/dist/slider/slider-inputs.js +85 -0
- package/dist/slider/slider-inputs.js.map +1 -0
- package/dist/slider/slider.d.ts +53 -0
- package/dist/slider/slider.d.ts.map +1 -0
- package/dist/slider/slider.js +267 -0
- package/dist/slider/slider.js.map +1 -0
- package/dist/spinner/spinner.d.ts +20 -0
- package/dist/spinner/spinner.d.ts.map +1 -0
- package/dist/spinner/spinner.js +132 -0
- package/dist/spinner/spinner.js.map +1 -0
- package/dist/switch/sun-icon.d.ts +3 -0
- package/dist/switch/sun-icon.d.ts.map +1 -0
- package/dist/switch/sun-icon.js +24 -0
- package/dist/switch/sun-icon.js.map +1 -0
- package/dist/switch/switch.d.ts +17 -0
- package/dist/switch/switch.d.ts.map +1 -0
- package/dist/switch/switch.js +92 -0
- package/dist/switch/switch.js.map +1 -0
- package/dist/table/cells/action-cell.d.ts +34 -0
- package/dist/table/cells/action-cell.d.ts.map +1 -0
- package/dist/table/cells/action-cell.js +68 -0
- package/dist/table/cells/action-cell.js.map +1 -0
- package/dist/table/cells/datetime-cell.d.ts +12 -0
- package/dist/table/cells/datetime-cell.d.ts.map +1 -0
- package/dist/table/cells/datetime-cell.js +36 -0
- package/dist/table/cells/datetime-cell.js.map +1 -0
- package/dist/table/cells/edit-cell-utils.d.ts +32 -0
- package/dist/table/cells/edit-cell-utils.d.ts.map +1 -0
- package/dist/table/cells/edit-cell-utils.js +2 -0
- package/dist/table/cells/edit-cell-utils.js.map +1 -0
- package/dist/table/cells/edit-input-cell.d.ts +10 -0
- package/dist/table/cells/edit-input-cell.d.ts.map +1 -0
- package/dist/table/cells/edit-input-cell.js +61 -0
- package/dist/table/cells/edit-input-cell.js.map +1 -0
- package/dist/table/cells/edit-select-cell.d.ts +12 -0
- package/dist/table/cells/edit-select-cell.d.ts.map +1 -0
- package/dist/table/cells/edit-select-cell.js +55 -0
- package/dist/table/cells/edit-select-cell.js.map +1 -0
- package/dist/table/filters.d.ts +46 -0
- package/dist/table/filters.d.ts.map +1 -0
- package/dist/table/filters.js +223 -0
- package/dist/table/filters.js.map +1 -0
- package/dist/table/headers/select-header.d.ts +14 -0
- package/dist/table/headers/select-header.d.ts.map +1 -0
- package/dist/table/headers/select-header.js +41 -0
- package/dist/table/headers/select-header.js.map +1 -0
- package/dist/table/options-menu.d.ts +25 -0
- package/dist/table/options-menu.d.ts.map +1 -0
- package/dist/table/options-menu.js +120 -0
- package/dist/table/options-menu.js.map +1 -0
- package/dist/table/table.d.ts +95 -0
- package/dist/table/table.d.ts.map +1 -0
- package/dist/table/table.js +524 -0
- package/dist/table/table.js.map +1 -0
- package/dist/table/types.d.ts +30 -0
- package/dist/table/types.d.ts.map +1 -0
- package/dist/table/types.js +2 -0
- package/dist/table/types.js.map +1 -0
- package/dist/tabs/tabs.d.ts +22 -0
- package/dist/tabs/tabs.d.ts.map +1 -0
- package/dist/tabs/tabs.js +88 -0
- package/dist/tabs/tabs.js.map +1 -0
- package/dist/textarea/textarea.d.ts +45 -0
- package/dist/textarea/textarea.d.ts.map +1 -0
- package/dist/textarea/textarea.js +77 -0
- package/dist/textarea/textarea.js.map +1 -0
- package/dist/tooltip/tooltip.d.ts +46 -0
- package/dist/tooltip/tooltip.d.ts.map +1 -0
- package/dist/tooltip/tooltip.js +116 -0
- package/dist/tooltip/tooltip.js.map +1 -0
- package/dist/types.d.ts +66 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/chevron.d.ts +34 -0
- package/dist/utils/chevron.d.ts.map +1 -0
- package/dist/utils/chevron.js +40 -0
- package/dist/utils/chevron.js.map +1 -0
- package/dist/utils/index.d.ts +22 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +22 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/label.d.ts +3 -0
- package/dist/utils/label.d.ts.map +1 -0
- package/dist/utils/label.js +24 -0
- package/dist/utils/label.js.map +1 -0
- package/dist/utils/list-styles.d.ts +12 -0
- package/dist/utils/list-styles.d.ts.map +1 -0
- package/dist/utils/list-styles.js +58 -0
- package/dist/utils/list-styles.js.map +1 -0
- package/dist/utils/same-width-modifier.d.ts +23 -0
- package/dist/utils/same-width-modifier.d.ts.map +1 -0
- package/dist/utils/same-width-modifier.js +17 -0
- package/dist/utils/same-width-modifier.js.map +1 -0
- package/dist/utils/use-infinite-loader.d.ts +32 -0
- package/dist/utils/use-infinite-loader.d.ts.map +1 -0
- package/dist/utils/use-infinite-loader.js +114 -0
- package/dist/utils/use-infinite-loader.js.map +1 -0
- package/dist/utils/use-on-click-outside.d.ts +3 -0
- package/dist/utils/use-on-click-outside.d.ts.map +1 -0
- package/dist/utils/use-on-click-outside.js +36 -0
- package/dist/utils/use-on-click-outside.js.map +1 -0
- package/package.json +105 -0
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* Copyright 2023 Impulse Innovations Limited
|
|
4
|
+
*
|
|
5
|
+
*
|
|
6
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
+
* you may not use this file except in compliance with the License.
|
|
8
|
+
* You may obtain a copy of the License at
|
|
9
|
+
*
|
|
10
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
*
|
|
12
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
+
* See the License for the specific language governing permissions and
|
|
16
|
+
* limitations under the License.
|
|
17
|
+
*/
|
|
18
|
+
import * as React from 'react';
|
|
19
|
+
import { useCallback, useEffect, useMemo, useState } from 'react';
|
|
20
|
+
import styled from '@darajs/styled-components';
|
|
21
|
+
import { CONTROL_KEYS, Key } from '../constants';
|
|
22
|
+
import Input, { ErrorMessage } from '../input/input';
|
|
23
|
+
import InputStepper from './input-stepper';
|
|
24
|
+
const InputWrapper = styled.div `
|
|
25
|
+
display: flex;
|
|
26
|
+
flex-direction: row;
|
|
27
|
+
|
|
28
|
+
width: 22ch;
|
|
29
|
+
height: 2.5rem;
|
|
30
|
+
padding-right: 0.5rem;
|
|
31
|
+
|
|
32
|
+
background-color: ${(props) => props.theme.colors.grey1};
|
|
33
|
+
border: 1px solid
|
|
34
|
+
${(props) => {
|
|
35
|
+
if (props.errorMsg)
|
|
36
|
+
return props.theme.colors.error;
|
|
37
|
+
return props.theme.colors.grey1;
|
|
38
|
+
}};
|
|
39
|
+
border-radius: 0.25rem;
|
|
40
|
+
|
|
41
|
+
:focus-within:not(:disabled) {
|
|
42
|
+
border: 1px solid
|
|
43
|
+
${(props) => {
|
|
44
|
+
if (props.errorMsg)
|
|
45
|
+
return props.theme.colors.error;
|
|
46
|
+
return props.theme.colors.grey3;
|
|
47
|
+
}};
|
|
48
|
+
|
|
49
|
+
input {
|
|
50
|
+
border: none;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
input {
|
|
55
|
+
width: calc(100% - 1.25rem);
|
|
56
|
+
height: calc(2.5rem - 2px);
|
|
57
|
+
border: none;
|
|
58
|
+
border-radius: 0.25rem;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
div {
|
|
62
|
+
border: none;
|
|
63
|
+
border-radius: 0.25rem;
|
|
64
|
+
div {
|
|
65
|
+
border: none;
|
|
66
|
+
border-radius: 0.25rem;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
:hover {
|
|
71
|
+
background-color: ${(props) => (props.disabled ? props.theme.colors.grey1 : props.theme.colors.grey2)};
|
|
72
|
+
border: 1px solid
|
|
73
|
+
${(props) => {
|
|
74
|
+
if (props.disabled)
|
|
75
|
+
return props.theme.colors.grey1;
|
|
76
|
+
if (props.errorMsg)
|
|
77
|
+
return props.theme.colors.error;
|
|
78
|
+
return props.theme.colors.grey2;
|
|
79
|
+
}};
|
|
80
|
+
|
|
81
|
+
input {
|
|
82
|
+
background-color: ${(props) => (props.disabled ? props.theme.colors.grey1 : props.theme.colors.grey2)};
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
div {
|
|
86
|
+
background-color: ${(props) => (props.disabled ? props.theme.colors.grey1 : props.theme.colors.grey2)};
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
`;
|
|
90
|
+
/**
|
|
91
|
+
* A numeric characters only filter for the input component, can be applied to create a numeric input that prevents
|
|
92
|
+
* invalid entries rather than just erroring them
|
|
93
|
+
*
|
|
94
|
+
* @param integerOnly whether to limit the input to only accept integers
|
|
95
|
+
*/
|
|
96
|
+
const numericFilter = (integerOnly) => (e) => {
|
|
97
|
+
// Check for numbers
|
|
98
|
+
if (parseInt(e.key) || parseInt(e.key) === 0) {
|
|
99
|
+
return true;
|
|
100
|
+
}
|
|
101
|
+
// Check control keys
|
|
102
|
+
if (CONTROL_KEYS.includes(e.key)) {
|
|
103
|
+
return true;
|
|
104
|
+
}
|
|
105
|
+
const target = e.target;
|
|
106
|
+
// Check for decimal point and make sure there is only one
|
|
107
|
+
if (!integerOnly && e.key === Key.PERIOD && !target.value.includes(Key.PERIOD)) {
|
|
108
|
+
return true;
|
|
109
|
+
}
|
|
110
|
+
// Check for minus and make sure it's at the start
|
|
111
|
+
if (e.key === Key.MINUS && !e.shiftKey && target.selectionStart === 0 && !target.value.includes(Key.MINUS)) {
|
|
112
|
+
return true;
|
|
113
|
+
}
|
|
114
|
+
return false;
|
|
115
|
+
};
|
|
116
|
+
/**
|
|
117
|
+
* A helper function to get the initial value of the input, either from the value or the initialValue props
|
|
118
|
+
*
|
|
119
|
+
* @param value the value prop
|
|
120
|
+
* @param initialValue the initialValue prop
|
|
121
|
+
* @returns the initial value of the numeric input
|
|
122
|
+
*/
|
|
123
|
+
const getInitialValue = (value, initialValue) => {
|
|
124
|
+
if (Number.isFinite(value))
|
|
125
|
+
return String(value);
|
|
126
|
+
if (Number.isFinite(initialValue))
|
|
127
|
+
return String(initialValue);
|
|
128
|
+
return '';
|
|
129
|
+
};
|
|
130
|
+
/**
|
|
131
|
+
* NumericInput is a wrapper around the input component that restricts the value to be numeric, either float or integer.
|
|
132
|
+
*
|
|
133
|
+
* @param props the component props
|
|
134
|
+
*/
|
|
135
|
+
const NumericInput = React.forwardRef((props, ref) => {
|
|
136
|
+
const keydownFilter = useMemo(() => numericFilter(props.integerOnly), [props.integerOnly]);
|
|
137
|
+
const [input, setInput] = useState(getInitialValue(props.value, props.initialValue));
|
|
138
|
+
const step = (value) => {
|
|
139
|
+
var _a;
|
|
140
|
+
if (!input || input === '-')
|
|
141
|
+
return;
|
|
142
|
+
const isFloat = input.includes('.');
|
|
143
|
+
const parsedValue = isFloat ? parseFloat(input) : parseInt(input);
|
|
144
|
+
let nextValueNumber = parsedValue + value;
|
|
145
|
+
let nextValueStr = String(nextValueNumber);
|
|
146
|
+
if (isFloat) {
|
|
147
|
+
const decimals = input.split('.')[1];
|
|
148
|
+
if (decimals) {
|
|
149
|
+
nextValueStr = (parsedValue + value / Math.pow(10, decimals.length)).toFixed(decimals.length);
|
|
150
|
+
nextValueNumber = parseFloat(nextValueStr);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
// controlled
|
|
154
|
+
if (props.value !== undefined) {
|
|
155
|
+
(_a = props.onChange) === null || _a === void 0 ? void 0 : _a.call(props, nextValueNumber, {
|
|
156
|
+
target: {
|
|
157
|
+
value: nextValueStr,
|
|
158
|
+
},
|
|
159
|
+
});
|
|
160
|
+
// uncontrolled
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
setInput(nextValueStr);
|
|
164
|
+
}
|
|
165
|
+
};
|
|
166
|
+
const onKeyDown = (e) => {
|
|
167
|
+
var _a;
|
|
168
|
+
if (!props.stepper)
|
|
169
|
+
return;
|
|
170
|
+
const stepSkip = Math.abs((_a = props.stepSkip) !== null && _a !== void 0 ? _a : 1);
|
|
171
|
+
if (e.key === Key.UP)
|
|
172
|
+
step(stepSkip);
|
|
173
|
+
if (e.key === Key.DOWN)
|
|
174
|
+
step(stepSkip * -1);
|
|
175
|
+
};
|
|
176
|
+
const onChange = useCallback((value, e) => {
|
|
177
|
+
var _a, _b;
|
|
178
|
+
const parsed = props.integerOnly ? parseInt(value) : parseFloat(value);
|
|
179
|
+
// uncontrolled component
|
|
180
|
+
if (props.value === undefined) {
|
|
181
|
+
setInput(value);
|
|
182
|
+
(_a = props.onChange) === null || _a === void 0 ? void 0 : _a.call(props, parsed, e);
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
// if the value ends with a period, don't call onChange as it's not yet a valid number
|
|
186
|
+
if (value.endsWith('.')) {
|
|
187
|
+
setInput(value);
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
(_b = props.onChange) === null || _b === void 0 ? void 0 : _b.call(props, parsed, e);
|
|
191
|
+
}, [props.integerOnly, props.value]);
|
|
192
|
+
useEffect(() => {
|
|
193
|
+
setInput(getInitialValue(props.value, props.initialValue));
|
|
194
|
+
}, [props.value]);
|
|
195
|
+
return (_jsxs("div", { children: [_jsxs(InputWrapper, { disabled: props.disabled, errorMsg: props.errorMsg, stepper: props.stepper, children: [_jsx(Input, { autoFocus: props.autoFocus, className: props.className, disabled: props.disabled, keydownFilter: keydownFilter, maxValue: props.maxValue, minValue: props.minValue, onBlur: props.onBlur, onChange: onChange, onComplete: props.onComplete, onKeyDown: onKeyDown, placeholder: props.placeholder, ref: ref, style: props.style, value: input }), props.stepper && _jsx(InputStepper, { disabled: props.disabled, step: step, stepSkip: props.stepSkip })] }), props.errorMsg && _jsx(ErrorMessage, { children: props.errorMsg })] }));
|
|
196
|
+
});
|
|
197
|
+
Input.displayName = 'NumericInput';
|
|
198
|
+
export default NumericInput;
|
|
199
|
+
//# sourceMappingURL=numeric-input.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"numeric-input.js","sourceRoot":"","sources":["../../src/numeric-input/numeric-input.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAiB,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEjF,OAAO,MAAM,MAAM,2BAA2B,CAAC;AAE/C,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAErD,OAAO,YAAY,MAAM,iBAAiB,CAAC;AAE3C,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAmB;;;;;;;;wBAQ1B,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK;;UAEjD,CAAC,KAAK,EAAE,EAAE;IACR,IAAI,KAAK,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;IACpD,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;AACpC,CAAC;;;;;cAKK,CAAC,KAAK,EAAE,EAAE;IACR,IAAI,KAAK,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;IACpD,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;AACpC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;4BAwBe,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;;cAE/F,CAAC,KAAK,EAAE,EAAE;IACR,IAAI,KAAK,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;IACpD,IAAI,KAAK,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;IACpD,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;AACpC,CAAC;;;gCAGmB,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;;;;gCAIjF,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;;;CAGhH,CAAC;AAEF;;;;;GAKG;AACH,MAAM,aAAa,GACf,CAAC,WAAqB,EAAE,EAAE,CAC1B,CAAC,CAAwC,EAAW,EAAE;IAClD,oBAAoB;IACpB,IAAI,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;QAC1C,OAAO,IAAI,CAAC;KACf;IAED,qBAAqB;IACrB,IAAI,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;QAC9B,OAAO,IAAI,CAAC;KACf;IAED,MAAM,MAAM,GAAG,CAAC,CAAC,MAA0B,CAAC;IAC5C,0DAA0D;IAC1D,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;QAC5E,OAAO,IAAI,CAAC;KACf;IAED,kDAAkD;IAClD,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,IAAI,MAAM,CAAC,cAAc,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;QACxG,OAAO,IAAI,CAAC;KACf;IAED,OAAO,KAAK,CAAC;AACjB,CAAC,CAAC;AAEN;;;;;;GAMG;AACH,MAAM,eAAe,GAAG,CAAC,KAAa,EAAE,YAAoB,EAAU,EAAE;IACpE,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACjD,IAAI,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC;QAAE,OAAO,MAAM,CAAC,YAAY,CAAC,CAAC;IAC/D,OAAO,EAAE,CAAC;AACd,CAAC,CAAC;AAyBF;;;;GAIG;AACH,MAAM,YAAY,GAAG,KAAK,CAAC,UAAU,CACjC,CAAC,KAAwB,EAAE,GAAyC,EAAe,EAAE;IACjF,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;IAC3F,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;IAErF,MAAM,IAAI,GAAG,CAAC,KAAa,EAAQ,EAAE;;QACjC,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,GAAG;YAAE,OAAO;QAEpC,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACpC,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAElE,IAAI,eAAe,GAAG,WAAW,GAAG,KAAK,CAAC;QAC1C,IAAI,YAAY,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC;QAC3C,IAAI,OAAO,EAAE;YACT,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACrC,IAAI,QAAQ,EAAE;gBACV,YAAY,GAAG,CAAC,WAAW,GAAG,KAAK,GAAG,SAAA,EAAE,EAAI,QAAQ,CAAC,MAAM,CAAA,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;gBACtF,eAAe,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;aAC9C;SACJ;QAED,aAAa;QACb,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE;YAC3B,MAAA,KAAK,CAAC,QAAQ,sDAAG,eAAe,EAAE;gBAC9B,MAAM,EAAE;oBACJ,KAAK,EAAE,YAAY;iBACtB;aACiD,CAAC,CAAC;YACxD,eAAe;SAClB;aAAM;YACH,QAAQ,CAAC,YAAY,CAAC,CAAC;SAC1B;IACL,CAAC,CAAC;IAEF,MAAM,SAAS,GAAG,CAAC,CAAkC,EAAQ,EAAE;;QAC3D,IAAI,CAAC,KAAK,CAAC,OAAO;YAAE,OAAO;QAE3B,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,MAAA,KAAK,CAAC,QAAQ,mCAAI,CAAC,CAAC,CAAC;QAE/C,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE;YAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,IAAI;YAAE,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC;IAChD,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,WAAW,CACxB,CAAC,KAAa,EAAE,CAA0C,EAAE,EAAE;;QAC1D,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACvE,yBAAyB;QACzB,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE;YAC3B,QAAQ,CAAC,KAAK,CAAC,CAAC;YAChB,MAAA,KAAK,CAAC,QAAQ,sDAAG,MAAM,EAAE,CAAC,CAAC,CAAC;YAC5B,OAAO;SACV;QACD,sFAAsF;QACtF,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YACrB,QAAQ,CAAC,KAAK,CAAC,CAAC;YAChB,OAAO;SACV;QACD,MAAA,KAAK,CAAC,QAAQ,sDAAG,MAAM,EAAE,CAAC,CAAC,CAAC;IAChC,CAAC,EACD,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,CACnC,CAAC;IAEF,SAAS,CAAC,GAAG,EAAE;QACX,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;IAC/D,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IAElB,OAAO,CACH,0BACI,MAAC,YAAY,IAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,aACpF,KAAC,KAAK,IACF,SAAS,EAAE,KAAK,CAAC,SAAS,EAC1B,SAAS,EAAE,KAAK,CAAC,SAAS,EAC1B,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,aAAa,EAAE,aAAa,EAC5B,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,MAAM,EAAE,KAAK,CAAC,MAAM,EACpB,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,KAAK,CAAC,UAAU,EAC5B,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,KAAK,CAAC,WAAW,EAC9B,GAAG,EAAE,GAAG,EACR,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,KAAK,EAAE,KAAK,GACd,EACD,KAAK,CAAC,OAAO,IAAI,KAAC,YAAY,IAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,GAAI,IACvF,EACd,KAAK,CAAC,QAAQ,IAAI,KAAC,YAAY,cAAE,KAAK,CAAC,QAAQ,GAAgB,IAC9D,CACT,CAAC;AACN,CAAC,CACJ,CAAC;AACF,KAAK,CAAC,WAAW,GAAG,cAAc,CAAC;AAEnC,eAAe,YAAY,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
export interface ProgressBarProps {
|
|
3
|
+
/** Standard react className property */
|
|
4
|
+
className?: string;
|
|
5
|
+
/** Optional color prop for the progress bar, should be a hex code. Pass an array for multiple values */
|
|
6
|
+
color?: string | string[];
|
|
7
|
+
/** Optional label for the progress bar. If not provided, the progress will be displayed as a percentage. Pass an array for multiple values */
|
|
8
|
+
label?: React.ReactNode | React.ReactNode[];
|
|
9
|
+
/** The current progress as a percentage. Pass an array for multiple values */
|
|
10
|
+
progress: number | number[];
|
|
11
|
+
/** Set the progress bar to view as a smaller strip with no label */
|
|
12
|
+
small?: boolean;
|
|
13
|
+
/** Native react style property, can be used to fine tune the button appearance */
|
|
14
|
+
style?: React.CSSProperties;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* A simple progress bar component, that displays the current progress to 100% as a bar with a small label
|
|
18
|
+
*
|
|
19
|
+
* @param props see interface for details
|
|
20
|
+
*/
|
|
21
|
+
declare function ProgressBar(props: ProgressBarProps): JSX.Element;
|
|
22
|
+
export default ProgressBar;
|
|
23
|
+
//# sourceMappingURL=progress-bar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"progress-bar.d.ts","sourceRoot":"","sources":["../../src/progress-bar/progress-bar.tsx"],"names":[],"mappings":"AAiBA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AA4E/B,MAAM,WAAW,gBAAgB;IAC7B,wCAAwC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wGAAwG;IACxG,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC1B,8IAA8I;IAC9I,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;IAC5C,8EAA8E;IAC9E,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC5B,oEAAoE;IACpE,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,kFAAkF;IAClF,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAC/B;AAED;;;;GAIG;AACH,iBAAS,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,GAAG,CAAC,OAAO,CAgCzD;AAED,eAAe,WAAW,CAAC"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* Copyright 2023 Impulse Innovations Limited
|
|
4
|
+
*
|
|
5
|
+
*
|
|
6
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
+
* you may not use this file except in compliance with the License.
|
|
8
|
+
* You may obtain a copy of the License at
|
|
9
|
+
*
|
|
10
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
*
|
|
12
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
+
* See the License for the specific language governing permissions and
|
|
16
|
+
* limitations under the License.
|
|
17
|
+
*/
|
|
18
|
+
import { sortBy } from 'lodash';
|
|
19
|
+
import styled, { theme } from '@darajs/styled-components';
|
|
20
|
+
const Track = styled.div `
|
|
21
|
+
position: relative;
|
|
22
|
+
|
|
23
|
+
overflow: hidden;
|
|
24
|
+
display: flex;
|
|
25
|
+
|
|
26
|
+
width: 100%;
|
|
27
|
+
height: ${(props) => (props.small ? '0.5rem' : '1rem')};
|
|
28
|
+
|
|
29
|
+
background-color: ${(props) => props.theme.colors.grey2};
|
|
30
|
+
border-radius: ${(props) => (props.small ? '0.25rem' : '0.5rem')};
|
|
31
|
+
`;
|
|
32
|
+
const Bar = styled.div `
|
|
33
|
+
position: absolute;
|
|
34
|
+
|
|
35
|
+
overflow: ${(props) => (props.multi ? 'hidden' : 'visible')};
|
|
36
|
+
|
|
37
|
+
height: 100%;
|
|
38
|
+
|
|
39
|
+
background-color: ${(props) => (props.color ? props.color : props.theme.colors.primary)};
|
|
40
|
+
border-radius: ${(props) => (props.small ? '0.25rem' : '0.5rem')};
|
|
41
|
+
`;
|
|
42
|
+
const Text = styled.span `
|
|
43
|
+
position: absolute;
|
|
44
|
+
right: 0.5rem;
|
|
45
|
+
bottom: 0.05rem;
|
|
46
|
+
left: 0.5rem;
|
|
47
|
+
|
|
48
|
+
height: 100%;
|
|
49
|
+
|
|
50
|
+
font-size: 0.75rem;
|
|
51
|
+
color: ${(props) => props.theme.colors.blue1};
|
|
52
|
+
text-align: end;
|
|
53
|
+
`;
|
|
54
|
+
const defaultColors = [theme.colors.primary, theme.colors.success, theme.colors.warning, theme.colors.error];
|
|
55
|
+
/**
|
|
56
|
+
* Takes an input value and converts it into an array. If the input is undefined, it returns a default input array.
|
|
57
|
+
* If the input is already an array, it returns the input itself. Otherwise, it wraps the input inside an array.
|
|
58
|
+
*
|
|
59
|
+
* @param input - The input value that should be arrayified. It can be a value of type T, an array of T, or undefined.
|
|
60
|
+
* @param defaultInput - The default array to return in case the input is undefined.
|
|
61
|
+
*
|
|
62
|
+
* @returns The input arrayified as an array of type T.
|
|
63
|
+
*
|
|
64
|
+
* @typeparam T - The type of the elements in the array.
|
|
65
|
+
*/
|
|
66
|
+
const arrayify = (input, defaultInput) => {
|
|
67
|
+
if (typeof input === 'undefined')
|
|
68
|
+
return defaultInput;
|
|
69
|
+
if (Array.isArray(input))
|
|
70
|
+
return input;
|
|
71
|
+
return [input];
|
|
72
|
+
};
|
|
73
|
+
/**
|
|
74
|
+
* A simple progress bar component, that displays the current progress to 100% as a bar with a small label
|
|
75
|
+
*
|
|
76
|
+
* @param props see interface for details
|
|
77
|
+
*/
|
|
78
|
+
function ProgressBar(props) {
|
|
79
|
+
// We need to sort the values to properly render them, so we need to preserve the original index
|
|
80
|
+
const progresses = typeof props.progress === 'number'
|
|
81
|
+
? [{ index: 0, value: props.progress }]
|
|
82
|
+
: sortBy([...props.progress.map((x, i) => ({ index: i, value: x }))], 'value').reverse();
|
|
83
|
+
const colors = arrayify(props.color, defaultColors.slice(0, progresses.length));
|
|
84
|
+
const labels = arrayify(props.label, progresses.map((x) => `${x.value}%`));
|
|
85
|
+
return (_jsx(Track, { className: props.className, multi: typeof props.progress !== 'number', small: props.small, style: props.style, children: progresses.map((progress, index) => (_jsx(Bar, { color: colors[progress.index], multi: typeof props.progress !== 'number', small: props.small, style: { width: `${progress.value}%` }, children: !props.small && _jsx(Text, { progress: progress.value, children: labels[progress.index] }) }, index))) }));
|
|
86
|
+
}
|
|
87
|
+
export default ProgressBar;
|
|
88
|
+
//# sourceMappingURL=progress-bar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"progress-bar.js","sourceRoot":"","sources":["../../src/progress-bar/progress-bar.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { InteractiveComponentProps, Item } from '../types';
|
|
3
|
+
export interface RadioGroupProps extends InteractiveComponentProps<Item> {
|
|
4
|
+
/** An optional value which determines the direction of the radio group components by default is vertical */
|
|
5
|
+
direction?: 'horizontal' | 'vertical';
|
|
6
|
+
/** Whether to show radio in list style */
|
|
7
|
+
isListStyle?: boolean;
|
|
8
|
+
/** The items to pick from the list. Each should have a label and a value */
|
|
9
|
+
items: Array<Item>;
|
|
10
|
+
/** An optional onChange handler, will be called whenever the state of the checkbox changes */
|
|
11
|
+
onChange?: (value: Item, e?: React.FormEvent<HTMLInputElement>) => void | Promise<void>;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* A simple radio component
|
|
15
|
+
*
|
|
16
|
+
* @param {RadioGroupProps} props - the component props
|
|
17
|
+
*/
|
|
18
|
+
declare function RadioGroup(props: RadioGroupProps): JSX.Element;
|
|
19
|
+
export default RadioGroup;
|
|
20
|
+
//# sourceMappingURL=radio-group.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"radio-group.d.ts","sourceRoot":"","sources":["../../src/radio/radio-group.tsx"],"names":[],"mappings":";AAsBA,OAAO,EAAE,yBAAyB,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAyH3D,MAAM,WAAW,eAAgB,SAAQ,yBAAyB,CAAC,IAAI,CAAC;IACpE,4GAA4G;IAC5G,SAAS,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC;IACtC,0CAA0C;IAC1C,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,4EAA4E;IAC5E,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IACnB,8FAA8F;IAC9F,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,gBAAgB,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3F;AAED;;;;GAIG;AACH,iBAAS,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,GAAG,CAAC,OAAO,CAwDvD;AAED,eAAe,UAAU,CAAC"}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* Copyright 2023 Impulse Innovations Limited
|
|
4
|
+
*
|
|
5
|
+
*
|
|
6
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
+
* you may not use this file except in compliance with the License.
|
|
8
|
+
* You may obtain a copy of the License at
|
|
9
|
+
*
|
|
10
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
*
|
|
12
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
+
* See the License for the specific language governing permissions and
|
|
16
|
+
* limitations under the License.
|
|
17
|
+
*/
|
|
18
|
+
import isEqual from 'lodash/isEqual';
|
|
19
|
+
import { nanoid } from 'nanoid';
|
|
20
|
+
import { useEffect, useRef, useState } from 'react';
|
|
21
|
+
import styled from '@darajs/styled-components';
|
|
22
|
+
const RadioGroupWrapper = styled.div `
|
|
23
|
+
display: ${(props) => (props.isHorizontal ? 'flex' : 'block')};
|
|
24
|
+
gap: ${(props) => (props.isHorizontal ? '1.25rem' : '0rem')};
|
|
25
|
+
`;
|
|
26
|
+
const RadioWrapper = styled.label `
|
|
27
|
+
cursor: ${(props) => (props['aria-disabled'] ? 'not-allowed' : 'pointer')};
|
|
28
|
+
user-select: none;
|
|
29
|
+
|
|
30
|
+
display: flex;
|
|
31
|
+
gap: 0.5rem;
|
|
32
|
+
align-items: center;
|
|
33
|
+
justify-content: flex-start;
|
|
34
|
+
|
|
35
|
+
width: ${(props) => (props.isListStyle ? 'auto' : 'fit-content')};
|
|
36
|
+
height: 2.5rem;
|
|
37
|
+
padding: 0rem 0.5rem;
|
|
38
|
+
|
|
39
|
+
color: ${(props) => (props['aria-disabled'] ? props.theme.colors.grey3 : props.theme.colors.text)};
|
|
40
|
+
|
|
41
|
+
border: none;
|
|
42
|
+
border-radius: 0.25rem;
|
|
43
|
+
|
|
44
|
+
// sets checkmark indicator
|
|
45
|
+
span:after {
|
|
46
|
+
top: calc(0.25rem - 1px);
|
|
47
|
+
left: calc(0.25rem - 1px);
|
|
48
|
+
|
|
49
|
+
width: 0.5rem;
|
|
50
|
+
height: 0.5rem;
|
|
51
|
+
|
|
52
|
+
background-color: ${(props) => (props['aria-disabled'] ? props.theme.colors.grey3 : props.theme.colors.grey5)};
|
|
53
|
+
border-radius: 50%;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// Show the checkmark when checked
|
|
57
|
+
input:checked ~ span:after {
|
|
58
|
+
display: block;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// Controls background color change depending on style
|
|
62
|
+
${(props) => {
|
|
63
|
+
if (props.isListStyle) {
|
|
64
|
+
return `:hover {
|
|
65
|
+
background-color: ${props['aria-disabled'] ? 'none' : props.theme.colors.grey1}
|
|
66
|
+
}
|
|
67
|
+
:active {
|
|
68
|
+
background-color: ${props['aria-disabled'] ? 'none' : props.theme.colors.grey2}
|
|
69
|
+
}`;
|
|
70
|
+
}
|
|
71
|
+
return `
|
|
72
|
+
:hover {
|
|
73
|
+
span {
|
|
74
|
+
background-color: ${props['aria-disabled'] ? 'none' : props.theme.colors.grey1};
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
:active {
|
|
79
|
+
span {
|
|
80
|
+
background-color: ${props['aria-disabled'] ? 'none' : props.theme.colors.grey2};
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
`;
|
|
84
|
+
}}
|
|
85
|
+
|
|
86
|
+
// Sets the outer rim color of radio button
|
|
87
|
+
:hover {
|
|
88
|
+
span {
|
|
89
|
+
border: 1px solid
|
|
90
|
+
${(props) => (props['aria-disabled'] ? props.theme.colors.grey2 : props.theme.colors.grey4)};
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
:active {
|
|
95
|
+
span {
|
|
96
|
+
border: 1px solid
|
|
97
|
+
${(props) => (props['aria-disabled'] ? props.theme.colors.grey2 : props.theme.colors.grey4)};
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
`;
|
|
101
|
+
// hides default html radio button
|
|
102
|
+
const RadioButton = styled.input `
|
|
103
|
+
position: absolute;
|
|
104
|
+
opacity: 0;
|
|
105
|
+
`;
|
|
106
|
+
// customdot/circle for the radio button
|
|
107
|
+
const StyledCheckmark = styled.span `
|
|
108
|
+
position: relative;
|
|
109
|
+
top: 0;
|
|
110
|
+
left: 0;
|
|
111
|
+
|
|
112
|
+
width: 1rem;
|
|
113
|
+
height: 1rem;
|
|
114
|
+
|
|
115
|
+
background-color: ${(props) => (props.disabled ? props.theme.colors.grey1 : props.theme.colors.blue1)};
|
|
116
|
+
border: 1px solid ${(props) => (props.disabled ? props.theme.colors.grey2 : props.theme.colors.grey3)};
|
|
117
|
+
border-radius: 50%;
|
|
118
|
+
|
|
119
|
+
:after {
|
|
120
|
+
content: '';
|
|
121
|
+
position: relative;
|
|
122
|
+
display: none;
|
|
123
|
+
}
|
|
124
|
+
`;
|
|
125
|
+
/**
|
|
126
|
+
* A simple radio component
|
|
127
|
+
*
|
|
128
|
+
* @param {RadioGroupProps} props - the component props
|
|
129
|
+
*/
|
|
130
|
+
function RadioGroup(props) {
|
|
131
|
+
const [currentSelected, setCurrentSelected] = useState(props.items.findIndex((item) => props.value !== undefined ? isEqual(item.value, props.value) : isEqual(item.value, props.initialValue)));
|
|
132
|
+
// radio needs a name that is unique to that radio component, so that more than one radio components on a page don't get mixed inputs
|
|
133
|
+
const uuid = useRef(null);
|
|
134
|
+
if (uuid.current === null) {
|
|
135
|
+
uuid.current = nanoid();
|
|
136
|
+
}
|
|
137
|
+
const onChangeValue = (event) => {
|
|
138
|
+
var _a;
|
|
139
|
+
const target = event.target;
|
|
140
|
+
const chosenIndex = Number(target.value);
|
|
141
|
+
setCurrentSelected(chosenIndex);
|
|
142
|
+
if (props.value !== undefined) {
|
|
143
|
+
(_a = props.onChange) === null || _a === void 0 ? void 0 : _a.call(props, props.items[chosenIndex], event);
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
setCurrentSelected(chosenIndex);
|
|
147
|
+
}
|
|
148
|
+
};
|
|
149
|
+
useEffect(() => {
|
|
150
|
+
setCurrentSelected(props.items.findIndex((item) => props.value !== undefined ? isEqual(item.value, props.value) : isEqual(item.value, props.initialValue)));
|
|
151
|
+
}, [props.value]);
|
|
152
|
+
return (_jsx(RadioGroupWrapper, { className: props.className, isHorizontal: props.direction === 'horizontal', style: props.style, children: props.items.map((item, index) => {
|
|
153
|
+
var _a;
|
|
154
|
+
return (_jsxs(RadioWrapper, { "aria-disabled": props.disabled, isListStyle: props.isListStyle, children: [_jsx(RadioButton, { checked: isEqual((_a = props.value) === null || _a === void 0 ? void 0 : _a.value, item.value) || currentSelected === index, disabled: props.disabled, name: uuid.current, onChange: (e) => onChangeValue(e), type: "radio", value: index }), _jsx(StyledCheckmark, { disabled: props.disabled }), item.label ? item.label : item.value] }, `item-${index}`));
|
|
155
|
+
}) }));
|
|
156
|
+
}
|
|
157
|
+
export default RadioGroup;
|
|
158
|
+
//# sourceMappingURL=radio-group.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"radio-group.js","sourceRoot":"","sources":["../../src/radio/radio-group.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2023 Impulse Innovations Limited
|
|
3
|
+
*
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
import * as React from 'react';
|
|
18
|
+
import { InteractiveComponentProps } from '../types';
|
|
19
|
+
export interface SearchBarProps extends InteractiveComponentProps<string> {
|
|
20
|
+
/** An optional maximum length */
|
|
21
|
+
maxLength?: number;
|
|
22
|
+
/** An optional onChange handler for listening to changes in the input */
|
|
23
|
+
onChange?: (value: string, e?: React.SyntheticEvent<HTMLInputElement>) => void | Promise<void>;
|
|
24
|
+
/** An optional placeholder that will be used when the input is empty, defaults to '' */
|
|
25
|
+
placeholder?: string;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* A search bar component, accepts an onChange handler to listen for changes.
|
|
29
|
+
*
|
|
30
|
+
* @param props - the component props
|
|
31
|
+
*/
|
|
32
|
+
declare function SearchBar(props: SearchBarProps): JSX.Element;
|
|
33
|
+
export default SearchBar;
|
|
34
|
+
//# sourceMappingURL=search-bar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search-bar.d.ts","sourceRoot":"","sources":["../../src/search-bar/search-bar.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAM/B,OAAO,EAAE,yBAAyB,EAAE,MAAM,UAAU,CAAC;AA6BrD,MAAM,WAAW,cAAe,SAAQ,yBAAyB,CAAC,MAAM,CAAC;IACrE,iCAAiC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yEAAyE;IACzE,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,gBAAgB,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/F,wFAAwF;IACxF,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;GAIG;AACH,iBAAS,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,GAAG,CAAC,OAAO,CAerD;AAED,eAAe,SAAS,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import styled from '@darajs/styled-components';
|
|
3
|
+
import { MagnifyingGlass } from '@darajs/ui-icons';
|
|
4
|
+
import Input from '../input/input';
|
|
5
|
+
const Wrapper = styled.div `
|
|
6
|
+
display: flex;
|
|
7
|
+
margin: 0rem 0.5rem;
|
|
8
|
+
`;
|
|
9
|
+
const SearchBarComponent = styled(Input) `
|
|
10
|
+
input {
|
|
11
|
+
padding-right: 2.25rem;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
:hover:not(:disabled) {
|
|
15
|
+
input {
|
|
16
|
+
border: 1px solid ${(props) => props.theme.colors.grey3};
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
`;
|
|
20
|
+
const SearchBarIcon = styled(MagnifyingGlass) `
|
|
21
|
+
position: relative;
|
|
22
|
+
top: 0.625rem;
|
|
23
|
+
right: 1.75rem;
|
|
24
|
+
|
|
25
|
+
height: 1.25rem;
|
|
26
|
+
|
|
27
|
+
color: ${(props) => props.theme.colors.grey4};
|
|
28
|
+
`;
|
|
29
|
+
/**
|
|
30
|
+
* A search bar component, accepts an onChange handler to listen for changes.
|
|
31
|
+
*
|
|
32
|
+
* @param props - the component props
|
|
33
|
+
*/
|
|
34
|
+
function SearchBar(props) {
|
|
35
|
+
var _a;
|
|
36
|
+
return (_jsxs(Wrapper, { children: [_jsx(SearchBarComponent, { className: props.className, disabled: props.disabled, maxLength: props.maxLength, onChange: props.onChange, placeholder: (_a = props.placeholder) !== null && _a !== void 0 ? _a : 'Search', style: props.style, value: props.value }), _jsx(SearchBarIcon, {})] }));
|
|
37
|
+
}
|
|
38
|
+
export default SearchBar;
|
|
39
|
+
//# sourceMappingURL=search-bar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search-bar.js","sourceRoot":"","sources":["../../src/search-bar/search-bar.tsx"],"names":[],"mappings":";AAkBA,OAAO,MAAM,MAAM,2BAA2B,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,KAAK,MAAM,gBAAgB,CAAC;AAGnC,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAA;;;CAGzB,CAAC;AAEF,MAAM,kBAAkB,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;;;;;;;gCAOR,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK;;;CAGlE,CAAC;AAEF,MAAM,aAAa,GAAG,MAAM,CAAC,eAAe,CAAC,CAAA;;;;;;;aAOhC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK;CAC/C,CAAC;AAWF;;;;GAIG;AACH,SAAS,SAAS,CAAC,KAAqB;;IACpC,OAAO,CACH,MAAC,OAAO,eACJ,KAAC,kBAAkB,IACf,SAAS,EAAE,KAAK,CAAC,SAAS,EAC1B,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,SAAS,EAAE,KAAK,CAAC,SAAS,EAC1B,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,WAAW,EAAE,MAAA,KAAK,CAAC,WAAW,mCAAI,QAAQ,EAC1C,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,KAAK,EAAE,KAAK,CAAC,KAAK,GACpB,EACF,KAAC,aAAa,KAAG,IACX,CACb,CAAC;AACN,CAAC;AAED,eAAe,SAAS,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { InteractiveComponentProps, Item } from '../types';
|
|
3
|
+
export interface ListItem extends Item {
|
|
4
|
+
heading?: boolean;
|
|
5
|
+
section?: string;
|
|
6
|
+
}
|
|
7
|
+
export interface ListSection {
|
|
8
|
+
items: Array<Item>;
|
|
9
|
+
label: string;
|
|
10
|
+
}
|
|
11
|
+
export interface SectionedListProps extends InteractiveComponentProps<Item> {
|
|
12
|
+
/** An array of ListItem and/or ListSection objects to render */
|
|
13
|
+
items: Array<ListItem | ListSection>;
|
|
14
|
+
/** An optional onSelect handler for listening to changes in the selected item */
|
|
15
|
+
onSelect?: (item: ListItem) => void | Promise<void>;
|
|
16
|
+
/** Put the component in controlled mode and pass in the selectedItem */
|
|
17
|
+
selectedItem?: ListItem | Item;
|
|
18
|
+
/** Pass through of style property to the root element */
|
|
19
|
+
style?: React.CSSProperties;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* A component for rendering lists, sectioned and non-sectioned. Takes an array of unpacked ListItem objects and
|
|
23
|
+
* renders a searchable list.
|
|
24
|
+
*
|
|
25
|
+
* @param {SectionedListProps} props - the component props
|
|
26
|
+
*/
|
|
27
|
+
declare function SectionedList(props: SectionedListProps): JSX.Element;
|
|
28
|
+
export default SectionedList;
|
|
29
|
+
//# sourceMappingURL=sectioned-list.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sectioned-list.d.ts","sourceRoot":"","sources":["../../src/sectioned-list/sectioned-list.tsx"],"names":[],"mappings":";AAyBA,OAAO,EAAE,yBAAyB,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAwE3D,MAAM,WAAW,QAAS,SAAQ,IAAI;IAClC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IACxB,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,kBAAmB,SAAQ,yBAAyB,CAAC,IAAI,CAAC;IACvE,gEAAgE;IAChE,KAAK,EAAE,KAAK,CAAC,QAAQ,GAAG,WAAW,CAAC,CAAC;IACrC,iFAAiF;IACjF,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,wEAAwE;IACxE,YAAY,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC;IAC/B,yDAAyD;IACzD,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAC/B;AAED;;;;;GAKG;AACH,iBAAS,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,GAAG,CAAC,OAAO,CAqO7D;AAED,eAAe,aAAa,CAAC"}
|