johnandersen777.bsky.social/knotless
git that lives in your Atmosphere account
Forked from chadtmiller.com/knotless
0
0
// 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);
}