chore: update dependencies and improve type safety

- Updated various package dependencies across the project, including @sentry/react, @tanstack/react-query, and others to their latest versions for improved performance and security.
- Enhanced type safety in several components by refining type definitions, particularly in motion-related imports.
- Adjusted transition configurations to utilize new presets for smoother animations.

Signed-off-by: Innei <tukon479@gmail.com>
This commit is contained in:
Innei 2025-06-20 23:32:42 +08:00
parent 9f0e7522d9
commit 6d76d6b558
No known key found for this signature in database
GPG Key ID: 0F62D33977F021F7
31 changed files with 3413 additions and 2795 deletions

View File

@ -27,20 +27,20 @@
"@follow/shared": "workspace:*",
"@follow/utils": "workspace:*",
"@openpanel/web": "1.0.1",
"@sentry/electron": "6.6.0",
"@sentry/electron": "6.8.0",
"builder-util-runtime": "9.3.1",
"cookie-es": "2.0.0",
"electron-context-menu": "4.0.5",
"electron-log": "5.4.0",
"electron-log": "5.4.1",
"electron-squirrel-startup": "1.0.1",
"electron-store": "10.0.1",
"electron-store": "10.1.0",
"electron-updater": "6.6.2",
"es-toolkit": "1.38.0",
"es-toolkit": "1.39.3",
"fast-folder-size": "2.4.0",
"font-list": "1.5.1",
"i18next": "25.2.1",
"js-yaml": "4.1.0",
"linkedom": "0.18.10",
"linkedom": "0.18.11",
"lowdb": "7.0.1",
"msedge-tts": "2.0.0",
"node-machine-id": "1.1.12",
@ -53,10 +53,10 @@
"@follow/models": "workspace:*",
"@follow/types": "workspace:*",
"@types/js-yaml": "4.0.9",
"@types/node": "22.15.23",
"@types/node": "24.0.3",
"electron": "35.1.5",
"electron-devtools-installer": "4.0.0",
"hono": "4.7.10",
"hono": "4.8.1",
"typescript": "catalog:"
}
}

View File

