diff --git a/package.json b/package.json index acab7a1..2b7235d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "my-weekly-todo-list", - "version": "1.36.0", + "version": "1.36.1", "description": "A web-based weekly task management application that organizes to-dos and calendar events in a single, intuitive weekly view", "main": "index.js", "scripts": { diff --git a/src/components/CalendarEventModal.tsx b/src/components/CalendarEventModal.tsx index 3652d8f..8a69c9c 100644 --- a/src/components/CalendarEventModal.tsx +++ b/src/components/CalendarEventModal.tsx @@ -87,7 +87,6 @@ export default function CalendarEventModal({ ); const [newAttachmentUrl, setNewAttachmentUrl] = useState(''); const [showMoreOptions, setShowMoreOptions] = useState( - // Auto-expand if event has these fields set !!(event?.attendees?.length || event?.attachments?.length || (event?.busyStatus && event.busyStatus !== 'busy') || (event?.visibility && event.visibility !== 'default')) ); @@ -143,7 +142,7 @@ export default function CalendarEventModal({ case 'google': return ; case 'apple': return ; case 'outlook': return ; - case 'synology': return ; + case 'synology': return ; default: return null; } }; @@ -165,7 +164,6 @@ export default function CalendarEventModal({ setIsSaving(true); setError(''); try { - // Filter out "none" reminders const activeReminders = reminders.filter(r => r.minutes >= 0); await onSave({ @@ -255,7 +253,6 @@ export default function CalendarEventModal({ const updateReminder = (index: number, minutes: number) => { if (minutes === -1) { - // Remove this reminder setReminders(reminders.filter((_, i) => i !== index)); return; } @@ -270,30 +267,32 @@ export default function CalendarEventModal({ const rowStyle: React.CSSProperties = { display: 'flex', alignItems: 'center', justifyContent: 'space-between', + padding: '0 10px', minHeight: '32px', }; const labelStyle: React.CSSProperties = { - fontSize: '0.9rem', color: 'var(--weekly-text-light)', fontWeight: 500, + fontSize: '0.82rem', color: 'var(--weekly-text-light)', fontWeight: 500, }; const selectStyle: React.CSSProperties = { background: 'transparent', border: 'none', textAlign: 'right' as const, - fontSize: '0.9rem', cursor: 'pointer', outline: 'none', color: 'var(--weekly-text)', + fontSize: '0.82rem', cursor: 'pointer', outline: 'none', color: 'var(--weekly-text)', }; return (
e.stopPropagation()} style={{ - maxWidth: '450px', - padding: '20px', - borderRadius: '12px', + maxWidth: '400px', + width: 'calc(100vw - 16px)', + padding: '12px', + borderRadius: '10px', boxShadow: '0 10px 25px rgba(0,0,0,0.15)', border: '1px solid var(--weekly-border)', - maxHeight: '90vh', + maxHeight: '85vh', overflowY: 'auto', }}> - {error &&
{error}
} + {error &&
{error}
} -
- {/* Title Input */} +
+ {/* Title */} - {/* Location Input */} + {/* Location */} setLocation(e.target.value)} placeholder="Location or Video Call" style={{ - width: '100%', - padding: '8px 16px', - border: 'none', + width: '100%', padding: '5px 10px', border: 'none', borderBottom: '1px solid var(--weekly-border)', - borderRadius: '0', - background: 'transparent', - outline: 'none', - fontSize: '0.95rem' + borderRadius: '0', background: 'transparent', outline: 'none', fontSize: '0.82rem', }} /> {/* Calendar row */} -
+
Calendar -
{isCalendarSelectorOpen && (
{availableCalendars.map((cal: any) => (
{ setCalendarId(cal.id); setIsCalendarSelectorOpen(false); }} style={{ - display: 'flex', alignItems: 'center', gap: '10px', - padding: '8px 12px', borderRadius: '6px', cursor: 'pointer', - fontSize: '0.9rem', color: 'var(--weekly-text)', + display: 'flex', alignItems: 'center', gap: '8px', + padding: '6px 10px', borderRadius: '5px', cursor: 'pointer', + fontSize: '0.82rem', color: 'var(--weekly-text)', backgroundColor: calendarId === cal.id ? 'var(--weekly-selection, rgba(59, 130, 246, 0.1))' : 'transparent', transition: 'background 0.2s', textAlign: 'left' }} onMouseEnter={(e) => e.currentTarget.style.backgroundColor = 'var(--weekly-hover, rgba(0,0,0,0.05))'} onMouseLeave={(e) => e.currentTarget.style.backgroundColor = calendarId === cal.id ? 'var(--weekly-selection, rgba(59, 130, 246, 0.1))' : 'transparent'} > -
+
{cal.summary || cal.title} @@ -395,99 +381,101 @@ export default function CalendarEventModal({
- {/* All Day row */} -
+ {/* All Day */} +
All Day setAllDay(e.target.checked)} - style={{ width: '18px', height: '18px', cursor: 'pointer' }} + style={{ width: '16px', height: '16px', cursor: 'pointer' }} />
- {/* Date/Time rows */} -
-
+ {/* Start / End on same row when not all-day */} +
+
Starts handleStartDateChange(e.target.value)} style={{ - padding: '4px 8px', border: 'none', borderRadius: '6px', + padding: '2px 6px', border: 'none', borderRadius: '4px', background: 'var(--weekly-bg-secondary, #f3f4f6)', - fontSize: '0.9rem', textAlign: 'center' + fontSize: '0.8rem', textAlign: 'center', }} />
-
+
Ends setEndDate(new Date(e.target.value))} style={{ - padding: '4px 8px', border: 'none', borderRadius: '6px', + padding: '2px 6px', border: 'none', borderRadius: '4px', background: 'var(--weekly-bg-secondary, #f3f4f6)', - fontSize: '0.9rem', textAlign: 'center' + fontSize: '0.8rem', textAlign: 'center', }} />
- {/* Meta Fields Group */} -
- {/* Recurrence */} -
- Repeat - -
+ {/* Divider */} +
- {/* Reminders */} -
-
0 ? '6px' : 0 }}> - - Alert - - {reminders.length === 0 && ( - - )} -
- {reminders.map((reminder, idx) => ( -
- - -
- ))} - {reminders.length > 0 && reminders.length < 2 && ( - )}
+ {reminders.map((reminder, idx) => ( +
+ + +
+ ))} + {reminders.length > 0 && reminders.length < 2 && ( + + )} +
- {/* Busy Status */} -
+ {/* Status & Visibility side by side */} +
+
Status
- - {/* Visibility */} -
+
+
Visibility
+
- {/* URL (Conditional) */} - {supportsURL && ( - setUrl(e.target.value)} - placeholder="URL" - style={{ - width: '100%', padding: '6px 0', border: 'none', - borderBottom: '1px solid var(--weekly-border)', - background: 'transparent', fontSize: '0.9rem', outline: 'none' - }} - /> - )} - - {/* Expandable section: Attendees & Attachments */} - + /> + )} - {showMoreOptions && ( -
- {/* Attendees */} + {/* Expandable: Invitees & Attachments */} + + + {showMoreOptions && ( +
+ {/* Attendees */} +
+ + Invitees + + {attendees.map((att, idx) => ( +
+ + {att.displayName ? `${att.displayName} (${att.email})` : att.email} + + +
+ ))} +
+ setNewAttendeeEmail(e.target.value)} + placeholder="Add email address" + onKeyDown={e => e.key === 'Enter' && addAttendee()} + style={{ + flex: 1, padding: '4px 6px', border: 'none', + borderBottom: '1px solid var(--weekly-border)', + background: 'transparent', fontSize: '0.78rem', outline: 'none', + }} + /> + +
+
+ + {/* Attachments (Apple/Synology only) */} + {supportsAttachments && (
- - Invitees + + Attachments - {attendees.map((att, idx) => ( + {attachments.map((att, idx) => (
- {att.displayName ? `${att.displayName} (${att.email})` : att.email} + {att.title || att.url} -
))} -
+
setNewAttendeeEmail(e.target.value)} - placeholder="Add email address" - onKeyDown={e => e.key === 'Enter' && addAttendee()} + type="url" + value={newAttachmentUrl} + onChange={e => setNewAttachmentUrl(e.target.value)} + placeholder="Add attachment URL" + onKeyDown={e => e.key === 'Enter' && addAttachment()} style={{ - flex: 1, padding: '6px 8px', border: 'none', + flex: 1, padding: '4px 6px', border: 'none', borderBottom: '1px solid var(--weekly-border)', - background: 'transparent', fontSize: '0.85rem', outline: 'none', + background: 'transparent', fontSize: '0.78rem', outline: 'none', }} /> -
- - {/* Attachments (URL-based, Apple/Synology only) */} - {supportsAttachments && ( -
- - Attachments - - {attachments.map((att, idx) => ( -
- - {att.title || att.url} - - -
- ))} -
- setNewAttachmentUrl(e.target.value)} - placeholder="Add attachment URL" - onKeyDown={e => e.key === 'Enter' && addAttachment()} - style={{ - flex: 1, padding: '6px 8px', border: 'none', - borderBottom: '1px solid var(--weekly-border)', - background: 'transparent', fontSize: '0.85rem', outline: 'none', - }} - /> - -
-
- )} -
- )} - - {/* Notes */} -
- setDescription(e.target.value)} - placeholder="Notes" - rows={3} - style={{ width: '100%', padding: '8px 0', border: 'none', borderBottom: '1px solid var(--weekly-border)', background: 'transparent', resize: 'none', fontSize: '0.9rem', outline: 'none' }} - /> - }> - - + )}
+ )} + + {/* Notes */} +
+ setDescription(e.target.value)} + placeholder="Notes" + rows={2} + style={{ width: '100%', padding: '4px 0', border: 'none', borderBottom: '1px solid var(--weekly-border)', background: 'transparent', resize: 'none', fontSize: '0.82rem', outline: 'none' }} + /> + }> + +
-
-
+ {/* Actions */} +
+
{event && onDelete && ( )} {!event && ( - )}
-
+
{event && ( - )} @@ -682,7 +670,7 @@ export default function CalendarEventModal({ onClick={handleSubmit} disabled={isSaving || isDeleting} style={{ - padding: '8px 20px', borderRadius: '8px', fontSize: '0.95rem', + padding: '6px 16px', borderRadius: '6px', fontSize: '0.85rem', fontWeight: 600, backgroundColor: '#3b82f6', color: 'white', border: 'none', cursor: 'pointer', opacity: isSaving || isDeleting ? 0.7 : 1