@majoo-ui/react 2.0.1 → 2.1.0-rc.0

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 (203) 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
  203. package/{index.esm.css → charts.esm.css} +4 -4
@@ -0,0 +1,407 @@
1
+ import 'core-js/modules/es.iterator.constructor.js';
2
+ import 'core-js/modules/es.iterator.find.js';
3
+ import 'core-js/modules/es.iterator.map.js';
4
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
5
+ import { ChevronLeftOutline, ChevronRightOutline } from '@majoo-ui/icons';
6
+ import moment from 'moment';
7
+ import React__default, { useState, useEffect } from 'react';
8
+ import Paragraph from '../../paragraph/Paragraph.esm.js';
9
+ import { Separator } from '../../separator/Separator.esm.js';
10
+ import Text from '../../text/Text.esm.js';
11
+ import { styled } from '../../../config/stitches.config.esm.js';
12
+ import Box from '../../../layout/box/Box.esm.js';
13
+ import Flex from '../../../layout/flex/Flex.esm.js';
14
+ import { Grid } from '../../../layout/grid/Grid.esm.js';
15
+ import { getCalendarStartYearRange, getCalendarStartYear, monthNamesFullEng, monthNamesFullId, yearRangesList, weekdayNamesShortEng, weekdayNamesShortId } from '../../../utils/calendar.esm.js';
16
+ import DateNumber from './DateNumber.esm.js';
17
+ import { useTranslation } from 'react-i18next';
18
+
19
+ const getVariant = ({
20
+ selectable,
21
+ selected,
22
+ date
23
+ }, month, selectedDate) => {
24
+ let variant = 'defaultv2';
25
+ if (selected) {
26
+ variant = 'selectedv2';
27
+ }
28
+ if (!selectable) {
29
+ variant = 'disabled';
30
+ }
31
+ if (date.getMonth() !== month) {
32
+ variant = 'neutral';
33
+ }
34
+ return variant;
35
+ };
36
+ const ArrowButton = styled('button', {
37
+ all: 'unset',
38
+ size: '32px',
39
+ borderRadius: '$md',
40
+ backgroundColor: 'transparent',
41
+ border: 'none',
42
+ display: 'inline-flex',
43
+ alignItems: 'center',
44
+ justifyContent: 'center',
45
+ color: '$iconPrimary',
46
+ '&:hover': {
47
+ backgroundColor: '$bgSelectedLight',
48
+ color: '$textBrand'
49
+ },
50
+ '&:active': {
51
+ backgroundColor: '$bgBrand',
52
+ color: '$bgWhite'
53
+ },
54
+ cursor: 'pointer',
55
+ '&:disabled': {
56
+ backgroundColor: '$btnDisable',
57
+ color: '$iconDisable',
58
+ cursor: 'default'
59
+ }
60
+ });
61
+ const WeekdayBox = styled(Box, {
62
+ width: '$full',
63
+ display: 'inline-block',
64
+ textAlign: 'center',
65
+ marginBottom: '$spacing-03'
66
+ });
67
+ const CalendarsContainer = styled(Box, {
68
+ width: '100%'
69
+ });
70
+ const CalendarItemContainer = styled(Flex, {});
71
+ const DateContainer = styled(Box, {
72
+ width: '100%',
73
+ position: 'relative',
74
+ display: 'inline-block'
75
+ });
76
+ const TitleButton = styled('p', {
77
+ marginTop: 6,
78
+ fontWeight: 600,
79
+ fontStyle: 'normal',
80
+ fontSize: 16,
81
+ color: '$textPrimary',
82
+ '&:hover': {
83
+ backgroundColor: '$bgSelectedLight',
84
+ color: '$textBrand'
85
+ },
86
+ '&:active': {
87
+ backgroundColor: '$bgBrand',
88
+ color: '$bgWhite'
89
+ },
90
+ cursor: 'pointer',
91
+ '&:disabled': {
92
+ backgroundColor: '$btnDisable',
93
+ color: '$iconDisable',
94
+ cursor: 'default'
95
+ },
96
+ variants: {
97
+ disabled: {
98
+ true: {
99
+ pointerEvents: 'none'
100
+ }
101
+ }
102
+ }
103
+ });
104
+ const MonthButton = styled(Text, {
105
+ minWidth: '70px',
106
+ textAlign: 'center !important',
107
+ borderRadius: '$md',
108
+ padding: '$spacing-03 0',
109
+ cursor: 'pointer',
110
+ fontSize: '$label',
111
+ lineHeight: '$label',
112
+ letterSpacing: '$label',
113
+ fontWeight: '400',
114
+ color: '$textPrimary',
115
+ '&:hover': {
116
+ backgroundColor: '$bgSelectedLight',
117
+ color: '$textBrand'
118
+ },
119
+ '&:active': {
120
+ backgroundColor: '$bgBrand',
121
+ color: '$bgWhite'
122
+ },
123
+ '&:disabled': {
124
+ backgroundColor: '$btnDisable',
125
+ color: '$iconDisable',
126
+ cursor: 'default'
127
+ },
128
+ variants: {
129
+ isSelected: {
130
+ true: {
131
+ backgroundColor: '$bgBrand',
132
+ color: '$bgWhite'
133
+ }
134
+ }
135
+ }
136
+ });
137
+ const DATE_PICKER = 0;
138
+ const MONTH_PICKER = 1;
139
+ const YEAR_PICKER = 2;
140
+ const YEAR_RANGE_PICKER = 3;
141
+ const CalendarMulti = ({
142
+ calendars,
143
+ getDateProps,
144
+ onCalendarDateChange,
145
+ selected,
146
+ containerStyle,
147
+ disabled,
148
+ minDate,
149
+ maxDate,
150
+ disabledDate
151
+ }) => {
152
+ const {
153
+ t,
154
+ i18n
155
+ } = useTranslation(['MajooUI/datePicker', 'translation']);
156
+ const [pickerState, setPickerState] = useState({
157
+ type: DATE_PICKER,
158
+ selectedMonth: Number(calendars[0].month),
159
+ selectedYear: Number(calendars[0].year),
160
+ selectedYearRange: getCalendarStartYear(calendars[0].year),
161
+ selectedYearRangeStart: getCalendarStartYearRange(calendars[0].year)
162
+ });
163
+ const language = i18n.language;
164
+ const monthNamesFull = language === 'en' ? monthNamesFullEng : monthNamesFullId;
165
+ const weekdayNamesShort = language === 'en' ? weekdayNamesShortEng : weekdayNamesShortId;
166
+ useEffect(() => {
167
+ const selectedDate = new Date(pickerState.selectedYear, pickerState.selectedMonth, 1, 0);
168
+ if (pickerState.selectedMonth < 0) {
169
+ setPickerState(current => Object.assign(Object.assign({}, current), {
170
+ selectedMonth: selectedDate.getMonth(),
171
+ selectedYear: selectedDate.getFullYear(),
172
+ selectedYearRange: getCalendarStartYear(selectedDate.getFullYear()),
173
+ selectedYearRangeStart: getCalendarStartYearRange(selectedDate.getFullYear())
174
+ }));
175
+ } else {
176
+ onCalendarDateChange(selectedDate);
177
+ }
178
+ }, [`${pickerState.selectedMonth}/${pickerState.selectedYear}`]);
179
+ const multiDatePicker = calendars.length > 1;
180
+ const renderTitleButton = (index = 0) => {
181
+ return multiDatePicker ? jsxs(TitleButton, {
182
+ onClick: () => {
183
+ setPickerState(current => Object.assign(Object.assign({}, current), {
184
+ type: MONTH_PICKER
185
+ }));
186
+ },
187
+ children: [monthNamesFull[calendars[index].month], " ", calendars[index].year]
188
+ }) : jsxs(TitleButton, {
189
+ onClick: () => {
190
+ if (pickerState.type < YEAR_RANGE_PICKER) setPickerState(current => Object.assign(Object.assign({}, current), {
191
+ type: current.type + 1
192
+ }));
193
+ },
194
+ disabled: pickerState.type === YEAR_RANGE_PICKER,
195
+ children: [pickerState.type === DATE_PICKER && jsxs(Fragment, {
196
+ children: [monthNamesFull[calendars[0].month], " ", calendars[0].year]
197
+ }), pickerState.type === MONTH_PICKER && pickerState.selectedYear, pickerState.type === YEAR_PICKER && jsxs(Fragment, {
198
+ children: [pickerState.selectedYearRange, " - ", pickerState.selectedYearRange + 9]
199
+ }), pickerState.type === YEAR_RANGE_PICKER && jsxs(Fragment, {
200
+ children: [pickerState.selectedYearRangeStart, " - ", pickerState.selectedYearRangeStart + 99]
201
+ })]
202
+ });
203
+ };
204
+ const renderBackButton = () => {
205
+ return jsx(ArrowButton, {
206
+ onClick: () => {
207
+ 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) {
208
+ setPickerState(current => Object.assign(Object.assign({}, current), {
209
+ selectedMonth: pickerState.type === DATE_PICKER ? current.selectedMonth - 1 : current.selectedMonth,
210
+ selectedYear: pickerState.type === MONTH_PICKER ? current.selectedYear - 1 : current.selectedYear,
211
+ selectedYearRange: pickerState.type === YEAR_PICKER ? current.selectedYearRange - 10 : current.selectedYearRange,
212
+ selectedYearRangeStart: pickerState.type === YEAR_RANGE_PICKER ? current.selectedYearRangeStart - 100 : current.selectedYearRangeStart
213
+ }));
214
+ }
215
+ },
216
+ type: "button",
217
+ children: jsx(ChevronLeftOutline, {
218
+ color: "currentColor"
219
+ })
220
+ });
221
+ };
222
+ const renderForwardButton = () => {
223
+ return jsx(ArrowButton, {
224
+ onClick: () => {
225
+ 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) {
226
+ setPickerState(current => Object.assign(Object.assign({}, current), {
227
+ selectedMonth: pickerState.type === DATE_PICKER ? current.selectedMonth === 11 ? 0 : current.selectedMonth + 1 : current.selectedMonth,
228
+ selectedYear: pickerState.type === MONTH_PICKER && current.selectedYear < 2100 || current.selectedMonth === 11 ? current.selectedYear + 1 : current.selectedYear,
229
+ selectedYearRange: pickerState.type === YEAR_PICKER && current.selectedYearRange < 2091 ? current.selectedYearRange + 10 : current.selectedYearRange,
230
+ selectedYearRangeStart: pickerState.type === YEAR_RANGE_PICKER && current.selectedYearRangeStart < 2001 ? current.selectedYearRangeStart + 100 : current.selectedYearRangeStart
231
+ }));
232
+ }
233
+ },
234
+ type: "button",
235
+ children: jsx(ChevronRightOutline, {
236
+ color: "currentColor"
237
+ })
238
+ });
239
+ };
240
+ const renderHeader = () => {
241
+ return jsxs(Flex, {
242
+ justify: "between",
243
+ align: "baseline",
244
+ css: {
245
+ height: '32px'
246
+ },
247
+ children: [renderTitleButton(), jsxs(Flex, {
248
+ align: "center",
249
+ gap: 3,
250
+ children: [renderBackButton(), renderForwardButton()]
251
+ })]
252
+ });
253
+ };
254
+ const renderDateNumber = calendar => {
255
+ return jsxs(Grid, {
256
+ columns: 7,
257
+ css: {
258
+ gridRowGap: '$spacing-02'
259
+ },
260
+ children: [renderWeekLabel(calendar), calendar.weeks.map((week, weekIndex) => week.map((dateObj, index) => {
261
+ const key = `${calendar.month}${calendar.year}${weekIndex}${index}`;
262
+ if (!dateObj) {
263
+ return jsx("div", {
264
+ style: {
265
+ display: 'inline-block',
266
+ width: '32px',
267
+ border: 'none',
268
+ background: 'transparent'
269
+ }
270
+ }, key);
271
+ }
272
+ const {
273
+ date
274
+ } = dateObj;
275
+ const findDisabledDate = (disabledDate || []).find(x => x.getTime() === date.getTime());
276
+ let dateProps = disabled || findDisabledDate ? {} : getDateProps({
277
+ dateObj
278
+ });
279
+ dateProps = dateProps['disabled'] ? {} : dateProps;
280
+ return jsx(DateNumber, Object.assign({}, dateProps, {
281
+ variant: disabled && findDisabledDate ? 'disabled' : getVariant(dateObj, calendar.month),
282
+ isSunday: date.getDay() === 0,
283
+ css: Object.assign({
284
+ width: '$full'
285
+ }, disabled && Object.assign({
286
+ cursor: 'unset'
287
+ }, !findDisabledDate && {
288
+ '&:hover': {
289
+ backgroundColor: 'unset'
290
+ }
291
+ })),
292
+ children: date.getDate()
293
+ }), key);
294
+ }))]
295
+ });
296
+ };
297
+ const renderYearRangesList = () => {
298
+ const yearsRangeList = yearRangesList(pickerState.selectedYearRangeStart);
299
+ return jsx(Grid, {
300
+ columns: 3,
301
+ css: {
302
+ gridRowGap: '$spacing-05',
303
+ gridColumnGap: '$spacing-04',
304
+ padding: '6px 4px 8px 4px'
305
+ },
306
+ children: yearsRangeList.map(range => jsxs(MonthButton, {
307
+ isSelected: pickerState.selectedYearRange === range.start,
308
+ onClick: () => {
309
+ if ((!maxDate || new Date(maxDate).getFullYear() <= range.end) && (!minDate || new Date(minDate).getFullYear() >= range.start)) {
310
+ setPickerState(current => Object.assign(Object.assign({}, current), {
311
+ selectedYearRange: range.start,
312
+ type: YEAR_PICKER
313
+ }));
314
+ }
315
+ },
316
+ children: [range.start, "-", range.end]
317
+ }, range.start))
318
+ });
319
+ };
320
+ const renderYearsList = () => {
321
+ const startYear = pickerState.selectedYearRange;
322
+ const yearsArray = Array.from(new Array(10), (val, index) => index + startYear);
323
+ return jsx(Grid, {
324
+ columns: 3,
325
+ css: {
326
+ gridRowGap: '$spacing-05',
327
+ gridColumnGap: '$spacing-04',
328
+ padding: '6px 4px 8px 4px'
329
+ },
330
+ children: yearsArray.map((year, index) => jsx(MonthButton, {
331
+ isSelected: pickerState.selectedYear === year,
332
+ onClick: () => {
333
+ if ((!maxDate || new Date(maxDate).getFullYear() > year - 1) && (!minDate || new Date(minDate).getFullYear() < year + 1)) {
334
+ setPickerState(current => Object.assign(Object.assign({}, current), {
335
+ selectedYear: year,
336
+ type: MONTH_PICKER
337
+ }));
338
+ }
339
+ },
340
+ children: year
341
+ }, year))
342
+ });
343
+ };
344
+ const renderMonthsList = () => {
345
+ return jsx(Grid, {
346
+ columns: 3,
347
+ css: {
348
+ gridRowGap: '$spacing-05',
349
+ gridColumnGap: '$spacing-04',
350
+ padding: '6px 4px 8px 4px'
351
+ },
352
+ children: monthNamesFull.map((monthName, index) => jsx(MonthButton, {
353
+ isSelected: pickerState.selectedMonth === index,
354
+ onClick: () => {
355
+ if ((!minDate || moment(minDate).isBefore(moment().month(index).year(pickerState.selectedYear))) && (!maxDate || moment(maxDate).isAfter(moment().month(index).year(pickerState.selectedYear)))) {
356
+ setPickerState(current => Object.assign(Object.assign({}, current), {
357
+ selectedMonth: index,
358
+ type: DATE_PICKER
359
+ }));
360
+ }
361
+ },
362
+ children: monthName
363
+ }, monthName))
364
+ });
365
+ };
366
+ const renderWeekLabel = calendar => {
367
+ return weekdayNamesShort.map(weekday => jsx(WeekdayBox, {
368
+ children: jsx(Paragraph, {
369
+ paragraph: "shortContentBold",
370
+ css: {
371
+ color: '$textSecondary',
372
+ fontSize: '$label',
373
+ textAlign: 'center !important'
374
+ },
375
+ children: weekday
376
+ })
377
+ }, `${calendar.month}${calendar.year}${weekday}`));
378
+ };
379
+ if (calendars.length) {
380
+ return jsx(CalendarsContainer, {
381
+ css: containerStyle,
382
+ children: jsxs(Box, {
383
+ children: [renderHeader(), jsx(CalendarItemContainer, {
384
+ gap: 5,
385
+ children: calendars.map((calendar, index) => jsxs(React__default.Fragment, {
386
+ children: [index > 0 && jsx(Separator, {
387
+ orientation: "vertical",
388
+ css: {
389
+ height: 'auto'
390
+ }
391
+ }), jsxs(DateContainer, {
392
+ children: [jsx(Separator, {
393
+ css: {
394
+ mb: '$spacing-04',
395
+ mt: '$spacing-02'
396
+ }
397
+ }), pickerState.type === DATE_PICKER && renderDateNumber(calendar), pickerState.type === MONTH_PICKER && renderMonthsList(), pickerState.type === YEAR_PICKER && renderYearsList(), pickerState.type === YEAR_RANGE_PICKER && renderYearRangesList()]
398
+ })]
399
+ }, `${calendar.month}${calendar.year}`))
400
+ })]
401
+ })
402
+ });
403
+ }
404
+ return null;
405
+ };
406
+
407
+ export { DATE_PICKER, MONTH_PICKER, YEAR_PICKER, YEAR_RANGE_PICKER, CalendarMulti as default };
@@ -0,0 +1,104 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import React__default from 'react';
3
+ import moment from 'moment';
4
+ import Flex from '../../../layout/flex/Flex.esm.js';
5
+ import Text from '../../text/Text.esm.js';
6
+ import { InputTimePicker } from '../timePicker/InputTimePicker.esm.js';
7
+ import { Separator } from '../../separator/Separator.esm.js';
8
+ import { toDateFormat } from '../../../utils/calendar.esm.js';
9
+ import { useTranslation } from 'react-i18next';
10
+
11
+ const CalendarTimePicker = ({
12
+ selected,
13
+ disabled,
14
+ language,
15
+ onSetDateValue,
16
+ isSingle,
17
+ timePickerProps
18
+ }) => {
19
+ const {
20
+ t
21
+ } = useTranslation('MajooUI/datePicker');
22
+ let startTime = moment('00:00', 'HH:mm').toDate();
23
+ let endTime = moment('00:00', 'HH:mm').toDate();
24
+ if (isSingle && selected && selected.length) {
25
+ startTime = selected[0];
26
+ }
27
+ if (!isSingle && selected && selected.length > 1) {
28
+ startTime = selected[0];
29
+ endTime = selected[1];
30
+ }
31
+ const formattedStartDate = selected && selected.length > 0 && !disabled ? toDateFormat(selected[0], language) : '-';
32
+ const formattedEndDate = selected && selected.length > 1 && !disabled ? toDateFormat(selected[1], language) : '-';
33
+ return jsxs(Flex, {
34
+ direction: "column",
35
+ gap: 4,
36
+ css: {
37
+ width: 150
38
+ },
39
+ children: [jsxs(Flex, {
40
+ direction: "column",
41
+ gap: 3,
42
+ children: [jsx(Text, {
43
+ variant: "label",
44
+ color: "primary",
45
+ children: isSingle ? t('label.date', 'Tanggal') : t('dateFromLabel', 'Dari Tanggal')
46
+ }), jsx(Text, {
47
+ variant: "label",
48
+ color: "disable",
49
+ children: formattedStartDate
50
+ })]
51
+ }), jsxs(Flex, {
52
+ direction: "column",
53
+ gap: 3,
54
+ children: [jsx(Text, {
55
+ variant: "label",
56
+ color: "primary",
57
+ children: isSingle ? t('time', 'Waktu') : t('timeFromLabel', 'Dari Pukul')
58
+ }), jsx(InputTimePicker, Object.assign({
59
+ onChange: val => {
60
+ if (isSingle && selected && selected.length && !!onSetDateValue) onSetDateValue(val.toDate());else if (selected && selected.length > 1 && !!onSetDateValue) onSetDateValue([val.toDate(), selected[1]]);
61
+ },
62
+ size: "sm",
63
+ value: startTime,
64
+ disabled: isSingle ? !(selected && selected.length) : !(selected && selected.length > 1)
65
+ }, timePickerProps))]
66
+ }), isSingle ? null : jsxs(React__default.Fragment, {
67
+ children: [jsx(Separator, {
68
+ orientation: "horizontal"
69
+ }), jsxs(Flex, {
70
+ direction: "column",
71
+ gap: 3,
72
+ children: [jsx(Text, {
73
+ variant: "label",
74
+ color: "primary",
75
+ children: t('dateUntilLabel', 'Hingga Tanggal')
76
+ }), jsx(Text, {
77
+ variant: "label",
78
+ color: "disable",
79
+ children: formattedEndDate
80
+ })]
81
+ }), jsxs(Flex, {
82
+ direction: "column",
83
+ gap: 3,
84
+ children: [jsx(Text, {
85
+ variant: "label",
86
+ color: "primary",
87
+ children: t('timeUntilLabel', 'Hingga Pukul')
88
+ }), jsx(InputTimePicker, {
89
+ onChange: val => {
90
+ const endDate = moment(endTime).format('YYYY-MM-DD');
91
+ const newTime = val.format('HH:mm');
92
+ const newValue = moment(`${endDate} ${newTime}`, 'YYYY-MM-DD HH:mm').toDate();
93
+ if (selected && selected.length > 1 && !!onSetDateValue) onSetDateValue([selected[0], newValue]);
94
+ },
95
+ size: "sm",
96
+ value: endTime,
97
+ disabled: !(selected && selected.length > 1)
98
+ })]
99
+ })]
100
+ })]
101
+ });
102
+ };
103
+
104
+ export { CalendarTimePicker as default };
@@ -0,0 +1,89 @@
1
+ import { styled } from '../../../config/stitches.config.esm.js';
2
+
3
+ const DateNumber = styled('div', {
4
+ width: '32px',
5
+ display: 'inline-flex',
6
+ alignItems: 'center',
7
+ justifyContent: 'center',
8
+ cursor: 'pointer',
9
+ fontSize: '$label',
10
+ lineHeight: '$label',
11
+ letterSpacing: '$label',
12
+ fontWeight: '400',
13
+ color: '$textPrimary',
14
+ variants: {
15
+ variant: {
16
+ default: {
17
+ '&:hover': {
18
+ backgroundColor: '$bgSelectedLight',
19
+ color: '$textBrand'
20
+ }
21
+ },
22
+ disabled: {
23
+ backgroundColor: '$btnDisable',
24
+ color: '$textDisable'
25
+ },
26
+ neutral: {
27
+ backgroundColor: 'transparent',
28
+ color: "$gray400"
29
+ },
30
+ selected: {
31
+ backgroundColor: '$bgBrand',
32
+ color: '$white',
33
+ borderRadius: '$round',
34
+ width: 30,
35
+ height: 30,
36
+ margin: 'auto'
37
+ },
38
+ defaultv2: {
39
+ '&:hover': {
40
+ backgroundColor: '$bgSelectedLight'
41
+ }
42
+ },
43
+ selectedv2: {
44
+ backgroundColor: '$bgSelectedLight'
45
+ },
46
+ start: {
47
+ backgroundColor: '$bgBrand',
48
+ borderRadius: '42px 0px 0px 42px',
49
+ color: '$white'
50
+ },
51
+ end: {
52
+ backgroundColor: '$bgBrand',
53
+ borderRadius: '0px 42px 42px 0px',
54
+ color: '$white'
55
+ },
56
+ road: {
57
+ backgroundColor: '$bgSelectedLight'
58
+ }
59
+ },
60
+ size: {
61
+ large: {
62
+ padding: '8px 6px 8px 6px'
63
+ },
64
+ small: {
65
+ height: '32px',
66
+ width: '45.5px'
67
+ }
68
+ },
69
+ isSunday: {
70
+ true: {
71
+ color: '$textDisable'
72
+ }
73
+ }
74
+ },
75
+ compoundVariants: [{
76
+ variant: 'selected',
77
+ size: 'small',
78
+ css: {
79
+ borderRadius: '80px'
80
+ }
81
+ }],
82
+ defaultVariants: {
83
+ variant: 'default',
84
+ size: 'large'
85
+ }
86
+ });
87
+ DateNumber.displayName = 'DateNumber';
88
+
89
+ export { DateNumber as default };