- Modals (SearchModal, ImportListModal, CalendarEventModal): role=dialog, aria-modal, aria-label, focus trap via keydown Tab handler, aria-hidden on backdrop - OnboardingWizard: role=dialog on card, aria-hidden on overlay, aria-current=step on progress dots wrapped in <nav><ol>, aria-label on nav buttons - GridTaskBlock: aria-label on all ~12 action buttons (complete, edit, add subtask, notes, rolling, recurrence, project, link, delete, move), aria-expanded/aria-pressed where applicable, aria-hidden on all decorative SVGs, aria-label on inline edit textarea and subtask inputs; note indicator div → button - Keyboard task move: new "Move Task" dialog in GridTaskBlock with date+time inputs, routed via onMoveTask prop → moveTaskToSlot in WeeklyView - WeeklyView: visually-hidden aria-live="polite" region with announce() helper; announces task add, complete/incomplete, delete, sync complete/failed - Forms: aria-invalid + aria-describedby + role=alert on error paragraphs in TaskForm; auth error div gets id + role=alert; email input gets aria-describedby; show/hide password button gets aria-label + aria-pressed - Spinners: role=status + aria-label on standalone spinners (TaskItem delete, WeeklyView sync); aria-hidden on inline button spinners (AuthForm, TaskForm, CalendarSettings, SettingsSidebar, EmailAuthForm) - layout.tsx: Open Graph and Twitter Card meta tags added v1.85.0 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
75 lines
2.3 KiB
JSON
75 lines
2.3 KiB
JSON
{
|
|
"name": "my-weekly-todo-list",
|
|
"version": "1.85.0",
|
|
"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": {
|
|
"dev": "echo \"\\n ✦ My Weekly ToDo List v$(node -p \"require('./package.json').version\") — dev mode\\n\" && next dev -H 0.0.0.0 -p 3000",
|
|
"build": "next build",
|
|
"start": "echo \"\\n ✦ My Weekly ToDo List v$(node -p \"require('./package.json').version\") — production\\n\" && next start",
|
|
"lint": "next lint",
|
|
"type-check": "tsc --noEmit",
|
|
"test": "jest"
|
|
},
|
|
"keywords": [
|
|
"nextjs",
|
|
"todo",
|
|
"calendar",
|
|
"weekly-view",
|
|
"task-management"
|
|
],
|
|
"author": "My Weekly To Do List Team",
|
|
"license": "MIT",
|
|
"dependencies": {
|
|
"@auth/prisma-adapter": "^2.11.1",
|
|
"@fortawesome/fontawesome-svg-core": "^7.2.0",
|
|
"@fortawesome/free-brands-svg-icons": "^7.2.0",
|
|
"@fortawesome/free-solid-svg-icons": "^7.2.0",
|
|
"@fortawesome/react-fontawesome": "^3.2.0",
|
|
"@mdi/js": "^7.4.47",
|
|
"@mdi/react": "^1.6.1",
|
|
"@next-auth/prisma-adapter": "^1.0.7",
|
|
"@notionhq/client": "^5.14.0",
|
|
"@prisma/client": "5.22.0",
|
|
"@tiptap/extension-link": "^3.20.0",
|
|
"@tiptap/extension-placeholder": "^3.20.0",
|
|
"@tiptap/extension-underline": "^3.20.0",
|
|
"@tiptap/react": "^3.20.0",
|
|
"@tiptap/starter-kit": "^3.20.0",
|
|
"@types/bcryptjs": "^2.4.6",
|
|
"@types/nodemailer": "^7.0.11",
|
|
"bcryptjs": "^3.0.3",
|
|
"date-fns": "^2.30.0",
|
|
"googleapis": "^170.1.0",
|
|
"ical.js": "^2.2.1",
|
|
"lucide-react": "^0.563.0",
|
|
"next": "14.2.35",
|
|
"next-auth": "^4.24.13",
|
|
"nodemailer": "^7.0.13",
|
|
"postcss-cli": "^11.0.1",
|
|
"prisma": "5.22.0",
|
|
"react": "^18.2.0",
|
|
"react-dnd": "^16.0.1",
|
|
"react-dnd-html5-backend": "^16.0.1",
|
|
"react-dom": "^18.2.0",
|
|
"tsdav": "^2.1.8",
|
|
"web-push": "^3.6.7",
|
|
"zustand": "^4.4.0"
|
|
},
|
|
"devDependencies": {
|
|
"@playwright/test": "^1.58.0",
|
|
"@types/jest": "^30.0.0",
|
|
"@types/node": "^20.0.0",
|
|
"@types/react": "^18.2.0",
|
|
"@types/react-dom": "^18.2.0",
|
|
"autoprefixer": "^10.4.19",
|
|
"eslint": "^8.0.0",
|
|
"eslint-config-next": "^14.0.0",
|
|
"jest": "^29.0.0",
|
|
"postcss": "^8.4.38",
|
|
"tailwindcss": "^3.4.1",
|
|
"ts-jest": "^29.0.0",
|
|
"typescript": "^5.0.0"
|
|
}
|
|
}
|