Skip to content

Commit

Permalink
feat: support more icons, allow non-specified icons
Browse files Browse the repository at this point in the history
  • Loading branch information
Avivbens committed Jun 8, 2024
1 parent 9d79429 commit 69ff48a
Show file tree
Hide file tree
Showing 3 changed files with 86 additions and 5 deletions.
2 changes: 1 addition & 1 deletion docs/app/quick-start.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ module.exports = {}
## Build Your First Workflow

1. Create a Workflow via Alfred UI, or use an existing one
1. Open the Workflow directory, copy relevant files (icons, `info.plist`, `prefs.plist`, etc) to your project
1. Open the Workflow directory, copy relevant files (icons, `info.plist`, etc) to your project
1. In case your package declares `"type": "module"` in the `package.json` file, you'll
need to set both [`esmHelpers`](./setup/bundler-options#esmhelpers) and [`outputFormat`](./setup/bundler-options#outputformat) in order to use [`fast-alfred` runtime](./setup/runtime-explain)
1. Create a source directory for your Workflow scripts
Expand Down
88 changes: 84 additions & 4 deletions src/core/services/icon.service.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,92 @@
import type { StringWithAutocomplete } from '@models/string-with-autocomplete.modek'

const generateIcon = (name: string) =>
`/System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/${name}.icns` as const

const ICONS = {
info: generateIcon('ToolbarInfo'),
warning: generateIcon('AlertCautionIcon'),
warning: generateIcon('AlertCautionBadgeIcon'),
error: generateIcon('AlertStopIcon'),
note: generateIcon('AlertNoteIcon'),
alert: generateIcon('Actions'),
like: generateIcon('ToolbarFavoritesIcon'),
delete: generateIcon('ToolbarDeleteIcon'),

/**
*Special icons
*/
accounts: generateIcon('Accounts'),
actions: generateIcon('Actions'),
airDrop: generateIcon('AirDrop'),
locked: generateIcon('LockedIcon'),
unlock: generateIcon('UnlockedIcon'),
sync: generateIcon('Sync'),
general: generateIcon('General'),
usersFolder: generateIcon('UsersFolderIcon'),
unknownUser: generateIcon('UserUnknownIcon'),
genericFolder: generateIcon('GenericFolderIcon'),
utilitiesFolder: generateIcon('UtilitiesFolder'),
systemFolderIcor: generateIcon('SystemFolderIcor'),
genericDocument: generateIcon('GenericDocumentIcon'),
genericApplicationIcon: generateIcon('GenericApplicationIcon'),
problemReport: generateIcon('ProblemReport'),
unsupported: generateIcon('Unsupported'),
toolbarInfo: generateIcon('ToolbarInfo'),
trash: generateIcon('Trashicon'),
toolbarAdvanced: generateIcon('ToolbarAdvanced'),
toolbarCustomize: generateIcon('ToolbarCustomizeIcon'),
notifications: generateIcon('Notifications'),
executableBinary: generateIcon('ExecutableBinaryIcon'),
fileVault: generateIcon('FileVaultIcon'),
finder: generateIcon('FinderIcon'),

/**
* Side bar icons
*/
sidebarAirDrop: generateIcon('SidebarAirDrop'),
sidebarAirportDisk: generateIcon('SidebarAirportDisk'),
sidebarAirportExpress: generateIcon('SidebarAirportExpress'),
sidebarAirportExtreme: generateIcon('SidebarAirportExtreme'),
sidebarAirportExtremeTower: generateIcon('SidebarAirportExtremeTower'),
sidebarAllMyFiles: generateIcon('SidebarAllMyFiles'),
sidebarApplicationsFolder: generateIcon('SidebarApplicationsFolder'),
sidebarBonjour: generateIcon('SidebarBonjour'),
sidebarBurnFolder: generateIcon('SidebarBurnFolder'),
sidebarDesktopFolder: generateIcon('SidebarDesktopFolder'),
sidebarDisplay: generateIcon('SidebarDisplay'),
sidebarDocumentsFolder: generateIcon('SidebarDocumentsFolder'),
sidebarDownloadsFolder: generateIcon('SidebarDownloadsFolder'),
sidebarDropBoxFolder: generateIcon('SidebarDropBoxFolder'),
sidebarExternalDisk: generateIcon('SidebarExternalDisk'),
sidebarGenericFile: generateIcon('SidebarGenericFile'),
sidebarGenericFolder: generateIcon('SidebarGenericFolder'),
sidebarHomeFolder: generateIcon('SidebarHomeFolder'),
sidebariCloud: generateIcon('SidebariCloud'),
sidebariDisk: generateIcon('SidebariDisk'),
sidebariMac: generateIcon('SidebariMac'),
sidebarInternalDisk: generateIcon('SidebarInternalDisk'),
sidebariPad: generateIcon('SidebariPad'),
sidebariPhone: generateIcon('SidebariPhone'),
sidebariPodTouch: generateIcon('SidebariPodTouch'),
sidebarLaptop: generateIcon('SidebarLaptop'),
sidebarMacMini: generateIcon('SidebarMacMini'),
sidebarMacPro: generateIcon('SidebarMacPro'),
sidebarMacProCylinder: generateIcon('SidebarMacProCylinder'),
sidebarMoviesFolder: generateIcon('SidebarMoviesFolder'),
sidebarMusicFolder: generateIcon('SidebarMusicFolder'),
sidebarNetwork: generateIcon('SidebarNetwork'),
sidebarOpticalDisk: generateIcon('SidebarOpticalDisk'),
sidebarPC: generateIcon('SidebarPC'),
sidebarPicturesFolder: generateIcon('SidebarPicturesFolder'),
sidebarPrefs: generateIcon('SidebarPrefs'),
sidebarRecents: generateIcon('SidebarRecents'),
sidebarRemovableDisk: generateIcon('SidebarRemovableDisk'),
sidebarServerDrive: generateIcon('SidebarServerDrive'),
sidebarSmartFolder: generateIcon('SidebarSmartFolder'),
sidebarTimeCapsule: generateIcon('SidebarTimeCapsule'),
sidebarTimeMachine: generateIcon('SidebarTimeMachine'),
sidebarUtilitiesFolder: generateIcon('SidebarUtilitiesFolder'),
sidebarXserve: generateIcon('SidebarXserve'),
} as const

/**
Expand All @@ -31,10 +110,11 @@ const ICONS = {
* ```
*/
export class IconService {
public getIcon(name: keyof typeof ICONS): string {
const icon = ICONS[name]
public getIcon(name: StringWithAutocomplete<keyof typeof ICONS>): string {
const icon = ICONS[name as keyof typeof ICONS]
if (!icon) {
throw new Error(`Icon ${name} not found`)
const dyamicIcon = generateIcon(name)
return dyamicIcon
}

return icon
Expand Down
1 change: 1 addition & 0 deletions src/models/string-with-autocomplete.modek.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export type StringWithAutocomplete<T> = T | (string & Record<never, never>)

0 comments on commit 69ff48a

Please sign in to comment.