Commit graph

17693 commits

Author SHA1 Message Date
Johannes Millan
ce91c8b1dc Merge branch 'master' into feat/operation-logs
Resolve merge conflicts:
- package.json: use @types/node@^22.19.5
- sync-form.const.ts: keep eslint-disable for naming convention
- global-config.effects.ts: remove extra blank line
- unlink-all-tasks-on-provider-deletion.effects.ts: keep deprecation notice
- auto-fix-typia-errors.ts: keep better-typed getValueByPath
- undo-task-delete.meta-reducer.spec.ts: keep getLastDeletePayload import
- Accept deletions for files refactored into operation-logs architecture
2026-01-10 17:08:09 +01:00
Johannes Millan
b964c621ea build(build): eliminate CommonJS module warnings
Replace clipboard, file-saver, and query-string with native browser APIs.
Add remaining CommonJS dependencies to allowedCommonJsDependencies.
2026-01-10 17:00:43 +01:00
Johannes Millan
c8fec79448 fix(ui): make checklist items clickable after blank lines
- Fix clickPreview() to use closest('.checkbox-wrapper') so clicking
  anywhere on a checklist item (text or icon) toggles the checkbox
- Add cursor: pointer to .checkbox-wrapper for better UX
- Add comprehensive tests for checkbox click handling (21 tests)
- Add tests for marked-options-factory checkbox rendering (11 tests)

Fixes #5950
2026-01-10 16:50:23 +01:00
Johannes Millan
b69dded9f1 chore(deps): update minor/patch dependencies
- prettier: 3.5.1 → 3.7.4
- pretty-quick: 4.1.1 → 4.2.2
- stylelint: 16.18.0 → 16.26.1
- @playwright/test: 1.56.1 → 1.57.0
- jasmine-core: 5.10.0 → 5.13.0
- eslint-plugin-prettier: 5.2.1 → 5.5.4
- chrono-node: 2.8.3 → 2.9.0
- ical.js: 2.1.0 → 2.2.1
- electron-builder: 26.3.3 → 26.4.0
- core-js: 3.39.0 → 3.47.0
- And other minor updates

Applied prettier formatting changes from v3.7.4.
2026-01-10 16:16:47 +01:00
Johannes Millan
dd57c5d6eb chore(deps): update @types/jasmine to v5
Update from v3.10.2 to v5.1.14 to match jasmine-core v5.10.0.
All tests pass with the new type definitions.
2026-01-10 16:10:26 +01:00
Johannes Millan
e6da7ced37 chore(deps): upgrade ESLint to v9 with flat config
- Upgrade eslint from v8 to v9.39.2
- Upgrade typescript-eslint to v8.52.0 (unified package)
- Add angular-eslint package for flat config support
- Migrate from .eslintrc.json to eslint.config.js (flat config)
- Update package configs for sync-md, automations, boilerplate-solid-js
- Remove unused eslint-disable directives
- Fix lint errors (empty interface, template eqeqeq)

BREAKING: Requires Node.js 18.18+ (ESLint 9 requirement)
2026-01-10 16:08:11 +01:00
Johannes Millan
cd22f8018b fix(pfapi): accept compact clientId format in validation
Update clientId validation to accept both formats:
- Old format: 10+ chars (e.g., "BCL1pq4d2j11_27")
- New compact format: 6 chars matching /^[BEAI]_[a-zA-Z0-9]{4}$/

