chadtmiller.com/knotless

Git hosted in your atproto account, on any stock PDS, fast enough for agents.

git clone knotless://chadtmiller.com/knotless

needs the knotless git helper. set it up

main
29 lines · 1.6 KB Raw History
// 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 `<svg>`. */
const inside = (svg: string) => svg.replace(/^<svg[^>]*>|<\/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';
}