diff --git a/bun.lock b/bun.lock
index 3511a3d..7a31a1b 100644
--- a/bun.lock
+++ b/bun.lock
@@ -7,6 +7,7 @@
"dependencies": {
"@base-ui/react": "^1.8.0",
"@hookform/resolvers": "^5.2.2",
+ "@phosphor-icons/react": "^2.1.10",
"@tanstack/react-table": "^9.2.4",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
@@ -15,7 +16,6 @@
"date-fns": "^4.1.0",
"embla-carousel-react": "^8.6.0",
"input-otp": "^1.4.2",
- "lucide-react": "^0.553.0",
"next-themes": "^0.4.6",
"react-day-picker": "^10.0.1",
"react-hook-form": "^7.66.0",
@@ -296,6 +296,8 @@
"@nodelib/fs.walk": ["@nodelib/fs.walk@1.2.8", "", { "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg=="],
+ "@phosphor-icons/react": ["@phosphor-icons/react@2.1.10", "", { "peerDependencies": { "react": ">= 16.8", "react-dom": ">= 16.8" } }, "sha512-vt8Tvq8GLjheAZZYa+YG/pW7HDbov8El/MANW8pOAz4eGxrwhnbfrQZq0Cp4q8zBEu8NIhHdnr+r8thnfRSNYA=="],
+
"@pkgjs/parseargs": ["@pkgjs/parseargs@0.11.0", "", {}, "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg=="],
"@polka/url": ["@polka/url@1.0.0-next.29", "", {}, "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww=="],
@@ -1054,8 +1056,6 @@
"lru-cache": ["lru-cache@11.2.2", "", {}, "sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg=="],
- "lucide-react": ["lucide-react@0.553.0", "", { "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-BRgX5zrWmNy/lkVAe0dXBgd7XQdZ3HTf+Hwe3c9WK6dqgnj9h+hxV+MDncM88xDWlCq27+TKvHGE70ViODNILw=="],
-
"lz-string": ["lz-string@1.5.0", "", { "bin": { "lz-string": "bin/bin.js" } }, "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ=="],
"magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="],
diff --git a/components.json b/components.json
index 4167be2..f41a1fc 100644
--- a/components.json
+++ b/components.json
@@ -17,7 +17,7 @@
"lib": "@/lib",
"hooks": "@/hooks"
},
- "iconLibrary": "lucide",
+ "iconLibrary": "phosphor",
"rtl": false,
"menuColor": "default-translucent",
"menuAccent": "subtle",
diff --git a/package.json b/package.json
index b641d6f..b5762c5 100644
--- a/package.json
+++ b/package.json
@@ -58,6 +58,7 @@
"dependencies": {
"@base-ui/react": "^1.8.0",
"@hookform/resolvers": "^5.2.2",
+ "@phosphor-icons/react": "^2.1.10",
"@tanstack/react-table": "^9.2.4",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
@@ -66,7 +67,6 @@
"date-fns": "^4.1.0",
"embla-carousel-react": "^8.6.0",
"input-otp": "^1.4.2",
- "lucide-react": "^0.553.0",
"next-themes": "^0.4.6",
"react-day-picker": "^10.0.1",
"react-hook-form": "^7.66.0",
diff --git a/src/components/accordion.tsx b/src/components/accordion.tsx
index b3c321b..fff9e44 100644
--- a/src/components/accordion.tsx
+++ b/src/components/accordion.tsx
@@ -1,6 +1,6 @@
import { Accordion as AccordionPrimitive } from "@base-ui/react/accordion";
+import { CaretDownIcon, CaretUpIcon } from "@phosphor-icons/react";
import { cn } from "cn";
-import { ChevronDownIcon, ChevronUpIcon } from "lucide-react";
function Accordion({ className, ...props }: AccordionPrimitive.Root.Props) {
return (
@@ -44,11 +44,11 @@ function AccordionTrigger({
{...props}
>
{children}
-
-
diff --git a/src/components/breadcrumb.tsx b/src/components/breadcrumb.tsx
index 8c01d79..75e0f48 100644
--- a/src/components/breadcrumb.tsx
+++ b/src/components/breadcrumb.tsx
@@ -1,7 +1,7 @@
import { mergeProps } from "@base-ui/react/merge-props";
import { useRender } from "@base-ui/react/use-render";
+import { CaretRightIcon, DotsThreeIcon } from "@phosphor-icons/react";
import { cn } from "cn";
-import { ChevronRightIcon, MoreHorizontalIcon } from "lucide-react";
import type * as React from "react";
function Breadcrumb({ className, ...props }: React.ComponentProps<"nav">) {
@@ -87,7 +87,7 @@ function BreadcrumbSeparator({
className={cn("fui:[&>svg]:size-3.5", className)}
{...props}
>
- {children ?? }
+ {children ?? }
);
}
@@ -107,7 +107,7 @@ function BreadcrumbEllipsis({
)}
{...props}
>
-
+
More
);
diff --git a/src/components/calendar.tsx b/src/components/calendar.tsx
index a520410..a6112fa 100644
--- a/src/components/calendar.tsx
+++ b/src/components/calendar.tsx
@@ -1,9 +1,9 @@
-import { cn } from "cn";
import {
- ChevronDownIcon,
- ChevronLeftIcon,
- ChevronRightIcon,
-} from "lucide-react";
+ CaretDownIcon,
+ CaretLeftIcon,
+ CaretRightIcon,
+} from "@phosphor-icons/react";
+import { cn } from "cn";
import * as React from "react";
import {
type DayButton,
@@ -154,7 +154,7 @@ function Calendar({
Chevron: ({ className, orientation, ...props }) => {
if (orientation === "left") {
return (
-
@@ -163,7 +163,7 @@ function Calendar({
if (orientation === "right") {
return (
-
@@ -171,10 +171,7 @@ function Calendar({
}
return (
-
+
);
},
DayButton: ({ ...props }) => (
diff --git a/src/components/carousel.tsx b/src/components/carousel.tsx
index 4220f4e..267bb78 100644
--- a/src/components/carousel.tsx
+++ b/src/components/carousel.tsx
@@ -1,8 +1,8 @@
+import { CaretLeftIcon, CaretRightIcon } from "@phosphor-icons/react";
import { cn } from "cn";
import useEmblaCarousel, {
type UseEmblaCarouselType,
} from "embla-carousel-react";
-import { ChevronLeftIcon, ChevronRightIcon } from "lucide-react";
import * as React from "react";
import { Button } from "@/components/button";
@@ -192,7 +192,7 @@ function CarouselPrevious({
onClick={scrollPrev}
{...props}
>
-
+
Previous slide
);
@@ -222,7 +222,7 @@ function CarouselNext({
onClick={scrollNext}
{...props}
>
-
+
Next slide
);
diff --git a/src/components/chart.tsx b/src/components/chart.tsx
index 2d407b5..18bf434 100644
--- a/src/components/chart.tsx
+++ b/src/components/chart.tsx
@@ -370,3 +370,12 @@ export {
ChartLegendContent,
ChartStyle,
};
+
+// The marks, axes and grids come from recharts itself; only the container,
+// tooltip and legend are wrapped above. Re-exporting them from this module —
+// rather than from an entry point of their own — is what keeps there being one
+// recharts in the graph: a bundler pre-bundling two entry points that each
+// depend on recharts produces two copies of it, and recharts 3 holds its chart
+// state in a React context, so marks from one copy render nothing inside a
+// container from the other.
+export * from "recharts";
diff --git a/src/components/checkbox.tsx b/src/components/checkbox.tsx
index 33a6bb6..102816b 100644
--- a/src/components/checkbox.tsx
+++ b/src/components/checkbox.tsx
@@ -1,8 +1,8 @@
"use client";
import { Checkbox as CheckboxPrimitive } from "@base-ui/react/checkbox";
+import { CheckIcon } from "@phosphor-icons/react";
import { cn } from "cn";
-import { CheckIcon } from "lucide-react";
import * as React from "react";
import { Label } from "@/components/label";
diff --git a/src/components/command.tsx b/src/components/command.tsx
index dbb8842..9515b17 100644
--- a/src/components/command.tsx
+++ b/src/components/command.tsx
@@ -1,6 +1,6 @@
+import { CheckIcon, MagnifyingGlassIcon } from "@phosphor-icons/react";
import { Command as CommandPrimitive } from "cmdk";
import { cn } from "cn";
-import { CheckIcon, SearchIcon } from "lucide-react";
import type * as React from "react";
import {
Dialog,
@@ -76,7 +76,7 @@ function CommandInput({
{...props}
/>
-
+
diff --git a/src/components/context-menu.tsx b/src/components/context-menu.tsx
index e67c643..f98482d 100644
--- a/src/components/context-menu.tsx
+++ b/src/components/context-menu.tsx
@@ -1,6 +1,6 @@
import { ContextMenu as ContextMenuPrimitive } from "@base-ui/react/context-menu";
+import { CaretRightIcon, CheckIcon } from "@phosphor-icons/react";
import { cn } from "cn";
-import { CheckIcon, ChevronRightIcon } from "lucide-react";
import type * as React from "react";
function ContextMenu({ ...props }: ContextMenuPrimitive.Root.Props) {
@@ -134,7 +134,7 @@ function ContextMenuSubTrigger({
{...props}
>
{children}
-
+
);
}
diff --git a/src/components/data-table.tsx b/src/components/data-table.tsx
index 0aafa5a..b2d0d6c 100644
--- a/src/components/data-table.tsx
+++ b/src/components/data-table.tsx
@@ -1,5 +1,16 @@
"use client";
+import {
+ ArrowDownIcon,
+ ArrowUpIcon,
+ CaretDoubleLeftIcon,
+ CaretDoubleRightIcon,
+ CaretLeftIcon,
+ CaretRightIcon,
+ CaretUpDownIcon,
+ MagnifyingGlassIcon,
+ SlidersHorizontalIcon,
+} from "@phosphor-icons/react";
import {
type Column,
type ColumnDef,
@@ -28,17 +39,6 @@ import {
useTable,
} from "@tanstack/react-table";
import { cn } from "cn";
-import {
- ArrowDownIcon,
- ArrowUpIcon,
- ChevronLeftIcon,
- ChevronRightIcon,
- ChevronsLeftIcon,
- ChevronsRightIcon,
- ChevronsUpDownIcon,
- SearchIcon,
- Settings2Icon,
-} from "lucide-react";
import * as React from "react";
import { Button } from "@/components/button";
@@ -159,7 +159,7 @@ function DataTableColumnHeader<
? ArrowUpIcon
: sorted === "desc"
? ArrowDownIcon
- : ChevronsUpDownIcon;
+ : CaretUpDownIcon;
return (
-
+
-
+
Columns
}
@@ -616,7 +616,7 @@ function DataTable<
onClick={() => table.firstPage()}
disabled={!table.getCanPreviousPage()}
>
-
+
First page
diff --git a/src/components/dialog.tsx b/src/components/dialog.tsx
index b6ed84e..8680e51 100644
--- a/src/components/dialog.tsx
+++ b/src/components/dialog.tsx
@@ -1,8 +1,8 @@
"use client";
import { Dialog as DialogPrimitive } from "@base-ui/react/dialog";
+import { XIcon } from "@phosphor-icons/react";
import { cn } from "cn";
-import { XIcon } from "lucide-react";
import type * as React from "react";
import { Button } from "@/components/button";
diff --git a/src/components/dropdown-menu.tsx b/src/components/dropdown-menu.tsx
index 212269e..a6224cb 100644
--- a/src/components/dropdown-menu.tsx
+++ b/src/components/dropdown-menu.tsx
@@ -1,6 +1,6 @@
import { Menu as MenuPrimitive } from "@base-ui/react/menu";
+import { CaretRightIcon, CheckIcon } from "@phosphor-icons/react";
import { cn } from "cn";
-import { CheckIcon, ChevronRightIcon } from "lucide-react";
import type * as React from "react";
function DropdownMenu({ ...props }: MenuPrimitive.Root.Props) {
@@ -119,7 +119,7 @@ function DropdownMenuSubTrigger({
{...props}
>
{children}
-
+
);
}
diff --git a/src/components/filters.tsx b/src/components/filters.tsx
index 86a0128..6d7764f 100644
--- a/src/components/filters.tsx
+++ b/src/components/filters.tsx
@@ -1,6 +1,10 @@
+import {
+ CalendarIcon,
+ MagnifyingGlassIcon,
+ XIcon,
+} from "@phosphor-icons/react";
import { cn } from "cn";
import { format } from "date-fns";
-import { CalendarIcon, SearchIcon, XIcon } from "lucide-react";
import * as React from "react";
import { Button } from "@/components/button";
import { Calendar } from "@/components/calendar";
@@ -161,7 +165,7 @@ function FilterSearch({
at that size and shrinks it for a compact bar. */}
-
+
{children}{" "}
-
diff --git a/src/components/pagination.tsx b/src/components/pagination.tsx
index 571cf78..4191562 100644
--- a/src/components/pagination.tsx
+++ b/src/components/pagination.tsx
@@ -1,9 +1,9 @@
-import { cn } from "cn";
import {
- ChevronLeftIcon,
- ChevronRightIcon,
- MoreHorizontalIcon,
-} from "lucide-react";
+ CaretLeftIcon,
+ CaretRightIcon,
+ DotsThreeIcon,
+} from "@phosphor-icons/react";
+import { cn } from "cn";
import type * as React from "react";
import { Button } from "@/components/button";
@@ -78,7 +78,7 @@ function PaginationPrevious({
className={cn("fui:pl-2!", className)}
{...props}
>
-
+
{text}
);
@@ -97,7 +97,7 @@ function PaginationNext({
{...props}
>
{text}
-
+
);
}
@@ -116,7 +116,7 @@ function PaginationEllipsis({
)}
{...props}
>
-
+
More pages
);
diff --git a/src/components/select.tsx b/src/components/select.tsx
index 152c8d7..37c0dcf 100644
--- a/src/components/select.tsx
+++ b/src/components/select.tsx
@@ -1,8 +1,8 @@
"use client";
import { Select as SelectPrimitive } from "@base-ui/react/select";
+import { CaretDownIcon, CaretUpIcon, CheckIcon } from "@phosphor-icons/react";
import { cn } from "cn";
-import { CheckIcon, ChevronDownIcon, ChevronUpIcon } from "lucide-react";
import type * as React from "react";
const Select = SelectPrimitive.Root;
@@ -48,7 +48,7 @@ function SelectTrigger({
{children}
+
}
/>
@@ -170,7 +170,7 @@ function SelectScrollUpButton({
)}
{...props}
>
-
+
);
}
@@ -188,7 +188,7 @@ function SelectScrollDownButton({
)}
{...props}
>
-
+
);
}
diff --git a/src/components/sheet.tsx b/src/components/sheet.tsx
index 084f889..e1efc02 100644
--- a/src/components/sheet.tsx
+++ b/src/components/sheet.tsx
@@ -1,6 +1,6 @@
import { Dialog as SheetPrimitive } from "@base-ui/react/dialog";
+import { XIcon } from "@phosphor-icons/react";
import { cn } from "cn";
-import { XIcon } from "lucide-react";
import type * as React from "react";
import { Button } from "@/components/button";
diff --git a/src/components/sidebar.tsx b/src/components/sidebar.tsx
index 1828be5..c48eff1 100644
--- a/src/components/sidebar.tsx
+++ b/src/components/sidebar.tsx
@@ -2,9 +2,9 @@
import { mergeProps } from "@base-ui/react/merge-props";
import { useRender } from "@base-ui/react/use-render";
+import { SidebarSimpleIcon } from "@phosphor-icons/react";
import { cva, type VariantProps } from "class-variance-authority";
import { cn } from "cn";
-import { PanelLeftIcon } from "lucide-react";
import * as React from "react";
import { Button } from "@/components/button";
import { Input } from "@/components/input";
@@ -268,7 +268,7 @@ function SidebarTrigger({
}}
{...props}
>
-
+
Toggle Sidebar
);
diff --git a/src/components/sonner.tsx b/src/components/sonner.tsx
index a32b0ff..c6437f7 100644
--- a/src/components/sonner.tsx
+++ b/src/components/sonner.tsx
@@ -1,12 +1,12 @@
"use client";
import {
- CircleCheckIcon,
+ CheckCircleIcon,
InfoIcon,
- Loader2Icon,
- OctagonXIcon,
- TriangleAlertIcon,
-} from "lucide-react";
+ SpinnerIcon,
+ WarningIcon,
+ WarningOctagonIcon,
+} from "@phosphor-icons/react";
import { useTheme } from "next-themes";
import { Toaster as Sonner, type ToasterProps } from "sonner";
@@ -18,11 +18,11 @@ const Toaster = ({ ...props }: ToasterProps) => {
theme={theme as ToasterProps["theme"]}
className="fui:toaster fui:group"
icons={{
- success: ,
+ success: ,
info: ,
- warning: ,
- error: ,
- loading: ,
+ warning: ,
+ error: ,
+ loading: ,
}}
style={
{
diff --git a/src/components/spinner.tsx b/src/components/spinner.tsx
index 22f9a9d..1b39e9d 100644
--- a/src/components/spinner.tsx
+++ b/src/components/spinner.tsx
@@ -1,9 +1,9 @@
+import { SpinnerIcon } from "@phosphor-icons/react";
import { cn } from "cn";
-import { Loader2Icon } from "lucide-react";
function Spinner({ className, ...props }: React.ComponentProps<"svg">) {
return (
- {empty}> : ;
+ return empty !== undefined ? empty : ;
}
return (
diff --git a/src/icons.ts b/src/icons.ts
index 8cc4c0d..2d20f61 100644
--- a/src/icons.ts
+++ b/src/icons.ts
@@ -1,2 +1,37 @@
-// Re-export all lucide-react icons
-export * from "lucide-react";
+// Re-export all phosphor icons
+
+// lucide-react exposed its component type as `LucideIcon`; phosphor calls it `Icon`.
+export type { Icon as LucideIcon } from "@phosphor-icons/react";
+export * from "@phosphor-icons/react";
+// Compatibility aliases for consumers written against lucide-react naming.
+// Phosphor has no same-named export for these; each alias points at the
+// closest phosphor glyph so existing call sites keep resolving.
+export {
+ ArrowCounterClockwiseIcon as RotateCcwIcon,
+ ArrowsClockwiseIcon as RefreshCwIcon,
+ CaretDoubleLeftIcon as ChevronsLeftIcon,
+ CaretDoubleRightIcon as ChevronsRightIcon,
+ CaretDownIcon as ChevronDownIcon,
+ CaretLeftIcon as ChevronLeftIcon,
+ CaretRightIcon as ChevronRightIcon,
+ CaretUpDownIcon as ChevronsUpDownIcon,
+ CaretUpIcon as ChevronUpIcon,
+ CheckCircleIcon as CircleCheckIcon,
+ CircleWavyIcon as BadgeIcon,
+ ClockCounterClockwiseIcon as HistoryIcon,
+ CloudArrowUpIcon as CloudUploadIcon,
+ CubeIcon as BoxesIcon,
+ DotsThreeIcon as MoreHorizontalIcon,
+ GearIcon as SettingsIcon,
+ GridFourIcon as LayoutGridIcon,
+ MagnifyingGlassIcon as SearchIcon,
+ ScalesIcon as ScaleIcon,
+ SealPercentIcon as TicketPercentIcon,
+ SidebarSimpleIcon as PanelLeftIcon,
+ SpinnerIcon as Loader2Icon,
+ SquaresFourIcon as LayoutDashboardIcon,
+ StackIcon as LayersIcon,
+ TrashIcon as Trash2Icon,
+ WarningIcon as TriangleAlertIcon,
+ WarningOctagonIcon as OctagonXIcon,
+} from "@phosphor-icons/react";
diff --git a/src/stories/Dashboard.stories.tsx b/src/stories/Dashboard.stories.tsx
index 8e37fd9..7878143 100644
--- a/src/stories/Dashboard.stories.tsx
+++ b/src/stories/Dashboard.stories.tsx
@@ -1,39 +1,39 @@
-import type { Meta, StoryObj } from "@storybook/react-vite";
import {
- Activity,
- ArrowDownRight,
- ArrowUpRight,
- BadgeCheck,
- BarChart3,
- Bell,
- Building2,
- ChevronRight,
- ChevronsUpDown,
- CircleAlert,
- Command as CommandIcon,
- CreditCard,
- DollarSign,
- Download,
- Ellipsis,
- Eye,
- FileText,
- Inbox,
- LayoutDashboard,
- LifeBuoy,
- LogOut,
- Package,
- Pencil,
- Plus,
- Rocket,
- Search,
- Send,
- Settings,
- ShoppingCart,
- Sparkles,
- Trash2,
- TrendingUp,
- Users,
-} from "lucide-react";
+ ActivityIcon,
+ ArrowDownRightIcon,
+ ArrowUpRightIcon,
+ BellIcon,
+ BuildingsIcon,
+ CaretRightIcon,
+ CaretUpDownIcon,
+ ChartBarIcon,
+ CircleWavyCheckIcon,
+ CommandIcon,
+ CreditCardIcon,
+ CurrencyDollarIcon,
+ DotsThreeIcon,
+ DownloadIcon,
+ EyeIcon,
+ FileTextIcon,
+ GearIcon,
+ LifebuoyIcon,
+ MagnifyingGlassIcon,
+ PackageIcon,
+ PaperPlaneTiltIcon,
+ PencilIcon,
+ PlusIcon,
+ RocketIcon,
+ ShoppingCartIcon,
+ SignOutIcon,
+ SparkleIcon,
+ SquaresFourIcon,
+ TrashIcon,
+ TrayIcon,
+ TrendUpIcon,
+ UsersIcon,
+ WarningCircleIcon,
+} from "@phosphor-icons/react";
+import type { Meta, StoryObj } from "@storybook/react-vite";
import * as React from "react";
import {
Area,
@@ -421,7 +421,7 @@ const stats = [
delta: "+18.2%",
trending: "up" as const,
hint: "vs. previous 30 days",
- icon: DollarSign,
+ icon: CurrencyDollarIcon,
progress: 78,
},
{
@@ -430,7 +430,7 @@ const stats = [
delta: "+9.4%",
trending: "up" as const,
hint: "412 new this month",
- icon: Users,
+ icon: UsersIcon,
progress: 64,
},
{
@@ -439,7 +439,7 @@ const stats = [
delta: "+2.1%",
trending: "up" as const,
hint: "peak 1,540 at 14:00",
- icon: Activity,
+ icon: ActivityIcon,
progress: 41,
},
{
@@ -448,7 +448,7 @@ const stats = [
delta: "-0.6%",
trending: "down" as const,
hint: "lowest in 6 months",
- icon: TrendingUp,
+ icon: TrendUpIcon,
progress: 22,
},
];
@@ -464,7 +464,7 @@ function AppSidebar() {
render={
-
+
@@ -474,7 +474,7 @@ function AppSidebar() {
Enterprise
-
+
}
/>
@@ -482,12 +482,12 @@ function AppSidebar() {
Workspaces
-
+
Foomo Inc.
⌘1
-
+
Skunkworks
⌘2
@@ -495,7 +495,7 @@ function AppSidebar() {
-
+
New workspace
@@ -511,13 +511,13 @@ function AppSidebar() {
-
+
Dashboard
-
+
Analytics
@@ -527,9 +527,9 @@ function AppSidebar() {
-
+
Projects
-
+
}
/>
@@ -557,14 +557,14 @@ function AppSidebar() {
-
+
Customers
128
-
+
Orders
12
@@ -579,20 +579,20 @@ function AppSidebar() {
-
+
Invoices
-
+
Billing
-
-
- Settings
+
+
+ GearIcon
@@ -603,7 +603,7 @@ function AppSidebar() {
-
+
Support
@@ -625,7 +625,7 @@ function AppSidebar() {
lena@foomo.org
-
+
}
/>
@@ -640,22 +640,22 @@ function AppSidebar() {
-
+
Upgrade to Pro
-
+
Account
-
+
Billing
-
+
Log out
@@ -697,8 +697,8 @@ function DashboardHeader({ onOpenCommand }: { onOpenCommand: () => void }) {
onClick={onOpenCommand}
className="fui:hidden fui:w-64 fui:justify-start fui:font-normal fui:text-muted-foreground fui:lg:inline-flex"
>
-
- Search everything…
+
+ MagnifyingGlassIcon everything…
⌘
K
@@ -746,11 +746,11 @@ function DashboardHeader({ onOpenCommand }: { onOpenCommand: () => void }) {
-
+
Profile
-
+
Preferences
⌘,
@@ -758,7 +758,7 @@ function DashboardHeader({ onOpenCommand }: { onOpenCommand: () => void }) {
-
+
Log out
@@ -774,19 +774,19 @@ const notifications = [
title: "Payment failed",
body: "Sara Lindqvist's card was declined.",
time: "5h ago",
- icon: CircleAlert,
+ icon: WarningCircleIcon,
},
{
title: "New enterprise lead",
body: "Northwind requested a demo.",
time: "1d ago",
- icon: Rocket,
+ icon: RocketIcon,
},
{
title: "Deploy succeeded",
body: "storefront@v2.14.0 is live.",
time: "2d ago",
- icon: BadgeCheck,
+ icon: CircleWavyCheckIcon,
},
];
@@ -796,7 +796,7 @@ function NotificationsMenu() {
-
+
Notifications
@@ -849,9 +849,9 @@ function StatCards() {
{stat.trending === "up" ? (
-
+
) : (
-
+
)}
{stat.delta}
@@ -1088,7 +1088,7 @@ const orderColumns = [
-
+
Actions for {row.original.id}
}
@@ -1096,15 +1096,15 @@ const orderColumns = [
-
+
View invoice
-
+
Edit
-
+
Resend email
@@ -1133,7 +1133,7 @@ function OrdersTableCard() {
@@ -1145,7 +1145,7 @@ function OrdersTableCard() {
columns={orderColumns}
data={orders}
getRowId={(order) => order.id}
- searchable="Search invoices…"
+ searchable="MagnifyingGlassIcon invoices…"
hideableColumns
enableRowSelection
onRowSelectionChange={setSelected}
@@ -1167,7 +1167,7 @@ function DeleteOrderDialog({ invoice }: { invoice: string }) {
variant="destructive"
onSelect={(event) => event.preventDefault()}
>
-
+
Delete
}
@@ -1199,7 +1199,7 @@ function NewProjectDialog() {
-
+
New project
}
@@ -1216,7 +1216,7 @@ function NewProjectDialog() {
Name
-
+
@@ -1360,7 +1360,7 @@ function ReportsTab() {
{reports.map((report) => (
-
-
+
{report.title}
@@ -1391,7 +1391,7 @@ function AuditTab() {
-
+
Nothing to audit yet
@@ -1401,7 +1401,7 @@ function AuditTab() {
@@ -1423,7 +1423,7 @@ function CommandPalette({
open={open}
onOpenChange={onOpenChange}
title="Command palette"
- description="Search for a command to run"
+ description="MagnifyingGlassIcon for a command to run"
>
{/*
* CommandDialog only renders
-
+
Usage-based billing is now available
Switch any project to metered pricing and only pay for what you