@react-fabric/date 1.0.0-beta.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 (105) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +10 -0
  3. package/dist/cjs/components/Date.module.css +1 -0
  4. package/dist/cjs/components/DateCell.js +98 -0
  5. package/dist/cjs/components/DateHeader.js +142 -0
  6. package/dist/cjs/components/DatePage.js +59 -0
  7. package/dist/cjs/components/DecadePage.js +34 -0
  8. package/dist/cjs/components/MonthPage.js +33 -0
  9. package/dist/cjs/components/TimeSliders.js +131 -0
  10. package/dist/cjs/components/YearPage.js +34 -0
  11. package/dist/cjs/display/DateDisplay.js +35 -0
  12. package/dist/cjs/hijri/index.js +1029 -0
  13. package/dist/cjs/i18n/ar.json.js +25 -0
  14. package/dist/cjs/i18n/en.json.js +21 -0
  15. package/dist/cjs/i18n/index.js +39 -0
  16. package/dist/cjs/i18n/superdate/ar.json.js +86 -0
  17. package/dist/cjs/i18n/superdate/en.json.js +93 -0
  18. package/dist/cjs/index.js +20 -0
  19. package/dist/cjs/panels/BasePanel.js +73 -0
  20. package/dist/cjs/panels/DatePanel.js +205 -0
  21. package/dist/cjs/panels/RangePanel.js +340 -0
  22. package/dist/cjs/superdate/EventPanel.js +173 -0
  23. package/dist/cjs/superdate/QuickSelect.js +134 -0
  24. package/dist/cjs/superdate/RelativeInput.js +79 -0
  25. package/dist/cjs/superdate/RelativePanel.js +91 -0
  26. package/dist/cjs/superdate/SuperDate.module.css +1 -0
  27. package/dist/cjs/superdate/Superdate.js +169 -0
  28. package/dist/cjs/types/index.js +61 -0
  29. package/dist/cjs/utils/dateUtil.js +436 -0
  30. package/dist/esm/components/Date.module.css +1 -0
  31. package/dist/esm/components/DateCell.js +98 -0
  32. package/dist/esm/components/DateHeader.js +142 -0
  33. package/dist/esm/components/DatePage.js +59 -0
  34. package/dist/esm/components/DecadePage.js +34 -0
  35. package/dist/esm/components/MonthPage.js +33 -0
  36. package/dist/esm/components/TimeSliders.js +131 -0
  37. package/dist/esm/components/YearPage.js +34 -0
  38. package/dist/esm/display/DateDisplay.js +35 -0
  39. package/dist/esm/hijri/index.js +1029 -0
  40. package/dist/esm/i18n/ar.json.js +21 -0
  41. package/dist/esm/i18n/en.json.js +18 -0
  42. package/dist/esm/i18n/index.js +39 -0
  43. package/dist/esm/i18n/superdate/ar.json.js +79 -0
  44. package/dist/esm/i18n/superdate/en.json.js +85 -0
  45. package/dist/esm/index.js +9 -0
  46. package/dist/esm/panels/BasePanel.js +73 -0
  47. package/dist/esm/panels/DatePanel.js +205 -0
  48. package/dist/esm/panels/RangePanel.js +340 -0
  49. package/dist/esm/superdate/EventPanel.js +173 -0
  50. package/dist/esm/superdate/QuickSelect.js +134 -0
  51. package/dist/esm/superdate/RelativeInput.js +79 -0
  52. package/dist/esm/superdate/RelativePanel.js +91 -0
  53. package/dist/esm/superdate/SuperDate.module.css +1 -0
  54. package/dist/esm/superdate/Superdate.js +168 -0
  55. package/dist/esm/types/index.js +60 -0
  56. package/dist/esm/utils/dateUtil.js +438 -0
  57. package/dist/types/components/DateCell.d.ts +15 -0
  58. package/dist/types/components/DateHeader.d.ts +14 -0
  59. package/dist/types/components/DatePage.d.ts +6 -0
  60. package/dist/types/components/DecadePage.d.ts +6 -0
  61. package/dist/types/components/MonthPage.d.ts +6 -0
  62. package/dist/types/components/TimeSliders.d.ts +10 -0
  63. package/dist/types/components/YearPage.d.ts +6 -0
  64. package/dist/types/display/DateDisplay.d.ts +15 -0
  65. package/dist/types/hijri/index.d.ts +2 -0
  66. package/dist/types/i18n/index.d.ts +1 -0
  67. package/dist/types/index.d.ts +7 -0
  68. package/dist/types/panels/BasePanel.d.ts +25 -0
  69. package/dist/types/panels/DatePanel.d.ts +2 -0
  70. package/dist/types/panels/RangePanel.d.ts +2 -0
  71. package/dist/types/superdate/EventPanel.d.ts +4 -0
  72. package/dist/types/superdate/QuickSelect.d.ts +1 -0
  73. package/dist/types/superdate/RelativeInput.d.ts +1 -0
  74. package/dist/types/superdate/RelativePanel.d.ts +1 -0
  75. package/dist/types/superdate/Superdate.d.ts +17 -0
  76. package/dist/types/types/index.d.ts +70 -0
  77. package/dist/types/utils/dateUtil.d.ts +30 -0
  78. package/package.json +58 -0
  79. package/src/components/Date.module.css +75 -0
  80. package/src/components/DateCell.tsx +181 -0
  81. package/src/components/DateHeader.tsx +223 -0
  82. package/src/components/DatePage.tsx +107 -0
  83. package/src/components/DecadePage.tsx +53 -0
  84. package/src/components/MonthPage.tsx +52 -0
  85. package/src/components/TimeSliders.tsx +196 -0
  86. package/src/components/YearPage.tsx +53 -0
  87. package/src/display/DateDisplay.tsx +88 -0
  88. package/src/hijri/index.js +1540 -0
  89. package/src/i18n/ar.json +14 -0
  90. package/src/i18n/en.json +13 -0
  91. package/src/i18n/index.ts +31 -0
  92. package/src/i18n/superdate/ar.json +70 -0
  93. package/src/i18n/superdate/en.json +75 -0
  94. package/src/index.ts +32 -0
  95. package/src/panels/BasePanel.tsx +130 -0
  96. package/src/panels/DatePanel.tsx +235 -0
  97. package/src/panels/RangePanel.tsx +400 -0
  98. package/src/superdate/EventPanel.tsx +200 -0
  99. package/src/superdate/QuickSelect.tsx +121 -0
  100. package/src/superdate/RelativeInput.tsx +64 -0
  101. package/src/superdate/RelativePanel.tsx +103 -0
  102. package/src/superdate/SuperDate.module.css +30 -0
  103. package/src/superdate/Superdate.tsx +186 -0
  104. package/src/types/index.ts +121 -0
  105. package/src/utils/dateUtil.ts +551 -0
