/** One searchable icon: `name` is matched against the user's query, `value` is what gets stored as profile/group `icon`. */ export interface PickerIcon { name: string; value: string; /** * Extra lowercase search terms matched in addition to `name`, but never * shown anywhere (dashboard-icons' upstream aliases, e.g. "claude"/ * "claude-ai" for the "anthropic" logo). `undefined` for every other * source — Font Awesome and Iconify names are the only term they offer. */ searchTerms?: string[]; /** * Alternate renderings of the very same logical icon — dashboard-icons' * `-light`/`-dark` palettes, occasionally alongside its own unsuffixed * "default" file (see src/dashboardIcons.PROVENANCE.md). `value` above * already holds the preferred one (`default` > `light` > `dark`) so a * plain click keeps working exactly like every other picker entry; * `variants` only adds the option to pick a *different* one instead. * `undefined`/single-entry when the icon has nothing else to offer — * every other source never sets this at all. */ variants?: { key: 'default' | 'light' | 'dark'; value: string; }[]; } /** * The two Iconify collections are 5 MB of JSON, and dashboard-icons.json * another ~12 MB on top — together the vast majority of the built package — * for a picker most sessions never open. Imported dynamically so webpack * emits them as separate chunks instead of inlining them in the bundle Tabby * parses at every startup; they still travel *inside* the package, which they * must: `@iconify-json/*` are devDependencies, absent from a user's install, * and dashboard-icons has no npm package at all (vendored, see above). * dashboard-icons.json gets its own chunk rather than joining "icon-sets": * a user who only ever searches Font Awesome/MDI/Tabler names never pays for * it, and vice versa is not true the other way around — every entry ends up * in the same merged, sorted list regardless of which chunk it came from. * * The chunks are fetched, decoded and sorted once, on the first icon search, * and the promise itself is the cache — concurrent callers share one load * rather than racing to build the list twice. */ export declare function loadIconEntries(): Promise;