mirror of
https://github.com/hoornet/vega.git
synced 2026-06-08 22:21:55 -07:00
7e998be45b
The app now behaves coherently for users without a signer (fully logged
out, or signed in with an npub). No broken Publish buttons, no dead-end
"Not logged in" toasts.
- Add useCanSign() hook in src/stores/user.ts as the single source of
truth for write-capability. Captures both "no pubkey" and
"npub-only login" states.
- ReadOnlyBanner now fires for both states (was only "no pubkey" before).
- Hide account-bound sidebar entries (Bookmarks, Messages, Notifications,
Zaps, V4V) in read-only mode. Read-only-OK views (Feed, Articles, Media,
Podcasts, Search, Follows, Relays, Settings, Support) stay visible.
- Guard every write surface, two patterns:
- Hide inline UI: ComposeBox, InlineReplyBox, NoteActions row, NoteCard
context menu, ArticleFeed "Write article", FollowsView per-row
follow/unfollow, ThreadView root reply, PollWidget vote controls,
RelaysView "Publish list", PodcastPlayerBar ShareButton.
- "Sign in to X" CTA: ArticleEditor publish, QuoteModal post, ZapModal,
EditProfileForm save. CTAs open LoginModal.
- ProfileView edit/follow/mute/zap/DM buttons each gated by canSign.
- ArticleView like/repost/comment/bookmark/zap each gated by canSign.
- Belt-and-suspenders runtime guards in user store follow/unfollow.
Bookmark / mute stores already swallow publish errors via .catch(() => {}),
so they don't need explicit runtime guards.
50 lines
1.3 KiB
JSON
50 lines
1.3 KiB
JSON
{
|
|
"name": "vega",
|
|
"private": true,
|
|
"version": "0.12.11",
|
|
"type": "module",
|
|
"scripts": {
|
|
"dev": "vite",
|
|
"build": "tsc && vite build",
|
|
"preview": "vite preview",
|
|
"tauri": "tauri",
|
|
"test": "vitest",
|
|
"test:run": "vitest run"
|
|
},
|
|
"dependencies": {
|
|
"@nostr-dev-kit/ndk": "^3.0.3",
|
|
"@tailwindcss/vite": "^4.2.1",
|
|
"@tauri-apps/api": "^2.11.0",
|
|
"@tauri-apps/plugin-dialog": "^2.7.0",
|
|
"@tauri-apps/plugin-fs": "^2.5.0",
|
|
"@tauri-apps/plugin-http": "^2.5.7",
|
|
"@tauri-apps/plugin-notification": "^2.3.3",
|
|
"@tauri-apps/plugin-opener": "^2",
|
|
"@tauri-apps/plugin-process": "^2.3.1",
|
|
"@tauri-apps/plugin-updater": "^2.10.0",
|
|
"@types/dompurify": "^3.0.5",
|
|
"dompurify": "^3.4.0",
|
|
"highlight.js": "^11.11.1",
|
|
"marked": "^17.0.4",
|
|
"marked-highlight": "^2.2.3",
|
|
"react": "^19.1.0",
|
|
"react-dom": "^19.1.0",
|
|
"react-qr-code": "^2.0.18",
|
|
"tailwindcss": "^4.2.1",
|
|
"zustand": "^5.0.11"
|
|
},
|
|
"devDependencies": {
|
|
"@tauri-apps/cli": "^2",
|
|
"@testing-library/jest-dom": "^6.9.1",
|
|
"@testing-library/react": "^16.3.2",
|
|
"@types/marked": "^5.0.2",
|
|
"@types/react": "^19.1.8",
|
|
"@types/react-dom": "^19.1.6",
|
|
"@vitejs/plugin-react": "^4.6.0",
|
|
"jsdom": "^29.0.0",
|
|
"typescript": "~5.8.3",
|
|
"vite": "^7.0.4",
|
|
"vitest": "^4.1.0"
|
|
}
|
|
}
|