@@ -0,0 +1,340 @@
1
+ 'use strict';
2
+
3
+ var _defineProperty = require('@babel/runtime/helpers/defineProperty');
4
+ var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
5
+ var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProperties');
6
+ var core = require('@react-fabric/core');
7
+ var utilities = require('@react-fabric/utilities');
8
+ var classNames = require('classnames');
9
+ var dateFns = require('date-fns');
10
+ var react = require('react');
11
+ var reactI18next = require('react-i18next');
12
+ var index = require('../types/index.js');
13
+ var dateUtil = require('../utils/dateUtil.js');
14
+ var BasePanel = require('./BasePanel.js');
15
+ var jsxRuntime = require('react/jsx-runtime');
16
+
17
+ var _excluded = ["className", "max", "min", "dateDisabled", "onChange", "showHijriToggle", "value", "withTime", "showApply"];
18
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
19
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
20
+ var RangePanel = function RangePanel(_ref) {
21
+ var className = _ref.className,
22
+ max = _ref.max,
23
+ min = _ref.min,
24
+ dateDisabled = _ref.dateDisabled,
25
+ onChange = _ref.onChange,
26
+ showHijriToggle = _ref.showHijriToggle,
27
+ value = _ref.value,
28
+ withTime = _ref.withTime,
29
+ _ref$showApply = _ref.showApply,
30
+ showApply = _ref$showApply === void 0 ? false : _ref$showApply,
31
+ rest = _objectWithoutProperties(_ref, _excluded);
32
+ var _useTranslation = reactI18next.useTranslation("date"),
33
+ t = _useTranslation.t;
34
+ var _useGlobals = core.useGlobals(),
35
+ currentCalendar = _useGlobals.currentCalendar;
36
+ var _useState = react.useState(currentCalendar === "hijri"),
37
+ _useState2 = _slicedToArray(_useState, 2),
38
+ isHijri = _useState2[0],
39
+ setHijri = _useState2[1];
40
+ var fireChange = core.useDebounce(onChange, [onChange]);
41
+ react.useEffect(function () {
42
+ setHijri(currentCalendar === "hijri");
43
+ }, [currentCalendar]);
44
+ var _useReducer = react.useReducer(function (state, action) {
45
+ if (action.type === "reset") {
46
+ if (!utilities.isEmpty(action.date)) {
47
+ var _action$date = _slicedToArray(action.date, 2),
48
+ start = _action$date[0],
49
+ end = _action$date[1];
50
+ var dateStart = new Date(start);
51
+ var dateEnd = new Date(end);
52
+ state.hilight = undefined;
53
+ state.selected = [dateStart, dateEnd];
54
+ state.start.pageDate = dateStart;
55
+ state.start.hour = dateStart.getHours();
56
+ state.start.minute = dateStart.getMinutes();
57
+ state.end.pageDate = dateEnd;
58
+ state.end.hour = dateEnd.getHours();
59
+ state.end.minute = dateEnd.getMinutes();
60
+ } else {
61
+ state.hilight = undefined;
62
+ state.selected = undefined;
63
+ state.start.pageDate = new Date();
64
+ state.start.hour = 0;
65
+ state.start.minute = 0;
66
+ state.end.pageDate = dateUtil.DateUtil.addMonths(new Date(), 1);
67
+ state.end.hour = 0;
68
+ state.end.minute = 0;
69
+ }
70
+ }
71
+ if (action.type === "changeDate") {
72
+ if (!state.hilight) {
73
+ state.hilight = [action.date, action.date];
74
+ state.start.pageDate = action.date;
75
+ state.end.pageDate = dateUtil.DateUtil.addMonths(action.date, 1, isHijri);
76
+ } else {
77
+ var isStartAfter = dateFns.isAfter(state.hilight[0], action.date);
78
+ var _start = isStartAfter ? action.date : state.hilight[0];
79
+ var _end = isStartAfter ? state.hilight[0] : action.date;
80
+ state.selected = [_start, _end];
81
+ state.hilight = undefined;
82
+ state.start.pageDate = _start;
83
+ state.end.pageDate = _end;
84
+ }
85
+ }
86
+ if (action.type === "changeHilight") {
87
+ if (state.hilight && action.date) {
88
+ var _state$hilight = _slicedToArray(state.hilight, 1),
89
+ _start2 = _state$hilight[0];
90
+ state.hilight = [_start2, action.date];
91
+ } else {
92
+ state.hilight = undefined;
93
+ }
94
+ }
95
+ if (action.type === "changeTime") {
96
+ if (action.range === "start") {
97
+ state.start.hour = action.hour;
98
+ state.start.minute = action.minute;
99
+ if (state.selected) {
100
+ var _state$selected$, _state$selected$2;
101
+ (_state$selected$ = state.selected[0]) === null || _state$selected$ === void 0 || _state$selected$.setHours(action.hour);
102
+ (_state$selected$2 = state.selected[0]) === null || _state$selected$2 === void 0 || _state$selected$2.setMinutes(action.minute);
103
+ }
104
+ }
105
+ if (action.range === "end") {
106
+ state.end.hour = action.hour;
107
+ state.end.minute = action.minute;
108
+ if (state.selected) {
109
+ var _state$selected$3, _state$selected$4;
110
+ (_state$selected$3 = state.selected[1]) === null || _state$selected$3 === void 0 || _state$selected$3.setHours(action.hour);
111
+ (_state$selected$4 = state.selected[1]) === null || _state$selected$4 === void 0 || _state$selected$4.setMinutes(action.minute);
112
+ }
113
+ }
114
+ }
115
+ if (action.type === "changePage") {
116
+ state[action.range].page = action.page;
117
+ }
118
+ if (action.type === "changePageDate") {
119
+ state[action.range].pageDate = action.date;
120
+ if (action.pageChange) {
121
+ state[action.range].page = Math.max(state[action.range].page - 1, 0);
122
+ action.range === "start" && state.start.page === index.PageType.DATE && (state.end.pageDate = dateFns.addMonths(action.date, 1));
123
+ }
124
+ }
125
+ if (action.type === "changeDate" || action.type === "changeTime") {
126
+ if (min && state.selected && dateFns.isBefore(state.selected[0], new Date(min))) {
127
+ state.selected[0] = new Date(min);
128
+ state.start.hour = state.selected[0].getHours();
129
+ state.start.minute = state.selected[0].getMinutes();
130
+ }
131
+ if (max && state.selected && dateFns.isAfter(state.selected[1], new Date(max))) {
132
+ state.selected[1] = new Date(max);
133
+ state.end.hour = state.selected[1].getHours();
134
+ state.end.minute = state.selected[1].getMinutes();
135
+ }
136
+ !showApply && state.selected && !state.hilight && (fireChange === null || fireChange === void 0 ? void 0 : fireChange([state.selected[0].toISOString(), state.selected[1].toISOString()]));
137
+ }
138
+ return _objectSpread({}, state);
139
+ }, {
140
+ start: {
141
+ page: index.PageType.DATE,
142
+ pageDate: new Date(),
143
+ hour: 0,
144
+ minute: 0
145
+ },
146
+ end: {
147
+ page: index.PageType.DATE,
148
+ pageDate: dateUtil.DateUtil.addMonths(new Date(), 1, isHijri),
149
+ hour: 0,
150
+ minute: 0
151
+ }
152
+ }),
153
+ _useReducer2 = _slicedToArray(_useReducer, 2),
154
+ state = _useReducer2[0],
155
+ dispatch = _useReducer2[1];
156
+ react.useEffect(function () {
157
+ dispatch({
158
+ type: "reset",
159
+ date: value
160
+ });
161
+ }, [value]);
162
+ var isStartDateDisabled = react.useCallback(function (dt) {
163
+ if (state.start.page === index.PageType.DATE) {
164
+ if (utilities.isArray(dateDisabled)) {
165
+ return !!dateDisabled.find(function (dd) {
166
+ return dateFns.isSameDay(new Date(dd), dt);
167
+ });
168
+ }
169
+ }
170
+ return dateUtil.DateUtil.isDisabled(dt, state.start.page, min, max);
171
+ }, [state.start.page, min, max, dateDisabled]);
172
+ var isEndDateDisabled = react.useCallback(function (dt) {
173
+ if (state.end.page === index.PageType.DATE) {
174
+ if (utilities.isArray(dateDisabled)) {
175
+ return !!dateDisabled.find(function (dd) {
176
+ return dateFns.isSameDay(new Date(dd), dt);
177
+ });
178
+ }
179
+ }
180
+ return dateUtil.DateUtil.isDisabled(dt, state.end.page, min, max);
181
+ }, [state.end.page, min, max, dateDisabled]);
182
+ var changeStartPageDate = react.useCallback(function (date) {
183
+ var pageChange = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
184
+ dispatch({
185
+ type: "changePageDate",
186
+ pageChange: pageChange,
187
+ range: "start",
188
+ date: date
189
+ });
190
+ }, []);
191
+ var changeEndPageDate = react.useCallback(function (date) {
192
+ var pageChange = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
193
+ dispatch({
194
+ type: "changePageDate",
195
+ pageChange: pageChange,
196
+ range: "end",
197
+ date: date
198
+ });
199
+ }, []);
200
+ var selectDate = react.useCallback(function (date) {
201
+ dispatch({
202
+ type: "changeDate",
203
+ date: date
204
+ });
205
+ }, []);
206
+ return /*#__PURE__*/jsxRuntime.jsxs("div", _objectSpread(_objectSpread({
207
+ className: classNames("block overflow-hidden bg-base rounded-capped", className)
208
+ }, rest), {}, {
209
+ children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
210
+ className: "flex flex-nowrap",
211
+ children: [/*#__PURE__*/jsxRuntime.jsx(BasePanel.BasePanel, _objectSpread(_objectSpread({}, state.start), {}, {
212
+ max: max,
213
+ min: min,
214
+ hideNext: true,
215
+ withTime: withTime,
216
+ isHijri: isHijri,
217
+ hilight: state.hilight,
218
+ selected: state.selected,
219
+ selectDate: selectDate,
220
+ isDateDisabled: isStartDateDisabled,
221
+ changeTime: function changeTime(time) {
222
+ return dispatch(_objectSpread({
223
+ type: "changeTime",
224
+ range: "start"
225
+ }, time));
226
+ },
227
+ changePage: function changePage(page) {
228
+ return dispatch({
229
+ type: "changePage",
230
+ range: "start",
231
+ page: page
232
+ });
233
+ },
234
+ mouseOver: function mouseOver(date) {
235
+ return dispatch({
236
+ type: "changeHilight",
237
+ date: date
238
+ });
239
+ },
240
+ changePageDate: changeStartPageDate
241
+ })), /*#__PURE__*/jsxRuntime.jsx("div", {
242
+ className: "border-s border-s-dimmed"
243
+ }), /*#__PURE__*/jsxRuntime.jsx(BasePanel.BasePanel, _objectSpread(_objectSpread({}, state.end), {}, {
244
+ max: max,
245
+ min: min,
246
+ hidePrevious: true,
247
+ withTime: withTime,
248
+ isHijri: isHijri,
249
+ hilight: state.hilight,
250
+ selected: state.selected,
251
+ selectDate: selectDate,
252
+ isDateDisabled: isEndDateDisabled,
253
+ changeTime: function changeTime(time) {
254
+ return dispatch(_objectSpread({
255
+ type: "changeTime",
256
+ range: "end"
257
+ }, time));
258
+ },
259
+ changePage: function changePage(page) {
260
+ return dispatch({
261
+ type: "changePage",
262
+ range: "end",
263
+ page: page
264
+ });
265
+ },
266
+ mouseOver: function mouseOver(date) {
267
+ return dispatch({
268
+ type: "changeHilight",
269
+ date: date
270
+ });
271
+ },
272
+ changePageDate: changeEndPageDate
273
+ }))]
274
+ }), /*#__PURE__*/jsxRuntime.jsxs("div", {
275
+ className: "border-t flex flex-nowrap justify-between px-2",
276
+ children: [/*#__PURE__*/jsxRuntime.jsx("span", {
277
+ children: showHijriToggle && /*#__PURE__*/jsxRuntime.jsx(core.Button, {
278
+ size: "sm",
279
+ variant: "link",
280
+ color: "primary",
281
+ className: "my-1",
282
+ onClick: function onClick() {
283
+ setHijri(!isHijri);
284
+ },
285
+ children: t(isHijri ? "label.gregorian" : "label.hijri")
286
+ })
287
+ }), state.start.page !== index.PageType.DATE && /*#__PURE__*/jsxRuntime.jsx(core.Button, {
288
+ size: "sm",
289
+ variant: "link",
290
+ color: "primary",
291
+ className: "my-1",
292
+ onClick: function onClick() {
293
+ return dispatch({
294
+ type: "changePage",
295
+ range: "start",
296
+ page: index.PageType.DATE
297
+ });
298
+ },
299
+ children: t("core:action.cancel")
300
+ }), state.end.page !== index.PageType.DATE && /*#__PURE__*/jsxRuntime.jsx(core.Button, {
301
+ size: "sm",
302
+ variant: "link",
303
+ color: "primary",
304
+ className: "my-1",
305
+ onClick: function onClick() {
306
+ return dispatch({
307
+ type: "changePage",
308
+ range: "end",
309
+ page: index.PageType.DATE
310
+ });
311
+ },
312
+ children: t("core:action.cancel")
313
+ }), state.hilight && /*#__PURE__*/jsxRuntime.jsx(core.Button, {
314
+ size: "sm",
315
+ variant: "link",
316
+ color: "primary",
317
+ className: "my-1",
318
+ onClick: function onClick() {
319
+ return dispatch({
320
+ type: "changeHilight"
321
+ });
322
+ },
323
+ children: t("core:action.cancel")
324
+ }), !state.hilight && showApply && /*#__PURE__*/jsxRuntime.jsx(core.Button, {
325
+ size: "sm",
326
+ variant: "solid",
327
+ color: "primary",
328
+ disabled: !state.selected,
329
+ className: "my-1",
330
+ onClick: function onClick() {
331
+ var _state$selected, _state$selected2;
332
+ return fireChange === null || fireChange === void 0 ? void 0 : fireChange([(_state$selected = state.selected) === null || _state$selected === void 0 ? void 0 : _state$selected[0].toISOString(), (_state$selected2 = state.selected) === null || _state$selected2 === void 0 ? void 0 : _state$selected2[1].toISOString()]);
333
+ },
334
+ children: t("core:action.apply")
335
+ })]
336
+ })]
337
+ }));
338
+ };
339
+
340
+ exports.RangePanel = RangePanel;
@@ -0,0 +1,173 @@
1
+ 'use strict';
2
+
3
+ var _defineProperty = require('@babel/runtime/helpers/defineProperty');
4
+ var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
5
+ var _toConsumableArray = require('@babel/runtime/helpers/toConsumableArray');
6
+ var core = require('@react-fabric/core');
7
+ var utilities = require('@react-fabric/utilities');
8
+ var dateFns = require('date-fns');
9
+ var i18next = require('i18next');
10
+ var react = require('react');
11
+ var reactI18next = require('react-i18next');
12
+ var DateHeader = require('../components/DateHeader.js');
13
+ var DecadePage = require('../components/DecadePage.js');
14
+ var YearPage = require('../components/YearPage.js');
15
+ var index = require('../types/index.js');
16
+ var dateUtil = require('../utils/dateUtil.js');
17
+ var jsxRuntime = require('react/jsx-runtime');
18
+
19
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
20
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
21
+ var makeList = function makeList(year) {
22
+ var predefined = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
23
+ var list = _toConsumableArray(predefined);
24
+ list.push({
25
+ label: "superdate:event.newYear",
26
+ start: dateFns.startOfDay(new Date("".concat(year - 1, "-12-31"))),
27
+ end: dateFns.endOfDay(new Date("".concat(year, "-01-01")))
28
+ });
29
+ list.push({
30
+ label: "superdate:event.christmas",
31
+ start: dateFns.startOfDay(new Date("".concat(year, "-12-24"))),
32
+ end: dateFns.endOfDay(new Date("".concat(year, "-12-26")))
33
+ });
34
+ // calculate ramadan period
35
+ var hijriStart = dateUtil.DateUtil.startOfYear(new Date("".concat(year - 1, "-12-31")), true);
36
+ hijriStart = dateUtil.DateUtil.addMonths(hijriStart, 8, true);
37
+ if (hijriStart.getFullYear() !== year) {
38
+ hijriStart = dateUtil.DateUtil.addYears(hijriStart, hijriStart.getFullYear() > year ? -1 : 1, true);
39
+ }
40
+ var hijriEnd = dateUtil.DateUtil.endOfMonth(hijriStart, true);
41
+ list.push({
42
+ label: "superdate:event.ramadan",
43
+ start: dateFns.startOfDay(hijriStart),
44
+ end: dateFns.endOfDay(hijriEnd)
45
+ });
46
+ return list.sort(function (a, b) {
47
+ return a.start.getTime() < b.start.getTime() ? -1 : 1;
48
+ });
49
+ };
50
+ var EventPanel = function EventPanel(_ref) {
51
+ var isHijri = _ref.isHijri,
52
+ onChange = _ref.onChange,
53
+ _ref$events = _ref.events,
54
+ events = _ref$events === void 0 ? utilities.EMPTY_ARRAY : _ref$events;
55
+ var _useTranslation = reactI18next.useTranslation(),
56
+ t = _useTranslation.t;
57
+ var _useState = react.useState({}),
58
+ _useState2 = _slicedToArray(_useState, 2),
59
+ predefined = _useState2[0],
60
+ setPredefined = _useState2[1];
61
+ var _useReducer = react.useReducer(function (state, action) {
62
+ var resetList = false;
63
+ if (action.type === "init") {
64
+ state.pageDate = new Date();
65
+ resetList = true;
66
+ }
67
+ if (action.type === "changePage") {
68
+ state.page = Math.max(action.page, index.PageType.MONTH);
69
+ }
70
+ if (action.type === "changePageDate") {
71
+ resetList = true;
72
+ state.pageDate = action.date;
73
+ if (action.changePage !== false) {
74
+ state.page = Math.max(state.page - 1, index.PageType.MONTH);
75
+ }
76
+ }
77
+ if (resetList) {
78
+ var _predefined$year;
79
+ var year = state.pageDate.getFullYear();
80
+ state.events = makeList(year, (_predefined$year = predefined[year]) !== null && _predefined$year !== void 0 ? _predefined$year : []);
81
+ }
82
+ return _objectSpread({}, state);
83
+ }, {
84
+ pageDate: new Date(),
85
+ page: index.PageType.MONTH,
86
+ events: []
87
+ }),
88
+ _useReducer2 = _slicedToArray(_useReducer, 2),
89
+ state = _useReducer2[0],
90
+ dispatch = _useReducer2[1];
91
+ react.useEffect(function () {
92
+ dispatch({
93
+ type: "init"
94
+ });
95
+ }, []);
96
+ react.useEffect(function () {
97
+ var predefined = {};
98
+ events.forEach(function (evt) {
99
+ var start = dateFns.startOfDay(new Date(evt.start));
100
+ var end = dateFns.endOfDay(new Date(evt.end));
101
+ if (!predefined[start.getFullYear()]) predefined[start.getFullYear()] = [];
102
+ predefined[start.getFullYear()].push(evt);
103
+ if (start.getFullYear() !== end.getFullYear()) {
104
+ if (!predefined[end.getFullYear()]) predefined[end.getFullYear()] = [];
105
+ predefined[end.getFullYear()].push(evt);
106
+ }
107
+ });
108
+ setPredefined(predefined);
109
+ }, [events]);
110
+ return /*#__PURE__*/jsxRuntime.jsxs(core.Section, {
111
+ children: [/*#__PURE__*/jsxRuntime.jsx(DateHeader.DateHeader, {
112
+ page: state.page,
113
+ pageDate: state.pageDate,
114
+ changePage: function changePage(page) {
115
+ return dispatch({
116
+ type: "changePage",
117
+ page: page
118
+ });
119
+ },
120
+ changePageDate: function changePageDate(date) {
121
+ return dispatch({
122
+ type: "changePageDate",
123
+ date: date,
124
+ changePage: false
125
+ });
126
+ }
127
+ }), state.page === index.PageType.MONTH && /*#__PURE__*/jsxRuntime.jsx(core.Content, {
128
+ className: "p-2 max-h-48",
129
+ children: state.events.map(function (evt) {
130
+ return /*#__PURE__*/jsxRuntime.jsxs("div", {
131
+ role: "none",
132
+ onClick: function onClick() {
133
+ onChange === null || onChange === void 0 || onChange("".concat(evt.start.toISOString(), "|").concat(evt.end.toISOString()), [evt.start.toISOString(), evt.end.toISOString()]);
134
+ },
135
+ className: "text-sm my-1 py-1 px-2 flex flex-nowrap items-center cursor-pointer rounded hover:bg-primary-50",
136
+ children: [/*#__PURE__*/jsxRuntime.jsx("div", {
137
+ className: "flex-1 truncate",
138
+ children: t(evt.label, {
139
+ defaultValue: evt.label
140
+ })
141
+ }), /*#__PURE__*/jsxRuntime.jsxs("div", {
142
+ className: "text-muted text-xs",
143
+ children: [dateUtil.DateUtil.format(evt.start, dateFns.isSameMonth(evt.start, evt.end) ? "dd" : "dd/MMM", i18next.language, isHijri), /*#__PURE__*/jsxRuntime.jsx("span", {
144
+ children: " - "
145
+ }), dateUtil.DateUtil.format(evt.end, "dd/MMM", i18next.language, isHijri)]
146
+ })]
147
+ }, evt.label);
148
+ })
149
+ }), state.page === index.PageType.YEAR && /*#__PURE__*/jsxRuntime.jsx(YearPage.YearPage, {
150
+ isHijri: isHijri,
151
+ page: state.page,
152
+ pageDate: state.pageDate,
153
+ changePageDate: function changePageDate(date) {
154
+ return dispatch({
155
+ type: "changePageDate",
156
+ date: date
157
+ });
158
+ }
159
+ }), state.page === index.PageType.DECADE && /*#__PURE__*/jsxRuntime.jsx(DecadePage.DecadePage, {
160
+ isHijri: isHijri,
161
+ page: state.page,
162
+ pageDate: state.pageDate,
163
+ changePageDate: function changePageDate(date) {
164
+ return dispatch({
165
+ type: "changePageDate",
166
+ date: date
167
+ });
168
+ }
169
+ })]
170
+ });
171
+ };
172
+
173
+ exports.EventPanel = EventPanel;
@@ -0,0 +1,134 @@
1
+ 'use strict';
2
+
3
+ var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
4
+ var core = require('@react-fabric/core');
5
+ var form = require('@react-fabric/form');
6
+ var utilities = require('@react-fabric/utilities');
7
+ var react = require('react');
8
+ var reactI18next = require('react-i18next');
9
+ var index = require('../types/index.js');
10
+ var RelativeInput = require('./RelativeInput.js');
11
+ var jsxRuntime = require('react/jsx-runtime');
12
+
13
+ var DEFAULT_PRESETS = [{
14
+ value: "$day",
15
+ label: "superdate:now.$day"
16
+ }, {
17
+ value: "$day-1",
18
+ label: "superdate:prev.$day"
19
+ }, {
20
+ value: "$day+1",
21
+ label: "superdate:next.$day"
22
+ }, {
23
+ value: "$week",
24
+ label: "superdate:now.$week"
25
+ }, {
26
+ value: "$week-1",
27
+ label: "superdate:prev.$week"
28
+ }, {
29
+ value: "$week+1",
30
+ label: "superdate:next.$week"
31
+ }, {
32
+ value: "$month",
33
+ label: "superdate:now.$month"
34
+ }, {
35
+ value: "$month-1",
36
+ label: "superdate:prev.$month"
37
+ }, {
38
+ value: "$month+1",
39
+ label: "superdate:next.$month"
40
+ }, {
41
+ value: "$quarter",
42
+ label: "superdate:now.$quarter"
43
+ }, {
44
+ value: "$quarter-1",
45
+ label: "superdate:prev.$quarter"
46
+ }, {
47
+ value: "$quarter+1",
48
+ label: "superdate:next.$quarter"
49
+ }, {
50
+ value: "$year",
51
+ label: "superdate:now.$year"
52
+ }, {
53
+ value: "$year-1",
54
+ label: "superdate:prev.$year"
55
+ }, {
56
+ value: "$year+1",
57
+ label: "superdate:next.$year"
58
+ }];
59
+ var schema = utilities.yup.object({
60
+ rel: utilities.yup.object({
61
+ diff: utilities.yup.number().required().label("Difference"),
62
+ op: utilities.yup.string().required().oneOf(["+", "-"]).label("Operator"),
63
+ part: utilities.yup.string().required().oneOf(Object.values(index.DatePart)).label("Date part")
64
+ })
65
+ });
66
+ var QuickSelect = function QuickSelect(_ref) {
67
+ var _ref$presets = _ref.presets,
68
+ presets = _ref$presets === void 0 ? DEFAULT_PRESETS : _ref$presets,
69
+ _ref$value = _ref.value,
70
+ value = _ref$value === void 0 ? "" : _ref$value,
71
+ onChange = _ref.onChange;
72
+ var _useTranslation = reactI18next.useTranslation(),
73
+ t = _useTranslation.t;
74
+ var handleChange = react.useCallback(function (_ref2) {
75
+ var _ref2$rel = _ref2.rel,
76
+ part = _ref2$rel.part,
77
+ diff = _ref2$rel.diff,
78
+ op = _ref2$rel.op;
79
+ onChange("".concat(part).concat(op).concat(diff, "|").concat(index.DatePart.NOW));
80
+ }, []);
81
+ var defaultValue = react.useMemo(function () {
82
+ if (value !== null && value !== void 0 && value.endsWith(index.DatePart.NOW)) {
83
+ var _value$split$shift$ma;
84
+ var _ref3 = (_value$split$shift$ma = value.split("|").shift().match(/^(\$\w+)([+-])(\d+)?$/)) !== null && _value$split$shift$ma !== void 0 ? _value$split$shift$ma : [],
85
+ _ref4 = _slicedToArray(_ref3, 4),
86
+ part = _ref4[1],
87
+ op = _ref4[2],
88
+ _ref4$ = _ref4[3],
89
+ diff = _ref4$ === void 0 ? "0" : _ref4$;
90
+ return {
91
+ rel: {
92
+ part: part,
93
+ op: op,
94
+ diff: diff
95
+ }
96
+ };
97
+ }
98
+ }, [value]);
99
+ return /*#__PURE__*/jsxRuntime.jsxs(core.Content, {
100
+ children: [/*#__PURE__*/jsxRuntime.jsx("div", {
101
+ className: "inline-block origin-left rtl:origin-right",
102
+ style: {
103
+ zoom: 0.85
104
+ },
105
+ children: /*#__PURE__*/jsxRuntime.jsx(form.Form, {
106
+ schema: schema,
107
+ onSubmit: handleChange,
108
+ defaultValues: defaultValue,
109
+ children: /*#__PURE__*/jsxRuntime.jsx(RelativeInput.RelativeInput, {
110
+ label: t("superdate:label.relative"),
111
+ prefix: "rel",
112
+ showApply: true
113
+ })
114
+ })
115
+ }), /*#__PURE__*/jsxRuntime.jsx(core.Divider, {
116
+ children: t("superdate:label.preset")
117
+ }), /*#__PURE__*/jsxRuntime.jsx("div", {
118
+ className: "grid grid-cols-3 flex-row text-sm gap-2",
119
+ children: presets.map(function (pr) {
120
+ return /*#__PURE__*/jsxRuntime.jsx("button", {
121
+ className: "link appearance-none text-start",
122
+ onClick: function onClick() {
123
+ return onChange === null || onChange === void 0 ? void 0 : onChange(pr.value);
124
+ },
125
+ children: t(pr.label, {
126
+ defaultValue: pr.label
127
+ })
128
+ }, pr.value);
129
+ })
130
+ })]
131
+ });
132
+ };
133
+
134
+ exports.QuickSelect = QuickSelect;