managarten/packages/shared-ui/src/molecules/index.ts
Till JS 4fa096147c feat(shared-stores,shared-ui): add shared reminder system
Add notificationService (Browser Notification API wrapper),
createReminderScheduler (30s poller with source pattern for checking
due reminders), and ReminderPicker UI component.

Todo module gets todoReminderSource (checks task dueDate - minutesBefore)
and ReminderSelector now delegates to shared ReminderPicker.

Scheduler supports multiple sources (todo, calendar, planta, etc.),
tag-based dedup, graceful error handling, and runtime source addition.
22 new tests (8 notification + 8 scheduler + 6 ReminderPicker).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 16:54:15 +02:00

61 lines
1.9 KiB
TypeScript

export { default as Toggle } from './Toggle.svelte';
export { default as Input } from './Input.svelte';
export { default as Select } from './Select.svelte';
export { default as Textarea } from './Textarea.svelte';
export { default as Checkbox } from './Checkbox.svelte';
export { default as FilterDropdown } from './FilterDropdown.svelte';
export { default as FavoriteButton } from './FavoriteButton.svelte';
export { default as ColorPicker } from './ColorPicker.svelte';
export { COLORS_12, COLORS_16, DEFAULT_COLOR, getRandomColor } from './ColorPicker.constants';
export { default as ReminderPicker } from './ReminderPicker.svelte';
export type { SelectOption } from './Select.types';
export type { FilterDropdownOption } from './FilterDropdown.types';
// Stats components
export { GlassCard, StatRow } from './stats';
// Tag components
export {
TagBadge,
TagChip,
TagColorPicker,
TagEditModal,
TagSelector,
TagList,
TAG_COLORS,
DEFAULT_TAG_COLOR,
getRandomTagColor,
getTagColorByName,
} from './tags';
export type { Tag, TagData, TagColorName, TagColorHex } from './tags';
// Media components
export { AudioPlayer } from './media';
// Loading components
export {
SkeletonBox,
SkeletonText,
SkeletonAvatar,
SkeletonRow,
SkeletonList,
SkeletonCard,
SkeletonGrid,
AppLoadingSkeleton,
calculateFadeOpacity,
} from './loaders';
// Feedback components
export { EmptyState } from './feedback';
// Contact components
export { ContactAvatar, ContactBadge, ContactSelector } from './contacts';
// Layout components
export { default as ModalFooter } from './ModalFooter.svelte';
export { default as DataCard } from './DataCard.svelte';
export { default as PageHeader } from './PageHeader.svelte';
export { default as KeyboardShortcutsPanel } from './KeyboardShortcutsPanel.svelte';
// Confirmation
export { default as ConfirmationPopover } from './ConfirmationPopover.svelte';