@os-design/core 1.0.280 → 1.0.282

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 (198) hide show
  1. package/dist/Avatar/utils/nameToInitials.d.ts.map +1 -1
  2. package/dist/Avatar/utils/strToHue.d.ts.map +1 -1
  3. package/dist/Button/index.d.ts.map +1 -1
  4. package/dist/Button/index.js +1 -1
  5. package/dist/Button/utils/useButtonColors.d.ts.map +1 -1
  6. package/dist/ButtonLink/index.d.ts.map +1 -1
  7. package/dist/ButtonLink/index.js +0 -5
  8. package/dist/Checkbox/index.d.ts.map +1 -1
  9. package/dist/Checkbox/index.js +1 -6
  10. package/dist/DateCalendar/Calendar.d.ts +25 -0
  11. package/dist/DateCalendar/Calendar.d.ts.map +1 -0
  12. package/dist/DateCalendar/Calendar.js +271 -0
  13. package/dist/DateCalendar/MonthPicker.d.ts +12 -0
  14. package/dist/DateCalendar/MonthPicker.d.ts.map +1 -0
  15. package/dist/DateCalendar/MonthPicker.js +159 -0
  16. package/dist/DateCalendar/index.d.ts +41 -0
  17. package/dist/DateCalendar/index.d.ts.map +1 -0
  18. package/dist/DateCalendar/index.js +77 -0
  19. package/dist/DateCalendar/locale.d.ts +6 -0
  20. package/dist/DateCalendar/locale.d.ts.map +1 -0
  21. package/dist/DateCalendar/locale.js +4 -0
  22. package/dist/DateCalendar/utils/calendarDays.d.ts +10 -0
  23. package/dist/DateCalendar/utils/calendarDays.d.ts.map +1 -0
  24. package/dist/DateCalendar/utils/calendarDays.js +46 -0
  25. package/dist/DateCalendar/utils/dayOfWeek.d.ts +8 -0
  26. package/dist/DateCalendar/utils/dayOfWeek.d.ts.map +1 -0
  27. package/dist/DateCalendar/utils/dayOfWeek.js +6 -0
  28. package/dist/DateCalendar/utils/daysInMonth.d.ts +7 -0
  29. package/dist/DateCalendar/utils/daysInMonth.d.ts.map +1 -0
  30. package/dist/DateCalendar/utils/daysInMonth.js +14 -0
  31. package/dist/DateCalendar/utils/month.d.ts +14 -0
  32. package/dist/DateCalendar/utils/month.d.ts.map +1 -0
  33. package/dist/DateCalendar/utils/month.js +24 -0
  34. package/dist/DateCalendar/utils/shift.d.ts +3 -0
  35. package/dist/DateCalendar/utils/shift.d.ts.map +1 -0
  36. package/dist/DateCalendar/utils/shift.js +12 -0
  37. package/dist/DatePicker/index.d.ts +68 -62
  38. package/dist/DatePicker/index.d.ts.map +1 -1
  39. package/dist/DatePicker/index.js +359 -265
  40. package/dist/DatePicker/utils/createTimes.d.ts +7 -0
  41. package/dist/DatePicker/utils/createTimes.d.ts.map +1 -0
  42. package/dist/DatePicker/utils/createTimes.js +15 -0
  43. package/dist/GlobalStyles/resetStyles.d.ts.map +1 -1
  44. package/dist/GlobalStyles/typographyStyles.d.ts.map +1 -1
  45. package/dist/Input/index.d.ts +15 -0
  46. package/dist/Input/index.d.ts.map +1 -1
  47. package/dist/Input/index.js +5 -5
  48. package/dist/Input/utils/getFocusableElements.d.ts.map +1 -1
  49. package/dist/InputDateUnstyled/index.d.ts +94 -0
  50. package/dist/InputDateUnstyled/index.d.ts.map +1 -0
  51. package/dist/InputDateUnstyled/index.js +406 -0
  52. package/dist/InputDateUnstyled/utils/convertHours.d.ts +4 -0
  53. package/dist/InputDateUnstyled/utils/convertHours.d.ts.map +1 -0
  54. package/dist/InputDateUnstyled/utils/convertHours.js +12 -0
  55. package/dist/InputDateUnstyled/utils/convertToFullYear.d.ts +3 -0
  56. package/dist/InputDateUnstyled/utils/convertToFullYear.d.ts.map +1 -0
  57. package/dist/InputDateUnstyled/utils/convertToFullYear.js +10 -0
  58. package/dist/InputDateUnstyled/utils/dateToString.d.ts +3 -0
  59. package/dist/InputDateUnstyled/utils/dateToString.d.ts.map +1 -0
  60. package/dist/InputDateUnstyled/utils/dateToString.js +10 -0
  61. package/dist/InputDateUnstyled/utils/daysInMonth.d.ts +7 -0
  62. package/dist/InputDateUnstyled/utils/daysInMonth.d.ts.map +1 -0
  63. package/dist/InputDateUnstyled/utils/daysInMonth.js +14 -0
  64. package/dist/InputDateUnstyled/utils/ensureCaretVisible.d.ts +3 -0
  65. package/dist/InputDateUnstyled/utils/ensureCaretVisible.d.ts.map +1 -0
  66. package/dist/InputDateUnstyled/utils/ensureCaretVisible.js +32 -0
  67. package/dist/InputDateUnstyled/utils/eraseSelectedTokens.d.ts +10 -0
  68. package/dist/InputDateUnstyled/utils/eraseSelectedTokens.d.ts.map +1 -0
  69. package/dist/InputDateUnstyled/utils/eraseSelectedTokens.js +29 -0
  70. package/dist/InputDateUnstyled/utils/replaceSubstring.d.ts +3 -0
  71. package/dist/InputDateUnstyled/utils/replaceSubstring.d.ts.map +1 -0
  72. package/dist/InputDateUnstyled/utils/replaceSubstring.js +9 -0
  73. package/dist/InputDateUnstyled/utils/same.d.ts +6 -0
  74. package/dist/InputDateUnstyled/utils/same.d.ts.map +1 -0
  75. package/dist/InputDateUnstyled/utils/same.js +3 -0
  76. package/dist/InputDateUnstyled/utils/stringToDay.d.ts +12 -0
  77. package/dist/InputDateUnstyled/utils/stringToDay.d.ts.map +1 -0
  78. package/dist/InputDateUnstyled/utils/stringToDay.js +55 -0
  79. package/dist/InputDateUnstyled/utils/stringToTime.d.ts +7 -0
  80. package/dist/InputDateUnstyled/utils/stringToTime.d.ts.map +1 -0
  81. package/dist/InputDateUnstyled/utils/stringToTime.js +40 -0
  82. package/dist/InputDateUnstyled/utils/token.d.ts +9 -0
  83. package/dist/InputDateUnstyled/utils/token.d.ts.map +1 -0
  84. package/dist/InputDateUnstyled/utils/token.js +66 -0
  85. package/dist/Link/index.d.ts.map +1 -1
  86. package/dist/Link/index.js +3 -8
  87. package/dist/LinkButton/index.d.ts.map +1 -1
  88. package/dist/LinkButton/index.js +0 -5
  89. package/dist/List/utils/bodyPointerEvents.d.ts.map +1 -1
  90. package/dist/List/utils/frameTimeout.d.ts.map +1 -1
  91. package/dist/List/utils/useRWLoadNext.d.ts.map +1 -1
  92. package/dist/LogoLink/index.d.ts.map +1 -1
  93. package/dist/LogoLink/index.js +1 -6
  94. package/dist/Menu/utils/useFocusWithArrows.d.ts.map +1 -1
  95. package/dist/Modal/index.d.ts +5 -0
  96. package/dist/Modal/index.d.ts.map +1 -1
  97. package/dist/Modal/index.js +53 -48
  98. package/dist/Navigation/utils/useScrollFlags.d.ts.map +1 -1
  99. package/dist/NavigationItem/index.d.ts.map +1 -1
  100. package/dist/NavigationItem/index.js +1 -6
  101. package/dist/Popover/utils/usePopoverPosition.d.ts.map +1 -1
  102. package/dist/ScrollButton/utils/useContainerPosition.d.ts.map +1 -1
  103. package/dist/ScrollButton/utils/useVisibility.d.ts.map +1 -1
  104. package/dist/Select/index.d.ts.map +1 -1
  105. package/dist/Select/index.js +2 -3
  106. package/dist/Switch/index.d.ts.map +1 -1
  107. package/dist/Switch/index.js +1 -7
  108. package/dist/TagLink/index.d.ts.map +1 -1
  109. package/dist/TagLink/index.js +1 -6
  110. package/dist/TimeGrid/index.d.ts +63 -0
  111. package/dist/TimeGrid/index.d.ts.map +1 -0
  112. package/dist/TimeGrid/index.js +111 -0
  113. package/dist/TimeGrid/utils/convertHours.d.ts +4 -0
  114. package/dist/TimeGrid/utils/convertHours.d.ts.map +1 -0
  115. package/dist/TimeGrid/utils/convertHours.js +12 -0
  116. package/dist/TimeGrid/utils/createTimes.d.ts +7 -0
  117. package/dist/TimeGrid/utils/createTimes.d.ts.map +1 -0
  118. package/dist/TimeGrid/utils/createTimes.js +15 -0
  119. package/dist/TimeGrid/utils/timeToString.d.ts +4 -0
  120. package/dist/TimeGrid/utils/timeToString.d.ts.map +1 -0
  121. package/dist/TimeGrid/utils/timeToString.js +12 -0
  122. package/dist/TimeGridSkeleton/index.d.ts +18 -0
  123. package/dist/TimeGridSkeleton/index.d.ts.map +1 -0
  124. package/dist/TimeGridSkeleton/index.js +33 -0
  125. package/dist/TimeList/index.d.ts +45 -0
  126. package/dist/TimeList/index.d.ts.map +1 -0
  127. package/dist/TimeList/index.js +80 -0
  128. package/dist/TimeList/utils/convertHours.d.ts +4 -0
  129. package/dist/TimeList/utils/convertHours.d.ts.map +1 -0
  130. package/dist/TimeList/utils/convertHours.js +12 -0
  131. package/dist/TimeList/utils/createTimes.d.ts +7 -0
  132. package/dist/TimeList/utils/createTimes.d.ts.map +1 -0
  133. package/dist/TimeList/utils/createTimes.js +15 -0
  134. package/dist/TimeList/utils/timeToString.d.ts +4 -0
  135. package/dist/TimeList/utils/timeToString.d.ts.map +1 -0
  136. package/dist/TimeList/utils/timeToString.js +12 -0
  137. package/dist/TimeListSkeleton/index.d.ts +13 -0
  138. package/dist/TimeListSkeleton/index.d.ts.map +1 -0
  139. package/dist/TimeListSkeleton/index.js +30 -0
  140. package/dist/index.d.ts +12 -0
  141. package/dist/index.d.ts.map +1 -1
  142. package/dist/index.js +12 -0
  143. package/dist/message/styles.d.ts.map +1 -1
  144. package/package.json +8 -8
  145. package/src/Button/index.tsx +1 -1
  146. package/src/ButtonLink/index.tsx +0 -5
  147. package/src/Checkbox/index.tsx +1 -6
  148. package/src/DateCalendar/Calendar.tsx +400 -0
  149. package/src/DateCalendar/MonthPicker.tsx +212 -0
  150. package/src/DateCalendar/index.tsx +135 -0
  151. package/src/DateCalendar/locale.ts +22 -0
  152. package/src/DateCalendar/utils/calendarDays.ts +61 -0
  153. package/src/DateCalendar/utils/dayOfWeek.ts +14 -0
  154. package/src/DateCalendar/utils/daysInMonth.ts +22 -0
  155. package/src/DateCalendar/utils/month.ts +30 -0
  156. package/src/DateCalendar/utils/shift.ts +14 -0
  157. package/src/DatePicker/index.tsx +506 -417
  158. package/src/DatePicker/utils/createTimes.ts +20 -0
  159. package/src/Input/index.tsx +11 -8
  160. package/src/InputDateUnstyled/index.tsx +533 -0
  161. package/src/InputDateUnstyled/utils/convertHours.ts +15 -0
  162. package/src/InputDateUnstyled/utils/convertToFullYear.ts +11 -0
  163. package/src/InputDateUnstyled/utils/dateToString.ts +21 -0
  164. package/src/InputDateUnstyled/utils/daysInMonth.ts +22 -0
  165. package/src/InputDateUnstyled/utils/ensureCaretVisible.ts +37 -0
  166. package/src/InputDateUnstyled/utils/eraseSelectedTokens.ts +38 -0
  167. package/src/InputDateUnstyled/utils/replaceSubstring.ts +10 -0
  168. package/src/InputDateUnstyled/utils/same.ts +15 -0
  169. package/src/InputDateUnstyled/utils/stringToDay.ts +69 -0
  170. package/src/InputDateUnstyled/utils/stringToTime.ts +48 -0
  171. package/src/InputDateUnstyled/utils/token.ts +102 -0
  172. package/src/Link/index.tsx +5 -25
  173. package/src/LinkButton/index.tsx +2 -15
  174. package/src/LogoLink/index.tsx +2 -6
  175. package/src/Modal/index.tsx +71 -60
  176. package/src/NavigationItem/index.tsx +2 -16
  177. package/src/Select/index.tsx +2 -3
  178. package/src/Switch/index.tsx +1 -11
  179. package/src/TagLink/index.tsx +3 -11
  180. package/src/TimeGrid/index.tsx +189 -0
  181. package/src/TimeGrid/utils/convertHours.ts +15 -0
  182. package/src/TimeGrid/utils/createTimes.ts +20 -0
  183. package/src/TimeGrid/utils/timeToString.ts +17 -0
  184. package/src/TimeGridSkeleton/index.tsx +50 -0
  185. package/src/TimeList/index.tsx +135 -0
  186. package/src/TimeList/utils/convertHours.ts +15 -0
  187. package/src/TimeList/utils/createTimes.ts +20 -0
  188. package/src/TimeList/utils/timeToString.ts +17 -0
  189. package/src/TimeListSkeleton/index.tsx +44 -0
  190. package/src/index.ts +12 -0
  191. package/dist/DatePicker/DatePickerCalendar.d.ts +0 -11
  192. package/dist/DatePicker/DatePickerCalendar.d.ts.map +0 -1
  193. package/dist/DatePicker/DatePickerCalendar.js +0 -178
  194. package/dist/TimePicker/index.d.ts +0 -29
  195. package/dist/TimePicker/index.d.ts.map +0 -1
  196. package/dist/TimePicker/index.js +0 -100
  197. package/src/DatePicker/DatePickerCalendar.tsx +0 -230
  198. 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,14 @@
1
+ interface Day {
2
+ year: number;
3
+ month: number;
4
+ day: number;
5
+ }
6
+
7
+ const date = new Date();
8
+
9
+ const dayOfWeek = (day: Day) => {
10
+ date.setFullYear(day.year, day.month, day.day);
11
+ return date.getDay();
12
+ };
13
+
14
+ export default dayOfWeek;
@@ -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;