@react-fabric/date 1.0.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +10 -0
  3. package/dist/cjs/components/Date.module.css +1 -0
  4. package/dist/cjs/components/DateCell.js +98 -0
  5. package/dist/cjs/components/DateHeader.js +142 -0
  6. package/dist/cjs/components/DatePage.js +59 -0
  7. package/dist/cjs/components/DecadePage.js +34 -0
  8. package/dist/cjs/components/MonthPage.js +33 -0
  9. package/dist/cjs/components/TimeSliders.js +131 -0
  10. package/dist/cjs/components/YearPage.js +34 -0
  11. package/dist/cjs/display/DateDisplay.js +35 -0
  12. package/dist/cjs/hijri/index.js +1029 -0
  13. package/dist/cjs/i18n/ar.json.js +25 -0
  14. package/dist/cjs/i18n/en.json.js +21 -0
  15. package/dist/cjs/i18n/index.js +39 -0
  16. package/dist/cjs/i18n/superdate/ar.json.js +86 -0
  17. package/dist/cjs/i18n/superdate/en.json.js +93 -0
  18. package/dist/cjs/index.js +20 -0
  19. package/dist/cjs/panels/BasePanel.js +73 -0
  20. package/dist/cjs/panels/DatePanel.js +205 -0
  21. package/dist/cjs/panels/RangePanel.js +340 -0
  22. package/dist/cjs/superdate/EventPanel.js +173 -0
  23. package/dist/cjs/superdate/QuickSelect.js +134 -0
  24. package/dist/cjs/superdate/RelativeInput.js +79 -0
  25. package/dist/cjs/superdate/RelativePanel.js +91 -0
  26. package/dist/cjs/superdate/SuperDate.module.css +1 -0
  27. package/dist/cjs/superdate/Superdate.js +169 -0
  28. package/dist/cjs/types/index.js +61 -0
  29. package/dist/cjs/utils/dateUtil.js +436 -0
  30. package/dist/esm/components/Date.module.css +1 -0
  31. package/dist/esm/components/DateCell.js +98 -0
  32. package/dist/esm/components/DateHeader.js +142 -0
  33. package/dist/esm/components/DatePage.js +59 -0
  34. package/dist/esm/components/DecadePage.js +34 -0
  35. package/dist/esm/components/MonthPage.js +33 -0
  36. package/dist/esm/components/TimeSliders.js +131 -0
  37. package/dist/esm/components/YearPage.js +34 -0
  38. package/dist/esm/display/DateDisplay.js +35 -0
  39. package/dist/esm/hijri/index.js +1029 -0
  40. package/dist/esm/i18n/ar.json.js +21 -0
  41. package/dist/esm/i18n/en.json.js +18 -0
  42. package/dist/esm/i18n/index.js +39 -0
  43. package/dist/esm/i18n/superdate/ar.json.js +79 -0
  44. package/dist/esm/i18n/superdate/en.json.js +85 -0
  45. package/dist/esm/index.js +9 -0
  46. package/dist/esm/panels/BasePanel.js +73 -0
  47. package/dist/esm/panels/DatePanel.js +205 -0
  48. package/dist/esm/panels/RangePanel.js +340 -0
  49. package/dist/esm/superdate/EventPanel.js +173 -0
  50. package/dist/esm/superdate/QuickSelect.js +134 -0
  51. package/dist/esm/superdate/RelativeInput.js +79 -0
  52. package/dist/esm/superdate/RelativePanel.js +91 -0
  53. package/dist/esm/superdate/SuperDate.module.css +1 -0
  54. package/dist/esm/superdate/Superdate.js +168 -0
  55. package/dist/esm/types/index.js +60 -0
  56. package/dist/esm/utils/dateUtil.js +438 -0
  57. package/dist/types/components/DateCell.d.ts +15 -0
  58. package/dist/types/components/DateHeader.d.ts +14 -0
  59. package/dist/types/components/DatePage.d.ts +6 -0
  60. package/dist/types/components/DecadePage.d.ts +6 -0
  61. package/dist/types/components/MonthPage.d.ts +6 -0
  62. package/dist/types/components/TimeSliders.d.ts +10 -0
  63. package/dist/types/components/YearPage.d.ts +6 -0
  64. package/dist/types/display/DateDisplay.d.ts +15 -0
  65. package/dist/types/hijri/index.d.ts +2 -0
  66. package/dist/types/i18n/index.d.ts +1 -0
  67. package/dist/types/index.d.ts +7 -0
  68. package/dist/types/panels/BasePanel.d.ts +25 -0
  69. package/dist/types/panels/DatePanel.d.ts +2 -0
  70. package/dist/types/panels/RangePanel.d.ts +2 -0
  71. package/dist/types/superdate/EventPanel.d.ts +4 -0
  72. package/dist/types/superdate/QuickSelect.d.ts +1 -0
  73. package/dist/types/superdate/RelativeInput.d.ts +1 -0
  74. package/dist/types/superdate/RelativePanel.d.ts +1 -0
  75. package/dist/types/superdate/Superdate.d.ts +17 -0
  76. package/dist/types/types/index.d.ts +70 -0
  77. package/dist/types/utils/dateUtil.d.ts +30 -0
  78. package/package.json +58 -0
  79. package/src/components/Date.module.css +75 -0
  80. package/src/components/DateCell.tsx +181 -0
  81. package/src/components/DateHeader.tsx +223 -0
  82. package/src/components/DatePage.tsx +107 -0
  83. package/src/components/DecadePage.tsx +53 -0
  84. package/src/components/MonthPage.tsx +52 -0
  85. package/src/components/TimeSliders.tsx +196 -0
  86. package/src/components/YearPage.tsx +53 -0
  87. package/src/display/DateDisplay.tsx +88 -0
  88. package/src/hijri/index.js +1540 -0
  89. package/src/i18n/ar.json +14 -0
  90. package/src/i18n/en.json +13 -0
  91. package/src/i18n/index.ts +31 -0
  92. package/src/i18n/superdate/ar.json +70 -0
  93. package/src/i18n/superdate/en.json +75 -0
  94. package/src/index.ts +32 -0
  95. package/src/panels/BasePanel.tsx +130 -0
  96. package/src/panels/DatePanel.tsx +235 -0
  97. package/src/panels/RangePanel.tsx +400 -0
  98. package/src/superdate/EventPanel.tsx +200 -0
  99. package/src/superdate/QuickSelect.tsx +121 -0
  100. package/src/superdate/RelativeInput.tsx +64 -0
  101. package/src/superdate/RelativePanel.tsx +103 -0
  102. package/src/superdate/SuperDate.module.css +30 -0
  103. package/src/superdate/Superdate.tsx +186 -0
  104. package/src/types/index.ts +121 -0
  105. package/src/utils/dateUtil.ts +551 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2024 React Fabric, Adarsh Pastakia
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,10 @@
1
+ # React-Fabric Date Module
2
+
3
+ #### Install
4
+
5
+ ```bash
6
+ # Using
7
+ yarn add @react-fabric/date
8
+ ```
9
+
10
+ #### Usage
@@ -0,0 +1 @@
1
+ @layer comp{.dateHeader{box-shadow:inset 0 -1px 0 theme(colors.tint.200/50%)}.timeSlider{height:11.25rem;&:after,&:before{box-shadow:0 0 3rem .25rem theme(colors.tint.600);content:"";display:block;z-index:10}&:before{position:sticky;top:0}&:after{bottom:0;position:sticky}&>:first-child,&>:last-child{height:calc(50% - .75rem)}& [data-skew="1"]>div{opacity:.9;transform:scaleY(.9)}& [data-skew="2"]>div{opacity:.75;transform:scaleY(.75)}& [data-skew="3"]>div{opacity:.65;transform:scaleY(.65)}& [data-skew="4"]>div{opacity:.5;transform:scaleY(.5)}}}
@@ -0,0 +1,98 @@
1
+ 'use strict';
2
+
3
+ var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
4
+ var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProperties');
5
+ var utilities = require('@react-fabric/utilities');
6
+ var classNames = require('classnames');
7
+ var dateFns = require('date-fns');
8
+ var i18next = require('i18next');
9
+ var react = require('react');
10
+ var index = require('../types/index.js');
11
+ var dateUtil = require('../utils/dateUtil.js');
12
+ var jsxRuntime = require('react/jsx-runtime');
13
+
14
+ 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,
18
+ _ref$isMuted = _ref.isMuted,
19
+ isMuted = _ref$isMuted === void 0 ? false : _ref$isMuted,
20
+ props = _objectWithoutProperties(_ref, _excluded);
21
+ var page = props.page,
22
+ selected = props.selected,
23
+ hilight = props.hilight,
24
+ isHijri = props.isHijri,
25
+ className = props.className,
26
+ selectDate = props.selectDate,
27
+ changePageDate = props.changePageDate,
28
+ mouseOver = props.mouseOver,
29
+ dateDisabled = props.dateDisabled;
30
+ var isToday = react.useMemo(function () {
31
+ return dateFns.isSameDay(date, new Date());
32
+ }, [date]);
33
+ var isSelected = react.useMemo(function () {
34
+ return selected && !utilities.isArray(selected) && dateFns.isSameDay(date, selected);
35
+ }, [date, page, selected]);
36
+ var isMarked = react.useMemo(function () {
37
+ switch (page) {
38
+ case index.PageType.MONTH:
39
+ return selected && !utilities.isArray(selected) && dateFns.isSameMonth(date, selected);
40
+ case index.PageType.YEAR:
41
+ return selected && !utilities.isArray(selected) && dateFns.isSameYear(date, selected);
42
+ case index.PageType.DECADE:
43
+ return selected && !utilities.isArray(selected) && dateFns.isSameYear(dateFns.startOfDecade(date), dateFns.startOfDecade(selected));
44
+ }
45
+ }, [date, page, selected]);
46
+ var isHilightEdge = react.useMemo(function () {
47
+ if (!isMuted) {
48
+ if (hilight) {
49
+ return dateFns.isSameDay(date, hilight[0]);
50
+ } else if (Array.isArray(selected)) {
51
+ var _selected = _slicedToArray(selected, 2),
52
+ start = _selected[0],
53
+ end = _selected[1];
54
+ var _hilight = false;
55
+ if (dateFns.isSameDay(date, start) && dateFns.isSameDay(date, end)) _hilight = "startend";else if (dateFns.isSameDay(date, start)) _hilight = "start";else if (dateFns.isSameDay(date, end)) _hilight = "end";
56
+ return _hilight;
57
+ }
58
+ }
59
+ }, [date, hilight, selected, isMuted]);
60
+ var isHilight = react.useMemo(function () {
61
+ if (!isMuted) {
62
+ if (hilight) {
63
+ var _hilight2 = _slicedToArray(hilight, 2),
64
+ start = _hilight2[0],
65
+ end = _hilight2[1];
66
+ if (dateFns.isBefore(start, end)) {
67
+ return dateFns.isAfter(date, start) && dateFns.isBefore(date, dateUtil.DateUtil.addDays(end, 1, isHijri));
68
+ } else {
69
+ return dateFns.isBefore(date, start) && dateFns.isAfter(date, dateUtil.DateUtil.addDays(end, -1, isHijri));
70
+ }
71
+ } else if (Array.isArray(selected)) {
72
+ var _selected2 = _slicedToArray(selected, 2),
73
+ _start = _selected2[0],
74
+ _end = _selected2[1];
75
+ return dateFns.isAfter(date, dateUtil.DateUtil.startOfDay(_start, isHijri)) && dateFns.isBefore(date, dateUtil.DateUtil.startOfDay(_end, isHijri));
76
+ }
77
+ }
78
+ }, [isMuted, hilight, selected, date, isHijri]);
79
+ var isDisabled = react.useMemo(function () {
80
+ return !!isSelected || (dateDisabled === null || dateDisabled === void 0 ? void 0 : dateDisabled(date));
81
+ }, [date, dateDisabled, isSelected]);
82
+ return /*#__PURE__*/jsxRuntime.jsxs("div", {
83
+ 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"),
85
+ onFocus: function onFocus() {
86
+ return hilight && page === index.PageType.DATE && (mouseOver === null || mouseOver === void 0 ? void 0 : mouseOver(date));
87
+ },
88
+ onMouseOver: function onMouseOver() {
89
+ return hilight && page === index.PageType.DATE && (mouseOver === null || mouseOver === void 0 ? void 0 : mouseOver(date));
90
+ },
91
+ onClick: function onClick() {
92
+ return !isDisabled && (page === index.PageType.DATE ? selectDate === null || selectDate === void 0 ? void 0 : selectDate(date) : changePageDate === null || changePageDate === void 0 ? void 0 : changePageDate(date));
93
+ },
94
+ children: [page === index.PageType.DATE && dateUtil.DateUtil.format(date, "d", i18next.language, isHijri), page === index.PageType.MONTH && dateUtil.DateUtil.format(date, "MMM", i18next.language, isHijri), page === index.PageType.YEAR && dateUtil.DateUtil.format(date, "yyyy", i18next.language, isHijri), page === index.PageType.DECADE && "".concat(dateUtil.DateUtil.format(dateUtil.DateUtil.startOfDecade(date, isHijri), "yyyy", i18next.language, isHijri), "-").concat(dateUtil.DateUtil.format(dateUtil.DateUtil.endOfDecade(date, isHijri), "yy", i18next.language, isHijri))]
95
+ });
96
+ };
97
+
98
+ exports.DateCell = DateCell;
@@ -0,0 +1,142 @@
1
+ 'use strict';
2
+
3
+ var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
4
+ var core = require('@react-fabric/core');
5
+ var classNames = require('classnames');
6
+ var dateFns = require('date-fns');
7
+ var i18next = require('i18next');
8
+ var react = require('react');
9
+ var index = require('../types/index.js');
10
+ var dateUtil = require('../utils/dateUtil.js');
11
+ var jsxRuntime = require('react/jsx-runtime');
12
+
13
+ var DateHeader = function DateHeader(props) {
14
+ var page = props.page,
15
+ _props$pageDate = props.pageDate,
16
+ pageDate = _props$pageDate === void 0 ? new Date() : _props$pageDate,
17
+ changePage = props.changePage,
18
+ changePageDate = props.changePageDate,
19
+ hideNext = props.hideNext,
20
+ hidePrevious = props.hidePrevious,
21
+ min = props.min,
22
+ max = props.max,
23
+ _props$isHijri = props.isHijri,
24
+ isHijri = _props$isHijri === void 0 ? false : _props$isHijri;
25
+ var headLabel = react.useMemo(function () {
26
+ switch (page) {
27
+ case index.PageType.DATE:
28
+ return dateUtil.DateUtil.format(pageDate, "MMM yyyy", i18next.language, isHijri);
29
+ case index.PageType.MONTH:
30
+ return dateUtil.DateUtil.format(pageDate, "yyyy", i18next.language, isHijri);
31
+ case index.PageType.YEAR:
32
+ return "".concat(dateUtil.DateUtil.format(dateUtil.DateUtil.startOfDecade(pageDate, isHijri), "yyyy", i18next.language, isHijri), " - ").concat(dateUtil.DateUtil.format(dateUtil.DateUtil.endOfDecade(pageDate, isHijri), "yyyy", i18next.language, isHijri));
33
+ case index.PageType.DECADE:
34
+ return "".concat(dateUtil.DateUtil.format(dateUtil.DateUtil.startOfCentury(pageDate, isHijri), "yyyy", i18next.language, isHijri), " - ").concat(dateUtil.DateUtil.format(dateUtil.DateUtil.endOfCentury(pageDate, isHijri), "yyyy", i18next.language, isHijri));
35
+ }
36
+ }, [i18next.language, isHijri, page, pageDate]);
37
+ var _useMemo = react.useMemo(function () {
38
+ if (page === index.PageType.DATE) {
39
+ var dateBefore = dateFns.addDays(dateUtil.DateUtil.startOfYear(pageDate, isHijri), -1);
40
+ var dateAfter = dateFns.addDays(dateUtil.DateUtil.endOfYear(pageDate, isHijri), 1);
41
+ return [min && dateFns.isBefore(dateBefore, min) ? null : dateBefore, max && dateFns.isAfter(dateAfter, max) ? null : dateAfter];
42
+ }
43
+ if (page === index.PageType.MONTH) {
44
+ var _dateBefore = dateFns.addDays(dateUtil.DateUtil.startOfDecade(pageDate, isHijri), -1);
45
+ var _dateAfter = dateFns.addDays(dateUtil.DateUtil.endOfDecade(pageDate, isHijri), 1);
46
+ return [min && dateFns.isBefore(_dateBefore, min) ? null : _dateBefore, max && dateFns.isAfter(_dateAfter, max) ? null : _dateAfter];
47
+ }
48
+ if (page === index.PageType.YEAR) {
49
+ var _dateBefore2 = dateFns.addDays(dateUtil.DateUtil.startOfCentury(pageDate, isHijri), -1);
50
+ var _dateAfter2 = dateFns.addDays(dateUtil.DateUtil.endOfCentury(pageDate, isHijri), 1);
51
+ return [min && dateFns.isBefore(_dateBefore2, min) ? null : _dateBefore2, max && dateFns.isAfter(_dateAfter2, max) ? null : _dateAfter2];
52
+ }
53
+ return [];
54
+ }, [page, min, max, pageDate, isHijri]),
55
+ _useMemo2 = _slicedToArray(_useMemo, 2),
56
+ startPage = _useMemo2[0],
57
+ endPage = _useMemo2[1];
58
+ var _useMemo3 = react.useMemo(function () {
59
+ if (page === index.PageType.DATE) {
60
+ var dateBefore = dateFns.addDays(dateUtil.DateUtil.startOfMonth(pageDate, isHijri), -1);
61
+ var dateAfter = dateFns.addDays(dateUtil.DateUtil.endOfMonth(pageDate, isHijri), 1);
62
+ return [min && dateFns.isBefore(dateBefore, min) ? null : dateBefore, max && dateFns.isAfter(dateAfter, max) ? null : dateAfter];
63
+ }
64
+ if (page === index.PageType.MONTH) {
65
+ var _dateBefore3 = dateFns.addDays(dateUtil.DateUtil.startOfYear(pageDate, isHijri), -1);
66
+ var _dateAfter3 = dateFns.addDays(dateUtil.DateUtil.endOfYear(pageDate, isHijri), 1);
67
+ return [min && dateFns.isBefore(_dateBefore3, min) ? null : _dateBefore3, max && dateFns.isAfter(_dateAfter3, max) ? null : _dateAfter3];
68
+ }
69
+ if (page === index.PageType.YEAR) {
70
+ var _dateBefore4 = dateFns.addDays(dateUtil.DateUtil.startOfDecade(pageDate, isHijri), -1);
71
+ var _dateAfter4 = dateFns.addDays(dateUtil.DateUtil.endOfDecade(pageDate, isHijri), 1);
72
+ return [min && dateFns.isBefore(_dateBefore4, min) ? null : _dateBefore4, max && dateFns.isAfter(_dateAfter4, max) ? null : _dateAfter4];
73
+ }
74
+ if (page === index.PageType.DECADE) {
75
+ var _dateBefore5 = dateFns.addDays(dateUtil.DateUtil.startOfCentury(pageDate, isHijri), -1);
76
+ var _dateAfter5 = dateFns.addDays(dateUtil.DateUtil.endOfCentury(pageDate, isHijri), 1);
77
+ return [min && dateFns.isBefore(_dateBefore5, min) ? null : _dateBefore5, max && dateFns.isAfter(_dateAfter5, max) ? null : _dateAfter5];
78
+ }
79
+ return [];
80
+ }, [page, min, max, pageDate, isHijri]),
81
+ _useMemo4 = _slicedToArray(_useMemo3, 2),
82
+ previousPage = _useMemo4[0],
83
+ nextPage = _useMemo4[1];
84
+ return /*#__PURE__*/jsxRuntime.jsxs("div", {
85
+ className: "flex flex-nowrap items-center area-head",
86
+ "data-page": page,
87
+ children: [startPage !== undefined && /*#__PURE__*/jsxRuntime.jsx(core.Button, {
88
+ icon: core.CoreIcons.chevronsLeft,
89
+ rtlFlip: true,
90
+ size: "sm",
91
+ variant: "link",
92
+ "aria-label": "start",
93
+ disabled: !startPage,
94
+ className: classNames(hidePrevious && "invisible"),
95
+ onClick: function onClick() {
96
+ return startPage && (changePageDate === null || changePageDate === void 0 ? void 0 : changePageDate(startPage));
97
+ }
98
+ }), /*#__PURE__*/jsxRuntime.jsx(core.Button, {
99
+ icon: core.CoreIcons.chevronLeft,
100
+ rtlFlip: true,
101
+ size: "sm",
102
+ variant: "link",
103
+ "aria-label": "prev",
104
+ disabled: !previousPage,
105
+ className: classNames(hidePrevious && "invisible"),
106
+ onClick: function onClick() {
107
+ return previousPage && (changePageDate === null || changePageDate === void 0 ? void 0 : changePageDate(previousPage));
108
+ }
109
+ }), /*#__PURE__*/jsxRuntime.jsx("div", {
110
+ role: "none",
111
+ onClick: function onClick() {
112
+ return changePage(page + 1);
113
+ },
114
+ className: classNames("flex-1 px-2 py-1 text-primary-600 text-center text-sm font-medium truncate", page === index.PageType.DECADE ? "pointer-events-none" : "cursor-pointer"),
115
+ children: headLabel
116
+ }), /*#__PURE__*/jsxRuntime.jsx(core.Button, {
117
+ icon: core.CoreIcons.chevronRight,
118
+ rtlFlip: true,
119
+ size: "sm",
120
+ variant: "link",
121
+ "aria-label": "next",
122
+ disabled: !nextPage,
123
+ className: classNames(hideNext && "invisible"),
124
+ onClick: function onClick() {
125
+ return nextPage && (changePageDate === null || changePageDate === void 0 ? void 0 : changePageDate(nextPage));
126
+ }
127
+ }), endPage !== undefined && /*#__PURE__*/jsxRuntime.jsx(core.Button, {
128
+ icon: core.CoreIcons.chevronsRight,
129
+ rtlFlip: true,
130
+ size: "sm",
131
+ variant: "link",
132
+ "aria-label": "end",
133
+ disabled: !endPage,
134
+ className: classNames(hideNext && "invisible"),
135
+ onClick: function onClick() {
136
+ return endPage && (changePageDate === null || changePageDate === void 0 ? void 0 : changePageDate(endPage));
137
+ }
138
+ })]
139
+ });
140
+ };
141
+
142
+ exports.DateHeader = DateHeader;
@@ -0,0 +1,59 @@
1
+ 'use strict';
2
+
3
+ var _defineProperty = require('@babel/runtime/helpers/defineProperty');
4
+ var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProperties');
5
+ var dateFns = require('date-fns');
6
+ var i18next = require('i18next');
7
+ var react = require('react');
8
+ var dateUtil = require('../utils/dateUtil.js');
9
+ var DateCell = require('./DateCell.js');
10
+ var classNames = require('classnames');
11
+ var index = require('../types/index.js');
12
+ var Date_module = require('./Date.module.css');
13
+ var jsxRuntime = require('react/jsx-runtime');
14
+
15
+ var _excluded = ["pageDate", "isHijri"];
16
+ 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; }
18
+ var rows = [0, 1, 2, 3, 4, 5];
19
+ var cols = [0, 1, 2, 3, 4, 5, 6];
20
+ var DatePage = function DatePage(_ref) {
21
+ var pageDate = _ref.pageDate,
22
+ isHijri = _ref.isHijri,
23
+ props = _objectWithoutProperties(_ref, _excluded);
24
+ var startDate = react.useMemo(function () {
25
+ var first = dateUtil.DateUtil.startOfMonth(pageDate, isHijri);
26
+ var current = dateFns.getDay(first);
27
+ return dateUtil.DateUtil.addDays(first, (current < 3 ? -7 : 0) + current * -1, isHijri);
28
+ }, [isHijri, pageDate]);
29
+ return /*#__PURE__*/jsxRuntime.jsxs("div", {
30
+ className: classNames("grid grid-cols-8 area-content", props.page !== index.PageType.DATE && "invisible"),
31
+ children: [/*#__PURE__*/jsxRuntime.jsx("div", {
32
+ className: classNames(Date_module.dateHeader, "px-1 text-center bg-tint-50 h-7")
33
+ }), cols.map(function (col) {
34
+ var dt = dateUtil.DateUtil.addDays(startDate, col, isHijri);
35
+ return /*#__PURE__*/jsxRuntime.jsx("div", {
36
+ className: classNames(Date_module.dateHeader, "font-medium text-sm p-1 mx-px text-center text-muted bg-tint-50 h-7"),
37
+ children: dateUtil.DateUtil.format(dt, "eeeeee", i18next.language, isHijri)
38
+ }, dt.toISOString());
39
+ }), rows.map(function (row) {
40
+ return /*#__PURE__*/jsxRuntime.jsxs(react.Fragment, {
41
+ children: [/*#__PURE__*/jsxRuntime.jsx("div", {
42
+ className: "px-1 py-1.5 m-px text-xs text-center text-tint-300",
43
+ children: dateUtil.DateUtil.getWeek(dateUtil.DateUtil.addDays(startDate, row * 7, isHijri), i18next.language, isHijri)
44
+ }, row), cols.map(function (col) {
45
+ var dt = dateUtil.DateUtil.addDays(startDate, row * 7 + col, isHijri);
46
+ return /*#__PURE__*/react.createElement(DateCell.DateCell, _objectSpread(_objectSpread({}, props), {}, {
47
+ date: dt,
48
+ page: index.PageType.DATE,
49
+ isHijri: isHijri,
50
+ key: dt.toISOString(),
51
+ isMuted: !dateUtil.DateUtil.isSameMonth(dt, pageDate, isHijri)
52
+ }));
53
+ })]
54
+ }, row);
55
+ })]
56
+ });
57
+ };
58
+
59
+ exports.DatePage = DatePage;
@@ -0,0 +1,34 @@
1
+ 'use strict';
2
+
3
+ var _defineProperty = require('@babel/runtime/helpers/defineProperty');
4
+ var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProperties');
5
+ var react = require('react');
6
+ var dateUtil = require('../utils/dateUtil.js');
7
+ var DateCell = require('./DateCell.js');
8
+ var jsxRuntime = require('react/jsx-runtime');
9
+
10
+ var _excluded = ["pageDate", "isHijri"];
11
+ 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; }
12
+ 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; }
13
+ var cols = [-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
14
+ var DecadePage = function DecadePage(_ref) {
15
+ var pageDate = _ref.pageDate,
16
+ isHijri = _ref.isHijri,
17
+ props = _objectWithoutProperties(_ref, _excluded);
18
+ var startDate = react.useMemo(function () {
19
+ return dateUtil.DateUtil.startOfCentury(pageDate, isHijri);
20
+ }, [isHijri, pageDate]);
21
+ return /*#__PURE__*/jsxRuntime.jsx("div", {
22
+ className: "grid grid-cols-3 area-content place-content-center",
23
+ children: cols.map(function (col) {
24
+ return /*#__PURE__*/jsxRuntime.jsx(DateCell.DateCell, _objectSpread({
25
+ isHijri: isHijri,
26
+ className: "px-1 py-3",
27
+ date: dateUtil.DateUtil.addYears(startDate, col * 10, isHijri),
28
+ isMuted: col === -1 || col === 10
29
+ }, props), col);
30
+ })
31
+ });
32
+ };
33
+
34
+ exports.DecadePage = DecadePage;
@@ -0,0 +1,33 @@
1
+ 'use strict';
2
+
3
+ var _defineProperty = require('@babel/runtime/helpers/defineProperty');
4
+ var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProperties');
5
+ var react = require('react');
6
+ var dateUtil = require('../utils/dateUtil.js');
7
+ var DateCell = require('./DateCell.js');
8
+ var jsxRuntime = require('react/jsx-runtime');
9
+
10
+ var _excluded = ["pageDate", "isHijri"];
11
+ 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; }
12
+ 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; }
13
+ var cols = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];
14
+ var MonthPage = function MonthPage(_ref) {
15
+ var pageDate = _ref.pageDate,
16
+ isHijri = _ref.isHijri,
17
+ props = _objectWithoutProperties(_ref, _excluded);
18
+ var startDate = react.useMemo(function () {
19
+ return dateUtil.DateUtil.startOfYear(pageDate, isHijri);
20
+ }, [isHijri, pageDate]);
21
+ return /*#__PURE__*/jsxRuntime.jsx("div", {
22
+ className: "grid grid-cols-3 area-content place-content-center",
23
+ children: cols.map(function (col) {
24
+ return /*#__PURE__*/jsxRuntime.jsx(DateCell.DateCell, _objectSpread({
25
+ isHijri: isHijri,
26
+ className: "px-1 py-3",
27
+ date: dateUtil.DateUtil.addMonths(startDate, col, isHijri)
28
+ }, props), col);
29
+ })
30
+ });
31
+ };
32
+
33
+ exports.MonthPage = MonthPage;
@@ -0,0 +1,131 @@
1
+ 'use strict';
2
+
3
+ var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
4
+ var core = require('@react-fabric/core');
5
+ var classNames = require('classnames');
6
+ var react = require('react');
7
+ var Date_module = require('./Date.module.css');
8
+ var jsxRuntime = require('react/jsx-runtime');
9
+
10
+ var TimeSlider = function TimeSlider(_ref) {
11
+ var _ref$hour = _ref.hour,
12
+ hour = _ref$hour === void 0 ? 0 : _ref$hour,
13
+ _ref$minute = _ref.minute,
14
+ minute = _ref$minute === void 0 ? 0 : _ref$minute,
15
+ onTimeChange = _ref.onTimeChange;
16
+ var hourRef = react.useRef(null);
17
+ var minuteRef = react.useRef(null);
18
+ var _useState = react.useState(hour),
19
+ _useState2 = _slicedToArray(_useState, 2),
20
+ h = _useState2[0],
21
+ setH = _useState2[1];
22
+ var _useState3 = react.useState(minute),
23
+ _useState4 = _slicedToArray(_useState3, 2),
24
+ m = _useState4[0],
25
+ setM = _useState4[1];
26
+ react.useEffect(function () {
27
+ var _hourRef$current;
28
+ setH(hour);
29
+ (_hourRef$current = hourRef.current) === null || _hourRef$current === void 0 || (_hourRef$current = _hourRef$current.children.item(hour + 1)) === null || _hourRef$current === void 0 || _hourRef$current.scrollIntoView({
30
+ block: "center"
31
+ });
32
+ }, [hour]);
33
+ react.useEffect(function () {
34
+ var _minuteRef$current;
35
+ setM(minute);
36
+ (_minuteRef$current = minuteRef.current) === null || _minuteRef$current === void 0 || (_minuteRef$current = _minuteRef$current.children.item(minute + 1)) === null || _minuteRef$current === void 0 || _minuteRef$current.scrollIntoView({
37
+ block: "center"
38
+ });
39
+ }, [minute]);
40
+ var fireChange = core.useDebounce(onTimeChange, [onTimeChange]);
41
+ var calculateTime = react.useCallback(function () {
42
+ var _hourRef$current$scro, _hourRef$current2, _offsetHeight, _hourRef$current3, _minuteRef$current$sc, _minuteRef$current2, _offsetHeight2, _minuteRef$current3;
43
+ var hourTop = (_hourRef$current$scro = (_hourRef$current2 = hourRef.current) === null || _hourRef$current2 === void 0 ? void 0 : _hourRef$current2.scrollTop) !== null && _hourRef$current$scro !== void 0 ? _hourRef$current$scro : 0;
44
+ var hourHeight = (_offsetHeight = (_hourRef$current3 = hourRef.current) === null || _hourRef$current3 === void 0 || (_hourRef$current3 = _hourRef$current3.children.item(1)) === null || _hourRef$current3 === void 0 ? void 0 : _hourRef$current3.offsetHeight) !== null && _offsetHeight !== void 0 ? _offsetHeight : 0;
45
+ var minuteTop = (_minuteRef$current$sc = (_minuteRef$current2 = minuteRef.current) === null || _minuteRef$current2 === void 0 ? void 0 : _minuteRef$current2.scrollTop) !== null && _minuteRef$current$sc !== void 0 ? _minuteRef$current$sc : 0;
46
+ var minuteHeight = (_offsetHeight2 = (_minuteRef$current3 = minuteRef.current) === null || _minuteRef$current3 === void 0 || (_minuteRef$current3 = _minuteRef$current3.children.item(1)) === null || _minuteRef$current3 === void 0 ? void 0 : _minuteRef$current3.offsetHeight) !== null && _offsetHeight2 !== void 0 ? _offsetHeight2 : 0;
47
+ var hour = Math.round(hourTop / hourHeight);
48
+ var minute = Math.round(minuteTop / minuteHeight);
49
+ setH(hour);
50
+ setM(minute);
51
+ fireChange({
52
+ hour: hour,
53
+ minute: minute
54
+ });
55
+ }, [onTimeChange]);
56
+ return /*#__PURE__*/jsxRuntime.jsxs("div", {
57
+ className: classNames("area-[time] flex flex-col flex-nowrap border-s border-s-tint-50 overflow-hidden bg-base"),
58
+ children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
59
+ className: "flex",
60
+ children: [/*#__PURE__*/jsxRuntime.jsx("div", {
61
+ className: classNames(Date_module.dateHeader, "flex-1 font-medium text-muted text-sm p-1 mx-px text-center bg-tint-50"),
62
+ children: "H"
63
+ }), /*#__PURE__*/jsxRuntime.jsx("div", {
64
+ className: classNames(Date_module.dateHeader, "flex-1 font-medium text-muted text-sm p-1 mx-px text-center bg-tint-50"),
65
+ children: "M"
66
+ })]
67
+ }), /*#__PURE__*/jsxRuntime.jsxs("div", {
68
+ className: "flex flex-1 flex-nowrap overflow-hidden relative",
69
+ children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
70
+ className: classNames("flex-1 overflow-auto scroll-hide snap-y snap-mandatory", Date_module.timeSlider),
71
+ onScroll: calculateTime,
72
+ ref: hourRef,
73
+ children: [/*#__PURE__*/jsxRuntime.jsx("div", {
74
+ className: "w-full"
75
+ }), Array(24).fill(0).map(function (_, i) {
76
+ return /*#__PURE__*/jsxRuntime.jsx("div", {
77
+ role: "none",
78
+ className: classNames("ps-2 pe-1 snap-center outline outline-muted", i === h && "font-medium text-primary-600"),
79
+ "data-skew": i === h - 5 || i === h + 5 ? 5 : i === h - 4 || i === h + 4 ? 4 : i === h - 3 || i === h + 3 ? 3 : i === h - 2 || i === h + 2 ? 2 : i === h - 1 || i === h + 1 ? 1 : undefined,
80
+ "data-selected": i === h,
81
+ onClick: function onClick(e) {
82
+ e.currentTarget.scrollIntoView({
83
+ block: "center",
84
+ behavior: "smooth"
85
+ });
86
+ },
87
+ children: /*#__PURE__*/jsxRuntime.jsx("div", {
88
+ children: i.toString(10).padStart(2, "0")
89
+ })
90
+ }, i);
91
+ }), /*#__PURE__*/jsxRuntime.jsx("div", {
92
+ className: "w-full"
93
+ })]
94
+ }), /*#__PURE__*/jsxRuntime.jsxs("div", {
95
+ className: classNames("flex-1 overflow-auto scroll-hide snap-y snap-mandatory", Date_module.timeSlider),
96
+ onScroll: calculateTime,
97
+ ref: minuteRef,
98
+ children: [/*#__PURE__*/jsxRuntime.jsx("div", {
99
+ className: "w-full"
100
+ }), Array(60).fill(0).map(function (_, i) {
101
+ return /*#__PURE__*/jsxRuntime.jsx("div", {
102
+ role: "none",
103
+ className: classNames("ps-1 pe-2 snap-center outline outline-muted", i === m && "font-medium text-primary-600"),
104
+ "data-skew": i === m - 5 || i === m + 5 ? 5 : i === m - 4 || i === m + 4 ? 4 : i === m - 3 || i === m + 3 ? 3 : i === m - 2 || i === m + 2 ? 2 : i === m - 1 || i === m + 1 ? 1 : undefined,
105
+ "data-selected": i === m,
106
+ onClick: function onClick(e) {
107
+ e.currentTarget.scrollIntoView({
108
+ block: "center",
109
+ behavior: "smooth"
110
+ });
111
+ },
112
+ children: /*#__PURE__*/jsxRuntime.jsx("div", {
113
+ children: i.toString(10).padStart(2, "0")
114
+ })
115
+ }, i);
116
+ }), /*#__PURE__*/jsxRuntime.jsx("div", {
117
+ className: "w-full"
118
+ })]
119
+ }), /*#__PURE__*/jsxRuntime.jsxs("div", {
120
+ className: "border rounded border-primary-500 absolute top-1/2 -translate-y-1/2 h-6 w-full flex items-center justify-between bg-primary-200/10",
121
+ children: [/*#__PURE__*/jsxRuntime.jsx("div", {
122
+ className: "border-s-4 border-t-4 border-b-4 border-transparent border-s-primary-500"
123
+ }), /*#__PURE__*/jsxRuntime.jsx("div", {
124
+ className: "border-e-4 border-t-4 border-b-4 border-transparent border-e-primary-500"
125
+ })]
126
+ })]
127
+ })]
128
+ });
129
+ };
130
+
131
+ exports.TimeSlider = TimeSlider;
@@ -0,0 +1,34 @@
1
+ 'use strict';
2
+
3
+ var _defineProperty = require('@babel/runtime/helpers/defineProperty');
4
+ var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProperties');
5
+ var react = require('react');
6
+ var dateUtil = require('../utils/dateUtil.js');
7
+ var DateCell = require('./DateCell.js');
8
+ var jsxRuntime = require('react/jsx-runtime');
9
+
10
+ var _excluded = ["pageDate", "isHijri"];
11
+ 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; }
12
+ 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; }
13
+ var cols = [-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
14
+ var YearPage = function YearPage(_ref) {
15
+ var pageDate = _ref.pageDate,
16
+ isHijri = _ref.isHijri,
17
+ props = _objectWithoutProperties(_ref, _excluded);
18
+ var startDate = react.useMemo(function () {
19
+ return dateUtil.DateUtil.startOfDecade(pageDate, isHijri);
20
+ }, [isHijri, pageDate]);
21
+ return /*#__PURE__*/jsxRuntime.jsx("div", {
22
+ className: "grid grid-cols-3 area-content place-content-center",
23
+ children: cols.map(function (col) {
24
+ return /*#__PURE__*/jsxRuntime.jsx(DateCell.DateCell, _objectSpread({
25
+ isHijri: isHijri,
26
+ className: "px-1 py-3",
27
+ date: dateUtil.DateUtil.addYears(startDate, col, isHijri),
28
+ isMuted: col === -1 || col === 10
29
+ }, props), col);
30
+ })
31
+ });
32
+ };
33
+
34
+ exports.YearPage = YearPage;
@@ -0,0 +1,35 @@
1
+ 'use strict';
2
+
3
+ var _defineProperty = require('@babel/runtime/helpers/defineProperty');
4
+ var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProperties');
5
+ var core = require('@react-fabric/core');
6
+ var dateUtil = require('../utils/dateUtil.js');
7
+ var jsxRuntime = require('react/jsx-runtime');
8
+
9
+ var _excluded = ["date", "className", "format", "children"];
10
+ 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; }
11
+ 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; }
12
+ var DateDisplay = function DateDisplay(_ref) {
13
+ var date = _ref.date,
14
+ className = _ref.className,
15
+ _ref$format = _ref.format,
16
+ format = _ref$format === void 0 ? "eee, PPpp" : _ref$format,
17
+ children = _ref.children,
18
+ aria = _objectWithoutProperties(_ref, _excluded);
19
+ var _useGlobals = core.useGlobals(),
20
+ currentCalendar = _useGlobals.currentCalendar,
21
+ currentLocale = _useGlobals.currentLocale;
22
+ var dtLabel = /*#__PURE__*/jsxRuntime.jsx(core.Tooltip, {
23
+ content: dateUtil.DateUtil.format(date, format, currentLocale, currentCalendar !== "hijri"),
24
+ children: /*#__PURE__*/jsxRuntime.jsx("span", _objectSpread(_objectSpread({
25
+ className: className
26
+ }, aria), {}, {
27
+ children: dateUtil.DateUtil.format(date, format, currentLocale, currentCalendar === "hijri")
28
+ }))
29
+ });
30
+ return children ? /*#__PURE__*/jsxRuntime.jsxs(core.Dropdown, {
31
+ children: [dtLabel, children]
32
+ }) : dtLabel;
33
+ };
34
+
35
+ exports.DateDisplay = DateDisplay;