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