jotter-app 3.8.1.dev0__tar.gz → 3.8.2.dev0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {jotter_app-3.8.1.dev0/src/jotter_app.egg-info → jotter_app-3.8.2.dev0}/PKG-INFO +1 -1
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/components/ui/TagInput.vue +1 -3
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/utils/tagUtils.ts +2 -9
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/_version.py +3 -3
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/features/buckets/repo.py +6 -3
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/features/projects/manifest.py +20 -14
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/features/projects/repo.py +4 -1
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/features/sync/service.py +0 -1
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/features/tasks/disk_repo.py +5 -4
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0/src/jotter_app.egg-info}/PKG-INFO +1 -1
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter_app.egg-info/scm_version.json +2 -2
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/tests/test_bucket_service.py +5 -1
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/tests/test_sync_service.py +0 -1
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/.codecov.yml +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/.github/dependabot.yml +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/.github/workflows/ci.yml +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/.github/workflows/pages.yml +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/.github/workflows/release.yml +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/.gitignore +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/CONTRIBUTING.md +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/LICENSE.md +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/README.md +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/docs/.vitepress/config.mts +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/docs/assets/icon.ico +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/docs/assets/icon.png +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/docs/assets/jotter.sample.yaml +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/docs/assets/screenshot.png +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/docs/de/developer/api.md +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/docs/de/developer/architecture.md +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/docs/de/index.md +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/docs/de/installation/development.md +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/docs/de/installation/precompiled.md +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/docs/de/user/configuration.md +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/docs/de/user/format-spec.md +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/docs/de/user/git-sync.md +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/docs/de/user/import-export.md +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/docs/de/user/obsidian.md +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/docs/de/user/pomodoro.md +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/docs/de/user/postponing.md +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/docs/de/user/safety.md +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/docs/de/user/searching-filtering.md +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/docs/de/user/shortcuts.md +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/docs/de/user/time-blocking.md +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/docs/de/user/voice-dictation.md +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/docs/developer/adr/0001-immutable-bucket-slugs.md +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/docs/developer/adr/0002-decline-recurring-tasks.md +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/docs/developer/api.md +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/docs/developer/architecture.md +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/docs/index.md +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/docs/installation/development.md +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/docs/installation/precompiled.md +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/docs/public/logo.png +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/docs/user/configuration.md +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/docs/user/format-spec.md +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/docs/user/git-sync.md +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/docs/user/import-export.md +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/docs/user/obsidian.md +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/docs/user/pomodoro.md +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/docs/user/postponing.md +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/docs/user/safety.md +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/docs/user/searching-filtering.md +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/docs/user/shortcuts.md +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/docs/user/time-blocking.md +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/docs/user/voice-dictation.md +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/.gitignore +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/.prettierrc +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/README.md +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/eslint.config.js +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/index.html +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/package-lock.json +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/package.json +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/playwright.config.ts +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/public/favicon.svg +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/public/manifest.json +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/public/pwa-192.png +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/public/pwa-512.png +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/public/sw.js +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/App.vue +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/__tests__/api.spec.ts +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/__tests__/factories.ts +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/api.demo.ts +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/api.ts +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/components/layout/MainLayout.vue +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/components/layout/NavigationBar.vue +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/components/layout/ProjectLayout.vue +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/components/layout/ProjectSidebar.vue +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/components/layout/TimeblockSidebar.vue +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/components/layout/TimelineLayout.vue +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/components/layout/__tests__/NavigationBar.spec.ts +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/components/layout/__tests__/ProjectSidebar.spec.ts +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/components/layout/__tests__/TimeblockSidebar.spec.ts +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/components/modals/ColumnEditModal.vue +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/components/modals/FilterModal.vue +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/components/modals/ModalRegistry.vue +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/components/modals/MoveTasksConfirmModal.vue +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/components/modals/ProjectEditModal.vue +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/components/modals/TaskCreateModal.vue +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/components/modals/TaskDetailModal.vue +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/components/modals/TaskImportModal.vue +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/components/modals/TimeMachineModal.vue +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/components/modals/TimeblockEditModal.vue +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/components/modals/__tests__/ColumnEditModal.spec.ts +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/components/modals/__tests__/FilterModal.spec.ts +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/components/modals/__tests__/MoveTasksConfirmModal.spec.ts +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/components/modals/__tests__/ProjectEditModal.spec.ts +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/components/modals/__tests__/TaskCreateModal.spec.ts +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/components/modals/__tests__/TaskDetailModal.spec.ts +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/components/modals/__tests__/TimeMachineModal.spec.ts +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/components/modals/__tests__/TimeblockEditModal.spec.ts +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/components/ui/BaseModal.vue +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/components/ui/BulkActionBar.vue +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/components/ui/GenericColumn.vue +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/components/ui/GlobalDialog.vue +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/components/ui/KeywordHighlightInput.vue +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/components/ui/MarkdownEditor.vue +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/components/ui/PomodoroBar.vue +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/components/ui/TaskCard.vue +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/components/ui/ToastContainer.vue +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/components/ui/__tests__/BulkActionBar.spec.ts +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/components/ui/__tests__/PomodoroBar.spec.ts +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/components/ui/__tests__/TagInput.spec.ts +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/components/ui/__tests__/TaskCard.spec.ts +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/components/ui/__tests__/ToastContainer.spec.ts +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/components/views/BoardView.vue +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/components/views/HomeView.vue +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/components/views/ListView.vue +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/components/views/MatrixView.vue +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/components/views/ReviewView.vue +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/components/views/SettingsView.vue +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/components/views/TagView.vue +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/components/views/TimeView.vue +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/components/views/TriageView.vue +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/components/views/__tests__/ReviewView.spec.ts +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/components/views/__tests__/TriageView.spec.ts +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/composables/__tests__/useBoardNavigation.spec.ts +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/composables/__tests__/useDialog.spec.ts +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/composables/__tests__/useI18n.spec.ts +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/composables/__tests__/useKeyboardShortcuts.spec.ts +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/composables/__tests__/useSpeechRecognition.spec.ts +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/composables/__tests__/useTaskMutations.spec.ts +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/composables/useBoardNavigation.ts +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/composables/useBuckets.ts +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/composables/useDialog.ts +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/composables/useDragSelect.ts +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/composables/useI18n.ts +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/composables/useKeyboardShortcuts.ts +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/composables/useProjects.ts +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/composables/useSpeechRecognition.ts +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/composables/useTaskAutocomplete.ts +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/composables/useTaskExport.ts +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/composables/useTaskFilters.ts +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/composables/useTaskMutations.ts +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/composables/useTaskSelection.ts +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/composables/useToast.ts +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/features/task-editor/components/TaskAttachments.vue +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/features/task-editor/components/TaskChecklist.vue +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/features/task-editor/components/TaskEditFields.vue +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/features/task-editor/components/TaskImageLightbox.vue +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/features/task-editor/composables/useTaskEditor.ts +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/features/task-import/components/StepColumnMapper.vue +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/features/task-import/components/StepProgress.vue +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/features/task-import/components/StepRowPreview.vue +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/features/task-import/components/StepSummary.vue +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/features/task-import/components/StepUpload.vue +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/features/task-import/composables/__tests__/useImportWizard.spec.ts +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/features/task-import/composables/useImportWizard.ts +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/features/task-triage/components/TriageCard.vue +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/locales/de.ts +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/locales/en.ts +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/main.ts +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/router.ts +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/stores/__tests__/modal.spec.ts +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/stores/__tests__/pomodoro.spec.ts +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/stores/__tests__/selection.spec.ts +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/stores/__tests__/settings.spec.ts +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/stores/__tests__/timeblock.spec.ts +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/stores/__tests__/toast.spec.ts +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/stores/__tests__/ui.spec.ts +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/stores/modal.ts +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/stores/pomodoro.ts +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/stores/project.ts +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/stores/selection.ts +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/stores/settings.ts +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/stores/timeblock.ts +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/stores/toast.ts +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/stores/ui.ts +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/style.css +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/test-setup.ts +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/types.ts +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/utils/__tests__/dsl.spec.ts +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/utils/__tests__/effects.spec.ts +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/utils/__tests__/markdown.spec.ts +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/utils/__tests__/tagUtils.spec.ts +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/utils/__tests__/titleParser.spec.ts +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/utils/constants.ts +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/utils/dsl.ts +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/utils/effects.ts +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/utils/markdown.ts +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/utils/sound.ts +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/utils/titleParser.ts +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/tests/e2e/kanban.spec.ts +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/tsconfig.app.json +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/tsconfig.json +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/tsconfig.node.json +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/vite.config.ts +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/jotter.spec +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/package-lock.json +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/package.json +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/pyproject.toml +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/run.py +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/scripts/combine-coverage.js +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/scripts/loc_history.py +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/scripts/plot_loc.py +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/setup.cfg +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/__init__.py +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/__main__.py +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/app.py +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/config.py +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/dist/assets/BoardView-Bzv-K-Ph.js +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/dist/assets/GenericColumn-1-2wmdHw.js +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/dist/assets/GenericColumn-o9T_l6dT.css +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/dist/assets/HomeView-DhflHyXt.css +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/dist/assets/HomeView-DzrYr7dK.js +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/dist/assets/ListView-ffjP4j7Q.js +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/dist/assets/MarkdownEditor-BnBNucg1.js +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/dist/assets/MarkdownEditor-Dw1c_PRw.css +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/dist/assets/MatrixView-KELVqO_3.css +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/dist/assets/MatrixView-_HLDMvmI.js +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/dist/assets/ReviewView-gn5qGoSC.js +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/dist/assets/SettingsView-CWHtcai7.js +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/dist/assets/TagView-YeoZ5bkd.js +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/dist/assets/TaskCard-DkCRPRZJ.css +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/dist/assets/TaskCard-_hBOxwKl.js +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/dist/assets/TaskDetailModal-DJd3Xdbe.js +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/dist/assets/TaskDetailModal-DM7nQldC.css +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/dist/assets/TimeView-B2BEDiSC.js +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/dist/assets/TriageView-BjTRMMbr.js +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/dist/assets/TriageView-CFurWdNn.css +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/dist/assets/chevron-down-BXro-pNT.js +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/dist/assets/dist-CUD5qJpD.js +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/dist/assets/index-Bk6K6mur.js +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/dist/assets/index-QF5vFcj-.css +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/dist/assets/inter-cyrillic-ext-wght-italic-B5xAaiFk.woff2 +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/dist/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/dist/assets/inter-cyrillic-wght-italic-DzZdc28x.woff2 +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/dist/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/dist/assets/inter-greek-ext-wght-italic-DcOpz6Lw.woff2 +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/dist/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/dist/assets/inter-greek-wght-italic-CILZdfAp.woff2 +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/dist/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/dist/assets/inter-latin-ext-wght-italic-0pjOp8NU.woff2 +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/dist/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/dist/assets/inter-latin-wght-italic-DpCbqKDY.woff2 +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/dist/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/dist/assets/inter-vietnamese-wght-italic-K3WlGtc8.woff2 +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/dist/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/dist/assets/marked.esm-HaWzKJJ6.js +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/dist/assets/paperclip-DIkWl2JD.js +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/dist/assets/useBuckets-BDGwDWwv.js +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/dist/assets/useTaskMutations-CuFjiNvT.js +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/dist/assets/useToast-FPmyjTCe.js +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/dist/assets/xlsx-CsRylhoj.js +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/dist/favicon.svg +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/dist/index.html +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/dist/manifest.json +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/dist/pwa-192.png +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/dist/pwa-512.png +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/dist/sw.js +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/features/buckets/__init__.py +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/features/buckets/domain.py +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/features/buckets/router.py +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/features/buckets/schemas.py +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/features/buckets/service.py +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/features/projects/__init__.py +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/features/projects/domain.py +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/features/projects/router.py +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/features/projects/schemas.py +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/features/projects/service.py +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/features/settings/__init__.py +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/features/settings/router.py +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/features/settings/schemas.py +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/features/settings/service.py +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/features/sync/__init__.py +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/features/sync/git_adapter.py +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/features/sync/router.py +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/features/tasks/__init__.py +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/features/tasks/domain.py +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/features/tasks/router.py +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/features/tasks/schemas.py +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/features/tasks/service.py +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/features/tasks/sqlite_repo.py +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/features/timeblock/__init__.py +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/features/timeblock/repo.py +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/features/timeblock/router.py +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/features/timeblock/schemas.py +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/features/timeblock/service.py +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/main.py +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/mcp_server.py +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/shared/__init__.py +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/shared/db.py +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/shared/deps.py +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/shared/exceptions.py +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/shared/slug.py +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/shared/ulid.py +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter/shared/value_objects.py +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter_app.egg-info/SOURCES.txt +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter_app.egg-info/dependency_links.txt +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter_app.egg-info/entry_points.txt +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter_app.egg-info/requires.txt +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter_app.egg-info/scm_file_list.json +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/src/jotter_app.egg-info/top_level.txt +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/tests/conftest.py +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/tests/test_api.py +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/tests/test_config.py +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/tests/test_domain.py +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/tests/test_git_service.py +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/tests/test_mcp_server.py +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/tests/test_task_service.py +0 -0
- {jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/tests/test_timeblocks.py +0 -0
|
@@ -60,9 +60,7 @@ const currentTagsSet = computed(() => {
|
|
|
60
60
|
// Suggestions list
|
|
61
61
|
const tagSuggestions = computed(() => {
|
|
62
62
|
const query = activeTagQuery.value;
|
|
63
|
-
const baseList = props.suggestionsOverride
|
|
64
|
-
? props.suggestionsOverride.map(sanitizeTag).filter(Boolean)
|
|
65
|
-
: existingTags.value;
|
|
63
|
+
const baseList = props.suggestionsOverride ? props.suggestionsOverride.map(sanitizeTag).filter(Boolean) : existingTags.value;
|
|
66
64
|
return baseList.filter((tag) => {
|
|
67
65
|
const normalizedTag = tag.toLowerCase();
|
|
68
66
|
if (currentTagsSet.value.has(normalizedTag)) return false;
|
|
@@ -14,12 +14,7 @@
|
|
|
14
14
|
*/
|
|
15
15
|
export function sanitizeTag(tag: string | null | undefined): string {
|
|
16
16
|
if (!tag) return '';
|
|
17
|
-
return String(tag)
|
|
18
|
-
.trim()
|
|
19
|
-
.replace(/^#+/, '')
|
|
20
|
-
.replace(/#/g, '')
|
|
21
|
-
.replace(/\s+/g, '-')
|
|
22
|
-
.toLowerCase();
|
|
17
|
+
return String(tag).trim().replace(/^#+/, '').replace(/#/g, '').replace(/\s+/g, '-').toLowerCase();
|
|
23
18
|
}
|
|
24
19
|
|
|
25
20
|
/**
|
|
@@ -29,9 +24,7 @@ export function sanitizeTag(tag: string | null | undefined): string {
|
|
|
29
24
|
export function sanitizeTags(tagsInput: string | string[] | null | undefined): string[] {
|
|
30
25
|
if (!tagsInput) return [];
|
|
31
26
|
|
|
32
|
-
const rawTags = Array.isArray(tagsInput)
|
|
33
|
-
? tagsInput
|
|
34
|
-
: String(tagsInput).split(/[,;|\n]+/);
|
|
27
|
+
const rawTags = Array.isArray(tagsInput) ? tagsInput : String(tagsInput).split(/[,;|\n]+/);
|
|
35
28
|
|
|
36
29
|
const resultSet = new Set<string>();
|
|
37
30
|
for (const raw of rawTags) {
|
|
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
|
|
|
18
18
|
commit_id: str | None
|
|
19
19
|
__commit_id__: str | None
|
|
20
20
|
|
|
21
|
-
__version__ = version = '3.8.
|
|
22
|
-
__version_tuple__ = version_tuple = (3, 8,
|
|
21
|
+
__version__ = version = '3.8.2.dev0'
|
|
22
|
+
__version_tuple__ = version_tuple = (3, 8, 2, 'dev0')
|
|
23
23
|
|
|
24
|
-
__commit_id__ = commit_id = '
|
|
24
|
+
__commit_id__ = commit_id = 'gcb93b6334'
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
"""Repository for managing bucket columns on disk (index.md / buckets.json) and SQLite."""
|
|
2
2
|
|
|
3
|
-
import json
|
|
4
3
|
import sqlite3
|
|
5
4
|
from pathlib import Path
|
|
6
5
|
from typing import Any
|
|
@@ -149,7 +148,9 @@ class BucketRepository:
|
|
|
149
148
|
project = Project(
|
|
150
149
|
id=row["id"],
|
|
151
150
|
name=row["title"],
|
|
152
|
-
description=row["description"]
|
|
151
|
+
description=row["description"]
|
|
152
|
+
if "description" in row.keys() and row["description"] is not None
|
|
153
|
+
else "",
|
|
153
154
|
git_remote=row["git_remote"],
|
|
154
155
|
done_clean_period=row["done_clean_period"],
|
|
155
156
|
created_at=row["created_at"],
|
|
@@ -213,7 +214,9 @@ class BucketRepository:
|
|
|
213
214
|
project = Project(
|
|
214
215
|
id=row["id"],
|
|
215
216
|
name=row["title"],
|
|
216
|
-
description=row["description"]
|
|
217
|
+
description=row["description"]
|
|
218
|
+
if "description" in row.keys() and row["description"] is not None
|
|
219
|
+
else "",
|
|
217
220
|
git_remote=row["git_remote"],
|
|
218
221
|
done_clean_period=row["done_clean_period"],
|
|
219
222
|
created_at=row["created_at"],
|
|
@@ -45,7 +45,6 @@ def read_project_manifest(
|
|
|
45
45
|
pass
|
|
46
46
|
|
|
47
47
|
fm_data: dict[str, Any] = {}
|
|
48
|
-
body = ""
|
|
49
48
|
|
|
50
49
|
if index_file.is_file():
|
|
51
50
|
content = index_file.read_text(encoding="utf-8")
|
|
@@ -58,31 +57,36 @@ def read_project_manifest(
|
|
|
58
57
|
fm_data = loaded
|
|
59
58
|
except Exception:
|
|
60
59
|
pass
|
|
61
|
-
body = parts[2].lstrip("\r\n")
|
|
62
|
-
else:
|
|
63
|
-
body = content
|
|
64
|
-
else:
|
|
65
|
-
body = content
|
|
66
60
|
|
|
67
61
|
# Resolve project fields (manifest index.md -> legacy projects.json -> defaults)
|
|
68
|
-
proj_id =
|
|
62
|
+
proj_id = (
|
|
63
|
+
str(fm_data.get("id") or (legacy_data.get("id") if legacy_data else None) or fallback_id).strip() or fallback_id
|
|
64
|
+
)
|
|
69
65
|
title = str(
|
|
70
66
|
fm_data.get("title")
|
|
71
67
|
or fm_data.get("name")
|
|
72
68
|
or (legacy_data.get("title") or legacy_data.get("name") if legacy_data else None)
|
|
73
69
|
or proj_id.capitalize()
|
|
74
70
|
).strip()
|
|
75
|
-
description = str(
|
|
76
|
-
|
|
71
|
+
description = str(
|
|
72
|
+
fm_data.get("description") or (legacy_data.get("description") if legacy_data else "") or ""
|
|
73
|
+
).strip()
|
|
74
|
+
git_remote = (
|
|
75
|
+
fm_data.get("git_remote")
|
|
76
|
+
or fm_data.get("gitRemote")
|
|
77
|
+
or (legacy_data.get("git_remote") or legacy_data.get("gitRemote") if legacy_data else None)
|
|
78
|
+
)
|
|
77
79
|
git_remote_str = str(git_remote).strip() if git_remote else None
|
|
78
80
|
|
|
79
81
|
raw_clean_period = (
|
|
80
|
-
fm_data.get("done_clean_period")
|
|
81
|
-
if "done_clean_period" in fm_data
|
|
82
|
-
else fm_data.get("doneCleanPeriod")
|
|
82
|
+
fm_data.get("done_clean_period") if "done_clean_period" in fm_data else fm_data.get("doneCleanPeriod")
|
|
83
83
|
)
|
|
84
84
|
if raw_clean_period is None and legacy_data:
|
|
85
|
-
raw_clean_period =
|
|
85
|
+
raw_clean_period = (
|
|
86
|
+
legacy_data.get("done_clean_period")
|
|
87
|
+
if "done_clean_period" in legacy_data
|
|
88
|
+
else legacy_data.get("doneCleanPeriod")
|
|
89
|
+
)
|
|
86
90
|
clean_period_int = int(raw_clean_period) if raw_clean_period is not None else None
|
|
87
91
|
|
|
88
92
|
created_at = (
|
|
@@ -265,7 +269,9 @@ def write_project_manifest(
|
|
|
265
269
|
final_content = f"---\n{yaml_content}---\n{body_to_write}"
|
|
266
270
|
|
|
267
271
|
# Write to a uniquely named temporary file in the same directory before atomic replacement
|
|
268
|
-
with tempfile.NamedTemporaryFile(
|
|
272
|
+
with tempfile.NamedTemporaryFile(
|
|
273
|
+
"w", dir=project_dir, delete=False, encoding="utf-8", prefix=".index_", suffix=".tmp"
|
|
274
|
+
) as f:
|
|
269
275
|
f.write(final_content)
|
|
270
276
|
tmp_path = Path(f.name)
|
|
271
277
|
|
|
@@ -35,7 +35,9 @@ class ProjectRepository:
|
|
|
35
35
|
|
|
36
36
|
def get_all(self) -> list[Project]:
|
|
37
37
|
cursor = self.conn.cursor()
|
|
38
|
-
cursor.execute(
|
|
38
|
+
cursor.execute(
|
|
39
|
+
"SELECT id, title, description, created_at, done_clean_period, git_remote FROM projects ORDER BY id ASC"
|
|
40
|
+
)
|
|
39
41
|
rows = cursor.fetchall()
|
|
40
42
|
return [self._row_to_project(row) for row in rows]
|
|
41
43
|
|
|
@@ -136,6 +138,7 @@ class ProjectRepository:
|
|
|
136
138
|
if legacy_file.is_file():
|
|
137
139
|
try:
|
|
138
140
|
import json
|
|
141
|
+
|
|
139
142
|
content = json.loads(legacy_file.read_text(encoding="utf-8"))
|
|
140
143
|
if isinstance(content, list):
|
|
141
144
|
for p in content:
|
|
@@ -7,7 +7,6 @@ from typing import Self
|
|
|
7
7
|
|
|
8
8
|
from jotter.features.buckets.domain import Bucket
|
|
9
9
|
from jotter.features.buckets.repo import BucketRepository
|
|
10
|
-
from jotter.features.projects.domain import Project
|
|
11
10
|
from jotter.features.projects.repo import ProjectRepository
|
|
12
11
|
from jotter.features.sync.git_adapter import git_sync
|
|
13
12
|
from jotter.features.tasks.disk_repo import DiskTaskRepository
|
|
@@ -39,7 +39,10 @@ class DiskTaskRepository:
|
|
|
39
39
|
parent_dir.mkdir(parents=True, exist_ok=True)
|
|
40
40
|
|
|
41
41
|
import tempfile
|
|
42
|
-
|
|
42
|
+
|
|
43
|
+
with tempfile.NamedTemporaryFile(
|
|
44
|
+
"w", dir=parent_dir, delete=False, encoding="utf-8", prefix=f".{task.id}_", suffix=".tmp"
|
|
45
|
+
) as f:
|
|
43
46
|
f.write(content)
|
|
44
47
|
tmp_path = Path(f.name)
|
|
45
48
|
tmp_path.replace(path)
|
|
@@ -52,9 +55,7 @@ class DiskTaskRepository:
|
|
|
52
55
|
def get_all_task_files(self, project_id: str) -> list[Path]:
|
|
53
56
|
p = self.get_project_dir(project_id)
|
|
54
57
|
return [
|
|
55
|
-
f
|
|
56
|
-
for f in p.glob("*.md")
|
|
57
|
-
if f.is_file() and f.name.lower() not in ("index.md", "readme.md", ".project.md")
|
|
58
|
+
f for f in p.glob("*.md") if f.is_file() and f.name.lower() not in ("index.md", "readme.md", ".project.md")
|
|
58
59
|
]
|
|
59
60
|
|
|
60
61
|
def serialize_task(self, task: Task) -> str:
|
|
@@ -95,4 +95,8 @@ def test_index_md_project_manifest_roundtrip(temp_dir, test_env):
|
|
|
95
95
|
content_updated = index_file.read_text(encoding="utf-8")
|
|
96
96
|
assert "name: reviews" in content_updated
|
|
97
97
|
assert "title: Reviews" in content_updated
|
|
98
|
-
assert
|
|
98
|
+
assert (
|
|
99
|
+
"color: '#00ff00'" in content_updated
|
|
100
|
+
or "color: '#00FF00'" in content_updated
|
|
101
|
+
or 'color: "#00ff00"' in content_updated
|
|
102
|
+
)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/docs/developer/adr/0001-immutable-bucket-slugs.md
RENAMED
|
File without changes
|
{jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/docs/developer/adr/0002-decline-recurring-tasks.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/components/layout/MainLayout.vue
RENAMED
|
File without changes
|
{jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/components/layout/NavigationBar.vue
RENAMED
|
File without changes
|
{jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/components/layout/ProjectLayout.vue
RENAMED
|
File without changes
|
{jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/components/layout/ProjectSidebar.vue
RENAMED
|
File without changes
|
{jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/components/layout/TimeblockSidebar.vue
RENAMED
|
File without changes
|
{jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/components/layout/TimelineLayout.vue
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/components/modals/ColumnEditModal.vue
RENAMED
|
File without changes
|
{jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/components/modals/FilterModal.vue
RENAMED
|
File without changes
|
{jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/components/modals/ModalRegistry.vue
RENAMED
|
File without changes
|
|
File without changes
|
{jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/components/modals/ProjectEditModal.vue
RENAMED
|
File without changes
|
{jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/components/modals/TaskCreateModal.vue
RENAMED
|
File without changes
|
{jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/components/modals/TaskDetailModal.vue
RENAMED
|
File without changes
|
{jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/components/modals/TaskImportModal.vue
RENAMED
|
File without changes
|
{jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/components/modals/TimeMachineModal.vue
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/components/ui/BulkActionBar.vue
RENAMED
|
File without changes
|
{jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/components/ui/GenericColumn.vue
RENAMED
|
File without changes
|
|
File without changes
|
{jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/components/ui/KeywordHighlightInput.vue
RENAMED
|
File without changes
|
{jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/components/ui/MarkdownEditor.vue
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/components/ui/ToastContainer.vue
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/components/views/MatrixView.vue
RENAMED
|
File without changes
|
{jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/components/views/ReviewView.vue
RENAMED
|
File without changes
|
{jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/components/views/SettingsView.vue
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/components/views/TriageView.vue
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/composables/__tests__/useDialog.spec.ts
RENAMED
|
File without changes
|
{jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/composables/__tests__/useI18n.spec.ts
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/composables/useBoardNavigation.ts
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/composables/useKeyboardShortcuts.ts
RENAMED
|
File without changes
|
|
File without changes
|
{jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/composables/useSpeechRecognition.ts
RENAMED
|
File without changes
|
{jotter_app-3.8.1.dev0 → jotter_app-3.8.2.dev0}/frontend/src/composables/useTaskAutocomplete.ts
RENAMED
|
File without changes
|