build: migrate workspace tooling to Oxc

Replace Turbo task orchestration with Bun workspace scripts and remove the Prettier configuration. Add Oxlint and Oxfmt project configuration, including Tailwind class sorting, generated-file exclusions, and unified check/fix commands. Apply the new formatter and resolve Hook dependency errors surfaced by Oxlint.
This commit is contained in:
Maofeng
2026-07-30 15:50:51 +08:00
parent 8cf3a1f03a
commit d36028d67b
47 changed files with 337 additions and 233 deletions
-1
View File
@@ -4,7 +4,6 @@
"type": "module",
"private": true,
"scripts": {
"format": "prettier --write \"**/*.{ts,tsx}\"",
"test": "vitest run",
"typecheck": "tsc --noEmit"
},
@@ -30,22 +30,29 @@ export const messages = {
"blocks.appearance.color.violet": "Violett",
"blocks.appearance.color.yellow": "Gelb",
"blocks.appearance.color.zinc": "Zink",
"blocks.appearance.command.description": "Design- und Layout-Einstellungen öffnen",
"blocks.appearance.compact.description": "Eine kompakte Breite für den Hauptinhalt verwenden",
"blocks.appearance.command.description":
"Design- und Layout-Einstellungen öffnen",
"blocks.appearance.compact.description":
"Eine kompakte Breite für den Hauptinhalt verwenden",
"blocks.appearance.compact.title": "Kompaktes Layout",
"blocks.appearance.description": "Design- und Layout-Einstellungen",
"blocks.appearance.mode.dark": "Dunkel",
"blocks.appearance.mode.dark.description": "Die Oberfläche verwendet immer das dunkle Design",
"blocks.appearance.mode.dark.description":
"Die Oberfläche verwendet immer das dunkle Design",
"blocks.appearance.mode.light": "Hell",
"blocks.appearance.mode.light.description": "Die Oberfläche verwendet immer das helle Design",
"blocks.appearance.mode.light.description":
"Die Oberfläche verwendet immer das helle Design",
"blocks.appearance.mode.system": "System",
"blocks.appearance.mode.system.description": "Das Design der Oberfläche folgt der Systemeinstellung",
"blocks.appearance.mode.system.description":
"Das Design der Oberfläche folgt der Systemeinstellung",
"blocks.appearance.mode.title": "Darstellungsmodus",
"blocks.appearance.primaryColor": "Primärfarbe",
"blocks.appearance.theme.dark": "Dunkles Design",
"blocks.appearance.theme.dark.description": "Dieses Design wird im dunklen Systemmodus verwendet",
"blocks.appearance.theme.dark.description":
"Dieses Design wird im dunklen Systemmodus verwendet",
"blocks.appearance.theme.light": "Helles Design",
"blocks.appearance.theme.light.description": "Dieses Design wird im hellen Systemmodus verwendet",
"blocks.appearance.theme.light.description":
"Dieses Design wird im hellen Systemmodus verwendet",
"blocks.appearance.title": "Darstellung",
"blocks.appearance.toggleTheme": "Design wechseln",
"blocks.appearance.toggleTheme.description":
@@ -30,23 +30,31 @@ export const messages = {
"blocks.appearance.color.violet": "Violeta",
"blocks.appearance.color.yellow": "Amarillo",
"blocks.appearance.color.zinc": "Zinc",
"blocks.appearance.command.description": "Abrir las preferencias de tema y diseño",
"blocks.appearance.compact.description": "Usar un ancho compacto para el contenido principal",
"blocks.appearance.command.description":
"Abrir las preferencias de tema y diseño",
"blocks.appearance.compact.description":
"Usar un ancho compacto para el contenido principal",
"blocks.appearance.compact.title": "Diseño compacto",
"blocks.appearance.description": "Preferencias de tema y diseño",
"blocks.appearance.mode.dark": "Oscuro",
"blocks.appearance.mode.dark.description": "La interfaz siempre usará el tema oscuro",
"blocks.appearance.mode.dark.description":
"La interfaz siempre usará el tema oscuro",
"blocks.appearance.mode.light": "Claro",
"blocks.appearance.mode.light.description": "La interfaz siempre usará el tema claro",
"blocks.appearance.mode.light.description":
"La interfaz siempre usará el tema claro",
"blocks.appearance.mode.system": "Sistema",
"blocks.appearance.mode.system.description": "El tema de la interfaz seguirá la apariencia del sistema",
"blocks.appearance.mode.system.description":
"El tema de la interfaz seguirá la apariencia del sistema",
"blocks.appearance.mode.title": "Modo de tema",
"blocks.appearance.primaryColor": "Color principal",
"blocks.appearance.theme.dark": "Tema oscuro",
"blocks.appearance.theme.dark.description": "Este tema se usa cuando el sistema está en modo oscuro",
"blocks.appearance.theme.dark.description":
"Este tema se usa cuando el sistema está en modo oscuro",
"blocks.appearance.theme.light": "Tema claro",
"blocks.appearance.theme.light.description": "Este tema se usa cuando el sistema está en modo claro",
"blocks.appearance.theme.light.description":
"Este tema se usa cuando el sistema está en modo claro",
"blocks.appearance.title": "Apariencia",
"blocks.appearance.toggleTheme": "Cambiar tema",
"blocks.appearance.toggleTheme.description": "Cambiar entre los temas claro y oscuro",
"blocks.appearance.toggleTheme.description":
"Cambiar entre los temas claro y oscuro",
} as const satisfies AppearanceMessageCatalog
@@ -30,23 +30,31 @@ export const messages = {
"blocks.appearance.color.violet": "Violet",
"blocks.appearance.color.yellow": "Jaune",
"blocks.appearance.color.zinc": "Zinc",
"blocks.appearance.command.description": "Ouvrir les préférences de thème et de mise en page",
"blocks.appearance.compact.description": "Utiliser une largeur compacte pour le contenu principal",
"blocks.appearance.command.description":
"Ouvrir les préférences de thème et de mise en page",
"blocks.appearance.compact.description":
"Utiliser une largeur compacte pour le contenu principal",
"blocks.appearance.compact.title": "Mise en page compacte",
"blocks.appearance.description": "Préférences de thème et de mise en page",
"blocks.appearance.mode.dark": "Sombre",
"blocks.appearance.mode.dark.description": "Linterface utilisera toujours le thème sombre",
"blocks.appearance.mode.dark.description":
"Linterface utilisera toujours le thème sombre",
"blocks.appearance.mode.light": "Clair",
"blocks.appearance.mode.light.description": "Linterface utilisera toujours le thème clair",
"blocks.appearance.mode.light.description":
"Linterface utilisera toujours le thème clair",
"blocks.appearance.mode.system": "Système",
"blocks.appearance.mode.system.description": "Le thème de linterface suivra lapparence du système",
"blocks.appearance.mode.system.description":
"Le thème de linterface suivra lapparence du système",
"blocks.appearance.mode.title": "Mode du thème",
"blocks.appearance.primaryColor": "Couleur principale",
"blocks.appearance.theme.dark": "Thème sombre",
"blocks.appearance.theme.dark.description": "Ce thème est utilisé lorsque le système est en mode sombre",
"blocks.appearance.theme.dark.description":
"Ce thème est utilisé lorsque le système est en mode sombre",
"blocks.appearance.theme.light": "Thème clair",
"blocks.appearance.theme.light.description": "Ce thème est utilisé lorsque le système est en mode clair",
"blocks.appearance.theme.light.description":
"Ce thème est utilisé lorsque le système est en mode clair",
"blocks.appearance.title": "Apparence",
"blocks.appearance.toggleTheme": "Changer de thème",
"blocks.appearance.toggleTheme.description": "Basculer entre les thèmes clair et sombre",
"blocks.appearance.toggleTheme.description":
"Basculer entre les thèmes clair et sombre",
} as const satisfies AppearanceMessageCatalog
@@ -31,7 +31,8 @@ export const messages = {
"blocks.appearance.color.yellow": "イエロー",
"blocks.appearance.color.zinc": "ジンク",
"blocks.appearance.command.description": "テーマとレイアウト設定を開く",
"blocks.appearance.compact.description": "メインページのコンテンツをコンパクトな幅で表示します",
"blocks.appearance.compact.description":
"メインページのコンテンツをコンパクトな幅で表示します",
"blocks.appearance.compact.title": "コンパクトレイアウト",
"blocks.appearance.description": "テーマとレイアウトの設定",
"blocks.appearance.mode.dark": "ダーク",
@@ -39,14 +40,18 @@ export const messages = {
"blocks.appearance.mode.light": "ライト",
"blocks.appearance.mode.light.description": "常にライトテーマを使用します",
"blocks.appearance.mode.system": "システム",
"blocks.appearance.mode.system.description": "インターフェースのテーマをシステムの外観に合わせます",
"blocks.appearance.mode.system.description":
"インターフェースのテーマをシステムの外観に合わせます",
"blocks.appearance.mode.title": "テーマモード",
"blocks.appearance.primaryColor": "プライマリカラー",
"blocks.appearance.theme.dark": "ダークテーマ",
"blocks.appearance.theme.dark.description": "システムがダークモードのときに使用するテーマです",
"blocks.appearance.theme.dark.description":
"システムがダークモードのときに使用するテーマです",
"blocks.appearance.theme.light": "ライトテーマ",
"blocks.appearance.theme.light.description": "システムがライトモードのときに使用するテーマです",
"blocks.appearance.theme.light.description":
"システムがライトモードのときに使用するテーマです",
"blocks.appearance.title": "外観",
"blocks.appearance.toggleTheme": "テーマを切り替える",
"blocks.appearance.toggleTheme.description": "ライトテーマとダークテーマを切り替えます",
"blocks.appearance.toggleTheme.description":
"ライトテーマとダークテーマを切り替えます",
} as const satisfies AppearanceMessageCatalog
@@ -31,22 +31,29 @@ export const messages = {
"blocks.appearance.color.yellow": "노란색",
"blocks.appearance.color.zinc": "아연색",
"blocks.appearance.command.description": "테마 및 레이아웃 환경설정 열기",
"blocks.appearance.compact.description": "기본 페이지 콘텐츠에 좁은 너비를 사용합니다",
"blocks.appearance.compact.description":
"기본 페이지 콘텐츠에 좁은 너비를 사용합니다",
"blocks.appearance.compact.title": "컴팩트 레이아웃",
"blocks.appearance.description": "테마 및 레이아웃 환경설정",
"blocks.appearance.mode.dark": "어둡게",
"blocks.appearance.mode.dark.description": "인터페이스에서 항상 어두운 테마를 사용합니다",
"blocks.appearance.mode.dark.description":
"인터페이스에서 항상 어두운 테마를 사용합니다",
"blocks.appearance.mode.light": "밝게",
"blocks.appearance.mode.light.description": "인터페이스에서 항상 밝은 테마를 사용합니다",
"blocks.appearance.mode.light.description":
"인터페이스에서 항상 밝은 테마를 사용합니다",
"blocks.appearance.mode.system": "시스템",
"blocks.appearance.mode.system.description": "인터페이스 테마가 시스템 화면 모드를 따릅니다",
"blocks.appearance.mode.system.description":
"인터페이스 테마가 시스템 화면 모드를 따릅니다",
"blocks.appearance.mode.title": "테마 모드",
"blocks.appearance.primaryColor": "주요 색상",
"blocks.appearance.theme.dark": "어두운 테마",
"blocks.appearance.theme.dark.description": "시스템이 어두운 모드일 때 사용하는 테마입니다",
"blocks.appearance.theme.dark.description":
"시스템이 어두운 모드일 때 사용하는 테마입니다",
"blocks.appearance.theme.light": "밝은 테마",
"blocks.appearance.theme.light.description": "시스템이 밝은 모드일 때 사용하는 테마입니다",
"blocks.appearance.theme.light.description":
"시스템이 밝은 모드일 때 사용하는 테마입니다",
"blocks.appearance.title": "화면 모양",
"blocks.appearance.toggleTheme": "테마 전환",
"blocks.appearance.toggleTheme.description": "밝은 테마와 어두운 테마 사이를 전환합니다",
"blocks.appearance.toggleTheme.description":
"밝은 테마와 어두운 테마 사이를 전환합니다",
} as const satisfies AppearanceMessageCatalog
@@ -43,9 +43,11 @@ export const messages = {
"blocks.appearance.mode.title": "主题模式",
"blocks.appearance.primaryColor": "主要颜色",
"blocks.appearance.theme.dark": "深色主题",
"blocks.appearance.theme.dark.description": "当系统设置为深色模式时,将使用此主题",
"blocks.appearance.theme.dark.description":
"当系统设置为深色模式时,将使用此主题",
"blocks.appearance.theme.light": "浅色主题",
"blocks.appearance.theme.light.description": "当系统设置为浅色模式时,将使用此主题",
"blocks.appearance.theme.light.description":
"当系统设置为浅色模式时,将使用此主题",
"blocks.appearance.title": "界面外观",
"blocks.appearance.toggleTheme": "切换主题",
"blocks.appearance.toggleTheme.description": "在浅色与深色主题之间切换",
@@ -1,5 +1,11 @@
export type BaseColor =
"neutral" | "stone" | "zinc" | "mauve" | "olive" | "mist" | "taupe"
| "neutral"
| "stone"
| "zinc"
| "mauve"
| "olive"
| "mist"
| "taupe"
export type AccentColor =
| "amber"
@@ -131,13 +131,14 @@ export function UiStateProvider({
storeRef.current.getSnapshot,
storeRef.current.getServerSnapshot
)
const themeMode = state["theme-mode"]
React.useLayoutEffect(() => {
applyUiState(state)
}, [state])
React.useEffect(() => {
if (state["theme-mode"] !== "system") return
if (themeMode !== "system") return
const mediaQuery = window.matchMedia(systemThemeQuery)
const applySystemTheme = () => {
@@ -147,7 +148,7 @@ export function UiStateProvider({
mediaQuery.addEventListener("change", applySystemTheme)
return () => mediaQuery.removeEventListener("change", applySystemTheme)
}, [state["theme-mode"]])
}, [themeMode])
const contextValue = React.useMemo(
() => ({
@@ -25,7 +25,7 @@ export function SidebarStateProvider({
const contextValue = React.useMemo(
() => ({ isCollapsed, setCollapsed }),
[isCollapsed]
[isCollapsed, setCollapsed]
)
return (
@@ -22,7 +22,9 @@ export interface NavigationButtonProps extends Omit<
layout?: "inline" | "stacked" | "responsive"
className?: string | (() => string | undefined) | undefined
style?:
React.CSSProperties | (() => React.CSSProperties | undefined) | undefined
| React.CSSProperties
| (() => React.CSSProperties | undefined)
| undefined
trailing?: React.ReactNode | (() => React.ReactNode) | undefined
}
@@ -1,7 +1,11 @@
import type { IconData } from "../../components/icon"
export type NotificationTone =
"destructive" | "info" | "neutral" | "success" | "warning"
| "destructive"
| "info"
| "neutral"
| "success"
| "warning"
export interface NotificationAvatarMedia {
alt?: string