@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,522 @@
1
+ import 'core-js/modules/es.iterator.constructor.js';
2
+ import 'core-js/modules/es.iterator.map.js';
3
+ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
4
+ import { ChevronDownOutline, ChevronUpOutline, ChevronLeftOutline, ChevronRightOutline } from '@majoo-ui/icons';
5
+ import moment from 'moment';
6
+ import { useState, useEffect } from 'react';
7
+ import { styled } from '../../../config/stitches.config.esm.js';
8
+ import Box from '../../../layout/box/Box.esm.js';
9
+ import Flex from '../../../layout/flex/Flex.esm.js';
10
+ import { Grid } from '../../../layout/grid/Grid.esm.js';
11
+ import { getCalendarStartYearRange, getCalendarStartYear, weekdayNamesShortEng, weekdayNamesShortId, monthNamesFullEng, monthNamesFullId, yearRangesList, toDateFormat } from '../../../utils/calendar.esm.js';
12
+ import { Button } from '../../button/Button.esm.js';
13
+ import Heading from '../../heading/Heading.esm.js';
14
+ import Paragraph from '../../paragraph/Paragraph.esm.js';
15
+ import { Separator } from '../../separator/Separator.esm.js';
16
+ import Text from '../../text/Text.esm.js';
17
+ import { DATE_PICKER, MONTH_PICKER, YEAR_PICKER, YEAR_RANGE_PICKER } from './Calendar.esm.js';
18
+ import DateNumber from './DateNumber.esm.js';
19
+ import { useTranslation } from 'react-i18next';
20
+
21
+ const getVariant = ({
22
+ selectable,
23
+ selected,
24
+ date
25
+ }, month, selectedDate) => {
26
+ let variant = 'default';
27
+ if (selected) {
28
+ variant = 'selected';
29
+ }
30
+ if (!selectable) {
31
+ variant = 'disabled';
32
+ }
33
+ if (date.getMonth() !== month) {
34
+ variant = 'neutral';
35
+ }
36
+ if (selectedDate && selectedDate.length === 2 && selectedDate[0].toDateString() !== selectedDate[1].toDateString()) {
37
+ if (selectedDate[0].toDateString() === date.toDateString()) {
38
+ variant = 'start';
39
+ } else if (selectedDate[1].toDateString() === date.toDateString()) {
40
+ variant = 'end';
41
+ } else if (selectedDate[0] < date && date < selectedDate[1]) {
42
+ variant = 'road';
43
+ }
44
+ }
45
+ return variant;
46
+ };
47
+ const ArrowButton = styled('button', {
48
+ all: 'unset',
49
+ size: '32px',
50
+ borderRadius: '$md',
51
+ backgroundColor: 'transparent',
52
+ border: 'none',
53
+ display: 'inline-flex',
54
+ alignItems: 'center',
55
+ justifyContent: 'center',
56
+ color: '$iconPrimary',
57
+ '&:hover': {
58
+ backgroundColor: '$bgSelectedLight',
59
+ color: '$textBrand'
60
+ },
61
+ '&:active': {
62
+ backgroundColor: '$bgBrand',
63
+ color: '$white'
64
+ },
65
+ cursor: 'pointer',
66
+ '&:disabled': {
67
+ backgroundColor: '$btnDisable',
68
+ color: '$iconDisable',
69
+ cursor: 'default'
70
+ }
71
+ });
72
+ const WeekdayBox = styled(Box, {
73
+ display: 'inline-block',
74
+ width: '45.5px',
75
+ textAlign: 'center',
76
+ marginBottom: '$spacing-04',
77
+ '@md': {
78
+ width: '32px'
79
+ }
80
+ });
81
+ const DatePickerContainer = styled(Box, {
82
+ width: '100%',
83
+ height: '100%',
84
+ boxShadow: '0px 4px 8px rgba(0, 0, 0, 0.12)',
85
+ backgroundColor: '$white',
86
+ '@md': {
87
+ width: 'unset'
88
+ }
89
+ });
90
+ const CalendarsContainer = styled(Box, {
91
+ width: '100%',
92
+ overflow: 'auto',
93
+ padding: '$spacing-02 20px $spacing-05',
94
+ display: 'inline-flex',
95
+ position: 'absolute',
96
+ bottom: 0,
97
+ borderRadius: '$lg',
98
+ backgroundColor: '$white',
99
+ // alignItems: 'center',
100
+ justifyContent: 'center',
101
+ gap: '$spacing-04',
102
+ maxHeight: '90vh',
103
+ overflowY: 'auto',
104
+ overflowX: 'hidden',
105
+ '-ms-overflow-style': 'none',
106
+ scrollbarWidth: 'none',
107
+ '&::-webkit-scrollbar': {
108
+ display: 'none'
109
+ }
110
+ });
111
+ const CalendarItemContainer = styled(Flex, {
112
+ height: '100%',
113
+ paddingBottom: '160px'
114
+ });
115
+ const DateContainer = styled(Box, {
116
+ width: '100%',
117
+ position: 'relative',
118
+ display: 'inline-block',
119
+ '@md': {
120
+ maxWidth: '334px',
121
+ width: 'unset'
122
+ }
123
+ });
124
+ const FooterContainer = styled(Flex, {
125
+ position: 'relative',
126
+ backgroundColor: '$white',
127
+ boxShadow: '0px -1px 8px rgba(0, 0, 0, 0.12)',
128
+ padding: '$spacing-05 $spacing-04'
129
+ });
130
+ const TitleButton = styled(Heading, {
131
+ padding: '2px $spacing-04',
132
+ color: '$textPrimary',
133
+ '&:hover': {
134
+ backgroundColor: '$bgSelectedLight',
135
+ color: '$textBrand'
136
+ },
137
+ '&:active': {
138
+ backgroundColor: '$bgBrand',
139
+ color: '$white'
140
+ },
141
+ cursor: 'pointer',
142
+ '&:disabled': {
143
+ backgroundColor: '$btnDisable',
144
+ color: '$iconDisable',
145
+ cursor: 'default'
146
+ },
147
+ variants: {
148
+ disabled: {
149
+ true: {
150
+ pointerEvents: 'none'
151
+ }
152
+ }
153
+ }
154
+ });
155
+ const MonthButton = styled(Text, {
156
+ minWidth: '90px',
157
+ textAlign: 'center !important',
158
+ borderRadius: '$md',
159
+ padding: '$spacing-05 0',
160
+ cursor: 'pointer',
161
+ fontSize: '$short-content-regular',
162
+ lineHeight: '$short-content-regular',
163
+ letterSpacing: '$short-content-regular',
164
+ fontWeight: '400',
165
+ color: '$textPrimary',
166
+ '&:hover': {
167
+ backgroundColor: '$bgSelectedLight',
168
+ color: '$textBrand'
169
+ },
170
+ '&:active': {
171
+ backgroundColor: '$bgBrand',
172
+ color: '$white'
173
+ },
174
+ '&:disabled': {
175
+ backgroundColor: '$btnDisable',
176
+ color: '$iconDisable',
177
+ cursor: 'default'
178
+ },
179
+ variants: {
180
+ isSelected: {
181
+ true: {
182
+ backgroundColor: '$bgBrand',
183
+ color: '$white'
184
+ }
185
+ }
186
+ }
187
+ });
188
+ const AdvanceViewToggleButton = styled(Flex, {
189
+ cursor: 'pointer',
190
+ padding: '0px 12px'
191
+ });
192
+ const MobileCalendar = ({
193
+ calendars,
194
+ getDateProps,
195
+ advanceView,
196
+ onCalendarDateChange,
197
+ onIsMultiDateChange,
198
+ onUpdate,
199
+ onCancel,
200
+ onReset,
201
+ selected,
202
+ containerStyle,
203
+ disabled,
204
+ minDate,
205
+ maxDate,
206
+ allowReset,
207
+ maxRange = 0,
208
+ overMaxRange = false
209
+ }) => {
210
+ const {
211
+ t,
212
+ i18n
213
+ } = useTranslation(['MajooUI/datePicker', 'translation']);
214
+ const [pickerState, setPickerState] = useState({
215
+ type: DATE_PICKER,
216
+ selectedMonth: Number(calendars[0].month),
217
+ selectedYear: Number(calendars[0].year),
218
+ selectedYearRange: getCalendarStartYear(calendars[0].year),
219
+ selectedYearRangeStart: getCalendarStartYearRange(calendars[0].year)
220
+ });
221
+ const language = i18n.language;
222
+ const monthNamesFull = language === 'en' ? monthNamesFullEng : monthNamesFullId;
223
+ const weekdayNamesShort = language === 'en' ? weekdayNamesShortEng : weekdayNamesShortId;
224
+ const [expandAdvanceView, setExpandAdvanceView] = useState(false);
225
+ useEffect(() => {
226
+ const selectedDate = new Date(pickerState.selectedYear, pickerState.selectedMonth, 1, 0);
227
+ if (pickerState.selectedMonth < 0) {
228
+ setPickerState(current => Object.assign(Object.assign({}, current), {
229
+ selectedMonth: selectedDate.getMonth(),
230
+ selectedYear: selectedDate.getFullYear(),
231
+ selectedYearRange: getCalendarStartYear(selectedDate.getFullYear()),
232
+ selectedYearRangeStart: getCalendarStartYearRange(selectedDate.getFullYear())
233
+ }));
234
+ } else {
235
+ onCalendarDateChange(selectedDate);
236
+ }
237
+ }, [`${pickerState.selectedMonth}/${pickerState.selectedYear}`]);
238
+ const multiDatePicker = calendars.length > 1;
239
+ const renderTitleButton = index => {
240
+ return multiDatePicker ? jsxs(TitleButton, {
241
+ heading: "sectionTitle",
242
+ onClick: () => {
243
+ if (onIsMultiDateChange) onIsMultiDateChange(false);
244
+ setPickerState(current => Object.assign(Object.assign({}, current), {
245
+ type: MONTH_PICKER
246
+ }));
247
+ },
248
+ children: [monthNamesFull[calendars[index].month], " ", calendars[index].year]
249
+ }) : jsxs(TitleButton, {
250
+ heading: "sectionTitle",
251
+ onClick: () => {
252
+ if (pickerState.type < YEAR_RANGE_PICKER) setPickerState(current => Object.assign(Object.assign({}, current), {
253
+ type: current.type + 1
254
+ }));
255
+ },
256
+ disabled: disabled || pickerState.type === YEAR_RANGE_PICKER,
257
+ children: [pickerState.type === DATE_PICKER && jsxs(Fragment, {
258
+ children: [monthNamesFull[calendars[0].month], " ", calendars[0].year]
259
+ }), pickerState.type === MONTH_PICKER && pickerState.selectedYear, pickerState.type === YEAR_PICKER && jsxs(Fragment, {
260
+ children: [pickerState.selectedYearRange, " - ", pickerState.selectedYearRange + 9]
261
+ }), pickerState.type === YEAR_RANGE_PICKER && jsxs(Fragment, {
262
+ children: [pickerState.selectedYearRangeStart, " - ", pickerState.selectedYearRangeStart + 99]
263
+ })]
264
+ });
265
+ };
266
+ const renderBackButton = () => {
267
+ return jsx(ArrowButton, {
268
+ disabled: disabled,
269
+ onClick: () => {
270
+ if (!minDate || pickerState.type === DATE_PICKER && moment(minDate).isBefore(moment().date(1).month(pickerState.selectedMonth).year(pickerState.selectedYear)) || pickerState.type === MONTH_PICKER && new Date(minDate).getFullYear() < pickerState.selectedYear) {
271
+ setPickerState(current => Object.assign(Object.assign({}, current), {
272
+ selectedMonth: pickerState.type === DATE_PICKER ? current.selectedMonth - 1 : current.selectedMonth,
273
+ selectedYear: pickerState.type === MONTH_PICKER ? current.selectedYear - 1 : current.selectedYear,
274
+ selectedYearRange: pickerState.type === YEAR_PICKER ? current.selectedYearRange - 10 : current.selectedYearRange,
275
+ selectedYearRangeStart: pickerState.type === YEAR_RANGE_PICKER ? current.selectedYearRangeStart - 100 : current.selectedYearRangeStart
276
+ }));
277
+ }
278
+ },
279
+ type: "button",
280
+ children: jsx(ChevronLeftOutline, {
281
+ color: "currentColor"
282
+ })
283
+ });
284
+ };
285
+ const renderForwardButton = () => {
286
+ return jsx(ArrowButton, {
287
+ disabled: disabled,
288
+ onClick: () => {
289
+ if (!maxDate || pickerState.type === DATE_PICKER && moment(maxDate).isAfter(moment().date(1).month(pickerState.selectedMonth + 1).year(pickerState.selectedYear)) || pickerState.type === MONTH_PICKER && new Date(maxDate).getFullYear() > pickerState.selectedYear) {
290
+ setPickerState(current => Object.assign(Object.assign({}, current), {
291
+ selectedMonth: pickerState.type === DATE_PICKER ? current.selectedMonth + 1 : current.selectedMonth,
292
+ selectedYear: pickerState.type === MONTH_PICKER && current.selectedYear < 2100 ? current.selectedYear + 1 : current.selectedYear,
293
+ selectedYearRange: pickerState.type === YEAR_PICKER && current.selectedYearRange < 2091 ? current.selectedYearRange + 10 : current.selectedYearRange,
294
+ selectedYearRangeStart: pickerState.type === YEAR_RANGE_PICKER && current.selectedYearRangeStart < 2001 ? current.selectedYearRangeStart + 100 : current.selectedYearRangeStart
295
+ }));
296
+ }
297
+ },
298
+ type: "button",
299
+ children: jsx(ChevronRightOutline, {
300
+ color: "currentColor"
301
+ })
302
+ });
303
+ };
304
+ const renderHeader = index => {
305
+ return jsx(Flex, {
306
+ justify: "between",
307
+ align: "center",
308
+ css: {
309
+ height: '44px'
310
+ },
311
+ children: jsxs(Fragment, {
312
+ children: [renderBackButton(), renderTitleButton(index), renderForwardButton()]
313
+ })
314
+ });
315
+ };
316
+ const renderDateNumber = calendar => {
317
+ return jsx(Grid, {
318
+ columns: 7,
319
+ css: {
320
+ gridRowGap: '$spacing-04'
321
+ },
322
+ children: calendar.weeks.map((week, weekIndex) => week.map((dateObj, index) => {
323
+ const key = `${calendar.month}${calendar.year}${weekIndex}${index}`;
324
+ if (!dateObj) {
325
+ return jsx("div", {
326
+ style: {
327
+ display: 'inline-block',
328
+ width: '32px',
329
+ border: 'none',
330
+ background: 'transparent'
331
+ }
332
+ }, key);
333
+ }
334
+ const {
335
+ date
336
+ } = dateObj;
337
+ // let background = today ? 'cornflowerblue' : '';
338
+ // background = selected ? 'purple' : background;
339
+ // background = !selectable ? 'teal' : background;
340
+ let dateProps = disabled ? {} : getDateProps({
341
+ dateObj
342
+ });
343
+ dateProps = dateProps['disabled'] ? {} : dateProps;
344
+ return jsx(DateNumber, Object.assign({
345
+ size: "small"
346
+ }, dateProps, {
347
+ variant: disabled ? 'disabled' : getVariant(dateObj, calendar.month, selected),
348
+ isSunday: date.getDay() === 0,
349
+ children: date.getDate()
350
+ }), key);
351
+ }))
352
+ });
353
+ };
354
+ const renderYearRangesList = () => {
355
+ return jsx(Grid, {
356
+ columns: 3,
357
+ css: {
358
+ gridRowGap: '$spacing-06',
359
+ gridColumnGap: '20px'
360
+ },
361
+ children: yearRangesList(pickerState.selectedYearRangeStart).map(range => jsxs(MonthButton, {
362
+ isSelected: pickerState.selectedYearRange === range.start,
363
+ onClick: () => {
364
+ if ((!maxDate || new Date(maxDate).getFullYear() <= range.end) && (!minDate || new Date(minDate).getFullYear() >= range.start)) {
365
+ setPickerState(current => Object.assign(Object.assign({}, current), {
366
+ selectedYearRange: range.start,
367
+ type: YEAR_PICKER
368
+ }));
369
+ }
370
+ },
371
+ children: [range.start, "-", range.end]
372
+ }, range.start))
373
+ });
374
+ };
375
+ const renderYearsList = () => {
376
+ const startYear = pickerState.selectedYearRange;
377
+ const yearsArray = Array.from(new Array(10), (val, index) => index + startYear);
378
+ return jsx(Grid, {
379
+ columns: 3,
380
+ css: {
381
+ gridRowGap: '$spacing-06',
382
+ gridColumnGap: '20px'
383
+ },
384
+ children: yearsArray.map((year, index) => jsx(MonthButton, {
385
+ isSelected: pickerState.selectedYear === year,
386
+ onClick: () => {
387
+ if ((!maxDate || new Date(maxDate).getFullYear() > year - 1) && (!minDate || new Date(minDate).getFullYear() < year + 1)) {
388
+ setPickerState(current => Object.assign(Object.assign({}, current), {
389
+ selectedYear: year,
390
+ type: MONTH_PICKER
391
+ }));
392
+ }
393
+ },
394
+ children: year
395
+ }, year))
396
+ });
397
+ };
398
+ const renderMonthsList = () => {
399
+ return jsx(Grid, {
400
+ columns: 3,
401
+ css: {
402
+ gridRowGap: '$spacing-06',
403
+ gridColumnGap: '20px'
404
+ },
405
+ children: monthNamesFull.map((monthName, index) => jsx(MonthButton, {
406
+ isSelected: pickerState.selectedMonth === index,
407
+ onClick: () => {
408
+ if ((!minDate || moment(minDate).isBefore(moment().month(index).year(pickerState.selectedYear))) && (!maxDate || moment(maxDate).isAfter(moment().month(index).year(pickerState.selectedYear)))) {
409
+ if (onIsMultiDateChange) onIsMultiDateChange(true);
410
+ setPickerState(current => Object.assign(Object.assign({}, current), {
411
+ selectedMonth: index,
412
+ type: DATE_PICKER
413
+ }));
414
+ }
415
+ },
416
+ children: monthName
417
+ }, monthName))
418
+ });
419
+ };
420
+ const renderWeekLabel = calendar => {
421
+ return jsx(Flex, {
422
+ children: weekdayNamesShort.map(weekday => jsx(WeekdayBox, {
423
+ children: jsx(Paragraph, {
424
+ paragraph: "shortContentBold",
425
+ css: {
426
+ color: '$textSecondary',
427
+ textAlign: 'center !important'
428
+ },
429
+ children: weekday
430
+ })
431
+ }, `${calendar.month}${calendar.year}${weekday}`))
432
+ });
433
+ };
434
+ const renderFooter = () => {
435
+ return jsxs(FooterContainer, {
436
+ direction: "column",
437
+ justify: "center",
438
+ gap: 4,
439
+ children: [advanceView && jsxs(Fragment, {
440
+ children: [jsxs(AdvanceViewToggleButton, {
441
+ gap: 3,
442
+ align: "center",
443
+ justify: "between",
444
+ onClick: () => setExpandAdvanceView(!expandAdvanceView),
445
+ children: [jsx(Text, {
446
+ variant: "contentButton",
447
+ css: {
448
+ color: '$textPrimary'
449
+ },
450
+ children: t('selectTimeRangeText', 'Pilih Rentang Waktu')
451
+ }), expandAdvanceView ? jsx(ChevronDownOutline, {}) : jsx(ChevronUpOutline, {})]
452
+ }), expandAdvanceView && advanceView, jsx(Separator, {
453
+ css: {
454
+ marginBottom: '$spacing-05'
455
+ }
456
+ })]
457
+ }), jsx(Text, {
458
+ css: {
459
+ textAlign: 'center !important'
460
+ },
461
+ variant: "status",
462
+ color: overMaxRange ? 'red' : selected && selected.length > 1 ? 'primary' : 'disable',
463
+ children: overMaxRange ? t('label.maxRangeDate', `Maksimal range adalah ${maxRange} hari`, {
464
+ maxRange
465
+ }) : selected && selected.length > 1 && !disabled ? `${toDateFormat(selected[0], language)} - ${toDateFormat(selected[1], language)}` : t('notSelectedDateText', 'Tanggal belum dipilih')
466
+ }), jsxs(Flex, {
467
+ gap: 3,
468
+ children: [allowReset ? jsx(Button, {
469
+ buttonType: "ghost",
470
+ size: "md",
471
+ onClick: onReset,
472
+ disabled: disabled || !selected || selected.length <= 1,
473
+ type: "button",
474
+ block: true,
475
+ children: "Reset"
476
+ }) : jsx(Button, {
477
+ buttonType: "ghost",
478
+ size: "md",
479
+ onClick: onCancel,
480
+ disabled: disabled,
481
+ type: "button",
482
+ block: true,
483
+ children: t('label.cancel', 'Batal', {
484
+ ns: 'translation'
485
+ })
486
+ }), jsx(Button, {
487
+ size: "md",
488
+ onClick: onUpdate,
489
+ disabled: disabled || !selected || selected.length <= 1 || overMaxRange,
490
+ type: "button",
491
+ block: true,
492
+ children: t('label.process', 'Proses', {
493
+ ns: 'translation'
494
+ })
495
+ })]
496
+ })]
497
+ });
498
+ };
499
+ if (calendars.length) {
500
+ return jsxs(DatePickerContainer, {
501
+ children: [jsx(CalendarsContainer, {
502
+ css: containerStyle,
503
+ children: jsx(CalendarItemContainer, {
504
+ direction: "column",
505
+ gap: 5,
506
+ children: calendars.map((calendar, index) => jsxs(DateContainer, {
507
+ children: [renderHeader(index), jsx(Separator, {
508
+ css: {
509
+ marginBottom: '$spacing-05'
510
+ }
511
+ }), pickerState.type === DATE_PICKER && jsxs(Fragment, {
512
+ children: [renderWeekLabel(calendar), renderDateNumber(calendar)]
513
+ }), pickerState.type === MONTH_PICKER && renderMonthsList(), pickerState.type === YEAR_PICKER && renderYearsList(), pickerState.type === YEAR_RANGE_PICKER && renderYearRangesList()]
514
+ }, `${calendar.month}${calendar.year}`))
515
+ })
516
+ }), multiDatePicker && renderFooter()]
517
+ });
518
+ }
519
+ return null;
520
+ };
521
+
522
+ export { MobileCalendar as default };