@nomideusz/svelte-calendar 0.5.2 → 0.6.3

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 (49) hide show
  1. package/README.md +408 -178
  2. package/dist/adapters/memory.d.ts +7 -9
  3. package/dist/adapters/memory.js +8 -23
  4. package/dist/adapters/recurring.d.ts +8 -6
  5. package/dist/adapters/recurring.js +28 -30
  6. package/dist/calendar/Calendar.svelte +776 -356
  7. package/dist/calendar/Calendar.svelte.d.ts +57 -6
  8. package/dist/core/index.d.ts +2 -2
  9. package/dist/core/index.js +1 -1
  10. package/dist/core/locale.js +2 -2
  11. package/dist/core/palette.d.ts +5 -0
  12. package/dist/core/palette.js +8 -0
  13. package/dist/core/types.d.ts +14 -0
  14. package/dist/engine/event-store.svelte.d.ts +0 -17
  15. package/dist/engine/event-store.svelte.js +30 -17
  16. package/dist/engine/index.d.ts +1 -1
  17. package/dist/engine/view-state.svelte.d.ts +10 -5
  18. package/dist/engine/view-state.svelte.js +32 -16
  19. package/dist/index.d.ts +7 -7
  20. package/dist/index.js +3 -4
  21. package/dist/primitives/DayHeader.svelte +103 -103
  22. package/dist/primitives/EmptySlot.svelte +105 -105
  23. package/dist/primitives/EventBlock.svelte +312 -312
  24. package/dist/primitives/NowIndicator.svelte +178 -178
  25. package/dist/primitives/TimeGutter.svelte +104 -104
  26. package/dist/theme/auto.d.ts +53 -0
  27. package/dist/theme/auto.js +534 -0
  28. package/dist/theme/index.d.ts +3 -1
  29. package/dist/theme/index.js +3 -1
  30. package/dist/theme/presets.d.ts +20 -6
  31. package/dist/theme/presets.js +55 -42
  32. package/dist/views/agenda/AgendaDay.svelte +1073 -976
  33. package/dist/views/agenda/AgendaWeek.svelte +934 -775
  34. package/dist/views/agenda/index.d.ts +0 -2
  35. package/dist/views/agenda/index.js +0 -2
  36. package/dist/views/index.d.ts +3 -2
  37. package/dist/views/index.js +3 -2
  38. package/dist/views/mobile/Mobile.svelte +17 -0
  39. package/dist/views/mobile/Mobile.svelte.d.ts +7 -0
  40. package/dist/views/mobile/MobileDay.svelte +702 -0
  41. package/dist/views/mobile/MobileDay.svelte.d.ts +20 -0
  42. package/dist/views/mobile/MobileWeek.svelte +461 -0
  43. package/dist/views/mobile/MobileWeek.svelte.d.ts +20 -0
  44. package/dist/views/mobile/index.d.ts +1 -0
  45. package/dist/views/mobile/index.js +1 -0
  46. package/dist/views/planner/PlannerDay.svelte +1129 -957
  47. package/dist/views/planner/PlannerWeek.svelte +949 -840
  48. package/dist/widget/CalendarWidget.svelte +142 -157
  49. package/package.json +2 -1
@@ -1,13 +1,14 @@
1
1
  import { type Component, type Snippet } from 'svelte';
2
2
  import type { CalendarAdapter } from '../adapters/types.js';
3
3
  import type { CalendarViewId } from '../engine/view-state.svelte.js';
4
- import type { TimelineEvent } from '../core/types.js';
4
+ import type { TimelineEvent, BlockedSlot } from '../core/types.js';
5
+ import type { AutoThemeOptions } from '../theme/auto.js';
5
6
  /** One view registration */
