Spree Dashboard 的 shadcn 图标规范:iconLibrary、data-icon 与组件化传参实践
Spree Dashboard 的 shadcn 图标规范iconLibrary、data-icon 与组件化传参实践【免费下载链接】spreeOpen Source eCommerce Platform for B2B, Marketplace, and Enterprise. REST API, TypeScript SDK, and production-ready Next.js storefront. Self-host it. Own your stack. No vendor lock-in. Zero platform fees.项目地址: https://gitcode.com/GitHub_Trending/sp/spree导读本文面向在 Spree 开源电商平台的 React 管理后台Dashboard中编写 UI 的开发者系统讲解其 shadcn 组件体系下图标使用的三条核心规范从项目配置的iconLibrary导入图标、通过data-icon属性控制按钮内图标位置、以及以组件对象而非字符串 key 传递图标。读完本文你将掌握与仓库中实际组件实现完全一致的图标书写方式避免因图标尺寸类、字符串映射等反模式导致的样式错乱与类型丢失问题。规则来源为仓库内的 .agents/skills/shadcn/rules/icons.md其精神已在 packages/dashboard 与 packages/dashboard-ui 的实际代码中得到印证。一、图标源始终使用项目配置的 iconLibrary规则导入图标时永远使用项目配置的iconLibrary字段对应的图标库不要想当然地假设是lucide-react。iconLibrary的值由项目上下文中的components.json声明lucide→lucide-reacttabler→tabler/icons-react依此类推。在 Spree 仓库中packages/dashboard/components.json 明确配置{ $schema: https://ui.shadcn.com/schema.json, style: radix-nova, rsc: false, tsx: true, iconLibrary: lucide }也就是说当前 Dashboard 项目的图标库为lucide对应包是lucide-react。这一点在 packages/dashboard/package.json 的依赖中亦有体现lucide-react: ^1.14.0。单点换源集中式 re-export虽然iconLibrary指向lucide-reactSpree 的 Dashboard 并没有让每个组件直接import ... from lucide-react而是通过 packages/dashboard-ui/src/spree/icons.ts 做了集中式 re-export/** * The dashboards icon set. * * Every icon the dashboard renders is re-exported from here rather than * imported from lucide-react directly, so the icon set is swappable in one * file instead of across hundreds. Adding an icon means adding a line here. * * LucideIcon is the icon *type* the nav registries and the plugin API are * written against; it still comes straight from lucide-react. */ export { AlertTriangleIcon, ArrowLeftIcon, CheckIcon, // ... 其余图标 }这段实现注释透露了两个关键事实换源成本极低若未来项目将iconLibrary从lucide切换到tabler只需修改 icons.ts 这一个文件的导入来源其余数百个消费方无需改动类型契约稳定图标类型LucideIcon仍直接来自lucide-react导航注册表nav registries与插件 API 均以它为类型基准因此集中导出保证了换源不换类型。对开发者的实操建议在你新增图标前先检查 icons.ts 中是否已存在目标图标不存在则按每个图标加一行的约定追加导出再在业务组件中从spree/dashboard-ui侧导入而不是绕过集中层直接 importlucide-react。二、Button 内的图标使用>Button SearchIcon classNamemr-2 size-4 / Search /Button问题在于间距与尺寸都属于组件样式契约的一部分由按钮组件内部 CSS 统一管理在图标上手工叠加mr-2、size-4会与组件自身的排版逻辑冲突且无法被组件按需调整。正确写法Button SearchIcon>TagIcon>Button SearchIcon classNamesize-4>Button SearchIcon>const iconMap { check: CheckIcon, alert: AlertIcon, } function StatusBadge({ icon }: { icon: string }) { const Icon iconMap[icon] return Icon / } StatusBadge iconcheck /正确写法// Import from the projects configured iconLibrary (e.g. lucide-react, tabler/icons-react). import { CheckIcon } from lucide-react function StatusBadge({ icon: Icon }: { icon: React.ComponentType }) { return Icon / } StatusBadge icon{CheckIcon} /为什么组件引用优于字符串 key类型安全icon: React.ComponentType让 TypeScript 在编译期校验传入的是合法组件字符串映射表则把错误推迟到运行时拼错 key 得到undefined渲染时静默失败可摇树tree-shaking友好组件引用形式是静态导入打包器能精确追踪并剔除未用图标字符串映射表依赖运行时索引难以静态分析与集中导出天然契合如前所述Spree 通过 packages/dashboard-ui/src/spree/icons.ts 集中 re-export 图标配合LucideIcon类型icon{SomeIcon}的写法让插件 API、导航注册表与业务组件共用同一套类型契约换图标库时无需改动任何调用方。五、四条规则的实践速查场景推荐写法禁止写法原因选择图标来源从components.json的iconLibrary对应包导入本项目为lucide-react且经icons.ts集中导出想当然import ... from lucide-react换库时icons.ts单点修改全仓库跟随Button 内图标定位SearchIcon contenteditable="false">【免费下载链接】spreeOpen Source eCommerce Platform for B2B, Marketplace, and Enterprise. REST API, TypeScript SDK, and production-ready Next.js storefront. Self-host it. Own your stack. No vendor lock-in. Zero platform fees.项目地址: https://gitcode.com/GitHub_Trending/sp/spree创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

NiceGUI 发布说明工作流:基于 release-notes Skill 与数据脚本的版本发布自动化实践

NiceGUI 发布说明工作流:基于 release-notes Skill 与数据脚本的版本发布自动化实践

