@nomideusz/svelte-calendar 0.4.0 → 0.5.1

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 (73) hide show
  1. package/README.md +331 -568
  2. package/dist/adapters/recurring.d.ts +45 -8
  3. package/dist/adapters/recurring.js +227 -49
  4. package/dist/adapters/rest.js +6 -1
  5. package/dist/calendar/Calendar.svelte +118 -30
  6. package/dist/calendar/Calendar.svelte.d.ts +9 -8
  7. package/dist/calendar/index.d.ts +0 -1
  8. package/dist/calendar/index.js +0 -1
  9. package/dist/core/index.d.ts +5 -4
  10. package/dist/core/index.js +2 -3
  11. package/dist/core/locale.d.ts +74 -0
  12. package/dist/core/locale.js +96 -4
  13. package/dist/core/time.d.ts +30 -0
  14. package/dist/core/time.js +42 -0
  15. package/dist/core/types.d.ts +1 -72
  16. package/dist/core/types.js +1 -8
  17. package/dist/engine/event-store.svelte.js +2 -2
  18. package/dist/engine/index.d.ts +1 -1
  19. package/dist/engine/view-state.svelte.d.ts +11 -6
  20. package/dist/engine/view-state.svelte.js +5 -4
  21. package/dist/index.d.ts +6 -7
  22. package/dist/index.js +4 -4
  23. package/dist/primitives/EmptySlot.svelte +6 -16
  24. package/dist/primitives/EventBlock.svelte +6 -19
  25. package/dist/primitives/NowIndicator.svelte +7 -4
  26. package/dist/primitives/TimeGutter.svelte +1 -1
  27. package/dist/theme/index.d.ts +1 -1
  28. package/dist/theme/index.js +1 -1
  29. package/dist/theme/presets.d.ts +11 -19
  30. package/dist/theme/presets.js +25 -111
  31. package/dist/views/agenda/Agenda.svelte +17 -1516
  32. package/dist/views/agenda/Agenda.svelte.d.ts +0 -14
  33. package/dist/views/agenda/AgendaDay.svelte +976 -0
  34. package/dist/views/agenda/AgendaDay.svelte.d.ts +14 -0
  35. package/dist/views/agenda/AgendaWeek.svelte +775 -0
  36. package/dist/views/agenda/AgendaWeek.svelte.d.ts +15 -0
  37. package/dist/views/agenda/index.d.ts +2 -0
  38. package/dist/views/agenda/index.js +2 -0
  39. package/dist/views/index.d.ts +2 -6
  40. package/dist/views/index.js +2 -6
  41. package/dist/views/planner/Planner.svelte +17 -0
  42. package/dist/views/planner/Planner.svelte.d.ts +7 -0
  43. package/dist/views/planner/PlannerDay.svelte +957 -0
  44. package/dist/views/{day/DayGrid.svelte.d.ts → planner/PlannerDay.svelte.d.ts} +6 -16
  45. package/dist/views/planner/PlannerWeek.svelte +826 -0
  46. package/dist/views/{week/WeekGrid.svelte.d.ts → planner/PlannerWeek.svelte.d.ts} +4 -9
  47. package/dist/views/planner/index.d.ts +1 -0
  48. package/dist/views/planner/index.js +1 -0
  49. package/dist/widget/CalendarWidget.svelte +54 -33
  50. package/dist/widget/CalendarWidget.svelte.d.ts +1 -1
  51. package/package.json +70 -65
  52. package/widget/svelte-calendar.css +1 -0
  53. package/widget/widget.js +122 -260
  54. package/dist/calendar/Toolbar.svelte +0 -244
  55. package/dist/calendar/Toolbar.svelte.d.ts +0 -21
  56. package/dist/views/day/DayGrid.svelte +0 -1104
  57. package/dist/views/day/DayTimeline.svelte +0 -533
  58. package/dist/views/day/DayTimeline.svelte.d.ts +0 -8
  59. package/dist/views/day/index.d.ts +0 -2
  60. package/dist/views/day/index.js +0 -2
  61. package/dist/views/schedule/WeekSchedule.svelte +0 -137
  62. package/dist/views/schedule/WeekSchedule.svelte.d.ts +0 -40
  63. package/dist/views/schedule/index.d.ts +0 -1
  64. package/dist/views/schedule/index.js +0 -2
  65. package/dist/views/settings/Settings.svelte +0 -585
  66. package/dist/views/settings/Settings.svelte.d.ts +0 -39
  67. package/dist/views/settings/index.d.ts +0 -2
  68. package/dist/views/settings/index.js +0 -1
  69. package/dist/views/week/WeekGrid.svelte +0 -632
  70. package/dist/views/week/WeekHeatmap.svelte +0 -461
  71. package/dist/views/week/WeekHeatmap.svelte.d.ts +0 -9
  72. package/dist/views/week/index.d.ts +0 -2
  73. package/dist/views/week/index.js +0 -2