6
7
  export interface CalendarView {
7
8
  id: CalendarViewId;
8
9
  label: string;
9
10
  /** day or week */
10
- granularity: 'day' | 'week';
11
+ mode: 'day' | 'week';
11
12
  /** The Svelte component to render */
12
13
  component: Component<Record<string, unknown>>;
13
14
  /** Extra props to pass through (e.g. hourHeight, specialized settings) */
@@ -18,14 +19,25 @@ interface Props {
18
19
  adapter: CalendarAdapter;
19
20
  /** Registered views */
20
21
  views?: CalendarView[];
21
- /** Initial view */
22
- defaultView?: CalendarViewId;
22
+ /** Active view ID (defaults to first registered view) */
23
+ view?: CalendarViewId;
23
24
  /** CSS theme string (--dt-* inline style) */
24
25
  theme?: string;
26
+ /**
27
+ * Options for the smart auto-theme.
28
+ * When theme is `auto` (empty string), the calendar probes the host page
29
+ * and generates matching --dt-* vars automatically.
30
+ *
31
+ * Pass `{ mode, accent, font }` to override individual aspects.
32
+ * Set `autoTheme: false` to disable probing entirely.
33
+ */
34
+ autoTheme?: AutoThemeOptions | false;
25
35
  /** Start week on Monday */
26
36
  mondayStart?: boolean;
27
- /** Total height */
28
- height?: number;
37
+ /** Total height. Use `'auto'` to let content determine height (ideal for Agenda views). */
38
+ height?: number | 'auto';
39
+ /** Border radius in px (default: 12). Set to 0 for no rounding. */
40
+ borderRadius?: number;
29
41
  /** Text direction: 'ltr' (default), 'rtl', or 'auto' */
30
42
  dir?: 'ltr' | 'rtl' | 'auto';
31
43
  /** BCP 47 locale tag (e.g. 'en-US', 'ar-SA') — sets lang and locale for formatting */
@@ -38,10 +50,45 @@ interface Props {
38
50
  initialDate?: Date;
39
51
  /** Drag snap interval in minutes (default: 15) */
40
52
  snapInterval?: number;
53
+ /** Show the Day/Week mode pills (default: true) */
54
+ showModePills?: boolean;
55
+ /** Show prev/next/today navigation controls (default: true) */
56
+ showNavigation?: boolean;
57
+ /** Treat all days equally — no past-day dimming or collapsing (default: false) */
58
+ equalDays?: boolean;
59
+ /** Hide date numbers — headers show only day names (Mon, Tue, …). Useful for template/recurring schedules. */
60
+ showDates?: boolean;
61
+ /** ISO weekdays to hide (1=Mon … 7=Sun). E.g. [6, 7] hides weekends. */
62
+ hideDays?: number[];
63
+ /** Controlled current date — drives which date the calendar focuses on. */
64
+ currentDate?: Date;
65
+ /** Blocked/unavailable time slots — rendered as hatched regions, prevent event creation. */
66
+ blockedSlots?: BlockedSlot[];
67
+ /** Number of days shown in week mode (default: 7). E.g. 3 for a 3-day view, 5 for workweek. */
68
+ days?: number;
69
+ /** Minimum event duration in minutes (enforced during drag-create and click-to-create). */
70
+ minDuration?: number;
71
+ /** Maximum event duration in minutes (enforced during drag-create). */
72
+ maxDuration?: number;
73
+ /** Specific dates to disable (greyed-out, no event creation). */
74
+ disabledDates?: Date[];
75
+ /**
76
+ * Mobile mode.
77
+ * - `'auto'` (default): detect via viewport width (< 768 px)
78
+ * - `true`: always use mobile views
79
+ * - `false`: never use mobile views
80
+ */
81
+ mobile?: 'auto' | boolean;
41
82
  /** Custom event rendering snippet */
42
83
  event?: Snippet<[TimelineEvent]>;
43
84
  /** Content to show when no events are loaded */
44
85
  empty?: Snippet;
86
+ /** Custom day header snippet. Receives { date, isToday, dayName }. */
87
+ dayHeader?: Snippet<[{
88
+ date: Date;
89
+ isToday: boolean;
90
+ dayName: string;
91
+ }]>;
45
92
  oneventclick?: (event: TimelineEvent) => void;
46
93
  oneventcreate?: (range: {
47
94
  start: Date;
@@ -49,6 +96,10 @@ interface Props {
49
96
  }) => void;
50
97
  oneventmove?: (event: TimelineEvent, newStart: Date, newEnd: Date) => void;
51
98
  onviewchange?: (viewId: CalendarViewId) => void;
99
+ /** Called when the focused date changes (navigation, drag-scroll, etc.) */
100
+ ondatechange?: (date: Date) => void;
101
+ /** Called when the pointer enters an event (hover). */
102
+ oneventhover?: (event: TimelineEvent) => void;
52
103
  }
53
104
  declare const Calendar: Component<Props, {}, "">;
54
105
  type Calendar = ReturnType<typeof Calendar>;
@@ -5,5 +5,5 @@ export type { DaySegment } from './time.js';
5
5
  export { setDefaultLocale, getDefaultLocale, is24HourLocale, fmtH, fmtTime, fmtDuration, weekdayShort, weekdayLong, monthShort, monthLong, dateShort, dateWithWeekday, fmtDay, fmtWeekRange, defaultLabels, setLabels, resetLabels, getLabels, } from './locale.js';
6
6
  export type { CalendarLabels } from './locale.js';
7
7
  export { toZonedTime, fromZonedTime, nowInZone, formatInTimeZone, } from './timezone.js';
8
- export type { TimelineEvent, } from './types.js';
9
- export { generatePalette, VIVID_PALETTE } from './palette.js';
8
+ export type { TimelineEvent, BlockedSlot, } from './types.js';
9
+ export { generatePalette, extractAccent, VIVID_PALETTE } from './palette.js';
@@ -8,4 +8,4 @@ export { setDefaultLocale, getDefaultLocale, is24HourLocale, fmtH, fmtTime, fmtD
8
8
  // Timezone utilities
9
9
  export { toZonedTime, fromZonedTime, nowInZone, formatInTimeZone, } from './timezone.js';
10
10
  // Palette
11
- export { generatePalette, VIVID_PALETTE } from './palette.js';
11
+ export { generatePalette, extractAccent, VIVID_PALETTE } from './palette.js';
@@ -183,13 +183,13 @@ export function fmtTime(d, locale) {
183
183
  if (is24HourLocale(locale)) {
184
184
  const h = d.getHours();
185
185
  const m = d.getMinutes();
186
- return m === 0 ? String(h) : `${h}:${String(m).padStart(2, '0')}`;
186
+ return `${h}:${String(m).padStart(2, '0')}`;
187
187
  }
188
188
  const h = d.getHours();
189
189
  const m = d.getMinutes();
190
190
  const suffix = h >= 12 ? 'p' : 'a';
191
191
  const h12 = h === 0 ? 12 : h > 12 ? h - 12 : h;
192
- return m === 0 ? `${h12}${suffix}` : `${h12}:${String(m).padStart(2, '0')}${suffix}`;
192
+ return `${h12}:${String(m).padStart(2, '0')}${suffix}`;
193
193
  }
194
194
  /**
195
195
  * Format the duration between two Dates as a compact string.
@@ -9,6 +9,11 @@
9
9
  * generatePalette(undefined, 8) // falls back to the vivid default
10
10
  */
11
11
  export declare const VIVID_PALETTE: string[];
12
+ /**
13
+ * Extract the --dt-accent hex value from a theme CSS string.
14
+ * Returns undefined if not found.
15
+ */
16
+ export declare function extractAccent(themeString: string): string | undefined;
12
17
  /**
13
18
  * Generate `count` visually distinct and theme-harmonious colors
14
19
  * by rotating hue evenly from the base accent, keeping saturation
@@ -70,6 +70,14 @@ function hslToHex(h, s, l) {
70
70
  const toHex = (v) => Math.round(v * 255).toString(16).padStart(2, '0');
71
71
  return `#${toHex(r)}${toHex(g)}${toHex(b)}`;
72
72
  }
73
+ /**
74
+ * Extract the --dt-accent hex value from a theme CSS string.
75
+ * Returns undefined if not found.
76
+ */
77
+ export function extractAccent(themeString) {
78
+ const m = themeString.match(/--dt-accent\s*:\s*(#[0-9a-fA-F]{3,8})/);
79
+ return m?.[1];
80
+ }
73
81
  // ── Palette generation ──────────────────────────────────
74
82
  /**
75
83
  * Generate `count` visually distinct and theme-harmonious colors
@@ -22,3 +22,17 @@ export interface TimelineEvent {
22
22
  /** Arbitrary payload from the source app (bookings, attendees, etc.) */
23
23
  data?: Record<string, unknown>;
24
24
  }
25
+ /**
26
+ * Represents a blocked/unavailable time slot on the calendar.
27
+ * Used to mark times when events cannot be created (e.g. lunch break, maintenance).
28
+ */
29
+ export interface BlockedSlot {
30
+ /** ISO weekday (1=Mon … 7=Sun). If omitted, applies to all days. */
31
+ day?: number;
32
+ /** Start hour (0–24, decimals allowed: 12.5 = 12:30) */
33
+ start: number;
34
+ /** End hour (0–24, decimals allowed: 13.5 = 1:30 PM) */
35
+ end: number;
36
+ /** Optional label shown on the blocked region */
37
+ label?: string;
38
+ }
@@ -1,20 +1,3 @@
1
- /**
2
- * Reactive event store — the CRUD brain of the calendar.
3
- *
4
- * Wraps a CalendarAdapter and exposes Svelte 5 rune-mode reactive state.
5
- * All mutations go through the adapter first, then update local state.
6
- *
7
- * Usage:
8
- * const store = createEventStore(adapter);
9
- * // store.events — all loaded events (reactive)
10
- * // store.forRange() — query by date range
11
- * // store.forDay() — query single day
12
- * // store.add() — create event
13
- * // store.update() — patch event
14
- * // store.remove() — delete event
15
- * // store.move() — drag-move shorthand
16
- * // store.load() — fetch from adapter for a range
17
- */
18
1
  import type { TimelineEvent } from '../core/types.js';
19
2
  import type { CalendarAdapter, DateRange } from '../adapters/types.js';
20
3
  export interface EventStore {
@@ -1,37 +1,50 @@
1
+ /**
2
+ * Reactive event store — the CRUD brain of the calendar.
3
+ *
4
+ * Wraps a CalendarAdapter and exposes Svelte 5 rune-mode reactive state.
5
+ * All mutations go through the adapter first, then update local state.
6
+ *
7
+ * Usage:
8
+ * const store = createEventStore(adapter);
9
+ * // store.events — all loaded events (reactive)
10
+ * // store.forRange() — query by date range
11
+ * // store.forDay() — query single day
12
+ * // store.add() — create event
13
+ * // store.update() — patch event
14
+ * // store.remove() — delete event
15
+ * // store.move() — drag-move shorthand
16
+ * // store.load() — fetch from adapter for a range
17
+ */
18
+ import { SvelteMap } from 'svelte/reactivity';
1
19
  import { sod, DAY_MS } from '../core/time.js';
2
20
  /**
3
21
  * Create a reactive event store backed by a CalendarAdapter.
4
22
  */
5
23
  export function createEventStore(adapter) {
6
- let events = $state([]);
24
+ let eventMap = new SvelteMap();
7
25
  let loading = $state(false);
8
26
  let error = $state(null);
27
+ // Derived array view of the map — consumers read this.
28
+ const eventArray = $derived([...eventMap.values()]);
9
29
  // ── Internal helpers ──
10
30
  function overlaps(ev, start, end) {
11
31
  return ev.start < end && ev.end > start;
12
32
  }
13
33
  function replaceEvent(id, updated) {
14
- const idx = events.findIndex((e) => e.id === id);
15
- if (idx >= 0) {
16
- events[idx] = updated;
34
+ if (eventMap.has(id)) {
35
+ eventMap.set(id, updated);
17
36
  }
18
37
  }
19
38
  function removeEvent(id) {
20
- events = events.filter((e) => e.id !== id);
39
+ eventMap.delete(id);
21
40
  }
22
41
  function upsertEvent(ev) {
23
- const idx = events.findIndex((e) => e.id === ev.id);
24
- if (idx >= 0) {
25
- events[idx] = ev;
26
- }
27
- else {
28
- events.push(ev);
29
- }
42
+ eventMap.set(ev.id, ev);
30
43
  }
31
44
  // ── Public API ──
32
45
  return {
33
46
  get events() {
34
- return events;
47
+ return eventArray;
35
48
  },
36
49
  get loading() {
37
50
  return loading;
@@ -57,22 +70,22 @@ export function createEventStore(adapter) {
57
70
  }
58
71
  },
59
72
  forRange(start, end) {
60
- return events.filter((ev) => overlaps(ev, start, end));
73
+ return eventArray.filter((ev) => overlaps(ev, start, end));
61
74
  },
62
75
  forDay(date) {
63
76
  const dayStart = new Date(sod(date.getTime()));
64
77
  const dayEnd = new Date(dayStart.getTime() + DAY_MS);
65
- return events.filter((ev) => overlaps(ev, dayStart, dayEnd));
78
+ return eventArray.filter((ev) => overlaps(ev, dayStart, dayEnd));
66
79
  },
67
80
  byId(id) {
68
- return events.find((e) => e.id === id);
81
+ return eventMap.get(id);
69
82
  },
70
83
  async add(eventData) {
71
84
  loading = true;
72
85
  error = null;
73
86
  try {
74
87
  const created = await adapter.createEvent(eventData);
75
- events.push(created);
88
+ upsertEvent(created);
76
89
  return created;
77
90
  }
78
91
  catch (e) {
@@ -1,7 +1,7 @@
1
1
  export { createEventStore } from './event-store.svelte.js';
2
2
  export type { EventStore } from './event-store.svelte.js';
3
3
  export { createViewState } from './view-state.svelte.js';
4
- export type { ViewState, ViewStateOptions, CalendarViewId, BuiltInViewId, ViewGranularity, } from './view-state.svelte.js';
4
+ export type { ViewState, ViewStateOptions, CalendarViewId, BuiltInViewId, ViewMode, } from './view-state.svelte.js';
5
5
  export { createSelection } from './selection.svelte.js';
6
6
  export type { Selection } from './selection.svelte.js';
7
7
  export { createDragState } from './drag.svelte.js';
@@ -10,31 +10,36 @@ export type BuiltInViewId = 'day-planner' | 'day-agenda' | 'week-planner' | 'wee
10
10
  * custom IDs like 'day-kanban', 'week-resource', etc.
11
11
  */
12
12
  export type CalendarViewId = string;
13
- export type ViewGranularity = 'day' | 'week';
13
+ export type ViewMode = 'day' | 'week';
14
14
  export interface ViewStateOptions {
15
- defaultView?: CalendarViewId;
15
+ view?: CalendarViewId;
16
16
  mondayStart?: boolean;
17
17
  /** IANA timezone string (e.g. 'America/New_York'). Defaults to local timezone. */
18
18
  timezone?: string;
19
19
  /** Initial date to focus on (defaults to today). */
20
20
  initialDate?: Date;
21
+ /** Number of days shown in week mode (default: 7). E.g. 3 for a 3-day view, 5 for workweek. */
22
+ dayCount?: number;
21
23
  /**
22
- * Optional resolver for view granularity.
24
+ * Optional resolver for view mode.
23
25
  * Useful for custom IDs that don't follow "day-*" / "week-*" naming.
24
26
  */
25
- granularityForView?: (viewId: CalendarViewId) => ViewGranularity | undefined;
27
+ modeForView?: (viewId: CalendarViewId) => ViewMode | undefined;
26
28
  }
27
29
  export interface ViewState {
28
30
  readonly view: CalendarViewId;
29
31
  readonly focusDate: Date;
30
32
  readonly range: DateRange;
31
- readonly granularity: ViewGranularity;
33
+ readonly mode: ViewMode;
32
34
  readonly mondayStart: boolean;
33
35
  /** IANA timezone, or undefined for local */
34
36
  readonly timezone: string | undefined;
37
+ /** Number of days shown in week mode */
38
+ readonly dayCount: number;
35
39
  setView(id: CalendarViewId): void;
36
40
  setMondayStart(value: boolean): void;
37
41
  setFocusDate(date: Date): void;
42
+ setDayCount(n: number): void;
38
43
  next(): void;
39
44
  prev(): void;
40
45
  goToday(): void;
@@ -3,7 +3,7 @@
3
3
  * and navigation (prev/next/today).
4
4
  *
5
5
  * Usage:
6
- * const vs = createViewState({ defaultView: 'week-terrain' });
6
+ * const vs = createViewState({ view: 'week-terrain' });
7
7
  * vs.view — current view id
8
8
  * vs.focusDate — the center date
9
9
  * vs.range — { start, end } for the current view window
@@ -12,33 +12,43 @@
12
12
  * vs.goToday() — jump to today
13
13
  */
14
14
  import { startOfWeek as calcStartOfWeek, addDaysMs, DAY_MS } from '../core/time.js';
15
- function inferGranularity(view) {
15
+ function inferMode(view) {
16
16
  if (view.startsWith('day'))
17
17
  return 'day';
18
18
  return 'week';
19
19
  }
20
- function computeRange(focus, granularity, mondayStart) {
21
- if (granularity === 'day') {
20
+ function computeRange(focus, mode, mondayStart, dayCount = 7) {
21
+ if (mode === 'day') {
22
22
  const start = new Date(focus);
23
23
  start.setHours(0, 0, 0, 0);
24
24
  const end = new Date(start.getTime() + DAY_MS);
25
25
  return { start, end };
26
26
  }
27
- // week
28
- const ws = calcStartOfWeek(focus.getTime(), mondayStart);
27
+ // week / custom period
28
+ if (dayCount === 7) {
29
+ const ws = calcStartOfWeek(focus.getTime(), mondayStart);
30
+ return {
31
+ start: new Date(ws),
32
+ end: new Date(addDaysMs(ws, 7)),
33
+ };
34
+ }
35
+ // Custom day count: start from sod of focus
36
+ const start = new Date(focus);
37
+ start.setHours(0, 0, 0, 0);
29
38
  return {
30
- start: new Date(ws),
31
- end: new Date(addDaysMs(ws, 7)),
39
+ start,
40
+ end: new Date(start.getTime() + dayCount * DAY_MS),
32
41
  };
33
42
  }
34
43
  export function createViewState(options = {}) {
35
- let view = $state(options.defaultView ?? 'week-planner');
44
+ let view = $state(options.view ?? 'week-planner');
36
45
  let focusDate = $state(options.initialDate ?? new Date());
37
46
  let mondayStart = $state(options.mondayStart ?? true);
47
+ let dayCount = $state(options.dayCount ?? 7);
38
48
  const timezone = options.timezone;
39
- const granularityResolver = options.granularityForView;
40
- const granularity = $derived(granularityResolver?.(view) ?? inferGranularity(view));
41
- const range = $derived(computeRange(focusDate, granularity, mondayStart));
49
+ const modeResolver = options.modeForView;
50
+ const mode = $derived(modeResolver?.(view) ?? inferMode(view));
51
+ const range = $derived(computeRange(focusDate, mode, mondayStart, dayCount));
42
52
  return {
43
53
  get view() {
44
54
  return view;
@@ -49,8 +59,8 @@ export function createViewState(options = {}) {
49
59
  get range() {
50
60
  return range;
51
61
  },
52
- get granularity() {
53
- return granularity;
62
+ get mode() {
63
+ return mode;
54
64
  },
55
65
  get mondayStart() {
56
66
  return mondayStart;
@@ -58,6 +68,9 @@ export function createViewState(options = {}) {
58
68
  get timezone() {
59
69
  return timezone;
60
70
  },
71
+ get dayCount() {
72
+ return dayCount;
73
+ },
61
74
  setView(id) {
62
75
  view = id;
63
76
  },
@@ -67,12 +80,15 @@ export function createViewState(options = {}) {
67
80
  setFocusDate(date) {
68
81
  focusDate = date;
69
82
  },
83
+ setDayCount(n) {
84
+ dayCount = n;
85
+ },
70
86
  next() {
71
- const days = granularity === 'day' ? 1 : 7;
87
+ const days = mode === 'day' ? 1 : dayCount;
72
88
  focusDate = new Date(addDaysMs(focusDate.getTime(), days));
73
89
  },
74
90
  prev() {
75
- const days = granularity === 'day' ? -1 : -7;
91
+ const days = mode === 'day' ? -1 : -dayCount;
76
92
  focusDate = new Date(addDaysMs(focusDate.getTime(), days));
77
93
  },
78
94
  goToday() {
package/dist/index.d.ts CHANGED
@@ -1,12 +1,12 @@
1
- export { Planner, Agenda, AgendaDay, AgendaWeek, } from './views/index.js';
2
1
  export { NowIndicator, EventBlock, TimeGutter, DayHeader, EmptySlot, } from './primitives/index.js';
3
2
  export { Calendar } from './calendar/index.js';
4
3
  export type { CalendarView } from './calendar/index.js';
5
4
  export { createEventStore, createViewState, createSelection, createDragState, } from './engine/index.js';
6
- export type { EventStore, ViewState, ViewStateOptions, CalendarViewId, BuiltInViewId, ViewGranularity, Selection, DragState, DragMode, DragPayload, } from './engine/index.js';
5
+ export type { EventStore, ViewState, ViewStateOptions, CalendarViewId, BuiltInViewId, ViewMode, Selection, DragState, DragMode, DragPayload, } from './engine/index.js';
7
6
  export { createMemoryAdapter, createRestAdapter, createRecurringAdapter } from './adapters/index.js';
8
- export type { CalendarAdapter, DateRange, RestAdapterOptions, RecurringEvent, RecurringAdapterOptions, MemoryAdapterOptions, } from './adapters/index.js';
9
- export { createClock, startOfWeek, fmtH, fmtTime, fmtDuration, weekdayShort, weekdayLong, monthShort, monthLong, dateShort, dateWithWeekday, fmtDay, fmtWeekRange, setDefaultLocale, getDefaultLocale, is24HourLocale, defaultLabels, setLabels, resetLabels, getLabels, toZonedTime, fromZonedTime, nowInZone, formatInTimeZone, generatePalette, VIVID_PALETTE, isMultiDay, isAllDay, segmentForDay, } from './core/index.js';
10
- export type { Clock, TimelineEvent, DaySegment, CalendarLabels, } from './core/index.js';
11
- export { midnight, neutral, presets } from './theme/index.js';
12
- export type { PresetName } from './theme/index.js';
7
+ export type { CalendarAdapter, DateRange, RestAdapterOptions, RecurringEvent, RecurringAdapterOptions, } from './adapters/index.js';
8
+ export { createClock, startOfWeek, fmtH, fmtTime, fmtDuration, weekdayShort, weekdayLong, monthShort, monthLong, dateShort, dateWithWeekday, fmtDay, fmtWeekRange, setDefaultLocale, getDefaultLocale, is24HourLocale, defaultLabels, setLabels, resetLabels, getLabels, toZonedTime, fromZonedTime, nowInZone, formatInTimeZone, generatePalette, extractAccent, VIVID_PALETTE, isMultiDay, isAllDay, segmentForDay, } from './core/index.js';
9
+ export type { Clock, TimelineEvent, BlockedSlot, DaySegment, CalendarLabels, } from './core/index.js';
10
+ export { auto, neutral, midnight, presets } from './theme/index.js';
11
+ export { probeHostTheme, observeHostTheme } from './theme/index.js';
12
+ export type { PresetName, AutoThemeOptions } from './theme/index.js';
package/dist/index.js CHANGED
@@ -1,5 +1,3 @@
1
- // ─── Views ──────────────────────────────────────────────
2
- export { Planner, Agenda, AgendaDay, AgendaWeek, } from './views/index.js';
3
1
  // ─── Primitives ─────────────────────────────────────────
4
2
  export { NowIndicator, EventBlock, TimeGutter, DayHeader, EmptySlot, } from './primitives/index.js';
5
3
  // ─── Calendar shell ─────────────────────────────────────
@@ -9,6 +7,7 @@ export { createEventStore, createViewState, createSelection, createDragState, }
9
7
  // ─── Adapters ───────────────────────────────────────────
10
8
  export { createMemoryAdapter, createRestAdapter, createRecurringAdapter } from './adapters/index.js';
11
9
  // ─── Core: clock, time, locale, types ───────────────────
12
- export { createClock, startOfWeek, fmtH, fmtTime, fmtDuration, weekdayShort, weekdayLong, monthShort, monthLong, dateShort, dateWithWeekday, fmtDay, fmtWeekRange, setDefaultLocale, getDefaultLocale, is24HourLocale, defaultLabels, setLabels, resetLabels, getLabels, toZonedTime, fromZonedTime, nowInZone, formatInTimeZone, generatePalette, VIVID_PALETTE, isMultiDay, isAllDay, segmentForDay, } from './core/index.js';
10
+ export { createClock, startOfWeek, fmtH, fmtTime, fmtDuration, weekdayShort, weekdayLong, monthShort, monthLong, dateShort, dateWithWeekday, fmtDay, fmtWeekRange, setDefaultLocale, getDefaultLocale, is24HourLocale, defaultLabels, setLabels, resetLabels, getLabels, toZonedTime, fromZonedTime, nowInZone, formatInTimeZone, generatePalette, extractAccent, VIVID_PALETTE, isMultiDay, isAllDay, segmentForDay, } from './core/index.js';
13
11
  // ─── Themes ─────────────────────────────────────────────
14
- export { midnight, neutral, presets } from './theme/index.js';
12
+ export { auto, neutral, midnight, presets } from './theme/index.js';
13
+ export { probeHostTheme, observeHostTheme } from './theme/index.js';