From ee16ef452dd963921a2efe1e01b7b90a5ce40986 Mon Sep 17 00:00:00 2001 From: Sam Marks Date: Sun, 28 Aug 2022 14:12:09 -0400 Subject: [PATCH] feat: add iconoir.com and React contexts (#185) --- .github/workflows/build.yaml | 4 +- .github/workflows/release.yaml | 52 +- .npmrc | 1 + CONTRIBUTING.md | 40 +- README.md | 26 +- bin/build.js | 75 +- bin/templates/icon-template.cjs | 26 + bin/templates/index-template.cjs | 15 + constants.js | 12 + css/README.md | 17 + docs/framer.md | 7 + iconoir.com/.eslintrc.json | 6 + iconoir.com/.gitignore | 35 + iconoir.com/README.md | 34 + iconoir.com/components/AnimatedSvg.tsx | 209 ++ iconoir.com/components/AvailableFor.tsx | 142 + iconoir.com/components/Button.tsx | 66 + iconoir.com/components/CategoryRow.tsx | 53 + iconoir.com/components/ChangelogEntry.tsx | 129 + iconoir.com/components/CurrentVersion.tsx | 29 + .../components/CustomizationEditor.tsx | 102 + .../components/DocumentationNavigation.tsx | 170 + iconoir.com/components/Explore.tsx | 79 + iconoir.com/components/FiltersEditor.tsx | 39 + iconoir.com/components/Footer.tsx | 42 + iconoir.com/components/GA.tsx | 21 + iconoir.com/components/Header.tsx | 198 + iconoir.com/components/HeaderBackground.tsx | 46 + iconoir.com/components/Icon.tsx | 175 + iconoir.com/components/IconList.tsx | 200 + iconoir.com/components/IconListEmpty.tsx | 49 + iconoir.com/components/IconsRow.tsx | 28 + iconoir.com/components/Input.tsx | 56 + iconoir.com/components/Layout.tsx | 12 + iconoir.com/components/MDXRemote.tsx | 24 + iconoir.com/components/NavigationItem.tsx | 71 + iconoir.com/components/Praise.tsx | 155 + iconoir.com/components/PraiseItem.tsx | 65 + .../components/ReactWindowScroller.tsx | 117 + iconoir.com/components/ReadOnGitHub.tsx | 50 + iconoir.com/components/SEO.tsx | 58 + iconoir.com/components/Slider.tsx | 126 + iconoir.com/components/Stats.tsx | 52 + iconoir.com/components/SuggestLibrary.tsx | 28 + iconoir.com/components/Table.tsx | 29 + iconoir.com/components/Typography.tsx | 182 + iconoir.com/components/constants.ts | 31 + iconoir.com/components/responsive.ts | 15 + .../components/useCustomizationPersistence.ts | 36 + iconoir.com/generate-icons.js | 73 + iconoir.com/helpers/showNotification.ts | 9 + iconoir.com/icons.csv | 1149 ++++++ iconoir.com/lib/getHeaderProps.ts | 8 + iconoir.com/lib/getIcons.ts | 42 + iconoir.com/next-env.d.ts | 5 + iconoir.com/next.config.js | 20 + iconoir.com/package.json | 52 + iconoir.com/pages/_app.tsx | 9 + iconoir.com/pages/_document.tsx | 61 + iconoir.com/pages/docs/[...slug].tsx | 265 ++ iconoir.com/pages/docs/changelog.tsx | 85 + iconoir.com/pages/docs/index.tsx | 10 + iconoir.com/pages/index.tsx | 175 + iconoir.com/pages/support.tsx | 163 + iconoir.com/public/assets/iconoir-cover.png | Bin 0 -> 325592 bytes iconoir.com/public/chris-messina.png | Bin 0 -> 27101 bytes iconoir.com/public/fabrizio-rinaldi.png | Bin 0 -> 14721 bytes iconoir.com/public/favicon.ico | Bin 0 -> 2538 bytes iconoir.com/public/home-background.svg | 3 + iconoir.com/public/iconoir-brand-03.png | Bin 0 -> 416001 bytes iconoir.com/public/iconoir-logo.svg | 11 + iconoir.com/public/logo-figma.svg | 7 + iconoir.com/public/logo-flutter.svg | 19 + iconoir.com/public/logo-framer.svg | 3 + iconoir.com/public/logo-react-native.svg | 7 + iconoir.com/public/logo-react.svg | 7 + iconoir.com/public/nibol-logo.png | Bin 0 -> 4846 bytes iconoir.com/public/opencollective.png | Bin 0 -> 2639 bytes iconoir.com/public/riccardo-suardi.png | Bin 0 -> 21991 bytes iconoir.com/public/support-background.svg | 5 + iconoir.com/public/twitter-logo.png | Bin 0 -> 855 bytes iconoir.com/public/typefully-logo.png | Bin 0 -> 7167 bytes iconoir.com/public/vercel.svg | 4 + iconoir.com/styles/prism-theme.css | 430 +++ iconoir.com/styles/theme.css | 82 + iconoir.com/tsconfig.json | 29 + package.json | 7 +- packages/iconoir-flutter/README.md | 8 +- .../iconoir-flutter/lib/iconoir_flutter.dart | 416 +- packages/iconoir-react-native/.svgrrc.json | 8 + packages/iconoir-react-native/README.md | 30 +- packages/iconoir-react-native/package.json | 3 +- .../iconoir-react-native/src/3DAddHole.tsx | 9 +- packages/iconoir-react-native/src/3DArc.tsx | 9 +- .../src/3DArcCenterPt.tsx | 9 +- .../iconoir-react-native/src/3DBridge.tsx | 9 +- .../iconoir-react-native/src/3DCenterBox.tsx | 9 +- .../iconoir-react-native/src/3DEllipse.tsx | 9 +- .../src/3DEllipseThreePts.tsx | 9 +- packages/iconoir-react-native/src/3DPtBox.tsx | 9 +- .../src/3DRectCornerToCorner.tsx | 9 +- .../src/3DRectFromCenter.tsx | 9 +- .../src/3DRectThreePts.tsx | 9 +- .../iconoir-react-native/src/3DSelectEdge.tsx | 9 +- .../iconoir-react-native/src/3DSelectFace.tsx | 9 +- .../src/3DSelectPoint.tsx | 9 +- .../src/3DSelectSolid.tsx | 9 +- .../src/3DThreePtsBox.tsx | 9 +- .../src/Accessibility.tsx | 9 +- .../src/AccessibilitySign.tsx | 9 +- .../src/AccessibilityTech.tsx | 9 +- .../iconoir-react-native/src/Activity.tsx | 9 +- .../src/AddCircledOutline.tsx | 9 +- .../src/AddDatabaseScript.tsx | 9 +- .../iconoir-react-native/src/AddFolder.tsx | 9 +- .../iconoir-react-native/src/AddFrame.tsx | 9 +- .../iconoir-react-native/src/AddHexagon.tsx | 9 +- .../iconoir-react-native/src/AddKeyframe.tsx | 9 +- .../src/AddKeyframeAlt.tsx | 9 +- .../iconoir-react-native/src/AddKeyframes.tsx | 9 +- packages/iconoir-react-native/src/AddLens.tsx | 9 +- .../src/AddMediaImage.tsx | 9 +- .../src/AddMediaVideo.tsx | 9 +- packages/iconoir-react-native/src/AddPage.tsx | 9 +- .../iconoir-react-native/src/AddPinAlt.tsx | 9 +- .../iconoir-react-native/src/AddSelection.tsx | 9 +- .../iconoir-react-native/src/AddSquare.tsx | 9 +- .../iconoir-react-native/src/AddToCart.tsx | 9 +- packages/iconoir-react-native/src/AddUser.tsx | 9 +- .../iconoir-react-native/src/AfricanTree.tsx | 9 +- .../src/AirConditioner.tsx | 9 +- .../iconoir-react-native/src/Airplane.tsx | 9 +- .../src/AirplaneHelix.tsx | 9 +- .../src/AirplaneHelix45Deg.tsx | 9 +- .../iconoir-react-native/src/AirplaneOff.tsx | 9 +- .../src/AirplaneRotation.tsx | 10 +- packages/iconoir-react-native/src/Airplay.tsx | 9 +- packages/iconoir-react-native/src/Alarm.tsx | 9 +- packages/iconoir-react-native/src/Album.tsx | 9 +- .../src/AlbumCarousel.tsx | 9 +- .../iconoir-react-native/src/AlbumList.tsx | 9 +- .../iconoir-react-native/src/AlbumOpen.tsx | 9 +- .../src/AlignBottomBox.tsx | 9 +- .../iconoir-react-native/src/AlignCenter.tsx | 9 +- .../iconoir-react-native/src/AlignJustify.tsx | 9 +- .../iconoir-react-native/src/AlignLeft.tsx | 9 +- .../iconoir-react-native/src/AlignLeftBox.tsx | 9 +- .../iconoir-react-native/src/AlignRight.tsx | 9 +- .../src/AlignRightBox.tsx | 9 +- .../iconoir-react-native/src/AlignTopBox.tsx | 9 +- packages/iconoir-react-native/src/Antenna.tsx | 9 +- .../iconoir-react-native/src/AntennaOff.tsx | 9 +- .../src/AntennaSignal.tsx | 9 +- .../src/AntennaSignalRounded.tsx | 9 +- .../src/AppNotification.tsx | 9 +- .../iconoir-react-native/src/AppWindow.tsx | 9 +- packages/iconoir-react-native/src/Apple.tsx | 9 +- .../iconoir-react-native/src/AppleHalf.tsx | 9 +- .../iconoir-react-native/src/AppleHalfAlt.tsx | 9 +- .../src/AppleImac2021.tsx | 9 +- .../src/AppleImac2021Side.tsx | 9 +- .../iconoir-react-native/src/AppleMac.tsx | 9 +- .../iconoir-react-native/src/AppleSwift.tsx | 9 +- .../iconoir-react-native/src/AppleWallet.tsx | 9 +- .../iconoir-react-native/src/ArSymbol.tsx | 9 +- packages/iconoir-react-native/src/Arcade.tsx | 9 +- packages/iconoir-react-native/src/Archery.tsx | 9 +- .../iconoir-react-native/src/ArcheryMatch.tsx | 9 +- packages/iconoir-react-native/src/Archive.tsx | 9 +- .../iconoir-react-native/src/AreaSearch.tsx | 9 +- .../iconoir-react-native/src/ArrowArchery.tsx | 9 +- .../iconoir-react-native/src/ArrowDown.tsx | 9 +- .../src/ArrowDownCircled.tsx | 9 +- .../iconoir-react-native/src/ArrowLeft.tsx | 9 +- .../src/ArrowLeftCircled.tsx | 9 +- .../iconoir-react-native/src/ArrowRight.tsx | 9 +- .../src/ArrowRightCircled.tsx | 9 +- .../src/ArrowSeparate.tsx | 9 +- .../src/ArrowSeparateVertical.tsx | 9 +- .../iconoir-react-native/src/ArrowUnion.tsx | 9 +- .../src/ArrowUnionVertical.tsx | 9 +- packages/iconoir-react-native/src/ArrowUp.tsx | 9 +- .../src/ArrowUpCircled.tsx | 9 +- packages/iconoir-react-native/src/Asana.tsx | 9 +- packages/iconoir-react-native/src/Atom.tsx | 9 +- .../iconoir-react-native/src/Attachment.tsx | 9 +- .../src/AugmentedReality.tsx | 9 +- .../iconoir-react-native/src/AutoFlash.tsx | 9 +- packages/iconoir-react-native/src/Axes.tsx | 9 +- .../src/Backward15Seconds.tsx | 9 +- packages/iconoir-react-native/src/Bag.tsx | 9 +- packages/iconoir-react-native/src/Bank.tsx | 9 +- packages/iconoir-react-native/src/Barcode.tsx | 9 +- .../iconoir-react-native/src/Basketball.tsx | 9 +- .../src/BasketballAlt.tsx | 9 +- .../src/BasketballField.tsx | 9 +- .../iconoir-react-native/src/Battery25.tsx | 9 +- .../iconoir-react-native/src/Battery50.tsx | 9 +- .../iconoir-react-native/src/Battery75.tsx | 9 +- .../src/BatteryCharging.tsx | 9 +- .../iconoir-react-native/src/BatteryEmpty.tsx | 9 +- .../iconoir-react-native/src/BatteryFull.tsx | 9 +- .../src/BatteryIndicator.tsx | 9 +- .../src/BatteryWarning.tsx | 9 +- packages/iconoir-react-native/src/Bbq.tsx | 9 +- .../iconoir-react-native/src/BeachBag.tsx | 9 +- .../iconoir-react-native/src/BeachBagBig.tsx | 9 +- packages/iconoir-react-native/src/Bed.tsx | 9 +- .../iconoir-react-native/src/BedReady.tsx | 9 +- packages/iconoir-react-native/src/Behance.tsx | 9 +- .../src/BehanceSquared.tsx | 9 +- packages/iconoir-react-native/src/Bell.tsx | 9 +- .../src/BellNotification.tsx | 9 +- packages/iconoir-react-native/src/BellOff.tsx | 9 +- packages/iconoir-react-native/src/Bicycle.tsx | 9 +- packages/iconoir-react-native/src/Bin.tsx | 9 +- packages/iconoir-react-native/src/BinAdd.tsx | 9 +- packages/iconoir-react-native/src/BinFull.tsx | 9 +- packages/iconoir-react-native/src/BinHalf.tsx | 9 +- .../iconoir-react-native/src/BinMinus.tsx | 9 +- packages/iconoir-react-native/src/Bishop.tsx | 9 +- .../iconoir-react-native/src/Bitbucket.tsx | 9 +- .../iconoir-react-native/src/Bluetooth.tsx | 9 +- .../src/BluetoothRounded.tsx | 9 +- packages/iconoir-react-native/src/Bold.tsx | 9 +- .../src/BoldSquareOutline.tsx | 9 +- packages/iconoir-react-native/src/Bonfire.tsx | 9 +- packages/iconoir-react-native/src/Book.tsx | 9 +- .../iconoir-react-native/src/BookStack.tsx | 9 +- .../iconoir-react-native/src/BookmarkBook.tsx | 9 +- .../src/BookmarkCircled.tsx | 9 +- .../src/BookmarkEmpty.tsx | 9 +- .../iconoir-react-native/src/BorderBl.tsx | 9 +- .../iconoir-react-native/src/BorderBottom.tsx | 9 +- .../iconoir-react-native/src/BorderBr.tsx | 9 +- .../iconoir-react-native/src/BorderInner.tsx | 9 +- .../iconoir-react-native/src/BorderLeft.tsx | 9 +- .../iconoir-react-native/src/BorderOut.tsx | 9 +- .../iconoir-react-native/src/BorderRight.tsx | 9 +- .../iconoir-react-native/src/BorderTl.tsx | 9 +- .../iconoir-react-native/src/BorderTop.tsx | 9 +- .../iconoir-react-native/src/BorderTr.tsx | 9 +- .../iconoir-react-native/src/BounceLeft.tsx | 9 +- .../iconoir-react-native/src/BounceRight.tsx | 9 +- .../iconoir-react-native/src/BowlingBall.tsx | 9 +- packages/iconoir-react-native/src/Box.tsx | 9 +- packages/iconoir-react-native/src/BoxIso.tsx | 9 +- .../iconoir-react-native/src/BoxingGlove.tsx | 9 +- .../iconoir-react-native/src/Brightness.tsx | 9 +- .../src/BrightnessWindow.tsx | 9 +- .../src/BubbleDownload.tsx | 9 +- .../iconoir-react-native/src/BubbleError.tsx | 9 +- .../iconoir-react-native/src/BubbleIncome.tsx | 9 +- .../src/BubbleOutcome.tsx | 9 +- .../iconoir-react-native/src/BubbleSearch.tsx | 9 +- .../iconoir-react-native/src/BubbleStar.tsx | 9 +- .../iconoir-react-native/src/BubbleUpload.tsx | 9 +- .../src/BubbleWarning.tsx | 9 +- .../iconoir-react-native/src/Building.tsx | 9 +- .../iconoir-react-native/src/BusOutline.tsx | 9 +- packages/iconoir-react-native/src/BusStop.tsx | 9 +- .../iconoir-react-native/src/CableRounded.tsx | 9 +- .../iconoir-react-native/src/Calculator.tsx | 9 +- .../iconoir-react-native/src/Calendar.tsx | 9 +- packages/iconoir-react-native/src/Camera.tsx | 9 +- packages/iconoir-react-native/src/Cancel.tsx | 9 +- .../iconoir-react-native/src/CarOutline.tsx | 9 +- packages/iconoir-react-native/src/Carbon.tsx | 9 +- .../iconoir-react-native/src/CardWallet.tsx | 9 +- packages/iconoir-react-native/src/Cart.tsx | 9 +- packages/iconoir-react-native/src/CartAlt.tsx | 9 +- packages/iconoir-react-native/src/Cash.tsx | 9 +- packages/iconoir-react-native/src/Cell2X2.tsx | 9 +- .../iconoir-react-native/src/CenterAlign.tsx | 9 +- packages/iconoir-react-native/src/ChatAdd.tsx | 9 +- .../iconoir-react-native/src/ChatBubble.tsx | 9 +- .../src/ChatBubbleCheck.tsx | 9 +- .../src/ChatBubbleCheck1.tsx | 9 +- .../src/ChatBubbleEmpty.tsx | 9 +- .../src/ChatBubbleError.tsx | 9 +- .../src/ChatBubbleQuestion.tsx | 9 +- .../src/ChatBubbleTranslate.tsx | 9 +- .../src/ChatBubbleWarning.tsx | 9 +- .../iconoir-react-native/src/ChatLines.tsx | 9 +- .../iconoir-react-native/src/ChatRemove.tsx | 9 +- packages/iconoir-react-native/src/Check.tsx | 9 +- .../src/CheckCircledOutline.tsx | 9 +- .../iconoir-react-native/src/CheckWindow.tsx | 9 +- .../iconoir-react-native/src/Chocolate.tsx | 9 +- .../iconoir-react-native/src/Chromecast.tsx | 9 +- .../src/ChromecastActive.tsx | 9 +- packages/iconoir-react-native/src/Church.tsx | 9 +- .../iconoir-react-native/src/ChurchAlt.tsx | 9 +- .../iconoir-react-native/src/CinemaOld.tsx | 9 +- packages/iconoir-react-native/src/Circle.tsx | 9 +- packages/iconoir-react-native/src/City.tsx | 9 +- .../iconoir-react-native/src/CleanWater.tsx | 9 +- .../src/ClipboardCheck.tsx | 9 +- .../iconoir-react-native/src/ClockOutline.tsx | 9 +- packages/iconoir-react-native/src/Closet.tsx | 9 +- packages/iconoir-react-native/src/Cloud.tsx | 9 +- .../iconoir-react-native/src/CloudBookAlt.tsx | 9 +- .../iconoir-react-native/src/CloudCheck.tsx | 9 +- .../iconoir-react-native/src/CloudDesync.tsx | 9 +- .../src/CloudDownload.tsx | 9 +- .../iconoir-react-native/src/CloudError.tsx | 9 +- .../iconoir-react-native/src/CloudSunny.tsx | 9 +- .../iconoir-react-native/src/CloudSync.tsx | 9 +- .../iconoir-react-native/src/CloudUpload.tsx | 9 +- packages/iconoir-react-native/src/Code.tsx | 9 +- .../iconoir-react-native/src/CodeBrackets.tsx | 9 +- .../src/CodeBracketsSquare.tsx | 9 +- packages/iconoir-react-native/src/Codepen.tsx | 9 +- packages/iconoir-react-native/src/Coin.tsx | 9 +- .../iconoir-react-native/src/CollageFrame.tsx | 9 +- .../iconoir-react-native/src/Collapse.tsx | 9 +- .../iconoir-react-native/src/ColorFilter.tsx | 9 +- .../iconoir-react-native/src/ColorPicker.tsx | 9 +- .../src/ColorPickerEmpty.tsx | 9 +- packages/iconoir-react-native/src/Combine.tsx | 9 +- .../iconoir-react-native/src/CompactDisc.tsx | 9 +- packages/iconoir-react-native/src/Compass.tsx | 9 +- .../iconoir-react-native/src/Compress.tsx | 9 +- .../src/CompressLines.tsx | 9 +- .../iconoir-react-native/src/Computer.tsx | 9 +- .../iconoir-react-native/src/Consumable.tsx | 9 +- .../src/ControlSlider.tsx | 9 +- packages/iconoir-react-native/src/Cookie.tsx | 9 +- packages/iconoir-react-native/src/Copy.tsx | 9 +- .../iconoir-react-native/src/Copyright.tsx | 9 +- .../src/CornerBottomLeft.tsx | 9 +- .../src/CornerBottomRight.tsx | 9 +- .../src/CornerTopLeft.tsx | 9 +- .../src/CornerTopRight.tsx | 9 +- packages/iconoir-react-native/src/Cpu.tsx | 9 +- .../iconoir-react-native/src/CpuWarning.tsx | 9 +- .../iconoir-react-native/src/CrackedEgg.tsx | 9 +- .../src/CreativeCommons.tsx | 9 +- .../iconoir-react-native/src/CreditCard.tsx | 9 +- .../iconoir-react-native/src/CreditCard2.tsx | 9 +- packages/iconoir-react-native/src/Crib.tsx | 9 +- packages/iconoir-react-native/src/Crop.tsx | 9 +- .../iconoir-react-native/src/CropRotateBl.tsx | 9 +- .../iconoir-react-native/src/CropRotateBr.tsx | 9 +- .../iconoir-react-native/src/CropRotateTl.tsx | 9 +- .../iconoir-react-native/src/CropRotateTr.tsx | 9 +- packages/iconoir-react-native/src/Css3.tsx | 9 +- .../src/CursorPointer.tsx | 9 +- packages/iconoir-react-native/src/Cut.tsx | 9 +- packages/iconoir-react-native/src/CutAlt.tsx | 9 +- packages/iconoir-react-native/src/Cycling.tsx | 9 +- .../iconoir-react-native/src/Cylinder.tsx | 9 +- .../iconoir-react-native/src/DashFlag.tsx | 9 +- .../iconoir-react-native/src/Dashboard.tsx | 9 +- .../src/DashboardDots.tsx | 9 +- .../src/DashboardSpeed.tsx | 9 +- .../src/DataTransferBoth.tsx | 9 +- .../src/DataTransferCheck.tsx | 9 +- .../src/DataTransferDown.tsx | 9 +- .../src/DataTransferUp.tsx | 9 +- .../src/DataTransferWarning.tsx | 9 +- .../src/DatabaseBackup.tsx | 9 +- .../src/DatabaseExport.tsx | 9 +- .../src/DatabaseMonitor.tsx | 9 +- .../src/DatabaseRestore.tsx | 9 +- .../src/DatabaseRounded.tsx | 9 +- .../src/DatabaseScript.tsx | 9 +- .../src/DatabaseSettings.tsx | 9 +- .../iconoir-react-native/src/DatabaseStar.tsx | 9 +- .../src/DatabaseStats.tsx | 9 +- packages/iconoir-react-native/src/Db.tsx | 12 +- packages/iconoir-react-native/src/DbCheck.tsx | 9 +- packages/iconoir-react-native/src/DbError.tsx | 9 +- .../iconoir-react-native/src/DbSearch.tsx | 9 +- packages/iconoir-react-native/src/DbStar.tsx | 9 +- .../iconoir-react-native/src/DbWarning.tsx | 9 +- .../iconoir-react-native/src/DeCompress.tsx | 9 +- .../src/DeleteCircledOutline.tsx | 9 +- .../iconoir-react-native/src/Delivery.tsx | 9 +- .../src/DeliveryTruck.tsx | 9 +- packages/iconoir-react-native/src/Depth.tsx | 9 +- .../iconoir-react-native/src/DesignPencil.tsx | 9 +- packages/iconoir-react-native/src/Desk.tsx | 9 +- packages/iconoir-react-native/src/Dialpad.tsx | 9 +- .../iconoir-react-native/src/DiceFive.tsx | 9 +- .../iconoir-react-native/src/DiceFour.tsx | 9 +- packages/iconoir-react-native/src/DiceOne.tsx | 9 +- packages/iconoir-react-native/src/DiceSix.tsx | 9 +- .../iconoir-react-native/src/DiceThree.tsx | 9 +- packages/iconoir-react-native/src/DiceTwo.tsx | 9 +- .../iconoir-react-native/src/DimmerSwitch.tsx | 9 +- .../src/DirectorChair.tsx | 9 +- packages/iconoir-react-native/src/Discord.tsx | 9 +- .../iconoir-react-native/src/Dishwasher.tsx | 9 +- .../iconoir-react-native/src/Display4K.tsx | 9 +- .../src/DivideSelection1.tsx | 9 +- .../src/DivideSelection2.tsx | 9 +- .../iconoir-react-native/src/DocSearch.tsx | 9 +- .../iconoir-react-native/src/DocSearchAlt.tsx | 9 +- packages/iconoir-react-native/src/DocStar.tsx | 9 +- .../iconoir-react-native/src/DocStarAlt.tsx | 9 +- packages/iconoir-react-native/src/Dollar.tsx | 9 +- .../iconoir-react-native/src/DomoticIssue.tsx | 9 +- packages/iconoir-react-native/src/Donate.tsx | 9 +- .../iconoir-react-native/src/DoubleCheck.tsx | 9 +- .../src/DownRoundArrow.tsx | 9 +- .../iconoir-react-native/src/Download.tsx | 9 +- .../src/DownloadCircledOutline.tsx | 9 +- .../src/DownloadDataWindow.tsx | 9 +- .../src/DownloadSquareOutline.tsx | 9 +- .../src/DragHandGesture.tsx | 9 +- packages/iconoir-react-native/src/Drawer.tsx | 9 +- .../iconoir-react-native/src/Dribbble.tsx | 9 +- packages/iconoir-react-native/src/Drone.tsx | 9 +- .../src/DroneChargeFull.tsx | 9 +- .../src/DroneChargeHalf.tsx | 9 +- .../src/DroneChargeLow.tsx | 9 +- .../iconoir-react-native/src/DroneCheck.tsx | 9 +- .../iconoir-react-native/src/DroneError.tsx | 9 +- .../iconoir-react-native/src/DroneLanding.tsx | 9 +- .../iconoir-react-native/src/DroneRefresh.tsx | 9 +- .../iconoir-react-native/src/DroneTakeOff.tsx | 9 +- packages/iconoir-react-native/src/Droplet.tsx | 9 +- .../iconoir-react-native/src/DropletHalf.tsx | 9 +- .../src/EaseCurveControlPoints.tsx | 9 +- packages/iconoir-react-native/src/EaseIn.tsx | 9 +- .../src/EaseInControlPoint.tsx | 9 +- .../iconoir-react-native/src/EaseInOut.tsx | 9 +- packages/iconoir-react-native/src/EaseOut.tsx | 9 +- .../src/EaseOutControlPoint.tsx | 9 +- .../iconoir-react-native/src/EcologyBook.tsx | 9 +- packages/iconoir-react-native/src/Edit.tsx | 9 +- .../iconoir-react-native/src/EditPencil.tsx | 9 +- packages/iconoir-react-native/src/Egg.tsx | 9 +- packages/iconoir-react-native/src/Eject.tsx | 9 +- .../src/ElectronicsChip.tsx | 9 +- .../src/ElectronicsTransistor.tsx | 9 +- packages/iconoir-react-native/src/Emoji.tsx | 9 +- .../iconoir-react-native/src/EmojiBall.tsx | 9 +- .../src/EmojiBlinkLeft.tsx | 9 +- .../src/EmojiBlinkRight.tsx | 9 +- .../src/EmojiLookBottom.tsx | 9 +- .../src/EmojiLookLeft.tsx | 9 +- .../src/EmojiLookRight.tsx | 9 +- .../iconoir-react-native/src/EmojiLookTop.tsx | 9 +- .../iconoir-react-native/src/EmojiPuzzled.tsx | 9 +- .../iconoir-react-native/src/EmojiQuite.tsx | 9 +- .../iconoir-react-native/src/EmojiReally.tsx | 9 +- .../iconoir-react-native/src/EmojiSad.tsx | 9 +- .../src/EmojiSatisfied.tsx | 9 +- .../src/EmojiSingLeft.tsx | 9 +- .../src/EmojiSingLeftNote.tsx | 9 +- .../src/EmojiSingRight.tsx | 9 +- .../src/EmojiSingRightNote.tsx | 9 +- .../src/EmojiSurprise.tsx | 9 +- .../src/EmojiSurpriseAlt.tsx | 9 +- .../src/EmojiTalkingAngry.tsx | 9 +- .../src/EmojiTalkingHappy.tsx | 9 +- .../src/EmojiThinkLeft.tsx | 9 +- .../src/EmojiThinkRight.tsx | 9 +- .../iconoir-react-native/src/EmptyPage.tsx | 9 +- .../src/EnergyUsageWindow.tsx | 9 +- packages/iconoir-react-native/src/Enlarge.tsx | 9 +- .../src/EnlargeRoundArrow.tsx | 9 +- packages/iconoir-react-native/src/Erase.tsx | 9 +- .../iconoir-react-native/src/ErrorWindow.tsx | 9 +- packages/iconoir-react-native/src/Euro.tsx | 9 +- .../iconoir-react-native/src/EuroSquare.tsx | 9 +- .../iconoir-react-native/src/EvCharge.tsx | 9 +- .../iconoir-react-native/src/EvChargeAlt.tsx | 9 +- packages/iconoir-react-native/src/EvPlug.tsx | 9 +- .../src/EvPlugCharging.tsx | 9 +- .../iconoir-react-native/src/EvPlugError.tsx | 9 +- .../iconoir-react-native/src/EvRounded.tsx | 9 +- .../iconoir-react-native/src/EvStation.tsx | 9 +- packages/iconoir-react-native/src/Exclude.tsx | 9 +- packages/iconoir-react-native/src/Expand.tsx | 9 +- .../iconoir-react-native/src/ExpandLines.tsx | 9 +- packages/iconoir-react-native/src/EyeAlt.tsx | 9 +- .../iconoir-react-native/src/EyeClose.tsx | 9 +- .../iconoir-react-native/src/EyeEmpty.tsx | 9 +- packages/iconoir-react-native/src/EyeOff.tsx | 9 +- packages/iconoir-react-native/src/FaceId.tsx | 9 +- .../iconoir-react-native/src/Facebook.tsx | 9 +- .../src/FacebookSquared.tsx | 9 +- .../iconoir-react-native/src/Facetime.tsx | 9 +- packages/iconoir-react-native/src/Farm.tsx | 9 +- .../src/FastArrowDown.tsx | 9 +- .../src/FastArrowDownBox.tsx | 9 +- .../src/FastArrowLeft.tsx | 9 +- .../src/FastArrowLeftBox.tsx | 9 +- .../src/FastArrowRight.tsx | 9 +- .../src/FastArrowRightBox.tsx | 9 +- .../iconoir-react-native/src/FastArrowTop.tsx | 9 +- .../src/FastArrowUpBox.tsx | 9 +- .../src/FastBottomCircle.tsx | 9 +- .../src/FastLeftCircle.tsx | 9 +- .../src/FastRightCircle.tsx | 9 +- .../src/FastTopCircle.tsx | 9 +- .../src/FavouriteBook.tsx | 9 +- .../src/FavouriteWindow.tsx | 9 +- packages/iconoir-react-native/src/Female.tsx | 9 +- packages/iconoir-react-native/src/Figma.tsx | 9 +- .../iconoir-react-native/src/FileNotFound.tsx | 9 +- packages/iconoir-react-native/src/Filter.tsx | 9 +- .../iconoir-react-native/src/FilterAlt.tsx | 9 +- packages/iconoir-react-native/src/Finder.tsx | 9 +- .../src/FingerPrintWindow.tsx | 9 +- .../iconoir-react-native/src/Fingerprint.tsx | 9 +- .../src/FingerprintCircled.tsx | 9 +- .../src/FingerprintCircledError.tsx | 9 +- .../src/FingerprintCircledLock.tsx | 9 +- .../src/FingerprintCircledOk.tsx | 9 +- .../src/FingerprintPhone.tsx | 9 +- .../src/FingerprintScan.tsx | 9 +- .../src/FingerprintSquared.tsx | 9 +- .../iconoir-react-native/src/FireFlame.tsx | 9 +- packages/iconoir-react-native/src/Fishing.tsx | 9 +- packages/iconoir-react-native/src/Flare.tsx | 9 +- packages/iconoir-react-native/src/Flash.tsx | 9 +- .../iconoir-react-native/src/FlashOff.tsx | 9 +- packages/iconoir-react-native/src/Flask.tsx | 9 +- packages/iconoir-react-native/src/Flip.tsx | 9 +- .../iconoir-react-native/src/FlipReverse.tsx | 9 +- packages/iconoir-react-native/src/Flower.tsx | 9 +- .../iconoir-react-native/src/Fluorine.tsx | 9 +- packages/iconoir-react-native/src/Fog.tsx | 9 +- packages/iconoir-react-native/src/Folder.tsx | 9 +- .../iconoir-react-native/src/FolderAlert.tsx | 9 +- .../src/FolderSettings.tsx | 9 +- .../iconoir-react-native/src/FontSize.tsx | 9 +- .../iconoir-react-native/src/Football.tsx | 9 +- .../iconoir-react-native/src/FootballBall.tsx | 9 +- .../src/Forward15Seconds.tsx | 9 +- .../src/ForwardOutline.tsx | 9 +- packages/iconoir-react-native/src/Frame.tsx | 11 +- .../iconoir-react-native/src/FrameAlt.tsx | 9 +- .../src/FrameAltEmpty.tsx | 9 +- .../iconoir-react-native/src/FrameSelect.tsx | 9 +- .../iconoir-react-native/src/FrameSimple.tsx | 9 +- .../iconoir-react-native/src/FrameTool.tsx | 9 +- packages/iconoir-react-native/src/Fridge.tsx | 9 +- packages/iconoir-react-native/src/Fx.tsx | 12 +- .../iconoir-react-native/src/FxRounded.tsx | 9 +- packages/iconoir-react-native/src/Gamepad.tsx | 9 +- packages/iconoir-react-native/src/Garage.tsx | 9 +- packages/iconoir-react-native/src/Gas.tsx | 9 +- packages/iconoir-react-native/src/GasTank.tsx | 11 +- .../iconoir-react-native/src/GasTankDrop.tsx | 10 +- packages/iconoir-react-native/src/Gift.tsx | 9 +- .../iconoir-react-native/src/GitBranch.tsx | 9 +- .../iconoir-react-native/src/GitCommand.tsx | 9 +- .../iconoir-react-native/src/GitCommit.tsx | 9 +- .../iconoir-react-native/src/GitCompare.tsx | 9 +- packages/iconoir-react-native/src/GitFork.tsx | 9 +- packages/iconoir-react-native/src/GitHub.tsx | 9 +- .../src/GitHubOutline.tsx | 9 +- .../iconoir-react-native/src/GitLabFull.tsx | 9 +- .../iconoir-react-native/src/GitMerge.tsx | 9 +- .../src/GitPullRequest.tsx | 9 +- .../iconoir-react-native/src/GlassEmpty.tsx | 9 +- .../iconoir-react-native/src/GlassHalf.tsx | 9 +- .../iconoir-react-native/src/GlassHalfAlt.tsx | 9 +- packages/iconoir-react-native/src/Glasses.tsx | 9 +- packages/iconoir-react-native/src/Globe.tsx | 9 +- packages/iconoir-react-native/src/Golf.tsx | 9 +- packages/iconoir-react-native/src/Google.tsx | 9 +- .../src/GoogleCircled.tsx | 9 +- .../iconoir-react-native/src/GoogleDocs.tsx | 9 +- .../iconoir-react-native/src/GoogleDrive.tsx | 9 +- .../src/GoogleDriveCheck.tsx | 9 +- .../src/GoogleDriveSync.tsx | 9 +- .../src/GoogleDriveWarning.tsx | 9 +- .../iconoir-react-native/src/GoogleHome.tsx | 9 +- .../iconoir-react-native/src/GoogleOne.tsx | 9 +- packages/iconoir-react-native/src/Gps.tsx | 9 +- .../iconoir-react-native/src/GraphDown.tsx | 9 +- packages/iconoir-react-native/src/GraphUp.tsx | 9 +- .../iconoir-react-native/src/GreenBus.tsx | 9 +- .../iconoir-react-native/src/GreenTruck.tsx | 9 +- .../iconoir-react-native/src/GreenVehicle.tsx | 9 +- packages/iconoir-react-native/src/GridAdd.tsx | 9 +- .../iconoir-react-native/src/GridMinus.tsx | 9 +- .../iconoir-react-native/src/GridRemove.tsx | 9 +- packages/iconoir-react-native/src/Group.tsx | 9 +- packages/iconoir-react-native/src/Gym.tsx | 9 +- .../iconoir-react-native/src/HalfCookie.tsx | 9 +- .../iconoir-react-native/src/HalfMoon.tsx | 9 +- .../iconoir-react-native/src/HandBrake.tsx | 9 +- packages/iconoir-react-native/src/Handbag.tsx | 9 +- .../iconoir-react-native/src/HardDrive.tsx | 9 +- packages/iconoir-react-native/src/Hat.tsx | 9 +- packages/iconoir-react-native/src/Hd.tsx | 12 +- .../iconoir-react-native/src/HdDisplay.tsx | 9 +- packages/iconoir-react-native/src/Hdr.tsx | 9 +- packages/iconoir-react-native/src/Headset.tsx | 9 +- .../src/HeadsetCharge.tsx | 9 +- .../iconoir-react-native/src/HeadsetHelp.tsx | 9 +- .../iconoir-react-native/src/HeadsetIssue.tsx | 9 +- .../iconoir-react-native/src/HealthShield.tsx | 9 +- .../iconoir-react-native/src/Healthcare.tsx | 9 +- packages/iconoir-react-native/src/Heart.tsx | 9 +- .../iconoir-react-native/src/HeavyRain.tsx | 9 +- .../iconoir-react-native/src/Heptagon.tsx | 9 +- .../iconoir-react-native/src/HerSlips.tsx | 9 +- .../src/HesaWarningOutline.tsx | 9 +- packages/iconoir-react-native/src/Hexagon.tsx | 9 +- .../iconoir-react-native/src/HexagonAlt.tsx | 9 +- .../iconoir-react-native/src/HexagonDice.tsx | 9 +- .../iconoir-react-native/src/HighPriority.tsx | 9 +- .../src/HistoricShield.tsx | 9 +- .../src/HistoricShieldAlt.tsx | 9 +- packages/iconoir-react-native/src/Home.tsx | 9 +- packages/iconoir-react-native/src/HomeAlt.tsx | 9 +- .../iconoir-react-native/src/HomeAltSlim.tsx | 9 +- .../src/HomeAltSlimHoriz.tsx | 9 +- .../iconoir-react-native/src/HomeHospital.tsx | 9 +- .../iconoir-react-native/src/HomeSale.tsx | 9 +- .../iconoir-react-native/src/HomeSecure.tsx | 9 +- .../iconoir-react-native/src/HomeShield.tsx | 9 +- .../iconoir-react-native/src/HomeSimple.tsx | 9 +- .../src/HomeSimpleDoor.tsx | 9 +- .../iconoir-react-native/src/HomeTable.tsx | 9 +- .../iconoir-react-native/src/HomeUser.tsx | 9 +- .../src/HorizDistributionLeft.tsx | 9 +- .../src/HorizDistributionRight.tsx | 9 +- .../iconoir-react-native/src/Hospital.tsx | 9 +- .../iconoir-react-native/src/HospitalSign.tsx | 9 +- .../src/HotAirBalloon.tsx | 9 +- .../iconoir-react-native/src/Hourglass.tsx | 9 +- packages/iconoir-react-native/src/Html5.tsx | 9 +- .../iconoir-react-native/src/Hydrogen.tsx | 9 +- packages/iconoir-react-native/src/Iconoir.tsx | 9 +- .../src/IconoirContext.tsx | 13 + packages/iconoir-react-native/src/Import.tsx | 9 +- .../iconoir-react-native/src/Industry.tsx | 9 +- .../iconoir-react-native/src/Infinite.tsx | 9 +- .../iconoir-react-native/src/InfoEmpty.tsx | 9 +- .../iconoir-react-native/src/InputField.tsx | 9 +- .../iconoir-react-native/src/InputOutput.tsx | 9 +- .../iconoir-react-native/src/InputSearch.tsx | 9 +- .../iconoir-react-native/src/Instagram.tsx | 9 +- .../iconoir-react-native/src/Internet.tsx | 9 +- .../iconoir-react-native/src/Intersect.tsx | 9 +- .../iconoir-react-native/src/IntersectAlt.tsx | 9 +- .../iconoir-react-native/src/IosSettings.tsx | 9 +- .../iconoir-react-native/src/IpAddress.tsx | 9 +- .../iconoir-react-native/src/IrisScan.tsx | 9 +- packages/iconoir-react-native/src/Italic.tsx | 9 +- .../src/ItalicSquareOutline.tsx | 9 +- packages/iconoir-react-native/src/Journal.tsx | 9 +- .../iconoir-react-native/src/JournalPage.tsx | 9 +- .../iconoir-react-native/src/KanbanBoard.tsx | 9 +- packages/iconoir-react-native/src/KeyAlt.tsx | 9 +- .../iconoir-react-native/src/KeyAltBack.tsx | 9 +- .../iconoir-react-native/src/KeyAltMinus.tsx | 9 +- .../iconoir-react-native/src/KeyAltPlus.tsx | 9 +- .../iconoir-react-native/src/KeyAltRemove.tsx | 9 +- .../iconoir-react-native/src/Keyframe.tsx | 9 +- .../src/KeyframeAlignCenter.tsx | 9 +- .../src/KeyframeAlignHorizontal.tsx | 9 +- .../src/KeyframeAlignVertical.tsx | 9 +- .../src/KeyframePosition.tsx | 9 +- .../iconoir-react-native/src/Keyframes.tsx | 9 +- .../src/KeyframesCouple.tsx | 9 +- .../iconoir-react-native/src/LabelOutline.tsx | 9 +- packages/iconoir-react-native/src/Lamp.tsx | 9 +- .../iconoir-react-native/src/Language.tsx | 9 +- packages/iconoir-react-native/src/Laptop.tsx | 9 +- .../src/LaptopCharging.tsx | 9 +- .../iconoir-react-native/src/LaptopFix.tsx | 9 +- .../iconoir-react-native/src/LaptopIssue.tsx | 9 +- .../src/LargeSuitcase.tsx | 9 +- .../iconoir-react-native/src/LayoutLeft.tsx | 9 +- .../iconoir-react-native/src/LayoutRight.tsx | 9 +- .../iconoir-react-native/src/Leaderboard.tsx | 9 +- .../src/LeaderboardStar.tsx | 9 +- packages/iconoir-react-native/src/Leaf.tsx | 9 +- .../src/LeftRoundArrow.tsx | 9 +- packages/iconoir-react-native/src/Lens.tsx | 9 +- .../iconoir-react-native/src/Lifebelt.tsx | 9 +- .../iconoir-react-native/src/LightBulb.tsx | 9 +- .../iconoir-react-native/src/LightBulbOff.tsx | 9 +- .../iconoir-react-native/src/LightBulbOn.tsx | 9 +- .../iconoir-react-native/src/LineSpace.tsx | 9 +- packages/iconoir-react-native/src/Linear.tsx | 9 +- packages/iconoir-react-native/src/Link.tsx | 9 +- .../iconoir-react-native/src/LinkedIn.tsx | 9 +- packages/iconoir-react-native/src/Linux.tsx | 9 +- packages/iconoir-react-native/src/List.tsx | 9 +- .../src/LoadActionFloppy.tsx | 9 +- packages/iconoir-react-native/src/Lock.tsx | 9 +- packages/iconoir-react-native/src/LockKey.tsx | 9 +- .../iconoir-react-native/src/LockedBook.tsx | 9 +- .../iconoir-react-native/src/LockedWindow.tsx | 9 +- .../iconoir-react-native/src/LogDenied.tsx | 9 +- packages/iconoir-react-native/src/LogIn.tsx | 9 +- packages/iconoir-react-native/src/LogOut.tsx | 9 +- .../src/LongArrowDownLeft.tsx | 9 +- .../src/LongArrowDownRight.tsx | 9 +- .../src/LongArrowLeftDown.tsx | 9 +- .../src/LongArrowLeftUp.tsx | 9 +- .../src/LongArrowRightDown.tsx | 9 +- .../src/LongArrowRightUp.tsx | 9 +- .../src/LongArrowRightUp1.tsx | 9 +- .../src/LongArrowUpLeft.tsx | 9 +- .../src/LongArrowUpRight.tsx | 9 +- .../iconoir-react-native/src/LotOfCash.tsx | 9 +- .../src/MacControlKey.tsx | 9 +- packages/iconoir-react-native/src/MacDock.tsx | 9 +- .../iconoir-react-native/src/MacOptionKey.tsx | 9 +- .../iconoir-react-native/src/MacOsWindow.tsx | 9 +- packages/iconoir-react-native/src/Magnet.tsx | 9 +- .../iconoir-react-native/src/MagnetEnergy.tsx | 9 +- packages/iconoir-react-native/src/Mail.tsx | 9 +- .../iconoir-react-native/src/MailOpened.tsx | 9 +- packages/iconoir-react-native/src/Male.tsx | 9 +- packages/iconoir-react-native/src/Map.tsx | 9 +- .../iconoir-react-native/src/MapIssue.tsx | 9 +- .../iconoir-react-native/src/MapsArrow.tsx | 9 +- .../src/MapsArrowDiagonal.tsx | 9 +- .../src/MapsArrowIssue.tsx | 9 +- .../src/MapsGoStraight.tsx | 9 +- .../iconoir-react-native/src/MapsTurnBack.tsx | 9 +- .../iconoir-react-native/src/MapsTurnLeft.tsx | 9 +- .../src/MapsTurnRight.tsx | 9 +- .../iconoir-react-native/src/MaskSquare.tsx | 9 +- .../iconoir-react-native/src/MathBook.tsx | 9 +- .../iconoir-react-native/src/Maximize.tsx | 9 +- packages/iconoir-react-native/src/Medal.tsx | 9 +- .../iconoir-react-native/src/Medal1St.tsx | 9 +- .../iconoir-react-native/src/MediaImage.tsx | 9 +- .../src/MediaImageFolder.tsx | 9 +- .../src/MediaImageList.tsx | 9 +- .../iconoir-react-native/src/MediaVideo.tsx | 9 +- .../src/MediaVideoFolder.tsx | 9 +- .../src/MediaVideoList.tsx | 9 +- packages/iconoir-react-native/src/Medium.tsx | 9 +- .../iconoir-react-native/src/Megaphone.tsx | 9 +- packages/iconoir-react-native/src/Menu.tsx | 9 +- .../iconoir-react-native/src/MenuScale.tsx | 9 +- packages/iconoir-react-native/src/Message.tsx | 9 +- .../iconoir-react-native/src/MessageAlert.tsx | 9 +- .../iconoir-react-native/src/MessageText.tsx | 9 +- packages/iconoir-react-native/src/Metro.tsx | 9 +- packages/iconoir-react-native/src/Mic.tsx | 9 +- packages/iconoir-react-native/src/MicAdd.tsx | 9 +- .../iconoir-react-native/src/MicCheck.tsx | 9 +- packages/iconoir-react-native/src/MicMute.tsx | 9 +- .../iconoir-react-native/src/MicRemove.tsx | 9 +- .../iconoir-react-native/src/MicSpeaking.tsx | 9 +- .../iconoir-react-native/src/MicWarning.tsx | 9 +- packages/iconoir-react-native/src/Minus.tsx | 9 +- packages/iconoir-react-native/src/Minus1.tsx | 9 +- .../iconoir-react-native/src/MinusHexagon.tsx | 9 +- .../iconoir-react-native/src/MinusPinAlt.tsx | 9 +- .../iconoir-react-native/src/MinusSquare.tsx | 9 +- packages/iconoir-react-native/src/Mirror.tsx | 9 +- .../iconoir-react-native/src/MissingFont.tsx | 9 +- .../iconoir-react-native/src/ModernTv.tsx | 9 +- .../iconoir-react-native/src/ModernTv4K.tsx | 9 +- .../iconoir-react-native/src/MoneySquare.tsx | 9 +- packages/iconoir-react-native/src/MoonSat.tsx | 9 +- .../iconoir-react-native/src/MoreHoriz.tsx | 9 +- .../src/MoreHorizCircledOutline.tsx | 9 +- .../iconoir-react-native/src/MoreVert.tsx | 9 +- .../src/MoreVertCircledOutline.tsx | 9 +- .../iconoir-react-native/src/Motorcycle.tsx | 9 +- .../src/MouseButtonLeft.tsx | 9 +- .../src/MouseButtonRight.tsx | 9 +- .../src/MouseScrollWheel.tsx | 9 +- .../iconoir-react-native/src/MoveDown.tsx | 9 +- .../iconoir-react-native/src/MoveLeft.tsx | 9 +- .../iconoir-react-native/src/MoveRight.tsx | 9 +- .../iconoir-react-native/src/MoveRuler.tsx | 9 +- packages/iconoir-react-native/src/MoveUp.tsx | 9 +- packages/iconoir-react-native/src/Movie.tsx | 9 +- .../iconoir-react-native/src/MultiBubble.tsx | 9 +- .../src/MultiMacOsWindow.tsx | 9 +- .../iconoir-react-native/src/MultiWindow.tsx | 9 +- .../src/MultiplePages.tsx | 9 +- .../src/MultiplePagesAdd.tsx | 9 +- .../src/MultiplePagesDelete.tsx | 9 +- .../src/MultiplePagesEmpty.tsx | 9 +- .../src/MultiplePagesRemove.tsx | 9 +- packages/iconoir-react-native/src/Music1.tsx | 9 +- .../iconoir-react-native/src/Music1Add.tsx | 9 +- packages/iconoir-react-native/src/Music2.tsx | 9 +- .../iconoir-react-native/src/Music2Add.tsx | 9 +- .../iconoir-react-native/src/NavArrowDown.tsx | 9 +- .../iconoir-react-native/src/NavArrowLeft.tsx | 9 +- .../src/NavArrowRight.tsx | 9 +- .../iconoir-react-native/src/NavArrowUp.tsx | 9 +- .../iconoir-react-native/src/Navigator.tsx | 9 +- .../iconoir-react-native/src/NavigatorAlt.tsx | 9 +- packages/iconoir-react-native/src/Network.tsx | 9 +- .../iconoir-react-native/src/NetworkAlt.tsx | 9 +- .../iconoir-react-native/src/NetworkLeft.tsx | 9 +- .../iconoir-react-native/src/NetworkRight.tsx | 9 +- packages/iconoir-react-native/src/NewTab.tsx | 9 +- .../src/NintendoSwitch.tsx | 9 +- .../iconoir-react-native/src/Nitrogen.tsx | 9 +- .../src/NoAccessWindow.tsx | 9 +- .../iconoir-react-native/src/NoBattery.tsx | 9 +- packages/iconoir-react-native/src/NoCoin.tsx | 9 +- .../iconoir-react-native/src/NoCreditCard.tsx | 9 +- packages/iconoir-react-native/src/NoLink.tsx | 9 +- packages/iconoir-react-native/src/NoLock.tsx | 9 +- .../iconoir-react-native/src/NoSmoking.tsx | 9 +- .../src/NoSmokingCircled.tsx | 9 +- packages/iconoir-react-native/src/Notes.tsx | 9 +- .../src/NumberedListLeft.tsx | 9 +- .../src/NumberedListRight.tsx | 9 +- packages/iconoir-react-native/src/Octagon.tsx | 9 +- .../iconoir-react-native/src/OffRounded.tsx | 9 +- .../iconoir-react-native/src/OilIndustry.tsx | 9 +- .../iconoir-react-native/src/OnRounded.tsx | 9 +- .../src/OneFingerSelectHandGesture.tsx | 9 +- .../src/OnePointCircle.tsx | 9 +- .../iconoir-react-native/src/OpenBook.tsx | 9 +- .../src/OpenInBrowser.tsx | 9 +- .../iconoir-react-native/src/OpenInWindow.tsx | 9 +- .../src/OpenNewWindow.tsx | 9 +- .../src/OpenSelectHandGesture.tsx | 9 +- packages/iconoir-react-native/src/OpenVpn.tsx | 9 +- .../iconoir-react-native/src/OrangeHalf.tsx | 9 +- .../iconoir-react-native/src/OrangeSlice.tsx | 9 +- .../src/OrangeSliceAlt.tsx | 9 +- .../iconoir-react-native/src/OrganicFood.tsx | 9 +- .../src/OrganicFoodSquared.tsx | 9 +- .../src/OrthogonalView.tsx | 9 +- packages/iconoir-react-native/src/Oxygen.tsx | 9 +- packages/iconoir-react-native/src/Package.tsx | 9 +- .../iconoir-react-native/src/PackageLock.tsx | 9 +- .../iconoir-react-native/src/Packages.tsx | 9 +- packages/iconoir-react-native/src/Pacman.tsx | 9 +- packages/iconoir-react-native/src/Page.tsx | 9 +- .../iconoir-react-native/src/PageEdit.tsx | 9 +- .../iconoir-react-native/src/PageFlip.tsx | 9 +- .../iconoir-react-native/src/PageSearch.tsx | 9 +- .../iconoir-react-native/src/PageStar.tsx | 9 +- packages/iconoir-react-native/src/Palette.tsx | 9 +- .../src/PanoramaEnlarge.tsx | 9 +- .../src/PanoramaReduce.tsx | 9 +- packages/iconoir-react-native/src/Pants.tsx | 9 +- .../iconoir-react-native/src/PantsAlt.tsx | 9 +- packages/iconoir-react-native/src/Parking.tsx | 9 +- .../src/PasswordCursor.tsx | 9 +- .../src/PasswordError.tsx | 9 +- .../iconoir-react-native/src/PasswordPass.tsx | 9 +- .../src/PasteClipboard.tsx | 9 +- .../iconoir-react-native/src/PauseOutline.tsx | 9 +- .../iconoir-react-native/src/PauseWindow.tsx | 9 +- packages/iconoir-react-native/src/PcCheck.tsx | 9 +- .../iconoir-react-native/src/PcFirewall.tsx | 9 +- packages/iconoir-react-native/src/PcMouse.tsx | 9 +- .../iconoir-react-native/src/PcNoEntry.tsx | 9 +- .../iconoir-react-native/src/PcWarning.tsx | 9 +- .../iconoir-react-native/src/PeaceHand.tsx | 9 +- .../src/PenConnectBluetooth.tsx | 9 +- .../src/PenConnectWifi.tsx | 9 +- .../iconoir-react-native/src/PenTablet.tsx | 9 +- .../src/PenTabletConnectUsb.tsx | 9 +- .../src/PenTabletConnectWifi.tsx | 9 +- .../iconoir-react-native/src/Pentagon.tsx | 9 +- .../src/PeopleRounded.tsx | 9 +- .../iconoir-react-native/src/Percentage.tsx | 9 +- .../src/PercentageRound.tsx | 9 +- .../src/PercentageSquare.tsx | 9 +- .../src/PerspectiveView.tsx | 9 +- .../src/PharmacyCircledCross.tsx | 9 +- .../src/PharmacySquaredCross.tsx | 9 +- packages/iconoir-react-native/src/Phone.tsx | 9 +- .../iconoir-react-native/src/PhoneAdd.tsx | 9 +- .../iconoir-react-native/src/PhoneDelete.tsx | 9 +- .../src/PhoneDisabled.tsx | 9 +- .../iconoir-react-native/src/PhoneIncome.tsx | 9 +- .../iconoir-react-native/src/PhoneOutcome.tsx | 9 +- .../iconoir-react-native/src/PhonePaused.tsx | 9 +- .../iconoir-react-native/src/PhoneRemove.tsx | 9 +- .../iconoir-react-native/src/PiggyBank.tsx | 9 +- packages/iconoir-react-native/src/Pillow.tsx | 9 +- packages/iconoir-react-native/src/Pin.tsx | 9 +- packages/iconoir-react-native/src/PinAlt.tsx | 9 +- .../iconoir-react-native/src/PineTree.tsx | 9 +- .../iconoir-react-native/src/Pinterest.tsx | 9 +- .../iconoir-react-native/src/PizzaSlice.tsx | 9 +- packages/iconoir-react-native/src/Planet.tsx | 9 +- .../iconoir-react-native/src/PlanetAlt.tsx | 9 +- .../iconoir-react-native/src/PlanetSat.tsx | 9 +- .../iconoir-react-native/src/PlayOutline.tsx | 9 +- .../iconoir-react-native/src/Playlist.tsx | 9 +- .../iconoir-react-native/src/PlaylistAdd.tsx | 9 +- .../iconoir-react-native/src/PlaylistPlay.tsx | 9 +- .../src/PlaystationGamepad.tsx | 9 +- .../iconoir-react-native/src/PlugTypeA.tsx | 9 +- .../iconoir-react-native/src/PlugTypeC.tsx | 9 +- .../iconoir-react-native/src/PlugTypeG.tsx | 9 +- .../iconoir-react-native/src/PlugTypeL.tsx | 9 +- packages/iconoir-react-native/src/Plus.tsx | 9 +- packages/iconoir-react-native/src/Pocket.tsx | 9 +- packages/iconoir-react-native/src/Podcast.tsx | 9 +- .../iconoir-react-native/src/Pokeball.tsx | 9 +- .../iconoir-react-native/src/Position.tsx | 9 +- .../src/PositionAlign.tsx | 9 +- packages/iconoir-react-native/src/Potion.tsx | 9 +- packages/iconoir-react-native/src/Pound.tsx | 9 +- .../src/PrecisionTool.tsx | 9 +- packages/iconoir-react-native/src/Printer.tsx | 9 +- .../iconoir-react-native/src/PrinterAlt.tsx | 9 +- .../iconoir-react-native/src/PrintingPage.tsx | 9 +- .../iconoir-react-native/src/PriorityDown.tsx | 9 +- .../iconoir-react-native/src/PriorityUp.tsx | 9 +- .../iconoir-react-native/src/PrivateWifi.tsx | 9 +- .../src/ProfileCircled.tsx | 9 +- .../iconoir-react-native/src/Prohibition.tsx | 9 +- packages/iconoir-react-native/src/Puzzle.tsx | 9 +- packages/iconoir-react-native/src/QrCode.tsx | 9 +- .../iconoir-react-native/src/QuestionMark.tsx | 9 +- .../src/QuestionMarkCircle.tsx | 9 +- .../src/QuestionSquareOutline.tsx | 9 +- packages/iconoir-react-native/src/Quote.tsx | 9 +- .../iconoir-react-native/src/QuoteMessage.tsx | 9 +- packages/iconoir-react-native/src/Rain.tsx | 9 +- .../src/ReceiveDollars.tsx | 9 +- .../iconoir-react-native/src/ReceiveEuros.tsx | 9 +- .../src/ReceivePounds.tsx | 9 +- .../iconoir-react-native/src/ReceiveYens.tsx | 9 +- packages/iconoir-react-native/src/Redo.tsx | 9 +- .../iconoir-react-native/src/RedoAction.tsx | 9 +- .../iconoir-react-native/src/RedoCircle.tsx | 9 +- packages/iconoir-react-native/src/Reduce.tsx | 9 +- .../src/ReduceRoundArrow.tsx | 9 +- packages/iconoir-react-native/src/Refresh.tsx | 9 +- .../src/RefreshCircular.tsx | 9 +- .../src/RefreshDouble.tsx | 9 +- .../iconoir-react-native/src/ReloadWindow.tsx | 9 +- .../src/ReminderHandGesture.tsx | 9 +- .../src/RemoveDatabaseScript.tsx | 9 +- .../iconoir-react-native/src/RemoveEmpty.tsx | 9 +- .../iconoir-react-native/src/RemoveFolder.tsx | 9 +- .../iconoir-react-native/src/RemoveFrame.tsx | 9 +- .../src/RemoveFromCart.tsx | 9 +- .../src/RemoveKeyframe.tsx | 9 +- .../src/RemoveKeyframeAlt.tsx | 9 +- .../src/RemoveKeyframes.tsx | 9 +- .../iconoir-react-native/src/RemoveLink.tsx | 9 +- .../src/RemoveMediaImage.tsx | 9 +- .../src/RemoveMediaVideo.tsx | 9 +- .../iconoir-react-native/src/RemovePage.tsx | 9 +- .../iconoir-react-native/src/RemovePin.tsx | 9 +- .../iconoir-react-native/src/RemovePinAlt.tsx | 9 +- .../src/RemoveSelection.tsx | 9 +- .../iconoir-react-native/src/RemoveSquare.tsx | 9 +- .../iconoir-react-native/src/RemoveUser.tsx | 9 +- packages/iconoir-react-native/src/Repeat.tsx | 9 +- .../iconoir-react-native/src/RepeatOnce.tsx | 9 +- .../src/ReportColumns.tsx | 9 +- packages/iconoir-react-native/src/Reports.tsx | 9 +- .../iconoir-react-native/src/Repository.tsx | 9 +- packages/iconoir-react-native/src/Restart.tsx | 9 +- .../src/RewindOutline.tsx | 9 +- packages/iconoir-react-native/src/Rhombus.tsx | 9 +- .../src/RightRoundArrow.tsx | 9 +- packages/iconoir-react-native/src/Rings.tsx | 9 +- packages/iconoir-react-native/src/Rocket.tsx | 9 +- packages/iconoir-react-native/src/Rook.tsx | 9 +- .../src/RotateCameraLeft.tsx | 9 +- .../src/RotateCameraRight.tsx | 9 +- .../iconoir-react-native/src/RoundFlask.tsx | 9 +- .../src/RoundedMirror.tsx | 9 +- packages/iconoir-react-native/src/RssFeed.tsx | 9 +- .../src/RssFeedSquared.tsx | 9 +- packages/iconoir-react-native/src/Ruler.tsx | 9 +- .../iconoir-react-native/src/RulerAdd.tsx | 9 +- .../iconoir-react-native/src/RulerCombine.tsx | 9 +- .../iconoir-react-native/src/RulerRemove.tsx | 9 +- packages/iconoir-react-native/src/Running.tsx | 9 +- packages/iconoir-react-native/src/Safari.tsx | 9 +- packages/iconoir-react-native/src/Sandals.tsx | 9 +- .../src/SaveActionFloppy.tsx | 9 +- .../src/SaveFloppyDisk.tsx | 9 +- .../src/ScaleFrameEnlarge.tsx | 9 +- .../src/ScaleFrameReduce.tsx | 10 +- .../iconoir-react-native/src/ScanBarcode.tsx | 9 +- .../iconoir-react-native/src/ScanQrCode.tsx | 9 +- .../iconoir-react-native/src/Scanning.tsx | 9 +- packages/iconoir-react-native/src/Scarf.tsx | 9 +- packages/iconoir-react-native/src/Scissor.tsx | 9 +- .../iconoir-react-native/src/ScissorAlt.tsx | 9 +- .../iconoir-react-native/src/SeaAndSun.tsx | 9 +- .../iconoir-react-native/src/SeaWaves.tsx | 9 +- packages/iconoir-react-native/src/Search.tsx | 9 +- .../iconoir-react-native/src/SearchEngine.tsx | 9 +- .../iconoir-react-native/src/SearchFont.tsx | 9 +- .../iconoir-react-native/src/SearchWindow.tsx | 9 +- .../iconoir-react-native/src/SecureWindow.tsx | 9 +- .../iconoir-react-native/src/SecurityPass.tsx | 9 +- .../iconoir-react-native/src/SelectWindow.tsx | 9 +- .../iconoir-react-native/src/Selection.tsx | 9 +- .../src/SelectiveTool.tsx | 9 +- .../iconoir-react-native/src/SendDollars.tsx | 9 +- .../iconoir-react-native/src/SendEuros.tsx | 9 +- .../iconoir-react-native/src/SendPounds.tsx | 9 +- .../iconoir-react-native/src/SendYens.tsx | 9 +- packages/iconoir-react-native/src/Server.tsx | 9 +- .../src/ServerConnection.tsx | 9 +- .../iconoir-react-native/src/Settings.tsx | 9 +- .../src/SettingsCloud.tsx | 9 +- .../src/SettingsProfiles.tsx | 9 +- .../iconoir-react-native/src/ShareAndroid.tsx | 9 +- .../iconoir-react-native/src/ShareIos.tsx | 9 +- packages/iconoir-react-native/src/Shield.tsx | 9 +- .../iconoir-react-native/src/ShieldAdd.tsx | 9 +- .../iconoir-react-native/src/ShieldAlert.tsx | 9 +- .../iconoir-react-native/src/ShieldAlt.tsx | 9 +- .../iconoir-react-native/src/ShieldBroken.tsx | 9 +- .../iconoir-react-native/src/ShieldCheck.tsx | 9 +- .../iconoir-react-native/src/ShieldCross.tsx | 9 +- .../src/ShieldDownload.tsx | 9 +- .../iconoir-react-native/src/ShieldEye.tsx | 9 +- .../src/ShieldLoading.tsx | 9 +- .../iconoir-react-native/src/ShieldMinus.tsx | 9 +- .../src/ShieldQuestion.tsx | 9 +- .../iconoir-react-native/src/ShieldSearch.tsx | 9 +- .../iconoir-react-native/src/ShieldUpload.tsx | 9 +- packages/iconoir-react-native/src/Shop.tsx | 9 +- packages/iconoir-react-native/src/ShopAlt.tsx | 9 +- .../iconoir-react-native/src/ShoppingBag.tsx | 9 +- .../src/ShoppingBagAdd.tsx | 9 +- .../src/ShoppingBagAlt.tsx | 9 +- .../src/ShoppingBagArrowDown.tsx | 9 +- .../src/ShoppingBagArrowUp.tsx | 9 +- .../src/ShoppingBagCheck.tsx | 9 +- .../src/ShoppingBagIssue.tsx | 9 +- .../src/ShoppingBagRemove.tsx | 9 +- .../iconoir-react-native/src/ShoppingCode.tsx | 9 +- .../src/ShoppingCodeCheck.tsx | 9 +- .../src/ShoppingCodeError.tsx | 9 +- .../iconoir-react-native/src/ShortPants.tsx | 9 +- .../src/ShortPantsAlt.tsx | 9 +- packages/iconoir-react-native/src/Shuffle.tsx | 9 +- .../src/SidebarCollapse.tsx | 9 +- .../src/SidebarExpand.tsx | 9 +- .../src/SigmaFunction.tsx | 9 +- .../iconoir-react-native/src/SimpleCart.tsx | 9 +- .../src/SingleTapGesture.tsx | 9 +- .../iconoir-react-native/src/Skateboard.tsx | 9 +- .../src/Skateboarding.tsx | 9 +- .../src/SkipNextOutline.tsx | 9 +- .../src/SkipPrevOutline.tsx | 9 +- .../iconoir-react-native/src/SleeperChair.tsx | 9 +- .../iconoir-react-native/src/SmallLamp.tsx | 9 +- .../iconoir-react-native/src/SmallLampAlt.tsx | 9 +- .../iconoir-react-native/src/SmallShop.tsx | 9 +- .../iconoir-react-native/src/SmallShopAlt.tsx | 9 +- .../src/SmartphoneDevice.tsx | 9 +- packages/iconoir-react-native/src/Smoking.tsx | 9 +- .../iconoir-react-native/src/Snapchat.tsx | 9 +- packages/iconoir-react-native/src/Snow.tsx | 9 +- .../iconoir-react-native/src/SnowFlake.tsx | 9 +- packages/iconoir-react-native/src/Soap.tsx | 9 +- .../iconoir-react-native/src/SoccerBall.tsx | 9 +- packages/iconoir-react-native/src/Sofa.tsx | 9 +- packages/iconoir-react-native/src/Soil.tsx | 9 +- packages/iconoir-react-native/src/SoilAlt.tsx | 9 +- packages/iconoir-react-native/src/Sort.tsx | 9 +- .../iconoir-react-native/src/SortDown.tsx | 9 +- packages/iconoir-react-native/src/SortUp.tsx | 9 +- .../iconoir-react-native/src/SoundHigh.tsx | 9 +- .../iconoir-react-native/src/SoundLow.tsx | 9 +- .../iconoir-react-native/src/SoundMin.tsx | 9 +- .../iconoir-react-native/src/SoundOff.tsx | 9 +- packages/iconoir-react-native/src/Spades.tsx | 9 +- packages/iconoir-react-native/src/Sphere.tsx | 9 +- packages/iconoir-react-native/src/Spiral.tsx | 9 +- .../src/SpockHandGesture.tsx | 9 +- packages/iconoir-react-native/src/Square.tsx | 9 +- .../src/Stackoverflow.tsx | 9 +- .../iconoir-react-native/src/StarDashed.tsx | 9 +- .../src/StarHalfDashed.tsx | 9 +- .../iconoir-react-native/src/StarOutline.tsx | 9 +- .../iconoir-react-native/src/StatDown.tsx | 9 +- packages/iconoir-react-native/src/StatUp.tsx | 9 +- .../iconoir-react-native/src/StatsReport.tsx | 9 +- .../src/StatsSquareDown.tsx | 9 +- .../src/StatsSquareUp.tsx | 9 +- .../iconoir-react-native/src/Stretching.tsx | 9 +- .../iconoir-react-native/src/Stroller.tsx | 9 +- .../iconoir-react-native/src/StyleBorder.tsx | 11 +- .../iconoir-react-native/src/Substract.tsx | 9 +- .../iconoir-react-native/src/Suggestion.tsx | 9 +- .../iconoir-react-native/src/SunLight.tsx | 9 +- .../iconoir-react-native/src/Swimming.tsx | 9 +- .../src/SwipeDownGesture.tsx | 9 +- .../src/SwipeLeftGesture.tsx | 9 +- .../src/SwipeRightGesture.tsx | 9 +- .../src/SwipeTwoFingersDownGesture.tsx | 9 +- .../src/SwipeTwoFingersLeftGesture.tsx | 9 +- .../src/SwipeTwoFingersRightGesture.tsx | 9 +- .../src/SwipeTwoFingersUpGesture.tsx | 9 +- .../src/SwipeUpGesture.tsx | 9 +- .../src/SwitchOffOutline.tsx | 9 +- .../src/SwitchOnOutline.tsx | 9 +- .../src/SystemRestart.tsx | 9 +- .../iconoir-react-native/src/SystemShut.tsx | 9 +- packages/iconoir-react-native/src/Table.tsx | 9 +- .../src/Table2Columns.tsx | 9 +- .../iconoir-react-native/src/TableRows.tsx | 9 +- .../iconoir-react-native/src/TaskList.tsx | 9 +- .../iconoir-react-native/src/Telegram.tsx | 9 +- .../src/TelegramCircled.tsx | 9 +- .../iconoir-react-native/src/TennisBall.tsx | 9 +- .../src/TennisBallAlt.tsx | 9 +- .../src/TerminalOutline.tsx | 9 +- .../src/TerminalSimple.tsx | 9 +- .../iconoir-react-native/src/TestTube.tsx | 9 +- packages/iconoir-react-native/src/Text.tsx | 9 +- packages/iconoir-react-native/src/TextAlt.tsx | 9 +- .../iconoir-react-native/src/TextSize.tsx | 9 +- .../src/ThreePointsCircle.tsx | 9 +- .../iconoir-react-native/src/ThreeStars.tsx | 9 +- .../iconoir-react-native/src/ThumbsDown.tsx | 9 +- .../iconoir-react-native/src/ThumbsUp.tsx | 9 +- .../iconoir-react-native/src/Thunderstorm.tsx | 9 +- packages/iconoir-react-native/src/TikTok.tsx | 9 +- packages/iconoir-react-native/src/Timer.tsx | 9 +- .../iconoir-react-native/src/TimerOff.tsx | 9 +- .../iconoir-react-native/src/Tournament.tsx | 9 +- packages/iconoir-react-native/src/Tower.tsx | 9 +- .../iconoir-react-native/src/TowerCheck.tsx | 9 +- .../src/TowerNoAccess.tsx | 9 +- .../iconoir-react-native/src/TowerWarning.tsx | 9 +- .../iconoir-react-native/src/Trademark.tsx | 9 +- .../iconoir-react-native/src/TrainOutline.tsx | 9 +- packages/iconoir-react-native/src/Tram.tsx | 9 +- .../src/TransitionBottom.tsx | 9 +- .../src/TransitionLeft.tsx | 9 +- .../src/TransitionRight.tsx | 9 +- .../src/TransitionTop.tsx | 9 +- .../iconoir-react-native/src/Translate.tsx | 9 +- packages/iconoir-react-native/src/Trash.tsx | 9 +- .../iconoir-react-native/src/Treadmill.tsx | 9 +- packages/iconoir-react-native/src/Tree.tsx | 9 +- .../iconoir-react-native/src/Trekking.tsx | 9 +- packages/iconoir-react-native/src/Trello.tsx | 9 +- .../iconoir-react-native/src/Triangle.tsx | 9 +- .../iconoir-react-native/src/TriangleFlag.tsx | 9 +- .../src/TriangleFlagCircle.tsx | 9 +- .../src/TriangleFlagFull.tsx | 9 +- packages/iconoir-react-native/src/Trophy.tsx | 9 +- packages/iconoir-react-native/src/Truck.tsx | 9 +- .../iconoir-react-native/src/TruckLength.tsx | 9 +- packages/iconoir-react-native/src/Tunnel.tsx | 9 +- packages/iconoir-react-native/src/Tv.tsx | 12 +- packages/iconoir-react-native/src/TvFix.tsx | 9 +- packages/iconoir-react-native/src/TvIssue.tsx | 9 +- packages/iconoir-react-native/src/Twitter.tsx | 9 +- .../src/TwitterVerifiedBadge.tsx | 9 +- .../src/TwoPointsCircle.tsx | 9 +- .../src/TwoSeaterSofa.tsx | 9 +- packages/iconoir-react-native/src/Type.tsx | 9 +- .../iconoir-react-native/src/UmbrellaFull.tsx | 9 +- .../iconoir-react-native/src/Underline.tsx | 9 +- .../src/UnderlineSquareOutline.tsx | 9 +- packages/iconoir-react-native/src/Undo.tsx | 9 +- .../iconoir-react-native/src/UndoAction.tsx | 9 +- .../iconoir-react-native/src/UndoCircle.tsx | 9 +- packages/iconoir-react-native/src/Union.tsx | 9 +- .../iconoir-react-native/src/UnionAlt.tsx | 9 +- .../src/UnionHorizAlt.tsx | 9 +- packages/iconoir-react-native/src/Unity.tsx | 9 +- packages/iconoir-react-native/src/Unity5.tsx | 9 +- .../iconoir-react-native/src/UpRoundArrow.tsx | 9 +- packages/iconoir-react-native/src/Upload.tsx | 9 +- .../src/UploadDataWindow.tsx | 9 +- .../src/UploadSquareOutline.tsx | 9 +- packages/iconoir-react-native/src/Usb.tsx | 9 +- packages/iconoir-react-native/src/User.tsx | 9 +- packages/iconoir-react-native/src/UserBag.tsx | 9 +- .../iconoir-react-native/src/UserCart.tsx | 9 +- .../src/UserCircleAlt.tsx | 9 +- .../iconoir-react-native/src/UserScan.tsx | 9 +- .../src/UserSquareAlt.tsx | 9 +- packages/iconoir-react-native/src/Vegan.tsx | 9 +- .../iconoir-react-native/src/VeganRounded.tsx | 9 +- .../iconoir-react-native/src/VeganSquared.tsx | 9 +- .../src/VerifiedBadge.tsx | 9 +- .../iconoir-react-native/src/VerifiedUser.tsx | 9 +- .../iconoir-react-native/src/VideoCamera.tsx | 9 +- .../src/VideoCameraOff.tsx | 9 +- packages/iconoir-react-native/src/View360.tsx | 9 +- .../iconoir-react-native/src/ViewColumns2.tsx | 9 +- .../iconoir-react-native/src/ViewColumns3.tsx | 9 +- .../iconoir-react-native/src/ViewGrid.tsx | 9 +- .../src/ViewStructureDown.tsx | 9 +- .../src/ViewStructureUp.tsx | 9 +- packages/iconoir-react-native/src/Voice.tsx | 9 +- .../iconoir-react-native/src/VoiceCircled.tsx | 9 +- .../src/VoiceCircledLock.tsx | 9 +- .../iconoir-react-native/src/VoiceError.tsx | 9 +- packages/iconoir-react-native/src/VoiceOk.tsx | 9 +- .../iconoir-react-native/src/VoicePhone.tsx | 9 +- .../iconoir-react-native/src/VoiceScan.tsx | 9 +- .../iconoir-react-native/src/VoiceSquared.tsx | 9 +- .../iconoir-react-native/src/VrSymbol.tsx | 9 +- packages/iconoir-react-native/src/Waist.tsx | 9 +- packages/iconoir-react-native/src/Walking.tsx | 9 +- packages/iconoir-react-native/src/Wallet.tsx | 9 +- .../src/WarningCircledOutline.tsx | 9 +- .../src/WarningSquareOutline.tsx | 9 +- .../src/WarningTriangleOutline.tsx | 9 +- .../src/WarningWindow.tsx | 9 +- packages/iconoir-react-native/src/Wash.tsx | 9 +- .../src/WashingMachine.tsx | 9 +- .../iconoir-react-native/src/WateringSoil.tsx | 9 +- .../iconoir-react-native/src/WebWindow.tsx | 9 +- .../src/WebWindowClose.tsx | 9 +- .../src/WebWindowEnergyConsumption.tsx | 9 +- packages/iconoir-react-native/src/Weight.tsx | 9 +- .../iconoir-react-native/src/WeightAlt.tsx | 9 +- .../iconoir-react-native/src/WhiteFlag.tsx | 9 +- packages/iconoir-react-native/src/Wifi.tsx | 9 +- .../iconoir-react-native/src/WifiError.tsx | 9 +- .../iconoir-react-native/src/WifiIssue.tsx | 9 +- packages/iconoir-react-native/src/WifiOff.tsx | 9 +- .../iconoir-react-native/src/WifiRounded.tsx | 9 +- .../src/WifiSignalNone.tsx | 9 +- packages/iconoir-react-native/src/Wind.tsx | 9 +- packages/iconoir-react-native/src/Windows.tsx | 9 +- .../iconoir-react-native/src/WrapText.tsx | 9 +- .../iconoir-react-native/src/Wristwatch.tsx | 9 +- packages/iconoir-react-native/src/Www.tsx | 9 +- packages/iconoir-react-native/src/XboxA.tsx | 9 +- packages/iconoir-react-native/src/XboxB.tsx | 9 +- packages/iconoir-react-native/src/XboxX.tsx | 9 +- packages/iconoir-react-native/src/XboxY.tsx | 9 +- .../iconoir-react-native/src/XrayView.tsx | 9 +- packages/iconoir-react-native/src/Yen.tsx | 9 +- .../iconoir-react-native/src/YenSquare.tsx | 9 +- packages/iconoir-react-native/src/Yoga.tsx | 9 +- packages/iconoir-react-native/src/YouTube.tsx | 9 +- packages/iconoir-react-native/src/ZoomIn.tsx | 9 +- packages/iconoir-react-native/src/ZoomOut.tsx | 9 +- packages/iconoir-react-native/src/index.tsx | 3 +- packages/iconoir-react/.svgrrc.json | 18 + packages/iconoir-react/README.md | 32 +- packages/iconoir-react/package.json | 2 +- packages/iconoir-react/src/3DAddHole.tsx | 7 +- packages/iconoir-react/src/3DArc.tsx | 7 +- packages/iconoir-react/src/3DArcCenterPt.tsx | 7 +- packages/iconoir-react/src/3DBridge.tsx | 7 +- packages/iconoir-react/src/3DCenterBox.tsx | 7 +- packages/iconoir-react/src/3DEllipse.tsx | 7 +- .../iconoir-react/src/3DEllipseThreePts.tsx | 7 +- packages/iconoir-react/src/3DPtBox.tsx | 7 +- .../src/3DRectCornerToCorner.tsx | 7 +- .../iconoir-react/src/3DRectFromCenter.tsx | 7 +- packages/iconoir-react/src/3DRectThreePts.tsx | 7 +- packages/iconoir-react/src/3DSelectEdge.tsx | 7 +- packages/iconoir-react/src/3DSelectFace.tsx | 7 +- packages/iconoir-react/src/3DSelectPoint.tsx | 7 +- packages/iconoir-react/src/3DSelectSolid.tsx | 7 +- packages/iconoir-react/src/3DThreePtsBox.tsx | 7 +- packages/iconoir-react/src/Accessibility.tsx | 7 +- .../iconoir-react/src/AccessibilitySign.tsx | 7 +- .../iconoir-react/src/AccessibilityTech.tsx | 7 +- packages/iconoir-react/src/Activity.tsx | 7 +- .../iconoir-react/src/AddCircledOutline.tsx | 7 +- .../iconoir-react/src/AddDatabaseScript.tsx | 7 +- packages/iconoir-react/src/AddFolder.tsx | 7 +- packages/iconoir-react/src/AddFrame.tsx | 7 +- packages/iconoir-react/src/AddHexagon.tsx | 7 +- packages/iconoir-react/src/AddKeyframe.tsx | 7 +- packages/iconoir-react/src/AddKeyframeAlt.tsx | 7 +- packages/iconoir-react/src/AddKeyframes.tsx | 7 +- packages/iconoir-react/src/AddLens.tsx | 7 +- packages/iconoir-react/src/AddMediaImage.tsx | 7 +- packages/iconoir-react/src/AddMediaVideo.tsx | 7 +- packages/iconoir-react/src/AddPage.tsx | 7 +- packages/iconoir-react/src/AddPinAlt.tsx | 7 +- packages/iconoir-react/src/AddSelection.tsx | 7 +- packages/iconoir-react/src/AddSquare.tsx | 7 +- packages/iconoir-react/src/AddToCart.tsx | 7 +- packages/iconoir-react/src/AddUser.tsx | 7 +- packages/iconoir-react/src/AfricanTree.tsx | 7 +- packages/iconoir-react/src/AirConditioner.tsx | 7 +- packages/iconoir-react/src/Airplane.tsx | 7 +- packages/iconoir-react/src/AirplaneHelix.tsx | 7 +- .../iconoir-react/src/AirplaneHelix45Deg.tsx | 7 +- packages/iconoir-react/src/AirplaneOff.tsx | 7 +- .../iconoir-react/src/AirplaneRotation.tsx | 8 +- packages/iconoir-react/src/Airplay.tsx | 7 +- packages/iconoir-react/src/Alarm.tsx | 7 +- packages/iconoir-react/src/Album.tsx | 7 +- packages/iconoir-react/src/AlbumCarousel.tsx | 7 +- packages/iconoir-react/src/AlbumList.tsx | 7 +- packages/iconoir-react/src/AlbumOpen.tsx | 7 +- packages/iconoir-react/src/AlignBottomBox.tsx | 7 +- packages/iconoir-react/src/AlignCenter.tsx | 7 +- packages/iconoir-react/src/AlignJustify.tsx | 7 +- packages/iconoir-react/src/AlignLeft.tsx | 7 +- packages/iconoir-react/src/AlignLeftBox.tsx | 7 +- packages/iconoir-react/src/AlignRight.tsx | 7 +- packages/iconoir-react/src/AlignRightBox.tsx | 7 +- packages/iconoir-react/src/AlignTopBox.tsx | 7 +- packages/iconoir-react/src/Antenna.tsx | 7 +- packages/iconoir-react/src/AntennaOff.tsx | 7 +- packages/iconoir-react/src/AntennaSignal.tsx | 7 +- .../src/AntennaSignalRounded.tsx | 7 +- .../iconoir-react/src/AppNotification.tsx | 7 +- packages/iconoir-react/src/AppWindow.tsx | 7 +- packages/iconoir-react/src/Apple.tsx | 7 +- packages/iconoir-react/src/AppleHalf.tsx | 7 +- packages/iconoir-react/src/AppleHalfAlt.tsx | 7 +- packages/iconoir-react/src/AppleImac2021.tsx | 7 +- .../iconoir-react/src/AppleImac2021Side.tsx | 7 +- packages/iconoir-react/src/AppleMac.tsx | 7 +- packages/iconoir-react/src/AppleSwift.tsx | 7 +- packages/iconoir-react/src/AppleWallet.tsx | 7 +- packages/iconoir-react/src/ArSymbol.tsx | 7 +- packages/iconoir-react/src/Arcade.tsx | 7 +- packages/iconoir-react/src/Archery.tsx | 7 +- packages/iconoir-react/src/ArcheryMatch.tsx | 7 +- packages/iconoir-react/src/Archive.tsx | 7 +- packages/iconoir-react/src/AreaSearch.tsx | 7 +- packages/iconoir-react/src/ArrowArchery.tsx | 7 +- packages/iconoir-react/src/ArrowDown.tsx | 7 +- .../iconoir-react/src/ArrowDownCircled.tsx | 7 +- packages/iconoir-react/src/ArrowLeft.tsx | 7 +- .../iconoir-react/src/ArrowLeftCircled.tsx | 7 +- packages/iconoir-react/src/ArrowRight.tsx | 7 +- .../iconoir-react/src/ArrowRightCircled.tsx | 7 +- packages/iconoir-react/src/ArrowSeparate.tsx | 7 +- .../src/ArrowSeparateVertical.tsx | 7 +- packages/iconoir-react/src/ArrowUnion.tsx | 7 +- .../iconoir-react/src/ArrowUnionVertical.tsx | 7 +- packages/iconoir-react/src/ArrowUp.tsx | 7 +- packages/iconoir-react/src/ArrowUpCircled.tsx | 7 +- packages/iconoir-react/src/Asana.tsx | 7 +- packages/iconoir-react/src/Atom.tsx | 7 +- packages/iconoir-react/src/Attachment.tsx | 7 +- .../iconoir-react/src/AugmentedReality.tsx | 7 +- packages/iconoir-react/src/AutoFlash.tsx | 7 +- packages/iconoir-react/src/Axes.tsx | 7 +- .../iconoir-react/src/Backward15Seconds.tsx | 7 +- packages/iconoir-react/src/Bag.tsx | 7 +- packages/iconoir-react/src/Bank.tsx | 7 +- packages/iconoir-react/src/Barcode.tsx | 7 +- packages/iconoir-react/src/Basketball.tsx | 7 +- packages/iconoir-react/src/BasketballAlt.tsx | 7 +- .../iconoir-react/src/BasketballField.tsx | 7 +- packages/iconoir-react/src/Battery25.tsx | 7 +- packages/iconoir-react/src/Battery50.tsx | 7 +- packages/iconoir-react/src/Battery75.tsx | 7 +- .../iconoir-react/src/BatteryCharging.tsx | 7 +- packages/iconoir-react/src/BatteryEmpty.tsx | 7 +- packages/iconoir-react/src/BatteryFull.tsx | 7 +- .../iconoir-react/src/BatteryIndicator.tsx | 7 +- packages/iconoir-react/src/BatteryWarning.tsx | 7 +- packages/iconoir-react/src/Bbq.tsx | 7 +- packages/iconoir-react/src/BeachBag.tsx | 7 +- packages/iconoir-react/src/BeachBagBig.tsx | 7 +- packages/iconoir-react/src/Bed.tsx | 7 +- packages/iconoir-react/src/BedReady.tsx | 7 +- packages/iconoir-react/src/Behance.tsx | 7 +- packages/iconoir-react/src/BehanceSquared.tsx | 7 +- packages/iconoir-react/src/Bell.tsx | 7 +- .../iconoir-react/src/BellNotification.tsx | 7 +- packages/iconoir-react/src/BellOff.tsx | 7 +- packages/iconoir-react/src/Bicycle.tsx | 7 +- packages/iconoir-react/src/Bin.tsx | 7 +- packages/iconoir-react/src/BinAdd.tsx | 7 +- packages/iconoir-react/src/BinFull.tsx | 7 +- packages/iconoir-react/src/BinHalf.tsx | 7 +- packages/iconoir-react/src/BinMinus.tsx | 7 +- packages/iconoir-react/src/Bishop.tsx | 7 +- packages/iconoir-react/src/Bitbucket.tsx | 7 +- packages/iconoir-react/src/Bluetooth.tsx | 7 +- .../iconoir-react/src/BluetoothRounded.tsx | 7 +- packages/iconoir-react/src/Bold.tsx | 7 +- .../iconoir-react/src/BoldSquareOutline.tsx | 7 +- packages/iconoir-react/src/Bonfire.tsx | 7 +- packages/iconoir-react/src/Book.tsx | 7 +- packages/iconoir-react/src/BookStack.tsx | 7 +- packages/iconoir-react/src/BookmarkBook.tsx | 7 +- .../iconoir-react/src/BookmarkCircled.tsx | 7 +- packages/iconoir-react/src/BookmarkEmpty.tsx | 7 +- packages/iconoir-react/src/BorderBl.tsx | 7 +- packages/iconoir-react/src/BorderBottom.tsx | 7 +- packages/iconoir-react/src/BorderBr.tsx | 7 +- packages/iconoir-react/src/BorderInner.tsx | 7 +- packages/iconoir-react/src/BorderLeft.tsx | 7 +- packages/iconoir-react/src/BorderOut.tsx | 7 +- packages/iconoir-react/src/BorderRight.tsx | 7 +- packages/iconoir-react/src/BorderTl.tsx | 7 +- packages/iconoir-react/src/BorderTop.tsx | 7 +- packages/iconoir-react/src/BorderTr.tsx | 7 +- packages/iconoir-react/src/BounceLeft.tsx | 7 +- packages/iconoir-react/src/BounceRight.tsx | 7 +- packages/iconoir-react/src/BowlingBall.tsx | 7 +- packages/iconoir-react/src/Box.tsx | 7 +- packages/iconoir-react/src/BoxIso.tsx | 7 +- packages/iconoir-react/src/BoxingGlove.tsx | 7 +- packages/iconoir-react/src/Brightness.tsx | 7 +- .../iconoir-react/src/BrightnessWindow.tsx | 7 +- packages/iconoir-react/src/BubbleDownload.tsx | 7 +- packages/iconoir-react/src/BubbleError.tsx | 7 +- packages/iconoir-react/src/BubbleIncome.tsx | 7 +- packages/iconoir-react/src/BubbleOutcome.tsx | 7 +- packages/iconoir-react/src/BubbleSearch.tsx | 7 +- packages/iconoir-react/src/BubbleStar.tsx | 7 +- packages/iconoir-react/src/BubbleUpload.tsx | 7 +- packages/iconoir-react/src/BubbleWarning.tsx | 7 +- packages/iconoir-react/src/Building.tsx | 7 +- packages/iconoir-react/src/BusOutline.tsx | 7 +- packages/iconoir-react/src/BusStop.tsx | 7 +- packages/iconoir-react/src/CableRounded.tsx | 7 +- packages/iconoir-react/src/Calculator.tsx | 7 +- packages/iconoir-react/src/Calendar.tsx | 7 +- packages/iconoir-react/src/Camera.tsx | 7 +- packages/iconoir-react/src/Cancel.tsx | 7 +- packages/iconoir-react/src/CarOutline.tsx | 7 +- packages/iconoir-react/src/Carbon.tsx | 7 +- packages/iconoir-react/src/CardWallet.tsx | 7 +- packages/iconoir-react/src/Cart.tsx | 7 +- packages/iconoir-react/src/CartAlt.tsx | 7 +- packages/iconoir-react/src/Cash.tsx | 7 +- packages/iconoir-react/src/Cell2X2.tsx | 7 +- packages/iconoir-react/src/CenterAlign.tsx | 7 +- packages/iconoir-react/src/ChatAdd.tsx | 7 +- packages/iconoir-react/src/ChatBubble.tsx | 7 +- .../iconoir-react/src/ChatBubbleCheck.tsx | 7 +- .../iconoir-react/src/ChatBubbleCheck1.tsx | 7 +- .../iconoir-react/src/ChatBubbleEmpty.tsx | 7 +- .../iconoir-react/src/ChatBubbleError.tsx | 7 +- .../iconoir-react/src/ChatBubbleQuestion.tsx | 7 +- .../iconoir-react/src/ChatBubbleTranslate.tsx | 7 +- .../iconoir-react/src/ChatBubbleWarning.tsx | 7 +- packages/iconoir-react/src/ChatLines.tsx | 7 +- packages/iconoir-react/src/ChatRemove.tsx | 7 +- packages/iconoir-react/src/Check.tsx | 7 +- .../iconoir-react/src/CheckCircledOutline.tsx | 7 +- packages/iconoir-react/src/CheckWindow.tsx | 7 +- packages/iconoir-react/src/Chocolate.tsx | 7 +- packages/iconoir-react/src/Chromecast.tsx | 7 +- .../iconoir-react/src/ChromecastActive.tsx | 7 +- packages/iconoir-react/src/Church.tsx | 7 +- packages/iconoir-react/src/ChurchAlt.tsx | 7 +- packages/iconoir-react/src/CinemaOld.tsx | 7 +- packages/iconoir-react/src/Circle.tsx | 7 +- packages/iconoir-react/src/City.tsx | 7 +- packages/iconoir-react/src/CleanWater.tsx | 7 +- packages/iconoir-react/src/ClipboardCheck.tsx | 7 +- packages/iconoir-react/src/ClockOutline.tsx | 7 +- packages/iconoir-react/src/Closet.tsx | 7 +- packages/iconoir-react/src/Cloud.tsx | 7 +- packages/iconoir-react/src/CloudBookAlt.tsx | 7 +- packages/iconoir-react/src/CloudCheck.tsx | 7 +- packages/iconoir-react/src/CloudDesync.tsx | 7 +- packages/iconoir-react/src/CloudDownload.tsx | 7 +- packages/iconoir-react/src/CloudError.tsx | 7 +- packages/iconoir-react/src/CloudSunny.tsx | 7 +- packages/iconoir-react/src/CloudSync.tsx | 7 +- packages/iconoir-react/src/CloudUpload.tsx | 7 +- packages/iconoir-react/src/Code.tsx | 7 +- packages/iconoir-react/src/CodeBrackets.tsx | 7 +- .../iconoir-react/src/CodeBracketsSquare.tsx | 7 +- packages/iconoir-react/src/Codepen.tsx | 7 +- packages/iconoir-react/src/Coin.tsx | 7 +- packages/iconoir-react/src/CollageFrame.tsx | 7 +- packages/iconoir-react/src/Collapse.tsx | 7 +- packages/iconoir-react/src/ColorFilter.tsx | 7 +- packages/iconoir-react/src/ColorPicker.tsx | 7 +- .../iconoir-react/src/ColorPickerEmpty.tsx | 7 +- packages/iconoir-react/src/Combine.tsx | 7 +- packages/iconoir-react/src/CompactDisc.tsx | 7 +- packages/iconoir-react/src/Compass.tsx | 7 +- packages/iconoir-react/src/Compress.tsx | 7 +- packages/iconoir-react/src/CompressLines.tsx | 7 +- packages/iconoir-react/src/Computer.tsx | 7 +- packages/iconoir-react/src/Consumable.tsx | 7 +- packages/iconoir-react/src/ControlSlider.tsx | 7 +- packages/iconoir-react/src/Cookie.tsx | 7 +- packages/iconoir-react/src/Copy.tsx | 7 +- packages/iconoir-react/src/Copyright.tsx | 7 +- .../iconoir-react/src/CornerBottomLeft.tsx | 7 +- .../iconoir-react/src/CornerBottomRight.tsx | 7 +- packages/iconoir-react/src/CornerTopLeft.tsx | 7 +- packages/iconoir-react/src/CornerTopRight.tsx | 7 +- packages/iconoir-react/src/Cpu.tsx | 7 +- packages/iconoir-react/src/CpuWarning.tsx | 7 +- packages/iconoir-react/src/CrackedEgg.tsx | 7 +- .../iconoir-react/src/CreativeCommons.tsx | 7 +- packages/iconoir-react/src/CreditCard.tsx | 7 +- packages/iconoir-react/src/CreditCard2.tsx | 7 +- packages/iconoir-react/src/Crib.tsx | 7 +- packages/iconoir-react/src/Crop.tsx | 7 +- packages/iconoir-react/src/CropRotateBl.tsx | 7 +- packages/iconoir-react/src/CropRotateBr.tsx | 7 +- packages/iconoir-react/src/CropRotateTl.tsx | 7 +- packages/iconoir-react/src/CropRotateTr.tsx | 7 +- packages/iconoir-react/src/Css3.tsx | 7 +- packages/iconoir-react/src/CursorPointer.tsx | 7 +- packages/iconoir-react/src/Cut.tsx | 7 +- packages/iconoir-react/src/CutAlt.tsx | 7 +- packages/iconoir-react/src/Cycling.tsx | 7 +- packages/iconoir-react/src/Cylinder.tsx | 7 +- packages/iconoir-react/src/DashFlag.tsx | 7 +- packages/iconoir-react/src/Dashboard.tsx | 7 +- packages/iconoir-react/src/DashboardDots.tsx | 7 +- packages/iconoir-react/src/DashboardSpeed.tsx | 7 +- .../iconoir-react/src/DataTransferBoth.tsx | 7 +- .../iconoir-react/src/DataTransferCheck.tsx | 7 +- .../iconoir-react/src/DataTransferDown.tsx | 7 +- packages/iconoir-react/src/DataTransferUp.tsx | 7 +- .../iconoir-react/src/DataTransferWarning.tsx | 7 +- packages/iconoir-react/src/DatabaseBackup.tsx | 7 +- packages/iconoir-react/src/DatabaseExport.tsx | 7 +- .../iconoir-react/src/DatabaseMonitor.tsx | 7 +- .../iconoir-react/src/DatabaseRestore.tsx | 7 +- .../iconoir-react/src/DatabaseRounded.tsx | 7 +- packages/iconoir-react/src/DatabaseScript.tsx | 7 +- .../iconoir-react/src/DatabaseSettings.tsx | 7 +- packages/iconoir-react/src/DatabaseStar.tsx | 7 +- packages/iconoir-react/src/DatabaseStats.tsx | 7 +- packages/iconoir-react/src/Db.tsx | 7 +- packages/iconoir-react/src/DbCheck.tsx | 7 +- packages/iconoir-react/src/DbError.tsx | 7 +- packages/iconoir-react/src/DbSearch.tsx | 7 +- packages/iconoir-react/src/DbStar.tsx | 7 +- packages/iconoir-react/src/DbWarning.tsx | 7 +- packages/iconoir-react/src/DeCompress.tsx | 7 +- .../src/DeleteCircledOutline.tsx | 7 +- packages/iconoir-react/src/Delivery.tsx | 7 +- packages/iconoir-react/src/DeliveryTruck.tsx | 7 +- packages/iconoir-react/src/Depth.tsx | 7 +- packages/iconoir-react/src/DesignPencil.tsx | 7 +- packages/iconoir-react/src/Desk.tsx | 7 +- packages/iconoir-react/src/Dialpad.tsx | 7 +- packages/iconoir-react/src/DiceFive.tsx | 7 +- packages/iconoir-react/src/DiceFour.tsx | 7 +- packages/iconoir-react/src/DiceOne.tsx | 7 +- packages/iconoir-react/src/DiceSix.tsx | 7 +- packages/iconoir-react/src/DiceThree.tsx | 7 +- packages/iconoir-react/src/DiceTwo.tsx | 7 +- packages/iconoir-react/src/DimmerSwitch.tsx | 7 +- packages/iconoir-react/src/DirectorChair.tsx | 7 +- packages/iconoir-react/src/Discord.tsx | 7 +- packages/iconoir-react/src/Dishwasher.tsx | 7 +- packages/iconoir-react/src/Display4K.tsx | 7 +- .../iconoir-react/src/DivideSelection1.tsx | 7 +- .../iconoir-react/src/DivideSelection2.tsx | 7 +- packages/iconoir-react/src/DocSearch.tsx | 7 +- packages/iconoir-react/src/DocSearchAlt.tsx | 7 +- packages/iconoir-react/src/DocStar.tsx | 7 +- packages/iconoir-react/src/DocStarAlt.tsx | 7 +- packages/iconoir-react/src/Dollar.tsx | 7 +- packages/iconoir-react/src/DomoticIssue.tsx | 7 +- packages/iconoir-react/src/Donate.tsx | 7 +- packages/iconoir-react/src/DoubleCheck.tsx | 7 +- packages/iconoir-react/src/DownRoundArrow.tsx | 7 +- packages/iconoir-react/src/Download.tsx | 7 +- .../src/DownloadCircledOutline.tsx | 7 +- .../iconoir-react/src/DownloadDataWindow.tsx | 7 +- .../src/DownloadSquareOutline.tsx | 7 +- .../iconoir-react/src/DragHandGesture.tsx | 7 +- packages/iconoir-react/src/Drawer.tsx | 7 +- packages/iconoir-react/src/Dribbble.tsx | 7 +- packages/iconoir-react/src/Drone.tsx | 7 +- .../iconoir-react/src/DroneChargeFull.tsx | 7 +- .../iconoir-react/src/DroneChargeHalf.tsx | 7 +- packages/iconoir-react/src/DroneChargeLow.tsx | 7 +- packages/iconoir-react/src/DroneCheck.tsx | 7 +- packages/iconoir-react/src/DroneError.tsx | 7 +- packages/iconoir-react/src/DroneLanding.tsx | 7 +- packages/iconoir-react/src/DroneRefresh.tsx | 7 +- packages/iconoir-react/src/DroneTakeOff.tsx | 7 +- packages/iconoir-react/src/Droplet.tsx | 7 +- packages/iconoir-react/src/DropletHalf.tsx | 7 +- .../src/EaseCurveControlPoints.tsx | 7 +- packages/iconoir-react/src/EaseIn.tsx | 7 +- .../iconoir-react/src/EaseInControlPoint.tsx | 7 +- packages/iconoir-react/src/EaseInOut.tsx | 7 +- packages/iconoir-react/src/EaseOut.tsx | 7 +- .../iconoir-react/src/EaseOutControlPoint.tsx | 7 +- packages/iconoir-react/src/EcologyBook.tsx | 7 +- packages/iconoir-react/src/Edit.tsx | 7 +- packages/iconoir-react/src/EditPencil.tsx | 7 +- packages/iconoir-react/src/Egg.tsx | 7 +- packages/iconoir-react/src/Eject.tsx | 7 +- .../iconoir-react/src/ElectronicsChip.tsx | 7 +- .../src/ElectronicsTransistor.tsx | 7 +- packages/iconoir-react/src/Emoji.tsx | 7 +- packages/iconoir-react/src/EmojiBall.tsx | 7 +- packages/iconoir-react/src/EmojiBlinkLeft.tsx | 7 +- .../iconoir-react/src/EmojiBlinkRight.tsx | 7 +- .../iconoir-react/src/EmojiLookBottom.tsx | 7 +- packages/iconoir-react/src/EmojiLookLeft.tsx | 7 +- packages/iconoir-react/src/EmojiLookRight.tsx | 7 +- packages/iconoir-react/src/EmojiLookTop.tsx | 7 +- packages/iconoir-react/src/EmojiPuzzled.tsx | 7 +- packages/iconoir-react/src/EmojiQuite.tsx | 7 +- packages/iconoir-react/src/EmojiReally.tsx | 7 +- packages/iconoir-react/src/EmojiSad.tsx | 7 +- packages/iconoir-react/src/EmojiSatisfied.tsx | 7 +- packages/iconoir-react/src/EmojiSingLeft.tsx | 7 +- .../iconoir-react/src/EmojiSingLeftNote.tsx | 7 +- packages/iconoir-react/src/EmojiSingRight.tsx | 7 +- .../iconoir-react/src/EmojiSingRightNote.tsx | 7 +- packages/iconoir-react/src/EmojiSurprise.tsx | 7 +- .../iconoir-react/src/EmojiSurpriseAlt.tsx | 7 +- .../iconoir-react/src/EmojiTalkingAngry.tsx | 7 +- .../iconoir-react/src/EmojiTalkingHappy.tsx | 7 +- packages/iconoir-react/src/EmojiThinkLeft.tsx | 7 +- .../iconoir-react/src/EmojiThinkRight.tsx | 7 +- packages/iconoir-react/src/EmptyPage.tsx | 7 +- .../iconoir-react/src/EnergyUsageWindow.tsx | 7 +- packages/iconoir-react/src/Enlarge.tsx | 7 +- .../iconoir-react/src/EnlargeRoundArrow.tsx | 7 +- packages/iconoir-react/src/Erase.tsx | 7 +- packages/iconoir-react/src/ErrorWindow.tsx | 7 +- packages/iconoir-react/src/Euro.tsx | 7 +- packages/iconoir-react/src/EuroSquare.tsx | 7 +- packages/iconoir-react/src/EvCharge.tsx | 7 +- packages/iconoir-react/src/EvChargeAlt.tsx | 7 +- packages/iconoir-react/src/EvPlug.tsx | 7 +- packages/iconoir-react/src/EvPlugCharging.tsx | 7 +- packages/iconoir-react/src/EvPlugError.tsx | 7 +- packages/iconoir-react/src/EvRounded.tsx | 7 +- packages/iconoir-react/src/EvStation.tsx | 7 +- packages/iconoir-react/src/Exclude.tsx | 7 +- packages/iconoir-react/src/Expand.tsx | 7 +- packages/iconoir-react/src/ExpandLines.tsx | 7 +- packages/iconoir-react/src/EyeAlt.tsx | 7 +- packages/iconoir-react/src/EyeClose.tsx | 7 +- packages/iconoir-react/src/EyeEmpty.tsx | 7 +- packages/iconoir-react/src/EyeOff.tsx | 7 +- packages/iconoir-react/src/FaceId.tsx | 7 +- packages/iconoir-react/src/Facebook.tsx | 7 +- .../iconoir-react/src/FacebookSquared.tsx | 7 +- packages/iconoir-react/src/Facetime.tsx | 7 +- packages/iconoir-react/src/Farm.tsx | 7 +- packages/iconoir-react/src/FastArrowDown.tsx | 7 +- .../iconoir-react/src/FastArrowDownBox.tsx | 7 +- packages/iconoir-react/src/FastArrowLeft.tsx | 7 +- .../iconoir-react/src/FastArrowLeftBox.tsx | 7 +- packages/iconoir-react/src/FastArrowRight.tsx | 7 +- .../iconoir-react/src/FastArrowRightBox.tsx | 7 +- packages/iconoir-react/src/FastArrowTop.tsx | 7 +- packages/iconoir-react/src/FastArrowUpBox.tsx | 7 +- .../iconoir-react/src/FastBottomCircle.tsx | 7 +- packages/iconoir-react/src/FastLeftCircle.tsx | 7 +- .../iconoir-react/src/FastRightCircle.tsx | 7 +- packages/iconoir-react/src/FastTopCircle.tsx | 7 +- packages/iconoir-react/src/FavouriteBook.tsx | 7 +- .../iconoir-react/src/FavouriteWindow.tsx | 7 +- packages/iconoir-react/src/Female.tsx | 7 +- packages/iconoir-react/src/Figma.tsx | 7 +- packages/iconoir-react/src/FileNotFound.tsx | 7 +- packages/iconoir-react/src/Filter.tsx | 7 +- packages/iconoir-react/src/FilterAlt.tsx | 7 +- packages/iconoir-react/src/Finder.tsx | 7 +- .../iconoir-react/src/FingerPrintWindow.tsx | 7 +- packages/iconoir-react/src/Fingerprint.tsx | 7 +- .../iconoir-react/src/FingerprintCircled.tsx | 7 +- .../src/FingerprintCircledError.tsx | 7 +- .../src/FingerprintCircledLock.tsx | 7 +- .../src/FingerprintCircledOk.tsx | 7 +- .../iconoir-react/src/FingerprintPhone.tsx | 7 +- .../iconoir-react/src/FingerprintScan.tsx | 7 +- .../iconoir-react/src/FingerprintSquared.tsx | 7 +- packages/iconoir-react/src/FireFlame.tsx | 7 +- packages/iconoir-react/src/Fishing.tsx | 7 +- packages/iconoir-react/src/Flare.tsx | 7 +- packages/iconoir-react/src/Flash.tsx | 7 +- packages/iconoir-react/src/FlashOff.tsx | 7 +- packages/iconoir-react/src/Flask.tsx | 7 +- packages/iconoir-react/src/Flip.tsx | 7 +- packages/iconoir-react/src/FlipReverse.tsx | 7 +- packages/iconoir-react/src/Flower.tsx | 7 +- packages/iconoir-react/src/Fluorine.tsx | 7 +- packages/iconoir-react/src/Fog.tsx | 7 +- packages/iconoir-react/src/Folder.tsx | 7 +- packages/iconoir-react/src/FolderAlert.tsx | 7 +- packages/iconoir-react/src/FolderSettings.tsx | 7 +- packages/iconoir-react/src/FontSize.tsx | 7 +- packages/iconoir-react/src/Football.tsx | 7 +- packages/iconoir-react/src/FootballBall.tsx | 7 +- .../iconoir-react/src/Forward15Seconds.tsx | 7 +- packages/iconoir-react/src/ForwardOutline.tsx | 7 +- packages/iconoir-react/src/Frame.tsx | 9 +- packages/iconoir-react/src/FrameAlt.tsx | 7 +- packages/iconoir-react/src/FrameAltEmpty.tsx | 7 +- packages/iconoir-react/src/FrameSelect.tsx | 7 +- packages/iconoir-react/src/FrameSimple.tsx | 7 +- packages/iconoir-react/src/FrameTool.tsx | 7 +- packages/iconoir-react/src/Fridge.tsx | 7 +- packages/iconoir-react/src/Fx.tsx | 7 +- packages/iconoir-react/src/FxRounded.tsx | 7 +- packages/iconoir-react/src/Gamepad.tsx | 7 +- packages/iconoir-react/src/Garage.tsx | 7 +- packages/iconoir-react/src/Gas.tsx | 7 +- packages/iconoir-react/src/GasTank.tsx | 9 +- packages/iconoir-react/src/GasTankDrop.tsx | 8 +- packages/iconoir-react/src/Gift.tsx | 7 +- packages/iconoir-react/src/GitBranch.tsx | 7 +- packages/iconoir-react/src/GitCommand.tsx | 7 +- packages/iconoir-react/src/GitCommit.tsx | 7 +- packages/iconoir-react/src/GitCompare.tsx | 7 +- packages/iconoir-react/src/GitFork.tsx | 7 +- packages/iconoir-react/src/GitHub.tsx | 7 +- packages/iconoir-react/src/GitHubOutline.tsx | 7 +- packages/iconoir-react/src/GitLabFull.tsx | 7 +- packages/iconoir-react/src/GitMerge.tsx | 7 +- packages/iconoir-react/src/GitPullRequest.tsx | 7 +- packages/iconoir-react/src/GlassEmpty.tsx | 7 +- packages/iconoir-react/src/GlassHalf.tsx | 7 +- packages/iconoir-react/src/GlassHalfAlt.tsx | 7 +- packages/iconoir-react/src/Glasses.tsx | 7 +- packages/iconoir-react/src/Globe.tsx | 7 +- packages/iconoir-react/src/Golf.tsx | 7 +- packages/iconoir-react/src/Google.tsx | 7 +- packages/iconoir-react/src/GoogleCircled.tsx | 7 +- packages/iconoir-react/src/GoogleDocs.tsx | 7 +- packages/iconoir-react/src/GoogleDrive.tsx | 7 +- .../iconoir-react/src/GoogleDriveCheck.tsx | 7 +- .../iconoir-react/src/GoogleDriveSync.tsx | 7 +- .../iconoir-react/src/GoogleDriveWarning.tsx | 7 +- packages/iconoir-react/src/GoogleHome.tsx | 7 +- packages/iconoir-react/src/GoogleOne.tsx | 7 +- packages/iconoir-react/src/Gps.tsx | 7 +- packages/iconoir-react/src/GraphDown.tsx | 7 +- packages/iconoir-react/src/GraphUp.tsx | 7 +- packages/iconoir-react/src/GreenBus.tsx | 7 +- packages/iconoir-react/src/GreenTruck.tsx | 7 +- packages/iconoir-react/src/GreenVehicle.tsx | 7 +- packages/iconoir-react/src/GridAdd.tsx | 7 +- packages/iconoir-react/src/GridMinus.tsx | 7 +- packages/iconoir-react/src/GridRemove.tsx | 7 +- packages/iconoir-react/src/Group.tsx | 7 +- packages/iconoir-react/src/Gym.tsx | 7 +- packages/iconoir-react/src/HalfCookie.tsx | 7 +- packages/iconoir-react/src/HalfMoon.tsx | 7 +- packages/iconoir-react/src/HandBrake.tsx | 7 +- packages/iconoir-react/src/Handbag.tsx | 7 +- packages/iconoir-react/src/HardDrive.tsx | 7 +- packages/iconoir-react/src/Hat.tsx | 7 +- packages/iconoir-react/src/Hd.tsx | 7 +- packages/iconoir-react/src/HdDisplay.tsx | 7 +- packages/iconoir-react/src/Hdr.tsx | 7 +- packages/iconoir-react/src/Headset.tsx | 7 +- packages/iconoir-react/src/HeadsetCharge.tsx | 7 +- packages/iconoir-react/src/HeadsetHelp.tsx | 7 +- packages/iconoir-react/src/HeadsetIssue.tsx | 7 +- packages/iconoir-react/src/HealthShield.tsx | 7 +- packages/iconoir-react/src/Healthcare.tsx | 7 +- packages/iconoir-react/src/Heart.tsx | 7 +- packages/iconoir-react/src/HeavyRain.tsx | 7 +- packages/iconoir-react/src/Heptagon.tsx | 7 +- packages/iconoir-react/src/HerSlips.tsx | 7 +- .../iconoir-react/src/HesaWarningOutline.tsx | 7 +- packages/iconoir-react/src/Hexagon.tsx | 7 +- packages/iconoir-react/src/HexagonAlt.tsx | 7 +- packages/iconoir-react/src/HexagonDice.tsx | 7 +- packages/iconoir-react/src/HighPriority.tsx | 7 +- packages/iconoir-react/src/HistoricShield.tsx | 7 +- .../iconoir-react/src/HistoricShieldAlt.tsx | 7 +- packages/iconoir-react/src/Home.tsx | 7 +- packages/iconoir-react/src/HomeAlt.tsx | 7 +- packages/iconoir-react/src/HomeAltSlim.tsx | 7 +- .../iconoir-react/src/HomeAltSlimHoriz.tsx | 7 +- packages/iconoir-react/src/HomeHospital.tsx | 7 +- packages/iconoir-react/src/HomeSale.tsx | 7 +- packages/iconoir-react/src/HomeSecure.tsx | 7 +- packages/iconoir-react/src/HomeShield.tsx | 7 +- packages/iconoir-react/src/HomeSimple.tsx | 7 +- packages/iconoir-react/src/HomeSimpleDoor.tsx | 7 +- packages/iconoir-react/src/HomeTable.tsx | 7 +- packages/iconoir-react/src/HomeUser.tsx | 7 +- .../src/HorizDistributionLeft.tsx | 7 +- .../src/HorizDistributionRight.tsx | 7 +- packages/iconoir-react/src/Hospital.tsx | 7 +- packages/iconoir-react/src/HospitalSign.tsx | 7 +- packages/iconoir-react/src/HotAirBalloon.tsx | 7 +- packages/iconoir-react/src/Hourglass.tsx | 7 +- packages/iconoir-react/src/Html5.tsx | 7 +- packages/iconoir-react/src/Hydrogen.tsx | 7 +- packages/iconoir-react/src/Iconoir.tsx | 7 +- packages/iconoir-react/src/IconoirContext.tsx | 12 + packages/iconoir-react/src/Import.tsx | 7 +- packages/iconoir-react/src/Industry.tsx | 7 +- packages/iconoir-react/src/Infinite.tsx | 7 +- packages/iconoir-react/src/InfoEmpty.tsx | 7 +- packages/iconoir-react/src/InputField.tsx | 7 +- packages/iconoir-react/src/InputOutput.tsx | 7 +- packages/iconoir-react/src/InputSearch.tsx | 7 +- packages/iconoir-react/src/Instagram.tsx | 7 +- packages/iconoir-react/src/Internet.tsx | 7 +- packages/iconoir-react/src/Intersect.tsx | 7 +- packages/iconoir-react/src/IntersectAlt.tsx | 7 +- packages/iconoir-react/src/IosSettings.tsx | 7 +- packages/iconoir-react/src/IpAddress.tsx | 7 +- packages/iconoir-react/src/IrisScan.tsx | 7 +- packages/iconoir-react/src/Italic.tsx | 7 +- .../iconoir-react/src/ItalicSquareOutline.tsx | 7 +- packages/iconoir-react/src/Journal.tsx | 7 +- packages/iconoir-react/src/JournalPage.tsx | 7 +- packages/iconoir-react/src/KanbanBoard.tsx | 7 +- packages/iconoir-react/src/KeyAlt.tsx | 7 +- packages/iconoir-react/src/KeyAltBack.tsx | 7 +- packages/iconoir-react/src/KeyAltMinus.tsx | 7 +- packages/iconoir-react/src/KeyAltPlus.tsx | 7 +- packages/iconoir-react/src/KeyAltRemove.tsx | 7 +- packages/iconoir-react/src/Keyframe.tsx | 7 +- .../iconoir-react/src/KeyframeAlignCenter.tsx | 7 +- .../src/KeyframeAlignHorizontal.tsx | 7 +- .../src/KeyframeAlignVertical.tsx | 7 +- .../iconoir-react/src/KeyframePosition.tsx | 7 +- packages/iconoir-react/src/Keyframes.tsx | 7 +- .../iconoir-react/src/KeyframesCouple.tsx | 7 +- packages/iconoir-react/src/LabelOutline.tsx | 7 +- packages/iconoir-react/src/Lamp.tsx | 7 +- packages/iconoir-react/src/Language.tsx | 7 +- packages/iconoir-react/src/Laptop.tsx | 7 +- packages/iconoir-react/src/LaptopCharging.tsx | 7 +- packages/iconoir-react/src/LaptopFix.tsx | 7 +- packages/iconoir-react/src/LaptopIssue.tsx | 7 +- packages/iconoir-react/src/LargeSuitcase.tsx | 7 +- packages/iconoir-react/src/LayoutLeft.tsx | 7 +- packages/iconoir-react/src/LayoutRight.tsx | 7 +- packages/iconoir-react/src/Leaderboard.tsx | 7 +- .../iconoir-react/src/LeaderboardStar.tsx | 7 +- packages/iconoir-react/src/Leaf.tsx | 7 +- packages/iconoir-react/src/LeftRoundArrow.tsx | 7 +- packages/iconoir-react/src/Lens.tsx | 7 +- packages/iconoir-react/src/Lifebelt.tsx | 7 +- packages/iconoir-react/src/LightBulb.tsx | 7 +- packages/iconoir-react/src/LightBulbOff.tsx | 7 +- packages/iconoir-react/src/LightBulbOn.tsx | 7 +- packages/iconoir-react/src/LineSpace.tsx | 7 +- packages/iconoir-react/src/Linear.tsx | 7 +- packages/iconoir-react/src/Link.tsx | 7 +- packages/iconoir-react/src/LinkedIn.tsx | 7 +- packages/iconoir-react/src/Linux.tsx | 7 +- packages/iconoir-react/src/List.tsx | 7 +- .../iconoir-react/src/LoadActionFloppy.tsx | 7 +- packages/iconoir-react/src/Lock.tsx | 7 +- packages/iconoir-react/src/LockKey.tsx | 7 +- packages/iconoir-react/src/LockedBook.tsx | 7 +- packages/iconoir-react/src/LockedWindow.tsx | 7 +- packages/iconoir-react/src/LogDenied.tsx | 7 +- packages/iconoir-react/src/LogIn.tsx | 7 +- packages/iconoir-react/src/LogOut.tsx | 7 +- .../iconoir-react/src/LongArrowDownLeft.tsx | 7 +- .../iconoir-react/src/LongArrowDownRight.tsx | 7 +- .../iconoir-react/src/LongArrowLeftDown.tsx | 7 +- .../iconoir-react/src/LongArrowLeftUp.tsx | 7 +- .../iconoir-react/src/LongArrowRightDown.tsx | 7 +- .../iconoir-react/src/LongArrowRightUp.tsx | 7 +- .../iconoir-react/src/LongArrowRightUp1.tsx | 7 +- .../iconoir-react/src/LongArrowUpLeft.tsx | 7 +- .../iconoir-react/src/LongArrowUpRight.tsx | 7 +- packages/iconoir-react/src/LotOfCash.tsx | 7 +- packages/iconoir-react/src/MacControlKey.tsx | 7 +- packages/iconoir-react/src/MacDock.tsx | 7 +- packages/iconoir-react/src/MacOptionKey.tsx | 7 +- packages/iconoir-react/src/MacOsWindow.tsx | 7 +- packages/iconoir-react/src/Magnet.tsx | 7 +- packages/iconoir-react/src/MagnetEnergy.tsx | 7 +- packages/iconoir-react/src/Mail.tsx | 7 +- packages/iconoir-react/src/MailOpened.tsx | 7 +- packages/iconoir-react/src/Male.tsx | 7 +- packages/iconoir-react/src/Map.tsx | 7 +- packages/iconoir-react/src/MapIssue.tsx | 7 +- packages/iconoir-react/src/MapsArrow.tsx | 7 +- .../iconoir-react/src/MapsArrowDiagonal.tsx | 7 +- packages/iconoir-react/src/MapsArrowIssue.tsx | 7 +- packages/iconoir-react/src/MapsGoStraight.tsx | 7 +- packages/iconoir-react/src/MapsTurnBack.tsx | 7 +- packages/iconoir-react/src/MapsTurnLeft.tsx | 7 +- packages/iconoir-react/src/MapsTurnRight.tsx | 7 +- packages/iconoir-react/src/MaskSquare.tsx | 7 +- packages/iconoir-react/src/MathBook.tsx | 7 +- packages/iconoir-react/src/Maximize.tsx | 7 +- packages/iconoir-react/src/Medal.tsx | 7 +- packages/iconoir-react/src/Medal1St.tsx | 7 +- packages/iconoir-react/src/MediaImage.tsx | 7 +- .../iconoir-react/src/MediaImageFolder.tsx | 7 +- packages/iconoir-react/src/MediaImageList.tsx | 7 +- packages/iconoir-react/src/MediaVideo.tsx | 7 +- .../iconoir-react/src/MediaVideoFolder.tsx | 7 +- packages/iconoir-react/src/MediaVideoList.tsx | 7 +- packages/iconoir-react/src/Medium.tsx | 7 +- packages/iconoir-react/src/Megaphone.tsx | 7 +- packages/iconoir-react/src/Menu.tsx | 7 +- packages/iconoir-react/src/MenuScale.tsx | 7 +- packages/iconoir-react/src/Message.tsx | 7 +- packages/iconoir-react/src/MessageAlert.tsx | 7 +- packages/iconoir-react/src/MessageText.tsx | 7 +- packages/iconoir-react/src/Metro.tsx | 7 +- packages/iconoir-react/src/Mic.tsx | 7 +- packages/iconoir-react/src/MicAdd.tsx | 7 +- packages/iconoir-react/src/MicCheck.tsx | 7 +- packages/iconoir-react/src/MicMute.tsx | 7 +- packages/iconoir-react/src/MicRemove.tsx | 7 +- packages/iconoir-react/src/MicSpeaking.tsx | 7 +- packages/iconoir-react/src/MicWarning.tsx | 7 +- packages/iconoir-react/src/Minus.tsx | 7 +- packages/iconoir-react/src/Minus1.tsx | 7 +- packages/iconoir-react/src/MinusHexagon.tsx | 7 +- packages/iconoir-react/src/MinusPinAlt.tsx | 7 +- packages/iconoir-react/src/MinusSquare.tsx | 7 +- packages/iconoir-react/src/Mirror.tsx | 7 +- packages/iconoir-react/src/MissingFont.tsx | 7 +- packages/iconoir-react/src/ModernTv.tsx | 7 +- packages/iconoir-react/src/ModernTv4K.tsx | 7 +- packages/iconoir-react/src/MoneySquare.tsx | 7 +- packages/iconoir-react/src/MoonSat.tsx | 7 +- packages/iconoir-react/src/MoreHoriz.tsx | 7 +- .../src/MoreHorizCircledOutline.tsx | 7 +- packages/iconoir-react/src/MoreVert.tsx | 7 +- .../src/MoreVertCircledOutline.tsx | 7 +- packages/iconoir-react/src/Motorcycle.tsx | 7 +- .../iconoir-react/src/MouseButtonLeft.tsx | 7 +- .../iconoir-react/src/MouseButtonRight.tsx | 7 +- .../iconoir-react/src/MouseScrollWheel.tsx | 7 +- packages/iconoir-react/src/MoveDown.tsx | 7 +- packages/iconoir-react/src/MoveLeft.tsx | 7 +- packages/iconoir-react/src/MoveRight.tsx | 7 +- packages/iconoir-react/src/MoveRuler.tsx | 7 +- packages/iconoir-react/src/MoveUp.tsx | 7 +- packages/iconoir-react/src/Movie.tsx | 7 +- packages/iconoir-react/src/MultiBubble.tsx | 7 +- .../iconoir-react/src/MultiMacOsWindow.tsx | 7 +- packages/iconoir-react/src/MultiWindow.tsx | 7 +- packages/iconoir-react/src/MultiplePages.tsx | 7 +- .../iconoir-react/src/MultiplePagesAdd.tsx | 7 +- .../iconoir-react/src/MultiplePagesDelete.tsx | 7 +- .../iconoir-react/src/MultiplePagesEmpty.tsx | 7 +- .../iconoir-react/src/MultiplePagesRemove.tsx | 7 +- packages/iconoir-react/src/Music1.tsx | 7 +- packages/iconoir-react/src/Music1Add.tsx | 7 +- packages/iconoir-react/src/Music2.tsx | 7 +- packages/iconoir-react/src/Music2Add.tsx | 7 +- packages/iconoir-react/src/NavArrowDown.tsx | 7 +- packages/iconoir-react/src/NavArrowLeft.tsx | 7 +- packages/iconoir-react/src/NavArrowRight.tsx | 7 +- packages/iconoir-react/src/NavArrowUp.tsx | 7 +- packages/iconoir-react/src/Navigator.tsx | 7 +- packages/iconoir-react/src/NavigatorAlt.tsx | 7 +- packages/iconoir-react/src/Network.tsx | 7 +- packages/iconoir-react/src/NetworkAlt.tsx | 7 +- packages/iconoir-react/src/NetworkLeft.tsx | 7 +- packages/iconoir-react/src/NetworkRight.tsx | 7 +- packages/iconoir-react/src/NewTab.tsx | 7 +- packages/iconoir-react/src/NintendoSwitch.tsx | 7 +- packages/iconoir-react/src/Nitrogen.tsx | 7 +- packages/iconoir-react/src/NoAccessWindow.tsx | 7 +- packages/iconoir-react/src/NoBattery.tsx | 7 +- packages/iconoir-react/src/NoCoin.tsx | 7 +- packages/iconoir-react/src/NoCreditCard.tsx | 7 +- packages/iconoir-react/src/NoLink.tsx | 7 +- packages/iconoir-react/src/NoLock.tsx | 7 +- packages/iconoir-react/src/NoSmoking.tsx | 7 +- .../iconoir-react/src/NoSmokingCircled.tsx | 7 +- packages/iconoir-react/src/Notes.tsx | 7 +- .../iconoir-react/src/NumberedListLeft.tsx | 7 +- .../iconoir-react/src/NumberedListRight.tsx | 7 +- packages/iconoir-react/src/Octagon.tsx | 7 +- packages/iconoir-react/src/OffRounded.tsx | 7 +- packages/iconoir-react/src/OilIndustry.tsx | 7 +- packages/iconoir-react/src/OnRounded.tsx | 7 +- .../src/OneFingerSelectHandGesture.tsx | 7 +- packages/iconoir-react/src/OnePointCircle.tsx | 7 +- packages/iconoir-react/src/OpenBook.tsx | 7 +- packages/iconoir-react/src/OpenInBrowser.tsx | 7 +- packages/iconoir-react/src/OpenInWindow.tsx | 7 +- packages/iconoir-react/src/OpenNewWindow.tsx | 7 +- .../src/OpenSelectHandGesture.tsx | 7 +- packages/iconoir-react/src/OpenVpn.tsx | 7 +- packages/iconoir-react/src/OrangeHalf.tsx | 7 +- packages/iconoir-react/src/OrangeSlice.tsx | 7 +- packages/iconoir-react/src/OrangeSliceAlt.tsx | 7 +- packages/iconoir-react/src/OrganicFood.tsx | 7 +- .../iconoir-react/src/OrganicFoodSquared.tsx | 7 +- packages/iconoir-react/src/OrthogonalView.tsx | 7 +- packages/iconoir-react/src/Oxygen.tsx | 7 +- packages/iconoir-react/src/Package.tsx | 7 +- packages/iconoir-react/src/PackageLock.tsx | 7 +- packages/iconoir-react/src/Packages.tsx | 7 +- packages/iconoir-react/src/Pacman.tsx | 7 +- packages/iconoir-react/src/Page.tsx | 7 +- packages/iconoir-react/src/PageEdit.tsx | 7 +- packages/iconoir-react/src/PageFlip.tsx | 7 +- packages/iconoir-react/src/PageSearch.tsx | 7 +- packages/iconoir-react/src/PageStar.tsx | 7 +- packages/iconoir-react/src/Palette.tsx | 7 +- .../iconoir-react/src/PanoramaEnlarge.tsx | 7 +- packages/iconoir-react/src/PanoramaReduce.tsx | 7 +- packages/iconoir-react/src/Pants.tsx | 7 +- packages/iconoir-react/src/PantsAlt.tsx | 7 +- packages/iconoir-react/src/Parking.tsx | 7 +- packages/iconoir-react/src/PasswordCursor.tsx | 7 +- packages/iconoir-react/src/PasswordError.tsx | 7 +- packages/iconoir-react/src/PasswordPass.tsx | 7 +- packages/iconoir-react/src/PasteClipboard.tsx | 7 +- packages/iconoir-react/src/PauseOutline.tsx | 7 +- packages/iconoir-react/src/PauseWindow.tsx | 7 +- packages/iconoir-react/src/PcCheck.tsx | 7 +- packages/iconoir-react/src/PcFirewall.tsx | 7 +- packages/iconoir-react/src/PcMouse.tsx | 7 +- packages/iconoir-react/src/PcNoEntry.tsx | 7 +- packages/iconoir-react/src/PcWarning.tsx | 7 +- packages/iconoir-react/src/PeaceHand.tsx | 7 +- .../iconoir-react/src/PenConnectBluetooth.tsx | 7 +- packages/iconoir-react/src/PenConnectWifi.tsx | 7 +- packages/iconoir-react/src/PenTablet.tsx | 7 +- .../iconoir-react/src/PenTabletConnectUsb.tsx | 7 +- .../src/PenTabletConnectWifi.tsx | 7 +- packages/iconoir-react/src/Pentagon.tsx | 7 +- packages/iconoir-react/src/PeopleRounded.tsx | 7 +- packages/iconoir-react/src/Percentage.tsx | 7 +- .../iconoir-react/src/PercentageRound.tsx | 7 +- .../iconoir-react/src/PercentageSquare.tsx | 7 +- .../iconoir-react/src/PerspectiveView.tsx | 7 +- .../src/PharmacyCircledCross.tsx | 7 +- .../src/PharmacySquaredCross.tsx | 7 +- packages/iconoir-react/src/Phone.tsx | 7 +- packages/iconoir-react/src/PhoneAdd.tsx | 7 +- packages/iconoir-react/src/PhoneDelete.tsx | 7 +- packages/iconoir-react/src/PhoneDisabled.tsx | 7 +- packages/iconoir-react/src/PhoneIncome.tsx | 7 +- packages/iconoir-react/src/PhoneOutcome.tsx | 7 +- packages/iconoir-react/src/PhonePaused.tsx | 7 +- packages/iconoir-react/src/PhoneRemove.tsx | 7 +- packages/iconoir-react/src/PiggyBank.tsx | 7 +- packages/iconoir-react/src/Pillow.tsx | 7 +- packages/iconoir-react/src/Pin.tsx | 7 +- packages/iconoir-react/src/PinAlt.tsx | 7 +- packages/iconoir-react/src/PineTree.tsx | 7 +- packages/iconoir-react/src/Pinterest.tsx | 7 +- packages/iconoir-react/src/PizzaSlice.tsx | 7 +- packages/iconoir-react/src/Planet.tsx | 7 +- packages/iconoir-react/src/PlanetAlt.tsx | 7 +- packages/iconoir-react/src/PlanetSat.tsx | 7 +- packages/iconoir-react/src/PlayOutline.tsx | 7 +- packages/iconoir-react/src/Playlist.tsx | 7 +- packages/iconoir-react/src/PlaylistAdd.tsx | 7 +- packages/iconoir-react/src/PlaylistPlay.tsx | 7 +- .../iconoir-react/src/PlaystationGamepad.tsx | 7 +- packages/iconoir-react/src/PlugTypeA.tsx | 7 +- packages/iconoir-react/src/PlugTypeC.tsx | 7 +- packages/iconoir-react/src/PlugTypeG.tsx | 7 +- packages/iconoir-react/src/PlugTypeL.tsx | 7 +- packages/iconoir-react/src/Plus.tsx | 7 +- packages/iconoir-react/src/Pocket.tsx | 7 +- packages/iconoir-react/src/Podcast.tsx | 7 +- packages/iconoir-react/src/Pokeball.tsx | 7 +- packages/iconoir-react/src/Position.tsx | 7 +- packages/iconoir-react/src/PositionAlign.tsx | 7 +- packages/iconoir-react/src/Potion.tsx | 7 +- packages/iconoir-react/src/Pound.tsx | 7 +- packages/iconoir-react/src/PrecisionTool.tsx | 7 +- packages/iconoir-react/src/Printer.tsx | 7 +- packages/iconoir-react/src/PrinterAlt.tsx | 7 +- packages/iconoir-react/src/PrintingPage.tsx | 7 +- packages/iconoir-react/src/PriorityDown.tsx | 7 +- packages/iconoir-react/src/PriorityUp.tsx | 7 +- packages/iconoir-react/src/PrivateWifi.tsx | 7 +- packages/iconoir-react/src/ProfileCircled.tsx | 7 +- packages/iconoir-react/src/Prohibition.tsx | 7 +- packages/iconoir-react/src/Puzzle.tsx | 7 +- packages/iconoir-react/src/QrCode.tsx | 7 +- packages/iconoir-react/src/QuestionMark.tsx | 7 +- .../iconoir-react/src/QuestionMarkCircle.tsx | 7 +- .../src/QuestionSquareOutline.tsx | 7 +- packages/iconoir-react/src/Quote.tsx | 7 +- packages/iconoir-react/src/QuoteMessage.tsx | 7 +- packages/iconoir-react/src/Rain.tsx | 7 +- packages/iconoir-react/src/ReceiveDollars.tsx | 7 +- packages/iconoir-react/src/ReceiveEuros.tsx | 7 +- packages/iconoir-react/src/ReceivePounds.tsx | 7 +- packages/iconoir-react/src/ReceiveYens.tsx | 7 +- packages/iconoir-react/src/Redo.tsx | 7 +- packages/iconoir-react/src/RedoAction.tsx | 7 +- packages/iconoir-react/src/RedoCircle.tsx | 7 +- packages/iconoir-react/src/Reduce.tsx | 7 +- .../iconoir-react/src/ReduceRoundArrow.tsx | 7 +- packages/iconoir-react/src/Refresh.tsx | 7 +- .../iconoir-react/src/RefreshCircular.tsx | 7 +- packages/iconoir-react/src/RefreshDouble.tsx | 7 +- packages/iconoir-react/src/ReloadWindow.tsx | 7 +- .../iconoir-react/src/ReminderHandGesture.tsx | 7 +- .../src/RemoveDatabaseScript.tsx | 7 +- packages/iconoir-react/src/RemoveEmpty.tsx | 7 +- packages/iconoir-react/src/RemoveFolder.tsx | 7 +- packages/iconoir-react/src/RemoveFrame.tsx | 7 +- packages/iconoir-react/src/RemoveFromCart.tsx | 7 +- packages/iconoir-react/src/RemoveKeyframe.tsx | 7 +- .../iconoir-react/src/RemoveKeyframeAlt.tsx | 7 +- .../iconoir-react/src/RemoveKeyframes.tsx | 7 +- packages/iconoir-react/src/RemoveLink.tsx | 7 +- .../iconoir-react/src/RemoveMediaImage.tsx | 7 +- .../iconoir-react/src/RemoveMediaVideo.tsx | 7 +- packages/iconoir-react/src/RemovePage.tsx | 7 +- packages/iconoir-react/src/RemovePin.tsx | 7 +- packages/iconoir-react/src/RemovePinAlt.tsx | 7 +- .../iconoir-react/src/RemoveSelection.tsx | 7 +- packages/iconoir-react/src/RemoveSquare.tsx | 7 +- packages/iconoir-react/src/RemoveUser.tsx | 7 +- packages/iconoir-react/src/Repeat.tsx | 7 +- packages/iconoir-react/src/RepeatOnce.tsx | 7 +- packages/iconoir-react/src/ReportColumns.tsx | 7 +- packages/iconoir-react/src/Reports.tsx | 7 +- packages/iconoir-react/src/Repository.tsx | 7 +- packages/iconoir-react/src/Restart.tsx | 7 +- packages/iconoir-react/src/RewindOutline.tsx | 7 +- packages/iconoir-react/src/Rhombus.tsx | 7 +- .../iconoir-react/src/RightRoundArrow.tsx | 7 +- packages/iconoir-react/src/Rings.tsx | 7 +- packages/iconoir-react/src/Rocket.tsx | 7 +- packages/iconoir-react/src/Rook.tsx | 7 +- .../iconoir-react/src/RotateCameraLeft.tsx | 7 +- .../iconoir-react/src/RotateCameraRight.tsx | 7 +- packages/iconoir-react/src/RoundFlask.tsx | 7 +- packages/iconoir-react/src/RoundedMirror.tsx | 7 +- packages/iconoir-react/src/RssFeed.tsx | 7 +- packages/iconoir-react/src/RssFeedSquared.tsx | 7 +- packages/iconoir-react/src/Ruler.tsx | 7 +- packages/iconoir-react/src/RulerAdd.tsx | 7 +- packages/iconoir-react/src/RulerCombine.tsx | 7 +- packages/iconoir-react/src/RulerRemove.tsx | 7 +- packages/iconoir-react/src/Running.tsx | 7 +- packages/iconoir-react/src/Safari.tsx | 7 +- packages/iconoir-react/src/Sandals.tsx | 7 +- .../iconoir-react/src/SaveActionFloppy.tsx | 7 +- packages/iconoir-react/src/SaveFloppyDisk.tsx | 7 +- .../iconoir-react/src/ScaleFrameEnlarge.tsx | 7 +- .../iconoir-react/src/ScaleFrameReduce.tsx | 8 +- packages/iconoir-react/src/ScanBarcode.tsx | 7 +- packages/iconoir-react/src/ScanQrCode.tsx | 7 +- packages/iconoir-react/src/Scanning.tsx | 7 +- packages/iconoir-react/src/Scarf.tsx | 7 +- packages/iconoir-react/src/Scissor.tsx | 7 +- packages/iconoir-react/src/ScissorAlt.tsx | 7 +- packages/iconoir-react/src/SeaAndSun.tsx | 7 +- packages/iconoir-react/src/SeaWaves.tsx | 7 +- packages/iconoir-react/src/Search.tsx | 7 +- packages/iconoir-react/src/SearchEngine.tsx | 7 +- packages/iconoir-react/src/SearchFont.tsx | 7 +- packages/iconoir-react/src/SearchWindow.tsx | 7 +- packages/iconoir-react/src/SecureWindow.tsx | 7 +- packages/iconoir-react/src/SecurityPass.tsx | 7 +- packages/iconoir-react/src/SelectWindow.tsx | 7 +- packages/iconoir-react/src/Selection.tsx | 7 +- packages/iconoir-react/src/SelectiveTool.tsx | 7 +- packages/iconoir-react/src/SendDollars.tsx | 7 +- packages/iconoir-react/src/SendEuros.tsx | 7 +- packages/iconoir-react/src/SendPounds.tsx | 7 +- packages/iconoir-react/src/SendYens.tsx | 7 +- packages/iconoir-react/src/Server.tsx | 7 +- .../iconoir-react/src/ServerConnection.tsx | 7 +- packages/iconoir-react/src/Settings.tsx | 7 +- packages/iconoir-react/src/SettingsCloud.tsx | 7 +- .../iconoir-react/src/SettingsProfiles.tsx | 7 +- packages/iconoir-react/src/ShareAndroid.tsx | 7 +- packages/iconoir-react/src/ShareIos.tsx | 7 +- packages/iconoir-react/src/Shield.tsx | 7 +- packages/iconoir-react/src/ShieldAdd.tsx | 7 +- packages/iconoir-react/src/ShieldAlert.tsx | 7 +- packages/iconoir-react/src/ShieldAlt.tsx | 7 +- packages/iconoir-react/src/ShieldBroken.tsx | 7 +- packages/iconoir-react/src/ShieldCheck.tsx | 7 +- packages/iconoir-react/src/ShieldCross.tsx | 7 +- packages/iconoir-react/src/ShieldDownload.tsx | 7 +- packages/iconoir-react/src/ShieldEye.tsx | 7 +- packages/iconoir-react/src/ShieldLoading.tsx | 7 +- packages/iconoir-react/src/ShieldMinus.tsx | 7 +- packages/iconoir-react/src/ShieldQuestion.tsx | 7 +- packages/iconoir-react/src/ShieldSearch.tsx | 7 +- packages/iconoir-react/src/ShieldUpload.tsx | 7 +- packages/iconoir-react/src/Shop.tsx | 7 +- packages/iconoir-react/src/ShopAlt.tsx | 7 +- packages/iconoir-react/src/ShoppingBag.tsx | 7 +- packages/iconoir-react/src/ShoppingBagAdd.tsx | 7 +- packages/iconoir-react/src/ShoppingBagAlt.tsx | 7 +- .../src/ShoppingBagArrowDown.tsx | 7 +- .../iconoir-react/src/ShoppingBagArrowUp.tsx | 7 +- .../iconoir-react/src/ShoppingBagCheck.tsx | 7 +- .../iconoir-react/src/ShoppingBagIssue.tsx | 7 +- .../iconoir-react/src/ShoppingBagRemove.tsx | 7 +- packages/iconoir-react/src/ShoppingCode.tsx | 7 +- .../iconoir-react/src/ShoppingCodeCheck.tsx | 7 +- .../iconoir-react/src/ShoppingCodeError.tsx | 7 +- packages/iconoir-react/src/ShortPants.tsx | 7 +- packages/iconoir-react/src/ShortPantsAlt.tsx | 7 +- packages/iconoir-react/src/Shuffle.tsx | 7 +- .../iconoir-react/src/SidebarCollapse.tsx | 7 +- packages/iconoir-react/src/SidebarExpand.tsx | 7 +- packages/iconoir-react/src/SigmaFunction.tsx | 7 +- packages/iconoir-react/src/SimpleCart.tsx | 7 +- .../iconoir-react/src/SingleTapGesture.tsx | 7 +- packages/iconoir-react/src/Skateboard.tsx | 7 +- packages/iconoir-react/src/Skateboarding.tsx | 7 +- .../iconoir-react/src/SkipNextOutline.tsx | 7 +- .../iconoir-react/src/SkipPrevOutline.tsx | 7 +- packages/iconoir-react/src/SleeperChair.tsx | 7 +- packages/iconoir-react/src/SmallLamp.tsx | 7 +- packages/iconoir-react/src/SmallLampAlt.tsx | 7 +- packages/iconoir-react/src/SmallShop.tsx | 7 +- packages/iconoir-react/src/SmallShopAlt.tsx | 7 +- .../iconoir-react/src/SmartphoneDevice.tsx | 7 +- packages/iconoir-react/src/Smoking.tsx | 7 +- packages/iconoir-react/src/Snapchat.tsx | 7 +- packages/iconoir-react/src/Snow.tsx | 7 +- packages/iconoir-react/src/SnowFlake.tsx | 7 +- packages/iconoir-react/src/Soap.tsx | 7 +- packages/iconoir-react/src/SoccerBall.tsx | 7 +- packages/iconoir-react/src/Sofa.tsx | 7 +- packages/iconoir-react/src/Soil.tsx | 7 +- packages/iconoir-react/src/SoilAlt.tsx | 7 +- packages/iconoir-react/src/Sort.tsx | 7 +- packages/iconoir-react/src/SortDown.tsx | 7 +- packages/iconoir-react/src/SortUp.tsx | 7 +- packages/iconoir-react/src/SoundHigh.tsx | 7 +- packages/iconoir-react/src/SoundLow.tsx | 7 +- packages/iconoir-react/src/SoundMin.tsx | 7 +- packages/iconoir-react/src/SoundOff.tsx | 7 +- packages/iconoir-react/src/Spades.tsx | 7 +- packages/iconoir-react/src/Sphere.tsx | 7 +- packages/iconoir-react/src/Spiral.tsx | 7 +- .../iconoir-react/src/SpockHandGesture.tsx | 7 +- packages/iconoir-react/src/Square.tsx | 7 +- packages/iconoir-react/src/Stackoverflow.tsx | 7 +- packages/iconoir-react/src/StarDashed.tsx | 7 +- packages/iconoir-react/src/StarHalfDashed.tsx | 7 +- packages/iconoir-react/src/StarOutline.tsx | 7 +- packages/iconoir-react/src/StatDown.tsx | 7 +- packages/iconoir-react/src/StatUp.tsx | 7 +- packages/iconoir-react/src/StatsReport.tsx | 7 +- .../iconoir-react/src/StatsSquareDown.tsx | 7 +- packages/iconoir-react/src/StatsSquareUp.tsx | 7 +- packages/iconoir-react/src/Stretching.tsx | 7 +- packages/iconoir-react/src/Stroller.tsx | 7 +- packages/iconoir-react/src/StyleBorder.tsx | 9 +- packages/iconoir-react/src/Substract.tsx | 7 +- packages/iconoir-react/src/Suggestion.tsx | 7 +- packages/iconoir-react/src/SunLight.tsx | 7 +- packages/iconoir-react/src/Swimming.tsx | 7 +- .../iconoir-react/src/SwipeDownGesture.tsx | 7 +- .../iconoir-react/src/SwipeLeftGesture.tsx | 7 +- .../iconoir-react/src/SwipeRightGesture.tsx | 7 +- .../src/SwipeTwoFingersDownGesture.tsx | 7 +- .../src/SwipeTwoFingersLeftGesture.tsx | 7 +- .../src/SwipeTwoFingersRightGesture.tsx | 7 +- .../src/SwipeTwoFingersUpGesture.tsx | 7 +- packages/iconoir-react/src/SwipeUpGesture.tsx | 7 +- .../iconoir-react/src/SwitchOffOutline.tsx | 7 +- .../iconoir-react/src/SwitchOnOutline.tsx | 7 +- packages/iconoir-react/src/SystemRestart.tsx | 7 +- packages/iconoir-react/src/SystemShut.tsx | 7 +- packages/iconoir-react/src/Table.tsx | 7 +- packages/iconoir-react/src/Table2Columns.tsx | 7 +- packages/iconoir-react/src/TableRows.tsx | 7 +- packages/iconoir-react/src/TaskList.tsx | 7 +- packages/iconoir-react/src/Telegram.tsx | 7 +- .../iconoir-react/src/TelegramCircled.tsx | 7 +- packages/iconoir-react/src/TennisBall.tsx | 7 +- packages/iconoir-react/src/TennisBallAlt.tsx | 7 +- .../iconoir-react/src/TerminalOutline.tsx | 7 +- packages/iconoir-react/src/TerminalSimple.tsx | 7 +- packages/iconoir-react/src/TestTube.tsx | 7 +- packages/iconoir-react/src/Text.tsx | 7 +- packages/iconoir-react/src/TextAlt.tsx | 7 +- packages/iconoir-react/src/TextSize.tsx | 7 +- .../iconoir-react/src/ThreePointsCircle.tsx | 7 +- packages/iconoir-react/src/ThreeStars.tsx | 7 +- packages/iconoir-react/src/ThumbsDown.tsx | 7 +- packages/iconoir-react/src/ThumbsUp.tsx | 7 +- packages/iconoir-react/src/Thunderstorm.tsx | 7 +- packages/iconoir-react/src/TikTok.tsx | 7 +- packages/iconoir-react/src/Timer.tsx | 7 +- packages/iconoir-react/src/TimerOff.tsx | 7 +- packages/iconoir-react/src/Tournament.tsx | 7 +- packages/iconoir-react/src/Tower.tsx | 7 +- packages/iconoir-react/src/TowerCheck.tsx | 7 +- packages/iconoir-react/src/TowerNoAccess.tsx | 7 +- packages/iconoir-react/src/TowerWarning.tsx | 7 +- packages/iconoir-react/src/Trademark.tsx | 7 +- packages/iconoir-react/src/TrainOutline.tsx | 7 +- packages/iconoir-react/src/Tram.tsx | 7 +- .../iconoir-react/src/TransitionBottom.tsx | 7 +- packages/iconoir-react/src/TransitionLeft.tsx | 7 +- .../iconoir-react/src/TransitionRight.tsx | 7 +- packages/iconoir-react/src/TransitionTop.tsx | 7 +- packages/iconoir-react/src/Translate.tsx | 7 +- packages/iconoir-react/src/Trash.tsx | 7 +- packages/iconoir-react/src/Treadmill.tsx | 7 +- packages/iconoir-react/src/Tree.tsx | 7 +- packages/iconoir-react/src/Trekking.tsx | 7 +- packages/iconoir-react/src/Trello.tsx | 7 +- packages/iconoir-react/src/Triangle.tsx | 7 +- packages/iconoir-react/src/TriangleFlag.tsx | 7 +- .../iconoir-react/src/TriangleFlagCircle.tsx | 7 +- .../iconoir-react/src/TriangleFlagFull.tsx | 7 +- packages/iconoir-react/src/Trophy.tsx | 7 +- packages/iconoir-react/src/Truck.tsx | 7 +- packages/iconoir-react/src/TruckLength.tsx | 7 +- packages/iconoir-react/src/Tunnel.tsx | 7 +- packages/iconoir-react/src/Tv.tsx | 7 +- packages/iconoir-react/src/TvFix.tsx | 7 +- packages/iconoir-react/src/TvIssue.tsx | 7 +- packages/iconoir-react/src/Twitter.tsx | 7 +- .../src/TwitterVerifiedBadge.tsx | 7 +- .../iconoir-react/src/TwoPointsCircle.tsx | 7 +- packages/iconoir-react/src/TwoSeaterSofa.tsx | 7 +- packages/iconoir-react/src/Type.tsx | 7 +- packages/iconoir-react/src/UmbrellaFull.tsx | 7 +- packages/iconoir-react/src/Underline.tsx | 7 +- .../src/UnderlineSquareOutline.tsx | 7 +- packages/iconoir-react/src/Undo.tsx | 7 +- packages/iconoir-react/src/UndoAction.tsx | 7 +- packages/iconoir-react/src/UndoCircle.tsx | 7 +- packages/iconoir-react/src/Union.tsx | 7 +- packages/iconoir-react/src/UnionAlt.tsx | 7 +- packages/iconoir-react/src/UnionHorizAlt.tsx | 7 +- packages/iconoir-react/src/Unity.tsx | 7 +- packages/iconoir-react/src/Unity5.tsx | 7 +- packages/iconoir-react/src/UpRoundArrow.tsx | 7 +- packages/iconoir-react/src/Upload.tsx | 7 +- .../iconoir-react/src/UploadDataWindow.tsx | 7 +- .../iconoir-react/src/UploadSquareOutline.tsx | 7 +- packages/iconoir-react/src/Usb.tsx | 7 +- packages/iconoir-react/src/User.tsx | 7 +- packages/iconoir-react/src/UserBag.tsx | 7 +- packages/iconoir-react/src/UserCart.tsx | 7 +- packages/iconoir-react/src/UserCircleAlt.tsx | 7 +- packages/iconoir-react/src/UserScan.tsx | 7 +- packages/iconoir-react/src/UserSquareAlt.tsx | 7 +- packages/iconoir-react/src/Vegan.tsx | 7 +- packages/iconoir-react/src/VeganRounded.tsx | 7 +- packages/iconoir-react/src/VeganSquared.tsx | 7 +- packages/iconoir-react/src/VerifiedBadge.tsx | 7 +- packages/iconoir-react/src/VerifiedUser.tsx | 7 +- packages/iconoir-react/src/VideoCamera.tsx | 7 +- packages/iconoir-react/src/VideoCameraOff.tsx | 7 +- packages/iconoir-react/src/View360.tsx | 7 +- packages/iconoir-react/src/ViewColumns2.tsx | 7 +- packages/iconoir-react/src/ViewColumns3.tsx | 7 +- packages/iconoir-react/src/ViewGrid.tsx | 7 +- .../iconoir-react/src/ViewStructureDown.tsx | 7 +- .../iconoir-react/src/ViewStructureUp.tsx | 7 +- packages/iconoir-react/src/Voice.tsx | 7 +- packages/iconoir-react/src/VoiceCircled.tsx | 7 +- .../iconoir-react/src/VoiceCircledLock.tsx | 7 +- packages/iconoir-react/src/VoiceError.tsx | 7 +- packages/iconoir-react/src/VoiceOk.tsx | 7 +- packages/iconoir-react/src/VoicePhone.tsx | 7 +- packages/iconoir-react/src/VoiceScan.tsx | 7 +- packages/iconoir-react/src/VoiceSquared.tsx | 7 +- packages/iconoir-react/src/VrSymbol.tsx | 7 +- packages/iconoir-react/src/Waist.tsx | 7 +- packages/iconoir-react/src/Walking.tsx | 7 +- packages/iconoir-react/src/Wallet.tsx | 7 +- .../src/WarningCircledOutline.tsx | 7 +- .../src/WarningSquareOutline.tsx | 7 +- .../src/WarningTriangleOutline.tsx | 7 +- packages/iconoir-react/src/WarningWindow.tsx | 7 +- packages/iconoir-react/src/Wash.tsx | 7 +- packages/iconoir-react/src/WashingMachine.tsx | 7 +- packages/iconoir-react/src/WateringSoil.tsx | 7 +- packages/iconoir-react/src/WebWindow.tsx | 7 +- packages/iconoir-react/src/WebWindowClose.tsx | 7 +- .../src/WebWindowEnergyConsumption.tsx | 7 +- packages/iconoir-react/src/Weight.tsx | 7 +- packages/iconoir-react/src/WeightAlt.tsx | 7 +- packages/iconoir-react/src/WhiteFlag.tsx | 7 +- packages/iconoir-react/src/Wifi.tsx | 7 +- packages/iconoir-react/src/WifiError.tsx | 7 +- packages/iconoir-react/src/WifiIssue.tsx | 7 +- packages/iconoir-react/src/WifiOff.tsx | 7 +- packages/iconoir-react/src/WifiRounded.tsx | 7 +- packages/iconoir-react/src/WifiSignalNone.tsx | 7 +- packages/iconoir-react/src/Wind.tsx | 7 +- packages/iconoir-react/src/Windows.tsx | 7 +- packages/iconoir-react/src/WrapText.tsx | 7 +- packages/iconoir-react/src/Wristwatch.tsx | 7 +- packages/iconoir-react/src/Www.tsx | 7 +- packages/iconoir-react/src/XboxA.tsx | 7 +- packages/iconoir-react/src/XboxB.tsx | 7 +- packages/iconoir-react/src/XboxX.tsx | 7 +- packages/iconoir-react/src/XboxY.tsx | 7 +- packages/iconoir-react/src/XrayView.tsx | 7 +- packages/iconoir-react/src/Yen.tsx | 7 +- packages/iconoir-react/src/YenSquare.tsx | 7 +- packages/iconoir-react/src/Yoga.tsx | 7 +- packages/iconoir-react/src/YouTube.tsx | 7 +- packages/iconoir-react/src/ZoomIn.tsx | 7 +- packages/iconoir-react/src/ZoomOut.tsx | 7 +- packages/iconoir-react/src/index.tsx | 3 +- pnpm-lock.yaml | 3344 ++++++++++++++++- pnpm-workspace.yaml | 1 + 2403 files changed, 22141 insertions(+), 6172 deletions(-) create mode 100644 .npmrc create mode 100644 bin/templates/icon-template.cjs create mode 100644 bin/templates/index-template.cjs create mode 100644 constants.js create mode 100644 css/README.md create mode 100644 docs/framer.md create mode 100755 iconoir.com/.eslintrc.json create mode 100755 iconoir.com/.gitignore create mode 100755 iconoir.com/README.md create mode 100644 iconoir.com/components/AnimatedSvg.tsx create mode 100644 iconoir.com/components/AvailableFor.tsx create mode 100644 iconoir.com/components/Button.tsx create mode 100644 iconoir.com/components/CategoryRow.tsx create mode 100644 iconoir.com/components/ChangelogEntry.tsx create mode 100644 iconoir.com/components/CurrentVersion.tsx create mode 100644 iconoir.com/components/CustomizationEditor.tsx create mode 100644 iconoir.com/components/DocumentationNavigation.tsx create mode 100644 iconoir.com/components/Explore.tsx create mode 100644 iconoir.com/components/FiltersEditor.tsx create mode 100644 iconoir.com/components/Footer.tsx create mode 100644 iconoir.com/components/GA.tsx create mode 100644 iconoir.com/components/Header.tsx create mode 100644 iconoir.com/components/HeaderBackground.tsx create mode 100644 iconoir.com/components/Icon.tsx create mode 100644 iconoir.com/components/IconList.tsx create mode 100644 iconoir.com/components/IconListEmpty.tsx create mode 100644 iconoir.com/components/IconsRow.tsx create mode 100644 iconoir.com/components/Input.tsx create mode 100644 iconoir.com/components/Layout.tsx create mode 100644 iconoir.com/components/MDXRemote.tsx create mode 100644 iconoir.com/components/NavigationItem.tsx create mode 100644 iconoir.com/components/Praise.tsx create mode 100644 iconoir.com/components/PraiseItem.tsx create mode 100644 iconoir.com/components/ReactWindowScroller.tsx create mode 100644 iconoir.com/components/ReadOnGitHub.tsx create mode 100644 iconoir.com/components/SEO.tsx create mode 100644 iconoir.com/components/Slider.tsx create mode 100644 iconoir.com/components/Stats.tsx create mode 100644 iconoir.com/components/SuggestLibrary.tsx create mode 100644 iconoir.com/components/Table.tsx create mode 100644 iconoir.com/components/Typography.tsx create mode 100644 iconoir.com/components/constants.ts create mode 100644 iconoir.com/components/responsive.ts create mode 100644 iconoir.com/components/useCustomizationPersistence.ts create mode 100644 iconoir.com/generate-icons.js create mode 100644 iconoir.com/helpers/showNotification.ts create mode 100644 iconoir.com/icons.csv create mode 100644 iconoir.com/lib/getHeaderProps.ts create mode 100644 iconoir.com/lib/getIcons.ts create mode 100755 iconoir.com/next-env.d.ts create mode 100755 iconoir.com/next.config.js create mode 100644 iconoir.com/package.json create mode 100755 iconoir.com/pages/_app.tsx create mode 100644 iconoir.com/pages/_document.tsx create mode 100644 iconoir.com/pages/docs/[...slug].tsx create mode 100644 iconoir.com/pages/docs/changelog.tsx create mode 100644 iconoir.com/pages/docs/index.tsx create mode 100755 iconoir.com/pages/index.tsx create mode 100644 iconoir.com/pages/support.tsx create mode 100644 iconoir.com/public/assets/iconoir-cover.png create mode 100644 iconoir.com/public/chris-messina.png create mode 100644 iconoir.com/public/fabrizio-rinaldi.png create mode 100644 iconoir.com/public/favicon.ico create mode 100644 iconoir.com/public/home-background.svg create mode 100644 iconoir.com/public/iconoir-brand-03.png create mode 100644 iconoir.com/public/iconoir-logo.svg create mode 100644 iconoir.com/public/logo-figma.svg create mode 100644 iconoir.com/public/logo-flutter.svg create mode 100644 iconoir.com/public/logo-framer.svg create mode 100644 iconoir.com/public/logo-react-native.svg create mode 100644 iconoir.com/public/logo-react.svg create mode 100644 iconoir.com/public/nibol-logo.png create mode 100644 iconoir.com/public/opencollective.png create mode 100644 iconoir.com/public/riccardo-suardi.png create mode 100644 iconoir.com/public/support-background.svg create mode 100644 iconoir.com/public/twitter-logo.png create mode 100644 iconoir.com/public/typefully-logo.png create mode 100755 iconoir.com/public/vercel.svg create mode 100644 iconoir.com/styles/prism-theme.css create mode 100644 iconoir.com/styles/theme.css create mode 100755 iconoir.com/tsconfig.json create mode 100644 packages/iconoir-react-native/src/IconoirContext.tsx create mode 100644 packages/iconoir-react/src/IconoirContext.tsx diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 3c049c65..2e06856b 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -19,11 +19,11 @@ jobs: ${{ runner.os }}- - uses: actions/setup-node@v2 with: - node-version: '14' + node-version: '16' registry-url: 'https://registry.npmjs.org' - uses: pnpm/action-setup@v2.1.0 with: - version: 6.27.1 + version: 7.8.0 run_install: true - run: pnpm run build - uses: stefanzweifel/git-auto-commit-action@v4 diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index afa2deda..79b1d24b 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -21,11 +21,11 @@ jobs: ${{ runner.os }}- - uses: actions/setup-node@v2 with: - node-version: '14' + node-version: '16' registry-url: 'https://registry.npmjs.org' - uses: pnpm/action-setup@v2.1.0 with: - version: 6.27.1 + version: 7.8.0 run_install: true - uses: rhysd/changelog-from-release/action@v2 with: @@ -52,3 +52,51 @@ jobs: with: credential: ${{ secrets.PUB_CREDENTIAL_JSON }} package_directory: ./packages/iconoir-flutter + - name: Build + run: ./node_modules/.bin/next build + working-directory: iconoir.com + - name: Export + run: ./node_modules/.bin/next export + working-directory: iconoir.com + - name: Setup Pages + uses: actions/configure-pages@v1 + - name: Upload artifact + uses: actions/upload-pages-artifact@v1 + with: + path: './iconoir.com/out' + website: + runs-on: ubuntu-latest + name: deploy + needs: [release] + steps: + - uses: actions/checkout@v2 + with: + ref: master # We have to checkout master or PNPM fails. Tag should be on master anyway. + - uses: actions/cache@v2 + with: + path: ~/.pnpm-store + key: ${{ runner.os }}-${{ hashFiles('**/pnpm-lock.yaml') }} + restore-keys: | + ${{ runner.os }}- + - uses: actions/setup-node@v2 + with: + node-version: '16' + registry-url: 'https://registry.npmjs.org' + - uses: pnpm/action-setup@v2.1.0 + with: + version: 7.8.0 + run_install: true + - name: Build Packages + run: pnpm run dist + - name: Build + run: ./node_modules/.bin/next build + working-directory: iconoir.com + - name: Export + run: ./node_modules/.bin/next export + working-directory: iconoir.com + - name: Setup Pages + uses: actions/configure-pages@v1 + - name: Upload artifact + uses: actions/upload-pages-artifact@v1 + with: + path: './iconoir.com/out' diff --git a/.npmrc b/.npmrc new file mode 100644 index 00000000..319e41e6 --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +strict-peer-dependencies=false diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index fa8719bc..a78bf259 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,32 +1,48 @@ +--- +title: How to contribute +--- + # How to contribute -:sparkles: First off, thanks for taking the time to contribute! :sparkles: +✨ First off, thanks for taking the time to contribute! ✨ The following is a quick set of guidelines for contributing to Iconoir. ## Pull Requests -> :information_source: **Note:** At the moment, to keep consistency, quality, and make the whole process time-efficient, we are not accepting pull requests containing icons. You can open an issue to request a new icon. +> **ℹ️ Note:** At the moment, to keep consistency, quality, and make the whole +> process time-efficient, we are not accepting pull requests containing icons. You can open an issue +> to request a new icon. Pull requests for new features, bug fixes, etc. are often appreciated. -:point_right: We're looking for help with fonts and libraries. +> 👉 We're looking for help with fonts and libraries. Guidelines for pull requests: -- __Make your commit messages as descriptive as possible.__ Include as much information as you can. Explain anything that the file diffs themselves won’t make apparent. -- __Target Master__. Most of bugfix or new feature should go to the `master` branch. -- __Include only related work__. If your pull request has unrelated commit, it won't be accepted. -- __Packages and Libraries__. If you're adding or updating a package or React/Vue library the target folder is `/packages/iconoir-[LIBRARY_NAME]`. -- __Fonts__. If you're adding or updating fonts the target folder is `/fonts/`. + +> **Make your commit messages as descriptive as possible.** Include as much information as you can. +> Explain anything that the file diffs themselves won't make apparent. + +> **Target Master.** Most of bugfixes or new features should go to the master branch. + +> **Include only related work.** If your pull request has unrelated commits, it won't be accepted. + +> **Packages and Libraries.** If you're adding or updating a package or React / Vue library, the +> target folder is `/packages/iconoir-[LIBRARY_NAME]`. + +> **Fonts.** If you're adding or updating fonts, the target folder is `/fonts/`. ## Icon Requests -Before creating an icon request, please search to see if someone has requested the icon already. If there is an open request, please upvote it. +Before creating an icon request, please search to see if someone has requested the icon already. If +there is an open request, please upvote it. -If the icon has not already been requested, [create an issue](https://github.com/lucaburgio/iconoir/issues/new/choose) and add as much information as possible. -Follow the rules you see when opening a new bug report. +If the icon has not already been requested, [create an +issue](https://github.com/iconoir-icons/iconoir/issues/new/choose) and add as much information as +possible. Follow the rules you see when opening a new bug report. ## Bug Reports -Before reporting an issue, please search to see if someone has filed a similar issue before. If there is already an open issue, please upvote it and/or leave a comment with additional information. +Before reporting an issue, please search to see if someone has filed a similar issue before. If +there is already an open issue, please upvote it and/or leave a comment with additional information. Follow the rules you see when opening a new bug report. diff --git a/README.md b/README.md index a0786767..9869943e 100644 --- a/README.md +++ b/README.md @@ -1,29 +1,29 @@ -

- Iconoir -

+
+ Iconoir +
-

+

Iconoir is an open-source library with 1000+ unique SVG icons, designed on a 24x24 pixels grid. No premium icons, no email sign-up, no newsletters. -

+

-

+

Browse at iconoir.com → -

+
-

+

- Version + Version - Project Stars + Project Stars - React Library + React Library - License + License -

+
## Basic Usage diff --git a/bin/build.js b/bin/build.js index d1b3c4a4..620f12dc 100644 --- a/bin/build.js +++ b/bin/build.js @@ -5,25 +5,13 @@ import { Listr } from 'listr2'; import os from 'os'; import path, { basename, dirname } from 'path'; import { fileURLToPath } from 'url'; +import { incompatibleNames } from '../constants.js'; // Paths const __dirname = dirname(fileURLToPath(import.meta.url)); const rootDir = path.join(__dirname, '..'); const iconoirIconsDir = path.join(rootDir, 'icons'); - -// Icon files with incompatible names -const incompatibleNames = { - '1st-medal': 'medal-1st', - '4k-display': 'display-4k', - '2x2-cell': 'cell-2x2', - '360-view': 'view360', - github: 'gitHub', - 'github-outline': 'gitHubOutline', - 'gitlab-full': 'gitLabFull', - linkedin: 'linkedIn', - tiktok: 'tikTok', - youtube: 'youTube', -}; +const ignoreCleanFilenames = ['IconoirContext.tsx']; // Targets for building icons const targets = { @@ -194,11 +182,18 @@ const tasks = new Listr( const files = await fs.readdir( builtIconsDir ); - const promises = files.map((file) => { - return fs.unlink( - path.join(builtIconsDir, file) - ); - }); + const promises = files + .filter( + (file) => + !ignoreCleanFilenames.includes( + path.basename(file) + ) + ) + .map((file) => { + return fs.unlink( + path.join(builtIconsDir, file) + ); + }); return Promise.all(promises).catch( (err) => { ctx[target] = { skip: true }; @@ -224,13 +219,12 @@ const tasks = new Listr( targets[target].path, '.svgrrc.json' ), - '--prettier-config', - path.join( - rootDir, - '.prettierrc.json' - ), '--out-dir', builtIconsDir, + '--template', + 'bin/templates/icon-template.cjs', + '--index-template', + 'bin/templates/index-template.cjs', ctx.tmpDir, ], { preferLocal: true } @@ -377,9 +371,10 @@ const tasks = new Listr( title: 'Building icon files', skip: (ctx) => ctx[target]?.skip, task: async (ctx) => { + const finalFileNames = []; try { - ctx.dstFilePaths.forEach( - async (file) => { + await Promise.all( + ctx.dstFilePaths.map(async (file) => { const svgfilename = path.parse(file).name; // Prefix with Svg if icon name starts with a number @@ -421,19 +416,29 @@ const tasks = new Listr( '(snakeCase)', }, async onComplete(results) { - await fs.appendFile( - path.join( - builtIconsDir, - 'iconoir_flutter.dart' - ), - `export './${basename( - results.output.path - )}';\n` + finalFileNames.push( + results.output.path ); }, }, ]); - } + }) + ); + + finalFileNames.sort(); + await fs.appendFile( + path.join( + builtIconsDir, + 'iconoir_flutter.dart' + ), + finalFileNames + .map( + (fileName) => + `export './${basename( + fileName + )}';` + ) + .join('\n') ); } catch (err) { throw new Error(err.message); diff --git a/bin/templates/icon-template.cjs b/bin/templates/icon-template.cjs new file mode 100644 index 00000000..c72f8ac0 --- /dev/null +++ b/bin/templates/icon-template.cjs @@ -0,0 +1,26 @@ +const template = ( + { template }, + opts, + { imports, interfaces, componentName, props, jsx, exports } +) => { + const plugins = ['jsx']; + if (opts.typescript) { + plugins.push('typescript'); + } + const typeScriptTpl = template.smart({ plugins }); + props[0].name = 'passedProps'; + return typeScriptTpl.ast`${imports} +import { IconoirContext } from './IconoirContext' + +${interfaces} + +function ${componentName}(${props}) { + const context = React.useContext(IconoirContext); + const props = { ...context, ...passedProps }; + return ${jsx}; +} +${exports} + `; +}; + +module.exports = template; diff --git a/bin/templates/index-template.cjs b/bin/templates/index-template.cjs new file mode 100644 index 00000000..6f3b6685 --- /dev/null +++ b/bin/templates/index-template.cjs @@ -0,0 +1,15 @@ +const path = require('path'); + +function template(filePaths) { + const exportEntries = filePaths.map((filePath) => { + const basename = path.basename(filePath, path.extname(filePath)); + const exportName = /^\d/.test(basename) ? `Svg${basename}` : basename; + return `export { default as ${exportName} } from './${basename}'`; + }); + exportEntries.push( + "export { IconoirProvider, IconoirContext, IconoirContextValue } from './IconoirContext'" + ); + return exportEntries.join('\n'); +} + +module.exports = template; diff --git a/constants.js b/constants.js new file mode 100644 index 00000000..b6dfb914 --- /dev/null +++ b/constants.js @@ -0,0 +1,12 @@ +export const incompatibleNames = { + '1st-medal': 'medal-1st', + '4k-display': 'display-4k', + '2x2-cell': 'cell-2x2', + '360-view': 'view360', + github: 'gitHub', + 'github-outline': 'gitHubOutline', + 'gitlab-full': 'gitLabFull', + linkedin: 'linkedIn', + tiktok: 'tikTok', + youtube: 'youTube', +}; diff --git a/css/README.md b/css/README.md new file mode 100644 index 00000000..9bc0e881 --- /dev/null +++ b/css/README.md @@ -0,0 +1,17 @@ +# Iconoir CSS + +Import the CSS File: + +```html + +``` + +Here is an example in HTML: + +```html + +``` +The class must always be "iconoir-" and then the name of the icon. You can find the names of the +icons [here](https://iconoir.com). + + diff --git a/docs/framer.md b/docs/framer.md new file mode 100644 index 00000000..268e228e --- /dev/null +++ b/docs/framer.md @@ -0,0 +1,7 @@ +# Iconoir Framer + +Iconoir is happily part of [Framer](https://framer.com) now. To start using the icons: On the top +menu, `Insert` > `Graphics` > `Iconoir`. You can switch between icons from the right sidebar in the +editor. + + diff --git a/iconoir.com/.eslintrc.json b/iconoir.com/.eslintrc.json new file mode 100755 index 00000000..92ada67c --- /dev/null +++ b/iconoir.com/.eslintrc.json @@ -0,0 +1,6 @@ +{ + "extends": "next/core-web-vitals", + "rules": { + "react/no-unescaped-entities": ["off"] + } +} diff --git a/iconoir.com/.gitignore b/iconoir.com/.gitignore new file mode 100755 index 00000000..737d8721 --- /dev/null +++ b/iconoir.com/.gitignore @@ -0,0 +1,35 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* +.pnpm-debug.log* + +# local env files +.env*.local + +# vercel +.vercel + +# typescript +*.tsbuildinfo diff --git a/iconoir.com/README.md b/iconoir.com/README.md new file mode 100755 index 00000000..c87e0421 --- /dev/null +++ b/iconoir.com/README.md @@ -0,0 +1,34 @@ +This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app). + +## Getting Started + +First, run the development server: + +```bash +npm run dev +# or +yarn dev +``` + +Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. + +You can start editing the page by modifying `pages/index.tsx`. The page auto-updates as you edit the file. + +[API routes](https://nextjs.org/docs/api-routes/introduction) can be accessed on [http://localhost:3000/api/hello](http://localhost:3000/api/hello). This endpoint can be edited in `pages/api/hello.ts`. + +The `pages/api` directory is mapped to `/api/*`. Files in this directory are treated as [API routes](https://nextjs.org/docs/api-routes/introduction) instead of React pages. + +## Learn More + +To learn more about Next.js, take a look at the following resources: + +- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. +- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. + +You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome! + +## Deploy on Vercel + +The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. + +Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details. diff --git a/iconoir.com/components/AnimatedSvg.tsx b/iconoir.com/components/AnimatedSvg.tsx new file mode 100644 index 00000000..e9ef2cf1 --- /dev/null +++ b/iconoir.com/components/AnimatedSvg.tsx @@ -0,0 +1,209 @@ +import React from 'react'; +import anime from 'animejs'; + +// eslint-disable-next-line no-unused-vars +type SetInstances = (instances: anime.AnimeInstance[]) => void; + +function playWithLines1(setInstances: SetInstances): anime.AnimeInstance[] { + return [ + anime({ + targets: '.playWithLines2 .roll1', + strokeDashoffset: [anime.setDashoffset, 0], + easing: 'easeInOutSine', + duration: 1500, + delay: function (el, i) { + return i * 250; + }, + direction: 'alternate', + complete: () => setInstances(playWithLines2(setInstances)), + }), + ]; +} +function playWithLines2(setInstances: SetInstances): anime.AnimeInstance[] { + return [ + anime({ + targets: '.playWithLines2 .roll2', + strokeDashoffset: [anime.setDashoffset, 0], + easing: 'easeInOutSine', + duration: 1500, + delay: function (el, i) { + return i * 250; + }, + direction: 'alternate', + complete: () => setInstances(playWithLines3(setInstances)), + }), + ]; +} +function playWithLines3(setInstances: SetInstances): anime.AnimeInstance[] { + return [ + anime({ + targets: '.playWithLines2 .roll3', + strokeDashoffset: [anime.setDashoffset, 0], + easing: 'easeInOutSine', + duration: 1500, + delay: function (el, i) { + return i * 250; + }, + direction: 'alternate', + complete: () => setInstances(playWithLines4(setInstances)), + }), + + anime({ + targets: '.playWithLines2', + rotate: '130', + easing: 'spring(1, 80, 10, 0)', + duration: 30, + direction: 'alternate', + delay: 100, + }), + ]; +} +function playWithLines4(setInstances: SetInstances): anime.AnimeInstance[] { + return [ + anime({ + targets: '.playWithLines2 .roll4', + strokeDashoffset: [anime.setDashoffset, 0], + easing: 'easeInOutSine', + duration: 1500, + delay: function (el, i) { + return i * 250; + }, + direction: 'alternate', + complete: () => setInstances(playWithLines1(setInstances)), + }), + ]; +} + +export function AnimatedSvg() { + const instancesRef = React.useRef(null); + React.useEffect(() => { + instancesRef.current = playWithLines1((instances) => { + instancesRef.current = instances; + }); + return () => { + for (const instance of instancesRef.current || []) { + instance.pause(); + } + }; + }, []); + return ( + + + + + + + + + + + + + + + + ); +} diff --git a/iconoir.com/components/AvailableFor.tsx b/iconoir.com/components/AvailableFor.tsx new file mode 100644 index 00000000..e0141a89 --- /dev/null +++ b/iconoir.com/components/AvailableFor.tsx @@ -0,0 +1,142 @@ +import React from 'react'; +import styled, { keyframes } from 'styled-components'; +import useResizeObserver from 'use-resize-observer'; +import { FEEDBACK_LINK, LIBRARY_LINKS, SUGGEST_LIBRARY } from './constants'; +import { media } from './responsive'; +import { Text14 } from './Typography'; + +export function AvailableFor() { + const { ref, width } = useResizeObserver(); + return ( + <> + Available For + + + Available for + + + + + + + + + + + + + + + + + + More? + + + Are you using the library? + + + + + + ); +} + +const AreYouUsing = styled.div` + * { + white-space: nowrap; + } +`; +const MobileHeader = styled(Text14)` + display: block; + margin-top: 5px; + text-align: center; + ${media.lg} { + display: none; + } +`; +const DesktopHeader = styled(Text14)` + display: none; + ${media.lg} { + display: block; + } +`; +const AvailableForAnimation = keyframes` + 5% { + transform: translateX(0); + } + 45% { + transform: translateX(calc((var(--content-width) + 60px - 100vw) * -1)); + } + 55% { + transform: translateX(calc((var(--content-width) + 60px - 100vw) * -1)); + } + 95% { + transform: translateX(0); + } +`; +const AvailableForOuter = styled.div` + max-width: 100vw; + margin: 16px -30px 70px -30px; + padding: 0 30px; + overflow: hidden; + ${media.lg} { + margin: 120px auto; + padding: 0; + } +`; +const AvailableForContainer = styled.div<{ contentWidth: number }>` + display: flex; + align-items: center; + justify-content: flex-start; + width: max-content; + --content-width: ${(props) => props.contentWidth}px; + ${(props) => (props.contentWidth ? '&' : '&.noop')} { + animation: ${AvailableForAnimation} 40s cubic-bezier(0.37, 0, 0.63, 1) + infinite; + } + > :not(:last-child) { + margin-right: 30px; + } + ${media.sm} { + justify-content: center; + animation: none; + width: auto; + } + ${media.md} { + > :not(:last-child) { + margin-right: 60px; + } + } +`; +const AvailableForImage = styled.img` + height: 40px; + display: block; + ${media.lg} { + height: 50px; + } +`; diff --git a/iconoir.com/components/Button.tsx b/iconoir.com/components/Button.tsx new file mode 100644 index 00000000..4368fae1 --- /dev/null +++ b/iconoir.com/components/Button.tsx @@ -0,0 +1,66 @@ +import styled from 'styled-components'; + +export const ResetButton = styled.button` + font-family: inherit; + font-size: 100%; + line-height: 1.15; + margin: 0; + text-transform: none; + -webkit-appearance: none; + border: none; + outline: none; +`; + +export const LargeButton = styled(ResetButton)` + background: var(--black); + height: 75px; + display: inline-flex; + align-items: center; + text-decoration: none; + color: var(--white); + padding: 0 43px; + font-size: 20px; + line-height: 26px; + font-weight: 700; + position: relative; + cursor: pointer; + z-index: 12; + > :not(:last-child) { + margin-right: 15px; + } + * { + font-weight: 700; + } + &::after { + content: ' '; + display: block; + position: absolute; + inset: 0; + border: solid 3px var(--black); + opacity: 0; + transition: inset 0.5s cubic-bezier(0.16, 1, 0.3, 1), opacity 0.15s linear; + z-index: 10; + } + &:focus::after, + &:hover::after { + inset: -7px; + opacity: 1; + } +`; + +export const Button = styled(LargeButton)` + height: 40px; + font-size: 13px; + line-height: 21px; + padding: 0 18px; + &::after { + border-width: 2px; + } + &:focus::after, + &:hover::after { + inset: -4px; + } + &:active { + background: var(--darker-gray); + } +`; diff --git a/iconoir.com/components/CategoryRow.tsx b/iconoir.com/components/CategoryRow.tsx new file mode 100644 index 00000000..249e2cde --- /dev/null +++ b/iconoir.com/components/CategoryRow.tsx @@ -0,0 +1,53 @@ +import React from 'react'; +import styled from 'styled-components'; +import { media } from './responsive'; +import { Text15 } from './Typography'; + +export interface CategoryRowProps { + category: string; + numIcons: number; + style?: any; +} +export function CategoryRow({ category, numIcons, style }: CategoryRowProps) { + return ( + + + {category} + + {numIcons} Icon{numIcons === 1 ? '' : 's'} + + + + + ); +} + +const InnerContainer = styled.div` + display: flex; + align-items: center; + width: 100%; + * { + line-height: 1; + } + > :not(:last-child) { + margin-right: 10px; + } +`; +const Container = styled.div` + display: flex; + align-items: flex-end; + padding-bottom: 25px; + box-sizing: border-box; + ${media.sm} { + padding-bottom: 40px; + } +`; +const Title = styled(Text15)` + font-weight: 700; + color: var(--black); +`; +const Separator = styled.div` + height: 1px; + flex: 1; + background: var(--light-gray); +`; diff --git a/iconoir.com/components/ChangelogEntry.tsx b/iconoir.com/components/ChangelogEntry.tsx new file mode 100644 index 00000000..063f9459 --- /dev/null +++ b/iconoir.com/components/ChangelogEntry.tsx @@ -0,0 +1,129 @@ +import { BoxIso } from 'iconoir-react'; +import React from 'react'; +import styled from 'styled-components'; +import { Code, CopyButton, Text15, Text18 } from './Typography'; +import moment from 'moment'; +import { MDXRemoteSerializeResult } from 'next-mdx-remote'; +import { MDXRemote } from './MDXRemote'; +import { FILE_PREFIX } from './constants'; +import { media } from './responsive'; + +const EXPAND_HEIGHT = 400; + +export interface ChangelogEntryProps { + name: string; + body: MDXRemoteSerializeResult; + created_at: string; +} +export function ChangelogEntry({ + name, + body, + created_at, +}: ChangelogEntryProps) { + const [expanded, setExpanded] = React.useState(false); + const [shouldExpand, setShouldExpand] = React.useState(false); + const containerRef = React.useRef(null); + React.useEffect(() => { + if ( + containerRef.current && + containerRef.current.clientHeight > EXPAND_HEIGHT + ) { + setShouldExpand(true); + } + }, []); + return ( + + + + + + + + {name} + + {moment(created_at).format('MMM DD, YYYY')} + + + + + {shouldExpand ? ( + + setExpanded((e) => !e)}> + {expanded ? 'Collapse' : 'Expand'} + + + ) : null} + + + ); +} + +const Container = styled.div` + margin: 40px 0 !important; + display: flex; + align-items: stretch; + flex-direction: column; + width: 100%; + ${media.lg} { + flex-direction: row; + align-items: flex-start; + margin: 24px 0 !important; + } +`; +const ContainerLeft = styled.div` + display: flex; + align-items: flex-start; + margin-bottom: 12px; + ${media.lg} { + margin-bottom: 0; + margin-right: 30px; + } +`; +const ContainerIcon = styled.div` + font-size: 18px; + color: var(--black); + margin-right: 18px; +`; +const TitleContainer = styled.div` + width: 100px; +`; +const EntryTitle = styled(Text18)` + color: var(--black); + font-weight: 700; +`; +const ExpandContainer = styled.div` + position: absolute; + bottom: 16px; + right: 23px; +`; +const EntryBody = styled(Code)<{ expanded?: boolean }>` + flex: 1; + margin: 0; + max-height: ${(props) => (props.expanded ? 'none' : `${EXPAND_HEIGHT}px`)}; + position: relative; + overflow: hidden; + * { + font-family: var(--code-family); + } + ul { + list-style: none none; + margin: 0; + padding: 0; + li { + margin-bottom: 8px; + } + } + code { + display: inline-block; + background: var(--gray) !important; + color: var(--black); + font-family: var(--font-family) !important; + padding: 0 4px; + font-size: 18px !important; + } +`; diff --git a/iconoir.com/components/CurrentVersion.tsx b/iconoir.com/components/CurrentVersion.tsx new file mode 100644 index 00000000..da9858a6 --- /dev/null +++ b/iconoir.com/components/CurrentVersion.tsx @@ -0,0 +1,29 @@ +import Link from 'next/link'; +import React from 'react'; +import styled from 'styled-components'; +import { Text13 } from './Typography'; + +export interface CurrentVersionProps { + version: string; + color?: string; +} +export function CurrentVersion({ version, color }: CurrentVersionProps) { + return ( + + + {version} + + + ); +} + +const Container = styled(Text13)` + color: var(--black); + font-weight: 700; + background: var(--pink); + line-height: 1; + padding: 7px 16px; + border-radius: 200px; + display: block; + text-decoration: none !important; +`; diff --git a/iconoir.com/components/CustomizationEditor.tsx b/iconoir.com/components/CustomizationEditor.tsx new file mode 100644 index 00000000..836a9ff7 --- /dev/null +++ b/iconoir.com/components/CustomizationEditor.tsx @@ -0,0 +1,102 @@ +import React from 'react'; +import { DEFAULT_CUSTOMIZATIONS, IconListCustomizations } from './IconList'; +import styled from 'styled-components'; +import { Text13, Text18 } from './Typography'; +import { Button } from './Button'; +import { ColorInput } from './Input'; +import { Slider } from './Slider'; + +export interface CustomizationEditorProps { + customizations: IconListCustomizations; + // eslint-disable-next-line no-unused-vars + onChange: (customizations: IconListCustomizations) => void; +} +export function CustomizationEditor({ + customizations, + onChange, +}: CustomizationEditorProps) { + const [, startTransition] = (React as any).useTransition(); + const [color, setColor] = React.useState(customizations.hexColor); + const [size, setSize] = React.useState(customizations.size); + const [strokeWidth, setStrokeWidth] = React.useState( + customizations.strokeWidth + ); + React.useEffect(() => { + setColor(customizations.hexColor); + setSize(customizations.size); + setStrokeWidth(customizations.strokeWidth); + }, [customizations]); + + function updateCustomizations(partial: Partial) { + startTransition(() => { + onChange({ + ...customizations, + ...partial, + }); + }); + } + + return ( + <> +
+ + Customize + + +
+ + { + setSize(values[0]); + updateCustomizations({ size: values[0] }); + }} + /> + + + { + setStrokeWidth(values[0]); + updateCustomizations({ strokeWidth: values[0] }); + }} + /> + + + Color + { + setColor(e.target.value); + updateCustomizations({ hexColor: e.target.value }); + }} + /> + + + ); +} + +const Header = styled.div` + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 45px; +`; +const Field = styled.div` + margin-bottom: 35px; +`; +const HorizontalField = styled(Field)` + display: flex; + align-items: center; + justify-content: space-between; +`; diff --git a/iconoir.com/components/DocumentationNavigation.tsx b/iconoir.com/components/DocumentationNavigation.tsx new file mode 100644 index 00000000..74c24004 --- /dev/null +++ b/iconoir.com/components/DocumentationNavigation.tsx @@ -0,0 +1,170 @@ +import React from 'react'; +import { DocumentationItem } from '../pages/docs/[...slug]'; +import styled from 'styled-components'; +import Link from 'next/link'; +import { useRouter } from 'next/router'; +import { media } from './responsive'; +import { NavArrowUp } from 'iconoir-react'; + +export interface DocumentationNavigationProps { + documentationItems: DocumentationItem[]; + pathPrefix?: string[]; +} +export function DocumentationNavigation({ + documentationItems, + pathPrefix, +}: DocumentationNavigationProps) { + const router = useRouter(); + const activePath = router.asPath.replace('/docs/', ''); + const [expandedTitles, setExpandedTitles] = React.useState([]); + React.useEffect(() => { + const expandedItems = documentationItems.filter((item) => { + const normalized = activePath.replace((pathPrefix || []).join('/'), ''); + return ( + normalized === item.path || + item.children?.some((child) => { + return activePath.startsWith( + [item.path, child.path].filter(Boolean).join('/') + ); + }) + ); + }); + setExpandedTitles(expandedItems.map((item) => item.title)); + }, [activePath, pathPrefix, documentationItems]); + return ( + <> + {documentationItems.map((documentationItem) => { + const path = [...(pathPrefix || []), documentationItem.path] + .filter(Boolean) + .join('/'); + if (documentationItem.children?.length) { + const active = expandedTitles.includes(documentationItem.title); + return ( + + { + setExpandedTitles((et) => { + const includes = et.includes(documentationItem.title); + return includes + ? et.filter((i) => i !== documentationItem.title) + : [...et, documentationItem.title]; + }); + }} + > + + + + {documentationItem.title} + + + + + + ); + } else { + return ( + + + {documentationItem.title} + {documentationItem.label ? ( + + {documentationItem.label} + + ) : null} + + + ); + } + })} + + ); +} + +const HeaderItemIcon = styled.div<{ active?: boolean }>` + font-size: 13px; + transition: transform 0.25s linear; + transform: rotate(${(props) => (props.active ? 180 : 0)}deg); + margin-right: 7px; + position: relative; + top: 6px; + svg { + display: block; + } + ${media.lg} { + display: none; + } +`; +const ChildrenContainer = styled.div<{ expanded?: boolean }>` + display: ${(props) => (props.expanded ? 'block' : 'none')}; + ${media.lg} { + display: block; + } +`; +const HeaderItem = styled.div` + padding: 10px 30px; + text-transform: uppercase; + font-size: 12px; + line-height: 19px; + color: var(--black); + letter-spacing: 0.12em; + font-weight: 700; + display: flex; + align-items: baseline; + cursor: pointer; + ${media.lg} { + padding: 22px 45px; + cursor: default; + pointer-events: none; + &:not(:first-child) { + margin-top: 10px; + } + } +`; +const NavigationItem = styled.div<{ active?: boolean }>` + padding: 12px 45px 12px 75px; + transition: background 0.1s linear, color 0.1s linear; + font-weight: 500; + font-size: 16px; + line-height: 14.5px; + letter-spacing: -0.02em; + color: var(--black-60); + display: flex; + align-items: center; + text-decoration: none; + span { + font-weight: 500; + } + > :not(:last-child) { + margin-right: 14px; + } + &:hover, + ${(props) => (props.active ? '&' : '&.noop')} { + background: var(--light-gray); + color: var(--black); + } + ${(props) => (props.active ? 'span' : '&.noop')} { + font-weight: 700; + } + ${media.lg} { + padding: 12px 45px 12px 65px; + } +`; +const NavigationItemLabel = styled.span` + display: flex; + align-items: center; + justify-content: center; + padding: 0 4px; + font-size: 11px; + line-height: 17.6px; + font-weight: 700; + letter-spacing: 0.12em; + text-transform: uppercase; + color: var(--white); + background: var(--black); +`; diff --git a/iconoir.com/components/Explore.tsx b/iconoir.com/components/Explore.tsx new file mode 100644 index 00000000..12b8972a --- /dev/null +++ b/iconoir.com/components/Explore.tsx @@ -0,0 +1,79 @@ +import { IconoirProvider } from 'iconoir-react'; +import React from 'react'; +import styled from 'styled-components'; +import { CustomizationEditor } from './CustomizationEditor'; +import { FiltersEditor } from './FiltersEditor'; +import { Icon, IconList, IconListFilters } from './IconList'; +import { media } from './responsive'; +import { useCustomizationPersistence } from './useCustomizationPersistence'; + +export interface ExploreProps { + allIcons: Icon[]; +} +export function Explore({ allIcons }: ExploreProps) { + const [filters, setFilters] = React.useState({}); + const [customizations, setCustomizations] = useCustomizationPersistence(); + return ( + + + + + + + + + + + + + + + + + ); +} + +const Container = styled.div` + display: flex; + align-items: flex-start; + flex-direction: row; +`; +const Left = styled.div` + flex: 1; + min-height: calc(100vh - 100px); +`; +const Right = styled.div` + position: sticky; + top: 50px; + width: 275px; + margin-left: 68px; + display: none; + ${media.md} { + display: block; + } +`; +const FilterContainer = styled.div<{ isMobile?: boolean }>` + display: ${(props) => (props.isMobile ? 'block' : 'none')}; + margin-bottom: 40px; + position: sticky; + top: 20px; + z-index: 100; + ${media.md} { + position: relative; + top: 0; + display: ${(props) => (props.isMobile ? 'none' : 'block')}; + margin-bottom: 50px; + } +`; diff --git a/iconoir.com/components/FiltersEditor.tsx b/iconoir.com/components/FiltersEditor.tsx new file mode 100644 index 00000000..54ca3b3d --- /dev/null +++ b/iconoir.com/components/FiltersEditor.tsx @@ -0,0 +1,39 @@ +import React from 'react'; +import { IconListFilters } from './IconList'; +import { LargeInput } from './Input'; + +export interface FiltersEditorProps { + filters: IconListFilters; + // eslint-disable-next-line no-unused-vars + onChange: (filters: IconListFilters) => void; +} +export function FiltersEditor({ filters, onChange }: FiltersEditorProps) { + const [, startTransition] = (React as any).useTransition(); + const [search, setSearch] = React.useState(filters.search); + React.useEffect(() => { + setSearch(filters.search); + }, [filters]); + + function updateFilters(partial: Partial) { + startTransition(() => { + onChange({ + ...filters, + ...partial, + }); + }); + } + + return ( + { + const value = e.target.value; + setSearch(value); + updateFilters({ search: value }); + }} + /> + ); +} diff --git a/iconoir.com/components/Footer.tsx b/iconoir.com/components/Footer.tsx new file mode 100644 index 00000000..ae78a448 --- /dev/null +++ b/iconoir.com/components/Footer.tsx @@ -0,0 +1,42 @@ +import { PeaceHand } from 'iconoir-react'; +import React from 'react'; +import styled from 'styled-components'; +import { LICENSE_LINK } from './constants'; +import { Logo, LogoContainer, LogoIcon } from './Header'; +import { NavigationItemContainer } from './NavigationItem'; + +export function Footer() { + return ( + + + + + + + + + License + + + ); +} + +const Container = styled.div` + margin-top: 100px; + padding-top: 30px; + border-top: solid 2px var(--light-gray); + display: flex; + align-items: center; + > :not(:last-child) { + margin-right: 50px; + } +`; + +const FooterNavigationItem = styled(NavigationItemContainer)` + color: var(--black); +`; diff --git a/iconoir.com/components/GA.tsx b/iconoir.com/components/GA.tsx new file mode 100644 index 00000000..cfc9800a --- /dev/null +++ b/iconoir.com/components/GA.tsx @@ -0,0 +1,21 @@ +import React from 'react'; +import Script from 'next/script'; + +export function GA() { + return ( + <> + + + ); +} diff --git a/iconoir.com/components/Header.tsx b/iconoir.com/components/Header.tsx new file mode 100644 index 00000000..f13a8684 --- /dev/null +++ b/iconoir.com/components/Header.tsx @@ -0,0 +1,198 @@ +import React from 'react'; +import styled from 'styled-components'; +import { AUTHOR_LINKS } from './constants'; +import { Cancel, Heart, Menu } from 'iconoir-react'; +import { CurrentVersion } from './CurrentVersion'; +import { media } from './responsive'; +import { ResetButton } from './Button'; +import { AnimatedSvg } from './AnimatedSvg'; +import { NavigationItem, NavigationItemContainer } from './NavigationItem'; +import Link from 'next/link'; + +export interface HeaderProps { + currentVersion: string; + currentVersionColor?: string; +} +export function Header({ currentVersion, currentVersionColor }: HeaderProps) { + const [menuVisible, setMenuVisible] = React.useState(false); + return ( + + + + + + + + + + + + + + + + + Icons + Documentation + + Donate — Our Mission + + + Made with by{' '} + + Luca + {' '} + &{' '} + + Sam + + + + + + + Designed and built with by{' '} + + Luca + {' '} + &{' '} + + Sam + + + setMenuVisible((v) => !v)}> + {menuVisible ? : } + + + + ); +} + +export const LogoContainer = styled.div` + position: relative; + z-index: 101; + display: inline-flex; + align-items: center; +`; +const MobileMenuButton = styled(ResetButton)` + z-index: 101; + color: var(--black); + background: transparent; + display: inline-block; + margin-left: auto !important; + cursor: pointer; + svg { + width: 24px; + height: 24px; + } + ${media.lg} { + display: none; + } +`; +const MobileMenuContainer = styled.div<{ visible?: boolean }>` + position: absolute; + top: 0; + left: 0; + right: 0; + z-index: 100; + background: white; + padding-top: 100px; + transition: transform 0.5s cubic-bezier(0.16, 1, 0.3, 1), opacity 0.25s linear; + box-shadow: 0px 4px 20px rgba(0, 0, 0, 0.1); + transform: translateY(-100%); + pointer-events: none; + opacity: 0; + display: flex; + flex-direction: column; + align-items: stretch; + ${(props) => (props.visible ? '&' : '&.noop')} { + pointer-events: all; + transform: translateY(0); + opacity: 1; + } + ${media.lg} { + margin-left: auto; + background: none; + padding-top: 0; + box-shadow: none; + display: flex; + flex-direction: row; + position: relative; + align-items: center; + transform: none; + pointer-events: all; + opacity: 1; + > :not(:last-child) { + margin-right: 60px; + } + } +`; +const Container = styled.div` + display: flex; + align-items: center; + justify-content: center; +`; +const HeaderItem = styled.div` + flex: 1; + width: 33%; + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; +`; +const HeaderCenter = styled(HeaderItem)` + padding: 0 16px; + > :not(:last-child) { + margin-right: 16px; + } +`; +const HeaderLeft = styled(HeaderItem)` + justify-content: flex-start; +`; +const HeaderRight = styled(HeaderItem)` + justify-content: flex-end; +`; +export const Logo = styled.img` + height: 24px; + color: var(--black); + margin-right: 16px !important; + z-index: 101; +`; +export const LogoIcon = styled.div` + color: var(--black); + margin-right: 4px !important; + svg { + width: 36px; + height: 36px; + } +`; +const BuiltWith = styled(NavigationItemContainer)<{ isMobile?: boolean }>` + display: ${(props) => (props.isMobile ? 'flex' : 'none')}; + ${media.lg} { + display: ${(props) => (props.isMobile ? 'none' : 'flex')}; + } + align-items: center; + justify-content: center; + color: var(--black-60); + border-bottom: none !important; + svg { + fill: var(--black); + margin: 0 0.22em; + } + > * { + margin: 0 0.22em; + } + a { + color: var(--black); + font-weight: 700; + } + > :last-child { + margin-right: 0; + } + ${media.lg} { + justify-content: flex-start; + a { + font-weight: normal; + } + } +`; diff --git a/iconoir.com/components/HeaderBackground.tsx b/iconoir.com/components/HeaderBackground.tsx new file mode 100644 index 00000000..3ebe8ba5 --- /dev/null +++ b/iconoir.com/components/HeaderBackground.tsx @@ -0,0 +1,46 @@ +import React from 'react'; +import styled from 'styled-components'; +import { media } from './responsive'; + +export interface HeaderBackgroundProps { + children: React.ReactElement; + src: string; +} +export function HeaderBackground({ children, src }: HeaderBackgroundProps) { + return ( + + + + + {children} + + ); +} + +const HeaderContainer = styled.div` + position: relative; +`; +const ImageContainer = styled.div` + position: absolute; + top: -100px; + bottom: -100px; + left: -30px; + right: -30px; + ${media.lg} { + left: -100px; + right: -100px; + } + z-index: -1; + pointer-events: none; + display: flex; + align-items: center; + justify-content: center; +`; +const BackgroundImage = styled.img` + width: 90%; + max-width: calc(min(1100px, 90vw)); + max-height: 60%; + ${media.md} { + max-height: 100%; + } +`; diff --git a/iconoir.com/components/Icon.tsx b/iconoir.com/components/Icon.tsx new file mode 100644 index 00000000..d7ea7eea --- /dev/null +++ b/iconoir.com/components/Icon.tsx @@ -0,0 +1,175 @@ +import React from 'react'; +import { DEFAULT_CUSTOMIZATIONS, Icon as IconType } from './IconList'; +import styled from 'styled-components'; +import * as AllIcons from 'iconoir-react'; +import { ResetButton } from './Button'; +import { showNotification } from '../helpers/showNotification'; + +const HEADER = ''; +function bakeSvg( + svgString: string, + color: string, + strokeWidth: string | number +) { + return ( + HEADER + + svgString + .replace( + /stroke="currentColor"/g, + `stroke="currentColor" stroke-width="${strokeWidth}"` + ) + .replace(/currentColor/g, color) + ); +} + +export interface IconProps { + iconWidth: number; + icon: IconType; +} +export function Icon({ iconWidth, icon }: IconProps) { + const IconComponent = (AllIcons as any)[icon.iconComponentName]; + const iconContainerRef = React.useRef(null); + const downloadRef = React.useRef(null); + const htmlContentsRef = React.useRef(''); + const iconContext = React.useContext(AllIcons.IconoirContext); + const [supportsClipboard, setSupportsClipboard] = React.useState(false); + React.useEffect(() => { + setSupportsClipboard( + typeof window !== 'undefined' && + typeof window?.navigator?.clipboard?.writeText !== 'undefined' + ); + }, []); + React.useEffect(() => { + if (iconContainerRef.current) { + htmlContentsRef.current = bakeSvg( + iconContainerRef.current.innerHTML, + iconContext.color || DEFAULT_CUSTOMIZATIONS.hexColor, + iconContext.strokeWidth || DEFAULT_CUSTOMIZATIONS.strokeWidth + ); + } + }, [iconContext, supportsClipboard]); + React.useEffect(() => { + const element = + downloadRef.current || + (iconContainerRef.current as unknown as HTMLAnchorElement); + if (element) { + element.href = `data:image/svg+xml;base64,${btoa( + htmlContentsRef.current + )}`; + } + }, [iconContext, supportsClipboard]); + return ( +
+ + + + + {supportsClipboard ? ( + + { + if (htmlContentsRef.current) { + navigator.clipboard + .writeText(htmlContentsRef.current) + .then(() => { + showNotification('SVG code copied!'); + }) + .catch((err) => { + console.error(err); + }); + } + }} + > + Copy SVG + + + Download + + + ) : null} + + {icon.filename} +
+ ); +} + +const HoverContainer = styled.div<{ supportsCopy?: boolean }>` + position: absolute; + display: ${(props) => (props.supportsCopy ? 'block' : 'none')}; + inset: 0; + display: flex; + align-items: stretch; + justify-content: stretch; + flex-direction: column; + border-radius: 12px; + overflow: hidden; + transform: translateZ(0px); // Safari Fix + transition: opacity 0.1s linear; + opacity: 0; + pointer-events: none; +`; +const HoverButton = styled(ResetButton)` + display: flex; + align-items: center; + justify-content: center; + background: var(--light-gray); + border-radius: 0 !important; + transition: background 0.1s linear; + color: var(--black); + font-size: 14px; + line-height: 23px; + font-weight: 700; + text-align: center; + flex: 1; + cursor: pointer; + text-decoration: none; + &:hover, + &:active { + background: var(--gray); + } +`; +const BorderContainer = styled.div<{ iconWidth: number }>` + width: ${(props) => props.iconWidth}px; + box-sizing: border-box; + padding-bottom: 100%; + position: relative; + border: solid 1px var(--light-gray); + border-radius: 12px; + margin-bottom: 10px; + @media (hover: hover) { + &:hover ${HoverContainer} { + opacity: 1; + pointer-events: all; + } + } +`; +const IconContainer = styled.div` + position: absolute; + inset: 0; + display: flex; + align-items: center; + justify-content: center; +`; +const Subtitle = styled.div` + font-size: 11px; + font-weight: 500; + line-height: 14.74px; + color: var(--black-40); + text-align: center; +`; diff --git a/iconoir.com/components/IconList.tsx b/iconoir.com/components/IconList.tsx new file mode 100644 index 00000000..ff77f874 --- /dev/null +++ b/iconoir.com/components/IconList.tsx @@ -0,0 +1,200 @@ +import React from 'react'; +import { + VariableSizeList as List, + ListChildComponentProps, + areEqual, +} from 'react-window'; +import { chunk } from 'lodash'; +import useResizeObserver from 'use-resize-observer'; +import { ICON_SPACE, ICON_WIDTH } from './constants'; +import { CategoryRow } from './CategoryRow'; +import { IconsRow } from './IconsRow'; +import { ReactWindowScroller } from './ReactWindowScroller'; +import styled from 'styled-components'; +import { IconListEmpty } from './IconListEmpty'; + +export interface IconListFilters { + search?: string; +} +export interface IconListCustomizations { + size: number; + strokeWidth: number; + hexColor: string; +} +export interface Icon { + filename: string; + category: string; + tags: string[]; + iconComponentName: string; +} + +export const DEFAULT_CUSTOMIZATIONS: IconListCustomizations = { + size: 24, + strokeWidth: 1.5, + hexColor: '#000000', +}; + +function normalizeString(s: string) { + return s.toLowerCase().replace(/[!@#$%^&*(),.\][-]/g, ''); +} + +function filterIcons(allIcons: Icon[], filters: IconListFilters): Icon[] { + if (filters.search) { + return allIcons.filter((icon) => { + const normalSearch = normalizeString(filters.search!); + return ( + normalizeString(icon.filename).includes(normalSearch) || + normalizeString(icon.category).includes(normalSearch) || + icon.tags.some((tag) => normalizeString(tag).includes(normalSearch)) + ); + }); + } else return allIcons; +} + +interface IconCategoryRow { + category: string; + numIcons: number; +} +interface IconIconsRow { + icons: Icon[]; +} +type IconRow = IconCategoryRow | IconIconsRow; +function isCategoryRow(iconRow: IconRow): iconRow is IconCategoryRow { + return !!(iconRow as IconCategoryRow).category; +} + +function getRowsFromIcons( + filteredIcons: Icon[], + iconsPerRow: number +): IconRow[] { + const categoryGroups: Record = {}; + for (const icon of filteredIcons) { + if (!categoryGroups[icon.category]) categoryGroups[icon.category] = []; + categoryGroups[icon.category].push(icon); + } + + const result: IconRow[] = []; + const sortedCategories = Object.keys(categoryGroups).sort(); + for (const sortedCategory of sortedCategories) { + result.push({ + category: sortedCategory, + numIcons: categoryGroups[sortedCategory].length, + }); + const iconRows = chunk(categoryGroups[sortedCategory], iconsPerRow); + for (const iconRow of iconRows) { + result.push({ icons: iconRow }); + } + } + + return result; +} + +const ICON_BOTTOM_PADDING = 65; +const HEADER_HEIGHT = 150; +const HEADER_INNER_HEIGHT = 15 + 40; +const HEADER_TOP_PADDING = HEADER_HEIGHT - HEADER_INNER_HEIGHT; +function getItemSize(row: IconRow, iconWidth: number): number { + if (isCategoryRow(row)) { + return HEADER_HEIGHT; + } else { + return iconWidth + ICON_BOTTOM_PADDING; + } +} + +interface IconListContextValue { + iconWidth: number; + iconsPerRow: number; +} +export const IconListContext = React.createContext< + IconListContextValue | undefined +>(undefined); + +export interface IconListProps { + filters: IconListFilters; + allIcons: Icon[]; +} +export function IconList({ filters, allIcons }: IconListProps) { + const filteredIcons = filterIcons(allIcons, filters); + const { ref, width = 400 } = useResizeObserver(); + const iconsPerRow = width + ? Math.floor((width + ICON_SPACE) / (ICON_WIDTH + ICON_SPACE)) + : null; + let children = null; + const listRef = React.useRef | null>(); + const [height, setHeight] = React.useState(400); + const iconWidth = iconsPerRow + ? Math.floor((width + ICON_SPACE) / iconsPerRow) - ICON_SPACE + : null; + React.useEffect(() => { + setHeight(window.innerHeight); + }, []); + React.useEffect(() => { + if (listRef.current) { + listRef.current.resetAfterIndex(0, true); + } + }, [iconWidth, height]); + + if (filteredIcons.length && iconsPerRow && width && iconWidth) { + const iconRows = getRowsFromIcons(filteredIcons, iconsPerRow); + children = ( + + + {({ ref, outerRef, style, onScroll }: any) => ( + + ref={(c) => { + if (typeof ref === 'function') ref(c); + else ref.current = c; + listRef.current = c; + }} + itemData={iconRows} + width={width} + outerRef={outerRef} + style={style} + height={height} + itemCount={iconRows.length} + onScroll={onScroll} + itemSize={(index) => getItemSize(iconRows[index], iconWidth)} + > + {Row} + + )} + + + ); + } else if (width && filters.search) { + return ; + } + + return {children}; +} + +const Container = styled.div` + width: 100%; + margin-top: -${HEADER_TOP_PADDING}px; + > :first-child { + overflow: visible; + > :first-child { + -webkit-overflow-scrolling: touch; + } + } +`; + +const Row = React.memo( + ({ data, index, style }: ListChildComponentProps) => { + const { iconWidth } = React.useContext(IconListContext)!; + const row = data[index]; + if (isCategoryRow(row)) { + return ( + + ); + } else { + return ; + } + }, + areEqual +); +Row.displayName = 'Row'; diff --git a/iconoir.com/components/IconListEmpty.tsx b/iconoir.com/components/IconListEmpty.tsx new file mode 100644 index 00000000..07d62c8d --- /dev/null +++ b/iconoir.com/components/IconListEmpty.tsx @@ -0,0 +1,49 @@ +import { SpockHandGesture } from 'iconoir-react'; +import React from 'react'; +import styled from 'styled-components'; +import { SUGGEST_ICON } from './constants'; +import { Text18 } from './Typography'; + +export interface IconListEmptyProps { + searchTerm: string; +} +export function IconListEmpty({ searchTerm }: IconListEmptyProps) { + return ( + + + + + + Unfortunately there are no icons for '{searchTerm}' + + + {"If you can't find the icon, you can make a"} +
+ + suggestion on GitHub. + +
+
+ ); +} + +const Container = styled.div` + margin-top: 90px; + display: flex; + align-items: center; + flex-direction: column; + text-align: center; +`; +const IconContainer = styled.div` + svg { + width: 60px; + height: 60px; + } + margin-bottom: 65px; + color: var(--black); +`; +const Title = styled(Text18)` + font-weight: 700; + margin-bottom: 30px; + color: var(--black); +`; diff --git a/iconoir.com/components/IconsRow.tsx b/iconoir.com/components/IconsRow.tsx new file mode 100644 index 00000000..838358cc --- /dev/null +++ b/iconoir.com/components/IconsRow.tsx @@ -0,0 +1,28 @@ +import React from 'react'; +import { ICON_SPACE } from './constants'; +import { Icon } from './IconList'; +import styled from 'styled-components'; +import { Icon as IconC } from './Icon'; + +export interface IconsRowProps { + icons: Icon[]; + style?: any; + iconWidth: number; +} +export function IconsRow({ icons, style, iconWidth }: IconsRowProps) { + return ( + + {icons.map((icon) => ( + + ))} + + ); +} + +const RowContainer = styled.div` + display: flex; + align-items: center; + > :not(:last-child) { + margin-right: ${ICON_SPACE}px; + } +`; diff --git a/iconoir.com/components/Input.tsx b/iconoir.com/components/Input.tsx new file mode 100644 index 00000000..f0ee0786 --- /dev/null +++ b/iconoir.com/components/Input.tsx @@ -0,0 +1,56 @@ +import styled from 'styled-components'; + +const ResetInput = styled.input` + font-family: inherit; + font-size: 100%; + line-height: 1.15; + margin: 0; + text-transform: none; + -webkit-appearance: none; + border: none; + + &::-webkit-search-cancel-button { + -webkit-appearance: none; + height: 14px; + width: 14px; + background-image: url("data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3Csvg width='51px' height='51px' stroke-width='2.3' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg' color='%23000000'%3E%3Cpath d='M6.758 17.243L12.001 12m5.243-5.243L12 12m0 0L6.758 6.757M12.001 12l5.243 5.243' stroke='%23000000' stroke-width='2.3' stroke-linecap='round' stroke-linejoin='round'%3E%3C/path%3E%3C/svg%3E"); + background-repeat: no-repeat; + background-size: 14px; + } +`; + +export const Input = styled(ResetInput)` + min-height: 35px; + background: var(--super-light-gray); + border: 1px solid var(--gray); + border-radius: 10px; + overflow: hidden; + padding: 6px; + text-align: center; + font-size: 13px; + line-height: 21px; + font-weight: 500; + color: var(--black); +`; + +export const LargeInput = styled(Input)` + height: 75px; + font-size: 16px; + line-height: 26px; + border-radius: 12px; + padding: 0 23px; + text-align: left; + width: 100%; + box-sizing: border-box; + outline: none; +`; + +export const ColorInput = styled(Input)` + padding: 0px; + border: none; + cursor: pointer; + &::-webkit-color-swatch, + &::-moz-color-swatch { + border: none; + } +`; diff --git a/iconoir.com/components/Layout.tsx b/iconoir.com/components/Layout.tsx new file mode 100644 index 00000000..03484a7e --- /dev/null +++ b/iconoir.com/components/Layout.tsx @@ -0,0 +1,12 @@ +import React from 'react'; +import { GA } from './GA'; + +export interface LayoutProps {} +export function Layout({ children }: React.PropsWithChildren) { + return ( +
+ + {children} +
+ ); +} diff --git a/iconoir.com/components/MDXRemote.tsx b/iconoir.com/components/MDXRemote.tsx new file mode 100644 index 00000000..9a264e2e --- /dev/null +++ b/iconoir.com/components/MDXRemote.tsx @@ -0,0 +1,24 @@ +import React from 'react'; +import { MDXRemote as CoreMDXRemote, MDXRemoteProps } from 'next-mdx-remote'; +import { SuggestLibrary } from './SuggestLibrary'; +import { Pre, Body, H1, H2, H3, Code } from './Typography'; +import { Table } from './Table'; + +export function MDXRemote(props: MDXRemoteProps) { + return ( + + ); +} diff --git a/iconoir.com/components/NavigationItem.tsx b/iconoir.com/components/NavigationItem.tsx new file mode 100644 index 00000000..aedf19be --- /dev/null +++ b/iconoir.com/components/NavigationItem.tsx @@ -0,0 +1,71 @@ +import Link from 'next/link'; +import { useRouter } from 'next/router'; +import React from 'react'; +import styled from 'styled-components'; +import { media } from './responsive'; +import { Text15 } from './Typography'; + +export interface NavigationItemProps { + href: string; + children: React.ReactElement | string; + style?: any; +} +export function NavigationItem({ href, children, style }: NavigationItemProps) { + const router = useRouter(); + return ( + + + {children} + + + ); +} + +export const NavigationItemContainer = styled(Text15)<{ isActive?: boolean }>` + font-weight: 700; + font-size: 18px; + line-height: 28px; + text-decoration: none; + white-space: nowrap; + padding: 25px; + color: var(--black); + text-align: center; + width: 100%; + box-sizing: border-box; + position: relative; + z-index: 2; + &:not(:last-child) { + border-bottom: solid 1px var(--light-gray); + } + ${media.lg} { + font-size: 15px; + line-height: 20px; + font-weight: 500; + padding: 0; + color: var(--black-60); + width: auto; + border-bottom: none !important; + ${(props) => (props.isActive ? '&' : '&.noop')} { + color: var(--white); + &::before { + position: absolute; + z-index: -1; + content: ''; + display: block; + top: -18px; + bottom: -18px; + left: -24px; + right: -24px; + background: var(--black); + } + } + } +`; diff --git a/iconoir.com/components/Praise.tsx b/iconoir.com/components/Praise.tsx new file mode 100644 index 00000000..d75df071 --- /dev/null +++ b/iconoir.com/components/Praise.tsx @@ -0,0 +1,155 @@ +import React from 'react'; +import styled from 'styled-components'; +import { PraiseItem } from './PraiseItem'; +import { media } from './responsive'; + +const NUM_PRAISE_ITEMS = 3; +export function Praise() { + const containerRef = React.useRef(null); + const indicatorContainerRef = React.useRef(null); + React.useEffect(() => { + if (containerRef.current) { + const handle = () => { + if (indicatorContainerRef.current && containerRef.current) { + const currentScrollLeft = containerRef.current.scrollLeft; + const totalScroll = containerRef.current.scrollWidth; + const interval = totalScroll / NUM_PRAISE_ITEMS; + const currentIndex = + currentScrollLeft >= + containerRef.current.scrollWidth - window.innerWidth - 100 + ? indicatorContainerRef.current.children.length - 1 + : Math.round(currentScrollLeft / interval); + for ( + let i = 0; + i < indicatorContainerRef.current.children.length; + i++ + ) { + const child = indicatorContainerRef.current.children[i]; + if (currentIndex === i) { + child.classList.add('active'); + } else { + child.classList.remove('active'); + } + } + } + }; + const element = containerRef.current; + element.addEventListener('scroll', handle); + return () => { + element.removeEventListener('scroll', handle); + }; + } + }, []); + return ( + <> + + + In Nibol we decided to use Iconoir to speed up the design process. + We want to focus on the product and let Iconoir help us with the + design. + + } + imageUrl={'./riccardo-suardi.png'} + logoUrl={'./nibol-logo.png'} + logoLink={'https://www.nibol.com/'} + logoAlt={'Nibol Logo'} + /> + + There's no shortage of icon packs, and yet I always find myself + browsing iconoir. I love the style and attention to detail, and + how easy it is to grab the perfect icons for my projects. + + } + imageUrl={'./fabrizio-rinaldi.png'} + logoUrl={'./typefully-logo.png'} + logoLink={'https://typefully.com/'} + logoAlt={'Typefully Logo'} + /> + + It's the tiny details the determine the degree of delight your + customers experience from your product. Adopting Iconoir icons + will easily boost your app's delight by a factor of 10! + + } + imageUrl={'./chris-messina.png'} + logoUrl={'./twitter-logo.png'} + logoLink={'https://twitter.com/chrismessina'} + logoAlt={'Twitter Logo'} + /> + + + + + + + + ); +} + +const Container = styled.div` + max-width: 100%; + margin: 0 -30px; + padding: 0 30px; + scroll-snap-type: x mandatory; + overflow-x: scroll; + scrollbar-width: none; + display: flex; + align-items: flex-start; + flex-direction: row; + > :not(:last-child) { + margin-right: 20px; + } + &::-webkit-scrollbar { + display: none; + } + > :last-child { + padding-right: 30px; + } + + ${media.xl} { + justify-content: center; + margin: 0; + padding: 0; + overflow-x: visible; + > :not(:last-child) { + margin-right: 48px; + } + > :last-child { + padding-right: 0; + } + } +`; +const Indicator = styled.div` + width: 6px; + height: 6px; + border-radius: 50%; + background: var(--gray); + transition: background 0.25s linear; + &.active { + background: var(--black); + } +`; +const IndicatorContainer = styled.div` + margin: 40px auto 0 auto; + display: flex; + align-items: center; + justify-content: center; + > :not(:last-child) { + margin-right: 14px; + } + ${media.xl} { + display: none; + } +`; diff --git a/iconoir.com/components/PraiseItem.tsx b/iconoir.com/components/PraiseItem.tsx new file mode 100644 index 00000000..1cc05fbb --- /dev/null +++ b/iconoir.com/components/PraiseItem.tsx @@ -0,0 +1,65 @@ +import React from 'react'; +import styled from 'styled-components'; +import { media } from './responsive'; +import { Text14, Text18 } from './Typography'; + +export interface PraiseItemProps { + name: string; + position: string; + description: string | React.ReactElement; + logoUrl: string; + logoLink: string; + logoAlt: string; + imageUrl: string; +} +export function PraiseItem({ + name, + position, + description, + logoUrl, + logoLink, + logoAlt, + imageUrl, +}: PraiseItemProps) { + return ( + + +
+
{name}
+ {position} + {description} + + + +
+
+ ); +} + +const Container = styled.div` + display: flex; + align-items: flex-start; + flex-direction: row; + flex-shrink: 0; + width: calc(100vw - 60px); + scroll-snap-align: center; + ${media.xs} { + width: 428px; + } +`; +const AuthorImage = styled.img` + height: 60px; + width: 60px; + margin-right: 28px; +`; +const Logo = styled.img` + height: 23px; + margin-top: 36px; +`; +const Header = styled(Text18)` + font-weight: 700; + color: var(--black); +`; +const Body = styled(Text18)` + margin-top: 8px; +`; diff --git a/iconoir.com/components/ReactWindowScroller.tsx b/iconoir.com/components/ReactWindowScroller.tsx new file mode 100644 index 00000000..6892e5ba --- /dev/null +++ b/iconoir.com/components/ReactWindowScroller.tsx @@ -0,0 +1,117 @@ +// From: https://github.com/FedericoDiRosa/react-window-scroller/blob/master/src/index.jsx +// Modified to remove scrollTo callback to support momentum scroll on iOS. We don't need it +// in this implementation anyway. + +import { throttle } from 'lodash'; +import React, { useRef, useEffect, useCallback } from 'react'; +import { GridProps, ListProps } from 'react-window'; + +function isHtmlElement( + element: HTMLElement | typeof window +): element is HTMLElement { + return (element as HTMLElement).scrollTop !== undefined; +} + +interface PositionKey { + x: string; + y: string; +} +const windowScrollPositionKey: PositionKey = { + y: 'pageYOffset', + x: 'pageXOffset', +}; + +const documentScrollPositionKey: PositionKey = { + y: 'scrollTop', + x: 'scrollLeft', +}; + +const getScrollPosition = ( + axis: keyof PositionKey, + element?: HTMLElement | null +): number => + // @ts-ignore indexing as string + element?.[documentScrollPositionKey[axis] as any] || + // @ts-ignore indexing as string + window[windowScrollPositionKey[axis] as any] || + // @ts-ignore indexing as string + document.documentElement[documentScrollPositionKey[axis] as any] || + // @ts-ignore indexing as string + document.body[documentScrollPositionKey[axis] as any] || + 0; + +interface ChildOpts { + ref: React.MutableRefObject; + outerRef: React.MutableRefObject; + style: object; + onScroll: Props['onScroll']; +} +interface ReactWindowScrollerProps { + // eslint-disable-next-line no-unused-vars + children: (opts: ChildOpts) => React.ReactElement; + throttleTime?: number; + isGrid?: boolean; +} +export function ReactWindowScroller< + Props extends ListProps | GridProps = ListProps +>({ + children, + throttleTime = 10, + isGrid = false, +}: ReactWindowScrollerProps) { + const ref = useRef(); + const outerRef = useRef(); + const targetElement = + typeof window === 'undefined' ? (undefined as any) : window; + + useEffect(() => { + const handleWindowScroll = throttle(() => { + const rect = outerRef.current?.parentElement?.getBoundingClientRect(); + const offsetTop = + (rect?.top || 0) + + (isHtmlElement(targetElement) + ? targetElement.scrollTop + : targetElement.scrollY); + const offsetLeft = + (rect?.left || 0) + + (isHtmlElement(targetElement) + ? targetElement.scrollLeft + : targetElement.scrollX); + const scrollTop = getScrollPosition('y') - offsetTop; + const scrollLeft = getScrollPosition('x') - offsetLeft; + if (isGrid) + ref.current && ref.current!.scrollTo({ scrollLeft, scrollTop }); + if (!isGrid) ref.current && ref.current!.scrollTo(scrollTop); + }, throttleTime); + + targetElement.addEventListener('scroll', handleWindowScroll); + return () => { + handleWindowScroll.cancel(); + targetElement.removeEventListener('scroll', handleWindowScroll); + }; + }, [isGrid, targetElement]); + + const onScroll = useCallback(() => { + // We are purposefully doing nothing here in order to support momentum scroll on iOS. + }, [isGrid, targetElement]); + + React.useEffect(() => { + // We have to get rid of the scroll handlers here, because they will cause the list + // to go blank whenever adjusting the number of items. + ref.current._onScrollVertical = () => {}; + ref.current._onScrollHorizontal = () => {}; + }, [outerRef]); + + return children({ + ref, + outerRef, + style: { + width: isGrid ? 'auto' : '100%', + height: '100%', + display: 'inline-block', + overflow: 'hidden', + zIndex: 3, + }, + onScroll, + }); +} diff --git a/iconoir.com/components/ReadOnGitHub.tsx b/iconoir.com/components/ReadOnGitHub.tsx new file mode 100644 index 00000000..73e174bf --- /dev/null +++ b/iconoir.com/components/ReadOnGitHub.tsx @@ -0,0 +1,50 @@ +import { ArrowRight } from 'iconoir-react'; +import React from 'react'; +import styled from 'styled-components'; +import { + DonateButton, + DonateContainer, + DonateHeader, + DonateRight, +} from '../pages/support'; +import { FILE_PREFIX } from './constants'; +import { Text18 } from './Typography'; + +export interface ReadOnGitHubProps { + path: string; +} +export function ReadOnGitHub({ path }: ReadOnGitHubProps) { + return ( + +
+ Read it on GitHub + + If you prefer, you can take a look at our documentation on our Github + repository. + +
+ + + + + + + +
+ ); +} + +export const DonateIconButton = styled(DonateButton)` + border-radius: 50%; + width: 50px; + height: 50px; + padding: 0; + justify-content: center; + &::after { + border-radius: 50%; + } +`; diff --git a/iconoir.com/components/SEO.tsx b/iconoir.com/components/SEO.tsx new file mode 100644 index 00000000..4d7ce163 --- /dev/null +++ b/iconoir.com/components/SEO.tsx @@ -0,0 +1,58 @@ +import React from 'react'; +import Head from 'next/head'; + +const TITLE_SUFFIX = 'Iconoir | Free Icons'; + +export interface SEOProps { + title?: string; +} +export function SEO({ title }: SEOProps) { + const pageTitle = title ? `${title} | ${TITLE_SUFFIX}` : TITLE_SUFFIX; + return ( + + {pageTitle} + + + + + + + + + + + + + + + + + + + + + + + ); +} diff --git a/iconoir.com/components/Slider.tsx b/iconoir.com/components/Slider.tsx new file mode 100644 index 00000000..a8a464a1 --- /dev/null +++ b/iconoir.com/components/Slider.tsx @@ -0,0 +1,126 @@ +import React from 'react'; +import { useSlider, useSliderThumb } from '@react-aria/slider'; +import { SliderState, useSliderState } from '@react-stately/slider'; +import { useFocusRing } from '@react-aria/focus'; +import { VisuallyHidden } from '@react-aria/visually-hidden'; +import { mergeProps } from '@react-aria/utils'; +import { useNumberFormatter } from '@react-aria/i18n'; +import { SliderProps as ReactSliderProps } from '@react-types/slider'; +import { NumberFormatOptions } from '@internationalized/number'; +import styled from 'styled-components'; +import { Text13 } from './Typography'; + +export interface SliderProps extends ReactSliderProps { + formatOptions?: NumberFormatOptions; +} +export function Slider(props: SliderProps) { + let trackRef = React.useRef(null); + let numberFormatter = useNumberFormatter(props.formatOptions); + let state = useSliderState({ ...props, numberFormatter }); + let { groupProps, trackProps, labelProps, outputProps } = useSlider( + props, + state, + trackRef + ); + + return ( + + + {props.label && ( + + {props.label} + + )} + + {state.getThumbValueLabel(0)} + + + + + + + + ); +} + +interface ThumbProps { + state: SliderState; + trackRef: React.RefObject; + index: number; +} +function Thumb({ state, trackRef, index }: ThumbProps) { + let inputRef = React.useRef(null); + let { thumbProps, inputProps } = useSliderThumb( + { + index, + trackRef, + inputRef, + }, + state + ); + + let { focusProps, isFocusVisible } = useFocusRing(); + return ( + + + + + + + + ); +} + +const SliderContainer = styled.div` + position: relative; + display: flex; + flex-direction: column; + align-items: center; + width: 100%; + touch-action: none; +`; +const SliderHeader = styled.div` + display: flex; + align-self: stretch; +`; +const Output = styled(Text13)` + flex: 1 0 auto; + text-align: end; + margin-bottom: 10px; +`; +const Track = styled.div` + position: relative; + height: 30px; + width: 100%; +`; +const TrackBackground = styled.div` + position: absolute; + height: 3px; + top: 13px; + background: #f4f3f4; + width: 100%; +`; +const ThumbContainer = styled.div` + position: absolute; + top: 4px; + transform: translateX(-50%); +`; +const ThumbInner = styled.div` + width: 20px; + height: 20px; + border-radius: 50%; + cursor: pointer; +`; diff --git a/iconoir.com/components/Stats.tsx b/iconoir.com/components/Stats.tsx new file mode 100644 index 00000000..54648a12 --- /dev/null +++ b/iconoir.com/components/Stats.tsx @@ -0,0 +1,52 @@ +import React from 'react'; +import styled from 'styled-components'; +import { Text15 } from './Typography'; +import { media } from './responsive'; + +export interface StatProps { + value: string; + description: string; +} +export function Stat({ value, description }: StatProps) { + return ( + + {value} + {description} + + ); +} + +const StatText = styled.div` + font-size: 38px; + font-weight: 700; + line-height: 62px; + color: var(--black); + ${media.md} { + font-size: 50px; + line-height: 82px; + } +`; +const StatContainer = styled.div` + text-align: center; + width: 45%; + margin-bottom: 55px; + ${media.md} { + width: 205px; + margin-bottom: 0; + } +`; +export const StatsContainer = styled.div` + display: flex; + align-items: flex-start; + justify-content: space-between; + max-width: 1200px; + margin: 40px auto 5px auto; + flex-wrap: wrap; + > :not(:last-child) { + margin-right: 8px; + } + + ${media.md} { + margin: 64px auto 120px auto; + } +`; diff --git a/iconoir.com/components/SuggestLibrary.tsx b/iconoir.com/components/SuggestLibrary.tsx new file mode 100644 index 00000000..ef2751d1 --- /dev/null +++ b/iconoir.com/components/SuggestLibrary.tsx @@ -0,0 +1,28 @@ +import { ArrowRight } from 'iconoir-react'; +import React from 'react'; +import { DonateContainer, DonateHeader, DonateRight } from '../pages/support'; +import { SUGGEST_LIBRARY } from './constants'; +import { DonateIconButton } from './ReadOnGitHub'; +import { Text18 } from './Typography'; + +export function SuggestLibrary() { + return ( + +
+ More? + + If you would like to use Iconoir on a different library or if you want + to contribute to support a new library, open a feature request in our + official GitHub repository. + +
+ + + + + + + +
+ ); +} diff --git a/iconoir.com/components/Table.tsx b/iconoir.com/components/Table.tsx new file mode 100644 index 00000000..d0be0410 --- /dev/null +++ b/iconoir.com/components/Table.tsx @@ -0,0 +1,29 @@ +import styled from 'styled-components'; +import { media } from './responsive'; + +export const Table = styled.table` + width: 100%; + border-collapse: collapse; + margin: 24px 0; + td, + th { + border: solid 2px var(--light-gray); + font-size: 16px; + line-height: 25.6px; + padding: 12px 20px; + color: var(--black-60); + ${media.lg} { + padding: 12px 30px 12px 60px; + } + } + thead td, + thead th { + color: var(--black); + background: var(--lighter-gray); + font-weight: 700; + text-align: left; + } + tbody tr:nth-child(even) td { + background: var(--lighter-gray); + } +`; diff --git a/iconoir.com/components/Typography.tsx b/iconoir.com/components/Typography.tsx new file mode 100644 index 00000000..a9d0ac37 --- /dev/null +++ b/iconoir.com/components/Typography.tsx @@ -0,0 +1,182 @@ +import React from 'react'; +import styled from 'styled-components'; +import { showNotification } from '../helpers/showNotification'; +import { Button } from './Button'; +import { media } from './responsive'; + +export const Text15 = styled.div` + font-size: 15px; + line-height: 24px; + color: var(--black-60); +`; + +export const Text14 = styled.div` + font-size: 14px; + line-height: 22px; + color: var(--black); +`; + +export const Text13 = styled.div` + font-size: 13px; + color: var(--dark-gray); + line-height: 21px; + font-weight: 500; +`; + +export const Text18 = styled.div` + font-size: 16px; + line-height: 25px; + color: var(--black-60); + + ${media.md} { + font-size: 18px; + line-height: 29px; + } +`; + +export const Heading2 = styled.h2` + font-size: 24px; + line-height: 40px; + color: var(--black); + letter-spacing: -0.02em; + margin: 24px 0; + font-weight: 700; +`; + +export const Code = styled.div` + background: var(--light-gray) !important; + border-radius: 0 !important; + padding: 26px 32px; + color: var(--black-60); + font-size: 16px; + line-height: 26px; + font-weight: 400; + margin: 24px 0; + font-family: var(--code-family); + > :first-child { + margin-top: 0; + } + > :last-child { + margin-bottom: 0 !important; + } + span, + code, + p, + strong { + font-family: var(--code-family) !important; + font-size: 16px !important; + background: transparent !important; + } + strong { + font-weight: 700; + } +`; + +export const H1 = styled.h1` + font-size: 50px; + font-weight: 700; + line-height: 49px; + letter-spacing: -0.02em; + color: var(--black); + margin-bottom: 40px; + ${media.lg} { + font-size: 90px; + line-height: 81px; + letter-spacing: -0.05em; + } +`; +export const H2 = styled.h2` + font-size: 24px; + line-height: 40px; + font-weight: 700; + color: var(--black); + margin: 24px 0; +`; +export const H3 = styled.h3` + font-size: 20px; + line-height: 36px; + font-weight: 700; + color: var(--black); + margin: 24px 0; +`; +export const Body = styled.p` + font-size: 18px; + color: var(--black-60); + line-height: 30px; + margin: 24px 0; +`; +export const CodeElement = styled.code` + display: inline-block; + padding: 0 4px; + color: var(--black); +`; + +const PreContainer = styled(Code)` + position: relative; + padding: 0; + * { + white-space: pre; + } + > pre { + padding: 26px 32px; + box-sizing: border-box; + overflow-x: auto; + } +`; +const CopyContainer = styled.div` + position: absolute; + top: 16px; + right: 23px; +`; +export const CopyButton = styled(Button)` + text-transform: uppercase; + background: var(--gray); + height: 30px; + padding: 0 12px; + font-size: 11px; + letter-spacing: 0.12em; + line-height: 17.6px; + font-weight: 700; + color: var(--black); + transition: background 0.1s linear, color 0.1s linear; + font-family: var(--font-family) !important; + &:hover { + background: var(--black) !important; + color: var(--white); + } +`; +export function Pre({ children, ...props }: React.PropsWithChildren) { + const containerRef = React.useRef(null); + const [supportsClipboard, setSupportsClipboard] = React.useState(false); + React.useEffect(() => { + setSupportsClipboard( + typeof window !== 'undefined' && + typeof window?.navigator?.clipboard?.writeText !== 'undefined' + ); + }, []); + return ( + +
{children}
+ {supportsClipboard ? ( + + { + if (containerRef.current) { + navigator.clipboard + .writeText(containerRef.current.innerText) + .then(() => { + showNotification('Code copied!'); + }) + .catch((err) => { + console.error(err); + }); + } + }} + > + Copy + + + ) : null} +
+ ); +} diff --git a/iconoir.com/components/constants.ts b/iconoir.com/components/constants.ts new file mode 100644 index 00000000..75059db9 --- /dev/null +++ b/iconoir.com/components/constants.ts @@ -0,0 +1,31 @@ +export const REPO = 'iconoir-icons/iconoir'; +export const GITHUB = `https://github.com/${REPO}`; +export const SUGGEST_ICON = + 'https://github.com/iconoir-icons/iconoir/issues/new?assignees=lucaburgio&labels=icon+request&template=icon_request.md&title=%5BICON%5D'; +export const SUPPORT_LINK = 'https://opencollective.com/iconoir/donate'; +export const LICENSE_LINK = + 'https://github.com/iconoir-icons/iconoir/blob/master/LICENSE'; +export const ICON_WIDTH = 140; +export const ICON_SPACE = 20; + +export const SUGGEST_LIBRARY = + 'https://github.com/iconoir-icons/iconoir/issues/new?assignees=&labels=enhancement&template=feature_request.md&title=%5BFEAT%5D'; +export const FEEDBACK_LINK = 'https://forms.gle/3HvwVYow7D6T8zad7'; + +export const FILE_PREFIX = + 'https://github.com/iconoir-icons/iconoir/tree/master'; +export const LIBRARY_LINKS = { + React: + 'https://github.com/iconoir-icons/iconoir/tree/master/packages/iconoir-react', + ReactNative: + 'https://github.com/iconoir-icons/iconoir/tree/master/packages/iconoir-react-native', + Flutter: + 'https://github.com/iconoir-icons/iconoir/tree/master/packages/iconoir-flutter', + Framer: 'https://framer.com/', + Figma: 'https://www.figma.com/community/file/983248991460488027/Iconoir-Pack', +}; + +export const AUTHOR_LINKS = { + Luca: 'https://twitter.com/burgioluca', + Sam: 'https://twitter.com/therealsammarks', +}; diff --git a/iconoir.com/components/responsive.ts b/iconoir.com/components/responsive.ts new file mode 100644 index 00000000..8aa779ba --- /dev/null +++ b/iconoir.com/components/responsive.ts @@ -0,0 +1,15 @@ +export const BREAKPOINTS = { + xs: 500, + sm: 800, + md: 1000, + lg: 1100, + xl: 1400, +}; + +export const media = { + xs: `@media (min-width: ${BREAKPOINTS.xs}px)`, + sm: `@media (min-width: ${BREAKPOINTS.sm}px)`, + md: `@media (min-width: ${BREAKPOINTS.md}px)`, + lg: `@media (min-width: ${BREAKPOINTS.lg}px)`, + xl: `@media (min-width: ${BREAKPOINTS.xl}px)`, +}; diff --git a/iconoir.com/components/useCustomizationPersistence.ts b/iconoir.com/components/useCustomizationPersistence.ts new file mode 100644 index 00000000..6dda9af2 --- /dev/null +++ b/iconoir.com/components/useCustomizationPersistence.ts @@ -0,0 +1,36 @@ +import React from 'react'; +import { DEFAULT_CUSTOMIZATIONS, IconListCustomizations } from './IconList'; + +const CUSTOMIZATIONS_KEY = 'iconoir-customize'; + +export function useCustomizationPersistence(): [ + IconListCustomizations, + // eslint-disable-next-line no-unused-vars + (customizations: IconListCustomizations) => void +] { + const [customizations, _setCustomizations] = React.useState( + DEFAULT_CUSTOMIZATIONS + ); + React.useEffect(() => { + const localStorageValue = localStorage.getItem(CUSTOMIZATIONS_KEY); + if (localStorageValue) { + try { + const parsedValue = JSON.parse(localStorageValue); + _setCustomizations({ ...DEFAULT_CUSTOMIZATIONS, ...parsedValue }); + } catch { + // Do nothing... + } + } + }, []); + + return [ + customizations, + (newCustomizations) => { + localStorage.setItem( + CUSTOMIZATIONS_KEY, + JSON.stringify(newCustomizations) + ); + _setCustomizations(newCustomizations); + }, + ]; +} diff --git a/iconoir.com/generate-icons.js b/iconoir.com/generate-icons.js new file mode 100644 index 00000000..4d044032 --- /dev/null +++ b/iconoir.com/generate-icons.js @@ -0,0 +1,73 @@ +const fs = require('fs'); +const path = require('path'); + +const previewPath = process.argv[2]; +const resultPath = 'icons.csv'; +const categoryMap = { + actions: 'Actions', + activities: 'Activities', + analytics: 'Analytics', + animations: 'Animations', + audio: 'Audio', + buildings: 'Buildings', + clothing: 'Clothing', + cloud: 'Cloud', + communication: 'Communication', + 'communication-1': 'Communication', + connectivity: 'Connectivity', + database: 'Database', + designtools: 'Design Tools', + development: 'Development', + devices: 'Devices', + docs: 'Docs', + editor: 'Editor', + '3deditor': '3D Editor', + emojis: 'Emojis', + finance: 'Finance', + food: 'Food', + gaming: 'Gaming', + gestures: 'Gestures', + git: 'Git', + health: 'Health', + home: 'Home', + identity: 'Identity', + layout: 'Layout', + maps: 'Maps', + music: 'Music', + nature: 'Nature', + navigation: 'Navigation', + organization: 'Organization', + other: 'Other', + photosvideos: 'Photos and Videos', + security: 'Security', + shapes: 'Shapes', + shopping: 'Shopping', + science: 'Science', + social: 'Social', + system: 'System', + transport: 'Transport', + users: 'Users', + weather: 'Weather', +}; + +const allIcons = fs.readdirSync(previewPath); +const resultLines = ['filename,category,tags']; +for (const filename of allIcons) { + const [icon, category] = path + .basename(filename) + .replace(path.extname(filename), '') + .split('@'); + if (!icon || !category) { + console.error('invalid filename %s', filename); + process.exit(1); + } + const mappedCategory = categoryMap[category]; + if (!mappedCategory) { + console.error('category %s does not exist', category); + process.exit(1); + } + resultLines.push(`"${icon}","${mappedCategory}",`); +} + +console.info('found %d mappings', resultLines.length - 1); +fs.writeFileSync(resultPath, resultLines.join('\n')); diff --git a/iconoir.com/helpers/showNotification.ts b/iconoir.com/helpers/showNotification.ts new file mode 100644 index 00000000..e0cbcb4c --- /dev/null +++ b/iconoir.com/helpers/showNotification.ts @@ -0,0 +1,9 @@ +export function showNotification(message: string) { + const element = document.createElement('div'); + element.classList.add('bottom-notification'); + element.innerText = message; + document.body.appendChild(element); + setTimeout(() => { + element.remove(); + }, 3000); +} diff --git a/iconoir.com/icons.csv b/iconoir.com/icons.csv new file mode 100644 index 00000000..c7c9b057 --- /dev/null +++ b/iconoir.com/icons.csv @@ -0,0 +1,1149 @@ +filename,category,tags +"1st-medal","Activities", +"2x2-cell","Layout", +"360-view","Maps", +"3d-add-hole","3D Editor", +"3d-arc-center-pt","3D Editor", +"3d-arc","3D Editor", +"3d-bridge","3D Editor", +"3d-center-box","3D Editor", +"3d-ellipse-three-pts","3D Editor", +"3d-ellipse","3D Editor", +"3d-pt-box","3D Editor", +"3d-rect-corner-to-corner","3D Editor", +"3d-rect-from-center","3D Editor", +"3d-rect-three-pts","3D Editor", +"3d-select-edge","3D Editor", +"3d-select-face","3D Editor", +"3d-select-point","3D Editor", +"3d-select-solid","3D Editor", +"3d-three-pts-box","3D Editor", +"4k-display","Devices", +"Fishing","Activities", +"accessibility-sign","System", +"accessibility-tech","System", +"accessibility","System", +"activity","Other", +"add-circled-outline","Actions", +"add-database-script","Database", +"add-folder","Docs", +"add-frame","Design Tools", +"add-hexagon","Shapes", +"add-keyframe-alt","Animations", +"add-keyframe","Animations", +"add-keyframes","Animations", +"add-lens","Design Tools", +"add-media-image","Photos and Videos", +"add-media-video","Photos and Videos", +"add-page","Docs", +"add-pin-alt","Maps", +"add-selection","Other", +"add-square","Actions", +"add-to-cart","Shopping", +"add-user","Users", +"african-tree","Nature", +"air-conditioner","Home", +"airplane-helix-45deg","Transport", +"airplane-helix","Transport", +"airplane-off","Transport", +"airplane-rotation","Transport", +"airplane","Transport", +"airplay","Connectivity", +"alarm","Other", +"album-carousel","Music", +"album-list","Music", +"album-open","Music", +"album","Music", +"align-bottom-box","Design Tools", +"align-center","Editor", +"align-justify","Editor", +"align-left-box","Design Tools", +"align-left","Editor", +"align-right-box","Design Tools", +"align-right","Editor", +"align-top-box","Design Tools", +"antenna-off","Connectivity", +"antenna-signal-rounded","Connectivity", +"antenna-signal","Connectivity", +"antenna","Connectivity", +"app-notification","Communication", +"app-window","System", +"apple-half-alt","Food", +"apple-half","Food", +"apple-imac-2021-side","Devices", +"apple-imac-2021","Devices", +"apple-mac","System", +"apple-swift","Development", +"apple-wallet","Finance", +"apple","Food", +"ar-symbol","Devices", +"arcade","Gaming", +"archery-match","Gaming", +"archery","Activities", +"archive","Docs", +"area-search","Organization", +"arrow-archery","Activities", +"arrow-down-circled","Navigation", +"arrow-down","Navigation", +"arrow-left-circled","Navigation", +"arrow-left","Navigation", +"arrow-right-circled","Navigation", +"arrow-right","Navigation", +"arrow-separate-vertical","Navigation", +"arrow-separate","Navigation", +"arrow-union-vertical","Navigation", +"arrow-union","Navigation", +"arrow-up-circled","Navigation", +"arrow-up","Navigation", +"asana","Development", +"atom","Science", +"attachment","Docs", +"augmented-reality","Gaming", +"auto-flash","Photos and Videos", +"axes","Design Tools", +"backward-15-seconds","Music", +"bag","Clothing", +"bank","Finance", +"barcode","Shopping", +"basketball-alt","Activities", +"basketball-field","Activities", +"basketball","Activities", +"battery-25","System", +"battery-50","System", +"battery-75","System", +"battery-charging","System", +"battery-empty","System", +"battery-full","System", +"battery-indicator","Other", +"battery-warning","System", +"bbq","Food", +"beach-bag-big","Clothing", +"beach-bag","Clothing", +"bed-ready","Home", +"bed","Home", +"behance-squared","Social", +"behance","Social", +"bell-notification","Communication", +"bell-off","Communication", +"bell","Communication", +"bicycle","Transport", +"bin-add","System", +"bin-full","System", +"bin-half","System", +"bin-minus","System", +"bin","System", +"bishop","Gaming", +"bitbucket","Git", +"bluetooth-rounded","Connectivity", +"bluetooth","Connectivity", +"bold-square-outline","Editor", +"bold","Editor", +"bonfire","Activities", +"book-stack","Activities", +"book","Activities", +"bookmark-book","Activities", +"bookmark-circled","Organization", +"bookmark-empty","Organization", +"border-bl","Design Tools", +"border-bottom","Design Tools", +"border-br","Design Tools", +"border-inner","Design Tools", +"border-left","Design Tools", +"border-out","Design Tools", +"border-right","Design Tools", +"border-tl","Design Tools", +"border-top","Design Tools", +"border-tr","Design Tools", +"bounce-left","Animations", +"bounce-right","Animations", +"bowling-ball","Activities", +"box-iso","Home", +"box","Home", +"boxing-glove","Activities", +"brightness-window","System", +"brightness","System", +"bubble-download","Communication", +"bubble-error","Communication", +"bubble-income","Communication", +"bubble-outcome","Communication", +"bubble-search","Communication", +"bubble-star","Communication", +"bubble-upload","Communication", +"bubble-warning","Communication", +"building","Buildings", +"bus-outline","Transport", +"bus-stop","Transport", +"cable-rounded","Connectivity", +"calculator","System", +"calendar","System", +"camera","Photos and Videos", +"cancel","Actions", +"car-outline","Transport", +"carbon","Science", +"card-wallet","Finance", +"cart-alt","Shopping", +"cart","Shopping", +"cash","Finance", +"center-align","Design Tools", +"chat-add","Communication", +"chat-bubble-check","Communication", +"chat-bubble-check","Communication", +"chat-bubble-empty","Communication", +"chat-bubble-error","Communication", +"chat-bubble-question","Communication", +"chat-bubble-translate","Communication", +"chat-bubble-warning","Communication", +"chat-bubble","Communication", +"chat-lines","Communication", +"chat-remove","Communication", +"check-circled-outline","Actions", +"check-window","System", +"check","Actions", +"chocolate","Food", +"chromecast-active","Devices", +"chromecast","Devices", +"church-alt","Buildings", +"church","Buildings", +"cinema-old","Activities", +"circle","Shapes", +"city","Buildings", +"clean-water","Nature", +"clipboard-check","Actions", +"clock-outline","Other", +"closet","Home", +"cloud-book-alt","Cloud", +"cloud-check","Cloud", +"cloud-desync","Cloud", +"cloud-download","Cloud", +"cloud-error","Cloud", +"cloud-sunny","Weather", +"cloud-sync","Cloud", +"cloud-upload","Cloud", +"cloud","Weather", +"code-brackets-square","Development", +"code-brackets","Development", +"code","Development", +"codepen","Development", +"coin","Finance", +"collage-frame","Design Tools", +"collapse","Photos and Videos", +"color-filter","Design Tools", +"color-picker-empty","Design Tools", +"color-picker","Design Tools", +"combine","Design Tools", +"compact-disc","Music", +"compass","Navigation", +"compress-lines","Editor", +"compress","Other", +"computer","Devices", +"consumable","Shopping", +"control-slider","System", +"cookie","System", +"copy","Design Tools", +"copyright","Other", +"corner-bottom-left","Layout", +"corner-bottom-right","Layout", +"corner-top-left","Layout", +"corner-top-right","Layout", +"cpu-warning","System", +"cpu","System", +"cracked-egg","Food", +"creative-commons","Development", +"credit-card-2","Finance", +"credit-card","Finance", +"crib","Home", +"crop-rotate-bl","Design Tools", +"crop-rotate-br","Design Tools", +"crop-rotate-tl","Design Tools", +"crop-rotate-tr","Design Tools", +"crop","Design Tools", +"css3","Development", +"cursor-pointer","System", +"cut-alt","Design Tools", +"cut","Design Tools", +"cycling","Activities", +"cylinder","3D Editor", +"dash-flag","Other", +"dashboard-dots","System", +"dashboard-speed","System", +"dashboard","System", +"data-transfer-both","Connectivity", +"data-transfer-check","Connectivity", +"data-transfer-down","Connectivity", +"data-transfer-up","Connectivity", +"data-transfer-warning","Connectivity", +"database-backup","Database", +"database-export","Database", +"database-monitor","Database", +"database-restore","Database", +"database-rounded","Database", +"database-script","Database", +"database-settings","Database", +"database-star","Database", +"database-stats","Database", +"db-check","Database", +"db-error","Database", +"db-search","Database", +"db-warning","Database", +"db","Database", +"de-compress","Other", +"delete-circled-outline","Actions", +"delivery-truck","Transport", +"delivery","Transport", +"depth","Science", +"design-pencil","Design Tools", +"desk","Home", +"dialpad","Other", +"dice-five","Gaming", +"dice-four","Gaming", +"dice-one","Gaming", +"dice-six","Gaming", +"dice-three","Gaming", +"dice-two","Gaming", +"dimmer-switch","Home", +"director-chair","Home", +"discord","Social", +"dishwasher","Home", +"divide-selection-1","Other", +"divide-selection-2","Other", +"doc-search-alt","Docs", +"doc-search","Docs", +"doc-star-alt","Docs", +"doc-star","Docs", +"dollar","Finance", +"domotic-issue","Home", +"donate","Health", +"double-check","Actions", +"down-round-arrow","Navigation", +"download-circled-outline","Actions", +"download-data-window","System", +"download-square-outline","Actions", +"download","Actions", +"drag-hand-gesture","Gestures", +"drawer","Home", +"dribbble","Social", +"drone-charge-full","Transport", +"drone-charge-half","Transport", +"drone-charge-low","Transport", +"drone-check","Transport", +"drone-error","Transport", +"drone-landing","Transport", +"drone-refresh","Transport", +"drone-take-off","Transport", +"drone","Transport", +"droplet-half","Design Tools", +"droplet","Design Tools", +"ease-curve-control-points","Animations", +"ease-in-control-point","Animations", +"ease-in-out","Animations", +"ease-in","Animations", +"ease-out-control-point","Animations", +"ease-out","Animations", +"ecology-book","Nature", +"edit-pencil","Editor", +"edit","Editor", +"egg","Food", +"eject","System", +"electronics-chip","Development", +"electronics-transistor","Development", +"emoji-ball","Emojis", +"emoji-blink-left","Emojis", +"emoji-blink-right","Emojis", +"emoji-look-bottom","Emojis", +"emoji-look-left","Emojis", +"emoji-look-right","Emojis", +"emoji-look-top","Emojis", +"emoji-puzzled","Emojis", +"emoji-quite","Emojis", +"emoji-really","Emojis", +"emoji-sad","Emojis", +"emoji-satisfied","Emojis", +"emoji-sing-left-note","Emojis", +"emoji-sing-left","Emojis", +"emoji-sing-right-note","Emojis", +"emoji-sing-right","Emojis", +"emoji-surprise-alt","Emojis", +"emoji-surprise","Emojis", +"emoji-talking-angry","Emojis", +"emoji-talking-happy","Emojis", +"emoji-think-left","Emojis", +"emoji-think-right","Emojis", +"emoji","Emojis", +"empty-page","Docs", +"energy-usage-window","System", +"enlarge-round-arrow","Navigation", +"enlarge","Photos and Videos", +"erase","Actions", +"error-window","System", +"euro-square","Finance", +"euro","Finance", +"ev-charge-alt","Transport", +"ev-charge","Transport", +"ev-plug-charging","Transport", +"ev-plug-error","Transport", +"ev-plug","Transport", +"ev-rounded","Transport", +"ev-station","Transport", +"exclude","Design Tools", +"expand-lines","Editor", +"expand","Photos and Videos", +"eye-alt","Actions", +"eye-close","Actions", +"eye-empty","Actions", +"eye-off","Actions", +"face-id","Identity", +"facebook-squared","Social", +"facebook","Social", +"facetime","Communication", +"farm","Buildings", +"fast-arrow-down-box","Navigation", +"fast-arrow-down","Navigation", +"fast-arrow-left-box","Navigation", +"fast-arrow-left","Navigation", +"fast-arrow-right-box","Navigation", +"fast-arrow-right","Navigation", +"fast-arrow-top","Navigation", +"fast-arrow-up-box","Navigation", +"fast-bottom-circle","Navigation", +"fast-left-circle","Navigation", +"fast-right-circle","Navigation", +"fast-top-circle","Navigation", +"favourite-book","Activities", +"favourite-window","System", +"female","Health", +"figma","Design Tools", +"file-not-found","Other", +"filter-alt","Organization", +"filter","Organization", +"finder","System", +"finger-print-window","System", +"fingerprint-circled-error","Identity", +"fingerprint-circled-lock","Identity", +"fingerprint-circled-ok","Identity", +"fingerprint-circled","Identity", +"fingerprint-phone","Identity", +"fingerprint-scan","Identity", +"fingerprint-squared","Identity", +"fingerprint","Identity", +"fire-flame","Activities", +"flare","Shapes", +"flash-off","Photos and Videos", +"flash","Photos and Videos", +"flask","Science", +"flip-reverse","Design Tools", +"flip","Design Tools", +"flower","Activities", +"fluorine","Science", +"fog","Weather", +"folder-alert","Docs", +"folder-settings","Docs", +"folder","Docs", +"font-size","Editor", +"football-ball","Activities", +"football","Activities", +"forward-15-seconds","Music", +"forward-outline","Music", +"frame-alt-empty","Design Tools", +"frame-alt","Design Tools", +"frame-select","Design Tools", +"frame-simple","Design Tools", +"frame-tool","Design Tools", +"frame","Design Tools", +"fridge","Home", +"fx-rounded","Photos and Videos", +"fx","Photos and Videos", +"gamepad","Gaming", +"garage","Buildings", +"gas-tank-drop","Transport", +"gas-tank","Transport", +"gas","Other", +"gift","Other", +"git-branch","Git", +"git-command","Git", +"git-commit","Git", +"git-compare","Git", +"git-fork","Git", +"git-merge","Git", +"git-pull-request","Git", +"github-outline","Git", +"github","Git", +"gitlab-full","Git", +"glass-empty","Food", +"glass-half-alt","Food", +"glass-half","Food", +"glasses","Clothing", +"globe","Communication", +"golf","Activities", +"google-circled","Social", +"google-docs","Docs", +"google-drive-check","Cloud", +"google-drive-sync","Cloud", +"google-drive-warning","Cloud", +"google-drive","Cloud", +"google-home","Home", +"google-one","Cloud", +"google","Social", +"gps","Maps", +"graph-down","Activities", +"graph-up","Activities", +"green-bus","Transport", +"green-truck","Transport", +"green-vehicle","Transport", +"grid-add","Layout", +"grid-minus","Layout", +"grid-remove","Layout", +"group","Users", +"gym","Activities", +"half-cookie","System", +"half-moon","Other", +"hand-brake","Transport", +"handbag","Clothing", +"hard-drive","Devices", +"hat","Clothing", +"hd-display","Photos and Videos", +"hd","Photos and Videos", +"hdr","Photos and Videos", +"headset-charge","Music", +"headset-help","Communication", +"headset-issue","Music", +"headset","Music", +"health-shield","Health", +"healthcare","Health", +"heart","Health", +"heavy-rain","Weather", +"heptagon","Shapes", +"her-slips","Clothing", +"hesa-warning-outline","Devices", +"hexagon-alt","Shapes", +"hexagon-dice","Gaming", +"hexagon","Shapes", +"high-priority","Other", +"historic-shield-alt","Security", +"historic-shield","Security", +"home-alt-slim-horiz","Home", +"home-alt-slim","Home", +"home-alt","Home", +"home-hospital","Health", +"home-sale","Home", +"home-secure","Home", +"home-shield","Home", +"home-simple-door","Home", +"home-simple","Home", +"home-table","Home", +"home-user","Home", +"home","Home", +"horiz-distribution-left","Design Tools", +"horiz-distribution-right","Design Tools", +"hospital-sign","Health", +"hospital","Buildings", +"hot-air-balloon","Transport", +"hourglass","Activities", +"html5","Development", +"hydrogen","Science", +"iconoir","Development", +"import","Other", +"industry","Buildings", +"infinite","Science", +"info-empty","Actions", +"input-field","System", +"input-output","System", +"input-search","Organization", +"instagram","Social", +"internet","Communication", +"intersect-alt","Design Tools", +"intersect","Design Tools", +"ios-settings","System", +"ip-address","Security", +"iris-scan","Identity", +"italic-square-outline","Editor", +"italic","Editor", +"journal-page","Docs", +"journal","Docs", +"kanban-board","Development", +"key-alt-back","Security", +"key-alt-minus","Security", +"key-alt-plus","Security", +"key-alt-remove","Security", +"key-alt","Security", +"keyframe-align-center","Animations", +"keyframe-align-horizontal","Animations", +"keyframe-align-vertical","Animations", +"keyframe-position","Animations", +"keyframe","Animations", +"keyframes-couple","Animations", +"keyframes","Animations", +"label-outline","Organization", +"lamp","Home", +"language","Other", +"laptop-charging","Devices", +"laptop-fix","Devices", +"laptop-issue","Devices", +"laptop","Devices", +"large-suitcase","Clothing", +"layout-left","Layout", +"layout-right","Layout", +"leaderboard-star","Activities", +"leaderboard","Activities", +"leaf","Nature", +"left-round-arrow","Navigation", +"lens","Design Tools", +"lifebelt","Other", +"light-bulb-off","Home", +"light-bulb-on","Home", +"light-bulb","Home", +"line-space","Actions", +"linear","Animations", +"link","Other", +"linkedin","Social", +"linux","System", +"list","Editor", +"load-action-floppy","Actions", +"lock-key","System", +"lock","Security", +"locked-book","Activities", +"locked-window","System", +"log-denied","System", +"log-in","System", +"log-out","System", +"long-arrow-down-left","Navigation", +"long-arrow-down-right","Navigation", +"long-arrow-left-down","Navigation", +"long-arrow-left-up","Navigation", +"long-arrow-right-down","Navigation", +"long-arrow-right-up","Navigation", +"long-arrow-up-left","Navigation", +"long-arrow-up-right","Navigation", +"lot-of-cash","Finance", +"mac-control-key","System", +"mac-dock","System", +"mac-option-key","System", +"mac-os-window","System", +"magnet-energy","Science", +"magnet","Science", +"mail-opened","Communication", +"mail","Communication", +"male","Health", +"map-issue","Maps", +"map","Maps", +"maps-arrow-diagonal","Maps", +"maps-arrow-issue","Maps", +"maps-arrow","Maps", +"maps-go-straight","Maps", +"maps-turn-back","Maps", +"maps-turn-left","Maps", +"maps-turn-right","Maps", +"mask-square","Design Tools", +"math-book","Activities", +"maximize","Other", +"medal","Activities", +"media-image-folder","Photos and Videos", +"media-image-list","Photos and Videos", +"media-image","Photos and Videos", +"media-video-folder","Photos and Videos", +"media-video-list","Photos and Videos", +"media-video","Photos and Videos", +"medium","Social", +"megaphone","Devices", +"menu-scale","Actions", +"menu","Actions", +"message-alert","Communication", +"message-text","Communication", +"message","Communication", +"metro","Transport", +"mic-add","Audio", +"mic-check","Audio", +"mic-mute","Audio", +"mic-remove","Audio", +"mic-speaking","Audio", +"mic-warning","Audio", +"mic","Audio", +"minus-hexagon","Shapes", +"minus-pin-alt","Maps", +"minus-square","Actions", +"minus","Actions", +"mirror","Home", +"missing-font","Editor", +"modern-tv-4k","Devices", +"modern-tv","Devices", +"money-square","Finance", +"moon-sat","Science", +"more-horiz-circled-outline","Navigation", +"more-horiz","Navigation", +"more-vert-circled-outline","Navigation", +"more-vert","Navigation", +"motorcycle","Transport", +"mouse-button-left","System", +"mouse-button-right","System", +"mouse-scroll-wheel","System", +"move-down","Animations", +"move-left","Animations", +"move-right","Animations", +"move-ruler","Design Tools", +"move-up","Animations", +"movie","Activities", +"multi-bubble","Communication", +"multi-mac-os-window","System", +"multi-window","System", +"multiple-pages-add","Docs", +"multiple-pages-delete","Docs", +"multiple-pages-empty","Docs", +"multiple-pages-remove","Docs", +"multiple-pages","Docs", +"music-1-add","Music", +"music-1","Music", +"music-2-add","Music", +"music-2","Music", +"nav-arrow-down","Navigation", +"nav-arrow-left","Navigation", +"nav-arrow-right","Navigation", +"nav-arrow-up","Navigation", +"navigator-alt","Maps", +"navigator","Maps", +"network-alt","Connectivity", +"network-left","Connectivity", +"network-right","Connectivity", +"network","Connectivity", +"new-tab","System", +"nintendo-switch","Gaming", +"nitrogen","Science", +"no-access-window","System", +"no-battery","System", +"no-coin","Finance", +"no-credit-card","Finance", +"no-link","Other", +"no-lock","Security", +"no-smoking-circled","Activities", +"no-smoking","Activities", +"notes","Other", +"numbered-list-left","Editor", +"numbered-list-right","Editor", +"octagon","Shapes", +"off-rounded","System", +"oil-industry","Buildings", +"on-rounded","System", +"one-finger-select-hand-gesture","Gestures", +"one-point-circle","3D Editor", +"open-book","Activities", +"open-in-browser","Actions", +"open-in-window","Actions", +"open-new-window","Actions", +"open-select-hand-gesture","Gestures", +"open-vpn","Security", +"orange-half","Food", +"orange-slice-alt","Food", +"orange-slice","Food", +"organic-food-squared","Nature", +"organic-food","Nature", +"orthogonal-view","3D Editor", +"oxygen","Science", +"package-lock","Transport", +"package","Transport", +"packages","Transport", +"pacman","Gaming", +"page-edit","Docs", +"page-flip","Other", +"page-search","Docs", +"page-star","Docs", +"page","Docs", +"palette","Activities", +"panorama-enlarge","Photos and Videos", +"panorama-reduce","Photos and Videos", +"pants-alt","Clothing", +"pants","Clothing", +"parking","Transport", +"password-cursor","Security", +"password-error","Security", +"password-pass","Security", +"paste-clipboard","Actions", +"pause-outline","Music", +"pause-window","System", +"pc-check","Security", +"pc-firewall","Security", +"pc-mouse","System", +"pc-no-entry","Security", +"pc-warning","Security", +"peace-hand","Gestures", +"pen-connect-bluetooth","Devices", +"pen-connect-wifi","Devices", +"pen-tablet-connect-usb","Devices", +"pen-tablet-connect-wifi","Devices", +"pen-tablet","Devices", +"pentagon","Shapes", +"people-rounded","Users", +"percentage-round","Activities", +"percentage-square","Activities", +"percentage","Activities", +"perspective-view","3D Editor", +"pharmacy-circled-cross","Health", +"pharmacy-squared-cross","Health", +"phone-add","Communication", +"phone-delete","Communication", +"phone-disabled","Communication", +"phone-income","Communication", +"phone-outcome","Communication", +"phone-paused","Communication", +"phone-remove","Communication", +"phone","Communication", +"piggy-bank","Finance", +"pillow","Home", +"pin-alt","Maps", +"pin","Organization", +"pine-tree","Nature", +"pinterest","Social", +"pizza-slice","Food", +"planet-alt","Science", +"planet-sat","Science", +"planet","Science", +"play-outline","Music", +"playlist-add","Music", +"playlist-play","Music", +"playlist","Music", +"playstation-gamepad","Gaming", +"plug-type-a","Connectivity", +"plug-type-c","Connectivity", +"plug-type-g","Connectivity", +"plug-type-l","Connectivity", +"plus","Actions", +"pocket","Social", +"podcast","Communication", +"pokeball","Gaming", +"position-align","Design Tools", +"position","Maps", +"potion","Gaming", +"pound","Finance", +"precision-tool","Design Tools", +"printer-alt","Devices", +"printer","Devices", +"printing-page","Devices", +"priority-down","Other", +"priority-up","Other", +"private-wifi","Connectivity", +"profile-circled","Users", +"prohibition","Actions", +"puzzle","Development", +"qr-code","Other", +"question-mark-circle","Actions", +"question-mark","Actions", +"question-square-outline","Actions", +"quote-message","Communication", +"quote","Communication", +"rain","Weather", +"receive-dollars","Finance", +"receive-euros","Finance", +"receive-pounds","Finance", +"receive-yens","Finance", +"redo-action","Actions", +"redo-circle","Actions", +"redo","Actions", +"reduce-round-arrow","Navigation", +"reduce","Photos and Videos", +"refresh-circular","Actions", +"refresh-double","Actions", +"refresh","Actions", +"reload-window","System", +"reminder-hand-gesture","Gestures", +"remove-database-script","Database", +"remove-empty","Actions", +"remove-folder","Docs", +"remove-frame","Design Tools", +"remove-from-cart","Shopping", +"remove-keyframe-alt","Animations", +"remove-keyframe","Animations", +"remove-keyframes","Animations", +"remove-link","Other", +"remove-media-image","Photos and Videos", +"remove-media-video","Photos and Videos", +"remove-page","Docs", +"remove-pin-alt","Maps", +"remove-pin","Organization", +"remove-selection","Other", +"remove-square","Actions", +"remove-user","Users", +"repeat-once","Music", +"repeat","Music", +"report-columns","Activities", +"reports","Activities", +"repository","Git", +"restart","Actions", +"rewind-outline","Music", +"rhombus","Shapes", +"right-round-arrow","Navigation", +"rings","Activities", +"rocket","Science", +"rook","Gaming", +"rotate-camera-left","Photos and Videos", +"rotate-camera-right","Photos and Videos", +"round-flask","Science", +"rounded-mirror","Home", +"rss-feed-squared","Social", +"rss-feed","Social", +"ruler-add","Design Tools", +"ruler-combine","Design Tools", +"ruler-remove","Design Tools", +"ruler","Design Tools", +"running","Activities", +"safari","System", +"sandals","Clothing", +"save-action-floppy","Actions", +"save-floppy-disk","Devices", +"scale-frame-enlarge","Design Tools", +"scale-frame-reduce","Design Tools", +"scan-barcode","Shopping", +"scan-qr-code","Other", +"scanning","Identity", +"scarf","Clothing", +"scissor-alt","Editor", +"scissor","Editor", +"sea-and-sun","Activities", +"sea-waves","Activities", +"search-engine","System", +"search-font","Editor", +"search-window","System", +"search","Organization", +"secure-window","System", +"security-pass","Security", +"select-window","System", +"selection","Other", +"selective-tool","Design Tools", +"send-dollars","Finance", +"send-euros","Finance", +"send-pounds","Finance", +"send-yens","Finance", +"server-connection","Connectivity", +"server","Connectivity", +"settings-cloud","Cloud", +"settings-profiles","System", +"settings","System", +"share-android","Actions", +"share-ios","Actions", +"shield-add","Security", +"shield-alert","Security", +"shield-alt","Security", +"shield-broken","Security", +"shield-check","Security", +"shield-cross","Security", +"shield-download","Security", +"shield-eye","Security", +"shield-loading","Security", +"shield-minus","Security", +"shield-question","Security", +"shield-search","Security", +"shield-upload","Security", +"shield","Security", +"shop-alt","Buildings", +"shop","Buildings", +"shopping-bag-add","Shopping", +"shopping-bag-alt","Shopping", +"shopping-bag-arrow-down","Shopping", +"shopping-bag-arrow-up","Shopping", +"shopping-bag-check","Shopping", +"shopping-bag-issue","Shopping", +"shopping-bag-remove","Shopping", +"shopping-bag","Shopping", +"shopping-code-check","Shopping", +"shopping-code-error","Shopping", +"shopping-code","Shopping", +"short-pants-alt","Clothing", +"short-pants","Clothing", +"shuffle","Music", +"sidebar-collapse","Navigation", +"sidebar-expand","Navigation", +"sigma-function","3D Editor", +"simple-cart","Shopping", +"single-tap-gesture","Gestures", +"skateboard","Activities", +"skateboarding","Activities", +"skip-next-outline","Music", +"skip-prev-outline","Music", +"sleeper-chair","Home", +"small-lamp-alt","Home", +"small-lamp","Home", +"small-shop-alt","Buildings", +"small-shop","Buildings", +"smartphone-device","Devices", +"smoking","Activities", +"snapchat","Social", +"snow-flake","Weather", +"snow","Weather", +"soap","Other", +"soccer-ball","Activities", +"sofa","Home", +"soil-alt","Nature", +"soil","Nature", +"sort-down","Editor", +"sort-up","Editor", +"sort","Editor", +"sound-high","Audio", +"sound-low","Audio", +"sound-min","Audio", +"sound-off","Audio", +"spades","Gaming", +"sphere","3D Editor", +"spiral","3D Editor", +"spock-hand-gesture","Gestures", +"square","Shapes", +"stackoverflow","Social", +"star-dashed","Organization", +"star-half-dashed","Organization", +"star-outline","Organization", +"stat-down","Activities", +"stat-up","Activities", +"stats-report","Activities", +"stats-square-down","Activities", +"stats-square-up","Activities", +"stretching","Activities", +"stroller","Health", +"style-border","Design Tools", +"substract","Design Tools", +"suggestion","Maps", +"sun-light","Weather", +"swimming","Activities", +"swipe-down-gesture","Gestures", +"swipe-left-gesture","Gestures", +"swipe-right-gesture","Gestures", +"swipe-two-fingers-down-gesture","Gestures", +"swipe-two-fingers-left-gesture","Gestures", +"swipe-two-fingers-right-gesture","Gestures", +"swipe-two-fingers-up-gesture","Gestures", +"swipe-up-gesture","Gestures", +"switch-off-outline","System", +"switch-on-outline","System", +"system-restart","System", +"system-shut","System", +"table-2-columns","Layout", +"table-rows","Layout", +"table","Layout", +"task-list","Editor", +"telegram-circled","Social", +"telegram","Social", +"tennis-ball-alt","Activities", +"tennis-ball","Activities", +"terminal-outline","System", +"terminal-simple","System", +"test-tube","Science", +"text-alt","Editor", +"text-size","Editor", +"text","Editor", +"three-points-circle","3D Editor", +"three-stars","Organization", +"thumbs-down","Social", +"thumbs-up","Social", +"thunderstorm","Weather", +"tiktok","Social", +"timer-off","Other", +"timer","Other", +"tournament","Gaming", +"tower-check","Security", +"tower-no-access","Security", +"tower-warning","Security", +"tower","Security", +"trademark","Other", +"train-outline","Transport", +"tram","Transport", +"transition-bottom","Animations", +"transition-left","Animations", +"transition-right","Animations", +"transition-top","Animations", +"translate","Other", +"trash","Actions", +"treadmill","Activities", +"tree","Nature", +"trekking","Activities", +"trello","Development", +"triangle-flag-circle","Other", +"triangle-flag-full","Other", +"triangle-flag","Other", +"triangle","Shapes", +"trophy","Activities", +"truck-length","Transport", +"truck","Transport", +"tunnel","Buildings", +"tv-fix","Devices", +"tv-issue","Devices", +"tv","Devices", +"twitter-verified-badge","Social", +"twitter","Social", +"two-points-circle","3D Editor", +"two-seater-sofa","Home", +"type","System", +"umbrella-full","Clothing", +"underline-square-outline","Editor", +"underline","Editor", +"undo-action","Actions", +"undo-circle","Actions", +"undo","Actions", +"union-alt","Design Tools", +"union-horiz-alt","Design Tools", +"union","Design Tools", +"unity-5","Development", +"unity","Development", +"up-round-arrow","Navigation", +"upload-data-window","System", +"upload-square-outline","Actions", +"upload","Actions", +"usb","Connectivity", +"user-bag","Shopping", +"user-cart","Shopping", +"user-circle-alt","Users", +"user-scan","Identity", +"user-square-alt","Users", +"user","Users", +"vegan-rounded","Nature", +"vegan-squared","Nature", +"vegan","Nature", +"verified-badge","Social", +"verified-user","Users", +"video-camera-off","Photos and Videos", +"video-camera","Photos and Videos", +"view-columns-2","Layout", +"view-columns-3","Layout", +"view-grid","Layout", +"view-structure-down","Layout", +"view-structure-up","Layout", +"voice-circled-lock","Identity", +"voice-circled","Identity", +"voice-error","Identity", +"voice-ok","Identity", +"voice-phone","Identity", +"voice-scan","Identity", +"voice-squared","Identity", +"voice","Identity", +"vr-symbol","Devices", +"waist","Activities", +"walking","Activities", +"wallet","Finance", +"warning-circled-outline","Actions", +"warning-square-outline","Actions", +"warning-triangle-outline","Actions", +"warning-window","System", +"wash","Home", +"washing-machine","Home", +"watering-soil","Nature", +"web-window-close","System", +"web-window-energy-consumption","System", +"web-window","System", +"weight-alt","Health", +"weight","Health", +"white-flag","Other", +"wifi-error","Connectivity", +"wifi-issue","Connectivity", +"wifi-off","Connectivity", +"wifi-rounded","Connectivity", +"wifi-signal-none","Connectivity", +"wifi","Connectivity", +"wind","Weather", +"windows","System", +"wrap-text","Actions", +"wristwatch","Devices", +"www","Communication", +"xbox-a","Gaming", +"xbox-b","Gaming", +"xbox-x","Gaming", +"xbox-y","Gaming", +"xray-view","3D Editor", +"yen-square","Finance", +"yen","Finance", +"yoga","Activities", +"youtube","Social", +"zoom-in","Organization", +"zoom-out","Organization", \ No newline at end of file diff --git a/iconoir.com/lib/getHeaderProps.ts b/iconoir.com/lib/getHeaderProps.ts new file mode 100644 index 00000000..c900d948 --- /dev/null +++ b/iconoir.com/lib/getHeaderProps.ts @@ -0,0 +1,8 @@ +import fs from 'fs'; + +export function getHeaderProps() { + const packageJson = JSON.parse(fs.readFileSync('../package.json').toString()); + return { + currentVersion: `v${packageJson.version}`, + }; +} diff --git a/iconoir.com/lib/getIcons.ts b/iconoir.com/lib/getIcons.ts new file mode 100644 index 00000000..e84ab30f --- /dev/null +++ b/iconoir.com/lib/getIcons.ts @@ -0,0 +1,42 @@ +import { Icon } from '../components/IconList'; +import csv from 'csvtojson'; +import { incompatibleNames } from '../../constants'; +import Case from 'case'; +import * as AllIcons from 'iconoir-react'; + +const ICONS_PATH = 'icons.csv'; +const TAG_SEPARATOR = '|'; + +const typedIncompatibleNames = incompatibleNames as Record; + +function getIconComponentName(filename: string) { + const dstFileName = + filename in typedIncompatibleNames + ? typedIncompatibleNames[filename] + : filename; + return Case.pascal(dstFileName); +} + +export async function getAllIcons(): Promise { + const rows = await csv().fromFile(ICONS_PATH); + return rows.map((row) => { + const iconComponentName = getIconComponentName(row.filename); + // Convert to lowercase to solve for differences in how the names are calculated. + const matchingKey = Object.keys(AllIcons).find( + (k) => + k.toLowerCase() === iconComponentName.toLowerCase() || + k.toLowerCase() === `svg${iconComponentName.toLowerCase()}` + ); + if (!matchingKey) + throw new Error( + `Cannot find icon '${iconComponentName}' in iconoir-react.` + ); + return { + filename: row.filename, + category: row.category, + tags: + row.tags?.split(TAG_SEPARATOR).map((item: string) => item.trim()) || [], + iconComponentName: matchingKey, + }; + }); +} diff --git a/iconoir.com/next-env.d.ts b/iconoir.com/next-env.d.ts new file mode 100755 index 00000000..4f11a03d --- /dev/null +++ b/iconoir.com/next-env.d.ts @@ -0,0 +1,5 @@ +/// +/// + +// NOTE: This file should not be edited +// see https://nextjs.org/docs/basic-features/typescript for more information. diff --git a/iconoir.com/next.config.js b/iconoir.com/next.config.js new file mode 100755 index 00000000..4de85f59 --- /dev/null +++ b/iconoir.com/next.config.js @@ -0,0 +1,20 @@ +/** @type {import('next').NextConfig} */ +const nextConfig = { + reactStrictMode: true, + swcMinify: true, + compiler: { + styledComponents: true, + }, + experimental: { + images: { + unoptimized: true, + }, + }, + async redirects() { + return [ + { source: '/docs', destination: '/docs/introduction', permanent: true } + ] + } +}; + +module.exports = nextConfig; diff --git a/iconoir.com/package.json b/iconoir.com/package.json new file mode 100644 index 00000000..d48ab559 --- /dev/null +++ b/iconoir.com/package.json @@ -0,0 +1,52 @@ +{ + "name": "iconoir.com", + "version": "0.1.0", + "private": true, + "scripts": { + "dev": "next dev", + "build": "next build", + "export": "next export", + "start": "next start", + "lint": "next lint" + }, + "dependencies": { + "@react-aria/focus": "^3.6.1", + "@react-aria/i18n": "^3.4.1", + "@react-aria/slider": "^3.1.1", + "@react-aria/utils": "^3.13.1", + "@react-aria/visually-hidden": "^3.3.1", + "@react-stately/slider": "^3.1.1", + "animejs": "^3.2.1", + "case": "^1.6.3", + "iconoir-react": "workspace:*", + "lodash": "^4.17.21", + "moment": "^2.29.4", + "next": "12.2.2", + "next-mdx-remote": "^4.1.0", + "numbro": "^2.3.6", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-window": "^1.8.7", + "remark-gfm": "^3.0.1", + "remark-prism": "^1.3.6", + "styled-components": "^5.3.5", + "use-resize-observer": "^9.0.2" + }, + "devDependencies": { + "@internationalized/number": "^3.1.1", + "@react-types/slider": "^3.1.1", + "@types/animejs": "^3.1.5", + "@types/lodash": "^4.14.182", + "@types/node": "18.0.5", + "@types/react": "^17.0.29", + "@types/react-dom": "^18.0.6", + "@types/react-window": "^1.8.5", + "@types/styled-components": "^5.1.25", + "axios": "^0.27.2", + "csvtojson": "^2.0.10", + "download-stats": "^0.3.4", + "eslint": "^8.0.0", + "eslint-config-next": "12.2.2", + "typescript": "^4.4.4" + } +} diff --git a/iconoir.com/pages/_app.tsx b/iconoir.com/pages/_app.tsx new file mode 100755 index 00000000..88632066 --- /dev/null +++ b/iconoir.com/pages/_app.tsx @@ -0,0 +1,9 @@ +import type { AppProps } from 'next/app'; +import '../styles/prism-theme.css'; +import '../styles/theme.css'; + +function MyApp({ Component, pageProps }: AppProps) { + return ; +} + +export default MyApp; diff --git a/iconoir.com/pages/_document.tsx b/iconoir.com/pages/_document.tsx new file mode 100644 index 00000000..5b99d7f8 --- /dev/null +++ b/iconoir.com/pages/_document.tsx @@ -0,0 +1,61 @@ +import Document, { + Html, + Head, + Main, + NextScript, + DocumentContext, + DocumentInitialProps, +} from 'next/document'; +import { ServerStyleSheet } from 'styled-components'; + +export default class IconoirDocument extends Document { + static async getInitialProps( + ctx: DocumentContext + ): Promise { + const sheet = new ServerStyleSheet(); + const originalRenderPage = ctx.renderPage; + + try { + ctx.renderPage = () => + originalRenderPage({ + enhanceApp: (App) => (props) => + sheet.collectStyles(), + }); + const initialProps = await Document.getInitialProps(ctx); + return { + ...initialProps, + styles: ( + <> + {initialProps.styles} + {sheet.getStyleElement()} + + ), + }; + } finally { + sheet.seal(); + } + } + + render() { + return ( + + + + + + + +
+ + + + ); + } +} diff --git a/iconoir.com/pages/docs/[...slug].tsx b/iconoir.com/pages/docs/[...slug].tsx new file mode 100644 index 00000000..4af698c8 --- /dev/null +++ b/iconoir.com/pages/docs/[...slug].tsx @@ -0,0 +1,265 @@ +import { GetStaticPathsResult, GetStaticPropsContext } from 'next'; +import { serialize } from 'next-mdx-remote/serialize'; +import { MDXRemoteSerializeResult } from 'next-mdx-remote'; +import { MDXRemote } from '../../components/MDXRemote'; +import fs from 'fs'; +import { Layout } from '../../components/Layout'; +import { SEO } from '../../components/SEO'; +import { Header, HeaderProps } from '../../components/Header'; +import { getHeaderProps } from '../../lib/getHeaderProps'; +import styled from 'styled-components'; +import { media } from '../../components/responsive'; +import { Footer } from '../../components/Footer'; +import path from 'path'; +import { ParsedUrlQuery } from 'querystring'; +import { + DocumentationNavigation, + DocumentationNavigationProps, +} from '../../components/DocumentationNavigation'; +import remarkGfm from 'remark-gfm'; +import { ReadOnGitHub } from '../../components/ReadOnGitHub'; + +interface DocumentationPageProps extends HeaderProps { + source: MDXRemoteSerializeResult; + title: string; + navigationItem: DocumentationItem; + navigationProps: DocumentationNavigationProps; +} +export default function DocumentationPage({ + source, + title, + navigationItem, + navigationProps, + ...headerProps +}: DocumentationPageProps) { + return ( + + +
+ + + + + + + + {navigationItem.noReadOnGithub || + !navigationItem.filepath ? null : ( + + )} + + + +