@xanui/ui 1.1.37 → 1.1.40
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Accordion/index.cjs +96 -0
- package/Accordion/index.cjs.map +1 -0
- package/Accordion/index.js +19 -21
- package/Accordion/index.js.map +1 -1
- package/Alert/index.cjs +121 -0
- package/Alert/index.cjs.map +1 -0
- package/Alert/index.js +33 -35
- package/Alert/index.js.map +1 -1
- package/Autocomplete/index.cjs +136 -0
- package/Autocomplete/index.cjs.map +1 -0
- package/Autocomplete/index.js +23 -25
- package/Autocomplete/index.js.map +1 -1
- package/Avatar/index.cjs +50 -0
- package/Avatar/index.cjs.map +1 -0
- package/Avatar/index.js +15 -17
- package/Avatar/index.js.map +1 -1
- package/Badge/index.cjs +109 -0
- package/Badge/index.cjs.map +1 -0
- package/Badge/index.js +12 -14
- package/Badge/index.js.map +1 -1
- package/Box/index.cjs +14 -0
- package/Box/index.cjs.map +1 -0
- package/Box/index.js +7 -9
- package/Box/index.js.map +1 -1
- package/Button/index.cjs +94 -0
- package/Button/index.cjs.map +1 -0
- package/Button/index.js +17 -19
- package/Button/index.js.map +1 -1
- package/ButtonGroup/index.cjs +58 -0
- package/ButtonGroup/index.cjs.map +1 -0
- package/ButtonGroup/index.js +12 -14
- package/ButtonGroup/index.js.map +1 -1
- package/Calendar/index.cjs +174 -0
- package/Calendar/index.cjs.map +1 -0
- package/Calendar/index.js +39 -41
- package/Calendar/index.js.map +1 -1
- package/CalendarInput/index.cjs +34 -0
- package/CalendarInput/index.cjs.map +1 -0
- package/CalendarInput/index.js +19 -21
- package/CalendarInput/index.js.map +1 -1
- package/Checkbox/index.cjs +58 -0
- package/Checkbox/index.cjs.map +1 -0
- package/Checkbox/index.js +14 -16
- package/Checkbox/index.js.map +1 -1
- package/Chip/index.cjs +76 -0
- package/Chip/index.cjs.map +1 -0
- package/Chip/index.js +12 -14
- package/Chip/index.js.map +1 -1
- package/CircleProgress/index.cjs +129 -0
- package/CircleProgress/index.cjs.map +1 -0
- package/CircleProgress/index.js +13 -15
- package/CircleProgress/index.js.map +1 -1
- package/ClickOutside/index.cjs +37 -0
- package/ClickOutside/index.cjs.map +1 -0
- package/ClickOutside/index.js +9 -11
- package/ClickOutside/index.js.map +1 -1
- package/Collaps/index.cjs +26 -0
- package/Collaps/index.cjs.map +1 -0
- package/Collaps/index.js +9 -11
- package/Collaps/index.js.map +1 -1
- package/Container/index.cjs +29 -0
- package/Container/index.cjs.map +1 -0
- package/Container/index.js +9 -11
- package/Container/index.js.map +1 -1
- package/DataFilter/index.cjs +78 -0
- package/DataFilter/index.cjs.map +1 -0
- package/DataFilter/index.js +30 -41
- package/DataFilter/index.js.map +1 -1
- package/DataFilter/options/DateFilter.cjs +32 -0
- package/DataFilter/options/DateFilter.cjs.map +1 -0
- package/DataFilter/options/DateFilter.js +16 -18
- package/DataFilter/options/DateFilter.js.map +1 -1
- package/DataFilter/options/DateRangeFilter.cjs +27 -0
- package/DataFilter/options/DateRangeFilter.cjs.map +1 -0
- package/DataFilter/options/DateRangeFilter.js +12 -14
- package/DataFilter/options/DateRangeFilter.js.map +1 -1
- package/DataFilter/options/MultiSelectFilter.cjs +38 -0
- package/DataFilter/options/MultiSelectFilter.cjs.map +1 -0
- package/DataFilter/options/MultiSelectFilter.js +20 -22
- package/DataFilter/options/MultiSelectFilter.js.map +1 -1
- package/DataFilter/options/NumberFilter.cjs +24 -0
- package/DataFilter/options/NumberFilter.cjs.map +1 -0
- package/DataFilter/options/NumberFilter.js +11 -13
- package/DataFilter/options/NumberFilter.js.map +1 -1
- package/DataFilter/options/NumberRangeFilter.cjs +29 -0
- package/DataFilter/options/NumberRangeFilter.cjs.map +1 -0
- package/DataFilter/options/NumberRangeFilter.js +12 -14
- package/DataFilter/options/NumberRangeFilter.js.map +1 -1
- package/DataFilter/options/SelectFilter.cjs +34 -0
- package/DataFilter/options/SelectFilter.cjs.map +1 -0
- package/DataFilter/options/SelectFilter.js +18 -20
- package/DataFilter/options/SelectFilter.js.map +1 -1
- package/DataFilter/options/TextFilter.cjs +24 -0
- package/DataFilter/options/TextFilter.cjs.map +1 -0
- package/DataFilter/options/TextFilter.js +11 -13
- package/DataFilter/options/TextFilter.js.map +1 -1
- package/Datatable/FilterBox.cjs +39 -0
- package/Datatable/FilterBox.cjs.map +1 -0
- package/Datatable/FilterBox.js +21 -23
- package/Datatable/FilterBox.js.map +1 -1
- package/Datatable/Row.cjs +59 -0
- package/Datatable/Row.cjs.map +1 -0
- package/Datatable/Row.js +19 -21
- package/Datatable/Row.js.map +1 -1
- package/Datatable/SelectedBox.cjs +21 -0
- package/Datatable/SelectedBox.cjs.map +1 -0
- package/Datatable/SelectedBox.js +10 -12
- package/Datatable/SelectedBox.js.map +1 -1
- package/Datatable/Table.cjs +23 -0
- package/Datatable/Table.cjs.map +1 -0
- package/Datatable/Table.js +8 -10
- package/Datatable/Table.js.map +1 -1
- package/Datatable/TableHead.cjs +61 -0
- package/Datatable/TableHead.cjs.map +1 -0
- package/Datatable/TableHead.js +18 -20
- package/Datatable/TableHead.js.map +1 -1
- package/Datatable/index.cjs +93 -0
- package/Datatable/index.cjs.map +1 -0
- package/Datatable/index.js +21 -23
- package/Datatable/index.js.map +1 -1
- package/Divider/index.cjs +31 -0
- package/Divider/index.cjs.map +1 -0
- package/Divider/index.js +8 -10
- package/Divider/index.js.map +1 -1
- package/Drawer/index.cjs +78 -0
- package/Drawer/index.cjs.map +1 -0
- package/Drawer/index.js +12 -14
- package/Drawer/index.js.map +1 -1
- package/Form/index.cjs +45 -0
- package/Form/index.cjs.map +1 -0
- package/Form/index.js +8 -10
- package/Form/index.js.map +1 -1
- package/GridContainer/index.cjs +19 -0
- package/GridContainer/index.cjs.map +1 -0
- package/GridContainer/index.js +7 -9
- package/GridContainer/index.js.map +1 -1
- package/GridItem/index.cjs +20 -0
- package/GridItem/index.cjs.map +1 -0
- package/GridItem/index.js +7 -9
- package/GridItem/index.js.map +1 -1
- package/IconButton/index.cjs +64 -0
- package/IconButton/index.cjs.map +1 -0
- package/IconButton/index.js +12 -14
- package/IconButton/index.js.map +1 -1
- package/Image/index.cjs +27 -0
- package/Image/index.cjs.map +1 -0
- package/Image/index.js +9 -11
- package/Image/index.js.map +1 -1
- package/Input/index.cjs +144 -0
- package/Input/index.cjs.map +1 -0
- package/Input/index.js +18 -20
- package/Input/index.js.map +1 -1
- package/InputNumber/index.cjs +32 -0
- package/InputNumber/index.cjs.map +1 -0
- package/InputNumber/index.js +6 -8
- package/InputNumber/index.js.map +1 -1
- package/Label/index.cjs +24 -0
- package/Label/index.cjs.map +1 -0
- package/Label/index.js +7 -9
- package/Label/index.js.map +1 -1
- package/Layer/index.cjs +62 -0
- package/Layer/index.cjs.map +1 -0
- package/Layer/index.js +19 -21
- package/Layer/index.js.map +1 -1
- package/LineProgress/index.cjs +59 -0
- package/LineProgress/index.cjs.map +1 -0
- package/LineProgress/index.js +11 -13
- package/LineProgress/index.js.map +1 -1
- package/List/ListContext.cjs +11 -0
- package/List/ListContext.cjs.map +1 -0
- package/List/ListContext.js +2 -5
- package/List/ListContext.js.map +1 -1
- package/List/index.cjs +63 -0
- package/List/index.cjs.map +1 -0
- package/List/index.js +12 -14
- package/List/index.js.map +1 -1
- package/ListItem/index.cjs +54 -0
- package/ListItem/index.cjs.map +1 -0
- package/ListItem/index.js +12 -14
- package/ListItem/index.js.map +1 -1
- package/LoadingBox/index.cjs +32 -0
- package/LoadingBox/index.cjs.map +1 -0
- package/LoadingBox/index.js +11 -13
- package/LoadingBox/index.js.map +1 -1
- package/Menu/index.cjs +150 -0
- package/Menu/index.cjs.map +1 -0
- package/Menu/index.js +18 -20
- package/Menu/index.js.map +1 -1
- package/Modal/index.cjs +59 -0
- package/Modal/index.cjs.map +1 -0
- package/Modal/index.js +15 -17
- package/Modal/index.js.map +1 -1
- package/NoSSR/index.cjs +15 -0
- package/NoSSR/index.cjs.map +1 -0
- package/NoSSR/index.js +4 -6
- package/NoSSR/index.js.map +1 -1
- package/Option/index.cjs +14 -0
- package/Option/index.cjs.map +1 -0
- package/Option/index.js +7 -9
- package/Option/index.js.map +1 -1
- package/Paper/index.cjs +15 -0
- package/Paper/index.cjs.map +1 -0
- package/Paper/index.js +8 -10
- package/Paper/index.js.map +1 -1
- package/Portal/index.cjs +27 -0
- package/Portal/index.cjs.map +1 -0
- package/Portal/index.js +9 -11
- package/Portal/index.js.map +1 -1
- package/Radio/index.cjs +16 -0
- package/Radio/index.cjs.map +1 -0
- package/Radio/index.js +9 -11
- package/Radio/index.js.map +1 -1
- package/Scrollbar/index.cjs +59 -0
- package/Scrollbar/index.cjs.map +1 -0
- package/Scrollbar/index.js +10 -12
- package/Scrollbar/index.js.map +1 -1
- package/Select/index.cjs +59 -0
- package/Select/index.cjs.map +1 -0
- package/Select/index.js +22 -24
- package/Select/index.js.map +1 -1
- package/Skeleton/index.cjs +60 -0
- package/Skeleton/index.cjs.map +1 -0
- package/Skeleton/index.js +7 -9
- package/Skeleton/index.js.map +1 -1
- package/Stack/index.cjs +17 -0
- package/Stack/index.cjs.map +1 -0
- package/Stack/index.js +7 -9
- package/Stack/index.js.map +1 -1
- package/Switch/index.cjs +79 -0
- package/Switch/index.cjs.map +1 -0
- package/Switch/index.js +12 -14
- package/Switch/index.js.map +1 -1
- package/Tab/index.cjs +17 -0
- package/Tab/index.cjs.map +1 -0
- package/Tab/index.js +9 -11
- package/Tab/index.js.map +1 -1
- package/Table/index.cjs +88 -0
- package/Table/index.cjs.map +1 -0
- package/Table/index.js +13 -15
- package/Table/index.js.map +1 -1
- package/TableBody/index.cjs +14 -0
- package/TableBody/index.cjs.map +1 -0
- package/TableBody/index.js +7 -9
- package/TableBody/index.js.map +1 -1
- package/TableCell/index.cjs +14 -0
- package/TableCell/index.cjs.map +1 -0
- package/TableCell/index.js +7 -9
- package/TableCell/index.js.map +1 -1
- package/TableFooter/index.cjs +14 -0
- package/TableFooter/index.cjs.map +1 -0
- package/TableFooter/index.js +7 -9
- package/TableFooter/index.js.map +1 -1
- package/TableHead/index.cjs +14 -0
- package/TableHead/index.cjs.map +1 -0
- package/TableHead/index.js +7 -9
- package/TableHead/index.js.map +1 -1
- package/TablePagination/index.cjs +59 -0
- package/TablePagination/index.cjs.map +1 -0
- package/TablePagination/index.js +21 -23
- package/TablePagination/index.js.map +1 -1
- package/TableRow/index.cjs +14 -0
- package/TableRow/index.cjs.map +1 -0
- package/TableRow/index.js +7 -9
- package/TableRow/index.js.map +1 -1
- package/Tabs/index.cjs +201 -0
- package/Tabs/index.cjs.map +1 -0
- package/Tabs/index.js +19 -21
- package/Tabs/index.js.map +1 -1
- package/Text/index.cjs +25 -0
- package/Text/index.cjs.map +1 -0
- package/Text/index.js +8 -10
- package/Text/index.js.map +1 -1
- package/Toast/index.cjs +120 -0
- package/Toast/index.cjs.map +1 -0
- package/Toast/index.js +18 -20
- package/Toast/index.js.map +1 -1
- package/Tooltip/index.cjs +40 -0
- package/Tooltip/index.cjs.map +1 -0
- package/Tooltip/index.js +11 -13
- package/Tooltip/index.js.map +1 -1
- package/ViewBox/index.cjs +32 -0
- package/ViewBox/index.cjs.map +1 -0
- package/ViewBox/index.js +11 -13
- package/ViewBox/index.js.map +1 -1
- package/index.cjs +134 -0
- package/index.cjs.map +1 -0
- package/index.js +64 -133
- package/index.js.map +1 -1
- package/package.json +3 -3
- package/readme.md +4 -4
- package/useAlert/index.cjs +94 -0
- package/useAlert/index.cjs.map +1 -0
- package/useAlert/index.js +12 -14
- package/useAlert/index.js.map +1 -1
- package/useBlurCss/index.cjs +19 -0
- package/useBlurCss/index.cjs.map +1 -0
- package/useBlurCss/index.js +5 -7
- package/useBlurCss/index.js.map +1 -1
- package/useCorner/index.cjs +22 -0
- package/useCorner/index.cjs.map +1 -0
- package/useCorner/index.js +1 -3
- package/useCorner/index.js.map +1 -1
- package/useLayer/index.cjs +38 -0
- package/useLayer/index.cjs.map +1 -0
- package/useLayer/index.js +7 -9
- package/useLayer/index.js.map +1 -1
- package/useModal/index.cjs +37 -0
- package/useModal/index.cjs.map +1 -0
- package/useModal/index.js +8 -10
- package/useModal/index.js.map +1 -1
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
var tslib = require('tslib');
|
|
5
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
6
|
+
var React = require('react');
|
|
7
|
+
var index$1 = require('../Stack/index.cjs');
|
|
8
|
+
var index$3 = require('../IconButton/index.cjs');
|
|
9
|
+
var IconKeyboardArrowRight = require('@xanui/icons/KeyboardArrowRight');
|
|
10
|
+
var IconKeyboardArrowLeft = require('@xanui/icons/KeyboardArrowLeft');
|
|
11
|
+
var index$2 = require('../Text/index.cjs');
|
|
12
|
+
var index$4 = require('../Button/index.cjs');
|
|
13
|
+
var ResetIcon = require('@xanui/icons/Replay');
|
|
14
|
+
var index = require('../ViewBox/index.cjs');
|
|
15
|
+
var core = require('@xanui/core');
|
|
16
|
+
|
|
17
|
+
const ShowYears = ({ color, year, today, onClick }) => {
|
|
18
|
+
let years = [];
|
|
19
|
+
const selectedRef = React.useRef(null);
|
|
20
|
+
for (let y = 1900; y < today.getFullYear() + 40; y++) {
|
|
21
|
+
const selected = year == y;
|
|
22
|
+
years.push(jsxRuntime.jsx(index$1, { sx: {
|
|
23
|
+
width: 50,
|
|
24
|
+
p: .1
|
|
25
|
+
}, className: 'calender-year-item', children: jsxRuntime.jsx(index$4, { color: selected ? color : "default", className: 'calender-year-button', size: 'small', corner: "circle", ref: selected ? selectedRef : null, onClick: () => onClick(y), variant: selected ? "fill" : "text", children: y }) }, y));
|
|
26
|
+
}
|
|
27
|
+
React.useEffect(() => {
|
|
28
|
+
if (selectedRef === null || selectedRef === void 0 ? void 0 : selectedRef.current) {
|
|
29
|
+
selectedRef === null || selectedRef === void 0 ? void 0 : selectedRef.current.scrollIntoView({ behavior: "smooth", block: "center", inline: "nearest" });
|
|
30
|
+
}
|
|
31
|
+
}, []);
|
|
32
|
+
return (jsxRuntime.jsx(index$1, { sx: {
|
|
33
|
+
flexWrap: "wrap",
|
|
34
|
+
flexDirection: "row",
|
|
35
|
+
overflow: "hidden",
|
|
36
|
+
overflowY: "auto"
|
|
37
|
+
}, className: 'calender-years', children: years }));
|
|
38
|
+
};
|
|
39
|
+
const Calendar = (_a) => {
|
|
40
|
+
var { value } = _a, rest = tslib.__rest(_a, ["value"]);
|
|
41
|
+
let [{ onChange, viewMode: VMode, onButtonClick, color }] = core.useInterface("Calender", rest, {});
|
|
42
|
+
const _p = {};
|
|
43
|
+
if (VMode)
|
|
44
|
+
_p.VMode = VMode;
|
|
45
|
+
if (color)
|
|
46
|
+
_p.color = color;
|
|
47
|
+
const p = core.useBreakpointProps(_p);
|
|
48
|
+
color = p.color || "brand";
|
|
49
|
+
let [viewMode, setViewMode] = React.useState(p.VMode || "day");
|
|
50
|
+
let [selectedDate, setSelectedDate] = React.useState(new Date());
|
|
51
|
+
selectedDate = value instanceof Date ? value : selectedDate;
|
|
52
|
+
const [currentDate, setCurrentDate] = React.useState(selectedDate);
|
|
53
|
+
const year = currentDate.getFullYear();
|
|
54
|
+
const month = currentDate.getMonth();
|
|
55
|
+
const daysInMonth = 32 - new Date(year, month, 32).getDate();
|
|
56
|
+
const today = new Date();
|
|
57
|
+
const btnWidth = 36;
|
|
58
|
+
const boxWidth = btnWidth * 7;
|
|
59
|
+
const showCalendar = () => {
|
|
60
|
+
let firstDay = (new Date(year, month)).getDay();
|
|
61
|
+
let rows = [];
|
|
62
|
+
let row = [];
|
|
63
|
+
const dayNames = ['S', 'M', 'T', 'W', 'T', 'F', 'S'];
|
|
64
|
+
for (let i = 0; i < dayNames.length; i++) {
|
|
65
|
+
const k = dayNames[i];
|
|
66
|
+
row.push(jsxRuntime.jsx(index$1, { sx: {
|
|
67
|
+
width: btnWidth,
|
|
68
|
+
height: btnWidth,
|
|
69
|
+
alignItems: "center",
|
|
70
|
+
justifyContent: "center"
|
|
71
|
+
}, children: jsxRuntime.jsx(index$3, { variant: "text", color: "default", disabled: true, children: k }) }, "dayname-" + i));
|
|
72
|
+
}
|
|
73
|
+
rows.push(jsxRuntime.jsx(index$1, { flexRow: true, className: 'calender-day-row', children: row }, "header"));
|
|
74
|
+
let date = 1;
|
|
75
|
+
for (let i = 0; i < 6; i++) {
|
|
76
|
+
let row = [];
|
|
77
|
+
for (let j = 0; j < 7; j++) {
|
|
78
|
+
if (i === 0 && j < firstDay) {
|
|
79
|
+
row.push(jsxRuntime.jsx(index$1, { alignItems: "center", justifyContent: "center", sx: {
|
|
80
|
+
width: btnWidth,
|
|
81
|
+
height: btnWidth,
|
|
82
|
+
alignItems: "center",
|
|
83
|
+
justifyContent: "center"
|
|
84
|
+
} }, date + j + i));
|
|
85
|
+
}
|
|
86
|
+
else if (date > daysInMonth) {
|
|
87
|
+
break;
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
let isToday = date === today.getDate() && year === today.getFullYear() && month === today.getMonth();
|
|
91
|
+
let isSelected = date === selectedDate.getDate() && year === selectedDate.getFullYear() && month === selectedDate.getMonth();
|
|
92
|
+
let css = {};
|
|
93
|
+
if (isToday) {
|
|
94
|
+
css = {
|
|
95
|
+
variant: "fill",
|
|
96
|
+
color: "default"
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
if (isSelected) {
|
|
100
|
+
css = {
|
|
101
|
+
variant: "fill",
|
|
102
|
+
color: color
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
row.push(jsxRuntime.jsx(index$1, { sx: {
|
|
106
|
+
width: btnWidth,
|
|
107
|
+
height: btnWidth,
|
|
108
|
+
alignItems: "center",
|
|
109
|
+
justifyContent: "center"
|
|
110
|
+
}, className: 'calender-day-item', children: jsxRuntime.jsx(index$3, Object.assign({ className: 'calender-day-button', variant: isSelected ? "fill" : "text", color: isToday ? color : "default" }, css, { "data-value": date, onClick: (e) => {
|
|
111
|
+
let d = e.target.getAttribute("data-value");
|
|
112
|
+
if (!d)
|
|
113
|
+
return;
|
|
114
|
+
let selectedDate = new Date(year, month, parseInt(d));
|
|
115
|
+
onChange ? onChange(selectedDate) : setSelectedDate(selectedDate);
|
|
116
|
+
onButtonClick && onButtonClick("day", selectedDate);
|
|
117
|
+
}, children: date })) }, date + j + i));
|
|
118
|
+
date++;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
rows.push(jsxRuntime.jsx(index$1, { flexRow: true, className: 'calender-day-row', children: row }, "row" + i));
|
|
122
|
+
}
|
|
123
|
+
return rows;
|
|
124
|
+
};
|
|
125
|
+
const showMonth = () => {
|
|
126
|
+
let months = [];
|
|
127
|
+
const monthNames = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
|
|
128
|
+
for (let m = 0; m < monthNames.length; m++) {
|
|
129
|
+
const selected = currentDate.getMonth() === m;
|
|
130
|
+
months.push(jsxRuntime.jsx(index$1, { width: "50%", alignItems: "center", justifyContent: "center", p: .1, className: 'calender-months-item', children: jsxRuntime.jsx(index$4, { color: selected ? color : "default", className: 'calender-month-button', size: 'small', corner: "circle", variant: selected ? "fill" : 'text', onClick: () => {
|
|
131
|
+
const v = new Date(currentDate.getFullYear(), m);
|
|
132
|
+
setCurrentDate(v);
|
|
133
|
+
setViewMode("day");
|
|
134
|
+
onButtonClick && onButtonClick("month", v);
|
|
135
|
+
}, sx: {
|
|
136
|
+
color: selected ? "brand.text" : "text.primary"
|
|
137
|
+
}, children: monthNames[m] }) }, m));
|
|
138
|
+
}
|
|
139
|
+
return (jsxRuntime.jsx(index$1, { className: 'calender-months', sx: {
|
|
140
|
+
flexWrap: "wrap",
|
|
141
|
+
overflow: "hidden",
|
|
142
|
+
overflowY: "auto",
|
|
143
|
+
flexDirection: "row"
|
|
144
|
+
}, children: months }));
|
|
145
|
+
};
|
|
146
|
+
let view = null;
|
|
147
|
+
switch (viewMode) {
|
|
148
|
+
case "year":
|
|
149
|
+
view = jsxRuntime.jsx(ShowYears, { color: color, today: today, year: year, boxWidth: boxWidth, onClick: (y) => {
|
|
150
|
+
currentDate.setFullYear(y);
|
|
151
|
+
setCurrentDate(currentDate);
|
|
152
|
+
setViewMode("month");
|
|
153
|
+
onButtonClick && onButtonClick("year", currentDate);
|
|
154
|
+
} });
|
|
155
|
+
break;
|
|
156
|
+
case "month":
|
|
157
|
+
view = showMonth();
|
|
158
|
+
break;
|
|
159
|
+
default:
|
|
160
|
+
view = (jsxRuntime.jsx(jsxRuntime.Fragment, { children: showCalendar() }));
|
|
161
|
+
break;
|
|
162
|
+
}
|
|
163
|
+
return (jsxRuntime.jsx(index, { className: 'calender-root', maxHeight: 308, width: 250, radius: 1, bgcolor: "background.secondary", startContent: jsxRuntime.jsxs(index$1, { className: 'calender-header', flexRow: true, alignItems: "center", justifyContent: "space-between", p: 1, children: [jsxRuntime.jsx(index$2, { fontWeight: "bold", cursor: "pointer", onClick: () => setViewMode(viewMode !== 'day' ? "day" : "year"), flex: 1, children: currentDate.toLocaleDateString(undefined, { year: 'numeric', month: 'long' }) }), jsxRuntime.jsx(index$3, { color: "default", variant: 'text', size: 28, onClick: () => {
|
|
164
|
+
setCurrentDate(new Date());
|
|
165
|
+
onChange ? onChange(new Date()) : setSelectedDate(new Date());
|
|
166
|
+
}, children: jsxRuntime.jsx(ResetIcon, { fontSize: 20 }) }), jsxRuntime.jsx(index$3, { color: "default", variant: 'text', size: 28, onClick: () => {
|
|
167
|
+
setCurrentDate(new Date(currentDate.getFullYear(), currentDate.getMonth() - 1, 1));
|
|
168
|
+
}, children: jsxRuntime.jsx(IconKeyboardArrowLeft, {}) }), jsxRuntime.jsx(index$3, { color: "default", variant: 'text', size: 28, onClick: () => {
|
|
169
|
+
setCurrentDate(new Date(currentDate.getFullYear(), currentDate.getMonth() + 1, 1));
|
|
170
|
+
}, children: jsxRuntime.jsx(IconKeyboardArrowRight, {}) })] }), children: jsxRuntime.jsx(index$1, { height: "100%", p: .5, className: 'calender-container', children: view }) }));
|
|
171
|
+
};
|
|
172
|
+
|
|
173
|
+
module.exports = Calendar;
|
|
174
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../src/Calendar/index.tsx"],"sourcesContent":["'use client'\r\nimport { useEffect, useRef, useState } from 'react';\r\nimport Stack from '../Stack'\r\nimport IconButton from '../IconButton';\r\nimport IconKeyboardArrowRight from '@xanui/icons/KeyboardArrowRight';\r\nimport IconKeyboardArrowLeft from '@xanui/icons/KeyboardArrowLeft';\r\nimport Text from '../Text';\r\nimport Button from '../Button';\r\nimport ResetIcon from '@xanui/icons/Replay';\r\nimport ViewBox from '../ViewBox';\r\nimport { UseColorTemplateColor, useInterface, useBreakpointPropsType, useBreakpointProps } from '@xanui/core';\r\n\r\nexport type CalendarProps = {\r\n value?: Date | null;\r\n onChange?: (date: Date | null) => void;\r\n viewMode?: useBreakpointPropsType<\"year\" | \"month\" | \"day\">;\r\n onButtonClick?: (mode: CalendarProps[\"viewMode\"], value: CalendarProps[\"value\"]) => void;\r\n color?: useBreakpointPropsType<UseColorTemplateColor>;\r\n}\r\n\r\n\r\nconst ShowYears = ({ color, year, today, onClick }: any) => {\r\n let years: any[] = []\r\n const selectedRef: any = useRef(null)\r\n for (let y = 1900; y < today.getFullYear() + 40; y++) {\r\n const selected = year == y\r\n years.push(<Stack\r\n key={y}\r\n sx={{\r\n width: 50,\r\n p: .1\r\n }}\r\n className='calender-year-item'\r\n >\r\n <Button\r\n color={selected ? color : \"default\"}\r\n className='calender-year-button'\r\n size='small'\r\n corner=\"circle\"\r\n ref={selected ? selectedRef : null}\r\n onClick={() => onClick(y)}\r\n variant={selected ? \"fill\" : \"text\"}\r\n >\r\n {y}\r\n </Button>\r\n </Stack>)\r\n }\r\n\r\n useEffect(() => {\r\n if (selectedRef?.current) {\r\n selectedRef?.current.scrollIntoView({ behavior: \"smooth\", block: \"center\", inline: \"nearest\" })\r\n }\r\n }, [])\r\n\r\n return (\r\n <Stack\r\n sx={{\r\n flexWrap: \"wrap\",\r\n flexDirection: \"row\",\r\n overflow: \"hidden\",\r\n overflowY: \"auto\"\r\n }}\r\n className='calender-years'\r\n >\r\n {years}\r\n </Stack>\r\n )\r\n}\r\n\r\n\r\nconst Calendar = ({ value, ...rest }: CalendarProps) => {\r\n let [{ onChange, viewMode: VMode, onButtonClick, color }] = useInterface<any>(\"Calender\", rest, {})\r\n const _p: any = {}\r\n if (VMode) _p.VMode = VMode\r\n if (color) _p.color = color\r\n const p: any = useBreakpointProps(_p)\r\n color = p.color || \"brand\"\r\n\r\n let [viewMode, setViewMode] = useState<any>(p.VMode || \"day\");\r\n let [selectedDate, setSelectedDate] = useState(new Date());\r\n selectedDate = value instanceof Date ? value : selectedDate\r\n const [currentDate, setCurrentDate] = useState(selectedDate);\r\n const year = currentDate.getFullYear()\r\n const month = currentDate.getMonth()\r\n const daysInMonth = 32 - new Date(year, month, 32).getDate()\r\n const today = new Date();\r\n const btnWidth = 36\r\n const boxWidth = btnWidth * 7\r\n\r\n const showCalendar = () => {\r\n\r\n let firstDay = (new Date(year, month)).getDay();\r\n let rows = []\r\n let row = []\r\n\r\n const dayNames = ['S', 'M', 'T', 'W', 'T', 'F', 'S'];\r\n for (let i = 0; i < dayNames.length; i++) {\r\n const k = dayNames[i];\r\n row.push(<Stack\r\n key={\"dayname-\" + i}\r\n sx={{\r\n width: btnWidth,\r\n height: btnWidth,\r\n alignItems: \"center\",\r\n justifyContent: \"center\"\r\n }}\r\n >\r\n <IconButton\r\n variant={\"text\"}\r\n color=\"default\"\r\n disabled\r\n >\r\n {k}\r\n </IconButton>\r\n </Stack>)\r\n }\r\n\r\n rows.push(<Stack flexRow key={\"header\"} className='calender-day-row'>\r\n {row}\r\n </Stack>);\r\n\r\n let date = 1;\r\n for (let i = 0; i < 6; i++) {\r\n let row = []\r\n for (let j = 0; j < 7; j++) {\r\n if (i === 0 && j < firstDay) {\r\n row.push(<Stack\r\n alignItems=\"center\"\r\n justifyContent=\"center\"\r\n key={date + j + i}\r\n sx={{\r\n width: btnWidth,\r\n height: btnWidth,\r\n alignItems: \"center\",\r\n justifyContent: \"center\"\r\n }}\r\n >\r\n\r\n </Stack>)\r\n } else if (date > daysInMonth) {\r\n break;\r\n } else {\r\n let isToday = date === today.getDate() && year === today.getFullYear() && month === today.getMonth()\r\n let isSelected = date === selectedDate.getDate() && year === selectedDate.getFullYear() && month === selectedDate.getMonth()\r\n\r\n let css: any = {}\r\n if (isToday) {\r\n css = {\r\n variant: \"fill\",\r\n color: \"default\"\r\n }\r\n }\r\n\r\n if (isSelected) {\r\n css = {\r\n variant: \"fill\",\r\n color: color\r\n }\r\n }\r\n\r\n row.push(<Stack\r\n sx={{\r\n width: btnWidth,\r\n height: btnWidth,\r\n alignItems: \"center\",\r\n justifyContent: \"center\"\r\n }}\r\n key={date + j + i}\r\n className='calender-day-item'\r\n >\r\n <IconButton\r\n className='calender-day-button'\r\n variant={isSelected ? \"fill\" : \"text\"}\r\n color={isToday ? color : \"default\"}\r\n {...css}\r\n data-value={date}\r\n onClick={(e: any) => {\r\n let d = e.target.getAttribute(\"data-value\")\r\n if (!d) return\r\n let selectedDate = new Date(year, month, parseInt(d))\r\n onChange ? onChange(selectedDate) : setSelectedDate(selectedDate)\r\n onButtonClick && onButtonClick(\"day\", selectedDate)\r\n }}\r\n >\r\n {date}\r\n </IconButton>\r\n </Stack>)\r\n date++;\r\n }\r\n }\r\n rows.push(<Stack flexRow key={\"row\" + i} className='calender-day-row'>\r\n {row}\r\n </Stack>);\r\n }\r\n return rows\r\n }\r\n\r\n const showMonth = () => {\r\n let months: any[] = []\r\n const monthNames = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];\r\n for (let m = 0; m < monthNames.length; m++) {\r\n const selected = currentDate.getMonth() === m\r\n\r\n months.push(<Stack\r\n key={m}\r\n width={\"50%\"}\r\n alignItems=\"center\"\r\n justifyContent=\"center\"\r\n p={.1}\r\n className='calender-months-item'\r\n >\r\n <Button\r\n color={selected ? color : \"default\"}\r\n className='calender-month-button'\r\n size='small'\r\n corner=\"circle\"\r\n variant={selected ? \"fill\" : 'text'}\r\n onClick={() => {\r\n const v = new Date(currentDate.getFullYear(), m)\r\n setCurrentDate(v)\r\n setViewMode(\"day\")\r\n onButtonClick && onButtonClick(\"month\", v)\r\n }}\r\n sx={{\r\n color: selected ? \"brand.text\" : \"text.primary\"\r\n }}\r\n >\r\n {monthNames[m]}\r\n </Button>\r\n </Stack>)\r\n }\r\n\r\n return (\r\n <Stack\r\n className='calender-months'\r\n sx={{\r\n flexWrap: \"wrap\",\r\n overflow: \"hidden\",\r\n overflowY: \"auto\",\r\n flexDirection: \"row\"\r\n }}\r\n >\r\n {months}\r\n </Stack>\r\n )\r\n }\r\n\r\n let view: any = null\r\n switch (viewMode) {\r\n case \"year\":\r\n view = <ShowYears\r\n color={color}\r\n today={today}\r\n year={year}\r\n boxWidth={boxWidth}\r\n onClick={(y: any) => {\r\n currentDate.setFullYear(y)\r\n setCurrentDate(currentDate)\r\n setViewMode(\"month\")\r\n onButtonClick && onButtonClick(\"year\", currentDate)\r\n }}\r\n />\r\n break;\r\n case \"month\":\r\n view = showMonth()\r\n break;\r\n default:\r\n view = (<>\r\n\r\n {showCalendar()}\r\n </>\r\n )\r\n break;\r\n }\r\n\r\n return (\r\n <ViewBox\r\n className='calender-root'\r\n maxHeight={308}\r\n width={250}\r\n radius={1}\r\n bgcolor=\"background.secondary\"\r\n startContent={\r\n <Stack className='calender-header' flexRow alignItems=\"center\" justifyContent=\"space-between\" p={1}>\r\n <Text\r\n fontWeight=\"bold\"\r\n cursor=\"pointer\"\r\n onClick={() => setViewMode(viewMode !== 'day' ? \"day\" : \"year\")}\r\n flex={1}\r\n >\r\n {currentDate.toLocaleDateString(undefined, { year: 'numeric', month: 'long' })}\r\n </Text>\r\n <IconButton\r\n color=\"default\"\r\n variant='text'\r\n size={28}\r\n onClick={() => {\r\n setCurrentDate(new Date())\r\n onChange ? onChange(new Date()) : setSelectedDate(new Date())\r\n }}\r\n >\r\n <ResetIcon fontSize={20} />\r\n </IconButton>\r\n <IconButton\r\n color=\"default\"\r\n variant='text'\r\n size={28}\r\n onClick={() => {\r\n setCurrentDate(new Date(currentDate.getFullYear(), currentDate.getMonth() - 1, 1))\r\n }}\r\n >\r\n <IconKeyboardArrowLeft />\r\n </IconButton>\r\n <IconButton\r\n color=\"default\"\r\n variant='text'\r\n size={28}\r\n onClick={() => {\r\n setCurrentDate(new Date(currentDate.getFullYear(), currentDate.getMonth() + 1, 1))\r\n }}\r\n >\r\n <IconKeyboardArrowRight />\r\n </IconButton>\r\n </Stack>\r\n }\r\n >\r\n <Stack height=\"100%\" p={.5} className='calender-container'>\r\n {view}\r\n </Stack>\r\n </ViewBox>\r\n );\r\n};\r\n\r\nexport default Calendar;"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAqBA;;AAEI;AACA;AACI;AACA;AAGQ;AACA;AACH;;;;;;;AAuBT;AAGY;AACA;AACA;AACA;AACH;AAMb;AAGA;AAAkB;;;AAGd;AAAW;AACX;AAAW;AACX;AACA;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAII;;;AAIA;AACA;AACI;AACA;AAGQ;AACA;AACA;AACA;;;AAaZ;;AAKA;;AAEI;;AAEQ;AAKQ;AACA;AACA;AACA;AACH;;AAIF;;;;;;;;AAQC;AACI;AACA;;;;AAKJ;AACI;AACA;;;AAIR;AAEQ;AACA;AACA;AACA;;;AAaI;;AACA;AACA;AACA;;AAMZ;;;AAGR;;AAIJ;AACJ;;;;AAKI;;AAGI;AAeY;;;AAGA;;;;;;AAeJ;AACA;AACA;AACA;;AAMhB;;;AAII;;AAOY;;;AAGA;AACJ;;AAGR;;;AAGA;AACI;;;;AA8BgB;AACA;AACJ;AASI;;AAUA;;AAa5B;;"}
|
package/Calendar/index.js
CHANGED
|
@@ -1,35 +1,33 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
var index = require('../ViewBox/index.js');
|
|
15
|
-
var core = require('@xanui/core');
|
|
2
|
+
import { __rest } from 'tslib';
|
|
3
|
+
import { jsx, Fragment, jsxs } from 'react/jsx-runtime';
|
|
4
|
+
import { useState, useRef, useEffect } from 'react';
|
|
5
|
+
import Stack from '../Stack/index.js';
|
|
6
|
+
import IconButton from '../IconButton/index.js';
|
|
7
|
+
import IconKeyboardArrowRight from '@xanui/icons/KeyboardArrowRight';
|
|
8
|
+
import IconKeyboardArrowLeft from '@xanui/icons/KeyboardArrowLeft';
|
|
9
|
+
import Text from '../Text/index.js';
|
|
10
|
+
import Button from '../Button/index.js';
|
|
11
|
+
import ResetIcon from '@xanui/icons/Replay';
|
|
12
|
+
import ViewBox from '../ViewBox/index.js';
|
|
13
|
+
import { useInterface, useBreakpointProps } from '@xanui/core';
|
|
16
14
|
|
|
17
15
|
const ShowYears = ({ color, year, today, onClick }) => {
|
|
18
16
|
let years = [];
|
|
19
|
-
const selectedRef =
|
|
17
|
+
const selectedRef = useRef(null);
|
|
20
18
|
for (let y = 1900; y < today.getFullYear() + 40; y++) {
|
|
21
19
|
const selected = year == y;
|
|
22
|
-
years.push(
|
|
20
|
+
years.push(jsx(Stack, { sx: {
|
|
23
21
|
width: 50,
|
|
24
22
|
p: .1
|
|
25
|
-
}, className: 'calender-year-item', children:
|
|
23
|
+
}, className: 'calender-year-item', children: jsx(Button, { color: selected ? color : "default", className: 'calender-year-button', size: 'small', corner: "circle", ref: selected ? selectedRef : null, onClick: () => onClick(y), variant: selected ? "fill" : "text", children: y }) }, y));
|
|
26
24
|
}
|
|
27
|
-
|
|
25
|
+
useEffect(() => {
|
|
28
26
|
if (selectedRef === null || selectedRef === void 0 ? void 0 : selectedRef.current) {
|
|
29
27
|
selectedRef === null || selectedRef === void 0 ? void 0 : selectedRef.current.scrollIntoView({ behavior: "smooth", block: "center", inline: "nearest" });
|
|
30
28
|
}
|
|
31
29
|
}, []);
|
|
32
|
-
return (
|
|
30
|
+
return (jsx(Stack, { sx: {
|
|
33
31
|
flexWrap: "wrap",
|
|
34
32
|
flexDirection: "row",
|
|
35
33
|
overflow: "hidden",
|
|
@@ -37,19 +35,19 @@ const ShowYears = ({ color, year, today, onClick }) => {
|
|
|
37
35
|
}, className: 'calender-years', children: years }));
|
|
38
36
|
};
|
|
39
37
|
const Calendar = (_a) => {
|
|
40
|
-
var { value } = _a, rest =
|
|
41
|
-
let [{ onChange, viewMode: VMode, onButtonClick, color }] =
|
|
38
|
+
var { value } = _a, rest = __rest(_a, ["value"]);
|
|
39
|
+
let [{ onChange, viewMode: VMode, onButtonClick, color }] = useInterface("Calender", rest, {});
|
|
42
40
|
const _p = {};
|
|
43
41
|
if (VMode)
|
|
44
42
|
_p.VMode = VMode;
|
|
45
43
|
if (color)
|
|
46
44
|
_p.color = color;
|
|
47
|
-
const p =
|
|
45
|
+
const p = useBreakpointProps(_p);
|
|
48
46
|
color = p.color || "brand";
|
|
49
|
-
let [viewMode, setViewMode] =
|
|
50
|
-
let [selectedDate, setSelectedDate] =
|
|
47
|
+
let [viewMode, setViewMode] = useState(p.VMode || "day");
|
|
48
|
+
let [selectedDate, setSelectedDate] = useState(new Date());
|
|
51
49
|
selectedDate = value instanceof Date ? value : selectedDate;
|
|
52
|
-
const [currentDate, setCurrentDate] =
|
|
50
|
+
const [currentDate, setCurrentDate] = useState(selectedDate);
|
|
53
51
|
const year = currentDate.getFullYear();
|
|
54
52
|
const month = currentDate.getMonth();
|
|
55
53
|
const daysInMonth = 32 - new Date(year, month, 32).getDate();
|
|
@@ -63,20 +61,20 @@ const Calendar = (_a) => {
|
|
|
63
61
|
const dayNames = ['S', 'M', 'T', 'W', 'T', 'F', 'S'];
|
|
64
62
|
for (let i = 0; i < dayNames.length; i++) {
|
|
65
63
|
const k = dayNames[i];
|
|
66
|
-
row.push(
|
|
64
|
+
row.push(jsx(Stack, { sx: {
|
|
67
65
|
width: btnWidth,
|
|
68
66
|
height: btnWidth,
|
|
69
67
|
alignItems: "center",
|
|
70
68
|
justifyContent: "center"
|
|
71
|
-
}, children:
|
|
69
|
+
}, children: jsx(IconButton, { variant: "text", color: "default", disabled: true, children: k }) }, "dayname-" + i));
|
|
72
70
|
}
|
|
73
|
-
rows.push(
|
|
71
|
+
rows.push(jsx(Stack, { flexRow: true, className: 'calender-day-row', children: row }, "header"));
|
|
74
72
|
let date = 1;
|
|
75
73
|
for (let i = 0; i < 6; i++) {
|
|
76
74
|
let row = [];
|
|
77
75
|
for (let j = 0; j < 7; j++) {
|
|
78
76
|
if (i === 0 && j < firstDay) {
|
|
79
|
-
row.push(
|
|
77
|
+
row.push(jsx(Stack, { alignItems: "center", justifyContent: "center", sx: {
|
|
80
78
|
width: btnWidth,
|
|
81
79
|
height: btnWidth,
|
|
82
80
|
alignItems: "center",
|
|
@@ -102,12 +100,12 @@ const Calendar = (_a) => {
|
|
|
102
100
|
color: color
|
|
103
101
|
};
|
|
104
102
|
}
|
|
105
|
-
row.push(
|
|
103
|
+
row.push(jsx(Stack, { sx: {
|
|
106
104
|
width: btnWidth,
|
|
107
105
|
height: btnWidth,
|
|
108
106
|
alignItems: "center",
|
|
109
107
|
justifyContent: "center"
|
|
110
|
-
}, className: 'calender-day-item', children:
|
|
108
|
+
}, className: 'calender-day-item', children: jsx(IconButton, Object.assign({ className: 'calender-day-button', variant: isSelected ? "fill" : "text", color: isToday ? color : "default" }, css, { "data-value": date, onClick: (e) => {
|
|
111
109
|
let d = e.target.getAttribute("data-value");
|
|
112
110
|
if (!d)
|
|
113
111
|
return;
|
|
@@ -118,7 +116,7 @@ const Calendar = (_a) => {
|
|
|
118
116
|
date++;
|
|
119
117
|
}
|
|
120
118
|
}
|
|
121
|
-
rows.push(
|
|
119
|
+
rows.push(jsx(Stack, { flexRow: true, className: 'calender-day-row', children: row }, "row" + i));
|
|
122
120
|
}
|
|
123
121
|
return rows;
|
|
124
122
|
};
|
|
@@ -127,7 +125,7 @@ const Calendar = (_a) => {
|
|
|
127
125
|
const monthNames = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
|
|
128
126
|
for (let m = 0; m < monthNames.length; m++) {
|
|
129
127
|
const selected = currentDate.getMonth() === m;
|
|
130
|
-
months.push(
|
|
128
|
+
months.push(jsx(Stack, { width: "50%", alignItems: "center", justifyContent: "center", p: .1, className: 'calender-months-item', children: jsx(Button, { color: selected ? color : "default", className: 'calender-month-button', size: 'small', corner: "circle", variant: selected ? "fill" : 'text', onClick: () => {
|
|
131
129
|
const v = new Date(currentDate.getFullYear(), m);
|
|
132
130
|
setCurrentDate(v);
|
|
133
131
|
setViewMode("day");
|
|
@@ -136,7 +134,7 @@ const Calendar = (_a) => {
|
|
|
136
134
|
color: selected ? "brand.text" : "text.primary"
|
|
137
135
|
}, children: monthNames[m] }) }, m));
|
|
138
136
|
}
|
|
139
|
-
return (
|
|
137
|
+
return (jsx(Stack, { className: 'calender-months', sx: {
|
|
140
138
|
flexWrap: "wrap",
|
|
141
139
|
overflow: "hidden",
|
|
142
140
|
overflowY: "auto",
|
|
@@ -146,7 +144,7 @@ const Calendar = (_a) => {
|
|
|
146
144
|
let view = null;
|
|
147
145
|
switch (viewMode) {
|
|
148
146
|
case "year":
|
|
149
|
-
view =
|
|
147
|
+
view = jsx(ShowYears, { color: color, today: today, year: year, boxWidth: boxWidth, onClick: (y) => {
|
|
150
148
|
currentDate.setFullYear(y);
|
|
151
149
|
setCurrentDate(currentDate);
|
|
152
150
|
setViewMode("month");
|
|
@@ -157,18 +155,18 @@ const Calendar = (_a) => {
|
|
|
157
155
|
view = showMonth();
|
|
158
156
|
break;
|
|
159
157
|
default:
|
|
160
|
-
view = (
|
|
158
|
+
view = (jsx(Fragment, { children: showCalendar() }));
|
|
161
159
|
break;
|
|
162
160
|
}
|
|
163
|
-
return (
|
|
161
|
+
return (jsx(ViewBox, { className: 'calender-root', maxHeight: 308, width: 250, radius: 1, bgcolor: "background.secondary", startContent: jsxs(Stack, { className: 'calender-header', flexRow: true, alignItems: "center", justifyContent: "space-between", p: 1, children: [jsx(Text, { fontWeight: "bold", cursor: "pointer", onClick: () => setViewMode(viewMode !== 'day' ? "day" : "year"), flex: 1, children: currentDate.toLocaleDateString(undefined, { year: 'numeric', month: 'long' }) }), jsx(IconButton, { color: "default", variant: 'text', size: 28, onClick: () => {
|
|
164
162
|
setCurrentDate(new Date());
|
|
165
163
|
onChange ? onChange(new Date()) : setSelectedDate(new Date());
|
|
166
|
-
}, children:
|
|
164
|
+
}, children: jsx(ResetIcon, { fontSize: 20 }) }), jsx(IconButton, { color: "default", variant: 'text', size: 28, onClick: () => {
|
|
167
165
|
setCurrentDate(new Date(currentDate.getFullYear(), currentDate.getMonth() - 1, 1));
|
|
168
|
-
}, children:
|
|
166
|
+
}, children: jsx(IconKeyboardArrowLeft, {}) }), jsx(IconButton, { color: "default", variant: 'text', size: 28, onClick: () => {
|
|
169
167
|
setCurrentDate(new Date(currentDate.getFullYear(), currentDate.getMonth() + 1, 1));
|
|
170
|
-
}, children:
|
|
168
|
+
}, children: jsx(IconKeyboardArrowRight, {}) })] }), children: jsx(Stack, { height: "100%", p: .5, className: 'calender-container', children: view }) }));
|
|
171
169
|
};
|
|
172
170
|
|
|
173
|
-
|
|
171
|
+
export { Calendar as default };
|
|
174
172
|
//# sourceMappingURL=index.js.map
|
package/Calendar/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/Calendar/index.tsx"],"sourcesContent":["\"use client\";\r\nimport { useEffect, useRef, useState } from 'react';\r\nimport Stack from '../Stack'\r\nimport IconButton from '../IconButton';\r\nimport IconKeyboardArrowRight from '@xanui/icons/KeyboardArrowRight';\r\nimport IconKeyboardArrowLeft from '@xanui/icons/KeyboardArrowLeft';\r\nimport Text from '../Text';\r\nimport Button from '../Button';\r\nimport ResetIcon from '@xanui/icons/Replay';\r\nimport ViewBox from '../ViewBox';\r\nimport { UseColorTemplateColor, useInterface, useBreakpointPropsType, useBreakpointProps } from '@xanui/core';\r\n\r\nexport type CalendarProps = {\r\n value?: Date | null;\r\n onChange?: (date: Date | null) => void;\r\n viewMode?: useBreakpointPropsType<\"year\" | \"month\" | \"day\">;\r\n onButtonClick?: (mode: CalendarProps[\"viewMode\"], value: CalendarProps[\"value\"]) => void;\r\n color?: useBreakpointPropsType<UseColorTemplateColor>;\r\n}\r\n\r\n\r\nconst ShowYears = ({ color, year, today, onClick }: any) => {\r\n let years: any[] = []\r\n const selectedRef: any = useRef(null)\r\n for (let y = 1900; y < today.getFullYear() + 40; y++) {\r\n const selected = year == y\r\n years.push(<Stack\r\n key={y}\r\n sx={{\r\n width: 50,\r\n p: .1\r\n }}\r\n className='calender-year-item'\r\n >\r\n <Button\r\n color={selected ? color : \"default\"}\r\n className='calender-year-button'\r\n size='small'\r\n corner=\"circle\"\r\n ref={selected ? selectedRef : null}\r\n onClick={() => onClick(y)}\r\n variant={selected ? \"fill\" : \"text\"}\r\n >\r\n {y}\r\n </Button>\r\n </Stack>)\r\n }\r\n\r\n useEffect(() => {\r\n if (selectedRef?.current) {\r\n selectedRef?.current.scrollIntoView({ behavior: \"smooth\", block: \"center\", inline: \"nearest\" })\r\n }\r\n }, [])\r\n\r\n return (\r\n <Stack\r\n sx={{\r\n flexWrap: \"wrap\",\r\n flexDirection: \"row\",\r\n overflow: \"hidden\",\r\n overflowY: \"auto\"\r\n }}\r\n className='calender-years'\r\n >\r\n {years}\r\n </Stack>\r\n )\r\n}\r\n\r\n\r\nconst Calendar = ({ value, ...rest }: CalendarProps) => {\r\n let [{ onChange, viewMode: VMode, onButtonClick, color }] = useInterface<any>(\"Calender\", rest, {})\r\n const _p: any = {}\r\n if (VMode) _p.VMode = VMode\r\n if (color) _p.color = color\r\n const p: any = useBreakpointProps(_p)\r\n color = p.color || \"brand\"\r\n\r\n let [viewMode, setViewMode] = useState<any>(p.VMode || \"day\");\r\n let [selectedDate, setSelectedDate] = useState(new Date());\r\n selectedDate = value instanceof Date ? value : selectedDate\r\n const [currentDate, setCurrentDate] = useState(selectedDate);\r\n const year = currentDate.getFullYear()\r\n const month = currentDate.getMonth()\r\n const daysInMonth = 32 - new Date(year, month, 32).getDate()\r\n const today = new Date();\r\n const btnWidth = 36\r\n const boxWidth = btnWidth * 7\r\n\r\n const showCalendar = () => {\r\n\r\n let firstDay = (new Date(year, month)).getDay();\r\n let rows = []\r\n let row = []\r\n\r\n const dayNames = ['S', 'M', 'T', 'W', 'T', 'F', 'S'];\r\n for (let i = 0; i < dayNames.length; i++) {\r\n const k = dayNames[i];\r\n row.push(<Stack\r\n key={\"dayname-\" + i}\r\n sx={{\r\n width: btnWidth,\r\n height: btnWidth,\r\n alignItems: \"center\",\r\n justifyContent: \"center\"\r\n }}\r\n >\r\n <IconButton\r\n variant={\"text\"}\r\n color=\"default\"\r\n disabled\r\n >\r\n {k}\r\n </IconButton>\r\n </Stack>)\r\n }\r\n\r\n rows.push(<Stack flexRow key={\"header\"} className='calender-day-row'>\r\n {row}\r\n </Stack>);\r\n\r\n let date = 1;\r\n for (let i = 0; i < 6; i++) {\r\n let row = []\r\n for (let j = 0; j < 7; j++) {\r\n if (i === 0 && j < firstDay) {\r\n row.push(<Stack\r\n alignItems=\"center\"\r\n justifyContent=\"center\"\r\n key={date + j + i}\r\n sx={{\r\n width: btnWidth,\r\n height: btnWidth,\r\n alignItems: \"center\",\r\n justifyContent: \"center\"\r\n }}\r\n >\r\n\r\n </Stack>)\r\n } else if (date > daysInMonth) {\r\n break;\r\n } else {\r\n let isToday = date === today.getDate() && year === today.getFullYear() && month === today.getMonth()\r\n let isSelected = date === selectedDate.getDate() && year === selectedDate.getFullYear() && month === selectedDate.getMonth()\r\n\r\n let css: any = {}\r\n if (isToday) {\r\n css = {\r\n variant: \"fill\",\r\n color: \"default\"\r\n }\r\n }\r\n\r\n if (isSelected) {\r\n css = {\r\n variant: \"fill\",\r\n color: color\r\n }\r\n }\r\n\r\n row.push(<Stack\r\n sx={{\r\n width: btnWidth,\r\n height: btnWidth,\r\n alignItems: \"center\",\r\n justifyContent: \"center\"\r\n }}\r\n key={date + j + i}\r\n className='calender-day-item'\r\n >\r\n <IconButton\r\n className='calender-day-button'\r\n variant={isSelected ? \"fill\" : \"text\"}\r\n color={isToday ? color : \"default\"}\r\n {...css}\r\n data-value={date}\r\n onClick={(e: any) => {\r\n let d = e.target.getAttribute(\"data-value\")\r\n if (!d) return\r\n let selectedDate = new Date(year, month, parseInt(d))\r\n onChange ? onChange(selectedDate) : setSelectedDate(selectedDate)\r\n onButtonClick && onButtonClick(\"day\", selectedDate)\r\n }}\r\n >\r\n {date}\r\n </IconButton>\r\n </Stack>)\r\n date++;\r\n }\r\n }\r\n rows.push(<Stack flexRow key={\"row\" + i} className='calender-day-row'>\r\n {row}\r\n </Stack>);\r\n }\r\n return rows\r\n }\r\n\r\n const showMonth = () => {\r\n let months: any[] = []\r\n const monthNames = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];\r\n for (let m = 0; m < monthNames.length; m++) {\r\n const selected = currentDate.getMonth() === m\r\n\r\n months.push(<Stack\r\n key={m}\r\n width={\"50%\"}\r\n alignItems=\"center\"\r\n justifyContent=\"center\"\r\n p={.1}\r\n className='calender-months-item'\r\n >\r\n <Button\r\n color={selected ? color : \"default\"}\r\n className='calender-month-button'\r\n size='small'\r\n corner=\"circle\"\r\n variant={selected ? \"fill\" : 'text'}\r\n onClick={() => {\r\n const v = new Date(currentDate.getFullYear(), m)\r\n setCurrentDate(v)\r\n setViewMode(\"day\")\r\n onButtonClick && onButtonClick(\"month\", v)\r\n }}\r\n sx={{\r\n color: selected ? \"brand.text\" : \"text.primary\"\r\n }}\r\n >\r\n {monthNames[m]}\r\n </Button>\r\n </Stack>)\r\n }\r\n\r\n return (\r\n <Stack\r\n className='calender-months'\r\n sx={{\r\n flexWrap: \"wrap\",\r\n overflow: \"hidden\",\r\n overflowY: \"auto\",\r\n flexDirection: \"row\"\r\n }}\r\n >\r\n {months}\r\n </Stack>\r\n )\r\n }\r\n\r\n let view: any = null\r\n switch (viewMode) {\r\n case \"year\":\r\n view = <ShowYears\r\n color={color}\r\n today={today}\r\n year={year}\r\n boxWidth={boxWidth}\r\n onClick={(y: any) => {\r\n currentDate.setFullYear(y)\r\n setCurrentDate(currentDate)\r\n setViewMode(\"month\")\r\n onButtonClick && onButtonClick(\"year\", currentDate)\r\n }}\r\n />\r\n break;\r\n case \"month\":\r\n view = showMonth()\r\n break;\r\n default:\r\n view = (<>\r\n\r\n {showCalendar()}\r\n </>\r\n )\r\n break;\r\n }\r\n\r\n return (\r\n <ViewBox\r\n className='calender-root'\r\n maxHeight={308}\r\n width={250}\r\n radius={1}\r\n bgcolor=\"background.secondary\"\r\n startContent={\r\n <Stack className='calender-header' flexRow alignItems=\"center\" justifyContent=\"space-between\" p={1}>\r\n <Text\r\n fontWeight=\"bold\"\r\n cursor=\"pointer\"\r\n onClick={() => setViewMode(viewMode !== 'day' ? \"day\" : \"year\")}\r\n flex={1}\r\n >\r\n {currentDate.toLocaleDateString(undefined, { year: 'numeric', month: 'long' })}\r\n </Text>\r\n <IconButton\r\n color=\"default\"\r\n variant='text'\r\n size={28}\r\n onClick={() => {\r\n setCurrentDate(new Date())\r\n onChange ? onChange(new Date()) : setSelectedDate(new Date())\r\n }}\r\n >\r\n <ResetIcon fontSize={20} />\r\n </IconButton>\r\n <IconButton\r\n color=\"default\"\r\n variant='text'\r\n size={28}\r\n onClick={() => {\r\n setCurrentDate(new Date(currentDate.getFullYear(), currentDate.getMonth() - 1, 1))\r\n }}\r\n >\r\n <IconKeyboardArrowLeft />\r\n </IconButton>\r\n <IconButton\r\n color=\"default\"\r\n variant='text'\r\n size={28}\r\n onClick={() => {\r\n setCurrentDate(new Date(currentDate.getFullYear(), currentDate.getMonth() + 1, 1))\r\n }}\r\n >\r\n <IconKeyboardArrowRight />\r\n </IconButton>\r\n </Stack>\r\n }\r\n >\r\n <Stack height=\"100%\" p={.5} className='calender-container'>\r\n {view}\r\n </Stack>\r\n </ViewBox>\r\n );\r\n};\r\n\r\nexport default Calendar;"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAqBA;;AAEI;AACA;AACI;AACA;AAGQ;AACA;AACH;;;;;;;AAuBT;AAGY;AACA;AACA;AACA;AACH;AAMb;AAGA;AAAkB;;;AAGd;AAAW;AACX;AAAW;AACX;AACA;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAII;;;AAIA;AACA;AACI;AACA;AAGQ;AACA;AACA;AACA;;;AAaZ;;AAKA;;AAEI;;AAEQ;AAKQ;AACA;AACA;AACA;AACH;;AAIF;;;;;;;;AAQC;AACI;AACA;;;;AAKJ;AACI;AACA;;;AAIR;AAEQ;AACA;AACA;AACA;;;AAaI;;AACA;AACA;AACA;;AAMZ;;;AAGR;;AAIJ;AACJ;;;;AAKI;;AAGI;AAeY;;;AAGA;;;;;;AAeJ;AACA;AACA;AACA;;AAMhB;;;AAII;;AAOY;;;AAGA;AACJ;;AAGR;;;AAGA;AACI;;;;AA8BgB;AACA;AACJ;AASI;;AAUA;;AAa5B;;"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/Calendar/index.tsx"],"sourcesContent":["'use client'\r\nimport { useEffect, useRef, useState } from 'react';\r\nimport Stack from '../Stack'\r\nimport IconButton from '../IconButton';\r\nimport IconKeyboardArrowRight from '@xanui/icons/KeyboardArrowRight';\r\nimport IconKeyboardArrowLeft from '@xanui/icons/KeyboardArrowLeft';\r\nimport Text from '../Text';\r\nimport Button from '../Button';\r\nimport ResetIcon from '@xanui/icons/Replay';\r\nimport ViewBox from '../ViewBox';\r\nimport { UseColorTemplateColor, useInterface, useBreakpointPropsType, useBreakpointProps } from '@xanui/core';\r\n\r\nexport type CalendarProps = {\r\n value?: Date | null;\r\n onChange?: (date: Date | null) => void;\r\n viewMode?: useBreakpointPropsType<\"year\" | \"month\" | \"day\">;\r\n onButtonClick?: (mode: CalendarProps[\"viewMode\"], value: CalendarProps[\"value\"]) => void;\r\n color?: useBreakpointPropsType<UseColorTemplateColor>;\r\n}\r\n\r\n\r\nconst ShowYears = ({ color, year, today, onClick }: any) => {\r\n let years: any[] = []\r\n const selectedRef: any = useRef(null)\r\n for (let y = 1900; y < today.getFullYear() + 40; y++) {\r\n const selected = year == y\r\n years.push(<Stack\r\n key={y}\r\n sx={{\r\n width: 50,\r\n p: .1\r\n }}\r\n className='calender-year-item'\r\n >\r\n <Button\r\n color={selected ? color : \"default\"}\r\n className='calender-year-button'\r\n size='small'\r\n corner=\"circle\"\r\n ref={selected ? selectedRef : null}\r\n onClick={() => onClick(y)}\r\n variant={selected ? \"fill\" : \"text\"}\r\n >\r\n {y}\r\n </Button>\r\n </Stack>)\r\n }\r\n\r\n useEffect(() => {\r\n if (selectedRef?.current) {\r\n selectedRef?.current.scrollIntoView({ behavior: \"smooth\", block: \"center\", inline: \"nearest\" })\r\n }\r\n }, [])\r\n\r\n return (\r\n <Stack\r\n sx={{\r\n flexWrap: \"wrap\",\r\n flexDirection: \"row\",\r\n overflow: \"hidden\",\r\n overflowY: \"auto\"\r\n }}\r\n className='calender-years'\r\n >\r\n {years}\r\n </Stack>\r\n )\r\n}\r\n\r\n\r\nconst Calendar = ({ value, ...rest }: CalendarProps) => {\r\n let [{ onChange, viewMode: VMode, onButtonClick, color }] = useInterface<any>(\"Calender\", rest, {})\r\n const _p: any = {}\r\n if (VMode) _p.VMode = VMode\r\n if (color) _p.color = color\r\n const p: any = useBreakpointProps(_p)\r\n color = p.color || \"brand\"\r\n\r\n let [viewMode, setViewMode] = useState<any>(p.VMode || \"day\");\r\n let [selectedDate, setSelectedDate] = useState(new Date());\r\n selectedDate = value instanceof Date ? value : selectedDate\r\n const [currentDate, setCurrentDate] = useState(selectedDate);\r\n const year = currentDate.getFullYear()\r\n const month = currentDate.getMonth()\r\n const daysInMonth = 32 - new Date(year, month, 32).getDate()\r\n const today = new Date();\r\n const btnWidth = 36\r\n const boxWidth = btnWidth * 7\r\n\r\n const showCalendar = () => {\r\n\r\n let firstDay = (new Date(year, month)).getDay();\r\n let rows = []\r\n let row = []\r\n\r\n const dayNames = ['S', 'M', 'T', 'W', 'T', 'F', 'S'];\r\n for (let i = 0; i < dayNames.length; i++) {\r\n const k = dayNames[i];\r\n row.push(<Stack\r\n key={\"dayname-\" + i}\r\n sx={{\r\n width: btnWidth,\r\n height: btnWidth,\r\n alignItems: \"center\",\r\n justifyContent: \"center\"\r\n }}\r\n >\r\n <IconButton\r\n variant={\"text\"}\r\n color=\"default\"\r\n disabled\r\n >\r\n {k}\r\n </IconButton>\r\n </Stack>)\r\n }\r\n\r\n rows.push(<Stack flexRow key={\"header\"} className='calender-day-row'>\r\n {row}\r\n </Stack>);\r\n\r\n let date = 1;\r\n for (let i = 0; i < 6; i++) {\r\n let row = []\r\n for (let j = 0; j < 7; j++) {\r\n if (i === 0 && j < firstDay) {\r\n row.push(<Stack\r\n alignItems=\"center\"\r\n justifyContent=\"center\"\r\n key={date + j + i}\r\n sx={{\r\n width: btnWidth,\r\n height: btnWidth,\r\n alignItems: \"center\",\r\n justifyContent: \"center\"\r\n }}\r\n >\r\n\r\n </Stack>)\r\n } else if (date > daysInMonth) {\r\n break;\r\n } else {\r\n let isToday = date === today.getDate() && year === today.getFullYear() && month === today.getMonth()\r\n let isSelected = date === selectedDate.getDate() && year === selectedDate.getFullYear() && month === selectedDate.getMonth()\r\n\r\n let css: any = {}\r\n if (isToday) {\r\n css = {\r\n variant: \"fill\",\r\n color: \"default\"\r\n }\r\n }\r\n\r\n if (isSelected) {\r\n css = {\r\n variant: \"fill\",\r\n color: color\r\n }\r\n }\r\n\r\n row.push(<Stack\r\n sx={{\r\n width: btnWidth,\r\n height: btnWidth,\r\n alignItems: \"center\",\r\n justifyContent: \"center\"\r\n }}\r\n key={date + j + i}\r\n className='calender-day-item'\r\n >\r\n <IconButton\r\n className='calender-day-button'\r\n variant={isSelected ? \"fill\" : \"text\"}\r\n color={isToday ? color : \"default\"}\r\n {...css}\r\n data-value={date}\r\n onClick={(e: any) => {\r\n let d = e.target.getAttribute(\"data-value\")\r\n if (!d) return\r\n let selectedDate = new Date(year, month, parseInt(d))\r\n onChange ? onChange(selectedDate) : setSelectedDate(selectedDate)\r\n onButtonClick && onButtonClick(\"day\", selectedDate)\r\n }}\r\n >\r\n {date}\r\n </IconButton>\r\n </Stack>)\r\n date++;\r\n }\r\n }\r\n rows.push(<Stack flexRow key={\"row\" + i} className='calender-day-row'>\r\n {row}\r\n </Stack>);\r\n }\r\n return rows\r\n }\r\n\r\n const showMonth = () => {\r\n let months: any[] = []\r\n const monthNames = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];\r\n for (let m = 0; m < monthNames.length; m++) {\r\n const selected = currentDate.getMonth() === m\r\n\r\n months.push(<Stack\r\n key={m}\r\n width={\"50%\"}\r\n alignItems=\"center\"\r\n justifyContent=\"center\"\r\n p={.1}\r\n className='calender-months-item'\r\n >\r\n <Button\r\n color={selected ? color : \"default\"}\r\n className='calender-month-button'\r\n size='small'\r\n corner=\"circle\"\r\n variant={selected ? \"fill\" : 'text'}\r\n onClick={() => {\r\n const v = new Date(currentDate.getFullYear(), m)\r\n setCurrentDate(v)\r\n setViewMode(\"day\")\r\n onButtonClick && onButtonClick(\"month\", v)\r\n }}\r\n sx={{\r\n color: selected ? \"brand.text\" : \"text.primary\"\r\n }}\r\n >\r\n {monthNames[m]}\r\n </Button>\r\n </Stack>)\r\n }\r\n\r\n return (\r\n <Stack\r\n className='calender-months'\r\n sx={{\r\n flexWrap: \"wrap\",\r\n overflow: \"hidden\",\r\n overflowY: \"auto\",\r\n flexDirection: \"row\"\r\n }}\r\n >\r\n {months}\r\n </Stack>\r\n )\r\n }\r\n\r\n let view: any = null\r\n switch (viewMode) {\r\n case \"year\":\r\n view = <ShowYears\r\n color={color}\r\n today={today}\r\n year={year}\r\n boxWidth={boxWidth}\r\n onClick={(y: any) => {\r\n currentDate.setFullYear(y)\r\n setCurrentDate(currentDate)\r\n setViewMode(\"month\")\r\n onButtonClick && onButtonClick(\"year\", currentDate)\r\n }}\r\n />\r\n break;\r\n case \"month\":\r\n view = showMonth()\r\n break;\r\n default:\r\n view = (<>\r\n\r\n {showCalendar()}\r\n </>\r\n )\r\n break;\r\n }\r\n\r\n return (\r\n <ViewBox\r\n className='calender-root'\r\n maxHeight={308}\r\n width={250}\r\n radius={1}\r\n bgcolor=\"background.secondary\"\r\n startContent={\r\n <Stack className='calender-header' flexRow alignItems=\"center\" justifyContent=\"space-between\" p={1}>\r\n <Text\r\n fontWeight=\"bold\"\r\n cursor=\"pointer\"\r\n onClick={() => setViewMode(viewMode !== 'day' ? \"day\" : \"year\")}\r\n flex={1}\r\n >\r\n {currentDate.toLocaleDateString(undefined, { year: 'numeric', month: 'long' })}\r\n </Text>\r\n <IconButton\r\n color=\"default\"\r\n variant='text'\r\n size={28}\r\n onClick={() => {\r\n setCurrentDate(new Date())\r\n onChange ? onChange(new Date()) : setSelectedDate(new Date())\r\n }}\r\n >\r\n <ResetIcon fontSize={20} />\r\n </IconButton>\r\n <IconButton\r\n color=\"default\"\r\n variant='text'\r\n size={28}\r\n onClick={() => {\r\n setCurrentDate(new Date(currentDate.getFullYear(), currentDate.getMonth() - 1, 1))\r\n }}\r\n >\r\n <IconKeyboardArrowLeft />\r\n </IconButton>\r\n <IconButton\r\n color=\"default\"\r\n variant='text'\r\n size={28}\r\n onClick={() => {\r\n setCurrentDate(new Date(currentDate.getFullYear(), currentDate.getMonth() + 1, 1))\r\n }}\r\n >\r\n <IconKeyboardArrowRight />\r\n </IconButton>\r\n </Stack>\r\n }\r\n >\r\n <Stack height=\"100%\" p={.5} className='calender-container'>\r\n {view}\r\n </Stack>\r\n </ViewBox>\r\n );\r\n};\r\n\r\nexport default Calendar;"],"names":[],"mappings":";;;;;;;;;;;;;;AAqBA;;AAEI;AACA;AACI;AACA;AAGQ;AACA;AACH;;;;;;;AAuBT;AAGY;AACA;AACA;AACA;AACH;AAMb;AAGA;AAAkB;;;AAGd;AAAW;AACX;AAAW;AACX;AACA;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAII;;;AAIA;AACA;AACI;AACA;AAGQ;AACA;AACA;AACA;;;AAaZ;;AAKA;;AAEI;;AAEQ;AAKQ;AACA;AACA;AACA;AACH;;AAIF;;;;;;;;AAQC;AACI;AACA;;;;AAKJ;AACI;AACA;;;AAIR;AAEQ;AACA;AACA;AACA;;;AAaI;;AACA;AACA;AACA;;AAMZ;;;AAGR;;AAIJ;AACJ;;;;AAKI;;AAGI;AAeY;;;AAGA;;;;;;AAeJ;AACA;AACA;AACA;;AAMhB;;;AAII;;AAOY;;;AAGA;AACJ;;AAGR;;;AAGA;AACI;;;;AA8BgB;AACA;AACJ;AASI;;AAUA;;AAa5B;;"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
var tslib = require('tslib');
|
|
5
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
6
|
+
var index = require('../Input/index.cjs');
|
|
7
|
+
var index$3 = require('../Menu/index.cjs');
|
|
8
|
+
var React = require('react');
|
|
9
|
+
var index$5 = require('../Calendar/index.cjs');
|
|
10
|
+
var index$1 = require('../Stack/index.cjs');
|
|
11
|
+
var index$4 = require('../ClickOutside/index.cjs');
|
|
12
|
+
var CalendarIcon = require('@xanui/icons/CalendarMonth');
|
|
13
|
+
var index$2 = require('../IconButton/index.cjs');
|
|
14
|
+
var ClearIcon = require('@xanui/icons/Clear');
|
|
15
|
+
var core = require('@xanui/core');
|
|
16
|
+
|
|
17
|
+
const CalenderInput = (props) => {
|
|
18
|
+
let [_a] = core.useInterface("CanlendarInput", props, {}), { value, onChange, getInputValue, slotProps, placeholder } = _a, inputProps = tslib.__rest(_a, ["value", "onChange", "getInputValue", "slotProps", "placeholder"]);
|
|
19
|
+
const [target, setTarget] = React.useState();
|
|
20
|
+
const inputRef = React.useRef(null);
|
|
21
|
+
return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(index, Object.assign({ readOnly: true, startIcon: jsxRuntime.jsx(CalendarIcon, {}), placeholder: placeholder }, inputProps, { endIcon: jsxRuntime.jsx(jsxRuntime.Fragment, { children: value && jsxRuntime.jsx(index$1, { children: jsxRuntime.jsx(index$2, { color: "default", size: 28, variant: "text", onClick: () => {
|
|
22
|
+
onChange && onChange(null);
|
|
23
|
+
}, children: jsxRuntime.jsx(ClearIcon, { fontSize: 20 }) }) }) }), cursor: "pointer", ref: inputRef, slotProps: {
|
|
24
|
+
inputContainer: {
|
|
25
|
+
onClick: () => setTarget(target ? null : inputRef === null || inputRef === void 0 ? void 0 : inputRef.current)
|
|
26
|
+
}
|
|
27
|
+
}, value: getInputValue ? getInputValue(value) : (value ? value.toLocaleDateString("en-US") : "") })), jsxRuntime.jsx(index$3, Object.assign({ target: target, placement: "bottom-left", bgcolor: "transparent" }, slotProps === null || slotProps === void 0 ? void 0 : slotProps.menu, { children: jsxRuntime.jsx(index$4, { onClickOutside: () => setTarget(null), children: jsxRuntime.jsx(index$5, Object.assign({}, slotProps === null || slotProps === void 0 ? void 0 : slotProps.calender, { value: value, onChange: (e) => {
|
|
28
|
+
setTarget(null);
|
|
29
|
+
onChange && onChange(e);
|
|
30
|
+
} })) }) }))] }));
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
module.exports = CalenderInput;
|
|
34
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../src/CalendarInput/index.tsx"],"sourcesContent":["'use client'\r\nimport Input, { InputProps } from '../Input'\r\nimport Menu, { MenuProps } from '../Menu'\r\nimport { useRef, useState } from 'react'\r\nimport Calendar, { CalendarProps } from '../Calendar'\r\nimport Stack from '../Stack'\r\nimport ClickOutside from '../ClickOutside'\r\nimport CalendarIcon from '@xanui/icons/CalendarMonth';\r\nimport IconButton from '../IconButton'\r\nimport ClearIcon from '@xanui/icons/Clear';\r\nimport { useInterface } from '@xanui/core'\r\n\r\nexport type CalenderInpurProps = Omit<InputProps, \"value\" | \"onChange\" | \"slotProps\"> & {\r\n value?: CalendarProps[\"value\"];\r\n onChange?: CalendarProps[\"onChange\"];\r\n getInputValue?: (value?: Date | null) => string;\r\n slotProps?: {\r\n input?: InputProps['slotProps'];\r\n calender?: CalendarProps;\r\n menu?: MenuProps;\r\n }\r\n}\r\n\r\nconst CalenderInput = (props: CalenderInpurProps) => {\r\n let [{ value, onChange, getInputValue, slotProps, placeholder, ...inputProps }] = useInterface<any>(\"CanlendarInput\", props, {})\r\n const [target, setTarget] = useState<any>()\r\n const inputRef: any = useRef(null)\r\n\r\n return (\r\n <>\r\n <Input\r\n readOnly\r\n startIcon={<CalendarIcon />}\r\n placeholder={placeholder}\r\n {...inputProps}\r\n endIcon={<>\r\n {value && <Stack>\r\n <IconButton\r\n color=\"default\"\r\n size={28}\r\n variant=\"text\"\r\n onClick={() => {\r\n onChange && onChange(null)\r\n }}\r\n >\r\n <ClearIcon fontSize={20} />\r\n </IconButton>\r\n </Stack>}\r\n </>}\r\n cursor=\"pointer\"\r\n ref={inputRef}\r\n slotProps={{\r\n inputContainer: {\r\n onClick: () => setTarget(target ? null : inputRef?.current)\r\n }\r\n }}\r\n value={getInputValue ? getInputValue(value) : (value ? value.toLocaleDateString(\"en-US\") : \"\")}\r\n />\r\n <Menu\r\n target={target}\r\n placement=\"bottom-left\"\r\n bgcolor=\"transparent\"\r\n {...slotProps?.menu}\r\n >\r\n <ClickOutside onClickOutside={() => setTarget(null)}>\r\n <Calendar\r\n {...slotProps?.calender}\r\n value={value}\r\n onChange={(e) => {\r\n setTarget(null)\r\n onChange && onChange(e)\r\n }}\r\n />\r\n </ClickOutside>\r\n </Menu>\r\n </>\r\n )\r\n}\r\n\r\nexport default CalenderInput"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAuBA;;;AAGI;;AAgB4B;;AAUZ;;AAEC;AACJ;;AAeW;AACJ;AAMxB;;"}
|
package/CalendarInput/index.js
CHANGED
|
@@ -1,34 +1,32 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
var ClearIcon = require('@xanui/icons/Clear');
|
|
15
|
-
var core = require('@xanui/core');
|
|
2
|
+
import { __rest } from 'tslib';
|
|
3
|
+
import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
|
|
4
|
+
import Input from '../Input/index.js';
|
|
5
|
+
import Menu from '../Menu/index.js';
|
|
6
|
+
import { useState, useRef } from 'react';
|
|
7
|
+
import Calendar from '../Calendar/index.js';
|
|
8
|
+
import Stack from '../Stack/index.js';
|
|
9
|
+
import ClickOutside from '../ClickOutside/index.js';
|
|
10
|
+
import CalendarIcon from '@xanui/icons/CalendarMonth';
|
|
11
|
+
import IconButton from '../IconButton/index.js';
|
|
12
|
+
import ClearIcon from '@xanui/icons/Clear';
|
|
13
|
+
import { useInterface } from '@xanui/core';
|
|
16
14
|
|
|
17
15
|
const CalenderInput = (props) => {
|
|
18
|
-
let [_a] =
|
|
19
|
-
const [target, setTarget] =
|
|
20
|
-
const inputRef =
|
|
21
|
-
return (
|
|
16
|
+
let [_a] = useInterface("CanlendarInput", props, {}), { value, onChange, getInputValue, slotProps, placeholder } = _a, inputProps = __rest(_a, ["value", "onChange", "getInputValue", "slotProps", "placeholder"]);
|
|
17
|
+
const [target, setTarget] = useState();
|
|
18
|
+
const inputRef = useRef(null);
|
|
19
|
+
return (jsxs(Fragment, { children: [jsx(Input, Object.assign({ readOnly: true, startIcon: jsx(CalendarIcon, {}), placeholder: placeholder }, inputProps, { endIcon: jsx(Fragment, { children: value && jsx(Stack, { children: jsx(IconButton, { color: "default", size: 28, variant: "text", onClick: () => {
|
|
22
20
|
onChange && onChange(null);
|
|
23
|
-
}, children:
|
|
21
|
+
}, children: jsx(ClearIcon, { fontSize: 20 }) }) }) }), cursor: "pointer", ref: inputRef, slotProps: {
|
|
24
22
|
inputContainer: {
|
|
25
23
|
onClick: () => setTarget(target ? null : inputRef === null || inputRef === void 0 ? void 0 : inputRef.current)
|
|
26
24
|
}
|
|
27
|
-
}, value: getInputValue ? getInputValue(value) : (value ? value.toLocaleDateString("en-US") : "") })),
|
|
25
|
+
}, value: getInputValue ? getInputValue(value) : (value ? value.toLocaleDateString("en-US") : "") })), jsx(Menu, Object.assign({ target: target, placement: "bottom-left", bgcolor: "transparent" }, slotProps === null || slotProps === void 0 ? void 0 : slotProps.menu, { children: jsx(ClickOutside, { onClickOutside: () => setTarget(null), children: jsx(Calendar, Object.assign({}, slotProps === null || slotProps === void 0 ? void 0 : slotProps.calender, { value: value, onChange: (e) => {
|
|
28
26
|
setTarget(null);
|
|
29
27
|
onChange && onChange(e);
|
|
30
28
|
} })) }) }))] }));
|
|
31
29
|
};
|
|
32
30
|
|
|
33
|
-
|
|
31
|
+
export { CalenderInput as default };
|
|
34
32
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/CalendarInput/index.tsx"],"sourcesContent":["
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/CalendarInput/index.tsx"],"sourcesContent":["'use client'\r\nimport Input, { InputProps } from '../Input'\r\nimport Menu, { MenuProps } from '../Menu'\r\nimport { useRef, useState } from 'react'\r\nimport Calendar, { CalendarProps } from '../Calendar'\r\nimport Stack from '../Stack'\r\nimport ClickOutside from '../ClickOutside'\r\nimport CalendarIcon from '@xanui/icons/CalendarMonth';\r\nimport IconButton from '../IconButton'\r\nimport ClearIcon from '@xanui/icons/Clear';\r\nimport { useInterface } from '@xanui/core'\r\n\r\nexport type CalenderInpurProps = Omit<InputProps, \"value\" | \"onChange\" | \"slotProps\"> & {\r\n value?: CalendarProps[\"value\"];\r\n onChange?: CalendarProps[\"onChange\"];\r\n getInputValue?: (value?: Date | null) => string;\r\n slotProps?: {\r\n input?: InputProps['slotProps'];\r\n calender?: CalendarProps;\r\n menu?: MenuProps;\r\n }\r\n}\r\n\r\nconst CalenderInput = (props: CalenderInpurProps) => {\r\n let [{ value, onChange, getInputValue, slotProps, placeholder, ...inputProps }] = useInterface<any>(\"CanlendarInput\", props, {})\r\n const [target, setTarget] = useState<any>()\r\n const inputRef: any = useRef(null)\r\n\r\n return (\r\n <>\r\n <Input\r\n readOnly\r\n startIcon={<CalendarIcon />}\r\n placeholder={placeholder}\r\n {...inputProps}\r\n endIcon={<>\r\n {value && <Stack>\r\n <IconButton\r\n color=\"default\"\r\n size={28}\r\n variant=\"text\"\r\n onClick={() => {\r\n onChange && onChange(null)\r\n }}\r\n >\r\n <ClearIcon fontSize={20} />\r\n </IconButton>\r\n </Stack>}\r\n </>}\r\n cursor=\"pointer\"\r\n ref={inputRef}\r\n slotProps={{\r\n inputContainer: {\r\n onClick: () => setTarget(target ? null : inputRef?.current)\r\n }\r\n }}\r\n value={getInputValue ? getInputValue(value) : (value ? value.toLocaleDateString(\"en-US\") : \"\")}\r\n />\r\n <Menu\r\n target={target}\r\n placement=\"bottom-left\"\r\n bgcolor=\"transparent\"\r\n {...slotProps?.menu}\r\n >\r\n <ClickOutside onClickOutside={() => setTarget(null)}>\r\n <Calendar\r\n {...slotProps?.calender}\r\n value={value}\r\n onChange={(e) => {\r\n setTarget(null)\r\n onChange && onChange(e)\r\n }}\r\n />\r\n </ClickOutside>\r\n </Menu>\r\n </>\r\n )\r\n}\r\n\r\nexport default CalenderInput"],"names":[],"mappings":";;;;;;;;;;;;;;AAuBA;;;AAGI;;AAgB4B;;AAUZ;;AAEC;AACJ;;AAeW;AACJ;AAMxB;;"}
|