@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.
Files changed (242) hide show
  1. package/LICENSE +201 -0
  2. package/dist/accordion/accordion-item.d.ts +25 -0
  3. package/dist/accordion/accordion-item.d.ts.map +1 -0
  4. package/dist/accordion/accordion-item.js +90 -0
  5. package/dist/accordion/accordion-item.js.map +1 -0
  6. package/dist/accordion/accordion.d.ts +33 -0
  7. package/dist/accordion/accordion.d.ts.map +1 -0
  8. package/dist/accordion/accordion.js +86 -0
  9. package/dist/accordion/accordion.js.map +1 -0
  10. package/dist/badge/badge.d.ts +21 -0
  11. package/dist/badge/badge.d.ts.map +1 -0
  12. package/dist/badge/badge.js +42 -0
  13. package/dist/badge/badge.js.map +1 -0
  14. package/dist/button/button.d.ts +35 -0
  15. package/dist/button/button.d.ts.map +1 -0
  16. package/dist/button/button.js +169 -0
  17. package/dist/button/button.js.map +1 -0
  18. package/dist/button-bar/button-bar.d.ts +19 -0
  19. package/dist/button-bar/button-bar.d.ts.map +1 -0
  20. package/dist/button-bar/button-bar.js +123 -0
  21. package/dist/button-bar/button-bar.js.map +1 -0
  22. package/dist/carousel/carousel.d.ts +24 -0
  23. package/dist/carousel/carousel.d.ts.map +1 -0
  24. package/dist/carousel/carousel.js +175 -0
  25. package/dist/carousel/carousel.js.map +1 -0
  26. package/dist/checkbox/checkbox-group.d.ts +36 -0
  27. package/dist/checkbox/checkbox-group.d.ts.map +1 -0
  28. package/dist/checkbox/checkbox-group.js +116 -0
  29. package/dist/checkbox/checkbox-group.js.map +1 -0
  30. package/dist/checkbox/checkbox.d.ts +28 -0
  31. package/dist/checkbox/checkbox.d.ts.map +1 -0
  32. package/dist/checkbox/checkbox.js +162 -0
  33. package/dist/checkbox/checkbox.js.map +1 -0
  34. package/dist/checkbox/tri-state-checkbox.d.ts +23 -0
  35. package/dist/checkbox/tri-state-checkbox.d.ts.map +1 -0
  36. package/dist/checkbox/tri-state-checkbox.js +87 -0
  37. package/dist/checkbox/tri-state-checkbox.js.map +1 -0
  38. package/dist/combo-box/combo-box.d.ts +328 -0
  39. package/dist/combo-box/combo-box.d.ts.map +1 -0
  40. package/dist/combo-box/combo-box.js +213 -0
  41. package/dist/combo-box/combo-box.js.map +1 -0
  42. package/dist/component-select-list/component-select-list.d.ts +27 -0
  43. package/dist/component-select-list/component-select-list.d.ts.map +1 -0
  44. package/dist/component-select-list/component-select-list.js +129 -0
  45. package/dist/component-select-list/component-select-list.js.map +1 -0
  46. package/dist/constants.d.ts +33 -0
  47. package/dist/constants.d.ts.map +1 -0
  48. package/dist/constants.js +47 -0
  49. package/dist/constants.js.map +1 -0
  50. package/dist/context-menu/context-menu.d.ts +24 -0
  51. package/dist/context-menu/context-menu.d.ts.map +1 -0
  52. package/dist/context-menu/context-menu.js +112 -0
  53. package/dist/context-menu/context-menu.js.map +1 -0
  54. package/dist/datepicker/datepicker-select.d.ts +50 -0
  55. package/dist/datepicker/datepicker-select.d.ts.map +1 -0
  56. package/dist/datepicker/datepicker-select.js +211 -0
  57. package/dist/datepicker/datepicker-select.js.map +1 -0
  58. package/dist/datepicker/datepicker.d.ts +57 -0
  59. package/dist/datepicker/datepicker.d.ts.map +1 -0
  60. package/dist/datepicker/datepicker.js +608 -0
  61. package/dist/datepicker/datepicker.js.map +1 -0
  62. package/dist/dropzone/dropzone.d.ts +20 -0
  63. package/dist/dropzone/dropzone.d.ts.map +1 -0
  64. package/dist/dropzone/dropzone.js +77 -0
  65. package/dist/dropzone/dropzone.js.map +1 -0
  66. package/dist/error-boundary/error-boundary.d.ts +33 -0
  67. package/dist/error-boundary/error-boundary.d.ts.map +1 -0
  68. package/dist/error-boundary/error-boundary.js +72 -0
  69. package/dist/error-boundary/error-boundary.js.map +1 -0
  70. package/dist/filter/categorical-filter.d.ts +27 -0
  71. package/dist/filter/categorical-filter.d.ts.map +1 -0
  72. package/dist/filter/categorical-filter.js +150 -0
  73. package/dist/filter/categorical-filter.js.map +1 -0
  74. package/dist/filter/datetime-filter.d.ts +29 -0
  75. package/dist/filter/datetime-filter.d.ts.map +1 -0
  76. package/dist/filter/datetime-filter.js +196 -0
  77. package/dist/filter/datetime-filter.js.map +1 -0
  78. package/dist/filter/numeric-filter.d.ts +25 -0
  79. package/dist/filter/numeric-filter.d.ts.map +1 -0
  80. package/dist/filter/numeric-filter.js +146 -0
  81. package/dist/filter/numeric-filter.js.map +1 -0
  82. package/dist/hierarchy-selector/hierarchy-selector.d.ts +31 -0
  83. package/dist/hierarchy-selector/hierarchy-selector.d.ts.map +1 -0
  84. package/dist/hierarchy-selector/hierarchy-selector.js +65 -0
  85. package/dist/hierarchy-selector/hierarchy-selector.js.map +1 -0
  86. package/dist/hierarchy-selector/node/branch.d.ts +47 -0
  87. package/dist/hierarchy-selector/node/branch.d.ts.map +1 -0
  88. package/dist/hierarchy-selector/node/branch.js +133 -0
  89. package/dist/hierarchy-selector/node/branch.js.map +1 -0
  90. package/dist/index.d.ts +54 -0
  91. package/dist/index.d.ts.map +1 -0
  92. package/dist/index.js +52 -0
  93. package/dist/index.js.map +1 -0
  94. package/dist/input/input.d.ts +58 -0
  95. package/dist/input/input.d.ts.map +1 -0
  96. package/dist/input/input.js +102 -0
  97. package/dist/input/input.js.map +1 -0
  98. package/dist/jest-setup.d.ts +18 -0
  99. package/dist/jest-setup.d.ts.map +1 -0
  100. package/dist/jest-setup.js +18 -0
  101. package/dist/jest-setup.js.map +1 -0
  102. package/dist/modal/modal.d.ts +37 -0
  103. package/dist/modal/modal.d.ts.map +1 -0
  104. package/dist/modal/modal.js +120 -0
  105. package/dist/modal/modal.js.map +1 -0
  106. package/dist/multiselect/multiselect.d.ts +31 -0
  107. package/dist/multiselect/multiselect.d.ts.map +1 -0
  108. package/dist/multiselect/multiselect.js +282 -0
  109. package/dist/multiselect/multiselect.js.map +1 -0
  110. package/dist/numeric-input/input-stepper.d.ts +33 -0
  111. package/dist/numeric-input/input-stepper.d.ts.map +1 -0
  112. package/dist/numeric-input/input-stepper.js +54 -0
  113. package/dist/numeric-input/input-stepper.js.map +1 -0
  114. package/dist/numeric-input/numeric-input.d.ts +48 -0
  115. package/dist/numeric-input/numeric-input.d.ts.map +1 -0
  116. package/dist/numeric-input/numeric-input.js +199 -0
  117. package/dist/numeric-input/numeric-input.js.map +1 -0
  118. package/dist/progress-bar/progress-bar.d.ts +23 -0
  119. package/dist/progress-bar/progress-bar.d.ts.map +1 -0
  120. package/dist/progress-bar/progress-bar.js +88 -0
  121. package/dist/progress-bar/progress-bar.js.map +1 -0
  122. package/dist/radio/radio-group.d.ts +20 -0
  123. package/dist/radio/radio-group.d.ts.map +1 -0
  124. package/dist/radio/radio-group.js +158 -0
  125. package/dist/radio/radio-group.js.map +1 -0
  126. package/dist/search-bar/search-bar.d.ts +34 -0
  127. package/dist/search-bar/search-bar.d.ts.map +1 -0
  128. package/dist/search-bar/search-bar.js +39 -0
  129. package/dist/search-bar/search-bar.js.map +1 -0
  130. package/dist/sectioned-list/sectioned-list.d.ts +29 -0
  131. package/dist/sectioned-list/sectioned-list.d.ts.map +1 -0
  132. package/dist/sectioned-list/sectioned-list.js +208 -0
  133. package/dist/sectioned-list/sectioned-list.js.map +1 -0
  134. package/dist/select/select.d.ts +54 -0
  135. package/dist/select/select.d.ts.map +1 -0
  136. package/dist/select/select.js +159 -0
  137. package/dist/select/select.js.map +1 -0
  138. package/dist/slider/slider-inputs.d.ts +36 -0
  139. package/dist/slider/slider-inputs.d.ts.map +1 -0
  140. package/dist/slider/slider-inputs.js +85 -0
  141. package/dist/slider/slider-inputs.js.map +1 -0
  142. package/dist/slider/slider.d.ts +53 -0
  143. package/dist/slider/slider.d.ts.map +1 -0
  144. package/dist/slider/slider.js +267 -0
  145. package/dist/slider/slider.js.map +1 -0
  146. package/dist/spinner/spinner.d.ts +20 -0
  147. package/dist/spinner/spinner.d.ts.map +1 -0
  148. package/dist/spinner/spinner.js +132 -0
  149. package/dist/spinner/spinner.js.map +1 -0
  150. package/dist/switch/sun-icon.d.ts +3 -0
  151. package/dist/switch/sun-icon.d.ts.map +1 -0
  152. package/dist/switch/sun-icon.js +24 -0
  153. package/dist/switch/sun-icon.js.map +1 -0
  154. package/dist/switch/switch.d.ts +17 -0
  155. package/dist/switch/switch.d.ts.map +1 -0
  156. package/dist/switch/switch.js +92 -0
  157. package/dist/switch/switch.js.map +1 -0
  158. package/dist/table/cells/action-cell.d.ts +34 -0
  159. package/dist/table/cells/action-cell.d.ts.map +1 -0
  160. package/dist/table/cells/action-cell.js +68 -0
  161. package/dist/table/cells/action-cell.js.map +1 -0
  162. package/dist/table/cells/datetime-cell.d.ts +12 -0
  163. package/dist/table/cells/datetime-cell.d.ts.map +1 -0
  164. package/dist/table/cells/datetime-cell.js +36 -0
  165. package/dist/table/cells/datetime-cell.js.map +1 -0
  166. package/dist/table/cells/edit-cell-utils.d.ts +32 -0
  167. package/dist/table/cells/edit-cell-utils.d.ts.map +1 -0
  168. package/dist/table/cells/edit-cell-utils.js +2 -0
  169. package/dist/table/cells/edit-cell-utils.js.map +1 -0
  170. package/dist/table/cells/edit-input-cell.d.ts +10 -0
  171. package/dist/table/cells/edit-input-cell.d.ts.map +1 -0
  172. package/dist/table/cells/edit-input-cell.js +61 -0
  173. package/dist/table/cells/edit-input-cell.js.map +1 -0
  174. package/dist/table/cells/edit-select-cell.d.ts +12 -0
  175. package/dist/table/cells/edit-select-cell.d.ts.map +1 -0
  176. package/dist/table/cells/edit-select-cell.js +55 -0
  177. package/dist/table/cells/edit-select-cell.js.map +1 -0
  178. package/dist/table/filters.d.ts +46 -0
  179. package/dist/table/filters.d.ts.map +1 -0
  180. package/dist/table/filters.js +223 -0
  181. package/dist/table/filters.js.map +1 -0
  182. package/dist/table/headers/select-header.d.ts +14 -0
  183. package/dist/table/headers/select-header.d.ts.map +1 -0
  184. package/dist/table/headers/select-header.js +41 -0
  185. package/dist/table/headers/select-header.js.map +1 -0
  186. package/dist/table/options-menu.d.ts +25 -0
  187. package/dist/table/options-menu.d.ts.map +1 -0
  188. package/dist/table/options-menu.js +120 -0
  189. package/dist/table/options-menu.js.map +1 -0
  190. package/dist/table/table.d.ts +95 -0
  191. package/dist/table/table.d.ts.map +1 -0
  192. package/dist/table/table.js +524 -0
  193. package/dist/table/table.js.map +1 -0
  194. package/dist/table/types.d.ts +30 -0
  195. package/dist/table/types.d.ts.map +1 -0
  196. package/dist/table/types.js +2 -0
  197. package/dist/table/types.js.map +1 -0
  198. package/dist/tabs/tabs.d.ts +22 -0
  199. package/dist/tabs/tabs.d.ts.map +1 -0
  200. package/dist/tabs/tabs.js +88 -0
  201. package/dist/tabs/tabs.js.map +1 -0
  202. package/dist/textarea/textarea.d.ts +45 -0
  203. package/dist/textarea/textarea.d.ts.map +1 -0
  204. package/dist/textarea/textarea.js +77 -0
  205. package/dist/textarea/textarea.js.map +1 -0
  206. package/dist/tooltip/tooltip.d.ts +46 -0
  207. package/dist/tooltip/tooltip.d.ts.map +1 -0
  208. package/dist/tooltip/tooltip.js +116 -0
  209. package/dist/tooltip/tooltip.js.map +1 -0
  210. package/dist/types.d.ts +66 -0
  211. package/dist/types.d.ts.map +1 -0
  212. package/dist/types.js +2 -0
  213. package/dist/types.js.map +1 -0
  214. package/dist/utils/chevron.d.ts +34 -0
  215. package/dist/utils/chevron.d.ts.map +1 -0
  216. package/dist/utils/chevron.js +40 -0
  217. package/dist/utils/chevron.js.map +1 -0
  218. package/dist/utils/index.d.ts +22 -0
  219. package/dist/utils/index.d.ts.map +1 -0
  220. package/dist/utils/index.js +22 -0
  221. package/dist/utils/index.js.map +1 -0
  222. package/dist/utils/label.d.ts +3 -0
  223. package/dist/utils/label.d.ts.map +1 -0
  224. package/dist/utils/label.js +24 -0
  225. package/dist/utils/label.js.map +1 -0
  226. package/dist/utils/list-styles.d.ts +12 -0
  227. package/dist/utils/list-styles.d.ts.map +1 -0
  228. package/dist/utils/list-styles.js +58 -0
  229. package/dist/utils/list-styles.js.map +1 -0
  230. package/dist/utils/same-width-modifier.d.ts +23 -0
  231. package/dist/utils/same-width-modifier.d.ts.map +1 -0
  232. package/dist/utils/same-width-modifier.js +17 -0
  233. package/dist/utils/same-width-modifier.js.map +1 -0
  234. package/dist/utils/use-infinite-loader.d.ts +32 -0
  235. package/dist/utils/use-infinite-loader.d.ts.map +1 -0
  236. package/dist/utils/use-infinite-loader.js +114 -0
  237. package/dist/utils/use-infinite-loader.js.map +1 -0
  238. package/dist/utils/use-on-click-outside.d.ts +3 -0
  239. package/dist/utils/use-on-click-outside.d.ts.map +1 -0
  240. package/dist/utils/use-on-click-outside.js +36 -0
  241. package/dist/utils/use-on-click-outside.js.map +1 -0
  242. package/package.json +105 -0
