diff --git a/fonts/fa-brands.svg b/fonts/fa-brands.svg index bb2b1de..e908e3b 100644 --- a/fonts/fa-brands.svg +++ b/fonts/fa-brands.svg @@ -5,1459 +5,1095 @@ License - https://fontawesome.com/license (Commercial License) --> - 500px - Accessible Icon - Accusoft - App.net - Adversal - affiliatetheme - Algolia - Amazon - Amazon Pay - Amilia - Android - AngelList - Angry Creative - Angular - App Store - iOS App Store - Apper Systems AB - Apple - Apple Pay - Asymmetrik, Ltd. - Audible - Autoprefixer - avianex - Aviato - Amazon Web Services (AWS) - Bandcamp - Behance - Behance Square - BIMobject - Bitbucket - Bitcoin - Bity - Font Awesome Black Tie - BlackBerry - Blogger - Blogger B - Bluetooth - Bluetooth - BTC - Büromöbel-Experte GmbH & Co. KG. - BuySellAds - Amazon Pay Credit Card - American Express Credit Card - Apple Pay Credit Card - Diner's Club Credit Card - Discover Credit Card - JCB Credit Card - MasterCard Credit Card - Paypal Credit Card - Stripe Credit Card - Visa Credit Card - Centercode - Chrome - cloudscale.ch - Cloudsmith - cloudversify - Codepen - Codie Pie - Connect Develop - Contao - cPanel - Creative Commons - Creative Commons Attribution - Creative Commons Noncommercial - Creative Commons Noncommercial (Euro Sign) - Creative Commons Noncommercial (Yen Sign) - Creative Commons No Derivative Works - Creative Commons Public Domain - Creative Commons Public Domain Alternate - Creative Commons Remix - Creative Commons Share Alike - Creative Commons Sampling - Creative Commons Sampling + - Creative Commons Share - Creative Commons CC0 - CSS 3 Logo - Alternate CSS3 Logo - Cuttlefish - Dungeons & Dragons - DashCube - Delicious Logo - deploy.dog - Deskpro - deviantART - Digg Logo - Digital Ocean - Discord - Discourse - DocHub - Docker - Draft2digital - Dribbble - Dribbble Square - Dropbox - Drupal Logo - Dyalog - Earlybirds - eBay - Edge Browser - Elementor - Ember - Galactic Empire - Envira Gallery - Erlang - Ethereum - Etsy - ExpeditedSSL - Facebook - Facebook F - Facebook Messenger - Facebook Square - Firefox - First Order - Alternate First Order - firstdraft - Flickr - Flipboard - Fly - Font Awesome - Alternate Font Awesome - Font Awesome Flag - Font Awesome Full Logo - Fonticons - Fonticons Fi - Fort Awesome - Alternate Fort Awesome - Forumbee - Foursquare - Free Code Camp - FreeBSD - Fulcrum - Galactic Republic - Galactic Senate - Get Pocket - GG Currency - GG Currency Circle - Git - Git Square - GitHub - Alternate GitHub - GitHub Square - GitKraken - GitLab - Gitter - Glide - Glide G - Gofore - Goodreads - Goodreads G - Google Logo - Google Drive - Google Play - Google Plus - Google Plus G - Google Plus Square - Google Wallet - Gratipay (Gittip) - Grav - Gripfire, Inc. - Grunt - Gulp - Hacker News - Hacker News Square - Hips - HireAHelper - Hooli - Hotjar - Houzz - HTML 5 Logo - HubSpot - IMDB - Instagram - Internet-explorer - ioxhost - iTunes - Itunes Note - Java - Jedi Order - Jenkis - Joget - Joomla Logo - JavaScript (JS) - JavaScript (JS) Square - jsFiddle - Keybase - KeyCDN - Kickstarter - Kickstarter K - KORVUE - Laravel - last.fm - last.fm Square - Leanpub - Less - Line - LinkedIn - LinkedIn In - Linode - Linux - lyft - Magento - Mandalorian - Mastodon - MaxCDN - MedApps - Medium - Medium M - MRT - Meetup - Microsoft - Mix - Mixcloud - Mizuni - MODX - Monero - Napster - Nintendo Switch - Node.js - Node.js JS - npm - NS8 - Nutritionix - Odnoklassniki - Odnoklassniki Square - Old Republic - OpenCart - OpenID - Opera - Optin Monster - Open Source Initiative - page4 Corporation - Pagelines - Palfed - Patreon - Paypal - Periscope - Phabricator - Phoenix Framework - Phoenix Squadron - PHP - Pied Piper Logo - Alternate Pied Piper Logo - Pied Piper-hat - Pied Piper PP Logo (Old) - Pinterest - Pinterest P - Pinterest Square - PlayStation - Product Hunt - Pushed - Python - QQ - QuinScape - Quora - R Project - Ravelry - React - ReadMe - Rebel Alliance - red river - reddit Logo - reddit Alien - reddit Square - Rendact - Renren - replyd - Researchgate - Resolving - Rocket.Chat - Rockrms - Safari - Sass - SCHLIX - Scribd - Searchengin - Sellcast - Sellsy - Servicestack - Shirts in Bulk - SimplyBuilt - SISTRIX - Sith - skyatlas - Skype - Slack Logo - Slack Hashtag - Slideshare - Snapchat - Snapchat Ghost - Snapchat Square - SoundCloud - Speakap - Spotify - Stack Exchange - Stack Overflow - StayLinked - Steam - Steam Square - Steam Symbol - Sticker Mule - Strava - Stripe - Stripe S - Studio Vinari - StumbleUpon Logo - StumbleUpon Circle - Superpowers - Supple - TeamSpeak - Telegram - Telegram Plane - Tencent Weibo - ThemeIsle - Trade Federation - Trello - TripAdvisor - Tumblr - Tumblr Square - Twitch - Twitter - Twitter Square - Typo3 - Uber - UIkit - Uniregistry - Untappd - USB - us-Sunnah Foundation - Vaadin - Viacoin - Viadeo - Viadeo Square - Viber - Vimeo - Vimeo Square - Vimeo - Vine - VK - VNV - Vue.js - Weibo - Weixin (WeChat) - What's App - What's App Square - WHMCS - Wikipedia W - Windows - Wolf Pack-battalion - WordPress Logo - Wordpress Simple - WPBeginner - WPExplorer - WPForms - Xbox - Xing - Xing Square - Y Combinator - Yahoo Logo - Yandex - Yandex International - Yelp - Yoast - YouTube - YouTube Square diff --git a/fonts/fa-light.svg b/fonts/fa-light.svg index 932b989..0d7f766 100644 --- a/fonts/fa-light.svg +++ b/fonts/fa-light.svg @@ -5,3499 +5,2625 @@ License - https://fontawesome.com/license (Commercial License) --> - Address Book - Address Card - adjust - Alarm Clock - align-center - align-justify - align-left - align-right - Allergies - ambulance - American Sign Language Interpreting - Anchor - Angle Double Down - Angle Double Left - Angle Double Right - Angle Double Up - angle-down - angle-left - angle-right - angle-up - Archive - Alternate Arrow Circle Down - Alternate Arrow Circle Left - Alternate Arrow Circle Right - Alternate Arrow Circle Up - Alternate Arrow Down - Alternate Arrow from Bottom - Alternate Arrow from Left - Alternate Arrow from Right - Alternate Arrow from Top - Alternate Arrow Left - Alternate Arrow Right - Alternate Arrow Square Down - Alternate Arrow Square Left - Alternate Arrow Square Right - Alternate Arrow Square Up - Alternate Arrow to Bottom - Alternate Arrow to Left - Alternate Arrow to Right - Alternate Arrow to Top - Alternate Arrow Up - Arrow Circle Down - Arrow Circle Left - Arrow Circle Right - Arrow Circle Up - arrow-down - Arrow from Bottom - Arrow from Left - Arrow from Right - Arrow from Top - arrow-left - arrow-right - Arrow Square Down - Arrow Square Left - Arrow Square Right - Arrow Square Up - Arrow to Bottom - Arrow to Left - Arrow to Right - Arrow to Top - arrow-up - Arrows - Alternate Arrows - Alternate Arrows Horizontal - Alternate Arrows Vertical - Arrows Horizontal - Arrows Vertical - Assistive Listening Systems - asterisk - At - Audio Description - backward - Badge - Check Badge - Balance Scale - Balance Scale (Left-Weighted) - Balance Scale (Right-Weighted) - ban - Band-Aid - barcode - Alternate Barcode - Barcode Read - Barcode Scan - Bars - Baseball - Baseball Ball - Basketball Ball - Basketball Hoop - Bath - Battery Bolt - Battery Empty - Battery Full - Battery 1/2 Full - Battery 1/4 Full - Battery Slash - Battery 3/4 Full - Bed - beer - bell - Bell Slash - Bicycle - Binoculars - Birthday Cake - Blanket - Blender - Blind - bold - Lightning Bolt - Bomb - book - Book with Heart - Book Open - bookmark - Bowling Ball - Bowling Pins - Box - Alternate Box - Box Check - Box Fragile - Box Full - Box with Heart - Box Open - Box Up - Box with US Dollar - Boxes - Alternate Boxes - Boxing Glove - Braille - Briefcase - Medical Briefcase - Broadcast Tower - Broom - Browser - Bug - Building - bullhorn - Bullseye - Burn - Bus - Calculator - Calendar - Alternate Calendar - Calendar Check - Calendar Edit - Calendar Exclamation - Calendar Minus - Calendar Plus - Calendar Times - camera - Alternate Camera - Retro Camera - Capsules - Car - Caret Circle Down - Caret Circle Left - Caret Circle Right - Caret Circle Up - Caret Down - Caret Left - Caret Right - Caret Square Down - Caret Square Left - Caret Square Right - Caret Square Up - Caret Up - Shopping Cart Arrow Down - Add to Shopping Cart - certificate - Chalkboard - Chalkboard Teacher - Area Chart - Bar Chart - Line Chart - Pie Chart - Check - Check Circle - Check Square - Chess - Chess Bishop - Alternate Chess Bishop - Chess Board - Chess Clock - Alternate Chess Clock - Chess King - Alternate Chess King - Chess Knight - Alternate Chess Knight - Chess Pawn - Alternate Chess Pawn - Chess Queen - Alternate Chess Queen - Chess Rook - Alternate Chess Rook - Chevron Circle Down - Chevron Circle Left - Chevron Circle Right - Chevron Circle Up - Chevron Double Down - Chevron Double Left - Chevron Double Right - Chevron Double Up - chevron-down - chevron-left - chevron-right - Chevron Square Down - Chevron Square Left - Chevron Square Right - Chevron Square Up - chevron-up - Child - Church - Circle - Circle Notched - Clipboard - Clipboard Check - Clipboard List - Clock - Clone - Closed Captioning - Cloud - Cloud Download - Alternate Cloud Download - Cloud Upload - Alternate Cloud Upload - Club - Code - Code Branch - Code Commit - Code Merge - Coffee - cog - cogs - Coins - Columns - comment - Alternate Comment - Comment Alt-check - Comment Alt-dots - Comment Alt-edit - Comment Alt-exclamation - Comment Alt-lines - Comment Alt-minus - Comment Alt-plus - Alternate Comment Slash - Alternate Comment Smile - Alternate Comment Times - Comment Check - Comment Dots - Comment Edit - Comment Exclamation - Comment Lines - Comment Minus - Comment Plus - Comment Slash - Comment Smile - Comment Times - comments - Comments Alt - Compact Disc - Compass - Compress - Alternate Compress - Compress Wide - Container Storage - Conveyor Belt - Alternate Conveyor Belt - Copy - Copyright - Couch - Credit Card - Credit Card Blank - Credit Card Front - Cricket - crop - Crosshairs - Crow - Crown - Cube - Cubes - Curling - Cut - Database - Deaf - Desktop - Alternate Desktop - Diagnoses - Diamond - Dice - Dice Five - Dice Four - Dice One - Dice Six - Dice Three - Dice Two - Divide - DNA - Dollar Sign - Dolly - Dolly Empty - Dolly Flatbed - Alternate Dolly Flatbed - Dolly Flatbed-empty - Door Closed - Door Open - Dot Circle - Dove - Download - Dumbbell - Edit - eject - Horizontal Ellipsis - Alternate Horizontal Ellipsis - Vertical Ellipsis - Alternate Vertical Ellipsis - Envelope - Envelope Open - Envelope Square - Equals - eraser - Euro Sign - Exchange - Alternate Exchange - exclamation - Exclamation Circle - Exclamation Square - Exclamation Triangle - Expand - Alternate Expand - Expand Arrows - Alternate Expand Arrows - Expand Wide - External Link - Alternate External Link - External Link Square - Alternate External Link Square - Eye - Eye Dropper - Eye Slash - fast-backward - fast-forward - Fax - Feather - Female - Field Hockey - fighter-jet - File - Alternate File - Archive File - Audio File - Check File - Code File - Edit File - Excel File - Exclamation File - Image File - Medical File - Alternate Medical File - Minus File - PDF File - Plus File - Powerpoint File - Times File - Video File - Word File - Film - Alternate Film - Filter - fire - fire-extinguisher - First Aid - flag - flag-checkered - Flask - Folder - Folder Open - font - Font Awesome Full Logo - Football Ball - Football Helmet - Forklift - forward - Fragile - Frog - Frown - Futbol - Gamepad - Gas Pump - Gavel - Gem - Genderless - gift - Martini Glass - Glasses - Globe - Golf Ball - Golf Club - Graduation Cap - Greater Than - Greater Than Equal To - H Square - H1 Heading - H2 Heading - H3 Heading - Hand with Heart - Hand Holding - Hand Holding Box - Hand Holding Heart - Hand Holding Seedling - Hand Holding US Dollar - Hand Holding Water - Lizard (Hand) - Paper (Hand) - Peace (Hand) - Hand Pointing Down - Hand Pointing Left - Hand Pointing Right - Hand Pointing Up - Pointer (Hand) - Hand Receiving - Rock (Hand) - Scissors (Hand) - Spock (Hand) - Hands - Hands Heart - Helping Hands - Hands with US Dollar - Handshake - Alternate Handshake - Hashtag - HDD - heading - headphones - Heart - Heart Circle - Heart Square - Heartbeat - Helicopter - Hexagon - History - Hockey Puck - Hockey Sticks - home - Home Heart - hospital - Alternate Hospital - Hospital Symbol - Hourglass - Hourglass End - Hourglass Half - Hourglass Start - I Beam Cursor - Identification Badge - Identification Card - Alternate Identification Card - Image - Images - inbox - Inbox In - Inbox Out - Indent - Industry - Alternate Industry - Infinity - Info - Info Circle - Info Square - Inventory - italic - Jack-o'-lantern - key - Keyboard - Kiwi Bird - Lamp - Language - Laptop - leaf - Leaf Heart - Lemon - Less Than - Less Than Equal To - Level Down - Alternate Level Down - Level Up - Alternate Level Up - Life Ring - Lightbulb - Link - Turkish Lira Sign - List - Alternate List - list-ol - list-ul - location-arrow - lock - Alternate Lock - Lock Open - Alternate Lock Open - Alternate Long Arrow Down - Alternate Long Arrow Left - Alternate Long Arrow Right - Alternate Long Arrow Up - Long Arrow Down - Long Arrow Left - Long Arrow Right - Long Arrow Up - Loveseat - Low Vision - Luchador - magic - magnet - Male - Map - map-marker - Alternate Map Marker - Map Pin - Map Signs - Mars - Mars Double - Mars Stroke - Mars Stroke Horizontal - Mars Stroke Vertical - medkit - Meh - Memory - Mercury - Microchip - microphone - Alternate Microphone - Alternate Microphone Slash - Microphone Slash - minus - Minus Circle - Minus Hexagon - Minus Octagon - Minus Square - Mobile Phone - Alternate Mobile - Mobile Android - Alternate Mobile Android - Money Bill - Alternate Money Bill - Wavy Money Bill - Alternate Wavy Money Bill - Money Check - Alternate Money Check - Moon - Motorcycle - Mouse Pointer - Music - Neuter - Newspaper - Not Equal - Medical Notes - Object Group - Object Ungroup - Octagon - Outdent - Paint Brush - Palette - Pallet - Alternate Pallet - Paper Plane - Paperclip - Parachute Box - paragraph - Parking - Paste - pause - Pause Circle - Paw - Pen - Alternate Pen - Pen Square - pencil - Alternate Pencil - Pennant - People Carry - Percent - Percentage - Person Carry - Person and Dolly - Person and Empty Dolly - Phone - Phone Plus - Phone Slash - Phone Square - Phone Volume - Piggy Bank - Pills - plane - Alternate Plane - play - Play Circle - Plug - plus - Plus Circle - Plus Hexagon - Plus Octagon - Plus Square - Podcast - Poo - Portrait - Pound Sign - Power Off - Prescription Bottle - Alternate Prescription Bottle - print - Procedures - Project Diagram - Puzzle Piece - qrcode - Question - Question Circle - Question Square - Quidditch - quote-left - quote-right - Racquet - Ramp Loading - random - Receipt - Landscape Rectangle - Portrait Rectangle - Wide Rectangle - Recycle - Redo - Alternate Redo - Registered Trademark - Repeat - Repeat 1 - Alternate Repeat 1 - Alternate Repeat - Reply - reply-all - Retweet - Alternate Retweet - Ribbon - road - Robot - rocket - Route - rss - RSS Square - Ruble Sign - Ruler - Ruler Combined - Ruler Horizontal - Ruler Vertical - Indian Rupee Sign - Save - Scanner - Scanner Keyboard - Scanner Touchscreen - School - Screwdriver - Scrubber - Search - Search Minus - Search Plus - Seedling - Server - Share - Share All - Alternate Share - Alternate Share Square - Share Square - Shekel Sign - shield - Alternate Shield - shield - Ship - Shipping Fast - Shipping Timed - Shoe Prints - Shopping Bag - Shopping Basket - shopping-cart - Shower - Shuttlecock - Sign - Sign In - Alternate Sign In - Sign Language - Sign Out - Alternate Sign Out - signal - Sitemap - Skull - Horizontal Sliders - Square Horizontal Sliders - Vertical Sliders - Square Vertical Sliders - Smile - Smile Plus - Smoking - Smoking Ban - Snowflake - Sort - Sort Alpha Down - Sort Alpha Up - Sort Amount Down - Sort Amount Up - Sort Down (Descending) - Sort Numeric Down - Sort Numeric Up - Sort Up (Ascending) - Space Shuttle - Spade - Spinner - Spinner Third - Square - Square Full - Star - Exclamation Star - star-half - step-backward - step-forward - Stethoscope - Sticky Note - stop - Stop Circle - Stopwatch - Store - Alternate Store - Stream - Street View - Strikethrough - Stroopwafel - subscript - Subway - Suitcase - Sun - superscript - Sync - Alternate Sync - Syringe - table - Table Tennis - tablet - Alternate Tablet - Tablet Android - Alternate Tablet Android - Rugged Tablet - Tablets - Tachometer - Alternate Tachometer - tag - tags - Tape - Tasks - Taxi - Tennis Ball - Terminal - text-height - text-width - th - th-large - th-list - Thermometer - Thermometer Empty - Thermometer Full - Thermometer 1/2 Full - Thermometer 1/4 Full - Thermometer 3/4 Full - thumbs-down - thumbs-up - Thumbtack - Ticket - Alternate Ticket - Times - Times Circle - Times Hexagon - Times Octagon - Times Square - tint - Toggle Off - Toggle On - Toolbox - Trademark - Train - Transgender - Alternate Transgender - Trash - Alternate Trash - Tree - Alternate Tree - Triangle - trophy - Alternate Trophy - truck - Truck Container - Truck Couch - Truck Loading - Truck Moving - Truck Ramp - T-Shirt - TTY - Television - Retro Televison - Umbrella - Underline - Undo - Alternate Undo - Universal Access - University - unlink - unlock - Alternate Unlock - Upload - US Dollar Circle - US Dollar Square - User - Alternate User - Alternate User Slash - User Astronaut - User Check - User Circle - User Clock - User Cog - User Edit - User Friends - User Graduate - User Lock - user-md - User Minus - User Ninja - Add User - User Secret - User Shield - User Slash - User Tag - User Tie - Remove User - Users - Users Cog - Utensil Fork - Utensil Knife - Utensil Spoon - Utensils - Alternate Utensils - Venus - Venus Double - Venus Mars - Vial - Vials - Video - Video Plus - Video Slash - Volleyball Ball - volume-down - volume-mute - volume-off - volume-up - Walking - Wallet - Warehouse - Alternate Warehouse - Watch - Weight - Wheelchair - Whistle - WiFi - Window - Alternate Window - Window Close - Window Maximize - Window Minimize - Window Restore - Wine Glass - Won Sign - Wrench - X-Ray - Yen Sign diff --git a/fonts/fa-regular.svg b/fonts/fa-regular.svg index b2945b8..392c5bf 100644 --- a/fonts/fa-regular.svg +++ b/fonts/fa-regular.svg @@ -5,3499 +5,2625 @@ License - https://fontawesome.com/license (Commercial License) --> - Address Book - Address Card - adjust - Alarm Clock - align-center - align-justify - align-left - align-right - Allergies - ambulance - American Sign Language Interpreting - Anchor - Angle Double Down - Angle Double Left - Angle Double Right - Angle Double Up - angle-down - angle-left - angle-right - angle-up - Archive - Alternate Arrow Circle Down - Alternate Arrow Circle Left - Alternate Arrow Circle Right - Alternate Arrow Circle Up - Alternate Arrow Down - Alternate Arrow from Bottom - Alternate Arrow from Left - Alternate Arrow from Right - Alternate Arrow from Top - Alternate Arrow Left - Alternate Arrow Right - Alternate Arrow Square Down - Alternate Arrow Square Left - Alternate Arrow Square Right - Alternate Arrow Square Up - Alternate Arrow to Bottom - Alternate Arrow to Left - Alternate Arrow to Right - Alternate Arrow to Top - Alternate Arrow Up - Arrow Circle Down - Arrow Circle Left - Arrow Circle Right - Arrow Circle Up - arrow-down - Arrow from Bottom - Arrow from Left - Arrow from Right - Arrow from Top - arrow-left - arrow-right - Arrow Square Down - Arrow Square Left - Arrow Square Right - Arrow Square Up - Arrow to Bottom - Arrow to Left - Arrow to Right - Arrow to Top - arrow-up - Arrows - Alternate Arrows - Alternate Arrows Horizontal - Alternate Arrows Vertical - Arrows Horizontal - Arrows Vertical - Assistive Listening Systems - asterisk - At - Audio Description - backward - Badge - Check Badge - Balance Scale - Balance Scale (Left-Weighted) - Balance Scale (Right-Weighted) - ban - Band-Aid - barcode - Alternate Barcode - Barcode Read - Barcode Scan - Bars - Baseball - Baseball Ball - Basketball Ball - Basketball Hoop - Bath - Battery Bolt - Battery Empty - Battery Full - Battery 1/2 Full - Battery 1/4 Full - Battery Slash - Battery 3/4 Full - Bed - beer - bell - Bell Slash - Bicycle - Binoculars - Birthday Cake - Blanket - Blender - Blind - bold - Lightning Bolt - Bomb - book - Book with Heart - Book Open - bookmark - Bowling Ball - Bowling Pins - Box - Alternate Box - Box Check - Box Fragile - Box Full - Box with Heart - Box Open - Box Up - Box with US Dollar - Boxes - Alternate Boxes - Boxing Glove - Braille - Briefcase - Medical Briefcase - Broadcast Tower - Broom - Browser - Bug - Building - bullhorn - Bullseye - Burn - Bus - Calculator - Calendar - Alternate Calendar - Calendar Check - Calendar Edit - Calendar Exclamation - Calendar Minus - Calendar Plus - Calendar Times - camera - Alternate Camera - Retro Camera - Capsules - Car - Caret Circle Down - Caret Circle Left - Caret Circle Right - Caret Circle Up - Caret Down - Caret Left - Caret Right - Caret Square Down - Caret Square Left - Caret Square Right - Caret Square Up - Caret Up - Shopping Cart Arrow Down - Add to Shopping Cart - certificate - Chalkboard - Chalkboard Teacher - Area Chart - Bar Chart - Line Chart - Pie Chart - Check - Check Circle - Check Square - Chess - Chess Bishop - Alternate Chess Bishop - Chess Board - Chess Clock - Alternate Chess Clock - Chess King - Alternate Chess King - Chess Knight - Alternate Chess Knight - Chess Pawn - Alternate Chess Pawn - Chess Queen - Alternate Chess Queen - Chess Rook - Alternate Chess Rook - Chevron Circle Down - Chevron Circle Left - Chevron Circle Right - Chevron Circle Up - Chevron Double Down - Chevron Double Left - Chevron Double Right - Chevron Double Up - chevron-down - chevron-left - chevron-right - Chevron Square Down - Chevron Square Left - Chevron Square Right - Chevron Square Up - chevron-up - Child - Church - Circle - Circle Notched - Clipboard - Clipboard Check - Clipboard List - Clock - Clone - Closed Captioning - Cloud - Cloud Download - Alternate Cloud Download - Cloud Upload - Alternate Cloud Upload - Club - Code - Code Branch - Code Commit - Code Merge - Coffee - cog - cogs - Coins - Columns - comment - Alternate Comment - Comment Alt-check - Comment Alt-dots - Comment Alt-edit - Comment Alt-exclamation - Comment Alt-lines - Comment Alt-minus - Comment Alt-plus - Alternate Comment Slash - Alternate Comment Smile - Alternate Comment Times - Comment Check - Comment Dots - Comment Edit - Comment Exclamation - Comment Lines - Comment Minus - Comment Plus - Comment Slash - Comment Smile - Comment Times - comments - Comments Alt - Compact Disc - Compass - Compress - Alternate Compress - Compress Wide - Container Storage - Conveyor Belt - Alternate Conveyor Belt - Copy - Copyright - Couch - Credit Card - Credit Card Blank - Credit Card Front - Cricket - crop - Crosshairs - Crow - Crown - Cube - Cubes - Curling - Cut - Database - Deaf - Desktop - Alternate Desktop - Diagnoses - Diamond - Dice - Dice Five - Dice Four - Dice One - Dice Six - Dice Three - Dice Two - Divide - DNA - Dollar Sign - Dolly - Dolly Empty - Dolly Flatbed - Alternate Dolly Flatbed - Dolly Flatbed-empty - Door Closed - Door Open - Dot Circle - Dove - Download - Dumbbell - Edit - eject - Horizontal Ellipsis - Alternate Horizontal Ellipsis - Vertical Ellipsis - Alternate Vertical Ellipsis - Envelope - Envelope Open - Envelope Square - Equals - eraser - Euro Sign - Exchange - Alternate Exchange - exclamation - Exclamation Circle - Exclamation Square - Exclamation Triangle - Expand - Alternate Expand - Expand Arrows - Alternate Expand Arrows - Expand Wide - External Link - Alternate External Link - External Link Square - Alternate External Link Square - Eye - Eye Dropper - Eye Slash - fast-backward - fast-forward - Fax - Feather - Female - Field Hockey - fighter-jet - File - Alternate File - Archive File - Audio File - Check File - Code File - Edit File - Excel File - Exclamation File - Image File - Medical File - Alternate Medical File - Minus File - PDF File - Plus File - Powerpoint File - Times File - Video File - Word File - Film - Alternate Film - Filter - fire - fire-extinguisher - First Aid - flag - flag-checkered - Flask - Folder - Folder Open - font - Font Awesome Full Logo - Football Ball - Football Helmet - Forklift - forward - Fragile - Frog - Frown - Futbol - Gamepad - Gas Pump - Gavel - Gem - Genderless - gift - Martini Glass - Glasses - Globe - Golf Ball - Golf Club - Graduation Cap - Greater Than - Greater Than Equal To - H Square - H1 Heading - H2 Heading - H3 Heading - Hand with Heart - Hand Holding - Hand Holding Box - Hand Holding Heart - Hand Holding Seedling - Hand Holding US Dollar - Hand Holding Water - Lizard (Hand) - Paper (Hand) - Peace (Hand) - Hand Pointing Down - Hand Pointing Left - Hand Pointing Right - Hand Pointing Up - Pointer (Hand) - Hand Receiving - Rock (Hand) - Scissors (Hand) - Spock (Hand) - Hands - Hands Heart - Helping Hands - Hands with US Dollar - Handshake - Alternate Handshake - Hashtag - HDD - heading - headphones - Heart - Heart Circle - Heart Square - Heartbeat - Helicopter - Hexagon - History - Hockey Puck - Hockey Sticks - home - Home Heart - hospital - Alternate Hospital - Hospital Symbol - Hourglass - Hourglass End - Hourglass Half - Hourglass Start - I Beam Cursor - Identification Badge - Identification Card - Alternate Identification Card - Image - Images - inbox - Inbox In - Inbox Out - Indent - Industry - Alternate Industry - Infinity - Info - Info Circle - Info Square - Inventory - italic - Jack-o'-lantern - key - Keyboard - Kiwi Bird - Lamp - Language - Laptop - leaf - Leaf Heart - Lemon - Less Than - Less Than Equal To - Level Down - Alternate Level Down - Level Up - Alternate Level Up - Life Ring - Lightbulb - Link - Turkish Lira Sign - List - Alternate List - list-ol - list-ul - location-arrow - lock - Alternate Lock - Lock Open - Alternate Lock Open - Alternate Long Arrow Down - Alternate Long Arrow Left - Alternate Long Arrow Right - Alternate Long Arrow Up - Long Arrow Down - Long Arrow Left - Long Arrow Right - Long Arrow Up - Loveseat - Low Vision - Luchador - magic - magnet - Male - Map - map-marker - Alternate Map Marker - Map Pin - Map Signs - Mars - Mars Double - Mars Stroke - Mars Stroke Horizontal - Mars Stroke Vertical - medkit - Meh - Memory - Mercury - Microchip - microphone - Alternate Microphone - Alternate Microphone Slash - Microphone Slash - minus - Minus Circle - Minus Hexagon - Minus Octagon - Minus Square - Mobile Phone - Alternate Mobile - Mobile Android - Alternate Mobile Android - Money Bill - Alternate Money Bill - Wavy Money Bill - Alternate Wavy Money Bill - Money Check - Alternate Money Check - Moon - Motorcycle - Mouse Pointer - Music - Neuter - Newspaper - Not Equal - Medical Notes - Object Group - Object Ungroup - Octagon - Outdent - Paint Brush - Palette - Pallet - Alternate Pallet - Paper Plane - Paperclip - Parachute Box - paragraph - Parking - Paste - pause - Pause Circle - Paw - Pen - Alternate Pen - Pen Square - pencil - Alternate Pencil - Pennant - People Carry - Percent - Percentage - Person Carry - Person and Dolly - Person and Empty Dolly - Phone - Phone Plus - Phone Slash - Phone Square - Phone Volume - Piggy Bank - Pills - plane - Alternate Plane - play - Play Circle - Plug - plus - Plus Circle - Plus Hexagon - Plus Octagon - Plus Square - Podcast - Poo - Portrait - Pound Sign - Power Off - Prescription Bottle - Alternate Prescription Bottle - print - Procedures - Project Diagram - Puzzle Piece - qrcode - Question - Question Circle - Question Square - Quidditch - quote-left - quote-right - Racquet - Ramp Loading - random - Receipt - Landscape Rectangle - Portrait Rectangle - Wide Rectangle - Recycle - Redo - Alternate Redo - Registered Trademark - Repeat - Repeat 1 - Alternate Repeat 1 - Alternate Repeat - Reply - reply-all - Retweet - Alternate Retweet - Ribbon - road - Robot - rocket - Route - rss - RSS Square - Ruble Sign - Ruler - Ruler Combined - Ruler Horizontal - Ruler Vertical - Indian Rupee Sign - Save - Scanner - Scanner Keyboard - Scanner Touchscreen - School - Screwdriver - Scrubber - Search - Search Minus - Search Plus - Seedling - Server - Share - Share All - Alternate Share - Alternate Share Square - Share Square - Shekel Sign - shield - Alternate Shield - shield - Ship - Shipping Fast - Shipping Timed - Shoe Prints - Shopping Bag - Shopping Basket - shopping-cart - Shower - Shuttlecock - Sign - Sign In - Alternate Sign In - Sign Language - Sign Out - Alternate Sign Out - signal - Sitemap - Skull - Horizontal Sliders - Square Horizontal Sliders - Vertical Sliders - Square Vertical Sliders - Smile - Smile Plus - Smoking - Smoking Ban - Snowflake - Sort - Sort Alpha Down - Sort Alpha Up - Sort Amount Down - Sort Amount Up - Sort Down (Descending) - Sort Numeric Down - Sort Numeric Up - Sort Up (Ascending) - Space Shuttle - Spade - Spinner - Spinner Third - Square - Square Full - Star - Exclamation Star - star-half - step-backward - step-forward - Stethoscope - Sticky Note - stop - Stop Circle - Stopwatch - Store - Alternate Store - Stream - Street View - Strikethrough - Stroopwafel - subscript - Subway - Suitcase - Sun - superscript - Sync - Alternate Sync - Syringe - table - Table Tennis - tablet - Alternate Tablet - Tablet Android - Alternate Tablet Android - Rugged Tablet - Tablets - Tachometer - Alternate Tachometer - tag - tags - Tape - Tasks - Taxi - Tennis Ball - Terminal - text-height - text-width - th - th-large - th-list - Thermometer - Thermometer Empty - Thermometer Full - Thermometer 1/2 Full - Thermometer 1/4 Full - Thermometer 3/4 Full - thumbs-down - thumbs-up - Thumbtack - Ticket - Alternate Ticket - Times - Times Circle - Times Hexagon - Times Octagon - Times Square - tint - Toggle Off - Toggle On - Toolbox - Trademark - Train - Transgender - Alternate Transgender - Trash - Alternate Trash - Tree - Alternate Tree - Triangle - trophy - Alternate Trophy - truck - Truck Container - Truck Couch - Truck Loading - Truck Moving - Truck Ramp - T-Shirt - TTY - Television - Retro Televison - Umbrella - Underline - Undo - Alternate Undo - Universal Access - University - unlink - unlock - Alternate Unlock - Upload - US Dollar Circle - US Dollar Square - User - Alternate User - Alternate User Slash - User Astronaut - User Check - User Circle - User Clock - User Cog - User Edit - User Friends - User Graduate - User Lock - user-md - User Minus - User Ninja - Add User - User Secret - User Shield - User Slash - User Tag - User Tie - Remove User - Users - Users Cog - Utensil Fork - Utensil Knife - Utensil Spoon - Utensils - Alternate Utensils - Venus - Venus Double - Venus Mars - Vial - Vials - Video - Video Plus - Video Slash - Volleyball Ball - volume-down - volume-mute - volume-off - volume-up - Walking - Wallet - Warehouse - Alternate Warehouse - Watch - Weight - Wheelchair - Whistle - WiFi - Window - Alternate Window - Window Close - Window Maximize - Window Minimize - Window Restore - Wine Glass - Won Sign - Wrench - X-Ray - Yen Sign diff --git a/fonts/fa-solid.svg b/fonts/fa-solid.svg index e4c65a6..5713c5b 100644 --- a/fonts/fa-solid.svg +++ b/fonts/fa-solid.svg @@ -5,3499 +5,2625 @@ License - https://fontawesome.com/license (Commercial License) --> - Address Book - Address Card - adjust - Alarm Clock - align-center - align-justify - align-left - align-right - Allergies - ambulance - American Sign Language Interpreting - Anchor - Angle Double Down - Angle Double Left - Angle Double Right - Angle Double Up - angle-down - angle-left - angle-right - angle-up - Archive - Alternate Arrow Circle Down - Alternate Arrow Circle Left - Alternate Arrow Circle Right - Alternate Arrow Circle Up - Alternate Arrow Down - Alternate Arrow from Bottom - Alternate Arrow from Left - Alternate Arrow from Right - Alternate Arrow from Top - Alternate Arrow Left - Alternate Arrow Right - Alternate Arrow Square Down - Alternate Arrow Square Left - Alternate Arrow Square Right - Alternate Arrow Square Up - Alternate Arrow to Bottom - Alternate Arrow to Left - Alternate Arrow to Right - Alternate Arrow to Top - Alternate Arrow Up - Arrow Circle Down - Arrow Circle Left - Arrow Circle Right - Arrow Circle Up - arrow-down - Arrow from Bottom - Arrow from Left - Arrow from Right - Arrow from Top - arrow-left - arrow-right - Arrow Square Down - Arrow Square Left - Arrow Square Right - Arrow Square Up - Arrow to Bottom - Arrow to Left - Arrow to Right - Arrow to Top - arrow-up - Arrows - Alternate Arrows - Alternate Arrows Horizontal - Alternate Arrows Vertical - Arrows Horizontal - Arrows Vertical - Assistive Listening Systems - asterisk - At - Audio Description - backward - Badge - Check Badge - Balance Scale - Balance Scale (Left-Weighted) - Balance Scale (Right-Weighted) - ban - Band-Aid - barcode - Alternate Barcode - Barcode Read - Barcode Scan - Bars - Baseball - Baseball Ball - Basketball Ball - Basketball Hoop - Bath - Battery Bolt - Battery Empty - Battery Full - Battery 1/2 Full - Battery 1/4 Full - Battery Slash - Battery 3/4 Full - Bed - beer - bell - Bell Slash - Bicycle - Binoculars - Birthday Cake - Blanket - Blender - Blind - bold - Lightning Bolt - Bomb - book - Book with Heart - Book Open - bookmark - Bowling Ball - Bowling Pins - Box - Alternate Box - Box Check - Box Fragile - Box Full - Box with Heart - Box Open - Box Up - Box with US Dollar - Boxes - Alternate Boxes - Boxing Glove - Braille - Briefcase - Medical Briefcase - Broadcast Tower - Broom - Browser - Bug - Building - bullhorn - Bullseye - Burn - Bus - Calculator - Calendar - Alternate Calendar - Calendar Check - Calendar Edit - Calendar Exclamation - Calendar Minus - Calendar Plus - Calendar Times - camera - Alternate Camera - Retro Camera - Capsules - Car - Caret Circle Down - Caret Circle Left - Caret Circle Right - Caret Circle Up - Caret Down - Caret Left - Caret Right - Caret Square Down - Caret Square Left - Caret Square Right - Caret Square Up - Caret Up - Shopping Cart Arrow Down - Add to Shopping Cart - certificate - Chalkboard - Chalkboard Teacher - Area Chart - Bar Chart - Line Chart - Pie Chart - Check - Check Circle - Check Square - Chess - Chess Bishop - Alternate Chess Bishop - Chess Board - Chess Clock - Alternate Chess Clock - Chess King - Alternate Chess King - Chess Knight - Alternate Chess Knight - Chess Pawn - Alternate Chess Pawn - Chess Queen - Alternate Chess Queen - Chess Rook - Alternate Chess Rook - Chevron Circle Down - Chevron Circle Left - Chevron Circle Right - Chevron Circle Up - Chevron Double Down - Chevron Double Left - Chevron Double Right - Chevron Double Up - chevron-down - chevron-left - chevron-right - Chevron Square Down - Chevron Square Left - Chevron Square Right - Chevron Square Up - chevron-up - Child - Church - Circle - Circle Notched - Clipboard - Clipboard Check - Clipboard List - Clock - Clone - Closed Captioning - Cloud - Cloud Download - Alternate Cloud Download - Cloud Upload - Alternate Cloud Upload - Club - Code - Code Branch - Code Commit - Code Merge - Coffee - cog - cogs - Coins - Columns - comment - Alternate Comment - Comment Alt-check - Comment Alt-dots - Comment Alt-edit - Comment Alt-exclamation - Comment Alt-lines - Comment Alt-minus - Comment Alt-plus - Alternate Comment Slash - Alternate Comment Smile - Alternate Comment Times - Comment Check - Comment Dots - Comment Edit - Comment Exclamation - Comment Lines - Comment Minus - Comment Plus - Comment Slash - Comment Smile - Comment Times - comments - Comments Alt - Compact Disc - Compass - Compress - Alternate Compress - Compress Wide - Container Storage - Conveyor Belt - Alternate Conveyor Belt - Copy - Copyright - Couch - Credit Card - Credit Card Blank - Credit Card Front - Cricket - crop - Crosshairs - Crow - Crown - Cube - Cubes - Curling - Cut - Database - Deaf - Desktop - Alternate Desktop - Diagnoses - Diamond - Dice - Dice Five - Dice Four - Dice One - Dice Six - Dice Three - Dice Two - Divide - DNA - Dollar Sign - Dolly - Dolly Empty - Dolly Flatbed - Alternate Dolly Flatbed - Dolly Flatbed-empty - Door Closed - Door Open - Dot Circle - Dove - Download - Dumbbell - Edit - eject - Horizontal Ellipsis - Alternate Horizontal Ellipsis - Vertical Ellipsis - Alternate Vertical Ellipsis - Envelope - Envelope Open - Envelope Square - Equals - eraser - Euro Sign - Exchange - Alternate Exchange - exclamation - Exclamation Circle - Exclamation Square - Exclamation Triangle - Expand - Alternate Expand - Expand Arrows - Alternate Expand Arrows - Expand Wide - External Link - Alternate External Link - External Link Square - Alternate External Link Square - Eye - Eye Dropper - Eye Slash - fast-backward - fast-forward - Fax - Feather - Female - Field Hockey - fighter-jet - File - Alternate File - Archive File - Audio File - Check File - Code File - Edit File - Excel File - Exclamation File - Image File - Medical File - Alternate Medical File - Minus File - PDF File - Plus File - Powerpoint File - Times File - Video File - Word File - Film - Alternate Film - Filter - fire - fire-extinguisher - First Aid - flag - flag-checkered - Flask - Folder - Folder Open - font - Font Awesome Full Logo - Football Ball - Football Helmet - Forklift - forward - Fragile - Frog - Frown - Futbol - Gamepad - Gas Pump - Gavel - Gem - Genderless - gift - Martini Glass - Glasses - Globe - Golf Ball - Golf Club - Graduation Cap - Greater Than - Greater Than Equal To - H Square - H1 Heading - H2 Heading - H3 Heading - Hand with Heart - Hand Holding - Hand Holding Box - Hand Holding Heart - Hand Holding Seedling - Hand Holding US Dollar - Hand Holding Water - Lizard (Hand) - Paper (Hand) - Peace (Hand) - Hand Pointing Down - Hand Pointing Left - Hand Pointing Right - Hand Pointing Up - Pointer (Hand) - Hand Receiving - Rock (Hand) - Scissors (Hand) - Spock (Hand) - Hands - Hands Heart - Helping Hands - Hands with US Dollar - Handshake - Alternate Handshake - Hashtag - HDD - heading - headphones - Heart - Heart Circle - Heart Square - Heartbeat - Helicopter - Hexagon - History - Hockey Puck - Hockey Sticks - home - Home Heart - hospital - Alternate Hospital - Hospital Symbol - Hourglass - Hourglass End - Hourglass Half - Hourglass Start - I Beam Cursor - Identification Badge - Identification Card - Alternate Identification Card - Image - Images - inbox - Inbox In - Inbox Out - Indent - Industry - Alternate Industry - Infinity - Info - Info Circle - Info Square - Inventory - italic - Jack-o'-lantern - key - Keyboard - Kiwi Bird - Lamp - Language - Laptop - leaf - Leaf Heart - Lemon - Less Than - Less Than Equal To - Level Down - Alternate Level Down - Level Up - Alternate Level Up - Life Ring - Lightbulb - Link - Turkish Lira Sign - List - Alternate List - list-ol - list-ul - location-arrow - lock - Alternate Lock - Lock Open - Alternate Lock Open - Alternate Long Arrow Down - Alternate Long Arrow Left - Alternate Long Arrow Right - Alternate Long Arrow Up - Long Arrow Down - Long Arrow Left - Long Arrow Right - Long Arrow Up - Loveseat - Low Vision - Luchador - magic - magnet - Male - Map - map-marker - Alternate Map Marker - Map Pin - Map Signs - Mars - Mars Double - Mars Stroke - Mars Stroke Horizontal - Mars Stroke Vertical - medkit - Meh - Memory - Mercury - Microchip - microphone - Alternate Microphone - Alternate Microphone Slash - Microphone Slash - minus - Minus Circle - Minus Hexagon - Minus Octagon - Minus Square - Mobile Phone - Alternate Mobile - Mobile Android - Alternate Mobile Android - Money Bill - Alternate Money Bill - Wavy Money Bill - Alternate Wavy Money Bill - Money Check - Alternate Money Check - Moon - Motorcycle - Mouse Pointer - Music - Neuter - Newspaper - Not Equal - Medical Notes - Object Group - Object Ungroup - Octagon - Outdent - Paint Brush - Palette - Pallet - Alternate Pallet - Paper Plane - Paperclip - Parachute Box - paragraph - Parking - Paste - pause - Pause Circle - Paw - Pen - Alternate Pen - Pen Square - pencil - Alternate Pencil - Pennant - People Carry - Percent - Percentage - Person Carry - Person and Dolly - Person and Empty Dolly - Phone - Phone Plus - Phone Slash - Phone Square - Phone Volume - Piggy Bank - Pills - plane - Alternate Plane - play - Play Circle - Plug - plus - Plus Circle - Plus Hexagon - Plus Octagon - Plus Square - Podcast - Poo - Portrait - Pound Sign - Power Off - Prescription Bottle - Alternate Prescription Bottle - print - Procedures - Project Diagram - Puzzle Piece - qrcode - Question - Question Circle - Question Square - Quidditch - quote-left - quote-right - Racquet - Ramp Loading - random - Receipt - Landscape Rectangle - Portrait Rectangle - Wide Rectangle - Recycle - Redo - Alternate Redo - Registered Trademark - Repeat - Repeat 1 - Alternate Repeat 1 - Alternate Repeat - Reply - reply-all - Retweet - Alternate Retweet - Ribbon - road - Robot - rocket - Route - rss - RSS Square - Ruble Sign - Ruler - Ruler Combined - Ruler Horizontal - Ruler Vertical - Indian Rupee Sign - Save - Scanner - Scanner Keyboard - Scanner Touchscreen - School - Screwdriver - Scrubber - Search - Search Minus - Search Plus - Seedling - Server - Share - Share All - Alternate Share - Alternate Share Square - Share Square - Shekel Sign - shield - Alternate Shield - shield - Ship - Shipping Fast - Shipping Timed - Shoe Prints - Shopping Bag - Shopping Basket - shopping-cart - Shower - Shuttlecock - Sign - Sign In - Alternate Sign In - Sign Language - Sign Out - Alternate Sign Out - signal - Sitemap - Skull - Horizontal Sliders - Square Horizontal Sliders - Vertical Sliders - Square Vertical Sliders - Smile - Smile Plus - Smoking - Smoking Ban - Snowflake - Sort - Sort Alpha Down - Sort Alpha Up - Sort Amount Down - Sort Amount Up - Sort Down (Descending) - Sort Numeric Down - Sort Numeric Up - Sort Up (Ascending) - Space Shuttle - Spade - Spinner - Spinner Third - Square - Square Full - Star - Exclamation Star - star-half - step-backward - step-forward - Stethoscope - Sticky Note - stop - Stop Circle - Stopwatch - Store - Alternate Store - Stream - Street View - Strikethrough - Stroopwafel - subscript - Subway - Suitcase - Sun - superscript - Sync - Alternate Sync - Syringe - table - Table Tennis - tablet - Alternate Tablet - Tablet Android - Alternate Tablet Android - Rugged Tablet - Tablets - Tachometer - Alternate Tachometer - tag - tags - Tape - Tasks - Taxi - Tennis Ball - Terminal - text-height - text-width - th - th-large - th-list - Thermometer - Thermometer Empty - Thermometer Full - Thermometer 1/2 Full - Thermometer 1/4 Full - Thermometer 3/4 Full - thumbs-down - thumbs-up - Thumbtack - Ticket - Alternate Ticket - Times - Times Circle - Times Hexagon - Times Octagon - Times Square - tint - Toggle Off - Toggle On - Toolbox - Trademark - Train - Transgender - Alternate Transgender - Trash - Alternate Trash - Tree - Alternate Tree - Triangle - trophy - Alternate Trophy - truck - Truck Container - Truck Couch - Truck Loading - Truck Moving - Truck Ramp - T-Shirt - TTY - Television - Retro Televison - Umbrella - Underline - Undo - Alternate Undo - Universal Access - University - unlink - unlock - Alternate Unlock - Upload - US Dollar Circle - US Dollar Square - User - Alternate User - Alternate User Slash - User Astronaut - User Check - User Circle - User Clock - User Cog - User Edit - User Friends - User Graduate - User Lock - user-md - User Minus - User Ninja - Add User - User Secret - User Shield - User Slash - User Tag - User Tie - Remove User - Users - Users Cog - Utensil Fork - Utensil Knife - Utensil Spoon - Utensils - Alternate Utensils - Venus - Venus Double - Venus Mars - Vial - Vials - Video - Video Plus - Video Slash - Volleyball Ball - volume-down - volume-mute - volume-off - volume-up - Walking - Wallet - Warehouse - Alternate Warehouse - Watch - Weight - Wheelchair - Whistle - WiFi - Window - Alternate Window - Window Close - Window Maximize - Window Minimize - Window Restore - Wine Glass - Won Sign - Wrench - X-Ray - Yen Sign diff --git a/lib/ui/css/grid.scss b/lib/ui/css/grid.scss index 6076877..6cf7746 100644 --- a/lib/ui/css/grid.scss +++ b/lib/ui/css/grid.scss @@ -23,6 +23,9 @@ --row-selected-bg-color: #e6f2fb; --text-disabled-color: gray; + --filter-shadow: 0 3px 6px -4px rgba(0, 0, 0, .12), 0 6px 16px 0 rgba(0, 0, 0, .08), 0 9px 28px 8px rgba(0, 0, 0, .05); + --filter-transition: transform .12s ease, opacity .24s ease; + --row-height: 36px; --header-line-height: 26px; --text-indent: 8px; @@ -31,6 +34,7 @@ --loading-border-radius: 20px; --arrow-size: 4px; + --filter-size: 10px; --split-width: 8px; --dragger-size: 20px; --dragger-opacity: .6; @@ -39,6 +43,7 @@ --dragger-cursor-opacity: .3; --header-padding: 4px 12px 4px 8px; + --header-filter-padding: 4px 26px 4px 8px; --spacing-s: 4px; --spacing-cell: 6px 4px 6px 8px; } @@ -93,6 +98,8 @@ >span { overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; } } @@ -119,6 +126,36 @@ } } + >.filter { + width: var(--filter-size); + height: var(--filter-size); + top: 50%; + margin-top: calc(0px - var(--filter-size) / 2); + right: calc(var(--arrow-size) * 2 + 4px); + position: absolute; + display: flex; + + >svg { + width: 100%; + height: 100%; + fill: var(--color); + opacity: .2; + transition: opacity .12s ease; + + &:hover { + opacity: .8; + } + } + + &.hover>svg { + opacity: .8; + } + + &.active>svg { + opacity: 1; + } + } + >.spliter { position: absolute; height: 100%; @@ -183,6 +220,10 @@ border-right: var(--dragger-cursor-size) solid transparent; } } + + &.header-filter>div { + padding: var(--header-filter-padding); + } } } } @@ -367,6 +408,48 @@ } } } + + >.filter-panel { + position: absolute; + width: 200px; + height: 300px; + box-shadow: var(--filter-shadow); + transition: var(--filter-transition); + background-color: var(--bg-color); + transform: scaleY(0); + transform-origin: top; + opacity: 0; + display: flex; + flex-direction: column; + + &.active { + transform: scaleY(1); + opacity: 1; + } + + >.filter-search-holder { + position: relative; + margin: 8px 8px 4px; + + >.filter-search-box { + box-sizing: border-box; + text-indent: 16px; + width: 100%; + font-size: var(--font-smaller-size); + line-height: var(--line-height); + } + + >svg { + position: absolute; + width: 12px; + height: 12px; + top: calc(50% - 6px); + left: 4px; + fill: var(--color); + cursor: text; + } + } + } } @media (prefers-color-scheme: dark) { diff --git a/lib/ui/grid/grid.html b/lib/ui/grid/grid.html index 0050a3f..887af0f 100644 --- a/lib/ui/grid/grid.html +++ b/lib/ui/grid/grid.html @@ -198,6 +198,7 @@ key: 'c2a', caption: '下拉', type: Grid.ColumnTypes.Dropdown, + allowFilter: true, source: item => { if (item.source == null) { return new Promise((resolve, reject) => { diff --git a/lib/ui/grid/grid.js b/lib/ui/grid/grid.js index dac4046..e77b2df 100644 --- a/lib/ui/grid/grid.js +++ b/lib/ui/grid/grid.js @@ -1,5 +1,5 @@ import '../css/grid.scss'; -import { global, isPositive, isMobile, throttle, truncate } from "../../utility"; +import { global, isPositive, isMobile, throttle, truncate, distinct } from "../../utility"; import { r } from "../../utility/lgres"; import { createElement } from "../../functions"; import { createIcon } from "../icon"; @@ -12,11 +12,11 @@ const ColumnChangedType = { Sort: 'sort' }; const RefreshInterval = isMobile() ? 32 : 0; -const MaxColumnBit = 10; -const MaxColumnMask = 0x3ff; +const HoverInternal = 200; const RedumCount = 4; const MiniDragOffset = 4; const MiniColumnWidth = 50; +const FilterPanelWidth = 200; function getClientX(e) { if (e == null) { @@ -63,7 +63,6 @@ class Grid { #containerHeight; #bodyClientWidth; #rowCount = -1; - #overflows; #scrollTop; #scrollLeft; #colTypes = {}; @@ -126,9 +125,22 @@ class Grid { } list = list.map(i => { return { values: i } }); this.#source = list; - // TODO: filter to currentSource; - this.#currentSource = list; - this.#overflows = {}; + if (this.#colAttrs.__filtered === true) { + this.#currentSource = list.filter(it => { + for (let col of this.columns) { + const f = this.#get(col.key, 'filter'); + if (Array.isArray(f)) { + const v = this.#getItemValue(it, col.key, col.filter); + if (f.indexOf(v) < 0) { + return false; + } + } + } + return true; + }); + } else { + this.#currentSource = list; + } this.#selectedColumnIndex = -1; this.#selectedIndexes = []; this.#startIndex = 0; @@ -323,17 +335,17 @@ class Grid { width = col.width; } if (width > 0) { - this.#changeColumnWidth(i, width, true); + this.#changeColumnWidth(i, width); } }); } } resetChange() { - if (this.#currentSource == null) { + if (this.#source == null) { return; } - for (let row of this.#currentSource) { + for (let row of this.#source) { delete row.__changed; } } @@ -363,21 +375,8 @@ class Grid { direction = 1; } comparer = (a, b) => { - const ta = a.values[col.key]; - const tb = b.values[col.key]; - if ((ta == null || tb == null) && typeof col.filter === 'function') { - a = col.filter(a.values); - b = col.filter(b.values); - } else { - a = ta; - b = tb; - } - if (a?.value != null) { - a = a.value; - } - if (b?.value != null) { - b = b.value; - } + a = this.#getItemValue(a, col.key, col.filter); + b = this.#getItemValue(b, col.key, col.filter); if (a == null && typeof b === 'number') { a = 0; } else if (typeof a === 'number' && b == null) { @@ -394,8 +393,9 @@ class Grid { comparer = (a, b) => col.sortFilter(a.values, b.values) * direction; } this.#source.sort(comparer); - // TODO: filter to currentSource; - this.#currentSource = this.#source; + if (this.#colAttrs.__filtered === true) { + this.#currentSource.sort(comparer); + } if (reload) { this.reload(); } else { @@ -434,6 +434,9 @@ class Grid { if (!this.readonly && col.enabled !== false && col.allcheck && isCheckbox) { width += 32; } + if (col.allowFilter === true) { + width += 14; + } if (width < MiniColumnWidth) { width = MiniColumnWidth; } @@ -486,8 +489,12 @@ class Grid { th.appendChild(createElement('layer', 'arrow')); } // filter - if (col.allowFilter) { - // TODO: filter + if (col.allowFilter === true) { + const filter = createElement('layer', 'filter'); + filter.appendChild(createIcon('fa-solid', 'filter')); + filter.addEventListener('mousedown', e => this.#onFilter(e, col)); + th.classList.add('header-filter'); + th.appendChild(filter); } // resize spliter if (col.resizable !== false) { @@ -549,19 +556,16 @@ class Grid { const holder = createElement('div', 'ui-grid-hover-holder'); holder.addEventListener('mousedown', e => { const holder = e.currentTarget; - const keyid = holder.keyid; - if (keyid == null) { - return; - } - delete holder.keyid; + const row = Number(holder.dataset.row); + const col = Number(holder.dataset.col); if (holder.classList.contains('active')) { holder.classList.remove('active'); } - return this.#onRowClicked(e, (keyid >>> MaxColumnBit) - this.#startIndex, keyid & MaxColumnMask); + return this.#onRowClicked(e, row + this.#startIndex, col); }); holder.addEventListener('dblclick', e => this.#onRowDblClicked(e)); bodyContainer.appendChild(holder); - body.addEventListener('mousemove', e => throttle(this.#onBodyMouseMove, RefreshInterval, this, e, holder), { passive: true }); + body.addEventListener('mousemove', e => throttle(this.#onBodyMouseMove, HoverInternal, this, e, holder), { passive: true }); } this.#refs.body = body; this.#refs.bodyContainer = bodyContainer; @@ -588,7 +592,8 @@ class Grid { cols.forEach((col, j) => { const cell = createElement('td'); if (col.visible !== false) { - cell.keyid = ((exists + i) << MaxColumnBit) | j; + cell.dataset.row = String(exists + i); + cell.dataset.col = String(j); const style = this.#get(col.key, 'style'); if (style != null) { for (let css of Object.entries(style)) { @@ -717,7 +722,6 @@ class Grid { widths[j] = width; widths.flag = true; } - this.#overflows[(startIndex + i) << MaxColumnBit | j] = false; } if (typeof col.styleFilter === 'function') { const style = col.styleFilter(item); @@ -746,7 +750,7 @@ class Grid { }); } - #changeColumnWidth(index, width, keepOverflows) { + #changeColumnWidth(index, width) { const col = this.columns[index]; // const oldwidth = col.width; const w = `${width}px`; @@ -772,15 +776,6 @@ class Grid { // width = this.#refs.bodyContainer.offsetWidth - oldwidth + width; // this.#refs.bodyContainer.style.width = `${width}px`; // } - if (keepOverflows) { - return; - } - for (let i = 0; i < this.#currentSource.length; i += 1) { - const keyid = (i << MaxColumnBit) | index; - if (this.#overflows.hasOwnProperty(keyid)) { - delete this.#overflows[keyid]; - } - } } #changingColumnOrder(index, offset, x, offsetLeft) { @@ -821,8 +816,8 @@ class Grid { } idx ??= count - 1; } - if (idx !== this.#colAttrs.orderIndex) { - this.#colAttrs.orderIndex = idx; + if (idx !== this.#colAttrs.__orderIndex) { + this.#colAttrs.__orderIndex = idx; element = children[idx]; if (element == null) { return; @@ -835,7 +830,7 @@ class Grid { #changeColumnOrder(index) { this.#refs.dragger.style.display = ''; this.#refs.draggerCursor.style.display = ''; - const orderIndex = this.#colAttrs.orderIndex; + const orderIndex = this.#colAttrs.__orderIndex; if (orderIndex >= 0 && orderIndex !== index) { let targetIndex = orderIndex - index; if (targetIndex >= 0 && targetIndex <= 1) { @@ -936,6 +931,16 @@ class Grid { } } + #getItemValue(item, key, filter) { + let value; + if (typeof filter === 'function') { + value = filter(item); + } else { + value = item.values[key]; + } + return value?.value ?? value; + } + #getRowTarget(target) { let parent; while ((parent = target.parentElement) != null && !parent.classList.contains('ui-grid-row')) { @@ -969,6 +974,169 @@ class Grid { } } + #onCloseFilter() { + const panels = this.#el.querySelectorAll('.filter-panel.active'); + if (panels.length > 0) { + panels.forEach(el => el.classList.remove('active')); + setTimeout(() => this.#el.querySelectorAll('.filter-panel').forEach(el => el.remove()), 120); + const filtering = this.#colAttrs.__filtering; + if (filtering instanceof HTMLElement) { + filtering.classList.remove('hover'); + } + delete this.#colAttrs.__filtering; + return true; + } + return false; + } + + #onFilter(e, col) { + if (this.#onCloseFilter()) { + return; + } + const close = e => { + if ((e.target.tagName === 'LAYER' && e.target.classList.contains('filter')) || + e.target.tagName === 'use') { + return; + } + if (this.#onCloseFilter()) { + document.removeEventListener('mousedown', close); + } + } + document.addEventListener('mousedown', close); + const panel = createElement('div', 'filter-panel'); + panel.addEventListener('mousedown', e => e.stopPropagation()); + const th = e.currentTarget.parentElement; + const width = th.offsetWidth; + panel.style.top = `${th.offsetHeight}px`; + panel.style.left = (th.offsetLeft + (width > FilterPanelWidth ? width - FilterPanelWidth : 0)) + 'px'; + + // search + let searchbox; + if (col.allowSearch !== false) { + const searchholder = createElement('div', 'filter-search-holder'); + searchbox = createElement('input', 'filter-search-box ui-text'); + searchbox.type = 'text'; + const searchicon = createIcon('fa-regular', 'search'); + searchicon.addEventListener('mousedown', e => { + searchbox.focus(); + e.preventDefault(); + }); + searchholder.append(searchbox, searchicon); + panel.append(searchholder); + } + // list + const itemlist = createElement('div', 'filter-item-list'); + itemlist.addEventListener('scroll', e => throttle(this.#onFilterScroll, RefreshInterval, this, col, itemlist, e.target.scrollTop), { passive: true }); + // - all + const itemall = createElement('div', 'filter-item filter-all'); + itemall.appendChild(createCheckbox({ + label: this.langs.all, + onchange: e => { + const checked = e.target.checked; + itemlist.querySelectorAll('.filter-content input').forEach(box => box.checked = checked); + } + })); + itemlist.appendChild(itemall); + // - items + let array; + if (Array.isArray(col.filterSource)) { + array = col.filterSource; + } else if (typeof col.filterSource === 'function') { + array = col.filterSource.call(this, col); + } else { + array = distinct(this.#currentSource, col.key, col.filter) + .sort((a, b) => { + a = a?.value ?? a; + b = b?.value ?? b; + return a > b ? 1 : a < b ? -1 : 0; + }); + } + array = array.map(i => { + if (Object.prototype.hasOwnProperty.call(i, 'value') && + Object.prototype.hasOwnProperty.call(i, 'displayValue')) { + return i; + } + return { + value: i, + displayValue: i == null ? '' : i + }; + }); + this.#fillFilterList(col, itemlist, array, itemall); + // TODO: check status + panel.appendChild(itemlist); + if (searchbox != null) { + searchbox.addEventListener('input', e => { + const key = e.currentTarget.value.toLowerCase(); + const items = key.length === 0 ? array : array.filter(i => { + const displayValue = i?.displayValue ?? i; + return String(displayValue ?? '').indexOf(key) >= 0; + }); + this.#fillFilterList(col, itemlist, items, itemall); + }); + } + + this.#el.appendChild(panel); + setTimeout(() => panel.classList.add('active'), 0); + this.#colAttrs.__filtering = e.currentTarget; + e.currentTarget.classList.add('hover'); + } + + #fillFilterList(col, list, array, all) { + list.querySelector('.filter-holder').remove(); + list.querySelector('.filter-content').remove(); + const rowHeight = this.filterRowHeight; + const height = array.length * rowHeight; + this.#set(col.key, 'filterHeight', height); + const holder = createElement('div', 'filter-holder'); + holder.style.height = `${height}px`; + const content = createElement('div', 'filter-content'); + content.style.top = `${rowHeight}px`; + this.#set(col.key, 'filterSource', array); + const filter = this.#get(col.key, 'filter'); + for (let item of array) { + item.__checked = !Array.isArray(filter) || filter.indexOf(item.value ?? item); + } + if (array.length > 12) { + array = array.slice(0, 12); + } + this.#doFillFilterList(col, content, array, all); + list.append(holder, content); + } + + #doFillFilterList(col, content, array, all) { + + } + + #onFilterScroll(col, list, top) { + const rowHeight = this.filterRowHeight; + top -= (top % (rowHeight * 2)) + rowHeight; + if (top < 0) { + top = 0; + } else { + let bottomTop = this.#get(col.key, 'filterHeight') - (12 * rowHeight); + if (bottomTop < 0) { + bottomTop = 0; + } + if (top > bottomTop) { + top = bottomTop; + } + } + if (this.#get(col.key, 'filterTop') !== top) { + this.#set(col.key, 'filterTop', top); + const startIndex = top / rowHeight; + let array = this.#get(col.key, 'filterSource'); + if (startIndex + 12 < array.length) { + array = array.slice(startIndex, startIndex + 12); + } else { + array = array.slice(-12); + } + const content = list.querySelector('.filter-content'); + content.replaceChildren(); + this.#doFillFilterList(col, content, array, list.querySelector('.filter-all>input')); + content.style.top = `${top + rowHeight}px`; + } + } + #onDragStart(e, col) { if (this.#notHeader(e.target.tagName)) { return; @@ -1050,7 +1218,7 @@ class Grid { } attr.resizing = val; attr.sizing = true; - this.#changeColumnWidth(index, val, true); + this.#changeColumnWidth(index, val); }; attr.mousemove = e => throttle(resizemove, RefreshInterval, this, e); attr.mouseup = e => { @@ -1142,30 +1310,32 @@ class Grid { return; } let [parent, target] = this.#getRowTarget(e.target); - let keyid = target.keyid; - if (parent == null || keyid == null) { - delete holder.keyid; + if (parent == null) { + delete holder.dataset.row; + delete holder.dataset.col; if (holder.classList.contains('active')) { holder.classList.remove('active'); } return; } - const oldkeyid = holder.keyid; - keyid += this.#startIndex << MaxColumnBit; - if (keyid === oldkeyid) { - return; - } const element = target.children[0]; - if (element.tagName !== 'SPAN') { + if (element?.tagName !== 'SPAN') { + if (holder.classList.contains('active')) { + delete holder.dataset.row; + delete holder.dataset.col; + holder.classList.remove('active'); + } return; } - let overflow = this.#overflows[keyid]; - if (overflow == null) { - overflow = element.scrollWidth > element.offsetWidth; - this.#overflows[keyid] = overflow; + const row = target.dataset.row; + const col = target.dataset.col; + if (holder.dataset.row === row && + holder.dataset.col === col) { + return; } - if (overflow) { - holder.keyid = keyid; + if (element.scrollWidth > element.offsetWidth) { + holder.dataset.row = row; + holder.dataset.col = col; holder.innerText = element.innerText; const top = this.#refs.bodyContent.offsetTop + target.offsetTop; let left = target.offsetLeft; @@ -1180,13 +1350,10 @@ class Grid { const height = target.offsetHeight; holder.style.cssText = `top: ${top}px; left: ${left}px; max-width: ${this.#bodyClientWidth}px; height: ${height - 2}px`; holder.classList.add('active'); - } else { - if (oldkeyid != null) { - delete holder.keyid; - } - if (holder.classList.contains('active')) { - holder.classList.remove('active'); - } + } else if (holder.classList.contains('active')) { + delete holder.dataset.row; + delete holder.dataset.col; + holder.classList.remove('active'); } } diff --git a/lib/utility.js b/lib/utility.js index 343c536..4a3c2b0 100644 --- a/lib/utility.js +++ b/lib/utility.js @@ -27,10 +27,30 @@ function throttle(method, delay = 100, context = g, ...args) { } } +function debounce(method, delay = 100, context = g, ...args) { + if (method == null) { + return; + } + method.tiid && clearTimeout(method.tiid); + method.tiid = setTimeout(() => method.apply(context, args), delay); +} + function truncate(v) { return (v > 0 ? Math.floor : Math.ceil)(v); } +function distinct(array, key, filter) { + const dict = Object.create(null); + for (let item of array) { + const v = typeof filter === 'function' ? filter(item) : item[key]; + const val = v?.value ?? v; + if (!Object.prototype.hasOwnProperty.call(dict, val)) { + dict[val] = v; + } + } + return Object.values(dict); +} + function isEmail(text) { return /^\w[-\w.+]*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/.test(text); } @@ -65,7 +85,9 @@ export { isMobile, // functions throttle, + debounce, truncate, + distinct, isEmail, isPhone } \ No newline at end of file