@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.
Files changed (278) hide show
  1. package/LICENSE +201 -0
  2. package/dist/accordion/accordion-item.d.ts +24 -0
  3. package/dist/accordion/accordion-item.d.ts.map +1 -0
  4. package/dist/accordion/accordion-item.js +92 -0
  5. package/dist/accordion/accordion-item.js.map +1 -0
  6. package/dist/accordion/accordion.d.ts +32 -0
  7. package/dist/accordion/accordion.d.ts.map +1 -0
  8. package/dist/accordion/accordion.js +87 -0
  9. package/dist/accordion/accordion.js.map +1 -0
  10. package/dist/badge/badge.d.ts +20 -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 +124 -0
  21. package/dist/button-bar/button-bar.js.map +1 -0
  22. package/dist/carousel/carousel.d.ts +23 -0
  23. package/dist/carousel/carousel.d.ts.map +1 -0
  24. package/dist/carousel/carousel.js +178 -0
  25. package/dist/carousel/carousel.js.map +1 -0
  26. package/dist/chat/chat.d.ts +28 -0
  27. package/dist/chat/chat.d.ts.map +1 -0
  28. package/dist/chat/chat.js +182 -0
  29. package/dist/chat/chat.js.map +1 -0
  30. package/dist/chat/message.d.ts +28 -0
  31. package/dist/chat/message.d.ts.map +1 -0
  32. package/dist/chat/message.js +220 -0
  33. package/dist/chat/message.js.map +1 -0
  34. package/dist/checkbox/checkbox-group.d.ts +35 -0
  35. package/dist/checkbox/checkbox-group.d.ts.map +1 -0
  36. package/dist/checkbox/checkbox-group.js +116 -0
  37. package/dist/checkbox/checkbox-group.js.map +1 -0
  38. package/dist/checkbox/checkbox.d.ts +27 -0
  39. package/dist/checkbox/checkbox.d.ts.map +1 -0
  40. package/dist/checkbox/checkbox.js +164 -0
  41. package/dist/checkbox/checkbox.js.map +1 -0
  42. package/dist/checkbox/tri-state-checkbox.d.ts +22 -0
  43. package/dist/checkbox/tri-state-checkbox.d.ts.map +1 -0
  44. package/dist/checkbox/tri-state-checkbox.js +87 -0
  45. package/dist/checkbox/tri-state-checkbox.js.map +1 -0
  46. package/dist/code-viewer/code-viewer.d.ts +31 -0
  47. package/dist/code-viewer/code-viewer.d.ts.map +1 -0
  48. package/dist/code-viewer/code-viewer.js +115 -0
  49. package/dist/code-viewer/code-viewer.js.map +1 -0
  50. package/dist/combo-box/combo-box.d.ts +39 -0
  51. package/dist/combo-box/combo-box.d.ts.map +1 -0
  52. package/dist/combo-box/combo-box.js +176 -0
  53. package/dist/combo-box/combo-box.js.map +1 -0
  54. package/dist/component-select-list/component-select-list.d.ts +27 -0
  55. package/dist/component-select-list/component-select-list.d.ts.map +1 -0
  56. package/dist/component-select-list/component-select-list.js +131 -0
  57. package/dist/component-select-list/component-select-list.js.map +1 -0
  58. package/dist/constants.d.ts +33 -0
  59. package/dist/constants.d.ts.map +1 -0
  60. package/dist/constants.js +47 -0
  61. package/dist/constants.js.map +1 -0
  62. package/dist/context-menu/context-menu.d.ts +24 -0
  63. package/dist/context-menu/context-menu.d.ts.map +1 -0
  64. package/dist/context-menu/context-menu.js +116 -0
  65. package/dist/context-menu/context-menu.js.map +1 -0
  66. package/dist/datepicker/datepicker-select.d.ts +48 -0
  67. package/dist/datepicker/datepicker-select.d.ts.map +1 -0
  68. package/dist/datepicker/datepicker-select.js +219 -0
  69. package/dist/datepicker/datepicker-select.js.map +1 -0
  70. package/dist/datepicker/datepicker.d.ts +56 -0
  71. package/dist/datepicker/datepicker.d.ts.map +1 -0
  72. package/dist/datepicker/datepicker.js +669 -0
  73. package/dist/datepicker/datepicker.js.map +1 -0
  74. package/dist/dropzone/dropzone.d.ts +21 -0
  75. package/dist/dropzone/dropzone.d.ts.map +1 -0
  76. package/dist/dropzone/dropzone.js +80 -0
  77. package/dist/dropzone/dropzone.js.map +1 -0
  78. package/dist/error-boundary/error-boundary.d.ts +33 -0
  79. package/dist/error-boundary/error-boundary.d.ts.map +1 -0
  80. package/dist/error-boundary/error-boundary.js +72 -0
  81. package/dist/error-boundary/error-boundary.js.map +1 -0
  82. package/dist/filter/categorical-filter.d.ts +26 -0
  83. package/dist/filter/categorical-filter.d.ts.map +1 -0
  84. package/dist/filter/categorical-filter.js +153 -0
  85. package/dist/filter/categorical-filter.js.map +1 -0
  86. package/dist/filter/datetime-filter.d.ts +28 -0
  87. package/dist/filter/datetime-filter.d.ts.map +1 -0
  88. package/dist/filter/datetime-filter.js +174 -0
  89. package/dist/filter/datetime-filter.js.map +1 -0
  90. package/dist/filter/numeric-filter.d.ts +24 -0
  91. package/dist/filter/numeric-filter.d.ts.map +1 -0
  92. package/dist/filter/numeric-filter.js +148 -0
  93. package/dist/filter/numeric-filter.js.map +1 -0
  94. package/dist/hierarchy-selector/hierarchy-selector.d.ts +31 -0
  95. package/dist/hierarchy-selector/hierarchy-selector.d.ts.map +1 -0
  96. package/dist/hierarchy-selector/hierarchy-selector.js +65 -0
  97. package/dist/hierarchy-selector/hierarchy-selector.js.map +1 -0
  98. package/dist/hierarchy-selector/node/branch.d.ts +47 -0
  99. package/dist/hierarchy-selector/node/branch.d.ts.map +1 -0
  100. package/dist/hierarchy-selector/node/branch.js +132 -0
  101. package/dist/hierarchy-selector/node/branch.js.map +1 -0
  102. package/dist/index.d.ts +57 -0
  103. package/dist/index.d.ts.map +1 -0
  104. package/dist/index.js +55 -0
  105. package/dist/index.js.map +1 -0
  106. package/dist/input/input.d.ts +44 -0
  107. package/dist/input/input.d.ts.map +1 -0
  108. package/dist/input/input.js +91 -0
  109. package/dist/input/input.js.map +1 -0
  110. package/dist/jest-setup.d.ts +18 -0
  111. package/dist/jest-setup.d.ts.map +1 -0
  112. package/dist/jest-setup.js +18 -0
  113. package/dist/jest-setup.js.map +1 -0
  114. package/dist/markdown/markdown.d.ts +18 -0
  115. package/dist/markdown/markdown.d.ts.map +1 -0
  116. package/dist/markdown/markdown.js +356 -0
  117. package/dist/markdown/markdown.js.map +1 -0
  118. package/dist/modal/modal.d.ts +37 -0
  119. package/dist/modal/modal.d.ts.map +1 -0
  120. package/dist/modal/modal.js +121 -0
  121. package/dist/modal/modal.js.map +1 -0
  122. package/dist/multiselect/multiselect.d.ts +31 -0
  123. package/dist/multiselect/multiselect.d.ts.map +1 -0
  124. package/dist/multiselect/multiselect.js +231 -0
  125. package/dist/multiselect/multiselect.js.map +1 -0
  126. package/dist/numeric-input/input-stepper.d.ts +33 -0
  127. package/dist/numeric-input/input-stepper.d.ts.map +1 -0
  128. package/dist/numeric-input/input-stepper.js +54 -0
  129. package/dist/numeric-input/input-stepper.js.map +1 -0
  130. package/dist/numeric-input/numeric-input.d.ts +42 -0
  131. package/dist/numeric-input/numeric-input.d.ts.map +1 -0
  132. package/dist/numeric-input/numeric-input.js +234 -0
  133. package/dist/numeric-input/numeric-input.js.map +1 -0
  134. package/dist/progress-bar/progress-bar.d.ts +23 -0
  135. package/dist/progress-bar/progress-bar.d.ts.map +1 -0
  136. package/dist/progress-bar/progress-bar.js +90 -0
  137. package/dist/progress-bar/progress-bar.js.map +1 -0
  138. package/dist/radio/radio-group.d.ts +19 -0
  139. package/dist/radio/radio-group.d.ts.map +1 -0
  140. package/dist/radio/radio-group.js +160 -0
  141. package/dist/radio/radio-group.js.map +1 -0
  142. package/dist/search-bar/search-bar.d.ts +34 -0
  143. package/dist/search-bar/search-bar.d.ts.map +1 -0
  144. package/dist/search-bar/search-bar.js +39 -0
  145. package/dist/search-bar/search-bar.js.map +1 -0
  146. package/dist/sectioned-list/sectioned-list.d.ts +29 -0
  147. package/dist/sectioned-list/sectioned-list.d.ts.map +1 -0
  148. package/dist/sectioned-list/sectioned-list.js +205 -0
  149. package/dist/sectioned-list/sectioned-list.js.map +1 -0
  150. package/dist/select/select.d.ts +54 -0
  151. package/dist/select/select.d.ts.map +1 -0
  152. package/dist/select/select.js +143 -0
  153. package/dist/select/select.js.map +1 -0
  154. package/dist/shared/chevron-button.d.ts +13 -0
  155. package/dist/shared/chevron-button.d.ts.map +1 -0
  156. package/dist/shared/chevron-button.js +35 -0
  157. package/dist/shared/chevron-button.js.map +1 -0
  158. package/dist/shared/dropdown-list.d.ts +34 -0
  159. package/dist/shared/dropdown-list.d.ts.map +1 -0
  160. package/dist/shared/dropdown-list.js +33 -0
  161. package/dist/shared/dropdown-list.js.map +1 -0
  162. package/dist/shared/list-item.d.ts +35 -0
  163. package/dist/shared/list-item.d.ts.map +1 -0
  164. package/dist/shared/list-item.js +69 -0
  165. package/dist/shared/list-item.js.map +1 -0
  166. package/dist/slider/slider-inputs.d.ts +36 -0
  167. package/dist/slider/slider-inputs.d.ts.map +1 -0
  168. package/dist/slider/slider-inputs.js +88 -0
  169. package/dist/slider/slider-inputs.js.map +1 -0
  170. package/dist/slider/slider.d.ts +53 -0
  171. package/dist/slider/slider.d.ts.map +1 -0
  172. package/dist/slider/slider.js +273 -0
  173. package/dist/slider/slider.js.map +1 -0
  174. package/dist/spinner/spinner.d.ts +19 -0
  175. package/dist/spinner/spinner.d.ts.map +1 -0
  176. package/dist/spinner/spinner.js +144 -0
  177. package/dist/spinner/spinner.js.map +1 -0
  178. package/dist/switch/sun-icon.d.ts +3 -0
  179. package/dist/switch/sun-icon.d.ts.map +1 -0
  180. package/dist/switch/sun-icon.js +24 -0
  181. package/dist/switch/sun-icon.js.map +1 -0
  182. package/dist/switch/switch.d.ts +16 -0
  183. package/dist/switch/switch.d.ts.map +1 -0
  184. package/dist/switch/switch.js +92 -0
  185. package/dist/switch/switch.js.map +1 -0
  186. package/dist/table/cells/action-cell.d.ts +34 -0
  187. package/dist/table/cells/action-cell.d.ts.map +1 -0
  188. package/dist/table/cells/action-cell.js +68 -0
  189. package/dist/table/cells/action-cell.js.map +1 -0
  190. package/dist/table/cells/datetime-cell.d.ts +12 -0
  191. package/dist/table/cells/datetime-cell.d.ts.map +1 -0
  192. package/dist/table/cells/datetime-cell.js +36 -0
  193. package/dist/table/cells/datetime-cell.js.map +1 -0
  194. package/dist/table/cells/edit-cell-utils.d.ts +32 -0
  195. package/dist/table/cells/edit-cell-utils.d.ts.map +1 -0
  196. package/dist/table/cells/edit-cell-utils.js +2 -0
  197. package/dist/table/cells/edit-cell-utils.js.map +1 -0
  198. package/dist/table/cells/edit-input-cell.d.ts +10 -0
  199. package/dist/table/cells/edit-input-cell.d.ts.map +1 -0
  200. package/dist/table/cells/edit-input-cell.js +61 -0
  201. package/dist/table/cells/edit-input-cell.js.map +1 -0
  202. package/dist/table/cells/edit-select-cell.d.ts +12 -0
  203. package/dist/table/cells/edit-select-cell.d.ts.map +1 -0
  204. package/dist/table/cells/edit-select-cell.js +55 -0
  205. package/dist/table/cells/edit-select-cell.js.map +1 -0
  206. package/dist/table/filters.d.ts +46 -0
  207. package/dist/table/filters.d.ts.map +1 -0
  208. package/dist/table/filters.js +226 -0
  209. package/dist/table/filters.js.map +1 -0
  210. package/dist/table/headers/select-header.d.ts +14 -0
  211. package/dist/table/headers/select-header.d.ts.map +1 -0
  212. package/dist/table/headers/select-header.js +41 -0
  213. package/dist/table/headers/select-header.js.map +1 -0
  214. package/dist/table/options-menu.d.ts +25 -0
  215. package/dist/table/options-menu.d.ts.map +1 -0
  216. package/dist/table/options-menu.js +123 -0
  217. package/dist/table/options-menu.js.map +1 -0
  218. package/dist/table/render-row.d.ts +25 -0
  219. package/dist/table/render-row.d.ts.map +1 -0
  220. package/dist/table/render-row.js +163 -0
  221. package/dist/table/render-row.js.map +1 -0
  222. package/dist/table/table.d.ts +95 -0
  223. package/dist/table/table.d.ts.map +1 -0
  224. package/dist/table/table.js +422 -0
  225. package/dist/table/table.js.map +1 -0
  226. package/dist/table/types.d.ts +30 -0
  227. package/dist/table/types.d.ts.map +1 -0
  228. package/dist/table/types.js +2 -0
  229. package/dist/table/types.js.map +1 -0
  230. package/dist/tabs/tabs.d.ts +22 -0
  231. package/dist/tabs/tabs.d.ts.map +1 -0
  232. package/dist/tabs/tabs.js +91 -0
  233. package/dist/tabs/tabs.js.map +1 -0
  234. package/dist/textarea/textarea.d.ts +47 -0
  235. package/dist/textarea/textarea.d.ts.map +1 -0
  236. package/dist/textarea/textarea.js +121 -0
  237. package/dist/textarea/textarea.js.map +1 -0
  238. package/dist/tooltip/tooltip.d.ts +48 -0
  239. package/dist/tooltip/tooltip.d.ts.map +1 -0
  240. package/dist/tooltip/tooltip.js +116 -0
  241. package/dist/tooltip/tooltip.js.map +1 -0
  242. package/dist/types.d.ts +94 -0
  243. package/dist/types.d.ts.map +1 -0
  244. package/dist/types.js +2 -0
  245. package/dist/types.js.map +1 -0
  246. package/dist/utils/chevron.d.ts +34 -0
  247. package/dist/utils/chevron.d.ts.map +1 -0
  248. package/dist/utils/chevron.js +38 -0
  249. package/dist/utils/chevron.js.map +1 -0
  250. package/dist/utils/index.d.ts +22 -0
  251. package/dist/utils/index.d.ts.map +1 -0
  252. package/dist/utils/index.js +22 -0
  253. package/dist/utils/index.js.map +1 -0
  254. package/dist/utils/label.d.ts +3 -0
  255. package/dist/utils/label.d.ts.map +1 -0
  256. package/dist/utils/label.js +24 -0
  257. package/dist/utils/label.js.map +1 -0
  258. package/dist/utils/list-styles.d.ts +8 -0
  259. package/dist/utils/list-styles.d.ts.map +1 -0
  260. package/dist/utils/list-styles.js +43 -0
  261. package/dist/utils/list-styles.js.map +1 -0
  262. package/dist/utils/match-width-to-reference.d.ts +24 -0
  263. package/dist/utils/match-width-to-reference.d.ts.map +1 -0
  264. package/dist/utils/match-width-to-reference.js +30 -0
  265. package/dist/utils/match-width-to-reference.js.map +1 -0
  266. package/dist/utils/syncKbdHighlightIdx.d.ts +23 -0
  267. package/dist/utils/syncKbdHighlightIdx.d.ts.map +1 -0
  268. package/dist/utils/syncKbdHighlightIdx.js +41 -0
  269. package/dist/utils/syncKbdHighlightIdx.js.map +1 -0
  270. package/dist/utils/use-infinite-loader.d.ts +32 -0
  271. package/dist/utils/use-infinite-loader.d.ts.map +1 -0
  272. package/dist/utils/use-infinite-loader.js +119 -0
  273. package/dist/utils/use-infinite-loader.js.map +1 -0
  274. package/dist/utils/use-on-click-outside.d.ts +3 -0
  275. package/dist/utils/use-on-click-outside.d.ts.map +1 -0
  276. package/dist/utils/use-on-click-outside.js +36 -0
  277. package/dist/utils/use-on-click-outside.js.map +1 -0
  278. package/package.json +106 -0