@ -22,8 +22,8 @@
"@follow/tracker": "workspace:*",
"@fontsource/sn-pro": "5.2.5",
"@headlessui/react": "2.2.4",
"@hookform/resolvers": "4.1.3",
"@lottiefiles/dotlottie-react": "0.13.5",
"@hookform/resolvers": "5.1.1",
"@lottiefiles/dotlottie-react": "0.14.1",
"@openpanel/web": "1.0.1",
"@radix-ui/react-avatar": "1.1.10",
"@radix-ui/react-context-menu": "2.2.15",
@ -34,13 +34,13 @@
"@radix-ui/react-popover": "1.1.14",
"@radix-ui/react-slider": "1.3.5",
"@radix-ui/react-slot": "1.2.3",
"@sentry/react": "9.22.0",
"@shikijs/transformers": "3.4.2",
"@tanstack/query-sync-storage-persister": "5.77.2",
"@tanstack/react-query": "5.77.2",
"@tanstack/react-query-devtools": "5.77.2",
"@tanstack/react-query-persist-client": "5.77.2",
"@tanstack/react-virtual": "3.13.9",
"@sentry/react": "9.30.0",
"@shikijs/transformers": "3.7.0",
"@tanstack/query-sync-storage-persister": "5.80.10",
"@tanstack/react-query": "5.80.10",
"@tanstack/react-query-devtools": "5.80.10",
"@tanstack/react-query-persist-client": "5.80.10",
"@tanstack/react-virtual": "3.13.10",
"@use-gesture/react": "10.3.1",
"@welldone-software/why-did-you-render": "10.0.1",
"@yornaath/batshit": "0.10.1",
@ -51,15 +51,15 @@
"dnum": "2.15.0",
"embla-carousel-react": "8.6.0",
"embla-carousel-wheel-gestures": "8.0.2",
"es-toolkit": "1.38.0",
"firebase": "11.8.1",
"foxact": "0.2.45",
"es-toolkit": "1.39.3",
"firebase": "11.9.1",
"foxact": "0.2.49",
"franc-min": "6.2.0",
"fuse.js": "7.1.0",
"hast-util-to-jsx-runtime": "2.3.6",
"hast-util-to-mdast": "10.1.2",
"i18next": "25.2.1",
"i18next-browser-languagedetector": "8.1.0",
"i18next-browser-languagedetector": "8.2.0",
"idb-keyval": "6.2.2",
"immer": "10.1.1",
"jotai": "2.12.5",
@ -67,34 +67,34 @@
"masonic": "4.1.0",
"mdast-util-gfm-table": "2.0.0",
"mdast-util-to-markdown": "2.1.2",
"motion": "12.15.0",
"motion": "12.18.1",
"nanoid": "5.1.5",
"ofetch": "1.4.1",
"plain-shiki": "0.2.0",
"plain-shiki": "0.3.0",
"re-resizable": "6.11.2",
"react-blurhash": "0.3.0",
"react-fast-marquee": "1.6.5",
"react-hook-form": "7.56.4",
"react-hook-form": "7.58.1",
"react-hotkeys-hook": "5.1.0",
"react-i18next": "15.5.2",
"react-i18next": "15.5.3",
"react-intersection-observer": "9.16.0",
"react-ios-pwa-prompt": "2.0.6",
"react-qr-code": "2.0.15",
"react-qr-code": "2.0.16",
"react-resizable-layout": "npm:@innei/react-resizable-layout@0.7.3-fork.1",
"react-router": "7.6.1",
"react-router": "7.6.2",
"react-selecto": "1.26.3",
"react-shadow": "20.6.0",
"react-zoom-pan-pinch": "3.7.0",
"shiki": "3.4.2",
"sonner": "2.0.3",
"shiki": "3.7.0",
"sonner": "2.0.5",
"tinykeys": "3.0.0",
"title-case": "4.3.2",
"tldts": "7.0.7",
"tldts": "7.0.9",
"ufo": "1.6.1",
"use-context-selector": "2.0.0",
"use-sync-external-store": "1.5.0",
"usehooks-ts": "3.1.1",
"zod": "3.25.32",
"zod": "3.25.67",
"zustand": "5.0.5"
},
"devDependencies": {
@ -106,10 +106,10 @@
"@follow/models": "workspace:*",
"@follow/types": "workspace:*",
"@follow/utils": "workspace:*",
"@types/node": "22.15.23",
"@types/node": "24.0.3",
"@vite-pwa/assets-generator": "1.0.0",
"fake-indexeddb": "6.0.1",
"happy-dom": "17.5.6",
"happy-dom": "18.0.1",
"react-scan": "0.3.4",
"typescript": "catalog:"
}

View File

