@majoo-ui/react 2.0.1 → 2.1.0-rc.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 (202) hide show
  1. package/charts.esm.js +3 -1453
  2. package/colors/Colors.esm.js +93 -0
  3. package/components/accordion/Accordion.esm.js +109 -0
  4. package/components/alertDialog/AlertDialog.esm.js +440 -0
  5. package/components/avatar/Avatar.esm.js +83 -0
  6. package/components/badge/Badge.esm.js +255 -0
  7. package/components/banner/Banner.esm.js +341 -0
  8. package/components/barChart/BarChart.esm.js +212 -0
  9. package/components/breadcrumb/Breadcrumb.esm.js +65 -0
  10. package/components/breadcrumb/index.esm.js +19 -0
  11. package/components/button/Button.esm.js +331 -0
  12. package/components/buttonGroup/ButtonGroup.esm.js +350 -0
  13. package/components/card/Card.esm.js +236 -0
  14. package/components/chart/assets/data_kosong.png.esm.js +3 -0
  15. package/components/chart/lineChart/LineChart.esm.js +358 -0
  16. package/components/chart/lineChart/components/Comparator.esm.js +82 -0
  17. package/components/chart/lineChart/components/ComparatorController.esm.js +112 -0
  18. package/components/chart/lineChart/components/ComparatorItem.esm.js +104 -0
  19. package/components/chart/lineChart/components/ProductList.esm.js +78 -0
  20. package/components/chart/lineChart/components/TitleLegend.esm.js +107 -0
  21. package/components/chart/lineChart/components/Tooltip.esm.js +90 -0
  22. package/components/chart/utils/index.esm.js +109 -0
  23. package/components/checkboxTable/CheckboxTable.esm.js +287 -0
  24. package/components/colorPicker/ColorPicker.esm.js +342 -0
  25. package/components/colorPicker/InputColorPicker.esm.js +120 -0
  26. package/components/colorPicker/assets/img_colormap.gif.esm.js +3 -0
  27. package/components/colorPicker/components/ColorFields.esm.js +144 -0
  28. package/components/colorPicker/components/ColorMap.esm.js +1188 -0
  29. package/components/contentEditor/ContentEditor.esm.js +251 -0
  30. package/components/contentEditor/assets/Inline-code-outline.svg.esm.js +3 -0
  31. package/components/contentEditor/assets/Link-outline.svg.esm.js +3 -0
  32. package/components/contentEditor/assets/List-bulleted-outline.svg.esm.js +3 -0
  33. package/components/contentEditor/assets/List-numbered-outline.svg.esm.js +3 -0
  34. package/components/contentEditor/assets/Redo-outline.svg.esm.js +3 -0
  35. package/components/contentEditor/assets/Text-bold-filled.svg.esm.js +3 -0
  36. package/components/contentEditor/assets/Text-clear-format-outline.svg.esm.js +3 -0
  37. package/components/contentEditor/assets/Text-italic-outline.svg.esm.js +3 -0
  38. package/components/contentEditor/assets/Text-strikethrough-outline.svg.esm.js +3 -0
  39. package/components/contentEditor/assets/Text-underline-outline.svg.esm.js +3 -0
  40. package/components/contentEditor/assets/Undo-outline.svg.esm.js +3 -0
  41. package/components/contextMenu/ContextMenu.esm.js +298 -0
  42. package/components/datePicker/AdvancedOption.esm.js +37 -0
  43. package/components/datePicker/CustomDatePicker.esm.js +121 -0
  44. package/components/datePicker/DatePicker.esm.js +244 -0
  45. package/components/datePicker/DatePickerMulti.esm.js +70 -0
  46. package/components/datePicker/InputDatePicker.esm.js +290 -0
  47. package/components/datePicker/InputDateRangePicker.esm.js +174 -0
  48. package/components/datePicker/components/Calendar.esm.js +654 -0
  49. package/components/datePicker/components/CalendarMulti.esm.js +407 -0
  50. package/components/datePicker/components/CalendarTimePicker.esm.js +104 -0
  51. package/components/datePicker/components/DateNumber.esm.js +89 -0
  52. package/components/datePicker/components/MobileCalendar.esm.js +522 -0
  53. package/components/datePicker/state/reducer.esm.js +286 -0
  54. package/components/datePicker/timePicker/InputTimePicker.esm.js +205 -0
  55. package/components/datePicker/timePicker/TimePicker.esm.js +481 -0
  56. package/components/devicePreview/DevicePreview.esm.js +631 -0
  57. package/components/devicePreview/deviceFrame/android-transparant.png.esm.js +3 -0
  58. package/components/devicePreview/deviceFrame/android-wide-transparant.png.esm.js +3 -0
  59. package/components/devicePreview/deviceFrame/bg-email.png.esm.js +3 -0
  60. package/components/devicePreview/deviceFrame/bg-notification.png.esm.js +3 -0
  61. package/components/devicePreview/deviceFrame/bg-sms.png.esm.js +3 -0
  62. package/components/devicePreview/deviceFrame/bg-whatsapp.png.esm.js +3 -0
  63. package/components/devicePreview/deviceFrame/desktop-transparant.png.esm.js +3 -0
  64. package/components/devicePreview/deviceFrame/ic-majoo-profpic.png.esm.js +3 -0
  65. package/components/devicePreview/deviceFrame/iphone-transparant.png.esm.js +3 -0
  66. package/components/dialog/Dialog.esm.js +106 -0
  67. package/components/drawer/Drawer.esm.js +294 -0
  68. package/components/dropdownMenu/DropdownMenu.esm.js +281 -0
  69. package/components/editableTable/EditableMobile.esm.js +361 -0
  70. package/components/editableTable/EditableTable.esm.js +618 -0
  71. package/components/editableTable/transition.esm.js +37 -0
  72. package/components/form/components/FormGroup/FormGroup.esm.js +142 -0
  73. package/components/form/components/FormHelper/Helper.esm.js +50 -0
  74. package/components/form/components/FormLabel/Label.esm.js +90 -0
  75. package/components/form/components/InputAddon/InputAddon.esm.js +105 -0
  76. package/components/form/components/InputCheckbox/CheckboxGroup.esm.js +60 -0
  77. package/components/form/components/InputCheckbox/InputCheckbox.esm.js +129 -0
  78. package/components/form/components/InputCheckbox/icon/CheckOutline.esm.js +33 -0
  79. package/components/form/components/InputCheckbox/icon/MinusOutline.esm.js +33 -0
  80. package/components/form/components/InputCombobox/InputCombobox.esm.js +169 -0
  81. package/components/form/components/InputCounter/InputCounter.esm.js +226 -0
  82. package/components/form/components/InputCreatable/InputCreatable.esm.js +229 -0
  83. package/components/form/components/InputDateRange/InputDateRange.esm.js +46 -0
  84. package/components/form/components/InputElement/InputElement.esm.js +35 -0
  85. package/components/form/components/InputGroup/InputGroup.esm.js +188 -0
  86. package/components/form/components/InputLetter/InputLetter.esm.js +68 -0
  87. package/components/form/components/InputNumber/InputNumber.esm.js +248 -0
  88. package/components/form/components/InputNumber/NumberFormat.esm.js +1263 -0
  89. package/components/form/components/InputOTP/InputOTP.esm.js +70 -0
  90. package/components/form/components/InputRadio/InputRadio.esm.js +273 -0
  91. package/components/form/components/InputRadio/InputRadioGroup.esm.js +35 -0
  92. package/components/form/components/InputRadio/context.esm.js +5 -0
  93. package/components/form/components/InputResourceList/InputResourceList.esm.js +429 -0
  94. package/components/form/components/InputSearchbox/CloseFilled.esm.js +34 -0
  95. package/components/form/components/InputSearchbox/InputSearchbox.esm.js +90 -0
  96. package/components/form/components/InputSearchbox/SearchOutline.esm.js +26 -0
  97. package/components/form/components/InputSelect/InputSelect.esm.js +964 -0
  98. package/components/form/components/InputSelectCheck/InputSelectCheck.esm.js +1388 -0
  99. package/components/form/components/InputSelectCheck/OptionGroupItem.esm.js +39 -0
  100. package/components/form/components/InputSelectCheck/icon/CheckOutline.esm.js +33 -0
  101. package/components/form/components/InputSelectTag/InputSelectTag.esm.js +62 -0
  102. package/components/form/components/InputSignature/InputSignature.esm.js +122 -0
  103. package/components/form/components/InputSignature/SignatureModal.esm.js +67 -0
  104. package/components/form/components/InputSwitch/InputSwitch.esm.js +96 -0
  105. package/components/form/components/InputSwitch/InputSwitchWithImage.esm.js +136 -0
  106. package/components/form/components/InputTags/InputTags.esm.js +268 -0
  107. package/components/form/components/InputText/InputText.esm.js +197 -0
  108. package/components/form/components/InputTextArea/InputTextArea.esm.js +77 -0
  109. package/components/heading/Heading.esm.js +64 -0
  110. package/components/iconButton/IconButton.esm.js +71 -0
  111. package/components/image/Image.esm.js +141 -0
  112. package/components/link/Link.esm.js +59 -0
  113. package/components/loadingBar/LoadingBar.esm.js +113 -0
  114. package/components/mapPicker/InputMapPicker.esm.js +160 -0
  115. package/components/mapPicker/MapPicker.esm.js +122 -0
  116. package/components/mapPicker/MapPicker.styles.esm.js +70 -0
  117. package/components/mapPicker/assets/images/Mapsicle.png.esm.js +3 -0
  118. package/components/mapPicker/components/AddressCard.esm.js +25 -0
  119. package/components/mapPicker/components/ButtonSelect.esm.js +46 -0
  120. package/components/mapPicker/components/ChangeView.esm.js +20 -0
  121. package/components/mapPicker/components/InputSearch.esm.js +74 -0
  122. package/components/mapPicker/components/MarkerIcon.esm.js +22 -0
  123. package/components/mapPicker/components/MarkerSvg.esm.js +62 -0
  124. package/components/mapPicker/components/ZoomControls.esm.js +36 -0
  125. package/components/mapPicker/hooks/useMapSearch.esm.js +161 -0
  126. package/components/modalDialog/ModalDialog.esm.js +247 -0
  127. package/components/notificationBadge/NotificationBadge.esm.js +149 -0
  128. package/components/pageDialog/PageDialog.esm.js +291 -0
  129. package/components/pageDialog/logo.svg.esm.js +3 -0
  130. package/components/pagination/Pagination.esm.js +94 -0
  131. package/components/pagination/PaginationButton.esm.js +346 -0
  132. package/components/pagination/PaginationInfo.esm.js +146 -0
  133. package/components/paper/Paper.esm.js +76 -0
  134. package/components/paragraph/Paragraph.esm.js +52 -0
  135. package/components/pieChart/PieChart.esm.js +287 -0
  136. package/components/popover/Popover.esm.js +142 -0
  137. package/components/progress/Progress.esm.js +170 -0
  138. package/components/progressIndicator/ProgressIndicator.esm.js +287 -0
  139. package/components/scrollSync/ScrollSync.esm.js +172 -0
  140. package/components/scrollSync/ScrollSyncNode.esm.js +87 -0
  141. package/components/scrollSync/utils.esm.js +9 -0
  142. package/components/separator/Separator.esm.js +43 -0
  143. package/components/skeleton/Skeleton.esm.js +131 -0
  144. package/components/slider/Slider.esm.js +345 -0
  145. package/components/stepWizard/StepWizard.esm.js +451 -0
  146. package/components/stepWizard/index.esm.js +14 -0
  147. package/components/table/MobileTable.esm.js +415 -0
  148. package/components/table/Table.esm.js +1472 -0
  149. package/components/table/components/columns/DateColumn.esm.js +26 -0
  150. package/components/table/components/columns/DecimalColumn.esm.js +36 -0
  151. package/components/table/components/columns/PriceColumn.esm.js +57 -0
  152. package/components/table/components/columns/RowDraggableColumn.esm.js +24 -0
  153. package/components/table/components/columns/RowExpanderColumn.esm.js +32 -0
  154. package/components/table/components/columns/RowExpanderMultipleColumn.esm.js +24 -0
  155. package/components/table/components/columns/RowMenuColumn.esm.js +101 -0
  156. package/components/table/components/columns/RowSelectionCallbackColumn.esm.js +38 -0
  157. package/components/table/components/columns/RowSelectionColumn.esm.js +34 -0
  158. package/components/table/images/img-emptydata.webp.esm.js +3 -0
  159. package/components/table/images/img-emptysearchdata.webp.esm.js +3 -0
  160. package/components/tableOfContent/TableOfContent.esm.js +267 -0
  161. package/components/tableOfContent/index.esm.js +18 -0
  162. package/components/tableOfContent/transition.esm.js +38 -0
  163. package/components/tabs/Tabs.esm.js +282 -0
  164. package/components/tag/Tag.esm.js +161 -0
  165. package/components/tagList/TagList.esm.js +90 -0
  166. package/components/tagStatus/TagStatus.esm.js +134 -0
  167. package/components/text/Text.esm.js +140 -0
  168. package/components/toast/Toast.esm.js +297 -0
  169. package/components/toast/ToastContainer.esm.js +73 -0
  170. package/components/toast/context/ToastContext.esm.js +5 -0
  171. package/components/toast/context/ToastProvider.esm.js +96 -0
  172. package/components/tooltip/Tooltip.esm.js +175 -0
  173. package/components/upload/Upload.esm.js +1103 -0
  174. package/components/upload/utils/canvasPreview.esm.js +39 -0
  175. package/components/upload/utils/imgPreview.esm.js +21 -0
  176. package/config/stitches.config.esm.js +216 -0
  177. package/editor.esm.js +1 -264
  178. package/hooks/useListOption/useListOption.esm.js +56 -0
  179. package/hooks/useToggle/useToggle.esm.js +8 -0
  180. package/index.esm.js +106 -42293
  181. package/layout/box/Box.esm.js +24 -0
  182. package/layout/flex/Flex.esm.js +135 -0
  183. package/layout/grid/Grid.esm.js +270 -0
  184. package/layout/pageContainer/PageContainer.esm.js +60 -0
  185. package/majoo-provider/MajooProvider.esm.js +42 -0
  186. package/majoo-provider/ThemeProvider.esm.js +41 -0
  187. package/majoo-provider/globalStyles.esm.js +242 -0
  188. package/majoo-provider/styles/modern-normalize.esm.js +95 -0
  189. package/map.esm.js +2 -734
  190. package/package.json +8 -4
  191. package/utils/calendar.esm.js +26 -0
  192. package/utils/element.esm.js +21 -0
  193. package/utils/object.esm.js +12 -0
  194. package/utils/request.esm.js +74 -0
  195. package/utils/strings.esm.js +6 -0
  196. package/{useMediaQuery.esm.js → utils/useMediaQuery.esm.js} +1 -1
  197. package/utils/useNavigatorOnline.esm.js +19 -0
  198. package/utils/variant.esm.js +12 -0
  199. package/wrapper/ConditionalWrapper.esm.js +9 -0
  200. package/ModalDialog.esm.js +0 -2669
  201. package/Separator.esm.js +0 -3002
  202. package/stitches.config.esm.js +0 -2284
