@dxos/react-ui-calendar 0.8.4-main.2c6827d

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 (34) hide show
  1. package/LICENSE +8 -0
  2. package/README.md +1 -0
  3. package/dist/lib/browser/index.mjs +279 -0
  4. package/dist/lib/browser/index.mjs.map +7 -0
  5. package/dist/lib/browser/meta.json +1 -0
  6. package/dist/lib/node-esm/index.mjs +281 -0
  7. package/dist/lib/node-esm/index.mjs.map +7 -0
  8. package/dist/lib/node-esm/meta.json +1 -0
  9. package/dist/types/src/components/Calendar/Calendar.d.ts +47 -0
  10. package/dist/types/src/components/Calendar/Calendar.d.ts.map +1 -0
  11. package/dist/types/src/components/Calendar/Calendar.stories.d.ts +27 -0
  12. package/dist/types/src/components/Calendar/Calendar.stories.d.ts.map +1 -0
  13. package/dist/types/src/components/Calendar/index.d.ts +2 -0
  14. package/dist/types/src/components/Calendar/index.d.ts.map +1 -0
  15. package/dist/types/src/components/Calendar/util.d.ts +4 -0
  16. package/dist/types/src/components/Calendar/util.d.ts.map +1 -0
  17. package/dist/types/src/components/index.d.ts +2 -0
  18. package/dist/types/src/components/index.d.ts.map +1 -0
  19. package/dist/types/src/index.d.ts +2 -0
  20. package/dist/types/src/index.d.ts.map +1 -0
  21. package/dist/types/src/translations.d.ts +9 -0
  22. package/dist/types/src/translations.d.ts.map +1 -0
  23. package/dist/types/src/types.d.ts +175 -0
  24. package/dist/types/src/types.d.ts.map +1 -0
  25. package/dist/types/tsconfig.tsbuildinfo +1 -0
  26. package/package.json +64 -0
  27. package/src/components/Calendar/Calendar.stories.tsx +76 -0
  28. package/src/components/Calendar/Calendar.tsx +318 -0
  29. package/src/components/Calendar/index.ts +5 -0
  30. package/src/components/Calendar/util.ts +22 -0
  31. package/src/components/index.ts +5 -0
  32. package/src/index.ts +5 -0
  33. package/src/translations.ts +17 -0
  34. package/src/types.ts +193 -0
