~ knotless Search/
↑↓ move↵ open⇧↵ all results

johnandersen777.bsky.social/knotless

git that lives in your Atmosphere account

Forked from chadtmiller.com/knotless

0
0
262 lines · 7.8 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 stack from '@primer/octicons/build/svg/stack-16.svg?raw';
import pullClosed from '@primer/octicons/build/svg/git-pull-request-closed-16.svg?raw';
import pullDraft from '@primer/octicons/build/svg/git-pull-request-draft-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 tag from '@primer/octicons/build/svg/tag-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';
import repo from '@primer/octicons/build/svg/repo-16.svg?raw';
import repoLocked from '@primer/octicons/build/svg/repo-locked-16.svg?raw';
import passed from '@primer/octicons/build/svg/check-circle-fill-16.svg?raw';
import failed from '@primer/octicons/build/svg/x-circle-fill-16.svg?raw';
import running from '@primer/octicons/build/svg/dot-fill-16.svg?raw';
import skipped from '@primer/octicons/build/svg/skip-16.svg?raw';
import check from '@primer/octicons/build/svg/check-16.svg?raw';
import x from '@primer/octicons/build/svg/x-16.svg?raw';
import chevron from '@primer/octicons/build/svg/chevron-right-16.svg?raw';
import sun from '@primer/octicons/build/svg/sun-16.svg?raw';
import moon from '@primer/octicons/build/svg/moon-16.svg?raw';
import caret from '@primer/octicons/build/svg/triangle-down-16.svg?raw';
import queue from '@primer/octicons/build/svg/git-merge-queue-16.svg?raw';
import bot from '@primer/octicons/build/svg/dependabot-16.svg?raw';
import mention from '@primer/octicons/build/svg/mention-16.svg?raw';
import checks from '@primer/octicons/build/svg/checklist-16.svg?raw';
import search from '@primer/octicons/build/svg/search-16.svg?raw';
import clock from '@primer/octicons/build/svg/clock-16.svg?raw';
import star from '@primer/octicons/build/svg/star-16.svg?raw';
import starred from '@primer/octicons/build/svg/star-fill-16.svg?raw';
import people from '@primer/octicons/build/svg/people-16.svg?raw';
import organization from '@primer/octicons/build/svg/organization-16.svg?raw';
import eye from '@primer/octicons/build/svg/eye-16.svg?raw';
import eyeClosed from '@primer/octicons/build/svg/eye-closed-16.svg?raw';
import bell from '@primer/octicons/build/svg/bell-16.svg?raw';
import sync from '@primer/octicons/build/svg/sync-16.svg?raw';
import play from '@primer/octicons/build/svg/play-16.svg?raw';
import gear from '@primer/octicons/build/svg/gear-16.svg?raw';
import person from '@primer/octicons/build/svg/person-16.svg?raw';
import mail from '@primer/octicons/build/svg/mail-16.svg?raw';
import paintbrush from '@primer/octicons/build/svg/paintbrush-16.svg?raw';
import blocked from '@primer/octicons/build/svg/blocked-16.svg?raw';
import kebab from '@primer/octicons/build/svg/kebab-horizontal-16.svg?raw';
import sidebarCollapse from '@primer/octicons/build/svg/sidebar-collapse-16.svg?raw';
import sidebarExpand from '@primer/octicons/build/svg/sidebar-expand-16.svg?raw';
import lock from '@primer/octicons/build/svg/lock-16.svg?raw';
import archive from '@primer/octicons/build/svg/archive-16.svg?raw';
import smiley from '@primer/octicons/build/svg/smiley-16.svg?raw';
import plus from '@primer/octicons/build/svg/plus-16.svg?raw';
import personAdd from '@primer/octicons/build/svg/person-add-16.svg?raw';
import signOut from '@primer/octicons/build/svg/sign-out-16.svg?raw';
import shield from '@primer/octicons/build/svg/shield-16.svg?raw';
import book from '@primer/octicons/build/svg/book-16.svg?raw';
import pulse from '@primer/octicons/build/svg/pulse-16.svg?raw';
import link from '@primer/octicons/build/svg/link-16.svg?raw';
import globe from '@primer/octicons/build/svg/globe-16.svg?raw';
import key from '@primer/octicons/build/svg/key-16.svg?raw';
import pkg from '@primer/octicons/build/svg/package-16.svg?raw';
import workflow from '@primer/octicons/build/svg/workflow-16.svg?raw';
import container from '@primer/octicons/build/svg/container-16.svg?raw';
import versions from '@primer/octicons/build/svg/versions-16.svg?raw';
import undo from '@primer/octicons/build/svg/undo-16.svg?raw';
import history from '@primer/octicons/build/svg/history-16.svg?raw';
import download from '@primer/octicons/build/svg/download-16.svg?raw';
import fold from '@primer/octicons/build/svg/fold-16.svg?raw';
import foldDown from '@primer/octicons/build/svg/fold-down-16.svg?raw';
import foldUp from '@primer/octicons/build/svg/fold-up-16.svg?raw';
import unfold from '@primer/octicons/build/svg/unfold-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,
		pullDraft,
		issue,
		done,
		merge,
		dir,
		file,
		branch,
		tag,
		chat,
		fork,
		repo,
		repoLocked,
		passed,
		failed,
		running,
		skipped,
		queue,
		checks,
		check,
		x,
		chevron,
		caret,
		search,
		clock,
		star,
		starred,
		people,
		organization,
		eye,
		eyeClosed,
		bell,
		sync,
		play,
		gear,
		person,
		mail,
		paintbrush,
		blocked,
		kebab,
		lock,
		smiley,
		sidebarCollapse,
		sidebarExpand,
		plus,
		personAdd,
		signOut,
		shield,
		book,
		pulse,
		link,
		globe,
		key,
		package: pkg,
		workflow,
		container,
		versions,
		undo,
		history,
		archive,
		mention,
		sun,
		moon,
		download,
		stack,
		bot,
		fold,
		foldDown,
		foldUp,
		unfold
	}).map(([k, v]) => [k, inside(v)])
) as Record<
	| 'code'
	| 'commit'
	| 'pull'
	| 'pullClosed'
	| 'pullDraft'
	| 'issue'
	| 'done'
	| 'merge'
	| 'dir'
	| 'file'
	| 'branch'
	| 'tag'
	| 'chat'
	| 'fork'
	| 'repo'
	| 'repoLocked'
	| 'passed'
	| 'failed'
	| 'running'
	| 'skipped'
	| 'queue'
	| 'bot'
	| 'checks'
	| 'check'
	| 'x'
	| 'chevron'
	| 'caret'
	| 'search'
	| 'clock'
	| 'star'
	| 'starred'
	| 'people'
	| 'organization'
	| 'eye'
	| 'eyeClosed'
	| 'bell'
	| 'sync'
	| 'play'
	| 'gear'
	| 'person'
	| 'mail'
	| 'paintbrush'
	| 'blocked'
	| 'kebab'
	| 'lock'
	| 'smiley'
	| 'sidebarCollapse'
	| 'sidebarExpand'
	| 'plus'
	| 'personAdd'
	| 'signOut'
	| 'shield'
	| 'book'
	| 'pulse'
	| 'link'
	| 'globe'
	| 'key'
	| 'package'
	| 'workflow'
	| 'container'
	| 'versions'
	| 'undo'
	| 'history'
	| 'archive'
	| 'mention'
	| 'sun'
	| 'moon'
	| 'download'
	| 'stack'
	| 'fold'
	| 'foldDown'
	| 'foldUp'
	| 'unfold',
	string
>;

export type IconName = keyof typeof icons;

/** The icon for a pull or an issue in `state`, a `draft` or not. */
export function stateIcon(kind: string, state: string, draft = false): IconName {
	if (kind === 'pull')
		return state === 'merged'
			? 'merge'
			: state === 'closed'
				? 'pullClosed'
				: draft
					? 'pullDraft'
					: 'pull';
	return state === 'open' ? 'issue' : 'done';
}

/** The icon for a check in `status`, or for a set of them as `overall` puts it. */
export function checkIcon(status: string): IconName {
	if (status === 'success') return 'passed';
	if (status === 'running') return 'running';
	if (status === 'queued') return 'clock';
	if (status === 'skipped' || status === 'cancelled') return 'skipped';
	return 'failed';
}

/** The plain mark for a check in `status` beside a commit, as GitHub draws them there: a check or an x, not the filled circles. */
export function commitCheckIcon(status: string): IconName {
	if (status === 'success') return 'check';
	if (status === 'failure' || status === 'error') return 'x';
	return checkIcon(status);
}