@@ -0,0 +1,208 @@
1
+ import { createElement as _createElement } from "react";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ /**
4
+ * Copyright 2023 Impulse Innovations Limited
5
+ *
6
+ *
7
+ * Licensed under the Apache License, Version 2.0 (the "License");
8
+ * you may not use this file except in compliance with the License.
9
+ * You may obtain a copy of the License at
10
+ *
11
+ * http://www.apache.org/licenses/LICENSE-2.0
12
+ *
13
+ * Unless required by applicable law or agreed to in writing, software
14
+ * distributed under the License is distributed on an "AS IS" BASIS,
15
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ * See the License for the specific language governing permissions and
17
+ * limitations under the License.
18
+ */
19
+ import { useCombobox } from 'downshift';
20
+ import { useEffect, useMemo, useRef, useState } from 'react';
21
+ import ReactDOM from 'react-dom';
22
+ import { usePopper } from 'react-popper';
23
+ import styled, { useTheme } from '@darajs/styled-components';
24
+ import Badge from '../badge/badge';
25
+ import { ChevronButton, Input, InputWrapper, NoItemsLabel, Wrapper } from '../combo-box/combo-box';
26
+ import { Chevron, List, ListItem, sameWidthModifier } from '../utils';
27
+ const { stateChangeTypes } = useCombobox;
28
+ const ListWrapper = styled(List) `
29
+ margin-left: -1px;
30
+ border-radius: 0px 0px 0.25rem 0.25rem;
31
+ box-shadow: ${(props) => props.theme.shadow.light};
32
+ `;
33
+ const getTextColor = (heading, selected, theme) => {
34
+ if (heading) {
35
+ return theme.colors.text;
36
+ }
37
+ if (selected) {
38
+ return theme.colors.primary;
39
+ }
40
+ return theme.colors.text;
41
+ };
42
+ const ListItemSpan = styled(ListItem) `
43
+ cursor: ${(props) => ((props === null || props === void 0 ? void 0 : props.heading) ? 'text' : 'pointer')};
44
+ user-select: ${(props) => ((props === null || props === void 0 ? void 0 : props.heading) ? 'text' : 'none')};
45
+
46
+ display: flex;
47
+ align-items: center;
48
+ justify-content: space-between;
49
+
50
+ padding: ${(props) => ((props === null || props === void 0 ? void 0 : props.heading) || !props.section ? '0 0.7rem' : '0 1.5rem')};
51
+ padding-right: 0.7rem;
52
+
53
+ font-weight: ${(props) => ((props === null || props === void 0 ? void 0 : props.heading) ? 'bold' : 'normal')};
54
+ color: ${(props) => getTextColor(props === null || props === void 0 ? void 0 : props.heading, props.selected, props.theme)};
55
+
56
+ ${(props) => {
57
+ if (props.heading) {
58
+ return `
59
+ :hover {
60
+ background-color: ${props.theme.colors.background};
61
+ color: ${props.theme.colors.text};
62
+ }
63
+ `;
64
+ }
65
+ }}
66
+ `;
67
+ function instanceOfSectionItem(item) {
68
+ return 'items' in item;
69
+ }
70
+ function unpackSectionedList(listItems) {
71
+ return listItems.reduce((acc, item) => {
72
+ if (instanceOfSectionItem(item)) {
73
+ const sectionHeading = { heading: true, label: item.label, value: item.label };
74
+ const sectionItems = item.items.map((sectionItem) => (Object.assign(Object.assign({}, sectionItem), { section: item.label })));
75
+ return [...acc, sectionHeading, ...sectionItems];
76
+ }
77
+ return [...acc, item];
78
+ }, []);
79
+ }
80
+ /**
81
+ * A component for rendering lists, sectioned and non-sectioned. Takes an array of unpacked ListItem objects and
82
+ * renders a searchable list.
83
+ *
84
+ * @param {SectionedListProps} props - the component props
85
+ */
86
+ function SectionedList(props) {
87
+ var _a, _b, _c, _d;
88
+ const theme = useTheme();
89
+ const referenceElement = useRef(null);
90
+ const popperElement = useRef(null);
91
+ const { styles, attributes, update } = usePopper(referenceElement.current, popperElement.current, {
92
+ modifiers: [sameWidthModifier],
93
+ placement: 'bottom-start',
94
+ });
95
+ const unpackedItems = useMemo(() => unpackSectionedList(props.items), [props.items]);
96
+ const [pendingHighlight, setPendingHighlight] = useState(null);
97
+ const [items, setItems] = useState(unpackedItems);
98
+ const [inputValue, setInputValue] = useState((_b = (_a = props.selectedItem) === null || _a === void 0 ? void 0 : _a.label) !== null && _b !== void 0 ? _b : '');
99
+ const { selectedItem, isOpen, getMenuProps, getInputProps, getToggleButtonProps, highlightedIndex, getItemProps, setHighlightedIndex, } = useCombobox(Object.assign({ initialIsOpen: false, initialSelectedItem: (_c = props.initialValue) !== null && _c !== void 0 ? _c : props.selectedItem, itemToString: (item) => (item ? item.label : ''), items, onInputValueChange: (change) => {
100
+ setInputValue(change.inputValue);
101
+ if (!change.inputValue) {
102
+ setItems(unpackedItems);
103
+ return;
104
+ }
105
+ const counts = {};
106
+ const filteredItems = unpackedItems.filter((item) => {
107
+ const lowercaseInput = change.inputValue.toLowerCase();
108
+ const lowercaseLabel = item.label.toLowerCase();
109
+ // Check if search input matches section item
110
+ if (!item.heading && lowercaseLabel.includes(lowercaseInput)) {
111
+ counts[item.label] = counts[item.label] ? counts[item.label] + 1 : 1;
112
+ return true;
113
+ }
114
+ if (item.heading) {
115
+ // search for section headers that contain an item that matches the input
116
+ const listSections = props.items.filter((propItem) => propItem.items.find((subItem) => subItem.label.toLowerCase().includes(lowercaseInput)));
117
+ if (listSections.length) {
118
+ // display section headers that contain a matching item
119
+ listSections.forEach((section) => {
120
+ counts[section.label] = counts[section.label] ? counts[section.label] + 1 : 1;
121
+ });
122
+ return true;
123
+ }
124
+ }
125
+ return false;
126
+ });
127
+ setItems(filteredItems.filter((item) => counts[item.label] > 0));
128
+ }, onSelectedItemChange: (changes) => {
129
+ var _a, _b;
130
+ if (props.onSelect) {
131
+ 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)) ||
132
+ !props.selectedItem) {
133
+ props.onSelect(changes.selectedItem);
134
+ }
135
+ }
136
+ }, stateReducer: (state, { changes, type }) => {
137
+ var _a, _b, _c;
138
+ // When props is forcefully updated then clear the input as well
139
+ if (type === stateChangeTypes.ControlledPropUpdatedSelectedItem) {
140
+ return Object.assign(Object.assign({}, changes), { inputValue: '' });
141
+ }
142
+ // This resets the input when the dropdown is opened
143
+ if (type === stateChangeTypes.InputFocus ||
144
+ (type === stateChangeTypes.ToggleButtonClick && changes.isOpen)) {
145
+ // This is a hack to change the highlight in the next render cycle so filteredItems had time to update
146
+ setPendingHighlight(changes.selectedItem
147
+ ? props.items.findIndex((i) => i.value === changes.selectedItem.value)
148
+ : 0);
149
+ return Object.assign(Object.assign({}, changes), { inputValue: '' });
150
+ }
151
+ // On item selection make sure the list doesn't filter down to just the selected item
152
+ if ([
153
+ stateChangeTypes.InputKeyDownEnter,
154
+ stateChangeTypes.ItemClick,
155
+ stateChangeTypes.InputBlur,
156
+ stateChangeTypes.InputKeyDownEscape,
157
+ stateChangeTypes.ToggleButtonClick,
158
+ ].includes(type)) {
159
+ return Object.assign(Object.assign({}, changes), { inputValue: ((_a = changes.selectedItem) === null || _a === void 0 ? void 0 : _a.label) || '' });
160
+ }
161
+ // jump section headings when navigating with keys
162
+ if (type === stateChangeTypes.InputKeyDownArrowUp && ((_b = items[changes.highlightedIndex]) === null || _b === void 0 ? void 0 : _b.heading)) {
163
+ return Object.assign(Object.assign({}, changes), { highlightedIndex: changes.highlightedIndex - 1 < 0 ? items.length - 1 : changes.highlightedIndex - 1 });
164
+ }
165
+ if (type === stateChangeTypes.InputKeyDownArrowDown && ((_c = items[changes.highlightedIndex]) === null || _c === void 0 ? void 0 : _c.heading)) {
166
+ return Object.assign(Object.assign({}, changes), { highlightedIndex: changes.highlightedIndex + 1 === items.length ? 0 : changes.highlightedIndex + 1 });
167
+ }
168
+ return changes;
169
+ } }, ('selectedItem' in props && { selectedItem: props.selectedItem })));
170
+ useEffect(() => {
171
+ if (isOpen && pendingHighlight !== null) {
172
+ setHighlightedIndex(pendingHighlight);
173
+ setPendingHighlight(null);
174
+ }
175
+ }, [isOpen, pendingHighlight, setHighlightedIndex]);
176
+ useEffect(() => {
177
+ if (props.selectedItem === null) {
178
+ setInputValue('');
179
+ }
180
+ }, [props.selectedItem]);
181
+ // After the dropdown is opened, trigger an update of it's position, so it positions correctly.
182
+ useEffect(() => {
183
+ if (isOpen && update) {
184
+ update();
185
+ }
186
+ }, [isOpen, update]);
187
+ // Both downshift and popper want a ref to the reference element and popper element, the following blocks combine
188
+ // these refs into a single function that can be applied to the elements
189
+ const menuProps = getMenuProps();
190
+ const setMenuRef = menuProps.ref;
191
+ delete menuProps.ref;
192
+ const setMenuReference = (value) => {
193
+ setMenuRef(value);
194
+ popperElement.current = value;
195
+ };
196
+ 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: referenceElement, children: [_jsx(Input, Object.assign({}, getInputProps({ value: inputValue }))), _jsx(ChevronButton, Object.assign({}, getToggleButtonProps(), { children: _jsx(Chevron, { disabled: props.disabled, isOpen: isOpen }) }))] }), ReactDOM.createPortal(_jsxs(ListWrapper, Object.assign({}, menuProps, attributes.popper, { isOpen: isOpen, ref: setMenuReference, style: Object.assign(Object.assign({}, styles.popper), { width: parseFloat((_d = styles.popper) === null || _d === void 0 ? void 0 : _d.width) + 2, zIndex: 9999 }), children: [items.length > 0 &&
197
+ items.map((item, index) => {
198
+ const itemProps = getItemProps({ index, item });
199
+ if (item.heading) {
200
+ delete itemProps.onClick;
201
+ }
202
+ return (_createElement(ListItemSpan, Object.assign({}, itemProps, { heading: item.heading, hovered: index === highlightedIndex, key: `item-${index}`, section: item.section, selected: item.value === (selectedItem === null || selectedItem === void 0 ? void 0 : selectedItem.value), title: item.label }),
203
+ item.label || item.section,
204
+ item.badge && (_jsx(Badge, { color: item.badge.color || theme.colors.primary, children: item.badge.label }))));
205
+ }), items.length === 0 && _jsx(NoItemsLabel, { children: "No Items" })] })), document.body)] }));
206
+ }
207
+ export default SectionedList;
208
+ //# 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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"}
@@ -0,0 +1,54 @@
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 { Placement } from '@popperjs/core';
18
+ import * as React from 'react';
19
+ import { InteractiveComponentProps, Item } from '../types';
20
+ export interface SelectProps extends InteractiveComponentProps<Item> {
21
+ /** Whether to force the list to the same width as the parent, defaults to true */
22
+ applySameWidthModifier?: boolean;
23
+ /** A function taking an element for the ref of the dropdown */
24
+ dropdownRef?: (element: any) => void;
25
+ /** Whether to open the select dropdown on load or not, defaults to false */
26
+ initialIsOpen?: boolean;
27
+ /** className property to put on the select's items and the item wrapper */
28
+ itemClass?: string;
29
+ /** The items to pick from the list. Each should have a label and a value */
30
+ items: Array<Item>;
31
+ /** The maximum number of items to display, defaults to 5 */
32
+ maxItems?: number;
33
+ /** onClick event. */
34
+ onClick?: (event: React.MouseEvent<HTMLDivElement, MouseEvent>) => void | Promise<void>;
35
+ /** An optional onSelect handler for listening to changes in the selected item */
36
+ onSelect?: (item: Item) => void | Promise<void>;
37
+ /** An optional placeholder for the input field to display when nothing is selected, defaults to '' */
38
+ placeholder?: string;
39
+ /** Specify a specific placement for the list */
40
+ placement?: Placement;
41
+ /** Set the selected value to a specific value, will put the component in controlled mode. Set to `null` to reset the value */
42
+ selectedItem?: Item;
43
+ /** Font size in rem to show in the Select */
44
+ size?: number;
45
+ }
46
+ /**
47
+ * A single select dropdown component that has no search capability, accepts a list of items to select from and an
48
+ * onSelect handler to listen for changes in the selection
49
+ *
50
+ * @param {SelectProps} props - the props of the component
51
+ */
52
+ declare function Select(props: SelectProps): JSX.Element;
53
+ export default Select;
54
+ //# sourceMappingURL=select.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"select.d.ts","sourceRoot":"","sources":["../../src/select/select.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAG3C,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAO/B,OAAO,EAAE,yBAAyB,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AA8G3D,MAAM,WAAW,WAAY,SAAQ,yBAAyB,CAAC,IAAI,CAAC;IAChE,kFAAkF;IAClF,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,gEAAgE;IAChE,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,IAAI,CAAC;IACrC,4EAA4E;IAC5E,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,2EAA2E;IAC3E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4EAA4E;IAC5E,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IACnB,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qBAAqB;IACrB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,cAAc,EAAE,UAAU,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxF,iFAAiF;IACjF,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,sGAAsG;IACtG,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gDAAgD;IAChD,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,8HAA8H;IAC9H,YAAY,CAAC,EAAE,IAAI,CAAC;IACpB,6CAA6C;IAC7C,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;GAKG;AACH,iBAAS,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,GAAG,CAAC,OAAO,CAkH/C;AAED,eAAe,MAAM,CAAC"}
@@ -0,0 +1,159 @@
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 { createElement as _createElement } from "react";
13
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
14
+ import { useSelect } from 'downshift';
15
+ import { useEffect, useRef } from 'react';
16
+ import ReactDOM from 'react-dom';
17
+ import { usePopper } from 'react-popper';
18
+ import styled from '@darajs/styled-components';
19
+ import Tooltip from '../tooltip/tooltip';
20
+ import { Chevron, List, ListItem, sameWidthModifier } from '../utils';
21
+ const SelectedItem = styled.div `
22
+ overflow: hidden;
23
+
24
+ /* The space available is that of the wrapper minus of the chevron */
25
+ width: calc(100% - 1rem);
26
+ margin-right: 0.5rem;
27
+
28
+ font-size: ${(props) => (props.size ? `${props.size}rem` : '1rem')};
29
+ font-weight: 300;
30
+ text-align: left;
31
+ text-overflow: ellipsis;
32
+ white-space: nowrap;
33
+ `;
34
+ const Wrapper = styled.div `
35
+ display: inline-flex;
36
+
37
+ width: 100%;
38
+ min-width: 4rem;
39
+ height: 2.5rem;
40
+
41
+ border-radius: ${(props) => (props.isOpen ? '0.25rem 0.25rem 0rem 0rem' : '0.25rem')};
42
+
43
+ ${(props) => {
44
+ if (props.isDisabled) {
45
+ return `
46
+ border: 1px solid ${props.theme.colors.grey1};
47
+ cursor: not-allowed;
48
+ `;
49
+ }
50
+ if (props.isErrored) {
51
+ return `border: 1px solid ${props.theme.colors.error};`;
52
+ }
53
+ return `
54
+ border: 1px solid ${props.isOpen ? props.theme.colors.grey3 : props.theme.colors.grey1};
55
+ :hover {
56
+ border: 1px solid ${props.theme.colors.grey3};
57
+
58
+ }
59
+ `;
60
+ }}
61
+ `;
62
+ const SelectButton = styled.button `
63
+ display: inline-flex;
64
+ flex: 1 1 auto;
65
+ align-items: center;
66
+ justify-content: space-between;
67
+
68
+ width: 100%;
69
+ height: 100%;
70
+ padding: 0 0.5rem 0rem 1rem;
71
+
72
+ font-size: 1rem;
73
+ color: ${(props) => props.theme.colors.text};
74
+
75
+ background-color: ${(props) => props.theme.colors.grey1};
76
+ border: none;
77
+ border-radius: ${(props) => (props.isOpen ? '0.25rem 0.25rem 0rem 0rem' : '0.25rem')};
78
+ outline: 0;
79
+
80
+ :not(:enabled) {
81
+ cursor: not-allowed;
82
+ }
83
+
84
+ :disabled {
85
+ color: ${(props) => props.theme.colors.grey2};
86
+ background-color: ${(props) => props.theme.colors.grey1};
87
+
88
+ svg {
89
+ color: ${(props) => props.theme.colors.grey2};
90
+ }
91
+ }
92
+
93
+ :hover:enabled {
94
+ background-color: ${(props) => props.theme.colors.grey2};
95
+ }
96
+
97
+ svg {
98
+ width: 1rem !important;
99
+ height: 0.8rem;
100
+ }
101
+ `;
102
+ const DropdownList = styled(List) `
103
+ margin-left: -1px;
104
+ border-radius: 0px 0px 0.25rem 0.25rem;
105
+ outline: 0;
106
+ box-shadow: ${(props) => props.theme.shadow.light};
107
+ `;
108
+ /**
109
+ * A single select dropdown component that has no search capability, accepts a list of items to select from and an
110
+ * onSelect handler to listen for changes in the selection
111
+ *
112
+ * @param {SelectProps} props - the props of the component
113
+ */
114
+ function Select(props) {
115
+ var _a, _b, _c, _d, _e, _f;
116
+ const referenceElement = useRef(null);
117
+ const popperElement = useRef(null);
118
+ const { styles, attributes, update } = usePopper(referenceElement.current, popperElement.current, {
119
+ modifiers: props.applySameWidthModifier === false ? [] : [sameWidthModifier],
120
+ placement: props.placement || 'bottom-start',
121
+ });
122
+ const { isOpen, selectedItem, getToggleButtonProps, getMenuProps, highlightedIndex, getItemProps } = useSelect(Object.assign({ initialIsOpen: props.initialIsOpen, initialSelectedItem: props.initialValue, itemToString: (item) => item.label, items: props.items, onSelectedItemChange: (changes) => {
123
+ var _a;
124
+ const selected = changes.selectedItem;
125
+ (_a = props.onSelect) === null || _a === void 0 ? void 0 : _a.call(props, selected);
126
+ } }, ('selectedItem' in props && { selectedItem: props.selectedItem })));
127
+ // After the dropdown is opened, trigger an update of it's position, so it positions correctly.
128
+ useEffect(() => {
129
+ if (isOpen && update) {
130
+ update();
131
+ }
132
+ }, [isOpen, update]);
133
+ // Both downshift and popper want a ref to the reference element and popper element, the following blocks combine
134
+ // these refs into a single function that can be applied to the elements
135
+ const buttonProps = getToggleButtonProps({ disabled: props.disabled });
136
+ const setButtonRef = buttonProps.ref;
137
+ delete buttonProps.ref;
138
+ const setButtonReference = (value) => {
139
+ setButtonRef(value);
140
+ referenceElement.current = value;
141
+ };
142
+ const menuProps = getMenuProps();
143
+ const setMenuRef = menuProps.ref;
144
+ delete menuProps.ref;
145
+ const setMenuReference = (value) => {
146
+ var _a;
147
+ setMenuRef(value);
148
+ popperElement.current = value;
149
+ (_a = props.dropdownRef) === null || _a === void 0 ? void 0 : _a.call(props, value);
150
+ };
151
+ return (_jsx(Tooltip, { content: props.errorMsg, disabled: !props.errorMsg, styling: "error", children: _jsxs(Wrapper, { className: props.className, isDisabled: props.disabled, isErrored: !!props.errorMsg, isOpen: isOpen, onClick: props.onClick, style: props.style, children: [_jsxs(SelectButton, Object.assign({ disabled: props.disabled, isOpen: isOpen }, buttonProps, { ref: setButtonReference, type: "button", children: [_jsx(SelectedItem, { size: props.size, children: (_b = (_a = (selectedItem === null ? props.placeholder : selectedItem === null || selectedItem === void 0 ? void 0 : selectedItem.label)) !== null && _a !== void 0 ? _a : props.placeholder) !== null && _b !== void 0 ? _b : 'Select' }), _jsx(Chevron, { disabled: props.disabled, isOpen: isOpen })] })), ReactDOM.createPortal(_jsx(DropdownList, Object.assign({}, menuProps, attributes.popper, { className: `${(_c = menuProps === null || menuProps === void 0 ? void 0 : menuProps.className) !== null && _c !== void 0 ? _c : ''} ${(_e = (_d = attributes === null || attributes === void 0 ? void 0 : attributes.popper) === null || _d === void 0 ? void 0 : _d.className) !== null && _e !== void 0 ? _e : ''} ${props.itemClass}`, isOpen: isOpen, maxItems: props.maxItems, ref: setMenuReference, style: Object.assign(Object.assign({}, styles.popper), { width: props.applySameWidthModifier === false
152
+ ? undefined
153
+ : parseFloat((_f = styles.popper) === null || _f === void 0 ? void 0 : _f.width) + 2, zIndex: 9999 }), children: props.items.map((item, index) => {
154
+ const _a = getItemProps({ index, item }), { itemClassName } = _a, itemProps = __rest(_a, ["itemClassName"]);
155
+ return (_createElement(ListItem, Object.assign({}, itemProps, { className: `${itemClassName} ${props.itemClass}`, hovered: index === highlightedIndex, key: `item-${index}`, size: props.size, title: item.label }), item.label));
156
+ }) })), document.body)] }) }));
157
+ }
158
+ export default Select;
159
+ //# sourceMappingURL=select.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"select.js","sourceRoot":"","sources":["../../src/select/select.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
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 { FunctionComponent } from 'react';
18
+ interface SliderInputsProps {
19
+ /** The domain defines the range of possible values that the slider can take */
20
+ domain: [number, number];
21
+ /** The error message callback for inputs when value is out of domain range */
22
+ getErrorMsg: (value: number, index: number) => string;
23
+ /** Slider Values state setter */
24
+ setSliderValues: React.Dispatch<React.SetStateAction<number[]>>;
25
+ /** Slider Values */
26
+ sliderValues: number[];
27
+ }
28
+ /**
29
+ * The SliderInputs component displays the actual input values of the slider in a horizontal scrollable view
30
+ * that can be edited and have the changes reflected on the slider.
31
+ *
32
+ * @param {SliderInputsProps} props - the props for the component
33
+ */
34
+ declare const SliderInputs: FunctionComponent<SliderInputsProps>;
35
+ export default SliderInputs;
36
+ //# sourceMappingURL=slider-inputs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slider-inputs.d.ts","sourceRoot":"","sources":["../../src/slider/slider-inputs.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAAE,iBAAiB,EAAuB,MAAM,OAAO,CAAC;AAgD/D,UAAU,iBAAiB;IACvB,+EAA+E;IAC/E,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzB,8EAA8E;IAC9E,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACtD,iCAAiC;IACjC,eAAe,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAChE,oBAAoB;IACpB,YAAY,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED;;;;;GAKG;AACH,QAAA,MAAM,YAAY,EAAE,iBAAiB,CAAC,iBAAiB,CA0CtD,CAAC;AAEF,eAAe,YAAY,CAAC"}
@@ -0,0 +1,85 @@
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 { useCallback, useRef } from 'react';
19
+ import styled from '@darajs/styled-components';
20
+ import { useIntersectionObserver } from '@darajs/ui-utils';
21
+ import NumericInput from '../numeric-input/numeric-input';
22
+ const InputWrapper = styled.div `
23
+ position: relative;
24
+ display: flex;
25
+ flex: 1 1 auto;
26
+ height: 3rem;
27
+ div {
28
+ flex: 1 1 auto;
29
+ }
30
+
31
+ input {
32
+ height: 100%;
33
+
34
+ ::before {
35
+ content: ' ';
36
+
37
+ position: sticky;
38
+ top: 0;
39
+ left: 0;
40
+
41
+ width: ${(props) => (!props.firstInputVisible ? '8px' : 0)};
42
+ height: 2.5rem;
43
+ }
44
+
45
+ ::after {
46
+ content: '';
47
+
48
+ position: sticky;
49
+ top: 0;
50
+ right: 0;
51
+
52
+ width: ${(props) => (!props.lastInputVisible ? '8px' : 0)};
53
+ height: 2.5rem;
54
+ }
55
+ }
56
+ `;
57
+ /**
58
+ * The SliderInputs component displays the actual input values of the slider in a horizontal scrollable view
59
+ * that can be edited and have the changes reflected on the slider.
60
+ *
61
+ * @param {SliderInputsProps} props - the props for the component
62
+ */
63
+ const SliderInputs = ({ getErrorMsg, sliderValues, setSliderValues, domain, }) => {
64
+ const firstInputRef = useRef();
65
+ const lastInputRef = useRef();
66
+ const firstInputVisible = useIntersectionObserver(firstInputRef, '0px', 0.5);
67
+ const lastInputVisible = useIntersectionObserver(lastInputRef, '0px', 0.5);
68
+ const onInputChange = useCallback((value, index) => {
69
+ setSliderValues((currSliderValues) => {
70
+ const updatedValues = [...currSliderValues];
71
+ updatedValues[index] = Number.isNaN(value) ? domain[0] : value;
72
+ return updatedValues;
73
+ });
74
+ }, [domain, setSliderValues]);
75
+ return (_jsx(InputWrapper, { firstInputVisible: firstInputVisible, lastInputVisible: lastInputVisible, children: sliderValues.map((value, index) => {
76
+ let inputRef = null;
77
+ if (index === 0)
78
+ inputRef = firstInputRef;
79
+ if (index === sliderValues.length - 1)
80
+ inputRef = lastInputRef;
81
+ return (_jsx("div", { ref: inputRef, children: _jsx(NumericInput, { errorMsg: getErrorMsg(value, index), onChange: (val) => onInputChange(val, index), style: { height: '2rem', margin: '0.25rem 0.5rem' }, value: value }) }, index));
82
+ }) }));
83
+ };
84
+ export default SliderInputs;
85
+ //# sourceMappingURL=slider-inputs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slider-inputs.js","sourceRoot":"","sources":["../../src/slider/slider-inputs.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAAqB,WAAW,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAE/D,OAAO,MAAM,MAAM,2BAA2B,CAAC;AAC/C,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAE3D,OAAO,YAAY,MAAM,gCAAgC,CAAC;AAO1D,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAmB;;;;;;;;;;;;;;;;;;;qBAmB7B,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;;;;;;;;;;;qBAWjD,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;;;;CAIpE,CAAC;AAaF;;;;;GAKG;AACH,MAAM,YAAY,GAAyC,CAAC,EACxD,WAAW,EACX,YAAY,EACZ,eAAe,EACf,MAAM,GACT,EAAe,EAAE;IACd,MAAM,aAAa,GAAG,MAAM,EAAE,CAAC;IAC/B,MAAM,YAAY,GAAG,MAAM,EAAE,CAAC;IAE9B,MAAM,iBAAiB,GAAG,uBAAuB,CAAC,aAAa,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;IAC7E,MAAM,gBAAgB,GAAG,uBAAuB,CAAC,YAAY,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;IAE3E,MAAM,aAAa,GAAG,WAAW,CAC7B,CAAC,KAAa,EAAE,KAAa,EAAQ,EAAE;QACnC,eAAe,CAAC,CAAC,gBAAgB,EAAE,EAAE;YACjC,MAAM,aAAa,GAAG,CAAC,GAAG,gBAAgB,CAAC,CAAC;YAC5C,aAAa,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YAC/D,OAAO,aAAa,CAAC;QACzB,CAAC,CAAC,CAAC;IACP,CAAC,EACD,CAAC,MAAM,EAAE,eAAe,CAAC,CAC5B,CAAC;IAEF,OAAO,CACH,KAAC,YAAY,IAAC,iBAAiB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,gBAAgB,YACjF,YAAY,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YAC/B,IAAI,QAAQ,GAAG,IAAI,CAAC;YACpB,IAAI,KAAK,KAAK,CAAC;gBAAE,QAAQ,GAAG,aAAa,CAAC;YAC1C,IAAI,KAAK,KAAK,YAAY,CAAC,MAAM,GAAG,CAAC;gBAAE,QAAQ,GAAG,YAAY,CAAC;YAC/D,OAAO,CACH,cAAiB,GAAG,EAAE,QAAQ,YAC1B,KAAC,YAAY,IACT,QAAQ,EAAE,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,EACnC,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,aAAa,CAAC,GAAG,EAAE,KAAK,CAAC,EAC5C,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,EACnD,KAAK,EAAE,KAAK,GACd,IANI,KAAK,CAOT,CACT,CAAC;QACN,CAAC,CAAC,GACS,CAClB,CAAC;AACN,CAAC,CAAC;AAEF,eAAe,YAAY,CAAC"}
@@ -0,0 +1,53 @@
1
+ import { InteractiveComponentProps } from '../types';
2
+ /**
3
+ * Compute what step should be used for the given domain difference
4
+ *
5
+ * @param difference difference
6
+ */
7
+ export declare function computeStep(difference: number): number;
8
+ export interface BaseSliderProps<T> extends InteractiveComponentProps<Array<number>> {
9
+ /** An optional flag to disable the input alternative switch render, its false by default */
10
+ disableInputAlternative?: boolean;
11
+ /** The domain defines the range of possible values that the slider can take */
12
+ domain: [number, number];
13
+ /** The getValueLabel can be used to map a numeric value to something else when displayed in the UI */
14
+ getValueLabel?: (value: number) => T;
15
+ /** An optional onChange handler that will be called when the current value of any handle changes */
16
+ onChange?: (values: Array<T>) => void | Promise<void>;
17
+ /** The step size for changes in the slider */
18
+ step?: number;
19
+ /**
20
+ * An optional parameter to control the number of ticks, alternatively an array can be passed to specify a specific
21
+ * set of ticks to display
22
+ */
23
+ ticks?: Array<number> | number;
24
+ /** An array of track labels that will be shown above the tracks */
25
+ trackLabels?: Array<string>;
26
+ /** Whether a track should be drawn from the right most handle to the end of the rail */
27
+ trackToEnd?: boolean;
28
+ /** Whether a track should be drawn from the left most handle to the start of the rail */
29
+ trackToStart?: boolean;
30
+ /** The starting values for the handles, the number of values === the number of handles created */
31
+ values?: Array<number>;
32
+ }
33
+ /**
34
+ * A simple numeric slider, essentially the same as BaseSlider
35
+ *
36
+ * @param props - the component props
37
+ */
38
+ export declare function Slider(props: BaseSliderProps<number>): JSX.Element;
39
+ export interface CategoricalSliderProps extends Omit<BaseSliderProps<string>, 'domain' | 'initialValue' | 'disableInputAlternative'> {
40
+ /** The set of string values to have as options on the slider */
41
+ domain: Array<string>;
42
+ /** the initialValue of the slider */
43
+ initialValue?: Array<string>;
44
+ }
45
+ /**
46
+ * The Categorical slider component accepts an array of string values to use on the slider, e.g.
47
+ *
48
+ * domain = ['low', 'med', 'high']
49
+ *
50
+ * @param {BaseSliderProps<string>} props - the component props
51
+ */
52
+ export declare function CategoricalSlider(props: CategoricalSliderProps): JSX.Element;
53
+ //# sourceMappingURL=slider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slider.d.ts","sourceRoot":"","sources":["../../src/slider/slider.tsx"],"names":[],"mappings":"AA0BA,OAAO,EAAE,yBAAyB,EAAE,MAAM,UAAU,CAAC;AAGrD;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAYtD;AAgJD,MAAM,WAAW,eAAe,CAAC,CAAC,CAAE,SAAQ,yBAAyB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAChF,4FAA4F;IAC5F,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,+EAA+E;IAC/E,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzB,sGAAsG;IACtG,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,CAAC,CAAC;IACrC,oGAAoG;IACpG,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtD,8CAA8C;IAC9C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;IAC/B,mEAAmE;IACnE,WAAW,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAC5B,wFAAwF;IACxF,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,yFAAyF;IACzF,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,kGAAkG;IAClG,MAAM,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;CAC1B;AAkOD;;;;GAIG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,eAAe,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,OAAO,CAQlE;AAED,MAAM,WAAW,sBACb,SAAQ,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,QAAQ,GAAG,cAAc,GAAG,yBAAyB,CAAC;IAC5F,gEAAgE;IAChE,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACtB,qCAAqC;IACrC,YAAY,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;CAChC;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,sBAAsB,GAAG,GAAG,CAAC,OAAO,CAe5E"}