@os-design/core 1.0.280 → 1.0.281
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/dist/Avatar/utils/nameToInitials.d.ts.map +1 -1
- package/dist/Avatar/utils/strToHue.d.ts.map +1 -1
- package/dist/Button/index.d.ts.map +1 -1
- package/dist/Button/index.js +1 -1
- package/dist/Button/utils/useButtonColors.d.ts.map +1 -1
- package/dist/ButtonLink/index.d.ts.map +1 -1
- package/dist/ButtonLink/index.js +0 -5
- package/dist/Checkbox/index.d.ts.map +1 -1
- package/dist/Checkbox/index.js +1 -6
- package/dist/DateCalendar/Calendar.d.ts +25 -0
- package/dist/DateCalendar/Calendar.d.ts.map +1 -0
- package/dist/DateCalendar/Calendar.js +271 -0
- package/dist/DateCalendar/MonthPicker.d.ts +12 -0
- package/dist/DateCalendar/MonthPicker.d.ts.map +1 -0
- package/dist/DateCalendar/MonthPicker.js +159 -0
- package/dist/DateCalendar/index.d.ts +41 -0
- package/dist/DateCalendar/index.d.ts.map +1 -0
- package/dist/DateCalendar/index.js +77 -0
- package/dist/DateCalendar/locale.d.ts +6 -0
- package/dist/DateCalendar/locale.d.ts.map +1 -0
- package/dist/DateCalendar/locale.js +4 -0
- package/dist/DateCalendar/utils/calendarDays.d.ts +10 -0
- package/dist/DateCalendar/utils/calendarDays.d.ts.map +1 -0
- package/dist/DateCalendar/utils/calendarDays.js +46 -0
- package/dist/DateCalendar/utils/dayOfWeek.d.ts +8 -0
- package/dist/DateCalendar/utils/dayOfWeek.d.ts.map +1 -0
- package/dist/DateCalendar/utils/dayOfWeek.js +6 -0
- package/dist/DateCalendar/utils/daysInMonth.d.ts +7 -0
- package/dist/DateCalendar/utils/daysInMonth.d.ts.map +1 -0
- package/dist/DateCalendar/utils/daysInMonth.js +14 -0
- package/dist/DateCalendar/utils/month.d.ts +14 -0
- package/dist/DateCalendar/utils/month.d.ts.map +1 -0
- package/dist/DateCalendar/utils/month.js +24 -0
- package/dist/DateCalendar/utils/shift.d.ts +3 -0
- package/dist/DateCalendar/utils/shift.d.ts.map +1 -0
- package/dist/DateCalendar/utils/shift.js +12 -0
- package/dist/DatePicker/index.d.ts +68 -62
- package/dist/DatePicker/index.d.ts.map +1 -1
- package/dist/DatePicker/index.js +359 -265
- package/dist/DatePicker/utils/createTimes.d.ts +7 -0
- package/dist/DatePicker/utils/createTimes.d.ts.map +1 -0
- package/dist/DatePicker/utils/createTimes.js +15 -0
- package/dist/GlobalStyles/resetStyles.d.ts.map +1 -1
- package/dist/GlobalStyles/typographyStyles.d.ts.map +1 -1
- package/dist/Input/index.d.ts +15 -0
- package/dist/Input/index.d.ts.map +1 -1
- package/dist/Input/index.js +5 -5
- package/dist/Input/utils/getFocusableElements.d.ts.map +1 -1
- package/dist/InputDateUnstyled/index.d.ts +94 -0
- package/dist/InputDateUnstyled/index.d.ts.map +1 -0
- package/dist/InputDateUnstyled/index.js +406 -0
- package/dist/InputDateUnstyled/utils/convertHours.d.ts +4 -0
- package/dist/InputDateUnstyled/utils/convertHours.d.ts.map +1 -0
- package/dist/InputDateUnstyled/utils/convertHours.js +12 -0
- package/dist/InputDateUnstyled/utils/convertToFullYear.d.ts +3 -0
- package/dist/InputDateUnstyled/utils/convertToFullYear.d.ts.map +1 -0
- package/dist/InputDateUnstyled/utils/convertToFullYear.js +10 -0
- package/dist/InputDateUnstyled/utils/dateToString.d.ts +3 -0
- package/dist/InputDateUnstyled/utils/dateToString.d.ts.map +1 -0
- package/dist/InputDateUnstyled/utils/dateToString.js +10 -0
- package/dist/InputDateUnstyled/utils/daysInMonth.d.ts +7 -0
- package/dist/InputDateUnstyled/utils/daysInMonth.d.ts.map +1 -0
- package/dist/InputDateUnstyled/utils/daysInMonth.js +14 -0
- package/dist/InputDateUnstyled/utils/ensureCaretVisible.d.ts +3 -0
- package/dist/InputDateUnstyled/utils/ensureCaretVisible.d.ts.map +1 -0
- package/dist/InputDateUnstyled/utils/ensureCaretVisible.js +32 -0
- package/dist/InputDateUnstyled/utils/eraseSelectedTokens.d.ts +10 -0
- package/dist/InputDateUnstyled/utils/eraseSelectedTokens.d.ts.map +1 -0
- package/dist/InputDateUnstyled/utils/eraseSelectedTokens.js +29 -0
- package/dist/InputDateUnstyled/utils/replaceSubstring.d.ts +3 -0
- package/dist/InputDateUnstyled/utils/replaceSubstring.d.ts.map +1 -0
- package/dist/InputDateUnstyled/utils/replaceSubstring.js +9 -0
- package/dist/InputDateUnstyled/utils/same.d.ts +6 -0
- package/dist/InputDateUnstyled/utils/same.d.ts.map +1 -0
- package/dist/InputDateUnstyled/utils/same.js +3 -0
- package/dist/InputDateUnstyled/utils/stringToDay.d.ts +12 -0
- package/dist/InputDateUnstyled/utils/stringToDay.d.ts.map +1 -0
- package/dist/InputDateUnstyled/utils/stringToDay.js +55 -0
- package/dist/InputDateUnstyled/utils/stringToTime.d.ts +7 -0
- package/dist/InputDateUnstyled/utils/stringToTime.d.ts.map +1 -0
- package/dist/InputDateUnstyled/utils/stringToTime.js +40 -0
- package/dist/InputDateUnstyled/utils/token.d.ts +9 -0
- package/dist/InputDateUnstyled/utils/token.d.ts.map +1 -0
- package/dist/InputDateUnstyled/utils/token.js +66 -0
- package/dist/Link/index.d.ts.map +1 -1
- package/dist/Link/index.js +3 -8
- package/dist/LinkButton/index.d.ts.map +1 -1
- package/dist/LinkButton/index.js +0 -5
- package/dist/List/utils/bodyPointerEvents.d.ts.map +1 -1
- package/dist/List/utils/frameTimeout.d.ts.map +1 -1
- package/dist/List/utils/useRWLoadNext.d.ts.map +1 -1
- package/dist/LogoLink/index.d.ts.map +1 -1
- package/dist/LogoLink/index.js +1 -6
- package/dist/Menu/utils/useFocusWithArrows.d.ts.map +1 -1
- package/dist/Modal/index.d.ts +5 -0
- package/dist/Modal/index.d.ts.map +1 -1
- package/dist/Modal/index.js +53 -48
- package/dist/Navigation/utils/useScrollFlags.d.ts.map +1 -1
- package/dist/NavigationItem/index.d.ts.map +1 -1
- package/dist/NavigationItem/index.js +1 -6
- package/dist/Popover/utils/usePopoverPosition.d.ts.map +1 -1
- package/dist/ScrollButton/utils/useContainerPosition.d.ts.map +1 -1
- package/dist/ScrollButton/utils/useVisibility.d.ts.map +1 -1
- package/dist/Select/index.d.ts.map +1 -1
- package/dist/Select/index.js +2 -3
- package/dist/Switch/index.d.ts.map +1 -1
- package/dist/Switch/index.js +1 -7
- package/dist/TagLink/index.d.ts.map +1 -1
- package/dist/TagLink/index.js +1 -6
- package/dist/TimeGrid/index.d.ts +63 -0
- package/dist/TimeGrid/index.d.ts.map +1 -0
- package/dist/TimeGrid/index.js +111 -0
- package/dist/TimeGrid/utils/convertHours.d.ts +4 -0
- package/dist/TimeGrid/utils/convertHours.d.ts.map +1 -0
- package/dist/TimeGrid/utils/convertHours.js +12 -0
- package/dist/TimeGrid/utils/createTimes.d.ts +7 -0
- package/dist/TimeGrid/utils/createTimes.d.ts.map +1 -0
- package/dist/TimeGrid/utils/createTimes.js +15 -0
- package/dist/TimeGrid/utils/timeToString.d.ts +4 -0
- package/dist/TimeGrid/utils/timeToString.d.ts.map +1 -0
- package/dist/TimeGrid/utils/timeToString.js +12 -0
- package/dist/TimeGridSkeleton/index.d.ts +18 -0
- package/dist/TimeGridSkeleton/index.d.ts.map +1 -0
- package/dist/TimeGridSkeleton/index.js +33 -0
- package/dist/TimeList/index.d.ts +45 -0
- package/dist/TimeList/index.d.ts.map +1 -0
- package/dist/TimeList/index.js +80 -0
- package/dist/TimeList/utils/convertHours.d.ts +4 -0
- package/dist/TimeList/utils/convertHours.d.ts.map +1 -0
- package/dist/TimeList/utils/convertHours.js +12 -0
- package/dist/TimeList/utils/createTimes.d.ts +7 -0
- package/dist/TimeList/utils/createTimes.d.ts.map +1 -0
- package/dist/TimeList/utils/createTimes.js +15 -0
- package/dist/TimeList/utils/timeToString.d.ts +4 -0
- package/dist/TimeList/utils/timeToString.d.ts.map +1 -0
- package/dist/TimeList/utils/timeToString.js +12 -0
- package/dist/TimeListSkeleton/index.d.ts +13 -0
- package/dist/TimeListSkeleton/index.d.ts.map +1 -0
- package/dist/TimeListSkeleton/index.js +30 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -0
- package/dist/message/styles.d.ts.map +1 -1
- package/package.json +8 -8
- package/src/Button/index.tsx +1 -1
- package/src/ButtonLink/index.tsx +0 -5
- package/src/Checkbox/index.tsx +1 -6
- package/src/DateCalendar/Calendar.tsx +400 -0
- package/src/DateCalendar/MonthPicker.tsx +212 -0
- package/src/DateCalendar/index.tsx +135 -0
- package/src/DateCalendar/locale.ts +22 -0
- package/src/DateCalendar/utils/calendarDays.ts +61 -0
- package/src/DateCalendar/utils/dayOfWeek.ts +14 -0
- package/src/DateCalendar/utils/daysInMonth.ts +22 -0
- package/src/DateCalendar/utils/month.ts +30 -0
- package/src/DateCalendar/utils/shift.ts +14 -0
- package/src/DatePicker/index.tsx +506 -417
- package/src/DatePicker/utils/createTimes.ts +20 -0
- package/src/Input/index.tsx +11 -8
- package/src/InputDateUnstyled/index.tsx +533 -0
- package/src/InputDateUnstyled/utils/convertHours.ts +15 -0
- package/src/InputDateUnstyled/utils/convertToFullYear.ts +11 -0
- package/src/InputDateUnstyled/utils/dateToString.ts +21 -0
- package/src/InputDateUnstyled/utils/daysInMonth.ts +22 -0
- package/src/InputDateUnstyled/utils/ensureCaretVisible.ts +37 -0
- package/src/InputDateUnstyled/utils/eraseSelectedTokens.ts +38 -0
- package/src/InputDateUnstyled/utils/replaceSubstring.ts +10 -0
- package/src/InputDateUnstyled/utils/same.ts +15 -0
- package/src/InputDateUnstyled/utils/stringToDay.ts +69 -0
- package/src/InputDateUnstyled/utils/stringToTime.ts +48 -0
- package/src/InputDateUnstyled/utils/token.ts +102 -0
- package/src/Link/index.tsx +5 -25
- package/src/LinkButton/index.tsx +2 -15
- package/src/LogoLink/index.tsx +2 -6
- package/src/Modal/index.tsx +71 -60
- package/src/NavigationItem/index.tsx +2 -16
- package/src/Select/index.tsx +2 -3
- package/src/Switch/index.tsx +1 -11
- package/src/TagLink/index.tsx +3 -11
- package/src/TimeGrid/index.tsx +189 -0
- package/src/TimeGrid/utils/convertHours.ts +15 -0
- package/src/TimeGrid/utils/createTimes.ts +20 -0
- package/src/TimeGrid/utils/timeToString.ts +17 -0
- package/src/TimeGridSkeleton/index.tsx +50 -0
- package/src/TimeList/index.tsx +135 -0
- package/src/TimeList/utils/convertHours.ts +15 -0
- package/src/TimeList/utils/createTimes.ts +20 -0
- package/src/TimeList/utils/timeToString.ts +17 -0
- package/src/TimeListSkeleton/index.tsx +44 -0
- package/src/index.ts +12 -0
- package/dist/DatePicker/DatePickerCalendar.d.ts +0 -11
- package/dist/DatePicker/DatePickerCalendar.d.ts.map +0 -1
- package/dist/DatePicker/DatePickerCalendar.js +0 -178
- package/dist/TimePicker/index.d.ts +0 -29
- package/dist/TimePicker/index.d.ts.map +0 -1
- package/dist/TimePicker/index.js +0 -100
- package/src/DatePicker/DatePickerCalendar.tsx +0 -230
- package/src/TimePicker/index.tsx +0 -144
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { useForwardedState } from '@os-design/utils';
|
|
2
|
+
import { forwardRef, useEffect, useMemo, useRef, useState } from 'react';
|
|
3
|
+
import Calendar from './Calendar.js';
|
|
4
|
+
import { defaultLocale, type DateCalendarLocale } from './locale.js';
|
|
5
|
+
import MonthPicker from './MonthPicker.js';
|
|
6
|
+
import type { Day, Month } from './utils/calendarDays.js';
|
|
7
|
+
|
|
8
|
+
type JsxDivProps = Omit<
|
|
9
|
+
JSX.IntrinsicElements['div'],
|
|
10
|
+
'defaultValue' | 'onChange' | 'ref'
|
|
11
|
+
>;
|
|
12
|
+
export interface DateCalendarProps extends JsxDivProps {
|
|
13
|
+
/**
|
|
14
|
+
* First day of week (0 - Sunday).
|
|
15
|
+
* @default 0
|
|
16
|
+
*/
|
|
17
|
+
firstDayOfWeek?: number;
|
|
18
|
+
/**
|
|
19
|
+
* What days are not allowed to choose in the selected month.
|
|
20
|
+
* @default undefined
|
|
21
|
+
*/
|
|
22
|
+
disabledDays?: (month: Month) => number[] | Promise<number[]>;
|
|
23
|
+
/**
|
|
24
|
+
* The locale.
|
|
25
|
+
* @default undefined
|
|
26
|
+
*/
|
|
27
|
+
locale?: DateCalendarLocale;
|
|
28
|
+
/**
|
|
29
|
+
* The selected date.
|
|
30
|
+
* @default undefined
|
|
31
|
+
*/
|
|
32
|
+
value?: Day | null;
|
|
33
|
+
/**
|
|
34
|
+
* The default value.
|
|
35
|
+
* @default undefined
|
|
36
|
+
*/
|
|
37
|
+
defaultValue?: Day | null;
|
|
38
|
+
/**
|
|
39
|
+
* The change event handler.
|
|
40
|
+
* @default undefined
|
|
41
|
+
*/
|
|
42
|
+
onChange?: (value: Day | null) => void;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* The component to choose a date in a calendar.
|
|
47
|
+
*/
|
|
48
|
+
const DateCalendar = forwardRef<HTMLDivElement, DateCalendarProps>(
|
|
49
|
+
(
|
|
50
|
+
{
|
|
51
|
+
firstDayOfWeek = 0,
|
|
52
|
+
disabledDays,
|
|
53
|
+
locale = defaultLocale,
|
|
54
|
+
value,
|
|
55
|
+
defaultValue,
|
|
56
|
+
onChange = () => {},
|
|
57
|
+
...rest
|
|
58
|
+
},
|
|
59
|
+
ref
|
|
60
|
+
) => {
|
|
61
|
+
const [forwardedValue, setForwardedValue] = useForwardedState({
|
|
62
|
+
value,
|
|
63
|
+
defaultValue,
|
|
64
|
+
onChange,
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
const [showMonthPicker, setShowMonthPicker] = useState(false);
|
|
68
|
+
|
|
69
|
+
const today = useMemo(() => new Date(), []);
|
|
70
|
+
|
|
71
|
+
const [displayedMonth, setDisplayedMonth] = useState(() => {
|
|
72
|
+
if (forwardedValue) {
|
|
73
|
+
return {
|
|
74
|
+
year: forwardedValue.year,
|
|
75
|
+
month: forwardedValue.month,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
return {
|
|
79
|
+
year: today.getFullYear(),
|
|
80
|
+
month: today.getMonth(),
|
|
81
|
+
};
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
const displayedMonthRef = useRef(displayedMonth);
|
|
85
|
+
useEffect(() => {
|
|
86
|
+
displayedMonthRef.current = displayedMonth;
|
|
87
|
+
}, [displayedMonth]);
|
|
88
|
+
|
|
89
|
+
// Update the displayed month if the value has been changed
|
|
90
|
+
useEffect(() => {
|
|
91
|
+
if (
|
|
92
|
+
forwardedValue &&
|
|
93
|
+
(forwardedValue.year !== displayedMonthRef.current.year ||
|
|
94
|
+
forwardedValue.month !== displayedMonthRef.current.month)
|
|
95
|
+
) {
|
|
96
|
+
setDisplayedMonth({
|
|
97
|
+
year: forwardedValue.year,
|
|
98
|
+
month: forwardedValue.month,
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
}, [forwardedValue]);
|
|
102
|
+
|
|
103
|
+
return (
|
|
104
|
+
<div {...rest} ref={ref}>
|
|
105
|
+
{showMonthPicker ? (
|
|
106
|
+
<MonthPicker
|
|
107
|
+
locale={locale}
|
|
108
|
+
month={displayedMonth}
|
|
109
|
+
onChangeMonth={(month) => {
|
|
110
|
+
setDisplayedMonth(month);
|
|
111
|
+
setShowMonthPicker(false);
|
|
112
|
+
}}
|
|
113
|
+
today={today}
|
|
114
|
+
/>
|
|
115
|
+
) : (
|
|
116
|
+
<Calendar
|
|
117
|
+
firstDayOfWeek={firstDayOfWeek}
|
|
118
|
+
disabledDays={disabledDays}
|
|
119
|
+
locale={locale}
|
|
120
|
+
value={forwardedValue}
|
|
121
|
+
onChange={setForwardedValue}
|
|
122
|
+
month={displayedMonth}
|
|
123
|
+
onChangeMonth={setDisplayedMonth}
|
|
124
|
+
onSelectMonth={() => setShowMonthPicker(true)}
|
|
125
|
+
today={today}
|
|
126
|
+
/>
|
|
127
|
+
)}
|
|
128
|
+
</div>
|
|
129
|
+
);
|
|
130
|
+
}
|
|
131
|
+
);
|
|
132
|
+
|
|
133
|
+
DateCalendar.displayName = 'DateCalendar';
|
|
134
|
+
|
|
135
|
+
export default DateCalendar;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export interface DateCalendarLocale {
|
|
2
|
+
months: string[];
|
|
3
|
+
shortDaysOfWeek: string[];
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
export const defaultLocale: DateCalendarLocale = {
|
|
7
|
+
months: [
|
|
8
|
+
'January',
|
|
9
|
+
'February',
|
|
10
|
+
'March',
|
|
11
|
+
'April',
|
|
12
|
+
'May',
|
|
13
|
+
'June',
|
|
14
|
+
'July',
|
|
15
|
+
'August',
|
|
16
|
+
'September',
|
|
17
|
+
'October',
|
|
18
|
+
'November',
|
|
19
|
+
'December',
|
|
20
|
+
],
|
|
21
|
+
shortDaysOfWeek: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],
|
|
22
|
+
};
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import dayOfWeek from './dayOfWeek.js';
|
|
2
|
+
import daysInMonth from './daysInMonth.js';
|
|
3
|
+
import { nextMonth, prevMonth } from './month.js';
|
|
4
|
+
|
|
5
|
+
export interface Month {
|
|
6
|
+
year: number;
|
|
7
|
+
month: number;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export interface Day extends Month {
|
|
11
|
+
day: number;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
const calendarDays = (month: Month, firstDayOfWeek: number = 0): Day[] => {
|
|
15
|
+
const days: Day[] = [];
|
|
16
|
+
|
|
17
|
+
// Previous month
|
|
18
|
+
const firstDayOfWeekInMonth = dayOfWeek({
|
|
19
|
+
year: month.year,
|
|
20
|
+
month: month.month,
|
|
21
|
+
day: 1,
|
|
22
|
+
});
|
|
23
|
+
const daysBeforeFirstDay =
|
|
24
|
+
firstDayOfWeekInMonth >= firstDayOfWeek
|
|
25
|
+
? firstDayOfWeekInMonth - firstDayOfWeek
|
|
26
|
+
: 7 - (firstDayOfWeek - firstDayOfWeekInMonth);
|
|
27
|
+
const pMonth = prevMonth(month);
|
|
28
|
+
const daysInPreviousMonth = daysInMonth(pMonth);
|
|
29
|
+
for (let i = 0; i < daysBeforeFirstDay; i++) {
|
|
30
|
+
days.push({
|
|
31
|
+
year: pMonth.year,
|
|
32
|
+
month: pMonth.month,
|
|
33
|
+
day: daysInPreviousMonth - daysBeforeFirstDay + i + 1,
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// Current month
|
|
38
|
+
const daysInCurrentMonth = daysInMonth(month);
|
|
39
|
+
for (let i = 1; i <= daysInCurrentMonth; i++) {
|
|
40
|
+
days.push({
|
|
41
|
+
year: month.year,
|
|
42
|
+
month: month.month,
|
|
43
|
+
day: i,
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// Next month
|
|
48
|
+
const daysAfterLastDay = 42 - days.length;
|
|
49
|
+
const nMonth = nextMonth(month);
|
|
50
|
+
for (let i = 1; i <= daysAfterLastDay; i++) {
|
|
51
|
+
days.push({
|
|
52
|
+
year: nMonth.year,
|
|
53
|
+
month: nMonth.month,
|
|
54
|
+
day: i,
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
return days;
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
export default calendarDays;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
interface Month {
|
|
2
|
+
year: number;
|
|
3
|
+
month: number;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
const daysInMonth = (month: Month) => {
|
|
7
|
+
switch (month.month) {
|
|
8
|
+
case 1:
|
|
9
|
+
return (month.year % 4 == 0 && month.year % 100) || month.year % 400 == 0
|
|
10
|
+
? 29
|
|
11
|
+
: 28;
|
|
12
|
+
case 3:
|
|
13
|
+
case 5:
|
|
14
|
+
case 8:
|
|
15
|
+
case 10:
|
|
16
|
+
return 30;
|
|
17
|
+
default:
|
|
18
|
+
return 31;
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
export default daysInMonth;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
interface Month {
|
|
2
|
+
year: number;
|
|
3
|
+
month: number;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
export const nextMonth = (month: Month) => {
|
|
7
|
+
if (month.month === 11) {
|
|
8
|
+
return {
|
|
9
|
+
month: 0,
|
|
10
|
+
year: month.year + 1,
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
return {
|
|
14
|
+
month: month.month + 1,
|
|
15
|
+
year: month.year,
|
|
16
|
+
};
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
export const prevMonth = (month: Month) => {
|
|
20
|
+
if (month.month === 0) {
|
|
21
|
+
return {
|
|
22
|
+
month: 11,
|
|
23
|
+
year: month.year - 1,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
return {
|
|
27
|
+
month: month.month - 1,
|
|
28
|
+
year: month.year,
|
|
29
|
+
};
|
|
30
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
const shift = <T>(arr: T[], n: number): T[] => {
|
|
2
|
+
if (n % arr.length === 0) {
|
|
3
|
+
return arr;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
const res: T[] = [];
|
|
7
|
+
for (let i = 0; i < arr.length; i++) {
|
|
8
|
+
const index = (n + i) % arr.length;
|
|
9
|
+
res.push(arr[index]);
|
|
10
|
+
}
|
|
11
|
+
return res;
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export default shift;
|