@ -1,11 +1,11 @@
import { Spring } from "@follow/components/constants/spring.js"
import type { MotionProps, Target } from "motion/react"
import type { MotionProps, TargetAndTransition } from "motion/react"
const enterStyle: Target = {
const enterStyle: TargetAndTransition = {
scale: 1,
opacity: 1,
}
const initialStyle: Target = {
const initialStyle: TargetAndTransition = {
scale: 0.96,
opacity: 0,
}

View File

@ -1,3 +1,4 @@
import { Spring } from "@follow/components/constants/spring.js"
import { nextFrame, stopPropagation } from "@follow/utils/dom"
import { cn } from "@follow/utils/utils"
import { m, useAnimationControls } from "motion/react"
@ -85,12 +86,7 @@ export const DrawerModalLayout: FC<PropsWithChildren> = ({ children }) => {
initial="initial"
animate={controller}
variants={modalVariant}
transition={{
type: "spring",
mass: 0.4,
tension: 100,
friction: 1,
}}
transition={Spring.presets.snappy}
onAnimationComplete={(definition) => {
if (definition === "exit") {
dismiss()
@ -117,12 +113,7 @@ export const ScaleModal: ModalTemplateType = (props) => {
<div className={"center container h-full"} onPointerDown={dismiss} onClick={stopPropagation}>
<m.div
onPointerDown={stopPropagation}
transition={{
type: "spring",
mass: 0.4,
tension: 100,
friction: 1,
}}
transition={Spring.presets.snappy}
initial={{ transform: "scale(0)", opacity: 0 }}
animate={{ transform: "scale(1)", opacity: 1 }}
exit={{ transform: "scale(0.6)", opacity: 0 }}

View File

@ -1,14 +1,14 @@
import { Spring } from "@follow/components/constants/spring.js"
import { cn } from "@follow/utils/utils"
import type { Target, Transition } from "motion/react"
import type { TargetAndTransition, Transition } from "motion/react"
import { AnimatePresence, m } from "motion/react"
import * as React from "react"
import { cloneElement, useEffect, useState } from "react"
type TransitionType = {
initial: Target | boolean
animate: Target
exit: Target
initial: TargetAndTransition | boolean
animate: TargetAndTransition
exit: TargetAndTransition
}
type IconTransitionProps = {
@ -93,9 +93,9 @@ const Presets = {
export const IconTransition = (
props: React.PropsWithChildren<{
animatedKey: string
initial?: Target
animate?: Target
exit?: Target
initial?: TargetAndTransition
animate?: TargetAndTransition
exit?: TargetAndTransition
transition?: Transition
preset?: "fade"

View File

@ -412,12 +412,7 @@ const EntryToastPreview = ({ entryId }: { entryId: string }) => {
onPointerDownCapture={stopPropagation}
variants={variants}
onWheel={stopPropagation}
transition={{
type: "spring",
mass: 0.4,
tension: 120,
friction: 1.4,
}}
transition={Spring.presets.snappy}
exit="exit"
layout="size"
className={cn(

View File

@ -61,12 +61,12 @@ export const MobileFloatBar = ({
const computedStyle = getComputedStyle(document.documentElement)
const safeAreaBottom = computedStyle.getPropertyValue("--sab")
animateController.start({
translateY: `calc(100% + 40px + ${safeAreaBottom})`,
y: `calc(100% + 40px + ${safeAreaBottom})`,
transition: { type: "tween", duration: 0.1 },
})
} else {
animateController.start({
translateY: 0,
y: 0,
})
}
}, [isScrollDown, animateController])

View File

@ -1,7 +1,7 @@
import { EllipsisHorizontalTextWithTooltip } from "@follow/components/ui/typography/EllipsisWithTooltip.js"
import { useEntry } from "@follow/store/entry/hooks"
import { cn } from "@follow/utils/utils"
import type { Target, TargetAndTransition } from "motion/react"
import type { TargetAndTransition } from "motion/react"
import { m } from "motion/react"
import { useIsZenMode } from "~/atoms/settings/ui"
@ -36,7 +36,7 @@ const Timeline = ({ entryId }: { entryId: string }) => {
)
}
const initialButton: Target = {
const initialButton: TargetAndTransition = {
opacity: 0.0001,
}
const animateButton: TargetAndTransition = {

View File

@ -1,3 +1,4 @@
import { Spring } from "@follow/components/constants/spring.js"
import { FollowIcon } from "@follow/components/icons/follow.jsx"
import { Avatar, AvatarFallback, AvatarImage } from "@follow/components/ui/avatar/index.jsx"
import { ActionButton, Button } from "@follow/components/ui/button/index.js"
@ -193,12 +194,7 @@ export const UserProfileModalContent: FC<SubscriptionModalContentProps> = ({ use
initial="initial"
animate={controller}
variants={modalVariant}
transition={{
type: "spring",
mass: 0.4,
tension: 100,
friction: 1,
}}
transition={Spring.presets.snappy}
exit="exit"
layout="size"
className={cn(

View File

@ -38,15 +38,15 @@
"cookie-es": "2.0.0"
},
"devDependencies": {
"@clack/prompts": "0.10.1",
"@electron-forge/cli": "7.8.0",
"@electron-forge/maker-appx": "7.8.0",
"@electron-forge/maker-dmg": "7.8.0",
"@electron-forge/maker-pkg": "7.8.0",
"@electron-forge/maker-squirrel": "7.8.0",
"@electron-forge/maker-zip": "7.8.0",
"@electron-forge/plugin-fuses": "7.8.0",
"@electron-forge/publisher-github": "7.8.0",
"@clack/prompts": "0.11.0",
"@electron-forge/cli": "7.8.1",
"@electron-forge/maker-appx": "7.8.1",
"@electron-forge/maker-dmg": "7.8.1",
"@electron-forge/maker-pkg": "7.8.1",
"@electron-forge/maker-squirrel": "7.8.1",
"@electron-forge/maker-zip": "7.8.1",
"@electron-forge/plugin-fuses": "7.8.1",
"@electron-forge/publisher-github": "7.8.1",
"@electron-toolkit/tsconfig": "1.0.1",
"@follow-app/vite-plugin-route-builder": "workspace:*",
"@follow/components": "workspace:*",
@ -62,22 +62,22 @@
"@types/html-minifier-terser": "7.0.2",
"@types/js-yaml": "4.0.9",
"@vitejs/plugin-legacy": "6.1.1",
"@vitejs/plugin-react": "4.5.0",
"@vitejs/plugin-react": "4.5.2",
"async-es": "3.2.6",
"autoprefixer": "10.4.21",
"bufferutil": "4.0.9",
"code-inspector-plugin": "0.20.11",
"code-inspector-plugin": "0.20.12",
"cssnano": "7.0.7",
"dotenv": "16.5.0",
"drizzle-orm": "0.43.1",
"drizzle-orm": "0.44.2",
"electron": "35.1.5",
"electron-devtools-installer": "4.0.0",
"electron-packager-languages": "0.6.0",
"electron-vite": "3.1.0",
"es-toolkit": "1.38.0",
"es-toolkit": "1.39.3",
"fake-indexeddb": "6.0.1",
"happy-dom": "17.5.6",
"hono": "4.7.10",
"happy-dom": "18.0.1",
"hono": "4.8.1",
"html-minifier-terser": "7.2.0",
"js-yaml": "4.1.0",
"nbump": "2.1.2",
@ -88,7 +88,7 @@
"tar": "7.4.3",
"unplugin-ast": "0.15.0",
"utf-8-validate": "6.0.5",
"vite-bundle-analyzer": "0.22.0",
"vite-bundle-analyzer": "0.22.3",
"vite-plugin-mkcert": "1.17.8",
"vite-plugin-pwa": "1.0.0",
"vite-tsconfig-paths": "5.1.4"

View File

@ -17,7 +17,7 @@
"web": "expo start --web"
},
"dependencies": {
"@better-auth/expo": "1.2.7",
"@better-auth/expo": "1.2.9",
"@expo/metro-runtime": "5.0.4",
"@expo/react-native-action-sheet": "4.1.1",
"@follow/components": "workspace:*",
@ -32,27 +32,27 @@
"@follow/types": "workspace:*",
"@follow/utils": "workspace:*",
"@gorhom/portal": "1.0.14",
"@hookform/resolvers": "4.1.3",
"@hookform/resolvers": "5.1.1",
"@openpanel/sdk": "1.0.0",
"@react-native-community/image-editor": "4.3.0",
"@react-native-firebase/analytics": "22.1.0",
"@react-native-firebase/app": "22.1.0",
"@react-native-firebase/app-check": "22.1.0",
"@react-native-firebase/crashlytics": "22.1.0",
"@react-native-firebase/messaging": "22.1.0",
"@react-native-firebase/analytics": "22.2.1",
"@react-native-firebase/app": "22.2.1",
"@react-native-firebase/app-check": "22.2.1",
"@react-native-firebase/crashlytics": "22.2.1",
"@react-native-firebase/messaging": "22.2.1",
"@react-native-masked-view/masked-view": "0.3.2",
"@react-native-menu/menu": "1.2.3",
"@react-native-picker/picker": "2.11.0",
"@shopify/flash-list": "1.7.6",
"@tanstack/query-sync-storage-persister": "5.77.2",
"@tanstack/react-query": "5.77.2",
"@tanstack/react-query-persist-client": "5.77.2",
"@tanstack/query-sync-storage-persister": "5.80.10",
"@tanstack/react-query": "5.80.10",
"@tanstack/react-query-persist-client": "5.80.10",
"@types/qrcode": "1.5.5",
"better-auth": "1.2.8",
"better-auth": "1.2.9",
"camelcase-keys": "9.1.3",
"dayjs": "1.11.13",
"dnum": "2.15.0",
"es-toolkit": "1.38.0",
"es-toolkit": "1.39.3",
"expo": "53.0.4",
"expo-apple-authentication": "7.2.4",
"expo-application": "6.1.4",
@ -86,7 +86,7 @@
"expo-video": "2.1.8",
"expo-web-browser": "14.1.6",
"franc-min": "6.2.0",
"hono": "4.7.10",
"hono": "4.8.1",
"i18next": "25.2.1",
"immer": "10.1.1",
"jotai": "2.12.5",
@ -97,9 +97,9 @@
"qrcode": "1.5.4",
"react": "19.0.0",
"react-dom": "19.0.0",
"react-error-boundary": "5.0.0",
"react-hook-form": "7.56.4",
"react-i18next": "15.5.2",
"react-error-boundary": "6.0.0",
"react-hook-form": "7.58.1",
"react-i18next": "15.5.3",
"react-native": "0.79.1",
"react-native-awesome-slider": "2.9.0",
"react-native-bouncy-checkbox": "4.1.2",
@ -122,23 +122,23 @@
"react-native-volume-manager": "2.0.8",
"react-native-web": "0.20.0",
"react-native-webview": "13.13.5",
"shiki": "3.4.2",
"shiki": "3.7.0",
"tailwindcss": "3.4.17",
"use-sync-external-store": "1.5.0",
"usehooks-ts": "3.1.1",
"zeego": "3.0.6",
"zod": "3.25.32",
"zod": "3.25.67",
"zustand": "5.0.5"
},
"devDependencies": {
"@babel/core": "7.27.3",
"@babel/core": "7.27.4",
"@follow/configs": "workspace:*",
"@types/react": "19.1.6",
"babel-plugin-inline-import": "3.0.0",
"eas-cli": "16.6.2",
"eas-cli": "16.12.0",
"expo-sqlite-devtools": "0.0.2",
"nbump": "2.1.2",
"postcss": "8.5.3",
"postcss": "8.5.6",
"sf-symbols-typescript": "2.1.0",
"typescript": "catalog:"
},

View File

@ -17,29 +17,29 @@
"@openpanel/web": "1.0.1",
"@radix-ui/react-avatar": "1.1.10",
"@resvg/resvg-js": "2.6.2",
"@sentry/react": "9.22.0",
"@tanstack/react-query": "5.77.2",
"@sentry/react": "9.30.0",
"@tanstack/react-query": "5.80.10",
"blurhash": "2.0.5",
"dayjs": "1.11.13",
"fastify": "5.3.3",
"fastify": "5.4.0",
"i18next": "25.2.1",
"jotai": "2.12.5",
"kose-font": "1.0.0",
"linkedom": "0.18.10",
"motion": "12.15.0",
"linkedom": "0.18.11",
"motion": "12.18.1",
"ofetch": "1.4.1",
"rc-modal-sheet": "1.0.0",
"react-blurhash": "0.3.0",
"react-hook-form": "7.56.4",
"react-hook-form": "7.58.1",
"react-hotkeys-hook": "5.1.0",
"react-i18next": "15.5.2",
"react-i18next": "15.5.3",
"react-photo-view": "1.2.7",
"react-router": "7.6.1",
"satori": "0.12.2",
"sonner": "2.0.3",
"react-router": "7.6.2",
"satori": "0.15.2",
"sonner": "2.0.5",
"use-context-selector": "2.0.0",
"xss": "1.0.15",
"zod": "3.25.32"
"zod": "3.25.67"
},
"devDependencies": {
"@follow-app/vite-plugin-route-builder": "workspace:*",
@ -54,20 +54,20 @@
"@follow/utils": "workspace:*",
"@types/html-minifier-terser": "7.0.2",
"chokidar": "4.0.3",
"code-inspector-plugin": "0.20.11",
"code-inspector-plugin": "0.20.12",
"daisyui": "4.12.24",
"dotenv-flow": "4.1.0",
"es-toolkit": "1.38.0",
"es-toolkit": "1.39.3",
"fast-glob": "3.3.3",
"foxact": "0.2.45",
"foxact": "0.2.49",
"html-minifier-terser": "7.2.0",
"lightningcss": "1.30.1",
"masonic": "4.1.0",
"nanoid": "5.1.5",
"path-to-regexp": "8.2.0",
"tailwindcss-uikit-colors": "0.6.2",
"tailwindcss-uikit-colors": "1.0.0-alpha.1",
"tsdown": "0.12.8",
"tsx": "4.19.4",
"tsx": "4.20.3",
"typescript": "catalog:",
"vite": "6.3.5"
}

View File

@ -108,6 +108,7 @@ export default defineConfig(
rules: {
"package-json-extend/ensure-package-version": "error",
"package-json-extend/no-duplicate-package": "error",
"package-json/require-type": 0,
},
},
{

View File

@ -33,22 +33,22 @@
"typecheck": "turbo typecheck"
},
"devDependencies": {
"@eslint/compat": "1.2.9",
"@tsslint/cli": "1.5.16",
"@tsslint/config": "1.5.16",
"@tsslint/eslint": "1.5.16",
"@types/node": "22.15.23",
"@eslint/compat": "1.3.0",
"@tsslint/cli": "1.5.17",
"@tsslint/config": "1.5.17",
"@tsslint/eslint": "1.5.17",
"@types/node": "24.0.3",
"@types/react": "19.1.6",
"@types/react-dom": "19.1.5",
"@vercel/node": "5.2.0",
"@vercel/node": "5.3.0",
"cross-env": "7.0.3",
"eslint": "9.27.0",
"eslint-config-hyoban": "4.0.3",
"eslint": "9.29.0",
"eslint-config-hyoban": "4.0.8",
"eslint-plugin-react-native": "5.0.0",
"fast-glob": "3.3.3",
"lint-staged": "16.1.0",
"lint-staged": "16.1.2",
"prettier": "3.5.3",
"prettier-plugin-tailwindcss": "0.6.11",
"prettier-plugin-tailwindcss": "0.6.13",
"raw-body": "3.0.0",
"react": "19.0.0",
"react-dom": "19.0.0",
@ -56,11 +56,11 @@
"simple-git-hooks": "2.13.0",
"svg-parser": "2.0.4",
"tar": "7.4.3",
"tsx": "4.19.4",
"turbo": "2.5.3",
"tsx": "4.20.3",
"turbo": "2.5.4",
"typescript": "catalog:",
"vite": "6.3.5",
"vitest": "3.1.4"
"vitest": "3.2.4"
},
"pnpm": {
"patchedDependencies": {

View File

@ -14,20 +14,20 @@
"@egoist/tailwindcss-icons": "1.9.0",
"@iconify-json/logos": "1.2.4",
"@iconify-json/mingcute": "1.2.3",
"@iconify-json/simple-icons": "1.2.36",
"@iconify-json/simple-icons": "1.2.39",
"@iconify/tools": "4.1.2",
"@iconify/utils": "2.3.0",
"@tailwindcss/container-queries": "0.1.1",
"@tailwindcss/typography": "0.5.16",
"es-toolkit": "1.38.0",
"es-toolkit": "1.39.3",
"tailwindcss-animate": "1.0.7",
"tailwindcss-motion": "1.1.0",
"tailwindcss-motion": "1.1.1",
"tailwindcss-multi": "0.4.6",
"tailwindcss-safe-area": "0.6.0",
"tailwindcss-uikit-colors": "0.6.2"
"tailwindcss-uikit-colors": "1.0.0-alpha.1"
},
"devDependencies": {
"postcss": "8.5.3",
"postcss": "8.5.6",
"postcss-js": "4.0.1",
"workspace-root": "3.3.1"
}

View File

@ -51,18 +51,18 @@
"@types/unist": "3.0.3",
"class-variance-authority": "0.7.1",
"dayjs": "1.11.13",
"foxact": "0.2.45",
"foxact": "0.2.49",
"hast-util-to-jsx-runtime": "2.3.6",
"hast-util-to-text": "4.0.2",
"input-otp": "1.4.2",
"jotai": "2.12.5",
"katex": "0.16.22",
"masonic": "4.1.0",
"motion": "12.15.0",
"motion": "12.18.1",
"react-blurhash": "0.3.0",
"react-fast-marquee": "1.6.5",
"react-hook-form": "7.56.4",
"react-i18next": "15.5.2",
"react-hook-form": "7.58.1",
"react-i18next": "15.5.3",
"rehype-infer-description-meta": "2.0.0",
"rehype-parse": "9.0.1",
"rehype-sanitize": "6.0.0",
@ -71,8 +71,8 @@
"remark-gfm": "4.0.1",
"remark-gh-alerts": "0.0.3",
"remark-rehype": "11.1.2",
"sonner": "2.0.3",
"tailwindcss-uikit-colors": "0.6.2",
"sonner": "2.0.5",
"tailwindcss-uikit-colors": "1.0.0-alpha.1",
"unified": "11.0.5",
"unist-util-visit": "5.0.0",
"unist-util-visit-parents": "5.1.3",

View File

@ -1,31 +1,31 @@
import type { Spring } from "motion/react"
import type { Transition } from "motion/react"
const reboundPreset: Spring = {
const reboundPreset: Transition = {
type: "spring",
bounce: 10,
stiffness: 140,
damping: 8,
}
const microDampingPreset: Spring = {
const microDampingPreset: Transition = {
type: "spring",
damping: 24,
}
const microReboundPreset: Spring = {
const microReboundPreset: Transition = {
type: "spring",
stiffness: 300,
damping: 20,
}
const softSpringPreset: Spring = {
const softSpringPreset: Transition = {
duration: 0.35,
type: "spring",
stiffness: 120,
damping: 20,
}
const softBouncePreset: Spring = {
const softBouncePreset: Transition = {
type: "spring",
damping: 10,
stiffness: 100,
@ -34,7 +34,7 @@ const softBouncePreset: Spring = {
/**
* A smooth spring with a predefined duration and no bounce.
*/
const smoothPreset: Spring = {
const smoothPreset: Transition = {
type: "spring",
duration: 0.4,
bounce: 0,
@ -43,7 +43,7 @@ const smoothPreset: Spring = {
/**
* A spring with a predefined duration and small amount of bounce that feels more snappy.
*/
const snappyPreset: Spring = {
const snappyPreset: Transition = {
type: "spring",
duration: 0.4,
bounce: 0.15,
@ -52,7 +52,7 @@ const snappyPreset: Spring = {
/**
* A spring with a predefined duration and higher amount of bounce.
*/
const bouncyPreset: Spring = {
const bouncyPreset: Transition = {
type: "spring",
duration: 0.4,
bounce: 0.3,
@ -76,7 +76,7 @@ class SpringStatic {
* @param duration The perceptual duration, which defines the pace of the spring.
* @param extraBounce How much additional bounce should be added to the base bounce of 0.
*/
smooth(duration = 0.4, extraBounce = 0): Spring {
smooth(duration = 0.4, extraBounce = 0): Transition {
return {
type: "spring",
duration,
@ -87,7 +87,7 @@ class SpringStatic {
/**
* A spring with a predefined duration and small amount of bounce that feels more snappy.
*/
snappy(duration = 0.4, extraBounce = 0): Spring {
snappy(duration = 0.4, extraBounce = 0): Transition {
return {
type: "spring",
duration,
@ -98,7 +98,7 @@ class SpringStatic {
/**
* A spring with a predefined duration and higher amount of bounce that can be tuned.
*/
bouncy(duration = 0.4, extraBounce = 0): Spring {
bouncy(duration = 0.4, extraBounce = 0): Transition {
return {
type: "spring",
duration,

View File

@ -26,8 +26,8 @@ const AvatarContainer = React.memo(({ children, zIndex, transition, translate }:
>
<motion.div
variants={{
initial: { translateY: 0 },
hover: { translateY: translate },
initial: { y: 0 },
hover: { y: translate },
}}
transition={transition}
>

View File

@ -1,3 +1,4 @@
import { Spring } from "@follow/components/constants/spring.js"
import { cn } from "@follow/utils/utils"
import * as TooltipPrimitive from "@radix-ui/react-tooltip"
import { m } from "motion/react"
@ -34,13 +35,7 @@ const TooltipContent = ({
<m.div
initial={{ opacity: 0.82, scale: 0.95 }}
animate={{ opacity: 1, scale: 1 }}
transition={{
type: "spring",
tension: 280,
friction: 60,
duration: 0.1,
}}
transition={Spring.presets.snappy}
>
{/* https://github.com/radix-ui/primitives/discussions/868 */}
<TooltipPrimitive.Arrow className="z-50 fill-white [clip-path:inset(0_-10px_-10px_-10px)] dark:fill-neutral-950 dark:drop-shadow-[0_0_1px_theme(colors.white/0.5)]" />

View File

@ -35,7 +35,7 @@
"@follow/constants": "workspace:*",
"@follow/models": "workspace:*",
"@follow/shared": "workspace:*",
"drizzle-orm": "0.43.1",
"drizzle-orm": "0.44.2",
"expo-sqlite": "15.2.9",
"sqlocal": "npm:@hyoban/sqlocal@0.14.1-fork.4"
},

View File

@ -15,7 +15,7 @@
"@follow/shared": "workspace:*",
"@follow/types": "workspace:*",
"@follow/utils": "workspace:*",
"foxact": "0.2.45",
"foxact": "0.2.49",
"jotai": "2.12.5",
"usehooks-ts": "3.1.1"
},

View File

@ -12,7 +12,7 @@
"typecheck": "tsc --noEmit"
},
"dependencies": {
"electron-log": "5.4.0"
"electron-log": "5.4.1"
},
"devDependencies": {
"@follow/configs": "workspace:*"

View File

@ -24,7 +24,7 @@
"@follow/shared": "workspace:*",
"@follow/types": "workspace:*",
"@follow/utils": "workspace:*",
"hono": "4.7.10"
"hono": "4.8.1"
},
"devDependencies": {
"@follow/configs": "workspace:*"

View File

@ -33,12 +33,12 @@
"dependencies": {
"@electron-toolkit/preload": "3.0.2",
"@electron-toolkit/tsconfig": "1.0.1",
"@hono/node-server": "1.14.3",
"@t3-oss/env-core": "0.13.6",
"better-auth": "1.2.8",
"drizzle-orm": "0.43.1",
"hono": "4.7.10",
"sonner": "2.0.3",
"zod": "3.25.32"
"@hono/node-server": "1.14.4",
"@t3-oss/env-core": "0.13.8",
"better-auth": "1.2.9",
"drizzle-orm": "0.44.2",
"hono": "4.8.1",
"sonner": "2.0.5",
"zod": "3.25.67"
}
}

View File

@ -116,8 +116,8 @@
"@follow/shared": "workspace:*",
"@follow/tracker": "workspace:*",
"@follow/utils": "workspace:*",
"@tanstack/react-query": "5.77.2",
"es-toolkit": "1.38.0",
"@tanstack/react-query": "5.80.10",
"es-toolkit": "1.39.3",
"immer": "10.1.1",
"zustand": "5.0.5"
}

View File

@ -4,10 +4,10 @@
"private": true,
"main": "./src/index.ts",
"dependencies": {
"posthog-js": "1.249.2"
"posthog-js": "1.255.0"
},
"devDependencies": {
"@follow/configs": "workspace:*",
"@react-native-firebase/analytics": "22.1.0"
"@react-native-firebase/analytics": "22.2.1"
}
}

View File

@ -36,12 +36,12 @@
"chardet": "2.1.0",
"clsx": "2.1.1",
"dompurify": "3.2.6",
"linkedom": "0.18.10",
"motion": "12.15.0",
"linkedom": "0.18.11",
"motion": "12.18.1",
"nanoid": "5.1.5",
"path-to-regexp": "8.2.0",
"tailwind-merge": "3.3.0",
"tldts": "7.0.7",
"tailwind-merge": "3.3.1",
"tldts": "7.0.9",
"uniqolor": "1.1.1"
},
"devDependencies": {

View File

@ -1,9 +1,9 @@
// @see https://github.com/Innei/sprightly/blob/2444dcdb789ca585337a4d241095640a524231db/src/lib/scroller.ts
import type { Spring } from "motion/react"
import type { Transition } from "motion/react"
import { animateValue } from "motion/react"
const spring: Spring = {
const spring: Transition = {
type: "spring",
stiffness: 1000,
damping: 250,

View File

@ -14,7 +14,7 @@
"@mozilla/readability": "0.6.0",
"chardet": "2.1.0",
"dompurify": "3.2.6",
"linkedom": "0.18.10"
"linkedom": "0.18.11"
},
"devDependencies": {
"@follow/configs": "workspace:*",

View File

@ -1,7 +1,7 @@
{
"name": "@follow-app/vite-plugin-route-builder",
"type": "module",
"version": "0.0.1",
"version": "0.1.1",
"exports": {
".": "./src/index.ts"
},
@ -16,20 +16,26 @@
"test:run": "vitest run"
},
"devDependencies": {
"@types/node": "22.15.23",
"es-toolkit": "1.38.0",
"@types/node": "24.0.3",
"es-toolkit": "1.39.3",
"fast-glob": "3.3.3",
"happy-dom": "17.5.6",
"react-router": "7.6.1",
"happy-dom": "18.0.1",
"react-router": "7.6.2",
"tsdown": "0.12.8",
"typescript": "catalog:",
"vite": "6.3.5",
"vite-tsconfig-paths": "5.1.4",
"vitest": "3.1.4"
"vitest": "3.2.4"
},
"publishConfig": {
"access": "public",
"main": "dist/index.js",
"types": "dist/index.d.ts"
"types": "dist/index.d.ts",
"exports": {
".": {
"types": "./dist/index.d.ts",
"import": "./dist/index.js"
}
}
}
}

File diff suppressed because it is too large Load Diff