eidotter 0.6.0 → 0.10.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 (106) hide show
  1. package/LICENSE.md +0 -0
  2. package/README.md +0 -0
  3. package/dist/components/Accordion/components/AccordionFill.d.ts +0 -0
  4. package/dist/components/Accordion/components/Section.d.ts +0 -0
  5. package/dist/components/Accordion/components/index.d.ts +0 -0
  6. package/dist/components/Accordion/index.d.ts +0 -0
  7. package/dist/components/Alert/components/Alert.d.ts +0 -0
  8. package/dist/components/Alert/components/index.d.ts +0 -0
  9. package/dist/components/Alert/index.d.ts +0 -0
  10. package/dist/components/Badge/components/Badge.d.ts +0 -0
  11. package/dist/components/Badge/components/index.d.ts +0 -0
  12. package/dist/components/Badge/index.d.ts +0 -0
  13. package/dist/components/Breadcrumb/components/Breadcrumb.d.ts +0 -0
  14. package/dist/components/Breadcrumb/components/index.d.ts +0 -0
  15. package/dist/components/Breadcrumb/index.d.ts +0 -0
  16. package/dist/components/Button/components/Button.d.ts +1 -0
  17. package/dist/components/Button/components/index.d.ts +0 -0
  18. package/dist/components/Button/index.d.ts +0 -0
  19. package/dist/components/Card/components/Card.d.ts +0 -0
  20. package/dist/components/Card/components/index.d.ts +0 -0
  21. package/dist/components/Card/index.d.ts +0 -0
  22. package/dist/components/Checkbox/components/Checkbox.d.ts +1 -0
  23. package/dist/components/Checkbox/components/index.d.ts +0 -0
  24. package/dist/components/Checkbox/index.d.ts +0 -0
  25. package/dist/components/CommandPrompt/components/CommandPrompt.d.ts +0 -0
  26. package/dist/components/CommandPrompt/components/index.d.ts +0 -0
  27. package/dist/components/CommandPrompt/index.d.ts +0 -0
  28. package/dist/components/FilterBar/components/FilterBar.d.ts +0 -0
  29. package/dist/components/FilterBar/components/index.d.ts +0 -0
  30. package/dist/components/FilterBar/index.d.ts +0 -0
  31. package/dist/components/Icon/components/Icon.d.ts +0 -0
  32. package/dist/components/Icon/components/index.d.ts +0 -0
  33. package/dist/components/Icon/index.d.ts +0 -0
  34. package/dist/components/InlineExpand/components/InlineExpand.d.ts +58 -0
  35. package/dist/components/InlineExpand/components/index.d.ts +2 -0
  36. package/dist/components/InlineExpand/index.d.ts +2 -0
  37. package/dist/components/Input/components/Input.d.ts +0 -0
  38. package/dist/components/Input/components/index.d.ts +0 -0
  39. package/dist/components/Input/index.d.ts +0 -0
  40. package/dist/components/Modal/components/Modal.d.ts +0 -0
  41. package/dist/components/Modal/components/index.d.ts +0 -0
  42. package/dist/components/Modal/index.d.ts +0 -0
  43. package/dist/components/Progress/components/Progress.d.ts +0 -0
  44. package/dist/components/Progress/components/index.d.ts +0 -0
  45. package/dist/components/Progress/index.d.ts +0 -0
  46. package/dist/components/RetroEffects/components/RetroEffects.d.ts +0 -0
  47. package/dist/components/RetroEffects/components/index.d.ts +0 -0
  48. package/dist/components/RetroEffects/index.d.ts +0 -0
  49. package/dist/components/Stat/components/Stat.d.ts +4 -0
  50. package/dist/components/Stat/components/index.d.ts +0 -0
  51. package/dist/components/Stat/index.d.ts +0 -0
  52. package/dist/components/Switch/components/Switch.d.ts +0 -0
  53. package/dist/components/Switch/components/index.d.ts +0 -0
  54. package/dist/components/Switch/index.d.ts +0 -0
  55. package/dist/components/Tabs/components/Tabs.d.ts +0 -0
  56. package/dist/components/Tabs/components/index.d.ts +0 -0
  57. package/dist/components/Tabs/index.d.ts +0 -0
  58. package/dist/components/Tag/components/Tag.d.ts +41 -0
  59. package/dist/components/Tag/components/TagGroup.d.ts +19 -0
  60. package/dist/components/Tag/components/index.d.ts +4 -0
  61. package/dist/components/Tag/index.d.ts +2 -0
  62. package/dist/components/Terminal/components/Terminal.d.ts +0 -0
  63. package/dist/components/Terminal/components/index.d.ts +0 -0
  64. package/dist/components/Terminal/index.d.ts +0 -0
  65. package/dist/components/TextScramble/components/TextScramble.d.ts +13 -0
  66. package/dist/components/TextScramble/components/index.d.ts +2 -0
  67. package/dist/components/TextScramble/index.d.ts +1 -0
  68. package/dist/components/TimelineContainer/components/TimelineAxis.d.ts +10 -0
  69. package/dist/components/TimelineContainer/components/TimelineContainer.d.ts +57 -0
  70. package/dist/components/TimelineContainer/components/TimelineContent.d.ts +13 -0
  71. package/dist/components/TimelineContainer/components/TimelineEntryCard.d.ts +14 -0
  72. package/dist/components/TimelineContainer/components/ZoomControls.d.ts +12 -0
  73. package/dist/components/TimelineContainer/components/index.d.ts +4 -0
  74. package/dist/components/TimelineContainer/components/timelineUtils.d.ts +11 -0
  75. package/dist/components/TimelineContainer/components/timelineUtils.test.d.ts +1 -0
  76. package/dist/components/TimelineContainer/components/types.d.ts +42 -0
  77. package/dist/components/TimelineContainer/components/useSelection.d.ts +15 -0
  78. package/dist/components/TimelineContainer/components/useSelection.test.d.ts +1 -0
  79. package/dist/components/TimelineContainer/components/useZoom.d.ts +19 -0
  80. package/dist/components/TimelineContainer/components/useZoom.test.d.ts +1 -0
  81. package/dist/components/TimelineContainer/components/views/DayView.d.ts +6 -0
  82. package/dist/components/TimelineContainer/components/views/HourView.d.ts +6 -0
  83. package/dist/components/TimelineContainer/components/views/MonthView.d.ts +6 -0
  84. package/dist/components/TimelineContainer/components/views/YearView.d.ts +6 -0
  85. package/dist/components/TimelineContainer/components/views/index.d.ts +4 -0
  86. package/dist/components/TimelineContainer/index.d.ts +3 -0
  87. package/dist/components/TimelineNode/components/TimelineNode.d.ts +0 -0
  88. package/dist/components/TimelineNode/components/index.d.ts +0 -0
  89. package/dist/components/TimelineNode/index.d.ts +0 -0
  90. package/dist/components/registry.d.ts +0 -0
  91. package/dist/eidotter.css +1 -1
  92. package/dist/index.d.ts +13 -1
  93. package/dist/index.es.js +1543 -602
  94. package/dist/index.umd.js +5 -5
  95. package/guidelines/README.md +0 -0
  96. package/guidelines/components.md +0 -0
  97. package/guidelines/patterns.md +0 -0
  98. package/guidelines/tokens.md +0 -0
  99. package/package.json +2 -2
  100. package/src/styles/theme.amber-mono.css +30 -0
  101. package/src/styles/theme.cga-amber.css +30 -0
  102. package/src/styles/theme.cga-mode4-p0.css +0 -0
  103. package/src/styles/theme.cga-mode4-p1.css +0 -0
  104. package/src/styles/theme.cga-mode5.css +0 -0
  105. package/src/styles/tokens.css +30 -0
  106. package/tailwind.preset.cjs +0 -0
