Files
calchat/apps/client/src/Themes.tsx
Linus Waldowsky 2b999d9b0f feat: add recurring event deletion with three modes
Implement three deletion modes for recurring events:
- single: exclude specific occurrence via EXDATE mechanism
- future: set RRULE UNTIL to stop future occurrences
- all: delete entire event series

Changes include:
- Add exceptionDates field to CalendarEvent model
- Add RecurringDeleteMode type and DeleteRecurringEventDTO
- EventService.deleteRecurring() with mode-based logic using rrule library
- EventController DELETE endpoint accepts mode/occurrenceDate query params
- recurrenceExpander filters out exception dates during expansion
- AI tools support deleteMode and occurrenceDate for proposed deletions
- ChatService.confirmEvent() handles recurring delete modes
- New DeleteEventModal component for unified delete confirmation UI
- Calendar screen integrates modal for both recurring and non-recurring events
2026-01-25 15:19:31 +01:00

61 lines
1.4 KiB
TypeScript

export type Theme = {
chatBot: string;
primeFg: string;
primeBg: string;
secondaryBg: string;
messageBorderBg: string;
placeholderBg: string;
calenderBg: string;
confirmButton: string;
rejectButton: string;
disabledButton: string;
buttonText: string;
textPrimary: string;
textSecondary: string;
textMuted: string;
eventIndicator: string;
borderPrimary: string;
shadowColor: string;
};
export const THEMES = {
defaultLight: {
chatBot: "#DE6C20",
primeFg: "#3B3329",
primeBg: "#FFEEDE",
secondaryBg: "#FFFFFF",
messageBorderBg: "#FFFFFF",
placeholderBg: "#D9D9D9",
calenderBg: "#FBD5B2",
confirmButton: "#22c55e",
rejectButton: "#ef4444",
disabledButton: "#ccc",
buttonText: "#000000",
textPrimary: "#000000",
textSecondary: "#666",
textMuted: "#888",
eventIndicator: "#DE6C20",
borderPrimary: "#000000",
shadowColor: "#000000",
},
defaultDark: {
chatBot: "#DE6C20",
primeFg: "#F5E6D3",
primeBg: "#1A1512",
secondaryBg: "#2A2420",
messageBorderBg: "#3A3430",
placeholderBg: "#4A4440",
calenderBg: "#3D2A1A",
confirmButton: "#22c55e",
rejectButton: "#ef4444",
disabledButton: "#555",
buttonText: "#FFFFFF",
textPrimary: "#FFFFFF",
textSecondary: "#AAA",
textMuted: "#777",
eventIndicator: "#DE6C20",
borderPrimary: "#FFFFFF",
shadowColor: "#FFFFFF",
},
} as const satisfies Record<string, Theme>;