@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.
Files changed (139) hide show
  1. package/README.md +2 -9
  2. package/{src/components/Date.module.css → css/_date.css} +5 -5
  3. package/{src/superdate/SuperDate.module.css → css/styles.css} +2 -8
  4. package/dist/cjs/components/DateCell.js +5 -7
  5. package/dist/cjs/components/DateHeader.js +27 -20
  6. package/dist/cjs/components/DatePage.js +10 -12
  7. package/dist/cjs/components/DecadePage.js +3 -3
  8. package/dist/cjs/components/MonthPage.js +3 -3
  9. package/dist/cjs/components/TimeSliders.js +36 -35
  10. package/dist/cjs/components/YearPage.js +3 -3
  11. package/dist/cjs/display/DateDisplay.js +25 -8
  12. package/dist/cjs/display/DateDuration.js +155 -0
  13. package/dist/cjs/hijri/DateConverter.js +154 -0
  14. package/dist/cjs/hijri/FormatDate.js +116 -0
  15. package/dist/cjs/hijri/HijriDate.js +531 -0
  16. package/dist/cjs/hijri/StringDateParser.js +74 -0
  17. package/dist/cjs/hijri/index.js +15 -1025
  18. package/dist/cjs/hijri/initializer.js +113 -0
  19. package/dist/cjs/hijri/locales.js +19 -0
  20. package/dist/cjs/hijri/safe.js +17 -0
  21. package/dist/cjs/i18n/ar/date.json.js +213 -0
  22. package/dist/cjs/i18n/en/date.json.js +83 -0
  23. package/dist/cjs/i18n/index.js +4 -10
  24. package/dist/cjs/index.js +41 -2
  25. package/dist/cjs/panels/BasePanel.js +6 -5
  26. package/dist/cjs/panels/DatePanel.js +45 -21
  27. package/dist/cjs/{superdate → panels}/EventPanel.js +28 -12
  28. package/dist/cjs/panels/RangePanel.js +49 -19
  29. package/dist/cjs/utils/dateUtil.js +3 -5
  30. package/dist/esm/components/DateCell.js +6 -8
  31. package/dist/esm/components/DateHeader.js +28 -21
  32. package/dist/esm/components/DatePage.js +11 -13
  33. package/dist/esm/components/DecadePage.js +3 -3
  34. package/dist/esm/components/MonthPage.js +3 -3
  35. package/dist/esm/components/TimeSliders.js +38 -37
  36. package/dist/esm/components/YearPage.js +3 -3
  37. package/dist/esm/display/DateDisplay.js +26 -9
  38. package/dist/esm/display/DateDuration.js +155 -0
  39. package/dist/esm/hijri/DateConverter.js +152 -0
  40. package/dist/esm/hijri/FormatDate.js +113 -0
  41. package/dist/esm/hijri/HijriDate.js +528 -0
  42. package/dist/esm/hijri/StringDateParser.js +74 -0
  43. package/dist/esm/hijri/index.js +15 -1025
  44. package/dist/esm/hijri/initializer.js +113 -0
  45. package/dist/esm/hijri/locales.js +18 -0
  46. package/dist/esm/hijri/safe.js +14 -0
  47. package/dist/esm/i18n/ar/date.json.js +209 -0
  48. package/dist/esm/i18n/en/date.json.js +79 -0
  49. package/dist/esm/i18n/index.js +2 -8
  50. package/dist/esm/index.js +36 -1
  51. package/dist/esm/panels/BasePanel.js +6 -5
  52. package/dist/esm/panels/DatePanel.js +48 -24
  53. package/dist/esm/{superdate → panels}/EventPanel.js +29 -13
  54. package/dist/esm/panels/RangePanel.js +52 -22
  55. package/dist/esm/utils/dateUtil.js +4 -6
  56. package/dist/types/components/DateCell.d.ts +1 -1
  57. package/dist/types/components/DateHeader.d.ts +1 -1
  58. package/dist/types/components/DatePage.d.ts +1 -1
  59. package/dist/types/components/DecadePage.d.ts +1 -1
  60. package/dist/types/components/MonthPage.d.ts +1 -1
  61. package/dist/types/components/TimeSliders.d.ts +1 -1
  62. package/dist/types/components/YearPage.d.ts +1 -1
  63. package/dist/types/display/DateDisplay.d.ts +17 -4
  64. package/dist/types/display/DateDuration.d.ts +25 -0
  65. package/dist/types/hijri/DateConverter.d.ts +13 -0
  66. package/dist/types/hijri/FormatDate.d.ts +19 -0
  67. package/dist/types/hijri/HijriDate.d.ts +214 -0
  68. package/dist/types/hijri/StringDateParser.d.ts +11 -0
  69. package/dist/types/hijri/index.d.ts +2 -2
  70. package/dist/types/hijri/initializer.d.ts +129 -0
  71. package/dist/types/hijri/locales.d.ts +19 -0
  72. package/dist/types/hijri/safe.d.ts +3 -0
  73. package/dist/types/index.d.ts +32 -1
  74. package/dist/types/panels/BasePanel.d.ts +1 -1
  75. package/dist/types/panels/DatePanel.d.ts +22 -1
  76. package/dist/types/panels/EventPanel.d.ts +17 -0
  77. package/dist/types/panels/RangePanel.d.ts +19 -1
  78. package/dist/types/types/index.d.ts +8 -40
  79. package/package.json +14 -21
  80. package/src/components/DateCell.tsx +20 -75
  81. package/src/components/DateHeader.tsx +27 -78
  82. package/src/components/DatePage.tsx +11 -36
  83. package/src/components/DecadePage.tsx +2 -2
  84. package/src/components/MonthPage.tsx +2 -2
  85. package/src/components/TimeSliders.tsx +20 -60
  86. package/src/components/YearPage.tsx +2 -2
  87. package/src/display/DateDisplay.tsx +26 -38
  88. package/src/display/DateDuration.tsx +170 -0
  89. package/src/hijri/DateConverter.js +175 -0
  90. package/src/hijri/FormatDate.js +134 -0
  91. package/src/hijri/HijriDate.js +477 -0
  92. package/src/hijri/StringDateParser.js +68 -0
  93. package/src/hijri/index.js +16 -1535
  94. package/src/hijri/initializer.js +96 -0
  95. package/src/hijri/locales.js +109 -0
  96. package/src/hijri/safe.js +16 -0
  97. package/src/i18n/ar/date.json +203 -0
  98. package/src/i18n/en/date.json +73 -0
  99. package/src/i18n/index.ts +2 -5
  100. package/src/index.ts +29 -18
  101. package/src/panels/BasePanel.tsx +7 -10
  102. package/src/panels/DatePanel.tsx +41 -33
  103. package/src/{superdate → panels}/EventPanel.tsx +52 -53
  104. package/src/panels/RangePanel.tsx +54 -60
  105. package/src/types/index.ts +8 -43
  106. package/src/utils/dateUtil.ts +26 -82
  107. package/dist/cjs/components/Date.module.css +0 -1
  108. package/dist/cjs/i18n/ar.json.js +0 -25
  109. package/dist/cjs/i18n/en.json.js +0 -21
  110. package/dist/cjs/i18n/superdate/ar.json.js +0 -86
  111. package/dist/cjs/i18n/superdate/en.json.js +0 -93
  112. package/dist/cjs/superdate/QuickSelect.js +0 -134
  113. package/dist/cjs/superdate/RelativeInput.js +0 -79
  114. package/dist/cjs/superdate/RelativePanel.js +0 -91
  115. package/dist/cjs/superdate/SuperDate.module.css +0 -1
  116. package/dist/cjs/superdate/Superdate.js +0 -177
  117. package/dist/esm/components/Date.module.css +0 -1
  118. package/dist/esm/i18n/ar.json.js +0 -21
  119. package/dist/esm/i18n/en.json.js +0 -18
  120. package/dist/esm/i18n/superdate/ar.json.js +0 -79
  121. package/dist/esm/i18n/superdate/en.json.js +0 -85
  122. package/dist/esm/superdate/QuickSelect.js +0 -134
  123. package/dist/esm/superdate/RelativeInput.js +0 -79
  124. package/dist/esm/superdate/RelativePanel.js +0 -91
  125. package/dist/esm/superdate/SuperDate.module.css +0 -1
  126. package/dist/esm/superdate/Superdate.js +0 -176
  127. package/dist/types/superdate/EventPanel.d.ts +0 -4
  128. package/dist/types/superdate/QuickSelect.d.ts +0 -1
  129. package/dist/types/superdate/RelativeInput.d.ts +0 -1
  130. package/dist/types/superdate/RelativePanel.d.ts +0 -1
  131. package/dist/types/superdate/Superdate.d.ts +0 -17
  132. package/src/i18n/ar.json +0 -14
  133. package/src/i18n/en.json +0 -13
  134. package/src/i18n/superdate/ar.json +0 -70
  135. package/src/i18n/superdate/en.json +0 -75
  136. package/src/superdate/QuickSelect.tsx +0 -121
  137. package/src/superdate/RelativeInput.tsx +0 -64
  138. package/src/superdate/RelativePanel.tsx +0 -103
  139. 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 { useGlobals, useDebounce, Button } from '@react-fabric/core';
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, useEffect, useReducer, useCallback } from 'react';
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), !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 DatePanel = function DatePanel(_ref) {
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 _useGlobals = useGlobals(),
33
- currentCalendar = _useGlobals.currentCalendar;
34
- var _useState = useState(currentCalendar === "hijri"),
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
- isHijri = _useState2[0],
37
- setHijri = _useState2[1];
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 && (state.page = Math.max(state.page - 1, 0));
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 && (fireChange === null || fireChange === void 0 ? void 0 : fireChange(state.selected.toISOString()));
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: classNames("block overflow-hidden bg-base rounded-capped", 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
- setHijri(!isHijri);
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 { Section, Content } from '@react-fabric/core';
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), !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) {
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
- var EventPanel = function EventPanel(_ref) {
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 !== false) {
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
- if (!predefined[start.getFullYear()]) predefined[start.getFullYear()] = [];
114
- predefined[start.getFullYear()].push(evt);
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(Section, {
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 { useGlobals, useDebounce, Button } from '@react-fabric/core';
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 { useState, useEffect, useReducer, useCallback } from 'react';
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), !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) {
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 _useGlobals = useGlobals(),
35
- currentCalendar = _useGlobals.currentCalendar;
36
- var _useState = useState(currentCalendar === "hijri"),
37
- _useState2 = _slicedToArray(_useState, 2),
38
- isHijri = _useState2[0],
39
- setHijri = _useState2[1];
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 && (state.end.pageDate = addMonths(action.date, 1));
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 && (fireChange === null || fireChange === void 0 ? void 0 : fireChange([state.selected[0].toISOString(), state.selected[1].toISOString()]));
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: classNames("block overflow-hidden bg-base rounded-capped", 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
- setHijri(!isHijri);
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 { arSA, enUS, de, es, fr, hi, it, ja, ko, pt, ru, zhCN } from 'date-fns/locale';
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 const DateCell: ({ date, isMuted, ...props }: DateCellProps) => import("react/jsx-runtime").JSX.Element;
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 const DateHeader: (props: Props) => import("react/jsx-runtime").JSX.Element;
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 const DatePage: ({ pageDate, isHijri, ...props }: Props) => import("react/jsx-runtime").JSX.Element;
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 const DecadePage: ({ pageDate, isHijri, ...props }: Props) => import("react/jsx-runtime").JSX.Element;
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 const MonthPage: ({ pageDate, isHijri, ...props }: Props) => import("react/jsx-runtime").JSX.Element;
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 const TimeSlider: ({ hour, minute, onTimeChange }: Props) => import("react/jsx-runtime").JSX.Element;
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 const YearPage: ({ pageDate, isHijri, ...props }: Props) => import("react/jsx-runtime").JSX.Element;
5
+ export declare function YearPage({ pageDate, isHijri, ...props }: Props): import("react").JSX.Element;
6
6
  export {};
@@ -1,8 +1,8 @@
1
- import { type MenuItemProps } from "@react-fabric/core/dist/types/components/menu/types";
2
- import { type AriaProps, type ChildrenProp, type CssProp, type TestProps } from "@react-fabric/core/dist/types/types";
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, AriaProps, TestProps, Partial<ChildrenProp<ElementType<MenuItemProps>>> {
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
- export declare const DateDisplay: ({ date, className, format, children, ...aria }: Props) => import("react/jsx-runtime").JSX.Element;
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;