The compact format was introduced in feat/operation-logs branch but
the validation was rejecting it, causing "Invalid clientId loaded" errors.
2026-01-10 15:46:31 +01:00
Johannes Millan
132947a69b feat(deps): upgrade Angular to v21
- Update @angular/* packages to v21.0.8
- Update @angular/material and @angular/cdk to v21.0.6
- Update @angular-eslint/* to v21.1.0
- Update @ngrx/* to v21.0.1
- Update TypeScript to 5.9.3
- Update ngx-markdown to v21 and marked to v17
- Update typia to v11 for TypeScript 5.9 support
- Update @types/node to v22, chart.js to v4.5.1

Breaking changes addressed:
- Replace deep imports with public API imports (idb, formly, ngrx)
- Update marked-options-factory for marked v17 API changes
- Add custom FormlySliderComponent (formly slider incompatible with Mat v21)
- Update ngx-markdown SANITIZE configuration
- Fix HostListener decorators with unused $event args
- Fix crypto.subtle type compatibility
- Add skipLibCheck for dependency type conflicts
- Update tsconfig module settings for Angular 21

Removed:
- @angular-builders/custom-webpack (unused)
2026-01-10 15:27:20 +01:00
Johannes Millan
3f86044147 chore(deps): update NgRx packages to v21 2026-01-10 14:58:30 +01:00
Johannes Millan
5bed090756 chore(deps): update angular-eslint to v21 2026-01-10 14:57:25 +01:00
Johannes Millan
5c7df8a2a8 chore(deps): update Angular Material and CDK to v21 2026-01-10 14:56:37 +01:00
Johannes Millan
1ce8c0d0c8 chore(deps): update Angular to v21 and TypeScript to 5.9 2026-01-10 14:55:45 +01:00
Johannes Millan
08afba04f9 refactor: improve code quality across services
- Add subscription cleanup with takeUntilDestroyed() in core services
  (snack, banner, global-theme, task-view-customizer)
- Fix type safety in IssueService by replacing `any` casts with proper types
- Improve error handling in IssueService to preserve stack traces
- Add comprehensive unit tests for TagService (22 tests)
- Fix broken tests in reminder.service.spec.ts (referenced non-existent methods)
2026-01-10 14:55:03 +01:00
Johannes Millan
560b691a41 chore(deps): update typia to v11 for TypeScript 5.9 support 2026-01-10 14:54:14 +01:00
Johannes Millan
a8cf4378da fix(ci): restore Docker Hub image name to personal repo
The Docker Hub image remains under johannesjo/ to maintain existing
references for users, while the GitHub repo moved to super-productivity/
2026-01-10 14:43:35 +01:00
Johannes Millan
74fe0c01a0 Merge branch 'master' into feat/operation-logs
* master:
  16.9.4
  docs: add Angular commit message guidelines to CLAUDE.md
  fix(ci): update references for repo migration to super-productivity org
  build(ci): improve android build release upload reliability
  16.9.3
  fix(calendar): display proper error messages instead of [object Object]
  fix(e2e): fix keyboard shortcut delete test and reduce sync test flakiness
  fix(tasks): add subscription cleanup to delete confirmation dialog
  fix(schedule): maintain visibility during task overlap on schedule (#5887)
  16.9.2

# Conflicts:
#	e2e/pages/sync.page.ts
2026-01-10 13:06:20 +01:00
Johannes Millan
542b9692c3 docs(op-log): centralize and document system limits
Add comprehensive system limits summary to operation-log.const.ts:
- Vector clock limits (8 clients max, 5 char min client ID)
- Upload/download batch sizes (25/500 ops)
- Compaction thresholds and retention windows
- Known scalability notes

Centralize previously inline constants:
- MAX_OPS_PER_UPLOAD_REQUEST (was inline in upload service)
- DOWNLOAD_PAGE_SIZE, MAX_VECTOR_CLOCK_SIZE, MIN_CLIENT_ID_LENGTH
2026-01-10 13:01:33 +01:00
Johannes Millan
f9656ceb70 16.9.4 2026-01-10 12:58:17 +01:00
Johannes Millan
7179e3d6f8 docs: add Angular commit message guidelines to CLAUDE.md 2026-01-10 12:57:32 +01:00
Johannes Millan
9b7b01d24a fix(ci): update references for repo migration to super-productivity org
- Add permissions: contents: write to build.yml and manual-build.yml
  to fix GitHub release creation after org migration
- Update AUR PKGBUILD download URL to new org
- Update release notes changelog link
- Update GitHub project example hints in translation files
2026-01-10 12:56:27 +01:00
Johannes Millan
e0031b1378 build(ci): improve android build release upload reliability
- Add explicit contents: write permission for GITHUB_TOKEN
- Increase wait time for release creation from 15 to 20 minutes
- Add failure check if release is not found after waiting
2026-01-10 12:55:14 +01:00
Johannes Millan
6dcede853f 16.9.3 2026-01-10 12:23:21 +01:00
Johannes Millan
3b14a04934 fix(calendar): display proper error messages instead of [object Object]
Use getErrorTxt utility to extract meaningful error messages from
HttpErrorResponse objects in calendar integration error handling.

Fixes #5870
2026-01-10 12:21:28 +01:00
Johannes Millan
52bf171ec4 fix(e2e): fix keyboard shortcut delete test and reduce sync test flakiness
- Click on .drag-handle instead of task element to properly focus task
  without triggering title edit mode (which would block keyboard shortcuts)
- Verify WebDAV form fields appear after selection before proceeding
- Add clear error message when WebDAV selection fails after retries
2026-01-10 12:10:23 +01:00
Johannes Millan
adbea068da fix(tasks): add subscription cleanup to delete confirmation dialog
Prevents potential issues when component is destroyed while the
delete confirmation dialog is open.
2026-01-10 12:10:23 +01:00
Johannes Millan
81b6d4f30e
Merge pull request #5949 from miqh/fix/schedule-task-start-overlap
fix(schedule): maintain visibility during task overlap on schedule (#5887)
2026-01-10 12:10:18 +01:00
Michael Huynh
28c92cf944
fix(schedule): maintain visibility during task overlap on schedule (#5887) 2026-01-10 15:47:57 +08:00
Johannes Millan
7fcec38476 16.9.2 2026-01-09 18:28:21 +01:00
Johannes Millan
42b0d65352 fix(e2e): dismiss Welcome intro dialog before Shepherd tour
The E2E tests were failing because dismissTourIfVisible only handled
the Shepherd tour steps, not the Welcome intro mat-dialog that appears
first. This dialog blocks UI interactions causing test timeouts.

Updated tour-helpers.ts to:
- Add dismissWelcomeDialog() for the intro dialog
- Add dismissShepherdTour() for the tour steps
- Update dismissTourIfVisible() to handle both in sequence
2026-01-09 18:28:18 +01:00
Johannes Millan
cabe73177a Merge branch 'master' into feat/operation-logs
* master:
  16.9.1
  fix(e2e): handle task deletion confirmation dialog in WebDAV sync test
  fix: resolve build failures from missing translations and unused imports
  16.9.0
  Added Scoop installation instructions
2026-01-09 18:00:51 +01:00
Johannes Millan
b099ffe627 build(e2e): add fast local Docker Compose setup for E2E tests 2026-01-09 18:00:24 +01:00
Johannes Millan
79276f3fc7 16.9.1 2026-01-09 17:59:07 +01:00
Johannes Millan
9c7549af40 fix(e2e): handle task deletion confirmation dialog in WebDAV sync test
The test was failing because task deletion now shows a confirmation
dialog by default (isConfirmBeforeTaskDelete=true). Added handling
to click the confirm button before expecting the task count to change.
2026-01-09 17:59:06 +01:00
Johannes Millan
dae5caa6ff fix: resolve build failures from missing translations and unused imports
Remove unused imports (MatSlideToggle, MatFormField, MatLabel, TranslatePipe,
RouterLink) and add missing translation keys for CalDAV issue content, G.SHARE,
and WORKLOG restore task from archive.
2026-01-09 17:59:06 +01:00
Johannes Millan
cdf52cc4e5 fix(e2e): split docker-compose files for standalone webdav tests
docker-compose.e2e.yaml was failing when used standalone because the
supersync service only had a port override without a base definition.
Split into separate files so e2e:docker:webdav works without errors.
2026-01-09 17:27:30 +01:00
Johannes Millan
ca98d2c936 fix(e2e): use correct selector for confirm button in task-crud test
The confirm button has type="button" with e2e="confirmBtn" attribute,
not type="submit". Updated selector to match the actual button.
2026-01-09 17:18:36 +01:00
Johannes Millan
723896e9bc fix: resolve compilation errors after merge
- Add missing T.PS.RELOAD translation key
- Add missing T.GLOBAL section with COPY_SUFFIX key
- Fix TaskArchiveService import path in repeat-task-heatmap component
- Remove stale task-archive.service.js compiled file
2026-01-09 17:04:29 +01:00
Johannes Millan
150fd074ab Merge branch 'master' into feat/operation-logs
Integrate master branch updates into operation-logs feature branch:
- Add heatmap components and scheduled date group pipe
- Add task delete confirmation dialog and tests
- Update Android focus mode and sound configuration
- Add GitLab PAT authentication support
- Merge translation keys and i18n updates
2026-01-09 16:57:25 +01:00
Johannes Millan
b3dfd1f6a2
Merge pull request #5914 from Gitoffthelawn/patch-1
Added Scoop installation instructions
2026-01-09 16:57:12 +01:00
Johannes Millan
4919ab188b 16.9.0 2026-01-09 16:41:59 +01:00
Johannes Millan
1acef88877 Merge remote-tracking branch 'origin/master'
* origin/master:
  Update Chinese localization strings in zh.json

# Conflicts:
#	src/assets/i18n/zh.json
2026-01-09 16:39:30 +01:00
Johannes Millan
a2e1f932f4 fix: address code review issues from daily review
- Apply runtime default for isConfirmBeforeTaskDelete to ensure existing users get confirmation dialog
- Add takeUntil cleanup for dialog subscription in context menu
- Move _isTaskDeleteTriggered flag before delete call to prevent race condition
- Replace alert() with PFLog.warn() for non-blocking notification
- Change any to unknown type for better type safety
- Localize month names using DateAdapter instead of hardcoded English strings
- Remove duplicate monthNames array declaration (DRY)
2026-01-09 16:25:41 +01:00
Johannes Millan
73690c3766 feat(task-repeat): add history heatmap to repeat config dialog
Extract reusable heatmap component from activity-heatmap and add
a new repeat-task-heatmap that shows time spent history for
repeatable task instances in the configuration dialog.
2026-01-09 15:55:17 +01:00
Johannes Millan
7bf9e9393e fix(imex): auto-fix deprecated metric/improvement array fields on import
Add handlers to autoFixTypiaErrors to fix validation errors for deprecated
fields that will be removed in future:
- metric.entities[*].obstructions, improvements, improvementsTomorrow
- improvement.hiddenImprovementBannerItems

These fields are now auto-fixed to empty arrays when missing/undefined,
allowing import of older backups without validation failures.
2026-01-09 15:43:55 +01:00
Johannes Millan
d2a13d21e3 fix(imex): show validation error details on import failure
Include failed field paths in DataValidationFailedError message and
display them in the snackbar, making it easier to debug import issues.
2026-01-09 15:43:39 +01:00
Johannes Millan
10d652a382 fix(reminder): invoke cfg signal correctly to access reminder config 2026-01-09 15:36:27 +01:00
Johannes Millan
45826b8bcf
Merge pull request #5945 from dXrayb/patch-13
Update Chinese localization strings in zh.json
2026-01-09 15:33:21 +01:00
Johannes Millan
93c319830f fix(gitlab): use consistent update detection logic across methods
Apply GitHub's OR pattern to fix timing bug while preserving filterUsername.
Refactor getFreshDataForIssueTasks to call getFreshDataForIssueTask (DRY).

Fixes inconsistency from #5944 where only one method was updated.
2026-01-09 15:11:16 +01:00
Johannes Millan
dfa6a94a4b fix(android): show notification with sound when focus mode timer completes in background
When the app is backgrounded on Android, the focus mode countdown timer
now triggers a high-priority notification with alarm sound and vibration
when it completes. Previously, only the silent foreground service
notification was shown, causing users to miss timer completion.

Changes:
- Add completion notification channel with IMPORTANCE_HIGH
- Detect timer completion in FocusModeForegroundService
- Broadcast completion event to activity via LocalBroadcastManager
- Forward event to Angular via onFocusModeTimerComplete$ subject
- Handle native completion in effects to sync app state

Fixes #5923
2026-01-09 15:01:06 +01:00
Johannes Millan
ba9ceb25fd fix(reminder): cancel native Android alarm when removing reminder
Fixes #5921: When a task was rescheduled by removing the time and
changing only the date, the native Android alarm would still fire at
the original time. This was because removeTaskReminderSideEffects$
only removed the reminder from ReminderService but did not cancel
the native Android alarm.

Added explicit native Android alarm cancellation following the same
pattern used in clearRemindersOnDelete$, unscheduleDoneTask$, and
other similar effects.
2026-01-09 15:01:06 +01:00