react-photo-calendar 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +220 -0
  3. package/dist/PhotoCalendar.d.ts +98 -0
  4. package/dist/PhotoCalendar.d.ts.map +1 -0
  5. package/dist/components/CalendarBanner.d.ts +17 -0
  6. package/dist/components/CalendarBanner.d.ts.map +1 -0
  7. package/dist/components/PhotoCalendarScrollView.d.ts +24 -0
  8. package/dist/components/PhotoCalendarScrollView.d.ts.map +1 -0
  9. package/dist/context/PhotoCalendarContext.d.ts +9 -0
  10. package/dist/context/PhotoCalendarContext.d.ts.map +1 -0
  11. package/dist/hooks/useCalendarActiveMonthTracking.d.ts +14 -0
  12. package/dist/hooks/useCalendarActiveMonthTracking.d.ts.map +1 -0
  13. package/dist/hooks/useCalendarMonthVisibility.d.ts +18 -0
  14. package/dist/hooks/useCalendarMonthVisibility.d.ts.map +1 -0
  15. package/dist/hooks/useCalendarMonthWindow.d.ts +18 -0
  16. package/dist/hooks/useCalendarMonthWindow.d.ts.map +1 -0
  17. package/dist/hooks/useCalendarWindowExpansionObserver.d.ts +17 -0
  18. package/dist/hooks/useCalendarWindowExpansionObserver.d.ts.map +1 -0
  19. package/dist/hooks/usePhotoCalendarState.d.ts +73 -0
  20. package/dist/hooks/usePhotoCalendarState.d.ts.map +1 -0
  21. package/dist/index.d.ts +11 -0
  22. package/dist/index.d.ts.map +1 -0
  23. package/dist/photo-calendar.cjs +22 -0
  24. package/dist/photo-calendar.css +1 -0
  25. package/dist/photo-calendar.mjs +1099 -0
  26. package/dist/primitives/PhotoCalendarDay.d.ts +7 -0
  27. package/dist/primitives/PhotoCalendarDay.d.ts.map +1 -0
  28. package/dist/primitives/PhotoCalendarMonthGrid.d.ts +17 -0
  29. package/dist/primitives/PhotoCalendarMonthGrid.d.ts.map +1 -0
  30. package/dist/primitives/PhotoCalendarNavigation.d.ts +17 -0
  31. package/dist/primitives/PhotoCalendarNavigation.d.ts.map +1 -0
  32. package/dist/primitives/PhotoCalendarRoot.d.ts +7 -0
  33. package/dist/primitives/PhotoCalendarRoot.d.ts.map +1 -0
  34. package/dist/primitives/PhotoCalendarWeekdays.d.ts +15 -0
  35. package/dist/primitives/PhotoCalendarWeekdays.d.ts.map +1 -0
  36. package/dist/types/calendar.d.ts +25 -0
  37. package/dist/types/calendar.d.ts.map +1 -0
  38. package/dist/types/photo.d.ts +15 -0
  39. package/dist/types/photo.d.ts.map +1 -0
  40. package/dist/utils/calendar.d.ts +15 -0
  41. package/dist/utils/calendar.d.ts.map +1 -0
  42. package/dist/utils/photos.d.ts +6 -0
  43. package/dist/utils/photos.d.ts.map +1 -0
  44. package/package.json +89 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Leonardo Merza
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,220 @@
1
+ # react-photo-calendar
2
+
3
+ This folder hosts the stand-alone React + Vite workspace for the photo calendar
4
+ library. The code will eventually move into its own repository; for now it lives
5
+ alongside the main product so the team can iterate while shaping the public API
6
+ and reference playground.
7
+
8
+ ## Installation
9
+
10
+ ```bash
11
+ npm install react-photo-calendar
12
+ ```
13
+
14
+ `react` and `react-dom` are peer dependencies (`^18.2.0 || ^19.0.0`) — the package
15
+ does not bundle its own copy.
16
+
17
+ ```tsx
18
+ import { PhotoCalendar } from 'react-photo-calendar';
19
+ import 'react-photo-calendar/styles.css'; // optional reference styling
20
+
21
+ export function App() {
22
+ return <PhotoCalendar monthKey="2030-01" />;
23
+ }
24
+ ```
25
+
26
+ The stylesheet is optional: the primitives are headless, and `styles.css` only
27
+ carries the reference UI used by the `PhotoCalendar` convenience component.
28
+
29
+ ## Getting started
30
+
31
+ ```bash
32
+ npm install
33
+ npm run dev
34
+ ```
35
+
36
+ The Storybook dev server replaces the old Vite playground and hosts interactive
37
+ examples for the headless primitives (`npm run storybook` is available as an explicit alias).
38
+ See `docs/storybook-guide.md` for more details. The `build` script bundles the
39
+ library in ESM and CJS formats and emits TypeScript declarations that match the
40
+ contract outlined in ADR-009.
41
+
42
+ ## Project layout
43
+
44
+ - `src/index.ts` – public exports for the library package.
45
+ - `src/PhotoCalendar.tsx` – convenience component that composes the headless primitives with the reference UI (including the optional scroll timeline).
46
+ - `src/components/PhotoCalendarScrollView.tsx` – mobile-first scroll navigation shell consumed when `navigationMode="scroll"`.
47
+ - `src/primitives/` – `PhotoCalendarRoot`, `PhotoCalendarNavigation`, `PhotoCalendarWeekdays`, `PhotoCalendarMonthGrid`, and `PhotoCalendarDay` headless building blocks.
48
+ - `src/hooks/usePhotoCalendarState.ts` – shared state hook consumed by both the convenience component and primitives.
49
+ - `.storybook/` – Storybook configuration powered by the React + Vite framework preset.
50
+ - `src/stories/` – Storybook stories demonstrating the default calendar and headless compositions.
51
+ - `vite.config.ts` – configures library builds and test environment defaults.
52
+
53
+ ## Composing your own UI
54
+
55
+ The new primitives let you mix and match calendar state with custom controls:
56
+
57
+ ```tsx
58
+ import {
59
+ PhotoCalendarRoot,
60
+ PhotoCalendarNavigation,
61
+ PhotoCalendarNavigationLayout,
62
+ PhotoCalendarNavigationControls,
63
+ PhotoCalendarNavigationPrevMonthButton,
64
+ PhotoCalendarNavigationMonthChips,
65
+ PhotoCalendarNavigationNextMonthButton,
66
+ PhotoCalendarNavigationTodayButton,
67
+ PhotoCalendarWeekdays,
68
+ PhotoCalendarMonthGrid,
69
+ PhotoCalendarDay,
70
+ usePhotoCalendarContext,
71
+ } from 'react-photo-calendar';
72
+
73
+ function MyNavigation() {
74
+ const { monthLabel } = usePhotoCalendarContext('MyNavigation');
75
+
76
+ return (
77
+ <PhotoCalendarNavigationLayout>
78
+ <PhotoCalendarNavigationControls>
79
+ <PhotoCalendarNavigationPrevMonthButton />
80
+ <PhotoCalendarNavigationNextMonthButton />
81
+ <PhotoCalendarNavigationTodayButton />
82
+ <span style={{ fontWeight: 600 }}>{monthLabel}</span>
83
+ </PhotoCalendarNavigationControls>
84
+ <PhotoCalendarNavigationMonthChips />
85
+ </PhotoCalendarNavigationLayout>
86
+ );
87
+ }
88
+
89
+ export function MyCalendar() {
90
+ return (
91
+ <PhotoCalendarRoot defaultMonthKey="2030-01">
92
+ {(state) => (
93
+ <div role="grid" aria-label={`Photo calendar for ${state.monthLabel}`}>
94
+ <MyNavigation />
95
+ <PhotoCalendarWeekdays />
96
+ <PhotoCalendarMonthGrid
97
+ renderDay={(props) => (
98
+ <PhotoCalendarDay
99
+ day={{
100
+ ...props,
101
+ defaultContent: (
102
+ <div
103
+ style={{
104
+ borderRadius: '12px',
105
+ overflow: 'hidden',
106
+ outline: props.isToday ? '2px solid #f97316' : 'none',
107
+ outlineOffset: props.isToday ? '2px' : undefined
108
+ }}
109
+ >
110
+ {props.defaultContent}
111
+ </div>
112
+ )
113
+ }}
114
+ />
115
+ )}
116
+ />
117
+ </div>
118
+ )}
119
+ </PhotoCalendarRoot>
120
+ );
121
+ }
122
+ ```
123
+
124
+ Each primitive exposes render props so you can override just the pieces you need—see `docs/photo-calendar-render-props.md` for the full contract. If you prefer to stay on the convenience component, pass `renderNavigation`, `renderWeekdays`, or `renderDay` props to inject custom controls, or keep using the legacy `renderDayContent` helper. `PhotoCalendar` continues to provide the original all-in-one experience if you don’t need custom controls.
125
+
126
+ Navigation can also be assembled from the exported buttons and layout helpers (`PhotoCalendarNavigationLayout`, `PhotoCalendarNavigationPrevMonthButton`, etc.), letting you mix stock behaviour with bespoke markup without threading handlers manually.
127
+
128
+ ```tsx
129
+ import { PhotoCalendar, PhotoCalendarDay } from 'react-photo-calendar';
130
+
131
+ <PhotoCalendar
132
+ renderDay={(props) => (
133
+ <PhotoCalendarDay
134
+ day={{
135
+ ...props,
136
+ defaultContent: (
137
+ <div
138
+ style={{
139
+ borderRadius: '12px',
140
+ overflow: 'hidden',
141
+ outline: props.isToday ? '2px solid #f97316' : 'none',
142
+ outlineOffset: props.isToday ? '2px' : undefined
143
+ }}
144
+ >
145
+ {props.defaultContent}
146
+ </div>
147
+ )
148
+ }}
149
+ />
150
+ )}
151
+ />
152
+ ```
153
+
154
+ Use `monthKey` + `onMonthChange` to control the visible month externally, or prefer `defaultMonthKey` for uncontrolled usage while still receiving navigation callbacks. `onDaySelect` emits both ISO and native `Date` values so consumers can open detail views, modals, or drawers.
155
+
156
+ `renderDayContent` receives the same `DayRenderContext` as before plus a `defaultContent` field—return it when you want to append to the stock thumbnails/day number layout instead of replacing it outright. Theme variables are documented in `docs/photo-calendar-design-tokens.md` so you can override colours/radii without touching JSX.
157
+
158
+ Once the component architecture stabilizes, this folder can be promoted into a stand-alone repository without significant changes—package metadata already assumes an eventual npm distribution.
159
+
160
+ ## Mobile scroll timeline
161
+
162
+ Set `navigationMode="scroll"` on `PhotoCalendar` (or mount `PhotoCalendarScrollView` yourself) to swap the legacy button banner for the vertically scrolling timeline. The scroll shell keeps a small window of months mounted, sticks each month header to the top edge, and emits `onVisibleMonthChange` whenever the leading month shifts—ideal for lazy-loading more photo data as users skim the timeline.
163
+
164
+ ```tsx
165
+ const loadMonth = (monthKey: string) => {
166
+ // trigger fetch logic here
167
+ };
168
+
169
+ export function MobileTimeline() {
170
+ const pending = useRef(new Set<string>());
171
+
172
+ const prefetchCluster = useCallback((key: string) => {
173
+ if (pending.current.has(key)) return;
174
+ pending.current.add(key);
175
+ loadMonth(key).finally(() => pending.current.delete(key));
176
+ }, []);
177
+
178
+ return (
179
+ <PhotoCalendar
180
+ navigationMode="scroll"
181
+ onVisibleMonthChange={(key) => {
182
+ prefetchCluster(key);
183
+ // grab adjacent months via scroll state helpers if needed
184
+ }}
185
+ scrollMaxRenderedMonths={7}
186
+ />
187
+ );
188
+ }
189
+
190
+ // Access scroll helpers via the context when you need neighbouring keys
191
+ export function PrefetchingTimeline() {
192
+ // assumes PhotoCalendarScrollView + PhotoCalendarScrollState are imported
193
+ const scrollRef = useRef<PhotoCalendarScrollState | null>(null);
194
+
195
+ return (
196
+ <PhotoCalendarRoot
197
+ onVisibleMonthChange={(key) => {
198
+ const scroll = scrollRef.current;
199
+ if (!scroll) {
200
+ return;
201
+ }
202
+ const neighbours = [
203
+ scroll.getAdjacentMonthKey(key, -1),
204
+ key,
205
+ scroll.getAdjacentMonthKey(key, 1)
206
+ ].filter(Boolean) as string[];
207
+
208
+ neighbours.forEach(loadMonth);
209
+ }}
210
+ >
211
+ {(state) => {
212
+ scrollRef.current = state.scroll;
213
+ return <PhotoCalendarScrollView />;
214
+ }}
215
+ </PhotoCalendarRoot>
216
+ );
217
+ }
218
+ ```
219
+
220
+ Advanced consumers can access the scroll helpers (`getMonthSnapshot`, `getAdjacentMonthKey`, `syncVisibleMonth`) exposed on `state.scroll` by rendering through `PhotoCalendarRoot`. The helpers make it easy to prefetch neighbouring months, jump to specific anchors, or compute analytics without coupling to component internals.
@@ -0,0 +1,98 @@
1
+ import type { HTMLAttributes, ReactNode } from 'react';
2
+ import './PhotoCalendar.css';
3
+ import { type NavigationRenderProps } from './primitives/PhotoCalendarNavigation';
4
+ import { type WeekdayRenderProps } from './primitives/PhotoCalendarWeekdays';
5
+ import { type DayRenderProps } from './primitives/PhotoCalendarMonthGrid';
6
+ import type { DayRenderContext, VisibleRange } from './types/calendar';
7
+ import type { PhotoEntry } from './types/photo';
8
+ export type { DayRenderContext, PhotoEntry, VisibleRange };
9
+ export interface PhotoCalendarProps extends HTMLAttributes<HTMLDivElement> {
10
+ /**
11
+ * Visible month identifier (ISO yyyy-mm) used for quick visual validation while the real library takes shape.
12
+ */
13
+ monthKey?: string;
14
+ /**
15
+ * Default month identifier used when the component manages its own state.
16
+ */
17
+ defaultMonthKey?: string;
18
+ /**
19
+ * Fired when navigation arrows request a month change. Receives ISO yyyy-mm strings.
20
+ */
21
+ onMonthChange?: (nextMonthKey: string) => void;
22
+ /**
23
+ * Fired when the user activates a day cell. Receives the ISO date (yyyy-mm-dd) and native `Date` instance.
24
+ */
25
+ onDaySelect?: (info: {
26
+ isoDate: string;
27
+ date: Date;
28
+ }) => void;
29
+ /**
30
+ * Index of the first day of the week (0 = Sunday, 1 = Monday, ...).
31
+ * Keeps the placeholder grid alignment consistent with locale expectations.
32
+ */
33
+ firstDayOfWeek?: 0 | 1 | 2 | 3 | 4 | 5 | 6;
34
+ /**
35
+ * Array of photo entries with datetime and photos array. First entries become day thumbnails.
36
+ */
37
+ entries?: PhotoEntry[];
38
+ /**
39
+ * Maximum thumbnails to show per day before showing a +X overflow badge.
40
+ * Defaults to 1 to mimic the Tinybeans hero-photo layout.
41
+ */
42
+ maxThumbnailsPerDay?: number;
43
+ /**
44
+ * Optional minimum bound for navigation (ISO yyyy-mm).
45
+ */
46
+ minMonthKey?: string;
47
+ /**
48
+ * Optional maximum bound for navigation (ISO yyyy-mm).
49
+ */
50
+ maxMonthKey?: string;
51
+ /**
52
+ * Fired whenever the visible calendar range (including leading/trailing placeholders) changes.
53
+ */
54
+ onRangeChange?: (range: VisibleRange) => void;
55
+ /**
56
+ * Fired when the scroll timeline promotes a new month into the active position.
57
+ */
58
+ onVisibleMonthChange?: (monthKey: string) => void;
59
+ /**
60
+ * Locale override used for weekday/month labels. Defaults to browser locale.
61
+ */
62
+ locale?: string;
63
+ /**
64
+ * Optional timeZone passed to Intl formatters.
65
+ */
66
+ timeZone?: string;
67
+ /**
68
+ * Slot to customise the content rendered inside each day cell.
69
+ */
70
+ renderDayContent?: (context: DayRenderContext) => ReactNode;
71
+ /**
72
+ * New slot to customise the entire day cell button. Receives extended render props.
73
+ */
74
+ renderDay?: (props: DayRenderProps) => ReactNode;
75
+ /**
76
+ * Optional slot to customise navigation controls.
77
+ */
78
+ renderNavigation?: (props: NavigationRenderProps) => ReactNode;
79
+ /**
80
+ * Optional slot to customise weekday headers.
81
+ */
82
+ renderWeekdays?: (props: WeekdayRenderProps) => ReactNode;
83
+ /**
84
+ * Optional slot for dev-only scaffolding while the headless primitives are built.
85
+ */
86
+ children?: ReactNode;
87
+ /**
88
+ * Switch between legacy control navigation and the mobile scroll timeline.
89
+ * Defaults to "controls" for backward compatibility.
90
+ */
91
+ navigationMode?: 'controls' | 'scroll';
92
+ /**
93
+ * Maximum number of months to keep mounted when `navigationMode` is "scroll".
94
+ */
95
+ scrollMaxRenderedMonths?: number;
96
+ }
97
+ export declare function PhotoCalendar({ monthKey, defaultMonthKey, onMonthChange, onDaySelect, firstDayOfWeek, entries, maxThumbnailsPerDay, minMonthKey, maxMonthKey, onRangeChange, onVisibleMonthChange, locale, timeZone, renderDayContent, renderDay, renderNavigation, renderWeekdays, children, navigationMode, scrollMaxRenderedMonths, ...rest }: PhotoCalendarProps): import("react/jsx-runtime").JSX.Element;
98
+ //# sourceMappingURL=PhotoCalendar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PhotoCalendar.d.ts","sourceRoot":"","sources":["../src/PhotoCalendar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvD,OAAO,qBAAqB,CAAC;AAE7B,OAAO,EAA2B,KAAK,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAC3G,OAAO,EAAyB,KAAK,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACpG,OAAO,EAA0B,KAAK,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAGlG,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACvE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD,YAAY,EAAE,gBAAgB,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC;AAE3D,MAAM,WAAW,kBAAmB,SAAQ,cAAc,CAAC,cAAc,CAAC;IACxE;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;OAEG;IACH,aAAa,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/C;;OAEG;IACH,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,IAAI,CAAA;KAAE,KAAK,IAAI,CAAC;IAC9D;;;OAGG;IACH,cAAc,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC3C;;OAEG;IACH,OAAO,CAAC,EAAE,UAAU,EAAE,CAAC;IACvB;;;OAGG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IAC9C;;OAEG;IACH,oBAAoB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAClD;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,SAAS,CAAC;IAC5D;;OAEG;IACH,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,SAAS,CAAC;IACjD;;OAEG;IACH,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,qBAAqB,KAAK,SAAS,CAAC;IAC/D;;OAEG;IACH,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,SAAS,CAAC;IAC1D;;OAEG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB;;;OAGG;IACH,cAAc,CAAC,EAAE,UAAU,GAAG,QAAQ,CAAC;IACvC;;OAEG;IACH,uBAAuB,CAAC,EAAE,MAAM,CAAC;CAClC;AAED,wBAAgB,aAAa,CAAC,EAC5B,QAAQ,EACR,eAAe,EACf,aAAa,EACb,WAAW,EACX,cAAkB,EAClB,OAAO,EACP,mBAAuB,EACvB,WAAW,EACX,WAAW,EACX,aAAa,EACb,oBAAoB,EACpB,MAAM,EACN,QAAQ,EACR,gBAAgB,EAChB,SAAS,EACT,gBAAgB,EAChB,cAAc,EACd,QAAQ,EACR,cAA2B,EAC3B,uBAAuB,EACvB,GAAG,IAAI,EACR,EAAE,kBAAkB,2CA2DpB"}
@@ -0,0 +1,17 @@
1
+ import type { ReactNode } from 'react';
2
+ export declare function PhotoCalendarNavigationLayout({ children }: {
3
+ children: ReactNode;
4
+ }): import("react/jsx-runtime").JSX.Element;
5
+ export declare function PhotoCalendarNavigationYearHeading(): import("react/jsx-runtime").JSX.Element;
6
+ export declare function PhotoCalendarNavigationControls({ children }: {
7
+ children: ReactNode;
8
+ }): import("react/jsx-runtime").JSX.Element;
9
+ export declare function PhotoCalendarNavigationPrevYearButton(): import("react/jsx-runtime").JSX.Element;
10
+ export declare function PhotoCalendarNavigationNextYearButton(): import("react/jsx-runtime").JSX.Element;
11
+ export declare function PhotoCalendarNavigationPrevMonthButton(): import("react/jsx-runtime").JSX.Element;
12
+ export declare function PhotoCalendarNavigationNextMonthButton(): import("react/jsx-runtime").JSX.Element;
13
+ export declare function PhotoCalendarNavigationMonthChips(): import("react/jsx-runtime").JSX.Element;
14
+ export declare function PhotoCalendarNavigationMonthLabelMobile(): import("react/jsx-runtime").JSX.Element;
15
+ export declare function PhotoCalendarNavigationTodayButton(): import("react/jsx-runtime").JSX.Element;
16
+ export declare function CalendarBanner(): import("react/jsx-runtime").JSX.Element;
17
+ //# sourceMappingURL=CalendarBanner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CalendarBanner.d.ts","sourceRoot":"","sources":["../../src/components/CalendarBanner.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,wBAAgB,6BAA6B,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,2CAElF;AAED,wBAAgB,kCAAkC,4CAOjD;AAED,wBAAgB,+BAA+B,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,2CAEpF;AAOD,wBAAgB,qCAAqC,4CAcpD;AAED,wBAAgB,qCAAqC,4CAcpD;AAED,wBAAgB,sCAAsC,4CAcrD;AAED,wBAAgB,sCAAsC,4CAcrD;AAED,wBAAgB,iCAAiC,4CAqBhD;AAED,wBAAgB,uCAAuC,4CAOtD;AAED,wBAAgB,kCAAkC,4CAajD;AAED,wBAAgB,cAAc,4CAe7B"}
@@ -0,0 +1,24 @@
1
+ import type { HTMLAttributes, ReactNode } from 'react';
2
+ import { type WeekdayRenderProps } from '../primitives/PhotoCalendarWeekdays';
3
+ import type { DayRenderProps } from '../types/calendar';
4
+ export interface PhotoCalendarScrollViewProps extends HTMLAttributes<HTMLDivElement> {
5
+ /**
6
+ * Custom renderer for day cells.
7
+ */
8
+ renderDay?: (props: DayRenderProps) => ReactNode;
9
+ /**
10
+ * Custom renderer for weekday headers.
11
+ */
12
+ renderWeekdays?: (props: WeekdayRenderProps) => ReactNode;
13
+ /**
14
+ * Optional developer scaffolding slot rendered inside the scroll view container.
15
+ */
16
+ children?: ReactNode;
17
+ /**
18
+ * Maximum number of month sections to keep mounted at once.
19
+ * Defaults to 7 which keeps memory in check while preserving scroll continuity.
20
+ */
21
+ maxRenderedMonths?: number;
22
+ }
23
+ export declare function PhotoCalendarScrollView({ renderDay, renderWeekdays, children, maxRenderedMonths, className, ...rest }: PhotoCalendarScrollViewProps): import("react/jsx-runtime").JSX.Element;
24
+ //# sourceMappingURL=PhotoCalendarScrollView.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PhotoCalendarScrollView.d.ts","sourceRoot":"","sources":["../../src/components/PhotoCalendarScrollView.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIvD,OAAO,EAAyB,KAAK,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AACrG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGxD,MAAM,WAAW,4BAA6B,SAAQ,cAAc,CAAC,cAAc,CAAC;IAClF;;OAEG;IACH,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,SAAS,CAAC;IACjD;;OAEG;IACH,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,SAAS,CAAC;IAC1D;;OAEG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAQD,wBAAgB,uBAAuB,CAAC,EACtC,SAAS,EACT,cAAc,EACd,QAAQ,EACR,iBAA+C,EAC/C,SAAS,EACT,GAAG,IAAI,EACR,EAAE,4BAA4B,2CA4R9B"}
@@ -0,0 +1,9 @@
1
+ import type { ReactNode } from 'react';
2
+ import type { PhotoCalendarState } from '../hooks/usePhotoCalendarState';
3
+ export interface PhotoCalendarContextProviderProps {
4
+ value: PhotoCalendarState;
5
+ children: ReactNode;
6
+ }
7
+ export declare function PhotoCalendarContextProvider({ value, children }: PhotoCalendarContextProviderProps): import("react/jsx-runtime").JSX.Element;
8
+ export declare function usePhotoCalendarContext(componentName?: string): PhotoCalendarState;
9
+ //# sourceMappingURL=PhotoCalendarContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PhotoCalendarContext.d.ts","sourceRoot":"","sources":["../../src/context/PhotoCalendarContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAMzE,MAAM,WAAW,iCAAiC;IAChD,KAAK,EAAE,kBAAkB,CAAC;IAC1B,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,wBAAgB,4BAA4B,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,iCAAiC,2CAElG;AAED,wBAAgB,uBAAuB,CAAC,aAAa,SAA4B,GAAG,kBAAkB,CAQrG"}
@@ -0,0 +1,14 @@
1
+ import type { MutableRefObject, RefObject } from 'react';
2
+ import type { PhotoCalendarScrollState } from './usePhotoCalendarState';
3
+ import type { MonthRefsMap } from './useCalendarMonthWindow';
4
+ interface UseCalendarActiveMonthTrackingParams {
5
+ containerRef: RefObject<HTMLDivElement>;
6
+ monthRefs: MutableRefObject<MonthRefsMap>;
7
+ monthKeys: string[];
8
+ visibleMonthKey: string;
9
+ scroll: PhotoCalendarScrollState;
10
+ ensureMonthInWindow: (targetKey: string) => void;
11
+ }
12
+ export declare function useCalendarActiveMonthTracking({ containerRef, monthRefs, monthKeys, visibleMonthKey, scroll, ensureMonthInWindow, }: UseCalendarActiveMonthTrackingParams): string;
13
+ export {};
14
+ //# sourceMappingURL=useCalendarActiveMonthTracking.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCalendarActiveMonthTracking.d.ts","sourceRoot":"","sources":["../../src/hooks/useCalendarActiveMonthTracking.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACzD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAE7D,UAAU,oCAAoC;IAC5C,YAAY,EAAE,SAAS,CAAC,cAAc,CAAC,CAAC;IACxC,SAAS,EAAE,gBAAgB,CAAC,YAAY,CAAC,CAAC;IAC1C,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,wBAAwB,CAAC;IACjC,mBAAmB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CAClD;AAED,wBAAgB,8BAA8B,CAAC,EAC7C,YAAY,EACZ,SAAS,EACT,SAAS,EACT,eAAe,EACf,MAAM,EACN,mBAAmB,GACpB,EAAE,oCAAoC,UA2KtC"}
@@ -0,0 +1,18 @@
1
+ import type { MutableRefObject, RefObject } from 'react';
2
+ import type { MonthRefsMap } from './useCalendarMonthWindow';
3
+ interface UseCalendarMonthVisibilityParams {
4
+ containerRef: RefObject<HTMLDivElement | null>;
5
+ monthRefs: MutableRefObject<MonthRefsMap>;
6
+ monthKeys: string[];
7
+ /**
8
+ * IntersectionObserver threshold. Defaults to 0.01 (1% in view).
9
+ */
10
+ threshold?: number;
11
+ /**
12
+ * Root margin for the observer.
13
+ */
14
+ rootMargin?: string;
15
+ }
16
+ export declare function useCalendarMonthVisibility({ containerRef, monthRefs, monthKeys, threshold, rootMargin, }: UseCalendarMonthVisibilityParams): Set<string>;
17
+ export {};
18
+ //# sourceMappingURL=useCalendarMonthVisibility.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCalendarMonthVisibility.d.ts","sourceRoot":"","sources":["../../src/hooks/useCalendarMonthVisibility.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAE7D,UAAU,gCAAgC;IACxC,YAAY,EAAE,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAC/C,SAAS,EAAE,gBAAgB,CAAC,YAAY,CAAC,CAAC;IAC1C,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,0BAA0B,CAAC,EACzC,YAAY,EACZ,SAAS,EACT,SAAS,EACT,SAAgB,EAChB,UAAU,GACX,EAAE,gCAAgC,eAiElC"}
@@ -0,0 +1,18 @@
1
+ import type { MutableRefObject } from 'react';
2
+ import type { PhotoCalendarScrollState } from './usePhotoCalendarState';
3
+ export type MonthRefsMap = Map<string, HTMLElement>;
4
+ interface UseCalendarMonthWindowParams {
5
+ scroll: PhotoCalendarScrollState;
6
+ visibleMonthKey: string;
7
+ maxMountedMonths: number;
8
+ }
9
+ export interface CalendarMonthWindowResult {
10
+ monthKeys: string[];
11
+ registerMonthRef: (key: string) => (node: HTMLElement | null) => void;
12
+ monthRefs: MutableRefObject<MonthRefsMap>;
13
+ extendWindow: (direction: 'prev' | 'next') => void;
14
+ ensureMonthInWindow: (targetKey: string) => void;
15
+ }
16
+ export declare function useCalendarMonthWindow({ scroll, visibleMonthKey, maxMountedMonths, }: UseCalendarMonthWindowParams): CalendarMonthWindowResult;
17
+ export {};
18
+ //# sourceMappingURL=useCalendarMonthWindow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCalendarMonthWindow.d.ts","sourceRoot":"","sources":["../../src/hooks/useCalendarMonthWindow.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAC;AAC9C,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AAExE,MAAM,MAAM,YAAY,GAAG,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AAEpD,UAAU,4BAA4B;IACpC,MAAM,EAAE,wBAAwB,CAAC;IACjC,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,yBAAyB;IACxC,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,gBAAgB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAC;IACtE,SAAS,EAAE,gBAAgB,CAAC,YAAY,CAAC,CAAC;IAC1C,YAAY,EAAE,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,KAAK,IAAI,CAAC;IACnD,mBAAmB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CAClD;AA4CD,wBAAgB,sBAAsB,CAAC,EACrC,MAAM,EACN,eAAe,EACf,gBAAgB,GACjB,EAAE,4BAA4B,GAAG,yBAAyB,CAqF1D"}
@@ -0,0 +1,17 @@
1
+ import type { RefObject } from 'react';
2
+ interface UseCalendarWindowExpansionObserverParams {
3
+ containerRef: RefObject<HTMLDivElement>;
4
+ topSentinelRef: RefObject<HTMLDivElement>;
5
+ bottomSentinelRef: RefObject<HTMLDivElement>;
6
+ extendWindow: (direction: 'prev' | 'next') => void;
7
+ /**
8
+ * Delay enabling the intersection observers by N animation frames.
9
+ * This gives initial programmatic alignment a chance to run so we don't
10
+ * immediately expand backwards while the top sentinel is in view.
11
+ * Defaults to 2 frames.
12
+ */
13
+ startDelayFrames?: number;
14
+ }
15
+ export declare function useCalendarWindowExpansionObserver({ containerRef, topSentinelRef, bottomSentinelRef, extendWindow, startDelayFrames, }: UseCalendarWindowExpansionObserverParams): void;
16
+ export {};
17
+ //# sourceMappingURL=useCalendarWindowExpansionObserver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCalendarWindowExpansionObserver.d.ts","sourceRoot":"","sources":["../../src/hooks/useCalendarWindowExpansionObserver.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,UAAU,wCAAwC;IAChD,YAAY,EAAE,SAAS,CAAC,cAAc,CAAC,CAAC;IACxC,cAAc,EAAE,SAAS,CAAC,cAAc,CAAC,CAAC;IAC1C,iBAAiB,EAAE,SAAS,CAAC,cAAc,CAAC,CAAC;IAC7C,YAAY,EAAE,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,KAAK,IAAI,CAAC;IACnD;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,wBAAgB,kCAAkC,CAAC,EACjD,YAAY,EACZ,cAAc,EACd,iBAAiB,EACjB,YAAY,EACZ,gBAAoB,GACrB,EAAE,wCAAwC,QA8D1C"}
@@ -0,0 +1,73 @@
1
+ import { type CalendarCell } from '../utils/calendar';
2
+ import type { DayRenderContext, VisibleRange } from '../types/calendar';
3
+ import type { PhotoEntry } from '../types/photo';
4
+ export interface UsePhotoCalendarStateOptions {
5
+ monthKey?: string;
6
+ defaultMonthKey?: string;
7
+ onMonthChange?: (nextMonthKey: string) => void;
8
+ onDaySelect?: (info: {
9
+ isoDate: string;
10
+ date: Date;
11
+ }) => void;
12
+ firstDayOfWeek?: 0 | 1 | 2 | 3 | 4 | 5 | 6;
13
+ entries?: PhotoEntry[];
14
+ maxThumbnailsPerDay?: number;
15
+ minMonthKey?: string;
16
+ maxMonthKey?: string;
17
+ onRangeChange?: (range: VisibleRange) => void;
18
+ onVisibleMonthChange?: (monthKey: string) => void;
19
+ locale?: string;
20
+ timeZone?: string;
21
+ }
22
+ export interface WeekdayLabels {
23
+ short: string[];
24
+ long: string[];
25
+ }
26
+ export interface PhotoCalendarDayState {
27
+ cell: CalendarCell;
28
+ context: DayRenderContext;
29
+ ariaLabel: string;
30
+ isSelectable: boolean;
31
+ }
32
+ export interface PhotoCalendarMonthSnapshot {
33
+ monthKey: string;
34
+ monthDate: Date;
35
+ monthLabel: string;
36
+ visibleRange: VisibleRange | null;
37
+ dayStates: PhotoCalendarDayState[];
38
+ }
39
+ export interface PhotoCalendarScrollState {
40
+ getMonthSnapshot: (monthKey: string) => PhotoCalendarMonthSnapshot;
41
+ getAdjacentMonthKey: (currentMonthKey: string, delta: number) => string | null;
42
+ clampMonthKey: (monthKey: string) => string;
43
+ isMonthWithinBounds: (monthKey: string) => boolean;
44
+ syncVisibleMonth: (monthKey: string) => void;
45
+ }
46
+ export interface PhotoCalendarNavigationState {
47
+ canNavigatePrevMonth: boolean;
48
+ canNavigateNextMonth: boolean;
49
+ canNavigatePrevYear: boolean;
50
+ canNavigateNextYear: boolean;
51
+ isTodayDisabled: boolean;
52
+ navigateMonth: (delta: number) => void;
53
+ navigateYear: (delta: number) => void;
54
+ navigateToMonth: (monthIndex: number) => void;
55
+ goToToday: () => void;
56
+ isMonthDisabled: (monthIndex: number) => boolean;
57
+ }
58
+ export interface PhotoCalendarState {
59
+ currentYear: number;
60
+ currentMonth: number;
61
+ monthDate: Date;
62
+ monthKey: string;
63
+ monthLabel: string;
64
+ monthNames: string[];
65
+ weekdayLabels: WeekdayLabels;
66
+ visibleRange: VisibleRange | null;
67
+ dayStates: PhotoCalendarDayState[];
68
+ navigation: PhotoCalendarNavigationState;
69
+ scroll: PhotoCalendarScrollState;
70
+ isControlled: boolean;
71
+ }
72
+ export declare function usePhotoCalendarState({ monthKey, defaultMonthKey, onMonthChange, onDaySelect, firstDayOfWeek, entries, maxThumbnailsPerDay, minMonthKey, maxMonthKey, onRangeChange, onVisibleMonthChange, locale, timeZone }?: UsePhotoCalendarStateOptions): PhotoCalendarState;
73
+ //# sourceMappingURL=usePhotoCalendarState.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePhotoCalendarState.d.ts","sourceRoot":"","sources":["../../src/hooks/usePhotoCalendarState.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export * from './PhotoCalendar';
2
+ export { usePhotoCalendarState, type PhotoCalendarState, type PhotoCalendarDayState, type PhotoCalendarNavigationState, type PhotoCalendarMonthSnapshot, type PhotoCalendarScrollState, type UsePhotoCalendarStateOptions, type WeekdayLabels } from './hooks/usePhotoCalendarState';
3
+ export { usePhotoCalendarContext, PhotoCalendarContextProvider, type PhotoCalendarContextProviderProps } from './context/PhotoCalendarContext';
4
+ export { PhotoCalendarRoot, type PhotoCalendarRootProps } from './primitives/PhotoCalendarRoot';
5
+ export { PhotoCalendarNavigation, type PhotoCalendarNavigationProps, type NavigationRenderProps } from './primitives/PhotoCalendarNavigation';
6
+ export { PhotoCalendarWeekdays, type PhotoCalendarWeekdaysProps, type WeekdayRenderProps } from './primitives/PhotoCalendarWeekdays';
7
+ export { PhotoCalendarMonthGrid, type PhotoCalendarMonthGridProps, type DayRenderProps } from './primitives/PhotoCalendarMonthGrid';
8
+ export { PhotoCalendarDay, type PhotoCalendarDayProps } from './primitives/PhotoCalendarDay';
9
+ export { PhotoCalendarNavigationLayout, PhotoCalendarNavigationYearHeading, PhotoCalendarNavigationControls, PhotoCalendarNavigationPrevYearButton, PhotoCalendarNavigationNextYearButton, PhotoCalendarNavigationPrevMonthButton, PhotoCalendarNavigationNextMonthButton, PhotoCalendarNavigationMonthChips, PhotoCalendarNavigationMonthLabelMobile, PhotoCalendarNavigationTodayButton } from './components/CalendarBanner';
10
+ export { PhotoCalendarScrollView, type PhotoCalendarScrollViewProps } from './components/PhotoCalendarScrollView';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,OAAO,EACL,qBAAqB,EACrB,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,EAC1B,KAAK,4BAA4B,EACjC,KAAK,0BAA0B,EAC/B,KAAK,wBAAwB,EAC7B,KAAK,4BAA4B,EACjC,KAAK,aAAa,EACnB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,uBAAuB,EACvB,4BAA4B,EAC5B,KAAK,iCAAiC,EACvC,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,iBAAiB,EACjB,KAAK,sBAAsB,EAC5B,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,uBAAuB,EACvB,KAAK,4BAA4B,EACjC,KAAK,qBAAqB,EAC3B,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EACL,qBAAqB,EACrB,KAAK,0BAA0B,EAC/B,KAAK,kBAAkB,EACxB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACL,sBAAsB,EACtB,KAAK,2BAA2B,EAChC,KAAK,cAAc,EACpB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACL,gBAAgB,EAChB,KAAK,qBAAqB,EAC3B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,6BAA6B,EAC7B,kCAAkC,EAClC,+BAA+B,EAC/B,qCAAqC,EACrC,qCAAqC,EACrC,sCAAsC,EACtC,sCAAsC,EACtC,iCAAiC,EACjC,uCAAuC,EACvC,kCAAkC,EACnC,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,uBAAuB,EACvB,KAAK,4BAA4B,EAClC,MAAM,sCAAsC,CAAC"}