[
  {
    "path": ".gitignore",
    "content": "node_modules\n\npackages/*/dist\npackages/*/node_modules\npackages/*/src/*\n\n\n\n\nwebsite/node_modules\nwebsite/.next\nwebsite/out\n\n\n\nyarn-error.log*\n\n"
  },
  {
    "path": ".prettierrc",
    "content": "{\n  \"bracketSpacing\": true,\n  \"jsxBracketSameLine\": false,\n  \"jsxSingleQuote\": false,\n  \"printWidth\": 100,\n  \"proseWrap\": \"always\",\n  \"quoteProps\": \"as-needed\",\n  \"semi\": true,\n  \"singleQuote\": true,\n  \"tabWidth\": 2,\n  \"trailingComma\": \"all\",\n  \"useTabs\": false\n}\n"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": ""
  },
  {
    "path": "LICENSE",
    "content": "Copyright (c) ERFAN KHADIVAR\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and\nassociated documentation files (the \"Software\"), to deal in the Software without restriction,\nincluding without limitation the rights to use, copy, modify, merge, publish, distribute,\nsublicense, and/or sell copies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial\nportions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT\nNOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES\nOR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "<h1 align=\"center\">iconsax for React and React Native</h1>\n\n<p align=\"center\">\n  1000 icons in 6 different styles, total 6000 icons | \nPerfectly balance | \n24px grid-based\n<p>\n\n<p align=\"center\">\n  <a href=\"https://iconsax.erfan.ee/\"><strong>Browse icons at site</strong></a>\n</p>\n<br>\n<br>\n\n## Installation\n\n### React\n\n```bash\nyarn add iconsax-reactjs\n# or\nnpm i iconsax-reactjs\n```\n\n### React Native\n\n```bash\nyarn add iconsax-react-nativejs react-native-svg\n# or\nnpm i iconsax-react-nativejs react-native-svg\n```\n\n## Usage\n\n```jsx\nimport React from 'react';\n//import icon. for React Native import from 'iconsax-react-nativejs'\nimport { EmojiHappy } from 'iconsax-reactjs';\n\nconst Example = () => {\n  // then use it as a normal React Component\n  return <EmojiHappy />;\n};\n```\n\nYou can configure Icons with inline props:\n\n```jsx\n<EmojiHappy color=\"#eee\" variant=\"Bulk\" size={54} />\n```\n\n## Props\n\n| Prop      | Type                                                | Default        | Note                   |\n| --------- | --------------------------------------------------- | -------------- | ---------------------- |\n| `color`   | `string`                                            | `currentColor` | css color              |\n| `size`    | `number` `string`                                   | 24px           | size={24} or size=\"24\" |\n| `variant` | `Linear` `Outline` `TwoTone` `Bulk` `Broken` `Bold` | `Linear`       | icons styles           |\n\n---\n\n## Contributing\n\nSee [CONTRIBUTING.md](./CONTRIBUTING.md)\n\n## License\n\n[MIT](./LICENSE)\n"
  },
  {
    "path": "lerna.json",
    "content": "{\n  \"packages\": [\"packages/*\", \"website\" ],\n  \"version\": \"independent\",\n  \"npmClient\": \"yarn\",\n  \"useWorkspaces\": true,\n  \"registry\": \"https://registry.npmjs.org/\"\n}\n"
  },
  {
    "path": "meta-data.json",
    "content": "{\"variants\":[\"Bold\",\"Broken\",\"Bulk\",\"Linear\",\"Outline\",\"TwoTone\"],\"categories\":[{\"name\":\"Archive\",\"icons\":[\"ArchiveAdd\",\"ArchiveMinus\",\"ArchiveSlash\",\"ArchiveTick\",\"Archive\",\"BookSaved\",\"BookSquare\",\"ReceiptSquare\",\"Save2\",\"SaveAdd\",\"SaveMinus\",\"SaveRemove\"]},{\"name\":\"Arrow\",\"icons\":[\"ArrangeHorizontalCircle\",\"ArrangeHorizontalSquare\",\"ArrangeHorizontal\",\"ArrangeVerticalCircle\",\"ArrangeVerticalSquare\",\"ArrangeVertical\",\"ArrowCircleDown2\",\"ArrowCircleDown\",\"ArrowCircleLeft2\",\"ArrowCircleLeft\",\"ArrowCircleRight2\",\"ArrowCircleRight\",\"ArrowCircleUp2\",\"ArrowCircleUp\",\"ArrowDown2\",\"ArrowDown3\",\"ArrowDown\",\"ArrowForwardSquare\",\"ArrowForward\",\"ArrowLeft2\",\"ArrowLeft3\",\"ArrowLeft\",\"ArrowRight2\",\"ArrowRight3\",\"ArrowRight\",\"ArrowRotateLeft\",\"ArrowRotateRight\",\"ArrowSquareDown\",\"ArrowSquareLeft\",\"ArrowSquareRight\",\"ArrowSquareUp\",\"ArrowSwapHorizontal\",\"ArrowSwapVertical\",\"ArrowUp2\",\"ArrowUp3\",\"ArrowUp\",\"BackSquare\",\"Back\",\"Convert\",\"ExportCircle\",\"ExportCurve\",\"ExportSquare\",\"Export\",\"ImportCircle\",\"ImportCurve\",\"ImportSquare\",\"Import\",\"LoginCurve\",\"Login\",\"LogoutCurve\",\"Logout\",\"ReceiveSquare2\",\"ReceiveSquare\",\"Receive\",\"Refresh2\",\"RefreshCircle\",\"RefreshLeftSquare\",\"RefreshRightSquare\",\"RefreshSquare\",\"Refresh\",\"RepeatCircle\",\"Repeat\",\"TransmitSqaure2\",\"TransmitSquare\",\"Transmit\"]},{\"name\":\"Astrology\",\"icons\":[\"Aquarius\",\"Gemini2\",\"Gemini\",\"Man\",\"Sagittarius\",\"Woman\"]},{\"name\":\"Building\",\"icons\":[\"Bank\",\"Building3\",\"Building4\",\"Building\",\"Buildings2\",\"Buildings\",\"Buliding\",\"Courthouse\",\"Hospital\",\"House2\",\"House\"]},{\"name\":\"Business\",\"icons\":[\"Activity\",\"Chart1\",\"Chart2\",\"Chart21\",\"ChartFail\",\"ChartSuccess\",\"Chart\",\"Diagram\",\"FavoriteChart\",\"Graph\",\"HashtagSquare\",\"Health\",\"HomeHashtag\",\"HomeTrendDown\",\"HomeTrendUp\",\"Personalcard\",\"PresentionChart\",\"StatusUp\",\"TrendDown\",\"TrendUp\"]},{\"name\":\"Call\",\"icons\":[\"CallAdd\",\"CallCalling\",\"CallIncoming\",\"CallMinus\",\"CallOutgoing\",\"CallReceived\",\"CallRemove\",\"CallSlash\",\"Call\"]},{\"name\":\"Car\",\"icons\":[\"AirplaneSquare\",\"Airplane\",\"Bus\",\"Car\",\"Driving\",\"GasStation\",\"Ship\",\"SmartCar\"]},{\"name\":\"Computers, Devices, Electronics\",\"icons\":[\"Airdrop\",\"Airpod\",\"Airpods\",\"Bluetooth2\",\"BluetoothCircle\",\"BluetoothRectangle\",\"Bluetooth\",\"CloudAdd\",\"CloudChange\",\"CloudConnection\",\"CloudRemove\",\"CpuCharge\",\"CpuSetting\",\"Cpu\",\"Devices\",\"Driver2\",\"DriverRefresh\",\"Driver\",\"Electricity\",\"ExternalDrive\",\"FolderConnection\",\"Game\",\"Gameboy\",\"Headphone\",\"Headphones\",\"KeyboardOpen\",\"Keyboard\",\"Microscope\",\"MirroringScreen\",\"Mobile\",\"MonitorMobbile\",\"MonitorRecorder\",\"Monitor\",\"Mouse\",\"MusicPlay\",\"PrinterSlash\",\"Printer\",\"Ram2\",\"Ram\",\"Simcard1\",\"Simcard2\",\"Simcard\",\"Speaker\",\"TableLamp\",\"WatchStatus\",\"Watch\",\"WeightMeter\",\"WristClock\"]},{\"name\":\"Content-Edit\",\"icons\":[\"ArchiveBook\",\"Bill\",\"ClipboardClose\",\"ClipboardExport\",\"ClipboardImport\",\"ClipboardText\",\"ClipboardTick\",\"Copyright\",\"CreativeCommons\",\"DocumentCloud\",\"DocumentCopy\",\"DocumentDownload\",\"DocumentFavorite\",\"DocumentFilter\",\"DocumentForward\",\"DocumentLike\",\"DocumentPrevious\",\"DocumentSketch\",\"DocumentText1\",\"DocumentText\",\"DocumentUpload\",\"Document\",\"Edit2\",\"Edit\",\"MenuBoard\",\"Note1\",\"NoteAdd\",\"NoteFavorite\",\"NoteRemove\",\"NoteText\",\"Note\",\"Stickynote\",\"TaskSquare\",\"Task\"]},{\"name\":\"Crypto, Company\",\"icons\":[\"Aave\",\"Android\",\"Ankr\",\"Apple\",\"Augur\",\"Autonio\",\"Avalanche\",\"Be\",\"BinanceCoin\",\"BinanceUsd\",\"Bitcoin\",\"Blogger\",\"Bootstrap\",\"Cardano\",\"Celo\",\"Celsius\",\"Chainlink\",\"Civic\",\"Dai\",\"Dash\",\"Decred\",\"Dent\",\"Dribbble\",\"Dropbox\",\"Educare\",\"Emercoin\",\"EnjinCoin\",\"Eos\",\"EthereumClassic\",\"Ethereum\",\"Facebook\",\"Figma1\",\"Figma\",\"Framer\",\"FtxToken\",\"GoogleDrive\",\"GooglePlay\",\"Google\",\"Harmony\",\"HederaHashgraph\",\"Hex\",\"Html3\",\"Html5\",\"HuobiToken\",\"Icon\",\"Illustrator\",\"Iost\",\"JavaScript\",\"Js\",\"KyberNetwork\",\"Litecoin\",\"Maker\",\"Messenger\",\"Monero\",\"Nebulas\",\"Nem\",\"Nexo\",\"OceanProtocol\",\"Okb\",\"Okru\",\"Ontology\",\"Paypal\",\"Photoshop\",\"Polkadot\",\"Polygon\",\"Polyswarm\",\"Python\",\"Quant\",\"Shutterstock\",\"Siacoin\",\"Slack\",\"Snapchat\",\"Solana\",\"Spotify\",\"Stacks\",\"Stellar\",\"Tenx\",\"Tether\",\"TheGraph\",\"Theta\",\"Thorchain\",\"Trello\",\"TriangleLogo\",\"Trontron\",\"Twitch\",\"Ui8\",\"UsdCoin\",\"Velas\",\"Vibe\",\"Wanchain1\",\"Wanchain\",\"Whatsapp\",\"Windows\",\"Wing\",\"Xd\",\"Xiaomi\",\"Xrp\",\"Youtube\",\"Zel\",\"Zoom\"]},{\"name\":\"Crypto, Currency\",\"icons\":[\"BitcoinCard\",\"BitcoinConvert\",\"BitcoinRefresh\",\"BuyCrypto\",\"CardCoin\",\"Trade\"]},{\"name\":\"Delivery\",\"icons\":[\"I3DCubeScan\",\"I3DRotate\",\"I3DSquare\",\"Box1\",\"BoxAdd\",\"BoxRemove\",\"BoxSearch\",\"BoxTick\",\"BoxTime\",\"Box\",\"Convert3DCube\",\"TruckFast\",\"TruckRemove\",\"TruckTick\",\"TruckTime\",\"Truck\"]},{\"name\":\"Design, Tools\",\"icons\":[\"Additem\",\"BackwardItem\",\"Bezier\",\"Blend2\",\"Blend\",\"Blur\",\"Brush2\",\"Brush3\",\"BrushBig\",\"BrushSquare\",\"Brush\",\"BucketCircle\",\"BucketSquare\",\"Bucket\",\"ChemicalGlass\",\"ColorSwatch\",\"Colorfilter\",\"ColorsSquare\",\"Component\",\"CopySuccess\",\"Copy\",\"Designtools\",\"Eraser\",\"ForwardItem\",\"Layer\",\"Lifebuoy\",\"Magicpen\",\"MainComponent\",\"MaskLeft\",\"MaskRight\",\"Mask\",\"OmegaCircle\",\"OmegaSquare\",\"Paintbucket\",\"PathTool2\",\"PathToolSquare\",\"PathTool\",\"PenAdd\",\"PenClose\",\"PenRemove\",\"PenTool2\",\"PenTool\",\"RecoveryConvert\",\"RulerPen\",\"Ruler\",\"Scissor\",\"Shapes1\",\"Shapes\",\"Size\"]},{\"name\":\"Emails, Messages\",\"icons\":[\"DeviceMessage\",\"DirectInbox\",\"DirectNormal\",\"DirectNotification\",\"DirectSend\",\"Direct\",\"DirectboxDefault\",\"DirectboxNotif\",\"DirectboxReceive\",\"DirectboxSend\",\"Message2\",\"MessageAdd1\",\"MessageAdd\",\"MessageCircle\",\"MessageEdit\",\"MessageFavorite\",\"MessageMinus\",\"MessageNotif\",\"MessageRemove\",\"MessageSearch\",\"MessageSquare\",\"MessageText1\",\"MessageText\",\"MessageTick\",\"MessageTime\",\"Message\",\"Messages1\",\"Messages2\",\"Messages3\",\"Messages\",\"SmsEdit\",\"SmsNotification\",\"SmsSearch\",\"SmsStar\",\"SmsTracking\",\"Sms\"]},{\"name\":\"Essetional\",\"icons\":[\"I3Dcube\",\"AddCircle\",\"AddSquare\",\"Add\",\"ArchiveBox\",\"Autobrightness\",\"BatteryCharging\",\"BatteryDisable\",\"BatteryEmpty1\",\"BatteryEmpty\",\"BatteryFull\",\"Box2\",\"Broom\",\"Bubble\",\"Cake\",\"Cd\",\"ChartCircle\",\"Chrome\",\"CloseCircle\",\"CloseSquare\",\"Coffee\",\"Computing\",\"Crown1\",\"Crown\",\"Cup\",\"Danger\",\"Diamonds\",\"Discover\",\"EmojiHappy\",\"EmojiNormal\",\"EmojiSad\",\"FilterAdd\",\"FilterEdit\",\"FilterRemove\",\"FilterSearch\",\"FilterSquare\",\"FilterTick\",\"Filter\",\"Flag2\",\"Flag\",\"FlashCircle\",\"FlashSlash\",\"Flash\",\"Forbidden2\",\"Forbidden\",\"Ghost\",\"Glass\",\"Grammerly\",\"HamburgerMenu\",\"Happyemoji\",\"Home2\",\"Home3\",\"HomeWifi\",\"Home\",\"InfoCircle\",\"Information\",\"Instagram\",\"Judge\",\"Lamp\",\"Level\",\"Milk\",\"MinusCirlce\",\"MinusSquare\",\"Minus\",\"Mirror\",\"MoreCircle\",\"MoreSquare\",\"MouseCircle\",\"MouseSquare\",\"Pet\",\"Pointer\",\"Rank\",\"Reserve\",\"SafeHome\",\"Send2\",\"Send\",\"Share\",\"Signpost\",\"Slash\",\"Slider\",\"SmartHome\",\"Sort\",\"Sound\",\"Speedometer\",\"Status\",\"Sticker\",\"Story\",\"TagCross\",\"TagRight\",\"TickCircle\",\"TickSquare\",\"Trash\",\"Tree\",\"Triangle\",\"TrushSquare\",\"Verify\",\"Warning2\",\"Weight\",\"WifiSquare\",\"Wifi\"]},{\"name\":\"Files\",\"icons\":[\"Folder2\",\"FolderAdd\",\"FolderCloud\",\"FolderCross\",\"FolderFavorite\",\"FolderMinus\",\"FolderOpen\",\"Folder\"]},{\"name\":\"Grid\",\"icons\":[\"I3Square\",\"AlignBottom\",\"AlignHorizontally\",\"AlignLeft\",\"AlignRight\",\"AlignTop\",\"AlignVertically\",\"Convertshape2\",\"Convertshape\",\"Crop\",\"Element2\",\"Element3\",\"Element4\",\"ElementEqual\",\"ElementPlus\",\"Element\",\"Fatrows\",\"FormatCircle\",\"FormatSquare\",\"Grid1\",\"Grid2\",\"Grid3\",\"Grid4\",\"Grid5\",\"Grid6\",\"Grid7\",\"Grid8\",\"Grid9\",\"GridEdit\",\"GridEraser\",\"GridLock\",\"Kanban\",\"Maximize1\",\"Maximize2\",\"Maximize3\",\"Maximize4\",\"Maximize\",\"RotateLeft\",\"RotateRight\",\"RowHorizontal\",\"RowVertical\",\"SliderHorizontal1\",\"SliderHorizontal\",\"SliderVertical1\",\"SliderVertical\"]},{\"name\":\"Location\",\"icons\":[\"ArrowSquare\",\"Arrow\",\"DirectDown\",\"DirectLeft\",\"DirectRight\",\"DirectUp\",\"GlobalEdit\",\"GlobalRefresh\",\"GlobalSearch\",\"Global\",\"GpsSlash\",\"Gps\",\"LocationAdd\",\"LocationCross\",\"LocationDiscover\",\"LocationMinus\",\"LocationSlash\",\"LocationTick\",\"Location\",\"Map1\",\"Map\",\"PictureFrame\",\"Radar2\",\"Radar\",\"RouteSquare\",\"Routing2\",\"Routing\"]},{\"name\":\"Money\",\"icons\":[\"CardAdd\",\"CardEdit\",\"CardPos\",\"CardReceive\",\"CardRemove1\",\"CardRemove\",\"CardSend\",\"CardSlash\",\"CardTick1\",\"CardTick\",\"Card\",\"Cards\",\"ChartSquare\",\"Coin1\",\"Coin\",\"ConvertCard\",\"DiscountCircle\",\"DiscountShape\",\"DollarCircle\",\"DollarSquare\",\"EmptyWalletAdd\",\"EmptyWalletChange\",\"EmptyWalletRemove\",\"EmptyWalletTick\",\"EmptyWalletTime\",\"EmptyWallet\",\"Math\",\"Money2\",\"Money3\",\"Money4\",\"MoneyAdd\",\"MoneyArchive\",\"MoneyChange\",\"MoneyForbidden\",\"MoneyRecive\",\"MoneyRemove\",\"MoneySend\",\"MoneyTick\",\"MoneyTime\",\"Money\",\"Moneys\",\"PercentageCircle\",\"PercentageSquare\",\"Receipt1\",\"Receipt21\",\"Receipt2\",\"ReceiptAdd\",\"ReceiptDiscount\",\"ReceiptDisscount\",\"ReceiptEdit\",\"ReceiptItem\",\"ReceiptMinus\",\"ReceiptSearch\",\"ReceiptText\",\"Receipt\",\"SecurityCard\",\"Strongbox2\",\"Strongbox\",\"TableDocument\",\"Tag2\",\"Tag\",\"Ticket2\",\"TicketDiscount\",\"TicketExpired\",\"TicketStar\",\"Ticket\",\"TransactionMinus\",\"Wallet1\",\"Wallet2\",\"Wallet3\",\"WalletAdd1\",\"WalletAdd\",\"WalletCheck\",\"WalletMinus\",\"WalletMoney\",\"WalletRemove\",\"WalletSearch\",\"Wallet\"]},{\"name\":\"Notifications\",\"icons\":[\"LampCharge\",\"LampOn\",\"LampSlash\",\"Notification1\",\"NotificationBing\",\"NotificationCircle\",\"NotificationFavorite\",\"NotificationStatus\",\"Notification\"]},{\"name\":\"Programing\",\"icons\":[\"Code1\",\"CodeCircle\",\"Code\",\"CommandSquare\",\"Command\",\"Data2\",\"Data\",\"DocumentCode2\",\"DocumentCode\",\"HashtagDown\",\"HashtagUp\",\"Hashtag\",\"Hierarchy2\",\"Hierarchy3\",\"HierarchySquare2\",\"HierarchySquare3\",\"HierarchySquare\",\"Hierarchy\",\"MessageProgramming\",\"MobileProgramming\",\"ProgrammingArrow\",\"ProgrammingArrows\",\"Scroll\",\"SidebarBottom\",\"SidebarLeft\",\"SidebarRight\",\"SidebarTop\"]},{\"name\":\"School, Learning\",\"icons\":[\"Award\",\"Book1\",\"Book\",\"Bookmark2\",\"Bookmark\",\"Briefcase\",\"BrifecaseCross\",\"BrifecaseTick\",\"BrifecaseTimer\",\"Calculator\",\"Clipboard\",\"Gift\",\"Notepad2\",\"Notepad\",\"Teacher\"]},{\"name\":\"Search\",\"icons\":[\"SearchFavorite1\",\"SearchFavorite\",\"SearchNormal1\",\"SearchNormal\",\"SearchStatus1\",\"SearchStatus\",\"SearchZoomIn1\",\"SearchZoomIn\",\"SearchZoomOut1\",\"SearchZoomOut\"]},{\"name\":\"Security\",\"icons\":[\"Alarm\",\"Brodcast\",\"Check\",\"EyeSlash\",\"Eye\",\"FingerCricle\",\"FingerScan\",\"KeySquare\",\"Key\",\"Lock1\",\"LockCircle\",\"LockSlash\",\"Lock\",\"PasswordCheck\",\"ScanBarcode\",\"Scan\",\"Scanner\",\"Scanning\",\"SecuritySafe\",\"SecurityUser\",\"Security\",\"ShieldCross\",\"ShieldSearch\",\"ShieldSecurity\",\"ShieldSlash\",\"ShieldTick\",\"Shield\",\"Unlock\"]},{\"name\":\"Settings\",\"icons\":[\"Candle2\",\"Candle\",\"Category2\",\"Category\",\"Menu\",\"More2\",\"More\",\"Setting2\",\"Setting3\",\"Setting4\",\"Setting5\",\"Setting\",\"Settings\",\"ToggleOffCircle\",\"ToggleOff\",\"ToggleOnCircle\",\"ToggleOn\"]},{\"name\":\"Shop\",\"icons\":[\"Bag2\",\"BagCross1\",\"BagCross\",\"BagHappy\",\"BagTick2\",\"BagTick\",\"BagTimer\",\"Bag\",\"Barcode\",\"ShopAdd\",\"ShopRemove\",\"Shop\",\"ShoppingBag\",\"ShoppingCart\"]},{\"name\":\"Support, Like, Question\",\"icons\":[\"I24Support\",\"Dislike\",\"HeartAdd\",\"HeartCircle\",\"HeartEdit\",\"HeartRemove\",\"HeartSearch\",\"HeartSlash\",\"HeartTick\",\"Heart\",\"Like1\",\"LikeDislike\",\"LikeShapes\",\"LikeTag\",\"Like\",\"Lovely\",\"MagicStar\",\"MedalStar\",\"Medal\",\"MessageQuestion\",\"Ranking\",\"Smileys\",\"Star1\",\"StarSlash\",\"Star\",\"Unlimited\"]},{\"name\":\"Time\",\"icons\":[\"Calendar1\",\"Calendar2\",\"CalendarAdd\",\"CalendarCircle\",\"CalendarEdit\",\"CalendarRemove\",\"CalendarSearch\",\"CalendarTick\",\"Calendar\",\"Clock\",\"SecurityTime\",\"Timer1\",\"TimerPause\",\"TimerStart\",\"Timer\"]},{\"name\":\"Type, Paragraph, Character\",\"icons\":[\"AttachCircle\",\"AttachSquare\",\"EraserSquare\",\"Firstline\",\"LanguageCircle\",\"LanguageSquare\",\"LayoutMaximize\",\"Link1\",\"Link2\",\"Link21\",\"LinkCircle\",\"LinkSquare\",\"Link\",\"Paperclip2\",\"Paperclip\",\"Pharagraphspacing\",\"QuoteDownCircle\",\"QuoteDownSquare\",\"QuoteDown\",\"QuoteUpCircle\",\"QuoteUpSquare\",\"QuoteUp\",\"Smallcaps\",\"TextBlock\",\"TextBold\",\"TextItalic\",\"TextUnderline\",\"Text\",\"TextalignCenter\",\"TextalignJustifycenter\",\"TextalignJustifyleft\",\"TextalignJustifyright\",\"TextalignLeft\",\"TextalignRight\",\"Translate\"]},{\"name\":\"Users\",\"icons\":[\"People\",\"Profile2User\",\"ProfileAdd\",\"ProfileCircle\",\"ProfileDelete\",\"ProfileRemove\",\"ProfileTick\",\"Profile\",\"TagUser\",\"UserAdd\",\"UserCirlceAdd\",\"UserEdit\",\"UserMinus\",\"UserOctagon\",\"UserRemove\",\"UserSearch\",\"UserSquare\",\"UserTag\",\"UserTick\",\"User\"]},{\"name\":\"Video, Audio, Image\",\"icons\":[\"AudioSquare\",\"Backward10Seconds\",\"Backward15Seconds\",\"Backward5Seconds\",\"Backward\",\"CameraSlash\",\"Camera\",\"Cut\",\"Forward10Seconds\",\"Forward15Seconds\",\"Forward5Seconds\",\"Forward\",\"GalleryAdd\",\"GalleryEdit\",\"GalleryExport\",\"GalleryFavorite\",\"GalleryImport\",\"GalleryRemove\",\"GallerySlash\",\"GalleryTick\",\"Gallery\",\"Image\",\"MaximizeCircle\",\"Microphone2\",\"MicrophoneSlash1\",\"MicrophoneSlash\",\"Microphone\",\"MiniMusicSqaure\",\"MusicCircle\",\"MusicDashboard\",\"MusicFilter\",\"MusicLibrary2\",\"MusicPlaylist\",\"MusicSquareAdd\",\"MusicSquareRemove\",\"MusicSquareSearch\",\"MusicSquare\",\"Music\",\"Musicnote\",\"Next\",\"NoteSquare\",\"PauseCircle\",\"Pause\",\"PlayAdd\",\"PlayCircle\",\"PlayCricle\",\"PlayRemove\",\"Play\",\"Previous\",\"Radio\",\"RecordCircle\",\"Record\",\"RepeateMusic\",\"RepeateOne\",\"Screenmirroring\",\"Shuffle\",\"StopCircle\",\"Stop\",\"Subtitle\",\"VideoAdd\",\"VideoCircle\",\"VideoHorizontal\",\"VideoOctagon\",\"VideoPlay\",\"VideoRemove\",\"VideoSlash\",\"VideoSquare\",\"VideoTick\",\"VideoTime\",\"VideoVertical\",\"Video\",\"VoiceCricle\",\"VoiceSquare\",\"VolumeCross\",\"VolumeHigh\",\"VolumeLow1\",\"VolumeLow\",\"VolumeMute\",\"VolumeSlash\",\"VolumeUp\",\"Volume\"]},{\"name\":\"Weather\",\"icons\":[\"CloudCross\",\"CloudDrizzle\",\"CloudFog\",\"CloudLightning\",\"CloudMinus\",\"CloudNotif\",\"CloudPlus\",\"CloudSnow\",\"CloudSunny\",\"Cloud\",\"Drop\",\"Flashy\",\"Moon\",\"Sun1\",\"SunFog\",\"Sun\",\"Wind2\",\"Wind\"]}]}"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"iconsax\",\n  \"description\": \"iconsax for react and react native\",\n  \"private\": true,\n  \"workspaces\": {\n    \"packages\": [\n      \"packages/*\",\n      \"website\"\n    ]\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/rendinjast/iconsax-react.git\"\n  },\n  \"version\": \"0.0.8\",\n  \"scripts\": {\n    \"gen\": \"node ./scripts/build.js\",\n    \"bootstrap\": \"lerna bootstrap\",\n    \"build\": \"lerna run build --ignore website\",\n    \"website\": \"yarn workspace website\",\n    \"website:dev\": \"yarn website dev\",\n    \"website:build\": \"yarn website build\",\n    \"website:start\": \"yarn website start\"\n  },\n  \"devDependencies\": {\n    \"camelcase\": \"^6.2.0\",\n    \"cheerio\": \"^1.0.0-rc.10\",\n    \"lerna\": \"^4.0.0\",\n    \"prettier-eslint\": \"^13.0.0\"\n  }\n}\n"
  },
  {
    "path": "packages/iconsax-react/.babelrc",
    "content": "{\n  \"presets\": [[\"@babel/env\", { \"modules\": false }], \"@babel/react\"],\n  \"plugins\": [\"@babel/proposal-object-rest-spread\"]\n}\n"
  },
  {
    "path": "packages/iconsax-react/.npmignore",
    "content": "src\n"
  },
  {
    "path": "packages/iconsax-react/README.md",
    "content": "<h1 align=\"center\">iconsax for React</h1>\n\n<a href=\"https://www.npmjs.com/package/iconsax-react-nativejs\">for React Native</a>\n\n<p align=\"center\">\n  1000 icons in 6 different styles, total 6000 icons | \nPerfectly balance | \n24px grid-based\n<p>\n\n<p align=\"center\">\n  <a href=\"https://iconsax.erfan.ee/\"><strong>Browse icons at site</strong></a>\n</p>\n<br>\n<br>\n\n## Installation\n\n```bash\nyarn add iconsax-reactjs\n# or\nnpm i iconsax-reactjs\n```\n\n## Usage\n\n```jsx\nimport React from 'react';\n//import icon.\nimport { EmojiHappy } from 'iconsax-reactjs';\n\nconst Example = () => {\n  // then use it as a normal React Component\n  return <EmojiHappy />;\n};\n```\n\nYou can configure Icons with inline props:\n\n```jsx\n<EmojiHappy color=\"#eee\" variant=\"Bulk\" size={54} />\n```\n\n## Props\n\n| Prop      | Type                                                | Default        | Note                   |\n| --------- | --------------------------------------------------- | -------------- | ---------------------- |\n| `color`   | `string`                                            | `currentColor` | css color              |\n| `size`    | `number` `string`                                   | 24px           | size={24} or size=\"24\" |\n| `variant` | `Linear` `Outline` `TwoTone` `Bulk` `Broken` `Bold` | `Linear`       | icons styles           |\n\n---\n\n## Contributing\n\nSee\n<a href=\"https://github.com/rendinjast/iconsax-react/blob/main/CONTRIBUTING.md\">CONTRIBUTING.md</a>\n\n## License\n\n<a href=\"https://github.com/rendinjast/iconsax-react/blob/main/LICENSE\">MIT</a>\n"
  },
  {
    "path": "packages/iconsax-react/package.json",
    "content": "{\n  \"name\": \"iconsax-reactjs\",\n  \"version\": \"0.0.8\",\n  \"description\": \"Iconsax icon pack for React\",\n  \"author\": \"Erfan Khadivar <rendinjast@gmail.com>\",\n  \"homepage\": \"https://iconsax.erfan.ee\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/rendinjast/iconsax-react.git\",\n    \"directory\": \"packages/iconsax-react\"\n  },\n  \"bugs\": {\n    \"url\": \"https://github.com/rendinjast/iconsax-react/issues\"\n  },\n  \"publishConfig\": {\n    \"access\": \"public\"\n  },\n  \"license\": \"MIT\",\n  \"main\": \"dist/cjs/index.js\",\n  \"module\": \"dist/esm/index.js\",\n  \"types\": \"dist/index.d.ts\",\n  \"sideEffects\": false,\n  \"scripts\": {\n    \"preBuild\": \"rm -rf dist\",\n    \"build:bundle\": \"rollup --config rollup.config.js\",\n    \"build\": \"yarn preBuild && yarn build:bundle\"\n  },\n  \"keywords\": [\n    \"icons\",\n    \"react\",\n    \"icon components\",\n    \"iconsax\"\n  ],\n  \"files\": [\n    \"dist\"\n  ],\n  \"devDependencies\": {\n    \"@babel/cli\": \"^7.15.7\",\n    \"@babel/core\": \"^7.15.5\",\n    \"@babel/plugin-proposal-object-rest-spread\": \"^7.15.6\",\n    \"@babel/preset-env\": \"^7.15.6\",\n    \"@babel/preset-react\": \"^7.14.5\",\n    \"@rollup/plugin-babel\": \"^5.3.0\",\n    \"@rollup/plugin-commonjs\": \"^20.0.0\",\n    \"@rollup/plugin-node-resolve\": \"^13.0.4\",\n    \"@types/react\": \"^17.0.22\",\n    \"babel-plugin-transform-object-rest-spread\": \"^6.26.0\",\n    \"babel-preset-env\": \"^1.7.0\",\n    \"react\": \"^17.0.2\",\n    \"rollup\": \"^2.56.3\",\n    \"rollup-plugin-copy\": \"^3.4.0\",\n    \"rollup-plugin-filesize\": \"^9.1.1\",\n    \"rollup-plugin-multi-input\": \"^1.3.1\",\n    \"rollup-plugin-peer-deps-external\": \"^2.2.4\",\n    \"rollup-plugin-terser\": \"^7.0.2\",\n    \"rollup-plugin-uglify\": \"^6.0.4\"\n  },\n  \"peerDependencies\": {\n    \"react\": \"*\"\n  }\n}\n"
  },
  {
    "path": "packages/iconsax-react/rollup.config.js",
    "content": "import resolve from '@rollup/plugin-node-resolve';\nimport commonjs from '@rollup/plugin-commonjs';\nimport babel from '@rollup/plugin-babel';\nimport copy from 'rollup-plugin-copy';\nimport external from 'rollup-plugin-peer-deps-external';\nimport multiInput from 'rollup-plugin-multi-input';\n\nconst input = ['src/**/*.js'];\nconst output = [\n  {\n    dir: 'dist/cjs',\n    format: 'cjs',\n    exports: 'auto',\n    sourcemap: false,\n  },\n  {\n    dir: 'dist/esm',\n    format: 'es',\n    exports: 'auto',\n    sourcemap: false,\n  },\n];\n\nconst plugins = [];\nplugins.push(\n  babel({\n    exclude: 'node_modules/**',\n  }),\n);\nplugins.push(multiInput());\nplugins.push(external());\nplugins.push(resolve());\nplugins.push(commonjs());\nplugins.push(\n  copy({\n    targets: [\n      { src: 'src/index.d.ts', dest: 'dist' },\n      { src: '../../meta-data.json', dest: 'dist' },\n    ],\n  }),\n);\nexport default {\n  input,\n  output,\n  external: ['react', 'prop-types'],\n  plugins,\n};\n"
  },
  {
    "path": "packages/iconsax-react-native/.babelrc",
    "content": "{\n  \"presets\": [[\"@babel/env\", { \"modules\": false }], \"@babel/react\"],\n  \"plugins\": [\"@babel/proposal-object-rest-spread\"]\n}\n"
  },
  {
    "path": "packages/iconsax-react-native/.npmignore",
    "content": "src\n"
  },
  {
    "path": "packages/iconsax-react-native/README.md",
    "content": "<h1 align=\"center\">iconsax for React Native</h1>\n\n<a href=\"https://www.npmjs.com/package/iconsax-reactjs\">for React</a>\n\n<p align=\"center\">\n  1000 icons in 6 different styles, total 6000 icons | \nPerfectly balance | \n24px grid-based\n<p>\n\n<p align=\"center\">\n  <a href=\"https://iconsax.erfan.ee/\"><strong>Browse icons at site</strong></a>\n</p>\n\n<br>\n<br>\n\n## Installation\n\n```bash\nyarn add iconsax-react-nativejs react-native-svg\n# or\nnpm i iconsax-react-nativejs react-native-svg\n```\n\n## Usage\n\n```jsx\nimport React from 'react';\n//import icon.\nimport { EmojiHappy } from 'iconsax-react-nativejs';\n\nconst Example = () => {\n  // then use it as a normal React Component\n  return <EmojiHappy />;\n};\n```\n\nYou can configure Icons with inline props:\n\n```jsx\n<EmojiHappy color=\"#eee\" variant=\"Bulk\" size={54} />\n```\n\n## Props\n\n| Prop      | Type                                                | Default        | Note                   |\n| --------- | --------------------------------------------------- | -------------- | ---------------------- |\n| `color`   | `string`                                            | `currentColor` | css color              |\n| `size`    | `number` `string`                                   | 24px           | size={24} or size=\"24\" |\n| `variant` | `Linear` `Outline` `TwoTone` `Bulk` `Broken` `Bold` | `Linear`       | icons styles           |\n\n---\n\n## Contributing\n\nSee\n<a href=\"https://github.com/rendinjast/iconsax-react/blob/main/CONTRIBUTING.md\">CONTRIBUTING.md</a>\n\n## License\n\n<a href=\"https://github.com/rendinjast/iconsax-react/blob/main/LICENSE\">MIT</a>\n"
  },
  {
    "path": "packages/iconsax-react-native/package.json",
    "content": "{\n  \"name\": \"iconsax-react-nativejs\",\n  \"version\": \"0.0.8\",\n  \"author\": \"Erfan Khadivar <rendinjast@gmail.com>\",\n  \"homepage\": \"https://iconsax.erfan.ee/\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/rendinjast/iconsax-react.git\",\n    \"directory\": \"packages/iconsax-react-native\"\n  },\n  \"bugs\": {\n    \"url\": \"https://github.com/rendinjast/iconsax-react/issues\"\n  },\n  \"publishConfig\": {\n    \"access\": \"public\"\n  },\n  \"license\": \"MIT\",\n  \"main\": \"dist/cjs/index.js\",\n  \"module\": \"dist/esm/index.js\",\n  \"types\": \"dist/index.d.ts\",\n  \"sideEffects\": false,\n  \"scripts\": {\n    \"gen\": \"node ./scripts/build.js\",\n    \"preBuild\": \"rm -rf dist\",\n    \"build:bundle\": \"rollup --config rollup.config.js\",\n    \"build\": \"yarn preBuild && yarn build:bundle\"\n  },\n  \"keywords\": [\n    \"icons\",\n    \"react-native\",\n    \"icon components\",\n    \"iconsax\"\n  ],\n  \"files\": [\n    \"dist\"\n  ],\n  \"devDependencies\": {\n    \"@babel/cli\": \"^7.15.7\",\n    \"@babel/core\": \"^7.15.5\",\n    \"@babel/plugin-proposal-object-rest-spread\": \"^7.15.6\",\n    \"@babel/preset-env\": \"^7.15.6\",\n    \"@babel/preset-react\": \"^7.14.5\",\n    \"@rollup/plugin-babel\": \"^5.3.0\",\n    \"@rollup/plugin-commonjs\": \"^20.0.0\",\n    \"@rollup/plugin-node-resolve\": \"^13.0.4\",\n    \"@types/react\": \"^17.0.22\",\n    \"babel-plugin-transform-object-rest-spread\": \"^6.26.0\",\n    \"babel-preset-env\": \"^1.7.0\",\n    \"eslint-config-airbnb\": \"^18.2.1\",\n    \"eslint-plugin-import\": \"^2.24.2\",\n    \"eslint-plugin-jsx-a11y\": \"^6.4.1\",\n    \"eslint-plugin-react\": \"^7.25.3\",\n    \"react\": \"^17.0.2\",\n    \"react-native-svg\": \"^12.1.1\",\n    \"rollup\": \"^2.56.3\",\n    \"rollup-plugin-copy\": \"^3.4.0\",\n    \"rollup-plugin-filesize\": \"^9.1.1\",\n    \"rollup-plugin-peer-deps-external\": \"^2.2.4\",\n    \"rollup-plugin-terser\": \"^7.0.2\",\n    \"rollup-plugin-uglify\": \"^6.0.4\"\n  },\n  \"peerDependencies\": {\n    \"react\": \"*\",\n    \"react-native\": \">=0.46\",\n    \"react-native-svg\": \">=5.3\"\n  }\n}\n"
  },
  {
    "path": "packages/iconsax-react-native/rollup.config.js",
    "content": "import resolve from '@rollup/plugin-node-resolve';\nimport commonjs from '@rollup/plugin-commonjs';\nimport babel from '@rollup/plugin-babel';\nimport copy from 'rollup-plugin-copy';\nimport external from 'rollup-plugin-peer-deps-external';\nimport multiInput from 'rollup-plugin-multi-input';\n\nconst input = ['src/**/*.js'];\nconst output = [\n  {\n    dir: 'dist/cjs',\n    format: 'cjs',\n    exports: 'auto',\n    sourcemap: false,\n  },\n  {\n    dir: 'dist/esm',\n    format: 'es',\n    exports: 'auto',\n    sourcemap: false,\n  },\n];\n\nconst plugins = [];\nplugins.push(\n  babel({\n    exclude: 'node_modules/**',\n  }),\n);\nplugins.push(multiInput());\nplugins.push(external());\nplugins.push(resolve());\nplugins.push(commonjs());\nplugins.push(\n  copy({\n    targets: [\n      { src: 'src/index.d.ts', dest: 'dist' },\n      { src: '../../meta-data.json', dest: 'dist' },\n    ],\n  }),\n);\nexport default {\n  input,\n  output,\n  external: ['react', 'prop-types'],\n  plugins,\n};\n"
  },
  {
    "path": "scripts/build.js",
    "content": "const cc = require('camelcase');\nconst path = require('path');\nconst fs = require('fs').promises;\nconst existsSync = require('fs').existsSync;\nconst fetchIcon = require('./fetchIcon');\nconst generateIcons = require('./generateIcons');\n\n// Paths\nconst rootDir = path.resolve();\nconst IconsDir = path.join(rootDir, 'icons');\nconst packagesDir = path.join(rootDir, 'packages');\nconst packages = ['react', 'react-native'];\n\nconst space = () => console.log('-----------------------------');\nconst main = async () => {\n  try {\n    // 1. fetching icon form svg files\n    space();\n    console.log('1. fetching icon files');\n    const icons = await fetchIcon(IconsDir);\n    console.log(icons);\n\n    space();\n    packages.forEach(async (p) => {\n      const srPath = path.join(packagesDir, `iconsax-${p}`, 'src');\n\n      // 2. generating meta-data file\n      console.log(`----- generating meta-data file -> ${p}`);\n      const categories = icons.categories.map((cat) => {\n        const icons = cat.icons.map((i) => {\n          if (i.match(/^\\d/)) {\n            i = 'I' + i;\n          }\n          return cc(i.replace('.svg', ''), { pascalCase: true });\n        });\n        return { ...cat, icons };\n      });\n      await fs.writeFile(\n        path.join(rootDir, 'meta-data.json'),\n        JSON.stringify({ variants: icons.variants, categories }),\n      );\n\n      // 3. cleaning old icons\n      console.log(`----- cleaning old icons -> ${p}`);\n\n      // const isDirectory = stat.isDirectory();\n      const exist = existsSync(srPath);\n      if (exist) {\n        await fs.rm(srPath, {\n          recursive: true,\n          force: true,\n        });\n      }\n      await fs.mkdir(srPath);\n\n      // 4. generating icons\n      // await generateIcons['react-native'](icons);\n      await generateIcons[p](icons);\n    });\n  } catch (err) {\n    throw new Error(err.message);\n  }\n};\nmain();\n"
  },
  {
    "path": "scripts/fetchIcon.js",
    "content": "const path = require('path');\nconst fs = require('fs');\n\nconst { readdirSync } = fs;\n\nconst rootDir = path.resolve();\n\nconst IconsDir = path.join(rootDir, 'icons');\n// does not matter witch variant(Linear, Outline, TwoTone,...) folder\n// cause all of them have similar icon name\nconst categoriesDir = path.join(IconsDir, 'Linear');\n\nconst fetchIcon = async () => {\n  const variants = readdirSync(IconsDir);\n\n  const _categories = readdirSync(categoriesDir);\n  const categories = _categories.map((x) => {\n    const icons = readdirSync(path.join(categoriesDir, x));\n    return { name: x, icons };\n  });\n  return { variants, categories };\n};\n\nmodule.exports = fetchIcon;\n"
  },
  {
    "path": "scripts/generateIcons.js",
    "content": "/* eslint-disable no-unreachable */\n/* eslint-disable no-param-reassign */\n/* eslint-disable indent */\n/* eslint-disable max-len */\nconst path = require('path');\nconst fs = require('fs').promises;\nconst { readFileSync } = require('fs');\nconst cheerio = require('cheerio');\nconst prettier = require('prettier-eslint');\nconst cc = require('camelcase');\nconst { log } = require('console');\n\n// Paths\nconst rootDir = path.resolve();\nconst IconsDir = path.join(rootDir, 'icons');\nconst packageDir = path.join(rootDir, 'packages');\n\n// format files before write\nconst format = (text) =>\n  // eslint-disable-next-line implicit-arrow-linebreak\n  prettier({\n    text,\n    eslintConfig: {\n      extends: 'airbnb',\n    },\n    prettierOptions: {\n      bracketSpacing: true,\n      singleQuote: true,\n      parser: 'flow',\n    },\n  });\n\nconst convertAttrsToReactAttrs = (obj) => {\n  const keyValues = Object.keys(obj).map((key) => {\n    const newKey = cc(key);\n    let newValue = obj[key];\n    if (newValue.match(/^(#292D32|#17191C|#000)$/)) newValue = '%%{color}%%';\n    if (newKey.match(/^(width|height)$/) && newValue.match('24')) newValue = '%%{size}%%';\n\n    return { [newKey]: newValue };\n  });\n  return Object.assign({}, ...keyValues);\n};\nconst reactiveChildren = (children, isNative) => {\n  if (!children.length > 0) return;\n  const newChidlren = children.map((c) => {\n    if (isNative && c.name) c.name = c.name[0].toUpperCase() + c.name.slice(1);\n    if (!c.attribs) return c;\n    const attribs = convertAttrsToReactAttrs(c.attribs);\n    return { ...c, attribs };\n  });\n\n  return newChidlren;\n};\nconst convertElementInsideSvgToReactElement = (svgFile, isNative) => {\n  const $ = cheerio.load(svgFile);\n  const elem = $('svg > *');\n  elem.each((_, element) => {\n    if (isNative) element.name = element.name[0].toUpperCase() + element.name.slice(1);\n    const attrs = convertAttrsToReactAttrs(element.attribs);\n    element.attribs = attrs;\n    const newc = reactiveChildren(element.children, isNative);\n    if (newc) element.children = newc;\n  });\n  const final = elem.toString().replace(/\"?%%\"?/g, '');\n  return final;\n};\n\nconst loopAllVariant = (iconsAllVariant, isNative) => {\n  const loop = iconsAllVariant.map((iav) => {\n    return `const ${iav.variant} = ({color}) => (<>${convertElementInsideSvgToReactElement(\n      iav.svgFile,\n      isNative,\n    )}</>)`;\n  });\n  return loop.join('\\n\\n');\n};\n\nconst switchStatementForVariants = (iconsAllVariant) => {\n  const cases = iconsAllVariant.map(\n    (iav) => `\n  case '${iav.variant}':\n    return <${iav.variant} color={color} />\n    `,\n  );\n  return `const chooseVariant = (variant, color) => {\n    switch (variant) {\n      ${cases.join('')}\n        default:\n        return <Linear color={color} />\n    }\n  };`;\n};\n\nconst initialTypeDefinitions = `/// <reference types=\"react\" />\nimport { FC, SVGAttributes, Ref } from 'react';\nexport interface IconProps extends SVGAttributes<SVGElement> {\n  variant?: 'Linear' | 'Outline' | 'Broken' | 'Bold' | 'Bulk' | 'TwoTone';\n  ref?: Ref<SVGSVGElement>;\n  color?: string;\n  size?: string | number;\n}\nexport type Icon = FC<IconProps>;\n`;\n\nconst react = async (icons) => {\n  console.log('----- generating icons -> react');\n  const builtSourceDir = path.join(packageDir, 'iconsax-react', 'src');\n  await fs.writeFile(path.join(builtSourceDir, 'index.js'), '', 'utf-8');\n  await fs.writeFile(\n    path.join(builtSourceDir, 'index.d.ts'),\n    format(initialTypeDefinitions),\n    'utf-8',\n  );\n\n  icons.categories.forEach(async (category) => {\n    category.icons.forEach(async (icon) => {\n      const iconsAllVariant = icons.variants.map((variant) => {\n        const svgFile = readFileSync(path.join(IconsDir, variant, category.name, icon));\n        return { variant, svgFile };\n      });\n\n      let ComponentName = cc(icon.replace('.svg', ''), { pascalCase: true });\n\n      if (ComponentName.match(/^\\d/)) {\n        ComponentName = 'I' + ComponentName;\n      }\n      const element = `\n       import React, {forwardRef} from 'react';\n\n       ${loopAllVariant(iconsAllVariant)}\n\n       ${switchStatementForVariants(iconsAllVariant)}\n\n       const ${ComponentName} =\n       forwardRef(({ variant = 'Linear', color = 'currentColor', size = '24', ...rest }, ref) => {\n          return (\n              <svg {...rest} xmlns=\"http://www.w3.org/2000/svg\" ref={ref} width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\">\n              {chooseVariant(variant, color)}\n              </svg>)\n       });\n\n       ${ComponentName}.displayName = '${ComponentName}'\n\n       export default ${ComponentName}\n       `;\n\n      await fs.writeFile(\n        path.join(builtSourceDir, `${ComponentName}.js`),\n        format(element),\n        'utf-8',\n      );\n\n      // add export component to index.js\n      const exportString = `export { default as ${ComponentName} } from './${ComponentName}.js';\\r\\n`;\n      await fs.appendFile(path.join(builtSourceDir, 'index.js'), exportString, 'utf-8');\n\n      // add type definition for component in index.d.ts\n      const exportTypeString = `export const ${ComponentName}: Icon;\\n`;\n      await fs.appendFile(path.join(builtSourceDir, 'index.d.ts'), exportTypeString, 'utf-8');\n    });\n  });\n};\nconst nativeInitialTypeDefinitions = `/// <reference types=\"react\" />\nimport { FC, Component, Ref } from 'react';\nimport { SvgProps } from 'react-native-svg';\n\nexport interface IconProps extends SvgProps {\n  variant?: 'Linear' | 'Outline' | 'Broken' | 'Bold' | 'Bulk' | 'TwoTone';\n  ref?: Ref<Component<SvgProps>>;\n  color?: string;\n  size?: string | number;\n}\nexport type Icon = FC<IconProps>;\n`;\nconst reactNative = async (icons) => {\n  console.log('----- generating icons -> react native');\n  const builtSourceDir = path.join(packageDir, 'iconsax-react-native', 'src');\n  await fs.writeFile(path.join(builtSourceDir, 'index.js'), '', 'utf-8');\n  await fs.writeFile(\n    path.join(builtSourceDir, 'index.d.ts'),\n    format(nativeInitialTypeDefinitions),\n    'utf-8',\n  );\n  icons.categories.forEach(async (category) => {\n    category.icons.forEach(async (icon) => {\n      const iconsAllVariant = icons.variants.map((variant) => {\n        const svgFile = readFileSync(path.join(IconsDir, variant, category.name, icon));\n        return { variant, svgFile };\n      });\n\n      let ComponentName = cc(icon.replace('.svg', ''), { pascalCase: true });\n\n      if (ComponentName.match(/^\\d/)) {\n        ComponentName = 'I' + ComponentName;\n      }\n      const element = `\n         import React, {forwardRef} from 'react';\n         import Svg, {  Path, G } from 'react-native-svg';\n\n         ${loopAllVariant(iconsAllVariant, true)}\n\n         ${switchStatementForVariants(iconsAllVariant)}\n\n         const ${ComponentName} =\n         forwardRef(({ variant = 'Linear', color = 'currentColor', size = '24', ...rest }, ref) => {\n            return (\n                <Svg {...rest} xmlns=\"http://www.w3.org/2000/svg\" ref={ref} width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\">\n                {chooseVariant(variant, color)}\n                </Svg>)\n         });\n\n         ${ComponentName}.displayName = '${ComponentName}'\n         export default ${ComponentName}\n         `;\n\n      await fs.writeFile(\n        path.join(builtSourceDir, `${ComponentName}.js`),\n        format(element),\n        'utf-8',\n      );\n\n      // add export component to index.js\n      const exportString = `export { default as ${ComponentName} } from './${ComponentName}.js';\\r\\n`;\n      await fs.appendFile(path.join(builtSourceDir, 'index.js'), exportString, 'utf-8');\n\n      // add type definition for component in index.d.ts\n      const exportTypeString = `export const ${ComponentName}: Icon;\\n`;\n      await fs.appendFile(path.join(builtSourceDir, 'index.d.ts'), exportTypeString, 'utf-8');\n    });\n  });\n};\nconst generateIcons = {\n  react,\n  'react-native': reactNative,\n};\n\nmodule.exports = generateIcons;\n"
  },
  {
    "path": "website/.eslintrc.json",
    "content": "{\n  \"extends\": \"next/core-web-vitals\"\n}\n"
  },
  {
    "path": "website/.prettierrc",
    "content": "{\n  \"singleQuote\": true,\n  \"semi\": false\n}\n"
  },
  {
    "path": "website/.vscode/settings.json",
    "content": "{\n  \"cSpell.words\": [\"Customizer\"]\n}\n"
  },
  {
    "path": "website/Containers/IconContainer.tsx",
    "content": "import { IconCustomizer, IconList, SelectedIcon } from '../components'\nimport { IconContext } from '../store'\n\nexport const IconContainer = () => {\n  return (\n    <div className=\"relative mt-40 font-light\">\n      <IconContext>\n        <IconCustomizer />\n        <IconList />\n        <SelectedIcon />\n      </IconContext>\n    </div>\n  )\n}\n"
  },
  {
    "path": "website/components/Header.tsx",
    "content": "import React from 'react'\nimport { Heart } from 'iconsax-reactjs'\nimport { RainbowButton } from '.'\n\nexport const Header = () => {\n  return (\n    <div className=\"py-8 container m-auto\">\n      <div className=\"top-header text-xs text-gray-400 md:text-gray-300  flex flex-col md:flex-row gap-2 justify-center items-center md:justify-around\">\n        <span className=\"\">\n          ©️ iconsax\n          <a\n            className=\"mx-1 border-b border-primary\"\n            target=\"_blank\"\n            rel=\"noreferrer\"\n            href=\"https://iconsax.io/\"\n          >\n            official website\n          </a>\n          <a\n            className=\"mx-1 border-b border-primary\"\n            target=\"_blank\"\n            rel=\"noreferrer\"\n            href=\"https://github.com/lusaxweb/iconsax\"\n          >\n            github page\n          </a>\n        </span>\n        <span className=\"flex items-center justify-center \">\n          Website Designed and built with\n          <Heart variant=\"Bold\" size={16} color=\"red\" className=\"mx-1\" /> by\n          <a\n            className=\"mx-1 border-b border-primary\"\n            target=\"_blank\"\n            rel=\"noreferrer\"\n            href=\"https://github.com/rendinjast\"\n          >\n            Erfan Khadivar\n          </a>\n        </span>\n      </div>\n      <div className=\"flex flex-col items-center my-36\">\n        <h1 className=\"text-4xl text-center md:text-6xl font-bold flex-row break-words\">\n          ICONSAX for React and React Native\n        </h1>\n\n        <div className=\"flex-auto flex space-x-3 text-xs md:text-sm h-11 mt-7\">\n          {/* <button className=\"px-6 text-white transition-colors duration-150 bg-bg h-full rounded-full text-sm font-normal focus:shadow-outline border-2 border-border\">\n            iconsax-reactjs npm\n          </button> */}\n          <RainbowButton>Get Started ✌️</RainbowButton>\n          <div className=\"text-white flex justify-center items-center transition-colors duration-150 bg-bg h-full rounded-full text-sm font-normal focus:shadow-outline border-2 border-border\">\n            <a\n              target=\"_blank\"\n              rel=\"noreferrer\"\n              href=\"https://www.npmjs.com/package/iconsax-reactjs\"\n              className=\"border-r-2 h-full border-border px-4  flex items-center justify-center\"\n            >\n              React\n            </a>\n            <a\n              target=\"_blank\"\n              rel=\"noreferrer\"\n              href=\"https://www.npmjs.com/package/iconsax-react-nativejs\"\n              className=\"h-full flex items-center justify-center px-4\"\n            >\n              React Native\n            </a>\n          </div>\n        </div>\n      </div>\n    </div>\n  )\n}\n"
  },
  {
    "path": "website/components/IconColor.tsx",
    "content": "import { useRef, useState } from 'react'\nimport { BlockPicker, ColorChangeHandler } from 'react-color'\nimport { useIconContext } from '../store'\nimport { useOnClickOutside } from '../hooks'\n\nexport const IconColor = () => {\n  const { state, dispatch } = useIconContext()\n  const [isOpen, setIsOpen] = useState(false)\n  const colorRef = useRef(null)\n\n  useOnClickOutside(colorRef, () => setIsOpen(false))\n\n  const handleChangeCOmplete: ColorChangeHandler = (color) => {\n    dispatch({\n      type: 'CHANGE_COLOR',\n      payload: color.hex,\n    })\n  }\n  return (\n    <div className=\"relative\">\n      <div\n        onClick={() => setIsOpen((prv) => !prv)}\n        style={{\n          backgroundColor: state.color,\n          textShadow: '1px 1px 4px black',\n        }}\n        className=\"h-10 grid place-items-center px-4 rounded-xl cursor-pointer\"\n      >\n        <span className=\"hidden w-16 text-center sm:block\">{state.color}</span>\n      </div>\n      {isOpen && (\n        <div ref={colorRef} className=\"absolute top-0 right-0\">\n          <BlockPicker\n            className=\"shadow-2xl\"\n            color={state.color}\n            onChangeComplete={handleChangeCOmplete}\n            triangle=\"hide\"\n          />\n        </div>\n      )}\n    </div>\n  )\n}\n"
  },
  {
    "path": "website/components/IconCustomizer.tsx",
    "content": "import { IconColor, IconSearch, IconSize, IconVariant } from '.'\n\nexport const IconCustomizer = () => {\n  return (\n    <div className=\"toolbar w-full text-xs md:text-sm font-light flex flex-col justify-center items-center md:justify-end z-10\">\n      <div className=\"w-full md:container bg-bg m-auto p-2 sm:p-4 flex gap-2  sm:gap-6 justify-center items-center\">\n        <IconSearch />\n        <IconSize />\n        <IconVariant />\n        <IconColor />\n      </div>\n      <div className=\"w-full h-6 bg-gradient-to-b from-bg to-transparent\"></div>\n    </div>\n  )\n}\n"
  },
  {
    "path": "website/components/IconItem.tsx",
    "content": "import { useRef } from 'react'\nimport gsap from 'gsap'\nimport { Icon } from 'iconsax-reactjs'\nimport { useIconContext, selectedStore } from '../store'\n\n// eslint-disable-next-line react/display-name\nconst IC = ({ Icon }: { Icon: Icon }) => {\n  const {\n    state: { color, size, variant },\n  } = useIconContext()\n  return (\n    <span>\n      <Icon\n        className=\"transition-all duration-300\"\n        color={color}\n        size={size}\n        variant={variant}\n      />\n    </span>\n  )\n}\n\nconst duration = 0.3\nexport const IconItem = ({ Icon, name }: { Icon: Icon; name: string }) => {\n  const showIcon = selectedStore((state) => state.showIcon)\n  const ref = useRef(null)\n\n  const animateEnter = () => {\n    gsap\n      .to(ref.current, {\n        translateY: '-2px',\n        borderColor: '#FF8A65',\n        duration,\n      })\n      .play()\n  }\n  const animateLeave = () => {\n    gsap\n      .to(ref.current, { translateY: '2px', borderColor: '#1d1d1d', duration })\n      .play()\n  }\n\n  const handleClick = () => {\n    showIcon({ name, Icon })\n  }\n\n  return (\n    <span\n      ref={ref}\n      onMouseEnter={animateEnter}\n      onMouseLeave={animateLeave}\n      onClick={handleClick}\n      className=\"icon bg-card rounded-xl border-2 border-border cursor-pointer flex justify-center items-center h-[140px] w-[140px] overflow-hidden\"\n    >\n      <div className=\"flex flex-col justify-center items-center gap-3\">\n        <IC Icon={Icon} />\n        <span className=\"text-xs font-light text-gray-500 text-center overflow-hidden overflow-ellipsis w-32\">\n          {name}\n        </span>\n      </div>\n    </span>\n  )\n}\n"
  },
  {
    "path": "website/components/IconList.tsx",
    "content": "import { useEffect, useState } from 'react'\nimport icons, { IIconsArray } from '../lib/icons'\nimport { IconItem } from '.'\nimport { searchStore } from '../store'\nimport { EmojiSad } from 'iconsax-reactjs'\nimport { AutoSizer, List, WindowScroller } from 'react-virtualized'\n\nconst Empty = () => {\n  return (\n    <div className=\"w-full flex gap-4 flex-col justify-start items-center\">\n      <span>\n        <EmojiSad color=\"#FF8A65\" variant=\"Bulk\" size=\"90\" />\n      </span>\n      <span>Nothing Found</span>\n    </div>\n  )\n}\nconst ICON_CONTAINER_SIZE = 150\n\nexport const IconList = () => {\n  const [filtered, setFiltered] = useState<IIconsArray[]>(icons)\n  const [numColumns, setNumColumns] = useState(1)\n\n  const query = searchStore((state) => state.query)\n\n  const onResize = ({ width }: { width: number }) => {\n    if (width <= 576) {\n      setNumColumns(Math.floor(width / ICON_CONTAINER_SIZE))\n    } else {\n      setNumColumns(Math.floor(width / ICON_CONTAINER_SIZE))\n    }\n  }\n  useEffect(() => {\n    console.log(query)\n    const f =\n      icons.filter((x) =>\n        x.name.toLowerCase().includes(query!.toLowerCase())\n      ) || []\n    setFiltered(f)\n  }, [query])\n  return (\n    <div className=\"container flex justify-center m-auto min-h-[400px]\">\n      <div className=\"w-full relative mb-10\">\n        {filtered.length > 0 ? (\n          <WindowScroller>\n            {({ height, isScrolling, onChildScroll, scrollTop }) => (\n              <AutoSizer disableHeight onResize={onResize}>\n                {({ width }) => (\n                  <List\n                    tabIndex={-1}\n                    autoHeight\n                    width={width}\n                    height={height}\n                    isScrolling={isScrolling}\n                    onScroll={onChildScroll}\n                    scrollTop={scrollTop}\n                    rowCount={Math.ceil(filtered.length / numColumns)}\n                    rowHeight={ICON_CONTAINER_SIZE + 10}\n                    rowRenderer={({ key, index: rowIndex, style }) => (\n                      <div\n                        key={key}\n                        className=\"grid place-items-center\"\n                        style={{\n                          ...style,\n                          gridTemplateColumns: `repeat(${numColumns}, 1fr)`,\n                        }}\n                      >\n                        {Array.from(\n                          { length: numColumns },\n                          (_, columnIndex) => {\n                            const icon =\n                              filtered[rowIndex * numColumns + columnIndex]\n                            if (!icon) {\n                              return null\n                            }\n                            return (\n                              <IconItem name={icon.name} Icon={icon.Icon} />\n                            )\n                          }\n                        )}\n                      </div>\n                    )}\n                  />\n                )}\n              </AutoSizer>\n            )}\n          </WindowScroller>\n        ) : (\n          <Empty />\n        )}\n      </div>\n    </div>\n  )\n}\n"
  },
  {
    "path": "website/components/IconSearch.tsx",
    "content": "import { SearchNormal } from 'iconsax-reactjs'\nimport React, { useState, useCallback } from 'react'\nimport { useDebounce } from '../hooks'\nimport { searchStore } from '../store'\n\nexport const IconSearch = () => {\n  // const { SetQuery } = useSearchContext()\n  const SetQuery = searchStore((state) => state.setQuery)\n  const [search, setSearch] = useState('')\n  const onChangeInput = useCallback((e) => {\n    setSearch(e.target.value)\n  }, [])\n\n  useDebounce(() => SetQuery(search), 300, [search])\n  return (\n    <div className=\"h-10 bg-card rounded-xl flex items-center px-3\">\n      <SearchNormal size={18} color=\"#eee\" />\n      <input\n        className=\"bg-transparent px-2 py-2 w-24 sm:w-40\"\n        value={search}\n        onChange={onChangeInput}\n        placeholder=\"search icons...\"\n        type=\"text\"\n      />\n    </div>\n  )\n}\n"
  },
  {
    "path": "website/components/IconSize.tsx",
    "content": "import { ArrowDown2 } from 'iconsax-reactjs'\nimport { useRef, useState } from 'react'\nimport { useIconContext } from '../store'\nimport { Selector } from '.'\n\nconst options = [12, 16, 24, 32, 44, 60, 80]\n\nexport const IconSize = () => {\n  const { state, dispatch } = useIconContext()\n\n  const onChange = (op: number) => {\n    dispatch({ type: 'CHANGE_SIZE', payload: op })\n  }\n  return (\n    <Selector\n      options={options}\n      onChange={onChange}\n      label=\"size\"\n      value={state.size}\n    />\n  )\n}\n"
  },
  {
    "path": "website/components/IconVariant.tsx",
    "content": "import { Dispatch, useEffect } from 'react'\nimport { Selector } from '.'\nimport { useWindowSize } from '../hooks'\nimport { useIconContext, Variants } from '../store'\nimport { IconState, VariantType } from '../store/IconContext'\nimport { IconAction } from '../store/iconReducer'\n\ninterface ListProps {\n  state: IconState\n  dispatch: Dispatch<IconAction>\n}\n\nconst MenuList = ({ state, dispatch }: ListProps) => {\n  return (\n    <>\n      <div className=\"rounded-xl h-10 border-indigo-600 overflow-hidden flex\">\n        {Variants.map((variant) => (\n          <span\n            onClick={() =>\n              dispatch({ type: 'CHANGE_VARIANT', payload: variant })\n            }\n            className={`px-1 xs:px-4 cursor-pointer grid place-items-center transition-colors duration-300 ${\n              variant === state.variant ? 'bg-primary text-white' : 'bg-card'\n            }`}\n            key={variant}\n          >\n            {variant}\n          </span>\n        ))}\n      </div>\n    </>\n  )\n}\nconst DropDownList = ({ state, dispatch }: ListProps) => {\n  const onChange = (variant: VariantType) => {\n    dispatch({ type: 'CHANGE_VARIANT', payload: variant })\n  }\n  return (\n    <div>\n      <Selector\n        label=\"variant\"\n        onChange={onChange}\n        options={Variants.concat()}\n        value={state.variant!}\n      />\n    </div>\n  )\n}\nexport const IconVariant = () => {\n  const { width } = useWindowSize()\n  useEffect(() => {\n    console.log(width)\n  }, [width])\n  const { state, dispatch } = useIconContext()\n  // return <MenuList state={state} dispatch={dispatch} />\n  if (width >= 1030) {\n    return <MenuList state={state} dispatch={dispatch} />\n  } else {\n    return <DropDownList state={state} dispatch={dispatch} />\n  }\n}\n\nexport default IconVariant\n"
  },
  {
    "path": "website/components/RainbowButton.tsx",
    "content": "import { FC } from 'react'\n\nexport const RainbowButton: FC = ({ children }) => {\n  return (\n    <a\n      target=\"_blank\"\n      rel=\"noreferrer\"\n      href=\"https://github.com/rendinjast/iconsax-react\"\n      className=\"relative btn rounded-full overflow-hidden w-28 md:w-36 h-full\"\n    >\n      <span className=\"w-full h-full rainbow block\"></span>\n      <div\n        className={`child absolute bg-bg  m-0.5 top-0 left-0 right-0 bottom-0 flex justify-center items-center rounded-full font-normal`}\n      >\n        {children}\n      </div>\n    </a>\n  )\n}\n"
  },
  {
    "path": "website/components/SelectedIcon.tsx",
    "content": "import { ReactElement, useEffect, useRef, useState } from 'react'\nimport { renderToString } from 'react-dom/server'\nimport { saveAs } from 'file-saver'\nimport copy from 'copy-to-clipboard'\nimport canvg from 'canvg'\nimport gsap from 'gsap'\nimport { ClipboardText, CloseCircle, Import } from 'iconsax-reactjs'\nimport { useOnClickOutside } from '../hooks'\nimport { selectedStore, useIconContext } from '../store'\n\nconst duration = 300\nexport const SelectedIcon = () => {\n  const { state } = useIconContext()\n  const hideIcon = selectedStore((state) => state.hideIcon)\n  const selected = selectedStore((state) => state.selected)\n  const [isOpen, setIsOpen] = useState<boolean>(!!selected || false)\n  const ref = useRef(null)\n  const iconRef = useRef<SVGSVGElement>(null)\n\n  const Icon = selected?.Icon\n\n  useEffect(() => {\n    if (isOpen) {\n      gsap.to(ref.current, {\n        y: '0',\n        ease: 'expo.inOUt',\n        duration: duration / 1000,\n      })\n    }\n  }, [isOpen])\n  useEffect(() => {\n    setIsOpen(!!selected)\n  }, [selected])\n\n  useOnClickOutside(ref, (e) => {\n    const path = e.composedPath() as HTMLElement[]\n    let isAnIcon = false\n\n    for (let p = 0; p < path.length; p++) {\n      if (path[p].classList && path[p].classList.contains('icon')) {\n        return (isAnIcon = true)\n      }\n    }\n    if (!isAnIcon) handleClose()\n  })\n\n  const handleClose = () => {\n    if (!hideIcon) return\n    gsap.to(ref.current, {\n      y: '500',\n      ease: 'expo.inOUt',\n      duration: duration / 1000,\n    })\n    setTimeout(() => {\n      hideIcon()\n    }, duration)\n  }\n  const iconSaveName = `${selected?.name}-${state.variant}-${state.size}px`\n\n  const iconString =\n    Icon &&\n    renderToString(\n      <Icon size={state.size} color={state.color} variant={state.variant} />\n    )\n\n  const handleCopySvg = () => {\n    if (!iconString) return\n\n    copy(iconString)\n  }\n  const handleDownloadSvg = () => {\n    if (!iconString) return\n    const blob = new Blob([iconString])\n    saveAs(blob, `${iconSaveName}.svg`)\n  }\n  const handleDownloadPng = async () => {\n    if (!iconString) return\n\n    const canvas = document.createElement('canvas')\n    const ctx = canvas.getContext('2d')\n    const v = canvg.fromString(ctx, iconString)\n    v.render()\n    const img = canvas.toDataURL('image/png')\n    console.log(img)\n    saveAs(img, `${iconSaveName}.png`)\n  }\n  return (\n    <>\n      {isOpen && (\n        <div\n          ref={ref}\n          className=\"fixed bg-bg p-3 h-72 md:w-96 mx-4 left-0 md:left-auto right-0 bottom-0 rounded-t-3xl border-2 translate-y-[500px] border-border\"\n        >\n          <div className=\"flex justify-between items-center\">\n            <span className=\"font-bold text-md\">{selected?.name}</span>\n            <span className=\"cursor-pointer\" onClick={handleClose}>\n              <CloseCircle color=\"white\" />\n            </span>\n          </div>\n          <div className=\"flex gap-1 mt-3\">\n            <div className=\"flex-1 border-dashed border-2 p-4 border-border rounded-lg\">\n              {Icon && (\n                <Icon size={64} color={state.color} variant={state.variant} />\n              )}\n            </div>\n            <div className=\"flex-[7] flex flex-col gap-1 text-xs\">\n              <Button handleClick={handleCopySvg} name=\"copy#svg\" />\n              <div className=\"flex-1 grid grid-cols-2 gap-1\">\n                <Button handleClick={handleDownloadSvg} name=\"download#svg\" />\n                <Button handleClick={handleDownloadPng} name=\"download#png\" />\n              </div>\n            </div>\n          </div>\n          <Code name={selected?.name!} />\n        </div>\n      )}\n    </>\n  )\n}\n\ninterface ICode {\n  name: string\n}\nconst prop = (name: string, value: string | number) => [\n  {\n    text: ` ${name}`,\n    class: 'text-purple-400',\n  },\n  {\n    text: '=',\n    class: 'text-gray-200',\n  },\n  {\n    text: `\"${value}\"`,\n    class: 'text-green-400',\n  },\n]\nconst Code = ({ name }: ICode) => {\n  const code = useRef<ReactElement>(null)\n  const { state } = useIconContext()\n  const [copied, setCopied] = useState(false)\n\n  const VariantProp =\n    state.variant !== 'Linear' ? prop('variant', state.variant!) : []\n  const SizeProp = state.size !== 24 ? prop('size', state.size!) : []\n\n  const snip = [\n    {\n      text: '<',\n      class: 'text-blue-300',\n    },\n    {\n      text: `${name}`,\n      class: 'text-yellow-400',\n    },\n    ...SizeProp,\n    ...prop('color', state.color!),\n    ...VariantProp,\n    {\n      text: '/>',\n      class: 'text-blue-300',\n    },\n  ]\n  const handleClick = () => {\n    const res = snip.map((s) => s.text)\n    copy(res.join(''))\n    setCopied(true)\n    setTimeout(() => {\n      setCopied(false)\n    }, 1000)\n\n    // navigator.clipboard.writeText(res.join(''))\n  }\n  return (\n    <div className=\"relative bg-card border-2 border-border rounded-lg mt-3 py-3 px-2 text-xs\">\n      <div\n        onClick={() => handleClick()}\n        className={`absolute bottom-2 right-2 ${\n          copied ? 'bg-[#37d67a]' : 'bg-primary'\n        } text-bg font-bold text-xs rounded-lg p-1  cursor-pointer`}\n      >\n        {copied ? 'copied!' : 'copy'}\n      </div>\n      <pre className=\"\">\n        {snip.map((s, i) => (\n          <span className={s.class} key={i}>\n            {`${s.text}${s.class.match(/-(green|yellow)-/) ? '\\n' : ''}`}\n          </span>\n        ))}\n      </pre>\n    </div>\n  )\n}\n\ninterface IButton {\n  name: string\n  handleClick: () => void\n}\nconst Button = ({ name: _name, handleClick }: IButton) => {\n  const { state } = useIconContext()\n  const [copied, setCopied] = useState(false)\n  const name = _name.split('#')\n  const Icon = name[0] === 'download' ? Import : ClipboardText\n  const onClickHandler = () => {\n    if (name[0] === 'copy') {\n      console.log('erfan khadivar hastam ')\n      setCopied(true)\n      setTimeout(() => {\n        setCopied(false)\n      }, 1000)\n    }\n\n    handleClick()\n  }\n\n  return (\n    <button\n      onClick={onClickHandler}\n      className=\"flex-1 flex items-center justify-center gap-1 border-2 border-border active:border-primary transition-all  rounded-lg\"\n    >\n      <Icon color={copied ? '#37d67a' : '#FF8A65'} variant=\"Bulk\" size=\"22\" />\n      <span>{copied ? 'copied!' : name[1]}</span>\n    </button>\n  )\n}\n"
  },
  {
    "path": "website/components/Selector.tsx",
    "content": "import { ArrowDown2 } from 'iconsax-reactjs'\nimport { useRef, useState } from 'react'\nimport { useOnClickOutside, useWindowSize } from '../hooks'\nimport { VariantType } from '../store/IconContext'\n\ntype OptionValue = VariantType | number\n\ntype OptionType<T extends OptionValue> = T\n\ninterface Props<T extends OptionValue> {\n  options: OptionType<T>[]\n  label: string\n  value: T\n  onChange: (value: T) => void\n}\n\nexport const Selector = <T extends OptionValue>({\n  options,\n  label,\n  value,\n  onChange,\n}: Props<T>) => {\n  const { width } = useWindowSize()\n  const [isOpen, setIsOpen] = useState(false)\n  const ref = useRef(null)\n\n  useOnClickOutside(ref, () => setIsOpen(false))\n\n  const handleChange = (op: T) => {\n    setIsOpen(false)\n    onChange(op)\n  }\n  return (\n    <div ref={ref} className=\"relative\">\n      <div\n        onClick={() => setIsOpen((prv) => !prv)}\n        className=\"h-10 flex gap-4 bg-card justify-center items-center pl-3 pr-2 rounded-xl cursor-pointer\"\n      >\n        <span>{width < 600 ? value : `${label}: ${value}`}</span>\n        <ArrowDown2\n          className={`transition-transform transform ${\n            isOpen ? 'rotate-180' : ''\n          }`}\n          size={14}\n          color=\"white\"\n        />\n      </div>\n      {isOpen && (\n        <div className=\"absolute w-full flex flex-col top-12 z-30 left-2/4 transform -translate-x-1/2  m-auto bg-bg border-2 border-primary rounded-2xl\">\n          {options.map((op) => (\n            <span\n              key={op}\n              onClick={() => handleChange(op)}\n              className=\"text-center cursor-pointer py-2 px-4\"\n            >\n              {op}\n            </span>\n          ))}\n        </div>\n      )}\n    </div>\n  )\n}\n"
  },
  {
    "path": "website/components/index.ts",
    "content": "export { Header } from './Header'\nexport { Selector } from './Selector'\nexport { IconItem } from './IconItem'\nexport { IconCustomizer } from './IconCustomizer'\nexport { IconList } from './IconList'\nexport { RainbowButton } from './RainbowButton'\nexport { IconColor } from './IconColor'\nexport { IconVariant } from './IconVariant'\nexport { IconSize } from './IconSize'\nexport { IconSearch } from './IconSearch'\nexport { SelectedIcon } from './SelectedIcon'\n"
  },
  {
    "path": "website/hooks/index.ts",
    "content": "export { useDebounce } from './useDebounce'\nexport { useOnClickOutside } from './useOnClickOutside'\nexport { useWindowSize } from './useWindowSize'\n"
  },
  {
    "path": "website/hooks/useDebounce.ts",
    "content": "import { DependencyList, useEffect } from 'react';\nimport useTimeoutFn from './useTimeoutFn';\n\nexport type UseDebounceReturn = [() => boolean | null, () => void];\n\nexport function useDebounce(\n  fn: Function,\n  ms: number = 0,\n  deps: DependencyList = []\n): UseDebounceReturn {\n  const [isReady, cancel, reset] = useTimeoutFn(fn, ms);\n\n  useEffect(reset, deps);\n\n  return [isReady, cancel];\n}\n"
  },
  {
    "path": "website/hooks/useOnClickOutside.ts",
    "content": "import { RefObject, useEffect } from 'react'\n\ntype AnyEvent = MouseEvent | TouchEvent\n\nexport function useOnClickOutside<T extends HTMLElement = HTMLElement>(\n  ref: RefObject<T>,\n  handler: (event: AnyEvent) => void\n): void {\n  useEffect(() => {\n    const listener = (event: AnyEvent) => {\n      const el = ref?.current\n\n      // Do nothing if clicking ref's element or descendent elements\n      if (!el || el.contains(event.target as Node)) {\n        return\n      }\n\n      handler(event)\n    }\n\n    document.addEventListener(`mousedown`, listener)\n    document.addEventListener(`touchstart`, listener)\n\n    return () => {\n      document.removeEventListener(`mousedown`, listener)\n      document.removeEventListener(`touchstart`, listener)\n    }\n\n    // Reload only if ref or handler changes\n  }, [ref, handler])\n}\n"
  },
  {
    "path": "website/hooks/useTimeoutFn.ts",
    "content": "import { useCallback, useEffect, useRef } from 'react';\n\nexport type UseTimeoutFnReturn = [() => boolean | null, () => void, () => void];\n\nexport default function useTimeoutFn(fn: Function, ms: number = 0): UseTimeoutFnReturn {\n  const ready = useRef<boolean | null>(false);\n  const timeout = useRef<ReturnType<typeof setTimeout>>();\n  const callback = useRef(fn);\n\n  const isReady = useCallback(() => ready.current, []);\n\n  const set = useCallback(() => {\n    ready.current = false;\n    timeout.current && clearTimeout(timeout.current);\n\n    timeout.current = setTimeout(() => {\n      ready.current = true;\n      callback.current();\n    }, ms);\n  }, [ms]);\n\n  const clear = useCallback(() => {\n    ready.current = null;\n    timeout.current && clearTimeout(timeout.current);\n  }, []);\n\n  // update ref when function changes\n  useEffect(() => {\n    callback.current = fn;\n  }, [fn]);\n\n  // set on mount, clear on unmount\n  useEffect(() => {\n    set();\n\n    return clear;\n  }, [ms]);\n\n  return [isReady, clear, set];\n}\n"
  },
  {
    "path": "website/hooks/useWindowSize.ts",
    "content": "import { useEffect, useState } from 'react'\n\ninterface WindowSize {\n  width: number\n  height: number\n}\n\nexport const useWindowSize = (): WindowSize => {\n  const [windowSize, setWindowSize] = useState<WindowSize>({\n    width: 0,\n    height: 0,\n  })\n\n  useEffect(() => {\n    const handler = () => {\n      setWindowSize({\n        width: window.innerWidth,\n        height: window.innerHeight,\n      })\n    }\n\n    // Set size at the first client-side load\n    handler()\n\n    window.addEventListener('resize', handler)\n\n    // Remove event listener on cleanup\n    return () => {\n      window.removeEventListener('resize', handler)\n    }\n  }, [])\n\n  return windowSize\n}\n"
  },
  {
    "path": "website/lib/icons.ts",
    "content": "import * as Icons from 'iconsax-reactjs'\nimport { Icon } from 'iconsax-reactjs'\n\ntype iconType = keyof typeof Icons\n\nexport interface IIconsArray {\n  name: string\n  Icon: Icon\n}\nconst iconsArray: IIconsArray[] = []\nfor (const [name, Icon] of Object.entries(Icons)) {\n  iconsArray.push({ name, Icon })\n}\n\nexport default iconsArray\n"
  },
  {
    "path": "website/next-env.d.ts",
    "content": "/// <reference types=\"next\" />\n/// <reference types=\"next/types/global\" />\n/// <reference types=\"next/image-types/global\" />\n\n// NOTE: This file should not be edited\n// see https://nextjs.org/docs/basic-features/typescript for more information.\n"
  },
  {
    "path": "website/next.config.js",
    "content": "/** @type {import('next').NextConfig} */\nmodule.exports = {\n  reactStrictMode: true,\n  webpack: (config) => {\n    config.module.rules.push({\n      test: /\\.svg$/,\n      issuer: {\n        and: [/\\.(js|ts)x?$/],\n      },\n\n      use: ['@svgr/webpack'],\n    })\n    return config\n  },\n}\n"
  },
  {
    "path": "website/package.json",
    "content": "{\n  \"name\": \"website\",\n  \"version\": \"0.1.0\",\n  \"private\": true,\n  \"scripts\": {\n    \"dev\": \"next dev\",\n    \"build\": \"next build\",\n    \"start\": \"next start\",\n    \"export\": \"next export\",\n    \"lint\": \"next lint\"\n  },\n  \"dependencies\": {\n    \"canvg\": \"^3.0.9\",\n    \"copy-to-clipboard\": \"^3.3.1\",\n    \"file-saver\": \"^2.0.5\",\n    \"gsap\": \"^3.8.0\",\n    \"iconsax-reactjs\": \"^0.0.8\",\n    \"next\": \"11.1.2\",\n    \"react\": \"17.0.2\",\n    \"react-color\": \"^2.19.3\",\n    \"react-dom\": \"17.0.2\",\n    \"react-virtualized\": \"^9.22.3\",\n    \"zustand\": \"^3.5.14\"\n  },\n  \"devDependencies\": {\n    \"@svgr/webpack\": \"^5.5.0\",\n    \"@types/file-saver\": \"^2.0.3\",\n    \"@types/react\": \"17.0.24\",\n    \"@types/react-color\": \"^3.0.5\",\n    \"@types/react-dom\": \"^17.0.9\",\n    \"@types/react-virtualized\": \"^9.21.14\",\n    \"@types/react-window\": \"^1.8.5\",\n    \"autoprefixer\": \"^10.3.5\",\n    \"eslint\": \"7.32.0\",\n    \"eslint-config-next\": \"11.1.2\",\n    \"postcss\": \"^8.3.7\",\n    \"tailwindcss\": \"^2.2.15\",\n    \"typescript\": \"4.4.3\"\n  }\n}\n"
  },
  {
    "path": "website/pages/_app.tsx",
    "content": "import type { AppProps } from 'next/app'\nimport '../styles/globals.css'\nimport 'tailwindcss/tailwind.css'\n\nfunction MyApp({ Component, pageProps }: AppProps) {\n  return <Component {...pageProps} />\n}\nexport default MyApp\n"
  },
  {
    "path": "website/pages/_document.tsx",
    "content": "import React from 'react'\nimport { Html, Head, Main, NextScript } from 'next/document'\n\nconst _document = () => {\n  return (\n    <Html>\n      <Head />\n      <body>\n        <Main />\n        <div id=\"portal\" />\n        <NextScript />\n      </body>\n    </Html>\n  )\n}\n\nexport default _document\n"
  },
  {
    "path": "website/pages/api/hello.ts",
    "content": "// Next.js API route support: https://nextjs.org/docs/api-routes/introduction\nimport type { NextApiRequest, NextApiResponse } from 'next'\n\ntype Data = {\n  name: string\n}\n\nexport default function handler(\n  req: NextApiRequest,\n  res: NextApiResponse<Data>\n) {\n  res.status(200).json({ name: 'John Doe' })\n}\n"
  },
  {
    "path": "website/pages/index.tsx",
    "content": "import type { NextPage } from 'next'\nimport Head from 'next/head'\nimport { Header } from '../components'\nimport { IconContainer } from '../Containers/IconContainer'\n\nconst Home: NextPage = () => {\n  return (\n    <div className=\"font-sans text-gray-50\">\n      <Head>\n        <title>Iconsax React</title>\n        <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n        <meta name=\"theme-color\" content=\"#0F0F0F\" />\n\n        <meta\n          name=\"description\"\n          content=\"1000 pixel perfect icons in 6 different styles for React and React Native\"\n        />\n\n        <link\n          rel=\"apple-touch-icon\"\n          sizes=\"120x120\"\n          href=\"/apple-touch-icon.png\"\n        />\n        <link\n          rel=\"icon\"\n          type=\"image/png\"\n          sizes=\"32x32\"\n          href=\"/favicon-32x32.png\"\n        />\n        <link\n          rel=\"icon\"\n          type=\"image/png\"\n          sizes=\"16x16\"\n          href=\"/favicon-16x16.png\"\n        />\n        <link rel=\"manifest\" href=\"/site.webmanifest\" />\n        <link rel=\"mask-icon\" href=\"/safari-pinned-tab.svg\" color=\"#5bbad5\" />\n        <meta name=\"msapplication-TileColor\" content=\"#da532c\" />\n        <meta name=\"theme-color\" content=\"#ffffff\"></meta>\n\n        <meta property=\"og:site_name\" content=\"Iconsax React\" />\n        <meta property=\"og:type\" content=\"website\" />\n        <meta property=\"og:title\" content=\"Iconsax React\" />\n        <meta property=\"og:locale\" content=\"en\" />\n        <meta\n          property=\"og:url\"\n          content=\"https://rendinjast.github.io/iconsax-react\"\n        />\n      </Head>\n      <Header />\n      <IconContainer />\n    </div>\n  )\n}\n\nexport default Home\n"
  },
  {
    "path": "website/postcss.config.js",
    "content": "module.exports = {\n  plugins: {\n    tailwindcss: {},\n    autoprefixer: {},\n  },\n}\n"
  },
  {
    "path": "website/public/browserconfig.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<browserconfig>\n    <msapplication>\n        <tile>\n            <square150x150logo src=\"/mstile-150x150.png\"/>\n            <TileColor>#da532c</TileColor>\n        </tile>\n    </msapplication>\n</browserconfig>\n"
  },
  {
    "path": "website/public/site.webmanifest",
    "content": "{\n    \"name\": \"\",\n    \"short_name\": \"\",\n    \"icons\": [\n        {\n            \"src\": \"/android-chrome-96x96.png\",\n            \"sizes\": \"96x96\",\n            \"type\": \"image/png\"\n        }\n    ],\n    \"theme_color\": \"#ffffff\",\n    \"background_color\": \"#ffffff\",\n    \"display\": \"standalone\"\n}\n"
  },
  {
    "path": "website/store/IconContext.tsx",
    "content": "import { createContext, useContext, Dispatch, FC, useReducer } from 'react'\nimport IconReducer, { IconAction } from './iconReducer'\n\nexport const Variants = [\n  'Linear',\n  'Outline',\n  'Bold',\n  'Bulk',\n  'Broken',\n  'TwoTone',\n] as const\n\nexport type VariantType = typeof Variants[number] | undefined\n\nexport interface IconState {\n  search: string\n  size: number\n  color: string\n  variant: VariantType\n}\n\nconst initialValue: IconState = {\n  search: '',\n  size: 32,\n  color: '#FF8A65',\n  variant: 'Linear',\n}\nconst Context = createContext<{\n  state: IconState\n  dispatch: Dispatch<IconAction>\n}>({\n  state: initialValue,\n  dispatch: () => undefined,\n})\nexport const useIconContext = () => useContext(Context)\n\nconst IconContext: FC = ({ children }) => {\n  const [state, dispatch] = useReducer(IconReducer, initialValue)\n\n  return (\n    <Context.Provider value={{ state, dispatch }}>{children}</Context.Provider>\n  )\n}\n\nexport default IconContext\n"
  },
  {
    "path": "website/store/iconReducer.ts",
    "content": "import { IconState, VariantType } from './IconContext'\n\nexport type IconAction =\n  | { type: 'SEARCH'; payload: string }\n  | { type: 'CHANGE_VARIANT'; payload: VariantType }\n  | { type: 'CHANGE_SIZE'; payload: number }\n  | { type: 'CHANGE_COLOR'; payload: string }\n\nconst IconReducer = (state: IconState, action: IconAction) => {\n  switch (action.type) {\n    case 'SEARCH':\n      return { ...state, search: action.payload }\n    case 'CHANGE_VARIANT':\n      return { ...state, variant: action.payload }\n    case 'CHANGE_COLOR':\n      return { ...state, color: action.payload }\n    case 'CHANGE_SIZE':\n      return { ...state, size: action.payload }\n\n    default:\n      return state\n  }\n}\n\nexport default IconReducer\n"
  },
  {
    "path": "website/store/index.ts",
    "content": "export { default as IconContext, useIconContext, Variants } from './IconContext'\nexport { searchStore } from './searchState'\nexport { selectedStore } from './selectedStore'\n"
  },
  {
    "path": "website/store/searchState.ts",
    "content": "import create from 'zustand'\n\ninterface Search {\n  query: string\n  setQuery: (query: string) => void\n}\n\nexport const searchStore = create<Search>((set) => ({\n  query: '',\n  setQuery: (query) => set({ query }),\n}))\n"
  },
  {
    "path": "website/store/selectedStore.ts",
    "content": "import { IIconsArray } from '../lib/icons'\nimport create from 'zustand'\n\ninterface SelectedState {\n  selected: IIconsArray | null\n  showIcon: (Icon: IIconsArray) => void\n  hideIcon: () => void\n}\n\nexport const selectedStore = create<SelectedState>((set) => ({\n  selected: null,\n  showIcon: (Icon) => set({ selected: Icon }),\n  hideIcon: () => set({ selected: null }),\n}))\n"
  },
  {
    "path": "website/styles/globals.css",
    "content": "@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@100;200;300;400;500;600;700;800;900&display=swap');\n\n@tailwind base;\n@tailwind components;\n@tailwind utilities;\n\n*,\n*:active,\n*:focus {\n  outline: none;\n  box-sizing: border-box;\n}\nhtml,\nbody {\n  background-color: #0f0f0f;\n}\n.btn .rainbow {\n  /* padding: 2px; */\n  filter: blur(6px);\n  background: conic-gradient(\n    #ff2e4e,\n    #d960ff,\n    #9264ff,\n    #00b3f0,\n    #06cd69,\n    #ffcd00,\n    #ff5c22,\n    #ff2e4e\n  );\n}\n.btn .child {\n  text-shadow: 0px 0px 9px rgb(0 0 0 / 62%);\n}\n\n.toolbar {\n  position: -webkit-sticky;\n  position: sticky;\n  top: -1px;\n  z-index: 1;\n}\n"
  },
  {
    "path": "website/tailwind.config.js",
    "content": "module.exports = {\n  mode: 'jit',\n  purge: ['./pages/**/*.{js,ts,jsx,tsx}', './components/**/*.{js,ts,jsx,tsx}'],\n  theme: {\n    fontFamily: {\n      sans: ['Poppins', 'sans-serif'],\n    },\n    extend: {\n      screens: {\n        xs: '365px',\n      },\n      zIndex: {\n        '-1': '-1',\n      },\n      colors: {\n        // primary: 'rgba(139, 92, 246)',\n        primary: '#FF8A65',\n        bg: '#0F0F0F',\n        card: '#151515',\n        border: '#1d1d1d',\n      },\n      boxShadow: {\n        primary: '0 10px 30px rgb(0 0 0 / 8%)',\n      },\n    },\n  },\n  variants: {\n    extend: {},\n  },\n  plugins: [],\n}\n"
  },
  {
    "path": "website/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"target\": \"es5\",\n    \"lib\": [\"dom\", \"dom.iterable\", \"esnext\"],\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"strict\": true,\n    \"forceConsistentCasingInFileNames\": true,\n    \"noEmit\": true,\n    \"esModuleInterop\": true,\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"resolveJsonModule\": true,\n    \"isolatedModules\": true,\n    \"jsx\": \"preserve\"\n  },\n  \"include\": [\"next-env.d.ts\", \"**/*.ts\", \"**/*.tsx\"],\n  \"exclude\": [\"node_modules\"]\n}\n"
  }
]