feat: update --diff and --view

This commit is contained in:
shadcn
2026-03-02 16:15:48 +04:00
parent 57f9d875be
commit e79f6e74bb
9 changed files with 109 additions and 88 deletions

View File

@@ -78,8 +78,8 @@ Options:
-p, --path <path> the path to add the component to.
-s, --silent mute output. (default: false)
--dry-run preview changes without writing files. (default: false)
--diff <path> show diff for a file.
--view <path> show file contents.
--diff [path] show diff for a file.
--view [path] show file contents.
-h, --help display help for command
```

View File

@@ -1,8 +1,6 @@
// Auto-generated by scripts/build-icons.ts
export { ActivityIcon } from "@hugeicons/core-free-icons"
export { Add01Icon } from "@hugeicons/core-free-icons"
export { AddToListIcon } from "@hugeicons/core-free-icons"
export { AiCloud01Icon } from "@hugeicons/core-free-icons"
export { Alert02Icon } from "@hugeicons/core-free-icons"
export { AlertCircleIcon } from "@hugeicons/core-free-icons"
export { Analytics01Icon } from "@hugeicons/core-free-icons"
@@ -19,22 +17,15 @@ export { ArrowRight02Icon } from "@hugeicons/core-free-icons"
export { ArrowRightDoubleIcon } from "@hugeicons/core-free-icons"
export { ArrowRightIcon } from "@hugeicons/core-free-icons"
export { ArrowUp01Icon } from "@hugeicons/core-free-icons"
export { ArrowUp02Icon } from "@hugeicons/core-free-icons"
export { ArrowUpIcon } from "@hugeicons/core-free-icons"
export { ArrowUpRight01Icon } from "@hugeicons/core-free-icons"
export { ArrowUpRightIcon } from "@hugeicons/core-free-icons"
export { AttachmentIcon } from "@hugeicons/core-free-icons"
export { AudioWave01Icon } from "@hugeicons/core-free-icons"
export { BankIcon } from "@hugeicons/core-free-icons"
export { BluetoothIcon } from "@hugeicons/core-free-icons"
export { BookIcon } from "@hugeicons/core-free-icons"
export { BookOpen02Icon } from "@hugeicons/core-free-icons"
export { BookmarkIcon } from "@hugeicons/core-free-icons"
export { BotIcon } from "@hugeicons/core-free-icons"
export { BulbIcon } from "@hugeicons/core-free-icons"
export { CalculatorIcon } from "@hugeicons/core-free-icons"
export { Calendar01Icon } from "@hugeicons/core-free-icons"
export { CalendarAdd01Icon } from "@hugeicons/core-free-icons"
export { CalendarIcon } from "@hugeicons/core-free-icons"
export { Camera01Icon } from "@hugeicons/core-free-icons"
export { Cancel01Icon } from "@hugeicons/core-free-icons"
@@ -49,10 +40,8 @@ export { CheckmarkBadgeIcon } from "@hugeicons/core-free-icons"
export { CheckmarkCircle01Icon } from "@hugeicons/core-free-icons"
export { CheckmarkCircle02Icon } from "@hugeicons/core-free-icons"
export { CircleArrowLeft02Icon } from "@hugeicons/core-free-icons"
export { CircleIcon } from "@hugeicons/core-free-icons"
export { ClipboardIcon } from "@hugeicons/core-free-icons"
export { Clock03Icon } from "@hugeicons/core-free-icons"
export { ClockIcon } from "@hugeicons/core-free-icons"
export { CloudUploadIcon } from "@hugeicons/core-free-icons"
export { CodeIcon } from "@hugeicons/core-free-icons"
export { CommandIcon } from "@hugeicons/core-free-icons"
@@ -64,14 +53,12 @@ export { CopyIcon } from "@hugeicons/core-free-icons"
export { CreditCardIcon } from "@hugeicons/core-free-icons"
export { CropIcon } from "@hugeicons/core-free-icons"
export { CubeIcon } from "@hugeicons/core-free-icons"
export { Cursor01Icon } from "@hugeicons/core-free-icons"
export { CursorInWindowIcon } from "@hugeicons/core-free-icons"
export { DashboardSquare01Icon } from "@hugeicons/core-free-icons"
export { DashedLineCircleIcon } from "@hugeicons/core-free-icons"
export { Database01Icon } from "@hugeicons/core-free-icons"
export { Delete02Icon } from "@hugeicons/core-free-icons"
export { DeleteIcon } from "@hugeicons/core-free-icons"
export { DollarCircleIcon } from "@hugeicons/core-free-icons"
export { DownloadIcon } from "@hugeicons/core-free-icons"
export { DragDropVerticalIcon } from "@hugeicons/core-free-icons"
export { EditIcon } from "@hugeicons/core-free-icons"
@@ -87,8 +74,6 @@ export { Folder01Icon } from "@hugeicons/core-free-icons"
export { FolderAddIcon } from "@hugeicons/core-free-icons"
export { FolderIcon } from "@hugeicons/core-free-icons"
export { FolderOpenIcon } from "@hugeicons/core-free-icons"
export { GitBranchIcon } from "@hugeicons/core-free-icons"
export { GlobalIcon } from "@hugeicons/core-free-icons"
export { Globe02Icon } from "@hugeicons/core-free-icons"
export { GridIcon } from "@hugeicons/core-free-icons"
export { HelpCircleIcon } from "@hugeicons/core-free-icons"
@@ -108,10 +93,8 @@ export { LinkSquare02Icon } from "@hugeicons/core-free-icons"
export { Loading03Icon } from "@hugeicons/core-free-icons"
export { Logout01Icon } from "@hugeicons/core-free-icons"
export { LogoutIcon } from "@hugeicons/core-free-icons"
export { MagicWand05Icon } from "@hugeicons/core-free-icons"
export { Mail01Icon } from "@hugeicons/core-free-icons"
export { MailIcon } from "@hugeicons/core-free-icons"
export { MailValidation01Icon } from "@hugeicons/core-free-icons"
export { MapsIcon } from "@hugeicons/core-free-icons"
export { Menu01Icon } from "@hugeicons/core-free-icons"
export { Menu05Icon } from "@hugeicons/core-free-icons"
@@ -127,7 +110,6 @@ export { Notification02Icon } from "@hugeicons/core-free-icons"
export { Notification03Icon } from "@hugeicons/core-free-icons"
export { NotificationIcon } from "@hugeicons/core-free-icons"
export { PaintBoardIcon } from "@hugeicons/core-free-icons"
export { PenIcon } from "@hugeicons/core-free-icons"
export { PieChartIcon } from "@hugeicons/core-free-icons"
export { PlusSignCircleIcon } from "@hugeicons/core-free-icons"
export { PlusSignIcon } from "@hugeicons/core-free-icons"
@@ -141,7 +123,6 @@ export { Search01Icon } from "@hugeicons/core-free-icons"
export { SearchIcon } from "@hugeicons/core-free-icons"
export { SentIcon } from "@hugeicons/core-free-icons"
export { ServerStackIcon } from "@hugeicons/core-free-icons"
export { Settings01Icon } from "@hugeicons/core-free-icons"
export { Settings05Icon } from "@hugeicons/core-free-icons"
export { SettingsIcon } from "@hugeicons/core-free-icons"
export { Share01Icon } from "@hugeicons/core-free-icons"
@@ -149,7 +130,6 @@ export { Share03Icon } from "@hugeicons/core-free-icons"
export { ShareIcon } from "@hugeicons/core-free-icons"
export { ShieldIcon } from "@hugeicons/core-free-icons"
export { ShoppingBag01Icon } from "@hugeicons/core-free-icons"
export { ShoppingBasket01Icon } from "@hugeicons/core-free-icons"
export { ShoppingCart01Icon } from "@hugeicons/core-free-icons"
export { SidebarLeftIcon } from "@hugeicons/core-free-icons"
export { SmileIcon } from "@hugeicons/core-free-icons"
@@ -158,7 +138,6 @@ export { StarIcon } from "@hugeicons/core-free-icons"
export { StarOffIcon } from "@hugeicons/core-free-icons"
export { SunIcon } from "@hugeicons/core-free-icons"
export { TableIcon } from "@hugeicons/core-free-icons"
export { TagIcon } from "@hugeicons/core-free-icons"
export { TextBoldIcon } from "@hugeicons/core-free-icons"
export { TextCheckIcon } from "@hugeicons/core-free-icons"
export { TextItalicIcon } from "@hugeicons/core-free-icons"
@@ -167,7 +146,6 @@ export { Tick02Icon } from "@hugeicons/core-free-icons"
export { TradeUpIcon } from "@hugeicons/core-free-icons"
export { UndoIcon } from "@hugeicons/core-free-icons"
export { UnfoldMoreIcon } from "@hugeicons/core-free-icons"
export { Upload01Icon } from "@hugeicons/core-free-icons"
export { UserCircle02Icon } from "@hugeicons/core-free-icons"
export { UserGroupIcon } from "@hugeicons/core-free-icons"
export { UserIcon } from "@hugeicons/core-free-icons"

View File

@@ -24,7 +24,6 @@ export { BotIcon } from "lucide-react"
export { Building2Icon } from "lucide-react"
export { CalculatorIcon } from "lucide-react"
export { CalendarIcon } from "lucide-react"
export { CalendarPlusIcon } from "lucide-react"
export { CameraIcon } from "lucide-react"
export { CaptionsIcon } from "lucide-react"
export { ChartBarIcon } from "lucide-react"
@@ -42,15 +41,11 @@ export { ChevronsUpDownIcon } from "lucide-react"
export { CircleAlertIcon } from "lucide-react"
export { CircleCheckIcon } from "lucide-react"
export { CircleDashedIcon } from "lucide-react"
export { CircleDollarSignIcon } from "lucide-react"
export { CircleHelpIcon } from "lucide-react"
export { CircleIcon } from "lucide-react"
export { CirclePlusIcon } from "lucide-react"
export { CircleUserRoundIcon } from "lucide-react"
export { ClipboardPasteIcon } from "lucide-react"
export { Clock2Icon } from "lucide-react"
export { ClockIcon } from "lucide-react"
export { CloudCogIcon } from "lucide-react"
export { CodeIcon } from "lucide-react"
export { Columns3Icon } from "lucide-react"
export { CommandIcon } from "lucide-react"
@@ -77,7 +72,6 @@ export { FolderPlusIcon } from "lucide-react"
export { FolderSearchIcon } from "lucide-react"
export { FrameIcon } from "lucide-react"
export { GalleryVerticalEndIcon } from "lucide-react"
export { GitBranchIcon } from "lucide-react"
export { GlobeIcon } from "lucide-react"
export { GripVerticalIcon } from "lucide-react"
export { HeartIcon } from "lucide-react"
@@ -94,15 +88,12 @@ export { LayoutGridIcon } from "lucide-react"
export { LayoutIcon } from "lucide-react"
export { LifeBuoy } from "lucide-react"
export { LifeBuoyIcon } from "lucide-react"
export { LightbulbIcon } from "lucide-react"
export { LinkIcon } from "lucide-react"
export { ListFilterIcon } from "lucide-react"
export { ListIcon } from "lucide-react"
export { Loader2Icon } from "lucide-react"
export { LoaderIcon } from "lucide-react"
export { LockIcon } from "lucide-react"
export { LogOutIcon } from "lucide-react"
export { MailCheckIcon } from "lucide-react"
export { MailIcon } from "lucide-react"
export { MapIcon } from "lucide-react"
export { MaximizeIcon } from "lucide-react"
@@ -117,13 +108,10 @@ export { MonitorIcon } from "lucide-react"
export { MoonIcon } from "lucide-react"
export { MoreHorizontalIcon } from "lucide-react"
export { MoreVerticalIcon } from "lucide-react"
export { MousePointerIcon } from "lucide-react"
export { OctagonXIcon } from "lucide-react"
export { PaintbrushIcon } from "lucide-react"
export { PaletteIcon } from "lucide-react"
export { PanelLeftIcon } from "lucide-react"
export { PaperclipIcon } from "lucide-react"
export { PenToolIcon } from "lucide-react"
export { PencilIcon } from "lucide-react"
export { PieChartIcon } from "lucide-react"
export { PlusIcon } from "lucide-react"
@@ -132,7 +120,6 @@ export { RefreshCwIcon } from "lucide-react"
export { RotateCwIcon } from "lucide-react"
export { SaveIcon } from "lucide-react"
export { ScissorsIcon } from "lucide-react"
export { Search } from "lucide-react"
export { SearchIcon } from "lucide-react"
export { Send } from "lucide-react"
export { SendIcon } from "lucide-react"
@@ -149,7 +136,6 @@ export { StarIcon } from "lucide-react"
export { StarOffIcon } from "lucide-react"
export { SunIcon } from "lucide-react"
export { TableIcon } from "lucide-react"
export { TagIcon } from "lucide-react"
export { TerminalIcon } from "lucide-react"
export { TerminalSquareIcon } from "lucide-react"
export { Trash2Icon } from "lucide-react"
@@ -159,7 +145,6 @@ export { TrendingUpIcon } from "lucide-react"
export { TriangleAlertIcon } from "lucide-react"
export { UnderlineIcon } from "lucide-react"
export { UploadCloudIcon } from "lucide-react"
export { UploadIcon } from "lucide-react"
export { UserIcon } from "lucide-react"
export { UserRoundXIcon } from "lucide-react"
export { UsersIcon } from "lucide-react"
@@ -167,7 +152,6 @@ export { VideoIcon } from "lucide-react"
export { VolumeOffIcon } from "lucide-react"
export { VolumeX } from "lucide-react"
export { WalletIcon } from "lucide-react"
export { WandIcon } from "lucide-react"
export { XIcon } from "lucide-react"
export { ZapIcon } from "lucide-react"
export { ZoomInIcon } from "lucide-react"

View File

@@ -23,7 +23,6 @@ export { BookmarkIcon } from "@phosphor-icons/react"
export { CalculatorIcon } from "@phosphor-icons/react"
export { CalendarBlankIcon } from "@phosphor-icons/react"
export { CalendarIcon } from "@phosphor-icons/react"
export { CalendarPlusIcon } from "@phosphor-icons/react"
export { CameraIcon } from "@phosphor-icons/react"
export { CaretDoubleLeftIcon } from "@phosphor-icons/react"
export { CaretDoubleRightIcon } from "@phosphor-icons/react"
@@ -39,7 +38,6 @@ export { ChatCircleIcon } from "@phosphor-icons/react"
export { CheckCircleIcon } from "@phosphor-icons/react"
export { CheckIcon } from "@phosphor-icons/react"
export { CircleDashedIcon } from "@phosphor-icons/react"
export { CircleIcon } from "@phosphor-icons/react"
export { ClipboardIcon } from "@phosphor-icons/react"
export { ClockIcon } from "@phosphor-icons/react"
export { CloudArrowUpIcon } from "@phosphor-icons/react"
@@ -50,7 +48,6 @@ export { CopyIcon } from "@phosphor-icons/react"
export { CreditCardIcon } from "@phosphor-icons/react"
export { CropIcon } from "@phosphor-icons/react"
export { CubeIcon } from "@phosphor-icons/react"
export { CurrencyCircleDollarIcon } from "@phosphor-icons/react"
export { DatabaseIcon } from "@phosphor-icons/react"
export { DotsSixVerticalIcon } from "@phosphor-icons/react"
export { DotsThreeIcon } from "@phosphor-icons/react"
@@ -68,10 +65,8 @@ export { FolderIcon } from "@phosphor-icons/react"
export { FolderOpenIcon } from "@phosphor-icons/react"
export { FolderPlusIcon } from "@phosphor-icons/react"
export { GearIcon } from "@phosphor-icons/react"
export { GitBranchIcon } from "@phosphor-icons/react"
export { GlobeIcon } from "@phosphor-icons/react"
export { GridFourIcon } from "@phosphor-icons/react"
export { HandPointingIcon } from "@phosphor-icons/react"
export { HardDrivesIcon } from "@phosphor-icons/react"
export { HeartIcon } from "@phosphor-icons/react"
export { HouseIcon } from "@phosphor-icons/react"
@@ -80,13 +75,10 @@ export { InfoIcon } from "@phosphor-icons/react"
export { KeyboardIcon } from "@phosphor-icons/react"
export { LayoutIcon } from "@phosphor-icons/react"
export { LifebuoyIcon } from "@phosphor-icons/react"
export { LightbulbIcon } from "@phosphor-icons/react"
export { LightningIcon } from "@phosphor-icons/react"
export { LinkIcon } from "@phosphor-icons/react"
export { ListIcon } from "@phosphor-icons/react"
export { ListPlusIcon } from "@phosphor-icons/react"
export { LockIcon } from "@phosphor-icons/react"
export { MagicWandIcon } from "@phosphor-icons/react"
export { MagnifyingGlassIcon } from "@phosphor-icons/react"
export { MagnifyingGlassMinusIcon } from "@phosphor-icons/react"
export { MagnifyingGlassPlusIcon } from "@phosphor-icons/react"
@@ -97,7 +89,6 @@ export { MonitorIcon } from "@phosphor-icons/react"
export { MoonIcon } from "@phosphor-icons/react"
export { PaletteIcon } from "@phosphor-icons/react"
export { PaperPlaneTiltIcon } from "@phosphor-icons/react"
export { PaperclipIcon } from "@phosphor-icons/react"
export { PencilIcon } from "@phosphor-icons/react"
export { PlusCircleIcon } from "@phosphor-icons/react"
export { PlusIcon } from "@phosphor-icons/react"
@@ -120,7 +111,6 @@ export { SquaresFourIcon } from "@phosphor-icons/react"
export { StarIcon } from "@phosphor-icons/react"
export { SunIcon } from "@phosphor-icons/react"
export { TableIcon } from "@phosphor-icons/react"
export { TagIcon } from "@phosphor-icons/react"
export { TerminalIcon } from "@phosphor-icons/react"
export { TextBIcon } from "@phosphor-icons/react"
export { TextItalicIcon } from "@phosphor-icons/react"
@@ -131,7 +121,6 @@ export { TrashIcon } from "@phosphor-icons/react"
export { TrayIcon } from "@phosphor-icons/react"
export { TrendDownIcon } from "@phosphor-icons/react"
export { TrendUpIcon } from "@phosphor-icons/react"
export { UploadIcon } from "@phosphor-icons/react"
export { UserCircleIcon } from "@phosphor-icons/react"
export { UserIcon } from "@phosphor-icons/react"
export { UserMinusIcon } from "@phosphor-icons/react"

View File

@@ -14,7 +14,6 @@ export { RiArrowRightUpLine } from "@remixicon/react"
export { RiArrowUpDownLine } from "@remixicon/react"
export { RiArrowUpLine } from "@remixicon/react"
export { RiArrowUpSLine } from "@remixicon/react"
export { RiAttachmentLine } from "@remixicon/react"
export { RiBankCardLine } from "@remixicon/react"
export { RiBankLine } from "@remixicon/react"
export { RiBarChartLine } from "@remixicon/react"
@@ -25,14 +24,12 @@ export { RiBookmarkLine } from "@remixicon/react"
export { RiBox1Line } from "@remixicon/react"
export { RiBox3Line } from "@remixicon/react"
export { RiCalculatorLine } from "@remixicon/react"
export { RiCalendarEventLine } from "@remixicon/react"
export { RiCalendarLine } from "@remixicon/react"
export { RiCameraLine } from "@remixicon/react"
export { RiChat1Line } from "@remixicon/react"
export { RiCheckLine } from "@remixicon/react"
export { RiCheckboxCircleFill } from "@remixicon/react"
export { RiCheckboxCircleLine } from "@remixicon/react"
export { RiCircleLine } from "@remixicon/react"
export { RiClipboardLine } from "@remixicon/react"
export { RiCloseCircleLine } from "@remixicon/react"
export { RiCloseLine } from "@remixicon/react"
@@ -62,12 +59,10 @@ export { RiFolderAddLine } from "@remixicon/react"
export { RiFolderLine } from "@remixicon/react"
export { RiFolderOpenLine } from "@remixicon/react"
export { RiGalleryLine } from "@remixicon/react"
export { RiGitBranchLine } from "@remixicon/react"
export { RiGlobalLine } from "@remixicon/react"
export { RiGlobeLine } from "@remixicon/react"
export { RiGridLine } from "@remixicon/react"
export { RiGroupLine } from "@remixicon/react"
export { RiHand } from "@remixicon/react"
export { RiHardDriveLine } from "@remixicon/react"
export { RiHeartLine } from "@remixicon/react"
export { RiHomeLine } from "@remixicon/react"
@@ -80,7 +75,6 @@ export { RiLayoutColumnLine } from "@remixicon/react"
export { RiLayoutLeftLine } from "@remixicon/react"
export { RiLayoutLine } from "@remixicon/react"
export { RiLifebuoyLine } from "@remixicon/react"
export { RiLightbulbLine } from "@remixicon/react"
export { RiLineChartLine } from "@remixicon/react"
export { RiLinksLine } from "@remixicon/react"
export { RiListUnordered } from "@remixicon/react"
@@ -88,12 +82,10 @@ export { RiLoader4Line } from "@remixicon/react"
export { RiLoaderLine } from "@remixicon/react"
export { RiLockLine } from "@remixicon/react"
export { RiLogoutBoxLine } from "@remixicon/react"
export { RiMagicLine } from "@remixicon/react"
export { RiMailLine } from "@remixicon/react"
export { RiMapLine } from "@remixicon/react"
export { RiMenuLine } from "@remixicon/react"
export { RiMicLine } from "@remixicon/react"
export { RiMoneyDollarCircleLine } from "@remixicon/react"
export { RiMoonLine } from "@remixicon/react"
export { RiMore2Line } from "@remixicon/react"
export { RiMoreLine } from "@remixicon/react"
@@ -102,8 +94,6 @@ export { RiNotificationLine } from "@remixicon/react"
export { RiPaletteLine } from "@remixicon/react"
export { RiPencilLine } from "@remixicon/react"
export { RiPieChartLine } from "@remixicon/react"
export { RiPlayListAddLine } from "@remixicon/react"
export { RiPriceTagLine } from "@remixicon/react"
export { RiPulseLine } from "@remixicon/react"
export { RiQuestionLine } from "@remixicon/react"
export { RiRecordCircleLine } from "@remixicon/react"
@@ -135,7 +125,6 @@ export { RiTimeLine } from "@remixicon/react"
export { RiTranslate } from "@remixicon/react"
export { RiUnderline } from "@remixicon/react"
export { RiUploadCloudLine } from "@remixicon/react"
export { RiUploadLine } from "@remixicon/react"
export { RiUserLine } from "@remixicon/react"
export { RiUserUnfollowLine } from "@remixicon/react"
export { RiVideoLine } from "@remixicon/react"

View File

@@ -20,10 +20,8 @@ export { IconBookmark } from "@tabler/icons-react"
export { IconBox } from "@tabler/icons-react"
export { IconBrandJavascript } from "@tabler/icons-react"
export { IconBuildingBank } from "@tabler/icons-react"
export { IconBulb } from "@tabler/icons-react"
export { IconCalculator } from "@tabler/icons-react"
export { IconCalendar } from "@tabler/icons-react"
export { IconCalendarPlus } from "@tabler/icons-react"
export { IconCamera } from "@tabler/icons-react"
export { IconChartBar } from "@tabler/icons-react"
export { IconChartLine } from "@tabler/icons-react"
@@ -35,19 +33,15 @@ export { IconChevronRight } from "@tabler/icons-react"
export { IconChevronUp } from "@tabler/icons-react"
export { IconChevronsLeft } from "@tabler/icons-react"
export { IconChevronsRight } from "@tabler/icons-react"
export { IconCircle } from "@tabler/icons-react"
export { IconCircleArrowLeft } from "@tabler/icons-react"
export { IconCircleCheck } from "@tabler/icons-react"
export { IconCircleCheckFilled } from "@tabler/icons-react"
export { IconCircleDashed } from "@tabler/icons-react"
export { IconCirclePlusFilled } from "@tabler/icons-react"
export { IconClipboard } from "@tabler/icons-react"
export { IconClock } from "@tabler/icons-react"
export { IconClockHour2 } from "@tabler/icons-react"
export { IconCloudCog } from "@tabler/icons-react"
export { IconCloudUpload } from "@tabler/icons-react"
export { IconCode } from "@tabler/icons-react"
export { IconCoin } from "@tabler/icons-react"
export { IconCommand } from "@tabler/icons-react"
export { IconCopy } from "@tabler/icons-react"
export { IconCornerUpLeft } from "@tabler/icons-react"
@@ -72,7 +66,6 @@ export { IconFileCode } from "@tabler/icons-react"
export { IconFileDescription } from "@tabler/icons-react"
export { IconFileText } from "@tabler/icons-react"
export { IconFileWord } from "@tabler/icons-react"
export { IconFilterPlus } from "@tabler/icons-react"
export { IconFlipHorizontal } from "@tabler/icons-react"
export { IconFlipVertical } from "@tabler/icons-react"
export { IconFolder } from "@tabler/icons-react"
@@ -80,7 +73,6 @@ export { IconFolderOpen } from "@tabler/icons-react"
export { IconFolderPlus } from "@tabler/icons-react"
export { IconFolderSearch } from "@tabler/icons-react"
export { IconFrame } from "@tabler/icons-react"
export { IconGitBranch } from "@tabler/icons-react"
export { IconGlobe } from "@tabler/icons-react"
export { IconGripVertical } from "@tabler/icons-react"
export { IconHeadphones } from "@tabler/icons-react"
@@ -107,7 +99,6 @@ export { IconLoader } from "@tabler/icons-react"
export { IconLock } from "@tabler/icons-react"
export { IconLogout } from "@tabler/icons-react"
export { IconMail } from "@tabler/icons-react"
export { IconMailCheck } from "@tabler/icons-react"
export { IconMap } from "@tabler/icons-react"
export { IconMaximize } from "@tabler/icons-react"
export { IconMenu } from "@tabler/icons-react"
@@ -120,12 +111,10 @@ export { IconMoodSmile } from "@tabler/icons-react"
export { IconMoon } from "@tabler/icons-react"
export { IconNotification } from "@tabler/icons-react"
export { IconPalette } from "@tabler/icons-react"
export { IconPaperclip } from "@tabler/icons-react"
export { IconPencil } from "@tabler/icons-react"
export { IconPhoto } from "@tabler/icons-react"
export { IconPlayerRecordFilled } from "@tabler/icons-react"
export { IconPlus } from "@tabler/icons-react"
export { IconPointer } from "@tabler/icons-react"
export { IconRefresh } from "@tabler/icons-react"
export { IconReport } from "@tabler/icons-react"
export { IconRobot } from "@tabler/icons-react"
@@ -148,7 +137,6 @@ export { IconStar } from "@tabler/icons-react"
export { IconStarOff } from "@tabler/icons-react"
export { IconSun } from "@tabler/icons-react"
export { IconTable } from "@tabler/icons-react"
export { IconTag } from "@tabler/icons-react"
export { IconTerminal } from "@tabler/icons-react"
export { IconTerminal2 } from "@tabler/icons-react"
export { IconTextCaption } from "@tabler/icons-react"
@@ -156,7 +144,6 @@ export { IconTrash } from "@tabler/icons-react"
export { IconTrendingDown } from "@tabler/icons-react"
export { IconTrendingUp } from "@tabler/icons-react"
export { IconUnderline } from "@tabler/icons-react"
export { IconUpload } from "@tabler/icons-react"
export { IconUser } from "@tabler/icons-react"
export { IconUserCircle } from "@tabler/icons-react"
export { IconUserX } from "@tabler/icons-react"
@@ -164,7 +151,6 @@ export { IconUsers } from "@tabler/icons-react"
export { IconVideoPlus } from "@tabler/icons-react"
export { IconVolume } from "@tabler/icons-react"
export { IconWallet } from "@tabler/icons-react"
export { IconWand } from "@tabler/icons-react"
export { IconWaveSine } from "@tabler/icons-react"
export { IconWorld } from "@tabler/icons-react"
export { IconX } from "@tabler/icons-react"

View File

@@ -39,8 +39,8 @@ export const addOptionsSchema = z.object({
path: z.string().optional(),
silent: z.boolean(),
dryRun: z.boolean(),
diff: z.string().optional(),
view: z.string().optional(),
diff: z.union([z.string(), z.literal(true)]).optional(),
view: z.union([z.string(), z.literal(true)]).optional(),
})
export const add = new Command()
@@ -58,8 +58,8 @@ export const add = new Command()
.option("-p, --path <path>", "the path to add the component to.")
.option("-s, --silent", "mute output.", false)
.option("--dry-run", "preview changes without writing files.", false)
.option("--diff <path>", "show diff for a file.")
.option("--view <path>", "show file contents.")
.option("--diff [path]", "show diff for a file.")
.option("--view [path]", "show file contents.")
.action(async (components, opts) => {
try {
const options = addOptionsSchema.parse({

View File

@@ -2,6 +2,8 @@ import type { DryRunFile, DryRunResult } from "@/src/utils/dry-run"
import { diffWords, structuredPatch } from "diff"
import { bold, cyan, dim, green, red, yellow } from "kleur/colors"
const MAX_OVERVIEW_FILES = 5
const BOX_TOP = dim("┌" + "─".repeat(46))
const BOX_BOTTOM = dim("└" + "─".repeat(46))
@@ -57,17 +59,23 @@ export function formatDryRunResult(
result: DryRunResult,
componentNames: string[],
options: {
diff?: string
view?: string
diff?: string | true
view?: string | true
} = {}
) {
// --diff and --view get a focused output with just the file.
if (options.diff) {
return formatDiffOutput(result, componentNames, options.diff)
if (typeof options.diff === "string") {
return formatDiffOutput(result, componentNames, options.diff)
}
return formatDiffOverview(result, componentNames)
}
if (options.view) {
return formatViewOutput(result, componentNames, options.view)
if (typeof options.view === "string") {
return formatViewOutput(result, componentNames, options.view)
}
return formatViewOverview(result, componentNames)
}
return formatSummaryOutput(result, componentNames)
@@ -125,9 +133,9 @@ function formatSummaryOutput(result: DryRunResult, componentNames: string[]) {
}
// Footer.
lines.push(`${dim("│")} ${dim("Run with --diff <path> to view changes.")}`)
lines.push(`${dim("│")} ${dim("Run with --diff to view changes.")}`)
lines.push(
`${dim("│")} ${dim("Run with --view <path> to view file contents.")}`
`${dim("│")} ${dim("Run with --view to view file contents.")}`
)
lines.push(`${dim("└")} ${dim("Run without --dry-run to apply.")}`)
@@ -188,6 +196,87 @@ function formatDiffOutput(
return lines.join("\n")
}
// Overview output for --diff (no path).
function formatDiffOverview(result: DryRunResult, componentNames: string[]) {
const lines: string[] = []
lines.push(formatHeader(componentNames))
lines.push(dim("│"))
const filesToDiff = result.files.slice(0, MAX_OVERVIEW_FILES)
if (filesToDiff.length === 0 && !result.css) {
lines.push(`${dim("│")} ${dim("No changes.")}`)
lines.push(dim("│"))
} else {
for (const file of filesToDiff) {
formatFileDiff(file, lines)
}
const total = result.files.length
if (total > MAX_OVERVIEW_FILES) {
lines.push(dim("│"))
}
}
lines.push(`${dim("└")} ${dim("Run without --dry-run to apply.")}`)
const total = result.files.length
if (total > MAX_OVERVIEW_FILES) {
lines.push(
` ${dim(
`Showing ${MAX_OVERVIEW_FILES} of ${total} files. Use --diff <path> to view a specific file.`
)}`
)
}
return lines.join("\n")
}
// Overview output for --view (no path).
function formatViewOverview(result: DryRunResult, componentNames: string[]) {
const lines: string[] = []
lines.push(formatHeader(componentNames))
lines.push(dim("│"))
const filesToView = result.files.slice(0, MAX_OVERVIEW_FILES)
if (filesToView.length === 0 && !result.css) {
lines.push(`${dim("│")} ${dim("No files.")}`)
lines.push(dim("│"))
} else {
for (const file of filesToView) {
const contentLines = file.content.split("\n")
lines.push(
`${dim("├")} ${bold(file.path)} ${dim("(")}${colorAction(
file.action
)}${dim(")")} ${dim(`${contentLines.length} lines`)}`
)
pushContentBox(lines, contentLines)
lines.push(dim("│"))
}
const total = result.files.length
if (total > MAX_OVERVIEW_FILES) {
lines.push(dim("│"))
}
}
lines.push(`${dim("└")} ${dim("Run without --dry-run to apply.")}`)
const total = result.files.length
if (total > MAX_OVERVIEW_FILES) {
lines.push(
` ${dim(
`Showing ${MAX_OVERVIEW_FILES} of ${total} files. Use --view <path> to view a specific file.`
)}`
)
}
return lines.join("\n")
}
// Format a single file's diff block.
function formatFileDiff(file: DryRunFile, lines: string[]) {
lines.push(

View File

@@ -59,8 +59,8 @@ Accepts component names, registry-prefixed names (`@magicui/shimmer-button`), UR
| `--path <path>` | `-p` | Target path for the component | — |
| `--silent` | `-s` | Mute output | `false` |
| `--dry-run` | | Preview all changes without writing files | `false` |
| `--diff <path>` | | Show the diff for a specific file (implies `--dry-run`) | — |
| `--view <path>` | | Show the full content of a specific file (implies `--dry-run`) | — |
| `--diff [path]` | | Show diffs. Without a path, shows the first 5 files. With a path, shows that file only (implies `--dry-run`) | — |
| `--view [path]` | | Show file contents. Without a path, shows the first 5 files. With a path, shows that file only (implies `--dry-run`) | — |
#### Dry-Run Mode
@@ -70,9 +70,15 @@ Use `--dry-run` to preview what `add` would do without writing any files. `--dif
# Preview all changes.
shadcn add button --dry-run
# Show diffs for all files (top 5).
shadcn add button --diff
# Show the diff for a specific file.
shadcn add button --diff button.tsx
# Show contents for all files (top 5).
shadcn add button --view
# Show the full content of a specific file.
shadcn add button --view button.tsx