@darajs/ui-components 0.4.8
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 +24 -0
- package/dist/accordion/accordion-item.d.ts.map +1 -0
- package/dist/accordion/accordion-item.js +92 -0
- package/dist/accordion/accordion-item.js.map +1 -0
- package/dist/accordion/accordion.d.ts +32 -0
- package/dist/accordion/accordion.d.ts.map +1 -0
- package/dist/accordion/accordion.js +87 -0
- package/dist/accordion/accordion.js.map +1 -0
- package/dist/badge/badge.d.ts +20 -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 +124 -0
- package/dist/button-bar/button-bar.js.map +1 -0
- package/dist/carousel/carousel.d.ts +23 -0
- package/dist/carousel/carousel.d.ts.map +1 -0
- package/dist/carousel/carousel.js +178 -0
- package/dist/carousel/carousel.js.map +1 -0
- package/dist/chat/chat.d.ts +28 -0
- package/dist/chat/chat.d.ts.map +1 -0
- package/dist/chat/chat.js +182 -0
- package/dist/chat/chat.js.map +1 -0
- package/dist/chat/message.d.ts +28 -0
- package/dist/chat/message.d.ts.map +1 -0
- package/dist/chat/message.js +220 -0
- package/dist/chat/message.js.map +1 -0
- package/dist/checkbox/checkbox-group.d.ts +35 -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 +27 -0
- package/dist/checkbox/checkbox.d.ts.map +1 -0
- package/dist/checkbox/checkbox.js +164 -0
- package/dist/checkbox/checkbox.js.map +1 -0
- package/dist/checkbox/tri-state-checkbox.d.ts +22 -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/code-viewer/code-viewer.d.ts +31 -0
- package/dist/code-viewer/code-viewer.d.ts.map +1 -0
- package/dist/code-viewer/code-viewer.js +115 -0
- package/dist/code-viewer/code-viewer.js.map +1 -0
- package/dist/combo-box/combo-box.d.ts +39 -0
- package/dist/combo-box/combo-box.d.ts.map +1 -0
- package/dist/combo-box/combo-box.js +176 -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 +131 -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 +116 -0
- package/dist/context-menu/context-menu.js.map +1 -0
- package/dist/datepicker/datepicker-select.d.ts +48 -0
- package/dist/datepicker/datepicker-select.d.ts.map +1 -0
- package/dist/datepicker/datepicker-select.js +219 -0
- package/dist/datepicker/datepicker-select.js.map +1 -0
- package/dist/datepicker/datepicker.d.ts +56 -0
- package/dist/datepicker/datepicker.d.ts.map +1 -0
- package/dist/datepicker/datepicker.js +669 -0
- package/dist/datepicker/datepicker.js.map +1 -0
- package/dist/dropzone/dropzone.d.ts +21 -0
- package/dist/dropzone/dropzone.d.ts.map +1 -0
- package/dist/dropzone/dropzone.js +80 -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 +26 -0
- package/dist/filter/categorical-filter.d.ts.map +1 -0
- package/dist/filter/categorical-filter.js +153 -0
- package/dist/filter/categorical-filter.js.map +1 -0
- package/dist/filter/datetime-filter.d.ts +28 -0
- package/dist/filter/datetime-filter.d.ts.map +1 -0
- package/dist/filter/datetime-filter.js +174 -0
- package/dist/filter/datetime-filter.js.map +1 -0
- package/dist/filter/numeric-filter.d.ts +24 -0
- package/dist/filter/numeric-filter.d.ts.map +1 -0
- package/dist/filter/numeric-filter.js +148 -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 +132 -0
- package/dist/hierarchy-selector/node/branch.js.map +1 -0
- package/dist/index.d.ts +57 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +55 -0
- package/dist/index.js.map +1 -0
- package/dist/input/input.d.ts +44 -0
- package/dist/input/input.d.ts.map +1 -0
- package/dist/input/input.js +91 -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/markdown/markdown.d.ts +18 -0
- package/dist/markdown/markdown.d.ts.map +1 -0
- package/dist/markdown/markdown.js +356 -0
- package/dist/markdown/markdown.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 +121 -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 +231 -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 +42 -0
- package/dist/numeric-input/numeric-input.d.ts.map +1 -0
- package/dist/numeric-input/numeric-input.js +234 -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 +90 -0
- package/dist/progress-bar/progress-bar.js.map +1 -0
- package/dist/radio/radio-group.d.ts +19 -0
- package/dist/radio/radio-group.d.ts.map +1 -0
- package/dist/radio/radio-group.js +160 -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 +205 -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 +143 -0
- package/dist/select/select.js.map +1 -0
- package/dist/shared/chevron-button.d.ts +13 -0
- package/dist/shared/chevron-button.d.ts.map +1 -0
- package/dist/shared/chevron-button.js +35 -0
- package/dist/shared/chevron-button.js.map +1 -0
- package/dist/shared/dropdown-list.d.ts +34 -0
- package/dist/shared/dropdown-list.d.ts.map +1 -0
- package/dist/shared/dropdown-list.js +33 -0
- package/dist/shared/dropdown-list.js.map +1 -0
- package/dist/shared/list-item.d.ts +35 -0
- package/dist/shared/list-item.d.ts.map +1 -0
- package/dist/shared/list-item.js +69 -0
- package/dist/shared/list-item.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 +88 -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 +273 -0
- package/dist/slider/slider.js.map +1 -0
- package/dist/spinner/spinner.d.ts +19 -0
- package/dist/spinner/spinner.d.ts.map +1 -0
- package/dist/spinner/spinner.js +144 -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 +16 -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 +226 -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 +123 -0
- package/dist/table/options-menu.js.map +1 -0
- package/dist/table/render-row.d.ts +25 -0
- package/dist/table/render-row.d.ts.map +1 -0
- package/dist/table/render-row.js +163 -0
- package/dist/table/render-row.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 +422 -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 +91 -0
- package/dist/tabs/tabs.js.map +1 -0
- package/dist/textarea/textarea.d.ts +47 -0
- package/dist/textarea/textarea.d.ts.map +1 -0
- package/dist/textarea/textarea.js +121 -0
- package/dist/textarea/textarea.js.map +1 -0
- package/dist/tooltip/tooltip.d.ts +48 -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 +94 -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 +38 -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 +8 -0
- package/dist/utils/list-styles.d.ts.map +1 -0
- package/dist/utils/list-styles.js +43 -0
- package/dist/utils/list-styles.js.map +1 -0
- package/dist/utils/match-width-to-reference.d.ts +24 -0
- package/dist/utils/match-width-to-reference.d.ts.map +1 -0
- package/dist/utils/match-width-to-reference.js +30 -0
- package/dist/utils/match-width-to-reference.js.map +1 -0
- package/dist/utils/syncKbdHighlightIdx.d.ts +23 -0
- package/dist/utils/syncKbdHighlightIdx.d.ts.map +1 -0
- package/dist/utils/syncKbdHighlightIdx.js +41 -0
- package/dist/utils/syncKbdHighlightIdx.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 +119 -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 +106 -0
|
@@ -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;AAgF/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,90 @@
|
|
|
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
|
+
}
|
|
70
|
+
if (Array.isArray(input)) {
|
|
71
|
+
return input;
|
|
72
|
+
}
|
|
73
|
+
return [input];
|
|
74
|
+
};
|
|
75
|
+
/**
|
|
76
|
+
* A simple progress bar component, that displays the current progress to 100% as a bar with a small label
|
|
77
|
+
*
|
|
78
|
+
* @param props see interface for details
|
|
79
|
+
*/
|
|
80
|
+
function ProgressBar(props) {
|
|
81
|
+
// We need to sort the values to properly render them, so we need to preserve the original index
|
|
82
|
+
const progresses = typeof props.progress === 'number' ?
|
|
83
|
+
[{ index: 0, value: props.progress }]
|
|
84
|
+
: sortBy([...props.progress.map((x, i) => ({ index: i, value: x }))], 'value').reverse();
|
|
85
|
+
const colors = arrayify(props.color, defaultColors.slice(0, progresses.length));
|
|
86
|
+
const labels = arrayify(props.label, progresses.map((x) => `${x.value}%`));
|
|
87
|
+
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))) }));
|
|
88
|
+
}
|
|
89
|
+
export default ProgressBar;
|
|
90
|
+
//# 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,19 @@
|
|
|
1
|
+
import { InteractiveComponentProps, Item } from '../types';
|
|
2
|
+
export interface RadioGroupProps extends InteractiveComponentProps<Item> {
|
|
3
|
+
/** An optional value which determines the direction of the radio group components by default is vertical */
|
|
4
|
+
direction?: 'horizontal' | 'vertical';
|
|
5
|
+
/** Whether to show radio in list style */
|
|
6
|
+
isListStyle?: boolean;
|
|
7
|
+
/** The items to pick from the list. Each should have a label and a value */
|
|
8
|
+
items: Array<Item>;
|
|
9
|
+
/** An optional onChange handler, will be called whenever the state of the checkbox changes */
|
|
10
|
+
onChange?: (value: Item, e?: React.FormEvent<HTMLInputElement>) => void | Promise<void>;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* A simple radio component
|
|
14
|
+
*
|
|
15
|
+
* @param {RadioGroupProps} props - the component props
|
|
16
|
+
*/
|
|
17
|
+
declare function RadioGroup(props: RadioGroupProps): JSX.Element;
|
|
18
|
+
export default RadioGroup;
|
|
19
|
+
//# 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,CA0DvD;AAED,eAAe,UAAU,CAAC"}
|
|
@@ -0,0 +1,160 @@
|
|
|
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: 0 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
|
+
// controlled mode
|
|
142
|
+
if (props.value !== undefined) {
|
|
143
|
+
(_a = props.onChange) === null || _a === void 0 ? void 0 : _a.call(props, props.items[chosenIndex], event);
|
|
144
|
+
// uncontrolled mode
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
setCurrentSelected(chosenIndex);
|
|
148
|
+
}
|
|
149
|
+
};
|
|
150
|
+
useEffect(() => {
|
|
151
|
+
setCurrentSelected(props.items.findIndex((item) => props.value !== undefined ? isEqual(item.value, props.value) : isEqual(item.value, props.initialValue)));
|
|
152
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
153
|
+
}, [props.value]);
|
|
154
|
+
return (_jsx(RadioGroupWrapper, { className: props.className, isHorizontal: props.direction === 'horizontal', style: props.style, children: props.items.map((item, index) => {
|
|
155
|
+
var _a;
|
|
156
|
+
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}`));
|
|
157
|
+
}) }));
|
|
158
|
+
}
|
|
159
|
+
export default RadioGroup;
|
|
160
|
+
//# 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: 0 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
|
+
import React from '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":"AAkBA,OAAO,KAAoD,MAAM,OAAO,CAAC;AAUzE,OAAO,EAAE,yBAAyB,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAkE3D,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;AAwCD;;;;;GAKG;AACH,iBAAS,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,GAAG,CAAC,OAAO,CAgN7D;AACD,eAAe,aAAa,CAAC"}
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
2
|
+
var t = {};
|
|
3
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
4
|
+
t[p] = s[p];
|
|
5
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
6
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
7
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
8
|
+
t[p[i]] = s[p[i]];
|
|
9
|
+
}
|
|
10
|
+
return t;
|
|
11
|
+
};
|
|
12
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
13
|
+
/**
|
|
14
|
+
* Copyright 2023 Impulse Innovations Limited
|
|
15
|
+
*
|
|
16
|
+
*
|
|
17
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
18
|
+
* you may not use this file except in compliance with the License.
|
|
19
|
+
* You may obtain a copy of the License at
|
|
20
|
+
*
|
|
21
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
22
|
+
*
|
|
23
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
24
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
25
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
26
|
+
* See the License for the specific language governing permissions and
|
|
27
|
+
* limitations under the License.
|
|
28
|
+
*/
|
|
29
|
+
import { autoUpdate, flip, shift, useFloating, useInteractions, useRole } from '@floating-ui/react';
|
|
30
|
+
import { useCombobox } from 'downshift';
|
|
31
|
+
import React, { useCallback, useEffect, useMemo, useState } from 'react';
|
|
32
|
+
import ReactDOM from 'react-dom';
|
|
33
|
+
import styled, { useTheme } from '@darajs/styled-components';
|
|
34
|
+
import Badge from '../badge/badge';
|
|
35
|
+
import { Input, InputWrapper, Wrapper } from '../combo-box/combo-box';
|
|
36
|
+
import ChevronButton from '../shared/chevron-button';
|
|
37
|
+
import DropdownList from '../shared/dropdown-list';
|
|
38
|
+
import { StyledListItem } from '../shared/list-item';
|
|
39
|
+
import { matchWidthToReference } from '../utils';
|
|
40
|
+
import { syncKbdHighlightIdx } from '../utils/syncKbdHighlightIdx';
|
|
41
|
+
const { stateChangeTypes } = useCombobox;
|
|
42
|
+
const getTextColor = (heading, isSelected, theme) => {
|
|
43
|
+
if (heading) {
|
|
44
|
+
return theme.colors.text;
|
|
45
|
+
}
|
|
46
|
+
if (isSelected) {
|
|
47
|
+
return theme.colors.primary;
|
|
48
|
+
}
|
|
49
|
+
return theme.colors.text;
|
|
50
|
+
};
|
|
51
|
+
const ListItemSpan = styled(StyledListItem) `
|
|
52
|
+
cursor: ${(props) => ((props === null || props === void 0 ? void 0 : props.heading) ? 'text' : 'pointer')};
|
|
53
|
+
user-select: ${(props) => ((props === null || props === void 0 ? void 0 : props.heading) ? 'text' : 'none')};
|
|
54
|
+
|
|
55
|
+
display: flex;
|
|
56
|
+
align-items: center;
|
|
57
|
+
justify-content: space-between;
|
|
58
|
+
|
|
59
|
+
padding: ${(props) => ((props === null || props === void 0 ? void 0 : props.heading) || !props.section ? '0 0.7rem' : '0 1.5rem')};
|
|
60
|
+
padding-right: 0.7rem;
|
|
61
|
+
|
|
62
|
+
font-weight: ${(props) => ((props === null || props === void 0 ? void 0 : props.heading) ? 'bold' : 'normal')};
|
|
63
|
+
color: ${(props) => getTextColor(props === null || props === void 0 ? void 0 : props.heading, props.isSelected, props.theme)};
|
|
64
|
+
|
|
65
|
+
${(props) => {
|
|
66
|
+
if (props.heading) {
|
|
67
|
+
return `
|
|
68
|
+
:hover {
|
|
69
|
+
background-color: ${props.theme.colors.background};
|
|
70
|
+
color: ${props.theme.colors.text};
|
|
71
|
+
}
|
|
72
|
+
`;
|
|
73
|
+
}
|
|
74
|
+
}}
|
|
75
|
+
`;
|
|
76
|
+
function instanceOfSectionItem(item) {
|
|
77
|
+
return 'items' in item;
|
|
78
|
+
}
|
|
79
|
+
function unpackSectionedList(listItems) {
|
|
80
|
+
return listItems.reduce((acc, item) => {
|
|
81
|
+
if (instanceOfSectionItem(item)) {
|
|
82
|
+
const sectionHeading = { heading: true, label: item.label, value: item.label };
|
|
83
|
+
const sectionItems = item.items.map((sectionItem) => (Object.assign(Object.assign({}, sectionItem), { section: item.label })));
|
|
84
|
+
return [...acc, sectionHeading, ...sectionItems];
|
|
85
|
+
}
|
|
86
|
+
return [...acc, item];
|
|
87
|
+
}, []);
|
|
88
|
+
}
|
|
89
|
+
const SectionedListItem = ({ item, index, getItemProps, isSelected, isHighlighted, }) => {
|
|
90
|
+
const theme = useTheme();
|
|
91
|
+
const _a = getItemProps({ index, item }), { itemClassName } = _a, itemProps = __rest(_a, ["itemClassName"]);
|
|
92
|
+
if (item.heading) {
|
|
93
|
+
delete itemProps.onClick;
|
|
94
|
+
}
|
|
95
|
+
return (_jsxs(ListItemSpan, Object.assign({}, itemProps, { heading: item.heading, section: item.section, isSelected: isSelected, title: item.label, item: item, index: index, isHighlighted: isHighlighted, children: [item.label || item.section, item.badge && _jsx(Badge, { color: item.badge.color || theme.colors.primary, children: item.badge.label })] })));
|
|
96
|
+
};
|
|
97
|
+
/**
|
|
98
|
+
* A component for rendering lists, sectioned and non-sectioned. Takes an array of unpacked ListItem objects and
|
|
99
|
+
* renders a searchable list.
|
|
100
|
+
*
|
|
101
|
+
* @param {SectionedListProps} props - the component props
|
|
102
|
+
*/
|
|
103
|
+
function SectionedList(props) {
|
|
104
|
+
var _a, _b, _c;
|
|
105
|
+
const unpackedItems = useMemo(() => unpackSectionedList(props.items), [props.items]);
|
|
106
|
+
const [pendingHighlight, setPendingHighlight] = useState(null);
|
|
107
|
+
const [items, setItems] = useState(unpackedItems);
|
|
108
|
+
const [inputValue, setInputValue] = useState((_b = (_a = props.selectedItem) === null || _a === void 0 ? void 0 : _a.label) !== null && _b !== void 0 ? _b : '');
|
|
109
|
+
const [kbdHighlightIdx, setKbdHighlightIdx] = React.useState();
|
|
110
|
+
const { selectedItem, isOpen, getMenuProps, getInputProps, getToggleButtonProps, getItemProps, setHighlightedIndex, } = useCombobox(Object.assign(Object.assign(Object.assign({ initialIsOpen: false, initialSelectedItem: (_c = props.initialValue) !== null && _c !== void 0 ? _c : props.selectedItem, itemToString: (item) => (item ? item.label : ''), items, onInputValueChange: (change) => {
|
|
111
|
+
setInputValue(change.inputValue);
|
|
112
|
+
if (!change.inputValue) {
|
|
113
|
+
setItems(unpackedItems);
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
const counts = {};
|
|
117
|
+
const filteredItems = unpackedItems.filter((item) => {
|
|
118
|
+
const lowercaseInput = change.inputValue.toLowerCase();
|
|
119
|
+
const lowercaseLabel = item.label.toLowerCase();
|
|
120
|
+
// Check if search input matches section item
|
|
121
|
+
if (!item.heading && lowercaseLabel.includes(lowercaseInput)) {
|
|
122
|
+
counts[item.label] = counts[item.label] ? counts[item.label] + 1 : 1;
|
|
123
|
+
return true;
|
|
124
|
+
}
|
|
125
|
+
if (item.heading) {
|
|
126
|
+
// search for section headers that contain an item that matches the input
|
|
127
|
+
const listSections = props.items.filter((propItem) => propItem.items.find((subItem) => subItem.label.toLowerCase().includes(lowercaseInput)));
|
|
128
|
+
if (listSections.length) {
|
|
129
|
+
// display section headers that contain a matching item
|
|
130
|
+
listSections.forEach((section) => {
|
|
131
|
+
counts[section.label] = counts[section.label] ? counts[section.label] + 1 : 1;
|
|
132
|
+
});
|
|
133
|
+
return true;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
return false;
|
|
137
|
+
});
|
|
138
|
+
setItems(filteredItems.filter((item) => counts[item.label] > 0));
|
|
139
|
+
}, onSelectedItemChange: (changes) => {
|
|
140
|
+
var _a, _b;
|
|
141
|
+
if (props.onSelect) {
|
|
142
|
+
if ((props.selectedItem && ((_a = changes.selectedItem) === null || _a === void 0 ? void 0 : _a.value) !== ((_b = props.selectedItem) === null || _b === void 0 ? void 0 : _b.value)) ||
|
|
143
|
+
!props.selectedItem) {
|
|
144
|
+
props.onSelect(changes.selectedItem);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
} }, syncKbdHighlightIdx(setKbdHighlightIdx)), { stateReducer: (state, { changes, type }) => {
|
|
148
|
+
var _a, _b, _c;
|
|
149
|
+
// When props is forcefully updated then clear the input as well
|
|
150
|
+
if (type === stateChangeTypes.ControlledPropUpdatedSelectedItem) {
|
|
151
|
+
return Object.assign(Object.assign({}, changes), { inputValue: '' });
|
|
152
|
+
}
|
|
153
|
+
// This resets the input when the dropdown is opened
|
|
154
|
+
if (type === stateChangeTypes.InputFocus ||
|
|
155
|
+
(type === stateChangeTypes.ToggleButtonClick && changes.isOpen)) {
|
|
156
|
+
// This is a hack to change the highlight in the next render cycle so filteredItems had time to update
|
|
157
|
+
setPendingHighlight(changes.selectedItem ?
|
|
158
|
+
props.items.findIndex((i) => i.value === changes.selectedItem.value)
|
|
159
|
+
: 0);
|
|
160
|
+
return Object.assign(Object.assign({}, changes), { inputValue: '' });
|
|
161
|
+
}
|
|
162
|
+
// On item selection make sure the list doesn't filter down to just the selected item
|
|
163
|
+
if ([
|
|
164
|
+
stateChangeTypes.InputKeyDownEnter,
|
|
165
|
+
stateChangeTypes.ItemClick,
|
|
166
|
+
stateChangeTypes.InputBlur,
|
|
167
|
+
stateChangeTypes.InputKeyDownEscape,
|
|
168
|
+
stateChangeTypes.ToggleButtonClick,
|
|
169
|
+
].includes(type)) {
|
|
170
|
+
return Object.assign(Object.assign({}, changes), { inputValue: ((_a = changes.selectedItem) === null || _a === void 0 ? void 0 : _a.label) || '' });
|
|
171
|
+
}
|
|
172
|
+
// jump section headings when navigating with keys
|
|
173
|
+
if (type === stateChangeTypes.InputKeyDownArrowUp && ((_b = items[changes.highlightedIndex]) === null || _b === void 0 ? void 0 : _b.heading)) {
|
|
174
|
+
return Object.assign(Object.assign({}, changes), { highlightedIndex: changes.highlightedIndex - 1 < 0 ? items.length - 1 : changes.highlightedIndex - 1 });
|
|
175
|
+
}
|
|
176
|
+
if (type === stateChangeTypes.InputKeyDownArrowDown && ((_c = items[changes.highlightedIndex]) === null || _c === void 0 ? void 0 : _c.heading)) {
|
|
177
|
+
return Object.assign(Object.assign({}, changes), { highlightedIndex: changes.highlightedIndex + 1 === items.length ? 0 : changes.highlightedIndex + 1 });
|
|
178
|
+
}
|
|
179
|
+
return changes;
|
|
180
|
+
} }), ('selectedItem' in props && { selectedItem: props.selectedItem })));
|
|
181
|
+
useEffect(() => {
|
|
182
|
+
if (isOpen && pendingHighlight !== null) {
|
|
183
|
+
setHighlightedIndex(pendingHighlight);
|
|
184
|
+
setPendingHighlight(null);
|
|
185
|
+
}
|
|
186
|
+
}, [isOpen, pendingHighlight, setHighlightedIndex]);
|
|
187
|
+
useEffect(() => {
|
|
188
|
+
if (props.selectedItem === null) {
|
|
189
|
+
setInputValue('');
|
|
190
|
+
}
|
|
191
|
+
}, [props.selectedItem]);
|
|
192
|
+
const { refs, floatingStyles, context } = useFloating({
|
|
193
|
+
open: isOpen,
|
|
194
|
+
placement: 'bottom-start',
|
|
195
|
+
middleware: [flip(), shift(), matchWidthToReference(+2)],
|
|
196
|
+
whileElementsMounted: isOpen ? autoUpdate : undefined,
|
|
197
|
+
});
|
|
198
|
+
const role = useRole(context, { role: 'listbox' });
|
|
199
|
+
const { getReferenceProps, getFloatingProps } = useInteractions([role]);
|
|
200
|
+
const dropdownStyle = React.useMemo(() => (Object.assign(Object.assign({}, floatingStyles), { marginLeft: -1 })), [floatingStyles]);
|
|
201
|
+
const renderListItem = useCallback((item, index) => (_jsx(SectionedListItem, { item: item, index: index, getItemProps: getItemProps, isSelected: (selectedItem === null || selectedItem === void 0 ? void 0 : selectedItem.value) === item.value, isHighlighted: isOpen && kbdHighlightIdx !== undefined && kbdHighlightIdx === index }, `item-${index}-${isOpen && (selectedItem === null || selectedItem === void 0 ? void 0 : selectedItem.label) === item.label}`)), [getItemProps, selectedItem, isOpen, kbdHighlightIdx]);
|
|
202
|
+
return (_jsxs(Wrapper, { className: props.className, isDisabled: props.disabled, isErrored: false, isOpen: isOpen, style: props.style, children: [_jsxs(InputWrapper, { disabled: props.disabled, isOpen: isOpen, ref: refs.setReference, children: [_jsx(Input, Object.assign({}, getInputProps({ value: inputValue }), getReferenceProps())), _jsx(ChevronButton, { disabled: props.disabled, isOpen: isOpen, getToggleButtonProps: getToggleButtonProps })] }), ReactDOM.createPortal(_jsx(DropdownList, { items: items, getItemProps: getItemProps, getFloatingProps: getFloatingProps, style: dropdownStyle, isOpen: isOpen, getMenuProps: getMenuProps, ref: refs.setFloating, kbdHighlightIdx: kbdHighlightIdx, children: renderListItem }), document.body)] }));
|
|
203
|
+
}
|
|
204
|
+
export default SectionedList;
|
|
205
|
+
//# sourceMappingURL=sectioned-list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sectioned-list.js","sourceRoot":"","sources":["../../src/sectioned-list/sectioned-list.tsx"],"names":[],"mappings":"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"}
|