@@ -10,8 +10,11 @@
10
10
  -->
11
11
  <script lang="ts">
12
12
  import type { TimelineEvent } from '../core/types.js';
13
+ import { fmtTime, fmtDuration, getLabels } from '../core/locale.js';
13
14
  import type { Snippet } from 'svelte';
14
15
 
16
+ const L = $derived(getLabels());
17
+
15
18
  interface Props {
16
19
  event: TimelineEvent;
17
20
  /** Display variant */
@@ -44,29 +47,13 @@
44
47
  children,
45
48
  }: Props = $props();
46
49
 
47
- function fmtTime(d: Date): string {
48
- const h = d.getHours();
49
- const m = d.getMinutes();
50
- const suffix = h >= 12 ? 'p' : 'a';
51
- const h12 = h === 0 ? 12 : h > 12 ? h - 12 : h;
52
- return m === 0 ? `${h12}${suffix}` : `${h12}:${String(m).padStart(2, '0')}${suffix}`;
53
- }
54
-
55
- function fmtDuration(start: Date, end: Date): string {
56
- const mins = Math.round((end.getTime() - start.getTime()) / 60_000);
57
- if (mins < 60) return `${mins}m`;
58
- const h = Math.floor(mins / 60);
59
- const m = mins % 60;
60
- return m > 0 ? `${h}h ${m}m` : `${h}h`;
61
- }
62
-
63
50
  const accentColor = $derived(event.color || 'var(--dt-accent, #ef4444)');
64
51
 
65
52
  const ariaLabel = $derived.by(() => {
66
53
  const t = event.title;
67
54
  const time = `${fmtTime(event.start)} to ${fmtTime(event.end)}`;
68
55
  const dur = fmtDuration(event.start, event.end);
69
- const status = active ? ', happening now' : past ? ', past' : '';
56
+ const status = active ? `, ${L.happeningNow}` : past ? `, ${L.past}` : '';
70
57
  return `${t}, ${time}, ${dur}${status}`;
71
58
  });
72
59
 
@@ -105,7 +92,7 @@
105
92
  {/each}
106
93
  </div>
107
94
  {/if}
