Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions BingSiteAuth.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
<?xml version="1.0"?>
<users>
<user>A76D54460CD0391EB32EF8D9763C0F56</user>
</users>
23 changes: 21 additions & 2 deletions components/ui/icon-card.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import SimpleCheckedIcon from "@/icons/simple-checked-icon";
import CopyIcon from "@/icons/copy-icon";
import TerminalIcon from "@/icons/terminal-icon";
import Link from "next/link";
import { LINKS } from "@/constants";

const IconCard = ({
name,
Expand All @@ -19,6 +20,7 @@ const IconCard = ({
icon: React.FC<AnimatedIconProps>;
}) => {
const [isCopied, setIsCopied] = React.useState(false);
const [isCommandCopied, setIsCommandCopied] = React.useState(false);
const copyFileToClipboard = async () => {
const content = await getIconsContent(name);
console.log(content);
Expand All @@ -29,6 +31,16 @@ const IconCard = ({
}, 1000);
};

const copyCommandToClipboard = () => {
window.navigator.clipboard.writeText(
`npx shadcn@latest add ${LINKS.SITE_URL}/r/${name}.json`,
);
setIsCommandCopied(true);
setTimeout(() => {
setIsCommandCopied(false);
}, 1000);
};

return (
<div className="bg-background flex min-w-[140px] flex-1 flex-col items-center justify-center gap-4 rounded-lg border p-4 shadow-sm transition-all hover:shadow-md sm:w-48 sm:flex-none">
<Link
Expand Down Expand Up @@ -67,8 +79,15 @@ const IconCard = ({

<Tooltip>
<TooltipTrigger asChild>
<button className="text-muted-foreground hover:text-foreground transition-colors">
<TerminalIcon size={16} />
<button
onClick={() => copyCommandToClipboard()}
className="text-muted-foreground hover:text-foreground transition-colors"
>
{isCommandCopied ? (
<SimpleCheckedIcon size={16} className="text-green-500" />
) : (
<TerminalIcon size={16} />
)}
</button>
</TooltipTrigger>
<TooltipContent
Expand Down
105 changes: 105 additions & 0 deletions icons/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -114,27 +114,36 @@ import PythonIcon from "./python-icon";
import PlayerIcon from "./player-icon";
import QrCodeIcon from "./qrcode-icon";
import QuestionMark from "./question-mark";
import RadioIcon from "./radio-icon";
import RainbowIcon from "./rainbow-icon";
import RefreshIcon from "./refresh-icon";
import RightCheveron from "./right-cheveron";
import RocketIcon from "./rocket-icon";
import RouterIcon from "./router-icon";
import RosetteDiscountIcon from "./rosette-discount-icon";
import RosetteDiscountCheckIcon from "./rosette-discount-check-icon";
import SatelliteDishIcon from "./satellite-dish-icon";
import ScanBarcodeIcon from "./scan-barcode-icon";
import ScanHeartIcon from "./scan-heart-icon";
import SendIcon from "./send-icon";
import SendHorizontalIcon from "./send-horizontal-icon";
import ShieldCheck from "./shield-check";
import ShoppingCartIcon from "./shopping-cart-icon";
import SimpleCheckedIcon from "./simple-checked-icon";
import SkullEmoji from "./skull-emoji";
import SlackIcon from "./slack-icon";
import SnapchatIcon from "./snapchat-icon";
import SoupIcon from "./soup-icon";
import SparklesIcon from "./sparkles-icon";
import SpotifyIcon from "./spotify-icon";
import StarIcon from "./star-icon";
import SubscriptIcon from "./subscript-icon";
import TargetIcon from "./target-icon";
import TelephoneIcon from "./telephone-icon";
import ArrowDownAZIcon from "./arrow-down-a-z-icon";
import ToggleIcon from "./toggle-icon";
import TrashIcon from "./trash-icon";
import TruckElectricIcon from "./truck-electric-icon";
import UnorderedListIcon from "./unordered-list-icon";
import UserCheckIcon from "./user-check-icon";
import UserPlusIcon from "./user-plus-icon";
Expand All @@ -158,9 +167,14 @@ import WifiOffIcon from "./wifi-off-icon";
import WhatsappIcon from "./whatsapp-icon";
import WorldIcon from "./world-icon";
import TerminalIcon from "./terminal-icon";
import TriangleAlertIcon from "./triangle-alert-icon";
import TwitterIcon from "./twitter-icon";
import TwitterXIcon from "./twitter-x-icon";
import TypeScriptIcon from "./typescript-icon";
import UnlinkIcon from "./unlink-icon";
import VercelIcon from "./vercel-icon";
import Volume2Icon from "./volume-2-icon";
import VolumeXIcon from "./volume-x-icon";
import XIcon from "./x-icon";
import YoutubeIcon from "./youtube-icon";

Expand Down Expand Up @@ -1179,6 +1193,97 @@ const ICON_LIST: IconType[] = [
icon: TypeScriptIcon,
keywords: ["typescript", "ts", "code", "programming", "javascript"],
},
{
name: "triangle-alert-icon",
icon: TriangleAlertIcon,
keywords: ["triangle", "alert", "warning", "caution", "danger", "error"],
},
{
name: "truck-electric-icon",
icon: TruckElectricIcon,
keywords: ["truck", "electric", "vehicle", "delivery", "transport", "ev"],
},
{
name: "twitter-icon",
icon: TwitterIcon,
keywords: ["twitter", "bird", "social", "tweet", "social media"],
},
{
name: "unlink-icon",
icon: UnlinkIcon,
keywords: ["unlink", "disconnect", "break", "chain", "separate", "detach"],
},
{
name: "volume-2-icon",
icon: Volume2Icon,
keywords: ["volume", "sound", "audio", "speaker", "loud", "music"],
},
{
name: "volume-x-icon",
icon: VolumeXIcon,
keywords: ["volume", "mute", "silent", "sound off", "audio off", "quiet"],
},
{
name: "radio-icon",
icon: RadioIcon,
keywords: [
"radio",
"signal",
"broadcast",
"waves",
"transmission",
"wireless",
],
},
{
name: "router-icon",
icon: RouterIcon,
keywords: ["router", "wifi", "network", "internet", "connection", "modem"],
},
{
name: "satellite-dish-icon",
icon: SatelliteDishIcon,
keywords: [
"satellite",
"dish",
"antenna",
"signal",
"broadcast",
"communication",
],
},
{
name: "scan-barcode-icon",
icon: ScanBarcodeIcon,
keywords: ["scan", "barcode", "qr", "code", "reader", "scanner"],
},
{
name: "send-horizontal-icon",
icon: SendHorizontalIcon,
keywords: [
"send",
"horizontal",
"message",
"mail",
"paper plane",
"submit",
],
},
{
name: "soup-icon",
icon: SoupIcon,
keywords: ["soup", "bowl", "food", "hot", "steam", "meal"],
},
{
name: "subscript-icon",
icon: SubscriptIcon,
keywords: ["subscript", "text", "format", "typography", "math", "chemical"],
},
{
name: "target-icon",
icon: TargetIcon,
keywords: ["target", "aim", "goal", "focus", "bullseye", "center"],
},
].sort((a, b) => a.name.localeCompare(b.name));

export { ICON_LIST };
Loading