diff --git a/.prettierrc.mjs b/.prettierrc.mjs index 6a48a4e79..61f7912ce 100644 --- a/.prettierrc.mjs +++ b/.prettierrc.mjs @@ -1,3 +1,4 @@ +/** @type {import("prettier").Config & import("prettier-plugin-tailwindcss").PluginOptions} */ export default { semi: false, singleQuote: false, @@ -6,4 +7,25 @@ export default { trailingComma: "all", objectWrap: "preserve", plugins: ["prettier-plugin-tailwindcss"], + tailwindConfig: "./apps/desktop/tailwind.config.ts", + overrides: [ + { + files: "apps/mobile/**/*.{css,js,jsx,ts,tsx}", + options: { + tailwindConfig: "./apps/mobile/tailwind.config.ts", + }, + }, + { + files: "apps/mobile/web-app/html-renderer/**/*.{css,js,jsx,ts,tsx}", + options: { + tailwindConfig: "./apps/mobile/web-app/html-renderer/tailwind.config.ts", + }, + }, + { + files: "apps/ssr/**/*.{css,html,js,jsx,ts,tsx}", + options: { + tailwindConfig: "./apps/ssr/tailwind.config.ts", + }, + }, + ], } diff --git a/apps/desktop/AGENTS.md b/apps/desktop/AGENTS.md index 67b689b6c..7a27276fb 100644 --- a/apps/desktop/AGENTS.md +++ b/apps/desktop/AGENTS.md @@ -173,7 +173,7 @@ For hover states on buttons or interactive areas within glass containers: }} > {/* Subtle shine effect */} -
+ ``` diff --git a/apps/desktop/layer/main/src/ipc/services/auth.ts b/apps/desktop/layer/main/src/ipc/services/auth.ts index 4e46d72bd..5426fa08b 100644 --- a/apps/desktop/layer/main/src/ipc/services/auth.ts +++ b/apps/desktop/layer/main/src/ipc/services/auth.ts @@ -22,7 +22,8 @@ export class AuthService extends IpcService { const apiURL = env.VITE_API_URL const url = new URL(apiURL) - const isSecure = url.protocol === "https:" || url.hostname === "localhost" || url.hostname === "127.0.0.1" + const isSecure = + url.protocol === "https:" || url.hostname === "localhost" || url.hostname === "127.0.0.1" const isLocalhost = url.hostname === "localhost" || url.hostname === "127.0.0.1" const cookieNames = [ BETTER_AUTH_COOKIE_NAME_SESSION_TOKEN, diff --git a/apps/desktop/layer/renderer/src/lib/api-client.ts b/apps/desktop/layer/renderer/src/lib/api-client.ts index 654002bbf..21d29d740 100644 --- a/apps/desktop/layer/renderer/src/lib/api-client.ts +++ b/apps/desktop/layer/renderer/src/lib/api-client.ts @@ -1,5 +1,5 @@ -import { env } from "@follow/shared/env.desktop" import { IN_ELECTRON } from "@follow/shared/constants" +import { env } from "@follow/shared/env.desktop" import { whoami } from "@follow/store/user/getters" import { userActions } from "@follow/store/user/store" import { createDesktopAPIHeaders } from "@follow/utils/headers" @@ -9,8 +9,7 @@ import PKG from "@pkg" import { NetworkStatus, setApiStatus } from "~/atoms/network" import { setLoginModalShow } from "~/atoms/user" -import { getAuthSessionToken } from "./client-session" -import { getClientId, getSessionId } from "./client-session" +import { getAuthSessionToken, getClientId, getSessionId } from "./client-session" export const followClient = new FollowClient({ credentials: "include", @@ -34,7 +33,7 @@ followClient.addRequestInterceptor(async (ctx) => { if (authSessionToken && !headers.has("Cookie") && !headers.has("cookie")) { headers.set( "Cookie", - `__Secure-better-auth.session_token=${authSessionToken}; better-auth.session_token=${authSessionToken}` + `__Secure-better-auth.session_token=${authSessionToken}; better-auth.session_token=${authSessionToken}`, ) } diff --git a/apps/desktop/layer/renderer/src/modules/auth/Form.tsx b/apps/desktop/layer/renderer/src/modules/auth/Form.tsx index 1427f06d0..96b0d7a9a 100644 --- a/apps/desktop/layer/renderer/src/modules/auth/Form.tsx +++ b/apps/desktop/layer/renderer/src/modules/auth/Form.tsx @@ -372,17 +372,20 @@ export function RegisterForm({ headers, }), ) - : await signUp.email({ - email: values.email, - password: values.password, - name: values.email.split("@")[0]!, - callbackURL: "/", - }, { - onError(context) { - toast.error(context.error.message) + : await signUp.email( + { + email: values.email, + password: values.password, + name: values.email.split("@")[0]!, + callbackURL: "/", }, - headers, - }) + { + onError(context) { + toast.error(context.error.message) + }, + headers, + }, + ) if (result?.error) { return result diff --git a/apps/ssr/client/pages/(login)/register.tsx b/apps/ssr/client/pages/(login)/register.tsx index e2c2085c3..f551befeb 100644 --- a/apps/ssr/client/pages/(login)/register.tsx +++ b/apps/ssr/client/pages/(login)/register.tsx @@ -69,27 +69,30 @@ function RegisterForm() { try { const recaptchaToken = await requestRecaptchaToken("ssr_register") - await signUp.email({ - email: values.email, - password: values.password, - name: values.email.split("@")[0]!, - callbackURL: "/", - }, { - onSuccess() { - tracker.register({ - type: "email", - }) - navigate("/login") + await signUp.email( + { + email: values.email, + password: values.password, + name: values.email.split("@")[0]!, + callbackURL: "/", }, - onError(context) { - toast.error(context.error.message) + { + onSuccess() { + tracker.register({ + type: "email", + }) + navigate("/login") + }, + onError(context) { + toast.error(context.error.message) + }, + headers: recaptchaToken + ? { + "x-token": `r3:${recaptchaToken}`, + } + : undefined, }, - headers: recaptchaToken - ? { - "x-token": `r3:${recaptchaToken}`, - } - : undefined, - }) + ) } finally { setIsSubmitting(false) } diff --git a/apps/ssr/tailwind.config.ts b/apps/ssr/tailwind.config.ts index b702de37e..0266b83a5 100644 --- a/apps/ssr/tailwind.config.ts +++ b/apps/ssr/tailwind.config.ts @@ -1,7 +1,7 @@ import { extendConfig } from "@follow/configs/tailwindcss/web" import daisyui from "daisyui" -import { withUIKit } from "tailwindcss-uikit-colors/macos" import type { Config } from "tailwindcss" +import { withUIKit } from "tailwindcss-uikit-colors/macos" /** @type {import('tailwindcss').Config} */ export default withUIKit( diff --git a/eslint.config.mjs b/eslint.config.mjs index 1c032ec94..b8f59ce91 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -37,6 +37,14 @@ export default defineConfig( }, rules: { "no-debug/no-debug-stack": "error", + "tailwindcss/classnames-order": "off", + "tailwindcss/enforces-negative-arbitrary-values": "off", + "tailwindcss/enforces-shorthand": "off", + "tailwindcss/migration-from-tailwind-2": "off", + "tailwindcss/no-arbitrary-value": "off", + "tailwindcss/no-contradicting-classname": "off", + "tailwindcss/no-custom-classname": "off", + "tailwindcss/no-unnecessary-arbitrary-value": "off", "@eslint-react/no-clone-element": 0, "@eslint-react/hooks-extra/no-direct-set-state-in-use-effect": 0, "@eslint-react/dom/no-flush-sync": 1, diff --git a/packages/internal/components/src/ui/avatar/index.tsx b/packages/internal/components/src/ui/avatar/index.tsx index 0842052e3..c881dde16 100644 --- a/packages/internal/components/src/ui/avatar/index.tsx +++ b/packages/internal/components/src/ui/avatar/index.tsx @@ -42,7 +42,7 @@ export const AvatarFallback = ({
{body}
diff --git a/packages/internal/components/src/ui/hover-card/index.tsx b/packages/internal/components/src/ui/hover-card/index.tsx
index 2412d619c..1a08eb919 100644
--- a/packages/internal/components/src/ui/hover-card/index.tsx
+++ b/packages/internal/components/src/ui/hover-card/index.tsx
@@ -23,8 +23,8 @@ const HoverCardContent = ({
align={align}
sideOffset={sideOffset}
className={cn(
- "bg-material-medium backdrop-blur-background border-border text-text z-[60] w-fit overflow-hidden rounded-md border shadow-lg",
- "motion-scale-in-95 motion-duration-200 text-body",
+ "z-[60] w-fit overflow-hidden rounded-md border border-border bg-material-medium text-text shadow-lg backdrop-blur-background",
+ "text-body motion-scale-in-95 motion-duration-200",
"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
className,
)}
diff --git a/packages/internal/components/src/ui/input/DateTimePicker.tsx b/packages/internal/components/src/ui/input/DateTimePicker.tsx
index 3db2bf4c5..fc2d021ea 100644
--- a/packages/internal/components/src/ui/input/DateTimePicker.tsx
+++ b/packages/internal/components/src/ui/input/DateTimePicker.tsx
@@ -235,7 +235,7 @@ export const DateTimePicker = memo