@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,116 @@
|
|
|
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 { useEffect, useMemo, useState } from 'react';
|
|
19
|
+
import styled from '@darajs/styled-components';
|
|
20
|
+
import Checkbox from './checkbox';
|
|
21
|
+
const CheckboxWrapper = styled.div `
|
|
22
|
+
user-select: none;
|
|
23
|
+
display: flex;
|
|
24
|
+
width: 100%;
|
|
25
|
+
border: none;
|
|
26
|
+
`;
|
|
27
|
+
const CheckboxGroupWrapper = styled.div `
|
|
28
|
+
color: ${(props) => props.theme.colors.text};
|
|
29
|
+
`;
|
|
30
|
+
const CheckboxInfo = styled.p `
|
|
31
|
+
font-size: 0.75rem;
|
|
32
|
+
color: ${(props) => props.theme.colors.grey4};
|
|
33
|
+
`;
|
|
34
|
+
function getInitialValue(initialValue) {
|
|
35
|
+
if (Array.isArray(initialValue)) {
|
|
36
|
+
return initialValue;
|
|
37
|
+
}
|
|
38
|
+
if (initialValue) {
|
|
39
|
+
return [initialValue];
|
|
40
|
+
}
|
|
41
|
+
return [];
|
|
42
|
+
}
|
|
43
|
+
function getInitialCheckedState(items, initialValues) {
|
|
44
|
+
if (initialValues) {
|
|
45
|
+
return items.map((item) => ({ state: initialValues.includes(item.value), value: item.value }));
|
|
46
|
+
}
|
|
47
|
+
return items.map((item) => ({ state: initialValues.includes(item.value), value: false }));
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* A checkbox group component
|
|
51
|
+
*
|
|
52
|
+
* @param {CheckboxGroupProps} props - the component props
|
|
53
|
+
*/
|
|
54
|
+
function CheckboxGroup(props) {
|
|
55
|
+
const [values, setValues] = useState(() => getInitialValue(props.values || props.initialValue));
|
|
56
|
+
const [checkedState, setCheckedState] = useState(() => getInitialCheckedState(props.items, values));
|
|
57
|
+
const isSelectPermitted = useMemo(() => {
|
|
58
|
+
if (!props.selectMax || values.length < props.selectMax) {
|
|
59
|
+
return true;
|
|
60
|
+
}
|
|
61
|
+
return false;
|
|
62
|
+
}, [values, props.selectMax]);
|
|
63
|
+
const infoMessage = useMemo(() => {
|
|
64
|
+
if (props.selectMax && props.selectMin) {
|
|
65
|
+
return `You can select from ${props.selectMin} to ${props.selectMax} options`;
|
|
66
|
+
}
|
|
67
|
+
if (props.selectMax) {
|
|
68
|
+
return `You can select up to ${props.selectMax} options`;
|
|
69
|
+
}
|
|
70
|
+
if (props.selectMin) {
|
|
71
|
+
return `You should select at least ${props.selectMin} options`;
|
|
72
|
+
}
|
|
73
|
+
}, [props.selectMax, props.selectMin]);
|
|
74
|
+
const onChangeValue = (event) => {
|
|
75
|
+
var _a;
|
|
76
|
+
const target = event.target;
|
|
77
|
+
const chosenIndex = Number(target.value);
|
|
78
|
+
const chosenValue = props.items[chosenIndex].value;
|
|
79
|
+
let newValues = [...values];
|
|
80
|
+
// find what the new values would be
|
|
81
|
+
if (values.includes(chosenValue)) {
|
|
82
|
+
newValues = newValues.filter((value) => value !== chosenValue);
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
newValues.push(chosenValue);
|
|
86
|
+
}
|
|
87
|
+
// if new values would result in above the number permitted, only allow to uncheck selected checkboxes
|
|
88
|
+
// or if values below above permited/unconstrained then allow it to switch states
|
|
89
|
+
if ((newValues.length > props.selectMax && checkedState[chosenIndex]) ||
|
|
90
|
+
newValues.length <= props.selectMax ||
|
|
91
|
+
!props.selectMax) {
|
|
92
|
+
const indexToUpdate = checkedState.findIndex((item) => item.value === chosenValue);
|
|
93
|
+
checkedState[indexToUpdate].state = !checkedState[indexToUpdate].state;
|
|
94
|
+
setCheckedState(checkedState);
|
|
95
|
+
setValues(newValues);
|
|
96
|
+
if (!props.selectMin || newValues.length >= props.selectMin) {
|
|
97
|
+
(_a = props.onChange) === null || _a === void 0 ? void 0 : _a.call(props, props.items.filter((item) => newValues.includes(item.value)), event);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
useEffect(() => {
|
|
102
|
+
if (props.values) {
|
|
103
|
+
const valuesArray = props.values.map((value) => value.value);
|
|
104
|
+
setCheckedState(props.items.map((item) => ({ state: valuesArray.includes(item.value), value: item.value })));
|
|
105
|
+
setValues(valuesArray);
|
|
106
|
+
}
|
|
107
|
+
}, [props.values, props.items]);
|
|
108
|
+
return (_jsxs(CheckboxGroupWrapper, { className: props.className, style: props.style, children: [(props.selectMax || props.selectMin) && _jsx(CheckboxInfo, { children: infoMessage }), props.items.map((item, index) => {
|
|
109
|
+
var _a, _b;
|
|
110
|
+
return (_jsx(CheckboxWrapper, { "aria-disabled": props.disabled, children: _jsx(Checkbox, { disabled: isSelectPermitted
|
|
111
|
+
? props.disabled
|
|
112
|
+
: ((_a = checkedState.find((option) => option.value === item.value)) === null || _a === void 0 ? void 0 : _a.state) === false, id: index, isListStyle: props.isListStyle, label: item.label ? item.label : item.value, onChange: (checked, e) => onChangeValue(e), selected: (_b = checkedState.find((option) => option.value === item.value)) === null || _b === void 0 ? void 0 : _b.state }) }, `item-${index}`));
|
|
113
|
+
})] }));
|
|
114
|
+
}
|
|
115
|
+
export default CheckboxGroup;
|
|
116
|
+
//# sourceMappingURL=checkbox-group.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkbox-group.js","sourceRoot":"","sources":["../../src/checkbox/checkbox-group.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { InteractiveComponentProps } from '../types';
|
|
3
|
+
export interface CheckboxProps extends InteractiveComponentProps<boolean> {
|
|
4
|
+
/** Standard react className property */
|
|
5
|
+
className?: string;
|
|
6
|
+
/** Whether the checkbox is disabled. */
|
|
7
|
+
disabled?: boolean;
|
|
8
|
+
/** id of the current checkbox */
|
|
9
|
+
id?: number;
|
|
10
|
+
/** Whether to show list style of checkbox */
|
|
11
|
+
isListStyle?: boolean;
|
|
12
|
+
/** Sets the label to appear next to the checkbox */
|
|
13
|
+
label?: string;
|
|
14
|
+
/** An optional onChange handler, will be called whenever the state of the checkbox changes */
|
|
15
|
+
onChange?: (checked: boolean, e: React.FormEvent<HTMLInputElement>) => void | Promise<void>;
|
|
16
|
+
/** An optional onCLick handler */
|
|
17
|
+
onClick?: (e: React.FormEvent<HTMLInputElement>) => void | Promise<void>;
|
|
18
|
+
/** Setting this puts the checkbox in controlled mode */
|
|
19
|
+
selected?: boolean;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* A simple checkbox component
|
|
23
|
+
*
|
|
24
|
+
* @param {CheckboxProps} props - the component props
|
|
25
|
+
*/
|
|
26
|
+
declare function Checkbox(props: CheckboxProps): JSX.Element;
|
|
27
|
+
export default Checkbox;
|
|
28
|
+
//# sourceMappingURL=checkbox.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkbox.d.ts","sourceRoot":"","sources":["../../src/checkbox/checkbox.tsx"],"names":[],"mappings":";AAoBA,OAAO,EAAE,yBAAyB,EAAE,MAAM,UAAU,CAAC;AA6HrD,MAAM,WAAW,aAAc,SAAQ,yBAAyB,CAAC,OAAO,CAAC;IACrE,wCAAwC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wCAAwC;IACxC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,iCAAiC;IACjC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,6CAA6C;IAC7C,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,oDAAoD;IACpD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8FAA8F;IAC9F,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,gBAAgB,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5F,kCAAkC;IAClC,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,gBAAgB,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzE,wDAAwD;IACxD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;;;GAIG;AACH,iBAAS,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,GAAG,CAAC,OAAO,CAuCnD;AAED,eAAe,QAAQ,CAAC"}
|
|
@@ -0,0 +1,162 @@
|
|
|
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 { useEffect, useState } from 'react';
|
|
19
|
+
import styled from '@darajs/styled-components';
|
|
20
|
+
const CheckboxWrapper = styled.label `
|
|
21
|
+
cursor: ${(props) => (props.disabled ? 'not-allowed' : 'pointer')};
|
|
22
|
+
user-select: none;
|
|
23
|
+
|
|
24
|
+
position: relative;
|
|
25
|
+
|
|
26
|
+
display: flex;
|
|
27
|
+
align-items: center;
|
|
28
|
+
|
|
29
|
+
width: ${(props) => (props.isListStyle ? '100%' : 'fit-content')};
|
|
30
|
+
padding: 0.5625rem 0rem 0.5625rem 2rem;
|
|
31
|
+
|
|
32
|
+
font-size: 1rem;
|
|
33
|
+
|
|
34
|
+
border-radius: 0.25rem;
|
|
35
|
+
|
|
36
|
+
${(props) => {
|
|
37
|
+
if (props.isListStyle && !props.disabled) {
|
|
38
|
+
return `
|
|
39
|
+
:hover {
|
|
40
|
+
background-color: ${props.theme.colors.grey1};
|
|
41
|
+
|
|
42
|
+
span {
|
|
43
|
+
border: 1px solid ${props.theme.colors.grey4};
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
:active {
|
|
48
|
+
background-color: ${props.theme.colors.grey2};
|
|
49
|
+
}
|
|
50
|
+
`;
|
|
51
|
+
}
|
|
52
|
+
}}
|
|
53
|
+
|
|
54
|
+
// sets checkmark indicator
|
|
55
|
+
span:after {
|
|
56
|
+
top: 0.05rem;
|
|
57
|
+
left: 0.3rem;
|
|
58
|
+
transform: rotate(45deg);
|
|
59
|
+
|
|
60
|
+
width: 0.3125rem;
|
|
61
|
+
height: 0.625rem;
|
|
62
|
+
|
|
63
|
+
border: solid ${(props) => props.theme.colors.grey5};
|
|
64
|
+
border-width: 0 2px 2px 0;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
// Show the checkmark when checked
|
|
68
|
+
input:checked ~ span:after {
|
|
69
|
+
display: block;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
:hover {
|
|
73
|
+
span,
|
|
74
|
+
input:checked ~ span {
|
|
75
|
+
background-color: ${(props) => {
|
|
76
|
+
if (props.disabled) {
|
|
77
|
+
return props.theme.colors.grey3;
|
|
78
|
+
}
|
|
79
|
+
if (props.isListStyle) {
|
|
80
|
+
return props.theme.colors.blue1;
|
|
81
|
+
}
|
|
82
|
+
return props.theme.colors.grey1;
|
|
83
|
+
}};
|
|
84
|
+
border: 1px solid ${(props) => props.theme.colors.grey4};
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
:active {
|
|
89
|
+
span,
|
|
90
|
+
input:checked ~ span {
|
|
91
|
+
background-color: ${(props) => {
|
|
92
|
+
if (props.disabled) {
|
|
93
|
+
return props.theme.colors.grey3;
|
|
94
|
+
}
|
|
95
|
+
if (props.isListStyle) {
|
|
96
|
+
return props.theme.colors.blue1;
|
|
97
|
+
}
|
|
98
|
+
return props.theme.colors.grey2;
|
|
99
|
+
}};
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
`;
|
|
103
|
+
const StyledCheckbox = styled.input `
|
|
104
|
+
cursor: pointer;
|
|
105
|
+
/* Hide the browser's default checkbox */
|
|
106
|
+
position: absolute;
|
|
107
|
+
|
|
108
|
+
width: 0;
|
|
109
|
+
height: 0;
|
|
110
|
+
|
|
111
|
+
opacity: 0;
|
|
112
|
+
|
|
113
|
+
:checked ~ span {
|
|
114
|
+
background-color: ${(props) => (props.disabled ? props.theme.colors.grey3 : props.theme.colors.blue1)};
|
|
115
|
+
}
|
|
116
|
+
`;
|
|
117
|
+
const StyledCheckmark = styled.span `
|
|
118
|
+
position: absolute;
|
|
119
|
+
left: 0.5rem;
|
|
120
|
+
|
|
121
|
+
width: 1rem;
|
|
122
|
+
height: 1rem;
|
|
123
|
+
|
|
124
|
+
background-color: ${(props) => (props.disabled ? props.theme.colors.grey3 : props.theme.colors.blue1)};
|
|
125
|
+
border: 1px solid ${(props) => (props.disabled ? props.theme.colors.grey3 : props.theme.colors.grey4)};
|
|
126
|
+
border-radius: 0.25rem;
|
|
127
|
+
|
|
128
|
+
// hidden checkmark indicator
|
|
129
|
+
:after {
|
|
130
|
+
content: '';
|
|
131
|
+
position: absolute;
|
|
132
|
+
display: none;
|
|
133
|
+
}
|
|
134
|
+
`;
|
|
135
|
+
/**
|
|
136
|
+
* A simple checkbox component
|
|
137
|
+
*
|
|
138
|
+
* @param {CheckboxProps} props - the component props
|
|
139
|
+
*/
|
|
140
|
+
function Checkbox(props) {
|
|
141
|
+
const [checked, setChecked] = useState(props.selected || props.initialValue);
|
|
142
|
+
useEffect(() => {
|
|
143
|
+
if (props.selected !== undefined) {
|
|
144
|
+
setChecked(props.selected);
|
|
145
|
+
}
|
|
146
|
+
}, [props.selected]);
|
|
147
|
+
const onClick = (e) => {
|
|
148
|
+
// Disabled removes all behaviour
|
|
149
|
+
if (props.disabled) {
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
if (props.selected === undefined) {
|
|
153
|
+
setChecked(!checked);
|
|
154
|
+
}
|
|
155
|
+
if (props.onChange) {
|
|
156
|
+
props.onChange(!checked, e);
|
|
157
|
+
}
|
|
158
|
+
};
|
|
159
|
+
return (_jsxs(CheckboxWrapper, { className: props.className, disabled: props.disabled, isListStyle: props.isListStyle, children: [props.label, _jsx(StyledCheckbox, { "aria-disabled": props.disabled, checked: props.selected, disabled: props.disabled, isListStyle: props.isListStyle, onChange: (e) => onClick(e), onClick: props.onClick, type: "checkbox", value: props.id }), _jsx(StyledCheckmark, { disabled: props.disabled, isListStyle: props.isListStyle })] }));
|
|
160
|
+
}
|
|
161
|
+
export default Checkbox;
|
|
162
|
+
//# sourceMappingURL=checkbox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkbox.js","sourceRoot":"","sources":["../../src/checkbox/checkbox.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { InteractiveComponentProps } from '../types';
|
|
3
|
+
export declare enum CheckboxState {
|
|
4
|
+
CHECKED = "checked",
|
|
5
|
+
INDETERMINATE = "indeterminate",
|
|
6
|
+
UNCHECKED = "unchecked"
|
|
7
|
+
}
|
|
8
|
+
export interface CheckboxProps extends InteractiveComponentProps<boolean> {
|
|
9
|
+
/** Set the check box to be checked */
|
|
10
|
+
allSelected?: boolean;
|
|
11
|
+
/** Set the check box to be unchecked */
|
|
12
|
+
noneSelected?: boolean;
|
|
13
|
+
/** An optional onChange handler, will be called whenever the state of the checkbox changes */
|
|
14
|
+
onChange?: (state: CheckboxState, e?: React.SyntheticEvent<HTMLInputElement, Event>) => void | Promise<void>;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* A tri-state (or indeterminate) checkbox component
|
|
18
|
+
*
|
|
19
|
+
* @param {CheckboxProps} props - the component props
|
|
20
|
+
*/
|
|
21
|
+
declare function TriStateCheckbox(props: CheckboxProps): JSX.Element;
|
|
22
|
+
export default TriStateCheckbox;
|
|
23
|
+
//# sourceMappingURL=tri-state-checkbox.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tri-state-checkbox.d.ts","sourceRoot":"","sources":["../../src/checkbox/tri-state-checkbox.tsx"],"names":[],"mappings":";AAoBA,OAAO,EAAE,yBAAyB,EAAE,MAAM,UAAU,CAAC;AAGrD,oBAAY,aAAa;IACrB,OAAO,YAAY;IACnB,aAAa,kBAAkB;IAC/B,SAAS,cAAc;CAC1B;AAiCD,MAAM,WAAW,aAAc,SAAQ,yBAAyB,CAAC,OAAO,CAAC;IACrE,sCAAsC;IACtC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,wCAAwC;IACxC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,8FAA8F;IAC9F,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,gBAAgB,EAAE,KAAK,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAChH;AAYD;;;;GAIG;AACH,iBAAS,gBAAgB,CAAC,KAAK,EAAE,aAAa,GAAG,GAAG,CAAC,OAAO,CAgC3D;AAED,eAAe,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,87 @@
|
|
|
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 { useEffect, useState } from 'react';
|
|
19
|
+
import styled from '@darajs/styled-components';
|
|
20
|
+
import Checkbox from './checkbox';
|
|
21
|
+
export var CheckboxState;
|
|
22
|
+
(function (CheckboxState) {
|
|
23
|
+
CheckboxState["CHECKED"] = "checked";
|
|
24
|
+
CheckboxState["INDETERMINATE"] = "indeterminate";
|
|
25
|
+
CheckboxState["UNCHECKED"] = "unchecked";
|
|
26
|
+
})(CheckboxState || (CheckboxState = {}));
|
|
27
|
+
const StyledTriStateCheckbox = styled.div `
|
|
28
|
+
${(props) => {
|
|
29
|
+
if (props.state === CheckboxState.INDETERMINATE) {
|
|
30
|
+
return `
|
|
31
|
+
span:after {
|
|
32
|
+
display: block ;
|
|
33
|
+
left: 0.07rem;
|
|
34
|
+
top: 0.4rem;
|
|
35
|
+
width: 0.75rem;
|
|
36
|
+
border-radius: 0.25rem;
|
|
37
|
+
height: 0px;
|
|
38
|
+
border: 1px solid ${props.theme.colors.grey6};
|
|
39
|
+
transform: rotate(0deg)
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
`;
|
|
43
|
+
}
|
|
44
|
+
}}
|
|
45
|
+
`;
|
|
46
|
+
function computeState(allSelected, noneSelected) {
|
|
47
|
+
if (noneSelected) {
|
|
48
|
+
return CheckboxState.UNCHECKED;
|
|
49
|
+
}
|
|
50
|
+
return allSelected ? CheckboxState.CHECKED : CheckboxState.INDETERMINATE;
|
|
51
|
+
}
|
|
52
|
+
function getControlledState(allSelected, noneSelected) {
|
|
53
|
+
if (allSelected) {
|
|
54
|
+
return allSelected;
|
|
55
|
+
}
|
|
56
|
+
if (noneSelected) {
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
return undefined;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* A tri-state (or indeterminate) checkbox component
|
|
63
|
+
*
|
|
64
|
+
* @param {CheckboxProps} props - the component props
|
|
65
|
+
*/
|
|
66
|
+
function TriStateCheckbox(props) {
|
|
67
|
+
const [state, setState] = useState(computeState(props.allSelected, props.noneSelected));
|
|
68
|
+
useEffect(() => {
|
|
69
|
+
setState(computeState(props.allSelected, props.noneSelected));
|
|
70
|
+
}, [props.allSelected, props.noneSelected]);
|
|
71
|
+
const onClick = (checked, e) => {
|
|
72
|
+
setState(checked ? CheckboxState.CHECKED : CheckboxState.UNCHECKED);
|
|
73
|
+
if (props.onChange) {
|
|
74
|
+
if (state === CheckboxState.UNCHECKED) {
|
|
75
|
+
props.onChange(CheckboxState.CHECKED, e);
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
props.onChange(CheckboxState.UNCHECKED, e);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
return (_jsx(StyledTriStateCheckbox, { state: state, style: props.style, children: _jsx(Checkbox, { className: props.className, disabled: props.disabled, initialValue: state === CheckboxState.CHECKED, onChange: (checked, event) => {
|
|
83
|
+
onClick(checked, event);
|
|
84
|
+
}, selected: getControlledState(props.allSelected, props.noneSelected) }) }));
|
|
85
|
+
}
|
|
86
|
+
export default TriStateCheckbox;
|
|
87
|
+
//# sourceMappingURL=tri-state-checkbox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tri-state-checkbox.js","sourceRoot":"","sources":["../../src/checkbox/tri-state-checkbox.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAE5C,OAAO,MAAM,MAAM,2BAA2B,CAAC;AAG/C,OAAO,QAAQ,MAAM,YAAY,CAAC;AAElC,MAAM,CAAN,IAAY,aAIX;AAJD,WAAY,aAAa;IACrB,oCAAmB,CAAA;IACnB,gDAA+B,CAAA;IAC/B,wCAAuB,CAAA;AAC3B,CAAC,EAJW,aAAa,KAAb,aAAa,QAIxB;AAMD,MAAM,sBAAsB,GAAG,MAAM,CAAC,GAAG,CAAc;MACjD,CAAC,KAAK,EAAE,EAAE;IACR,IAAI,KAAK,CAAC,KAAK,KAAK,aAAa,CAAC,aAAa,EAAE;QAC7C,OAAO;;;;;;;;4CAQyB,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK;;;;aAIvD,CAAC;KACL;AACL,CAAC;CACJ,CAAC;AAEF,SAAS,YAAY,CAAC,WAAoB,EAAE,YAAqB;IAC7D,IAAI,YAAY,EAAE;QACd,OAAO,aAAa,CAAC,SAAS,CAAC;KAClC;IACD,OAAO,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,aAAa,CAAC;AAC7E,CAAC;AAWD,SAAS,kBAAkB,CAAC,WAAoB,EAAE,YAAqB;IACnE,IAAI,WAAW,EAAE;QACb,OAAO,WAAW,CAAC;KACtB;IACD,IAAI,YAAY,EAAE;QACd,OAAO,KAAK,CAAC;KAChB;IACD,OAAO,SAAS,CAAC;AACrB,CAAC;AAED;;;;GAIG;AACH,SAAS,gBAAgB,CAAC,KAAoB;IAC1C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;IAExF,SAAS,CAAC,GAAG,EAAE;QACX,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;IAClE,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;IAE5C,MAAM,OAAO,GAAG,CAAC,OAAgB,EAAE,CAAoC,EAAQ,EAAE;QAC7E,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QAEpE,IAAI,KAAK,CAAC,QAAQ,EAAE;YAChB,IAAI,KAAK,KAAK,aAAa,CAAC,SAAS,EAAE;gBACnC,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;aAC5C;iBAAM;gBACH,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;aAC9C;SACJ;IACL,CAAC,CAAC;IAEF,OAAO,CACH,KAAC,sBAAsB,IAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,YACpD,KAAC,QAAQ,IACL,SAAS,EAAE,KAAK,CAAC,SAAS,EAC1B,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,YAAY,EAAE,KAAK,KAAK,aAAa,CAAC,OAAO,EAC7C,QAAQ,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;gBACzB,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAC5B,CAAC,EACD,QAAQ,EAAE,kBAAkB,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,YAAY,CAAC,GACrE,GACmB,CAC5B,CAAC;AACN,CAAC;AAED,eAAe,gBAAgB,CAAC"}
|