@react-fabric/date 1.0.0-beta.8 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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
@@ -5,7 +5,6 @@ var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
5
5
  var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProperties');
6
6
  var core = require('@react-fabric/core');
7
7
  var utilities = require('@react-fabric/utilities');
8
- var classNames = require('classnames');
9
8
  var dateFns = require('date-fns');
10
9
  var react = require('react');
11
10
  var reactI18next = require('react-i18next');
@@ -16,8 +15,29 @@ var jsxRuntime = require('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 = reactI18next.useTranslation("date"),
31
51
  t = _useTranslation.t;
32
- var _useGlobals = core.useGlobals(),
33
- currentCalendar = _useGlobals.currentCalendar;
34
- var _useState = react.useState(currentCalendar === "hijri"),
52
+ var _useApplicationContex = core.useApplicationContext(),
53
+ currentCalendar = _useApplicationContex.currentCalendar;
54
+ var _usePropState = core.usePropState(currentCalendar === "hijri"),
55
+ _usePropState2 = _slicedToArray(_usePropState, 2),
56
+ isHijri = _usePropState2[0],
57
+ setIsHijri = _usePropState2[1];
58
+ var _useState = react.useState(true),
35
59
  _useState2 = _slicedToArray(_useState, 2),
36
- isHijri = _useState2[0],
37
- setHijri = _useState2[1];
38
- var _useState3 = react.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 = core.useDebounce(onChange, [onChange]);
43
- react.useEffect(function () {
44
- setHijri(currentCalendar === "hijri");
45
- }, [currentCalendar]);
46
63
  var _useReducer = react.useReducer(function (state, action) {
47
64
  if (action.type === "reset") {
48
65
  if (!utilities.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 && dateFns.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: index.PageType.DATE,
97
- pageDate: new Date(),
98
114
  hour: 0,
99
115
  minute: 0
116
+ }, function () {
117
+ return {
118
+ page: index.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 = dateFns.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
  react.useEffect(function () {
@@ -142,7 +166,7 @@ var DatePanel = function DatePanel(_ref) {
142
166
  });
143
167
  }, []);
144
168
  return /*#__PURE__*/jsxRuntime.jsxs("div", _objectSpread(_objectSpread({
145
- className: classNames("block overflow-hidden bg-base rounded-capped", className)
169
+ className: utilities.cn("block overflow-hidden bg-default rounded-capped", className)
146
170
  }, rest), {}, {
147
171
  children: [/*#__PURE__*/jsxRuntime.jsx(BasePanel.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
  exports.DatePanel = DatePanel;
@@ -17,8 +17,8 @@ var dateUtil = require('../utils/dateUtil.js');
17
17
  var jsxRuntime = require('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 ? utilities.EMPTY_ARRAY : _ref$recurringEvents;
67
67
  var _useTranslation = reactI18next.useTranslation(),
68
68
  t = _useTranslation.t;
69
- var _useState = react.useState({}),
69
+ var _useState = react.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, index.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: index.PageType.MONTH,
98
99
  events: []
100
+ }, function () {
101
+ return {
102
+ pageDate: new Date(),
103
+ page: index.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 = dateFns.startOfDay(new Date(evt.start));
112
119
  var end = dateFns.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__*/jsxRuntime.jsxs(core.Section, {
137
+ return /*#__PURE__*/jsxRuntime.jsxs(core.Layout, {
123
138
  children: [/*#__PURE__*/jsxRuntime.jsx(DateHeader.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__*/jsxRuntime.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
  exports.EventPanel = EventPanel;
@@ -5,7 +5,6 @@ var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
5
5
  var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProperties');
6
6
  var core = require('@react-fabric/core');
7
7
  var utilities = require('@react-fabric/utilities');
8
- var classNames = require('classnames');
9
8
  var dateFns = require('date-fns');
10
9
  var react = require('react');
11
10
  var reactI18next = require('react-i18next');
@@ -16,8 +15,26 @@ var jsxRuntime = require('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 = reactI18next.useTranslation("date"),
33
50
  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];
51
+ var _useApplicationContex = core.useApplicationContext(),
52
+ currentCalendar = _useApplicationContex.currentCalendar;
53
+ var _usePropState = core.usePropState(currentCalendar === "hijri"),
54
+ _usePropState2 = _slicedToArray(_usePropState, 2),
55
+ isHijri = _usePropState2[0],
56
+ setIsHijri = _usePropState2[1];
40
57
  var fireChange = core.useDebounce(onChange, [onChange]);
41
- react.useEffect(function () {
42
- setHijri(currentCalendar === "hijri");
43
- }, [currentCalendar]);
44
58
  var _useReducer = react.useReducer(function (state, action) {
45
59
  if (action.type === "reset") {
46
60
  if (!utilities.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 === index.PageType.DATE && (state.end.pageDate = dateFns.addMonths(action.date, 1));
136
+ if (action.range === "start" && state.start.page === index.PageType.DATE) state.end.pageDate = dateFns.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: index.PageType.DATE,
142
- pageDate: new Date(),
143
156
  hour: 0,
144
157
  minute: 0
145
158
  },
146
159
  end: {
147
160
  page: index.PageType.DATE,
148
- pageDate: dateUtil.DateUtil.addMonths(new Date(), 1, isHijri),
149
161
  hour: 0,
150
162
  minute: 0
151
163
  }
164
+ }, function () {
165
+ return {
166
+ start: {
167
+ page: index.PageType.DATE,
168
+ pageDate: new Date(),
169
+ hour: 0,
170
+ minute: 0
171
+ },
172
+ end: {
173
+ page: index.PageType.DATE,
174
+ pageDate: dateUtil.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__*/jsxRuntime.jsxs("div", _objectSpread(_objectSpread({
207
- className: classNames("block overflow-hidden bg-base rounded-capped", className)
236
+ className: utilities.cn("block overflow-hidden bg-default rounded-capped", className)
208
237
  }, rest), {}, {
209
238
  children: [/*#__PURE__*/jsxRuntime.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
  exports.RangePanel = RangePanel;
@@ -1,11 +1,11 @@
1
1
  'use strict';
2
2
 
3
3
  var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
4
- var dateFns = require('date-fns');
5
- var index = require('../types/index.js');
6
4
  var utilities = require('@react-fabric/utilities');
5
+ var dateFns = require('date-fns');
7
6
  var locale = require('date-fns/locale');
8
7
  var i18next = require('i18next');
8
+ var index = require('../types/index.js');
9
9
 
10
10
  var Locales = {
11
11
  ar: locale.arSA,
@@ -21,8 +21,6 @@ var Locales = {
21
21
  ru: locale.ru,
22
22
  zh: locale.zhCN
23
23
  };
24
-
25
- // eslint-disable-next-line @typescript-eslint/no-namespace
26
24
  exports.DateUtil = void 0;
27
25
  (function (_DateUtil) {
28
26
  var translateNumber = function translateNumber(d) {
@@ -257,7 +255,7 @@ exports.DateUtil = void 0;
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(date, isHijri);
263
261
  ret = format(new Date(date.getTime() - start.getTime()), "ww");
@@ -2,8 +2,7 @@
2
2
 
3
3
  import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
4
4
  import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';
5
- import { isArray } from '@react-fabric/utilities';
6
- import classNames from 'classnames';
5
+ import { isArray, cn } from '@react-fabric/utilities';
7
6
  import { isSameDay, isSameYear, startOfDecade, isSameMonth, isBefore, isAfter } from 'date-fns';
8
7
  import i18next from 'i18next';
9
8
  import { useMemo } from 'react';
@@ -12,9 +11,8 @@ import { DateUtil } from '../utils/dateUtil.js';
12
11
  import { jsxs } from 'react/jsx-runtime';
13
12
 
14
13
  var _excluded = ["date", "isMuted"];
15
- var DateCell = function DateCell(_ref) {
16
- var _ref$date = _ref.date,
17
- date = _ref$date === void 0 ? new Date() : _ref$date,
14
+ function DateCell(_ref) {
15
+ var date = _ref.date,
18
16
  _ref$isMuted = _ref.isMuted,
19
17
  isMuted = _ref$isMuted === void 0 ? false : _ref$isMuted,
20
18
  props = _objectWithoutProperties(_ref, _excluded);
@@ -32,7 +30,7 @@ var DateCell = function DateCell(_ref) {
32
30
  }, [date]);
33
31
  var isSelected = useMemo(function () {
34
32
  return selected && !isArray(selected) && isSameDay(date, selected);
35
- }, [date, page, selected]);
33
+ }, [date, selected]);
36
34
  var isMarked = useMemo(function () {
37
35
  switch (page) {
38
36
  case PageType.MONTH:
@@ -81,7 +79,7 @@ var DateCell = function DateCell(_ref) {
81
79
  }, [date, dateDisabled, isSelected]);
82
80
  return /*#__PURE__*/jsxs("div", {
83
81
  role: "none",
84
- className: classNames("p-1 m-px text-sm text-center rounded", className, !isDisabled && isMuted && "text-tint-500", (isToday || isMarked) && "underline underline-offset-4 text-primary-700", (!!isSelected || isHilightEdge) && "bg-primary-400 text-white", isHilightEdge === "start" && "rounded-e-none", isHilightEdge === "end" && "rounded-s-none", isHilight && "bg-primary-50 rounded-none", !isDisabled && "cursor-pointer hover:bg-primary-100 hover:text-primary-700", isDisabled && "text-tint-100 cursor-not-allowed"),
82
+ className: cn("p-1 m-px text-sm text-center rounded", className, !isDisabled && isMuted && "text-tint-500", (isToday || isMarked) && "underline underline-offset-4 text-primary-700", (!!isSelected || isHilightEdge) && "bg-primary-400 text-white", isHilightEdge === "start" && "rounded-e-none", isHilightEdge === "end" && "rounded-s-none", isHilight && "bg-primary-50 rounded-none", !isDisabled && "cursor-pointer hover:bg-primary-100 hover:text-primary-700", isDisabled && "text-tint-100 cursor-not-allowed"),
85
83
  onFocus: function onFocus() {
86
84
  return hilight && page === PageType.DATE && (mouseOver === null || mouseOver === void 0 ? void 0 : mouseOver(date));
87
85
  },
@@ -93,6 +91,6 @@ var DateCell = function DateCell(_ref) {
93
91
  },
94
92
  children: [page === PageType.DATE && DateUtil.format(date, "d", i18next.language, isHijri), page === PageType.MONTH && DateUtil.format(date, "MMM", i18next.language, isHijri), page === PageType.YEAR && DateUtil.format(date, "yyyy", i18next.language, isHijri), page === PageType.DECADE && "".concat(DateUtil.format(DateUtil.startOfDecade(date, isHijri), "yyyy", i18next.language, isHijri), "-").concat(DateUtil.format(DateUtil.endOfDecade(date, isHijri), "yy", i18next.language, isHijri))]
95
93
  });
96
- };
94
+ }
97
95
 
98
96
  export { DateCell };
@@ -1,8 +1,8 @@
1
1
  'use client';
2
2
 
3
3
  import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
4
- import { Button, CoreIcons } from '@react-fabric/core';
5
- import classNames from 'classnames';
4
+ import { Button } from '@react-fabric/core';
5
+ import { cn } from '@react-fabric/utilities';
6
6
  import { addDays, isBefore, isAfter } from 'date-fns';
7
7
  import i18next from 'i18next';
8
8
  import { useMemo } from 'react';
@@ -10,10 +10,9 @@ import { PageType } from '../types/index.js';
10
10
  import { DateUtil } from '../utils/dateUtil.js';
11
11
  import { jsxs, jsx } from 'react/jsx-runtime';
12
12
 
13
- var DateHeader = function DateHeader(props) {
13
+ function DateHeader(props) {
14
14
  var page = props.page,
15
- _props$pageDate = props.pageDate,
16
- pageDate = _props$pageDate === void 0 ? new Date() : _props$pageDate,
15
+ pageDate = props.pageDate,
17
16
  changePage = props.changePage,
18
17
  changePageDate = props.changePageDate,
19
18
  hideNext = props.hideNext,
@@ -33,7 +32,7 @@ var DateHeader = function DateHeader(props) {
33
32
  case PageType.DECADE:
34
33
  return "".concat(DateUtil.format(DateUtil.startOfCentury(pageDate, isHijri), "yyyy", i18next.language, isHijri), " - ").concat(DateUtil.format(DateUtil.endOfCentury(pageDate, isHijri), "yyyy", i18next.language, isHijri));
35
34
  }
36
- }, [i18next.language, isHijri, page, pageDate]);
35
+ }, [isHijri, page, pageDate]);
37
36
  var _useMemo = useMemo(function () {
38
37
  if (page === PageType.DATE) {
39
38
  var dateBefore = addDays(DateUtil.startOfYear(pageDate, isHijri), -1);
@@ -82,27 +81,31 @@ var DateHeader = function DateHeader(props) {
82
81
  previousPage = _useMemo4[0],
83
82
  nextPage = _useMemo4[1];
84
83
  return /*#__PURE__*/jsxs("div", {
85
- className: "flex flex-nowrap items-center area-head",
84
+ className: "flex flex-nowrap items-center area-header",
86
85
  "data-page": page,
87
86
  children: [startPage !== undefined && /*#__PURE__*/jsx(Button, {
88
- icon: CoreIcons.chevronsLeft,
89
- rtlFlip: true,
87
+ icon: {
88
+ icon: "icon-[mdi--chevron-double-left]",
89
+ rtlFlip: true
90
+ },
90
91
  size: "sm",
91
92
  variant: "link",
92
93
  "aria-label": "start",
93
94
  disabled: !startPage,
94
- className: classNames(hidePrevious && "invisible"),
95
+ className: cn(hidePrevious && "invisible"),
95
96
  onClick: function onClick() {
96
97
  return startPage && (changePageDate === null || changePageDate === void 0 ? void 0 : changePageDate(startPage));
97
98
  }
98
99
  }), /*#__PURE__*/jsx(Button, {
99
- icon: CoreIcons.chevronLeft,
100
- rtlFlip: true,
100
+ icon: {
101
+ icon: "icon-[mdi--chevron-left]",
102
+ rtlFlip: true
103
+ },
101
104
  size: "sm",
102
105
  variant: "link",
103
106
  "aria-label": "prev",
104
107
  disabled: !previousPage,
105
- className: classNames(hidePrevious && "invisible"),
108
+ className: cn(hidePrevious && "invisible"),
106
109
  onClick: function onClick() {
107
110
  return previousPage && (changePageDate === null || changePageDate === void 0 ? void 0 : changePageDate(previousPage));
108
111
  }
@@ -111,32 +114,36 @@ var DateHeader = function DateHeader(props) {
111
114
  onClick: function onClick() {
112
115
  return changePage(page + 1);
113
116
  },
114
- className: classNames("flex-1 px-2 py-1 text-primary-600 text-center text-sm font-medium truncate", page === PageType.DECADE ? "pointer-events-none" : "cursor-pointer"),
117
+ className: cn("flex-1 px-2 py-1 text-primary-600 text-center text-sm font-medium truncate", page === PageType.DECADE ? "pointer-events-none" : "cursor-pointer"),
115
118
  children: headLabel
116
119
  }), /*#__PURE__*/jsx(Button, {
117
- icon: CoreIcons.chevronRight,
118
- rtlFlip: true,
120
+ icon: {
121
+ icon: "icon-[mdi--chevron-right]",
122
+ rtlFlip: true
123
+ },
119
124
  size: "sm",
120
125
  variant: "link",
121
126
  "aria-label": "next",
122
127
  disabled: !nextPage,
123
- className: classNames(hideNext && "invisible"),
128
+ className: cn(hideNext && "invisible"),
124
129
  onClick: function onClick() {
125
130
  return nextPage && (changePageDate === null || changePageDate === void 0 ? void 0 : changePageDate(nextPage));
126
131
  }
127
132
  }), endPage !== undefined && /*#__PURE__*/jsx(Button, {
128
- icon: CoreIcons.chevronsRight,
129
- rtlFlip: true,
133
+ icon: {
134
+ icon: "icon-[mdi--chevron-double-right]",
135
+ rtlFlip: true
136
+ },
130
137
  size: "sm",
131
138
  variant: "link",
132
139
  "aria-label": "end",
133
140
  disabled: !endPage,
134
- className: classNames(hideNext && "invisible"),
141
+ className: cn(hideNext && "invisible"),
135
142
  onClick: function onClick() {
136
143
  return endPage && (changePageDate === null || changePageDate === void 0 ? void 0 : changePageDate(endPage));
137
144
  }
138
145
  })]
139
146
  });
140
- };
147
+ }
141
148
 
142
149
  export { DateHeader };
@@ -2,22 +2,21 @@
2
2
 
3
3
  import _defineProperty from '@babel/runtime/helpers/defineProperty';
4
4
  import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';
5
+ import { cn } from '@react-fabric/utilities';
5
6
  import { getDay } from 'date-fns';
6
7
  import i18next from 'i18next';
7
- import { useMemo, Fragment, createElement } from 'react';
8
+ import { useMemo, Fragment } from 'react';
9
+ import { PageType } from '../types/index.js';
8
10
  import { DateUtil } from '../utils/dateUtil.js';
9
11
  import { DateCell } from './DateCell.js';
10
- import classNames from 'classnames';
11
- import { PageType } from '../types/index.js';
12
- import classes from './Date.module.css';
13
12
  import { jsxs, jsx } from 'react/jsx-runtime';
14
13
 
15
14
  var _excluded = ["pageDate", "isHijri"];
16
15
  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; }
17
- 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; }
16
+ 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; }
18
17
  var rows = [0, 1, 2, 3, 4, 5];
19
18
  var cols = [0, 1, 2, 3, 4, 5, 6];
20
- var DatePage = function DatePage(_ref) {
19
+ function DatePage(_ref) {
21
20
  var pageDate = _ref.pageDate,
22
21
  isHijri = _ref.isHijri,
23
22
  props = _objectWithoutProperties(_ref, _excluded);
@@ -27,13 +26,13 @@ var DatePage = function DatePage(_ref) {
27
26
  return DateUtil.addDays(first, (current < 3 ? -7 : 0) + current * -1, isHijri);
28
27
  }, [isHijri, pageDate]);
29
28
  return /*#__PURE__*/jsxs("div", {
30
- className: classNames("grid grid-cols-8 area-content", props.page !== PageType.DATE && "invisible"),
29
+ className: cn("grid grid-cols-8 area-content", props.page !== PageType.DATE && "invisible"),
31
30
  children: [/*#__PURE__*/jsx("div", {
32
- className: classNames(classes.dateHeader, "px-1 text-center bg-tint-50 h-7")
31
+ className: cn("fabric-dateHeader", "px-1 text-center bg-tint-50 h-7")
33
32
  }), cols.map(function (col) {
34
33
  var dt = DateUtil.addDays(startDate, col, isHijri);
35
34
  return /*#__PURE__*/jsx("div", {
36
- className: classNames(classes.dateHeader, "font-medium text-sm p-1 mx-px text-center text-muted bg-tint-50 h-7"),
35
+ className: cn("fabric-dateHeader", "font-medium text-sm p-1 mx-px text-center text-muted bg-tint-50 h-7"),
37
36
  children: DateUtil.format(dt, "eeeeee", i18next.language, isHijri)
38
37
  }, dt.toISOString());
39
38
  }), rows.map(function (row) {
@@ -43,17 +42,16 @@ var DatePage = function DatePage(_ref) {
43
42
  children: DateUtil.getWeek(DateUtil.addDays(startDate, row * 7, isHijri), i18next.language, isHijri)
44
43
  }, row), cols.map(function (col) {
45
44
  var dt = DateUtil.addDays(startDate, row * 7 + col, isHijri);
46
- return /*#__PURE__*/createElement(DateCell, _objectSpread(_objectSpread({}, props), {}, {
45
+ return /*#__PURE__*/jsx(DateCell, _objectSpread(_objectSpread({}, props), {}, {
47
46
  date: dt,
48
47
  page: PageType.DATE,
49
48
  isHijri: isHijri,
50
- key: dt.toISOString(),
51
49
  isMuted: !DateUtil.isSameMonth(dt, pageDate, isHijri)
52
- }));
50
+ }), dt.toISOString());
53
51
  })]
54
52
  }, row);
55
53
  })]
56
54
  });
57
- };
55
+ }
58
56
 
59
57
  export { DatePage };