package/src/types.ts ADDED
@@ -0,0 +1,193 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { type Locale } from 'date-fns';
6
+ import { type RefObject } from 'react';
7
+
8
+ /**
9
+ * Calendar types and interfaces.
10
+ */
11
+
12
+ export type DateString = string; // YYYY-MM-DD format
13
+
14
+ export type DisplayMode = 'days' | 'years';
15
+
16
+ export type LayoutMode = 'portrait' | 'landscape';
17
+
18
+ /**
19
+ * Locale configuration for the calendar.
20
+ */
21
+ export interface CalendarLocale {
22
+ blank?: string;
23
+ headerFormat?: string;
24
+ todayLabel?: {
25
+ long: string;
26
+ short?: string;
27
+ };
28
+ weekdays?: string[];
29
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6;
30
+ locale?: Locale; // date-fns locale
31
+ }
32
+
33
+ /**
34
+ * Theme configuration for the calendar.
35
+ */
36
+ export interface CalendarTheme {
37
+ floatingNav?: {
38
+ background?: string;
39
+ chevron?: string;
40
+ color?: string;
41
+ };
42
+ headerColor?: string;
43
+ selectionColor?: string | ((date: DateString) => string);
44
+ textColor?: {
45
+ active?: string;
46
+ default?: string;
47
+ };
48
+ todayColor?: string;
49
+ weekdayColor?: string;
50
+ overlayColor?: string;
51
+ }
52
+
53
+ /**
54
+ * Display options for the calendar.
55
+ */
56
+ export interface DisplayOptions {
57
+ hideYearsOnSelect?: boolean;
58
+ layout?: LayoutMode;
59
+ overscanMonthCount?: number;
60
+ shouldHeaderAnimate?: boolean;
61
+ showHeader?: boolean;
62
+ showMonthsForYears?: boolean;
63
+ showOverlay?: boolean;
64
+ showTodayHelper?: boolean;
65
+ showWeekdays?: boolean;
66
+ todayHelperRowOffset?: number;
67
+ }
68
+
69
+ /**
70
+ * Month data structure.
71
+ */
72
+ export interface MonthData {
73
+ month: number;
74
+ year: number;
75
+ }
76
+
77
+ /**
78
+ * Month rendering data.
79
+ */
80
+ export interface MonthRenderData {
81
+ date: Date;
82
+ rows: number[][];
83
+ }
84
+
85
+ /**
86
+ * Day props for rendering.
87
+ */
88
+ export interface DayProps {
89
+ date: DateString;
90
+ day: number;
91
+ month: number;
92
+ year: number;
93
+ monthShort: string;
94
+ currentYear: number;
95
+ isDisabled: boolean;
96
+ isToday: boolean;
97
+ isSelected: boolean;
98
+ isHighlighted?: boolean;
99
+ onClick?: (date: Date) => void;
100
+ handlers?: Record<string, any>;
101
+ className?: string;
102
+ }
103
+
104
+ /**
105
+ * Calendar props.
106
+ */
107
+ export interface CalendarProps {
108
+ autoFocus?: boolean;
109
+ className?: string;
110
+ disabledDates?: Date[];
111
+ disabledDays?: number[];
112
+ display?: DisplayMode;
113
+ displayOptions?: DisplayOptions;
114
+ height?: number;
115
+ keyboardSupport?: boolean;
116
+ locale?: CalendarLocale;
117
+ max?: Date;
118
+ maxDate?: Date;
119
+ min?: Date;
120
+ minDate?: Date;
121
+ onScroll?: (scrollTop: number, event?: Event) => void;
122
+ onScrollEnd?: (scrollTop: number) => void;
123
+ onSelect?: (date: Date) => void;
124
+ onHighlightedDateChange?: (date: Date) => void;
125
+ rowHeight?: number;
126
+ scrollDate?: Date;
127
+ selected?: Date | DateString;
128
+ tabIndex?: number;
129
+ theme?: CalendarTheme;
130
+ width?: number | string;
131
+ }
132
+
133
+ /**
134
+ * Month props.
135
+ */
136
+ export interface MonthProps {
137
+ monthDate: Date;
138
+ rows: number[][];
139
+ rowHeight: number;
140
+ selected?: DateString;
141
+ disabledDates?: DateString[];
142
+ disabledDays?: number[];
143
+ minDate: Date;
144
+ maxDate: Date;
145
+ today: Date;
146
+ locale: Required<CalendarLocale>;
147
+ theme: Required<CalendarTheme>;
148
+ showOverlay?: boolean;
149
+ isScrolling?: boolean;
150
+ onDayClick?: (date: Date) => void;
151
+ }
152
+
153
+ /**
154
+ * Hook return types for headless implementation.
155
+ */
156
+ export interface UseCalendarReturn {
157
+ containerProps: {
158
+ ref: RefObject<HTMLDivElement>;
159
+ tabIndex?: number;
160
+ className?: string;
161
+ 'aria-label': string;
162
+ };
163
+ display: DisplayMode;
164
+ locale: Required<CalendarLocale>;
165
+ theme: Required<CalendarTheme>;
166
+ displayOptions: Required<DisplayOptions>;
167
+ months: MonthData[];
168
+ today: Date;
169
+ scrollToDate: (date: Date, offset?: number, shouldAnimate?: boolean) => void;
170
+ scrollTo: (offset: number) => void;
171
+ getCurrentOffset: () => number;
172
+ getDateOffset: (date: Date) => number;
173
+ setDisplay: (display: DisplayMode) => void;
174
+ }
175
+
176
+ export interface UseDayReturn {
177
+ dayProps: {
178
+ onClick: () => void;
179
+ 'data-date': DateString;
180
+ className?: string;
181
+ };
182
+ isSelected: boolean;
183
+ isToday: boolean;
184
+ isDisabled: boolean;
185
+ isHighlighted: boolean;
186
+ selectionColor?: string;
187
+ }
188
+
189
+ export interface UseMonthReturn {
190
+ days: DayProps[];
191
+ monthLabel: string;
192
+ showOverlay: boolean;
193
+ }