- stores/review.ts: Pinia setup store — pending queue, undo stack, stoop-speed session timer (easter egg 9.2: 10 cards/60s) - components/JobCard.vue: card content with match-score badge (colored pill), keyword-gap pills, expand/collapse description, footer with job URL + relative date; shimmer animation for ≥95% matches (ee 9.4) - components/JobCardStack.vue: pointer-event drag with setPointerCapture, rolling 50ms velocity buffer for fling detection (600px/s + cos45° alignment), left/right color-tint overlay (red/green), spring snap-back on no-action, buffered exit animation before emitting approve/reject - views/JobReviewView.vue: segmented status tabs, card stack for pending, list view for other statuses, action buttons, keyboard shortcuts (←/J reject, →/L approve, S skip, Z undo, ? help), help overlay, undo toast (5s), falcon stoop empty state (easter egg 9.3)
39 lines
999 B
JSON
39 lines
999 B
JSON
{
|
|
"name": "peregrine-web",
|
|
"private": true,
|
|
"version": "0.0.0",
|
|
"type": "module",
|
|
"scripts": {
|
|
"dev": "vite",
|
|
"build": "vue-tsc && vite build",
|
|
"preview": "vite preview",
|
|
"test": "vitest run",
|
|
"test:watch": "vitest"
|
|
},
|
|
"dependencies": {
|
|
"@fontsource/atkinson-hyperlegible": "^5.2.8",
|
|
"@fontsource/fraunces": "^5.2.9",
|
|
"@fontsource/jetbrains-mono": "^5.2.8",
|
|
"@heroicons/vue": "^2.2.0",
|
|
"@vueuse/core": "^14.2.1",
|
|
"@vueuse/integrations": "^14.2.1",
|
|
"animejs": "^4.3.6",
|
|
"pinia": "^3.0.4",
|
|
"vue": "^3.5.25",
|
|
"vue-router": "^5.0.3"
|
|
},
|
|
"devDependencies": {
|
|
"@types/node": "^24.10.1",
|
|
"@unocss/preset-attributify": "^66.6.4",
|
|
"@unocss/preset-wind": "^66.6.4",
|
|
"@vitejs/plugin-vue": "^6.0.2",
|
|
"@vue/test-utils": "^2.4.6",
|
|
"@vue/tsconfig": "^0.8.1",
|
|
"jsdom": "^28.1.0",
|
|
"typescript": "~5.9.3",
|
|
"unocss": "^66.6.4",
|
|
"vite": "^7.3.1",
|
|
"vitest": "^4.0.18",
|
|
"vue-tsc": "^3.1.5"
|
|
}
|
|
}
|