{ "name": "@follow/web", "type": "module", "private": true, "main": "./dist/main/index.js", "scripts": { "build:web": "cd ../.. && pnpm build:web", "dev": "cd ../.. && pnpm dev:web", "generate-pwa-assets": "pwa-assets-generator public/icon.svg", "test": "vitest --typecheck", "typecheck": "tsc --noEmit" }, "dependencies": { "@dnd-kit/core": "^6.3.1", "@egoist/tipc": "0.3.2", "@electron-toolkit/preload": "^3.0.1", "@follow/electron-main": "workspace:*", "@follow/shared": "workspace:*", "@fontsource/sn-pro": "5.1.0", "@headlessui/react": "2.2.0", "@hookform/resolvers": "3.9.1", "@lottiefiles/dotlottie-react": "0.11.0", "@microflash/remark-callout-directives": "4.3.2", "@openpanel/web": "1.0.1", "@radix-ui/react-avatar": "1.1.1", "@radix-ui/react-context-menu": "2.2.2", "@radix-ui/react-dialog": "1.1.2", "@radix-ui/react-dropdown-menu": "2.1.2", "@radix-ui/react-hover-card": "1.1.2", "@radix-ui/react-label": "2.1.0", "@radix-ui/react-popover": "1.1.2", "@radix-ui/react-slider": "^1.2.1", "@radix-ui/react-slot": "1.1.0", "@sentry/react": "8.42.0", "@shikijs/transformers": "1.24.1", "@tanstack/query-sync-storage-persister": "5.62.3", "@tanstack/react-query": "5.62.3", "@tanstack/react-query-devtools": "5.62.3", "@tanstack/react-query-persist-client": "5.62.3", "@tanstack/react-virtual": "3.11.0", "@use-gesture/react": "10.3.1", "@welldone-software/why-did-you-render": "8.0.3", "@yornaath/batshit": "0.10.1", "camelcase-keys": "9.1.3", "click-to-react-component": "1.1.2", "clsx": "2.1.1", "cmdk": "1.0.4", "dayjs": "1.11.13", "dexie": "4.0.10", "dexie-export-import": "^4.1.4", "dnum": "^2.14.0", "electron-log": "5.2.4", "embla-carousel-react": "8.5.1", "embla-carousel-wheel-gestures": "8.0.1", "es-toolkit": "1.29.0", "firebase": "11.0.2", "foxact": "0.2.43", "framer-motion": "11.13.1", "franc-min": "6.2.0", "fuse.js": "7.0.0", "hast-util-to-jsx-runtime": "2.3.2", "hast-util-to-mdast": "^10.1.1", "hast-util-to-text": "4.0.2", "i18next": "^24.0.5", "i18next-browser-languagedetector": "8.0.2", "idb-keyval": "6.2.1", "immer": "10.1.1", "jotai": "2.10.3", "katex": "0.16.14", "lethargy": "1.0.9", "masonic": "4.0.1", "mdast-util-gfm-table": "^2.0.0", "mdast-util-to-markdown": "^2.1.2", "nanoid": "5.0.9", "ofetch": "1.4.1", "path-to-regexp": "8.2.0", "plain-shiki": "0.0.12", "re-resizable": "6.10.1", "react-blurhash": "^0.3.0", "react-error-boundary": "4.1.2", "react-fast-marquee": "1.6.5", "react-hook-form": "7.54.0", "react-hotkeys-hook": "4.6.1", "react-i18next": "^15.1.3", "react-intersection-observer": "9.13.1", "react-ios-pwa-prompt": "^2.0.6", "react-resizable-layout": "npm:@innei/react-resizable-layout@0.7.3-fork.1", "react-router": "7.0.2", "react-selecto": "^1.26.3", "react-shadow": "20.5.0", "react-zoom-pan-pinch": "^3.6.1", "rehype-infer-description-meta": "2.0.0", "rehype-parse": "9.0.1", "rehype-sanitize": "6.0.0", "rehype-stringify": "10.0.1", "remark-directive": "3.0.0", "remark-gfm": "4.0.0", "remark-gh-alerts": "0.0.3", "remark-parse": "11.0.0", "remark-rehype": "11.1.1", "shiki": "1.24.1", "sonner": "1.7.1", "tldts": "6.1.66", "unified": "11.0.5", "unist-util-visit-parents": "^6.0.1", "use-context-selector": "2.0.0", "use-pull-to-refresh": "2.4.1", "use-sync-external-store": "1.4.0", "usehooks-ts": "3.1.0", "vfile": "6.0.3", "web-push": "3.6.7", "zod": "3.23.8", "zustand": "5.0.2" }, "devDependencies": { "@babel/generator": "7.26.3", "@follow/atoms": "workspace:*", "@follow/components": "workspace:*", "@follow/constants": "workspace:*", "@follow/hooks": "workspace:*", "@follow/logger": "workspace:*", "@follow/models": "workspace:*", "@follow/types": "workspace:*", "@follow/utils": "workspace:*", "@hono/node-server": "1.13.7", "@types/katex": "0.16.7", "@types/node": "^22.10.1", "@types/react": "^18.3.12", "@types/react-dom": "^18.3.1", "@vite-pwa/assets-generator": "^0.2.6", "fake-indexeddb": "6.0.0", "happy-dom": "15.11.7", "react": "^18.3.1", "react-dom": "^18.3.1", "react-scan": "0.0.41" } }