NiceGUI 发布说明工作流:基于 release-notes Skill 与数据脚本的版本发布自动化实践 【免费下载链接】nicegui Create web-based user interfaces with Python. The nice way. 项目地址: https://gitcode.com/GitHub_Trending/ni/nicegui 导读 本文讲解 Nic…

2026/9/14 8:57:24 阅读更多 →
国产分布式数据库选型指南:6大主流产品深度对比

国产分布式数据库选型指南:6大主流产品深度对比

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/14 8:57:24 阅读更多 →
SpringAI构建智能客服框架的设计与实践

SpringAI构建智能客服框架的设计与实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/14 8:57:24 阅读更多 →

最新新闻

PostHog Desktop 开发指南:从源码运行桌面/移动应用与 Agent 框架

PostHog Desktop 开发指南:从源码运行桌面/移动应用与 Agent 框架

PostHog Desktop 开发指南:从源码运行桌面/移动应用与 Agent 框架 【免费下载链接】posthog :hedgehog: PostHog is the leading platform for building self-driving products. Our developer tools – AI observability, analytics, session replay, flags, exper…

2026/9/14 9:55:54 阅读更多 →
Czkawka 使用指南:如何免费查找重复文件、空文件夹和相似图片

Czkawka 使用指南:如何免费查找重复文件、空文件夹和相似图片

Czkawka 使用指南:如何免费查找重复文件、空文件夹和相似图片 【免费下载链接】czkawka Multi functional app to find duplicates, empty folders, similar images etc. 项目地址: https://gitcode.com/GitHub_Trending/cz/czkawka 下载文件夹里躺着三份一模…

2026/9/14 9:55:54 阅读更多 →
oauth2-proxy 外部反向代理鉴权集成指南:Nginx auth_request、Traefik ForwardAuth 与 Caddy forward_auth 完整实战

oauth2-proxy 外部反向代理鉴权集成指南:Nginx auth_request、Traefik ForwardAuth 与 Caddy forward_auth 完整实战

oauth2-proxy 外部反向代理鉴权集成指南:Nginx auth_request、Traefik ForwardAuth 与 Caddy forward_auth 完整实战 【免费下载链接】oauth2-proxy A reverse proxy that provides authentication with Google, Azure, OpenID Connect and many more identity prov…

2026/9/14 9:55:54 阅读更多 →
oneapi::tbb::concurrent_multiset 查找操作完全指南:count、find、contains、lower_bound、upper_bound 与 equal_range

oneapi::tbb::concurrent_multiset 查找操作完全指南:count、find、contains、lower_bound、upper_bound 与 equal_range

oneapi::tbb::concurrent_multiset 查找操作完全指南:count、find、contains、lower_bound、upper_bound 与 equal_range 【免费下载链接】mold mold: A Modern Linker 🦠 项目地址: https://gitcode.com/GitHub_Trending/mo/mold oneapi::tbb::c…

2026/9/14 9:55:54 阅读更多 →
YOLOv10水下机器人目标识别系统设计与优化

YOLOv10水下机器人目标识别系统设计与优化

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/14 9:55:54 阅读更多 →
强化学习入门:从基础原理到实战应用

强化学习入门:从基础原理到实战应用

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/14 9:54:54 阅读更多 →

日新闻

AI音乐侵权案中的测试工程与版权保护技术

AI音乐侵权案中的测试工程与版权保护技术

1. 项目概述:当测试工程师遇上AI音乐侵权案去年夏天,我作为技术顾问参与了一起特殊的著作权纠纷案——某音乐平台AI作曲功能被指控批量侵权。这起案件的特殊性在于:原告方并非传统音乐人,而是一家拥有百万级曲库的数字音乐发行商&…

2026/9/14 0:00:26 阅读更多 →
嵌入式面试I2C与SPI深度解析:从协议到量产调试

嵌入式面试I2C与SPI深度解析:从协议到量产调试

1. 这份“高频知识点洞察”到底是什么,又为什么值得你花时间细读? 如果你最近在刷嵌入式开发岗位的招聘JD,或者正坐在工位上改第7版简历,又或者刚被面试官一句“讲讲I2C和SPI的区别”问得手心冒汗——那你不是一个人。过去两年我带…

2026/9/14 0:00:26 阅读更多 →
51单片机开环控制磁阻传感器的硬件匹配与代码实现

51单片机开环控制磁阻传感器的硬件匹配与代码实现

简介:本资源是一份面向嵌入式初学者与单片机课程实践者的51单片机开关磁阻电机(SRM)开环控制教学方案,聚焦磁阻位置检测、固定时序驱动与基础状态可视化。资源包含1个C语言主程序文件(zhuang600.c)实现电机…

2026/9/14 0:00:26 阅读更多 →

周新闻

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验 【免费下载链接】ai The AI Toolkit for TypeScript. From the creators of Next.js, the AI SDK is a free open-source library for building AI-powered applications and ag…

2026/9/14 5:45:49 阅读更多 →
Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化 【免费下载链接】refine A React Framework for building internal tools, admin panels, dashboards & B2B apps with unmatched flexibility. 项目地址: https://gitcode.com/GitH…

2026/9/14 0:52:26 阅读更多 →
Flutter应用改名全指南:从Android到iOS的配置与工具实践

Flutter应用改名全指南:从Android到iOS的配置与工具实践

刚接一个外包项目时,甲方要求把工程里临时用的应用名改成正式产品名。我本来觉得“改名”这种小事,打开配置文件改一行不就完了?结果真动手才发现,Flutter项目里“应用名称”根本不是一处配置,而是一整套散落在 Androi…

2026/9/14 0:06:41 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/13 16:51:11 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/12 18:29:34 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/14 5:45:14 阅读更多 →