Commit graph

714 commits

Author SHA1 Message Date
Callum Alpass
b4d52c707d feat: Implement UTC Anchor principle for robust timezone handling
This commit introduces the UTC Anchor principle to eliminate timezone-related bugs
and provide consistent date handling across all user timezones.

## Key Changes:

### Core Implementation
- Add `parseDateToUTC()` function that creates UTC anchors for date-only strings
- Add `parseDateToLocal` alias for existing `parseDate` function
- Deprecate direct `parseDate` usage with clear migration path
- Update date comparison functions to use UTC anchors

### Updated Components
- **dateUtils.ts**: New UTC parsing functions and updated comparisons
- **main.ts**: Use UTC anchor for selectedDate initialization
- **MiniCalendarView**: Navigate using UTC anchors
- **TimeblockCreationModal**: Fix timezone handling
- **Multiple test files**: Fix timezone assumptions in tests

### Refactored parseDate Usage
- **UnscheduledTasksSelectorModal**: Use parseDateToLocal for UI display
- **AdvancedCalendarView**: Use parseDateToLocal for calendar events
- **helpers.ts**: Use parseDateToUTC for internal date logic
- **FilterService**: Already using updated utilities

### Documentation
- Add comprehensive UTC Anchor implementation docs
- Update development guidelines with date handling best practices
- Add migration guide for existing code
- Include quick reference for date functions

## Benefits:
- Eliminates "off-by-one day" errors across timezones
- Provides consistent sorting and filtering behavior
- Simplifies date comparison logic
- Future-proofs against timezone-related bugs

## Testing:
- All 798 tests passing
- New UTC anchor test suite (11 tests)
- No regression in existing functionality

Fixes #327, #322, #314 and other timezone-related issues
2025-08-02 22:54:11 +10:00
Callum Alpass
1690abc04b refactor: Remove formatUTCDateForCalendar function
BREAKING CHANGE: formatUTCDateForCalendar has been removed. Use formatDateForStorage instead.

## Changes
- Replaced all calls to formatUTCDateForCalendar with formatDateForStorage
- Removed the redundant formatUTCDateForCalendar function from dateUtils.ts
- Updated all source files (10 files)
- Updated all test files (38 test files)
- Updated documentation to remove references

## Rationale
The formatUTCDateForCalendar function was misleading as it actually used local
date methods, not UTC. It was just calling formatDateForStorage internally,
making it redundant. This refactoring improves code clarity by having a single
function with a clear purpose.