108
- {#if active}<span class="eb-live-badge">now</span>{/if}
95
+ {#if active}<span class="eb-live-badge">{L.now}</span>{/if}
109
96
  </div>
110
97
  {:else}
111
98
  <!-- row -->
@@ -125,7 +112,7 @@
125
112
  {/each}
126
113
  </span>
127
114
  {/if}
128
- {#if active}<span class="eb-live-badge">now</span>{/if}
115
+ {#if active}<span class="eb-live-badge">{L.now}</span>{/if}
129
116
  {/if}
130
117
  {/snippet}
131
118
 
@@ -13,6 +13,9 @@
13
13
  -->
14
14
  <script lang="ts">
15
15
  import type { Snippet } from 'svelte';
16
+ import { getLabels } from '../core/locale.js';
17
+
18
+ const L = $derived(getLabels());
16
19
 
17
20
  interface Props {
18
21
  /** Visual mode */
@@ -53,15 +56,15 @@
53
56
  </script>
54
57
 
55
58
  {#if mode === 'badge'}
56
- <span class="ni-badge" style={colorVar} role="status" aria-live="polite" aria-label="Current time: {time}">
59
+ <span class="ni-badge" style={colorVar} role="status" aria-live="polite" aria-label="{L.currentTime}: {time}">
57
60
  {#if children}
58
61
  {@render children()}
59
62
  {:else}
60
- now
63
+ {L.now}
61
64
  {/if}
62
65
  </span>
63
66
  {:else if mode === 'dot'}
64
- <div class="ni ni-dot {orientation}" style="{posStyle}; {colorVar}" role="status" aria-label="Current time: {time}">
67
+ <div class="ni ni-dot {orientation}" style="{posStyle}; {colorVar}" role="status" aria-label="{L.currentTime}: {time}">
65
68
  <div class="ni-dot-circle"></div>
66
69
  {#if showLabel && time}
67
70
  <div class="ni-label">
@@ -71,7 +74,7 @@
71
74
  {/if}
72
75
  </div>
73
76
  {:else}
74
- <div class="ni ni-line {orientation}" style="{posStyle}; {colorVar}" role="status" aria-label="Current time: {time}">
77
+ <div class="ni ni-line {orientation}" style="{posStyle}; {colorVar}" role="status" aria-label="{L.currentTime}: {time}">
75
78
  <div class="ni-line-bar"></div>
76
79
  {#if showLabel && time}
77
80
  <div class="ni-label">
@@ -2,7 +2,7 @@
2
2
  TimeGutter — shared hour labels / tick marks.
3
3
 
4
4
  Two orientations:
5
- "horizontal" — ticks along a horizontal track (for DayTimeline style)
5
+ "horizontal" — ticks along a horizontal track (for day timeline-style layouts)
6
6
  "vertical" — label column along a vertical grid (for WeekTimeline style)
7
7
  -->
8
8
  <script lang="ts">
@@ -1,2 +1,2 @@
1
- export { midnight, parchment, indigo, neutral, bare, presets, } from './presets.js';
1
+ export { midnight, neutral, presets, } from './presets.js';
2
2
  export type { PresetName } from './presets.js';
@@ -1,2 +1,2 @@
1
1
  // ─── Theme barrel export ────────────────────────────────
2
- export { midnight, parchment, indigo, neutral, bare, presets, } from './presets.js';
2
+ export { midnight, neutral, presets, } from './presets.js';
@@ -2,31 +2,23 @@
2
2
  * Theme presets for timeline components.
3
3
  *
4
4
  * Each preset is a CSS inline-style string of --dt-* custom properties.
5
- * Pass to the `style` prop of any timeline component.
5
+ * Pass to the `theme` prop of any timeline component.
6
+ *
7
+ * Presets:
8
+ * midnight — Dark mode with red accent
9
+ * neutral — Light mode, inherits host fonts
6
10
  */
7
- /** Midnight Industrial — dark charcoal + red accent, tech monitoring */
8
- export declare const midnight = "\n\t--dt-stage-bg: #080a0f;\n\t--dt-bg: #0b0e14;\n\t--dt-surface: #10141c;\n\t--dt-border: rgba(148, 163, 184, 0.07);\n\t--dt-border-day: rgba(148, 163, 184, 0.14);\n\t--dt-text: rgba(226, 232, 240, 0.85);\n\t--dt-text-2: rgba(148, 163, 184, 0.55);\n\t--dt-text-3: rgba(100, 116, 139, 0.55);\n\t--dt-accent: #ef4444;\n\t--dt-accent-dim: rgba(239, 68, 68, 0.18);\n\t--dt-glow: rgba(239, 68, 68, 0.35);\n\t--dt-today-bg: rgba(239, 68, 68, 0.02);\n\t--dt-btn-text: #fff;\n\t--dt-scrollbar: rgba(148, 163, 184, 0.12);\n\t--dt-success: rgba(74, 222, 128, 0.7);\n\t--dt-serif: Georgia, 'Times New Roman', serif;\n\t--dt-hm-empty: rgba(80, 80, 120, 0.06);\n\t--dt-hm-low: rgba(239, 68, 68, 0.15);\n\t--dt-hm-mid: rgba(239, 68, 68, 0.3);\n\t--dt-hm-high: rgba(239, 68, 68, 0.5);\n\t--dt-hm-max: rgba(239, 68, 68, 0.72);\n";
9
- /** Desert Parchment — warm analog planner, burnt sienna on aged paper */
10
- export declare const parchment = "\n\t--dt-stage-bg: #e4dace;\n\t--dt-bg: #f0e9dd;\n\t--dt-surface: #e8dfd0;\n\t--dt-border: rgba(139, 110, 70, 0.12);\n\t--dt-border-day: rgba(139, 110, 70, 0.22);\n\t--dt-text: rgba(55, 40, 22, 0.88);\n\t--dt-text-2: rgba(110, 85, 52, 0.62);\n\t--dt-text-3: rgba(139, 110, 70, 0.42);\n\t--dt-accent: #b85c2f;\n\t--dt-accent-dim: rgba(184, 92, 47, 0.14);\n\t--dt-glow: rgba(184, 92, 47, 0.25);\n\t--dt-today-bg: rgba(184, 92, 47, 0.04);\n\t--dt-btn-text: #fdf6ee;\n\t--dt-scrollbar: rgba(139, 110, 70, 0.15);\n\t--dt-success: rgba(76, 153, 76, 0.7);\n\t--dt-serif: Georgia, 'Times New Roman', serif;\n\t--dt-mono: 'Courier New', 'Courier', monospace;\n\t--dt-sans: 'Outfit', Georgia, serif;\n\t--dt-hm-empty: rgba(139, 110, 70, 0.06);\n\t--dt-hm-low: rgba(184, 92, 47, 0.15);\n\t--dt-hm-mid: rgba(184, 92, 47, 0.3);\n\t--dt-hm-high: rgba(184, 92, 47, 0.5);\n\t--dt-hm-max: rgba(184, 92, 47, 0.72);\n";
11
- /** Soft Indigo — calm productivity, muted lavender with indigo markers */
12
- export declare const indigo = "\n\t--dt-stage-bg: #efedf8;\n\t--dt-bg: #f7f6fc;\n\t--dt-surface: #eeedf8;\n\t--dt-border: rgba(99, 102, 241, 0.08);\n\t--dt-border-day: rgba(99, 102, 241, 0.14);\n\t--dt-text: rgba(30, 27, 55, 0.82);\n\t--dt-text-2: rgba(75, 70, 120, 0.55);\n\t--dt-text-3: rgba(99, 102, 241, 0.3);\n\t--dt-accent: #6366f1;\n\t--dt-accent-dim: rgba(99, 102, 241, 0.12);\n\t--dt-glow: rgba(99, 102, 241, 0.25);\n\t--dt-today-bg: rgba(99, 102, 241, 0.03);\n\t--dt-btn-text: #fff;\n\t--dt-scrollbar: rgba(99, 102, 241, 0.1);\n\t--dt-success: rgba(34, 197, 94, 0.7);\n\t--dt-serif: Georgia, 'Times New Roman', serif;\n\t--dt-sans: 'Outfit', system-ui, sans-serif;\n\t--dt-hm-empty: rgba(99, 102, 241, 0.04);\n\t--dt-hm-low: rgba(99, 102, 241, 0.12);\n\t--dt-hm-mid: rgba(99, 102, 241, 0.28);\n\t--dt-hm-high: rgba(99, 102, 241, 0.48);\n\t--dt-hm-max: rgba(99, 102, 241, 0.7);\n";
13
11
  /**
14
12
  * Neutral — inherits fonts from host page, uses standard grays + safe blue accent.
15
13
  * Drop-in preset that blends into any website without fighting its design.
14
+ * This is the recommended default.
16
15
  */
17
- export declare const neutral = "\n\t--dt-stage-bg: #ffffff;\n\t--dt-bg: #ffffff;\n\t--dt-surface: #f9fafb;\n\t--dt-border: rgba(0, 0, 0, 0.08);\n\t--dt-border-day: rgba(0, 0, 0, 0.14);\n\t--dt-text: rgba(0, 0, 0, 0.87);\n\t--dt-text-2: rgba(0, 0, 0, 0.54);\n\t--dt-text-3: rgba(0, 0, 0, 0.38);\n\t--dt-accent: #2563eb;\n\t--dt-accent-dim: rgba(37, 99, 235, 0.12);\n\t--dt-glow: rgba(37, 99, 235, 0.25);\n\t--dt-today-bg: rgba(37, 99, 235, 0.04);\n\t--dt-btn-text: #fff;\n\t--dt-scrollbar: rgba(0, 0, 0, 0.1);\n\t--dt-success: rgba(22, 163, 74, 0.7);\n\t--dt-serif: inherit;\n\t--dt-sans: inherit;\n\t--dt-mono: ui-monospace, 'SFMono-Regular', monospace;\n\t--dt-hm-empty: rgba(0, 0, 0, 0.03);\n\t--dt-hm-low: rgba(37, 99, 235, 0.12);\n\t--dt-hm-mid: rgba(37, 99, 235, 0.28);\n\t--dt-hm-high: rgba(37, 99, 235, 0.48);\n\t--dt-hm-max: rgba(37, 99, 235, 0.7);\n";
18
- /**
19
- * Bare — transparent skeleton that inherits everything from the host page.
20
- * All colors use currentColor/transparent/inherit so the calendar fully absorbs
21
- * the parent site's design. Override individual --dt-* tokens as needed.
22
- */
23
- export declare const bare = "\n\t--dt-stage-bg: transparent;\n\t--dt-bg: transparent;\n\t--dt-surface: transparent;\n\t--dt-border: currentColor;\n\t--dt-border-day: currentColor;\n\t--dt-text: inherit;\n\t--dt-text-2: inherit;\n\t--dt-text-3: inherit;\n\t--dt-accent: currentColor;\n\t--dt-accent-dim: transparent;\n\t--dt-glow: transparent;\n\t--dt-today-bg: transparent;\n\t--dt-btn-text: inherit;\n\t--dt-scrollbar: currentColor;\n\t--dt-success: currentColor;\n\t--dt-serif: inherit;\n\t--dt-sans: inherit;\n\t--dt-mono: inherit;\n\t--dt-hm-empty: transparent;\n\t--dt-hm-low: currentColor;\n\t--dt-hm-mid: currentColor;\n\t--dt-hm-high: currentColor;\n\t--dt-hm-max: currentColor;\n";
16
+ export declare const neutral = "\n\t--dt-stage-bg: #ffffff;\n\t--dt-bg: #ffffff;\n\t--dt-surface: #f9fafb;\n\t--dt-border: rgba(0, 0, 0, 0.08);\n\t--dt-border-day: rgba(0, 0, 0, 0.14);\n\t--dt-text: rgba(0, 0, 0, 0.87);\n\t--dt-text-2: rgba(0, 0, 0, 0.54);\n\t--dt-text-3: rgba(0, 0, 0, 0.38);\n\t--dt-accent: #2563eb;\n\t--dt-accent-dim: rgba(37, 99, 235, 0.12);\n\t--dt-glow: rgba(37, 99, 235, 0.25);\n\t--dt-today-bg: rgba(37, 99, 235, 0.04);\n\t--dt-btn-text: #fff;\n\t--dt-scrollbar: rgba(0, 0, 0, 0.1);\n\t--dt-success: rgba(22, 163, 74, 0.7);\n\t--dt-serif: inherit;\n\t--dt-sans: inherit;\n\t--dt-mono: ui-monospace, 'SFMono-Regular', monospace;\n";
17
+ /** Midnight Industrial — dark charcoal + red accent, tech monitoring */
18
+ export declare const midnight = "\n\t--dt-stage-bg: #080a0f;\n\t--dt-bg: #0b0e14;\n\t--dt-surface: #10141c;\n\t--dt-border: rgba(148, 163, 184, 0.07);\n\t--dt-border-day: rgba(148, 163, 184, 0.14);\n\t--dt-text: rgba(226, 232, 240, 0.85);\n\t--dt-text-2: rgba(148, 163, 184, 0.55);\n\t--dt-text-3: rgba(100, 116, 139, 0.55);\n\t--dt-accent: #ef4444;\n\t--dt-accent-dim: rgba(239, 68, 68, 0.18);\n\t--dt-glow: rgba(239, 68, 68, 0.35);\n\t--dt-today-bg: rgba(239, 68, 68, 0.02);\n\t--dt-btn-text: #fff;\n\t--dt-scrollbar: rgba(148, 163, 184, 0.12);\n\t--dt-success: rgba(74, 222, 128, 0.7);\n\t--dt-serif: Georgia, 'Times New Roman', serif;\n";
24
19
  /** All available presets keyed by name */
25
20
  export declare const presets: {
26
- readonly midnight: "\n\t--dt-stage-bg: #080a0f;\n\t--dt-bg: #0b0e14;\n\t--dt-surface: #10141c;\n\t--dt-border: rgba(148, 163, 184, 0.07);\n\t--dt-border-day: rgba(148, 163, 184, 0.14);\n\t--dt-text: rgba(226, 232, 240, 0.85);\n\t--dt-text-2: rgba(148, 163, 184, 0.55);\n\t--dt-text-3: rgba(100, 116, 139, 0.55);\n\t--dt-accent: #ef4444;\n\t--dt-accent-dim: rgba(239, 68, 68, 0.18);\n\t--dt-glow: rgba(239, 68, 68, 0.35);\n\t--dt-today-bg: rgba(239, 68, 68, 0.02);\n\t--dt-btn-text: #fff;\n\t--dt-scrollbar: rgba(148, 163, 184, 0.12);\n\t--dt-success: rgba(74, 222, 128, 0.7);\n\t--dt-serif: Georgia, 'Times New Roman', serif;\n\t--dt-hm-empty: rgba(80, 80, 120, 0.06);\n\t--dt-hm-low: rgba(239, 68, 68, 0.15);\n\t--dt-hm-mid: rgba(239, 68, 68, 0.3);\n\t--dt-hm-high: rgba(239, 68, 68, 0.5);\n\t--dt-hm-max: rgba(239, 68, 68, 0.72);\n";
27
- readonly parchment: "\n\t--dt-stage-bg: #e4dace;\n\t--dt-bg: #f0e9dd;\n\t--dt-surface: #e8dfd0;\n\t--dt-border: rgba(139, 110, 70, 0.12);\n\t--dt-border-day: rgba(139, 110, 70, 0.22);\n\t--dt-text: rgba(55, 40, 22, 0.88);\n\t--dt-text-2: rgba(110, 85, 52, 0.62);\n\t--dt-text-3: rgba(139, 110, 70, 0.42);\n\t--dt-accent: #b85c2f;\n\t--dt-accent-dim: rgba(184, 92, 47, 0.14);\n\t--dt-glow: rgba(184, 92, 47, 0.25);\n\t--dt-today-bg: rgba(184, 92, 47, 0.04);\n\t--dt-btn-text: #fdf6ee;\n\t--dt-scrollbar: rgba(139, 110, 70, 0.15);\n\t--dt-success: rgba(76, 153, 76, 0.7);\n\t--dt-serif: Georgia, 'Times New Roman', serif;\n\t--dt-mono: 'Courier New', 'Courier', monospace;\n\t--dt-sans: 'Outfit', Georgia, serif;\n\t--dt-hm-empty: rgba(139, 110, 70, 0.06);\n\t--dt-hm-low: rgba(184, 92, 47, 0.15);\n\t--dt-hm-mid: rgba(184, 92, 47, 0.3);\n\t--dt-hm-high: rgba(184, 92, 47, 0.5);\n\t--dt-hm-max: rgba(184, 92, 47, 0.72);\n";
28
- readonly indigo: "\n\t--dt-stage-bg: #efedf8;\n\t--dt-bg: #f7f6fc;\n\t--dt-surface: #eeedf8;\n\t--dt-border: rgba(99, 102, 241, 0.08);\n\t--dt-border-day: rgba(99, 102, 241, 0.14);\n\t--dt-text: rgba(30, 27, 55, 0.82);\n\t--dt-text-2: rgba(75, 70, 120, 0.55);\n\t--dt-text-3: rgba(99, 102, 241, 0.3);\n\t--dt-accent: #6366f1;\n\t--dt-accent-dim: rgba(99, 102, 241, 0.12);\n\t--dt-glow: rgba(99, 102, 241, 0.25);\n\t--dt-today-bg: rgba(99, 102, 241, 0.03);\n\t--dt-btn-text: #fff;\n\t--dt-scrollbar: rgba(99, 102, 241, 0.1);\n\t--dt-success: rgba(34, 197, 94, 0.7);\n\t--dt-serif: Georgia, 'Times New Roman', serif;\n\t--dt-sans: 'Outfit', system-ui, sans-serif;\n\t--dt-hm-empty: rgba(99, 102, 241, 0.04);\n\t--dt-hm-low: rgba(99, 102, 241, 0.12);\n\t--dt-hm-mid: rgba(99, 102, 241, 0.28);\n\t--dt-hm-high: rgba(99, 102, 241, 0.48);\n\t--dt-hm-max: rgba(99, 102, 241, 0.7);\n";
29
- readonly neutral: "\n\t--dt-stage-bg: #ffffff;\n\t--dt-bg: #ffffff;\n\t--dt-surface: #f9fafb;\n\t--dt-border: rgba(0, 0, 0, 0.08);\n\t--dt-border-day: rgba(0, 0, 0, 0.14);\n\t--dt-text: rgba(0, 0, 0, 0.87);\n\t--dt-text-2: rgba(0, 0, 0, 0.54);\n\t--dt-text-3: rgba(0, 0, 0, 0.38);\n\t--dt-accent: #2563eb;\n\t--dt-accent-dim: rgba(37, 99, 235, 0.12);\n\t--dt-glow: rgba(37, 99, 235, 0.25);\n\t--dt-today-bg: rgba(37, 99, 235, 0.04);\n\t--dt-btn-text: #fff;\n\t--dt-scrollbar: rgba(0, 0, 0, 0.1);\n\t--dt-success: rgba(22, 163, 74, 0.7);\n\t--dt-serif: inherit;\n\t--dt-sans: inherit;\n\t--dt-mono: ui-monospace, 'SFMono-Regular', monospace;\n\t--dt-hm-empty: rgba(0, 0, 0, 0.03);\n\t--dt-hm-low: rgba(37, 99, 235, 0.12);\n\t--dt-hm-mid: rgba(37, 99, 235, 0.28);\n\t--dt-hm-high: rgba(37, 99, 235, 0.48);\n\t--dt-hm-max: rgba(37, 99, 235, 0.7);\n";
30
- readonly bare: "\n\t--dt-stage-bg: transparent;\n\t--dt-bg: transparent;\n\t--dt-surface: transparent;\n\t--dt-border: currentColor;\n\t--dt-border-day: currentColor;\n\t--dt-text: inherit;\n\t--dt-text-2: inherit;\n\t--dt-text-3: inherit;\n\t--dt-accent: currentColor;\n\t--dt-accent-dim: transparent;\n\t--dt-glow: transparent;\n\t--dt-today-bg: transparent;\n\t--dt-btn-text: inherit;\n\t--dt-scrollbar: currentColor;\n\t--dt-success: currentColor;\n\t--dt-serif: inherit;\n\t--dt-sans: inherit;\n\t--dt-mono: inherit;\n\t--dt-hm-empty: transparent;\n\t--dt-hm-low: currentColor;\n\t--dt-hm-mid: currentColor;\n\t--dt-hm-high: currentColor;\n\t--dt-hm-max: currentColor;\n";
21
+ readonly midnight: "\n\t--dt-stage-bg: #080a0f;\n\t--dt-bg: #0b0e14;\n\t--dt-surface: #10141c;\n\t--dt-border: rgba(148, 163, 184, 0.07);\n\t--dt-border-day: rgba(148, 163, 184, 0.14);\n\t--dt-text: rgba(226, 232, 240, 0.85);\n\t--dt-text-2: rgba(148, 163, 184, 0.55);\n\t--dt-text-3: rgba(100, 116, 139, 0.55);\n\t--dt-accent: #ef4444;\n\t--dt-accent-dim: rgba(239, 68, 68, 0.18);\n\t--dt-glow: rgba(239, 68, 68, 0.35);\n\t--dt-today-bg: rgba(239, 68, 68, 0.02);\n\t--dt-btn-text: #fff;\n\t--dt-scrollbar: rgba(148, 163, 184, 0.12);\n\t--dt-success: rgba(74, 222, 128, 0.7);\n\t--dt-serif: Georgia, 'Times New Roman', serif;\n";
22
+ readonly neutral: "\n\t--dt-stage-bg: #ffffff;\n\t--dt-bg: #ffffff;\n\t--dt-surface: #f9fafb;\n\t--dt-border: rgba(0, 0, 0, 0.08);\n\t--dt-border-day: rgba(0, 0, 0, 0.14);\n\t--dt-text: rgba(0, 0, 0, 0.87);\n\t--dt-text-2: rgba(0, 0, 0, 0.54);\n\t--dt-text-3: rgba(0, 0, 0, 0.38);\n\t--dt-accent: #2563eb;\n\t--dt-accent-dim: rgba(37, 99, 235, 0.12);\n\t--dt-glow: rgba(37, 99, 235, 0.25);\n\t--dt-today-bg: rgba(37, 99, 235, 0.04);\n\t--dt-btn-text: #fff;\n\t--dt-scrollbar: rgba(0, 0, 0, 0.1);\n\t--dt-success: rgba(22, 163, 74, 0.7);\n\t--dt-serif: inherit;\n\t--dt-sans: inherit;\n\t--dt-mono: ui-monospace, 'SFMono-Regular', monospace;\n";
31
23
  };
32
24
  export type PresetName = keyof typeof presets;
@@ -2,86 +2,16 @@
2
2
  * Theme presets for timeline components.
3
3
  *
4
4
  * Each preset is a CSS inline-style string of --dt-* custom properties.
5
- * Pass to the `style` prop of any timeline component.
5
+ * Pass to the `theme` prop of any timeline component.
6
+ *
7
+ * Presets:
8
+ * midnight — Dark mode with red accent
9
+ * neutral — Light mode, inherits host fonts
6
10
  */
7
- /** Midnight Industrial — dark charcoal + red accent, tech monitoring */
8
- export const midnight = `
9
- --dt-stage-bg: #080a0f;
10
- --dt-bg: #0b0e14;
11
- --dt-surface: #10141c;
12
- --dt-border: rgba(148, 163, 184, 0.07);
13
- --dt-border-day: rgba(148, 163, 184, 0.14);
14
- --dt-text: rgba(226, 232, 240, 0.85);
15
- --dt-text-2: rgba(148, 163, 184, 0.55);
16
- --dt-text-3: rgba(100, 116, 139, 0.55);
17
- --dt-accent: #ef4444;
18
- --dt-accent-dim: rgba(239, 68, 68, 0.18);
19
- --dt-glow: rgba(239, 68, 68, 0.35);
20
- --dt-today-bg: rgba(239, 68, 68, 0.02);
21
- --dt-btn-text: #fff;
22
- --dt-scrollbar: rgba(148, 163, 184, 0.12);
23
- --dt-success: rgba(74, 222, 128, 0.7);
24
- --dt-serif: Georgia, 'Times New Roman', serif;
25
- --dt-hm-empty: rgba(80, 80, 120, 0.06);
26
- --dt-hm-low: rgba(239, 68, 68, 0.15);
27
- --dt-hm-mid: rgba(239, 68, 68, 0.3);
28
- --dt-hm-high: rgba(239, 68, 68, 0.5);
29
- --dt-hm-max: rgba(239, 68, 68, 0.72);
30
- `;
31
- /** Desert Parchment — warm analog planner, burnt sienna on aged paper */
32
- export const parchment = `
33
- --dt-stage-bg: #e4dace;
34
- --dt-bg: #f0e9dd;
35
- --dt-surface: #e8dfd0;
36
- --dt-border: rgba(139, 110, 70, 0.12);
37
- --dt-border-day: rgba(139, 110, 70, 0.22);
38
- --dt-text: rgba(55, 40, 22, 0.88);
39
- --dt-text-2: rgba(110, 85, 52, 0.62);
40
- --dt-text-3: rgba(139, 110, 70, 0.42);
41
- --dt-accent: #b85c2f;
42
- --dt-accent-dim: rgba(184, 92, 47, 0.14);
43
- --dt-glow: rgba(184, 92, 47, 0.25);
44
- --dt-today-bg: rgba(184, 92, 47, 0.04);
45
- --dt-btn-text: #fdf6ee;
46
- --dt-scrollbar: rgba(139, 110, 70, 0.15);
47
- --dt-success: rgba(76, 153, 76, 0.7);
48
- --dt-serif: Georgia, 'Times New Roman', serif;
49
- --dt-mono: 'Courier New', 'Courier', monospace;
50
- --dt-sans: 'Outfit', Georgia, serif;
51
- --dt-hm-empty: rgba(139, 110, 70, 0.06);
52
- --dt-hm-low: rgba(184, 92, 47, 0.15);
53
- --dt-hm-mid: rgba(184, 92, 47, 0.3);
54
- --dt-hm-high: rgba(184, 92, 47, 0.5);
55
- --dt-hm-max: rgba(184, 92, 47, 0.72);
56
- `;
57
- /** Soft Indigo — calm productivity, muted lavender with indigo markers */
58
- export const indigo = `
59
- --dt-stage-bg: #efedf8;
60
- --dt-bg: #f7f6fc;
61
- --dt-surface: #eeedf8;
62
- --dt-border: rgba(99, 102, 241, 0.08);
63
- --dt-border-day: rgba(99, 102, 241, 0.14);
64
- --dt-text: rgba(30, 27, 55, 0.82);
65
- --dt-text-2: rgba(75, 70, 120, 0.55);
66
- --dt-text-3: rgba(99, 102, 241, 0.3);
67
- --dt-accent: #6366f1;
68
- --dt-accent-dim: rgba(99, 102, 241, 0.12);
69
- --dt-glow: rgba(99, 102, 241, 0.25);
70
- --dt-today-bg: rgba(99, 102, 241, 0.03);
71
- --dt-btn-text: #fff;
72
- --dt-scrollbar: rgba(99, 102, 241, 0.1);
73
- --dt-success: rgba(34, 197, 94, 0.7);
74
- --dt-serif: Georgia, 'Times New Roman', serif;
75
- --dt-sans: 'Outfit', system-ui, sans-serif;
76
- --dt-hm-empty: rgba(99, 102, 241, 0.04);
77
- --dt-hm-low: rgba(99, 102, 241, 0.12);
78
- --dt-hm-mid: rgba(99, 102, 241, 0.28);
79
- --dt-hm-high: rgba(99, 102, 241, 0.48);
80
- --dt-hm-max: rgba(99, 102, 241, 0.7);
81
- `;
82
11
  /**
83
12
  * Neutral — inherits fonts from host page, uses standard grays + safe blue accent.
84
13
  * Drop-in preset that blends into any website without fighting its design.
14
+ * This is the recommended default.
85
15
  */
86
16
  export const neutral = `
87
17
  --dt-stage-bg: #ffffff;
@@ -102,41 +32,25 @@ export const neutral = `
102
32
  --dt-serif: inherit;
103
33
  --dt-sans: inherit;
104
34
  --dt-mono: ui-monospace, 'SFMono-Regular', monospace;
105
- --dt-hm-empty: rgba(0, 0, 0, 0.03);
106
- --dt-hm-low: rgba(37, 99, 235, 0.12);
107
- --dt-hm-mid: rgba(37, 99, 235, 0.28);
108
- --dt-hm-high: rgba(37, 99, 235, 0.48);
109
- --dt-hm-max: rgba(37, 99, 235, 0.7);
110
35
  `;
111
- /**
112
- * Bare — transparent skeleton that inherits everything from the host page.
113
- * All colors use currentColor/transparent/inherit so the calendar fully absorbs
114
- * the parent site's design. Override individual --dt-* tokens as needed.
115
- */
116
- export const bare = `
117
- --dt-stage-bg: transparent;
118
- --dt-bg: transparent;
119
- --dt-surface: transparent;
120
- --dt-border: currentColor;
121
- --dt-border-day: currentColor;
122
- --dt-text: inherit;
123
- --dt-text-2: inherit;
124
- --dt-text-3: inherit;
125
- --dt-accent: currentColor;
126
- --dt-accent-dim: transparent;
127
- --dt-glow: transparent;
128
- --dt-today-bg: transparent;
129
- --dt-btn-text: inherit;
130
- --dt-scrollbar: currentColor;
131
- --dt-success: currentColor;
132
- --dt-serif: inherit;
133
- --dt-sans: inherit;
134
- --dt-mono: inherit;
135
- --dt-hm-empty: transparent;
136
- --dt-hm-low: currentColor;
137
- --dt-hm-mid: currentColor;
138
- --dt-hm-high: currentColor;
139
- --dt-hm-max: currentColor;
36
+ /** Midnight Industrial — dark charcoal + red accent, tech monitoring */
37
+ export const midnight = `
38
+ --dt-stage-bg: #080a0f;
39
+ --dt-bg: #0b0e14;
40
+ --dt-surface: #10141c;
41
+ --dt-border: rgba(148, 163, 184, 0.07);
42
+ --dt-border-day: rgba(148, 163, 184, 0.14);
43
+ --dt-text: rgba(226, 232, 240, 0.85);
44
+ --dt-text-2: rgba(148, 163, 184, 0.55);
45
+ --dt-text-3: rgba(100, 116, 139, 0.55);
46
+ --dt-accent: #ef4444;
47
+ --dt-accent-dim: rgba(239, 68, 68, 0.18);
48
+ --dt-glow: rgba(239, 68, 68, 0.35);
49
+ --dt-today-bg: rgba(239, 68, 68, 0.02);
50
+ --dt-btn-text: #fff;
51
+ --dt-scrollbar: rgba(148, 163, 184, 0.12);
52
+ --dt-success: rgba(74, 222, 128, 0.7);
53
+ --dt-serif: Georgia, 'Times New Roman', serif;
140
54
  `;
141
55
  /** All available presets keyed by name */
142
- export const presets = { midnight, parchment, indigo, neutral, bare };
56
+ export const presets = { midnight, neutral };