图标
12 个 slug,以内联 SVG 的形式随源码编译进二进制:没有构建步骤,没有第二个来源,完全离线也能用。每个都由 tokens.css 自己的 .icon 规则按旁边的文字定尺寸,也就是你现在看到的这个大小。没人回应的 slug 什么也不渲染,所以打错字的代价是少一个图标,而不是一个中途死掉的页面。
这些名字是 rastrillo 自己的
其中 5 个(共 12 个)与 lucide.dev 发布的名称不同,所以连 Lucide 这一套本身也带着自己的一份对照表。凡是图标下最后一行没有重复它名字的,就是其中之一。好处是:不管应用脚手架选了哪一套,同一个调用都指同一个字形,而随附的 partial 从不因换套而改动。
kebab 和 menu 是最值得分清的一对:kebab 是那三个点,意思是「这一行还有更多操作」;menu 是那三条线,意思是导航。外壳收起时用的是 menu。
这些字形从哪里来
Lucide,按 ISC 许可随源码提供,钉在源码里而不是运行时去取。rastrillo new --icons=font-awesome 则会改为脚手架出 Font Awesome Free:那是应用可以取材的来源,而不是这个框架的依赖。这里没有任何东西去取它,而 Pro 是付费产品,rastrillo 无法替你随源码提供。
完整的一套在 lucide.dev (在新标签页中打开)。
框架没有提供的图标
rastrillo new 写出的 icons 包是归应用所有的源码:把字形加进去,然后像调用别的图标一样调用它。把它的 Icon 和 Assets 作为 icon 和 iconAssets 传给 ui.Pages,你自己那套就会排在框架自带那套前面。
Funcs: template.FuncMap{"icon": icons.Icon, "iconAssets": icons.Assets, "asset": assets.Path},
两个都要传,永远如此。只传 icon 的话,iconAssets 会留在框架的默认值上,cdn 或 js 交付方式会悄悄失效,不报任何错误。