Originally created by: matt765
The project currently uses two different approaches for icons:
src/assets/icons/ — simple, zero-dependency SVG wrappers. There are already 71 of them and they work great.It would be nice to unify this and move everything to local TSX icons, so the codebase is consistent and we can drop the lucide-react dependency entirely.
aria-hidden etc.If you look at any file in src/assets/icons/, you'll see something like this:
export const CheckIcon = () => (
<svg
aria-hidden="true"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 24 24"
width="21"
height="21"
>
<path ... />
</svg>
);
That's all there is to it. The new icons should follow this exact convention.
from "lucide-react" imports to see what's used and wheresrc/assets/icons/lucide-react from package.jsonShadcn primitives: checkbox.tsx, select.tsx, radio-group.tsx, command.tsx, breadcrumb.tsx, dropdown-menu.tsx, pagination.tsx
View components: ToastContainer.tsx, DateRangeSelector.tsx, ButtonsUI.tsx, CommandUI.tsx, DropdownMenuUI.tsx, PopoverUI.tsx, TabsUI.tsx, TooltipsUI.tsx, AlertsUI.tsx, BreadcrumbsUI.tsx
Tables: UserTable.tsx, InventoryTable.tsx, AdvancedTable.tsx
Forms: SelectInputsForm.tsx, InputFieldsForm.tsx, FormValidationForm.tsx, FileUploadForm.tsx
Stories: tooltip.stories.tsx, input-group.stories.tsx, dropdown-menu.stories.tsx, button.stories.tsx, breadcrumb.stories.tsx, alert.stories.tsx
lucide-react remain anywhere in the codebaselucide-react is removed from package.json{Name}Icon.tsx)