@@ -0,0 +1,429 @@
1
+ import 'core-js/modules/es.array.includes.js';
2
+ import 'core-js/modules/es.iterator.constructor.js';
3
+ import 'core-js/modules/es.iterator.every.js';
4
+ import 'core-js/modules/es.iterator.filter.js';
5
+ import 'core-js/modules/es.iterator.map.js';
6
+ import 'core-js/modules/es.iterator.some.js';
7
+ import 'core-js/modules/es.set.difference.v2.js';
8
+ import 'core-js/modules/es.set.intersection.v2.js';
9
+ import 'core-js/modules/es.set.is-disjoint-from.v2.js';
10
+ import 'core-js/modules/es.set.is-subset-of.v2.js';
11
+ import 'core-js/modules/es.set.is-superset-of.v2.js';
12
+ import 'core-js/modules/es.set.symmetric-difference.v2.js';
13
+ import 'core-js/modules/es.set.union.v2.js';
14
+ import { jsxs, jsx } from 'react/jsx-runtime';
15
+ import { useState, useMemo, useRef, useEffect } from 'react';
16
+ import Box from '../../../../layout/box/Box.esm.js';
17
+ import Flex from '../../../../layout/flex/Flex.esm.js';
18
+ import Text from '../../../text/Text.esm.js';
19
+ import InputSearchbox from '../InputSearchbox/InputSearchbox.esm.js';
20
+ import Paragraph from '../../../paragraph/Paragraph.esm.js';
21
+ import Heading from '../../../heading/Heading.esm.js';
22
+ import InfiniteScroll from 'react-infinite-scroller';
23
+ import { ConditionalWrapper } from '../../../../wrapper/ConditionalWrapper.esm.js';
24
+ import debounce from 'lodash.debounce';
25
+ import { styled, colors } from '../../../../config/stitches.config.esm.js';
26
+ import { SortingOutline, ChevronUpOutline, ChevronDownOutline } from '@majoo-ui/icons';
27
+ import { useTranslation } from 'react-i18next';
28
+ import CheckOutline from '../InputSelectCheck/icon/CheckOutline.esm.js';
29
+ import InputCheckbox from '../InputCheckbox/InputCheckbox.esm.js';
30
+ import CheckboxGroup from '../InputCheckbox/CheckboxGroup.esm.js';
31
+ import { Tag } from '../../../tag/Tag.esm.js';
32
+
33
+ const SortingIcon = styled(Flex, {
34
+ cursor: 'pointer',
35
+ alignItems: 'center',
36
+ justifyContent: 'center'
37
+ });
38
+ const IconBox = styled('div', {
39
+ height: 16,
40
+ width: 16,
41
+ cursor: 'pointer',
42
+ variants: {
43
+ border: {
44
+ true: {
45
+ borderRadius: 3,
46
+ border: '1.5px solid $bgOutline'
47
+ }
48
+ }
49
+ }
50
+ });
51
+ const IndeterminateFilled = styled('div', {
52
+ width: 16,
53
+ height: 16,
54
+ background: '$primary500',
55
+ color: '$textWhite',
56
+ borderRadius: 3,
57
+ fontSize: 14,
58
+ display: 'flex',
59
+ justifyContent: 'center',
60
+ alignItems: 'center'
61
+ });
62
+ function InputResourceList({
63
+ data: dataProp,
64
+ disabled = false,
65
+ onChange,
66
+ searchPlaceholder,
67
+ counterFooter = true,
68
+ counterFooterText,
69
+ isLoading = false,
70
+ disabledItems,
71
+ emptyDataMessage,
72
+ value,
73
+ fetchData,
74
+ onQueryChange,
75
+ css,
76
+ wrapperCss,
77
+ defaultSort,
78
+ title,
79
+ hideSelectAll,
80
+ renderSelectAll,
81
+ customHeader,
82
+ expandable,
83
+ searchable
84
+ }) {
85
+ const {
86
+ t
87
+ } = useTranslation(['MajooUI/inputResourceList', 'translation']);
88
+ const [query, setQuery] = useState('');
89
+ const [sortType, setSortType] = useState('asc');
90
+ const [data, setData] = useState([]);
91
+ const [expand, setExpand] = useState(false);
92
+ const isValueString = typeof (value === null || value === void 0 ? void 0 : value[0]) === 'string';
93
+ const checkedItems = useMemo(() => {
94
+ if (!value) return [];
95
+ if (isValueString) {
96
+ return data.filter(item => value.includes(item.value));
97
+ }
98
+ return value;
99
+ }, [value, data, isValueString]);
100
+ const scrollerRef = useRef(null);
101
+ useEffect(() => {
102
+ function filterUnique(params) {
103
+ if (!params) return;
104
+ const unique = params.filter((obj, index) => params.findIndex(item => (item === null || item === void 0 ? void 0 : item.value) === (obj === null || obj === void 0 ? void 0 : obj.value)) === index);
105
+ setData(unique);
106
+ }
107
+ filterUnique(dataProp);
108
+ }, [dataProp]);
109
+ useEffect(() => {
110
+ var _a;
111
+ (_a = scrollerRef.current) === null || _a === void 0 ? void 0 : _a.scrollTo({
112
+ top: 0
113
+ });
114
+ }, [query]);
115
+ useEffect(() => {
116
+ if (defaultSort) {
117
+ setSortType(defaultSort);
118
+ }
119
+ }, [defaultSort]);
120
+ const availableData = useMemo(() => {
121
+ if (!data) return [];
122
+ const filteredData = data.filter(item => !!onQueryChange || item.label.toLowerCase().match((query === null || query === void 0 ? void 0 : query.toLowerCase()) || ''));
123
+ const checkedValues = new Set(checkedItems.map(item => item.value));
124
+ return [...filteredData].sort((a, b) => {
125
+ const aIsChecked = checkedValues.has(a.value);
126
+ const bIsChecked = checkedValues.has(b.value);
127
+ if (aIsChecked && !bIsChecked) {
128
+ return -1;
129
+ }
130
+ if (!aIsChecked && bIsChecked) {
131
+ return 1;
132
+ }
133
+ return 0;
134
+ });
135
+ }, [data, query, checkedItems]);
136
+ const isItemDisabled = item => !!((item === null || item === void 0 ? void 0 : item.disabled) || disabledItems && disabledItems.includes(item.value));
137
+ const selectableAvailableData = useMemo(() => {
138
+ return availableData.filter(item => !isItemDisabled(item));
139
+ }, [availableData, disabledItems]);
140
+ const renderCheckbox = (resource, index) => {
141
+ var _a, _b;
142
+ const isDisabled = resource.disabled || disabledItems && disabledItems.includes(resource.value);
143
+ return jsxs(Flex, {
144
+ align: "center",
145
+ justify: "between",
146
+ children: [jsxs(Flex, {
147
+ direction: "column",
148
+ gap: 1,
149
+ children: [jsxs(Flex, {
150
+ align: "center",
151
+ children: [jsx(InputCheckbox, {
152
+ label: jsxs(Flex, {
153
+ gap: 3,
154
+ align: "center",
155
+ children: [jsx(Paragraph, {
156
+ css: {
157
+ overflowX: 'hidden',
158
+ textOverflow: 'ellipsis',
159
+ '@sm': {
160
+ maxWidth: resource.variants ? 150 : 200
161
+ },
162
+ '@md': {
163
+ maxWidth: 'unset'
164
+ }
165
+ },
166
+ paragraph: "longContentRegular",
167
+ children: resource.label
168
+ }), (_a = resource.variants) === null || _a === void 0 ? void 0 : _a.map((variant, index) => jsx(Tag, Object.assign({
169
+ type: "varian",
170
+ size: "lg",
171
+ css: {
172
+ color: disabled || isDisabled ? '$textDisable' : '$textBrand'
173
+ }
174
+ }, {}, {
175
+ children: variant
176
+ }), index))]
177
+ }),
178
+ index: index,
179
+ value: resource.value,
180
+ disabled: isDisabled
181
+ }), (resource === null || resource === void 0 ? void 0 : resource.icon) && jsx(Box, {
182
+ css: {
183
+ marginLeft: '$spacing-03'
184
+ },
185
+ children: (_b = resource === null || resource === void 0 ? void 0 : resource.icon) === null || _b === void 0 ? void 0 : _b.call(resource)
186
+ })]
187
+ }), (resource === null || resource === void 0 ? void 0 : resource.description) && jsx(Paragraph, {
188
+ css: {
189
+ fontSize: 12,
190
+ paddingLeft: 30
191
+ },
192
+ color: "secondary",
193
+ children: resource === null || resource === void 0 ? void 0 : resource.description
194
+ })]
195
+ }, `${resource.value}`), !!resource.subLabel && jsx(Paragraph, {
196
+ color: isDisabled ? 'disable' : 'primary',
197
+ css: {
198
+ overflowX: 'hidden',
199
+ textOverflow: 'ellipsis',
200
+ '@sm': {
201
+ maxWidth: resource.variants ? 150 : 200
202
+ },
203
+ '@md': {
204
+ maxWidth: 'unset'
205
+ }
206
+ },
207
+ paragraph: "longContentRegular",
208
+ children: resource.subLabel
209
+ })]
210
+ });
211
+ };
212
+ function sorting(data, type) {
213
+ function ascending(a, b) {
214
+ if (a.label < b.label) {
215
+ return -1;
216
+ }
217
+ if (a.label > b.label) {
218
+ return 1;
219
+ }
220
+ return 0;
221
+ }
222
+ function descending(a, b) {
223
+ if (a.label > b.label) {
224
+ return -1;
225
+ }
226
+ if (a.label < b.label) {
227
+ return 1;
228
+ }
229
+ return 0;
230
+ }
231
+ switch (type) {
232
+ case 'asc':
233
+ return [...data].sort(ascending);
234
+ case 'desc':
235
+ return [...data].sort(descending);
236
+ default:
237
+ return data;
238
+ }
239
+ }
240
+ function toggleSort() {
241
+ setSortType(sortType === 'asc' ? 'desc' : 'asc');
242
+ }
243
+ function toggleCheckAll() {
244
+ const selectable = selectableAvailableData;
245
+ const allSelectableItemsSelected = selectable.length > 0 && selectable.every(item => checkedItems.some(checkedItem => checkedItem.value === item.value));
246
+ if (allSelectableItemsSelected) {
247
+ const newCheckedItems = checkedItems.filter(checkedItem => !selectable.some(item => item.value === checkedItem.value));
248
+ onChange === null || onChange === void 0 ? void 0 : onChange(isValueString ? newCheckedItems.map(item => item.value) : newCheckedItems);
249
+ } else {
250
+ const itemsToAdd = selectable.filter(item => !checkedItems.some(checkedItem => checkedItem.value === item.value));
251
+ const newCheckedItems = [...checkedItems, ...itemsToAdd];
252
+ onChange === null || onChange === void 0 ? void 0 : onChange(isValueString ? newCheckedItems.map(item => item.value) : newCheckedItems);
253
+ }
254
+ }
255
+ function handleCheckedAllExpandable() {
256
+ const allItems = data || [];
257
+ const selectableAllItems = allItems.filter(item => !isItemDisabled(item));
258
+ const allItemValues = selectableAllItems.map(i => i.value);
259
+ const currentValues = checkedItems.map(i => i.value);
260
+ const areAllSelected = selectableAllItems.length > 0 && selectableAllItems.every(item => currentValues.includes(item.value));
261
+ let newCheckedItems;
262
+ if (areAllSelected) {
263
+ newCheckedItems = checkedItems.filter(item => !allItemValues.includes(item.value));
264
+ } else {
265
+ const itemsToAdd = selectableAllItems.filter(item => !currentValues.includes(item.value));
266
+ newCheckedItems = [...checkedItems, ...itemsToAdd];
267
+ }
268
+ onChange === null || onChange === void 0 ? void 0 : onChange(isValueString ? newCheckedItems.map(item => item.value) : newCheckedItems);
269
+ }
270
+ const listContent = jsxs(Box, {
271
+ css: Object.assign({
272
+ position: 'relative'
273
+ }, css),
274
+ children: [customHeader, (searchable || !!onQueryChange) && jsx(InputSearchbox, Object.assign({
275
+ size: "lg",
276
+ placeholder: searchPlaceholder || t('placeholder.search', 'Cari ...'),
277
+ onChange: debounce(query => {
278
+ setQuery(query);
279
+ if (onQueryChange) onQueryChange(query);
280
+ }, 1000),
281
+ disabled: disabled
282
+ }, {})), defaultSort && jsxs(Flex, {
283
+ align: "center",
284
+ gap: 3,
285
+ css: {
286
+ paddingLeft: !hideSelectAll ? 16 : 0,
287
+ marginTop: '$spacing-05'
288
+ },
289
+ children: [!hideSelectAll && jsx(InputCheckbox, {
290
+ checked: selectableAvailableData.length > 0 && selectableAvailableData.every(item => checkedItems.some(checkedItem => checkedItem.value === item.value)),
291
+ indeterminate: selectableAvailableData.some(item => checkedItems.some(checkedItem => checkedItem.value === item.value)) && !(selectableAvailableData.length > 0 && selectableAvailableData.every(item => checkedItems.some(checkedItem => checkedItem.value === item.value))),
292
+ onCheckedChange: toggleCheckAll,
293
+ css: {
294
+ marginRight: '$spacing-02'
295
+ }
296
+ }), jsx(Heading, {
297
+ heading: "headerTable",
298
+ children: title || t('defaultTitle', 'Urutkan')
299
+ }), jsx(SortingIcon, {
300
+ onClick: toggleSort,
301
+ children: jsx(SortingOutline, {
302
+ size: 16,
303
+ color: colors.iconSecondary
304
+ })
305
+ })]
306
+ }), isLoading && jsx(Flex, {
307
+ justify: "center",
308
+ align: "center",
309
+ css: Object.assign({
310
+ position: 'absolute',
311
+ inset: 0,
312
+ top: onQueryChange || searchable ? 48 : 0,
313
+ width: '100%',
314
+ height: 285,
315
+ backgroundColor: '$bgWhite',
316
+ opacity: 0.8
317
+ }, wrapperCss && wrapperCss.maxHeight && {
318
+ height: wrapperCss.maxHeight
319
+ }),
320
+ children: jsx(Text, {
321
+ variant: "caption",
322
+ children: "Loading .... "
323
+ })
324
+ }), jsxs(Box, {
325
+ css: Object.assign({
326
+ border: '1px solid $bgOutline',
327
+ padding: '$spacing-05',
328
+ borderRadius: '$lg',
329
+ maxHeight: 285,
330
+ height: isLoading ? wrapperCss && wrapperCss.maxHeight ? wrapperCss.maxHeight : 285 : 'unset',
331
+ overflow: 'auto',
332
+ marginTop: '$spacing-03'
333
+ }, wrapperCss && wrapperCss),
334
+ ref: scrollerRef,
335
+ children: [data.length <= 0 && checkedItems.length <= 0 && !isLoading || defaultSort && data.length < 1 ? jsx(Flex, {
336
+ justify: "center",
337
+ align: "center",
338
+ css: {
339
+ width: '100%'
340
+ },
341
+ children: jsx(Paragraph, {
342
+ paragraph: "shortContentRegular",
343
+ align: "center",
344
+ color: "secondary",
345
+ children: emptyDataMessage || t('label.noData', 'Tidak ada data', {
346
+ ns: 'translation'
347
+ })
348
+ })
349
+ }) : null, jsx(ConditionalWrapper, {
350
+ condition: !!fetchData && data.length > 0,
351
+ wrapper: children => jsx(InfiniteScroll, {
352
+ loadMore: _ => {
353
+ if (!isLoading && fetchData) {
354
+ fetchData({
355
+ query
356
+ });
357
+ }
358
+ },
359
+ hasMore: true,
360
+ threshold: 5,
361
+ useWindow: false,
362
+ children: children
363
+ }),
364
+ children: jsx(Flex, {
365
+ direction: "column",
366
+ gap: 3,
367
+ children: jsx(CheckboxGroup, {
368
+ onChange: (_, index) => {
369
+ const datasets = defaultSort ? sorting(availableData, sortType) : availableData;
370
+ const newCheckedItems = (checkedItems === null || checkedItems === void 0 ? void 0 : checkedItems.some(val => {
371
+ var _a;
372
+ return (val === null || val === void 0 ? void 0 : val.value) === ((_a = datasets[index]) === null || _a === void 0 ? void 0 : _a.value);
373
+ })) ? checkedItems.filter(val => val.value !== datasets[index].value) : [...(checkedItems || []), datasets[index]];
374
+ onChange === null || onChange === void 0 ? void 0 : onChange(isValueString ? newCheckedItems.map(item => item.value) : newCheckedItems);
375
+ },
376
+ value: checkedItems === null || checkedItems === void 0 ? void 0 : checkedItems.map(item => item === null || item === void 0 ? void 0 : item.value),
377
+ disabled: disabled,
378
+ children: (defaultSort ? sorting(availableData, sortType) : availableData).map(renderCheckbox)
379
+ })
380
+ })
381
+ })]
382
+ }), counterFooter && checkedItems.length > 0 && jsx(Box, {
383
+ css: {
384
+ marginTop: '$spacing-04'
385
+ },
386
+ children: jsx(Text, {
387
+ variant: "helper",
388
+ color: disabled ? 'disable' : 'brand',
389
+ children: `${checkedItems.length} ${counterFooterText || t('counterFooterText', 'kategori dipilih')}`
390
+ })
391
+ })]
392
+ });
393
+ if (expandable) {
394
+ const allItems = data || [];
395
+ const selectableAllItems = allItems.filter(item => !isItemDisabled(item));
396
+ const checkedValues = checkedItems.map(i => i.value);
397
+ const isAllSelected = selectableAllItems.length > 0 && selectableAllItems.every(item => checkedValues.includes(item.value));
398
+ const isIndeterminate = !isAllSelected && selectableAllItems.some(item => checkedValues.includes(item.value));
399
+ return jsxs(Box, {
400
+ children: [jsxs(Flex, {
401
+ justify: "between",
402
+ align: "start",
403
+ children: [jsxs(Flex, {
404
+ gap: 5,
405
+ children: [jsx(IconBox, {
406
+ onClick: handleCheckedAllExpandable,
407
+ border: !isAllSelected && !isIndeterminate,
408
+ children: isAllSelected ? jsx(CheckOutline, {
409
+ color: colors.iconBrand
410
+ }) : isIndeterminate ? jsx(IndeterminateFilled, {
411
+ children: "-"
412
+ }) : ''
413
+ }), renderSelectAll]
414
+ }), jsx(Box, {
415
+ css: {
416
+ cursor: 'pointer'
417
+ },
418
+ onClick: () => setExpand(!expand),
419
+ children: expand ? jsx(ChevronUpOutline, {}) : jsx(ChevronDownOutline, {})
420
+ })]
421
+ }), jsx(Box, {
422
+ children: expand && listContent
423
+ })]
424
+ });
425
+ }
426
+ return listContent;
427
+ }
428
+
429
+ export { InputResourceList as default };
@@ -0,0 +1,34 @@
1
+ import 'react';
2
+ import { jsxs, jsx } from 'react/jsx-runtime';
3
+
4
+ const SvgCloseFilled = props => /*#__PURE__*/jsxs("svg", {
5
+ width: props.size,
6
+ height: props.size,
7
+ viewBox: "0 0 24 24",
8
+ fill: "none",
9
+ ...props,
10
+ children: [/*#__PURE__*/jsx("mask", {
11
+ id: "path-1-inside-1_2883_7918",
12
+ fill: "white",
13
+ children: /*#__PURE__*/jsx("path", {
14
+ fillRule: "evenodd",
15
+ clipRule: "evenodd",
16
+ d: "M12 21C16.9706 21 21 16.9706 21 12C21 7.02944 16.9706 3 12 3C7.02944 3 3 7.02944 3 12C3 16.9706 7.02944 21 12 21ZM8.54289 8.54289C8.93342 8.15237 9.56658 8.15237 9.95711 8.54289L12 10.5858L14.0429 8.54289C14.4334 8.15237 15.0666 8.15237 15.4571 8.54289C15.8476 8.93342 15.8476 9.56658 15.4571 9.95711L13.4142 12L15.4571 14.0429C15.8476 14.4334 15.8476 15.0666 15.4571 15.4571C15.0666 15.8476 14.4334 15.8476 14.0429 15.4571L12 13.4142L9.95711 15.4571C9.56658 15.8476 8.93342 15.8476 8.54289 15.4571C8.15237 15.0666 8.15237 14.4334 8.54289 14.0429L10.5858 12L8.54289 9.95711C8.15237 9.56658 8.15237 8.93342 8.54289 8.54289Z"
17
+ })
18
+ }), /*#__PURE__*/jsx("path", {
19
+ fillRule: "evenodd",
20
+ clipRule: "evenodd",
21
+ d: "M12 21C16.9706 21 21 16.9706 21 12C21 7.02944 16.9706 3 12 3C7.02944 3 3 7.02944 3 12C3 16.9706 7.02944 21 12 21ZM8.54289 8.54289C8.93342 8.15237 9.56658 8.15237 9.95711 8.54289L12 10.5858L14.0429 8.54289C14.4334 8.15237 15.0666 8.15237 15.4571 8.54289C15.8476 8.93342 15.8476 9.56658 15.4571 9.95711L13.4142 12L15.4571 14.0429C15.8476 14.4334 15.8476 15.0666 15.4571 15.4571C15.0666 15.8476 14.4334 15.8476 14.0429 15.4571L12 13.4142L9.95711 15.4571C9.56658 15.8476 8.93342 15.8476 8.54289 15.4571C8.15237 15.0666 8.15237 14.4334 8.54289 14.0429L10.5858 12L8.54289 9.95711C8.15237 9.56658 8.15237 8.93342 8.54289 8.54289Z",
22
+ fill: props.color
23
+ }), /*#__PURE__*/jsx("path", {
24
+ d: "M9.95711 8.54289L8.54289 9.95711L8.54289 9.95711L9.95711 8.54289ZM8.54289 8.54289L9.95711 9.95711L9.95711 9.95711L8.54289 8.54289ZM12 10.5858L10.5858 12L12 13.4142L13.4142 12L12 10.5858ZM14.0429 8.54289L15.4571 9.95711L15.4571 9.95711L14.0429 8.54289ZM15.4571 8.54289L14.0429 9.95711L14.0429 9.95711L15.4571 8.54289ZM15.4571 9.95711L14.0429 8.54289L14.0429 8.54289L15.4571 9.95711ZM13.4142 12L12 10.5858L10.5858 12L12 13.4142L13.4142 12ZM15.4571 14.0429L16.8713 12.6287L16.8713 12.6287L15.4571 14.0429ZM15.4571 15.4571L16.8713 16.8713L16.8713 16.8713L15.4571 15.4571ZM14.0429 15.4571L12.6287 16.8713L12.6287 16.8713L14.0429 15.4571ZM12 13.4142L13.4142 12L12 10.5858L10.5858 12L12 13.4142ZM9.95711 15.4571L11.3713 16.8713L11.3713 16.8713L9.95711 15.4571ZM8.54289 15.4571L7.12868 16.8713L7.12868 16.8713L8.54289 15.4571ZM8.54289 14.0429L7.12868 12.6287L7.12868 12.6287L8.54289 14.0429ZM10.5858 12L12 13.4142L13.4142 12L12 10.5858L10.5858 12ZM8.54289 9.95711L9.95711 8.54289L9.95711 8.54289L8.54289 9.95711ZM19 12C19 15.866 15.866 19 12 19V23C18.0751 23 23 18.0751 23 12H19ZM12 5C15.866 5 19 8.13401 19 12H23C23 5.92487 18.0751 1 12 1V5ZM5 12C5 8.13401 8.13401 5 12 5V1C5.92487 1 1 5.92487 1 12H5ZM12 19C8.13401 19 5 15.866 5 12H1C1 18.0751 5.92487 23 12 23V19ZM11.3713 7.12868C10.1997 5.95711 8.30025 5.95711 7.12868 7.12868L9.95711 9.95711C9.56658 10.3476 8.93342 10.3476 8.54289 9.95711L11.3713 7.12868ZM13.4142 9.17157L11.3713 7.12868L8.54289 9.95711L10.5858 12L13.4142 9.17157ZM12.6287 7.12868L10.5858 9.17157L13.4142 12L15.4571 9.95711L12.6287 7.12868ZM16.8713 7.12868C15.6997 5.95711 13.8003 5.95711 12.6287 7.12868L15.4571 9.95711C15.0666 10.3476 14.4334 10.3476 14.0429 9.95711L16.8713 7.12868ZM16.8713 11.3713C18.0429 10.1997 18.0429 8.30025 16.8713 7.12868L14.0429 9.95711C13.6524 9.56658 13.6524 8.93342 14.0429 8.54289L16.8713 11.3713ZM14.8284 13.4142L16.8713 11.3713L14.0429 8.54289L12 10.5858L14.8284 13.4142ZM16.8713 12.6287L14.8284 10.5858L12 13.4142L14.0429 15.4571L16.8713 12.6287ZM16.8713 16.8713C18.0429 15.6997 18.0429 13.8003 16.8713 12.6287L14.0429 15.4571C13.6524 15.0666 13.6524 14.4334 14.0429 14.0429L16.8713 16.8713ZM12.6287 16.8713C13.8003 18.0429 15.6997 18.0429 16.8713 16.8713L14.0429 14.0429C14.4334 13.6524 15.0666 13.6524 15.4571 14.0429L12.6287 16.8713ZM10.5858 14.8284L12.6287 16.8713L15.4571 14.0429L13.4142 12L10.5858 14.8284ZM11.3713 16.8713L13.4142 14.8284L10.5858 12L8.54289 14.0429L11.3713 16.8713ZM7.12868 16.8713C8.30025 18.0429 10.1997 18.0429 11.3713 16.8713L8.54289 14.0429C8.93342 13.6524 9.56658 13.6524 9.95711 14.0429L7.12868 16.8713ZM7.12868 12.6287C5.95711 13.8003 5.95711 15.6997 7.12868 16.8713L9.95711 14.0429C10.3476 14.4334 10.3476 15.0666 9.95711 15.4571L7.12868 12.6287ZM9.17157 10.5858L7.12868 12.6287L9.95711 15.4571L12 13.4142L9.17157 10.5858ZM7.12868 11.3713L9.17157 13.4142L12 10.5858L9.95711 8.54289L7.12868 11.3713ZM7.12868 7.12868C5.95711 8.30025 5.95711 10.1997 7.12868 11.3713L9.95711 8.54289C10.3476 8.93342 10.3476 9.56658 9.95711 9.95711L7.12868 7.12868Z",
25
+ fill: props.color,
26
+ mask: "url(#path-1-inside-1_2883_7918)"
27
+ })]
28
+ });
29
+ SvgCloseFilled.defaultProps = {
30
+ color: '#404545',
31
+ size: 24
32
+ };
33
+
34
+ export { SvgCloseFilled as default };
@@ -0,0 +1,90 @@
1
+ import { useState, useCallback } from 'react';
2
+ import { InputGroup } from '../InputGroup/InputGroup.esm.js';
3
+ import { InputText } from '../InputText/InputText.esm.js';
4
+ import { InputLeftElement, InputRightElement } from '../InputElement/InputElement.esm.js';
5
+ import SvgCloseFilled from './CloseFilled.esm.js';
6
+ import SvgSearchOutline from './SearchOutline.esm.js';
7
+ import PropTypes from 'prop-types';
8
+ import debounce from 'lodash.debounce';
9
+ import { useTranslation } from 'react-i18next';
10
+ import { foundations } from '@majoo-ui/core';
11
+ import { jsxs, jsx } from 'react/jsx-runtime';
12
+
13
+ const {
14
+ colors
15
+ } = foundations;
16
+ const InputSearchbox = ({
17
+ size,
18
+ onChange,
19
+ css,
20
+ disabled,
21
+ withDebounce,
22
+ defaultValue,
23
+ mobileOnly,
24
+ desktopOnly,
25
+ ...props
26
+ }) => {
27
+ const {
28
+ t
29
+ } = useTranslation(['MajooUI/inputSearchbox', 'translation']);
30
+ const [value, setValue] = useState(defaultValue);
31
+ const inputValue = props?.value ?? value;
32
+ const debounceChange = useCallback(debounce(e => onChange?.(e), 1000), [onChange]);
33
+ const handleChange = useCallback(e => {
34
+ setValue(e.target.value);
35
+ if (withDebounce) {
36
+ debounceChange(e.target.value);
37
+ } else {
38
+ onChange?.(e.target.value);
39
+ }
40
+ }, [onChange, debounceChange, withDebounce]);
41
+ const handleClearButtonClick = e => {
42
+ e.preventDefault();
43
+ if (!disabled) {
44
+ setValue('');
45
+ if (onChange) onChange('');
46
+ }
47
+ };
48
+ return /*#__PURE__*/jsxs(InputGroup, {
49
+ size: size,
50
+ css: css,
51
+ disabled: disabled,
52
+ mobileOnly: mobileOnly,
53
+ desktopOnly: desktopOnly,
54
+ children: [/*#__PURE__*/jsx(InputLeftElement, {
55
+ children: /*#__PURE__*/jsx(SvgSearchOutline, {})
56
+ }), /*#__PURE__*/jsx(InputText, {
57
+ placeholder: t('placeholder', 'Cari ...'),
58
+ onChange: handleChange,
59
+ value: value,
60
+ disabled: disabled,
61
+ css: {
62
+ height: 'fit-content'
63
+ },
64
+ ...props
65
+ }), /*#__PURE__*/jsx(InputRightElement, {
66
+ children: inputValue?.length > 0 ? /*#__PURE__*/jsx(SvgCloseFilled, {
67
+ color: colors.iconSecondary
68
+ }) : /*#__PURE__*/jsx("div", {}),
69
+ onClick: handleClearButtonClick
70
+ })]
71
+ });
72
+ };
73
+ InputSearchbox.propTypes = {
74
+ placeholder: PropTypes.string,
75
+ value: PropTypes.string,
76
+ size: PropTypes.oneOf(['sm', 'lg']),
77
+ isInvalid: PropTypes.bool,
78
+ readOnly: PropTypes.bool,
79
+ disabled: PropTypes.bool,
80
+ onChange: PropTypes.func,
81
+ withDebounce: PropTypes.bool,
82
+ mobileOnly: PropTypes.bool,
83
+ desktopOnly: PropTypes.bool
84
+ };
85
+ InputSearchbox.defaultProps = {
86
+ size: 'sm'
87
+ };
88
+ InputSearchbox.displayName = 'InputSearchbox';
89
+
90
+ export { InputSearchbox as default };
@@ -0,0 +1,26 @@
1
+ import 'react';
2
+ import { jsxs, jsx } from 'react/jsx-runtime';
3
+
4
+ const SvgSearchOutline = props => /*#__PURE__*/jsxs("svg", {
5
+ width: props.size,
6
+ height: props.size,
7
+ viewBox: "0 0 24 24",
8
+ fill: "none",
9
+ ...props,
10
+ children: [/*#__PURE__*/jsx("circle", {
11
+ cx: 11.3091,
12
+ cy: 11.3091,
13
+ r: 6.30911,
14
+ stroke: props.color,
15
+ strokeWidth: 2
16
+ }), /*#__PURE__*/jsx("path", {
17
+ d: "M16.5249 15.1049C16.1345 14.7142 15.5014 14.7139 15.1106 15.1042C14.7199 15.4945 14.7196 16.1277 15.1099 16.5184L16.5249 15.1049ZM19.2939 20.7067C19.6842 21.0974 20.3173 21.0977 20.7081 20.7074C21.0988 20.3171 21.0991 19.6839 20.7088 19.2932L19.2939 20.7067ZM15.1099 16.5184L19.2939 20.7067L20.7088 19.2932L16.5249 15.1049L15.1099 16.5184Z",
18
+ fill: props.color
19
+ })]
20
+ });
21
+ SvgSearchOutline.defaultProps = {
22
+ color: '#404545',
23
+ size: 24
24
+ };
25
+
26
+ export { SvgSearchOutline as default };