diff --git a/admin/src/definitions/DefinitionsTab.test.tsx b/admin/src/definitions/DefinitionsTab.test.tsx index aede057..34a272d 100644 --- a/admin/src/definitions/DefinitionsTab.test.tsx +++ b/admin/src/definitions/DefinitionsTab.test.tsx @@ -1355,7 +1355,7 @@ describe("DefinitionsTab Font Awesome and emoji icons", () => { fireEvent.click(within(s).getByRole("button", { name: "Morning" })); } - it("ships the curated Font Awesome subset, each drawn as a filled glyph", () => { + it("ships the curated Font Awesome quick picks, each drawn as a filled glyph", () => { expect(FA_DEFINITION_ICONS.length).toBeGreaterThan(0); for (const entry of FA_DEFINITION_ICONS) { expect(entry.kind).toBe("fa"); diff --git a/admin/src/definitions/definitionIcons.tsx b/admin/src/definitions/definitionIcons.tsx index b326b05..ce82ddf 100644 --- a/admin/src/definitions/definitionIcons.tsx +++ b/admin/src/definitions/definitionIcons.tsx @@ -1,11 +1,14 @@ /** * The icons a definition's `icon` may name (ADMIN-SPEC §3.3): the curated - * Lucide set, the curated Font Awesome Free solid subset, or an emoji. The - * names, labels and path data come from the shared icon registry - * (`src/icons/registry.generated.ts`, generated from - * `tools/icons/curated-icons.json`) — no CDN, no runtime fetch. The stored - * value is namespaced — `lucide:`, `fa:` or `emoji:` — - * and a legacy bare `` still names the same Lucide entry. + * Lucide set, any icon in the full Font Awesome Free Solid set, or an emoji. + * The Font Awesome quick picks (`FA_DEFINITION_ICONS`) are only a curated + * shortcut list; `fa:` resolves against the full set + * (`FA_SOLID_ICONS`). The names, labels and path data come from the shared + * icon registry (`src/icons/registry.generated.ts`, generated by + * `tools/icons/generate.mjs` from `tools/icons/curated-icons.json` and the + * installed Free Solid package) — no CDN, no runtime fetch. The stored value + * is namespaced — `lucide:`, `fa:` or `emoji:` — and a + * legacy bare `` still names the same Lucide entry. */ import { GlyphSvg } from "../icons/GlyphSvg"; import { @@ -105,8 +108,9 @@ export function emojiIconText(value: string | null): string { } /** - * The curated glyph (Lucide or Font Awesome) an icon value resolves to via - * the shared parser; emoji, unknown and null values give null. + * The glyph an icon value resolves to via the shared parser: a curated + * Lucide entry or any Font Awesome Free Solid icon (quick pick or not); + * emoji, unknown and null values give null. */ export function findDefinitionIcon(value: string | null): DefinitionIconEntry | null { const icon = resolveIcon(value); diff --git a/admin/src/icons/registry.test.ts b/admin/src/icons/registry.test.ts index acc972f..d4aef43 100644 --- a/admin/src/icons/registry.test.ts +++ b/admin/src/icons/registry.test.ts @@ -157,7 +157,7 @@ describe("offline bundling", () => { } }); - it("no bundled source imports an icon package — only the curated generated data ships", () => { + it("no bundled source imports an icon package — only the generated registry data ships", () => { const sources = [join(REPO_ROOT, "admin", "src"), join(REPO_ROOT, "frontend", "src")] .flatMap(filesUnder) .filter((path) => /\.(ts|tsx)$/.test(path) && !path.endsWith(".test.ts") && !path.endsWith(".test.tsx")); diff --git a/frontend/src/icons/render.ts b/frontend/src/icons/render.ts index 49f3dad..3f273b4 100644 --- a/frontend/src/icons/render.ts +++ b/frontend/src/icons/render.ts @@ -1,7 +1,8 @@ /** * Lit rendering for the shared icon registry (`registry.generated.ts`, - * generated from tools/icons/curated-icons.json). The glyph path data is - * bundled — no CDN and no runtime fetch. + * generated by tools/icons/generate.mjs: the curated Lucide set plus the full + * Font Awesome Free Solid set). The glyph path data is bundled — no CDN and + * no runtime fetch. */ import { html, svg, type TemplateResult } from "lit";