@@ -0,0 +1,182 @@
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';
19
+ import { nanoid } from 'nanoid';
20
+ import * as React from 'react';
21
+ import styled from '@darajs/styled-components';
22
+ import { PaperPlane, Xmark } from '@darajs/ui-icons';
23
+ import Button from '../button/button';
24
+ import TextArea from '../textarea/textarea';
25
+ import { default as MessageComponent } from './message';
26
+ const ChatWrapper = styled.div `
27
+ overflow-y: auto;
28
+ display: flex;
29
+ flex-direction: column;
30
+ gap: 1rem;
31
+
32
+ width: ${(props) => (props.$isPopup ? '350px' : '100%')};
33
+ height: ${(props) => (props.$isPopup ? 'calc(100vh - 2rem)' : '100%')};
34
+ padding: 1.5rem;
35
+
36
+ background-color: ${(props) => (props.$isPopup ? `${props.theme.colors.background}e6` : 'inherit')};
37
+ border-radius: ${(props) => (props.$isPopup ? '0.4rem' : 0)};
38
+ box-shadow: ${(props) => props.theme.shadow.medium};
39
+ `;
40
+ const ReplyWrapper = styled.div `
41
+ display: flex;
42
+ gap: 0.5rem;
43
+ align-items: end;
44
+ margin-top: auto;
45
+ `;
46
+ const ReplyButtons = styled.div `
47
+ display: flex;
48
+ gap: 1rem;
49
+ align-items: end;
50
+ `;
51
+ const ChatBody = styled.div `
52
+ overflow-y: auto;
53
+ display: flex;
54
+ flex-direction: column;
55
+ gap: 1rem;
56
+
57
+ max-height: calc(100% - 6.225rem);
58
+ margin: -0.25rem;
59
+ padding: 0.25rem;
60
+ `;
61
+ const ChatTop = styled.div `
62
+ display: flex;
63
+ align-items: center;
64
+ justify-content: space-between;
65
+
66
+ width: 100%;
67
+ height: 1.625rem;
68
+
69
+ font-size: 1.2rem;
70
+ `;
71
+ const CloseIcon = styled(Xmark) `
72
+ height: 1.2rem;
73
+ color: ${(props) => props.theme.colors.grey4};
74
+
75
+ :hover {
76
+ color: ${(props) => props.theme.colors.grey5};
77
+ }
78
+
79
+ :active {
80
+ color: ${(props) => props.theme.colors.grey6};
81
+ }
82
+ `;
83
+ /**
84
+ * A function to scroll to the bottom of the chat so that the latest message is visible
85
+ */
86
+ function scrollToBottom(node) {
87
+ setTimeout(() => {
88
+ if (node) {
89
+ node.scrollTop = node.scrollHeight;
90
+ }
91
+ }, 100);
92
+ }
93
+ /**
94
+ * A function to check if the user wrote the message
95
+ *
96
+ * @param message - the message to check
97
+ * @param user - the user to check against
98
+ */
99
+ function didUserWriteMessage(message, user) {
100
+ var _a;
101
+ if (user === null || user === void 0 ? void 0 : user.id) {
102
+ return ((_a = message.user) === null || _a === void 0 ? void 0 : _a.id) === user.id;
103
+ }
104
+ return message.user.name === user.name;
105
+ }
106
+ /**
107
+ * A chat component
108
+ *
109
+ * @param {ChatProps} props - the component props
110
+ */
111
+ function Chat(props) {
112
+ var _a, _b, _c;
113
+ const [reply, setReply] = React.useState('');
114
+ const [localMessages, setLocalMessages] = React.useState((_a = props.value) !== null && _a !== void 0 ? _a : []);
115
+ const chatBodyRef = React.useRef(null);
116
+ const localMessagesRef = React.useRef(localMessages);
117
+ React.useLayoutEffect(() => {
118
+ localMessagesRef.current = localMessages;
119
+ }, [localMessages]);
120
+ React.useEffect(() => {
121
+ var _a;
122
+ if (!isEqual(props.value, localMessagesRef.current)) {
123
+ setLocalMessages((_a = props.value) !== null && _a !== void 0 ? _a : []);
124
+ scrollToBottom(chatBodyRef === null || chatBodyRef === void 0 ? void 0 : chatBodyRef.current);
125
+ }
126
+ }, [props.value]);
127
+ const onChangeReply = (text) => {
128
+ // Prevents the message starting with a newline
129
+ if (!text.startsWith('\n')) {
130
+ setReply(text);
131
+ }
132
+ };
133
+ const onSubmitMessage = () => {
134
+ var _a;
135
+ if (reply) {
136
+ // Create a new message
137
+ const timestamp = new Date().toISOString();
138
+ const newMessage = {
139
+ id: nanoid(),
140
+ // remove any /n and trailing whitespace
141
+ message: reply.trim(),
142
+ created_at: timestamp,
143
+ updated_at: timestamp,
144
+ user: props.activeUser,
145
+ };
146
+ const newMessages = [...localMessages, newMessage];
147
+ // Add the new message to the chat
148
+ (_a = props.onUpdate) === null || _a === void 0 ? void 0 : _a.call(props, newMessages);
149
+ setLocalMessages(newMessages);
150
+ // Clear the reply field and scroll to the bottom of the chat to show latest message
151
+ setReply('');
152
+ scrollToBottom(chatBodyRef === null || chatBodyRef === void 0 ? void 0 : chatBodyRef.current);
153
+ }
154
+ };
155
+ const onEditMessage = (message) => {
156
+ var _a;
157
+ // Find the message to edit and replace it with the new message
158
+ const newMessages = localMessages.map((m) => {
159
+ if (m.id === message.id) {
160
+ return message;
161
+ }
162
+ return m;
163
+ });
164
+ // Update the chat
165
+ (_a = props.onUpdate) === null || _a === void 0 ? void 0 : _a.call(props, newMessages);
166
+ setLocalMessages(newMessages);
167
+ };
168
+ const onDeleteMessage = (id) => {
169
+ var _a;
170
+ // Remove the message with the given id
171
+ const newMessages = localMessages.filter((message) => message.id !== id);
172
+ // Update the chat
173
+ (_a = props.onUpdate) === null || _a === void 0 ? void 0 : _a.call(props, newMessages);
174
+ setLocalMessages(newMessages);
175
+ };
176
+ React.useLayoutEffect(() => {
177
+ scrollToBottom(chatBodyRef === null || chatBodyRef === void 0 ? void 0 : chatBodyRef.current);
178
+ }, []);
179
+ return (_jsxs(ChatWrapper, { className: props.className, style: props.style, "$isPopup": props.isPopup, children: [_jsxs(ChatTop, { children: [_jsx("span", { children: (_b = props.chatTitle) !== null && _b !== void 0 ? _b : 'Chat' }), props.isPopup && _jsx(CloseIcon, { onClick: props.onClose, "aria-label": "Close chat" })] }), _jsxs(ChatBody, { ref: chatBodyRef, role: "log", children: [localMessages.map((message) => (_jsx(MessageComponent, { onChange: onEditMessage, onDelete: onDeleteMessage, value: message, didUserWriteMessage: didUserWriteMessage(message, props.activeUser), isEditable: !props.isHistoryReadonly }, message.id))), props.loadingComponent] }), _jsxs(ReplyWrapper, { children: [_jsx(TextArea, { onChange: onChangeReply, onComplete: onSubmitMessage, placeholder: (_c = props.placeholder) !== null && _c !== void 0 ? _c : 'Add a comment', resize: "none", maxHeight: 6, value: reply, style: { width: '100%' } }), _jsx(ReplyButtons, { children: _jsx(Button, { "aria-label": "Send", style: { height: '3.4rem' }, disabled: !!props.loadingComponent || !(reply.trim().length > 0), onClick: onSubmitMessage, children: _jsx(PaperPlane, { onClick: onSubmitMessage }) }) })] })] }));
180
+ }
181
+ export default Chat;
182
+ //# sourceMappingURL=chat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat.js","sourceRoot":"","sources":["../../src/chat/chat.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import * as React from 'react';
2
+ import { InteractiveComponentProps, Message } from '../types';
3
+ export interface MessageProps extends InteractiveComponentProps<Message> {
4
+ /** An optional onChange handler for listening to changes in the input */
5
+ onChange?: (value: Message, e?: React.SyntheticEvent<HTMLInputElement>) => void | Promise<void>;
6
+ /** An optional event listener for complete events (enter presses) */
7
+ onDelete?: (id: string) => void | Promise<void>;
8
+ /** An optional flag to determine if the message is editable */
9
+ isEditable?: boolean;
10
+ /** Flag to check if the user wrote the message */
11
+ didUserWriteMessage?: boolean;
12
+ }
13
+ /**
14
+ * A function to get the formatted timestamp to display in the submitted message
15
+ */
16
+ export declare function getFormattedTimestamp(date: string): string;
17
+ /**
18
+ * A function to porcess the text for the markdown render
19
+ */
20
+ export declare function processText(text: string): string;
21
+ /**
22
+ * A Message component that displays a message with a timestamp and allows for editing and deleting
23
+ *
24
+ * @param {MessageProps} props - the component props
25
+ */
26
+ declare function MessageComponent(props: MessageProps): JSX.Element;
27
+ export default MessageComponent;
28
+ //# sourceMappingURL=message.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../../src/chat/message.tsx"],"names":[],"mappings":"AAkBA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAS/B,OAAO,EAAE,yBAAyB,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAwH9D,MAAM,WAAW,YAAa,SAAQ,yBAAyB,CAAC,OAAO,CAAC;IACpE,yEAAyE;IACzE,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,gBAAgB,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChG,qEAAqE;IACrE,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,+DAA+D;IAC/D,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,kDAAkD;IAClD,mBAAmB,CAAC,EAAE,OAAO,CAAC;CACjC;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE1D;AAmCD;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED;;;;GAIG;AACH,iBAAS,gBAAgB,CAAC,KAAK,EAAE,YAAY,GAAG,GAAG,CAAC,OAAO,CA8G1D;AAED,eAAe,gBAAgB,CAAC"}
@@ -0,0 +1,220 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * Copyright 2024 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 { format, parseISO } from 'date-fns';
19
+ import { isEqual } from 'lodash';
20
+ import * as React from 'react';
21
+ import styled, { useTheme } from '@darajs/styled-components';
22
+ import { PenToSquare, Trash } from '@darajs/ui-icons';
23
+ import Button from '../button/button';
24
+ import Markdown from '../markdown/markdown';
25
+ import TextArea from '../textarea/textarea';
26
+ import Tooltip from '../tooltip/tooltip';
27
+ const InteractiveIcons = styled.div `
28
+ position: absolute;
29
+ top: 0.75rem;
30
+ right: 0.75rem;
31
+
32
+ display: none;
33
+ gap: 0.5rem;
34
+
35
+ padding: 0.3rem;
36
+
37
+ background-color: ${(props) => props.theme.colors.blue1};
38
+ border-radius: 0.25rem;
39
+ box-shadow: ${(props) => props.theme.shadow.medium};
40
+ `;
41
+ const MessageWrapper = styled.div `
42
+ position: relative;
43
+
44
+ display: flex;
45
+ flex-direction: column;
46
+ gap: 0.5rem;
47
+
48
+ width: 100%;
49
+ padding: 1rem;
50
+
51
+ background-color: ${(props) => props.$messageFromActiveUser ? props.theme.colors.blue2 : props.theme.colors.blue1};
52
+ border-radius: 0.25rem;
53
+ box-shadow: ${(props) => props.theme.shadow.medium};
54
+
55
+ :hover ${InteractiveIcons} {
56
+ display: flex;
57
+ }
58
+ `;
59
+ const MessageTop = styled.div `
60
+ display: flex;
61
+ justify-content: space-between;
62
+ width: 100%;
63
+ font-size: 0.875rem;
64
+ `;
65
+ const MessageTimestamp = styled.span `
66
+ font-size: 0.75rem;
67
+ color: ${(props) => props.theme.colors.grey5};
68
+ `;
69
+ const MessageBody = styled.div `
70
+ display: flex;
71
+ flex-direction: column;
72
+ gap: 0.5rem;
73
+
74
+ width: 100%;
75
+
76
+ color: ${(props) => props.theme.colors.text};
77
+ overflow-wrap: break-word;
78
+ `;
79
+ const EditedText = styled.span `
80
+ align-self: end;
81
+ font-size: 0.8rem;
82
+ color: ${(props) => props.theme.colors.grey4};
83
+ `;
84
+ const DeleteIcon = styled(Trash) `
85
+ cursor: pointer;
86
+ height: 0.8rem;
87
+ color: ${(props) => props.theme.colors.secondary};
88
+
89
+ :hover {
90
+ color: ${(props) => props.theme.colors.secondaryHover}CC;
91
+ }
92
+
93
+ :active {
94
+ color: ${(props) => props.theme.colors.secondaryDown}99;
95
+ }
96
+ `;
97
+ const EditIcon = styled(PenToSquare) `
98
+ cursor: pointer;
99
+ height: 0.8rem;
100
+ color: ${(props) => props.theme.colors.secondary};
101
+
102
+ :hover {
103
+ color: ${(props) => props.theme.colors.secondaryHover}CC;
104
+ }
105
+
106
+ :active {
107
+ color: ${(props) => props.theme.colors.secondaryDown}99;
108
+ }
109
+ `;
110
+ const EditButtons = styled.div `
111
+ display: flex;
112
+ gap: 1rem;
113
+ justify-content: flex-end;
114
+ `;
115
+ const UserInfoWrapper = styled.div `
116
+ display: flex;
117
+ gap: 0.5rem;
118
+ align-items: center;
119
+ `;
120
+ const AvatarIcon = styled.div `
121
+ display: flex;
122
+ align-items: center;
123
+ justify-content: center;
124
+
125
+ width: 2rem;
126
+ height: 2rem;
127
+
128
+ font-weight: 700;
129
+ color: white;
130
+
131
+ border-radius: 50%;
132
+ `;
133
+ /**
134
+ * A function to get the formatted timestamp to display in the submitted message
135
+ */
136
+ export function getFormattedTimestamp(date) {
137
+ return format(parseISO(date), 'HH:mm dd/MM/yyyy');
138
+ }
139
+ /**
140
+ * A function to assign a color to user token depending on their name
141
+ */
142
+ function selectColor(name, colors) {
143
+ // Convert the name to lowercase for consistency
144
+ const lowerCaseName = name.toLowerCase();
145
+ // Calculate the sum of ASCII values of the characters in the name
146
+ let asciiSum = 0;
147
+ for (const char of lowerCaseName) {
148
+ asciiSum += char.charCodeAt(0);
149
+ }
150
+ // Use the remainder to select a color
151
+ const colorIndex = asciiSum % colors.length;
152
+ return colors[colorIndex];
153
+ }
154
+ /**
155
+ * A function to get the user's initials
156
+ */
157
+ function getInitials(name) {
158
+ const parts = name.trim().split(/\s+/);
159
+ let initials = parts[0][0];
160
+ // If there's a second part, add its first character, so we only get two letter initials
161
+ if (parts.length > 1) {
162
+ initials += parts[parts.length - 1][0];
163
+ }
164
+ return initials.toUpperCase();
165
+ }
166
+ /**
167
+ * A function to porcess the text for the markdown render
168
+ */
169
+ export function processText(text) {
170
+ return text.replace(/\n/g, '\n\n');
171
+ }
172
+ /**
173
+ * A Message component that displays a message with a timestamp and allows for editing and deleting
174
+ *
175
+ * @param {MessageProps} props - the component props
176
+ */
177
+ function MessageComponent(props) {
178
+ var _a, _b;
179
+ const theme = useTheme();
180
+ const [editMode, setEditMode] = React.useState(false);
181
+ const [editMessage, setEditMessage] = React.useState(props.value.message);
182
+ const [localMessage, setLocalMessage] = React.useState(props.value);
183
+ if (props.value && !isEqual(props.value, localMessage)) {
184
+ setLocalMessage(props.value);
185
+ }
186
+ // List of colors for user token to pick from
187
+ const tokenColors = [
188
+ theme.colors.secondary,
189
+ theme.colors.violet,
190
+ theme.colors.turquoise,
191
+ theme.colors.purple,
192
+ theme.colors.teal,
193
+ theme.colors.orange,
194
+ theme.colors.plum,
195
+ ];
196
+ const onAccept = () => {
197
+ // if the message hasn't changed, just close the edit mode
198
+ if (editMessage === localMessage.message) {
199
+ setEditMode(false);
200
+ return;
201
+ }
202
+ // remove any /n and trailing whitespace
203
+ const newMessage = Object.assign(Object.assign({}, localMessage), { message: editMessage.trim(), updated_at: new Date().toISOString() });
204
+ props === null || props === void 0 ? void 0 : props.onChange(newMessage);
205
+ setLocalMessage(newMessage);
206
+ // reset the textarea message to the message without the /n and trailing whitespace
207
+ setEditMessage(newMessage.message);
208
+ setEditMode(false);
209
+ };
210
+ const onDelete = () => {
211
+ if (props.onDelete) {
212
+ props.onDelete(props.value.id);
213
+ }
214
+ };
215
+ return (_jsxs(MessageWrapper, { role: "listitem", className: props.className, style: props.style, "$messageFromActiveUser": props.didUserWriteMessage, children: [_jsxs(MessageTop, { children: [_jsxs(UserInfoWrapper, { children: [_jsx(AvatarIcon, { "aria-hidden": "true", style: {
216
+ backgroundColor: (_a = localMessage.user.color) !== null && _a !== void 0 ? _a : selectColor(localMessage.user.name, tokenColors),
217
+ }, children: (_b = localMessage.user.bubbleContent) !== null && _b !== void 0 ? _b : getInitials(localMessage.user.name) }), _jsxs("div", { style: { display: 'flex', flexDirection: 'column' }, children: [localMessage.user.name, _jsx(MessageTimestamp, { children: getFormattedTimestamp(props.value.created_at) })] }), localMessage.updated_at !== localMessage.created_at && (_jsx(Tooltip, { content: getFormattedTimestamp(props.value.updated_at), children: _jsx(EditedText, { children: " (edited)" }) }))] }), !editMode && props.isEditable && props.didUserWriteMessage && (_jsxs(InteractiveIcons, { children: [_jsx(EditIcon, { "aria-label": "Edit message", "data-testid": "message-edit-button", onClick: () => setEditMode(true), role: "button" }), _jsx(DeleteIcon, { "aria-label": "Delete message", "data-testid": "message-delete-button", onClick: onDelete, role: "button" })] }))] }), editMode && (_jsxs("div", { style: { display: 'flex', flexDirection: 'column', gap: '1rem' }, children: [_jsx(TextArea, { onChange: setEditMessage, resize: "vertical", value: editMessage }), _jsxs(EditButtons, { children: [_jsx(Button, { onClick: () => setEditMode(false), outline: true, children: "Cancel" }), _jsx(Button, { onClick: onAccept, children: "Save" })] })] })), !editMode && (_jsxs(MessageBody, { children: [_jsx(Markdown, { markdown: processText(localMessage.message) }), props.value.actions] }))] }));
218
+ }
219
+ export default MessageComponent;
220
+ //# sourceMappingURL=message.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message.js","sourceRoot":"","sources":["../../src/chat/message.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import { Item } from '../types';
2
+ export interface ItemState {
3
+ state: boolean;
4
+ value: any;
5
+ }
6
+ export interface CheckboxGroupProps {
7
+ /** Standard react className property */
8
+ className?: string;
9
+ /** Standard react className property */
10
+ disabled?: boolean;
11
+ /** Initial checkboxes that should be checked */
12
+ initialValue?: Array<Item> | Item;
13
+ /** Whether to show checkboxes in list style */
14
+ isListStyle?: boolean;
15
+ /** The items to pick from the list. Each should have a label and a value */
16
+ items: Array<Item>;
17
+ /** An optional onChange handler, will be called whenever the state of the checkbox changes */
18
+ onChange?: (value: Array<Item> | Item, e?: React.FormEvent<HTMLInputElement>) => void | Promise<void>;
19
+ /** The maximum number of items that can be selected at one time */
20
+ selectMax?: number;
21
+ /** The minimum number of items that should be selected */
22
+ selectMin?: number;
23
+ /** Default React style prop */
24
+ style?: React.CSSProperties;
25
+ /** An optional value field to put the input into a controlled mode */
26
+ values?: Array<Item>;
27
+ }
28
+ /**
29
+ * A checkbox group component
30
+ *
31
+ * @param {CheckboxGroupProps} props - the component props
32
+ */
33
+ declare function CheckboxGroup(props: CheckboxGroupProps): JSX.Element;
34
+ export default CheckboxGroup;
35
+ //# sourceMappingURL=checkbox-group.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkbox-group.d.ts","sourceRoot":"","sources":["../../src/checkbox/checkbox-group.tsx"],"names":[],"mappings":"AAoBA,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAGhC,MAAM,WAAW,SAAS;IACtB,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,GAAG,CAAC;CACd;AAkBD,MAAM,WAAW,kBAAkB;IAC/B,wCAAwC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wCAAwC;IACxC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,gDAAgD;IAChD,YAAY,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAClC,+CAA+C;IAC/C,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,4EAA4E;IAC5E,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IACnB,8FAA8F;IAC9F,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,gBAAgB,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtG,mEAAmE;IACnE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0DAA0D;IAC1D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+BAA+B;IAC/B,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,sEAAsE;IACtE,MAAM,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;CACxB;AAmBD;;;;GAIG;AACH,iBAAS,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,GAAG,CAAC,OAAO,CA0F7D;AAED,eAAe,aAAa,CAAC"}
@@ -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,27 @@
1
+ import { InteractiveComponentProps } from '../types';
2
+ export interface CheckboxProps extends InteractiveComponentProps<boolean> {
3
+ /** Standard react className property */
4
+ className?: string;
5
+ /** Whether the checkbox is disabled. */
6
+ disabled?: boolean;
7
+ /** id of the current checkbox */
8
+ id?: number;
9
+ /** Whether to show list style of checkbox */
10
+ isListStyle?: boolean;
11
+ /** Sets the label to appear next to the checkbox */
12
+ label?: string;
13
+ /** An optional onChange handler, will be called whenever the state of the checkbox changes */
14
+ onChange?: (checked: boolean, e: React.FormEvent<HTMLInputElement>) => void | Promise<void>;
15
+ /** An optional onCLick handler */
16
+ onClick?: (e: React.FormEvent<HTMLInputElement>) => void | Promise<void>;
17
+ /** Setting this puts the checkbox in controlled mode */
18
+ selected?: boolean;
19
+ }
20
+ /**
21
+ * A simple checkbox component
22
+ *
23
+ * @param {CheckboxProps} props - the component props
24
+ */
25
+ declare function Checkbox(props: CheckboxProps): JSX.Element;
26
+ export default Checkbox;
27
+ //# 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;AA+HrD,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"}