diff --git a/src/app/(auth)/users/[username]/page.tsx b/src/app/(auth)/users/[username]/page.tsx index 105f33a..1feed6c 100644 --- a/src/app/(auth)/users/[username]/page.tsx +++ b/src/app/(auth)/users/[username]/page.tsx @@ -1,7 +1,7 @@ import Image from "next/image"; import Link from "next/link"; import { PageLayout } from "@/components/ui/PageLayout"; -import { LightButton, LinkButton } from "@/design-system/base/button"; +import { LightButton, LinkButton } from "@/design-system/base/button/button"; import { actionGetUserProfileByUsername } from "@/modules/auth/auth-action"; import { repoGetFoldersWithTotalPairsByUserId } from "@/modules/folder/folder-repository"; import { notFound } from "next/navigation"; diff --git a/src/app/(features)/alphabet/AlphabetCard.tsx b/src/app/(features)/alphabet/AlphabetCard.tsx index 0d5435d..bd04a64 100644 --- a/src/app/(features)/alphabet/AlphabetCard.tsx +++ b/src/app/(features)/alphabet/AlphabetCard.tsx @@ -3,11 +3,11 @@ import { useState, useEffect, useCallback } from "react"; import { useTranslations } from "next-intl"; import { Letter, SupportedAlphabets } from "@/lib/interfaces"; -import { IconClick, CircleToggleButton, CircleButton, PrimaryButton } from "@/design-system/base/button"; +import { IconClick, CircleToggleButton, CircleButton, PrimaryButton } from "@/design-system/base/button/button"; import { IMAGES } from "@/config/images"; import { ChevronLeft, ChevronRight } from "lucide-react"; import { PageLayout } from "@/components/ui/PageLayout"; -import { Card } from "@/design-system/base/card"; +import { Card } from "@/design-system/base/card/card"; interface AlphabetCardProps { alphabet: Letter[]; diff --git a/src/app/(features)/alphabet/MemoryCard.tsx b/src/app/(features)/alphabet/MemoryCard.tsx index faaaf04..05526f0 100644 --- a/src/app/(features)/alphabet/MemoryCard.tsx +++ b/src/app/(features)/alphabet/MemoryCard.tsx @@ -1,5 +1,5 @@ -import { LightButton } from "@/design-system/base/button"; -import { IconClick } from "@/design-system/base/button"; +import { LightButton } from "@/design-system/base/button/button"; +import { IconClick } from "@/design-system/base/button/button"; import { IMAGES } from "@/config/images"; import { Letter, SupportedAlphabets } from "@/lib/interfaces"; import { diff --git a/src/app/(features)/alphabet/page.tsx b/src/app/(features)/alphabet/page.tsx index c1031a0..95341ab 100644 --- a/src/app/(features)/alphabet/page.tsx +++ b/src/app/(features)/alphabet/page.tsx @@ -4,7 +4,7 @@ import { useState, useEffect } from "react"; import { useTranslations } from "next-intl"; import { Letter, SupportedAlphabets } from "@/lib/interfaces"; import { PageLayout } from "@/components/ui/PageLayout"; -import { LightButton } from "@/design-system/base/button"; +import { LightButton } from "@/design-system/base/button/button"; import { AlphabetCard } from "./AlphabetCard"; export default function Alphabet() { diff --git a/src/app/(features)/dictionary/SearchForm.tsx b/src/app/(features)/dictionary/SearchForm.tsx index 687b7a9..d90e1f8 100644 --- a/src/app/(features)/dictionary/SearchForm.tsx +++ b/src/app/(features)/dictionary/SearchForm.tsx @@ -1,7 +1,7 @@ "use client"; -import { LightButton } from "@/design-system/base/button"; -import { Input } from "@/design-system/base/input"; +import { LightButton } from "@/design-system/base/button/button"; +import { Input } from "@/design-system/base/input/input"; import { useTranslations } from "next-intl"; import { useState } from "react"; import { useRouter } from "next/navigation"; diff --git a/src/app/(features)/dictionary/SearchResult.client.tsx b/src/app/(features)/dictionary/SearchResult.client.tsx index 97609f2..9dba7a6 100644 --- a/src/app/(features)/dictionary/SearchResult.client.tsx +++ b/src/app/(features)/dictionary/SearchResult.client.tsx @@ -1,7 +1,7 @@ "use client"; import { Plus, RefreshCw } from "lucide-react"; -import { CircleButton, LightButton } from "@/design-system/base/button"; +import { CircleButton, LightButton } from "@/design-system/base/button/button"; import { toast } from "sonner"; import { actionCreatePair } from "@/modules/folder/folder-aciton"; import { TSharedItem } from "@/shared/dictionary-type"; diff --git a/src/app/(features)/memorize/FolderSelector.tsx b/src/app/(features)/memorize/FolderSelector.tsx index 91c1475..05fa429 100644 --- a/src/app/(features)/memorize/FolderSelector.tsx +++ b/src/app/(features)/memorize/FolderSelector.tsx @@ -6,7 +6,7 @@ import Link from "next/link"; import { Folder as Fd } from "lucide-react"; import { TSharedFolderWithTotalPairs } from "@/shared/folder-type"; import { PageLayout } from "@/components/ui/PageLayout"; -import { PrimaryButton } from "@/design-system/base/button"; +import { PrimaryButton } from "@/design-system/base/button/button"; interface FolderSelectorProps { folders: TSharedFolderWithTotalPairs[]; diff --git a/src/app/(features)/memorize/Memorize.tsx b/src/app/(features)/memorize/Memorize.tsx index 48846da..cb62e93 100644 --- a/src/app/(features)/memorize/Memorize.tsx +++ b/src/app/(features)/memorize/Memorize.tsx @@ -1,7 +1,7 @@ "use client"; import { useState } from "react"; -import { LinkButton, CircleToggleButton, LightButton } from "@/design-system/base/button"; +import { LinkButton, CircleToggleButton, LightButton } from "@/design-system/base/button/button"; import { useAudioPlayer } from "@/hooks/useAudioPlayer"; import { getTTSUrl, TTS_SUPPORTED_LANGUAGES } from "@/lib/bigmodel/tts"; import { useTranslations } from "next-intl"; diff --git a/src/app/(features)/srt-player/VideoPlayer/VideoPanel.tsx b/src/app/(features)/srt-player/VideoPlayer/VideoPanel.tsx index 26db463..a3aacc0 100644 --- a/src/app/(features)/srt-player/VideoPlayer/VideoPanel.tsx +++ b/src/app/(features)/srt-player/VideoPlayer/VideoPanel.tsx @@ -1,6 +1,6 @@ import { useState, useRef, forwardRef, useEffect, useCallback } from "react"; import { SubtitleDisplay } from "./SubtitleDisplay"; -import { LightButton } from "@/design-system/base/button"; +import { LightButton } from "@/design-system/base/button/button"; import { RangeInput } from "@/components/ui/RangeInput"; import { getIndex, parseSrt, getNearistIndex } from "../subtitle"; import { useTranslations } from "next-intl"; diff --git a/src/app/(features)/srt-player/components/atoms/FileInput.tsx b/src/app/(features)/srt-player/components/atoms/FileInput.tsx index 5145137..9c4c103 100644 --- a/src/app/(features)/srt-player/components/atoms/FileInput.tsx +++ b/src/app/(features)/srt-player/components/atoms/FileInput.tsx @@ -1,7 +1,7 @@ "use client"; import React, { useRef } from "react"; -import { LightButton } from "@/design-system/base/button"; +import { LightButton } from "@/design-system/base/button/button"; import { FileInputProps } from "../../types/controls"; interface FileInputComponentProps extends FileInputProps { diff --git a/src/app/(features)/srt-player/components/atoms/PlayButton.tsx b/src/app/(features)/srt-player/components/atoms/PlayButton.tsx index 32534ef..fa1f7fb 100644 --- a/src/app/(features)/srt-player/components/atoms/PlayButton.tsx +++ b/src/app/(features)/srt-player/components/atoms/PlayButton.tsx @@ -2,7 +2,7 @@ import React from "react"; import { useTranslations } from "next-intl"; -import { LightButton } from "@/design-system/base/button"; +import { LightButton } from "@/design-system/base/button/button"; import { PlayButtonProps } from "../../types/player"; export function PlayButton({ isPlaying, onToggle, disabled, className }: PlayButtonProps) { diff --git a/src/app/(features)/srt-player/components/atoms/SpeedControl.tsx b/src/app/(features)/srt-player/components/atoms/SpeedControl.tsx index d266e92..df86a45 100644 --- a/src/app/(features)/srt-player/components/atoms/SpeedControl.tsx +++ b/src/app/(features)/srt-player/components/atoms/SpeedControl.tsx @@ -1,7 +1,7 @@ "use client"; import React from "react"; -import { LightButton } from "@/design-system/base/button"; +import { LightButton } from "@/design-system/base/button/button"; import { SpeedControlProps } from "../../types/player"; import { getPlaybackRateOptions, getPlaybackRateLabel } from "../../utils/timeUtils"; diff --git a/src/app/(features)/srt-player/components/compounds/ControlBar.tsx b/src/app/(features)/srt-player/components/compounds/ControlBar.tsx index b24470c..d4b2ce5 100644 --- a/src/app/(features)/srt-player/components/compounds/ControlBar.tsx +++ b/src/app/(features)/srt-player/components/compounds/ControlBar.tsx @@ -3,7 +3,7 @@ import React from "react"; import { useTranslations } from "next-intl"; import { ChevronLeft, ChevronRight, RotateCcw, Pause } from "lucide-react"; -import { LightButton } from "@/design-system/base/button"; +import { LightButton } from "@/design-system/base/button/button"; import { ControlBarProps } from "../../types/controls"; import { PlayButton } from "../atoms/PlayButton"; import { SpeedControl } from "../atoms/SpeedControl"; diff --git a/src/app/(features)/srt-player/components/compounds/UploadZone.tsx b/src/app/(features)/srt-player/components/compounds/UploadZone.tsx index 450850e..f5d0173 100644 --- a/src/app/(features)/srt-player/components/compounds/UploadZone.tsx +++ b/src/app/(features)/srt-player/components/compounds/UploadZone.tsx @@ -4,7 +4,7 @@ import React from "react"; import { useTranslations } from "next-intl"; import { toast } from "sonner"; import { Video, FileText } from "lucide-react"; -import { LightButton } from "@/design-system/base/button"; +import { LightButton } from "@/design-system/base/button/button"; import { FileUploadProps } from "../../types/controls"; import { useFileUpload } from "../../hooks/useFileUpload"; diff --git a/src/app/(features)/srt-player/page.tsx b/src/app/(features)/srt-player/page.tsx index 8184861..95faf4f 100644 --- a/src/app/(features)/srt-player/page.tsx +++ b/src/app/(features)/srt-player/page.tsx @@ -15,7 +15,7 @@ import { SubtitleArea } from "./components/compounds/SubtitleArea"; import { ControlBar } from "./components/compounds/ControlBar"; import { UploadZone } from "./components/compounds/UploadZone"; import { SeekBar } from "./components/atoms/SeekBar"; -import { LightButton } from "@/design-system/base/button"; +import { LightButton } from "@/design-system/base/button/button"; export default function SrtPlayerPage() { const t = useTranslations("home"); diff --git a/src/app/(features)/text-speaker/SaveList.tsx b/src/app/(features)/text-speaker/SaveList.tsx index 98674f5..0e5e4fb 100644 --- a/src/app/(features)/text-speaker/SaveList.tsx +++ b/src/app/(features)/text-speaker/SaveList.tsx @@ -6,7 +6,7 @@ import { TextSpeakerArraySchema, TextSpeakerItemSchema, } from "@/lib/interfaces"; -import { IconClick } from "@/design-system/base/button"; +import { IconClick } from "@/design-system/base/button/button"; import { IMAGES } from "@/config/images"; import { useTranslations } from "next-intl"; import { getLocalStorageOperator } from "@/lib/browser/localStorageOperators"; diff --git a/src/app/(features)/text-speaker/page.tsx b/src/app/(features)/text-speaker/page.tsx index d683e47..7d2ade4 100644 --- a/src/app/(features)/text-speaker/page.tsx +++ b/src/app/(features)/text-speaker/page.tsx @@ -1,7 +1,7 @@ "use client"; -import { LightButton } from "@/design-system/base/button"; -import { IconClick } from "@/design-system/base/button"; +import { LightButton } from "@/design-system/base/button/button"; +import { IconClick } from "@/design-system/base/button/button"; import { IMAGES } from "@/config/images"; import { useAudioPlayer } from "@/hooks/useAudioPlayer"; import { diff --git a/src/app/(features)/translator/page.tsx b/src/app/(features)/translator/page.tsx index 2cf5f6b..098155d 100644 --- a/src/app/(features)/translator/page.tsx +++ b/src/app/(features)/translator/page.tsx @@ -1,6 +1,6 @@ "use client"; -import { LightButton, PrimaryButton, IconClick } from "@/design-system/base/button"; +import { LightButton, PrimaryButton, IconClick } from "@/design-system/base/button/button"; import { IMAGES } from "@/config/images"; import { useAudioPlayer } from "@/hooks/useAudioPlayer"; import { useTranslations } from "next-intl"; diff --git a/src/app/folders/FoldersClient.tsx b/src/app/folders/FoldersClient.tsx index 5d91837..96ebb4b 100644 --- a/src/app/folders/FoldersClient.tsx +++ b/src/app/folders/FoldersClient.tsx @@ -7,7 +7,7 @@ import { FolderPlus, Trash2, } from "lucide-react"; -import { CircleButton, LightButton } from "@/design-system/base/button"; +import { CircleButton, LightButton } from "@/design-system/base/button/button"; import { useEffect, useState } from "react"; import { useRouter } from "next/navigation"; import { useTranslations } from "next-intl"; diff --git a/src/app/folders/[folder_id]/AddTextPairModal.tsx b/src/app/folders/[folder_id]/AddTextPairModal.tsx index a76fe69..8a7d151 100644 --- a/src/app/folders/[folder_id]/AddTextPairModal.tsx +++ b/src/app/folders/[folder_id]/AddTextPairModal.tsx @@ -1,5 +1,5 @@ -import { LightButton } from "@/design-system/base/button"; -import { Input } from "@/design-system/base/input"; +import { LightButton } from "@/design-system/base/button/button"; +import { Input } from "@/design-system/base/input/input"; import { LocaleSelector } from "@/components/ui/LocaleSelector"; import { X } from "lucide-react"; import { useRef, useState } from "react"; diff --git a/src/app/folders/[folder_id]/InFolder.tsx b/src/app/folders/[folder_id]/InFolder.tsx index f13a3c2..c00e8f7 100644 --- a/src/app/folders/[folder_id]/InFolder.tsx +++ b/src/app/folders/[folder_id]/InFolder.tsx @@ -7,7 +7,7 @@ import { AddTextPairModal } from "./AddTextPairModal"; import { TextPairCard } from "./TextPairCard"; import { useTranslations } from "next-intl"; import { PageLayout } from "@/components/ui/PageLayout"; -import { PrimaryButton, CircleButton, LinkButton } from "@/design-system/base/button"; +import { PrimaryButton, CircleButton, LinkButton } from "@/design-system/base/button/button"; import { CardList } from "@/components/ui/CardList"; import { actionCreatePair, actionDeletePairById, actionGetPairsByFolderId } from "@/modules/folder/folder-aciton"; import { TSharedPair } from "@/shared/folder-type"; diff --git a/src/app/folders/[folder_id]/TextPairCard.tsx b/src/app/folders/[folder_id]/TextPairCard.tsx index 03f8a47..3eb5daa 100644 --- a/src/app/folders/[folder_id]/TextPairCard.tsx +++ b/src/app/folders/[folder_id]/TextPairCard.tsx @@ -1,6 +1,6 @@ import { Edit, Trash2 } from "lucide-react"; import { useState } from "react"; -import { CircleButton } from "@/design-system/base/button"; +import { CircleButton } from "@/design-system/base/button/button"; import { UpdateTextPairModal } from "./UpdateTextPairModal"; import { useTranslations } from "next-intl"; import { TSharedPair } from "@/shared/folder-type"; diff --git a/src/app/folders/[folder_id]/UpdateTextPairModal.tsx b/src/app/folders/[folder_id]/UpdateTextPairModal.tsx index cce3032..9ac6165 100644 --- a/src/app/folders/[folder_id]/UpdateTextPairModal.tsx +++ b/src/app/folders/[folder_id]/UpdateTextPairModal.tsx @@ -1,5 +1,5 @@ -import { LightButton } from "@/design-system/base/button"; -import { Input } from "@/design-system/base/input"; +import { LightButton } from "@/design-system/base/button/button"; +import { Input } from "@/design-system/base/input/input"; import { LocaleSelector } from "@/components/ui/LocaleSelector"; import { X } from "lucide-react"; import { useRef, useState } from "react"; diff --git a/src/components/layout/LanguageSettings.tsx b/src/components/layout/LanguageSettings.tsx index 90ff5a8..c1bdd1b 100644 --- a/src/components/layout/LanguageSettings.tsx +++ b/src/components/layout/LanguageSettings.tsx @@ -1,6 +1,6 @@ "use client"; -import { GhostLightButton } from "@/design-system/base/button"; +import { GhostLightButton } from "@/design-system/base/button/button"; import { useState } from "react"; import { Languages } from "lucide-react"; diff --git a/src/components/layout/Navbar.tsx b/src/components/layout/Navbar.tsx index 312f09d..3a77222 100644 --- a/src/components/layout/Navbar.tsx +++ b/src/components/layout/Navbar.tsx @@ -5,7 +5,7 @@ import { LanguageSettings } from "./LanguageSettings"; import { auth } from "@/auth"; import { headers } from "next/headers"; import { getTranslations } from "next-intl/server"; -import { GhostLightButton } from "@/design-system/base/button"; +import { GhostLightButton } from "@/design-system/base/button/button"; export async function Navbar() { const t = await getTranslations("navbar"); diff --git a/src/components/ui/CardList.tsx b/src/components/ui/CardList.tsx index 94b0e04..f660431 100644 --- a/src/components/ui/CardList.tsx +++ b/src/components/ui/CardList.tsx @@ -3,7 +3,7 @@ * * 使用 Design System 重写的卡片列表组件 */ -import { VStack } from "@/design-system/layout/stack"; +import { VStack } from "@/design-system/layout/stack/stack"; interface CardListProps { children: React.ReactNode; diff --git a/src/components/ui/Container.tsx b/src/components/ui/Container.tsx index 5f3a082..06bfc6e 100644 --- a/src/components/ui/Container.tsx +++ b/src/components/ui/Container.tsx @@ -3,8 +3,8 @@ * * 使用 Design System 重写的容器组件 */ -import { Container as DSContainer } from "@/design-system/layout/container"; -import { Card } from "@/design-system/base/card"; +import { Container as DSContainer } from "@/design-system/layout/container/container"; +import { Card } from "@/design-system/base/card/card"; interface ContainerProps { children?: React.ReactNode; diff --git a/src/components/ui/LocaleSelector.tsx b/src/components/ui/LocaleSelector.tsx index bea30b2..2c2c332 100644 --- a/src/components/ui/LocaleSelector.tsx +++ b/src/components/ui/LocaleSelector.tsx @@ -5,9 +5,9 @@ */ import { useTranslations } from "next-intl"; import { useState } from "react"; -import { Input } from "@/design-system/base/input"; -import { Select } from "@/design-system/base/select"; -import { VStack } from "@/design-system/layout/stack"; +import { Input } from "@/design-system/base/input/input"; +import { Select } from "@/design-system/base/select/select"; +import { VStack } from "@/design-system/layout/stack/stack"; const COMMON_LANGUAGES = [ { label: "chinese", value: "chinese" }, diff --git a/src/components/ui/PageHeader.tsx b/src/components/ui/PageHeader.tsx index 4b17e25..e634f53 100644 --- a/src/components/ui/PageHeader.tsx +++ b/src/components/ui/PageHeader.tsx @@ -3,7 +3,7 @@ * * 使用 Design System 重写的页面标题组件 */ -import { VStack } from "@/design-system/layout/stack"; +import { VStack } from "@/design-system/layout/stack/stack"; interface PageHeaderProps { title: string; diff --git a/src/components/ui/PageLayout.tsx b/src/components/ui/PageLayout.tsx index 850762f..1ba4605 100644 --- a/src/components/ui/PageLayout.tsx +++ b/src/components/ui/PageLayout.tsx @@ -3,8 +3,8 @@ * * 使用 Design System 重写的页面布局组件 */ -import { Card } from "@/design-system/base/card"; -import { Container } from "@/design-system/layout/container"; +import { Card } from "@/design-system/base/card/card"; +import { Container } from "@/design-system/layout/container/container"; type PageLayoutVariant = "centered-card" | "full-width" | "fullscreen"; diff --git a/src/components/ui/index.ts b/src/components/ui/index.ts index 24bee35..4126e3b 100644 --- a/src/components/ui/index.ts +++ b/src/components/ui/index.ts @@ -2,10 +2,10 @@ // 可以从 '@/components/ui' 导入所有组件 // Design System 组件(向后兼容) -export { Input, type InputVariant, type InputProps } from '@/design-system/base/input'; -export { Select, type SelectVariant, type SelectSize, type SelectProps } from '@/design-system/base/select'; -export { Textarea, type TextareaVariant, type TextareaProps } from '@/design-system/base/textarea'; -export { Card, type CardVariant, type CardPadding, type CardProps } from '@/design-system/base/card'; +export { Input, type InputVariant, type InputProps } from '@/design-system/base/input/input'; +export { Select, type SelectVariant, type SelectSize, type SelectProps } from '@/design-system/base/select/select'; +export { Textarea, type TextareaVariant, type TextareaProps } from '@/design-system/base/textarea/textarea'; +export { Card, type CardVariant, type CardPadding, type CardProps } from '@/design-system/base/card/card'; export { Button, PrimaryButton, @@ -18,7 +18,7 @@ export { type ButtonVariant, type ButtonSize, type ButtonProps -} from '@/design-system/base/button'; +} from '@/design-system/base/button/button'; // 业务特定组件 export { RangeInput } from './RangeInput'; diff --git a/src/design-system/README.md b/src/design-system/README.md index 30c06a8..83da483 100644 --- a/src/design-system/README.md +++ b/src/design-system/README.md @@ -47,16 +47,16 @@ pnpm add class-variance-authority clsx tailwind-merge ```tsx // 使用显式导入以获得更好的 tree-shaking -import { Button } from '@/design-system/base/button'; -import { Input } from '@/design-system/base/input'; -import { Card } from '@/design-system/base/card'; +import { Button } from '@/design-system/base/button/button'; +import { Input } from '@/design-system/base/input/input'; +import { Card } from '@/design-system/base/card/card'; ``` ### 使用组件 ```tsx -import { Button } from '@/design-system/base/button'; -import { Card } from '@/design-system/base/card'; +import { Button } from '@/design-system/base/button/button'; +import { Card } from '@/design-system/base/card/card'; export function MyComponent() { return ( @@ -127,7 +127,7 @@ export function MyComponent() { 按钮组件,支持多种变体和尺寸。 ```tsx -import { Button } from '@/design-system/base/button'; +import { Button } from '@/design-system/base/button/button';