All tests pass (765 total, 717 passing, 48 skipped).
2025-08-02 10:04:49 +10:00
Callum Alpass
edb01c335e fix: Comprehensive timezone handling fixes (Issues #327, #322, #314)
BREAKING CHANGE: Date handling now consistently uses local timezone for all user-facing operations

## Major Changes

### Core Timezone Fix
- Fixed critical RRule/local date boundary bug in helpers.ts that caused recurring tasks to show on wrong days
- Standardized all date formatting to use formatDateForStorage() which returns local dates
- Eliminated inconsistent use of format() vs formatUTCDateForCalendar()

### Files Updated
- **dateUtils.ts**: Added getTodayLocal(), parseDateAsLocal(), hasTimeComponent() utilities
- **helpers.ts**: Fixed isDueByRRule to use formatDateAsUTCString for RRule compatibility
- **TaskService.ts**: Updated all format() calls to use formatDateForStorage()
- **AdvancedCalendarView.ts**: Consistent use of formatDateForStorage() throughout
- **TaskEditModal.ts**: Fixed calendar navigation to use local dates
- **PomodoroService.ts**: Updated all date formatting
- **FilterService.ts**: Fixed getDatePart to use formatDateForStorage
- **AgendaView.ts**: Updated date formatting
- **main.ts**: Updated initialization
- **TaskCard.ts**: Minor formatting updates

### Test Updates
- Updated 700+ tests to match new timezone behavior
- Fixed test expectations to use local dates instead of UTC
- Removed outdated timezone simulation tests
- All tests now pass (765 total, 717 passing, 48 skipped)

### Documentation
- Added comprehensive TIMEZONE_HANDLING_GUIDE.md for developers
- Added TIMEZONE_QUICK_REFERENCE.md cheat sheet
- Created TIMEZONE_FIXES_WORKING_MEMORY.md tracking all changes

## Technical Details

The system now follows a "UTC Midnight Convention":
1. User-facing operations use local dates (what users see and input)
2. RRule operations internally use UTC but convert at boundaries
3. Storage format "YYYY-MM-DD" represents local date consistently

This fixes:
- Issue #327: Recurring tasks marking wrong day complete
- Issue #322: Timezone bugs in calendar display
- Issue #314: Complete instances timezone inconsistencies
- Off-by-one errors for users in different timezones

## Migration Notes

Developers should:
- Use formatDateForStorage() instead of format(date, 'yyyy-MM-dd')
- Use getTodayLocal() instead of new Date() for today's date
- Use parseDateAsLocal() for date-only strings
- Refer to TIMEZONE_HANDLING_GUIDE.md for best practices
2025-08-02 08:53:01 +10:00
Callum Alpass
7f7e417212 release 3.16.4 2025-07-31 08:01:06 +10:00
Callum Alpass
ec969fcdea fix: Restore title field in task modals (regression from #324)
The title field was accidentally removed from all task modals in commit 0b34a19.
This fix restores the title field with the correct visibility logic:

- Edit modals: Always show title field in the details section
- Creation modals with NLP enabled: Show title field in details section
  (since the main title input is replaced by NLP textarea)
- Creation modals with NLP disabled: Only show the main title field at top
  (no title field in details section needed)

This ensures users can always edit the task title regardless of modal type
or NLP settings.
2025-07-31 07:58:09 +10:00
Callum Alpass
797e9f36a0 release 3.16.3 2025-07-30 21:57:33 +10:00
Callum Alpass
0b34a19f6c fix: Create task modal UI issues when NLP is disabled (Issue #324)
- Remove duplicate title input field that appeared in the details section
- Start modal in expanded state when NLP is disabled for immediate access to all fields
- Remove auto-expand behavior on title input focus to simplify interactions
- Ensure title field receives focus when modal opens for better UX

This fixes the issue where users had to click or tab to access input fields
when creating tasks with natural language input disabled.
2025-07-30 21:50:15 +10:00
Callum Alpass
b9ea6e6120 fix: Timezone bug in recurring task calendar display (Issue #322)
Convert start/end dates to UTC before passing to rrule.between() to ensure
consistent timezone handling. This prevents Tuesday recurring tasks from
appearing on Monday for users in negative UTC timezones.

The bug occurred because dtstart was in UTC but the date range parameters
were in local time, causing off-by-one day errors in the calendar display.
2025-07-30 07:05:40 +10:00
Callum Alpass
6e23b4f95c fix: Timezone consistency in TaskEditModal completion calendar
- Use UTC operations for calendar navigation and initial date creation
- Prevent timezone-dependent day-of-week shifts in completion calendar
- Add comprehensive test suite for regression prevention

Tests for timezone inconsistency where Tuesday tasks appeared on Monday
dates in EST/PST due to local timezone operations in calendar
navigation.
2025-07-30 06:54:06 +10:00
Callum Alpass
1c2bb63ae1 fix: Timezone consistency in TaskEditModal completion calendar (Issue #322)
- Fix Tuesday recurring tasks showing on Monday in North American timezones
- Use UTC operations for calendar navigation and initial date creation
- Prevent timezone-dependent day-of-week shifts in completion calendar
- Add comprehensive test suite for regression prevention

Resolves timezone inconsistency where Tuesday tasks appeared on Monday
dates in EST/PST due to local timezone operations in calendar navigation.
2025-07-30 06:52:44 +10:00
Callum Alpass
88ad19da07 fix: Preserve time information in instant task conversion
- Add dueTime and scheduledTime fields to TasksPlugin ParsedTaskData interface
- Update NLP to TasksPlugin format conversion to map time fields
- Enhance task creation to combine dates with times using combineDateAndTime()
- Handle time information in both default-enabled and minimal behavior modes
- Fixes issue where time components were lost during format conversion

Resolves failing unit tests for time-based task conversion scenarios.
2025-07-29 17:38:22 +10:00
Callum Alpass
93d677d4b4 test: Add comprehensive unit tests for InstantTaskConvertService context detection
Added extensive test coverage for context detection bug fix (Issue #320):

Test Coverage:
- Context extraction from @context syntax in natural language tasks
- Context extraction from Tasks plugin syntax
- Tags and projects parsing alongside contexts
- Default context handling when enabled/disabled
- Format conversion from NLP results to TasksPlugin format
- Edge cases and error handling scenarios
- Priority and status preservation during conversion

Tests include:
- Single and multiple context detection (@home, @work @office)
- Mixed syntax with tags, projects, and contexts
- Default context combination and deduplication
- Empty contexts handling
- Malformed syntax graceful handling
- NLP parser error scenarios
- Format conversion validation

All 19 tests pass, providing solid coverage for the context detection
functionality and ensuring the bug fix works correctly.
2025-07-29 07:26:42 +10:00
Callum Alpass
334ae6ac9e fix: Context detection in instant task conversion (Issue #320)
Fixed bug where @context syntax wasn't being detected during instant task
conversion. The NaturalLanguageParser was correctly parsing contexts, but
they were being lost during conversion to TasksPlugin format.

Changes:
- Added contexts field to TasksPluginParser.ParsedTaskData interface
- Updated InstantTaskConvertService to preserve contexts from NLP parsing
- Enhanced context processing logic to handle both parsed and default contexts
- Ensures contexts are properly extracted and stored in task metadata

Now "Convert task to TaskNote" properly detects @context syntax and populates
the contexts field in the created task note.

Fixes #320
2025-07-29 07:14:02 +10:00
Callum Alpass
65a3bb024c release 3.16.2 2025-07-29 06:11:30 +10:00
Callum Alpass
60430a0dea feat: Add markdown link support for inline task widgets (Issue #312)
Extends task link detection and rendering to support both wikilinks and markdown links.
Now properly renders [text](path) markdown links as interactive inline task widgets
in both live preview and reading modes.

Key changes:
- Enhanced TaskLinkDetectionService to detect both [[wikilinks]] and [markdown](links)
- Added URL decoding for markdown link paths (crucial for paths with spaces)
- Updated TaskLinkOverlay to handle both link types in live preview mode
- Enhanced ReadingModeTaskLinkProcessor for markdown link support in reading mode
- Uses proper Obsidian API functions: parseLinktext() and getFirstLinkpathDest()

Complements commit 19c74f8 which added markdown link *writing* support.
Now the plugin both writes AND reads markdown links consistently.

Fixes #312
2025-07-29 06:07:30 +10:00
Callum Alpass
c0202ce9db release 3.16.1 2025-07-28 22:26:15 +10:00
Callum Alpass
19c74f885b fix: Use Obsidian's generateMarkdownLink for consistent link formatting (Issue #312)
Replace hard-coded wikilink generation with Obsidian's generateMarkdownLink()
method to respect user's link format preferences and ensure consistency.

Changes:
- Fix "Insert tasknote link" command to use generateMarkdownLink with task title as alias
- Fix "Convert task to TaskNote" command to use generateMarkdownLink
- Update generateLinkText helper to use generateMarkdownLink
- Both commands now respect Obsidian's "Files & Links" settings
- Consistent link format between both commands
- Compatible with external tools when markdown links are preferred

Fixes #312
2025-07-28 22:20:29 +10:00
Callum Alpass
aad6885ca6 refactor: Update date utilities to use UTC methods consistently
Update remaining date helper functions to use UTC methods for
consistency with the timezone bug fixes. This ensures all date
comparisons and calculations work consistently across timezones.

Changes:
- Convert isSameDay() to use UTC date methods
- Update legacy recurrence date comparisons to use UTC
- Fix date arithmetic in default date generation
- Update date iteration loops to use UTC methods

These changes complement the timezone fix in Issue #314 by
ensuring all date utilities work consistently with UTC dates.
2025-07-28 22:20:29 +10:00
Callum Alpass
f795db4208 fix: Resolve timezone bug in recurring task completion (Issue #314)
Convert date handling to UTC throughout calendar components to fix
timezone-related bugs where completion dates were stored incorrectly.
When marking recurring tasks complete in non-UTC timezones, the wrong
date was being saved to complete_instances.

Changes:
- Use UTC date creation for selectedDate initialization
- Convert MiniCalendarView navigation to UTC methods
- Normalize dates using UTC in AgendaView date ranges
- Add createSafeUTCDate utility function
- Update TaskLinkWidget to use UTC fallback dates
- Add comprehensive test coverage for timezone scenarios
2025-07-28 22:20:29 +10:00
Callum Alpass
443eae197f feat: Add visual state indicators for active saved views in FilterBar
- Add active state styling to saved view items and view selector button
- Update button state when loading/clearing saved views
- Improve visual feedback for current active view selection
2025-07-28 22:20:29 +10:00
Callum Alpass
97834b00ef style: Improve calendar header text and remove custom scrollbar styling
- Disable lowercase text transform for calendar headers to improve readability
- Remove custom scrollbar styling to use system/theme defaults
- Clean up CSS for better maintainability

These changes improve the visual consistency and readability of the
advanced calendar view.
2025-07-28 22:20:29 +10:00
Callum Alpass
4965214213 style: Improve advanced calendar view borders and styling
- Add border and border radius to calendar container for better definition
- Add top border to column headers for visual consistency
- Add bottom border to header toolbar for cleaner separation
- Fix missing newline at end of utilities.css

These changes improve the visual appearance and definition of the
advanced calendar view interface.
2025-07-28 22:20:29 +10:00
Callum Alpass
ce41f95ce8 fix: Remove duplicate tooltip on recurring task indicator
- Remove HTML title attribute from recurring indicator in TaskCard
- Use Obsidian's native setTooltip function instead for consistency
- Prevents duplicate tooltips from showing (native + Obsidian tooltip)
- Maintains same tooltip content and accessibility attributes

This ensures only the Obsidian native tooltip shows when hovering
over the recurring task indicator on task cards.
2025-07-28 22:20:29 +10:00
Callum Alpass
2a04b4e20a fix: Enhance sort direction arrow visibility and positioning (#307)
- Increase arrow font size from var(--font-ui-small) to 16px
- Add bold font weight (700) for better prominence
- Change color from muted to accent for better contrast
- Move sort direction button to left of dropdown for logical grouping
- Add hover scale effect (1.1x) with smooth transitions
- Improve separation from group controls

The sort arrow is now much more noticeable and intuitively positioned
within the filter condition builder interface.
2025-07-28 22:20:29 +10:00
Callum Alpass
081ba61602 fix: Add proper error handling for createDailyNote failures
Fixes critical bugs where createDailyNote() could fail and return null/undefined,
causing "Cannot read properties of undefined" errors when accessing file.path
or file.extension properties.

Changes:
- TimeblockCreationModal.ts: Add validation after createDailyNote()
- PomodoroService.ts: Add validation in addSingleSessionToDailyNote() and updateDailyNotePomodoros()
- utils/helpers.ts: Add validation in addTimeblockToDailyNote()

All functions now throw clear error messages directing users to check their
Daily Notes plugin configuration when daily note creation fails.

Resolves user-reported errors:
- "Error creating timeblock: TypeError: Cannot read properties of undefined (reading 'path')"
- "Failed to add session to daily note: TypeError: Cannot read properties of undefined (reading 'extension')"
2025-07-28 22:20:29 +10:00
callumalpass
dbe2120515
Merge pull request #308 from anomatomato/feat/cursor-pointer
style: Add pointer cursor to every button in pomodoro view
2025-07-28 22:19:09 +10:00
An Hoang
eb613b1dc9 style: Add pointer cursor to every button in pomodoro view 2025-07-27 12:23:14 +02:00
Callum Alpass
2082b7e4a3 fix: Add missing setTooltip mock to fix failing tests
Add setTooltip function mock to the Obsidian API test mock to match
the native tooltip functionality recently introduced in the codebase.
This resolves all TaskCard test failures caused by missing mock implementation.

- Adds setTooltip mock with same signature as Obsidian's native function
- Includes proper tooltip attribute setting for test verification
- Exports setTooltip in both named and default exports for compatibility

Fixes 39 failing TaskCard tests.
2025-07-27 19:31:00 +10:00
Callum Alpass
dbe1fe940d fix: Replace innerHTML with textContent for security compliance
Replace unsafe innerHTML assignment with textContent to resolve ESLint
@microsoft/sdl/no-inner-html security violation in drag handle creation.
2025-07-27 17:47:33 +10:00
Callum Alpass
1f0f04fe0d update appearance of lists in the docs 2025-07-27 14:47:17 +10:00
Callum Alpass
a1f31bcfcf release 3.16.0 2025-07-27 14:25:29 +10:00
Callum Alpass
3512141a5a fix: Standardize tooltips to use Obsidian's native setTooltip function (#257)
Replaces HTML title attributes with Obsidian's setTooltip() throughout the codebase to eliminate duplicate tooltip issues and provide consistent user experience.

Changes:
- Updated all components to import and use setTooltip from Obsidian
- Removed HTML title attributes from button elements, icons, and interactive elements
- Added consistent tooltip placement (top) across all components
- Fixed duplicate tooltip display issues in task widgets and modals

Files affected:
- TaskLinkWidget.ts: Task inline preview tooltips
- InstantConvertButtons.ts: Convert button tooltips
- TaskModal.ts and TaskCreationModal.ts: Modal action icons
- TimeblockCreationModal.ts and TimeblockInfoModal.ts: Attachment management
- StatusBarService.ts: Status bar tracking tooltips
- settings.ts: Settings page interactive elements
- FilterBar.ts: Filter controls and inputs
- TaskCard.ts, AdvancedCalendarView.ts, MiniCalendarView.ts, PomodoroView.ts: View-specific tooltips

Fixes #257
2025-07-27 13:52:11 +10:00
Callum Alpass
0c16b707d9 fix: Stabilize Open note button hover behavior
Remove transform and box-shadow animations from Open note button that
caused visual "jumping" on hover. Replace with consistent border styling
that maintains stable button dimensions across all states (normal, hover,
active). This aligns the button behavior with other modal buttons.
2025-07-27 13:39:46 +10:00
Callum Alpass
4851ff6868 fix: Make Open note button font size consistent with other modal buttons
Remove explicit font-size property from .open-note-button to inherit
the same font size as Save, Cancel, and Archive buttons in TaskEditModal.
This provides visual consistency across all action buttons in the modal.
2025-07-27 13:14:31 +10:00
Callum Alpass
57d7d774d0 feat: Add titles to date context menus for better clarity (#253)
- Add optional title parameter to DateContextMenu interface
- Display "Set Due Date" or "Set Scheduled Date" as menu title
- Show title as disabled menu item with calendar icon
- Improves user experience by clarifying which date field is being set
2025-07-27 13:02:28 +10:00
Callum Alpass
d21a566e4f fix: Project removal in edit modal not saving changes (#213)
- Fix projects change detection when removing all projects
- Set projects to empty array instead of undefined for proper comparison
- Ensures project removals are correctly saved to file
2025-07-27 12:53:57 +10:00
Callum Alpass
b38b7e3305 feat: Display active saved view name in filter condition builder (#245)
- Add visual indicator showing which saved view is currently loaded
- Display view name next to "Filter" title in italicized accent color
- Automatically clear indicator when filters are manually modified
- Maintain accuracy by tracking loading state to prevent false clearing
2025-07-27 12:39:32 +10:00
Callum Alpass
5972fb9c02 feat: Hide calendar title in narrow containers for better responsive UI (#285)
Improve calendar header responsiveness by detecting actual container
width instead of window width:
- Hide title when calendar container width ≤ 600px
- Use getBoundingClientRect() to measure actual container dimensions
- Update header visibility on resize events for dynamic pane adjustments
- Provides better UX in Obsidian's flexible pane system (sidebars, split
views)
2025-07-27 12:39:32 +10:00
Callum Alpass
6b5d8105ae fix: Resolve undefined days display in custom calendar view
- Add fallback values (|| 3) to customDayCount in calendar configuration
- Enhance settings loading to deep merge calendarViewSettings with defaults
- Add detection for new calendar settings to trigger automatic migration
- Ensure custom view button shows proper day count on first load

Fixes issue where custom calendar view displayed "undefined days" until
user manually adjusted day count setting.
2025-07-27 12:24:14 +10:00
Callum Alpass
c74fe54833 docs: Document custom multi-day calendar view feature (#282)
Add comprehensive documentation for the new configurable custom multi-day
calendar view feature implemented in d27594a:

- Update calendar-views.md with Custom Days view section explaining features
  and configuration steps
- Enhance calendar-settings.md to document default view option and custom
  day count setting
- Update calendar-integration.md to include custom days view in Advanced
  Calendar description
- Update features.md to include custom days view in main features overview

Provides complete user guidance for the custom multi-day calendar view that
allows users to configure any number of days (1-14) in their calendar display.
2025-07-27 12:19:05 +10:00
Callum Alpass
d27594a9be feat: Add configurable custom multi-day calendar view (#282)
- Add 'timeGridCustom' as new defaultView option in CalendarViewSettings
- Add customDayCount setting (2-10 days) with default of 3 days
- Implement "Custom Days" dropdown option in settings UI
- Add slider control for configuring custom day count
- Create custom FullCalendar view with configurable duration
- Update calendar toolbar to include timeGridCustom view button
- Add updateCustomViewConfiguration method for real-time updates
- Enhance settings listener to update custom view when changed

Addresses user request for better screen space utilization with
flexible multi-day view instead of single day view.
2025-07-27 12:14:38 +10:00
Callum Alpass
acf39a3680 docs: Document view options support in saved views
Enhance documentation to reflect the new view options feature that allows
saved views to preserve view-specific display preferences alongside filters.

- Update filtering-and-views.md to explain view options preservation in saved views
- Enhance agenda-view.md with documentation for view-specific options and persistence
- Document Advanced Calendar View options and their persistence in calendar-views.md
- Add comprehensive developer guidelines for implementing view options in saved views
- Update releases.md to reference version 3.15.0

These documentation updates complement the code implementation committed in 1fb02e8
and provide complete user and developer guidance for the view options feature.
2025-07-27 12:05:25 +10:00
Callum Alpass
1fb02e8355 feat: Add view options support to saved views
- Update SavedView interface to include optional viewOptions field
- Enhance ViewStateManager to handle view options in save/load operations
- Modify FilterBar to capture current view options when saving views
- Add loadViewOptions event to restore view-specific settings
- Update AgendaView to save/restore showOverdueOnToday and showNotes options
- Update AdvancedCalendarView to save/restore display options (scheduled, due, timeblocks, etc.)
- Update KanbanView and TaskListView to support new saveView parameter structure
- Update ProjectNoteDecorations to pass view options in save operations

Fixes #266: View options like "Show overdue on today" and "Show notes" in Agenda View
are now properly saved with saved views and no longer revert to defaults.
2025-07-27 12:00:11 +10:00
Callum Alpass
5c600e5f3b chore: Update drag handle icon to hamburger menu (☰) (#291) 2025-07-27 10:31:44 +10:00
Callum Alpass
6a0ca4096f feat: Add drag and drop reordering for status configurations (#291)
- Add drag handles and drag/drop functionality to status list in
settings
- Implement visual feedback during drag operations (opacity, rotation,
borders)
- Add reorderStatus method to handle drag and drop logic
- Update grid layouts to accommodate drag handle column
- Ensure status cycling and context menus follow new order
- Add responsive design support for mobile devices

The order of statuses now affects both status cycling when clicking
status badges and the order they appear in context menus.
2025-07-27 10:31:44 +10:00
Callum Alpass
b01400f852 feat: Add setting to hide completed tasks from overdue status (#300)
Implements a new "Hide completed tasks from overdue" setting in the misc
section that controls whether completed tasks appear as overdue in
agenda
views. When enabled (default), completed tasks will not be classified as
overdue even if their due or scheduled date has passed.

Changes:
- Add `hideCompletedFromOverdue` setting (default: true) to settings
interface
- Enhance `isOverdueTimeAware` function with completion status
parameters
- Update FilterService constructor to accept plugin reference for
settings access
- Add completion-aware overdue detection throughout date categorization
- Update all FilterService instantiations with new constructor signature
- Add comprehensive documentation in misc-settings.md
- Create test documentation for the new feature
- Update NotesView empty state message for better clarity

This change helps keep overdue lists focused on actionable items while
maintaining proper task categorization for completed work.
2025-07-27 10:20:40 +10:00
Callum Alpass
ec54a80026 fix: Make suggestion objects defensive against plugin conflicts
- Wrap tag/context/project suggestions in objects instead of plain
strings
- Add type, value, display properties and toString() method to
suggestions
- Prevents conflicts with plugins like Iconic that expect suggestion
objects
- Maintains backward compatibility while providing defensive structure
- Fixes issue #304 where Iconic plugin interfered with tag completion

This resolves plugin conflicts where other plugins try to use the 'in'
operator on suggestion items, expecting objects rather than strings.
(#304)
2025-07-27 10:07:10 +10:00
Callum Alpass
688e9d69e2 docs: Document improved search behavior with filter preservation
- Explain how search creates groups to preserve existing filter logic
- Detail the AND relationship between search and existing filters
- Show example of filter structure with and without search
- Clarify that original structure is restored when search is cleared

This documents the enhanced search functionality that prevents interference
with user's manual filter configurations.
2025-07-27 09:43:41 +10:00
Callum Alpass
b1d34773a8 feat: Improve search functionality to preserve existing filters
- Search now creates a filter group with existing filters + title search
- Existing filters are preserved and grouped together when search is applied
- Search condition is connected to existing filter group with "and" relation
- When search is cleared, original filter structure is restored
- Prevents search from interfering with or replacing user's manual filters

This addresses the issue where search would simply add a title condition
directly to the filter list, potentially interfering with existing filter logic.
2025-07-27 09:40:57 +10:00
Callum Alpass
992ff404e2 refactor: Improve code comments and documentation in AdvancedCalendarView
- Translate Spanish comments to English for consistency
- Add explanatory comment for active leaf change timeout
- Improve readability while preserving Totobal5's fix for #137
2025-07-27 09:32:02 +10:00