├── Images └── screenshot.PNG ├── .gitignore ├── .xcodesamplecode.plist ├── Tests └── SymbolPickerTests │ └── SymbolPickerTests.swift ├── Sources └── SymbolPicker │ ├── Window.swift │ ├── Resources │ ├── Monterey │ │ ├── Monterey-Time.txt │ │ ├── Monterey-Shapes.txt │ │ ├── Monterey-Nature.txt │ │ ├── Monterey-Text Formatting.txt │ │ ├── Monterey-Transportation.txt │ │ ├── Monterey-Health.txt │ │ ├── Monterey-Math.txt │ │ ├── Monterey-Keyboard.txt │ │ ├── Monterey-Weather.txt │ │ ├── Monterey-Media.txt │ │ ├── Monterey-Connectivity.txt │ │ ├── Monterey-Editing.txt │ │ ├── Monterey-Gaming.txt │ │ ├── Monterey-Communication.txt │ │ ├── Monterey-Commerce.txt │ │ ├── Monterey-Human.txt │ │ └── Monterey-Devices.txt │ ├── Ventura │ │ ├── Ventura-Shapes.txt │ │ ├── Ventura-Time.txt │ │ ├── Ventura-Math.txt │ │ ├── Ventura-Transportation.txt │ │ ├── Ventura-Text Formatting.txt │ │ ├── Ventura-Keyboard.txt │ │ ├── Ventura-Health.txt │ │ ├── Ventura-Media.txt │ │ ├── Ventura-Connectivity.txt │ │ ├── Ventura-Editing.txt │ │ ├── Ventura-Accessibility.txt │ │ ├── Ventura-Gaming.txt │ │ ├── Ventura-Weather.txt │ │ ├── Ventura-Privacy & Security.txt │ │ ├── Ventura-Fitness.txt │ │ ├── Ventura-Camera & Photos.txt │ │ ├── Ventura-Communication.txt │ │ ├── Ventura-Commerce.txt │ │ ├── Ventura-Nature.txt │ │ ├── Ventura-Home.txt │ │ ├── Ventura-Human.txt │ │ └── Ventura-Devices.txt │ ├── zh-Hans.lproj │ │ └── Localizable.strings │ ├── zh-Hant.lproj │ │ └── Localizable.strings │ ├── Sonoma │ │ ├── Sonoma-Time.txt │ │ ├── Sonoma-Math.txt │ │ ├── Sonoma-Shapes.txt │ │ ├── Sonoma-Text Formatting.txt │ │ ├── Sonoma-Keyboard.txt │ │ ├── Sonoma-Health.txt │ │ ├── Sonoma-Transportation.txt │ │ ├── Sonoma-Media.txt │ │ ├── Sonoma-Connectivity.txt │ │ ├── Sonoma-Maps.txt │ │ ├── Sonoma-Editing.txt │ │ ├── Sonoma-Accessibility.txt │ │ ├── Sonoma-Privacy & Security.txt │ │ ├── Sonoma-Weather.txt │ │ ├── Sonoma-Fitness.txt │ │ ├── Sonoma-Communication.txt │ │ ├── Sonoma-Camera & Photos.txt │ │ ├── Sonoma-Gaming.txt │ │ ├── Sonoma-Nature.txt │ │ ├── Sonoma-Commerce.txt │ │ └── Sonoma-Home.txt │ └── en.lproj │ │ └── Localizable.strings │ ├── extensions.swift │ ├── Sidebar │ ├── Node.swift │ └── SidebarViewController.swift │ ├── CollectionView.swift │ ├── SymbolPicker.swift │ ├── FieldEditor.swift │ ├── SplitViewController │ └── SplitViewController.swift │ ├── WindowController.swift │ ├── SymbolCollection │ ├── SymbolView.swift │ ├── Symbol.swift │ └── SymbolCollectionViewController.swift │ └── SymbolPickerView.swift ├── License ├── Package.swift └── README.md /Images/screenshot.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/francisfeng/SymbolPicker/HEAD/Images/screenshot.PNG -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | /.build 3 | /Packages 4 | /*.xcodeproj 5 | xcuserdata/ 6 | DerivedData/ 7 | .swiftpm/ 8 | IDEWorkspaceChecks.plist -------------------------------------------------------------------------------- /.xcodesamplecode.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /Tests/SymbolPickerTests/SymbolPickerTests.swift: -------------------------------------------------------------------------------- 1 | import XCTest 2 | @testable import SymbolPicker 3 | 4 | final class SymbolPickerTests: XCTestCase { 5 | func testExample() { 6 | // XCTAssertNotNil(SymbolPicker.makeNewWindow()) 7 | // XCTAssertEqual(SymbolPicker().text, "Hello, World!") 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /Sources/SymbolPicker/Window.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Window.swift 3 | // 4 | // 5 | // Created by Francis on 2021/7/27. 6 | // 7 | 8 | import Cocoa 9 | 10 | class Window: NSWindow { 11 | open override func keyDown(with event: NSEvent) { 12 | // 53 is the key code for Esc 13 | if event.keyCode == 53 { 14 | self.sheetParent?.endSheet(self, returnCode: .OK) 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /Sources/SymbolPicker/Resources/Monterey/Monterey-Time.txt: -------------------------------------------------------------------------------- 1 | clock 2 | clock.fill 3 | clock.circle 4 | clock.circle.fill 5 | clock.badge.checkmark 6 | clock.badge.checkmark.fill 7 | clock.badge.exclamationmark 8 | clock.badge.exclamationmark.fill 9 | deskclock 10 | deskclock.fill 11 | alarm 12 | alarm.fill 13 | stopwatch 14 | stopwatch.fill 15 | timer 16 | timer.square 17 | clock.arrow.circlepath 18 | clock.arrow.2.circlepath 19 | hourglass 20 | hourglass.circle 21 | hourglass.circle.fill 22 | hourglass.badge.plus 23 | hourglass.bottomhalf.filled 24 | hourglass.tophalf.filled 25 | -------------------------------------------------------------------------------- /Sources/SymbolPicker/extensions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // extensions.swift 3 | // SymbolPicker 4 | // 5 | // Created by Francis Feng on 2021/5/4. 6 | // 7 | 8 | import Cocoa 9 | 10 | extension String { 11 | var localized: String { 12 | return NSLocalizedString(self, tableName: nil, bundle: .module, value: "", comment: "") 13 | } 14 | } 15 | 16 | extension NSImage { 17 | convenience init?(_ name: String) { 18 | self.init(systemSymbolName: name, accessibilityDescription: nil) 19 | } 20 | } 21 | 22 | extension Date { 23 | static func - (lhs: Date, rhs: Date) -> TimeInterval { 24 | return lhs.timeIntervalSinceReferenceDate - rhs.timeIntervalSinceReferenceDate 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /Sources/SymbolPicker/Resources/Monterey/Monterey-Shapes.txt: -------------------------------------------------------------------------------- 1 | seal 2 | seal.fill 3 | circle 4 | circle.fill 5 | capsule 6 | capsule.fill 7 | capsule.portrait 8 | capsule.portrait.fill 9 | oval 10 | oval.fill 11 | oval.portrait 12 | oval.portrait.fill 13 | square 14 | square.fill 15 | app 16 | app.fill 17 | rectangle 18 | rectangle.fill 19 | rectangle.portrait 20 | rectangle.portrait.fill 21 | triangle 22 | triangle.fill 23 | diamond 24 | diamond.fill 25 | octagon 26 | octagon.fill 27 | hexagon 28 | hexagon.fill 29 | pentagon 30 | pentagon.fill 31 | rhombus 32 | rhombus.fill 33 | shield 34 | shield.fill 35 | rectangle.roundedtop 36 | rectangle.roundedtop.fill 37 | rectangle.roundedbottom 38 | rectangle.roundedbottom.fill 39 | -------------------------------------------------------------------------------- /Sources/SymbolPicker/Resources/Ventura/Ventura-Shapes.txt: -------------------------------------------------------------------------------- 1 | circle 2 | circle.fill 3 | square 4 | square.fill 5 | app 6 | app.fill 7 | rectangle 8 | rectangle.fill 9 | rectangle.portrait 10 | rectangle.portrait.fill 11 | capsule 12 | capsule.fill 13 | capsule.portrait 14 | capsule.portrait.fill 15 | oval 16 | oval.fill 17 | oval.portrait 18 | oval.portrait.fill 19 | triangle 20 | triangle.fill 21 | diamond 22 | diamond.fill 23 | octagon 24 | octagon.fill 25 | hexagon 26 | hexagon.fill 27 | pentagon 28 | pentagon.fill 29 | seal 30 | seal.fill 31 | rhombus 32 | rhombus.fill 33 | shield 34 | shield.fill 35 | viewfinder 36 | rectangle.roundedtop 37 | rectangle.roundedtop.fill 38 | rectangle.roundedbottom 39 | rectangle.roundedbottom.fill -------------------------------------------------------------------------------- /Sources/SymbolPicker/Sidebar/Node.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Node.swift 3 | // SymbolPicker 4 | // 5 | // Created by Francis Feng on 2021/5/4. 6 | // 7 | 8 | import AppKit 9 | 10 | @objc class Node: NSObject, Codable { 11 | 12 | @objc var identifier: String = "" 13 | @objc let symbolName: String 14 | @objc let value: String 15 | let category: Symbol.Category 16 | 17 | @objc dynamic var children = [Node]() 18 | 19 | @objc dynamic var count: Int { 20 | return children.count 21 | } 22 | 23 | init(_ value: String, symbolName: String, category: Symbol.Category) { 24 | self.value = value 25 | self.symbolName = symbolName 26 | self.category = category 27 | } 28 | 29 | @objc dynamic var isLeaf: Bool { 30 | return children.isEmpty 31 | } 32 | } 33 | 34 | -------------------------------------------------------------------------------- /Sources/SymbolPicker/Resources/Ventura/Ventura-Time.txt: -------------------------------------------------------------------------------- 1 | clock 2 | clock.fill 3 | clock.circle 4 | clock.circle.fill 5 | clock.badge 6 | clock.badge.fill 7 | clock.badge.checkmark 8 | clock.badge.checkmark.fill 9 | clock.badge.xmark 10 | clock.badge.xmark.fill 11 | clock.badge.questionmark 12 | clock.badge.questionmark.fill 13 | clock.badge.exclamationmark 14 | clock.badge.exclamationmark.fill 15 | deskclock 16 | deskclock.fill 17 | alarm 18 | alarm.fill 19 | alarm.waves.left.and.right 20 | alarm.waves.left.and.right.fill 21 | stopwatch 22 | stopwatch.fill 23 | timer 24 | timer.circle 25 | timer.circle.fill 26 | timer.square 27 | clock.arrow.circlepath 28 | clock.arrow.2.circlepath 29 | hourglass 30 | hourglass.circle 31 | hourglass.circle.fill 32 | hourglass.badge.plus 33 | hourglass.bottomhalf.filled 34 | hourglass.tophalf.filled -------------------------------------------------------------------------------- /Sources/SymbolPicker/CollectionView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CollectionView.swift 3 | // 4 | // 5 | // Created by Francis on 2022/7/5. 6 | // 7 | 8 | import Cocoa 9 | 10 | class CollectionView: NSCollectionView { 11 | // When user click the space area between icons in collection view, 12 | // CollectionView becomes the first responder. Thus the keyDown event 13 | // we override in Window can’t be called. 14 | // 15 | // To make “Esc to Close Sheet” work, we need to implement the same logic 16 | // in CollectionView. 17 | open override func keyDown(with event: NSEvent) { 18 | // 53 is the key code for Esc 19 | if event.keyCode == 53, 20 | let window = self.window { 21 | window.sheetParent?.endSheet(window, returnCode: .OK) 22 | } else { 23 | super.keyDown(with: event) 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /Sources/SymbolPicker/Resources/Monterey/Monterey-Nature.txt: -------------------------------------------------------------------------------- 1 | globe.americas 2 | globe.americas.fill 3 | globe.europe.africa 4 | globe.europe.africa.fill 5 | globe.asia.australia 6 | globe.asia.australia.fill 7 | flame 8 | flame.fill 9 | flame.circle 10 | flame.circle.fill 11 | drop 12 | drop.fill 13 | drop.circle 14 | drop.circle.fill 15 | drop.triangle 16 | drop.triangle.fill 17 | bolt 18 | bolt.fill 19 | bolt.circle 20 | bolt.circle.fill 21 | bolt.square 22 | bolt.square.fill 23 | bolt.slash 24 | bolt.slash.fill 25 | bolt.slash.circle 26 | bolt.slash.circle.fill 27 | allergens 28 | hare 29 | hare.fill 30 | tortoise 31 | tortoise.fill 32 | pawprint 33 | pawprint.fill 34 | pawprint.circle 35 | pawprint.circle.fill 36 | ant 37 | ant.fill 38 | ant.circle 39 | ant.circle.fill 40 | ladybug 41 | ladybug.fill 42 | leaf 43 | leaf.fill 44 | leaf.circle 45 | leaf.circle.fill 46 | leaf.arrow.triangle.circlepath 47 | -------------------------------------------------------------------------------- /Sources/SymbolPicker/Resources/zh-Hans.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* 2 | Localizable.strings 3 | SymbolPicker 4 | 5 | Created by Francis Feng on 2021/5/4. 6 | 7 | */ 8 | // SF Symbols 9 | "SF Symbols" = "SF符号"; 10 | "Category" = "类别"; 11 | "All" = "全部"; 12 | "Communication" = "通信"; 13 | "Weather" = "天气"; 14 | "Maps" = "地图"; 15 | "Objects & Tools" = "物体与工具"; 16 | "Devices" = "设备"; 17 | "Camera & Photos" = "相机与照片"; 18 | "Gaming" = "游戏"; 19 | "Connectivity" = "连接状态"; 20 | "Transportation" = "交通"; 21 | "Automotive" = "汽车"; 22 | "Accessibility" = "辅助功能"; 23 | "Privacy & Security" = "隐私与安全"; 24 | "Human" = "人"; 25 | "Home" = "家庭"; 26 | "Fitness" = "健身"; 27 | "Nature" = "自然"; 28 | "Editing" = "编辑"; 29 | "Text Formatting" = "文本格式化"; 30 | "Media" = "媒体"; 31 | "Keyboard" = "键盘"; 32 | "Commerce" = "商业"; 33 | "Time" = "时间"; 34 | "Health" = "健康"; 35 | "Shapes" = "形状"; 36 | "Arrows" = "箭头"; 37 | "Indices" = "索引"; 38 | "Math" = "数学"; 39 | -------------------------------------------------------------------------------- /Sources/SymbolPicker/Resources/zh-Hant.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* 2 | Localizable.strings 3 | SymbolPicker 4 | 5 | Created by Francis Feng on 2021/5/4. 6 | 7 | */ 8 | // SF Symbols 9 | "SF Symbols" = "SF Symbols"; 10 | "Category" = "類別"; 11 | "All" = "全部"; 12 | "Communication" = "通訊"; 13 | "Weather" = "天氣"; 14 | "Maps" = "地圖"; 15 | "Objects & Tools" = "物品與工具"; 16 | "Devices" = "裝置"; 17 | "Camera & Photos" = "相機與照片"; 18 | "Gaming" = "Gaming"; 19 | "Connectivity" = "連線"; 20 | "Transportation" = "交通"; 21 | "Automotive" = "機動車"; 22 | "Accessibility" = "輔助使用"; 23 | "Privacy & Security" = "隱私與安全"; 24 | "Human" = "人"; 25 | "Home" = "住家"; 26 | "Fitness" = "健身"; 27 | "Nature" = "自然"; 28 | "Editing" = "編輯"; 29 | "Text Formatting" = "文字格式化"; 30 | "Media" = "媒體"; 31 | "Keyboard" = "鍵盤"; 32 | "Commerce" = "商業"; 33 | "Time" = "時間"; 34 | "Health" = "健康"; 35 | "Shapes" = "形狀"; 36 | "Arrows" = "箭頭"; 37 | "Indices" = "索引"; 38 | "Math" = "數學"; 39 | -------------------------------------------------------------------------------- /Sources/SymbolPicker/Resources/Monterey/Monterey-Text Formatting.txt: -------------------------------------------------------------------------------- 1 | signature 2 | paragraphsign 3 | list.dash 4 | list.bullet 5 | list.bullet.circle 6 | list.bullet.circle.fill 7 | list.triangle 8 | list.bullet.indent 9 | list.number 10 | list.star 11 | increase.indent 12 | decrease.indent 13 | decrease.quotelevel 14 | increase.quotelevel 15 | text.alignleft 16 | text.aligncenter 17 | text.alignright 18 | text.justify 19 | text.justifyleft 20 | text.justifyright 21 | text.redaction 22 | character 23 | textformat.size.smaller 24 | textformat.size.larger 25 | textformat.size 26 | textformat 27 | textformat.alt 28 | textformat.superscript 29 | textformat.subscript 30 | abc 31 | textformat.abc 32 | textformat.abc.dottedunderline 33 | bold 34 | italic 35 | underline 36 | strikethrough 37 | shadow 38 | bold.italic.underline 39 | bold.underline 40 | character.cursor.ibeam 41 | textformat.123 42 | 123.rectangle 43 | 123.rectangle.fill 44 | character.textbox 45 | a.magnify 46 | -------------------------------------------------------------------------------- /Sources/SymbolPicker/Resources/Sonoma/Sonoma-Time.txt: -------------------------------------------------------------------------------- 1 | clock 2 | clock.fill 3 | clock.circle 4 | clock.circle.fill 5 | clock.badge 6 | clock.badge.fill 7 | clock.badge.checkmark 8 | clock.badge.checkmark.fill 9 | clock.badge.xmark 10 | clock.badge.xmark.fill 11 | clock.badge.questionmark 12 | clock.badge.questionmark.fill 13 | clock.badge.exclamationmark 14 | clock.badge.exclamationmark.fill 15 | deskclock 16 | deskclock.fill 17 | alarm 18 | alarm.fill 19 | alarm.waves.left.and.right 20 | alarm.waves.left.and.right.fill 21 | stopwatch 22 | stopwatch.fill 23 | gauge.with.needle 24 | gauge.with.needle.fill 25 | timer 26 | timer.circle 27 | timer.circle.fill 28 | timer.square 29 | arrow.circlepath 30 | clock.arrow.circlepath 31 | exclamationmark.arrow.circlepath 32 | clock.arrow.2.circlepath 33 | hourglass 34 | hourglass.circle 35 | hourglass.circle.fill 36 | hourglass.badge.plus 37 | hourglass.and.lock 38 | hourglass.bottomhalf.filled 39 | hourglass.tophalf.filled 40 | -------------------------------------------------------------------------------- /Sources/SymbolPicker/SymbolPicker.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SymbolPicker.swift 3 | // 4 | // 5 | // Created by Francis Feng on 2021/7/26. 6 | // 7 | 8 | import Cocoa 9 | 10 | open class SymbolPicker { 11 | var text = "Hello World" 12 | 13 | public static func windowController(symbol: String, color: NSColor, delegate: SymbolPickerDelegate, title: String? = nil, showColorPickerItem: Bool = true) -> NSWindowController? { 14 | let storyboard = NSStoryboard.init(name: "SymbolPicker", bundle: .module) 15 | if let controller = storyboard.instantiateController(withIdentifier: .init("main")) as? WindowController { 16 | controller.configureCurrentItem(symbol: symbol, color: color) 17 | controller.toggleColorPanelButton(!showColorPickerItem) 18 | controller.delegate = delegate 19 | if let title = title { 20 | controller.updateWindowTitle(title) 21 | } 22 | return controller 23 | } 24 | return nil 25 | } 26 | 27 | } 28 | -------------------------------------------------------------------------------- /Sources/SymbolPicker/Resources/Monterey/Monterey-Transportation.txt: -------------------------------------------------------------------------------- 1 | airplane 2 | airplane.circle 3 | airplane.circle.fill 4 | airplane.arrival 5 | airplane.departure 6 | car 7 | car.fill 8 | car.circle 9 | car.circle.fill 10 | bolt.car 11 | bolt.car.fill 12 | bolt.car.circle 13 | bolt.car.circle.fill 14 | car.2 15 | car.2.fill 16 | bus 17 | bus.fill 18 | bus.doubledecker 19 | bus.doubledecker.fill 20 | tram 21 | tram.fill 22 | tram.circle 23 | tram.circle.fill 24 | tram.fill.tunnel 25 | cablecar 26 | cablecar.fill 27 | ferry 28 | ferry.fill 29 | car.ferry 30 | car.ferry.fill 31 | train.side.front.car 32 | train.side.middle.car 33 | train.side.rear.car 34 | bicycle 35 | bicycle.circle 36 | bicycle.circle.fill 37 | scooter 38 | fuelpump 39 | fuelpump.fill 40 | fuelpump.circle 41 | fuelpump.circle.fill 42 | figure.walk 43 | figure.walk.circle 44 | figure.walk.circle.fill 45 | figure.walk.diamond 46 | figure.walk.diamond.fill 47 | figure.wave 48 | figure.wave.circle 49 | figure.wave.circle.fill 50 | -------------------------------------------------------------------------------- /Sources/SymbolPicker/Resources/Monterey/Monterey-Health.txt: -------------------------------------------------------------------------------- 1 | heart.text.square 2 | heart.text.square.fill 3 | heart 4 | heart.fill 5 | heart.circle 6 | heart.circle.fill 7 | bolt.heart 8 | bolt.heart.fill 9 | eye 10 | eye.fill 11 | eye.circle 12 | eye.circle.fill 13 | eye.square 14 | eye.square.fill 15 | eye.trianglebadge.exclamationmark 16 | eye.trianglebadge.exclamationmark.fill 17 | facemask 18 | facemask.fill 19 | brain.head.profile 20 | brain 21 | bandage 22 | bandage.fill 23 | cross.case 24 | cross.case.fill 25 | bed.double 26 | bed.double.fill 27 | bed.double.circle 28 | bed.double.circle.fill 29 | allergens 30 | pills 31 | pills.fill 32 | pills.circle 33 | pills.circle.fill 34 | cross 35 | cross.fill 36 | cross.circle 37 | cross.circle.fill 38 | ear 39 | ear.badge.checkmark 40 | ear.trianglebadge.exclamationmark 41 | ear.and.waveform 42 | ear.fill 43 | waveform.path.ecg 44 | waveform.path.ecg.rectangle 45 | waveform.path.ecg.rectangle.fill 46 | staroflife 47 | staroflife.fill 48 | staroflife.circle 49 | staroflife.circle.fill 50 | -------------------------------------------------------------------------------- /Sources/SymbolPicker/Resources/en.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* 2 | Localizable.strings 3 | SymbolPicker 4 | 5 | Created by Francis Feng on 2021/5/4. 6 | 7 | */ 8 | // SF Symbols 9 | "SF Symbols" = "SF Symbols"; 10 | "Category" = "Categories"; 11 | "All" = "All"; 12 | "Communication" = "Communication"; 13 | "Weather" = "Weather"; 14 | "Maps" = "Maps"; 15 | "Objects & Tools" = "Objects & Tools"; 16 | "Devices" = "Devices"; 17 | "Camera & Photos" = "Camera & Photos"; 18 | "Gaming" = "Gaming"; 19 | "Connectivity" = "Connectivity"; 20 | "Transportation" = "Transportation"; 21 | "Automotive" = "Automotive"; 22 | "Accessibility" = "Accessibility"; 23 | "Privacy & Security" = "Privacy & Security"; 24 | "Human" = "Human"; 25 | "Home" = "Home"; 26 | "Nature" = "Nature"; 27 | "Fitness" = "Fitness"; 28 | "Editing" = "Editing"; 29 | "TextFormatting" = "Text Formatting"; 30 | "Media" = "Media"; 31 | "Keyboard" = "Keyboard"; 32 | "Commerce" = "Commerce"; 33 | "Time" = "Time"; 34 | "Health" = "Health"; 35 | "Shapes" = "Shapes"; 36 | "Arrows" = "Arrows"; 37 | "Indices" = "Indices"; 38 | "Math" = "Math"; 39 | -------------------------------------------------------------------------------- /License: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) Francis Feng 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 6 | 7 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 8 | 9 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 10 | -------------------------------------------------------------------------------- /Sources/SymbolPicker/Resources/Monterey/Monterey-Math.txt: -------------------------------------------------------------------------------- 1 | sum 2 | percent 3 | function 4 | plus 5 | plus.circle 6 | plus.circle.fill 7 | plus.square 8 | plus.square.fill 9 | plus.rectangle 10 | plus.rectangle.fill 11 | minus 12 | minus.circle 13 | minus.circle.fill 14 | minus.square 15 | minus.square.fill 16 | minus.rectangle 17 | minus.rectangle.fill 18 | plusminus 19 | plusminus.circle 20 | plusminus.circle.fill 21 | plus.forwardslash.minus 22 | minus.forwardslash.plus 23 | multiply 24 | multiply.circle 25 | multiply.circle.fill 26 | multiply.square 27 | multiply.square.fill 28 | divide 29 | divide.circle 30 | divide.circle.fill 31 | divide.square 32 | divide.square.fill 33 | equal 34 | equal.circle 35 | equal.circle.fill 36 | equal.square 37 | equal.square.fill 38 | lessthan 39 | lessthan.circle 40 | lessthan.circle.fill 41 | lessthan.square 42 | lessthan.square.fill 43 | greaterthan 44 | greaterthan.circle 45 | greaterthan.circle.fill 46 | greaterthan.square 47 | greaterthan.square.fill 48 | number 49 | number.circle 50 | number.circle.fill 51 | number.square 52 | number.square.fill 53 | x.squareroot 54 | -------------------------------------------------------------------------------- /Sources/SymbolPicker/Resources/Sonoma/Sonoma-Math.txt: -------------------------------------------------------------------------------- 1 | x.squareroot 2 | angle 3 | compass.drawing 4 | sum 5 | percent 6 | function 7 | plus 8 | plus.circle 9 | plus.circle.fill 10 | plus.square 11 | plus.square.fill 12 | plus.rectangle 13 | plus.rectangle.fill 14 | minus 15 | minus.circle 16 | minus.circle.fill 17 | minus.square 18 | minus.square.fill 19 | minus.rectangle 20 | minus.rectangle.fill 21 | plusminus 22 | plusminus.circle 23 | plusminus.circle.fill 24 | plus.forwardslash.minus 25 | minus.forwardslash.plus 26 | multiply 27 | multiply.circle 28 | multiply.circle.fill 29 | multiply.square 30 | multiply.square.fill 31 | divide 32 | divide.circle 33 | divide.circle.fill 34 | divide.square 35 | divide.square.fill 36 | equal 37 | equal.circle 38 | equal.circle.fill 39 | equal.square 40 | equal.square.fill 41 | lessthan 42 | lessthan.circle 43 | lessthan.circle.fill 44 | lessthan.square 45 | lessthan.square.fill 46 | greaterthan 47 | greaterthan.circle 48 | greaterthan.circle.fill 49 | greaterthan.square 50 | greaterthan.square.fill 51 | number 52 | number.circle 53 | number.circle.fill 54 | number.square 55 | number.square.fill 56 | -------------------------------------------------------------------------------- /Sources/SymbolPicker/Resources/Ventura/Ventura-Math.txt: -------------------------------------------------------------------------------- 1 | x.squareroot 2 | angle 3 | compass.drawing 4 | sum 5 | percent 6 | function 7 | plus 8 | plus.circle 9 | plus.circle.fill 10 | plus.square 11 | plus.square.fill 12 | plus.rectangle 13 | plus.rectangle.fill 14 | minus 15 | minus.circle 16 | minus.circle.fill 17 | minus.square 18 | minus.square.fill 19 | minus.rectangle 20 | minus.rectangle.fill 21 | plusminus 22 | plusminus.circle 23 | plusminus.circle.fill 24 | plus.forwardslash.minus 25 | minus.forwardslash.plus 26 | multiply 27 | multiply.circle 28 | multiply.circle.fill 29 | multiply.square 30 | multiply.square.fill 31 | divide 32 | divide.circle 33 | divide.circle.fill 34 | divide.square 35 | divide.square.fill 36 | equal 37 | equal.circle 38 | equal.circle.fill 39 | equal.square 40 | equal.square.fill 41 | lessthan 42 | lessthan.circle 43 | lessthan.circle.fill 44 | lessthan.square 45 | lessthan.square.fill 46 | greaterthan 47 | greaterthan.circle 48 | greaterthan.circle.fill 49 | greaterthan.square 50 | greaterthan.square.fill 51 | number 52 | number.circle 53 | number.circle.fill 54 | number.square 55 | number.square.fill -------------------------------------------------------------------------------- /Sources/SymbolPicker/Resources/Sonoma/Sonoma-Shapes.txt: -------------------------------------------------------------------------------- 1 | circle 2 | circle.fill 3 | square 4 | square.fill 5 | app 6 | app.fill 7 | rectangle 8 | rectangle.fill 9 | rectangle.portrait 10 | rectangle.portrait.fill 11 | capsule 12 | capsule.fill 13 | capsule.portrait 14 | capsule.portrait.fill 15 | oval 16 | oval.fill 17 | oval.portrait 18 | oval.portrait.fill 19 | triangle 20 | triangle.fill 21 | triangleshape 22 | triangleshape.fill 23 | diamond 24 | diamond.fill 25 | octagon 26 | octagon.fill 27 | hexagon 28 | hexagon.fill 29 | pentagon 30 | pentagon.fill 31 | seal 32 | seal.fill 33 | rhombus 34 | rhombus.fill 35 | shield 36 | shield.fill 37 | viewfinder 38 | button.horizontal 39 | button.horizontal.fill 40 | button.roundedtop.horizontal 41 | button.roundedtop.horizontal.fill 42 | button.roundedbottom.horizontal 43 | button.roundedbottom.horizontal.fill 44 | button.angledtop.vertical.left 45 | button.angledtop.vertical.left.fill 46 | button.angledtop.vertical.right 47 | button.angledtop.vertical.right.fill 48 | button.angledbottom.horizontal.left 49 | button.angledbottom.horizontal.left.fill 50 | button.angledbottom.horizontal.right 51 | button.angledbottom.horizontal.right.fill 52 | -------------------------------------------------------------------------------- /Sources/SymbolPicker/Resources/Ventura/Ventura-Transportation.txt: -------------------------------------------------------------------------------- 1 | figure.walk 2 | figure.walk.circle 3 | figure.walk.circle.fill 4 | figure.walk.diamond 5 | figure.walk.diamond.fill 6 | figure.wave 7 | figure.wave.circle 8 | figure.wave.circle.fill 9 | airplane 10 | airplane.circle 11 | airplane.circle.fill 12 | airplane.arrival 13 | airplane.departure 14 | car 15 | car.fill 16 | car.circle 17 | car.circle.fill 18 | car.front.waves.up 19 | car.front.waves.up.fill 20 | car.rear 21 | car.rear.fill 22 | bolt.car 23 | bolt.car.fill 24 | bolt.car.circle 25 | bolt.car.circle.fill 26 | car.2 27 | car.2.fill 28 | bus 29 | bus.fill 30 | bus.doubledecker 31 | bus.doubledecker.fill 32 | tram 33 | tram.fill 34 | tram.circle 35 | tram.circle.fill 36 | tram.fill.tunnel 37 | cablecar 38 | cablecar.fill 39 | ferry 40 | ferry.fill 41 | car.ferry 42 | car.ferry.fill 43 | train.side.front.car 44 | train.side.middle.car 45 | train.side.rear.car 46 | box.truck 47 | box.truck.fill 48 | box.truck.badge.clock 49 | box.truck.badge.clock.fill 50 | bicycle 51 | bicycle.circle 52 | bicycle.circle.fill 53 | scooter 54 | sailboat 55 | sailboat.fill 56 | sailboat.circle 57 | sailboat.circle.fill 58 | fuelpump 59 | fuelpump.fill 60 | fuelpump.circle 61 | fuelpump.circle.fill -------------------------------------------------------------------------------- /Sources/SymbolPicker/Resources/Ventura/Ventura-Text Formatting.txt: -------------------------------------------------------------------------------- 1 | fleuron 2 | fleuron.fill 3 | signature 4 | list.bullet 5 | list.bullet.circle 6 | list.bullet.circle.fill 7 | list.dash 8 | list.triangle 9 | list.bullet.indent 10 | list.number 11 | list.star 12 | increase.indent 13 | decrease.indent 14 | decrease.quotelevel 15 | increase.quotelevel 16 | quotelevel 17 | text.alignleft 18 | text.aligncenter 19 | text.alignright 20 | text.justify 21 | text.justify.left 22 | text.justify.right 23 | text.justify.leading 24 | text.justify.trailing 25 | text.redaction 26 | text.word.spacing 27 | arrow.up.and.down.text.horizontal 28 | arrow.left.and.right.text.vertical 29 | character 30 | textformat.size.smaller 31 | textformat.size.larger 32 | textformat.size 33 | textformat 34 | textformat.alt 35 | textformat.superscript 36 | textformat.subscript 37 | abc 38 | textformat.abc 39 | textformat.abc.dottedunderline 40 | bold 41 | italic 42 | underline 43 | strikethrough 44 | shadow 45 | bold.italic.underline 46 | bold.underline 47 | character.cursor.ibeam 48 | textformat.123 49 | 123.rectangle 50 | 123.rectangle.fill 51 | textformat.12 52 | character.textbox 53 | numbersign 54 | character.sutton 55 | character.duployan 56 | character.phonetic 57 | a.magnify 58 | paragraphsign -------------------------------------------------------------------------------- /Sources/SymbolPicker/Resources/Monterey/Monterey-Keyboard.txt: -------------------------------------------------------------------------------- 1 | command 2 | command.circle 3 | command.circle.fill 4 | command.square 5 | command.square.fill 6 | option 7 | alt 8 | clear 9 | clear.fill 10 | delete.left 11 | delete.left.fill 12 | delete.backward 13 | delete.backward.fill 14 | delete.right 15 | delete.right.fill 16 | delete.forward 17 | delete.forward.fill 18 | shift 19 | shift.fill 20 | capslock 21 | capslock.fill 22 | escape 23 | power 24 | power.circle 25 | power.circle.fill 26 | power.dotted 27 | globe 28 | globe.badge.chevron.backward 29 | sun.min 30 | sun.min.fill 31 | sun.max 32 | sun.max.fill 33 | sun.max.circle 34 | sun.max.circle.fill 35 | light.min 36 | light.max 37 | keyboard 38 | keyboard.fill 39 | keyboard.badge.ellipsis 40 | keyboard.chevron.compact.down 41 | keyboard.chevron.compact.left 42 | keyboard.onehanded.left 43 | keyboard.onehanded.right 44 | eject 45 | eject.fill 46 | eject.circle 47 | eject.circle.fill 48 | mount 49 | mount.fill 50 | control 51 | projective 52 | arrow.up.to.line 53 | arrow.up.to.line.compact 54 | arrow.down.to.line 55 | arrow.down.to.line.compact 56 | arrow.left.to.line 57 | arrow.left.to.line.compact 58 | arrow.backward.to.line 59 | arrow.right.to.line 60 | arrow.right.to.line.compact 61 | arrow.forward.to.line 62 | -------------------------------------------------------------------------------- /Sources/SymbolPicker/Resources/Sonoma/Sonoma-Text Formatting.txt: -------------------------------------------------------------------------------- 1 | fleuron 2 | fleuron.fill 3 | signature 4 | list.bullet 5 | list.bullet.circle 6 | list.bullet.circle.fill 7 | list.dash 8 | list.triangle 9 | list.bullet.indent 10 | list.number 11 | list.star 12 | increase.indent 13 | decrease.indent 14 | decrease.quotelevel 15 | increase.quotelevel 16 | quotelevel 17 | text.alignleft 18 | text.aligncenter 19 | text.alignright 20 | text.justify 21 | text.justify.left 22 | text.justify.right 23 | text.justify.leading 24 | text.justify.trailing 25 | text.redaction 26 | text.word.spacing 27 | arrow.up.and.down.text.horizontal 28 | arrow.left.and.right.text.vertical 29 | character 30 | textformat.size.smaller 31 | textformat.size.larger 32 | textformat.size 33 | textformat 34 | textformat.alt 35 | textformat.superscript 36 | textformat.subscript 37 | abc 38 | textformat.abc 39 | textformat.abc.dottedunderline 40 | kashida.arabic 41 | bold 42 | italic 43 | underline 44 | strikethrough 45 | shadow 46 | bold.italic.underline 47 | bold.underline 48 | character.cursor.ibeam 49 | textformat.123 50 | 123.rectangle 51 | 123.rectangle.fill 52 | textformat.12 53 | character.textbox 54 | numbersign 55 | character.sutton 56 | character.duployan 57 | character.phonetic 58 | character.magnify 59 | paragraphsign 60 | -------------------------------------------------------------------------------- /Package.swift: -------------------------------------------------------------------------------- 1 | // swift-tools-version:5.5 2 | // The swift-tools-version declares the minimum version of Swift required to build this package. 3 | 4 | import PackageDescription 5 | 6 | let package = Package( 7 | name: "SymbolPicker", 8 | defaultLocalization: "en", 9 | platforms: [ 10 | .macOS(.v12), 11 | ], 12 | products: [ 13 | // Products define the executables and libraries a package produces, and make them visible to other packages. 14 | .library( 15 | name: "SymbolPicker", 16 | targets: ["SymbolPicker"]), 17 | ], 18 | dependencies: [ 19 | // Dependencies declare other packages that this package depends on. 20 | // .package(url: /* package url */, from: "1.0.0"), 21 | ], 22 | targets: [ 23 | // Targets are the basic building blocks of a package. A target can define a module or a test suite. 24 | // Targets can depend on other targets in this package, and on products in packages this package depends on. 25 | .target( 26 | name: "SymbolPicker", 27 | dependencies: [], 28 | resources: [ 29 | .process("Resources/Monterey"), 30 | .process("Resources/Ventura"), 31 | .process("Resources/Sonoma"), 32 | ]), 33 | .testTarget( 34 | name: "SymbolPickerTests", 35 | dependencies: ["SymbolPicker"]), 36 | ] 37 | ) 38 | -------------------------------------------------------------------------------- /Sources/SymbolPicker/FieldEditor.swift: -------------------------------------------------------------------------------- 1 | // 2 | // FieldEditor.swift 3 | // 4 | // 5 | // Created by Francis Feng on 2022/7/19. 6 | // 7 | 8 | import Cocoa 9 | 10 | class FieldEditor: NSTextView { 11 | var caretWidth: CGFloat = 2 12 | var caretColor = NSColor.labelColor.withAlphaComponent(0.7) 13 | 14 | private lazy var radius = caretWidth / 2 15 | private lazy var displayAdjustment = caretWidth - 1 16 | 17 | override var isFieldEditor: Bool { 18 | get { 19 | return true 20 | } 21 | set {} 22 | } 23 | 24 | // Source: https://gist.github.com/importRyan/669999190f3b4db8e031c5971e7fa7ed 25 | open override func drawInsertionPoint(in rect: NSRect, color: NSColor, turnedOn flag: Bool) { 26 | 27 | var rect = rect 28 | rect.size.width = caretWidth 29 | 30 | let path = NSBezierPath(roundedRect: rect, 31 | xRadius: radius, 32 | yRadius: radius) 33 | path.setClip() 34 | 35 | super.drawInsertionPoint(in: rect, 36 | color: caretColor, 37 | turnedOn: flag) 38 | } 39 | 40 | open override func setNeedsDisplay(_ rect: NSRect, avoidAdditionalLayout flag: Bool) { 41 | var rect = rect 42 | rect.size.width += displayAdjustment 43 | super.setNeedsDisplay(rect, avoidAdditionalLayout: flag) 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /Sources/SymbolPicker/Resources/Monterey/Monterey-Weather.txt: -------------------------------------------------------------------------------- 1 | sun.min 2 | sun.min.fill 3 | sun.max 4 | sun.max.fill 5 | sun.max.circle 6 | sun.max.circle.fill 7 | sunrise 8 | sunrise.fill 9 | sunset 10 | sunset.fill 11 | sun.and.horizon 12 | sun.and.horizon.fill 13 | sun.dust 14 | sun.dust.fill 15 | sun.haze 16 | sun.haze.fill 17 | moon 18 | moon.fill 19 | moon.circle 20 | moon.circle.fill 21 | sparkles 22 | moon.stars 23 | moon.stars.fill 24 | cloud 25 | cloud.fill 26 | cloud.drizzle 27 | cloud.drizzle.fill 28 | cloud.rain 29 | cloud.rain.fill 30 | cloud.heavyrain 31 | cloud.heavyrain.fill 32 | cloud.fog 33 | cloud.fog.fill 34 | cloud.hail 35 | cloud.hail.fill 36 | cloud.snow 37 | cloud.snow.fill 38 | cloud.sleet 39 | cloud.sleet.fill 40 | cloud.bolt 41 | cloud.bolt.fill 42 | cloud.bolt.rain 43 | cloud.bolt.rain.fill 44 | cloud.sun 45 | cloud.sun.fill 46 | cloud.sun.rain 47 | cloud.sun.rain.fill 48 | cloud.sun.bolt 49 | cloud.sun.bolt.fill 50 | cloud.moon 51 | cloud.moon.fill 52 | cloud.moon.rain 53 | cloud.moon.rain.fill 54 | cloud.moon.bolt 55 | cloud.moon.bolt.fill 56 | smoke 57 | smoke.fill 58 | wind 59 | wind.snow 60 | snowflake 61 | snowflake.circle 62 | snowflake.circle.fill 63 | tornado 64 | tropicalstorm 65 | hurricane 66 | thermometer.sun 67 | thermometer.sun.fill 68 | thermometer.snowflake 69 | thermometer 70 | aqi.low 71 | aqi.medium 72 | aqi.high 73 | humidity 74 | humidity.fill 75 | -------------------------------------------------------------------------------- /Sources/SymbolPicker/SplitViewController/SplitViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SplitViewController.swift 3 | // SymbolPicker 4 | // 5 | // Created by Francis Feng on 2021/7/26. 6 | // 7 | 8 | import Cocoa 9 | 10 | class SplitViewController: NSSplitViewController, NSCollectionViewDelegate { 11 | 12 | weak var symbolCollectionViewController: SymbolCollectionViewController? 13 | 14 | weak var pickerDelegate: SymbolPickerDelegate? { 15 | return symbolCollectionViewController?.pickerDelegate 16 | } 17 | 18 | var isColorChanged: Bool { 19 | return symbolCollectionViewController?.isColorChanged ?? false 20 | } 21 | 22 | var symbolsName: [String] { 23 | return symbolCollectionViewController!.symbolsName 24 | } 25 | 26 | func collectionView(_ collectionView: NSCollectionView, didSelectItemsAt indexPaths: Set) { 27 | symbolCollectionViewController?.currentSelected = indexPaths 28 | 29 | guard let indexPath = indexPaths.first else { return } 30 | guard let window = view.window else { return } 31 | 32 | let symbol = symbolsName[indexPath.item] 33 | if isColorChanged { 34 | pickerDelegate?.symbolPicker(symbol, color: NSColorPanel.shared.color) 35 | } else { 36 | pickerDelegate?.symbolPicker(symbol, color: nil) 37 | } 38 | window.sheetParent?.endSheet(window, returnCode: .OK) 39 | } 40 | 41 | } 42 | -------------------------------------------------------------------------------- /Sources/SymbolPicker/Resources/Monterey/Monterey-Media.txt: -------------------------------------------------------------------------------- 1 | play 2 | play.fill 3 | play.circle 4 | play.circle.fill 5 | play.square 6 | play.square.fill 7 | play.rectangle 8 | play.rectangle.fill 9 | play.slash 10 | play.slash.fill 11 | pause 12 | pause.fill 13 | pause.circle 14 | pause.circle.fill 15 | pause.rectangle 16 | pause.rectangle.fill 17 | stop 18 | stop.fill 19 | stop.circle 20 | stop.circle.fill 21 | record.circle 22 | record.circle.fill 23 | playpause 24 | playpause.fill 25 | backward 26 | backward.fill 27 | backward.circle 28 | backward.circle.fill 29 | forward 30 | forward.fill 31 | forward.circle 32 | forward.circle.fill 33 | backward.end 34 | backward.end.fill 35 | forward.end 36 | forward.end.fill 37 | backward.end.alt 38 | backward.end.alt.fill 39 | forward.end.alt 40 | forward.end.alt.fill 41 | backward.frame 42 | backward.frame.fill 43 | forward.frame 44 | forward.frame.fill 45 | shuffle 46 | shuffle.circle 47 | shuffle.circle.fill 48 | repeat 49 | repeat.circle 50 | repeat.circle.fill 51 | repeat.1 52 | repeat.1.circle 53 | repeat.1.circle.fill 54 | infinity 55 | infinity.circle 56 | infinity.circle.fill 57 | arrow.rectanglepath 58 | goforward 59 | gobackward 60 | goforward.5 61 | gobackward.5 62 | goforward.10 63 | gobackward.10 64 | goforward.15 65 | gobackward.15 66 | goforward.30 67 | gobackward.30 68 | goforward.45 69 | gobackward.45 70 | goforward.60 71 | gobackward.60 72 | goforward.75 73 | gobackward.75 74 | goforward.90 75 | gobackward.90 76 | goforward.plus 77 | gobackward.minus 78 | text.insert 79 | text.append 80 | -------------------------------------------------------------------------------- /Sources/SymbolPicker/Resources/Ventura/Ventura-Keyboard.txt: -------------------------------------------------------------------------------- 1 | command 2 | command.circle 3 | command.circle.fill 4 | command.square 5 | command.square.fill 6 | space 7 | option 8 | alt 9 | control 10 | projective 11 | chevron.left.to.line 12 | chevron.right.to.line 13 | chevron.backward.to.line 14 | chevron.forward.to.line 15 | escape 16 | light.min 17 | light.max 18 | power 19 | power.circle 20 | power.circle.fill 21 | power.dotted 22 | clear 23 | clear.fill 24 | delete.left 25 | delete.left.fill 26 | delete.backward 27 | delete.backward.fill 28 | delete.right 29 | delete.right.fill 30 | delete.forward 31 | delete.forward.fill 32 | shift 33 | shift.fill 34 | capslock 35 | capslock.fill 36 | eject 37 | eject.fill 38 | eject.circle 39 | eject.circle.fill 40 | mount 41 | mount.fill 42 | keyboard 43 | keyboard.fill 44 | keyboard.badge.ellipsis 45 | keyboard.badge.ellipsis.fill 46 | keyboard.badge.eye 47 | keyboard.badge.eye.fill 48 | keyboard.chevron.compact.down 49 | keyboard.chevron.compact.down.fill 50 | keyboard.chevron.compact.left 51 | keyboard.chevron.compact.left.fill 52 | keyboard.onehanded.left 53 | keyboard.onehanded.left.fill 54 | keyboard.onehanded.right 55 | keyboard.onehanded.right.fill 56 | globe 57 | globe.badge.chevron.backward 58 | sun.min 59 | sun.min.fill 60 | sun.max 61 | sun.max.fill 62 | sun.max.circle 63 | sun.max.circle.fill 64 | arrow.up.to.line 65 | arrow.up.to.line.compact 66 | arrow.down.to.line 67 | arrow.down.to.line.compact 68 | arrow.left.to.line 69 | arrow.left.to.line.compact 70 | arrow.backward.to.line 71 | arrow.right.to.line 72 | arrow.right.to.line.compact 73 | arrow.forward.to.line -------------------------------------------------------------------------------- /Sources/SymbolPicker/Resources/Sonoma/Sonoma-Keyboard.txt: -------------------------------------------------------------------------------- 1 | command 2 | command.circle 3 | command.circle.fill 4 | command.square 5 | command.square.fill 6 | space 7 | option 8 | alt 9 | control 10 | projective 11 | chevron.left.to.line 12 | chevron.right.to.line 13 | chevron.backward.to.line 14 | chevron.forward.to.line 15 | escape 16 | light.min 17 | light.max 18 | power 19 | power.circle 20 | power.circle.fill 21 | power.dotted 22 | clear 23 | clear.fill 24 | delete.left 25 | delete.left.fill 26 | delete.backward 27 | delete.backward.fill 28 | delete.right 29 | delete.right.fill 30 | delete.forward 31 | delete.forward.fill 32 | shift 33 | shift.fill 34 | capslock 35 | capslock.fill 36 | eject 37 | eject.fill 38 | eject.circle 39 | eject.circle.fill 40 | mount 41 | mount.fill 42 | keyboard 43 | keyboard.fill 44 | keyboard.badge.ellipsis 45 | keyboard.badge.ellipsis.fill 46 | keyboard.badge.eye 47 | keyboard.badge.eye.fill 48 | keyboard.chevron.compact.down 49 | keyboard.chevron.compact.down.fill 50 | keyboard.chevron.compact.left 51 | keyboard.chevron.compact.left.fill 52 | keyboard.onehanded.left 53 | keyboard.onehanded.left.fill 54 | keyboard.onehanded.right 55 | keyboard.onehanded.right.fill 56 | globe 57 | globe.badge.chevron.backward 58 | sun.min 59 | sun.min.fill 60 | sun.max 61 | sun.max.fill 62 | sun.max.circle 63 | sun.max.circle.fill 64 | arrow.up.to.line 65 | arrow.up.to.line.compact 66 | arrow.down.to.line 67 | arrow.down.to.line.compact 68 | arrow.left.to.line 69 | arrow.left.to.line.compact 70 | arrow.backward.to.line 71 | arrow.right.to.line 72 | arrow.right.to.line.compact 73 | arrow.forward.to.line 74 | -------------------------------------------------------------------------------- /Sources/SymbolPicker/Resources/Ventura/Ventura-Health.txt: -------------------------------------------------------------------------------- 1 | list.bullet.clipboard 2 | list.bullet.clipboard.fill 3 | list.clipboard 4 | list.clipboard.fill 5 | heart 6 | heart.fill 7 | heart.circle 8 | heart.circle.fill 9 | bolt.heart 10 | bolt.heart.fill 11 | cross.case 12 | cross.case.fill 13 | cross.case.circle 14 | cross.case.circle.fill 15 | bed.double 16 | bed.double.fill 17 | bed.double.circle 18 | bed.double.circle.fill 19 | lungs 20 | lungs.fill 21 | allergens 22 | allergens.fill 23 | microbe 24 | microbe.fill 25 | microbe.circle 26 | microbe.circle.fill 27 | bubbles.and.sparkles 28 | bubbles.and.sparkles.fill 29 | medical.thermometer 30 | medical.thermometer.fill 31 | bandage 32 | bandage.fill 33 | syringe 34 | syringe.fill 35 | facemask 36 | facemask.fill 37 | pill 38 | pill.fill 39 | pill.circle 40 | pill.circle.fill 41 | pills 42 | pills.fill 43 | pills.circle 44 | pills.circle.fill 45 | cross 46 | cross.fill 47 | cross.circle 48 | cross.circle.fill 49 | ivfluid.bag 50 | ivfluid.bag.fill 51 | cross.vial 52 | cross.vial.fill 53 | staroflife 54 | staroflife.fill 55 | staroflife.circle 56 | staroflife.circle.fill 57 | heart.text.square 58 | heart.text.square.fill 59 | eye 60 | eye.fill 61 | eye.circle 62 | eye.circle.fill 63 | eye.square 64 | eye.square.fill 65 | eye.slash 66 | eye.slash.fill 67 | eye.trianglebadge.exclamationmark 68 | eye.trianglebadge.exclamationmark.fill 69 | brain.head.profile 70 | brain 71 | ear 72 | ear.badge.checkmark 73 | ear.trianglebadge.exclamationmark 74 | ear.and.waveform 75 | ear.fill 76 | vial.viewfinder 77 | waveform.path.ecg 78 | waveform.path.ecg.rectangle 79 | waveform.path.ecg.rectangle.fill -------------------------------------------------------------------------------- /Sources/SymbolPicker/Resources/Sonoma/Sonoma-Health.txt: -------------------------------------------------------------------------------- 1 | list.bullet.clipboard 2 | list.bullet.clipboard.fill 3 | list.clipboard 4 | list.clipboard.fill 5 | pencil.and.list.clipboard 6 | heart 7 | heart.fill 8 | heart.circle 9 | heart.circle.fill 10 | bolt.heart 11 | bolt.heart.fill 12 | stethoscope 13 | stethoscope.circle 14 | stethoscope.circle.fill 15 | cross.case 16 | cross.case.fill 17 | cross.case.circle 18 | cross.case.circle.fill 19 | bed.double 20 | bed.double.fill 21 | bed.double.circle 22 | bed.double.circle.fill 23 | lungs 24 | lungs.fill 25 | allergens 26 | allergens.fill 27 | microbe 28 | microbe.fill 29 | microbe.circle 30 | microbe.circle.fill 31 | bubbles.and.sparkles 32 | bubbles.and.sparkles.fill 33 | medical.thermometer 34 | medical.thermometer.fill 35 | bandage 36 | bandage.fill 37 | syringe 38 | syringe.fill 39 | facemask 40 | facemask.fill 41 | pill 42 | pill.fill 43 | pill.circle 44 | pill.circle.fill 45 | pills 46 | pills.fill 47 | pills.circle 48 | pills.circle.fill 49 | cross 50 | cross.fill 51 | cross.circle 52 | cross.circle.fill 53 | ivfluid.bag 54 | ivfluid.bag.fill 55 | cross.vial 56 | cross.vial.fill 57 | staroflife 58 | staroflife.fill 59 | staroflife.circle 60 | staroflife.circle.fill 61 | heart.text.square 62 | heart.text.square.fill 63 | eye 64 | eye.fill 65 | eye.circle 66 | eye.circle.fill 67 | eye.square 68 | eye.square.fill 69 | eye.slash 70 | eye.slash.fill 71 | eye.trianglebadge.exclamationmark 72 | eye.trianglebadge.exclamationmark.fill 73 | brain.head.profile 74 | brain.head.profile.fill 75 | brain.filled.head.profile 76 | brain 77 | brain.fill 78 | ear 79 | ear.fill 80 | ear.badge.checkmark 81 | ear.trianglebadge.exclamationmark 82 | ear.badge.waveform 83 | vial.viewfinder 84 | waveform.path.ecg 85 | waveform.path.ecg.rectangle 86 | waveform.path.ecg.rectangle.fill 87 | -------------------------------------------------------------------------------- /Sources/SymbolPicker/Resources/Ventura/Ventura-Media.txt: -------------------------------------------------------------------------------- 1 | play 2 | play.fill 3 | play.circle 4 | play.circle.fill 5 | play.square 6 | play.square.fill 7 | play.rectangle 8 | play.rectangle.fill 9 | play.square.stack 10 | play.square.stack.fill 11 | play.slash 12 | play.slash.fill 13 | pause 14 | pause.fill 15 | pause.circle 16 | pause.circle.fill 17 | pause.rectangle 18 | pause.rectangle.fill 19 | stop 20 | stop.fill 21 | stop.circle 22 | stop.circle.fill 23 | record.circle 24 | record.circle.fill 25 | playpause 26 | playpause.fill 27 | playpause.circle 28 | playpause.circle.fill 29 | backward 30 | backward.fill 31 | backward.circle 32 | backward.circle.fill 33 | forward 34 | forward.fill 35 | forward.circle 36 | forward.circle.fill 37 | backward.end 38 | backward.end.fill 39 | backward.end.circle 40 | backward.end.circle.fill 41 | forward.end 42 | forward.end.fill 43 | forward.end.circle 44 | forward.end.circle.fill 45 | backward.end.alt 46 | backward.end.alt.fill 47 | forward.end.alt 48 | forward.end.alt.fill 49 | backward.frame 50 | backward.frame.fill 51 | forward.frame 52 | forward.frame.fill 53 | shuffle 54 | shuffle.circle 55 | shuffle.circle.fill 56 | repeat 57 | repeat.circle 58 | repeat.circle.fill 59 | repeat.1 60 | repeat.1.circle 61 | repeat.1.circle.fill 62 | infinity 63 | infinity.circle 64 | infinity.circle.fill 65 | arrow.rectanglepath 66 | goforward 67 | gobackward 68 | goforward.5 69 | gobackward.5 70 | goforward.10 71 | gobackward.10 72 | goforward.15 73 | gobackward.15 74 | goforward.30 75 | gobackward.30 76 | goforward.45 77 | gobackward.45 78 | goforward.60 79 | gobackward.60 80 | goforward.75 81 | gobackward.75 82 | goforward.90 83 | gobackward.90 84 | goforward.plus 85 | gobackward.minus 86 | text.insert 87 | text.append 88 | text.line.first.and.arrowtriangle.forward 89 | text.line.last.and.arrowtriangle.forward -------------------------------------------------------------------------------- /Sources/SymbolPicker/Resources/Monterey/Monterey-Connectivity.txt: -------------------------------------------------------------------------------- 1 | externaldrive.connected.to.line.below 2 | externaldrive.connected.to.line.below.fill 3 | personalhotspot 4 | personalhotspot.circle 5 | personalhotspot.circle.fill 6 | network 7 | network.badge.shield.half.filled 8 | bolt.horizontal 9 | bolt.horizontal.fill 10 | bolt.horizontal.circle 11 | bolt.horizontal.circle.fill 12 | icloud 13 | icloud.fill 14 | icloud.circle 15 | icloud.circle.fill 16 | icloud.square 17 | icloud.square.fill 18 | icloud.slash 19 | icloud.slash.fill 20 | exclamationmark.icloud 21 | exclamationmark.icloud.fill 22 | checkmark.icloud 23 | checkmark.icloud.fill 24 | xmark.icloud 25 | xmark.icloud.fill 26 | link.icloud 27 | link.icloud.fill 28 | bolt.horizontal.icloud 29 | bolt.horizontal.icloud.fill 30 | person.icloud 31 | person.icloud.fill 32 | lock.icloud 33 | lock.icloud.fill 34 | key.icloud 35 | key.icloud.fill 36 | arrow.clockwise.icloud 37 | arrow.clockwise.icloud.fill 38 | arrow.counterclockwise.icloud 39 | arrow.counterclockwise.icloud.fill 40 | icloud.and.arrow.down 41 | icloud.and.arrow.down.fill 42 | icloud.and.arrow.up 43 | icloud.and.arrow.up.fill 44 | wifi 45 | wifi.circle 46 | wifi.circle.fill 47 | wifi.square 48 | wifi.square.fill 49 | wifi.slash 50 | wifi.exclamationmark 51 | dot.radiowaves.left.and.right 52 | dot.radiowaves.right 53 | dot.radiowaves.forward 54 | wave.3.left 55 | wave.3.left.circle 56 | wave.3.left.circle.fill 57 | wave.3.backward 58 | wave.3.backward.circle 59 | wave.3.backward.circle.fill 60 | wave.3.right 61 | wave.3.right.circle 62 | wave.3.right.circle.fill 63 | wave.3.forward 64 | wave.3.forward.circle 65 | wave.3.forward.circle.fill 66 | dot.radiowaves.up.forward 67 | antenna.radiowaves.left.and.right 68 | antenna.radiowaves.left.and.right.slash 69 | antenna.radiowaves.left.and.right.circle 70 | antenna.radiowaves.left.and.right.circle.fill 71 | bonjour 72 | -------------------------------------------------------------------------------- /Sources/SymbolPicker/Resources/Sonoma/Sonoma-Transportation.txt: -------------------------------------------------------------------------------- 1 | figure.walk 2 | figure.walk.circle 3 | figure.walk.circle.fill 4 | figure.walk.diamond 5 | figure.walk.diamond.fill 6 | figure.wave 7 | figure.wave.circle 8 | figure.wave.circle.fill 9 | airplane 10 | airplane.circle 11 | airplane.circle.fill 12 | airplane.arrival 13 | airplane.departure 14 | car 15 | car.fill 16 | car.circle 17 | car.circle.fill 18 | car.front.waves.up 19 | car.front.waves.up.fill 20 | car.front.waves.down 21 | car.front.waves.down.fill 22 | car.rear 23 | car.rear.fill 24 | bolt.car 25 | bolt.car.fill 26 | bolt.car.circle 27 | bolt.car.circle.fill 28 | car.2 29 | car.2.fill 30 | bus 31 | bus.fill 32 | bus.doubledecker 33 | bus.doubledecker.fill 34 | tram 35 | tram.fill 36 | tram.circle 37 | tram.circle.fill 38 | tram.fill.tunnel 39 | cablecar 40 | cablecar.fill 41 | lightrail 42 | lightrail.fill 43 | ferry 44 | ferry.fill 45 | car.ferry 46 | car.ferry.fill 47 | sailboat 48 | sailboat.fill 49 | sailboat.circle 50 | sailboat.circle.fill 51 | train.side.front.car 52 | train.side.middle.car 53 | train.side.rear.car 54 | truck.box 55 | truck.box.fill 56 | truck.box.badge.clock 57 | truck.box.badge.clock.fill 58 | bicycle 59 | bicycle.circle 60 | bicycle.circle.fill 61 | scooter 62 | fuelpump 63 | fuelpump.fill 64 | fuelpump.circle 65 | fuelpump.circle.fill 66 | fuelpump.slash 67 | fuelpump.slash.fill 68 | fuelpump.exclamationmark 69 | fuelpump.exclamationmark.fill 70 | fuelpump.arrowtriangle.left 71 | fuelpump.arrowtriangle.left.fill 72 | fuelpump.arrowtriangle.right 73 | fuelpump.arrowtriangle.right.fill 74 | ev.charger 75 | ev.charger.fill 76 | ev.charger.slash 77 | ev.charger.slash.fill 78 | ev.charger.exclamationmark 79 | ev.charger.exclamationmark.fill 80 | ev.charger.arrowtriangle.left 81 | ev.charger.arrowtriangle.left.fill 82 | ev.charger.arrowtriangle.right 83 | ev.charger.arrowtriangle.right.fill 84 | -------------------------------------------------------------------------------- /Sources/SymbolPicker/Resources/Ventura/Ventura-Connectivity.txt: -------------------------------------------------------------------------------- 1 | externaldrive.connected.to.line.below 2 | externaldrive.connected.to.line.below.fill 3 | personalhotspot 4 | personalhotspot.circle 5 | personalhotspot.circle.fill 6 | network 7 | network.badge.shield.half.filled 8 | bolt.horizontal 9 | bolt.horizontal.fill 10 | bolt.horizontal.circle 11 | bolt.horizontal.circle.fill 12 | icloud 13 | icloud.fill 14 | icloud.circle 15 | icloud.circle.fill 16 | icloud.square 17 | icloud.square.fill 18 | icloud.slash 19 | icloud.slash.fill 20 | exclamationmark.icloud 21 | exclamationmark.icloud.fill 22 | checkmark.icloud 23 | checkmark.icloud.fill 24 | xmark.icloud 25 | xmark.icloud.fill 26 | link.icloud 27 | link.icloud.fill 28 | bolt.horizontal.icloud 29 | bolt.horizontal.icloud.fill 30 | person.icloud 31 | person.icloud.fill 32 | lock.icloud 33 | lock.icloud.fill 34 | key.icloud 35 | key.icloud.fill 36 | arrow.clockwise.icloud 37 | arrow.clockwise.icloud.fill 38 | arrow.counterclockwise.icloud 39 | arrow.counterclockwise.icloud.fill 40 | icloud.and.arrow.down 41 | icloud.and.arrow.down.fill 42 | icloud.and.arrow.up 43 | icloud.and.arrow.up.fill 44 | wifi 45 | wifi.circle 46 | wifi.circle.fill 47 | wifi.square 48 | wifi.square.fill 49 | wifi.slash 50 | wifi.exclamationmark 51 | dot.radiowaves.left.and.right 52 | dot.radiowaves.right 53 | dot.radiowaves.forward 54 | wave.3.left 55 | wave.3.left.circle 56 | wave.3.left.circle.fill 57 | wave.3.backward 58 | wave.3.backward.circle 59 | wave.3.backward.circle.fill 60 | wave.3.right 61 | wave.3.right.circle 62 | wave.3.right.circle.fill 63 | wave.3.forward 64 | wave.3.forward.circle 65 | wave.3.forward.circle.fill 66 | dot.radiowaves.up.forward 67 | antenna.radiowaves.left.and.right 68 | antenna.radiowaves.left.and.right.circle 69 | antenna.radiowaves.left.and.right.circle.fill 70 | antenna.radiowaves.left.and.right.slash 71 | chart.bar 72 | chart.bar.fill 73 | cellularbars 74 | bonjour -------------------------------------------------------------------------------- /Sources/SymbolPicker/Resources/Sonoma/Sonoma-Media.txt: -------------------------------------------------------------------------------- 1 | play 2 | play.fill 3 | play.circle 4 | play.circle.fill 5 | play.square 6 | play.square.fill 7 | play.rectangle 8 | play.rectangle.fill 9 | play.square.stack 10 | play.square.stack.fill 11 | play.slash 12 | play.slash.fill 13 | pause 14 | pause.fill 15 | pause.circle 16 | pause.circle.fill 17 | pause.rectangle 18 | pause.rectangle.fill 19 | stop 20 | stop.fill 21 | stop.circle 22 | stop.circle.fill 23 | record.circle 24 | record.circle.fill 25 | playpause 26 | playpause.fill 27 | playpause.circle 28 | playpause.circle.fill 29 | backward 30 | backward.fill 31 | backward.circle 32 | backward.circle.fill 33 | forward 34 | forward.fill 35 | forward.circle 36 | forward.circle.fill 37 | backward.end 38 | backward.end.fill 39 | backward.end.circle 40 | backward.end.circle.fill 41 | forward.end 42 | forward.end.fill 43 | forward.end.circle 44 | forward.end.circle.fill 45 | backward.end.alt 46 | backward.end.alt.fill 47 | forward.end.alt 48 | forward.end.alt.fill 49 | backward.frame 50 | backward.frame.fill 51 | forward.frame 52 | forward.frame.fill 53 | shuffle 54 | shuffle.circle 55 | shuffle.circle.fill 56 | repeat 57 | repeat.circle 58 | repeat.circle.fill 59 | repeat.1 60 | repeat.1.circle 61 | repeat.1.circle.fill 62 | infinity 63 | infinity.circle 64 | infinity.circle.fill 65 | arrow.rectanglepath 66 | checkmark.gobackward 67 | goforward 68 | gobackward 69 | goforward.5 70 | gobackward.5 71 | goforward.10 72 | gobackward.10 73 | goforward.15 74 | gobackward.15 75 | goforward.30 76 | gobackward.30 77 | goforward.45 78 | gobackward.45 79 | goforward.60 80 | gobackward.60 81 | goforward.75 82 | gobackward.75 83 | goforward.90 84 | gobackward.90 85 | goforward.plus 86 | gobackward.minus 87 | music.note.house 88 | music.note.house.fill 89 | play.house 90 | play.house.fill 91 | text.insert 92 | text.append 93 | text.line.first.and.arrowtriangle.forward 94 | text.line.last.and.arrowtriangle.forward 95 | -------------------------------------------------------------------------------- /Sources/SymbolPicker/Resources/Monterey/Monterey-Editing.txt: -------------------------------------------------------------------------------- 1 | pencil 2 | pencil.circle 3 | pencil.circle.fill 4 | pencil.slash 5 | square.and.pencil 6 | rectangle.and.pencil.and.ellipsis 7 | scribble 8 | scribble.variable 9 | highlighter 10 | pencil.and.outline 11 | pencil.tip 12 | pencil.tip.crop.circle 13 | pencil.tip.crop.circle.badge.plus 14 | pencil.tip.crop.circle.badge.minus 15 | pencil.tip.crop.circle.badge.arrow.forward 16 | lasso 17 | lasso.and.sparkles 18 | loupe 19 | circle.lefthalf.filled 20 | circle.righthalf.filled 21 | circle.dashed 22 | circle.dashed.inset.filled 23 | square.dashed 24 | square.dashed.inset.filled 25 | eye.slash 26 | eye.slash.fill 27 | signature 28 | scissors 29 | scissors.circle 30 | scissors.circle.fill 31 | scissors.badge.ellipsis 32 | wand.and.rays 33 | wand.and.rays.inverse 34 | wand.and.stars 35 | wand.and.stars.inverse 36 | crop 37 | crop.rotate 38 | dial.min 39 | dial.min.fill 40 | dial.max 41 | dial.max.fill 42 | paintbrush 43 | paintbrush.fill 44 | paintbrush.pointed 45 | paintbrush.pointed.fill 46 | bandage 47 | bandage.fill 48 | eyedropper 49 | eyedropper.halffull 50 | eyedropper.full 51 | move.3d 52 | scale.3d 53 | rotate.3d 54 | rotate.left 55 | rotate.left.fill 56 | rotate.right 57 | rotate.right.fill 58 | selection.pin.in.out 59 | timeline.selection 60 | rectangle.dashed 61 | rectangle.dashed.badge.record 62 | slider.horizontal.3 63 | slider.horizontal.below.rectangle 64 | slider.horizontal.below.square.filled.and.square 65 | slider.vertical.3 66 | perspective 67 | circle.and.line.horizontal 68 | circle.and.line.horizontal.fill 69 | trapezoid.and.line.vertical 70 | trapezoid.and.line.vertical.fill 71 | trapezoid.and.line.horizontal 72 | trapezoid.and.line.horizontal.fill 73 | aspectratio 74 | aspectratio.fill 75 | camera.filters 76 | skew 77 | arrow.left.and.right.righttriangle.left.righttriangle.right 78 | arrow.left.and.right.righttriangle.left.righttriangle.right.fill 79 | arrow.up.and.down.righttriangle.up.righttriangle.down 80 | arrow.up.and.down.righttriangle.up.righttriangle.down.fill 81 | -------------------------------------------------------------------------------- /Sources/SymbolPicker/Resources/Sonoma/Sonoma-Connectivity.txt: -------------------------------------------------------------------------------- 1 | externaldrive.connected.to.line.below 2 | externaldrive.connected.to.line.below.fill 3 | personalhotspot 4 | personalhotspot.circle 5 | personalhotspot.circle.fill 6 | network 7 | network.slash 8 | network.badge.shield.half.filled 9 | bolt.horizontal 10 | bolt.horizontal.fill 11 | bolt.horizontal.circle 12 | bolt.horizontal.circle.fill 13 | icloud 14 | icloud.fill 15 | icloud.circle 16 | icloud.circle.fill 17 | icloud.square 18 | icloud.square.fill 19 | icloud.slash 20 | icloud.slash.fill 21 | exclamationmark.icloud 22 | exclamationmark.icloud.fill 23 | checkmark.icloud 24 | checkmark.icloud.fill 25 | xmark.icloud 26 | xmark.icloud.fill 27 | link.icloud 28 | link.icloud.fill 29 | bolt.horizontal.icloud 30 | bolt.horizontal.icloud.fill 31 | person.icloud 32 | person.icloud.fill 33 | lock.icloud 34 | lock.icloud.fill 35 | key.icloud 36 | key.icloud.fill 37 | arrow.clockwise.icloud 38 | arrow.clockwise.icloud.fill 39 | arrow.counterclockwise.icloud 40 | arrow.counterclockwise.icloud.fill 41 | arrow.triangle.2.circlepath.icloud 42 | arrow.triangle.2.circlepath.icloud.fill 43 | icloud.and.arrow.down 44 | icloud.and.arrow.down.fill 45 | icloud.and.arrow.up 46 | icloud.and.arrow.up.fill 47 | wifi 48 | wifi.circle 49 | wifi.circle.fill 50 | wifi.square 51 | wifi.square.fill 52 | wifi.slash 53 | wifi.exclamationmark 54 | wifi.exclamationmark.circle 55 | wifi.exclamationmark.circle.fill 56 | dot.radiowaves.left.and.right 57 | dot.radiowaves.right 58 | dot.radiowaves.forward 59 | wave.3.left 60 | wave.3.left.circle 61 | wave.3.left.circle.fill 62 | wave.3.backward 63 | wave.3.backward.circle 64 | wave.3.backward.circle.fill 65 | wave.3.right 66 | wave.3.right.circle 67 | wave.3.right.circle.fill 68 | wave.3.forward 69 | wave.3.forward.circle 70 | wave.3.forward.circle.fill 71 | dot.radiowaves.up.forward 72 | antenna.radiowaves.left.and.right 73 | antenna.radiowaves.left.and.right.circle 74 | antenna.radiowaves.left.and.right.circle.fill 75 | antenna.radiowaves.left.and.right.slash 76 | chart.bar 77 | chart.bar.fill 78 | cellularbars 79 | bonjour 80 | -------------------------------------------------------------------------------- /Sources/SymbolPicker/WindowController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SymbolPicker.swift 3 | // SymbolPicker 4 | // 5 | // Created by Francis Feng on 2021/5/3. 6 | // 7 | 8 | import AppKit 9 | 10 | open class WindowController: NSWindowController { 11 | 12 | @IBOutlet weak var searchField: NSSearchField? 13 | 14 | weak var delegate: SymbolPickerDelegate? 15 | 16 | weak var collectionViewController: SymbolCollectionViewController? 17 | 18 | open override func windowDidLoad() { 19 | super.windowDidLoad() 20 | updateWindowTitle("SF Symbols".localized) 21 | window?.isReleasedWhenClosed = true 22 | configureDelegates() 23 | } 24 | 25 | public func configureCurrentItem(symbol: String, color: NSColor) { 26 | collectionViewController?.configureCurrentItem(symbol: symbol, color: color) 27 | } 28 | 29 | public func toggleColorPanelButton(_ isHidden: Bool) { 30 | collectionViewController?.toggleColorPanelButton(isHidden) 31 | } 32 | 33 | public func updateWindowTitle(_ title: String) { 34 | collectionViewController?.titleField.stringValue = title 35 | } 36 | 37 | private func configureDelegates() { 38 | if let splitViewController = window?.contentViewController as? SplitViewController, 39 | let sidebar = splitViewController.splitViewItems.first?.viewController as? SidebarViewController, 40 | let collections = splitViewController.splitViewItems.last?.viewController as? SymbolCollectionViewController { 41 | collections.pickerDelegate = self 42 | sidebar.delegate = collections 43 | collectionViewController = collections 44 | splitViewController.symbolCollectionViewController = collectionViewController 45 | collectionViewController?.collectionView.delegate = splitViewController 46 | } 47 | } 48 | 49 | @IBAction func performFindPanelAction(_ sender: Any) { 50 | self.window?.makeFirstResponder(collectionViewController?.searchField) 51 | } 52 | } 53 | 54 | extension WindowController: SymbolPickerDelegate { 55 | public func symbolPicker(_ symbol: String, color: NSColor?) { 56 | delegate?.symbolPicker(symbol, color: color) 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /Sources/SymbolPicker/Resources/Ventura/Ventura-Editing.txt: -------------------------------------------------------------------------------- 1 | pencil 2 | pencil.circle 3 | pencil.circle.fill 4 | pencil.slash 5 | pencil.line 6 | eraser 7 | eraser.fill 8 | eraser.line.dashed 9 | eraser.line.dashed.fill 10 | square.and.pencil 11 | square.and.pencil.circle 12 | square.and.pencil.circle.fill 13 | rectangle.and.pencil.and.ellipsis 14 | scribble 15 | scribble.variable 16 | highlighter 17 | pencil.and.outline 18 | pencil.tip 19 | pencil.tip.crop.circle 20 | pencil.tip.crop.circle.badge.plus 21 | pencil.tip.crop.circle.badge.minus 22 | pencil.tip.crop.circle.badge.arrow.forward 23 | lasso 24 | lasso.and.sparkles 25 | loupe 26 | circle.lefthalf.filled 27 | circle.righthalf.filled 28 | circle.dashed 29 | circle.dashed.inset.filled 30 | square.dashed 31 | square.dashed.inset.filled 32 | signature 33 | scissors 34 | scissors.circle 35 | scissors.circle.fill 36 | scissors.badge.ellipsis 37 | wand.and.rays 38 | wand.and.rays.inverse 39 | wand.and.stars 40 | wand.and.stars.inverse 41 | crop 42 | crop.rotate 43 | dial.low 44 | dial.low.fill 45 | dial.medium 46 | dial.medium.fill 47 | dial.high 48 | dial.high.fill 49 | paintbrush 50 | paintbrush.fill 51 | paintbrush.pointed 52 | paintbrush.pointed.fill 53 | eyedropper 54 | eyedropper.halffull 55 | eyedropper.full 56 | move.3d 57 | scale.3d 58 | rotate.3d 59 | rotate.left 60 | rotate.left.fill 61 | rotate.right 62 | rotate.right.fill 63 | selection.pin.in.out 64 | timeline.selection 65 | bandage 66 | bandage.fill 67 | rectangle.dashed 68 | rectangle.dashed.badge.record 69 | slider.horizontal.3 70 | slider.horizontal.2.square.on.square 71 | slider.horizontal.2.square.badge.arrow.down 72 | slider.horizontal.2.gobackward 73 | slider.horizontal.below.rectangle 74 | slider.horizontal.below.square.filled.and.square 75 | slider.horizontal.below.square.and.square.filled 76 | slider.vertical.3 77 | perspective 78 | circle.and.line.horizontal 79 | circle.and.line.horizontal.fill 80 | trapezoid.and.line.vertical 81 | trapezoid.and.line.vertical.fill 82 | trapezoid.and.line.horizontal 83 | trapezoid.and.line.horizontal.fill 84 | aspectratio 85 | aspectratio.fill 86 | camera.filters 87 | skew 88 | arrow.left.and.right.righttriangle.left.righttriangle.right 89 | arrow.left.and.right.righttriangle.left.righttriangle.right.fill 90 | arrow.up.and.down.righttriangle.up.righttriangle.down 91 | arrow.up.and.down.righttriangle.up.righttriangle.down.fill -------------------------------------------------------------------------------- /Sources/SymbolPicker/SymbolCollection/SymbolView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SymbolItem.swift 3 | // SymbolPicker 4 | // 5 | // Created by Francis Feng on 2021/5/4. 6 | // 7 | 8 | import AppKit 9 | 10 | extension NSUserInterfaceItemIdentifier { 11 | static let SymbolView = Self("SymbolView") 12 | } 13 | 14 | class SymbolView: NSCollectionViewItem { 15 | 16 | weak var boxView: NSBox! 17 | weak var imageViewForSymbol: NSImageView! 18 | 19 | let viewFrame = NSRect(x: 0, y: 0, width: 44, height: 36) 20 | 21 | weak var viewController: SymbolCollectionViewController? 22 | 23 | override init(nibName: NSNib.Name?, bundle: Bundle?) { 24 | super.init(nibName: nil, bundle: .module) 25 | view = NSView(frame: viewFrame) 26 | view.postsFrameChangedNotifications = false 27 | view.postsBoundsChangedNotifications = false 28 | view.wantsLayer = true 29 | addBoxView() 30 | addImageView() 31 | } 32 | 33 | required init?(coder: NSCoder) { 34 | fatalError("init(coder:) has not been implemented") 35 | } 36 | 37 | override func mouseDown(with event: NSEvent) { 38 | if event.clickCount > 1 && isSelected { 39 | viewController?.selectCurrent() 40 | } else { 41 | super.mouseDown(with: event) 42 | } 43 | } 44 | 45 | override func loadView() {} 46 | 47 | override var isSelected: Bool { 48 | didSet { 49 | self.boxView.borderWidth = isSelected ? 2 : 1 50 | self.boxView.borderColor = isSelected ? .controlAccentColor : .separatorColor 51 | } 52 | } 53 | 54 | func addBoxView() { 55 | let boxView = NSBox(frame: viewFrame) 56 | boxView.layer?.masksToBounds = true 57 | boxView.titlePosition = .noTitle 58 | boxView.cornerRadius = 8 59 | boxView.boxType = .custom 60 | boxView.borderColor = .separatorColor 61 | boxView.wantsLayer = true 62 | self.boxView = boxView 63 | view.addSubview(boxView) 64 | } 65 | 66 | func addImageView() { 67 | let imageView = NSImageView() 68 | self.imageViewForSymbol = imageView 69 | imageView.wantsLayer = true 70 | boxView.addSubview(imageView) 71 | imageView.translatesAutoresizingMaskIntoConstraints = false 72 | NSLayoutConstraint.activate([ 73 | boxView.centerYAnchor.constraint(equalTo: imageView.centerYAnchor), 74 | boxView.centerXAnchor.constraint(equalTo: imageView.centerXAnchor) 75 | ]) 76 | } 77 | } 78 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Symbol Picker 2 | 3 | A SF Symbols picker for Mac apps. Built with AppKit. 4 | 5 | ## Compatibility 6 | 7 | - macOS 11.0+ 8 | 9 | ## Install 10 | 11 | Add `https://github.com/francisfeng/SymbolPicker` in the [“Swift Package Manager” tab in Xcode](https://developer.apple.com/documentation/xcode/adding_package_dependencies_to_your_app). 12 | 13 | ## Usage 14 | 15 | ![screenshot of Symbol Picker](Images/screenshot.PNG) 16 | 17 | 1. AppKit 18 | ```swift 19 | 20 | // in your NSViewController subclass 21 | import SymbolPicker 22 | 23 | @objc func pickIcon(_ sender: Any) { 24 | if let windowController = SymbolPicker.windowController( 25 | symbol: selectedSFSymbol, 26 | color: symbolColor, 27 | delegate: self, 28 | title: windowTitleForTheSymbolPicker), 29 | let iconSheet = windowController.window { 30 | 31 | // You need to persist this windowController in your app. 32 | self.symbolPickerWindowController = windowController 33 | 34 | window.beginSheet(iconSheet) { 35 | [unowned self] _ in 36 | self.symbolPickerWindowController = nil 37 | } 38 | } 39 | } 40 | 41 | extension ViewController: SymbolPickerDelegate { 42 | func symbolPicker(_ symbol: String, color: NSColor?) { 43 | 44 | } 45 | } 46 | ``` 47 | 48 | 2. SwiftUI 49 | 50 | The `SymbolPicker` is designed to show as a sheet window. 51 | 52 | In SwiftUI, you can present a sheet window with the `sheet` modifier of `Button` like this: 53 | 54 | ```swift 55 | 56 | @State var showSymbolPicker = false 57 | @State var commandIcon = "tray" 58 | @State var selectedColor = Color.accentColor 59 | 60 | Button(action: { 61 | showSymbolPicker = true 62 | }, label: { 63 | Image(systemName: commandIcon) 64 | }).sheet(isPresented: $showSymbolPicker) { 65 | SymbolPickerView( 66 | showSymbolPicker: $showSymbolPicker, 67 | selectedSymbol: $commandIcon, 68 | selectedColor: $selectedColor, 69 | title: "Command Icon", 70 | showColorPickerItem: false 71 | ).frame(minWidth: 550, maxWidth: 1920, minHeight: 320, maxHeight: 960) 72 | } 73 | 74 | // Keep `minWidth` and `minHeight` to `550` and `320` respectively 75 | // because how the SymbolPicker is designed. 76 | ``` 77 | Where 78 | - `showSymbolPicker`: if we want to show the symbol picker. 79 | - `selectedSymbol`: the name of the SF Symbol. 80 | - `selectedColor`: the color the SF Symbol. 81 | - `title`: the title of the symbol picker sheet window. 82 | - `showColorPickerItem`: if we want to show the color picker toolbar item. 83 | 84 | ## Lisense 85 | MIT 86 | -------------------------------------------------------------------------------- /Sources/SymbolPicker/Resources/Sonoma/Sonoma-Maps.txt: -------------------------------------------------------------------------------- 1 | figure.walk 2 | figure.walk.circle 3 | figure.walk.circle.fill 4 | figure.walk.diamond 5 | figure.walk.diamond.fill 6 | figure.wave 7 | figure.wave.circle 8 | figure.wave.circle.fill 9 | location 10 | location.fill 11 | location.circle 12 | location.circle.fill 13 | location.square 14 | location.square.fill 15 | location.slash 16 | location.slash.fill 17 | location.slash.circle 18 | location.slash.circle.fill 19 | location.north 20 | location.north.fill 21 | location.north.circle 22 | location.north.circle.fill 23 | location.north.line 24 | location.north.line.fill 25 | exclamationmark.bubble 26 | exclamationmark.bubble.fill 27 | exclamationmark.bubble.circle 28 | exclamationmark.bubble.circle.fill 29 | mappin 30 | mappin.circle 31 | mappin.circle.fill 32 | mappin.square 33 | mappin.square.fill 34 | mappin.slash 35 | mappin.slash.circle 36 | mappin.slash.circle.fill 37 | mappin.and.ellipse 38 | mappin.and.ellipse.circle 39 | mappin.and.ellipse.circle.fill 40 | map 41 | map.fill 42 | map.circle 43 | map.circle.fill 44 | car 45 | car.fill 46 | car.circle 47 | car.circle.fill 48 | bus 49 | bus.fill 50 | bus.doubledecker 51 | bus.doubledecker.fill 52 | tram 53 | tram.fill 54 | tram.circle 55 | bicycle 56 | bicycle.circle 57 | bicycle.circle.fill 58 | fuelpump 59 | fuelpump.fill 60 | fuelpump.circle 61 | fuelpump.circle.fill 62 | licenseplate 63 | licenseplate.fill 64 | ev.plug.ac.type.1 65 | ev.plug.ac.type.1.fill 66 | ev.plug.ac.type.2 67 | ev.plug.ac.type.2.fill 68 | ev.plug.ac.gb.t 69 | ev.plug.ac.gb.t.fill 70 | ev.plug.dc.ccs1 71 | ev.plug.dc.ccs1.fill 72 | ev.plug.dc.ccs2 73 | ev.plug.dc.ccs2.fill 74 | ev.plug.dc.chademo 75 | ev.plug.dc.chademo.fill 76 | ev.plug.dc.gb.t 77 | ev.plug.dc.gb.t.fill 78 | ev.plug.dc.nacs 79 | ev.plug.dc.nacs.fill 80 | binoculars 81 | binoculars.fill 82 | binoculars.circle 83 | binoculars.circle.fill 84 | arrow.turn.down.left 85 | arrow.turn.up.left 86 | arrow.turn.down.right 87 | arrow.turn.up.right 88 | arrow.turn.right.up 89 | arrow.turn.left.up 90 | arrow.turn.right.down 91 | arrow.turn.left.down 92 | arrow.up.and.down.and.arrow.left.and.right 93 | arrow.up.left.and.down.right.and.arrow.up.right.and.down.left 94 | arrow.triangle.turn.up.right.diamond 95 | arrow.triangle.turn.up.right.diamond.fill 96 | arrow.triangle.turn.up.right.circle 97 | arrow.triangle.turn.up.right.circle.fill 98 | arrow.triangle.merge 99 | arrow.triangle.swap 100 | arrow.triangle.branch 101 | arrow.triangle.pull 102 | -------------------------------------------------------------------------------- /Sources/SymbolPicker/Resources/Ventura/Ventura-Accessibility.txt: -------------------------------------------------------------------------------- 1 | figure.stand.line.dotted.figure.stand 2 | figure.roll 3 | figure.roll.runningpace 4 | cursorarrow.rays 5 | cursorarrow.motionlines 6 | cursorarrow.motionlines.click 7 | cursorarrow.click.badge.clock 8 | cursorarrow.and.square.on.square.dashed 9 | cursorarrow.click 10 | cursorarrow.click.2 11 | contextualmenu.and.cursorarrow 12 | filemenu.and.cursorarrow 13 | dot.circle.and.hand.point.up.left.fill 14 | dot.circle.and.cursorarrow 15 | plus.magnifyingglass 16 | minus.magnifyingglass 17 | smallcircle.filled.circle 18 | smallcircle.filled.circle.fill 19 | circle.hexagonpath 20 | circle.hexagonpath.fill 21 | square.grid.3x3.topleft.filled 22 | square.grid.3x3.topmiddle.filled 23 | square.grid.3x3.topright.filled 24 | square.grid.3x3.middleleft.filled 25 | square.grid.3x3.middle.filled 26 | square.grid.3x3.middleright.filled 27 | square.grid.3x3.bottomleft.filled 28 | square.grid.3x3.bottommiddle.filled 29 | square.grid.3x3.bottomright.filled 30 | quote.bubble 31 | quote.bubble.fill 32 | captions.bubble 33 | captions.bubble.fill 34 | rectangle.3.group.bubble.left 35 | rectangle.3.group.bubble.left.fill 36 | ellipsis.bubble 37 | ellipsis.bubble.fill 38 | teletype 39 | teletype.circle 40 | teletype.circle.fill 41 | teletype.answer 42 | teletype.answer.circle 43 | teletype.answer.circle.fill 44 | rectangle.and.text.magnifyingglass 45 | arrow.up.and.down.and.sparkles 46 | digitalcrown.arrow.clockwise 47 | digitalcrown.arrow.clockwise.fill 48 | digitalcrown.arrow.counterclockwise 49 | digitalcrown.arrow.counterclockwise.fill 50 | digitalcrown.press 51 | digitalcrown.press.fill 52 | hare 53 | hare.fill 54 | tortoise 55 | tortoise.fill 56 | eye 57 | eye.fill 58 | eye.circle 59 | eye.circle.fill 60 | eye.square 61 | eye.square.fill 62 | eye.slash 63 | eye.slash.fill 64 | eye.slash.circle 65 | eye.slash.circle.fill 66 | eye.trianglebadge.exclamationmark 67 | eye.trianglebadge.exclamationmark.fill 68 | ear 69 | ear.badge.checkmark 70 | ear.trianglebadge.exclamationmark 71 | ear.and.waveform 72 | ear.fill 73 | hearingdevice.ear 74 | hearingdevice.ear.fill 75 | hearingdevice.and.signal.meter 76 | hearingdevice.and.signal.meter.fill 77 | hand.tap 78 | hand.tap.fill 79 | hand.point.up 80 | hand.point.up.fill 81 | hand.point.up.braille 82 | hand.point.up.braille.fill 83 | waveform.and.magnifyingglass 84 | dot.arrowtriangles.up.right.down.left.circle 85 | textformat.size.smaller 86 | textformat.size.larger 87 | textformat.size 88 | character.duployan 89 | a.magnify 90 | arrow.up.and.down.and.arrow.left.and.right 91 | arrow.up.left.and.down.right.and.arrow.up.right.and.down.left -------------------------------------------------------------------------------- /Sources/SymbolPicker/Resources/Sonoma/Sonoma-Editing.txt: -------------------------------------------------------------------------------- 1 | pencil 2 | pencil.circle 3 | pencil.circle.fill 4 | pencil.slash 5 | pencil.line 6 | eraser 7 | eraser.fill 8 | eraser.line.dashed 9 | eraser.line.dashed.fill 10 | square.and.pencil 11 | square.and.pencil.circle 12 | square.and.pencil.circle.fill 13 | rectangle.and.pencil.and.ellipsis 14 | scribble 15 | scribble.variable 16 | pencil.and.scribble 17 | highlighter 18 | pencil.and.outline 19 | pencil.tip 20 | pencil.tip.crop.circle 21 | pencil.tip.crop.circle.fill 22 | pencil.tip.crop.circle.badge.plus 23 | pencil.tip.crop.circle.badge.plus.fill 24 | pencil.tip.crop.circle.badge.minus 25 | pencil.tip.crop.circle.badge.minus.fill 26 | pencil.tip.crop.circle.badge.arrow.forward 27 | pencil.tip.crop.circle.badge.arrow.forward.fill 28 | lasso 29 | lasso.badge.sparkles 30 | loupe 31 | circle.lefthalf.filled 32 | circle.lefthalf.filled.inverse 33 | circle.righthalf.filled 34 | circle.righthalf.filled.inverse 35 | circle.dashed 36 | circle.dashed.inset.filled 37 | square.dashed 38 | square.dashed.inset.filled 39 | signature 40 | scissors 41 | scissors.circle 42 | scissors.circle.fill 43 | scissors.badge.ellipsis 44 | wand.and.rays 45 | wand.and.rays.inverse 46 | wand.and.stars 47 | wand.and.stars.inverse 48 | crop 49 | crop.rotate 50 | rectangle.portrait.rotate 51 | rectangle.landscape.rotate 52 | dial.low 53 | dial.low.fill 54 | dial.medium 55 | dial.medium.fill 56 | dial.high 57 | dial.high.fill 58 | paintbrush 59 | paintbrush.fill 60 | paintbrush.pointed 61 | paintbrush.pointed.fill 62 | eyedropper 63 | eyedropper.halffull 64 | eyedropper.full 65 | move.3d 66 | scale.3d 67 | rotate.3d 68 | rotate.3d.fill 69 | rotate.3d.circle 70 | rotate.3d.circle.fill 71 | rotate.left 72 | rotate.left.fill 73 | rotate.right 74 | rotate.right.fill 75 | selection.pin.in.out 76 | timeline.selection 77 | bandage 78 | bandage.fill 79 | rectangle.dashed 80 | rectangle.dashed.badge.record 81 | slider.horizontal.3 82 | slider.horizontal.2.square.on.square 83 | slider.horizontal.2.square 84 | slider.horizontal.2.square.badge.arrow.down 85 | slider.horizontal.2.gobackward 86 | slider.horizontal.below.rectangle 87 | slider.horizontal.below.square.filled.and.square 88 | slider.horizontal.below.square.and.square.filled 89 | slider.horizontal.below.sun.max 90 | slider.vertical.3 91 | perspective 92 | circle.and.line.horizontal 93 | circle.and.line.horizontal.fill 94 | trapezoid.and.line.vertical 95 | trapezoid.and.line.vertical.fill 96 | trapezoid.and.line.horizontal 97 | trapezoid.and.line.horizontal.fill 98 | aspectratio 99 | aspectratio.fill 100 | camera.filters 101 | skew 102 | arrow.left.and.right.righttriangle.left.righttriangle.right 103 | arrow.left.and.right.righttriangle.left.righttriangle.right.fill 104 | arrow.up.and.down.righttriangle.up.righttriangle.down 105 | arrow.up.and.down.righttriangle.up.righttriangle.down.fill 106 | -------------------------------------------------------------------------------- /Sources/SymbolPicker/Resources/Sonoma/Sonoma-Accessibility.txt: -------------------------------------------------------------------------------- 1 | figure.stand.line.dotted.figure.stand 2 | figure 3 | accessibility 4 | accessibility.fill 5 | voiceover 6 | accessibility.badge.arrow.up.right 7 | figure.2 8 | figure.2.circle 9 | figure.2.circle.fill 10 | figure.roll 11 | figure.roll.runningpace 12 | cursorarrow.rays 13 | cursorarrow.motionlines 14 | cursorarrow.motionlines.click 15 | cursorarrow.click.badge.clock 16 | cursorarrow.and.square.on.square.dashed 17 | cursorarrow.click 18 | cursorarrow.click.2 19 | contextualmenu.and.cursorarrow 20 | filemenu.and.cursorarrow 21 | dot.circle.and.hand.point.up.left.fill 22 | dot.circle.and.cursorarrow 23 | plus.magnifyingglass 24 | minus.magnifyingglass 25 | smallcircle.filled.circle 26 | smallcircle.filled.circle.fill 27 | circle.hexagonpath 28 | circle.hexagonpath.fill 29 | square.grid.3x3.topleft.filled 30 | square.grid.3x3.topmiddle.filled 31 | square.grid.3x3.topright.filled 32 | square.grid.3x3.middleleft.filled 33 | square.grid.3x3.middle.filled 34 | square.grid.3x3.middleright.filled 35 | square.grid.3x3.bottomleft.filled 36 | square.grid.3x3.bottommiddle.filled 37 | square.grid.3x3.bottomright.filled 38 | quote.bubble 39 | quote.bubble.fill 40 | captions.bubble 41 | captions.bubble.fill 42 | rectangle.3.group.bubble 43 | rectangle.3.group.bubble.fill 44 | ellipsis.bubble 45 | ellipsis.bubble.fill 46 | teletype 47 | teletype.circle 48 | teletype.circle.fill 49 | teletype.answer 50 | teletype.answer.circle 51 | teletype.answer.circle.fill 52 | rectangle.and.text.magnifyingglass 53 | arrow.up.and.down.and.sparkles 54 | digitalcrown.arrow.clockwise 55 | digitalcrown.arrow.clockwise.fill 56 | digitalcrown.arrow.counterclockwise 57 | digitalcrown.arrow.counterclockwise.fill 58 | digitalcrown.press 59 | digitalcrown.press.fill 60 | hare 61 | hare.fill 62 | hare.circle 63 | hare.circle.fill 64 | tortoise 65 | tortoise.fill 66 | tortoise.circle 67 | tortoise.circle.fill 68 | eye 69 | eye.fill 70 | eye.circle 71 | eye.circle.fill 72 | eye.square 73 | eye.square.fill 74 | eye.slash 75 | eye.slash.fill 76 | eye.slash.circle 77 | eye.slash.circle.fill 78 | eye.trianglebadge.exclamationmark 79 | eye.trianglebadge.exclamationmark.fill 80 | ear 81 | ear.fill 82 | ear.badge.checkmark 83 | ear.trianglebadge.exclamationmark 84 | ear.badge.waveform 85 | hearingdevice.ear 86 | hearingdevice.ear.fill 87 | hearingdevice.and.signal.meter 88 | hearingdevice.and.signal.meter.fill 89 | hand.tap 90 | hand.tap.fill 91 | hand.point.up 92 | hand.point.up.fill 93 | hand.point.up.braille 94 | hand.point.up.braille.fill 95 | waveform.badge.magnifyingglass 96 | dot.arrowtriangles.up.right.down.left.circle 97 | textformat.size.smaller 98 | textformat.size.larger 99 | textformat.size 100 | character.duployan 101 | character.magnify 102 | arrow.up.and.down.and.arrow.left.and.right 103 | arrow.up.left.and.down.right.and.arrow.up.right.and.down.left 104 | -------------------------------------------------------------------------------- /Sources/SymbolPicker/Resources/Monterey/Monterey-Gaming.txt: -------------------------------------------------------------------------------- 1 | circle.grid.cross 2 | circle.grid.cross.fill 3 | circle.grid.cross.left.filled 4 | circle.grid.cross.up.filled 5 | circle.grid.cross.right.filled 6 | circle.grid.cross.down.filled 7 | circle.square 8 | circle.square.fill 9 | rectangle.on.rectangle 10 | rectangle.fill.on.rectangle.fill 11 | rectangle.on.rectangle.circle 12 | rectangle.on.rectangle.circle.fill 13 | rectangle.on.rectangle.square 14 | rectangle.on.rectangle.square.fill 15 | house 16 | house.fill 17 | house.circle 18 | house.circle.fill 19 | gamecontroller 20 | gamecontroller.fill 21 | l.joystick 22 | l.joystick.fill 23 | r.joystick 24 | r.joystick.fill 25 | l.joystick.press.down 26 | l.joystick.press.down.fill 27 | r.joystick.press.down 28 | r.joystick.press.down.fill 29 | l.joystick.tilt.left 30 | l.joystick.tilt.left.fill 31 | l.joystick.tilt.right 32 | l.joystick.tilt.right.fill 33 | l.joystick.tilt.up 34 | l.joystick.tilt.up.fill 35 | l.joystick.tilt.down 36 | l.joystick.tilt.down.fill 37 | r.joystick.tilt.left 38 | r.joystick.tilt.left.fill 39 | r.joystick.tilt.right 40 | r.joystick.tilt.right.fill 41 | r.joystick.tilt.up 42 | r.joystick.tilt.up.fill 43 | r.joystick.tilt.down 44 | r.joystick.tilt.down.fill 45 | dpad 46 | dpad.fill 47 | dpad.left.filled 48 | dpad.up.filled 49 | dpad.right.filled 50 | dpad.down.filled 51 | circle.circle 52 | circle.circle.fill 53 | square.circle 54 | square.circle.fill 55 | triangle.circle 56 | triangle.circle.fill 57 | rectangle.roundedtop 58 | rectangle.roundedtop.fill 59 | rectangle.roundedbottom 60 | rectangle.roundedbottom.fill 61 | l.rectangle.roundedbottom 62 | l.rectangle.roundedbottom.fill 63 | l1.rectangle.roundedbottom 64 | l1.rectangle.roundedbottom.fill 65 | l2.rectangle.roundedtop 66 | l2.rectangle.roundedtop.fill 67 | r.rectangle.roundedbottom 68 | r.rectangle.roundedbottom.fill 69 | r1.rectangle.roundedbottom 70 | r1.rectangle.roundedbottom.fill 71 | r2.rectangle.roundedtop 72 | r2.rectangle.roundedtop.fill 73 | lb.rectangle.roundedbottom 74 | lb.rectangle.roundedbottom.fill 75 | rb.rectangle.roundedbottom 76 | rb.rectangle.roundedbottom.fill 77 | lt.rectangle.roundedtop 78 | lt.rectangle.roundedtop.fill 79 | rt.rectangle.roundedtop 80 | rt.rectangle.roundedtop.fill 81 | zl.rectangle.roundedtop 82 | zl.rectangle.roundedtop.fill 83 | zr.rectangle.roundedtop 84 | zr.rectangle.roundedtop.fill 85 | logo.playstation 86 | logo.xbox 87 | line.3.horizontal.circle 88 | line.3.horizontal.circle.fill 89 | plus 90 | plus.circle 91 | plus.circle.fill 92 | minus 93 | minus.circle 94 | minus.circle.fill 95 | xmark 96 | xmark.circle 97 | xmark.circle.fill 98 | arrowtriangle.left.circle 99 | arrowtriangle.left.circle.fill 100 | arrowtriangle.right.circle 101 | arrowtriangle.right.circle.fill 102 | arrowtriangle.up.circle 103 | arrowtriangle.up.circle.fill 104 | arrowtriangle.down.circle 105 | arrowtriangle.down.circle.fill 106 | a.circle 107 | a.circle.fill 108 | b.circle 109 | b.circle.fill 110 | l.circle 111 | l.circle.fill 112 | r.circle 113 | r.circle.fill 114 | x.circle 115 | x.circle.fill 116 | y.circle 117 | y.circle.fill 118 | -------------------------------------------------------------------------------- /Sources/SymbolPicker/Sidebar/SidebarViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SidebarViewController.swift 3 | // SymbolPicker 4 | // 5 | // Created by Francis Feng on 2021/5/4. 6 | // 7 | 8 | import AppKit 9 | 10 | protocol SidebarController: AnyObject { 11 | func sidebarController(_ controller: SidebarViewController, node: Node) 12 | } 13 | 14 | class SidebarViewController: NSViewController, NSOutlineViewDelegate { 15 | @IBOutlet weak var outlineView: NSOutlineView! 16 | 17 | @IBOutlet var treeController: NSTreeController! 18 | 19 | weak var delegate: SidebarController? 20 | 21 | var windowController: WindowController? { 22 | return self.view.window?.windowController as? WindowController 23 | } 24 | 25 | @objc dynamic var content = [AnyObject]() 26 | 27 | override func viewDidLoad() { 28 | super.viewDidLoad() 29 | configureDefaultSidebar() 30 | configureOutlineView() 31 | } 32 | 33 | func configureOutlineView() { 34 | outlineView.enclosingScrollView?.scrollerStyle = .overlay 35 | DispatchQueue.main.async { 36 | self.selectAllSidebarItem() 37 | } 38 | } 39 | 40 | func selectAllSidebarItem() { 41 | if outlineView.selectedRow != 0 { 42 | let index = IndexSet(integer: 0) 43 | outlineView.selectRowIndexes(index, byExtendingSelection: false) 44 | } 45 | } 46 | 47 | static func node(from item: Any) -> Node? { 48 | if let treeNode = item as? NSTreeNode, let node = treeNode.representedObject as? Node { 49 | return node 50 | } else { 51 | return nil 52 | } 53 | } 54 | 55 | func configureDefaultSidebar() { 56 | for category in Symbol.Category.all { 57 | let name = category.name 58 | let symbolName = category.symbol 59 | let node = Node(name.localized, symbolName: symbolName, category: category) 60 | content.append(node) 61 | } 62 | } 63 | 64 | func outlineView(_ outlineView: NSOutlineView, isGroupItem item: Any) -> Bool { 65 | return false 66 | } 67 | 68 | func outlineView(_ outlineView: NSOutlineView, heightOfRowByItem item: Any) -> CGFloat { 69 | return 24 70 | } 71 | 72 | func outlineView(_ outlineView: NSOutlineView, 73 | viewFor tableColumn: NSTableColumn?, 74 | item: Any) -> NSView? { 75 | let dataCell = NSUserInterfaceItemIdentifier.init("DataCell") 76 | if let node = SidebarViewController.node(from: item) { 77 | if let view = outlineView.makeView( 78 | withIdentifier: dataCell, 79 | owner: self) as? NSTableCellView { 80 | view.textField?.bind(.value, 81 | to: view, 82 | withKeyPath: "objectValue.value", 83 | options: nil) 84 | view.imageView?.image = NSImage(node.symbolName) 85 | return view 86 | } 87 | } 88 | return nil 89 | } 90 | 91 | func outlineViewSelectionDidChange(_ notification: Notification) { 92 | let seletedRow = outlineView.item(atRow: outlineView.selectedRow) 93 | if let node = SidebarViewController.node(from: seletedRow ?? 0) { 94 | delegate?.sidebarController(self, node: node) 95 | } 96 | windowController?.searchField?.stringValue = "" 97 | } 98 | } 99 | 100 | -------------------------------------------------------------------------------- /Sources/SymbolPicker/Resources/Monterey/Monterey-Communication.txt: -------------------------------------------------------------------------------- 1 | mic 2 | mic.fill 3 | mic.circle 4 | mic.circle.fill 5 | mic.square 6 | mic.square.fill 7 | mic.slash 8 | mic.slash.fill 9 | mic.slash.circle 10 | mic.slash.circle.fill 11 | mic.badge.plus 12 | mic.fill.badge.plus 13 | message 14 | message.fill 15 | message.circle 16 | message.circle.fill 17 | message.and.waveform 18 | message.and.waveform.fill 19 | arrow.up.message 20 | arrow.up.message.fill 21 | plus.message 22 | plus.message.fill 23 | bubble.right 24 | bubble.right.fill 25 | bubble.right.circle 26 | bubble.right.circle.fill 27 | bubble.left 28 | bubble.left.fill 29 | bubble.left.circle 30 | bubble.left.circle.fill 31 | exclamationmark.bubble 32 | exclamationmark.bubble.fill 33 | exclamationmark.bubble.circle 34 | exclamationmark.bubble.circle.fill 35 | quote.opening 36 | quote.closing 37 | quote.bubble 38 | quote.bubble.fill 39 | star.bubble 40 | star.bubble.fill 41 | character.bubble 42 | character.bubble.fill 43 | text.bubble 44 | text.bubble.fill 45 | captions.bubble 46 | captions.bubble.fill 47 | plus.bubble 48 | plus.bubble.fill 49 | checkmark.bubble 50 | checkmark.bubble.fill 51 | rectangle.3.group.bubble.left 52 | rectangle.3.group.bubble.left.fill 53 | ellipsis.bubble 54 | ellipsis.bubble.fill 55 | ellipsis.vertical.bubble 56 | ellipsis.vertical.bubble.fill 57 | phone.bubble.left 58 | phone.bubble.left.fill 59 | video.bubble.left 60 | video.bubble.left.fill 61 | bubble.middle.bottom 62 | bubble.middle.bottom.fill 63 | bubble.middle.top 64 | bubble.middle.top.fill 65 | bubble.left.and.bubble.right 66 | bubble.left.and.bubble.right.fill 67 | bubble.left.and.exclamationmark.bubble.right 68 | bubble.left.and.exclamationmark.bubble.right.fill 69 | phone 70 | phone.fill 71 | phone.circle 72 | phone.circle.fill 73 | phone.badge.plus 74 | phone.fill.badge.plus 75 | phone.connection 76 | phone.fill.connection 77 | phone.and.waveform 78 | phone.and.waveform.fill 79 | phone.arrow.up.right 80 | phone.fill.arrow.up.right 81 | phone.arrow.down.left 82 | phone.fill.arrow.down.left 83 | phone.arrow.right 84 | phone.fill.arrow.right 85 | phone.down 86 | phone.down.fill 87 | phone.down.circle 88 | phone.down.circle.fill 89 | teletype 90 | teletype.circle 91 | teletype.circle.fill 92 | teletype.answer 93 | teletype.answer.circle 94 | teletype.answer.circle.fill 95 | video 96 | video.fill 97 | video.circle 98 | video.circle.fill 99 | video.square 100 | video.square.fill 101 | video.slash 102 | video.slash.fill 103 | video.badge.plus 104 | video.fill.badge.plus 105 | video.badge.checkmark 106 | video.fill.badge.checkmark 107 | video.badge.ellipsis 108 | video.fill.badge.ellipsis 109 | video.and.waveform 110 | video.and.waveform.fill 111 | arrow.up.right.video 112 | arrow.up.right.video.fill 113 | arrow.down.left.video 114 | arrow.down.left.video.fill 115 | questionmark.video 116 | questionmark.video.fill 117 | envelope 118 | envelope.fill 119 | envelope.circle 120 | envelope.circle.fill 121 | envelope.arrow.triangle.branch 122 | envelope.arrow.triangle.branch.fill 123 | envelope.open 124 | envelope.open.fill 125 | envelope.badge 126 | envelope.badge.fill 127 | waveform 128 | waveform.circle 129 | waveform.circle.fill 130 | waveform.badge.plus 131 | waveform.badge.minus 132 | waveform.badge.exclamationmark 133 | waveform.and.magnifyingglass 134 | waveform.and.mic 135 | recordingtape 136 | -------------------------------------------------------------------------------- /Sources/SymbolPicker/Resources/Ventura/Ventura-Gaming.txt: -------------------------------------------------------------------------------- 1 | circle.square 2 | circle.square.fill 3 | rectangle.on.rectangle 4 | rectangle.fill.on.rectangle.fill 5 | rectangle.on.rectangle.circle 6 | rectangle.on.rectangle.circle.fill 7 | rectangle.on.rectangle.square 8 | rectangle.on.rectangle.square.fill 9 | flag.checkered 10 | flag.checkered.circle 11 | flag.checkered.circle.fill 12 | flag.2.crossed 13 | flag.2.crossed.fill 14 | flag.2.crossed.circle 15 | flag.2.crossed.circle.fill 16 | flag.filled.and.flag.crossed 17 | flag.and.flag.filled.crossed 18 | flag.checkered.2.crossed 19 | house 20 | house.fill 21 | house.circle 22 | house.circle.fill 23 | gamecontroller 24 | gamecontroller.fill 25 | l.joystick 26 | l.joystick.fill 27 | r.joystick 28 | r.joystick.fill 29 | l.joystick.press.down 30 | l.joystick.press.down.fill 31 | r.joystick.press.down 32 | r.joystick.press.down.fill 33 | l.joystick.tilt.left 34 | l.joystick.tilt.left.fill 35 | l.joystick.tilt.right 36 | l.joystick.tilt.right.fill 37 | l.joystick.tilt.up 38 | l.joystick.tilt.up.fill 39 | l.joystick.tilt.down 40 | l.joystick.tilt.down.fill 41 | r.joystick.tilt.left 42 | r.joystick.tilt.left.fill 43 | r.joystick.tilt.right 44 | r.joystick.tilt.right.fill 45 | r.joystick.tilt.up 46 | r.joystick.tilt.up.fill 47 | r.joystick.tilt.down 48 | r.joystick.tilt.down.fill 49 | circle.grid.cross 50 | circle.grid.cross.fill 51 | circle.grid.cross.left.filled 52 | circle.grid.cross.up.filled 53 | circle.grid.cross.right.filled 54 | circle.grid.cross.down.filled 55 | dpad 56 | dpad.fill 57 | dpad.left.filled 58 | dpad.up.filled 59 | dpad.right.filled 60 | dpad.down.filled 61 | circle.circle 62 | circle.circle.fill 63 | square.circle 64 | square.circle.fill 65 | triangle.circle 66 | triangle.circle.fill 67 | rectangle.roundedtop 68 | rectangle.roundedtop.fill 69 | rectangle.roundedbottom 70 | rectangle.roundedbottom.fill 71 | l.rectangle.roundedbottom 72 | l.rectangle.roundedbottom.fill 73 | l1.rectangle.roundedbottom 74 | l1.rectangle.roundedbottom.fill 75 | l2.rectangle.roundedtop 76 | l2.rectangle.roundedtop.fill 77 | r.rectangle.roundedbottom 78 | r.rectangle.roundedbottom.fill 79 | r1.rectangle.roundedbottom 80 | r1.rectangle.roundedbottom.fill 81 | r2.rectangle.roundedtop 82 | r2.rectangle.roundedtop.fill 83 | lb.rectangle.roundedbottom 84 | lb.rectangle.roundedbottom.fill 85 | rb.rectangle.roundedbottom 86 | rb.rectangle.roundedbottom.fill 87 | lt.rectangle.roundedtop 88 | lt.rectangle.roundedtop.fill 89 | rt.rectangle.roundedtop 90 | rt.rectangle.roundedtop.fill 91 | zl.rectangle.roundedtop 92 | zl.rectangle.roundedtop.fill 93 | zr.rectangle.roundedtop 94 | zr.rectangle.roundedtop.fill 95 | playstation.logo 96 | xbox.logo 97 | line.3.horizontal.circle 98 | line.3.horizontal.circle.fill 99 | plus 100 | plus.circle 101 | plus.circle.fill 102 | minus 103 | minus.circle 104 | minus.circle.fill 105 | xmark 106 | xmark.circle 107 | xmark.circle.fill 108 | arrowtriangle.left.circle 109 | arrowtriangle.left.circle.fill 110 | arrowtriangle.right.circle 111 | arrowtriangle.right.circle.fill 112 | arrowtriangle.up.circle 113 | arrowtriangle.up.circle.fill 114 | arrowtriangle.down.circle 115 | arrowtriangle.down.circle.fill 116 | a.circle 117 | a.circle.fill 118 | b.circle 119 | b.circle.fill 120 | l.circle 121 | l.circle.fill 122 | r.circle 123 | r.circle.fill 124 | x.circle 125 | x.circle.fill 126 | y.circle 127 | y.circle.fill -------------------------------------------------------------------------------- /Sources/SymbolPicker/Resources/Ventura/Ventura-Weather.txt: -------------------------------------------------------------------------------- 1 | sun.min 2 | sun.min.fill 3 | sun.max 4 | sun.max.fill 5 | sun.max.circle 6 | sun.max.circle.fill 7 | sun.max.trianglebadge.exclamationmark 8 | sun.max.trianglebadge.exclamationmark.fill 9 | sunrise 10 | sunrise.fill 11 | sunrise.circle 12 | sunrise.circle.fill 13 | sunset 14 | sunset.fill 15 | sunset.circle 16 | sunset.circle.fill 17 | sun.and.horizon 18 | sun.and.horizon.fill 19 | sun.and.horizon.circle 20 | sun.and.horizon.circle.fill 21 | sun.dust 22 | sun.dust.fill 23 | sun.dust.circle 24 | sun.dust.circle.fill 25 | sun.haze 26 | sun.haze.fill 27 | sun.haze.circle 28 | sun.haze.circle.fill 29 | moon 30 | moon.fill 31 | moon.circle 32 | moon.circle.fill 33 | moon.haze 34 | moon.haze.fill 35 | moon.haze.circle 36 | moon.haze.circle.fill 37 | sparkles 38 | moon.stars 39 | moon.stars.fill 40 | moon.stars.circle 41 | moon.stars.circle.fill 42 | cloud 43 | cloud.fill 44 | cloud.circle 45 | cloud.circle.fill 46 | cloud.drizzle 47 | cloud.drizzle.fill 48 | cloud.drizzle.circle 49 | cloud.drizzle.circle.fill 50 | cloud.rain 51 | cloud.rain.fill 52 | cloud.rain.circle 53 | cloud.rain.circle.fill 54 | cloud.heavyrain 55 | cloud.heavyrain.fill 56 | cloud.heavyrain.circle 57 | cloud.heavyrain.circle.fill 58 | cloud.fog 59 | cloud.fog.fill 60 | cloud.fog.circle 61 | cloud.fog.circle.fill 62 | cloud.hail 63 | cloud.hail.fill 64 | cloud.hail.circle 65 | cloud.hail.circle.fill 66 | cloud.snow 67 | cloud.snow.fill 68 | cloud.snow.circle 69 | cloud.snow.circle.fill 70 | cloud.sleet 71 | cloud.sleet.fill 72 | cloud.sleet.circle 73 | cloud.sleet.circle.fill 74 | cloud.bolt 75 | cloud.bolt.fill 76 | cloud.bolt.circle 77 | cloud.bolt.circle.fill 78 | cloud.bolt.rain 79 | cloud.bolt.rain.fill 80 | cloud.bolt.rain.circle 81 | cloud.bolt.rain.circle.fill 82 | cloud.sun 83 | cloud.sun.fill 84 | cloud.sun.circle 85 | cloud.sun.circle.fill 86 | cloud.sun.rain 87 | cloud.sun.rain.fill 88 | cloud.sun.rain.circle 89 | cloud.sun.rain.circle.fill 90 | cloud.sun.bolt 91 | cloud.sun.bolt.fill 92 | cloud.sun.bolt.circle 93 | cloud.sun.bolt.circle.fill 94 | cloud.moon 95 | cloud.moon.fill 96 | cloud.moon.circle 97 | cloud.moon.circle.fill 98 | cloud.moon.rain 99 | cloud.moon.rain.fill 100 | cloud.moon.rain.circle 101 | cloud.moon.rain.circle.fill 102 | cloud.moon.bolt 103 | cloud.moon.bolt.fill 104 | cloud.moon.bolt.circle 105 | cloud.moon.bolt.circle.fill 106 | smoke 107 | smoke.fill 108 | smoke.circle 109 | smoke.circle.fill 110 | wind 111 | wind.circle 112 | wind.circle.fill 113 | wind.snow 114 | wind.snow.circle 115 | wind.snow.circle.fill 116 | snowflake 117 | snowflake.circle 118 | snowflake.circle.fill 119 | snowflake.slash 120 | tornado 121 | tornado.circle 122 | tornado.circle.fill 123 | tropicalstorm 124 | tropicalstorm.circle 125 | tropicalstorm.circle.fill 126 | hurricane 127 | hurricane.circle 128 | hurricane.circle.fill 129 | thermometer.sun 130 | thermometer.sun.fill 131 | thermometer.sun.circle 132 | thermometer.sun.circle.fill 133 | thermometer.snowflake 134 | thermometer.snowflake.circle 135 | thermometer.snowflake.circle.fill 136 | thermometer.low 137 | thermometer.medium 138 | thermometer.high 139 | thermometer.medium.slash 140 | aqi.low 141 | aqi.medium 142 | aqi.high 143 | humidity 144 | humidity.fill 145 | carbon.monoxide.cloud 146 | carbon.monoxide.cloud.fill 147 | carbon.dioxide.cloud 148 | carbon.dioxide.cloud.fill -------------------------------------------------------------------------------- /Sources/SymbolPicker/Resources/Ventura/Ventura-Privacy & Security.txt: -------------------------------------------------------------------------------- 1 | lock.doc 2 | lock.doc.fill 3 | network.badge.shield.half.filled 4 | hand.raised.square.on.square 5 | hand.raised.square.on.square.fill 6 | exclamationmark.triangle 7 | exclamationmark.triangle.fill 8 | seal 9 | seal.fill 10 | checkmark.seal 11 | checkmark.seal.fill 12 | xmark.seal 13 | xmark.seal.fill 14 | shield 15 | shield.fill 16 | shield.lefthalf.filled 17 | shield.righthalf.filled 18 | shield.slash 19 | shield.slash.fill 20 | shield.lefthalf.filled.slash 21 | firewall 22 | firewall.fill 23 | checkmark.icloud 24 | checkmark.icloud.fill 25 | lock.icloud 26 | lock.icloud.fill 27 | key.icloud 28 | key.icloud.fill 29 | checkmark.message 30 | checkmark.message.fill 31 | exclamationmark.bubble 32 | exclamationmark.bubble.fill 33 | exclamationmark.bubble.circle 34 | exclamationmark.bubble.circle.fill 35 | bubble.left.and.exclamationmark.bubble.right 36 | bubble.left.and.exclamationmark.bubble.right.fill 37 | envelope.badge.shield.half.filled 38 | envelope.badge.shield.half.filled.fill 39 | nosign 40 | nosign.app 41 | nosign.app.fill 42 | lock 43 | lock.fill 44 | lock.circle 45 | lock.circle.fill 46 | lock.square 47 | lock.square.fill 48 | lock.square.stack 49 | lock.square.stack.fill 50 | lock.rectangle 51 | lock.rectangle.fill 52 | lock.rectangle.stack 53 | lock.rectangle.stack.fill 54 | lock.rectangle.on.rectangle 55 | lock.rectangle.on.rectangle.fill 56 | lock.shield 57 | lock.shield.fill 58 | lock.slash 59 | lock.slash.fill 60 | lock.trianglebadge.exclamationmark 61 | lock.trianglebadge.exclamationmark.fill 62 | exclamationmark.lock 63 | exclamationmark.lock.fill 64 | lock.open 65 | lock.open.fill 66 | lock.open.trianglebadge.exclamationmark 67 | lock.open.trianglebadge.exclamationmark.fill 68 | lock.rotation 69 | lock.open.rotation 70 | key 71 | key.fill 72 | key.radiowaves.forward 73 | key.radiowaves.forward.fill 74 | key.horizontal 75 | key.horizontal.fill 76 | questionmark.key.filled 77 | faceid 78 | lock.display 79 | lock.open.display 80 | lock.desktopcomputer 81 | lock.open.desktopcomputer 82 | lock.laptopcomputer 83 | lock.open.laptopcomputer 84 | lock.iphone 85 | lock.open.iphone 86 | lock.ipad 87 | lock.open.ipad 88 | lock.applewatch 89 | lock.open.applewatch 90 | eye 91 | eye.fill 92 | eye.circle 93 | eye.circle.fill 94 | eye.square 95 | eye.square.fill 96 | eye.slash 97 | eye.slash.fill 98 | eye.slash.circle 99 | eye.slash.circle.fill 100 | eye.trianglebadge.exclamationmark 101 | eye.trianglebadge.exclamationmark.fill 102 | hand.raised 103 | hand.raised.fill 104 | hand.raised.circle 105 | hand.raised.circle.fill 106 | hand.raised.square 107 | hand.raised.square.fill 108 | hand.raised.app 109 | hand.raised.app.fill 110 | hand.raised.slash 111 | hand.raised.slash.fill 112 | key.viewfinder 113 | touchid 114 | exclamationmark.shield 115 | exclamationmark.shield.fill 116 | xmark.shield 117 | xmark.shield.fill 118 | checkmark 119 | checkmark.circle 120 | checkmark.circle.fill 121 | checkmark.circle.badge.questionmark 122 | checkmark.circle.badge.questionmark.fill 123 | checkmark.circle.badge.xmark 124 | checkmark.circle.badge.xmark.fill 125 | checkmark.circle.trianglebadge.exclamationmark 126 | checkmark.square 127 | checkmark.square.fill 128 | checkmark.rectangle 129 | checkmark.rectangle.fill 130 | checkmark.rectangle.portrait 131 | checkmark.rectangle.portrait.fill 132 | checkmark.diamond 133 | checkmark.diamond.fill 134 | checkmark.shield 135 | checkmark.shield.fill -------------------------------------------------------------------------------- /Sources/SymbolPicker/Resources/Sonoma/Sonoma-Privacy & Security.txt: -------------------------------------------------------------------------------- 1 | lock.doc 2 | lock.doc.fill 3 | network.badge.shield.half.filled 4 | hand.raised.square.on.square 5 | hand.raised.square.on.square.fill 6 | exclamationmark.triangle 7 | exclamationmark.triangle.fill 8 | seal 9 | seal.fill 10 | checkmark.seal 11 | checkmark.seal.fill 12 | xmark.seal 13 | xmark.seal.fill 14 | shield 15 | shield.fill 16 | shield.lefthalf.filled 17 | shield.lefthalf.filled.badge.checkmark 18 | shield.lefthalf.filled.trianglebadge.exclamationmark 19 | shield.righthalf.filled 20 | shield.slash 21 | shield.slash.fill 22 | shield.lefthalf.filled.slash 23 | firewall 24 | firewall.fill 25 | checkmark.icloud 26 | checkmark.icloud.fill 27 | lock.icloud 28 | lock.icloud.fill 29 | key.icloud 30 | key.icloud.fill 31 | checkmark.message 32 | checkmark.message.fill 33 | exclamationmark.bubble 34 | exclamationmark.bubble.fill 35 | exclamationmark.bubble.circle 36 | exclamationmark.bubble.circle.fill 37 | bubble.left.and.exclamationmark.bubble.right 38 | bubble.left.and.exclamationmark.bubble.right.fill 39 | envelope.badge.shield.half.filled 40 | envelope.badge.shield.half.filled.fill 41 | nosign 42 | nosign.app 43 | nosign.app.fill 44 | lock 45 | lock.fill 46 | lock.circle 47 | lock.circle.fill 48 | lock.square 49 | lock.square.fill 50 | lock.circle.dotted 51 | lock.square.stack 52 | lock.square.stack.fill 53 | lock.rectangle 54 | lock.rectangle.fill 55 | lock.rectangle.stack 56 | lock.rectangle.stack.fill 57 | lock.rectangle.on.rectangle 58 | lock.rectangle.on.rectangle.fill 59 | lock.shield 60 | lock.shield.fill 61 | lock.slash 62 | lock.slash.fill 63 | lock.trianglebadge.exclamationmark 64 | lock.trianglebadge.exclamationmark.fill 65 | exclamationmark.lock 66 | exclamationmark.lock.fill 67 | lock.badge.clock 68 | lock.badge.clock.fill 69 | lock.open 70 | lock.open.fill 71 | lock.open.trianglebadge.exclamationmark 72 | lock.open.trianglebadge.exclamationmark.fill 73 | lock.rotation 74 | lock.open.rotation 75 | key 76 | key.fill 77 | key.slash 78 | key.slash.fill 79 | key.radiowaves.forward 80 | key.radiowaves.forward.fill 81 | key.radiowaves.forward.slash 82 | key.radiowaves.forward.slash.fill 83 | key.horizontal 84 | key.horizontal.fill 85 | questionmark.key.filled 86 | faceid 87 | lock.display 88 | lock.open.display 89 | lock.desktopcomputer 90 | lock.open.desktopcomputer 91 | lock.laptopcomputer 92 | lock.open.laptopcomputer 93 | lock.iphone 94 | lock.open.iphone 95 | lock.ipad 96 | lock.open.ipad 97 | lock.applewatch 98 | lock.open.applewatch 99 | eye 100 | eye.fill 101 | eye.circle 102 | eye.circle.fill 103 | eye.square 104 | eye.square.fill 105 | eye.slash 106 | eye.slash.fill 107 | eye.slash.circle 108 | eye.slash.circle.fill 109 | eye.trianglebadge.exclamationmark 110 | eye.trianglebadge.exclamationmark.fill 111 | hand.raised 112 | hand.raised.fill 113 | hand.raised.circle 114 | hand.raised.circle.fill 115 | hand.raised.square 116 | hand.raised.square.fill 117 | hand.raised.app 118 | hand.raised.app.fill 119 | hand.raised.slash 120 | hand.raised.slash.fill 121 | key.viewfinder 122 | touchid 123 | exclamationmark.shield 124 | exclamationmark.shield.fill 125 | xmark.shield 126 | xmark.shield.fill 127 | checkmark 128 | checkmark.circle 129 | checkmark.circle.fill 130 | checkmark.circle.badge.questionmark 131 | checkmark.circle.badge.questionmark.fill 132 | checkmark.circle.badge.xmark 133 | checkmark.circle.badge.xmark.fill 134 | checkmark.circle.trianglebadge.exclamationmark 135 | checkmark.square 136 | checkmark.square.fill 137 | checkmark.rectangle 138 | checkmark.rectangle.fill 139 | checkmark.rectangle.portrait 140 | checkmark.rectangle.portrait.fill 141 | checkmark.diamond 142 | checkmark.diamond.fill 143 | checkmark.shield 144 | checkmark.shield.fill 145 | -------------------------------------------------------------------------------- /Sources/SymbolPicker/Resources/Ventura/Ventura-Fitness.txt: -------------------------------------------------------------------------------- 1 | figure.walk 2 | figure.walk.circle 3 | figure.walk.circle.fill 4 | figure.walk.diamond 5 | figure.walk.diamond.fill 6 | figure.run 7 | figure.run.circle 8 | figure.run.circle.fill 9 | figure.run.square.stack 10 | figure.run.square.stack.fill 11 | figure.roll 12 | figure.roll.runningpace 13 | figure.american.football 14 | figure.archery 15 | figure.australian.football 16 | figure.badminton 17 | figure.barre 18 | figure.baseball 19 | figure.basketball 20 | figure.bowling 21 | figure.boxing 22 | figure.climbing 23 | figure.cooldown 24 | figure.core.training 25 | figure.cricket 26 | figure.skiing.crosscountry 27 | figure.cross.training 28 | figure.curling 29 | figure.dance 30 | figure.disc.sports 31 | figure.skiing.downhill 32 | figure.elliptical 33 | figure.equestrian.sports 34 | figure.fencing 35 | figure.fishing 36 | figure.flexibility 37 | figure.strengthtraining.functional 38 | figure.golf 39 | figure.gymnastics 40 | figure.hand.cycling 41 | figure.handball 42 | figure.highintensity.intervaltraining 43 | figure.hiking 44 | figure.hockey 45 | figure.hunting 46 | figure.indoor.cycle 47 | figure.jumprope 48 | figure.kickboxing 49 | figure.lacrosse 50 | figure.martial.arts 51 | figure.mind.and.body 52 | figure.mixed.cardio 53 | figure.open.water.swim 54 | figure.outdoor.cycle 55 | oar.2.crossed 56 | figure.pickleball 57 | figure.pilates 58 | figure.play 59 | figure.pool.swim 60 | figure.racquetball 61 | figure.rolling 62 | figure.rower 63 | figure.rugby 64 | figure.sailing 65 | figure.skating 66 | figure.snowboarding 67 | figure.soccer 68 | figure.socialdance 69 | figure.softball 70 | figure.squash 71 | figure.stair.stepper 72 | figure.stairs 73 | figure.step.training 74 | figure.surfing 75 | figure.table.tennis 76 | figure.taichi 77 | figure.tennis 78 | figure.track.and.field 79 | figure.strengthtraining.traditional 80 | figure.volleyball 81 | figure.water.fitness 82 | figure.waterpolo 83 | figure.wrestling 84 | figure.yoga 85 | baseball.diamond.bases 86 | dumbbell 87 | dumbbell.fill 88 | sportscourt 89 | sportscourt.fill 90 | sportscourt.circle 91 | sportscourt.circle.fill 92 | lane 93 | 1.lane 94 | 2.lane 95 | 3.lane 96 | 4.lane 97 | 5.lane 98 | 6.lane 99 | 7.lane 100 | 8.lane 101 | 9.lane 102 | 10.lane 103 | 11.lane 104 | 12.lane 105 | soccerball 106 | soccerball.inverse 107 | soccerball.circle 108 | soccerball.circle.inverse 109 | soccerball.circle.fill 110 | soccerball.circle.fill.inverse 111 | baseball 112 | baseball.fill 113 | baseball.circle 114 | baseball.circle.fill 115 | basketball 116 | basketball.fill 117 | basketball.circle 118 | basketball.circle.fill 119 | football 120 | football.fill 121 | football.circle 122 | football.circle.fill 123 | tennis.racket 124 | tennis.racket.circle 125 | tennis.racket.circle.fill 126 | hockey.puck 127 | hockey.puck.fill 128 | hockey.puck.circle 129 | hockey.puck.circle.fill 130 | cricket.ball 131 | cricket.ball.fill 132 | cricket.ball.circle 133 | cricket.ball.circle.fill 134 | tennisball 135 | tennisball.fill 136 | tennisball.circle 137 | tennisball.circle.fill 138 | volleyball 139 | volleyball.fill 140 | volleyball.circle 141 | volleyball.circle.fill 142 | trophy 143 | trophy.fill 144 | trophy.circle 145 | trophy.circle.fill 146 | medal 147 | medal.fill 148 | water.waves 149 | water.waves.slash 150 | water.waves.and.arrow.up 151 | water.waves.and.arrow.down 152 | water.waves.and.arrow.down.trianglebadge.exclamationmark 153 | flag.checkered 154 | flag.checkered.circle 155 | flag.checkered.circle.fill 156 | flag.2.crossed 157 | flag.2.crossed.fill 158 | flag.2.crossed.circle 159 | flag.2.crossed.circle.fill 160 | flag.filled.and.flag.crossed 161 | flag.and.flag.filled.crossed 162 | flag.checkered.2.crossed 163 | gamecontroller 164 | gamecontroller.fill -------------------------------------------------------------------------------- /Sources/SymbolPicker/Resources/Sonoma/Sonoma-Weather.txt: -------------------------------------------------------------------------------- 1 | sun.min 2 | sun.min.fill 3 | sun.max 4 | sun.max.fill 5 | sun.max.circle 6 | sun.max.circle.fill 7 | sun.max.trianglebadge.exclamationmark 8 | sun.max.trianglebadge.exclamationmark.fill 9 | sunrise 10 | sunrise.fill 11 | sunrise.circle 12 | sunrise.circle.fill 13 | sunset 14 | sunset.fill 15 | sunset.circle 16 | sunset.circle.fill 17 | sun.horizon 18 | sun.horizon.fill 19 | sun.horizon.circle 20 | sun.horizon.circle.fill 21 | sun.dust 22 | sun.dust.fill 23 | sun.dust.circle 24 | sun.dust.circle.fill 25 | sun.haze 26 | sun.haze.fill 27 | sun.haze.circle 28 | sun.haze.circle.fill 29 | sun.rain 30 | sun.rain.fill 31 | sun.rain.circle 32 | sun.rain.circle.fill 33 | sun.snow 34 | sun.snow.fill 35 | sun.snow.circle 36 | sun.snow.circle.fill 37 | moon 38 | moon.fill 39 | moon.circle 40 | moon.circle.fill 41 | moon.dust 42 | moon.dust.fill 43 | moon.dust.circle 44 | moon.dust.circle.fill 45 | moon.haze 46 | moon.haze.fill 47 | moon.haze.circle 48 | moon.haze.circle.fill 49 | sparkles 50 | moon.stars 51 | moon.stars.fill 52 | moon.stars.circle 53 | moon.stars.circle.fill 54 | cloud 55 | cloud.fill 56 | cloud.circle 57 | cloud.circle.fill 58 | cloud.drizzle 59 | cloud.drizzle.fill 60 | cloud.drizzle.circle 61 | cloud.drizzle.circle.fill 62 | cloud.rain 63 | cloud.rain.fill 64 | cloud.rain.circle 65 | cloud.rain.circle.fill 66 | cloud.heavyrain 67 | cloud.heavyrain.fill 68 | cloud.heavyrain.circle 69 | cloud.heavyrain.circle.fill 70 | cloud.fog 71 | cloud.fog.fill 72 | cloud.fog.circle 73 | cloud.fog.circle.fill 74 | cloud.hail 75 | cloud.hail.fill 76 | cloud.hail.circle 77 | cloud.hail.circle.fill 78 | cloud.snow 79 | cloud.snow.fill 80 | cloud.snow.circle 81 | cloud.snow.circle.fill 82 | cloud.sleet 83 | cloud.sleet.fill 84 | cloud.sleet.circle 85 | cloud.sleet.circle.fill 86 | cloud.bolt 87 | cloud.bolt.fill 88 | cloud.bolt.circle 89 | cloud.bolt.circle.fill 90 | cloud.bolt.rain 91 | cloud.bolt.rain.fill 92 | cloud.bolt.rain.circle 93 | cloud.bolt.rain.circle.fill 94 | cloud.sun 95 | cloud.sun.fill 96 | cloud.sun.circle 97 | cloud.sun.circle.fill 98 | cloud.sun.rain 99 | cloud.sun.rain.fill 100 | cloud.sun.rain.circle 101 | cloud.sun.rain.circle.fill 102 | cloud.sun.bolt 103 | cloud.sun.bolt.fill 104 | cloud.sun.bolt.circle 105 | cloud.sun.bolt.circle.fill 106 | cloud.moon 107 | cloud.moon.fill 108 | cloud.moon.circle 109 | cloud.moon.circle.fill 110 | cloud.moon.rain 111 | cloud.moon.rain.fill 112 | cloud.moon.rain.circle 113 | cloud.moon.rain.circle.fill 114 | cloud.moon.bolt 115 | cloud.moon.bolt.fill 116 | cloud.moon.bolt.circle 117 | cloud.moon.bolt.circle.fill 118 | smoke 119 | smoke.fill 120 | smoke.circle 121 | smoke.circle.fill 122 | wind 123 | wind.circle 124 | wind.circle.fill 125 | wind.snow 126 | wind.snow.circle 127 | wind.snow.circle.fill 128 | snowflake 129 | snowflake.circle 130 | snowflake.circle.fill 131 | snowflake.slash 132 | tornado 133 | tornado.circle 134 | tornado.circle.fill 135 | tropicalstorm 136 | tropicalstorm.circle 137 | tropicalstorm.circle.fill 138 | hurricane 139 | hurricane.circle 140 | hurricane.circle.fill 141 | thermometer.sun 142 | thermometer.sun.fill 143 | thermometer.sun.circle 144 | thermometer.sun.circle.fill 145 | thermometer.snowflake 146 | thermometer.snowflake.circle 147 | thermometer.snowflake.circle.fill 148 | thermometer.variable.and.figure 149 | thermometer.variable.and.figure.circle 150 | thermometer.variable.and.figure.circle.fill 151 | thermometer.low 152 | thermometer.medium 153 | thermometer.high 154 | thermometer.medium.slash 155 | aqi.low 156 | aqi.medium 157 | aqi.high 158 | humidity 159 | humidity.fill 160 | rainbow 161 | cloud.rainbow.half 162 | cloud.rainbow.half.fill 163 | carbon.monoxide.cloud 164 | carbon.monoxide.cloud.fill 165 | carbon.dioxide.cloud 166 | carbon.dioxide.cloud.fill 167 | -------------------------------------------------------------------------------- /Sources/SymbolPicker/Resources/Monterey/Monterey-Commerce.txt: -------------------------------------------------------------------------------- 1 | signature 2 | bag 3 | bag.fill 4 | bag.circle 5 | bag.circle.fill 6 | bag.badge.plus 7 | bag.fill.badge.plus 8 | bag.badge.minus 9 | bag.fill.badge.minus 10 | cart 11 | cart.fill 12 | cart.circle 13 | cart.circle.fill 14 | cart.badge.plus 15 | cart.fill.badge.plus 16 | cart.badge.minus 17 | cart.fill.badge.minus 18 | creditcard 19 | creditcard.fill 20 | creditcard.circle 21 | creditcard.circle.fill 22 | creditcard.and.123 23 | creditcard.trianglebadge.exclamationmark 24 | giftcard 25 | giftcard.fill 26 | banknote 27 | banknote.fill 28 | dollarsign.circle 29 | dollarsign.circle.fill 30 | dollarsign.square 31 | dollarsign.square.fill 32 | centsign.circle 33 | centsign.circle.fill 34 | centsign.square 35 | centsign.square.fill 36 | yensign.circle 37 | yensign.circle.fill 38 | yensign.square 39 | yensign.square.fill 40 | sterlingsign.circle 41 | sterlingsign.circle.fill 42 | sterlingsign.square 43 | sterlingsign.square.fill 44 | francsign.circle 45 | francsign.circle.fill 46 | francsign.square 47 | francsign.square.fill 48 | florinsign.circle 49 | florinsign.circle.fill 50 | florinsign.square 51 | florinsign.square.fill 52 | turkishlirasign.circle 53 | turkishlirasign.circle.fill 54 | turkishlirasign.square 55 | turkishlirasign.square.fill 56 | rublesign.circle 57 | rublesign.circle.fill 58 | rublesign.square 59 | rublesign.square.fill 60 | eurosign.circle 61 | eurosign.circle.fill 62 | eurosign.square 63 | eurosign.square.fill 64 | dongsign.circle 65 | dongsign.circle.fill 66 | dongsign.square 67 | dongsign.square.fill 68 | indianrupeesign.circle 69 | indianrupeesign.circle.fill 70 | indianrupeesign.square 71 | indianrupeesign.square.fill 72 | tengesign.circle 73 | tengesign.circle.fill 74 | tengesign.square 75 | tengesign.square.fill 76 | pesetasign.circle 77 | pesetasign.circle.fill 78 | pesetasign.square 79 | pesetasign.square.fill 80 | pesosign.circle 81 | pesosign.circle.fill 82 | pesosign.square 83 | pesosign.square.fill 84 | kipsign.circle 85 | kipsign.circle.fill 86 | kipsign.square 87 | kipsign.square.fill 88 | wonsign.circle 89 | wonsign.circle.fill 90 | wonsign.square 91 | wonsign.square.fill 92 | lirasign.circle 93 | lirasign.circle.fill 94 | lirasign.square 95 | lirasign.square.fill 96 | australsign.circle 97 | australsign.circle.fill 98 | australsign.square 99 | australsign.square.fill 100 | hryvniasign.circle 101 | hryvniasign.circle.fill 102 | hryvniasign.square 103 | hryvniasign.square.fill 104 | nairasign.circle 105 | nairasign.circle.fill 106 | nairasign.square 107 | nairasign.square.fill 108 | guaranisign.circle 109 | guaranisign.circle.fill 110 | guaranisign.square 111 | guaranisign.square.fill 112 | coloncurrencysign.circle 113 | coloncurrencysign.circle.fill 114 | coloncurrencysign.square 115 | coloncurrencysign.square.fill 116 | cedisign.circle 117 | cedisign.circle.fill 118 | cedisign.square 119 | cedisign.square.fill 120 | cruzeirosign.circle 121 | cruzeirosign.circle.fill 122 | cruzeirosign.square 123 | cruzeirosign.square.fill 124 | tugriksign.circle 125 | tugriksign.circle.fill 126 | tugriksign.square 127 | tugriksign.square.fill 128 | millsign.circle 129 | millsign.circle.fill 130 | millsign.square 131 | millsign.square.fill 132 | shekelsign.circle 133 | shekelsign.circle.fill 134 | shekelsign.square 135 | shekelsign.square.fill 136 | manatsign.circle 137 | manatsign.circle.fill 138 | manatsign.square 139 | manatsign.square.fill 140 | rupeesign.circle 141 | rupeesign.circle.fill 142 | rupeesign.square 143 | rupeesign.square.fill 144 | bahtsign.circle 145 | bahtsign.circle.fill 146 | bahtsign.square 147 | bahtsign.square.fill 148 | larisign.circle 149 | larisign.circle.fill 150 | larisign.square 151 | larisign.square.fill 152 | bitcoinsign.circle 153 | bitcoinsign.circle.fill 154 | bitcoinsign.square 155 | bitcoinsign.square.fill 156 | brazilianrealsign.circle 157 | brazilianrealsign.circle.fill 158 | brazilianrealsign.square 159 | brazilianrealsign.square.fill 160 | -------------------------------------------------------------------------------- /Sources/SymbolPicker/Resources/Sonoma/Sonoma-Fitness.txt: -------------------------------------------------------------------------------- 1 | figure.walk 2 | figure.walk.circle 3 | figure.walk.circle.fill 4 | figure.walk.diamond 5 | figure.walk.diamond.fill 6 | figure.run 7 | figure.run.circle 8 | figure.run.circle.fill 9 | figure.run.square.stack 10 | figure.run.square.stack.fill 11 | figure.roll 12 | figure.roll.runningpace 13 | figure.american.football 14 | figure.archery 15 | figure.australian.football 16 | figure.badminton 17 | figure.barre 18 | figure.baseball 19 | figure.basketball 20 | figure.bowling 21 | figure.boxing 22 | figure.climbing 23 | figure.cooldown 24 | figure.core.training 25 | figure.cricket 26 | figure.skiing.crosscountry 27 | figure.cross.training 28 | figure.curling 29 | figure.dance 30 | figure.disc.sports 31 | figure.skiing.downhill 32 | figure.elliptical 33 | figure.equestrian.sports 34 | figure.fencing 35 | figure.fishing 36 | figure.flexibility 37 | figure.strengthtraining.functional 38 | figure.golf 39 | figure.gymnastics 40 | figure.hand.cycling 41 | figure.handball 42 | figure.highintensity.intervaltraining 43 | figure.hiking 44 | figure.hockey 45 | figure.hunting 46 | figure.indoor.cycle 47 | figure.jumprope 48 | figure.kickboxing 49 | figure.lacrosse 50 | figure.martial.arts 51 | figure.mind.and.body 52 | figure.mixed.cardio 53 | figure.open.water.swim 54 | figure.outdoor.cycle 55 | oar.2.crossed 56 | figure.pickleball 57 | figure.pilates 58 | figure.play 59 | figure.pool.swim 60 | figure.racquetball 61 | figure.rolling 62 | figure.rower 63 | figure.rugby 64 | figure.sailing 65 | figure.skating 66 | figure.snowboarding 67 | figure.soccer 68 | figure.socialdance 69 | figure.softball 70 | figure.squash 71 | figure.stair.stepper 72 | figure.stairs 73 | figure.step.training 74 | figure.surfing 75 | figure.table.tennis 76 | figure.taichi 77 | figure.tennis 78 | figure.track.and.field 79 | figure.strengthtraining.traditional 80 | figure.volleyball 81 | figure.water.fitness 82 | figure.waterpolo 83 | figure.wrestling 84 | figure.yoga 85 | baseball.diamond.bases 86 | dumbbell 87 | dumbbell.fill 88 | sportscourt 89 | sportscourt.fill 90 | sportscourt.circle 91 | sportscourt.circle.fill 92 | lane 93 | 1.lane 94 | 2.lane 95 | 3.lane 96 | 4.lane 97 | 5.lane 98 | 6.lane 99 | 7.lane 100 | 8.lane 101 | 9.lane 102 | 10.lane 103 | 11.lane 104 | 12.lane 105 | soccerball 106 | soccerball.inverse 107 | soccerball.circle 108 | soccerball.circle.inverse 109 | soccerball.circle.fill 110 | soccerball.circle.fill.inverse 111 | baseball 112 | baseball.fill 113 | baseball.circle 114 | baseball.circle.fill 115 | basketball 116 | basketball.fill 117 | basketball.circle 118 | basketball.circle.fill 119 | football 120 | football.fill 121 | football.circle 122 | football.circle.fill 123 | tennis.racket 124 | tennis.racket.circle 125 | tennis.racket.circle.fill 126 | hockey.puck 127 | hockey.puck.fill 128 | hockey.puck.circle 129 | hockey.puck.circle.fill 130 | cricket.ball 131 | cricket.ball.fill 132 | cricket.ball.circle 133 | cricket.ball.circle.fill 134 | tennisball 135 | tennisball.fill 136 | tennisball.circle 137 | tennisball.circle.fill 138 | volleyball 139 | volleyball.fill 140 | volleyball.circle 141 | volleyball.circle.fill 142 | skateboard 143 | skateboard.fill 144 | skis 145 | skis.fill 146 | snowboard 147 | snowboard.fill 148 | surfboard 149 | surfboard.fill 150 | gym.bag 151 | gym.bag.fill 152 | trophy 153 | trophy.fill 154 | trophy.circle 155 | trophy.circle.fill 156 | medal 157 | medal.fill 158 | water.waves 159 | water.waves.slash 160 | water.waves.and.arrow.up 161 | water.waves.and.arrow.down 162 | water.waves.and.arrow.down.trianglebadge.exclamationmark 163 | flag.checkered 164 | flag.checkered.circle 165 | flag.checkered.circle.fill 166 | flag.2.crossed 167 | flag.2.crossed.fill 168 | flag.2.crossed.circle 169 | flag.2.crossed.circle.fill 170 | flag.filled.and.flag.crossed 171 | flag.and.flag.filled.crossed 172 | flag.checkered.2.crossed 173 | gauge.with.needle 174 | gauge.with.needle.fill 175 | gamecontroller 176 | gamecontroller.fill 177 | -------------------------------------------------------------------------------- /Sources/SymbolPicker/Resources/Ventura/Ventura-Camera & Photos.txt: -------------------------------------------------------------------------------- 1 | bolt 2 | bolt.fill 3 | bolt.circle 4 | bolt.circle.fill 5 | bolt.square 6 | bolt.square.fill 7 | bolt.slash 8 | bolt.slash.fill 9 | bolt.slash.circle 10 | bolt.slash.circle.fill 11 | bolt.badge.clock 12 | bolt.badge.clock.fill 13 | bolt.badge.a 14 | bolt.badge.a.fill 15 | bolt.trianglebadge.exclamationmark 16 | bolt.trianglebadge.exclamationmark.fill 17 | camera 18 | camera.fill 19 | camera.circle 20 | camera.circle.fill 21 | camera.shutter.button 22 | camera.shutter.button.fill 23 | camera.badge.ellipsis 24 | camera.fill.badge.ellipsis 25 | arrow.triangle.2.circlepath.camera 26 | arrow.triangle.2.circlepath.camera.fill 27 | camera.on.rectangle 28 | camera.on.rectangle.fill 29 | iphone.rear.camera 30 | ipad.rear.camera 31 | camera.macro 32 | camera.macro.circle 33 | camera.macro.circle.fill 34 | plus.viewfinder 35 | photo 36 | photo.fill 37 | photo.circle 38 | photo.circle.fill 39 | text.below.photo 40 | text.below.photo.fill 41 | camera.metering.center.weighted.average 42 | camera.metering.center.weighted 43 | camera.metering.matrix 44 | camera.metering.multispot 45 | camera.metering.none 46 | camera.metering.partial 47 | camera.metering.spot 48 | camera.metering.unknown 49 | camera.aperture 50 | circle.filled.pattern.diagonalline.rectangle 51 | circle.rectangle.filled.pattern.diagonalline 52 | circle.dashed.rectangle 53 | circle.rectangle.dashed 54 | photo.on.rectangle 55 | photo.fill.on.rectangle.fill 56 | photo.on.rectangle.angled 57 | photo.stack 58 | photo.stack.fill 59 | livephoto 60 | livephoto.slash 61 | livephoto.badge.a 62 | livephoto.play 63 | scope 64 | rectangle.and.arrow.up.right.and.arrow.down.left 65 | rectangle.and.arrow.up.right.and.arrow.down.left.slash 66 | square.2.layers.3d 67 | square.2.layers.3d.top.filled 68 | square.2.layers.3d.bottom.filled 69 | square.3.layers.3d.down.right 70 | square.3.layers.3d.down.right.slash 71 | square.3.layers.3d.down.left 72 | square.3.layers.3d.down.left.slash 73 | square.3.layers.3d.down.forward 74 | square.3.layers.3d.down.backward 75 | square.3.layers.3d 76 | square.3.layers.3d.slash 77 | square.3.layers.3d.top.filled 78 | square.3.layers.3d.middle.filled 79 | square.3.layers.3d.bottom.filled 80 | perspective 81 | circle.and.line.horizontal 82 | circle.and.line.horizontal.fill 83 | trapezoid.and.line.vertical 84 | trapezoid.and.line.vertical.fill 85 | trapezoid.and.line.horizontal 86 | trapezoid.and.line.horizontal.fill 87 | camera.filters 88 | arrow.left.and.right.righttriangle.left.righttriangle.right 89 | arrow.left.and.right.righttriangle.left.righttriangle.right.fill 90 | arrow.up.and.down.righttriangle.up.righttriangle.down 91 | arrow.up.and.down.righttriangle.up.righttriangle.down.fill 92 | f.cursive 93 | f.cursive.circle 94 | f.cursive.circle.fill 95 | plusminus 96 | plusminus.circle 97 | plusminus.circle.fill 98 | chevron.left 99 | chevron.left.circle 100 | chevron.left.circle.fill 101 | chevron.backward 102 | chevron.backward.circle 103 | chevron.backward.circle.fill 104 | chevron.right 105 | chevron.right.circle 106 | chevron.right.circle.fill 107 | chevron.forward 108 | chevron.forward.circle 109 | chevron.forward.circle.fill 110 | chevron.up 111 | chevron.up.circle 112 | chevron.up.circle.fill 113 | chevron.down 114 | chevron.down.circle 115 | chevron.down.circle.fill 116 | arrow.up.left.and.arrow.down.right 117 | arrow.up.left.and.arrow.down.right.circle 118 | arrow.up.left.and.arrow.down.right.circle.fill 119 | arrow.up.backward.and.arrow.down.forward 120 | arrow.up.backward.and.arrow.down.forward.circle 121 | arrow.up.backward.and.arrow.down.forward.circle.fill 122 | arrow.down.right.and.arrow.up.left 123 | arrow.down.right.and.arrow.up.left.circle 124 | arrow.down.right.and.arrow.up.left.circle.fill 125 | arrow.down.forward.and.arrow.up.backward 126 | arrow.down.forward.and.arrow.up.backward.circle 127 | arrow.down.forward.and.arrow.up.backward.circle.fill 128 | arrow.triangle.2.circlepath 129 | arrow.triangle.2.circlepath.circle 130 | arrow.triangle.2.circlepath.circle.fill -------------------------------------------------------------------------------- /Sources/SymbolPicker/Resources/Ventura/Ventura-Communication.txt: -------------------------------------------------------------------------------- 1 | mic 2 | mic.fill 3 | mic.circle 4 | mic.circle.fill 5 | mic.square 6 | mic.square.fill 7 | mic.slash 8 | mic.slash.fill 9 | mic.slash.circle 10 | mic.slash.circle.fill 11 | mic.badge.plus 12 | mic.fill.badge.plus 13 | mic.badge.xmark 14 | mic.fill.badge.xmark 15 | mic.and.signal.meter 16 | mic.and.signal.meter.fill 17 | message 18 | message.fill 19 | message.circle 20 | message.circle.fill 21 | message.badge 22 | message.badge.filled.fill 23 | message.badge.circle 24 | message.badge.circle.fill 25 | message.badge.fill 26 | message.and.waveform 27 | message.and.waveform.fill 28 | checkmark.message 29 | checkmark.message.fill 30 | arrow.up.message 31 | arrow.up.message.fill 32 | arrow.down.message 33 | arrow.down.message.fill 34 | plus.message 35 | plus.message.fill 36 | ellipsis.message 37 | ellipsis.message.fill 38 | bubble.right 39 | bubble.right.fill 40 | bubble.right.circle 41 | bubble.right.circle.fill 42 | bubble.left 43 | bubble.left.fill 44 | bubble.left.circle 45 | bubble.left.circle.fill 46 | exclamationmark.bubble 47 | exclamationmark.bubble.fill 48 | exclamationmark.bubble.circle 49 | exclamationmark.bubble.circle.fill 50 | quote.opening 51 | quote.closing 52 | quote.bubble 53 | quote.bubble.fill 54 | star.bubble 55 | star.bubble.fill 56 | character.bubble 57 | character.bubble.fill 58 | text.bubble 59 | text.bubble.fill 60 | captions.bubble 61 | captions.bubble.fill 62 | info.bubble 63 | info.bubble.fill 64 | questionmark.bubble 65 | questionmark.bubble.fill 66 | plus.bubble 67 | plus.bubble.fill 68 | checkmark.bubble 69 | checkmark.bubble.fill 70 | rectangle.3.group.bubble.left 71 | rectangle.3.group.bubble.left.fill 72 | ellipsis.bubble 73 | ellipsis.bubble.fill 74 | ellipsis.vertical.bubble 75 | ellipsis.vertical.bubble.fill 76 | phone.bubble.left 77 | phone.bubble.left.fill 78 | video.bubble.left 79 | video.bubble.left.fill 80 | speaker.wave.2.bubble.left 81 | speaker.wave.2.bubble.left.fill 82 | bubble.middle.bottom 83 | bubble.middle.bottom.fill 84 | bubble.middle.top 85 | bubble.middle.top.fill 86 | bubble.left.and.bubble.right 87 | bubble.left.and.bubble.right.fill 88 | bubble.left.and.exclamationmark.bubble.right 89 | bubble.left.and.exclamationmark.bubble.right.fill 90 | phone 91 | phone.fill 92 | phone.circle 93 | phone.circle.fill 94 | phone.badge.plus 95 | phone.fill.badge.plus 96 | phone.badge.checkmark 97 | phone.fill.badge.checkmark 98 | phone.connection 99 | phone.connection.fill 100 | phone.and.waveform 101 | phone.and.waveform.fill 102 | phone.arrow.up.right 103 | phone.arrow.up.right.fill 104 | phone.arrow.up.right.circle 105 | phone.arrow.up.right.circle.fill 106 | phone.arrow.down.left 107 | phone.arrow.down.left.fill 108 | phone.arrow.right 109 | phone.arrow.right.fill 110 | phone.down 111 | phone.down.fill 112 | phone.down.circle 113 | phone.down.circle.fill 114 | phone.down.waves.left.and.right 115 | teletype 116 | teletype.circle 117 | teletype.circle.fill 118 | teletype.answer 119 | teletype.answer.circle 120 | teletype.answer.circle.fill 121 | video 122 | video.fill 123 | video.circle 124 | video.circle.fill 125 | video.square 126 | video.square.fill 127 | video.slash 128 | video.slash.fill 129 | video.badge.plus 130 | video.fill.badge.plus 131 | video.badge.checkmark 132 | video.fill.badge.checkmark 133 | video.badge.ellipsis 134 | video.fill.badge.ellipsis 135 | video.and.waveform 136 | video.and.waveform.fill 137 | arrow.up.right.video 138 | arrow.up.right.video.fill 139 | arrow.down.left.video 140 | arrow.down.left.video.fill 141 | questionmark.video 142 | questionmark.video.fill 143 | deskview 144 | deskview.fill 145 | envelope 146 | envelope.fill 147 | envelope.circle 148 | envelope.circle.fill 149 | envelope.arrow.triangle.branch 150 | envelope.arrow.triangle.branch.fill 151 | envelope.open 152 | envelope.open.fill 153 | envelope.open.badge.clock 154 | envelope.badge 155 | envelope.badge.fill 156 | waveform 157 | waveform.circle 158 | waveform.circle.fill 159 | waveform.slash 160 | waveform.badge.plus 161 | waveform.badge.minus 162 | waveform.badge.exclamationmark 163 | waveform.and.magnifyingglass 164 | waveform.and.mic 165 | recordingtape 166 | recordingtape.circle 167 | recordingtape.circle.fill -------------------------------------------------------------------------------- /Sources/SymbolPicker/SymbolPickerView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SymbolPIckerView.swift 3 | // 4 | // 5 | // Created by Kai Quan Tay on 4/6/23. 6 | // 7 | 8 | import Foundation 9 | import SwiftUI 10 | 11 | @available(macOS 12.0, *) 12 | public struct SymbolPickerView: NSViewRepresentable { 13 | @Binding var showSymbolPicker: Bool 14 | @Binding var selectedSymbol: String 15 | @Binding var selectedColor: Color 16 | 17 | var title: String = "" 18 | var showColorPickerItem: Bool 19 | 20 | public init(showSymbolPicker: Binding, selectedSymbol: Binding, selectedColor: Binding, title: String, showColorPickerItem: Bool) { 21 | self._showSymbolPicker = showSymbolPicker 22 | self._selectedSymbol = selectedSymbol 23 | self._selectedColor = selectedColor 24 | self.title = title 25 | self.showColorPickerItem = showColorPickerItem 26 | } 27 | 28 | public func makeNSView(context: Context) -> SymbolPickerAdaptor { 29 | let adaptor = SymbolPickerAdaptor( 30 | title: title, 31 | color: .init(selectedColor), 32 | showColorPickerItem: showColorPickerItem, 33 | delegate: context.coordinator 34 | ) 35 | return adaptor 36 | } 37 | 38 | public func updateNSView(_ nsView: SymbolPickerAdaptor, context: Context) { 39 | nsView.title = title 40 | nsView.color = NSColor(selectedColor) 41 | if !showSymbolPicker { 42 | nsView.detach() 43 | } 44 | } 45 | 46 | public typealias NSViewControllerType = SymbolPickerAdaptor 47 | public typealias Coordinator = SymbolCoordinator 48 | 49 | public func makeCoordinator() -> SymbolCoordinator { 50 | SymbolCoordinator(parent: self) 51 | } 52 | 53 | public class SymbolCoordinator: NSObject, SymbolPickerDelegateSwiftUI { 54 | var parent: SymbolPickerView 55 | 56 | init(parent: SymbolPickerView) { 57 | self.parent = parent 58 | } 59 | 60 | public func symbolPicker(_ symbol: String, color: NSColor?) { 61 | parent.selectedSymbol = symbol 62 | if let color { 63 | parent.selectedColor = .init(nsColor: color) 64 | } else { 65 | parent.selectedColor = .accentColor 66 | } 67 | parent.showSymbolPicker = false 68 | } 69 | 70 | public func changeDisplayMode(showing: Bool) { 71 | parent.showSymbolPicker = showing 72 | } 73 | 74 | public func getCurrentSymbol() -> String { 75 | return parent.selectedSymbol 76 | } 77 | } 78 | } 79 | 80 | public final class SymbolPickerAdaptor: NSView { 81 | var title: String 82 | var color: NSColor 83 | var showColorPickerItem: Bool 84 | var delegate: any SymbolPickerDelegateSwiftUI 85 | 86 | private var symbolPickerWindowController: NSWindowController? 87 | 88 | init(title: String, color: NSColor, showColorPickerItem: Bool, delegate: any SymbolPickerDelegateSwiftUI) { 89 | self.title = title 90 | self.color = color 91 | self.showColorPickerItem = showColorPickerItem 92 | self.delegate = delegate 93 | super.init(frame: .zero) 94 | self.addPickerView() 95 | } 96 | 97 | public func detach() { 98 | symbolPickerWindowController = nil 99 | } 100 | 101 | private func addPickerView() { 102 | if let windowController = SymbolPicker.windowController( 103 | symbol: delegate.getCurrentSymbol(), 104 | color: self.color, 105 | delegate: delegate, 106 | title: self.title, 107 | showColorPickerItem: self.showColorPickerItem) { 108 | windowController.loadWindow() 109 | if let view = windowController.window?.contentView { 110 | self.symbolPickerWindowController = windowController 111 | self.addSubview(view) 112 | view.translatesAutoresizingMaskIntoConstraints = false 113 | NSLayoutConstraint.activate([ 114 | self.leadingAnchor.constraint(equalTo: view.leadingAnchor), 115 | self.trailingAnchor.constraint(equalTo: view.trailingAnchor), 116 | self.topAnchor.constraint(equalTo: view.topAnchor), 117 | self.bottomAnchor.constraint(equalTo: view.bottomAnchor), 118 | ]) 119 | } 120 | } 121 | } 122 | 123 | required init?(coder: NSCoder) { 124 | fatalError("init(coder:) has not been implemented") 125 | } 126 | } 127 | 128 | protocol SymbolPickerDelegateSwiftUI: SymbolPickerDelegate { 129 | func changeDisplayMode(showing: Bool) 130 | 131 | func getCurrentSymbol() -> String 132 | } 133 | -------------------------------------------------------------------------------- /Sources/SymbolPicker/Resources/Monterey/Monterey-Human.txt: -------------------------------------------------------------------------------- 1 | folder.badge.person.crop 2 | folder.fill.badge.person.crop 3 | externaldrive.badge.person.crop 4 | externaldrive.fill.badge.person.crop 5 | person 6 | person.fill 7 | person.fill.turn.right 8 | person.fill.turn.down 9 | person.fill.turn.left 10 | person.fill.checkmark 11 | person.fill.xmark 12 | person.fill.questionmark 13 | person.circle 14 | person.circle.fill 15 | person.badge.plus 16 | person.fill.badge.plus 17 | person.badge.minus 18 | person.fill.badge.minus 19 | person.badge.clock 20 | person.badge.clock.fill 21 | shareplay 22 | shareplay.slash 23 | rectangle.inset.filled.and.person.filled 24 | person.and.arrow.left.and.arrow.right 25 | person.fill.and.arrow.left.and.arrow.right 26 | person.2 27 | person.2.fill 28 | person.2.circle 29 | person.2.circle.fill 30 | person.wave.2 31 | person.wave.2.fill 32 | person.2.wave.2 33 | person.2.wave.2.fill 34 | person.3 35 | person.3.fill 36 | person.3.sequence 37 | person.3.sequence.fill 38 | person.crop.circle 39 | person.crop.circle.fill 40 | person.crop.circle.badge.plus 41 | person.crop.circle.fill.badge.plus 42 | person.crop.circle.badge.minus 43 | person.crop.circle.fill.badge.minus 44 | person.crop.circle.badge.checkmark 45 | person.crop.circle.fill.badge.checkmark 46 | person.crop.circle.badge.xmark 47 | person.crop.circle.fill.badge.xmark 48 | person.crop.circle.badge.questionmark 49 | person.crop.circle.badge.questionmark.fill 50 | person.crop.circle.badge.exclamationmark 51 | person.crop.circle.badge.exclamationmark.fill 52 | person.crop.circle.badge.moon 53 | person.crop.circle.badge.moon.fill 54 | person.crop.circle.badge.clock 55 | person.crop.circle.badge.clock.fill 56 | person.crop.circle.badge 57 | person.crop.circle.badge.fill 58 | person.crop.square 59 | person.crop.square.fill 60 | person.crop.artframe 61 | person.crop.rectangle.stack 62 | person.crop.rectangle.stack.fill 63 | person.2.crop.square.stack 64 | person.2.crop.square.stack.fill 65 | person.crop.rectangle 66 | person.crop.rectangle.fill 67 | arrow.up.and.person.rectangle.portrait 68 | arrow.up.and.person.rectangle.turn.right 69 | arrow.up.and.person.rectangle.turn.left 70 | person.crop.square.filled.and.at.rectangle 71 | person.crop.square.filled.and.at.rectangle.fill 72 | person.text.rectangle 73 | person.text.rectangle.fill 74 | eye 75 | eye.fill 76 | eye.circle 77 | eye.circle.fill 78 | eye.square 79 | eye.square.fill 80 | eye.slash 81 | eye.slash.fill 82 | eye.slash.circle 83 | eye.slash.circle.fill 84 | eye.trianglebadge.exclamationmark 85 | eye.trianglebadge.exclamationmark.fill 86 | tshirt 87 | tshirt.fill 88 | eyes 89 | eyes.inverse 90 | eyebrow 91 | nose 92 | nose.fill 93 | mustache 94 | mustache.fill 95 | mouth 96 | mouth.fill 97 | brain.head.profile 98 | brain 99 | person.icloud 100 | person.icloud.fill 101 | lungs 102 | lungs.fill 103 | face.smiling 104 | face.smiling.fill 105 | face.dashed 106 | face.dashed.fill 107 | person.fill.viewfinder 108 | rectangle.badge.person.crop 109 | rectangle.fill.badge.person.crop 110 | rectangle.stack.badge.person.crop 111 | rectangle.stack.badge.person.crop.fill 112 | figure.walk 113 | figure.walk.circle 114 | figure.walk.circle.fill 115 | figure.walk.diamond 116 | figure.walk.diamond.fill 117 | figure.stand 118 | figure.stand.line.dotted.figure.stand 119 | figure.wave 120 | figure.wave.circle 121 | figure.wave.circle.fill 122 | figure.roll 123 | ear 124 | ear.badge.checkmark 125 | ear.trianglebadge.exclamationmark 126 | ear.and.waveform 127 | ear.fill 128 | hearingdevice.ear 129 | hand.raised 130 | hand.raised.fill 131 | hand.raised.circle 132 | hand.raised.circle.fill 133 | hand.raised.square 134 | hand.raised.square.fill 135 | hand.raised.slash 136 | hand.raised.slash.fill 137 | hand.thumbsup 138 | hand.thumbsup.fill 139 | hand.thumbsup.circle 140 | hand.thumbsup.circle.fill 141 | hand.thumbsdown 142 | hand.thumbsdown.fill 143 | hand.thumbsdown.circle 144 | hand.thumbsdown.circle.fill 145 | hand.point.up.left 146 | hand.point.up.left.fill 147 | hand.draw 148 | hand.draw.fill 149 | hand.tap 150 | hand.tap.fill 151 | rectangle.and.hand.point.up.left 152 | rectangle.and.hand.point.up.left.fill 153 | rectangle.filled.and.hand.point.up.left 154 | rectangle.and.hand.point.up.left.filled 155 | hand.point.left 156 | hand.point.left.fill 157 | hand.point.right 158 | hand.point.right.fill 159 | hand.point.up 160 | hand.point.up.fill 161 | hand.point.up.braille 162 | hand.point.up.braille.fill 163 | hand.point.down 164 | hand.point.down.fill 165 | hand.wave 166 | hand.wave.fill 167 | hands.clap 168 | hands.clap.fill 169 | hands.sparkles 170 | hands.sparkles.fill 171 | -------------------------------------------------------------------------------- /Sources/SymbolPicker/Resources/Sonoma/Sonoma-Communication.txt: -------------------------------------------------------------------------------- 1 | mic 2 | mic.fill 3 | mic.circle 4 | mic.circle.fill 5 | mic.square 6 | mic.square.fill 7 | mic.slash 8 | mic.slash.fill 9 | mic.slash.circle 10 | mic.slash.circle.fill 11 | mic.badge.plus 12 | mic.fill.badge.plus 13 | mic.badge.xmark 14 | mic.fill.badge.xmark 15 | mic.and.signal.meter 16 | mic.and.signal.meter.fill 17 | message 18 | message.fill 19 | message.circle 20 | message.circle.fill 21 | message.badge 22 | message.badge.filled.fill 23 | message.badge.circle 24 | message.badge.circle.fill 25 | message.badge.fill 26 | message.badge.waveform 27 | message.badge.waveform.fill 28 | checkmark.message 29 | checkmark.message.fill 30 | arrow.up.message 31 | arrow.up.message.fill 32 | arrow.down.message 33 | arrow.down.message.fill 34 | plus.message 35 | plus.message.fill 36 | ellipsis.message 37 | ellipsis.message.fill 38 | bubble 39 | bubble.fill 40 | bubble.circle 41 | bubble.circle.fill 42 | bubble.right 43 | bubble.right.fill 44 | bubble.right.circle 45 | bubble.right.circle.fill 46 | bubble.left 47 | bubble.left.fill 48 | bubble.left.circle 49 | bubble.left.circle.fill 50 | exclamationmark.bubble 51 | exclamationmark.bubble.fill 52 | exclamationmark.bubble.circle 53 | exclamationmark.bubble.circle.fill 54 | quote.opening 55 | quote.closing 56 | quote.bubble 57 | quote.bubble.fill 58 | star.bubble 59 | star.bubble.fill 60 | character.bubble 61 | character.bubble.fill 62 | text.bubble 63 | text.bubble.fill 64 | captions.bubble 65 | captions.bubble.fill 66 | info.bubble 67 | info.bubble.fill 68 | questionmark.bubble 69 | questionmark.bubble.fill 70 | plus.bubble 71 | plus.bubble.fill 72 | checkmark.bubble 73 | checkmark.bubble.fill 74 | rectangle.3.group.bubble 75 | rectangle.3.group.bubble.fill 76 | ellipsis.bubble 77 | ellipsis.bubble.fill 78 | ellipsis.vertical.bubble 79 | ellipsis.vertical.bubble.fill 80 | phone.bubble 81 | phone.bubble.fill 82 | video.bubble 83 | video.bubble.fill 84 | speaker.wave.2.bubble 85 | speaker.wave.2.bubble.fill 86 | person.bubble 87 | person.bubble.fill 88 | bubble.middle.bottom 89 | bubble.middle.bottom.fill 90 | bubble.middle.top 91 | bubble.middle.top.fill 92 | bubble.left.and.bubble.right 93 | bubble.left.and.bubble.right.fill 94 | bubble.left.and.exclamationmark.bubble.right 95 | bubble.left.and.exclamationmark.bubble.right.fill 96 | bubble.left.and.text.bubble.right 97 | bubble.left.and.text.bubble.right.fill 98 | phone 99 | phone.fill 100 | phone.circle 101 | phone.circle.fill 102 | phone.badge.plus 103 | phone.fill.badge.plus 104 | phone.badge.checkmark 105 | phone.fill.badge.checkmark 106 | phone.connection 107 | phone.connection.fill 108 | phone.badge.waveform 109 | phone.badge.waveform.fill 110 | phone.arrow.up.right 111 | phone.arrow.up.right.fill 112 | phone.arrow.up.right.circle 113 | phone.arrow.up.right.circle.fill 114 | phone.arrow.down.left 115 | phone.arrow.down.left.fill 116 | phone.arrow.right 117 | phone.arrow.right.fill 118 | phone.down 119 | phone.down.fill 120 | phone.down.circle 121 | phone.down.circle.fill 122 | phone.down.waves.left.and.right 123 | teletype 124 | teletype.circle 125 | teletype.circle.fill 126 | teletype.answer 127 | teletype.answer.circle 128 | teletype.answer.circle.fill 129 | video 130 | video.fill 131 | video.circle 132 | video.circle.fill 133 | video.square 134 | video.square.fill 135 | video.slash 136 | video.slash.fill 137 | video.slash.circle 138 | video.slash.circle.fill 139 | video.badge.plus 140 | video.fill.badge.plus 141 | video.badge.checkmark 142 | video.fill.badge.checkmark 143 | video.badge.ellipsis 144 | video.fill.badge.ellipsis 145 | video.badge.waveform 146 | video.badge.waveform.fill 147 | arrow.up.right.video 148 | arrow.up.right.video.fill 149 | arrow.down.left.video 150 | arrow.down.left.video.fill 151 | questionmark.video 152 | questionmark.video.fill 153 | deskview 154 | deskview.fill 155 | field.of.view.ultrawide 156 | field.of.view.ultrawide.fill 157 | field.of.view.wide 158 | field.of.view.wide.fill 159 | envelope 160 | envelope.fill 161 | envelope.circle 162 | envelope.circle.fill 163 | envelope.arrow.triangle.branch 164 | envelope.arrow.triangle.branch.fill 165 | envelope.open 166 | envelope.open.fill 167 | envelope.open.badge.clock 168 | envelope.badge 169 | envelope.badge.fill 170 | envelope.badge.person.crop 171 | envelope.badge.person.crop.fill 172 | waveform 173 | waveform.circle 174 | waveform.circle.fill 175 | waveform.slash 176 | waveform.badge.plus 177 | waveform.badge.minus 178 | waveform.badge.exclamationmark 179 | waveform.badge.magnifyingglass 180 | waveform.and.person.filled 181 | waveform.badge.mic 182 | recordingtape 183 | recordingtape.circle 184 | recordingtape.circle.fill 185 | -------------------------------------------------------------------------------- /Sources/SymbolPicker/Resources/Ventura/Ventura-Commerce.txt: -------------------------------------------------------------------------------- 1 | signature 2 | bag 3 | bag.fill 4 | bag.circle 5 | bag.circle.fill 6 | bag.badge.plus 7 | bag.fill.badge.plus 8 | bag.badge.minus 9 | bag.fill.badge.minus 10 | bag.badge.questionmark 11 | bag.fill.badge.questionmark 12 | cart 13 | cart.fill 14 | cart.circle 15 | cart.circle.fill 16 | cart.badge.plus 17 | cart.fill.badge.plus 18 | cart.badge.minus 19 | cart.fill.badge.minus 20 | cart.badge.questionmark 21 | cart.fill.badge.questionmark 22 | basket 23 | basket.fill 24 | creditcard 25 | creditcard.fill 26 | creditcard.circle 27 | creditcard.circle.fill 28 | creditcard.and.123 29 | creditcard.trianglebadge.exclamationmark 30 | giftcard 31 | giftcard.fill 32 | banknote 33 | banknote.fill 34 | dollarsign.arrow.circlepath 35 | dollarsign 36 | dollarsign.circle 37 | dollarsign.circle.fill 38 | dollarsign.square 39 | dollarsign.square.fill 40 | centsign 41 | centsign.circle 42 | centsign.circle.fill 43 | centsign.square 44 | centsign.square.fill 45 | yensign 46 | yensign.circle 47 | yensign.circle.fill 48 | yensign.square 49 | yensign.square.fill 50 | sterlingsign 51 | sterlingsign.circle 52 | sterlingsign.circle.fill 53 | sterlingsign.square 54 | sterlingsign.square.fill 55 | francsign 56 | francsign.circle 57 | francsign.circle.fill 58 | francsign.square 59 | francsign.square.fill 60 | florinsign 61 | florinsign.circle 62 | florinsign.circle.fill 63 | florinsign.square 64 | florinsign.square.fill 65 | turkishlirasign 66 | turkishlirasign.circle 67 | turkishlirasign.circle.fill 68 | turkishlirasign.square 69 | turkishlirasign.square.fill 70 | rublesign 71 | rublesign.circle 72 | rublesign.circle.fill 73 | rublesign.square 74 | rublesign.square.fill 75 | eurosign 76 | eurosign.circle 77 | eurosign.circle.fill 78 | eurosign.square 79 | eurosign.square.fill 80 | dongsign 81 | dongsign.circle 82 | dongsign.circle.fill 83 | dongsign.square 84 | dongsign.square.fill 85 | indianrupeesign 86 | indianrupeesign.circle 87 | indianrupeesign.circle.fill 88 | indianrupeesign.square 89 | indianrupeesign.square.fill 90 | tengesign 91 | tengesign.circle 92 | tengesign.circle.fill 93 | tengesign.square 94 | tengesign.square.fill 95 | pesetasign 96 | pesetasign.circle 97 | pesetasign.circle.fill 98 | pesetasign.square 99 | pesetasign.square.fill 100 | pesosign 101 | pesosign.circle 102 | pesosign.circle.fill 103 | pesosign.square 104 | pesosign.square.fill 105 | kipsign 106 | kipsign.circle 107 | kipsign.circle.fill 108 | kipsign.square 109 | kipsign.square.fill 110 | wonsign 111 | wonsign.circle 112 | wonsign.circle.fill 113 | wonsign.square 114 | wonsign.square.fill 115 | lirasign 116 | lirasign.circle 117 | lirasign.circle.fill 118 | lirasign.square 119 | lirasign.square.fill 120 | australsign 121 | australsign.circle 122 | australsign.circle.fill 123 | australsign.square 124 | australsign.square.fill 125 | hryvniasign 126 | hryvniasign.circle 127 | hryvniasign.circle.fill 128 | hryvniasign.square 129 | hryvniasign.square.fill 130 | nairasign 131 | nairasign.circle 132 | nairasign.circle.fill 133 | nairasign.square 134 | nairasign.square.fill 135 | guaranisign 136 | guaranisign.circle 137 | guaranisign.circle.fill 138 | guaranisign.square 139 | guaranisign.square.fill 140 | coloncurrencysign 141 | coloncurrencysign.circle 142 | coloncurrencysign.circle.fill 143 | coloncurrencysign.square 144 | coloncurrencysign.square.fill 145 | cedisign 146 | cedisign.circle 147 | cedisign.circle.fill 148 | cedisign.square 149 | cedisign.square.fill 150 | cruzeirosign 151 | cruzeirosign.circle 152 | cruzeirosign.circle.fill 153 | cruzeirosign.square 154 | cruzeirosign.square.fill 155 | tugriksign 156 | tugriksign.circle 157 | tugriksign.circle.fill 158 | tugriksign.square 159 | tugriksign.square.fill 160 | millsign 161 | millsign.circle 162 | millsign.circle.fill 163 | millsign.square 164 | millsign.square.fill 165 | shekelsign 166 | shekelsign.circle 167 | shekelsign.circle.fill 168 | shekelsign.square 169 | shekelsign.square.fill 170 | manatsign 171 | manatsign.circle 172 | manatsign.circle.fill 173 | manatsign.square 174 | manatsign.square.fill 175 | rupeesign 176 | rupeesign.circle 177 | rupeesign.circle.fill 178 | rupeesign.square 179 | rupeesign.square.fill 180 | bahtsign 181 | bahtsign.circle 182 | bahtsign.circle.fill 183 | bahtsign.square 184 | bahtsign.square.fill 185 | larisign 186 | larisign.circle 187 | larisign.circle.fill 188 | larisign.square 189 | larisign.square.fill 190 | bitcoinsign 191 | bitcoinsign.circle 192 | bitcoinsign.circle.fill 193 | bitcoinsign.square 194 | bitcoinsign.square.fill 195 | brazilianrealsign 196 | brazilianrealsign.circle 197 | brazilianrealsign.circle.fill 198 | brazilianrealsign.square 199 | brazilianrealsign.square.fill -------------------------------------------------------------------------------- /Sources/SymbolPicker/SymbolCollection/Symbol.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Symbol.swift 3 | // SymbolPicker 4 | // 5 | // Created by Francis Feng on 2021/5/4. 6 | // 7 | 8 | import Foundation 9 | 10 | class Symbol { 11 | enum Category: String, CaseIterable, Codable { 12 | case All = "All" 13 | case Communication = "Communication" 14 | case Weather = "Weather" 15 | case Maps = "Maps" 16 | case ObjectsTools = "Objects & Tools" 17 | case Devices = "Devices" 18 | case CameraPhotos = "Camera & Photos" 19 | case Gaming = "Gaming" 20 | case Connectivity = "Connectivity" 21 | case Transportation = "Transportation" 22 | case Automotive = "Automotive" 23 | case Accessibility = "Accessibility" 24 | case PrivacySecurity = "Privacy & Security" 25 | case Human = "Human" 26 | case Home = "Home" 27 | case Fitness = "Fitness" 28 | case Nature = "Nature" 29 | case Editing = "Editing" 30 | case TextFormatting = "Text Formatting" 31 | case Media = "Media" 32 | case Keyboard = "Keyboard" 33 | case Commerce = "Commerce" 34 | case Time = "Time" 35 | case Health = "Health" 36 | case Shapes = "Shapes" 37 | case Arrows = "Arrows" 38 | case Indices = "Indices" 39 | case Math = "Math" 40 | 41 | static let all: [Category] = { 42 | var categories = Category.allCases 43 | 44 | if #available(macOS 14.0, *) { 45 | return categories 46 | } else if #available(macOS 13.0, *) { 47 | return categories.filter{!$0.isSonomaOnly} 48 | } else { 49 | return categories.filter{!$0.isSonomaOnly && !$0.isVenturaOnly} 50 | } 51 | }() 52 | 53 | var isSonomaOnly: Bool { 54 | switch self { 55 | case .Maps, 56 | .Automotive: 57 | return true 58 | default: 59 | return false 60 | } 61 | } 62 | 63 | var isVenturaOnly: Bool { 64 | switch self { 65 | case .CameraPhotos, 66 | .Accessibility, 67 | .PrivacySecurity, 68 | .Home, 69 | .Fitness: 70 | return true 71 | default: 72 | return false 73 | } 74 | } 75 | 76 | var name: String { 77 | return self.rawValue.localized 78 | } 79 | 80 | var symbol: String { 81 | switch self { 82 | case .All: 83 | return "square.grid.2x2" 84 | case .Communication: 85 | return "message" 86 | case .Weather: 87 | return "cloud.sun" 88 | case .Maps: 89 | return "map" 90 | case .ObjectsTools: 91 | return "folder" 92 | case .Devices: 93 | return "desktopcomputer" 94 | case .CameraPhotos: 95 | return "camera" 96 | case .Gaming: 97 | return "gamecontroller" 98 | case .Connectivity: 99 | return "antenna.radiowaves.left.and.right" 100 | case .Transportation: 101 | return "car.fill" 102 | case .Automotive: 103 | return "steeringwheel" 104 | case .Accessibility: 105 | return "figure.arms.open" 106 | case .PrivacySecurity: 107 | return "lock" 108 | case .Human: 109 | return "person.crop.circle" 110 | case .Home: 111 | return "house" 112 | case .Fitness: 113 | return "figure.run" 114 | case .Nature: 115 | return "leaf" 116 | case .Editing: 117 | return "slider.horizontal.3" 118 | case .TextFormatting: 119 | return "textformat" 120 | case .Media: 121 | return "playpause" 122 | case .Keyboard: 123 | return "command" 124 | case .Commerce: 125 | return "cart" 126 | case .Time: 127 | return "timer" 128 | case .Health: 129 | return "staroflife" 130 | case .Shapes: 131 | return "square.on.circle" 132 | case .Arrows: 133 | return "arrow.right" 134 | case .Indices: 135 | return "a.circle" 136 | case .Math: 137 | return "x.squareroot" 138 | } 139 | } 140 | } 141 | 142 | static func symbols(in category: Category) -> [String] { 143 | let prefix: String 144 | 145 | if #available(macOS 14.0, *) { 146 | prefix = "Sonoma-" 147 | } else if #available(macOS 13.0, *) { 148 | prefix = "Ventura-" 149 | } else { 150 | prefix = "Monterey-" 151 | } 152 | 153 | if let url = Bundle.module.url(forResource: prefix + category.rawValue, withExtension: "txt") { 154 | do { 155 | let content = try String(contentsOf: url) 156 | let symbols = content.components(separatedBy: "\n").filter { !$0.isEmpty } 157 | return symbols 158 | } catch { 159 | return [] 160 | } 161 | } else { 162 | return [] 163 | } 164 | } 165 | } 166 | -------------------------------------------------------------------------------- /Sources/SymbolPicker/Resources/Ventura/Ventura-Nature.txt: -------------------------------------------------------------------------------- 1 | globe.americas 2 | globe.americas.fill 3 | globe.europe.africa 4 | globe.europe.africa.fill 5 | globe.asia.australia 6 | globe.asia.australia.fill 7 | globe.central.south.asia 8 | globe.central.south.asia.fill 9 | sun.min 10 | sun.min.fill 11 | sun.max 12 | sun.max.fill 13 | sun.max.circle 14 | sun.max.circle.fill 15 | sun.max.trianglebadge.exclamationmark 16 | sun.max.trianglebadge.exclamationmark.fill 17 | sunrise 18 | sunrise.fill 19 | sunrise.circle 20 | sunrise.circle.fill 21 | sunset 22 | sunset.fill 23 | sunset.circle 24 | sunset.circle.fill 25 | sun.and.horizon 26 | sun.and.horizon.fill 27 | sun.and.horizon.circle 28 | sun.and.horizon.circle.fill 29 | sun.dust 30 | sun.dust.fill 31 | sun.dust.circle 32 | sun.dust.circle.fill 33 | sun.haze 34 | sun.haze.fill 35 | sun.haze.circle 36 | sun.haze.circle.fill 37 | moonphase.new.moon 38 | moonphase.waxing.crescent 39 | moonphase.first.quarter 40 | moonphase.waxing.gibbous 41 | moonphase.full.moon 42 | moonphase.waning.gibbous 43 | moonphase.last.quarter 44 | moonphase.waning.crescent 45 | moonphase.new.moon.inverse 46 | moonphase.waxing.crescent.inverse 47 | moonphase.first.quarter.inverse 48 | moonphase.waxing.gibbous.inverse 49 | moonphase.full.moon.inverse 50 | moonphase.waning.gibbous.inverse 51 | moonphase.last.quarter.inverse 52 | moonphase.waning.crescent.inverse 53 | moon 54 | moon.fill 55 | moon.circle 56 | moon.circle.fill 57 | moon.haze 58 | moon.haze.fill 59 | moon.haze.circle 60 | moon.haze.circle.fill 61 | sparkles 62 | moon.stars 63 | moon.stars.fill 64 | moon.stars.circle 65 | moon.stars.circle.fill 66 | cloud 67 | cloud.fill 68 | cloud.circle 69 | cloud.circle.fill 70 | cloud.drizzle 71 | cloud.drizzle.fill 72 | cloud.drizzle.circle 73 | cloud.drizzle.circle.fill 74 | cloud.rain 75 | cloud.rain.fill 76 | cloud.rain.circle 77 | cloud.rain.circle.fill 78 | cloud.heavyrain 79 | cloud.heavyrain.fill 80 | cloud.heavyrain.circle 81 | cloud.heavyrain.circle.fill 82 | cloud.fog 83 | cloud.fog.fill 84 | cloud.fog.circle 85 | cloud.fog.circle.fill 86 | cloud.hail 87 | cloud.hail.fill 88 | cloud.hail.circle 89 | cloud.hail.circle.fill 90 | cloud.snow 91 | cloud.snow.fill 92 | cloud.snow.circle 93 | cloud.snow.circle.fill 94 | cloud.sleet 95 | cloud.sleet.fill 96 | cloud.sleet.circle 97 | cloud.sleet.circle.fill 98 | cloud.bolt 99 | cloud.bolt.fill 100 | cloud.bolt.circle 101 | cloud.bolt.circle.fill 102 | cloud.bolt.rain 103 | cloud.bolt.rain.fill 104 | cloud.bolt.rain.circle 105 | cloud.bolt.rain.circle.fill 106 | cloud.sun 107 | cloud.sun.fill 108 | cloud.sun.circle 109 | cloud.sun.circle.fill 110 | cloud.sun.rain 111 | cloud.sun.rain.fill 112 | cloud.sun.rain.circle 113 | cloud.sun.rain.circle.fill 114 | cloud.sun.bolt 115 | cloud.sun.bolt.fill 116 | cloud.sun.bolt.circle 117 | cloud.sun.bolt.circle.fill 118 | cloud.moon 119 | cloud.moon.fill 120 | cloud.moon.circle 121 | cloud.moon.circle.fill 122 | cloud.moon.rain 123 | cloud.moon.rain.fill 124 | cloud.moon.rain.circle 125 | cloud.moon.rain.circle.fill 126 | cloud.moon.bolt 127 | cloud.moon.bolt.fill 128 | cloud.moon.bolt.circle 129 | cloud.moon.bolt.circle.fill 130 | smoke 131 | smoke.fill 132 | smoke.circle 133 | smoke.circle.fill 134 | wind 135 | wind.circle 136 | wind.circle.fill 137 | wind.snow 138 | wind.snow.circle 139 | wind.snow.circle.fill 140 | snowflake 141 | snowflake.circle 142 | snowflake.circle.fill 143 | snowflake.slash 144 | tornado 145 | tornado.circle 146 | tornado.circle.fill 147 | tropicalstorm 148 | tropicalstorm.circle 149 | tropicalstorm.circle.fill 150 | hurricane 151 | hurricane.circle 152 | hurricane.circle.fill 153 | thermometer.sun 154 | thermometer.sun.fill 155 | thermometer.sun.circle 156 | thermometer.sun.circle.fill 157 | thermometer.snowflake 158 | thermometer.snowflake.circle 159 | thermometer.snowflake.circle.fill 160 | humidity 161 | humidity.fill 162 | water.waves 163 | water.waves.slash 164 | water.waves.and.arrow.up 165 | water.waves.and.arrow.down 166 | water.waves.and.arrow.down.trianglebadge.exclamationmark 167 | drop 168 | drop.fill 169 | drop.circle 170 | drop.circle.fill 171 | drop.degreesign 172 | drop.degreesign.fill 173 | drop.degreesign.slash 174 | drop.degreesign.slash.fill 175 | drop.triangle 176 | drop.triangle.fill 177 | flame 178 | flame.fill 179 | flame.circle 180 | flame.circle.fill 181 | bolt 182 | bolt.fill 183 | bolt.circle 184 | bolt.circle.fill 185 | bolt.square 186 | bolt.square.fill 187 | bolt.shield 188 | bolt.shield.fill 189 | bolt.slash 190 | bolt.slash.fill 191 | bolt.slash.circle 192 | bolt.slash.circle.fill 193 | bolt.badge.clock 194 | bolt.badge.clock.fill 195 | bolt.badge.a 196 | bolt.badge.a.fill 197 | bolt.trianglebadge.exclamationmark 198 | bolt.trianglebadge.exclamationmark.fill 199 | mountain.2 200 | mountain.2.fill 201 | mountain.2.circle 202 | mountain.2.circle.fill 203 | allergens 204 | allergens.fill 205 | microbe 206 | microbe.fill 207 | microbe.circle 208 | microbe.circle.fill 209 | hare 210 | hare.fill 211 | tortoise 212 | tortoise.fill 213 | lizard 214 | lizard.fill 215 | bird 216 | bird.fill 217 | ant 218 | ant.fill 219 | ant.circle 220 | ant.circle.fill 221 | ladybug 222 | ladybug.fill 223 | fish 224 | fish.fill 225 | fish.circle 226 | fish.circle.fill 227 | pawprint 228 | pawprint.fill 229 | pawprint.circle 230 | pawprint.circle.fill 231 | leaf 232 | leaf.fill 233 | leaf.circle 234 | leaf.circle.fill 235 | leaf.arrow.triangle.circlepath 236 | laurel.leading 237 | laurel.trailing 238 | camera.macro 239 | camera.macro.circle 240 | camera.macro.circle.fill 241 | tree 242 | tree.fill 243 | tree.circle 244 | tree.circle.fill 245 | carrot 246 | carrot.fill 247 | atom 248 | fossil.shell 249 | fossil.shell.fill -------------------------------------------------------------------------------- /Sources/SymbolPicker/Resources/Monterey/Monterey-Devices.txt: -------------------------------------------------------------------------------- 1 | keyboard 2 | keyboard.fill 3 | keyboard.badge.ellipsis 4 | keyboard.chevron.compact.down 5 | keyboard.chevron.compact.left 6 | keyboard.onehanded.left 7 | keyboard.onehanded.right 8 | airtag.radiowaves.forward 9 | airtag.radiowaves.forward.fill 10 | airtag 11 | airtag.fill 12 | printer 13 | printer.fill 14 | printer.filled.and.paper 15 | printer.dotmatrix 16 | printer.dotmatrix.fill 17 | printer.dotmatrix.filled.and.paper 18 | scanner 19 | scanner.fill 20 | faxmachine 21 | display 22 | lock.display 23 | lock.open.display 24 | display.and.arrow.down 25 | display.trianglebadge.exclamationmark 26 | display.2 27 | desktopcomputer 28 | lock.desktopcomputer 29 | lock.open.desktopcomputer 30 | desktopcomputer.and.arrow.down 31 | desktopcomputer.trianglebadge.exclamationmark 32 | pc 33 | macpro.gen1 34 | macpro.gen1.fill 35 | macpro.gen2 36 | macpro.gen2.fill 37 | macpro.gen3 38 | macpro.gen3.fill 39 | macpro.gen3.server 40 | server.rack 41 | xserve 42 | laptopcomputer 43 | lock.laptopcomputer 44 | lock.open.laptopcomputer 45 | laptopcomputer.and.arrow.down 46 | laptopcomputer.trianglebadge.exclamationmark 47 | laptopcomputer.and.iphone 48 | ipad.and.iphone 49 | macmini 50 | macmini.fill 51 | airport.express 52 | airport.extreme 53 | airport.extreme.tower 54 | ipod 55 | ipodshuffle.gen1 56 | ipodshuffle.gen2 57 | ipodshuffle.gen3 58 | ipodshuffle.gen4 59 | ipodtouch 60 | ipodtouch.slash 61 | ipodtouch.landscape 62 | flipphone 63 | candybarphone 64 | iphone.homebutton 65 | iphone.homebutton.circle 66 | iphone.homebutton.circle.fill 67 | iphone.homebutton.landscape 68 | iphone.homebutton.radiowaves.left.and.right 69 | iphone.homebutton.radiowaves.left.and.right.circle 70 | iphone.homebutton.radiowaves.left.and.right.circle.fill 71 | iphone.homebutton.slash 72 | iphone.homebutton.slash.circle 73 | iphone.homebutton.slash.circle.fill 74 | iphone.homebutton.badge.play 75 | iphone 76 | iphone.circle 77 | iphone.circle.fill 78 | iphone.landscape 79 | iphone.radiowaves.left.and.right 80 | iphone.radiowaves.left.and.right.circle 81 | iphone.radiowaves.left.and.right.circle.fill 82 | iphone.slash 83 | iphone.slash.circle 84 | iphone.slash.circle.fill 85 | iphone.badge.play 86 | lock.iphone 87 | lock.open.iphone 88 | iphone.and.arrow.forward 89 | arrow.turn.up.forward.iphone 90 | arrow.turn.up.forward.iphone.fill 91 | iphone.rear.camera 92 | apps.iphone 93 | apps.iphone.badge.plus 94 | apps.iphone.landscape 95 | platter.2.filled.iphone 96 | platter.2.filled.iphone.landscape 97 | iphone.smartbatterycase.gen2 98 | iphone.smartbatterycase.gen1 99 | ipad.homebutton 100 | ipad.homebutton.badge.play 101 | ipad.homebutton.landscape 102 | ipad.homebutton.landscape.badge.play 103 | ipad 104 | ipad.badge.play 105 | lock.ipad 106 | lock.open.ipad 107 | ipad.and.arrow.forward 108 | ipad.landscape 109 | ipad.landscape.badge.play 110 | ipad.rear.camera 111 | apps.ipad 112 | apps.ipad.landscape 113 | platter.2.filled.ipad 114 | platter.2.filled.ipad.landscape 115 | applepencil 116 | magicmouse 117 | magicmouse.fill 118 | computermouse 119 | computermouse.fill 120 | applewatch 121 | applewatch.watchface 122 | exclamationmark.applewatch 123 | lock.applewatch 124 | lock.open.applewatch 125 | applewatch.radiowaves.left.and.right 126 | applewatch.slash 127 | applewatch.side.right 128 | watchface.applewatch.case 129 | applewatch.case.inset.filled 130 | platter.filled.top.applewatch.case 131 | platter.filled.bottom.applewatch.case 132 | platter.top.applewatch.case 133 | platter.bottom.applewatch.case 134 | digitalcrown.arrow.clockwise 135 | digitalcrown.arrow.clockwise.fill 136 | digitalcrown.arrow.counterclockwise 137 | digitalcrown.arrow.counterclockwise.fill 138 | digitalcrown.press 139 | digitalcrown.press.fill 140 | digitalcrown.horizontal.arrow.clockwise 141 | digitalcrown.horizontal.arrow.clockwise.fill 142 | digitalcrown.horizontal.arrow.counterclockwise 143 | digitalcrown.horizontal.arrow.counterclockwise.fill 144 | digitalcrown.horizontal.press 145 | digitalcrown.horizontal.press.fill 146 | airpodsmax 147 | beats.headphones 148 | headphones 149 | headphones.circle 150 | headphones.circle.fill 151 | earbuds 152 | earbuds.case 153 | earbuds.case.fill 154 | earpods 155 | airpods 156 | airpod.right 157 | airpod.left 158 | airpods.chargingcase 159 | airpods.chargingcase.fill 160 | airpods.chargingcase.wireless 161 | airpods.chargingcase.wireless.fill 162 | airpodspro 163 | airpodpro.right 164 | airpodpro.left 165 | airpodspro.chargingcase.wireless 166 | airpodspro.chargingcase.wireless.fill 167 | beats.earphones 168 | beats.powerbeatspro 169 | beats.powerbeatspro.right 170 | beats.powerbeatspro.left 171 | beats.powerbeats 172 | beats.powerbeats3 173 | beats.studiobuds 174 | beats.studiobud.left 175 | beats.studiobud.right 176 | beats.studiobuds.chargingcase 177 | beats.studiobuds.chargingcase.fill 178 | beats.powerbeatspro.chargingcase 179 | beats.powerbeatspro.chargingcase.fill 180 | homepodmini 181 | homepodmini.fill 182 | homepodmini.2 183 | homepodmini.2.fill 184 | homepod.and.homepodmini 185 | homepod.and.homepodmini.fill 186 | hifispeaker.and.homepodmini 187 | hifispeaker.and.homepodmini.fill 188 | homepod 189 | homepod.fill 190 | homepod.2 191 | homepod.2.fill 192 | hifispeaker.and.homepod 193 | hifispeaker.and.homepod.fill 194 | hifispeaker 195 | hifispeaker.fill 196 | hifispeaker.2 197 | hifispeaker.2.fill 198 | appletv 199 | appletv.fill 200 | homepod.and.appletv 201 | homepod.and.appletv.fill 202 | homepodmini.and.appletv 203 | homepodmini.and.appletv.fill 204 | hifispeaker.and.appletv 205 | hifispeaker.and.appletv.fill 206 | appletvremote.gen1 207 | appletvremote.gen1.fill 208 | appletvremote.gen2 209 | appletvremote.gen2.fill 210 | appletvremote.gen3 211 | appletvremote.gen3.fill 212 | appletvremote.gen4 213 | appletvremote.gen4.fill 214 | magsafe.batterypack 215 | magsafe.batterypack.fill 216 | mediastick 217 | cable.connector 218 | cable.connector.horizontal 219 | tv 220 | tv.fill 221 | tv.inset.filled 222 | tv.circle 223 | tv.circle.fill 224 | sparkles.tv 225 | sparkles.tv.fill 226 | 4k.tv 227 | 4k.tv.fill 228 | music.note.tv 229 | music.note.tv.fill 230 | play.tv 231 | play.tv.fill 232 | photo.tv 233 | tv.and.hifispeaker.fill 234 | tv.and.mediabox 235 | gamecontroller 236 | gamecontroller.fill 237 | hearingdevice.ear 238 | -------------------------------------------------------------------------------- /Sources/SymbolPicker/Resources/Sonoma/Sonoma-Camera & Photos.txt: -------------------------------------------------------------------------------- 1 | righttriangle 2 | righttriangle.fill 3 | righttriangle.split.diagonal 4 | righttriangle.split.diagonal.fill 5 | drop.halffull 6 | swirl.circle.righthalf.filled 7 | swirl.circle.righthalf.filled.inverse 8 | circle.lefthalf.filled.righthalf.striped.horizontal 9 | circle.lefthalf.filled.righthalf.striped.horizontal.inverse 10 | circle.lefthalf.striped.horizontal 11 | circle.lefthalf.striped.horizontal.inverse 12 | circle.dotted.circle 13 | circle.dotted.circle.fill 14 | circle.bottomrighthalf.checkered 15 | lightspectrum.horizontal 16 | bolt 17 | bolt.fill 18 | bolt.circle 19 | bolt.circle.fill 20 | bolt.square 21 | bolt.square.fill 22 | bolt.slash 23 | bolt.slash.fill 24 | bolt.slash.circle 25 | bolt.slash.circle.fill 26 | bolt.badge.clock 27 | bolt.badge.clock.fill 28 | bolt.badge.automatic 29 | bolt.badge.automatic.fill 30 | bolt.badge.checkmark 31 | bolt.badge.checkmark.fill 32 | bolt.badge.xmark 33 | bolt.badge.xmark.fill 34 | bolt.trianglebadge.exclamationmark 35 | bolt.trianglebadge.exclamationmark.fill 36 | camera 37 | camera.fill 38 | camera.circle 39 | camera.circle.fill 40 | camera.shutter.button 41 | camera.shutter.button.fill 42 | camera.badge.clock 43 | camera.badge.clock.fill 44 | camera.badge.ellipsis 45 | camera.badge.ellipsis.fill 46 | arrow.triangle.2.circlepath.camera 47 | arrow.triangle.2.circlepath.camera.fill 48 | camera.on.rectangle 49 | camera.on.rectangle.fill 50 | iphone.rear.camera 51 | ipad.rear.camera 52 | camera.macro 53 | camera.macro.circle 54 | camera.macro.circle.fill 55 | plus.viewfinder 56 | camera.viewfinder 57 | photo 58 | photo.fill 59 | photo.circle 60 | photo.circle.fill 61 | photo.badge.plus 62 | photo.badge.plus.fill 63 | photo.badge.arrow.down 64 | photo.badge.arrow.down.fill 65 | photo.badge.checkmark 66 | photo.badge.checkmark.fill 67 | text.below.photo 68 | text.below.photo.fill 69 | camera.metering.center.weighted.average 70 | camera.metering.center.weighted 71 | camera.metering.matrix 72 | camera.metering.multispot 73 | camera.metering.none 74 | camera.metering.partial 75 | camera.metering.spot 76 | camera.metering.unknown 77 | camera.aperture 78 | circle.filled.pattern.diagonalline.rectangle 79 | circle.rectangle.filled.pattern.diagonalline 80 | circle.dashed.rectangle 81 | circle.rectangle.dashed 82 | photo.on.rectangle 83 | photo.fill.on.rectangle.fill 84 | photo.on.rectangle.angled 85 | photo.stack 86 | photo.stack.fill 87 | livephoto 88 | livephoto.slash 89 | livephoto.badge.automatic 90 | livephoto.play 91 | f.cursive 92 | f.cursive.circle 93 | f.cursive.circle.fill 94 | scope 95 | rectangle.and.arrow.up.right.and.arrow.down.left 96 | rectangle.and.arrow.up.right.and.arrow.down.left.slash 97 | square.2.layers.3d 98 | square.2.layers.3d.fill 99 | square.2.layers.3d.top.filled 100 | square.2.layers.3d.bottom.filled 101 | square.3.layers.3d.down.right 102 | square.3.layers.3d.down.right.slash 103 | square.3.layers.3d.down.left 104 | square.3.layers.3d.down.left.slash 105 | square.3.layers.3d.down.forward 106 | square.3.layers.3d.down.backward 107 | square.3.layers.3d 108 | square.3.layers.3d.slash 109 | square.3.layers.3d.top.filled 110 | square.3.layers.3d.middle.filled 111 | square.3.layers.3d.bottom.filled 112 | circle.dotted.and.circle 113 | perspective 114 | circle.and.line.horizontal 115 | circle.and.line.horizontal.fill 116 | trapezoid.and.line.vertical 117 | trapezoid.and.line.vertical.fill 118 | trapezoid.and.line.horizontal 119 | trapezoid.and.line.horizontal.fill 120 | camera.filters 121 | arrow.left.and.right.righttriangle.left.righttriangle.right 122 | arrow.left.and.right.righttriangle.left.righttriangle.right.fill 123 | arrow.up.and.down.righttriangle.up.righttriangle.down 124 | arrow.up.and.down.righttriangle.up.righttriangle.down.fill 125 | plusminus 126 | plusminus.circle 127 | plusminus.circle.fill 128 | chevron.left 129 | chevron.left.circle 130 | chevron.left.circle.fill 131 | chevron.backward 132 | chevron.backward.circle 133 | chevron.backward.circle.fill 134 | chevron.right 135 | chevron.right.circle 136 | chevron.right.circle.fill 137 | chevron.forward 138 | chevron.forward.circle 139 | chevron.forward.circle.fill 140 | chevron.up 141 | chevron.up.circle 142 | chevron.up.circle.fill 143 | chevron.down 144 | chevron.down.circle 145 | chevron.down.circle.fill 146 | arrow.up.left.and.arrow.down.right 147 | arrow.up.left.and.arrow.down.right.circle 148 | arrow.up.left.and.arrow.down.right.circle.fill 149 | arrow.up.left.and.arrow.down.right.square 150 | arrow.up.left.and.arrow.down.right.square.fill 151 | arrow.up.backward.and.arrow.down.forward 152 | arrow.up.backward.and.arrow.down.forward.circle 153 | arrow.up.backward.and.arrow.down.forward.circle.fill 154 | arrow.up.backward.and.arrow.down.forward.square 155 | arrow.up.backward.and.arrow.down.forward.square.fill 156 | arrow.down.left.and.arrow.up.right 157 | arrow.down.left.and.arrow.up.right.circle 158 | arrow.down.left.and.arrow.up.right.circle.fill 159 | arrow.down.left.and.arrow.up.right.square 160 | arrow.down.left.and.arrow.up.right.square.fill 161 | arrow.down.backward.and.arrow.up.forward 162 | arrow.down.backward.and.arrow.up.forward.circle 163 | arrow.down.backward.and.arrow.up.forward.circle.fill 164 | arrow.down.backward.and.arrow.up.forward.square 165 | arrow.down.backward.and.arrow.up.forward.square.fill 166 | arrow.down.right.and.arrow.up.left 167 | arrow.down.right.and.arrow.up.left.circle 168 | arrow.down.right.and.arrow.up.left.circle.fill 169 | arrow.down.right.and.arrow.up.left.square 170 | arrow.down.right.and.arrow.up.left.square.fill 171 | arrow.down.forward.and.arrow.up.backward 172 | arrow.down.forward.and.arrow.up.backward.circle 173 | arrow.down.forward.and.arrow.up.backward.circle.fill 174 | arrow.down.forward.and.arrow.up.backward.square 175 | arrow.down.forward.and.arrow.up.backward.square.fill 176 | arrow.up.right.and.arrow.down.left 177 | arrow.up.right.and.arrow.down.left.circle 178 | arrow.up.right.and.arrow.down.left.circle.fill 179 | arrow.up.right.and.arrow.down.left.square 180 | arrow.up.right.and.arrow.down.left.square.fill 181 | arrow.up.forward.and.arrow.down.backward 182 | arrow.up.forward.and.arrow.down.backward.circle 183 | arrow.up.forward.and.arrow.down.backward.circle.fill 184 | arrow.up.forward.and.arrow.down.backward.square 185 | arrow.up.forward.and.arrow.down.backward.square.fill 186 | arrow.triangle.2.circlepath 187 | arrow.triangle.2.circlepath.circle 188 | arrow.triangle.2.circlepath.circle.fill 189 | -------------------------------------------------------------------------------- /Sources/SymbolPicker/Resources/Sonoma/Sonoma-Gaming.txt: -------------------------------------------------------------------------------- 1 | circle.square 2 | circle.square.fill 3 | rectangle.on.rectangle 4 | rectangle.fill.on.rectangle.fill 5 | rectangle.on.rectangle.circle 6 | rectangle.on.rectangle.circle.fill 7 | rectangle.on.rectangle.square 8 | rectangle.on.rectangle.square.fill 9 | flag.checkered 10 | flag.checkered.circle 11 | flag.checkered.circle.fill 12 | flag.2.crossed 13 | flag.2.crossed.fill 14 | flag.2.crossed.circle 15 | flag.2.crossed.circle.fill 16 | flag.filled.and.flag.crossed 17 | flag.and.flag.filled.crossed 18 | flag.checkered.2.crossed 19 | house 20 | house.fill 21 | house.circle 22 | house.circle.fill 23 | arcade.stick.console 24 | arcade.stick.console.fill 25 | arcade.stick 26 | arcade.stick.and.arrow.left.and.arrow.right 27 | arcade.stick.and.arrow.left 28 | arcade.stick.and.arrow.right 29 | arcade.stick.and.arrow.up.and.arrow.down 30 | arcade.stick.and.arrow.up 31 | arcade.stick.and.arrow.down 32 | gamecontroller 33 | gamecontroller.fill 34 | l.joystick 35 | l.joystick.fill 36 | r.joystick 37 | r.joystick.fill 38 | l.joystick.press.down 39 | l.joystick.press.down.fill 40 | r.joystick.press.down 41 | r.joystick.press.down.fill 42 | l.joystick.tilt.left 43 | l.joystick.tilt.left.fill 44 | l.joystick.tilt.right 45 | l.joystick.tilt.right.fill 46 | l.joystick.tilt.up 47 | l.joystick.tilt.up.fill 48 | l.joystick.tilt.down 49 | l.joystick.tilt.down.fill 50 | r.joystick.tilt.left 51 | r.joystick.tilt.left.fill 52 | r.joystick.tilt.right 53 | r.joystick.tilt.right.fill 54 | r.joystick.tilt.up 55 | r.joystick.tilt.up.fill 56 | r.joystick.tilt.down 57 | r.joystick.tilt.down.fill 58 | circle.grid.cross 59 | circle.grid.cross.fill 60 | circle.grid.cross.left.filled 61 | circle.grid.cross.up.filled 62 | circle.grid.cross.right.filled 63 | circle.grid.cross.down.filled 64 | dpad 65 | dpad.fill 66 | dpad.left.filled 67 | dpad.up.filled 68 | dpad.right.filled 69 | dpad.down.filled 70 | arrowkeys 71 | arrowkeys.fill 72 | arrowkeys.up.filled 73 | arrowkeys.down.filled 74 | arrowkeys.left.filled 75 | arrowkeys.right.filled 76 | circle.circle 77 | circle.circle.fill 78 | square.circle 79 | square.circle.fill 80 | triangle.circle 81 | triangle.circle.fill 82 | paddleshifter.left 83 | paddleshifter.left.fill 84 | paddleshifter.right 85 | paddleshifter.right.fill 86 | l1.circle 87 | l1.circle.fill 88 | lb.circle 89 | lb.circle.fill 90 | l2.circle 91 | l2.circle.fill 92 | lt.circle 93 | lt.circle.fill 94 | r1.circle 95 | r1.circle.fill 96 | rb.circle 97 | rb.circle.fill 98 | r2.circle 99 | r2.circle.fill 100 | rt.circle 101 | rt.circle.fill 102 | button.horizontal 103 | button.horizontal.fill 104 | l4.button.horizontal 105 | l4.button.horizontal.fill 106 | r4.button.horizontal 107 | r4.button.horizontal.fill 108 | lm.button.horizontal 109 | lm.button.horizontal.fill 110 | rm.button.horizontal 111 | rm.button.horizontal.fill 112 | m1.button.horizontal 113 | m1.button.horizontal.fill 114 | m2.button.horizontal 115 | m2.button.horizontal.fill 116 | m3.button.horizontal 117 | m3.button.horizontal.fill 118 | m4.button.horizontal 119 | m4.button.horizontal.fill 120 | p1.button.horizontal 121 | p1.button.horizontal.fill 122 | p2.button.horizontal 123 | p2.button.horizontal.fill 124 | p3.button.horizontal 125 | p3.button.horizontal.fill 126 | p4.button.horizontal 127 | p4.button.horizontal.fill 128 | button.roundedtop.horizontal 129 | button.roundedtop.horizontal.fill 130 | l2.button.roundedtop.horizontal 131 | l2.button.roundedtop.horizontal.fill 132 | r2.button.roundedtop.horizontal 133 | r2.button.roundedtop.horizontal.fill 134 | lt.button.roundedtop.horizontal 135 | lt.button.roundedtop.horizontal.fill 136 | rt.button.roundedtop.horizontal 137 | rt.button.roundedtop.horizontal.fill 138 | zl.button.roundedtop.horizontal 139 | zl.button.roundedtop.horizontal.fill 140 | zr.button.roundedtop.horizontal 141 | zr.button.roundedtop.horizontal.fill 142 | button.roundedbottom.horizontal 143 | button.roundedbottom.horizontal.fill 144 | l.button.roundedbottom.horizontal 145 | l.button.roundedbottom.horizontal.fill 146 | l1.button.roundedbottom.horizontal 147 | l1.button.roundedbottom.horizontal.fill 148 | r.button.roundedbottom.horizontal 149 | r.button.roundedbottom.horizontal.fill 150 | r1.button.roundedbottom.horizontal 151 | r1.button.roundedbottom.horizontal.fill 152 | lb.button.roundedbottom.horizontal 153 | lb.button.roundedbottom.horizontal.fill 154 | rb.button.roundedbottom.horizontal 155 | rb.button.roundedbottom.horizontal.fill 156 | button.angledtop.vertical.left 157 | button.angledtop.vertical.left.fill 158 | l2.button.angledtop.vertical.left 159 | l2.button.angledtop.vertical.left.fill 160 | rectangle.on.rectangle.button.angledtop.vertical.left 161 | rectangle.on.rectangle.button.angledtop.vertical.left.fill 162 | button.angledtop.vertical.right 163 | button.angledtop.vertical.right.fill 164 | r2.button.angledtop.vertical.right 165 | r2.button.angledtop.vertical.right.fill 166 | line.3.horizontal.button.angledtop.vertical.right 167 | line.3.horizontal.button.angledtop.vertical.right.fill 168 | button.angledbottom.horizontal.left 169 | button.angledbottom.horizontal.left.fill 170 | l3.button.angledbottom.horizontal.left 171 | l3.button.angledbottom.horizontal.left.fill 172 | lsb.button.angledbottom.horizontal.left 173 | lsb.button.angledbottom.horizontal.left.fill 174 | button.angledbottom.horizontal.right 175 | button.angledbottom.horizontal.right.fill 176 | r3.button.angledbottom.horizontal.right 177 | r3.button.angledbottom.horizontal.right.fill 178 | rsb.button.angledbottom.horizontal.right 179 | rsb.button.angledbottom.horizontal.right.fill 180 | pedal.accelerator 181 | pedal.accelerator.fill 182 | pedal.brake 183 | pedal.brake.fill 184 | pedal.clutch 185 | pedal.clutch.fill 186 | gearshift.layout.sixspeed 187 | playstation.logo 188 | xbox.logo 189 | line.3.horizontal.circle 190 | line.3.horizontal.circle.fill 191 | plus 192 | plus.circle 193 | plus.circle.fill 194 | minus 195 | minus.circle 196 | minus.circle.fill 197 | xmark 198 | xmark.circle 199 | xmark.circle.fill 200 | arrowtriangle.left.circle 201 | arrowtriangle.left.circle.fill 202 | arrowtriangle.right.circle 203 | arrowtriangle.right.circle.fill 204 | arrowtriangle.up.circle 205 | arrowtriangle.up.circle.fill 206 | arrowtriangle.down.circle 207 | arrowtriangle.down.circle.fill 208 | a.circle 209 | a.circle.fill 210 | b.circle 211 | b.circle.fill 212 | l.circle 213 | l.circle.fill 214 | r.circle 215 | r.circle.fill 216 | x.circle 217 | x.circle.fill 218 | y.circle 219 | y.circle.fill 220 | -------------------------------------------------------------------------------- /Sources/SymbolPicker/Resources/Sonoma/Sonoma-Nature.txt: -------------------------------------------------------------------------------- 1 | globe.americas 2 | globe.americas.fill 3 | globe.europe.africa 4 | globe.europe.africa.fill 5 | globe.asia.australia 6 | globe.asia.australia.fill 7 | globe.central.south.asia 8 | globe.central.south.asia.fill 9 | sun.min 10 | sun.min.fill 11 | sun.max 12 | sun.max.fill 13 | sun.max.circle 14 | sun.max.circle.fill 15 | sun.max.trianglebadge.exclamationmark 16 | sun.max.trianglebadge.exclamationmark.fill 17 | sunrise 18 | sunrise.fill 19 | sunrise.circle 20 | sunrise.circle.fill 21 | sunset 22 | sunset.fill 23 | sunset.circle 24 | sunset.circle.fill 25 | sun.horizon 26 | sun.horizon.fill 27 | sun.horizon.circle 28 | sun.horizon.circle.fill 29 | sun.dust 30 | sun.dust.fill 31 | sun.dust.circle 32 | sun.dust.circle.fill 33 | sun.haze 34 | sun.haze.fill 35 | sun.haze.circle 36 | sun.haze.circle.fill 37 | sun.rain 38 | sun.rain.fill 39 | sun.rain.circle 40 | sun.rain.circle.fill 41 | sun.snow 42 | sun.snow.fill 43 | sun.snow.circle 44 | sun.snow.circle.fill 45 | moonphase.new.moon 46 | moonphase.waxing.crescent 47 | moonphase.first.quarter 48 | moonphase.waxing.gibbous 49 | moonphase.full.moon 50 | moonphase.waning.gibbous 51 | moonphase.last.quarter 52 | moonphase.waning.crescent 53 | moonphase.new.moon.inverse 54 | moonphase.waxing.crescent.inverse 55 | moonphase.first.quarter.inverse 56 | moonphase.waxing.gibbous.inverse 57 | moonphase.full.moon.inverse 58 | moonphase.waning.gibbous.inverse 59 | moonphase.last.quarter.inverse 60 | moonphase.waning.crescent.inverse 61 | moon 62 | moon.fill 63 | moon.circle 64 | moon.circle.fill 65 | moon.dust 66 | moon.dust.fill 67 | moon.dust.circle 68 | moon.dust.circle.fill 69 | moon.haze 70 | moon.haze.fill 71 | moon.haze.circle 72 | moon.haze.circle.fill 73 | sparkles 74 | moon.stars 75 | moon.stars.fill 76 | moon.stars.circle 77 | moon.stars.circle.fill 78 | cloud 79 | cloud.fill 80 | cloud.circle 81 | cloud.circle.fill 82 | cloud.drizzle 83 | cloud.drizzle.fill 84 | cloud.drizzle.circle 85 | cloud.drizzle.circle.fill 86 | cloud.rain 87 | cloud.rain.fill 88 | cloud.rain.circle 89 | cloud.rain.circle.fill 90 | cloud.heavyrain 91 | cloud.heavyrain.fill 92 | cloud.heavyrain.circle 93 | cloud.heavyrain.circle.fill 94 | cloud.fog 95 | cloud.fog.fill 96 | cloud.fog.circle 97 | cloud.fog.circle.fill 98 | cloud.hail 99 | cloud.hail.fill 100 | cloud.hail.circle 101 | cloud.hail.circle.fill 102 | cloud.snow 103 | cloud.snow.fill 104 | cloud.snow.circle 105 | cloud.snow.circle.fill 106 | cloud.sleet 107 | cloud.sleet.fill 108 | cloud.sleet.circle 109 | cloud.sleet.circle.fill 110 | cloud.bolt 111 | cloud.bolt.fill 112 | cloud.bolt.circle 113 | cloud.bolt.circle.fill 114 | cloud.bolt.rain 115 | cloud.bolt.rain.fill 116 | cloud.bolt.rain.circle 117 | cloud.bolt.rain.circle.fill 118 | cloud.sun 119 | cloud.sun.fill 120 | cloud.sun.circle 121 | cloud.sun.circle.fill 122 | cloud.sun.rain 123 | cloud.sun.rain.fill 124 | cloud.sun.rain.circle 125 | cloud.sun.rain.circle.fill 126 | cloud.sun.bolt 127 | cloud.sun.bolt.fill 128 | cloud.sun.bolt.circle 129 | cloud.sun.bolt.circle.fill 130 | cloud.moon 131 | cloud.moon.fill 132 | cloud.moon.circle 133 | cloud.moon.circle.fill 134 | cloud.moon.rain 135 | cloud.moon.rain.fill 136 | cloud.moon.rain.circle 137 | cloud.moon.rain.circle.fill 138 | cloud.moon.bolt 139 | cloud.moon.bolt.fill 140 | cloud.moon.bolt.circle 141 | cloud.moon.bolt.circle.fill 142 | smoke 143 | smoke.fill 144 | smoke.circle 145 | smoke.circle.fill 146 | wind 147 | wind.circle 148 | wind.circle.fill 149 | wind.snow 150 | wind.snow.circle 151 | wind.snow.circle.fill 152 | snowflake 153 | snowflake.circle 154 | snowflake.circle.fill 155 | snowflake.slash 156 | tornado 157 | tornado.circle 158 | tornado.circle.fill 159 | tropicalstorm 160 | tropicalstorm.circle 161 | tropicalstorm.circle.fill 162 | hurricane 163 | hurricane.circle 164 | hurricane.circle.fill 165 | thermometer.sun 166 | thermometer.sun.fill 167 | thermometer.sun.circle 168 | thermometer.sun.circle.fill 169 | thermometer.snowflake 170 | thermometer.snowflake.circle 171 | thermometer.snowflake.circle.fill 172 | thermometer.variable.and.figure 173 | thermometer.variable.and.figure.circle 174 | thermometer.variable.and.figure.circle.fill 175 | humidity 176 | humidity.fill 177 | rainbow 178 | cloud.rainbow.half 179 | cloud.rainbow.half.fill 180 | water.waves 181 | water.waves.slash 182 | water.waves.and.arrow.up 183 | water.waves.and.arrow.down 184 | water.waves.and.arrow.down.trianglebadge.exclamationmark 185 | drop 186 | drop.fill 187 | drop.circle 188 | drop.circle.fill 189 | drop.degreesign 190 | drop.degreesign.fill 191 | drop.degreesign.slash 192 | drop.degreesign.slash.fill 193 | drop.triangle 194 | drop.triangle.fill 195 | flame 196 | flame.fill 197 | flame.circle 198 | flame.circle.fill 199 | bolt 200 | bolt.fill 201 | bolt.circle 202 | bolt.circle.fill 203 | bolt.square 204 | bolt.square.fill 205 | bolt.shield 206 | bolt.shield.fill 207 | bolt.slash 208 | bolt.slash.fill 209 | bolt.slash.circle 210 | bolt.slash.circle.fill 211 | bolt.badge.clock 212 | bolt.badge.clock.fill 213 | bolt.badge.automatic 214 | bolt.badge.automatic.fill 215 | bolt.badge.checkmark 216 | bolt.badge.checkmark.fill 217 | bolt.badge.xmark 218 | bolt.badge.xmark.fill 219 | bolt.trianglebadge.exclamationmark 220 | bolt.trianglebadge.exclamationmark.fill 221 | mountain.2 222 | mountain.2.fill 223 | mountain.2.circle 224 | mountain.2.circle.fill 225 | allergens 226 | allergens.fill 227 | microbe 228 | microbe.fill 229 | microbe.circle 230 | microbe.circle.fill 231 | hare 232 | hare.fill 233 | hare.circle 234 | hare.circle.fill 235 | tortoise 236 | tortoise.fill 237 | tortoise.circle 238 | tortoise.circle.fill 239 | dog 240 | dog.fill 241 | dog.circle 242 | dog.circle.fill 243 | cat 244 | cat.fill 245 | cat.circle 246 | cat.circle.fill 247 | lizard 248 | lizard.fill 249 | lizard.circle 250 | lizard.circle.fill 251 | bird 252 | bird.fill 253 | bird.circle 254 | bird.circle.fill 255 | ant 256 | ant.fill 257 | ant.circle 258 | ant.circle.fill 259 | ladybug 260 | ladybug.fill 261 | ladybug.circle 262 | ladybug.circle.fill 263 | fish 264 | fish.fill 265 | fish.circle 266 | fish.circle.fill 267 | pawprint 268 | pawprint.fill 269 | pawprint.circle 270 | pawprint.circle.fill 271 | leaf 272 | leaf.fill 273 | leaf.circle 274 | leaf.circle.fill 275 | leaf.arrow.triangle.circlepath 276 | laurel.leading 277 | laurel.trailing 278 | camera.macro 279 | camera.macro.circle 280 | camera.macro.circle.fill 281 | tree 282 | tree.fill 283 | tree.circle 284 | tree.circle.fill 285 | carrot 286 | carrot.fill 287 | atom 288 | fossil.shell 289 | fossil.shell.fill 290 | -------------------------------------------------------------------------------- /Sources/SymbolPicker/Resources/Sonoma/Sonoma-Commerce.txt: -------------------------------------------------------------------------------- 1 | signature 2 | bag 3 | bag.fill 4 | bag.circle 5 | bag.circle.fill 6 | bag.badge.plus 7 | bag.fill.badge.plus 8 | bag.badge.minus 9 | bag.fill.badge.minus 10 | bag.badge.questionmark 11 | bag.fill.badge.questionmark 12 | cart 13 | cart.fill 14 | cart.circle 15 | cart.circle.fill 16 | cart.badge.plus 17 | cart.fill.badge.plus 18 | cart.badge.minus 19 | cart.fill.badge.minus 20 | cart.badge.questionmark 21 | cart.fill.badge.questionmark 22 | basket 23 | basket.fill 24 | creditcard 25 | creditcard.fill 26 | creditcard.circle 27 | creditcard.circle.fill 28 | creditcard.and.123 29 | creditcard.trianglebadge.exclamationmark 30 | creditcard.trianglebadge.exclamationmark.fill 31 | giftcard 32 | giftcard.fill 33 | banknote 34 | banknote.fill 35 | dollarsign.arrow.circlepath 36 | centsign.arrow.circlepath 37 | yensign.arrow.circlepath 38 | sterlingsign.arrow.circlepath 39 | francsign.arrow.circlepath 40 | florinsign.arrow.circlepath 41 | turkishlirasign.arrow.circlepath 42 | rublesign.arrow.circlepath 43 | eurosign.arrow.circlepath 44 | dongsign.arrow.circlepath 45 | indianrupeesign.arrow.circlepath 46 | tengesign.arrow.circlepath 47 | pesetasign.arrow.circlepath 48 | pesosign.arrow.circlepath 49 | kipsign.arrow.circlepath 50 | wonsign.arrow.circlepath 51 | lirasign.arrow.circlepath 52 | australsign.arrow.circlepath 53 | hryvniasign.arrow.circlepath 54 | nairasign.arrow.circlepath 55 | guaranisign.arrow.circlepath 56 | coloncurrencysign.arrow.circlepath 57 | cedisign.arrow.circlepath 58 | cruzeirosign.arrow.circlepath 59 | tugriksign.arrow.circlepath 60 | millsign.arrow.circlepath 61 | shekelsign.arrow.circlepath 62 | manatsign.arrow.circlepath 63 | rupeesign.arrow.circlepath 64 | bahtsign.arrow.circlepath 65 | larisign.arrow.circlepath 66 | bitcoinsign.arrow.circlepath 67 | brazilianrealsign.arrow.circlepath 68 | chineseyuanrenminbisign.arrow.circlepath 69 | polishzlotysign.arrow.circlepath 70 | norwegiankronesign.arrow.circlepath 71 | swedishkronasign.arrow.circlepath 72 | danishkronesign.arrow.circlepath 73 | eurozonesign.arrow.circlepath 74 | australiandollarsign.arrow.circlepath 75 | dollarsign 76 | dollarsign.circle 77 | dollarsign.circle.fill 78 | dollarsign.square 79 | dollarsign.square.fill 80 | centsign 81 | centsign.circle 82 | centsign.circle.fill 83 | centsign.square 84 | centsign.square.fill 85 | yensign 86 | yensign.circle 87 | yensign.circle.fill 88 | yensign.square 89 | yensign.square.fill 90 | sterlingsign 91 | sterlingsign.circle 92 | sterlingsign.circle.fill 93 | sterlingsign.square 94 | sterlingsign.square.fill 95 | francsign 96 | francsign.circle 97 | francsign.circle.fill 98 | francsign.square 99 | francsign.square.fill 100 | florinsign 101 | florinsign.circle 102 | florinsign.circle.fill 103 | florinsign.square 104 | florinsign.square.fill 105 | turkishlirasign 106 | turkishlirasign.circle 107 | turkishlirasign.circle.fill 108 | turkishlirasign.square 109 | turkishlirasign.square.fill 110 | rublesign 111 | rublesign.circle 112 | rublesign.circle.fill 113 | rublesign.square 114 | rublesign.square.fill 115 | eurosign 116 | eurosign.circle 117 | eurosign.circle.fill 118 | eurosign.square 119 | eurosign.square.fill 120 | dongsign 121 | dongsign.circle 122 | dongsign.circle.fill 123 | dongsign.square 124 | dongsign.square.fill 125 | indianrupeesign 126 | indianrupeesign.circle 127 | indianrupeesign.circle.fill 128 | indianrupeesign.square 129 | indianrupeesign.square.fill 130 | tengesign 131 | tengesign.circle 132 | tengesign.circle.fill 133 | tengesign.square 134 | tengesign.square.fill 135 | pesetasign 136 | pesetasign.circle 137 | pesetasign.circle.fill 138 | pesetasign.square 139 | pesetasign.square.fill 140 | pesosign 141 | pesosign.circle 142 | pesosign.circle.fill 143 | pesosign.square 144 | pesosign.square.fill 145 | kipsign 146 | kipsign.circle 147 | kipsign.circle.fill 148 | kipsign.square 149 | kipsign.square.fill 150 | wonsign 151 | wonsign.circle 152 | wonsign.circle.fill 153 | wonsign.square 154 | wonsign.square.fill 155 | lirasign 156 | lirasign.circle 157 | lirasign.circle.fill 158 | lirasign.square 159 | lirasign.square.fill 160 | australsign 161 | australsign.circle 162 | australsign.circle.fill 163 | australsign.square 164 | australsign.square.fill 165 | hryvniasign 166 | hryvniasign.circle 167 | hryvniasign.circle.fill 168 | hryvniasign.square 169 | hryvniasign.square.fill 170 | nairasign 171 | nairasign.circle 172 | nairasign.circle.fill 173 | nairasign.square 174 | nairasign.square.fill 175 | guaranisign 176 | guaranisign.circle 177 | guaranisign.circle.fill 178 | guaranisign.square 179 | guaranisign.square.fill 180 | coloncurrencysign 181 | coloncurrencysign.circle 182 | coloncurrencysign.circle.fill 183 | coloncurrencysign.square 184 | coloncurrencysign.square.fill 185 | cedisign 186 | cedisign.circle 187 | cedisign.circle.fill 188 | cedisign.square 189 | cedisign.square.fill 190 | cruzeirosign 191 | cruzeirosign.circle 192 | cruzeirosign.circle.fill 193 | cruzeirosign.square 194 | cruzeirosign.square.fill 195 | tugriksign 196 | tugriksign.circle 197 | tugriksign.circle.fill 198 | tugriksign.square 199 | tugriksign.square.fill 200 | millsign 201 | millsign.circle 202 | millsign.circle.fill 203 | millsign.square 204 | millsign.square.fill 205 | shekelsign 206 | shekelsign.circle 207 | shekelsign.circle.fill 208 | shekelsign.square 209 | shekelsign.square.fill 210 | manatsign 211 | manatsign.circle 212 | manatsign.circle.fill 213 | manatsign.square 214 | manatsign.square.fill 215 | rupeesign 216 | rupeesign.circle 217 | rupeesign.circle.fill 218 | rupeesign.square 219 | rupeesign.square.fill 220 | bahtsign 221 | bahtsign.circle 222 | bahtsign.circle.fill 223 | bahtsign.square 224 | bahtsign.square.fill 225 | larisign 226 | larisign.circle 227 | larisign.circle.fill 228 | larisign.square 229 | larisign.square.fill 230 | bitcoinsign 231 | bitcoinsign.circle 232 | bitcoinsign.circle.fill 233 | bitcoinsign.square 234 | bitcoinsign.square.fill 235 | australiandollarsign 236 | australiandollarsign.circle 237 | australiandollarsign.circle.fill 238 | australiandollarsign.square 239 | australiandollarsign.square.fill 240 | polishzlotysign 241 | polishzlotysign.circle 242 | polishzlotysign.circle.fill 243 | polishzlotysign.square 244 | polishzlotysign.square.fill 245 | norwegiankronesign 246 | norwegiankronesign.circle 247 | norwegiankronesign.circle.fill 248 | norwegiankronesign.square 249 | norwegiankronesign.square.fill 250 | swedishkronasign 251 | swedishkronasign.circle 252 | swedishkronasign.circle.fill 253 | swedishkronasign.square 254 | swedishkronasign.square.fill 255 | danishkronesign 256 | danishkronesign.circle 257 | danishkronesign.circle.fill 258 | danishkronesign.square 259 | danishkronesign.square.fill 260 | eurozonesign 261 | eurozonesign.circle 262 | eurozonesign.circle.fill 263 | eurozonesign.square 264 | eurozonesign.square.fill 265 | brazilianrealsign 266 | brazilianrealsign.circle 267 | brazilianrealsign.circle.fill 268 | brazilianrealsign.square 269 | brazilianrealsign.square.fill 270 | chineseyuanrenminbisign 271 | chineseyuanrenminbisign.circle 272 | chineseyuanrenminbisign.circle.fill 273 | chineseyuanrenminbisign.square 274 | chineseyuanrenminbisign.square.fill 275 | -------------------------------------------------------------------------------- /Sources/SymbolPicker/Resources/Ventura/Ventura-Home.txt: -------------------------------------------------------------------------------- 1 | figure.walk.arrival 2 | figure.walk.departure 3 | figure.walk.motion 4 | homekit 5 | house 6 | house.fill 7 | house.circle 8 | house.circle.fill 9 | lightbulb 10 | lightbulb.fill 11 | lightbulb.circle 12 | lightbulb.circle.fill 13 | lightbulb.slash 14 | lightbulb.slash.fill 15 | lightbulb.2 16 | lightbulb.2.fill 17 | lightbulb.led 18 | lightbulb.led.fill 19 | lightbulb.led.wide 20 | lightbulb.led.wide.fill 21 | fan.oscillation 22 | fan.oscillation.fill 23 | fanblades 24 | fanblades.fill 25 | fanblades.slash 26 | fanblades.slash.fill 27 | fan.desk 28 | fan.desk.fill 29 | fan.floor 30 | fan.floor.fill 31 | fan.ceiling 32 | fan.ceiling.fill 33 | fan.and.light.ceiling 34 | fan.and.light.ceiling.fill 35 | lamp.desk 36 | lamp.desk.fill 37 | lamp.table 38 | lamp.table.fill 39 | lamp.floor 40 | lamp.floor.fill 41 | lamp.ceiling 42 | lamp.ceiling.fill 43 | lamp.ceiling.inverse 44 | light.recessed 45 | light.recessed.fill 46 | light.recessed.inverse 47 | light.recessed.3 48 | light.recessed.3.fill 49 | light.recessed.3.inverse 50 | light.panel 51 | light.panel.fill 52 | light.cylindrical.ceiling 53 | light.cylindrical.ceiling.fill 54 | light.cylindrical.ceiling.inverse 55 | light.strip.2 56 | light.strip.2.fill 57 | light.ribbon 58 | light.ribbon.fill 59 | chandelier 60 | chandelier.fill 61 | lightswitch.on 62 | lightswitch.on.fill 63 | lightswitch.on.square 64 | lightswitch.on.square.fill 65 | lightswitch.off 66 | lightswitch.off.fill 67 | lightswitch.off.square 68 | lightswitch.off.square.fill 69 | button.programmable 70 | button.programmable.square 71 | button.programmable.square.fill 72 | switch.programmable 73 | switch.programmable.fill 74 | switch.programmable.square 75 | switch.programmable.square.fill 76 | poweroutlet.type.a 77 | poweroutlet.type.a.fill 78 | poweroutlet.type.a.square 79 | poweroutlet.type.a.square.fill 80 | poweroutlet.type.b 81 | poweroutlet.type.b.fill 82 | poweroutlet.type.b.square 83 | poweroutlet.type.b.square.fill 84 | poweroutlet.type.c 85 | poweroutlet.type.c.fill 86 | poweroutlet.type.c.square 87 | poweroutlet.type.c.square.fill 88 | poweroutlet.type.d 89 | poweroutlet.type.d.fill 90 | poweroutlet.type.d.square 91 | poweroutlet.type.d.square.fill 92 | poweroutlet.type.e 93 | poweroutlet.type.e.fill 94 | poweroutlet.type.e.square 95 | poweroutlet.type.e.square.fill 96 | poweroutlet.type.f 97 | poweroutlet.type.f.fill 98 | poweroutlet.type.f.square 99 | poweroutlet.type.f.square.fill 100 | poweroutlet.type.g 101 | poweroutlet.type.g.fill 102 | poweroutlet.type.g.square 103 | poweroutlet.type.g.square.fill 104 | poweroutlet.type.h 105 | poweroutlet.type.h.fill 106 | poweroutlet.type.h.square 107 | poweroutlet.type.h.square.fill 108 | poweroutlet.type.i 109 | poweroutlet.type.i.fill 110 | poweroutlet.type.i.square 111 | poweroutlet.type.i.square.fill 112 | poweroutlet.type.j 113 | poweroutlet.type.j.fill 114 | poweroutlet.type.j.square 115 | poweroutlet.type.j.square.fill 116 | poweroutlet.type.k 117 | poweroutlet.type.k.fill 118 | poweroutlet.type.k.square 119 | poweroutlet.type.k.square.fill 120 | poweroutlet.type.l 121 | poweroutlet.type.l.fill 122 | poweroutlet.type.l.square 123 | poweroutlet.type.l.square.fill 124 | poweroutlet.type.m 125 | poweroutlet.type.m.fill 126 | poweroutlet.type.m.square 127 | poweroutlet.type.m.square.fill 128 | poweroutlet.type.n 129 | poweroutlet.type.n.fill 130 | poweroutlet.type.n.square 131 | poweroutlet.type.n.square.fill 132 | poweroutlet.type.o 133 | poweroutlet.type.o.fill 134 | poweroutlet.type.o.square 135 | poweroutlet.type.o.square.fill 136 | poweroutlet.strip 137 | poweroutlet.strip.fill 138 | light.beacon.min 139 | light.beacon.min.fill 140 | light.beacon.max 141 | light.beacon.max.fill 142 | web.camera 143 | web.camera.fill 144 | video.doorbell 145 | video.doorbell.fill 146 | entry.lever.keypad 147 | entry.lever.keypad.fill 148 | entry.lever.keypad.trianglebadge.exclamationmark 149 | entry.lever.keypad.trianglebadge.exclamationmark.fill 150 | door.left.hand.open 151 | door.left.hand.closed 152 | door.right.hand.open 153 | door.right.hand.closed 154 | door.sliding.left.hand.open 155 | door.sliding.left.hand.closed 156 | door.sliding.right.hand.open 157 | door.sliding.right.hand.closed 158 | door.garage.open 159 | door.garage.closed 160 | door.garage.open.trianglebadge.exclamationmark 161 | door.garage.closed.trianglebadge.exclamationmark 162 | door.garage.double.bay.open 163 | door.garage.double.bay.closed 164 | door.garage.double.bay.open.trianglebadge.exclamationmark 165 | door.garage.double.bay.closed.trianglebadge.exclamationmark 166 | door.french.open 167 | door.french.closed 168 | pedestrian.gate.closed 169 | pedestrian.gate.open 170 | window.vertical.open 171 | window.vertical.closed 172 | window.horizontal 173 | window.horizontal.closed 174 | window.ceiling 175 | window.ceiling.closed 176 | window.casement 177 | window.casement.closed 178 | window.awning 179 | window.awning.closed 180 | blinds.vertical.open 181 | blinds.vertical.closed 182 | blinds.horizontal.open 183 | blinds.horizontal.closed 184 | window.shade.open 185 | window.shade.closed 186 | roller.shade.open 187 | roller.shade.closed 188 | roman.shade.open 189 | roman.shade.closed 190 | curtains.open 191 | curtains.closed 192 | air.purifier 193 | air.purifier.fill 194 | dehumidifier 195 | dehumidifier.fill 196 | humidifier 197 | humidifier.fill 198 | humidifier.and.droplets 199 | humidifier.and.droplets.fill 200 | heater.vertical 201 | heater.vertical.fill 202 | air.conditioner.vertical 203 | air.conditioner.vertical.fill 204 | air.conditioner.horizontal 205 | air.conditioner.horizontal.fill 206 | sprinkler 207 | sprinkler.fill 208 | sprinkler.and.droplets 209 | sprinkler.and.droplets.fill 210 | spigot 211 | spigot.fill 212 | drop.keypad.rectangle 213 | drop.keypad.rectangle.fill 214 | shower.sidejet 215 | shower.sidejet.fill 216 | shower 217 | shower.fill 218 | shower.handheld 219 | shower.handheld.fill 220 | bathtub 221 | bathtub.fill 222 | contact.sensor 223 | contact.sensor.fill 224 | sensor 225 | sensor.fill 226 | carbon.monoxide.cloud 227 | carbon.monoxide.cloud.fill 228 | carbon.dioxide.cloud 229 | carbon.dioxide.cloud.fill 230 | pipe.and.drop 231 | pipe.and.drop.fill 232 | hifireceiver 233 | hifireceiver.fill 234 | videoprojector 235 | videoprojector.fill 236 | wifi.router 237 | wifi.router.fill 238 | party.popper 239 | party.popper.fill 240 | balloon 241 | balloon.fill 242 | balloon.2 243 | balloon.2.fill 244 | frying.pan 245 | frying.pan.fill 246 | popcorn 247 | popcorn.fill 248 | popcorn.circle 249 | popcorn.circle.fill 250 | bed.double 251 | bed.double.fill 252 | bed.double.circle 253 | bed.double.circle.fill 254 | sofa 255 | sofa.fill 256 | chair.lounge 257 | chair.lounge.fill 258 | chair 259 | chair.fill 260 | cabinet 261 | cabinet.fill 262 | fireplace 263 | fireplace.fill 264 | table.furniture 265 | table.furniture.fill 266 | washer 267 | washer.fill 268 | dryer 269 | dryer.fill 270 | dishwasher 271 | dishwasher.fill 272 | oven 273 | oven.fill 274 | stove 275 | stove.fill 276 | cooktop 277 | cooktop.fill 278 | microwave 279 | microwave.fill 280 | refrigerator 281 | refrigerator.fill 282 | sink 283 | sink.fill 284 | toilet 285 | toilet.fill 286 | toilet.circle 287 | toilet.circle.fill 288 | stairs 289 | square.split.bottomrightquarter 290 | square.split.bottomrightquarter.fill 291 | lock.trianglebadge.exclamationmark 292 | lock.trianglebadge.exclamationmark.fill 293 | lock.open.trianglebadge.exclamationmark 294 | lock.open.trianglebadge.exclamationmark.fill 295 | av.remote 296 | av.remote.fill -------------------------------------------------------------------------------- /Sources/SymbolPicker/Resources/Ventura/Ventura-Human.txt: -------------------------------------------------------------------------------- 1 | folder.badge.person.crop 2 | folder.fill.badge.person.crop 3 | externaldrive.badge.person.crop 4 | externaldrive.fill.badge.person.crop 5 | person 6 | person.fill 7 | person.circle 8 | person.circle.fill 9 | person.fill.turn.right 10 | person.fill.turn.down 11 | person.fill.turn.left 12 | person.fill.checkmark 13 | person.fill.xmark 14 | person.fill.questionmark 15 | person.badge.plus 16 | person.fill.badge.plus 17 | person.badge.minus 18 | person.fill.badge.minus 19 | person.badge.clock 20 | person.badge.clock.fill 21 | person.badge.key 22 | person.badge.key.fill 23 | person.badge.shield.checkmark 24 | person.badge.shield.checkmark.fill 25 | shareplay 26 | shareplay.slash 27 | rectangle.inset.filled.and.person.filled 28 | shared.with.you 29 | shared.with.you.slash 30 | person.and.arrow.left.and.arrow.right 31 | person.fill.and.arrow.left.and.arrow.right 32 | person.2 33 | person.2.fill 34 | person.2.circle 35 | person.2.circle.fill 36 | person.2.slash 37 | person.2.slash.fill 38 | person.2.gobackward 39 | person.2.badge.gearshape 40 | person.2.badge.gearshape.fill 41 | person.wave.2 42 | person.wave.2.fill 43 | person.2.wave.2 44 | person.2.wave.2.fill 45 | person.line.dotted.person 46 | person.line.dotted.person.fill 47 | person.3 48 | person.3.fill 49 | person.3.sequence 50 | person.3.sequence.fill 51 | person.crop.circle 52 | person.crop.circle.fill 53 | person.crop.circle.badge.plus 54 | person.crop.circle.fill.badge.plus 55 | person.crop.circle.badge.minus 56 | person.crop.circle.fill.badge.minus 57 | person.crop.circle.badge.checkmark 58 | person.crop.circle.fill.badge.checkmark 59 | person.crop.circle.badge.xmark 60 | person.crop.circle.fill.badge.xmark 61 | person.crop.circle.badge.questionmark 62 | person.crop.circle.badge.questionmark.fill 63 | person.crop.circle.badge.exclamationmark 64 | person.crop.circle.badge.exclamationmark.fill 65 | person.crop.circle.badge.moon 66 | person.crop.circle.badge.moon.fill 67 | person.crop.circle.badge.clock 68 | person.crop.circle.badge.clock.fill 69 | person.crop.circle.badge 70 | person.crop.circle.badge.fill 71 | person.crop.circle.dashed 72 | person.crop.square 73 | person.crop.square.fill 74 | person.crop.artframe 75 | person.bust 76 | person.bust.fill 77 | person.crop.rectangle.stack 78 | person.crop.rectangle.stack.fill 79 | person.2.crop.square.stack 80 | person.2.crop.square.stack.fill 81 | person.crop.rectangle 82 | person.crop.rectangle.fill 83 | person.crop.rectangle.badge.plus 84 | person.crop.rectangle.badge.plus.fill 85 | square.on.square.badge.person.crop 86 | square.on.square.badge.person.crop.fill 87 | arrow.up.and.person.rectangle.portrait 88 | arrow.up.and.person.rectangle.turn.right 89 | arrow.up.and.person.rectangle.turn.left 90 | person.crop.square.filled.and.at.rectangle 91 | person.crop.square.filled.and.at.rectangle.fill 92 | person.text.rectangle 93 | person.text.rectangle.fill 94 | person.and.background.dotted 95 | figure.stand 96 | figure.stand.line.dotted.figure.stand 97 | figure.dress.line.vertical.figure 98 | figure.arms.open 99 | figure.2.arms.open 100 | figure.2.and.child.holdinghands 101 | figure.and.child.holdinghands 102 | figure.walk 103 | figure.walk.circle 104 | figure.walk.circle.fill 105 | figure.walk.diamond 106 | figure.walk.diamond.fill 107 | figure.walk.arrival 108 | figure.walk.departure 109 | figure.walk.motion 110 | figure.wave 111 | figure.wave.circle 112 | figure.wave.circle.fill 113 | figure.fall 114 | figure.fall.circle 115 | figure.fall.circle.fill 116 | figure.run 117 | figure.run.circle 118 | figure.run.circle.fill 119 | figure.run.square.stack 120 | figure.run.square.stack.fill 121 | figure.roll 122 | figure.roll.runningpace 123 | figure.american.football 124 | figure.archery 125 | figure.australian.football 126 | figure.badminton 127 | figure.barre 128 | figure.baseball 129 | figure.basketball 130 | figure.bowling 131 | figure.boxing 132 | figure.climbing 133 | figure.cooldown 134 | figure.core.training 135 | figure.cricket 136 | figure.skiing.crosscountry 137 | figure.cross.training 138 | figure.curling 139 | figure.dance 140 | figure.disc.sports 141 | figure.skiing.downhill 142 | figure.elliptical 143 | figure.equestrian.sports 144 | figure.fencing 145 | figure.fishing 146 | figure.flexibility 147 | figure.strengthtraining.functional 148 | figure.golf 149 | figure.gymnastics 150 | figure.hand.cycling 151 | figure.handball 152 | figure.highintensity.intervaltraining 153 | figure.hiking 154 | figure.hockey 155 | figure.hunting 156 | figure.indoor.cycle 157 | figure.jumprope 158 | figure.kickboxing 159 | figure.lacrosse 160 | figure.martial.arts 161 | figure.mind.and.body 162 | figure.mixed.cardio 163 | figure.open.water.swim 164 | figure.outdoor.cycle 165 | figure.pickleball 166 | figure.pilates 167 | figure.play 168 | figure.pool.swim 169 | figure.racquetball 170 | figure.rolling 171 | figure.rower 172 | figure.rugby 173 | figure.sailing 174 | figure.skating 175 | figure.snowboarding 176 | figure.soccer 177 | figure.socialdance 178 | figure.softball 179 | figure.squash 180 | figure.stair.stepper 181 | figure.stairs 182 | figure.step.training 183 | figure.surfing 184 | figure.table.tennis 185 | figure.taichi 186 | figure.tennis 187 | figure.track.and.field 188 | figure.strengthtraining.traditional 189 | figure.volleyball 190 | figure.water.fitness 191 | figure.waterpolo 192 | figure.wrestling 193 | figure.yoga 194 | person.icloud 195 | person.icloud.fill 196 | lungs 197 | lungs.fill 198 | tshirt 199 | tshirt.fill 200 | shoeprints.fill 201 | face.smiling 202 | face.smiling.inverse 203 | face.dashed 204 | face.dashed.fill 205 | eye 206 | eye.fill 207 | eye.circle 208 | eye.circle.fill 209 | eye.square 210 | eye.square.fill 211 | eye.slash 212 | eye.slash.fill 213 | eye.slash.circle 214 | eye.slash.circle.fill 215 | eye.trianglebadge.exclamationmark 216 | eye.trianglebadge.exclamationmark.fill 217 | eyes 218 | eyes.inverse 219 | eyebrow 220 | nose 221 | nose.fill 222 | mustache 223 | mustache.fill 224 | mouth 225 | mouth.fill 226 | brain.head.profile 227 | brain 228 | ear 229 | ear.badge.checkmark 230 | ear.trianglebadge.exclamationmark 231 | ear.and.waveform 232 | ear.fill 233 | hearingdevice.ear 234 | hearingdevice.ear.fill 235 | hearingdevice.and.signal.meter 236 | hearingdevice.and.signal.meter.fill 237 | hand.raised 238 | hand.raised.fill 239 | hand.raised.circle 240 | hand.raised.circle.fill 241 | hand.raised.square 242 | hand.raised.square.fill 243 | hand.raised.app 244 | hand.raised.app.fill 245 | hand.raised.slash 246 | hand.raised.slash.fill 247 | hand.raised.fingers.spread 248 | hand.raised.fingers.spread.fill 249 | hand.thumbsup 250 | hand.thumbsup.fill 251 | hand.thumbsup.circle 252 | hand.thumbsup.circle.fill 253 | hand.thumbsdown 254 | hand.thumbsdown.fill 255 | hand.thumbsdown.circle 256 | hand.thumbsdown.circle.fill 257 | hand.point.up.left 258 | hand.point.up.left.fill 259 | hand.draw 260 | hand.draw.fill 261 | hand.tap 262 | hand.tap.fill 263 | rectangle.and.hand.point.up.left 264 | rectangle.and.hand.point.up.left.fill 265 | rectangle.filled.and.hand.point.up.left 266 | rectangle.and.hand.point.up.left.filled 267 | hand.point.left 268 | hand.point.left.fill 269 | hand.point.right 270 | hand.point.right.fill 271 | hand.point.up 272 | hand.point.up.fill 273 | hand.point.up.braille 274 | hand.point.up.braille.fill 275 | hand.point.down 276 | hand.point.down.fill 277 | hand.wave 278 | hand.wave.fill 279 | hands.clap 280 | hands.clap.fill 281 | hands.sparkles 282 | hands.sparkles.fill 283 | person.fill.viewfinder 284 | rectangle.badge.person.crop 285 | rectangle.fill.badge.person.crop 286 | rectangle.stack.badge.person.crop 287 | rectangle.stack.badge.person.crop.fill -------------------------------------------------------------------------------- /Sources/SymbolPicker/Resources/Sonoma/Sonoma-Home.txt: -------------------------------------------------------------------------------- 1 | figure.walk.arrival 2 | figure.walk.departure 3 | figure.walk.motion 4 | figure.walk.motion.trianglebadge.exclamationmark 5 | homekit 6 | house 7 | house.fill 8 | house.circle 9 | house.circle.fill 10 | lightbulb 11 | lightbulb.fill 12 | lightbulb.circle 13 | lightbulb.circle.fill 14 | lightbulb.slash 15 | lightbulb.slash.fill 16 | lightbulb.min 17 | lightbulb.min.fill 18 | lightbulb.max 19 | lightbulb.max.fill 20 | lightbulb.min.badge.exclamationmark 21 | lightbulb.min.badge.exclamationmark.fill 22 | lightbulb.2 23 | lightbulb.2.fill 24 | lightbulb.led 25 | lightbulb.led.fill 26 | lightbulb.led.wide 27 | lightbulb.led.wide.fill 28 | fan.oscillation 29 | fan.oscillation.fill 30 | fan 31 | fan.fill 32 | fan.slash 33 | fan.slash.fill 34 | fan.desk 35 | fan.desk.fill 36 | fan.floor 37 | fan.floor.fill 38 | fan.ceiling 39 | fan.ceiling.fill 40 | fan.and.light.ceiling 41 | fan.and.light.ceiling.fill 42 | lamp.desk 43 | lamp.desk.fill 44 | lamp.table 45 | lamp.table.fill 46 | lamp.floor 47 | lamp.floor.fill 48 | lamp.ceiling 49 | lamp.ceiling.fill 50 | lamp.ceiling.inverse 51 | light.recessed 52 | light.recessed.fill 53 | light.recessed.inverse 54 | light.recessed.3 55 | light.recessed.3.fill 56 | light.recessed.3.inverse 57 | light.panel 58 | light.panel.fill 59 | light.cylindrical.ceiling 60 | light.cylindrical.ceiling.fill 61 | light.cylindrical.ceiling.inverse 62 | light.strip.2 63 | light.strip.2.fill 64 | light.ribbon 65 | light.ribbon.fill 66 | chandelier 67 | chandelier.fill 68 | lightswitch.on 69 | lightswitch.on.fill 70 | lightswitch.on.square 71 | lightswitch.on.square.fill 72 | lightswitch.off 73 | lightswitch.off.fill 74 | lightswitch.off.square 75 | lightswitch.off.square.fill 76 | button.programmable 77 | button.programmable.square 78 | button.programmable.square.fill 79 | switch.programmable 80 | switch.programmable.fill 81 | switch.programmable.square 82 | switch.programmable.square.fill 83 | poweroutlet.type.a 84 | poweroutlet.type.a.fill 85 | poweroutlet.type.a.square 86 | poweroutlet.type.a.square.fill 87 | poweroutlet.type.b 88 | poweroutlet.type.b.fill 89 | poweroutlet.type.b.square 90 | poweroutlet.type.b.square.fill 91 | poweroutlet.type.c 92 | poweroutlet.type.c.fill 93 | poweroutlet.type.c.square 94 | poweroutlet.type.c.square.fill 95 | poweroutlet.type.d 96 | poweroutlet.type.d.fill 97 | poweroutlet.type.d.square 98 | poweroutlet.type.d.square.fill 99 | poweroutlet.type.e 100 | poweroutlet.type.e.fill 101 | poweroutlet.type.e.square 102 | poweroutlet.type.e.square.fill 103 | poweroutlet.type.f 104 | poweroutlet.type.f.fill 105 | poweroutlet.type.f.square 106 | poweroutlet.type.f.square.fill 107 | poweroutlet.type.g 108 | poweroutlet.type.g.fill 109 | poweroutlet.type.g.square 110 | poweroutlet.type.g.square.fill 111 | poweroutlet.type.h 112 | poweroutlet.type.h.fill 113 | poweroutlet.type.h.square 114 | poweroutlet.type.h.square.fill 115 | poweroutlet.type.i 116 | poweroutlet.type.i.fill 117 | poweroutlet.type.i.square 118 | poweroutlet.type.i.square.fill 119 | poweroutlet.type.j 120 | poweroutlet.type.j.fill 121 | poweroutlet.type.j.square 122 | poweroutlet.type.j.square.fill 123 | poweroutlet.type.k 124 | poweroutlet.type.k.fill 125 | poweroutlet.type.k.square 126 | poweroutlet.type.k.square.fill 127 | poweroutlet.type.l 128 | poweroutlet.type.l.fill 129 | poweroutlet.type.l.square 130 | poweroutlet.type.l.square.fill 131 | poweroutlet.type.m 132 | poweroutlet.type.m.fill 133 | poweroutlet.type.m.square 134 | poweroutlet.type.m.square.fill 135 | poweroutlet.type.n 136 | poweroutlet.type.n.fill 137 | poweroutlet.type.n.square 138 | poweroutlet.type.n.square.fill 139 | poweroutlet.type.o 140 | poweroutlet.type.o.fill 141 | poweroutlet.type.o.square 142 | poweroutlet.type.o.square.fill 143 | poweroutlet.strip 144 | poweroutlet.strip.fill 145 | light.beacon.min 146 | light.beacon.min.fill 147 | light.beacon.max 148 | light.beacon.max.fill 149 | web.camera 150 | web.camera.fill 151 | video.doorbell 152 | video.doorbell.fill 153 | entry.lever.keypad 154 | entry.lever.keypad.fill 155 | entry.lever.keypad.trianglebadge.exclamationmark 156 | entry.lever.keypad.trianglebadge.exclamationmark.fill 157 | door.left.hand.open 158 | door.left.hand.closed 159 | door.right.hand.open 160 | door.right.hand.closed 161 | door.sliding.left.hand.open 162 | door.sliding.left.hand.closed 163 | door.sliding.right.hand.open 164 | door.sliding.right.hand.closed 165 | door.garage.open 166 | door.garage.closed 167 | door.garage.open.trianglebadge.exclamationmark 168 | door.garage.closed.trianglebadge.exclamationmark 169 | door.garage.double.bay.open 170 | door.garage.double.bay.closed 171 | door.garage.double.bay.open.trianglebadge.exclamationmark 172 | door.garage.double.bay.closed.trianglebadge.exclamationmark 173 | door.french.open 174 | door.french.closed 175 | pedestrian.gate.closed 176 | pedestrian.gate.open 177 | window.vertical.open 178 | window.vertical.closed 179 | window.horizontal 180 | window.horizontal.closed 181 | window.ceiling 182 | window.ceiling.closed 183 | window.casement 184 | window.casement.closed 185 | window.awning 186 | window.awning.closed 187 | blinds.vertical.open 188 | blinds.vertical.closed 189 | blinds.horizontal.open 190 | blinds.horizontal.closed 191 | window.shade.open 192 | window.shade.closed 193 | roller.shade.open 194 | roller.shade.closed 195 | roman.shade.open 196 | roman.shade.closed 197 | curtains.open 198 | curtains.closed 199 | air.purifier 200 | air.purifier.fill 201 | dehumidifier 202 | dehumidifier.fill 203 | humidifier 204 | humidifier.fill 205 | humidifier.and.droplets 206 | humidifier.and.droplets.fill 207 | heater.vertical 208 | heater.vertical.fill 209 | air.conditioner.vertical 210 | air.conditioner.vertical.fill 211 | air.conditioner.horizontal 212 | air.conditioner.horizontal.fill 213 | sprinkler 214 | sprinkler.fill 215 | sprinkler.and.droplets 216 | sprinkler.and.droplets.fill 217 | spigot 218 | spigot.fill 219 | drop.keypad.rectangle 220 | drop.keypad.rectangle.fill 221 | shower.sidejet 222 | shower.sidejet.fill 223 | shower 224 | shower.fill 225 | shower.handheld 226 | shower.handheld.fill 227 | bathtub 228 | bathtub.fill 229 | contact.sensor 230 | contact.sensor.fill 231 | sensor 232 | sensor.fill 233 | carbon.monoxide.cloud 234 | carbon.monoxide.cloud.fill 235 | carbon.dioxide.cloud 236 | carbon.dioxide.cloud.fill 237 | pipe.and.drop 238 | pipe.and.drop.fill 239 | hifireceiver 240 | hifireceiver.fill 241 | videoprojector 242 | videoprojector.fill 243 | wifi.router 244 | wifi.router.fill 245 | party.popper 246 | party.popper.fill 247 | balloon 248 | balloon.fill 249 | balloon.2 250 | balloon.2.fill 251 | frying.pan 252 | frying.pan.fill 253 | popcorn 254 | popcorn.fill 255 | popcorn.circle 256 | popcorn.circle.fill 257 | bed.double 258 | bed.double.fill 259 | bed.double.circle 260 | bed.double.circle.fill 261 | sofa 262 | sofa.fill 263 | chair.lounge 264 | chair.lounge.fill 265 | chair 266 | chair.fill 267 | table.furniture 268 | table.furniture.fill 269 | cabinet 270 | cabinet.fill 271 | fireplace 272 | fireplace.fill 273 | washer 274 | washer.fill 275 | washer.circle 276 | washer.circle.fill 277 | dryer 278 | dryer.fill 279 | dryer.circle 280 | dryer.circle.fill 281 | dishwasher 282 | dishwasher.fill 283 | dishwasher.circle 284 | dishwasher.circle.fill 285 | oven 286 | oven.fill 287 | stove 288 | stove.fill 289 | cooktop 290 | cooktop.fill 291 | microwave 292 | microwave.fill 293 | refrigerator 294 | refrigerator.fill 295 | sink 296 | sink.fill 297 | toilet 298 | toilet.fill 299 | toilet.circle 300 | toilet.circle.fill 301 | stairs 302 | square.split.bottomrightquarter 303 | square.split.bottomrightquarter.fill 304 | lock.trianglebadge.exclamationmark 305 | lock.trianglebadge.exclamationmark.fill 306 | lock.open.trianglebadge.exclamationmark 307 | lock.open.trianglebadge.exclamationmark.fill 308 | av.remote 309 | av.remote.fill 310 | -------------------------------------------------------------------------------- /Sources/SymbolPicker/SymbolCollection/SymbolCollectionViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SymbolsCollectionViewController.swift 3 | // SymbolPicker 4 | // 5 | // Created by Francis Feng on 2021/5/4. 6 | // 7 | 8 | import Cocoa 9 | 10 | public protocol SymbolPickerDelegate: AnyObject { 11 | func symbolPicker(_ symbol: String, color: NSColor?) 12 | } 13 | 14 | class SymbolCollectionViewController: NSViewController, NSCollectionViewDataSource, NSCollectionViewDelegate { 15 | 16 | @IBOutlet weak var collectionView: CollectionView! 17 | 18 | var originalSymbolsName: [String] = [] 19 | var symbolsName: [String] = [] 20 | var color: NSColor = .labelColor 21 | var isColorChanged = false 22 | var currentSymbolName: String? = nil 23 | var currentSelected: Set? 24 | weak var pickerDelegate: SymbolPickerDelegate? 25 | weak var sidebarDelegate: SidebarController? 26 | 27 | @IBOutlet weak var titleField: NSTextField! 28 | @IBOutlet weak var searchField: NSSearchField! 29 | 30 | @IBOutlet weak var colorPanelButton: NSButton! 31 | var lastTypeTime = Date() 32 | var minimumTypeDuration: TimeInterval = 0.3 33 | var workItem: DispatchWorkItem? 34 | 35 | override func viewDidLoad() { 36 | super.viewDidLoad() 37 | collectionView.dataSource = self 38 | collectionView.wantsLayer = true 39 | collectionView.delegate = self 40 | collectionView.enclosingScrollView?.scrollerStyle = .overlay 41 | collectionView.register(SymbolView.self, forItemWithIdentifier: .SymbolView) 42 | collectionView.allowsEmptySelection = false 43 | searchField.action = #selector(searchAction) 44 | searchField.delegate = self 45 | colorPanelButton.action = #selector(showColorPancel) 46 | colorPanelButton.target = self 47 | setupLayout() 48 | } 49 | 50 | public func toggleColorPanelButton(_ isHidden: Bool) { 51 | colorPanelButton.isHidden = isHidden 52 | } 53 | 54 | override func viewDidDisappear() { 55 | super.viewDidDisappear() 56 | if NSColorPanel.shared.isVisible { 57 | NSColorPanel.shared.orderOut(self) 58 | } 59 | } 60 | 61 | func configureCurrentItem(symbol: String, color: NSColor) { 62 | self.currentSymbolName = symbol 63 | self.color = color 64 | } 65 | 66 | private func setupLayout() { 67 | collectionView.collectionViewLayout = gridLayout() 68 | } 69 | 70 | private func gridLayout() -> NSCollectionViewLayout { 71 | let spacing: CGFloat = 15 72 | let itemWidth: CGFloat = 44 73 | let itemHeight: CGFloat = 36 74 | 75 | let itemSize = NSCollectionLayoutSize(widthDimension: .absolute(itemWidth), heightDimension: .absolute(itemHeight)) 76 | let item = NSCollectionLayoutItem(layoutSize: itemSize) 77 | 78 | let groupSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1.0), heightDimension: .absolute(itemHeight)) 79 | let group = NSCollectionLayoutGroup.horizontal(layoutSize: groupSize, subitems: [item]) 80 | 81 | group.interItemSpacing = .flexible(spacing) 82 | 83 | let section = NSCollectionLayoutSection(group: group) 84 | section.interGroupSpacing = spacing 85 | section.contentInsets = .init(top: spacing, leading: spacing, bottom: spacing, trailing: spacing) 86 | 87 | let layout = NSCollectionViewCompositionalLayout(section: section) 88 | return layout 89 | } 90 | 91 | @objc func searchAction(_ sender: Any) { 92 | let text = searchField.stringValue 93 | self.workItem?.cancel() 94 | let workItem = DispatchWorkItem { [weak self] in 95 | self?.searchSymbol(text.lowercased()) 96 | } 97 | 98 | DispatchQueue.main.asyncAfter(deadline: .now() + minimumTypeDuration, execute: workItem) 99 | self.workItem = workItem 100 | } 101 | 102 | @objc func showColorPancel(_ sender: Any) { 103 | let colorPanel = NSColorPanel.shared 104 | colorPanel.setTarget(self) 105 | colorPanel.setAction(#selector(updateColor)) 106 | colorPanel.makeKeyAndOrderFront(self) 107 | colorPanel.isContinuous = true 108 | } 109 | 110 | @objc func updateColor(sender: Any) { 111 | isColorChanged = true 112 | color = NSColorPanel.shared.color 113 | collectionView.reloadData() 114 | 115 | if let selected = currentSelected?.first { 116 | if let item = collectionView.item(at: selected) { 117 | item.isSelected = true 118 | } 119 | } 120 | } 121 | 122 | func numberOfSections(in collectionView: NSCollectionView) -> Int { 123 | return 1 124 | } 125 | 126 | func collectionView(_ collectionView: NSCollectionView, numberOfItemsInSection section: Int) -> Int { 127 | return symbolsName.count 128 | } 129 | 130 | func collectionView(_ collectionView: NSCollectionView, itemForRepresentedObjectAt indexPath: IndexPath) -> NSCollectionViewItem { 131 | let symbol = symbolsName[indexPath.item] 132 | 133 | if let symbolItem = collectionView.makeItem(withIdentifier: .SymbolView, for: indexPath) as? SymbolView { 134 | configureSymbol(symbolItem, symbol: symbol) 135 | return symbolItem 136 | } 137 | 138 | let symbolItem = SymbolView() 139 | configureSymbol(symbolItem, symbol: symbol) 140 | return symbolItem 141 | } 142 | 143 | func configureSymbol(_ view: SymbolView, symbol: String) { 144 | let configuration = NSImage.SymbolConfiguration(pointSize: 16, weight: .regular) 145 | let image = NSImage(symbol)?.withSymbolConfiguration(configuration) 146 | view.imageViewForSymbol.image = image 147 | view.imageViewForSymbol.contentTintColor = color 148 | view.imageViewForSymbol.toolTip = symbol 149 | view.viewController = self 150 | 151 | if symbol == currentSymbolName { 152 | view.isSelected = true 153 | } 154 | } 155 | 156 | // Used in SymbolView. Double-click to select current and exit. 157 | func selectCurrent() { 158 | let selectionIndexes = collectionView.selectionIndexes 159 | if let selected = selectionIndexes.first { 160 | let symbol = symbolsName[selected] 161 | if isColorChanged { 162 | pickerDelegate?.symbolPicker(symbol, color: NSColorPanel.shared.color) 163 | } else { 164 | pickerDelegate?.symbolPicker(symbol, color: nil) 165 | } 166 | endSheet() 167 | } 168 | } 169 | 170 | func endSheet() { 171 | guard let window = view.window else { return } 172 | window.sheetParent?.endSheet(window, returnCode: .OK) 173 | } 174 | } 175 | 176 | extension SymbolCollectionViewController: SidebarController { 177 | func sidebarController(_ controller: SidebarViewController, node: Node) { 178 | symbolsName = Symbol.symbols(in: node.category) 179 | originalSymbolsName = Symbol.symbols(in: node.category) 180 | collectionView.reloadData() 181 | selectCurrentSymbolIfPossible() 182 | } 183 | 184 | func selectCurrentSymbolIfPossible() { 185 | if let name = currentSymbolName, 186 | let index = symbolsName.firstIndex(of: name) { 187 | 188 | let indexPath = IndexPath(item: index, section: 0) 189 | let set = Set([indexPath]) 190 | 191 | currentSelected = set 192 | 193 | collectionView.selectItems(at: set, scrollPosition: .centeredVertically) 194 | } 195 | } 196 | } 197 | 198 | extension SymbolCollectionViewController { 199 | func searchSymbol(_ string: String) { 200 | if string.isEmpty { 201 | symbolsName = originalSymbolsName 202 | } else { 203 | symbolsName = originalSymbolsName.filter{$0.contains(string)} 204 | } 205 | collectionView.reloadData() 206 | } 207 | } 208 | 209 | extension SymbolCollectionViewController: NSSearchFieldDelegate { 210 | func control(_ control: NSControl, textView: NSTextView, doCommandBy commandSelector: Selector) -> Bool { 211 | if commandSelector == #selector(cancelOperation) { 212 | if searchField.stringValue.isEmpty { 213 | endSheet() 214 | return true 215 | } 216 | } 217 | return false 218 | } 219 | } 220 | -------------------------------------------------------------------------------- /Sources/SymbolPicker/Resources/Ventura/Ventura-Devices.txt: -------------------------------------------------------------------------------- 1 | keyboard 2 | keyboard.fill 3 | keyboard.badge.ellipsis 4 | keyboard.badge.ellipsis.fill 5 | keyboard.badge.eye 6 | keyboard.badge.eye.fill 7 | keyboard.chevron.compact.down 8 | keyboard.chevron.compact.down.fill 9 | keyboard.chevron.compact.left 10 | keyboard.chevron.compact.left.fill 11 | keyboard.onehanded.left 12 | keyboard.onehanded.left.fill 13 | keyboard.onehanded.right 14 | keyboard.onehanded.right.fill 15 | printer 16 | printer.fill 17 | printer.filled.and.paper 18 | printer.dotmatrix 19 | printer.dotmatrix.fill 20 | printer.dotmatrix.filled.and.paper 21 | scanner 22 | scanner.fill 23 | faxmachine 24 | faxmachine.fill 25 | airtag.radiowaves.forward 26 | airtag.radiowaves.forward.fill 27 | airtag 28 | airtag.fill 29 | display 30 | play.display 31 | lock.display 32 | lock.open.display 33 | display.and.arrow.down 34 | display.trianglebadge.exclamationmark 35 | display.2 36 | desktopcomputer 37 | play.desktopcomputer 38 | lock.desktopcomputer 39 | lock.open.desktopcomputer 40 | desktopcomputer.and.arrow.down 41 | desktopcomputer.trianglebadge.exclamationmark 42 | pc 43 | macpro.gen1 44 | macpro.gen1.fill 45 | macpro.gen2 46 | macpro.gen2.fill 47 | macpro.gen3 48 | macpro.gen3.fill 49 | macpro.gen3.server 50 | server.rack 51 | xserve 52 | laptopcomputer 53 | laptopcomputer.slash 54 | play.laptopcomputer 55 | lock.laptopcomputer 56 | lock.open.laptopcomputer 57 | laptopcomputer.and.arrow.down 58 | laptopcomputer.trianglebadge.exclamationmark 59 | macbook.and.iphone 60 | macbook.and.ipad 61 | macmini 62 | macmini.fill 63 | macstudio 64 | macstudio.fill 65 | airport.express 66 | airport.extreme 67 | airport.extreme.tower 68 | ipod 69 | ipodshuffle.gen1 70 | ipodshuffle.gen2 71 | ipodshuffle.gen3 72 | ipodshuffle.gen4 73 | ipodtouch 74 | ipodtouch.slash 75 | ipodtouch.landscape 76 | flipphone 77 | candybarphone 78 | iphone.gen1 79 | iphone.gen1.circle 80 | iphone.gen1.circle.fill 81 | iphone.gen1.landscape 82 | iphone.gen1.radiowaves.left.and.right 83 | iphone.gen1.radiowaves.left.and.right.circle 84 | iphone.gen1.radiowaves.left.and.right.circle.fill 85 | iphone.gen1.slash 86 | iphone.gen1.slash.circle 87 | iphone.gen1.slash.circle.fill 88 | iphone.gen1.badge.play 89 | iphone.gen2 90 | iphone.gen2.circle 91 | iphone.gen2.circle.fill 92 | iphone.gen2.landscape 93 | iphone.gen2.radiowaves.left.and.right 94 | iphone.gen2.radiowaves.left.and.right.circle 95 | iphone.gen2.radiowaves.left.and.right.circle.fill 96 | iphone.gen2.slash 97 | iphone.gen2.slash.circle 98 | iphone.gen2.slash.circle.fill 99 | iphone.gen2.badge.play 100 | iphone.gen3 101 | iphone.gen3.circle 102 | iphone.gen3.circle.fill 103 | iphone.gen3.landscape 104 | iphone.gen3.radiowaves.left.and.right 105 | iphone.gen3.radiowaves.left.and.right.circle 106 | iphone.gen3.radiowaves.left.and.right.circle.fill 107 | iphone.gen3.slash 108 | iphone.gen3.slash.circle 109 | iphone.gen3.slash.circle.fill 110 | iphone.gen3.badge.play 111 | iphone 112 | iphone.circle 113 | iphone.circle.fill 114 | iphone.landscape 115 | iphone.radiowaves.left.and.right 116 | iphone.radiowaves.left.and.right.circle 117 | iphone.radiowaves.left.and.right.circle.fill 118 | iphone.slash 119 | iphone.slash.circle 120 | iphone.slash.circle.fill 121 | iphone.badge.play 122 | lock.iphone 123 | lock.open.iphone 124 | iphone.and.arrow.forward 125 | arrow.turn.up.forward.iphone 126 | arrow.turn.up.forward.iphone.fill 127 | iphone.rear.camera 128 | apps.iphone 129 | apps.iphone.badge.plus 130 | apps.iphone.landscape 131 | platter.filled.top.iphone 132 | platter.filled.bottom.iphone 133 | platter.filled.top.and.arrow.up.iphone 134 | platter.filled.bottom.and.arrow.down.iphone 135 | platter.2.filled.iphone 136 | platter.2.filled.iphone.landscape 137 | iphone.smartbatterycase.gen2 138 | iphone.smartbatterycase.gen1 139 | ipad.gen1 140 | ipad.gen1.badge.play 141 | ipad.gen1.landscape 142 | ipad.gen1.landscape.badge.play 143 | ipad.gen2 144 | ipad.gen2.badge.play 145 | ipad.gen2.landscape 146 | ipad.gen2.landscape.badge.play 147 | ipad 148 | ipad.badge.play 149 | ipad.landscape 150 | ipad.landscape.badge.play 151 | ipad.and.iphone 152 | ipad.and.iphone.slash 153 | lock.ipad 154 | lock.open.ipad 155 | ipad.and.arrow.forward 156 | ipad.rear.camera 157 | apps.ipad 158 | apps.ipad.landscape 159 | platter.2.filled.ipad 160 | platter.2.filled.ipad.landscape 161 | applepencil 162 | magicmouse 163 | magicmouse.fill 164 | computermouse 165 | computermouse.fill 166 | applewatch 167 | applewatch.watchface 168 | exclamationmark.applewatch 169 | lock.applewatch 170 | lock.open.applewatch 171 | applewatch.radiowaves.left.and.right 172 | applewatch.slash 173 | applewatch.side.right 174 | watchface.applewatch.case 175 | applewatch.case.inset.filled 176 | platter.filled.top.applewatch.case 177 | platter.filled.bottom.applewatch.case 178 | platter.top.applewatch.case 179 | platter.bottom.applewatch.case 180 | arrow.up.and.down.and.sparkles 181 | digitalcrown.arrow.clockwise 182 | digitalcrown.arrow.clockwise.fill 183 | digitalcrown.arrow.counterclockwise 184 | digitalcrown.arrow.counterclockwise.fill 185 | digitalcrown.press 186 | digitalcrown.press.fill 187 | digitalcrown.horizontal.arrow.clockwise 188 | digitalcrown.horizontal.arrow.clockwise.fill 189 | digitalcrown.horizontal.arrow.counterclockwise 190 | digitalcrown.horizontal.arrow.counterclockwise.fill 191 | digitalcrown.horizontal.press 192 | digitalcrown.horizontal.press.fill 193 | airpodsmax 194 | beats.headphones 195 | headphones 196 | headphones.circle 197 | headphones.circle.fill 198 | earbuds 199 | earbuds.case 200 | earbuds.case.fill 201 | earpods 202 | airpods 203 | airpod.right 204 | airpod.left 205 | airpods.chargingcase 206 | airpods.chargingcase.fill 207 | airpods.chargingcase.wireless 208 | airpods.chargingcase.wireless.fill 209 | airpodspro 210 | airpodpro.right 211 | airpodpro.left 212 | airpodspro.chargingcase.wireless 213 | airpodspro.chargingcase.wireless.fill 214 | airpods.gen3 215 | airpod.gen3.right 216 | airpod.gen3.left 217 | airpods.gen3.chargingcase.wireless 218 | airpods.gen3.chargingcase.wireless.fill 219 | beats.earphones 220 | beats.powerbeatspro 221 | beats.powerbeatspro.right 222 | beats.powerbeatspro.left 223 | beats.powerbeats 224 | beats.powerbeats3 225 | beats.studiobuds 226 | beats.studiobud.left 227 | beats.studiobud.right 228 | beats.studiobuds.chargingcase 229 | beats.studiobuds.chargingcase.fill 230 | beats.fit.pro 231 | beats.fit.pro.left 232 | beats.fit.pro.right 233 | beats.fit.pro.chargingcase 234 | beats.fit.pro.chargingcase.fill 235 | beats.powerbeatspro.chargingcase 236 | beats.powerbeatspro.chargingcase.fill 237 | homepodmini 238 | homepodmini.fill 239 | homepodmini.2 240 | homepodmini.2.fill 241 | homepod.and.homepodmini 242 | homepod.and.homepodmini.fill 243 | hifispeaker.and.homepodmini 244 | hifispeaker.and.homepodmini.fill 245 | homepod 246 | homepod.fill 247 | homepod.2 248 | homepod.2.fill 249 | hifispeaker.and.homepod 250 | hifispeaker.and.homepod.fill 251 | hifispeaker 252 | hifispeaker.fill 253 | hifispeaker.2 254 | hifispeaker.2.fill 255 | appletv 256 | appletv.fill 257 | homepod.and.appletv 258 | homepod.and.appletv.fill 259 | homepodmini.and.appletv 260 | homepodmini.and.appletv.fill 261 | hifispeaker.and.appletv 262 | hifispeaker.and.appletv.fill 263 | appletvremote.gen1 264 | appletvremote.gen1.fill 265 | appletvremote.gen2 266 | appletvremote.gen2.fill 267 | appletvremote.gen3 268 | appletvremote.gen3.fill 269 | appletvremote.gen4 270 | appletvremote.gen4.fill 271 | av.remote 272 | av.remote.fill 273 | magsafe.batterypack 274 | magsafe.batterypack.fill 275 | mediastick 276 | cable.connector 277 | cable.connector.horizontal 278 | tv 279 | tv.fill 280 | tv.inset.filled 281 | tv.circle 282 | tv.circle.fill 283 | sparkles.tv 284 | sparkles.tv.fill 285 | 4k.tv 286 | 4k.tv.fill 287 | music.note.tv 288 | music.note.tv.fill 289 | play.tv 290 | play.tv.fill 291 | photo.tv 292 | tv.and.hifispeaker.fill 293 | tv.and.mediabox 294 | tv.and.mediabox.fill 295 | car 296 | car.fill 297 | car.circle 298 | car.circle.fill 299 | car.front.waves.up 300 | car.front.waves.up.fill 301 | car.rear 302 | car.rear.fill 303 | bolt.car 304 | bolt.car.fill 305 | bolt.car.circle 306 | bolt.car.circle.fill 307 | car.2 308 | car.2.fill 309 | hearingdevice.ear 310 | hearingdevice.ear.fill 311 | hearingdevice.and.signal.meter 312 | hearingdevice.and.signal.meter.fill 313 | gamecontroller 314 | gamecontroller.fill --------------------------------------------------------------------------------