// Icons: GitHub's Octicons, at 16, as the package draws them. import code from '@primer/octicons/build/svg/code-16.svg?raw'; import commit from '@primer/octicons/build/svg/git-commit-16.svg?raw'; import pull from '@primer/octicons/build/svg/git-pull-request-16.svg?raw'; import pullClosed from '@primer/octicons/build/svg/git-pull-request-closed-16.svg?raw'; import issue from '@primer/octicons/build/svg/issue-opened-16.svg?raw'; import done from '@primer/octicons/build/svg/issue-closed-16.svg?raw'; import merge from '@primer/octicons/build/svg/git-merge-16.svg?raw'; import dir from '@primer/octicons/build/svg/file-directory-fill-16.svg?raw'; import file from '@primer/octicons/build/svg/file-16.svg?raw'; import branch from '@primer/octicons/build/svg/git-branch-16.svg?raw'; import chat from '@primer/octicons/build/svg/comment-16.svg?raw'; import fork from '@primer/octicons/build/svg/repo-forked-16.svg?raw'; /** What is drawn inside an icon's ``. */ const inside = (svg: string) => svg.replace(/^]*>|<\/svg>\s*$/g, ''); export const icons = Object.fromEntries( Object.entries({ code, commit, pull, pullClosed, issue, done, merge, dir, file, branch, chat, fork }).map(([k, v]) => [k, inside(v)]) ) as Record<'code' | 'commit' | 'pull' | 'pullClosed' | 'issue' | 'done' | 'merge' | 'dir' | 'file' | 'branch' | 'chat' | 'fork', string>; export type IconName = keyof typeof icons; /** The icon for a pull or an issue in `state`. */ export function stateIcon(kind: string, state: string): IconName { if (kind === 'pull') return state === 'merged' ? 'merge' : state === 'closed' ? 'pullClosed' : 'pull'; return state === 'open' ? 'issue' : 'done'; }