package/LICENSE.md CHANGED
File without changes
package/README.md CHANGED
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -1,4 +1,5 @@
1
1
  import React from 'react';
2
+ import '../../../styles/keyframes.css';
2
3
  import './Button.css';
3
4
  export interface ButtonProps {
4
5
  /**
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -1,4 +1,5 @@
1
1
  import React from 'react';
2
+ import '../../../styles/keyframes.css';
2
3
  import './Checkbox.css';
3
4
  export interface CheckboxProps {
4
5
  /**
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -0,0 +1,58 @@
1
+ import React from 'react';
2
+ import './InlineExpand.css';
3
+ export interface InlineExpandSource {
4
+ /** Link text displayed as accessible label */
5
+ title: string;
6
+ /** URL — must be a valid absolute URL (http, https, or mailto) */
7
+ url: string;
8
+ /** Optional favicon URL; falls back to generic link icon */
9
+ favicon?: string;
10
+ }
11
+ export interface InlineExpandProps {
12
+ /**
13
+ * Trigger text or element displayed inline — the clickable toggle
14
+ */
15
+ children: React.ReactNode;
16
+ /**
17
+ * Content revealed when expanded — accepts ReactNode for composability
18
+ */
19
+ content: React.ReactNode;
20
+ /**
21
+ * Whether the content is expanded on first render (uncontrolled mode)
22
+ */
23
+ defaultExpanded?: boolean;
24
+ /**
25
+ * Controlled expanded state — overrides internal state when provided
26
+ */
27
+ expanded?: boolean;
28
+ /**
29
+ * Called when the expand/collapse state changes
30
+ */
31
+ onToggle?: (isExpanded: boolean) => void;
32
+ /**
33
+ * Optional citation sources rendered after expanded content
34
+ */
35
+ sources?: InlineExpandSource[];
36
+ /**
37
+ * Additional CSS class names
38
+ */
39
+ className?: string;
40
+ }
41
+ /**
42
+ * Inline disclosure widget that reveals content when trigger text is clicked.
43
+ *
44
+ * Unlike Section/Accordion (block-level, bordered sections), InlineExpand is
45
+ * designed for inline use within paragraphs and prose content.
46
+ *
47
+ * Features:
48
+ * - Controlled and uncontrolled modes
49
+ * - Native <button> trigger for full keyboard/screen reader support
50
+ * - Optional citation sources with favicons
51
+ * - DOS-authentic styling with phosphor glow and CGA tokens
52
+ * - WCAG 2.1 AA compliant
53
+ *
54
+ * Content stays in the DOM when collapsed (with visibility: hidden) to enable
55
+ * smooth CSS transition exit animations. This differs from Section which
56
+ * unmounts content on collapse via conditional rendering.
57
+ */
58
+ export declare const InlineExpand: React.FC<InlineExpandProps>;
@@ -0,0 +1,2 @@
1
+ export { InlineExpand } from './InlineExpand';
2
+ export type { InlineExpandProps, InlineExpandSource } from './InlineExpand';
@@ -0,0 +1,2 @@
1
+ export { InlineExpand } from './components';
2
+ export type { InlineExpandProps, InlineExpandSource } from './components';
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -21,6 +21,10 @@ export interface StatProps {
21
21
  * Size variant
22
22
  */
23
23
  size?: 'small' | 'medium' | 'large';
24
+ /**
25
+ * Whether to animate value changes with a text scramble effect
26
+ */
27
+ scramble?: boolean;
24
28
  /**
25
29
  * Optional CSS class name
26
30
  */
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -0,0 +1,41 @@
1
+ import React from 'react';
2
+ import './Tag.css';
3
+ export interface TagProps {
4
+ /** Tag display text */
5
+ children: React.ReactNode;
6
+ /** Visual variant */
7
+ variant?: 'default' | 'outlined' | 'filled';
8
+ /** The size of the tag */
9
+ size?: 'small' | 'medium';
10
+ /** CGA color token for border and text (e.g. '--color-cga-bright-cyan') */
11
+ color?: string;
12
+ /** Whether the tag appears in selected/active state */
13
+ selected?: boolean;
14
+ /** Whether to show a close button */
15
+ closeable?: boolean;
16
+ /** Whether the tag is disabled */
17
+ disabled?: boolean;
18
+ /** Click handler for the tag body */
19
+ onClick?: (event: React.MouseEvent<HTMLElement>) => void;
20
+ /** Close handler, called after dismiss animation completes */
21
+ onClose?: () => void;
22
+ /** Additional CSS class name */
23
+ className?: string;
24
+ /** Accessible label for the tag */
25
+ 'aria-label'?: string;
26
+ }
27
+ /**
28
+ * DOS-styled Tag component for interactive labels
29
+ *
30
+ * Extends Badge's display-only approach with click, close, and selection
31
+ * behaviors. Use for content labels, category indicators, and filter chips.
32
+ *
33
+ * Features:
34
+ * - Three visual variants (default, outlined, filled)
35
+ * - Optional close button with DOS-authentic [x]
36
+ * - Toggle-able selected state
37
+ * - Custom CGA color support via CSS custom property
38
+ * - Keyboard accessible (Enter/Space to click, Delete/Backspace to close)
39
+ * - WCAG 2.1 AA compliant
40
+ */
41
+ export declare const Tag: React.FC<TagProps>;
@@ -0,0 +1,19 @@
1
+ import React from 'react';
2
+ export interface TagGroupProps {
3
+ /** Tag elements to render */
4
+ children: React.ReactNode;
5
+ /** Spacing between tags */
6
+ gap?: 'tight' | 'normal' | 'loose';
7
+ /** Wrap tags to multiple lines (default true) */
8
+ wrap?: boolean;
9
+ /** Additional CSS class name */
10
+ className?: string;
11
+ /** Accessible label for the tag group */
12
+ 'aria-label'?: string;
13
+ }
14
+ /**
15
+ * Wrapper for rendering multiple Tag components with consistent spacing
16
+ *
17
+ * Provides flex layout with configurable gap and optional wrapping.
18
+ */
19
+ export declare const TagGroup: React.FC<TagGroupProps>;
@@ -0,0 +1,4 @@
1
+ export { Tag } from './Tag';
2
+ export type { TagProps } from './Tag';
3
+ export { TagGroup } from './TagGroup';
4
+ export type { TagGroupProps } from './TagGroup';
@@ -0,0 +1,2 @@
1
+ export { Tag, TagGroup } from './components';
2
+ export type { TagProps, TagGroupProps } from './components';
File without changes
File without changes
File without changes
@@ -0,0 +1,13 @@
1
+ import React from 'react';
2
+ import './TextScramble.css';
3
+ export interface TextScrambleProps extends Omit<React.HTMLAttributes<HTMLSpanElement>, 'children'> {
4
+ /** The text to display with scramble effect */
5
+ children: string;
6
+ /** Milliseconds per character position (default: 40) */
7
+ speed?: number;
8
+ /** Character set to use for scramble effect */
9
+ characters?: string;
10
+ /** Milliseconds before scramble starts (default: 0) */
11
+ delay?: number;
12
+ }
13
+ export declare const TextScramble: React.FC<TextScrambleProps>;
@@ -0,0 +1,2 @@
1
+ export { TextScramble } from './TextScramble';
2
+ export type { TextScrambleProps } from './TextScramble';
@@ -0,0 +1 @@
1
+ export * from './components';
@@ -0,0 +1,10 @@
1
+ import React from 'react';
2
+ import './TimelineAxis.css';
3
+ export interface TimelineAxisProps {
4
+ children: React.ReactNode;
5
+ }
6
+ /**
7
+ * Vertical spine connecting timeline nodes.
8
+ * Wraps content with a continuous vertical line on the left side.
9
+ */
10
+ export declare const TimelineAxis: React.FC<TimelineAxisProps>;
@@ -0,0 +1,57 @@
1
+ import React from 'react';
2
+ import type { TimelineEntry, ZoomLevel } from './types';
3
+ import './TimelineContainer.css';
4
+ import './views/views.css';
5
+ export interface TimelineContainerProps extends React.HTMLAttributes<HTMLDivElement> {
6
+ /** Timeline entries to display */
7
+ entries: TimelineEntry[];
8
+ /**
9
+ * Controlled zoom level — overrides internal state when provided.
10
+ * Use with `onZoomChange` for full control.
11
+ */
12
+ zoomLevel?: ZoomLevel;
13
+ /**
14
+ * Initial zoom level for uncontrolled mode
15
+ * @default 'month'
16
+ */
17
+ defaultZoomLevel?: ZoomLevel;
18
+ /** Callback fired when the zoom level changes */
19
+ onZoomChange?: (level: ZoomLevel) => void;
20
+ /**
21
+ * Controlled selection — overrides internal state when provided.
22
+ * `null` means nothing selected, `undefined` means uncontrolled.
23
+ */
24
+ selectedEntryId?: string | null;
25
+ /**
26
+ * Initial selected entry for uncontrolled mode
27
+ * @default null
28
+ */
29
+ defaultSelectedEntryId?: string | null;
30
+ /** Callback fired when entry selection changes */
31
+ onSelectEntry?: (entryId: string | null) => void;
32
+ /**
33
+ * Sort order for entries within buckets
34
+ * @default 'desc'
35
+ */
36
+ sortOrder?: 'asc' | 'desc';
37
+ /**
38
+ * Enable Ctrl/Cmd + scroll wheel to zoom
39
+ * @default true
40
+ */
41
+ scrollToZoom?: boolean;
42
+ /**
43
+ * Enable keyboard shortcuts (Ctrl+=/-/0, Escape)
44
+ * @default true
45
+ */
46
+ keyboardShortcuts?: boolean;
47
+ }
48
+ /**
49
+ * TimelineContainer - Interactive multi-level zoom timeline
50
+ *
51
+ * A composite timeline component with 4 zoom levels (year, month, day, hour),
52
+ * entry selection, keyboard shortcuts, and scroll-to-zoom. Uses DOS/CGA
53
+ * aesthetic with eidotter primitives (TimelineNode, Card, Badge, Tag).
54
+ *
55
+ * Supports both controlled and uncontrolled patterns for zoom and selection.
56
+ */
57
+ export declare const TimelineContainer: React.FC<TimelineContainerProps>;
@@ -0,0 +1,13 @@
1
+ import React from 'react';
2
+ import type { ZoomLevel, DateBucket } from './types';
3
+ export interface TimelineContentProps {
4
+ zoomLevel: ZoomLevel;
5
+ buckets: readonly DateBucket[];
6
+ selectedEntryId: string | null;
7
+ onEntrySelect?: (entryId: string) => void;
8
+ onBucketClick?: (bucket: DateBucket) => void;
9
+ }
10
+ /**
11
+ * View switcher that renders the appropriate zoom level view.
12
+ */
13
+ export declare const TimelineContent: React.FC<TimelineContentProps>;
@@ -0,0 +1,14 @@
1
+ import React from 'react';
2
+ import type { TimelineEntry } from './types';
3
+ export interface TimelineEntryCardProps {
4
+ entry: TimelineEntry;
5
+ isSelected: boolean;
6
+ onSelect?: (id: string) => void;
7
+ footer?: React.ReactNode;
8
+ children: React.ReactNode;
9
+ }
10
+ /**
11
+ * Memoized entry card wrapper. On selection change, only 2 cards re-render
12
+ * (previously selected + newly selected) instead of all N.
13
+ */
14
+ export declare const TimelineEntryCard: React.NamedExoticComponent<TimelineEntryCardProps>;
@@ -0,0 +1,12 @@
1
+ import React from 'react';
2
+ import type { ZoomLevel } from './types';
3
+ import './ZoomControls.css';
4
+ export interface ZoomControlsProps {
5
+ zoomLevel: ZoomLevel;
6
+ canZoomIn: boolean;
7
+ canZoomOut: boolean;
8
+ onZoomIn: () => void;
9
+ onZoomOut: () => void;
10
+ onReset: () => void;
11
+ }
12
+ export declare const ZoomControls: React.FC<ZoomControlsProps>;
@@ -0,0 +1,4 @@
1
+ export { TimelineContainer } from './TimelineContainer';
2
+ export type { TimelineContainerProps } from './TimelineContainer';
3
+ export { ZOOM_LEVELS } from './types';
4
+ export type { TimelineEntry, DateBucket, ZoomLevel } from './types';
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Timeline utility functions for grouping entries and formatting dates.
3
+ * Pure functions with zero external dependencies — uses only native Date/Intl.
4
+ */
5
+ import type { TimelineEntry, DateBucket, ZoomLevel } from './types';
6
+ /** Format a full timestamp: "Mar 15, 2024 at 2:30pm" */
7
+ export declare function formatTimestamp(iso: string): string;
8
+ /**
9
+ * Group timeline entries into DateBuckets based on the current zoom level.
10
+ */
11
+ export declare function groupEntriesByZoom(entries: TimelineEntry[], zoomLevel: ZoomLevel, sortOrder?: 'asc' | 'desc'): DateBucket[];
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Shared type definitions for TimelineContainer.
3
+ * Extracted to a separate file to avoid circular imports between
4
+ * the component, hooks, and view sub-components.
5
+ */
6
+ /** Ordered zoom levels from least to most detail */
7
+ export declare const ZOOM_LEVELS: readonly ["year", "month", "day", "hour"];
8
+ /** Timeline zoom level */
9
+ export type ZoomLevel = (typeof ZOOM_LEVELS)[number];
10
+ export interface TimelineEntry {
11
+ /** Unique identifier for this entry */
12
+ id: string;
13
+ /** Entry category — not rendered by default; available for consumer-side filtering/styling. Consider discriminated union if type-specific fields are added. */
14
+ type: 'event' | 'project' | 'milestone';
15
+ /** ISO 8601 date string */
16
+ date: string;
17
+ /** Display title */
18
+ title: string;
19
+ /** Entry body content */
20
+ content: string;
21
+ /** Categorization tags */
22
+ tags: string[];
23
+ }
24
+ export interface DateBucket {
25
+ /** Human-readable label, e.g. "2024", "March 2024", "Mar 15" */
26
+ label: string;
27
+ /** ISO 8601 period start for sorting */
28
+ periodStart: string;
29
+ /** Entries grouped into this time bucket */
30
+ entries: readonly TimelineEntry[];
31
+ }
32
+ /** Shared props interface for zoom-level view components */
33
+ export interface TimelineViewProps {
34
+ /** Grouped entry buckets to display */
35
+ buckets: readonly DateBucket[];
36
+ /** Callback when an entry is selected */
37
+ onEntrySelect?: (id: string) => void;
38
+ /** Currently selected entry ID */
39
+ selectedEntryId?: string | null;
40
+ /** Callback when a bucket header is clicked (for drill-down) */
41
+ onBucketClick?: (bucket: DateBucket) => void;
42
+ }
@@ -0,0 +1,15 @@
1
+ export interface UseSelectionOptions {
2
+ selectedEntryId?: string | null;
3
+ defaultSelectedEntryId?: string | null;
4
+ onSelectEntry?: (entryId: string | null) => void;
5
+ }
6
+ export interface UseSelectionReturn {
7
+ selectedEntryId: string | null;
8
+ select: (entryId: string) => void;
9
+ deselect: () => void;
10
+ toggle: (entryId: string) => void;
11
+ }
12
+ /**
13
+ * Manages entry selection with controlled/uncontrolled pattern.
14
+ */
15
+ export declare function useSelection({ selectedEntryId: controlledId, defaultSelectedEntryId, onSelectEntry, }?: UseSelectionOptions): UseSelectionReturn;
@@ -0,0 +1,19 @@
1
+ import type { ZoomLevel } from './types';
2
+ export interface UseZoomOptions {
3
+ zoomLevel?: ZoomLevel;
4
+ defaultZoomLevel?: ZoomLevel;
5
+ onZoomChange?: (level: ZoomLevel) => void;
6
+ }
7
+ export interface UseZoomReturn {
8
+ zoomLevel: ZoomLevel;
9
+ zoomIn: () => void;
10
+ zoomOut: () => void;
11
+ reset: () => void;
12
+ canZoomIn: boolean;
13
+ canZoomOut: boolean;
14
+ }
15
+ /**
16
+ * Manages zoom level with controlled/uncontrolled pattern.
17
+ * Zoom "in" means more detail (year -> month -> day -> hour).
18
+ */
19
+ export declare function useZoom({ zoomLevel: controlledLevel, defaultZoomLevel, onZoomChange, }?: UseZoomOptions): UseZoomReturn;
@@ -0,0 +1,6 @@
1
+ import React from 'react';
2
+ import type { TimelineViewProps } from '../types';
3
+ /**
4
+ * Day-level zoom view: shows day labels with entry cards and content preview.
5
+ */
6
+ export declare const DayView: React.NamedExoticComponent<TimelineViewProps>;
@@ -0,0 +1,6 @@
1
+ import React from 'react';
2
+ import type { TimelineViewProps } from '../types';
3
+ /**
4
+ * Hour-level zoom view: full detail with timestamps and complete content.
5
+ */
6
+ export declare const HourView: React.NamedExoticComponent<TimelineViewProps>;
@@ -0,0 +1,6 @@
1
+ import React from 'react';
2
+ import type { TimelineViewProps } from '../types';
3
+ /**
4
+ * Month-level zoom view: shows month labels with entry title lists.
5
+ */
6
+ export declare const MonthView: React.NamedExoticComponent<TimelineViewProps>;
@@ -0,0 +1,6 @@
1
+ import React from 'react';
2
+ import type { TimelineViewProps } from '../types';
3
+ /**
4
+ * Year-level zoom view: shows year labels with entry counts per year.
5
+ */
6
+ export declare const YearView: React.NamedExoticComponent<TimelineViewProps>;
@@ -0,0 +1,4 @@
1
+ export { YearView } from './YearView';
2
+ export { MonthView } from './MonthView';
3
+ export { DayView } from './DayView';
4
+ export { HourView } from './HourView';
@@ -0,0 +1,3 @@
1
+ export { TimelineContainer } from './components';
2
+ export type { TimelineContainerProps, TimelineEntry, DateBucket, ZoomLevel } from './components';
3
+ export { ZOOM_LEVELS } from './components';
File without changes
File without changes