diff --git a/CLAUDE.md b/CLAUDE.md index a2ad7e2..8b44818 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -98,7 +98,7 @@ src/ │ ├── EventConfirmDialog.tsx # AI-proposed event confirmation modal (skeleton) │ ├── ProposedEventCard.tsx # Chat event proposal (uses EventCardBase + confirm/reject/edit buttons) │ ├── DeleteEventModal.tsx # Delete confirmation modal (uses ModalBase) -│ ├── CustomTextInput.tsx # Themed text input with focus border (used in CaldavSettings) +│ ├── CustomTextInput.tsx # Themed text input with focus border (used in login, register, CaldavSettings, editEvent) │ ├── DateTimePicker.tsx # Date and time picker components │ └── ScrollableDropdown.tsx # Scrollable dropdown component ├── Themes.tsx # Theme definitions: THEMES object with defaultLight/defaultDark, Theme type @@ -602,8 +602,8 @@ NODE_ENV=development # development = pretty logs, production = JSON - `AuthService`: login(), register(), logout() - calls backend API - `ApiClient`: Automatically injects X-User-Id header for authenticated requests, handles empty responses (204) - `AuthGuard`: Reusable component that wraps protected routes - loads user, preloads app data (events + CalDAV config) into stores before dismissing spinner, triggers CalDAV sync, shows loading, redirects if unauthenticated. Exports `preloadAppData()` (also called by `login.tsx`) - - Login screen: Supports email OR userName login, preloads app data + triggers CalDAV sync after successful login - - Register screen: Email validation, checks for existing email/userName + - Login screen: Supports email OR userName login, uses CustomTextInput with focus border, preloads app data + triggers CalDAV sync after successful login + - Register screen: Email validation, checks for existing email/userName, uses CustomTextInput with focus border - `AuthButton`: Reusable button component with themed shadow - `Header`: Themed header component (logout moved to Settings) - `(tabs)/_layout.tsx`: Wraps tabs with AuthGuard for protected access @@ -639,7 +639,7 @@ NODE_ENV=development # development = pretty logs, production = JSON - `EventService`: getAll(), getById(), getByDateRange(), create(), update(), delete(mode, occurrenceDate) - fully implemented with recurring delete modes - `ChatService`: sendMessage(), confirmEvent(deleteMode, occurrenceDate), rejectEvent(), getConversations(), getConversation(), updateProposalEvent() - fully implemented with cursor pagination, recurring delete support, and proposal editing - `CaldavConfigService`: saveConfig(), getConfig(), deleteConfig(), pull(), pushAll(), sync() - CalDAV config management and sync trigger -- `CustomTextInput`: Themed text input component with focus border highlight, supports controlled value via `text` prop +- `CustomTextInput`: Themed text input with focus border highlight. Props: `text`, `onValueChange`, `placeholder`, `placeholderTextColor`, `secureTextEntry`, `autoCapitalize`, `keyboardType`, `className`, `multiline`. No default padding — callers must set padding via `className` (e.g., `px-3 py-2` or `p-4`) - `CardBase`: Reusable card component with header (title/subtitle), content area, and optional footer button - configurable padding, border, text size via props, ScrollView uses `nestedScrollEnabled` for Android - `ModalBase`: Reusable modal wrapper with backdrop (absolute-positioned behind card), uses CardBase internally - provides click-outside-to-close, Android back button support, and proper scrolling on Android - `EventCardBase`: Event card with date/time/recurring icons - uses CardBase for structure. Accepts `recurrenceRule` string (not boolean) and displays German-formatted recurrence via `formatRecurrenceRule()` diff --git a/apps/client/src/app/(tabs)/settings.tsx b/apps/client/src/app/(tabs)/settings.tsx index b9c0fdf..04f2f0e 100644 --- a/apps/client/src/app/(tabs)/settings.tsx +++ b/apps/client/src/app/(tabs)/settings.tsx @@ -44,7 +44,7 @@ const CaldavTextInput = ({ {title}: diff --git a/apps/client/src/app/editEvent.tsx b/apps/client/src/app/editEvent.tsx index d1968d4..23980a5 100644 --- a/apps/client/src/app/editEvent.tsx +++ b/apps/client/src/app/editEvent.tsx @@ -43,7 +43,7 @@ const EditEventTextField = (props: EditEventTextFieldProps) => { {props.titel} { )} - - { )} - - - void; + placeholder?: string; + placeholderTextColor?: string; + secureTextEntry?: boolean; + autoCapitalize?: TextInputProps["autoCapitalize"]; + keyboardType?: TextInputProps["keyboardType"]; }; const CustomTextInput = (props: CustomTextInputProps) => { @@ -16,10 +21,15 @@ const CustomTextInput = (props: CustomTextInputProps) => { return (