@react-fabric/date 1.0.0-beta.9 → 1.0.2
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.
- package/README.md +2 -9
- package/{src/components/Date.module.css → css/_date.css} +5 -5
- package/{src/superdate/SuperDate.module.css → css/styles.css} +2 -8
- package/dist/cjs/components/DateCell.js +5 -7
- package/dist/cjs/components/DateHeader.js +27 -20
- package/dist/cjs/components/DatePage.js +10 -12
- package/dist/cjs/components/DecadePage.js +3 -3
- package/dist/cjs/components/MonthPage.js +3 -3
- package/dist/cjs/components/TimeSliders.js +36 -35
- package/dist/cjs/components/YearPage.js +3 -3
- package/dist/cjs/display/DateDisplay.js +25 -8
- package/dist/cjs/display/DateDuration.js +155 -0
- package/dist/cjs/hijri/DateConverter.js +154 -0
- package/dist/cjs/hijri/FormatDate.js +116 -0
- package/dist/cjs/hijri/HijriDate.js +531 -0
- package/dist/cjs/hijri/StringDateParser.js +74 -0
- package/dist/cjs/hijri/index.js +15 -1025
- package/dist/cjs/hijri/initializer.js +113 -0
- package/dist/cjs/hijri/locales.js +19 -0
- package/dist/cjs/hijri/safe.js +17 -0
- package/dist/cjs/i18n/ar/date.json.js +213 -0
- package/dist/cjs/i18n/en/date.json.js +83 -0
- package/dist/cjs/i18n/index.js +4 -10
- package/dist/cjs/index.js +41 -2
- package/dist/cjs/panels/BasePanel.js +6 -5
- package/dist/cjs/panels/DatePanel.js +45 -21
- package/dist/cjs/{superdate → panels}/EventPanel.js +28 -12
- package/dist/cjs/panels/RangePanel.js +49 -19
- package/dist/cjs/utils/dateUtil.js +3 -5
- package/dist/esm/components/DateCell.js +6 -8
- package/dist/esm/components/DateHeader.js +28 -21
- package/dist/esm/components/DatePage.js +11 -13
- package/dist/esm/components/DecadePage.js +3 -3
- package/dist/esm/components/MonthPage.js +3 -3
- package/dist/esm/components/TimeSliders.js +38 -37
- package/dist/esm/components/YearPage.js +3 -3
- package/dist/esm/display/DateDisplay.js +26 -9
- package/dist/esm/display/DateDuration.js +155 -0
- package/dist/esm/hijri/DateConverter.js +152 -0
- package/dist/esm/hijri/FormatDate.js +113 -0
- package/dist/esm/hijri/HijriDate.js +528 -0
- package/dist/esm/hijri/StringDateParser.js +74 -0
- package/dist/esm/hijri/index.js +15 -1025
- package/dist/esm/hijri/initializer.js +113 -0
- package/dist/esm/hijri/locales.js +18 -0
- package/dist/esm/hijri/safe.js +14 -0
- package/dist/esm/i18n/ar/date.json.js +209 -0
- package/dist/esm/i18n/en/date.json.js +79 -0
- package/dist/esm/i18n/index.js +2 -8
- package/dist/esm/index.js +36 -1
- package/dist/esm/panels/BasePanel.js +6 -5
- package/dist/esm/panels/DatePanel.js +48 -24
- package/dist/esm/{superdate → panels}/EventPanel.js +29 -13
- package/dist/esm/panels/RangePanel.js +52 -22
- package/dist/esm/utils/dateUtil.js +4 -6
- package/dist/types/components/DateCell.d.ts +1 -1
- package/dist/types/components/DateHeader.d.ts +1 -1
- package/dist/types/components/DatePage.d.ts +1 -1
- package/dist/types/components/DecadePage.d.ts +1 -1
- package/dist/types/components/MonthPage.d.ts +1 -1
- package/dist/types/components/TimeSliders.d.ts +1 -1
- package/dist/types/components/YearPage.d.ts +1 -1
- package/dist/types/display/DateDisplay.d.ts +17 -4
- package/dist/types/display/DateDuration.d.ts +25 -0
- package/dist/types/hijri/DateConverter.d.ts +13 -0
- package/dist/types/hijri/FormatDate.d.ts +19 -0
- package/dist/types/hijri/HijriDate.d.ts +214 -0
- package/dist/types/hijri/StringDateParser.d.ts +11 -0
- package/dist/types/hijri/index.d.ts +2 -2
- package/dist/types/hijri/initializer.d.ts +129 -0
- package/dist/types/hijri/locales.d.ts +19 -0
- package/dist/types/hijri/safe.d.ts +3 -0
- package/dist/types/index.d.ts +32 -1
- package/dist/types/panels/BasePanel.d.ts +1 -1
- package/dist/types/panels/DatePanel.d.ts +22 -1
- package/dist/types/panels/EventPanel.d.ts +17 -0
- package/dist/types/panels/RangePanel.d.ts +19 -1
- package/dist/types/types/index.d.ts +8 -40
- package/package.json +14 -21
- package/src/components/DateCell.tsx +20 -75
- package/src/components/DateHeader.tsx +27 -78
- package/src/components/DatePage.tsx +11 -36
- package/src/components/DecadePage.tsx +2 -2
- package/src/components/MonthPage.tsx +2 -2
- package/src/components/TimeSliders.tsx +20 -60
- package/src/components/YearPage.tsx +2 -2
- package/src/display/DateDisplay.tsx +26 -38
- package/src/display/DateDuration.tsx +170 -0
- package/src/hijri/DateConverter.js +175 -0
- package/src/hijri/FormatDate.js +134 -0
- package/src/hijri/HijriDate.js +477 -0
- package/src/hijri/StringDateParser.js +68 -0
- package/src/hijri/index.js +16 -1535
- package/src/hijri/initializer.js +96 -0
- package/src/hijri/locales.js +109 -0
- package/src/hijri/safe.js +16 -0
- package/src/i18n/ar/date.json +203 -0
- package/src/i18n/en/date.json +73 -0
- package/src/i18n/index.ts +2 -5
- package/src/index.ts +29 -18
- package/src/panels/BasePanel.tsx +7 -10
- package/src/panels/DatePanel.tsx +41 -33
- package/src/{superdate → panels}/EventPanel.tsx +52 -53
- package/src/panels/RangePanel.tsx +54 -60
- package/src/types/index.ts +8 -43
- package/src/utils/dateUtil.ts +26 -82
- package/dist/cjs/components/Date.module.css +0 -1
- package/dist/cjs/i18n/ar.json.js +0 -25
- package/dist/cjs/i18n/en.json.js +0 -21
- package/dist/cjs/i18n/superdate/ar.json.js +0 -86
- package/dist/cjs/i18n/superdate/en.json.js +0 -93
- package/dist/cjs/superdate/QuickSelect.js +0 -134
- package/dist/cjs/superdate/RelativeInput.js +0 -79
- package/dist/cjs/superdate/RelativePanel.js +0 -91
- package/dist/cjs/superdate/SuperDate.module.css +0 -1
- package/dist/cjs/superdate/Superdate.js +0 -177
- package/dist/esm/components/Date.module.css +0 -1
- package/dist/esm/i18n/ar.json.js +0 -21
- package/dist/esm/i18n/en.json.js +0 -18
- package/dist/esm/i18n/superdate/ar.json.js +0 -79
- package/dist/esm/i18n/superdate/en.json.js +0 -85
- package/dist/esm/superdate/QuickSelect.js +0 -134
- package/dist/esm/superdate/RelativeInput.js +0 -79
- package/dist/esm/superdate/RelativePanel.js +0 -91
- package/dist/esm/superdate/SuperDate.module.css +0 -1
- package/dist/esm/superdate/Superdate.js +0 -176
- package/dist/types/superdate/EventPanel.d.ts +0 -4
- package/dist/types/superdate/QuickSelect.d.ts +0 -1
- package/dist/types/superdate/RelativeInput.d.ts +0 -1
- package/dist/types/superdate/RelativePanel.d.ts +0 -1
- package/dist/types/superdate/Superdate.d.ts +0 -17
- package/src/i18n/ar.json +0 -14
- package/src/i18n/en.json +0 -13
- package/src/i18n/superdate/ar.json +0 -70
- package/src/i18n/superdate/en.json +0 -75
- package/src/superdate/QuickSelect.tsx +0 -121
- package/src/superdate/RelativeInput.tsx +0 -64
- package/src/superdate/RelativePanel.tsx +0 -103
- package/src/superdate/Superdate.tsx +0 -198
|
@@ -3,11 +3,10 @@
|
|
|
3
3
|
import _defineProperty from '@babel/runtime/helpers/defineProperty';
|
|
4
4
|
import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
|
|
5
5
|
import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';
|
|
6
|
-
import {
|
|
7
|
-
import { isEmpty, isArray } from '@react-fabric/utilities';
|
|
8
|
-
import classNames from 'classnames';
|
|
6
|
+
import { useApplicationContext, usePropState, useDebounce, Button } from '@react-fabric/core';
|
|
7
|
+
import { isEmpty, isArray, cn } from '@react-fabric/utilities';
|
|
9
8
|
import { isBefore, isAfter, isSameDay } from 'date-fns';
|
|
10
|
-
import { useState,
|
|
9
|
+
import { useState, useReducer, useEffect, useCallback } from 'react';
|
|
11
10
|
import { useTranslation } from 'react-i18next';
|
|
12
11
|
import { PageType } from '../types/index.js';
|
|
13
12
|
import { DateUtil } from '../utils/dateUtil.js';
|
|
@@ -16,8 +15,29 @@ import { jsxs, jsx } from 'react/jsx-runtime';
|
|
|
16
15
|
|
|
17
16
|
var _excluded = ["className", "max", "min", "dateDisabled", "onChange", "showHijriToggle", "value", "withTime"];
|
|
18
17
|
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),
|
|
20
|
-
|
|
18
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), true).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; }
|
|
19
|
+
/**
|
|
20
|
+
* DatePanel component to display a date picker with options for selecting a date and time.
|
|
21
|
+
* It allows switching between Gregorian and Hijri calendars, and includes buttons for selecting today or canceling the selection.
|
|
22
|
+
* It uses the current calendar and locale from the global context.
|
|
23
|
+
* It handles date selection, time changes, and page navigation within the date picker.
|
|
24
|
+
* It also supports disabling specific dates and setting minimum and maximum date limits.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```jsx
|
|
28
|
+
* <DatePanel
|
|
29
|
+
* className="my-date-panel"
|
|
30
|
+
* max="2025-12-31"
|
|
31
|
+
* min="2020-01-01"
|
|
32
|
+
* dateDisabled={["2023-01-01", "2023-12-25"]}
|
|
33
|
+
* onChange={(date) => console.log("Selected date:", date)}
|
|
34
|
+
* showHijriToggle={true}
|
|
35
|
+
* value={new Date()}
|
|
36
|
+
* withTime={true}
|
|
37
|
+
* />
|
|
38
|
+
* ```
|
|
39
|
+
*/
|
|
40
|
+
function DatePanel(_ref) {
|
|
21
41
|
var className = _ref.className,
|
|
22
42
|
max = _ref.max,
|
|
23
43
|
min = _ref.min,
|
|
@@ -29,20 +49,17 @@ var DatePanel = function DatePanel(_ref) {
|
|
|
29
49
|
rest = _objectWithoutProperties(_ref, _excluded);
|
|
30
50
|
var _useTranslation = useTranslation("date"),
|
|
31
51
|
t = _useTranslation.t;
|
|
32
|
-
var
|
|
33
|
-
currentCalendar =
|
|
34
|
-
var
|
|
52
|
+
var _useApplicationContex = useApplicationContext(),
|
|
53
|
+
currentCalendar = _useApplicationContex.currentCalendar;
|
|
54
|
+
var _usePropState = usePropState(currentCalendar === "hijri"),
|
|
55
|
+
_usePropState2 = _slicedToArray(_usePropState, 2),
|
|
56
|
+
isHijri = _usePropState2[0],
|
|
57
|
+
setIsHijri = _usePropState2[1];
|
|
58
|
+
var _useState = useState(true),
|
|
35
59
|
_useState2 = _slicedToArray(_useState, 2),
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
var _useState3 = useState(true),
|
|
39
|
-
_useState4 = _slicedToArray(_useState3, 2),
|
|
40
|
-
canSelectToday = _useState4[0],
|
|
41
|
-
setCanSelectToday = _useState4[1];
|
|
60
|
+
canSelectToday = _useState2[0],
|
|
61
|
+
setCanSelectToday = _useState2[1];
|
|
42
62
|
var fireChange = useDebounce(onChange, [onChange]);
|
|
43
|
-
useEffect(function () {
|
|
44
|
-
setHijri(currentCalendar === "hijri");
|
|
45
|
-
}, [currentCalendar]);
|
|
46
63
|
var _useReducer = useReducer(function (state, action) {
|
|
47
64
|
if (action.type === "reset") {
|
|
48
65
|
if (!isEmpty(action.date)) {
|
|
@@ -76,7 +93,7 @@ var DatePanel = function DatePanel(_ref) {
|
|
|
76
93
|
}
|
|
77
94
|
if (action.type === "changePageDate") {
|
|
78
95
|
state.pageDate = action.date;
|
|
79
|
-
action.pageChange
|
|
96
|
+
if (action.pageChange) state.page = Math.max(state.page - 1, 0);
|
|
80
97
|
}
|
|
81
98
|
if (action.type === "changeDate" || action.type === "changeTime") {
|
|
82
99
|
if (min && state.selected && isBefore(state.selected, new Date(min))) {
|
|
@@ -89,14 +106,20 @@ var DatePanel = function DatePanel(_ref) {
|
|
|
89
106
|
state.hour = state.selected.getHours();
|
|
90
107
|
state.minute = state.selected.getMinutes();
|
|
91
108
|
}
|
|
92
|
-
state.selected
|
|
109
|
+
if (state.selected) fireChange === null || fireChange === void 0 || fireChange(state.selected.toISOString());
|
|
93
110
|
}
|
|
94
111
|
return _objectSpread({}, state);
|
|
95
112
|
}, {
|
|
96
113
|
page: PageType.DATE,
|
|
97
|
-
pageDate: new Date(),
|
|
98
114
|
hour: 0,
|
|
99
115
|
minute: 0
|
|
116
|
+
}, function () {
|
|
117
|
+
return {
|
|
118
|
+
page: PageType.DATE,
|
|
119
|
+
pageDate: new Date(),
|
|
120
|
+
hour: 0,
|
|
121
|
+
minute: 0
|
|
122
|
+
};
|
|
100
123
|
}),
|
|
101
124
|
_useReducer2 = _slicedToArray(_useReducer, 2),
|
|
102
125
|
state = _useReducer2[0],
|
|
@@ -109,6 +132,7 @@ var DatePanel = function DatePanel(_ref) {
|
|
|
109
132
|
if (max && canSelect) {
|
|
110
133
|
canSelect = isBefore(new Date(), max);
|
|
111
134
|
}
|
|
135
|
+
// eslint-disable-next-line @eslint-react/set-state-in-effect
|
|
112
136
|
setCanSelectToday(canSelect);
|
|
113
137
|
}, [min, max]);
|
|
114
138
|
useEffect(function () {
|
|
@@ -142,7 +166,7 @@ var DatePanel = function DatePanel(_ref) {
|
|
|
142
166
|
});
|
|
143
167
|
}, []);
|
|
144
168
|
return /*#__PURE__*/jsxs("div", _objectSpread(_objectSpread({
|
|
145
|
-
className:
|
|
169
|
+
className: cn("block overflow-hidden bg-default rounded-capped", className)
|
|
146
170
|
}, rest), {}, {
|
|
147
171
|
children: [/*#__PURE__*/jsx(BasePanel, _objectSpread(_objectSpread({}, state), {}, {
|
|
148
172
|
max: max,
|
|
@@ -172,7 +196,7 @@ var DatePanel = function DatePanel(_ref) {
|
|
|
172
196
|
color: "primary",
|
|
173
197
|
className: "my-1",
|
|
174
198
|
onClick: function onClick() {
|
|
175
|
-
|
|
199
|
+
setIsHijri(!isHijri);
|
|
176
200
|
},
|
|
177
201
|
children: t(isHijri ? "label.gregorian" : "label.hijri")
|
|
178
202
|
})
|
|
@@ -200,6 +224,6 @@ var DatePanel = function DatePanel(_ref) {
|
|
|
200
224
|
})]
|
|
201
225
|
})]
|
|
202
226
|
}));
|
|
203
|
-
}
|
|
227
|
+
}
|
|
204
228
|
|
|
205
229
|
export { DatePanel };
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
import _defineProperty from '@babel/runtime/helpers/defineProperty';
|
|
4
4
|
import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
|
|
5
5
|
import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';
|
|
6
|
-
import {
|
|
6
|
+
import { Layout, Content } from '@react-fabric/core';
|
|
7
7
|
import { EMPTY_ARRAY } from '@react-fabric/utilities';
|
|
8
8
|
import { startOfDay, endOfDay, isSameMonth, setYear } from 'date-fns';
|
|
9
9
|
import i18next from 'i18next';
|
|
@@ -17,8 +17,8 @@ import { DateUtil } from '../utils/dateUtil.js';
|
|
|
17
17
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
18
18
|
|
|
19
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),
|
|
21
|
-
|
|
20
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), true).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
|
+
function makeList(year) {
|
|
22
22
|
var recurring = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
|
23
23
|
var predefined = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
|
|
24
24
|
var list = _toConsumableArray(predefined);
|
|
@@ -56,8 +56,8 @@ var makeList = function makeList(year) {
|
|
|
56
56
|
return list.sort(function (a, b) {
|
|
57
57
|
return a.start.getTime() < b.start.getTime() ? -1 : 1;
|
|
58
58
|
});
|
|
59
|
-
}
|
|
60
|
-
|
|
59
|
+
}
|
|
60
|
+
function EventPanel(_ref) {
|
|
61
61
|
var isHijri = _ref.isHijri,
|
|
62
62
|
onChange = _ref.onChange,
|
|
63
63
|
_ref$events = _ref.events,
|
|
@@ -66,7 +66,9 @@ var EventPanel = function EventPanel(_ref) {
|
|
|
66
66
|
recurringEvents = _ref$recurringEvents === void 0 ? EMPTY_ARRAY : _ref$recurringEvents;
|
|
67
67
|
var _useTranslation = useTranslation(),
|
|
68
68
|
t = _useTranslation.t;
|
|
69
|
-
var _useState = useState({
|
|
69
|
+
var _useState = useState(function () {
|
|
70
|
+
return {};
|
|
71
|
+
}),
|
|
70
72
|
_useState2 = _slicedToArray(_useState, 2),
|
|
71
73
|
predefined = _useState2[0],
|
|
72
74
|
setPredefined = _useState2[1];
|
|
@@ -82,7 +84,7 @@ var EventPanel = function EventPanel(_ref) {
|
|
|
82
84
|
if (action.type === "changePageDate") {
|
|
83
85
|
resetList = true;
|
|
84
86
|
state.pageDate = action.date;
|
|
85
|
-
if (action.changePage
|
|
87
|
+
if (action.changePage) {
|
|
86
88
|
state.page = Math.max(state.page - 1, PageType.MONTH);
|
|
87
89
|
}
|
|
88
90
|
}
|
|
@@ -93,9 +95,14 @@ var EventPanel = function EventPanel(_ref) {
|
|
|
93
95
|
}
|
|
94
96
|
return _objectSpread({}, state);
|
|
95
97
|
}, {
|
|
96
|
-
pageDate: new Date(),
|
|
97
98
|
page: PageType.MONTH,
|
|
98
99
|
events: []
|
|
100
|
+
}, function () {
|
|
101
|
+
return {
|
|
102
|
+
pageDate: new Date(),
|
|
103
|
+
page: PageType.MONTH,
|
|
104
|
+
events: []
|
|
105
|
+
};
|
|
99
106
|
}),
|
|
100
107
|
_useReducer2 = _slicedToArray(_useReducer, 2),
|
|
101
108
|
state = _useReducer2[0],
|
|
@@ -110,16 +117,24 @@ var EventPanel = function EventPanel(_ref) {
|
|
|
110
117
|
events.forEach(function (evt) {
|
|
111
118
|
var start = startOfDay(new Date(evt.start));
|
|
112
119
|
var end = endOfDay(new Date(evt.end));
|
|
113
|
-
|
|
114
|
-
predefined[
|
|
120
|
+
var startYear = start.getFullYear();
|
|
121
|
+
if (!predefined[startYear]) predefined[startYear] = [];
|
|
122
|
+
predefined[startYear].push(_objectSpread(_objectSpread({}, evt), {}, {
|
|
123
|
+
start: start,
|
|
124
|
+
end: end
|
|
125
|
+
}));
|
|
115
126
|
if (start.getFullYear() !== end.getFullYear()) {
|
|
116
127
|
if (!predefined[end.getFullYear()]) predefined[end.getFullYear()] = [];
|
|
117
|
-
predefined[end.getFullYear()].push(evt)
|
|
128
|
+
predefined[end.getFullYear()].push(_objectSpread(_objectSpread({}, evt), {}, {
|
|
129
|
+
start: start,
|
|
130
|
+
end: end
|
|
131
|
+
}));
|
|
118
132
|
}
|
|
119
133
|
});
|
|
134
|
+
// eslint-disable-next-line @eslint-react/set-state-in-effect
|
|
120
135
|
setPredefined(predefined);
|
|
121
136
|
}, [events]);
|
|
122
|
-
return /*#__PURE__*/jsxs(
|
|
137
|
+
return /*#__PURE__*/jsxs(Layout, {
|
|
123
138
|
children: [/*#__PURE__*/jsx(DateHeader, {
|
|
124
139
|
page: state.page,
|
|
125
140
|
pageDate: state.pageDate,
|
|
@@ -141,6 +156,7 @@ var EventPanel = function EventPanel(_ref) {
|
|
|
141
156
|
children: state.events.map(function (evt) {
|
|
142
157
|
return /*#__PURE__*/jsxs("div", {
|
|
143
158
|
role: "none",
|
|
159
|
+
"data-dropdown-dismiss": "true",
|
|
144
160
|
onClick: function onClick() {
|
|
145
161
|
onChange === null || onChange === void 0 || onChange("".concat(evt.start.toISOString(), "|").concat(evt.end.toISOString()), [evt.start.toISOString(), evt.end.toISOString()]);
|
|
146
162
|
},
|
|
@@ -180,6 +196,6 @@ var EventPanel = function EventPanel(_ref) {
|
|
|
180
196
|
}
|
|
181
197
|
})]
|
|
182
198
|
});
|
|
183
|
-
}
|
|
199
|
+
}
|
|
184
200
|
|
|
185
201
|
export { EventPanel };
|
|
@@ -3,11 +3,10 @@
|
|
|
3
3
|
import _defineProperty from '@babel/runtime/helpers/defineProperty';
|
|
4
4
|
import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
|
|
5
5
|
import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';
|
|
6
|
-
import {
|
|
7
|
-
import { isEmpty, isArray } from '@react-fabric/utilities';
|
|
8
|
-
import classNames from 'classnames';
|
|
6
|
+
import { useApplicationContext, usePropState, useDebounce, Button } from '@react-fabric/core';
|
|
7
|
+
import { isEmpty, isArray, cn } from '@react-fabric/utilities';
|
|
9
8
|
import { isAfter, addMonths, isBefore, isSameDay } from 'date-fns';
|
|
10
|
-
import {
|
|
9
|
+
import { useReducer, useEffect, useCallback } from 'react';
|
|
11
10
|
import { useTranslation } from 'react-i18next';
|
|
12
11
|
import { PageType } from '../types/index.js';
|
|
13
12
|
import { DateUtil } from '../utils/dateUtil.js';
|
|
@@ -16,8 +15,26 @@ import { jsxs, jsx } from 'react/jsx-runtime';
|
|
|
16
15
|
|
|
17
16
|
var _excluded = ["className", "max", "min", "dateDisabled", "onChange", "showHijriToggle", "value", "withTime", "showApply"];
|
|
18
17
|
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),
|
|
20
|
-
|
|
18
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), true).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; }
|
|
19
|
+
/**
|
|
20
|
+
* RangePanel component to display a date range picker with options for selecting a start and end date.
|
|
21
|
+
* It allows switching between Gregorian and Hijri calendars, and includes buttons for applying or canceling the selection.
|
|
22
|
+
* It uses the current calendar and locale from the global context.
|
|
23
|
+
* It handles date selection, time changes, and page navigation within the date picker.
|
|
24
|
+
* It also supports disabling specific dates and setting minimum and maximum date limits.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```jsx
|
|
28
|
+
* <RangePanel
|
|
29
|
+
* className="my-range-panel"
|
|
30
|
+
* max="2025-12-31"
|
|
31
|
+
* min="2020-01-01"
|
|
32
|
+
* dateDisabled={["2023-01-01", "2023-12-25"]}
|
|
33
|
+
* onChange={(dateRange) => console.log("Selected date range:", dateRange)}
|
|
34
|
+
* />
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
function RangePanel(_ref) {
|
|
21
38
|
var className = _ref.className,
|
|
22
39
|
max = _ref.max,
|
|
23
40
|
min = _ref.min,
|
|
@@ -31,16 +48,13 @@ var RangePanel = function RangePanel(_ref) {
|
|
|
31
48
|
rest = _objectWithoutProperties(_ref, _excluded);
|
|
32
49
|
var _useTranslation = useTranslation("date"),
|
|
33
50
|
t = _useTranslation.t;
|
|
34
|
-
var
|
|
35
|
-
currentCalendar =
|
|
36
|
-
var
|
|
37
|
-
|
|
38
|
-
isHijri =
|
|
39
|
-
|
|
51
|
+
var _useApplicationContex = useApplicationContext(),
|
|
52
|
+
currentCalendar = _useApplicationContex.currentCalendar;
|
|
53
|
+
var _usePropState = usePropState(currentCalendar === "hijri"),
|
|
54
|
+
_usePropState2 = _slicedToArray(_usePropState, 2),
|
|
55
|
+
isHijri = _usePropState2[0],
|
|
56
|
+
setIsHijri = _usePropState2[1];
|
|
40
57
|
var fireChange = useDebounce(onChange, [onChange]);
|
|
41
|
-
useEffect(function () {
|
|
42
|
-
setHijri(currentCalendar === "hijri");
|
|
43
|
-
}, [currentCalendar]);
|
|
44
58
|
var _useReducer = useReducer(function (state, action) {
|
|
45
59
|
if (action.type === "reset") {
|
|
46
60
|
if (!isEmpty(action.date)) {
|
|
@@ -119,7 +133,7 @@ var RangePanel = function RangePanel(_ref) {
|
|
|
119
133
|
state[action.range].pageDate = action.date;
|
|
120
134
|
if (action.pageChange) {
|
|
121
135
|
state[action.range].page = Math.max(state[action.range].page - 1, 0);
|
|
122
|
-
action.range === "start" && state.start.page === PageType.DATE
|
|
136
|
+
if (action.range === "start" && state.start.page === PageType.DATE) state.end.pageDate = addMonths(action.date, 1);
|
|
123
137
|
}
|
|
124
138
|
}
|
|
125
139
|
if (action.type === "changeDate" || action.type === "changeTime") {
|
|
@@ -133,22 +147,37 @@ var RangePanel = function RangePanel(_ref) {
|
|
|
133
147
|
state.end.hour = state.selected[1].getHours();
|
|
134
148
|
state.end.minute = state.selected[1].getMinutes();
|
|
135
149
|
}
|
|
136
|
-
!showApply && state.selected && !state.hilight
|
|
150
|
+
if (!showApply && state.selected && !state.hilight) fireChange === null || fireChange === void 0 || fireChange([state.selected[0].toISOString(), state.selected[1].toISOString()]);
|
|
137
151
|
}
|
|
138
152
|
return _objectSpread({}, state);
|
|
139
153
|
}, {
|
|
140
154
|
start: {
|
|
141
155
|
page: PageType.DATE,
|
|
142
|
-
pageDate: new Date(),
|
|
143
156
|
hour: 0,
|
|
144
157
|
minute: 0
|
|
145
158
|
},
|
|
146
159
|
end: {
|
|
147
160
|
page: PageType.DATE,
|
|
148
|
-
pageDate: DateUtil.addMonths(new Date(), 1, isHijri),
|
|
149
161
|
hour: 0,
|
|
150
162
|
minute: 0
|
|
151
163
|
}
|
|
164
|
+
}, function () {
|
|
165
|
+
return {
|
|
166
|
+
start: {
|
|
167
|
+
page: PageType.DATE,
|
|
168
|
+
pageDate: new Date(),
|
|
169
|
+
hour: 0,
|
|
170
|
+
minute: 0
|
|
171
|
+
},
|
|
172
|
+
end: {
|
|
173
|
+
page: PageType.DATE,
|
|
174
|
+
pageDate: DateUtil.addMonths(new Date(), 1, isHijri),
|
|
175
|
+
hour: 0,
|
|
176
|
+
minute: 0
|
|
177
|
+
},
|
|
178
|
+
hilight: undefined,
|
|
179
|
+
selected: undefined
|
|
180
|
+
};
|
|
152
181
|
}),
|
|
153
182
|
_useReducer2 = _slicedToArray(_useReducer, 2),
|
|
154
183
|
state = _useReducer2[0],
|
|
@@ -204,7 +233,7 @@ var RangePanel = function RangePanel(_ref) {
|
|
|
204
233
|
});
|
|
205
234
|
}, []);
|
|
206
235
|
return /*#__PURE__*/jsxs("div", _objectSpread(_objectSpread({
|
|
207
|
-
className:
|
|
236
|
+
className: cn("block overflow-hidden bg-default rounded-capped", className)
|
|
208
237
|
}, rest), {}, {
|
|
209
238
|
children: [/*#__PURE__*/jsxs("div", {
|
|
210
239
|
className: "flex flex-nowrap",
|
|
@@ -280,7 +309,7 @@ var RangePanel = function RangePanel(_ref) {
|
|
|
280
309
|
color: "primary",
|
|
281
310
|
className: "my-1",
|
|
282
311
|
onClick: function onClick() {
|
|
283
|
-
|
|
312
|
+
setIsHijri(!isHijri);
|
|
284
313
|
},
|
|
285
314
|
children: t(isHijri ? "label.gregorian" : "label.hijri")
|
|
286
315
|
})
|
|
@@ -326,6 +355,7 @@ var RangePanel = function RangePanel(_ref) {
|
|
|
326
355
|
variant: "solid",
|
|
327
356
|
color: "primary",
|
|
328
357
|
disabled: !state.selected,
|
|
358
|
+
"data-dropdown-dismiss": "true",
|
|
329
359
|
className: "my-1",
|
|
330
360
|
onClick: function onClick() {
|
|
331
361
|
var _state$selected, _state$selected2;
|
|
@@ -335,6 +365,6 @@ var RangePanel = function RangePanel(_ref) {
|
|
|
335
365
|
})]
|
|
336
366
|
})]
|
|
337
367
|
}));
|
|
338
|
-
}
|
|
368
|
+
}
|
|
339
369
|
|
|
340
370
|
export { RangePanel };
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
3
|
import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
|
|
4
|
-
import { startOfDay, startOfWeek, startOfMonth, startOfYear, startOfDecade, addYears, endOfDay, endOfWeek, endOfMonth, endOfYear, endOfDecade, addDays, addWeeks, addMonths, isSameMonth, isSameYear, isBefore, isAfter, startOfMinute, startOfQuarter, endOfQuarter, addQuarters, startOfHour, endOfHour, addHours, endOfMinute, addMinutes, format } from 'date-fns';
|
|
5
|
-
import { PageType, DatePart } from '../types/index.js';
|
|
6
4
|
import { isNil, isString } from '@react-fabric/utilities';
|
|
7
|
-
import {
|
|
5
|
+
import { startOfDay, startOfWeek, startOfMonth, startOfYear, startOfDecade, addYears, endOfDay, endOfWeek, endOfMonth, endOfYear, endOfDecade, addDays, addWeeks, addMonths, isSameMonth, isSameYear, isBefore, isAfter, startOfMinute, startOfQuarter, endOfQuarter, addQuarters, startOfHour, endOfHour, addHours, endOfMinute, addMinutes, format } from 'date-fns';
|
|
6
|
+
import { enUS, zhCN, ru, pt, ko, ja, it, hi, fr, es, de, arSA } from 'date-fns/locale';
|
|
8
7
|
import i18next from 'i18next';
|
|
8
|
+
import { DatePart, PageType } from '../types/index.js';
|
|
9
9
|
|
|
10
10
|
var Locales = {
|
|
11
11
|
ar: arSA,
|
|
@@ -21,8 +21,6 @@ var Locales = {
|
|
|
21
21
|
ru: ru,
|
|
22
22
|
zh: zhCN
|
|
23
23
|
};
|
|
24
|
-
|
|
25
|
-
// eslint-disable-next-line @typescript-eslint/no-namespace
|
|
26
24
|
var DateUtil;
|
|
27
25
|
(function (_DateUtil) {
|
|
28
26
|
var translateNumber = function translateNumber(d) {
|
|
@@ -257,7 +255,7 @@ var DateUtil;
|
|
|
257
255
|
};
|
|
258
256
|
_DateUtil.getWeek = function (date, locale) {
|
|
259
257
|
var isHijri = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
260
|
-
var ret
|
|
258
|
+
var ret;
|
|
261
259
|
if (isHijri) {
|
|
262
260
|
var start = startOfYear$1(date, isHijri);
|
|
263
261
|
ret = format$1(new Date(date.getTime() - start.getTime()), "ww");
|
|
@@ -12,4 +12,4 @@ export interface DateCellProps {
|
|
|
12
12
|
mouseOver?: (date: Date) => void;
|
|
13
13
|
dateDisabled?: (date: Date) => boolean;
|
|
14
14
|
}
|
|
15
|
-
export declare
|
|
15
|
+
export declare function DateCell({ date, isMuted, ...props }: DateCellProps): import("react").JSX.Element;
|
|
@@ -10,5 +10,5 @@ interface Props {
|
|
|
10
10
|
changePage: (page: PageType) => void;
|
|
11
11
|
changePageDate: (date: Date) => void;
|
|
12
12
|
}
|
|
13
|
-
export declare
|
|
13
|
+
export declare function DateHeader(props: Props): import("react").JSX.Element;
|
|
14
14
|
export {};
|
|
@@ -2,5 +2,5 @@ import { type DateCellProps } from "./DateCell";
|
|
|
2
2
|
interface Props extends Omit<DateCellProps, "date"> {
|
|
3
3
|
pageDate: Date;
|
|
4
4
|
}
|
|
5
|
-
export declare
|
|
5
|
+
export declare function DatePage({ pageDate, isHijri, ...props }: Props): import("react").JSX.Element;
|
|
6
6
|
export {};
|
|
@@ -2,5 +2,5 @@ import { type DateCellProps } from "./DateCell";
|
|
|
2
2
|
interface Props extends Omit<DateCellProps, "date"> {
|
|
3
3
|
pageDate: Date;
|
|
4
4
|
}
|
|
5
|
-
export declare
|
|
5
|
+
export declare function DecadePage({ pageDate, isHijri, ...props }: Props): import("react").JSX.Element;
|
|
6
6
|
export {};
|
|
@@ -2,5 +2,5 @@ import { type DateCellProps } from "./DateCell";
|
|
|
2
2
|
interface Props extends Omit<DateCellProps, "date"> {
|
|
3
3
|
pageDate: Date;
|
|
4
4
|
}
|
|
5
|
-
export declare
|
|
5
|
+
export declare function MonthPage({ pageDate, isHijri, ...props }: Props): import("react").JSX.Element;
|
|
6
6
|
export {};
|
|
@@ -6,5 +6,5 @@ interface Props {
|
|
|
6
6
|
minute: number;
|
|
7
7
|
}) => void;
|
|
8
8
|
}
|
|
9
|
-
export declare
|
|
9
|
+
export declare function TimeSlider({ hour, minute, onTimeChange }: Props): import("react").JSX.Element;
|
|
10
10
|
export {};
|
|
@@ -2,5 +2,5 @@ import { type DateCellProps } from "./DateCell";
|
|
|
2
2
|
interface Props extends Omit<DateCellProps, "date"> {
|
|
3
3
|
pageDate: Date;
|
|
4
4
|
}
|
|
5
|
-
export declare
|
|
5
|
+
export declare function YearPage({ pageDate, isHijri, ...props }: Props): import("react").JSX.Element;
|
|
6
6
|
export {};
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { type
|
|
2
|
-
import { type
|
|
1
|
+
import { type MenuProps } from "@react-fabric/core/dist/types/components/menu/types";
|
|
2
|
+
import { type ChildrenProp, type CssProp, type TestProps } from "@react-fabric/core/dist/types/types";
|
|
3
3
|
import { type ElementType } from "react";
|
|
4
4
|
import { type DateLike } from "../types";
|
|
5
|
-
export interface Props extends CssProp,
|
|
5
|
+
export interface Props extends CssProp, TestProps, Partial<ChildrenProp<ElementType<MenuProps>>> {
|
|
6
6
|
/**
|
|
7
7
|
* date like value
|
|
8
8
|
*/
|
|
@@ -11,5 +11,18 @@ export interface Props extends CssProp, AriaProps, TestProps, Partial<ChildrenPr
|
|
|
11
11
|
* date format
|
|
12
12
|
*/
|
|
13
13
|
format?: string;
|
|
14
|
+
showAlternateDate?: boolean;
|
|
14
15
|
}
|
|
15
|
-
|
|
16
|
+
/**
|
|
17
|
+
* DateDisplay component to display a formatted gregorian or hijri date with optional tooltip and dropdown.
|
|
18
|
+
* It uses the current calendar and locale from the global context.
|
|
19
|
+
* It formats the date using the provided format or a default format.
|
|
20
|
+
* If `showAlternateDate` is true, it shows a tooltip with the formatted date.
|
|
21
|
+
* If `children` are provided, it wraps the date in a dropdown.
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```jsx
|
|
25
|
+
* <DateDisplay date={new Date()} />
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
export declare function DateDisplay({ date, className, format, children, showAlternateDate, ...aria }: Props): import("react").JSX.Element;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { type MenuProps } from "@react-fabric/core/dist/types/components/menu/types";
|
|
2
|
+
import { type ChildrenProp, type CssProp, type TestProps } from "@react-fabric/core/dist/types/types";
|
|
3
|
+
import { type DateLike } from "../types";
|
|
4
|
+
export interface Props extends CssProp, TestProps, Partial<ChildrenProp<MenuProps>> {
|
|
5
|
+
/**
|
|
6
|
+
* date like value
|
|
7
|
+
*/
|
|
8
|
+
date: DateLike;
|
|
9
|
+
/**
|
|
10
|
+
* date format
|
|
11
|
+
*/
|
|
12
|
+
format?: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* DateDuration component to display the duration from a given date to now.
|
|
16
|
+
* It calculates the difference in years, months, weeks, days, hours, minutes, and seconds,
|
|
17
|
+
* and displays it in a human-readable format.
|
|
18
|
+
* It uses the current locale for translations.
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* ```jsx
|
|
22
|
+
* <DateDuration date={new Date("2020-01-01")} />
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
export declare function DateDuration({ date, children, className, format, ...props }: Props): import("react").JSX.Element;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export function weekDay(wdn: any): "Mon" | "Tue" | "Wed" | "Thu" | "Fri" | "Sat" | "Sun" | "";
|
|
2
|
+
export function GregToHijri(gregDate: any): {
|
|
3
|
+
year: number;
|
|
4
|
+
month: number;
|
|
5
|
+
date: number;
|
|
6
|
+
hours: any;
|
|
7
|
+
minutes: any;
|
|
8
|
+
seconds: any;
|
|
9
|
+
milliseconds: any;
|
|
10
|
+
day: number;
|
|
11
|
+
dayName: string;
|
|
12
|
+
};
|
|
13
|
+
export function HijriToGreg(hijriDate: any): Date;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export namespace masks {
|
|
2
|
+
let _default: string;
|
|
3
|
+
export { _default as default };
|
|
4
|
+
export let shortDate: string;
|
|
5
|
+
export let mediumDate: string;
|
|
6
|
+
export let longDate: string;
|
|
7
|
+
export let fullDate: string;
|
|
8
|
+
export let shortTime: string;
|
|
9
|
+
export let mediumTime: string;
|
|
10
|
+
export let longTime: string;
|
|
11
|
+
export let isoDate: string;
|
|
12
|
+
export let isoTime: string;
|
|
13
|
+
export let isoDateTime: string;
|
|
14
|
+
export let isoUtcDateTime: string;
|
|
15
|
+
}
|
|
16
|
+
export default dateFormat;
|
|
17
|
+
declare function dateFormat(date: any, mask: any, options?: {
|
|
18
|
+
utc: boolean;
|
|
19
|
+
}, ...args: any[]): any;
|