diff --git a/docs/.gitignore b/docs/.gitignore index a547bf36..bc18f31e 100644 --- a/docs/.gitignore +++ b/docs/.gitignore @@ -22,3 +22,6 @@ dist-ssr *.njsproj *.sln *.sw? + +# Repo directories +/stats diff --git a/docs/package-lock.json b/docs/package-lock.json index a7b88fa5..91744cf2 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -19,10 +19,10 @@ }, "devDependencies": { "@trivago/prettier-plugin-sort-imports": "4.3.0", - "@types/react": "18.2.56", + "@types/react": "18.2.57", "@types/react-dom": "18.2.19", - "@typescript-eslint/eslint-plugin": "7.0.1", - "@typescript-eslint/parser": "7.0.1", + "@typescript-eslint/eslint-plugin": "7.0.2", + "@typescript-eslint/parser": "7.0.2", "@vitejs/plugin-react-swc": "3.6.0", "eslint": "8.56.0", "eslint-import-resolver-typescript": "3.6.1", @@ -42,16 +42,16 @@ "version": "1.0.0-alpha.6", "license": "AGPL-3.0-or-later", "dependencies": { - "html-react-parser": "5.1.6" + "html-react-parser": "5.1.7" }, "devDependencies": { - "@types/react": "18.2.55", + "@types/react": "18.2.57", "nodemon": "3.0.3", "npm-run-all": "4.1.5", "picocolors": "1.0.0", "react": "18.2.0", "react-dom": "18.2.0", - "svg-to-ts": "11.0.1", + "svg-to-ts": "12.0.0", "svgo": "3.2.0", "typescript": "5.3.3" }, @@ -1702,9 +1702,9 @@ "integrity": "sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==" }, "node_modules/@types/react": { - "version": "18.2.56", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.56.tgz", - "integrity": "sha512-NpwHDMkS/EFZF2dONFQHgkPRwhvgq/OAvIaGQzxGSBmaeR++kTg6njr15Vatz0/2VcCEwJQFi6Jf4Q0qBu0rLA==", + "version": "18.2.57", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.57.tgz", + "integrity": "sha512-ZvQsktJgSYrQiMirAN60y4O/LRevIV8hUzSOSNB6gfR3/o3wCBFQx3sPwIYtuDMeiVgsSS3UzCV26tEzgnfvQw==", "dependencies": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -1740,16 +1740,16 @@ "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.0.1.tgz", - "integrity": "sha512-OLvgeBv3vXlnnJGIAgCLYKjgMEU+wBGj07MQ/nxAaON+3mLzX7mJbhRYrVGiVvFiXtwFlkcBa/TtmglHy0UbzQ==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.0.2.tgz", + "integrity": "sha512-/XtVZJtbaphtdrWjr+CJclaCVGPtOdBpFEnvtNf/jRV0IiEemRrL0qABex/nEt8isYcnFacm3nPHYQwL+Wb7qg==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "7.0.1", - "@typescript-eslint/type-utils": "7.0.1", - "@typescript-eslint/utils": "7.0.1", - "@typescript-eslint/visitor-keys": "7.0.1", + "@typescript-eslint/scope-manager": "7.0.2", + "@typescript-eslint/type-utils": "7.0.2", + "@typescript-eslint/utils": "7.0.2", + "@typescript-eslint/visitor-keys": "7.0.2", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.2.4", @@ -1775,15 +1775,15 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.0.1.tgz", - "integrity": "sha512-8GcRRZNzaHxKzBPU3tKtFNing571/GwPBeCvmAUw0yBtfE2XVd0zFKJIMSWkHJcPQi0ekxjIts6L/rrZq5cxGQ==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.0.2.tgz", + "integrity": "sha512-GdwfDglCxSmU+QTS9vhz2Sop46ebNCXpPPvsByK7hu0rFGRHL+AusKQJ7SoN+LbLh6APFpQwHKmDSwN35Z700Q==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "7.0.1", - "@typescript-eslint/types": "7.0.1", - "@typescript-eslint/typescript-estree": "7.0.1", - "@typescript-eslint/visitor-keys": "7.0.1", + "@typescript-eslint/scope-manager": "7.0.2", + "@typescript-eslint/types": "7.0.2", + "@typescript-eslint/typescript-estree": "7.0.2", + "@typescript-eslint/visitor-keys": "7.0.2", "debug": "^4.3.4" }, "engines": { @@ -1803,13 +1803,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.0.1.tgz", - "integrity": "sha512-v7/T7As10g3bcWOOPAcbnMDuvctHzCFYCG/8R4bK4iYzdFqsZTbXGln0cZNVcwQcwewsYU2BJLay8j0/4zOk4w==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.0.2.tgz", + "integrity": "sha512-l6sa2jF3h+qgN2qUMjVR3uCNGjWw4ahGfzIYsCtFrQJCjhbrDPdiihYT8FnnqFwsWX+20hK592yX9I2rxKTP4g==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.0.1", - "@typescript-eslint/visitor-keys": "7.0.1" + "@typescript-eslint/types": "7.0.2", + "@typescript-eslint/visitor-keys": "7.0.2" }, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -1820,13 +1820,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.0.1.tgz", - "integrity": "sha512-YtT9UcstTG5Yqy4xtLiClm1ZpM/pWVGFnkAa90UfdkkZsR1eP2mR/1jbHeYp8Ay1l1JHPyGvoUYR6o3On5Nhmw==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.0.2.tgz", + "integrity": "sha512-IKKDcFsKAYlk8Rs4wiFfEwJTQlHcdn8CLwLaxwd6zb8HNiMcQIFX9sWax2k4Cjj7l7mGS5N1zl7RCHOVwHq2VQ==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "7.0.1", - "@typescript-eslint/utils": "7.0.1", + "@typescript-eslint/typescript-estree": "7.0.2", + "@typescript-eslint/utils": "7.0.2", "debug": "^4.3.4", "ts-api-utils": "^1.0.1" }, @@ -1847,9 +1847,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.0.1.tgz", - "integrity": "sha512-uJDfmirz4FHib6ENju/7cz9SdMSkeVvJDK3VcMFvf/hAShg8C74FW+06MaQPODHfDJp/z/zHfgawIJRjlu0RLg==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.0.2.tgz", + "integrity": "sha512-ZzcCQHj4JaXFjdOql6adYV4B/oFOFjPOC9XYwCaZFRvqN8Llfvv4gSxrkQkd2u4Ci62i2c6W6gkDwQJDaRc4nA==", "dev": true, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -1860,13 +1860,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.0.1.tgz", - "integrity": "sha512-SO9wHb6ph0/FN5OJxH4MiPscGah5wjOd0RRpaLvuBv9g8565Fgu0uMySFEPqwPHiQU90yzJ2FjRYKGrAhS1xig==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.0.2.tgz", + "integrity": "sha512-3AMc8khTcELFWcKcPc0xiLviEvvfzATpdPj/DXuOGIdQIIFybf4DMT1vKRbuAEOFMwhWt7NFLXRkbjsvKZQyvw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.0.1", - "@typescript-eslint/visitor-keys": "7.0.1", + "@typescript-eslint/types": "7.0.2", + "@typescript-eslint/visitor-keys": "7.0.2", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -1912,17 +1912,17 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.0.1.tgz", - "integrity": "sha512-oe4his30JgPbnv+9Vef1h48jm0S6ft4mNwi9wj7bX10joGn07QRfqIqFHoMiajrtoU88cIhXf8ahwgrcbNLgPA==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.0.2.tgz", + "integrity": "sha512-PZPIONBIB/X684bhT1XlrkjNZJIEevwkKDsdwfiu1WeqBxYEEdIgVDgm8/bbKHVu+6YOpeRqcfImTdImx/4Bsw==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "7.0.1", - "@typescript-eslint/types": "7.0.1", - "@typescript-eslint/typescript-estree": "7.0.1", + "@typescript-eslint/scope-manager": "7.0.2", + "@typescript-eslint/types": "7.0.2", + "@typescript-eslint/typescript-estree": "7.0.2", "semver": "^7.5.4" }, "engines": { @@ -1937,12 +1937,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.0.1.tgz", - "integrity": "sha512-hwAgrOyk++RTXrP4KzCg7zB2U0xt7RUU0ZdMSCsqF3eKUwkdXUMyTb0qdCuji7VIbcpG62kKTU9M1J1c9UpFBw==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.0.2.tgz", + "integrity": "sha512-8Y+YiBmqPighbm5xA2k4wKTxRzx9EkBu7Rlw+WHqMvRJ3RPz/BMBO9b2ru0LUNmXg120PHUXD5+SWFy2R8DqlQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.0.1", + "@typescript-eslint/types": "7.0.2", "eslint-visitor-keys": "^3.4.1" }, "engines": { diff --git a/docs/package.json b/docs/package.json index 089197cc..dc7a0703 100644 --- a/docs/package.json +++ b/docs/package.json @@ -24,10 +24,10 @@ }, "devDependencies": { "@trivago/prettier-plugin-sort-imports": "4.3.0", - "@types/react": "18.2.56", + "@types/react": "18.2.57", "@types/react-dom": "18.2.19", - "@typescript-eslint/eslint-plugin": "7.0.1", - "@typescript-eslint/parser": "7.0.1", + "@typescript-eslint/eslint-plugin": "7.0.2", + "@typescript-eslint/parser": "7.0.2", "@vitejs/plugin-react-swc": "3.6.0", "eslint": "8.56.0", "eslint-import-resolver-typescript": "3.6.1", diff --git a/docs/src/data/icons.ts b/docs/src/data/icons.ts index daa86ed8..68931239 100644 --- a/docs/src/data/icons.ts +++ b/docs/src/data/icons.ts @@ -1,3647 +1,3192 @@ -import { - ai0, - ai1, - ai2, - ai3, - ai4, - ai5, - ai6, - ai7, - ai8, - ai9, - aiA, - aiAddressBook, - aiAGum, - aiAlarmClock, - aiAlignCenter, - aiAlignJustify, - aiAlignLeft, - aiAlignRight, - aiAmicons, - aiAngleDown, - aiAngleLeft, - aiAngleRight, - aiAnglesY, - aiAngleUp, - aiAppleAppStore, - aiArrowDown, - aiArrowDownFromCloud, - aiArrowDownShortWide, - aiArrowDownToLine, - aiArrowDownWideShort, - aiArrowLeft, - aiArrowLeftFromBracket, - aiArrowLeftToBracket, - aiArrowLeftToLine, - aiArrowPointer, - aiArrowRight, - aiArrowRightFromBracket, - aiArrowRightFromFile, - aiArrowRightFromSmartphone, - aiArrowRightProhibited, - aiArrowRightToBracket, - aiArrowRightToFile, - aiArrowRightToLine, - aiArrowRotateRight, - aiArrowsDownLeftRightUpCenter, - aiArrowsRotateRight, - aiArrowUp, - aiArrowUpRightFromSquare, - aiArrowUpShortWide, - aiArrowUpToCloud, - aiArrowUpToLine, - aiArrowUpWideShort, - aiAsterisk, - aiAt, - aiAzure, - aiB, - aiBackward, - aiBars, - aiBarsStaggered, - aiBatteryCharging, - aiBatteryEmpty, - aiBatteryExclamation, - aiBatteryFull, - aiBatteryHalf, - aiBatteryLow, - aiBatteryQuarter, - aiBatterySlash, - aiBatteryThreeQuarter, - aiBeer, - aiBel, - aiBicycle, - aiBlf, - aiBold, - aiBolt, - aiBook, - aiBookOpen, - aiBox, - aiBoxOpenFull, - aiBracketsCurly, - aiBroom, - aiBug, - aiBuilding, - aiC, - aiCalculator, - aiCalendar, - aiCalendarClock, - aiCalendarDay, - aiCalendarRange, - aiCalendarRangeClock, - aiCalendarStars, - aiCalendarWeek, - aiCamera, - aiCampfire, - aiCar, - aiCarSide, - aiChain, - aiChainSlash, - aiChalkboardPerson, - aiChangeWindows, - aiChartPie, - aiCheck, - aiChevronDown, - aiChevronLeft, - aiChevronRight, - aiChevronUp, - aiChrome, - aiCircle, - aiCircleCheck, - aiCircleDashed, - aiCircleExclamation, - aiCircleHalf, - aiCircleHalfInner, - aiCircleInfo, - aiCirclePerson, - aiCirclePlus, - aiCircleQuestion, - aiCircleXmark, - aiCity, - aiClipboard, - aiClock, - aiClockRotateLeft, - aiCloud, - aiCloudDrizzle, - aiCloudFog, - aiCloudHail, - aiCloudLightning, - aiCloudMoon, - aiCloudRain, - aiCloudSnow, - aiCloudSun, - aiCode, - aiCodeblock, - aiCodeBranch, - aiCodeBranchUp, - aiCoin, - aiCommand, - aiCompactDisc, - aiCompare, - aiCompass, - aiCompassDrafting, - aiCompress, - aiComputerMouse, - aiComputerMouseScrollWheel, - aiCopy, - aiCreditCard, - aiCrop, - aiCursor, - aiD, - aiDevices, - aiDice, - aiDiceFive, - aiDiceFour, - aiDiceOne, - aiDiceSix, - aiDiceThree, - aiDiceTwo, - aiDisplay, - aiDisplayCam, - aiDoor, - aiDroplet, - aiE, - aiEarth, - aiEclipse, - aiEdge, - aiEllipsisH, - aiEllipsisV, - aiEnvelope, - aiEnvelopeOpen, - aiEthernet, - aiEuro, - aiExpand, - aiExport, - aiEye, - aiEyeSlash, - aiF, - aiFacebook, - aiFacebookMessenger, - aiFastBackward, - aiFastForward, - aiFax, - aiFile, - aiFiles, - aiFilesList, - aiFilmstrip, - aiFilter, - aiFilterPlus, - aiFilterXmark, - aiFingerprint, - aiFirefox, - aiFlag, - aiFlagCheckered, - aiFlask, - aiFloppyDisk, - aiFolder, - aiFolderImage, - aiFolderMin, - aiFolderOpen, - aiFolderPlus, - aiForward, - aiFrame, - aiG, - aiGamepad, - aiGauge, - aiGear, - aiGift, - aiGithub, - aiGlobe, - aiGooglePlay, - aiGrid, - aiGripLines, - aiH, - aiHeading1, - aiHeading2, - aiHeading3, - aiHeading4, - aiHeading5, - aiHeading6, - aiHeadset, - aiHeart, - aiHeartCrack, - aiHeartHalf, - aiHorizontalLine, - aiHourglassEmpty, - aiHourglassEnd, - aiHourglassHalf, - aiHourglassStart, - aiHouse, - aiI, - aiIcons, - aiIdCard, - aiImage, - aiInstagram, - aiItalic, - aiJ, - aiJesterHat, - aiK, - aiKey, - aiKeyboard, - aiKeyboardBrightnessHigh, - aiKeyboardBrightnessLow, - aiKite, - aiL, - aiLaptop, - aiLaravel, - aiLayers, - aiLayersPlus, - aiLifeRing, - aiLightbulb, - aiLightbulbOn, - aiLine, - aiLinkedin, - aiList, - aiListChecks, - aiListChecksXmark, - aiListClock, - aiListOrdered, - aiListOrderedClock, - aiLoader, - aiLocationPin, - aiLocationPinDot, - aiLocationPinSlash, - aiLocationPinsRoute, - aiLock, - aiLockOpen, - aiM, - aiMagnifyingGlass, - aiMegaphone, - aiMessage, - aiMessagePen, - aiMessageSmile, - aiMessageText, - aiMicrochip, - aiMicrophone, - aiMin, - aiMoon, - aiMoonCloud, - aiMusic, - aiMusicPause, - aiN, - aiNetwork, - aiNext, - aiNotes, - aiNumpad, - aiO, - aiOption, - aiP, - aiPager, - aiPaper, - aiPaperPlane, - aiParachuteBox, - aiParagraph, - aiPatreon, - aiPause, - aiPen, - aiPeople, - aiPeopleCircle, - aiPeopleXmark, - aiPerson, - aiPersonClock, - aiPersonGear, - aiPersonHeadset, - aiPersonList, - aiPersonLock, - aiPersonPlus, - aiPersonXmark, - aiPhone, - aiPhoneArrowDownLeft, - aiPhoneArrowDownLeftProhibited, - aiPhoneArrowUpRight, - aiPhoneArrowUpRightProhibited, - aiPhoneClock, - aiPhoneGear, - aiPhoneList, - aiPhoneOffice, - aiPhoneVolume, - aiPlane, - aiPlanetRinged, - aiPlateUtensils, - aiPlay, - aiPlayPause, - aiPlus, - aiPower, - aiPrevious, - aiPrinter, - aiProhibited, - aiPuzzlePiece, - aiQ, - aiQuote, - aiR, - aiReact, - aiReceipt, - aiRectangleP, - aiRedo, - aiRepeat, - aiRepeatOnce, - aiRoad, - aiRocket, - aiS, - aiSafari, - aiScouting, - aiServer, - aiShare, - aiShareNodes, - aiShield, - aiShieldKeyhole, - aiShieldPlus, - aiShieldXmark, - aiShoePrints, - aiShoppingCart, - aiShuffle, - aiSidebarLeft, - aiSidebarRight, - aiSignature, - aiSimCard, - aiSippy, - aiSliders, - aiSmartphone, - aiSmartphoneArrowRight, - aiSmartphoneHinge, - aiSnowflake, - aiSpeakerGrill, - aiSpinner, - aiSpinnerThird, - aiSpy, - aiSquare, - aiSquareDashed, - aiSquareGum, - aiStar, - aiStarHalf, - aiStarscout, - aiStop, - aiStopwatch, - aiStore, - aiStrikethrough, - aiStudio384, - aiSubscript, - aiSun, - aiSunCloud, - aiSunrise, - aiSunset, - aiSuperscript, - aiSwatchbook, - aiT, - aiTable, - aiTableCellMerge, - aiTableClock, - aiTableColumnInsertLeft, - aiTableColumnInsertRight, - aiTableColumnMin, - aiTableHeaderCell, - aiTableHeaderColumn, - aiTableHeaderRow, - aiTableMin, - aiTableRowInsertBottom, - aiTableRowInsertTop, - aiTableRowMin, - aiTag, - aiTagGear, - aiTagPlus, - aiTent, - aiTerminal, - aiThermometerEmpty, - aiThermometerFull, - aiThermometerHalf, - aiThreads, - aiThumbstack, - aiThumbstackSlash, - aiTicket, - aiTiktok, - aiToast, - aiToggleOff, - aiToggleOn, - aiTowerBroadcast, - aiTrainTrack, - aiTranslate, - aiTrashCan, - aiTree, - aiTrekkingBackpack, - aiTriangle, - aiTriangleDashed, - aiTriangleExclamation, - aiTrophy, - aiTruckPickup, - aiTruckTow, - aiTwitter, - aiU, - aiUmbrella, - aiUnderline, - aiUndo, - aiUniversalAccess, - aiV, - aiValkyrieSword, - aiVideo, - aiVirtualReality, - aiVisualStudio, - aiVoicemail, - aiVolume0, - aiVolume1, - aiVolume2, - aiVolume3, - aiVolumeSlash, - aiW, - aiWallet, - aiWallpaper, - aiWaveform, - aiWebhooks, - aiWebhooksClock, - aiWind, - aiWindow, - aiWindows, - aiX, - aiXbox, - aiXmark, - aiY, - aiZ -} from '@studio384/amaranth'; + +import { ai0,ai1,ai2,ai3,ai4,ai5,ai6,ai7,ai8,ai9,aiAGum,aiA,aiAddressBook,aiAlarmClock,aiAlignCenter,aiAlignJustify,aiAlignLeft,aiAlignRight,aiAmicons,aiAngleDown,aiAngleLeft,aiAngleRight,aiAngleUp,aiAnglesY,aiAppleAppStore,aiArrowDownFromCloud,aiArrowDownShortWide,aiArrowDownToLine,aiArrowDownWideShort,aiArrowDown,aiArrowLeftFromBracket,aiArrowLeftToBracket,aiArrowLeftToLine,aiArrowLeft,aiArrowPointer,aiArrowRightFromBracket,aiArrowRightFromFile,aiArrowRightFromSmartphone,aiArrowRightProhibited,aiArrowRightToBracket,aiArrowRightToFile,aiArrowRightToLine,aiArrowRight,aiArrowRotateRight,aiArrowUpRightFromSquare,aiArrowUpShortWide,aiArrowUpToCloud,aiArrowUpToLine,aiArrowUpWideShort,aiArrowUp,aiArrowsDownLeftRightUpCenter,aiArrowsRotateRight,aiAsterisk,aiAt,aiAzure,aiB,aiBackward,aiBarsStaggered,aiBars,aiBatteryCharging,aiBatteryEmpty,aiBatteryExclamation,aiBatteryFull,aiBatteryHalf,aiBatteryLow,aiBatteryQuarter,aiBatterySlash,aiBatteryThreeQuarter,aiBeer,aiBel,aiBicycle,aiBlf,aiBold,aiBolt,aiBookOpen,aiBook,aiBoxOpenFull,aiBox,aiBracketsCurly,aiBroom,aiBug,aiBuilding,aiC,aiCalculator,aiCalendarClock,aiCalendarDay,aiCalendarRangeClock,aiCalendarRange,aiCalendarStars,aiCalendarWeek,aiCalendar,aiCamera,aiCampfire,aiCarSide,aiCar,aiChainSlash,aiChain,aiChalkboardPerson,aiChangeWindows,aiChartPie,aiCheck,aiChevronDown,aiChevronLeft,aiChevronRight,aiChevronUp,aiChrome,aiCircleCheck,aiCircleDashed,aiCircleExclamation,aiCircleHalfInner,aiCircleHalf,aiCircleInfo,aiCirclePerson,aiCirclePlus,aiCircleQuestion,aiCircleXmark,aiCircle,aiCity,aiClipboard,aiClockRotateLeft,aiClock,aiCloudDrizzle,aiCloudFog,aiCloudHail,aiCloudLightning,aiCloudMoon,aiCloudRain,aiCloudSnow,aiCloudSun,aiCloud,aiCodeBranchUp,aiCodeBranch,aiCode,aiCodeblock,aiCoin,aiCommand,aiCompactDisc,aiCompare,aiCompassDrafting,aiCompass,aiCompress,aiComputerMouseScrollWheel,aiComputerMouse,aiCopy,aiCreditCard,aiCrop,aiCursor,aiD,aiDevices,aiDiceFive,aiDiceFour,aiDiceOne,aiDiceSix,aiDiceThree,aiDiceTwo,aiDice,aiDisplayCam,aiDisplay,aiDoor,aiDroplet,aiE,aiEarth,aiEclipse,aiEdge,aiEllipsisH,aiEllipsisV,aiEnvelopeOpen,aiEnvelope,aiEthernet,aiEuro,aiExpand,aiExport,aiEyeSlash,aiEye,aiF,aiFacebookMessenger,aiFacebook,aiFastBackward,aiFastForward,aiFax,aiFile,aiFilesList,aiFiles,aiFilmstrip,aiFilterPlus,aiFilterXmark,aiFilter,aiFingerprint,aiFirefox,aiFlagCheckered,aiFlag,aiFlask,aiFloppyDisk,aiFolderImage,aiFolderMin,aiFolderOpen,aiFolderPlus,aiFolder,aiForward,aiFrame,aiG,aiGamepad,aiGauge,aiGear,aiGift,aiGithub,aiGlobe,aiGooglePlay,aiGrid,aiGripLines,aiH,aiHeading1,aiHeading2,aiHeading3,aiHeading4,aiHeading5,aiHeading6,aiHeadset,aiHeartCrack,aiHeartHalf,aiHeart,aiHorizontalLine,aiHourglassEmpty,aiHourglassEnd,aiHourglassHalf,aiHourglassStart,aiHouse,aiI,aiIcons,aiIdCard,aiImage,aiInstagram,aiItalic,aiJ,aiJesterHat,aiK,aiKey,aiKeyboardBrightnessHigh,aiKeyboardBrightnessLow,aiKeyboard,aiKite,aiL,aiLaptop,aiLaravel,aiLayersPlus,aiLayers,aiLifeRing,aiLightbulbOn,aiLightbulb,aiLine,aiLinkedin,aiListChecksXmark,aiListChecks,aiListClock,aiListOrderedClock,aiListOrdered,aiList,aiLoader,aiLocationPinDot,aiLocationPinSlash,aiLocationPin,aiLocationPinsRoute,aiLockOpen,aiLock,aiM,aiMagnifyingGlass,aiMegaphone,aiMessagePen,aiMessageSmile,aiMessageText,aiMessage,aiMicrochip,aiMicrophone,aiMin,aiMoonCloud,aiMoon,aiMusicPause,aiMusic,aiN,aiNetwork,aiNext,aiNotes,aiNumpad,aiO,aiOption,aiP,aiPager,aiPaperPlane,aiPaper,aiParachuteBox,aiParagraph,aiPatreon,aiPause,aiPen,aiPeopleCircle,aiPeopleXmark,aiPeople,aiPersonClock,aiPersonGear,aiPersonHeadset,aiPersonList,aiPersonLock,aiPersonPlus,aiPersonXmark,aiPerson,aiPhoneArrowDownLeftProhibited,aiPhoneArrowDownLeft,aiPhoneArrowUpRightProhibited,aiPhoneArrowUpRight,aiPhoneClock,aiPhoneGear,aiPhoneList,aiPhoneOffice,aiPhoneVolume,aiPhone,aiPlane,aiPlanetRinged,aiPlateUtensils,aiPlayPause,aiPlay,aiPlus,aiPower,aiPrevious,aiPrinter,aiProhibited,aiPuzzlePiece,aiQ,aiQuote,aiR,aiReact,aiReceipt,aiRectangleP,aiRedo,aiRepeatOnce,aiRepeat,aiRoad,aiRocket,aiS,aiSafari,aiScouting,aiServer,aiShareNodes,aiShare,aiShieldKeyhole,aiShieldPlus,aiShieldXmark,aiShield,aiShoePrints,aiShoppingCart,aiShuffle,aiSidebarLeft,aiSidebarRight,aiSignature,aiSimCard,aiSippy,aiSliders,aiSmartphoneArrowRight,aiSmartphoneHinge,aiSmartphone,aiSnowflake,aiSpeakerGrill,aiSpinnerThird,aiSpinner,aiSpy,aiSquareDashed,aiSquareGum,aiSquare,aiStarHalf,aiStar,aiStarscout,aiStop,aiStopwatch,aiStore,aiStrikethrough,aiStudio384,aiSubscript,aiSunCloud,aiSun,aiSunrise,aiSunset,aiSuperscript,aiSwatchbook,aiT,aiTableCellMerge,aiTableClock,aiTableColumnInsertLeft,aiTableColumnInsertRight,aiTableColumnMin,aiTableHeaderCell,aiTableHeaderColumn,aiTableHeaderRow,aiTableMin,aiTableRowInsertBottom,aiTableRowInsertTop,aiTableRowMin,aiTable,aiTagGear,aiTagPlus,aiTag,aiTent,aiTerminal,aiThermometerEmpty,aiThermometerFull,aiThermometerHalf,aiThreads,aiThumbstackSlash,aiThumbstack,aiTicket,aiTiktok,aiToast,aiToggleOff,aiToggleOn,aiTowerBroadcast,aiTrainTrack,aiTranslate,aiTrashCan,aiTree,aiTrekkingBackpack,aiTriangleDashed,aiTriangleExclamation,aiTriangle,aiTrophy,aiTruckPickup,aiTruckTow,aiTwitter,aiU,aiUmbrella,aiUnderline,aiUndo,aiUniversalAccess,aiV,aiValkyrieSword,aiVideo,aiVirtualReality,aiVisualStudio,aiVoicemail,aiVolume0,aiVolume1,aiVolume2,aiVolume3,aiVolumeSlash,aiW,aiWallet,aiWallpaper,aiWaveform,aiWebhooksClock,aiWebhooks,aiWind,aiWindow,aiWindows,aiX,aiXbox,aiXmark,aiY,aiZ } from '@studio384/amaranth'; const icons = [ { component: 'ai0', - categories: ['letters-numbers'], - tags: ['null', 'zero', 'nil'], + categories: ["letters-numbers"], + tags: ["null","zero","nil"], slug: '0', icon: ai0 }, { component: 'ai1', - categories: ['letters-numbers'], - tags: ['one'], + categories: ["letters-numbers"], + tags: ["one"], slug: '1', icon: ai1 }, { component: 'ai2', - categories: ['letters-numbers'], - tags: ['two'], + categories: ["letters-numbers"], + tags: ["two"], slug: '2', icon: ai2 }, { component: 'ai3', - categories: ['letters-numbers'], - tags: ['three'], + categories: ["letters-numbers"], + tags: ["three"], slug: '3', icon: ai3 }, { component: 'ai4', - categories: ['letters-numbers'], - tags: ['four'], + categories: ["letters-numbers"], + tags: ["four"], slug: '4', icon: ai4 }, { component: 'ai5', - categories: ['letters-numbers'], - tags: ['five'], + categories: ["letters-numbers"], + tags: ["five"], slug: '5', icon: ai5 }, { component: 'ai6', - categories: ['letters-numbers'], - tags: ['six'], + categories: ["letters-numbers"], + tags: ["six"], slug: '6', icon: ai6 }, { component: 'ai7', - categories: ['letters-numbers'], - tags: ['seven'], + categories: ["letters-numbers"], + tags: ["seven"], slug: '7', icon: ai7 }, { component: 'ai8', - categories: ['letters-numbers'], - tags: ['eight'], + categories: ["letters-numbers"], + tags: ["eight"], slug: '8', icon: ai8 }, { component: 'ai9', - categories: ['letters-numbers'], - tags: ['nine'], + categories: ["letters-numbers"], + tags: ["nine"], slug: '9', icon: ai9 }, { component: 'aiAGum', - categories: ['editor'], + categories: ["editor"], tags: [], slug: 'a-gum', icon: aiAGum }, { component: 'aiA', - categories: ['letters-numbers'], + categories: ["letters-numbers"], tags: [], slug: 'a', icon: aiA }, { component: 'aiAddressBook', - categories: ['business', 'communication', 'people'], + categories: ["business","communication","people"], tags: [], slug: 'address-book', icon: aiAddressBook }, { component: 'aiAlarmClock', - categories: ['alert', 'time'], - tags: ['alerts'], + categories: ["alert","time"], + tags: ["alerts"], slug: 'alarm-clock', icon: aiAlarmClock }, { component: 'aiAlignCenter', - categories: ['editor'], + categories: ["editor"], tags: [], slug: 'align-center', icon: aiAlignCenter }, { component: 'aiAlignJustify', - categories: ['editor'], + categories: ["editor"], tags: [], slug: 'align-justify', icon: aiAlignJustify }, { component: 'aiAlignLeft', - categories: ['editor'], + categories: ["editor"], tags: [], slug: 'align-left', icon: aiAlignLeft }, { component: 'aiAlignRight', - categories: ['editor'], + categories: ["editor"], tags: [], slug: 'align-right', icon: aiAlignRight }, { component: 'aiAmicons', - categories: ['brands'], + categories: ["brands"], tags: [], slug: 'amicons', icon: aiAmicons }, { component: 'aiAngleDown', - categories: ['arrows'], - tags: ['direction'], + categories: ["arrows"], + tags: ["direction"], slug: 'angle-down', icon: aiAngleDown }, { component: 'aiAngleLeft', - categories: ['arrows'], - tags: ['direction'], + categories: ["arrows"], + tags: ["direction"], slug: 'angle-left', icon: aiAngleLeft }, { component: 'aiAngleRight', - categories: ['arrows'], - tags: ['direction'], + categories: ["arrows"], + tags: ["direction"], slug: 'angle-right', icon: aiAngleRight }, { component: 'aiAngleUp', - categories: ['arrows'], - tags: ['direction'], + categories: ["arrows"], + tags: ["direction"], slug: 'angle-up', icon: aiAngleUp }, { component: 'aiAnglesY', - categories: ['arrows'], - tags: ['direction'], + categories: ["arrows"], + tags: ["direction"], slug: 'angles-y', icon: aiAnglesY }, { component: 'aiAppleAppStore', - categories: ['brands'], - tags: ['software'], + categories: ["brands"], + tags: ["software"], slug: 'apple-app-store', icon: aiAppleAppStore }, { component: 'aiArrowDownFromCloud', - categories: ['arrows', 'communication'], - tags: ['direction', 'download', 'cloud-download'], + categories: ["arrows","communication"], + tags: ["direction","download","cloud-download"], slug: 'arrow-down-from-cloud', icon: aiArrowDownFromCloud }, { component: 'aiArrowDownShortWide', - categories: ['arrows'], - tags: ['sort', 'ascending'], + categories: ["arrows"], + tags: ["sort","ascending"], slug: 'arrow-down-short-wide', icon: aiArrowDownShortWide }, { component: 'aiArrowDownToLine', - categories: ['arrows'], - tags: ['direction', 'download'], + categories: ["arrows"], + tags: ["direction","download"], slug: 'arrow-down-to-line', icon: aiArrowDownToLine }, { component: 'aiArrowDownWideShort', - categories: ['arrows'], - tags: ['sort', 'descending'], + categories: ["arrows"], + tags: ["sort","descending"], slug: 'arrow-down-wide-short', icon: aiArrowDownWideShort }, { component: 'aiArrowDown', - categories: ['arrows'], - tags: ['direction'], + categories: ["arrows"], + tags: ["direction"], slug: 'arrow-down', icon: aiArrowDown }, { component: 'aiArrowLeftFromBracket', - categories: ['arrows'], - tags: ['direction', 'leave', 'signout'], + categories: ["arrows"], + tags: ["direction","leave","signout"], slug: 'arrow-left-from-bracket', icon: aiArrowLeftFromBracket }, { component: 'aiArrowLeftToBracket', - categories: ['arrows'], - tags: ['direction', 'enter', 'signin'], + categories: ["arrows"], + tags: ["direction","enter","signin"], slug: 'arrow-left-to-bracket', icon: aiArrowLeftToBracket }, { component: 'aiArrowLeftToLine', - categories: ['arrows'], - tags: ['direction'], + categories: ["arrows"], + tags: ["direction"], slug: 'arrow-left-to-line', icon: aiArrowLeftToLine }, { component: 'aiArrowLeft', - categories: ['arrows'], - tags: ['direction'], + categories: ["arrows"], + tags: ["direction"], slug: 'arrow-left', icon: aiArrowLeft }, { component: 'aiArrowPointer', - categories: ['arrows'], - tags: ['cursor'], + categories: ["arrows"], + tags: ["cursor"], slug: 'arrow-pointer', icon: aiArrowPointer }, { component: 'aiArrowRightFromBracket', - categories: ['arrows'], - tags: ['direction', 'leave', 'signout'], + categories: ["arrows"], + tags: ["direction","leave","signout"], slug: 'arrow-right-from-bracket', icon: aiArrowRightFromBracket }, { component: 'aiArrowRightFromFile', - categories: ['files', 'business', 'arrows'], - tags: ['import'], + categories: ["files","business","arrows"], + tags: ["import"], slug: 'arrow-right-from-file', icon: aiArrowRightFromFile }, { component: 'aiArrowRightFromSmartphone', - categories: ['communication', 'devices', 'arrows'], + categories: ["communication","devices","arrows"], tags: [], slug: 'arrow-right-from-smartphone', icon: aiArrowRightFromSmartphone }, { component: 'aiArrowRightProhibited', - categories: ['arrows'], - tags: ['direction'], + categories: ["arrows"], + tags: ["direction"], slug: 'arrow-right-prohibited', icon: aiArrowRightProhibited }, { component: 'aiArrowRightToBracket', - categories: ['arrows'], - tags: ['direction', 'enter', 'signin'], + categories: ["arrows"], + tags: ["direction","enter","signin"], slug: 'arrow-right-to-bracket', icon: aiArrowRightToBracket }, { component: 'aiArrowRightToFile', - categories: ['files', 'business', 'arrows'], - tags: ['import'], + categories: ["files","business","arrows"], + tags: ["import"], slug: 'arrow-right-to-file', icon: aiArrowRightToFile }, { component: 'aiArrowRightToLine', - categories: ['arrows'], - tags: ['direction'], + categories: ["arrows"], + tags: ["direction"], slug: 'arrow-right-to-line', icon: aiArrowRightToLine }, { component: 'aiArrowRight', - categories: ['arrows'], - tags: ['direction'], + categories: ["arrows"], + tags: ["direction"], slug: 'arrow-right', icon: aiArrowRight }, { component: 'aiArrowRotateRight', - categories: ['arrows', 'spinners', 'editor', 'media'], - tags: ['refresh', 'reload'], + categories: ["arrows","spinners","editor","media"], + tags: ["refresh","reload"], slug: 'arrow-rotate-right', icon: aiArrowRotateRight }, { component: 'aiArrowUpRightFromSquare', - categories: ['arrows'], - tags: ['external', 'external-link'], + categories: ["arrows"], + tags: ["external","external-link"], slug: 'arrow-up-right-from-square', icon: aiArrowUpRightFromSquare }, { component: 'aiArrowUpShortWide', - categories: ['arrows'], - tags: ['sort', 'ascending'], + categories: ["arrows"], + tags: ["sort","ascending"], slug: 'arrow-up-short-wide', icon: aiArrowUpShortWide }, { component: 'aiArrowUpToCloud', - categories: ['arrows', 'communication'], - tags: ['direction', 'upload', 'cloud-upload'], + categories: ["arrows","communication"], + tags: ["direction","upload","cloud-upload"], slug: 'arrow-up-to-cloud', icon: aiArrowUpToCloud }, { component: 'aiArrowUpToLine', - categories: ['arrows'], - tags: ['direction'], + categories: ["arrows"], + tags: ["direction"], slug: 'arrow-up-to-line', icon: aiArrowUpToLine }, { component: 'aiArrowUpWideShort', - categories: ['arrows'], - tags: ['sort', 'descending'], + categories: ["arrows"], + tags: ["sort","descending"], slug: 'arrow-up-wide-short', icon: aiArrowUpWideShort }, { component: 'aiArrowUp', - categories: ['arrows'], - tags: ['direction'], + categories: ["arrows"], + tags: ["direction"], slug: 'arrow-up', icon: aiArrowUp }, { component: 'aiArrowsDownLeftRightUpCenter', - categories: ['arrows'], - tags: ['combine', 'merge'], + categories: ["arrows"], + tags: ["combine","merge"], slug: 'arrows-down-left-right-up-center', icon: aiArrowsDownLeftRightUpCenter }, { component: 'aiArrowsRotateRight', - categories: ['arrows', 'spinners', 'editor', 'media'], - tags: ['refresh', 'reload'], + categories: ["arrows","spinners","editor","media"], + tags: ["refresh","reload"], slug: 'arrows-rotate-right', icon: aiArrowsRotateRight }, { component: 'aiAsterisk', - categories: ['punctuation-symbols', 'spinners'], + categories: ["punctuation-symbols","spinners"], tags: [], slug: 'asterisk', icon: aiAsterisk }, { component: 'aiAt', - categories: ['communication', 'punctuation-symbols'], - tags: ['email'], + categories: ["communication","punctuation-symbols"], + tags: ["email"], slug: 'at', icon: aiAt }, { component: 'aiAzure', - categories: ['brands'], - tags: ['microsoft'], + categories: ["brands"], + tags: ["microsoft"], slug: 'azure', icon: aiAzure }, { component: 'aiB', - categories: ['letters-numbers'], + categories: ["letters-numbers"], tags: [], slug: 'b', icon: aiB }, { component: 'aiBackward', - categories: ['media'], - tags: ['rewind'], + categories: ["media"], + tags: ["rewind"], slug: 'backward', icon: aiBackward }, { component: 'aiBarsStaggered', - categories: ['business', 'coding'], - tags: ['list'], + categories: ["business","coding"], + tags: ["list"], slug: 'bars-staggered', icon: aiBarsStaggered }, { component: 'aiBars', - categories: ['coding', 'editor'], - tags: ['menu', 'navigation', 'justify', 'aligment', 'hamburger'], + categories: ["coding","editor"], + tags: ["menu","navigation","justify","aligment","hamburger"], slug: 'bars', icon: aiBars }, { component: 'aiBatteryCharging', - categories: ['energy'], + categories: ["energy"], tags: [], slug: 'battery-charging', icon: aiBatteryCharging }, { component: 'aiBatteryEmpty', - categories: ['energy'], - tags: ['battery-0'], + categories: ["energy"], + tags: ["battery-0"], slug: 'battery-empty', icon: aiBatteryEmpty }, { component: 'aiBatteryExclamation', - categories: ['alerts', 'energy'], + categories: ["alerts","energy"], tags: [], slug: 'battery-exclamation', icon: aiBatteryExclamation }, { component: 'aiBatteryFull', - categories: ['energy'], - tags: ['battery-5'], + categories: ["energy"], + tags: ["battery-5"], slug: 'battery-full', icon: aiBatteryFull }, { component: 'aiBatteryHalf', - categories: ['energy'], - tags: ['battery-3'], + categories: ["energy"], + tags: ["battery-3"], slug: 'battery-half', icon: aiBatteryHalf }, { component: 'aiBatteryLow', - categories: ['energy'], - tags: ['battery-1'], + categories: ["energy"], + tags: ["battery-1"], slug: 'battery-low', icon: aiBatteryLow }, { component: 'aiBatteryQuarter', - categories: ['energy'], - tags: ['battery-2'], + categories: ["energy"], + tags: ["battery-2"], slug: 'battery-quarter', icon: aiBatteryQuarter }, { component: 'aiBatterySlash', - categories: ['energy', 'alert'], - tags: ['battery-none'], + categories: ["energy","alert"], + tags: ["battery-none"], slug: 'battery-slash', icon: aiBatterySlash }, { component: 'aiBatteryThreeQuarter', - categories: ['energy'], - tags: ['battery-4'], + categories: ["energy"], + tags: ["battery-4"], slug: 'battery-three-quarter', icon: aiBatteryThreeQuarter }, { component: 'aiBeer', - categories: ['food-beverage', 'maps'], - tags: ['glass'], + categories: ["food-beverage","maps"], + tags: ["glass"], slug: 'beer', icon: aiBeer }, { component: 'aiBel', - categories: ['alerts', 'education', 'social'], - tags: ['notification'], + categories: ["alerts","education","social"], + tags: ["notification"], slug: 'bel', icon: aiBel }, { component: 'aiBicycle', - categories: ['transportation', 'maps', 'nature', 'play'], - tags: ['riding', 'biking'], + categories: ["transportation","maps","nature","play"], + tags: ["riding","biking"], slug: 'bicycle', icon: aiBicycle }, { component: 'aiBlf', - categories: ['communication', 'business'], - tags: ['line key'], + categories: ["communication","business"], + tags: ["line key"], slug: 'blf', icon: aiBlf }, { component: 'aiBold', - categories: ['editor'], + categories: ["editor"], tags: [], slug: 'bold', icon: aiBold }, { component: 'aiBolt', - categories: ['weather', 'energy'], - tags: ['zap', 'storm', 'thunder', 'lightning'], + categories: ["weather","energy"], + tags: ["zap","storm","thunder","lightning"], slug: 'bolt', icon: aiBolt }, { component: 'aiBookOpen', - categories: ['education', 'writing'], - tags: ['read', 'magazine'], + categories: ["education","writing"], + tags: ["read","magazine"], slug: 'book-open', icon: aiBookOpen }, { component: 'aiBook', - categories: ['business', 'writing', 'education'], - tags: ['read', 'magazine'], + categories: ["business","writing","education"], + tags: ["read","magazine"], slug: 'book', icon: aiBook }, { component: 'aiBoxOpenFull', - categories: ['shopping', 'logistics'], - tags: ['package', 'cardboard', 'moving'], + categories: ["shopping","logistics"], + tags: ["package","cardboard","moving"], slug: 'box-open-full', icon: aiBoxOpenFull }, { component: 'aiBox', - categories: ['logistics'], - tags: ['cardboard', 'package'], + categories: ["logistics"], + tags: ["cardboard","package"], slug: 'box', icon: aiBox }, { component: 'aiBracketsCurly', - categories: ['coding', 'punctuation-symbols'], + categories: ["coding","punctuation-symbols"], tags: [], slug: 'brackets-curly', icon: aiBracketsCurly }, { component: 'aiBroom', - categories: ['design', 'household'], - tags: ['clean', 'cleanup'], + categories: ["design","household"], + tags: ["clean","cleanup"], slug: 'broom', icon: aiBroom }, { component: 'aiBug', - categories: ['coding', 'nature', 'security'], - tags: ['insect'], + categories: ["coding","nature","security"], + tags: ["insect"], slug: 'bug', icon: aiBug }, { component: 'aiBuilding', - categories: ['business', 'maps'], - tags: ['company', 'enterprise', 'organization', 'office'], + categories: ["business","maps"], + tags: ["company","enterprise","organization","office"], slug: 'building', icon: aiBuilding }, { component: 'aiC', - categories: ['letters-numbers', 'spinners'], + categories: ["letters-numbers","spinners"], tags: [], slug: 'c', icon: aiC }, { component: 'aiCalculator', - categories: ['business', 'devices', 'mathematics'], + categories: ["business","devices","mathematics"], tags: [], slug: 'calculator', icon: aiCalculator }, { component: 'aiCalendarClock', - categories: ['business', 'time'], - tags: ['holidays', 'date', 'time'], + categories: ["business","time"], + tags: ["holidays","date","time"], slug: 'calendar-clock', icon: aiCalendarClock }, { component: 'aiCalendarDay', - categories: ['business', 'time'], - tags: ['date', 'day'], + categories: ["business","time"], + tags: ["date","day"], slug: 'calendar-day', icon: aiCalendarDay }, { component: 'aiCalendarRangeClock', - categories: ['business', 'time'], - tags: ['holidays', 'date', 'time'], + categories: ["business","time"], + tags: ["holidays","date","time"], slug: 'calendar-range-clock', icon: aiCalendarRangeClock }, { component: 'aiCalendarRange', - categories: ['business', 'time'], - tags: ['holidays', 'date'], + categories: ["business","time"], + tags: ["holidays","date"], slug: 'calendar-range', icon: aiCalendarRange }, { component: 'aiCalendarStars', - categories: ['business', 'time'], - tags: ['holidays'], + categories: ["business","time"], + tags: ["holidays"], slug: 'calendar-stars', icon: aiCalendarStars }, { component: 'aiCalendarWeek', - categories: ['business', 'time'], - tags: ['date', 'week'], + categories: ["business","time"], + tags: ["date","week"], slug: 'calendar-week', icon: aiCalendarWeek }, { component: 'aiCalendar', - categories: ['business', 'time'], - tags: ['month'], + categories: ["business","time"], + tags: ["month"], slug: 'calendar', icon: aiCalendar }, { component: 'aiCamera', - categories: ['devices', 'photos', 'social'], + categories: ["devices","photos","social"], tags: [], slug: 'camera', icon: aiCamera }, { component: 'aiCampfire', - categories: ['nature', 'energy', 'science'], - tags: ['burning', 'hot'], + categories: ["nature","energy","science"], + tags: ["burning","hot"], slug: 'campfire', icon: aiCampfire }, { component: 'aiCarSide', - categories: ['maps', 'transportation'], - tags: ['auto', 'drive', 'driving'], + categories: ["maps","transportation"], + tags: ["auto","drive","driving"], slug: 'car-side', icon: aiCarSide }, { component: 'aiCar', - categories: ['transportation', 'maps'], - tags: ['auto', 'drive', 'driving'], + categories: ["transportation","maps"], + tags: ["auto","drive","driving"], slug: 'car', icon: aiCar }, { component: 'aiChainSlash', - categories: ['editor'], - tags: ['link'], + categories: ["editor"], + tags: ["link"], slug: 'chain-slash', icon: aiChainSlash }, { component: 'aiChain', - categories: ['editor'], - tags: ['link'], + categories: ["editor"], + tags: ["link"], slug: 'chain', icon: aiChain }, { component: 'aiChalkboardPerson', - categories: ['education', 'people'], - tags: ['whiteboard'], + categories: ["education","people"], + tags: ["whiteboard"], slug: 'chalkboard-person', icon: aiChalkboardPerson }, { component: 'aiChangeWindows', - categories: ['brands'], + categories: ["brands"], tags: [], slug: 'change-windows', icon: aiChangeWindows }, { component: 'aiChartPie', - categories: ['business', 'charts', 'money'], - tags: ['data', 'graph', 'analytics'], + categories: ["business","charts","money"], + tags: ["data","graph","analytics"], slug: 'chart-pie', icon: aiChartPie }, { component: 'aiCheck', - categories: ['alerts', 'punctuation-symbols'], - tags: ['checkmark', 'confirm', 'done'], + categories: ["alerts","punctuation-symbols"], + tags: ["checkmark","confirm","done"], slug: 'check', icon: aiCheck }, { component: 'aiChevronDown', - categories: ['arrows'], - tags: ['direction'], + categories: ["arrows"], + tags: ["direction"], slug: 'chevron-down', icon: aiChevronDown }, { component: 'aiChevronLeft', - categories: ['arrows'], - tags: ['direction'], + categories: ["arrows"], + tags: ["direction"], slug: 'chevron-left', icon: aiChevronLeft }, { component: 'aiChevronRight', - categories: ['arrows'], - tags: ['direction'], + categories: ["arrows"], + tags: ["direction"], slug: 'chevron-right', icon: aiChevronRight }, { component: 'aiChevronUp', - categories: ['arrows'], - tags: ['direction'], + categories: ["arrows"], + tags: ["direction"], slug: 'chevron-up', icon: aiChevronUp }, { component: 'aiChrome', - categories: ['brands'], - tags: ['google', 'browser'], + categories: ["brands"], + tags: ["google","browser"], slug: 'chrome', icon: aiChrome }, { component: 'aiCircleCheck', - categories: ['alerts'], - tags: ['checkmark', 'confirm', 'done'], + categories: ["alerts"], + tags: ["checkmark","confirm","done"], slug: 'circle-check', icon: aiCircleCheck }, { component: 'aiCircleDashed', - categories: ['design', 'editor', 'shapes'], + categories: ["design","editor","shapes"], tags: [], slug: 'circle-dashed', icon: aiCircleDashed }, { component: 'aiCircleExclamation', - categories: ['alerts', 'punctuation-symbols'], - tags: ['warning', 'danger'], + categories: ["alerts","punctuation-symbols"], + tags: ["warning","danger"], slug: 'circle-exclamation', icon: aiCircleExclamation }, { component: 'aiCircleHalfInner', - categories: ['design', 'charts', 'shapes'], - tags: ['contrast', 'theme'], + categories: ["design","charts","shapes"], + tags: ["contrast","theme"], slug: 'circle-half-inner', icon: aiCircleHalfInner }, { component: 'aiCircleHalf', - categories: ['design', 'charts', 'shapes'], - tags: ['contrast'], + categories: ["design","charts","shapes"], + tags: ["contrast"], slug: 'circle-half', icon: aiCircleHalf }, { component: 'aiCircleInfo', - categories: ['accessibility', 'maps', 'alerts'], - tags: ['information', 'help'], + categories: ["accessibility","maps","alerts"], + tags: ["information","help"], slug: 'circle-info', icon: aiCircleInfo }, { component: 'aiCirclePerson', - categories: ['people', 'social'], - tags: ['avatar', 'organization', 'account', 'user', 'profile'], + categories: ["people","social"], + tags: ["avatar","organization","account","user","profile"], slug: 'circle-person', icon: aiCirclePerson }, { component: 'aiCirclePlus', - categories: ['alerts', 'mathematics'], - tags: ['add', 'create'], + categories: ["alerts","mathematics"], + tags: ["add","create"], slug: 'circle-plus', icon: aiCirclePlus }, { component: 'aiCircleQuestion', - categories: ['accessibility', 'maps', 'alerts', 'punctuation-symbols'], - tags: ['information', 'help'], + categories: ["accessibility","maps","alerts","punctuation-symbols"], + tags: ["information","help"], slug: 'circle-question', icon: aiCircleQuestion }, { component: 'aiCircleXmark', - categories: ['alerts', 'mathematics'], - tags: ['warning', 'danger'], + categories: ["alerts","mathematics"], + tags: ["warning","danger"], slug: 'circle-xmark', icon: aiCircleXmark }, { component: 'aiCircle', - categories: ['shapes'], - tags: ['round'], + categories: ["shapes"], + tags: ["round"], slug: 'circle', icon: aiCircle }, { component: 'aiCity', - categories: ['business', 'maps'], + categories: ["business","maps"], tags: [], slug: 'city', icon: aiCity }, { component: 'aiClipboard', - categories: ['business', 'writing'], - tags: ['copy'], + categories: ["business","writing"], + tags: ["copy"], slug: 'clipboard', icon: aiClipboard }, { component: 'aiClockRotateLeft', - categories: ['time', 'arrows'], - tags: ['history'], + categories: ["time","arrows"], + tags: ["history"], slug: 'clock-rotate-left', icon: aiClockRotateLeft }, { component: 'aiClock', - categories: ['time'], + categories: ["time"], tags: [], slug: 'clock', icon: aiClock }, { component: 'aiCloudDrizzle', - categories: ['weather'], + categories: ["weather"], tags: [], slug: 'cloud-drizzle', icon: aiCloudDrizzle }, { component: 'aiCloudFog', - categories: ['weather'], + categories: ["weather"], tags: [], slug: 'cloud-fog', icon: aiCloudFog }, { component: 'aiCloudHail', - categories: ['weather'], + categories: ["weather"], tags: [], slug: 'cloud-hail', icon: aiCloudHail }, { component: 'aiCloudLightning', - categories: ['weather'], + categories: ["weather"], tags: [], slug: 'cloud-lightning', icon: aiCloudLightning }, { component: 'aiCloudMoon', - categories: ['weather'], - tags: ['overcast', 'cloudy'], + categories: ["weather"], + tags: ["overcast","cloudy"], slug: 'cloud-moon', icon: aiCloudMoon }, { component: 'aiCloudRain', - categories: ['weather'], + categories: ["weather"], tags: [], slug: 'cloud-rain', icon: aiCloudRain }, { component: 'aiCloudSnow', - categories: ['weather'], + categories: ["weather"], tags: [], slug: 'cloud-snow', icon: aiCloudSnow }, { component: 'aiCloudSun', - categories: ['weather'], - tags: ['overcast', 'cloudy'], + categories: ["weather"], + tags: ["overcast","cloudy"], slug: 'cloud-sun', icon: aiCloudSun }, { component: 'aiCloud', - categories: ['weather', 'communication'], + categories: ["weather","communication"], tags: [], slug: 'cloud', icon: aiCloud }, { component: 'aiCodeBranchUp', - categories: ['coding'], - tags: ['code', 'git'], + categories: ["coding"], + tags: ["code","git"], slug: 'code-branch-up', icon: aiCodeBranchUp }, { component: 'aiCodeBranch', - categories: ['coding'], - tags: ['code', 'git'], + categories: ["coding"], + tags: ["code","git"], slug: 'code-branch', icon: aiCodeBranch }, { component: 'aiCode', - categories: ['coding', 'editor'], - tags: ['different', 'unequal'], + categories: ["coding","editor"], + tags: ["different","unequal"], slug: 'code', icon: aiCode }, { component: 'aiCodeblock', - categories: ['coding', 'editor'], + categories: ["coding","editor"], tags: [], slug: 'codeblock', icon: aiCodeblock }, { component: 'aiCoin', - categories: ['money', 'shopping'], - tags: ['penny', 'euro'], + categories: ["money","shopping"], + tags: ["penny","euro"], slug: 'coin', icon: aiCoin }, { component: 'aiCommand', - categories: ['editor', 'coding'], - tags: ['apple'], + categories: ["editor","coding"], + tags: ["apple"], slug: 'command', icon: aiCommand }, { component: 'aiCompactDisc', - categories: ['devices', 'spinners'], - tags: ['cd'], + categories: ["devices","spinners"], + tags: ["cd"], slug: 'compact-disc', icon: aiCompactDisc }, { component: 'aiCompare', - categories: ['charts'], + categories: ["charts"], tags: [], slug: 'compare', icon: aiCompare }, { component: 'aiCompassDrafting', - categories: ['design'], + categories: ["design"], tags: [], slug: 'compass-drafting', icon: aiCompassDrafting }, { component: 'aiCompass', - categories: ['maps', 'nature', 'spinners'], - tags: ['location'], + categories: ["maps","nature","spinners"], + tags: ["location"], slug: 'compass', icon: aiCompass }, { component: 'aiCompress', - categories: ['media'], + categories: ["media"], tags: [], slug: 'compress', icon: aiCompress }, { component: 'aiComputerMouseScrollWheel', - categories: ['coding', 'devices', 'writing'], - tags: ['input'], + categories: ["coding","devices","writing"], + tags: ["input"], slug: 'computer-mouse-scroll-wheel', icon: aiComputerMouseScrollWheel }, { component: 'aiComputerMouse', - categories: ['coding', 'devices', 'writing'], - tags: ['input'], + categories: ["coding","devices","writing"], + tags: ["input"], slug: 'computer-mouse', icon: aiComputerMouse }, { component: 'aiCopy', - categories: ['business', 'design', 'files'], + categories: ["business","design","files"], tags: [], slug: 'copy', icon: aiCopy }, { component: 'aiCreditCard', - categories: ['money', 'shopping'], + categories: ["money","shopping"], tags: [], slug: 'credit-card', icon: aiCreditCard }, { component: 'aiCrop', - categories: ['design', 'editing'], + categories: ["design","editing"], tags: [], slug: 'crop', icon: aiCrop }, { component: 'aiCursor', - categories: ['writing'], - tags: ['cursor'], + categories: ["writing"], + tags: ["cursor"], slug: 'cursor', icon: aiCursor }, { component: 'aiD', - categories: ['letters-numbers'], + categories: ["letters-numbers"], tags: [], slug: 'd', icon: aiD }, { component: 'aiDevices', - categories: ['coding', 'devices'], - tags: ['laptop', 'smartphone', 'mobile'], + categories: ["coding","devices"], + tags: ["laptop","smartphone","mobile"], slug: 'devices', icon: aiDevices }, { component: 'aiDiceFive', - categories: ['gaming'], - tags: ['random', 'chance'], + categories: ["gaming"], + tags: ["random","chance"], slug: 'dice-five', icon: aiDiceFive }, { component: 'aiDiceFour', - categories: ['gaming'], - tags: ['random', 'chance'], + categories: ["gaming"], + tags: ["random","chance"], slug: 'dice-four', icon: aiDiceFour }, { component: 'aiDiceOne', - categories: ['gaming'], - tags: ['random', 'chance'], + categories: ["gaming"], + tags: ["random","chance"], slug: 'dice-one', icon: aiDiceOne }, { component: 'aiDiceSix', - categories: ['gaming'], - tags: ['random', 'chance'], + categories: ["gaming"], + tags: ["random","chance"], slug: 'dice-six', icon: aiDiceSix }, { component: 'aiDiceThree', - categories: ['gaming'], - tags: ['random', 'chance'], + categories: ["gaming"], + tags: ["random","chance"], slug: 'dice-three', icon: aiDiceThree }, { component: 'aiDiceTwo', - categories: ['gaming'], - tags: ['random', 'chance'], + categories: ["gaming"], + tags: ["random","chance"], slug: 'dice-two', icon: aiDiceTwo }, { component: 'aiDice', - categories: ['gaming', 'maps'], - tags: ['random', 'chance'], + categories: ["gaming","maps"], + tags: ["random","chance"], slug: 'dice', icon: aiDice }, { component: 'aiDisplayCam', - categories: ['devices'], - tags: ['screen', 'monitor', 'desktop', 'webcam'], + categories: ["devices"], + tags: ["screen","monitor","desktop","webcam"], slug: 'display-cam', icon: aiDisplayCam }, { component: 'aiDisplay', - categories: ['devices'], - tags: ['screen', 'monitor', 'desktop'], + categories: ["devices"], + tags: ["screen","monitor","desktop"], slug: 'display', icon: aiDisplay }, { component: 'aiDoor', - categories: ['maps', 'security'], + categories: ["maps","security"], tags: [], slug: 'door', icon: aiDoor }, { component: 'aiDroplet', - categories: ['weather', 'nature'], - tags: ['water'], + categories: ["weather","nature"], + tags: ["water"], slug: 'droplet', icon: aiDroplet }, { component: 'aiE', - categories: ['letters-numbers'], + categories: ["letters-numbers"], tags: [], slug: 'e', icon: aiE }, { component: 'aiEarth', - categories: ['science', 'maps'], - tags: ['europe'], + categories: ["science","maps"], + tags: ["europe"], slug: 'earth', icon: aiEarth }, { component: 'aiEclipse', - categories: ['science', 'weather'], - tags: ['sun', 'moon'], + categories: ["science","weather"], + tags: ["sun","moon"], slug: 'eclipse', icon: aiEclipse }, { component: 'aiEdge', - categories: ['brands'], - tags: ['microsoft', 'browser'], + categories: ["brands"], + tags: ["microsoft","browser"], slug: 'edge', icon: aiEdge }, { component: 'aiEllipsisH', - categories: ['editor'], - tags: ['three dots', 'meatballs', 'more', 'overflow'], + categories: ["editor"], + tags: ["three dots","meatballs","more","overflow"], slug: 'ellipsis-h', icon: aiEllipsisH }, { component: 'aiEllipsisV', - categories: ['editor'], - tags: ['three dots', 'meatballs', 'more', 'overflow'], + categories: ["editor"], + tags: ["three dots","meatballs","more","overflow"], slug: 'ellipsis-v', icon: aiEllipsisV }, { component: 'aiEnvelopeOpen', - categories: ['business', 'communication', 'social', 'writing'], - tags: ['email', 'message', 'mail', 'letter'], + categories: ["business","communication","social","writing"], + tags: ["email","message","mail","letter"], slug: 'envelope-open', icon: aiEnvelopeOpen }, { component: 'aiEnvelope', - categories: ['business', 'communication', 'social', 'writing'], - tags: ['email', 'message', 'mail', 'letter'], + categories: ["business","communication","social","writing"], + tags: ["email","message","mail","letter"], slug: 'envelope', icon: aiEnvelope }, { component: 'aiEthernet', - categories: ['devices'], - tags: ['network', 'internet'], + categories: ["devices"], + tags: ["network","internet"], slug: 'ethernet', icon: aiEthernet }, { component: 'aiEuro', - categories: ['money'], + categories: ["money"], tags: [], slug: 'euro', icon: aiEuro }, { component: 'aiExpand', - categories: ['media'], + categories: ["media"], tags: [], slug: 'expand', icon: aiExpand }, { component: 'aiExport', - categories: ['arrows', 'social'], - tags: ['share'], + categories: ["arrows","social"], + tags: ["share"], slug: 'export', icon: aiExport }, { component: 'aiEyeSlash', - categories: ['accessibility', 'design', 'human'], + categories: ["accessibility","design","human"], tags: [], slug: 'eye-slash', icon: aiEyeSlash }, { component: 'aiEye', - categories: ['accessibility', 'design', 'human'], + categories: ["accessibility","design","human"], tags: [], slug: 'eye', icon: aiEye }, { component: 'aiF', - categories: ['letters-numbers'], + categories: ["letters-numbers"], tags: [], slug: 'f', icon: aiF }, { component: 'aiFacebookMessenger', - categories: ['brands'], - tags: ['meta'], + categories: ["brands"], + tags: ["meta"], slug: 'facebook-messenger', icon: aiFacebookMessenger }, { component: 'aiFacebook', - categories: ['brands'], - tags: ['meta'], + categories: ["brands"], + tags: ["meta"], slug: 'facebook', icon: aiFacebook }, { component: 'aiFastBackward', - categories: ['media'], - tags: ['rewind'], + categories: ["media"], + tags: ["rewind"], slug: 'fast-backward', icon: aiFastBackward }, { component: 'aiFastForward', - categories: ['media'], + categories: ["media"], tags: [], slug: 'fast-forward', icon: aiFastForward }, { component: 'aiFax', - categories: ['business', 'communication', 'devices'], + categories: ["business","communication","devices"], tags: [], slug: 'fax', icon: aiFax }, { component: 'aiFile', - categories: ['files', 'business', 'coding', 'writing'], - tags: ['document', 'paper'], + categories: ["files","business","coding","writing"], + tags: ["document","paper"], slug: 'file', icon: aiFile }, { component: 'aiFilesList', - categories: ['files', 'business', 'coding', 'writing'], - tags: ['document', 'paper', 'log'], + categories: ["files","business","coding","writing"], + tags: ["document","paper","log"], slug: 'files-list', icon: aiFilesList }, { component: 'aiFiles', - categories: ['files', 'business', 'coding', 'writing'], - tags: ['document', 'paper'], + categories: ["files","business","coding","writing"], + tags: ["document","paper"], slug: 'files', icon: aiFiles }, { component: 'aiFilmstrip', - categories: ['media'], - tags: ['video'], + categories: ["media"], + tags: ["video"], slug: 'filmstrip', icon: aiFilmstrip }, { component: 'aiFilterPlus', - categories: ['coding'], - tags: ['sort'], + categories: ["coding"], + tags: ["sort"], slug: 'filter-plus', icon: aiFilterPlus }, { component: 'aiFilterXmark', - categories: ['coding'], - tags: ['sort'], + categories: ["coding"], + tags: ["sort"], slug: 'filter-xmark', icon: aiFilterXmark }, { component: 'aiFilter', - categories: ['coding'], - tags: ['sort'], + categories: ["coding"], + tags: ["sort"], slug: 'filter', icon: aiFilter }, { component: 'aiFingerprint', - categories: ['accessibility', 'human', 'security'], - tags: ['biometrics'], + categories: ["accessibility","human","security"], + tags: ["biometrics"], slug: 'fingerprint', icon: aiFingerprint }, { component: 'aiFirefox', - categories: ['brands'], - tags: ['mozilla', 'browser'], + categories: ["brands"], + tags: ["mozilla","browser"], slug: 'firefox', icon: aiFirefox }, { component: 'aiFlagCheckered', - categories: ['maps'], + categories: ["maps"], tags: [], slug: 'flag-checkered', icon: aiFlagCheckered }, { component: 'aiFlag', - categories: ['maps'], + categories: ["maps"], tags: [], slug: 'flag', icon: aiFlag }, { component: 'aiFlask', - categories: ['maps', 'science'], - tags: ['potion', 'magic'], + categories: ["maps","science"], + tags: ["potion","magic"], slug: 'flask', icon: aiFlask }, { component: 'aiFloppyDisk', - categories: ['editor', 'business', 'design', 'devices', 'files'], - tags: ['save'], + categories: ["editor","business","design","devices","files"], + tags: ["save"], slug: 'floppy-disk', icon: aiFloppyDisk }, { component: 'aiFolderImage', - categories: ['files', 'business'], - tags: ['images', 'map'], + categories: ["files","business"], + tags: ["images","map"], slug: 'folder-image', icon: aiFolderImage }, { component: 'aiFolderMin', - categories: ['business', 'files'], + categories: ["business","files"], tags: [], slug: 'folder-min', icon: aiFolderMin }, { component: 'aiFolderOpen', - categories: ['business', 'files', 'writing'], + categories: ["business","files","writing"], tags: [], slug: 'folder-open', icon: aiFolderOpen }, { component: 'aiFolderPlus', - categories: ['business', 'files'], + categories: ["business","files"], tags: [], slug: 'folder-plus', icon: aiFolderPlus }, { component: 'aiFolder', - categories: ['files', 'coding', 'business'], - tags: ['map'], + categories: ["files","coding","business"], + tags: ["map"], slug: 'folder', icon: aiFolder }, { component: 'aiForward', - categories: ['media'], + categories: ["media"], tags: [], slug: 'forward', icon: aiForward }, { component: 'aiFrame', - categories: ['design'], + categories: ["design"], tags: [], slug: 'frame', icon: aiFrame }, { component: 'aiG', - categories: ['letters-numbers'], + categories: ["letters-numbers"], tags: [], slug: 'g', icon: aiG }, { component: 'aiGamepad', - categories: ['devices', 'gaming'], - tags: ['controller'], + categories: ["devices","gaming"], + tags: ["controller"], slug: 'gamepad', icon: aiGamepad }, { component: 'aiGauge', - categories: ['transportation'], - tags: ['speedometer', 'tachometer', 'dashboard'], + categories: ["transportation"], + tags: ["speedometer","tachometer","dashboard"], slug: 'gauge', icon: aiGauge }, { component: 'aiGear', - categories: ['coding', 'spinners'], - tags: ['settings', 'options', 'preferences', 'tools'], + categories: ["coding","spinners"], + tags: ["settings","options","preferences","tools"], slug: 'gear', icon: aiGear }, { component: 'aiGift', - categories: ['maps'], - tags: ['present'], + categories: ["maps"], + tags: ["present"], slug: 'gift', icon: aiGift }, { component: 'aiGithub', - categories: ['brands'], + categories: ["brands"], tags: [], slug: 'github', icon: aiGithub }, { component: 'aiGlobe', - categories: ['science', 'business', 'communication', 'maps'], - tags: ['planet'], + categories: ["science","business","communication","maps"], + tags: ["planet"], slug: 'globe', icon: aiGlobe }, { component: 'aiGooglePlay', - categories: ['brands'], - tags: ['software', 'store'], + categories: ["brands"], + tags: ["software","store"], slug: 'google-play', icon: aiGooglePlay }, { component: 'aiGrid', - categories: ['design', 'editor'], - tags: ['dashboard'], + categories: ["design","editor"], + tags: ["dashboard"], slug: 'grid', icon: aiGrid }, { component: 'aiGripLines', - categories: ['editor'], - tags: ['handles'], + categories: ["editor"], + tags: ["handles"], slug: 'grip-lines', icon: aiGripLines }, { component: 'aiH', - categories: ['letters-numbers'], + categories: ["letters-numbers"], tags: [], slug: 'h', icon: aiH }, { component: 'aiHeading1', - categories: ['editor'], + categories: ["editor"], tags: [], slug: 'heading-1', icon: aiHeading1 }, { component: 'aiHeading2', - categories: ['editor'], + categories: ["editor"], tags: [], slug: 'heading-2', icon: aiHeading2 }, { component: 'aiHeading3', - categories: ['editor'], + categories: ["editor"], tags: [], slug: 'heading-3', icon: aiHeading3 }, { component: 'aiHeading4', - categories: ['editor'], + categories: ["editor"], tags: [], slug: 'heading-4', icon: aiHeading4 }, { component: 'aiHeading5', - categories: ['editor'], + categories: ["editor"], tags: [], slug: 'heading-5', icon: aiHeading5 }, { component: 'aiHeading6', - categories: ['editor'], + categories: ["editor"], tags: [], slug: 'heading-6', icon: aiHeading6 }, { component: 'aiHeadset', - categories: ['communication', 'devices'], - tags: ['headphone', 'microphone'], + categories: ["communication","devices"], + tags: ["headphone","microphone"], slug: 'headset', icon: aiHeadset }, { component: 'aiHeartCrack', - categories: ['health', 'shapes'], - tags: ['love', 'favorite', 'heartbreak'], + categories: ["health","shapes"], + tags: ["love","favorite","heartbreak"], slug: 'heart-crack', icon: aiHeartCrack }, { component: 'aiHeartHalf', - categories: ['health', 'shapes'], - tags: ['love', 'favorite'], + categories: ["health","shapes"], + tags: ["love","favorite"], slug: 'heart-half', icon: aiHeartHalf }, { component: 'aiHeart', - categories: ['health', 'human', 'shapes'], - tags: ['love', 'favorite'], + categories: ["health","human","shapes"], + tags: ["love","favorite"], slug: 'heart', icon: aiHeart }, { component: 'aiHorizontalLine', - categories: ['editor', 'punctuation-symbols'], - tags: ['rule'], + categories: ["editor","punctuation-symbols"], + tags: ["rule"], slug: 'horizontal-line', icon: aiHorizontalLine }, { component: 'aiHourglassEmpty', - categories: ['time'], - tags: ['wait', 'history', 'sand', 'clock'], + categories: ["time"], + tags: ["wait","history","sand","clock"], slug: 'hourglass-empty', icon: aiHourglassEmpty }, { component: 'aiHourglassEnd', - categories: ['time'], - tags: ['wait', 'history', 'sand', 'clock'], + categories: ["time"], + tags: ["wait","history","sand","clock"], slug: 'hourglass-end', icon: aiHourglassEnd }, { component: 'aiHourglassHalf', - categories: ['time'], - tags: ['wait', 'history', 'sand', 'clock'], + categories: ["time"], + tags: ["wait","history","sand","clock"], slug: 'hourglass-half', icon: aiHourglassHalf }, { component: 'aiHourglassStart', - categories: ['time'], - tags: ['wait', 'history', 'sand', 'clock'], + categories: ["time"], + tags: ["wait","history","sand","clock"], slug: 'hourglass-start', icon: aiHourglassStart }, { component: 'aiHouse', - categories: ['maps'], - tags: ['home'], + categories: ["maps"], + tags: ["home"], slug: 'house', icon: aiHouse }, { component: 'aiI', - categories: ['letters-numbers'], + categories: ["letters-numbers"], tags: [], slug: 'i', icon: aiI }, { component: 'aiIcons', - categories: ['design'], - tags: ['circle', 'square', 'xmark', 'triangle'], + categories: ["design"], + tags: ["circle","square","xmark","triangle"], slug: 'icons', icon: aiIcons }, { component: 'aiIdCard', - categories: ['business', 'security', 'people'], - tags: ['identification'], + categories: ["business","security","people"], + tags: ["identification"], slug: 'id-card', icon: aiIdCard }, { component: 'aiImage', - categories: ['social', 'files'], - tags: ['picture', 'photo'], + categories: ["social","files"], + tags: ["picture","photo"], slug: 'image', icon: aiImage }, { component: 'aiInstagram', - categories: ['brands'], - tags: ['meta'], + categories: ["brands"], + tags: ["meta"], slug: 'instagram', icon: aiInstagram }, { component: 'aiItalic', - categories: ['editor'], + categories: ["editor"], tags: [], slug: 'italic', icon: aiItalic }, { component: 'aiJ', - categories: ['letters-numbers'], + categories: ["letters-numbers"], tags: [], slug: 'j', icon: aiJ }, { component: 'aiJesterHat', - categories: ['human'], + categories: ["human"], tags: [], slug: 'jester-hat', icon: aiJesterHat }, { component: 'aiK', - categories: ['letters-numbers'], + categories: ["letters-numbers"], tags: [], slug: 'k', icon: aiK }, { component: 'aiKey', - categories: ['security', 'maps'], + categories: ["security","maps"], tags: [], slug: 'key', icon: aiKey }, { component: 'aiKeyboardBrightnessHigh', - categories: ['accessibility', 'devices'], - tags: ['light'], + categories: ["accessibility","devices"], + tags: ["light"], slug: 'keyboard-brightness-high', icon: aiKeyboardBrightnessHigh }, { component: 'aiKeyboardBrightnessLow', - categories: ['accessibility', 'devices'], - tags: ['light'], + categories: ["accessibility","devices"], + tags: ["light"], slug: 'keyboard-brightness-low', icon: aiKeyboardBrightnessLow }, { component: 'aiKeyboard', - categories: ['coding', 'devices', 'writing'], - tags: ['input'], + categories: ["coding","devices","writing"], + tags: ["input"], slug: 'keyboard', icon: aiKeyboard }, { component: 'aiKite', - categories: ['play', 'nature'], - tags: ['wind'], + categories: ["play","nature"], + tags: ["wind"], slug: 'kite', icon: aiKite }, { component: 'aiL', - categories: ['letters-numbers'], + categories: ["letters-numbers"], tags: [], slug: 'l', icon: aiL }, { component: 'aiLaptop', - categories: ['devices'], - tags: ['notebook'], + categories: ["devices"], + tags: ["notebook"], slug: 'laptop', icon: aiLaptop }, { component: 'aiLaravel', - categories: ['brands'], + categories: ["brands"], tags: [], slug: 'laravel', icon: aiLaravel }, { component: 'aiLayersPlus', - categories: ['design', 'maps'], - tags: ['stacked', 'perspective'], + categories: ["design","maps"], + tags: ["stacked","perspective"], slug: 'layers-plus', icon: aiLayersPlus }, { component: 'aiLayers', - categories: ['design', 'maps'], - tags: ['stacked', 'perspective'], + categories: ["design","maps"], + tags: ["stacked","perspective"], slug: 'layers', icon: aiLayers }, { component: 'aiLifeRing', - categories: ['maps', 'spinners'], - tags: ['support'], + categories: ["maps","spinners"], + tags: ["support"], slug: 'life-ring', icon: aiLifeRing }, { component: 'aiLightbulbOn', - categories: ['energy', 'maps'], - tags: ['light', 'lamp', 'idea'], + categories: ["energy","maps"], + tags: ["light","lamp","idea"], slug: 'lightbulb-on', icon: aiLightbulbOn }, { component: 'aiLightbulb', - categories: ['energy', 'maps'], - tags: ['light', 'lamp', 'idea'], + categories: ["energy","maps"], + tags: ["light","lamp","idea"], slug: 'lightbulb', icon: aiLightbulb }, { component: 'aiLine', - categories: ['shapes', 'editor'], + categories: ["shapes","editor"], tags: [], slug: 'line', icon: aiLine }, { component: 'aiLinkedin', - categories: ['brands'], + categories: ["brands"], tags: [], slug: 'linkedin', icon: aiLinkedin }, { component: 'aiListChecksXmark', - categories: ['editor'], + categories: ["editor"], tags: [], slug: 'list-checks-xmark', icon: aiListChecksXmark }, { component: 'aiListChecks', - categories: ['editor'], + categories: ["editor"], tags: [], slug: 'list-checks', icon: aiListChecks }, { component: 'aiListClock', - categories: ['time', 'editor'], + categories: ["time","editor"], tags: [], slug: 'list-clock', icon: aiListClock }, { component: 'aiListOrderedClock', - categories: ['editor', 'time'], + categories: ["editor","time"], tags: [], slug: 'list-ordered-clock', icon: aiListOrderedClock }, { component: 'aiListOrdered', - categories: ['editor'], + categories: ["editor"], tags: [], slug: 'list-ordered', icon: aiListOrdered }, { component: 'aiList', - categories: ['editor'], + categories: ["editor"], tags: [], slug: 'list', icon: aiList }, { component: 'aiLoader', - categories: ['spinners'], - tags: ['loading', 'progress'], + categories: ["spinners"], + tags: ["loading","progress"], slug: 'loader', icon: aiLoader }, { component: 'aiLocationPinDot', - categories: ['maps', 'social'], - tags: ['geography', 'map-marker'], + categories: ["maps","social"], + tags: ["geography","map-marker"], slug: 'location-pin-dot', icon: aiLocationPinDot }, { component: 'aiLocationPinSlash', - categories: ['maps', 'social'], - tags: ['geography', 'map-marker'], + categories: ["maps","social"], + tags: ["geography","map-marker"], slug: 'location-pin-slash', icon: aiLocationPinSlash }, { component: 'aiLocationPin', - categories: ['maps', 'social'], - tags: ['geography', 'map-marker'], + categories: ["maps","social"], + tags: ["geography","map-marker"], slug: 'location-pin', icon: aiLocationPin }, { component: 'aiLocationPinsRoute', - categories: ['maps'], - tags: ['geography', 'map-marker'], + categories: ["maps"], + tags: ["geography","map-marker"], slug: 'location-pins-route', icon: aiLocationPinsRoute }, { component: 'aiLockOpen', - categories: ['security'], - tags: ['privacy'], + categories: ["security"], + tags: ["privacy"], slug: 'lock-open', icon: aiLockOpen }, { component: 'aiLock', - categories: ['security'], - tags: ['privacy'], + categories: ["security"], + tags: ["privacy"], slug: 'lock', icon: aiLock }, { component: 'aiM', - categories: ['letters-numbers'], + categories: ["letters-numbers"], tags: [], slug: 'm', icon: aiM }, { component: 'aiMagnifyingGlass', - categories: ['maps'], - tags: ['search'], + categories: ["maps"], + tags: ["search"], slug: 'magnifying-glass', icon: aiMagnifyingGlass }, { component: 'aiMegaphone', - categories: ['business', 'communication'], - tags: ['bullhorn'], + categories: ["business","communication"], + tags: ["bullhorn"], slug: 'megaphone', icon: aiMegaphone }, { component: 'aiMessagePen', - categories: ['communication', 'social'], - tags: ['speech bubble', 'chat', 'text'], + categories: ["communication","social"], + tags: ["speech bubble","chat","text"], slug: 'message-pen', icon: aiMessagePen }, { component: 'aiMessageSmile', - categories: ['communication', 'social'], - tags: ['speech bubble', 'chat', 'text'], + categories: ["communication","social"], + tags: ["speech bubble","chat","text"], slug: 'message-smile', icon: aiMessageSmile }, { component: 'aiMessageText', - categories: ['communication', 'social'], - tags: ['speech bubble', 'chat', 'text'], + categories: ["communication","social"], + tags: ["speech bubble","chat","text"], slug: 'message-text', icon: aiMessageText }, { component: 'aiMessage', - categories: ['communication', 'social'], - tags: ['speech bubble', 'chat', 'text'], + categories: ["communication","social"], + tags: ["speech bubble","chat","text"], slug: 'message', icon: aiMessage }, { component: 'aiMicrochip', - categories: ['coding', 'devices'], - tags: ['chip'], + categories: ["coding","devices"], + tags: ["chip"], slug: 'microchip', icon: aiMicrochip }, { component: 'aiMicrophone', - categories: ['communication', 'media', 'social', 'devices'], - tags: ['record'], + categories: ["communication","media","social","devices"], + tags: ["record"], slug: 'microphone', icon: aiMicrophone }, { component: 'aiMin', - categories: ['editor', 'maps', 'mathematics', 'punctuation-symbols', 'alerts'], - tags: ['minus', 'delete'], + categories: ["editor","maps","mathematics","punctuation-symbols","alerts"], + tags: ["minus","delete"], slug: 'min', icon: aiMin }, { component: 'aiMoonCloud', - categories: ['weather'], - tags: ['overcast', 'cloudy'], + categories: ["weather"], + tags: ["overcast","cloudy"], slug: 'moon-cloud', icon: aiMoonCloud }, { component: 'aiMoon', - categories: ['science', 'weather'], - tags: ['clear sky'], + categories: ["science","weather"], + tags: ["clear sky"], slug: 'moon', icon: aiMoon }, { component: 'aiMusicPause', - categories: ['media', 'files', 'education'], - tags: ['audio', 'sound'], + categories: ["media","files","education"], + tags: ["audio","sound"], slug: 'music-pause', icon: aiMusicPause }, { component: 'aiMusic', - categories: ['media', 'files', 'education'], - tags: ['audio', 'sound'], + categories: ["media","files","education"], + tags: ["audio","sound"], slug: 'music', icon: aiMusic }, { component: 'aiN', - categories: ['letters-numbers'], + categories: ["letters-numbers"], tags: [], slug: 'n', icon: aiN }, { component: 'aiNetwork', - categories: ['charts', 'science', 'communication'], + categories: ["charts","science","communication"], tags: [], slug: 'network', icon: aiNetwork }, { component: 'aiNext', - categories: ['media'], + categories: ["media"], tags: [], slug: 'next', icon: aiNext }, { component: 'aiNotes', - categories: ['writing'], - tags: ['sticky', 'post-it'], + categories: ["writing"], + tags: ["sticky","post-it"], slug: 'notes', icon: aiNotes }, { component: 'aiNumpad', - categories: ['coding', 'devices', 'writing'], - tags: ['ten keys'], + categories: ["coding","devices","writing"], + tags: ["ten keys"], slug: 'numpad', icon: aiNumpad }, { component: 'aiO', - categories: ['letters-numbers'], + categories: ["letters-numbers"], tags: [], slug: 'o', icon: aiO }, { component: 'aiOption', - categories: ['punctuation-symbols'], + categories: ["punctuation-symbols"], tags: [], slug: 'option', icon: aiOption }, { component: 'aiP', - categories: ['letters-numbers'], + categories: ["letters-numbers"], tags: [], slug: 'p', icon: aiP }, { component: 'aiPager', - categories: ['communication', 'devices', 'health'], - tags: ['beeper'], + categories: ["communication","devices","health"], + tags: ["beeper"], slug: 'pager', icon: aiPager }, { component: 'aiPaperPlane', - categories: ['communication', 'social'], + categories: ["communication","social"], tags: [], slug: 'paper-plane', icon: aiPaperPlane }, { component: 'aiPaper', - categories: ['writing'], - tags: ['news'], + categories: ["writing"], + tags: ["news"], slug: 'paper', icon: aiPaper }, { component: 'aiParachuteBox', - categories: ['logistics'], + categories: ["logistics"], tags: [], slug: 'parachute-box', icon: aiParachuteBox }, { component: 'aiParagraph', - categories: ['editor'], + categories: ["editor"], tags: [], slug: 'paragraph', icon: aiParagraph }, { component: 'aiPatreon', - categories: ['brands'], + categories: ["brands"], tags: [], slug: 'patreon', icon: aiPatreon }, { component: 'aiPause', - categories: ['media'], + categories: ["media"], tags: [], slug: 'pause', icon: aiPause }, { component: 'aiPen', - categories: ['editor', 'business', 'design', 'writing'], - tags: ['write', 'ballpoint'], + categories: ["editor","business","design","writing"], + tags: ["write","ballpoint"], slug: 'pen', icon: aiPen }, { component: 'aiPeopleCircle', - categories: ['people', 'spinners'], - tags: ['users'], + categories: ["people","spinners"], + tags: ["users"], slug: 'people-circle', icon: aiPeopleCircle }, { component: 'aiPeopleXmark', - categories: ['people'], - tags: ['users', 'profiles'], + categories: ["people"], + tags: ["users","profiles"], slug: 'people-xmark', icon: aiPeopleXmark }, { component: 'aiPeople', - categories: ['people'], - tags: ['users', 'profiles'], + categories: ["people"], + tags: ["users","profiles"], slug: 'people', icon: aiPeople }, { component: 'aiPersonClock', - categories: ['people', 'time'], - tags: ['user', 'profile'], + categories: ["people","time"], + tags: ["user","profile"], slug: 'person-clock', icon: aiPersonClock }, { component: 'aiPersonGear', - categories: ['people'], - tags: ['user', 'profile'], + categories: ["people"], + tags: ["user","profile"], slug: 'person-gear', icon: aiPersonGear }, { component: 'aiPersonHeadset', - categories: ['people', 'social'], - tags: ['user', 'microphone', 'headset'], + categories: ["people","social"], + tags: ["user","microphone","headset"], slug: 'person-headset', icon: aiPersonHeadset }, { component: 'aiPersonList', - categories: ['people', 'social'], - tags: ['user'], + categories: ["people","social"], + tags: ["user"], slug: 'person-list', icon: aiPersonList }, { component: 'aiPersonLock', - categories: ['people', 'security'], - tags: ['user'], + categories: ["people","security"], + tags: ["user"], slug: 'person-lock', icon: aiPersonLock }, { component: 'aiPersonPlus', - categories: ['people', 'social'], - tags: ['user'], + categories: ["people","social"], + tags: ["user"], slug: 'person-plus', icon: aiPersonPlus }, { component: 'aiPersonXmark', - categories: ['people', 'social'], - tags: ['user'], + categories: ["people","social"], + tags: ["user"], slug: 'person-xmark', icon: aiPersonXmark }, { component: 'aiPerson', - categories: ['people'], - tags: ['user'], + categories: ["people"], + tags: ["user"], slug: 'person', icon: aiPerson }, { component: 'aiPhoneArrowDownLeftProhibited', - categories: ['business', 'communication'], - tags: ['telephone', 'call', 'incoming'], + categories: ["business","communication"], + tags: ["telephone","call","incoming"], slug: 'phone-arrow-down-left-prohibited', icon: aiPhoneArrowDownLeftProhibited }, { component: 'aiPhoneArrowDownLeft', - categories: ['business', 'communication'], - tags: ['telephone', 'call', 'incoming'], + categories: ["business","communication"], + tags: ["telephone","call","incoming"], slug: 'phone-arrow-down-left', icon: aiPhoneArrowDownLeft }, { component: 'aiPhoneArrowUpRightProhibited', - categories: ['business', 'communication'], - tags: ['telephone', 'call', 'outgoing'], + categories: ["business","communication"], + tags: ["telephone","call","outgoing"], slug: 'phone-arrow-up-right-prohibited', icon: aiPhoneArrowUpRightProhibited }, { component: 'aiPhoneArrowUpRight', - categories: ['business', 'communication'], - tags: ['telephone', 'call', 'outgoing'], + categories: ["business","communication"], + tags: ["telephone","call","outgoing"], slug: 'phone-arrow-up-right', icon: aiPhoneArrowUpRight }, { component: 'aiPhoneClock', - categories: ['business', 'communication', 'time'], - tags: ['telephone', 'call'], + categories: ["business","communication","time"], + tags: ["telephone","call"], slug: 'phone-clock', icon: aiPhoneClock }, { component: 'aiPhoneGear', - categories: ['business', 'communication'], - tags: ['telephone', 'call'], + categories: ["business","communication"], + tags: ["telephone","call"], slug: 'phone-gear', icon: aiPhoneGear }, { component: 'aiPhoneList', - categories: ['business', 'communication'], - tags: ['telephone', 'call', 'log'], + categories: ["business","communication"], + tags: ["telephone","call","log"], slug: 'phone-list', icon: aiPhoneList }, { component: 'aiPhoneOffice', - categories: ['communication', 'devices'], - tags: ['desk phone'], + categories: ["communication","devices"], + tags: ["desk phone"], slug: 'phone-office', icon: aiPhoneOffice }, { component: 'aiPhoneVolume', - categories: ['accessibility', 'business', 'communication'], - tags: ['telephone', 'call'], + categories: ["accessibility","business","communication"], + tags: ["telephone","call"], slug: 'phone-volume', icon: aiPhoneVolume }, { component: 'aiPhone', - categories: ['business', 'communication', 'maps'], - tags: ['telephone', 'call'], + categories: ["business","communication","maps"], + tags: ["telephone","call"], slug: 'phone', icon: aiPhone }, { component: 'aiPlane', - categories: ['transportation', 'maps'], - tags: ['flight', 'flying', 'airport', 'aircraft'], + categories: ["transportation","maps"], + tags: ["flight","flying","airport","aircraft"], slug: 'plane', icon: aiPlane }, { component: 'aiPlanetRinged', - categories: ['science'], - tags: ['planet'], + categories: ["science"], + tags: ["planet"], slug: 'planet-ringed', icon: aiPlanetRinged }, { component: 'aiPlateUtensils', - categories: ['maps', 'food-beverage'], - tags: ['food', 'eat', 'restaurant'], + categories: ["maps","food-beverage"], + tags: ["food","eat","restaurant"], slug: 'plate-utensils', icon: aiPlateUtensils }, { component: 'aiPlayPause', - categories: ['media'], + categories: ["media"], tags: [], slug: 'play-pause', icon: aiPlayPause }, { component: 'aiPlay', - categories: ['media'], + categories: ["media"], tags: [], slug: 'play', icon: aiPlay }, { component: 'aiPlus', - categories: ['editor', 'maps', 'mathematics', 'health', 'punctuation-symbols', 'alerts'], - tags: ['add', 'create'], + categories: ["editor","maps","mathematics","health","punctuation-symbols","alerts"], + tags: ["add","create"], slug: 'plus', icon: aiPlus }, { component: 'aiPower', - categories: ['devices', 'energy'], + categories: ["devices","energy"], tags: [], slug: 'power', icon: aiPower }, { component: 'aiPrevious', - categories: ['media'], + categories: ["media"], tags: [], slug: 'previous', icon: aiPrevious }, { component: 'aiPrinter', - categories: ['devices', 'writing', 'business'], - tags: ['printing'], + categories: ["devices","writing","business"], + tags: ["printing"], slug: 'printer', icon: aiPrinter }, { component: 'aiProhibited', - categories: ['security'], - tags: ['ban'], + categories: ["security"], + tags: ["ban"], slug: 'prohibited', icon: aiProhibited }, { component: 'aiPuzzlePiece', - categories: ['gaming'], + categories: ["gaming"], tags: [], slug: 'puzzle-piece', icon: aiPuzzlePiece }, { component: 'aiQ', - categories: ['letters-numbers'], + categories: ["letters-numbers"], tags: [], slug: 'q', icon: aiQ }, { component: 'aiQuote', - categories: ['editor', 'punctuation-symbols'], + categories: ["editor","punctuation-symbols"], tags: [], slug: 'quote', icon: aiQuote }, { component: 'aiR', - categories: ['letters-numbers'], + categories: ["letters-numbers"], tags: [], slug: 'r', icon: aiR }, { component: 'aiReact', - categories: ['brands'], - tags: ['software'], + categories: ["brands"], + tags: ["software"], slug: 'react', icon: aiReact }, { component: 'aiReceipt', - categories: ['money'], - tags: ['price'], + categories: ["money"], + tags: ["price"], slug: 'receipt', icon: aiReceipt }, { component: 'aiRectangleP', - categories: ['letters-numbers'], + categories: ["letters-numbers"], tags: [], slug: 'rectangle-p', icon: aiRectangleP }, { component: 'aiRedo', - categories: ['arrows', 'editor'], + categories: ["arrows","editor"], tags: [], slug: 'redo', icon: aiRedo }, { component: 'aiRepeatOnce', - categories: ['media', 'arrows'], + categories: ["media","arrows"], tags: [], slug: 'repeat-once', icon: aiRepeatOnce }, { component: 'aiRepeat', - categories: ['media', 'arrows'], + categories: ["media","arrows"], tags: [], slug: 'repeat', icon: aiRepeat }, { component: 'aiRoad', - categories: ['maps', 'transportation', 'logistics'], - tags: ['drive'], + categories: ["maps","transportation","logistics"], + tags: ["drive"], slug: 'road', icon: aiRoad }, { component: 'aiRocket', - categories: ['science', 'transportation'], - tags: ['launch'], + categories: ["science","transportation"], + tags: ["launch"], slug: 'rocket', icon: aiRocket }, { component: 'aiS', - categories: ['letters-numbers'], + categories: ["letters-numbers"], tags: [], slug: 's', icon: aiS }, { component: 'aiSafari', - categories: ['brands'], - tags: ['apple', 'browser'], + categories: ["brands"], + tags: ["apple","browser"], slug: 'safari', icon: aiSafari }, { component: 'aiScouting', - categories: ['brands'], + categories: ["brands"], tags: [], slug: 'scouting', icon: aiScouting }, { component: 'aiServer', - categories: ['devices', 'business'], + categories: ["devices","business"], tags: [], slug: 'server', icon: aiServer }, { component: 'aiShareNodes', - categories: ['social'], + categories: ["social"], tags: [], slug: 'share-nodes', icon: aiShareNodes }, { component: 'aiShare', - categories: ['arrows', 'social'], - tags: ['forward'], + categories: ["arrows","social"], + tags: ["forward"], slug: 'share', icon: aiShare }, { component: 'aiShieldKeyhole', - categories: ['security'], + categories: ["security"], tags: [], slug: 'shield-keyhole', icon: aiShieldKeyhole }, { component: 'aiShieldPlus', - categories: ['security'], + categories: ["security"], tags: [], slug: 'shield-plus', icon: aiShieldPlus }, { component: 'aiShieldXmark', - categories: ['security'], + categories: ["security"], tags: [], slug: 'shield-xmark', icon: aiShieldXmark }, { component: 'aiShield', - categories: ['security'], + categories: ["security"], tags: [], slug: 'shield', icon: aiShield }, { component: 'aiShoePrints', - categories: ['human', 'maps'], - tags: ['walking'], + categories: ["human","maps"], + tags: ["walking"], slug: 'shoe-prints', icon: aiShoePrints }, { component: 'aiShoppingCart', - categories: ['shopping', 'maps'], - tags: ['checkout', 'cart', 'basket'], + categories: ["shopping","maps"], + tags: ["checkout","cart","basket"], slug: 'shopping-cart', icon: aiShoppingCart }, { component: 'aiShuffle', - categories: ['media', 'arrows'], - tags: ['random'], + categories: ["media","arrows"], + tags: ["random"], slug: 'shuffle', icon: aiShuffle }, { component: 'aiSidebarLeft', - categories: ['coding'], + categories: ["coding"], tags: [], slug: 'sidebar-left', icon: aiSidebarLeft }, { component: 'aiSidebarRight', - categories: ['coding'], + categories: ["coding"], tags: [], slug: 'sidebar-right', icon: aiSidebarRight }, { component: 'aiSignature', - categories: ['business', 'editor', 'writing'], - tags: ['footer'], + categories: ["business","editor","writing"], + tags: ["footer"], slug: 'signature', icon: aiSignature }, { component: 'aiSimCard', - categories: ['devices'], - tags: ['mobile'], + categories: ["devices"], + tags: ["mobile"], slug: 'sim-card', icon: aiSimCard }, { component: 'aiSippy', - categories: ['brands'], + categories: ["brands"], tags: [], slug: 'sippy', icon: aiSippy }, { component: 'aiSliders', - categories: ['editor', 'media'], - tags: ['options', 'settings', 'preferences'], + categories: ["editor","media"], + tags: ["options","settings","preferences"], slug: 'sliders', icon: aiSliders }, { component: 'aiSmartphoneArrowRight', - categories: ['communication', 'devices', 'arrows'], + categories: ["communication","devices","arrows"], tags: [], slug: 'smartphone-arrow-right', icon: aiSmartphoneArrowRight }, { component: 'aiSmartphoneHinge', - categories: ['devices', 'communication'], - tags: ['hinge'], + categories: ["devices","communication"], + tags: ["hinge"], slug: 'smartphone-hinge', icon: aiSmartphoneHinge }, { component: 'aiSmartphone', - categories: ['communication', 'devices'], + categories: ["communication","devices"], tags: [], slug: 'smartphone', icon: aiSmartphone }, { component: 'aiSnowflake', - categories: ['weather', 'spinners', 'household'], - tags: ['winter', 'snow', 'blizzard', 'flurries'], + categories: ["weather","spinners","household"], + tags: ["winter","snow","blizzard","flurries"], slug: 'snowflake', icon: aiSnowflake }, { component: 'aiSpeakerGrill', - categories: ['communication', 'devices'], - tags: ['intercom'], + categories: ["communication","devices"], + tags: ["intercom"], slug: 'speaker-grill', icon: aiSpeakerGrill }, { component: 'aiSpinnerThird', - categories: ['spinners'], - tags: ['loading', 'progress'], + categories: ["spinners"], + tags: ["loading","progress"], slug: 'spinner-third', icon: aiSpinnerThird }, { component: 'aiSpinner', - categories: ['spinners'], - tags: ['loading', 'progress'], + categories: ["spinners"], + tags: ["loading","progress"], slug: 'spinner', icon: aiSpinner }, { component: 'aiSpy', - categories: ['security', 'people'], - tags: ['secret', 'agent'], + categories: ["security","people"], + tags: ["secret","agent"], slug: 'spy', icon: aiSpy }, { component: 'aiSquareDashed', - categories: ['shapes'], + categories: ["shapes"], tags: [], slug: 'square-dashed', icon: aiSquareDashed }, { component: 'aiSquareGum', - categories: ['editor', 'shapes'], + categories: ["editor","shapes"], tags: [], slug: 'square-gum', icon: aiSquareGum }, { component: 'aiSquare', - categories: ['shapes'], + categories: ["shapes"], tags: [], slug: 'square', icon: aiSquare }, { component: 'aiStarHalf', - categories: ['shapes'], + categories: ["shapes"], tags: [], slug: 'star-half', icon: aiStarHalf }, { component: 'aiStar', - categories: ['science', 'shapes', 'social'], - tags: ['favorite'], + categories: ["science","shapes","social"], + tags: ["favorite"], slug: 'star', icon: aiStar }, { component: 'aiStarscout', - categories: ['science', 'brands'], - tags: ['falling star', 'star'], + categories: ["science","brands"], + tags: ["falling star","star"], slug: 'starscout', icon: aiStarscout }, { component: 'aiStop', - categories: ['media'], + categories: ["media"], tags: [], slug: 'stop', icon: aiStop }, { component: 'aiStopwatch', - categories: ['time'], - tags: ['chrono'], + categories: ["time"], + tags: ["chrono"], slug: 'stopwatch', icon: aiStopwatch }, { component: 'aiStore', - categories: ['business', 'maps'], - tags: ['shop'], + categories: ["business","maps"], + tags: ["shop"], slug: 'store', icon: aiStore }, { component: 'aiStrikethrough', - categories: ['editor'], + categories: ["editor"], tags: [], slug: 'strikethrough', icon: aiStrikethrough }, { component: 'aiStudio384', - categories: ['brands'], + categories: ["brands"], tags: [], slug: 'studio-384', icon: aiStudio384 }, { component: 'aiSubscript', - categories: ['editor'], + categories: ["editor"], tags: [], slug: 'subscript', icon: aiSubscript }, { component: 'aiSunCloud', - categories: ['weather'], - tags: ['overcast', 'cloudy'], + categories: ["weather"], + tags: ["overcast","cloudy"], slug: 'sun-cloud', icon: aiSunCloud }, { component: 'aiSun', - categories: ['science', 'weather'], - tags: ['clear sky'], + categories: ["science","weather"], + tags: ["clear sky"], slug: 'sun', icon: aiSun }, { component: 'aiSunrise', - categories: ['weather'], - tags: ['dawn'], + categories: ["weather"], + tags: ["dawn"], slug: 'sunrise', icon: aiSunrise }, { component: 'aiSunset', - categories: ['weather'], - tags: ['dusk'], + categories: ["weather"], + tags: ["dusk"], slug: 'sunset', icon: aiSunset }, { component: 'aiSuperscript', - categories: ['editor'], + categories: ["editor"], tags: [], slug: 'superscript', icon: aiSuperscript }, { component: 'aiSwatchbook', - categories: ['design'], - tags: ['color'], + categories: ["design"], + tags: ["color"], slug: 'swatchbook', icon: aiSwatchbook }, { component: 'aiT', - categories: ['letters-numbers'], + categories: ["letters-numbers"], tags: [], slug: 't', icon: aiT }, { component: 'aiTableCellMerge', - categories: ['communication', 'business'], - tags: ['spreadsheet'], + categories: ["communication","business"], + tags: ["spreadsheet"], slug: 'table-cell-merge', icon: aiTableCellMerge }, { component: 'aiTableClock', - categories: ['communication', 'business'], - tags: ['spreadsheet'], + categories: ["communication","business"], + tags: ["spreadsheet"], slug: 'table-clock', icon: aiTableClock }, { component: 'aiTableColumnInsertLeft', - categories: ['editor', 'business'], - tags: ['spreadsheet'], + categories: ["editor","business"], + tags: ["spreadsheet"], slug: 'table-column-insert-left', icon: aiTableColumnInsertLeft }, { component: 'aiTableColumnInsertRight', - categories: ['editor', 'business'], - tags: ['spreadsheet'], + categories: ["editor","business"], + tags: ["spreadsheet"], slug: 'table-column-insert-right', icon: aiTableColumnInsertRight }, { component: 'aiTableColumnMin', - categories: ['editor', 'business'], - tags: ['spreadsheet'], + categories: ["editor","business"], + tags: ["spreadsheet"], slug: 'table-column-min', icon: aiTableColumnMin }, { component: 'aiTableHeaderCell', - categories: ['editor', 'business'], - tags: ['spreadsheet'], + categories: ["editor","business"], + tags: ["spreadsheet"], slug: 'table-header-cell', icon: aiTableHeaderCell }, { component: 'aiTableHeaderColumn', - categories: ['editor', 'business'], - tags: ['spreadsheet'], + categories: ["editor","business"], + tags: ["spreadsheet"], slug: 'table-header-column', icon: aiTableHeaderColumn }, { component: 'aiTableHeaderRow', - categories: ['editor'], + categories: ["editor"], tags: [], slug: 'table-header-row', icon: aiTableHeaderRow }, { component: 'aiTableMin', - categories: ['editor', 'business'], - tags: ['spreadsheet'], + categories: ["editor","business"], + tags: ["spreadsheet"], slug: 'table-min', icon: aiTableMin }, { component: 'aiTableRowInsertBottom', - categories: ['editor', 'business'], - tags: ['spreadsheet'], + categories: ["editor","business"], + tags: ["spreadsheet"], slug: 'table-row-insert-bottom', icon: aiTableRowInsertBottom }, { component: 'aiTableRowInsertTop', - categories: ['editor', 'business'], - tags: ['spreadsheet'], + categories: ["editor","business"], + tags: ["spreadsheet"], slug: 'table-row-insert-top', icon: aiTableRowInsertTop }, { component: 'aiTableRowMin', - categories: ['editor', 'business'], - tags: ['spreadsheet'], + categories: ["editor","business"], + tags: ["spreadsheet"], slug: 'table-row-min', icon: aiTableRowMin }, { component: 'aiTable', - categories: ['editor', 'business', 'files'], - tags: ['spreadsheet'], + categories: ["editor","business","files"], + tags: ["spreadsheet"], slug: 'table', icon: aiTable }, { component: 'aiTagGear', - categories: ['business', 'maps'], - tags: ['label'], + categories: ["business","maps"], + tags: ["label"], slug: 'tag-gear', icon: aiTagGear }, { component: 'aiTagPlus', - categories: ['business', 'maps'], - tags: ['label'], + categories: ["business","maps"], + tags: ["label"], slug: 'tag-plus', icon: aiTagPlus }, { component: 'aiTag', - categories: ['business', 'maps'], - tags: ['label'], + categories: ["business","maps"], + tags: ["label"], slug: 'tag', icon: aiTag }, { component: 'aiTent', - categories: ['maps', 'nature'], - tags: ['shelter'], + categories: ["maps","nature"], + tags: ["shelter"], slug: 'tent', icon: aiTent }, { component: 'aiTerminal', - categories: ['coding'], - tags: ['command line', 'cmd', 'cli'], + categories: ["coding"], + tags: ["command line","cmd","cli"], slug: 'terminal', icon: aiTerminal }, { component: 'aiThermometerEmpty', - categories: ['weather'], - tags: ['modest'], + categories: ["weather"], + tags: ["modest"], slug: 'thermometer-empty', icon: aiThermometerEmpty }, { component: 'aiThermometerFull', - categories: ['weather'], - tags: ['hot'], + categories: ["weather"], + tags: ["hot"], slug: 'thermometer-full', icon: aiThermometerFull }, { component: 'aiThermometerHalf', - categories: ['weather'], - tags: ['cold'], + categories: ["weather"], + tags: ["cold"], slug: 'thermometer-half', icon: aiThermometerHalf }, { component: 'aiThreads', - categories: ['brands'], - tags: ['meta'], + categories: ["brands"], + tags: ["meta"], slug: 'threads', icon: aiThreads }, { component: 'aiThumbstackSlash', - categories: ['business', 'maps', 'social', 'writing'], - tags: ['pin'], + categories: ["business","maps","social","writing"], + tags: ["pin"], slug: 'thumbstack-slash', icon: aiThumbstackSlash }, { component: 'aiThumbstack', - categories: ['business', 'maps', 'social', 'writing'], - tags: ['pin'], + categories: ["business","maps","social","writing"], + tags: ["pin"], slug: 'thumbstack', icon: aiThumbstack }, { component: 'aiTicket', - categories: ['media', 'money'], - tags: ['pass'], + categories: ["media","money"], + tags: ["pass"], slug: 'ticket', icon: aiTicket }, { component: 'aiTiktok', - categories: ['brands'], + categories: ["brands"], tags: [], slug: 'tiktok', icon: aiTiktok }, { component: 'aiToast', - categories: ['alerts'], - tags: ['toast'], + categories: ["alerts"], + tags: ["toast"], slug: 'toast', icon: aiToast }, { component: 'aiToggleOff', - categories: ['toggle'], + categories: ["toggle"], tags: [], slug: 'toggle-off', icon: aiToggleOff }, { component: 'aiToggleOn', - categories: ['toggle'], + categories: ["toggle"], tags: [], slug: 'toggle-on', icon: aiToggleOn }, { component: 'aiTowerBroadcast', - categories: ['connectivity', 'energy'], + categories: ["connectivity","energy"], tags: [], slug: 'tower-broadcast', icon: aiTowerBroadcast }, { component: 'aiTrainTrack', - categories: ['maps', 'transportation'], - tags: ['rail'], + categories: ["maps","transportation"], + tags: ["rail"], slug: 'train-track', icon: aiTrainTrack }, { component: 'aiTranslate', - categories: ['communication'], + categories: ["communication"], tags: [], slug: 'translate', icon: aiTranslate }, { component: 'aiTrashCan', - categories: ['maps', 'editor'], - tags: ['trash', 'delete', 'garbage', 'remove', 'junk'], + categories: ["maps","editor"], + tags: ["trash","delete","garbage","remove","junk"], slug: 'trash-can', icon: aiTrashCan }, { component: 'aiTree', - categories: ['maps', 'nature'], - tags: ['forest'], + categories: ["maps","nature"], + tags: ["forest"], slug: 'tree', icon: aiTree }, { component: 'aiTrekkingBackpack', - categories: ['nature', 'maps', 'play'], - tags: ['walking', 'exploration'], + categories: ["nature","maps","play"], + tags: ["walking","exploration"], slug: 'trekking-backpack', icon: aiTrekkingBackpack }, { component: 'aiTriangleDashed', - categories: ['shapes'], + categories: ["shapes"], tags: [], slug: 'triangle-dashed', icon: aiTriangleDashed }, { component: 'aiTriangleExclamation', - categories: ['alerts', 'punctuation-symbols'], - tags: ['warning', 'danger'], + categories: ["alerts","punctuation-symbols"], + tags: ["warning","danger"], slug: 'triangle-exclamation', icon: aiTriangleExclamation }, { component: 'aiTriangle', - categories: ['shapes'], + categories: ["shapes"], tags: [], slug: 'triangle', icon: aiTriangle }, { component: 'aiTrophy', - categories: ['maps'], + categories: ["maps"], tags: [], slug: 'trophy', icon: aiTrophy }, { component: 'aiTruckPickup', - categories: ['transportation'], + categories: ["transportation"], tags: [], slug: 'truck-pickup', icon: aiTruckPickup }, { component: 'aiTruckTow', - categories: ['transportation'], + categories: ["transportation"], tags: [], slug: 'truck-tow', icon: aiTruckTow }, { component: 'aiTwitter', - categories: ['brands'], + categories: ["brands"], tags: [], slug: 'twitter', icon: aiTwitter }, { component: 'aiU', - categories: ['letters-numbers'], + categories: ["letters-numbers"], tags: [], slug: 'u', icon: aiU }, { component: 'aiUmbrella', - categories: ['weather'], - tags: ['rain'], + categories: ["weather"], + tags: ["rain"], slug: 'umbrella', icon: aiUmbrella }, { component: 'aiUnderline', - categories: ['editor'], + categories: ["editor"], tags: [], slug: 'underline', icon: aiUnderline }, { component: 'aiUndo', - categories: ['arrows', 'editor'], + categories: ["arrows","editor"], tags: [], slug: 'undo', icon: aiUndo }, { component: 'aiUniversalAccess', - categories: ['accessibility'], + categories: ["accessibility"], tags: [], slug: 'universal-access', icon: aiUniversalAccess }, { component: 'aiV', - categories: ['letters-numbers'], + categories: ["letters-numbers"], tags: [], slug: 'v', icon: aiV }, { component: 'aiValkyrieSword', - categories: ['brands'], + categories: ["brands"], tags: [], slug: 'valkyrie-sword', icon: aiValkyrieSword }, { component: 'aiVideo', - categories: ['communication', 'media', 'social', 'devices'], - tags: ['record'], + categories: ["communication","media","social","devices"], + tags: ["record"], slug: 'video', icon: aiVideo }, { component: 'aiVirtualReality', - categories: ['devices'], - tags: ['mixed reality', 'headset', 'augmented reality'], + categories: ["devices"], + tags: ["mixed reality","headset","augmented reality"], slug: 'virtual-reality', icon: aiVirtualReality }, { component: 'aiVisualStudio', - categories: ['brands'], - tags: ['microsoft', 'vs'], + categories: ["brands"], + tags: ["microsoft","vs"], slug: 'visual-studio', icon: aiVisualStudio }, { component: 'aiVoicemail', - categories: ['communication'], + categories: ["communication"], tags: [], slug: 'voicemail', icon: aiVoicemail }, { component: 'aiVolume0', - categories: ['media'], - tags: ['sound', 'silence'], + categories: ["media"], + tags: ["sound","silence"], slug: 'volume-0', icon: aiVolume0 }, { component: 'aiVolume1', - categories: ['media'], - tags: ['sound'], + categories: ["media"], + tags: ["sound"], slug: 'volume-1', icon: aiVolume1 }, { component: 'aiVolume2', - categories: ['media'], - tags: ['sound'], + categories: ["media"], + tags: ["sound"], slug: 'volume-2', icon: aiVolume2 }, { component: 'aiVolume3', - categories: ['media'], - tags: ['sound'], + categories: ["media"], + tags: ["sound"], slug: 'volume-3', icon: aiVolume3 }, { component: 'aiVolumeSlash', - categories: ['media'], - tags: ['sound', 'silence'], + categories: ["media"], + tags: ["sound","silence"], slug: 'volume-slash', icon: aiVolumeSlash }, { component: 'aiW', - categories: ['letters-numbers'], + categories: ["letters-numbers"], tags: [], slug: 'w', icon: aiW }, { component: 'aiWallet', - categories: ['business', 'money', 'shopping'], + categories: ["business","money","shopping"], tags: [], slug: 'wallet', icon: aiWallet }, { component: 'aiWallpaper', - categories: ['devices'], + categories: ["devices"], tags: [], slug: 'wallpaper', icon: aiWallpaper }, { component: 'aiWaveform', - categories: ['files'], - tags: ['audio', 'music'], + categories: ["files"], + tags: ["audio","music"], slug: 'waveform', icon: aiWaveform }, { component: 'aiWebhooksClock', - categories: ['coding', 'time'], + categories: ["coding","time"], tags: [], slug: 'webhooks-clock', icon: aiWebhooksClock }, { component: 'aiWebhooks', - categories: ['coding'], + categories: ["coding"], tags: [], slug: 'webhooks', icon: aiWebhooks }, { component: 'aiWind', - categories: ['weather', 'energy'], - tags: ['breeze', 'windy'], + categories: ["weather","energy"], + tags: ["breeze","windy"], slug: 'wind', icon: aiWind }, { component: 'aiWindow', - categories: ['coding'], + categories: ["coding"], tags: [], slug: 'window', icon: aiWindow }, { component: 'aiWindows', - categories: ['brands'], - tags: ['microsoft'], + categories: ["brands"], + tags: ["microsoft"], slug: 'windows', icon: aiWindows }, { component: 'aiX', - categories: ['letters-numbers'], + categories: ["letters-numbers"], tags: [], slug: 'x', icon: aiX }, { component: 'aiXbox', - categories: ['brands', 'gaming'], - tags: ['microsoft'], + categories: ["brands","gaming"], + tags: ["microsoft"], slug: 'xbox', icon: aiXbox }, { component: 'aiXmark', - categories: ['editor', 'mathematics', 'punctuation-symbols'], - tags: ['close', 'cancel'], + categories: ["editor","mathematics","punctuation-symbols"], + tags: ["close","cancel"], slug: 'xmark', icon: aiXmark }, { component: 'aiY', - categories: ['letters-numbers'], + categories: ["letters-numbers"], tags: [], slug: 'y', icon: aiY }, { component: 'aiZ', - categories: ['letters-numbers'], + categories: ["letters-numbers"], tags: [], slug: 'z', icon: aiZ } ]; -export default icons; +export default icons; \ No newline at end of file diff --git a/docs/stats/index.html b/docs/stats/index.html index fcc1ee1e..884db511 100644 --- a/docs/stats/index.html +++ b/docs/stats/index.html @@ -1,16851 +1,4842 @@ - + + - - - - - Package size - + + +
+ + + + - if (value === '+') { - if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') { - extglobOpen('plus', value); - continue; - } - - if ((prev && prev.value === '(') || opts.regex === false) { - push({ type: 'plus', value, output: PLUS_LITERAL }); - continue; - } - - if ((prev && (prev.type === 'bracket' || prev.type === 'paren' || prev.type === 'brace')) || state.parens > 0) { - push({ type: 'plus', value }); - continue; - } - - push({ type: 'plus', value: PLUS_LITERAL }); - continue; - } - - /** - * Plain text - */ - - if (value === '@') { - if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') { - push({ type: 'at', extglob: true, value, output: '' }); - continue; - } - - push({ type: 'text', value }); - continue; - } - - /** - * Plain text - */ - - if (value !== '*') { - if (value === '$' || value === '^') { - value = `\\${value}`; - } - - const match = REGEX_NON_SPECIAL_CHARS.exec(remaining()); - if (match) { - value += match[0]; - state.index += match[0].length; - } - - push({ type: 'text', value }); - continue; - } - - /** - * Stars - */ - - if (prev && (prev.type === 'globstar' || prev.star === true)) { - prev.type = 'star'; - prev.star = true; - prev.value += value; - prev.output = star; - state.backtrack = true; - state.globstar = true; - consume(value); - continue; - } - - let rest = remaining(); - if (opts.noextglob !== true && /^\([^?]/.test(rest)) { - extglobOpen('star', value); - continue; - } - - if (prev.type === 'star') { - if (opts.noglobstar === true) { - consume(value); - continue; - } - - const prior = prev.prev; - const before = prior.prev; - const isStart = prior.type === 'slash' || prior.type === 'bos'; - const afterStar = before && (before.type === 'star' || before.type === 'globstar'); - - if (opts.bash === true && (!isStart || (rest[0] && rest[0] !== '/'))) { - push({ type: 'star', value, output: '' }); - continue; - } - - const isBrace = state.braces > 0 && (prior.type === 'comma' || prior.type === 'brace'); - const isExtglob = extglobs.length && (prior.type === 'pipe' || prior.type === 'paren'); - if (!isStart && prior.type !== 'paren' && !isBrace && !isExtglob) { - push({ type: 'star', value, output: '' }); - continue; - } - - // strip consecutive `/**/` - while (rest.slice(0, 3) === '/**') { - const after = input[state.index + 4]; - if (after && after !== '/') { - break; - } - rest = rest.slice(3); - consume('/**', 3); - } - - if (prior.type === 'bos' && eos()) { - prev.type = 'globstar'; - prev.value += value; - prev.output = globstar(opts); - state.output = prev.output; - state.globstar = true; - consume(value); - continue; - } - - if (prior.type === 'slash' && prior.prev.type !== 'bos' && !afterStar && eos()) { - state.output = state.output.slice(0, -(prior.output + prev.output).length); - prior.output = `(?:${prior.output}`; - - prev.type = 'globstar'; - prev.output = globstar(opts) + (opts.strictSlashes ? ')' : '|$)'); - prev.value += value; - state.globstar = true; - state.output += prior.output + prev.output; - consume(value); - continue; - } - - if (prior.type === 'slash' && prior.prev.type !== 'bos' && rest[0] === '/') { - const end = rest[1] !== void 0 ? '|$' : ''; - - state.output = state.output.slice(0, -(prior.output + prev.output).length); - prior.output = `(?:${prior.output}`; - - prev.type = 'globstar'; - prev.output = `${globstar(opts)}${SLASH_LITERAL}|${SLASH_LITERAL}${end})`; - prev.value += value; - - state.output += prior.output + prev.output; - state.globstar = true; - - consume(value + advance()); - - push({ type: 'slash', value: '/', output: '' }); - continue; - } - - if (prior.type === 'bos' && rest[0] === '/') { - prev.type = 'globstar'; - prev.value += value; - prev.output = `(?:^|${SLASH_LITERAL}|${globstar(opts)}${SLASH_LITERAL})`; - state.output = prev.output; - state.globstar = true; - consume(value + advance()); - push({ type: 'slash', value: '/', output: '' }); - continue; - } - - // remove single star from output - state.output = state.output.slice(0, -prev.output.length); - - // reset previous token to globstar - prev.type = 'globstar'; - prev.output = globstar(opts); - prev.value += value; - - // reset output with globstar - state.output += prev.output; - state.globstar = true; - consume(value); - continue; - } - - const token = { type: 'star', value, output: star }; - - if (opts.bash === true) { - token.output = '.*?'; - if (prev.type === 'bos' || prev.type === 'slash') { - token.output = nodot + token.output; - } - push(token); - continue; - } - - if (prev && (prev.type === 'bracket' || prev.type === 'paren') && opts.regex === true) { - token.output = value; - push(token); - continue; - } - - if (state.index === state.start || prev.type === 'slash' || prev.type === 'dot') { - if (prev.type === 'dot') { - state.output += NO_DOT_SLASH; - prev.output += NO_DOT_SLASH; - } else if (opts.dot === true) { - state.output += NO_DOTS_SLASH; - prev.output += NO_DOTS_SLASH; - } else { - state.output += nodot; - prev.output += nodot; - } - - if (peek() !== '*') { - state.output += ONE_CHAR; - prev.output += ONE_CHAR; - } - } - - push(token); - } - - while (state.brackets > 0) { - if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ']')); - state.output = utils$1.escapeLast(state.output, '['); - decrement('brackets'); - } - - while (state.parens > 0) { - if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ')')); - state.output = utils$1.escapeLast(state.output, '('); - decrement('parens'); - } - - while (state.braces > 0) { - if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', '}')); - state.output = utils$1.escapeLast(state.output, '{'); - decrement('braces'); - } - - if (opts.strictSlashes !== true && (prev.type === 'star' || prev.type === 'bracket')) { - push({ type: 'maybe_slash', value: '', output: `${SLASH_LITERAL}?` }); - } - - // rebuild the output if we had to backtrack at any point - if (state.backtrack === true) { - state.output = ''; - - for (const token of state.tokens) { - state.output += token.output != null ? token.output : token.value; - - if (token.suffix) { - state.output += token.suffix; - } - } - } - - return state; - }; - - /** - * Fast paths for creating regular expressions for common glob patterns. - * This can significantly speed up processing and has very little downside - * impact when none of the fast paths match. - */ - - parse$2.fastpaths = (input, options) => { - const opts = { ...options }; - const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH; - const len = input.length; - if (len > max) { - throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`); - } - - input = REPLACEMENTS[input] || input; - - // create constants based on platform, for windows or posix - const { DOT_LITERAL, SLASH_LITERAL, ONE_CHAR, DOTS_SLASH, NO_DOT, NO_DOTS, NO_DOTS_SLASH, STAR, START_ANCHOR } = constants$2.globChars(opts.windows); - - const nodot = opts.dot ? NO_DOTS : NO_DOT; - const slashDot = opts.dot ? NO_DOTS_SLASH : NO_DOT; - const capture = opts.capture ? '' : '?:'; - const state = { negated: false, prefix: '' }; - let star = opts.bash === true ? '.*?' : STAR; - - if (opts.capture) { - star = `(${star})`; - } - - const globstar = (opts) => { - if (opts.noglobstar === true) return star; - return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`; - }; - - const create = (str) => { - switch (str) { - case '*': - return `${nodot}${ONE_CHAR}${star}`; - - case '.*': - return `${DOT_LITERAL}${ONE_CHAR}${star}`; - - case '*.*': - return `${nodot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`; - - case '*/*': - return `${nodot}${star}${SLASH_LITERAL}${ONE_CHAR}${slashDot}${star}`; - - case '**': - return nodot + globstar(opts); - - case '**/*': - return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${ONE_CHAR}${star}`; - - case '**/*.*': - return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`; - - case '**/.*': - return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${DOT_LITERAL}${ONE_CHAR}${star}`; - - default: { - const match = /^(.*?)\.(\w+)$/.exec(str); - if (!match) return; - - const source = create(match[1]); - if (!source) return; - - return source + DOT_LITERAL + match[2]; - } - } - }; - - const output = utils$1.removePrefix(input, state); - let source = create(output); - - if (source && opts.strictSlashes !== true) { - source += `${SLASH_LITERAL}?`; - } - - return source; - }; - - var parse_1 = parse$2; - - const scan = scan_1; - const parse$1 = parse_1; - const utils = utils$3; - const constants$1 = constants$3; - const isObject = (val) => val && typeof val === 'object' && !Array.isArray(val); - - /** - * Creates a matcher function from one or more glob patterns. The - * returned function takes a string to match as its first argument, - * and returns true if the string is a match. The returned matcher - * function also takes a boolean as the second argument that, when true, - * returns an object with additional information. - * - * ```js - * const picomatch = require('picomatch'); - * // picomatch(glob[, options]); - * - * const isMatch = picomatch('*.!(*a)'); - * console.log(isMatch('a.a')); //=> false - * console.log(isMatch('a.b')); //=> true - * ``` - * @name picomatch - * @param {String|Array} `globs` One or more glob patterns. - * @param {Object=} `options` - * @return {Function=} Returns a matcher function. - * @api public - */ - - const picomatch = (glob, options, returnState = false) => { - if (Array.isArray(glob)) { - const fns = glob.map((input) => picomatch(input, options, returnState)); - const arrayMatcher = (str) => { - for (const isMatch of fns) { - const state = isMatch(str); - if (state) return state; - } - return false; - }; - return arrayMatcher; - } - - const isState = isObject(glob) && glob.tokens && glob.input; - - if (glob === '' || (typeof glob !== 'string' && !isState)) { - throw new TypeError('Expected pattern to be a non-empty string'); - } - - const opts = options || {}; - const posix = opts.windows; - const regex = isState ? picomatch.compileRe(glob, options) : picomatch.makeRe(glob, options, false, true); - - const state = regex.state; - delete regex.state; - - let isIgnored = () => false; - if (opts.ignore) { - const ignoreOpts = { ...options, ignore: null, onMatch: null, onResult: null }; - isIgnored = picomatch(opts.ignore, ignoreOpts, returnState); - } - - const matcher = (input, returnObject = false) => { - const { isMatch, match, output } = picomatch.test(input, regex, options, { glob, posix }); - const result = { glob, state, regex, posix, input, output, match, isMatch }; - - if (typeof opts.onResult === 'function') { - opts.onResult(result); - } - - if (isMatch === false) { - result.isMatch = false; - return returnObject ? result : false; - } - - if (isIgnored(input)) { - if (typeof opts.onIgnore === 'function') { - opts.onIgnore(result); - } - result.isMatch = false; - return returnObject ? result : false; - } - - if (typeof opts.onMatch === 'function') { - opts.onMatch(result); - } - return returnObject ? result : true; - }; - - if (returnState) { - matcher.state = state; - } - - return matcher; - }; - - /** - * Test `input` with the given `regex`. This is used by the main - * `picomatch()` function to test the input string. - * - * ```js - * const picomatch = require('picomatch'); - * // picomatch.test(input, regex[, options]); - * - * console.log(picomatch.test('foo/bar', /^(?:([^/]*?)\/([^/]*?))$/)); - * // { isMatch: true, match: [ 'foo/', 'foo', 'bar' ], output: 'foo/bar' } - * ``` - * @param {String} `input` String to test. - * @param {RegExp} `regex` - * @return {Object} Returns an object with matching info. - * @api public - */ - - picomatch.test = (input, regex, options, { glob, posix } = {}) => { - if (typeof input !== 'string') { - throw new TypeError('Expected input to be a string'); - } - - if (input === '') { - return { isMatch: false, output: '' }; - } - - const opts = options || {}; - const format = opts.format || (posix ? utils.toPosixSlashes : null); - let match = input === glob; - let output = match && format ? format(input) : input; - - if (match === false) { - output = format ? format(input) : input; - match = output === glob; - } - - if (match === false || opts.capture === true) { - if (opts.matchBase === true || opts.basename === true) { - match = picomatch.matchBase(input, regex, options, posix); - } else { - match = regex.exec(output); - } - } - - return { isMatch: Boolean(match), match, output }; - }; - - /** - * Match the basename of a filepath. - * - * ```js - * const picomatch = require('picomatch'); - * // picomatch.matchBase(input, glob[, options]); - * console.log(picomatch.matchBase('foo/bar.js', '*.js'); // true - * ``` - * @param {String} `input` String to test. - * @param {RegExp|String} `glob` Glob pattern or regex created by [.makeRe](#makeRe). - * @return {Boolean} - * @api public - */ - - picomatch.matchBase = (input, glob, options) => { - const regex = glob instanceof RegExp ? glob : picomatch.makeRe(glob, options); - return regex.test(utils.basename(input)); - }; - - /** - * Returns true if **any** of the given glob `patterns` match the specified `string`. - * - * ```js - * const picomatch = require('picomatch'); - * // picomatch.isMatch(string, patterns[, options]); - * - * console.log(picomatch.isMatch('a.a', ['b.*', '*.a'])); //=> true - * console.log(picomatch.isMatch('a.a', 'b.*')); //=> false - * ``` - * @param {String|Array} str The string to test. - * @param {String|Array} patterns One or more glob patterns to use for matching. - * @param {Object} [options] See available [options](#options). - * @return {Boolean} Returns true if any patterns match `str` - * @api public - */ - - picomatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str); - - /** - * Parse a glob pattern to create the source string for a regular - * expression. - * - * ```js - * const picomatch = require('picomatch'); - * const result = picomatch.parse(pattern[, options]); - * ``` - * @param {String} `pattern` - * @param {Object} `options` - * @return {Object} Returns an object with useful properties and output to be used as a regex source string. - * @api public - */ - - picomatch.parse = (pattern, options) => { - if (Array.isArray(pattern)) return pattern.map((p) => picomatch.parse(p, options)); - return parse$1(pattern, { ...options, fastpaths: false }); - }; - - /** - * Scan a glob pattern to separate the pattern into segments. - * - * ```js - * const picomatch = require('picomatch'); - * // picomatch.scan(input[, options]); - * - * const result = picomatch.scan('!./foo/*.js'); - * console.log(result); - * { prefix: '!./', - * input: '!./foo/*.js', - * start: 3, - * base: 'foo', - * glob: '*.js', - * isBrace: false, - * isBracket: false, - * isGlob: true, - * isExtglob: false, - * isGlobstar: false, - * negated: true } - * ``` - * @param {String} `input` Glob pattern to scan. - * @param {Object} `options` - * @return {Object} Returns an object with - * @api public - */ - - picomatch.scan = (input, options) => scan(input, options); - - /** - * Create a regular expression from a parsed glob pattern. - * - * ```js - * const picomatch = require('picomatch'); - * const state = picomatch.parse('*.js'); - * // picomatch.compileRe(state[, options]); - * - * console.log(picomatch.compileRe(state)); - * //=> /^(?:(?!\.)(?=.)[^/]*?\.js)$/ - * ``` - * @param {String} `state` The object returned from the `.parse` method. - * @param {Object} `options` - * @return {RegExp} Returns a regex created from the given pattern. - * @api public - */ - - picomatch.compileRe = (parsed, options, returnOutput = false, returnState = false) => { - if (returnOutput === true) { - return parsed.output; - } - - const opts = options || {}; - const prepend = opts.contains ? '' : '^'; - const append = opts.contains ? '' : '$'; - - let source = `${prepend}(?:${parsed.output})${append}`; - if (parsed && parsed.negated === true) { - source = `^(?!${source}).*$`; - } - - const regex = picomatch.toRegex(source, options); - if (returnState === true) { - regex.state = parsed; - } - - return regex; - }; - - picomatch.makeRe = (input, options, returnOutput = false, returnState = false) => { - if (!input || typeof input !== 'string') { - throw new TypeError('Expected a non-empty string'); - } - - const opts = options || {}; - let parsed = { negated: false, fastpaths: true }; - let prefix = ''; - let output; - - if (input.startsWith('./')) { - input = input.slice(2); - prefix = parsed.prefix = './'; - } - - if (opts.fastpaths !== false && (input[0] === '.' || input[0] === '*')) { - output = parse$1.fastpaths(input, options); - } - - if (output === undefined) { - parsed = parse$1(input, options); - parsed.prefix = prefix + (parsed.prefix || ''); - } else { - parsed.output = output; - } - - return picomatch.compileRe(parsed, options, returnOutput, returnState); - }; - - /** - * Create a regular expression from the given regex source string. - * - * ```js - * const picomatch = require('picomatch'); - * // picomatch.toRegex(source[, options]); - * - * const { output } = picomatch.parse('*.js'); - * console.log(picomatch.toRegex(output)); - * //=> /^(?:(?!\.)(?=.)[^/]*?\.js)$/ - * ``` - * @param {String} `source` Regular expression source string. - * @param {Object} `options` - * @return {RegExp} - * @api public - */ - - picomatch.toRegex = (source, options) => { - try { - const opts = options || {}; - return new RegExp(source, opts.flags || (opts.nocase ? 'i' : '')); - } catch (err) { - if (options && options.debug === true) throw err; - return /$^/; - } - }; - - /** - * Picomatch constants. - * @return {Object} - */ - - picomatch.constants = constants$1; - - /** - * Expose "picomatch" - */ - - var picomatch_1 = picomatch; - - var picomatchBrowser = picomatch_1; - - var pm = /*@__PURE__*/ getDefaultExportFromCjs(picomatchBrowser); - - function isArray(arg) { - return Array.isArray(arg); - } - function ensureArray(thing) { - if (isArray(thing)) return thing; - if (thing == null) return []; - return [thing]; - } - const globToTest = (glob) => { - const pattern = glob; - const fn = pm(pattern, { dot: true }); - return { - test: (what) => { - const result = fn(what); - return result; - } - }; - }; - const testTrue = { - test: () => true - }; - const getMatcher = (filter) => { - const bundleTest = 'bundle' in filter && filter.bundle != null ? globToTest(filter.bundle) : testTrue; - const fileTest = 'file' in filter && filter.file != null ? globToTest(filter.file) : testTrue; - return { bundleTest, fileTest }; - }; - const createFilter = (include, exclude) => { - const includeMatchers = ensureArray(include).map(getMatcher); - const excludeMatchers = ensureArray(exclude).map(getMatcher); - return (bundleId, id) => { - for (let i = 0; i < excludeMatchers.length; ++i) { - const { bundleTest, fileTest } = excludeMatchers[i]; - if (bundleTest.test(bundleId) && fileTest.test(id)) return false; - } - for (let i = 0; i < includeMatchers.length; ++i) { - const { bundleTest, fileTest } = includeMatchers[i]; - if (bundleTest.test(bundleId) && fileTest.test(id)) return true; - } - return !includeMatchers.length; - }; - }; - - const throttleFilter = (callback, limit) => { - let waiting = false; - return (val) => { - if (!waiting) { - callback(val); - waiting = true; - setTimeout(() => { - waiting = false; - }, limit); - } - }; - }; - const prepareFilter = (filt) => { - if (filt === '') return []; - return ( - filt - .split(',') - // remove spaces before and after - .map((entry) => entry.trim()) - // unquote " - .map((entry) => (entry.startsWith('"') && entry.endsWith('"') ? entry.substring(1, entry.length - 1) : entry)) - // unquote ' - .map((entry) => (entry.startsWith("'") && entry.endsWith("'") ? entry.substring(1, entry.length - 1) : entry)) - // remove empty strings - .filter((entry) => entry) - // parse bundle:file - .map((entry) => entry.split(':')) - // normalize entry just in case - .flatMap((entry) => { - if (entry.length === 0) return []; - let bundle = null; - let file = null; - if (entry.length === 1 && entry[0]) { - file = entry[0]; - return [{ file, bundle }]; - } - bundle = entry[0] || null; - file = entry.slice(1).join(':') || null; - return [{ bundle, file }]; - }) - ); - }; - const useFilter = () => { - const [includeFilter, setIncludeFilter] = h(''); - const [excludeFilter, setExcludeFilter] = h(''); - const setIncludeFilterTrottled = F(() => throttleFilter(setIncludeFilter, 200), []); - const setExcludeFilterTrottled = F(() => throttleFilter(setExcludeFilter, 200), []); - const isIncluded = F(() => createFilter(prepareFilter(includeFilter), prepareFilter(excludeFilter)), [includeFilter, excludeFilter]); - const getModuleFilterMultiplier = T( - (bundleId, data) => { - return isIncluded(bundleId, data.id) ? 1 : 0; - }, - [isIncluded] - ); - return { - getModuleFilterMultiplier, - includeFilter, - excludeFilter, - setExcludeFilter: setExcludeFilterTrottled, - setIncludeFilter: setIncludeFilterTrottled - }; - }; - - function ascending(a, b) { - return a == null || b == null ? NaN : a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN; - } - - function descending(a, b) { - return a == null || b == null ? NaN : b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN; - } - - function bisector(f) { - let compare1, compare2, delta; - - // If an accessor is specified, promote it to a comparator. In this case we - // can test whether the search value is (self-) comparable. We can’t do this - // for a comparator (except for specific, known comparators) because we can’t - // tell if the comparator is symmetric, and an asymmetric comparator can’t be - // used to test whether a single value is comparable. - if (f.length !== 2) { - compare1 = ascending; - compare2 = (d, x) => ascending(f(d), x); - delta = (d, x) => f(d) - x; - } else { - compare1 = f === ascending || f === descending ? f : zero$1; - compare2 = f; - delta = f; - } - - function left(a, x, lo = 0, hi = a.length) { - if (lo < hi) { - if (compare1(x, x) !== 0) return hi; - do { - const mid = (lo + hi) >>> 1; - if (compare2(a[mid], x) < 0) lo = mid + 1; - else hi = mid; - } while (lo < hi); - } - return lo; - } - - function right(a, x, lo = 0, hi = a.length) { - if (lo < hi) { - if (compare1(x, x) !== 0) return hi; - do { - const mid = (lo + hi) >>> 1; - if (compare2(a[mid], x) <= 0) lo = mid + 1; - else hi = mid; - } while (lo < hi); - } - return lo; - } - - function center(a, x, lo = 0, hi = a.length) { - const i = left(a, x, lo, hi - 1); - return i > lo && delta(a[i - 1], x) > -delta(a[i], x) ? i - 1 : i; - } - - return { left, center, right }; - } - - function zero$1() { - return 0; - } - - function number$1(x) { - return x === null ? NaN : +x; - } - - const ascendingBisect = bisector(ascending); - const bisectRight = ascendingBisect.right; - bisector(number$1).center; - var bisect = bisectRight; - - class InternMap extends Map { - constructor(entries, key = keyof) { - super(); - Object.defineProperties(this, { _intern: { value: new Map() }, _key: { value: key } }); - if (entries != null) for (const [key, value] of entries) this.set(key, value); - } - get(key) { - return super.get(intern_get(this, key)); - } - has(key) { - return super.has(intern_get(this, key)); - } - set(key, value) { - return super.set(intern_set(this, key), value); - } - delete(key) { - return super.delete(intern_delete(this, key)); - } - } - - function intern_get({ _intern, _key }, value) { - const key = _key(value); - return _intern.has(key) ? _intern.get(key) : value; - } - - function intern_set({ _intern, _key }, value) { - const key = _key(value); - if (_intern.has(key)) return _intern.get(key); - _intern.set(key, value); - return value; - } - - function intern_delete({ _intern, _key }, value) { - const key = _key(value); - if (_intern.has(key)) { - value = _intern.get(key); - _intern.delete(key); - } - return value; - } - - function keyof(value) { - return value !== null && typeof value === 'object' ? value.valueOf() : value; - } - - function identity$2(x) { - return x; - } - - function group(values, ...keys) { - return nest(values, identity$2, identity$2, keys); - } - - function nest(values, map, reduce, keys) { - return (function regroup(values, i) { - if (i >= keys.length) return reduce(values); - const groups = new InternMap(); - const keyof = keys[i++]; - let index = -1; - for (const value of values) { - const key = keyof(value, ++index, values); - const group = groups.get(key); - if (group) group.push(value); - else groups.set(key, [value]); - } - for (const [key, values] of groups) { - groups.set(key, regroup(values, i)); - } - return map(groups); - })(values, 0); - } - - const e10 = Math.sqrt(50), - e5 = Math.sqrt(10), - e2 = Math.sqrt(2); - - function tickSpec(start, stop, count) { - const step = (stop - start) / Math.max(0, count), - power = Math.floor(Math.log10(step)), - error = step / Math.pow(10, power), - factor = error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1; - let i1, i2, inc; - if (power < 0) { - inc = Math.pow(10, -power) / factor; - i1 = Math.round(start * inc); - i2 = Math.round(stop * inc); - if (i1 / inc < start) ++i1; - if (i2 / inc > stop) --i2; - inc = -inc; - } else { - inc = Math.pow(10, power) * factor; - i1 = Math.round(start / inc); - i2 = Math.round(stop / inc); - if (i1 * inc < start) ++i1; - if (i2 * inc > stop) --i2; - } - if (i2 < i1 && 0.5 <= count && count < 2) return tickSpec(start, stop, count * 2); - return [i1, i2, inc]; - } - - function ticks(start, stop, count) { - (stop = +stop), (start = +start), (count = +count); - if (!(count > 0)) return []; - if (start === stop) return [start]; - const reverse = stop < start, - [i1, i2, inc] = reverse ? tickSpec(stop, start, count) : tickSpec(start, stop, count); - if (!(i2 >= i1)) return []; - const n = i2 - i1 + 1, - ticks = new Array(n); - if (reverse) { - if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) / -inc; - else for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) * inc; - } else { - if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) / -inc; - else for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) * inc; - } - return ticks; - } - - function tickIncrement(start, stop, count) { - (stop = +stop), (start = +start), (count = +count); - return tickSpec(start, stop, count)[2]; - } - - function tickStep(start, stop, count) { - (stop = +stop), (start = +start), (count = +count); - const reverse = stop < start, - inc = reverse ? tickIncrement(stop, start, count) : tickIncrement(start, stop, count); - return (reverse ? -1 : 1) * (inc < 0 ? 1 / -inc : inc); - } - - const TOP_PADDING = 20; - const PADDING = 2; - - const Node = ({ node, onMouseOver, onClick, selected }) => { - const { getModuleColor } = q(StaticContext); - const { backgroundColor, fontColor } = getModuleColor(node); - const { x0, x1, y1, y0, data, children = null } = node; - const textRef = _(null); - const textRectRef = _(); - const width = x1 - x0; - const height = y1 - y0; - const textProps = { - 'font-size': '0.7em', - 'dominant-baseline': 'middle', - 'text-anchor': 'middle', - x: width / 2 - }; - if (children != null) { - textProps.y = (TOP_PADDING + PADDING) / 2; - } else { - textProps.y = height / 2; - } - y(() => { - if (width == 0 || height == 0 || !textRef.current) { - return; - } - if (textRectRef.current == null) { - textRectRef.current = textRef.current.getBoundingClientRect(); - } - let scale = 1; - if (children != null) { - scale = Math.min((width * 0.9) / textRectRef.current.width, Math.min(height, TOP_PADDING + PADDING) / textRectRef.current.height); - scale = Math.min(1, scale); - textRef.current.setAttribute('y', String(Math.min(TOP_PADDING + PADDING, height) / 2 / scale)); - textRef.current.setAttribute('x', String(width / 2 / scale)); - } else { - scale = Math.min((width * 0.9) / textRectRef.current.width, (height * 0.9) / textRectRef.current.height); - scale = Math.min(1, scale); - textRef.current.setAttribute('y', String(height / 2 / scale)); - textRef.current.setAttribute('x', String(width / 2 / scale)); - } - textRef.current.setAttribute('transform', `scale(${scale.toFixed(2)})`); - }, [children, height, width]); - if (width == 0 || height == 0) { - return null; - } - return u$1('g', { - className: 'node', - transform: `translate(${x0},${y0})`, - onClick: (event) => { - event.stopPropagation(); - onClick(node); - }, - onMouseOver: (event) => { - event.stopPropagation(); - onMouseOver(node); - }, - children: [ - u$1('rect', { - fill: backgroundColor, - rx: 2, - ry: 2, - width: x1 - x0, - height: y1 - y0, - stroke: selected ? '#fff' : undefined, - 'stroke-width': selected ? 2 : undefined - }), - u$1( - 'text', - Object.assign( - { - ref: textRef, - fill: fontColor, - onClick: (event) => { - var _a; - if (((_a = window.getSelection()) === null || _a === void 0 ? void 0 : _a.toString()) !== '') { - event.stopPropagation(); - } - } - }, - textProps, - { children: data.name } - ) - ) - ] - }); - }; - - const TreeMap = ({ root, onNodeHover, selectedNode, onNodeClick }) => { - const { width, height, getModuleIds } = q(StaticContext); - console.time('layering'); - // this will make groups by height - const nestedData = F(() => { - const nestedDataMap = group(root.descendants(), (d) => d.height); - const nestedData = Array.from(nestedDataMap, ([key, values]) => ({ - key, - values - })); - nestedData.sort((a, b) => b.key - a.key); - return nestedData; - }, [root]); - console.timeEnd('layering'); - return u$1('svg', { - xmlns: 'http://www.w3.org/2000/svg', - viewBox: `0 0 ${width} ${height}`, - children: nestedData.map(({ key, values }) => { - return u$1( - 'g', - { - className: 'layer', - children: values.map((node) => { - return u$1( - Node, - { node: node, onMouseOver: onNodeHover, selected: selectedNode === node, onClick: onNodeClick }, - getModuleIds(node.data).nodeUid.id - ); - }) - }, - key - ); - }) - }); - }; - - var bytes$1 = { exports: {} }; - - /*! - * bytes - * Copyright(c) 2012-2014 TJ Holowaychuk - * Copyright(c) 2015 Jed Watson - * MIT Licensed - */ - - /** - * Module exports. - * @public - */ - - bytes$1.exports = bytes; - var format_1 = (bytes$1.exports.format = format$1); - bytes$1.exports.parse = parse; - - /** - * Module variables. - * @private - */ - - var formatThousandsRegExp = /\B(?=(\d{3})+(?!\d))/g; - - var formatDecimalsRegExp = /(?:\.0*|(\.[^0]+)0+)$/; - - var map$1 = { - b: 1, - kb: 1 << 10, - mb: 1 << 20, - gb: 1 << 30, - tb: Math.pow(1024, 4), - pb: Math.pow(1024, 5) - }; - - var parseRegExp = /^((-|\+)?(\d+(?:\.\d+)?)) *(kb|mb|gb|tb|pb)$/i; - - /** - * Convert the given value in bytes into a string or parse to string to an integer in bytes. - * - * @param {string|number} value - * @param {{ - * case: [string], - * decimalPlaces: [number] - * fixedDecimals: [boolean] - * thousandsSeparator: [string] - * unitSeparator: [string] - * }} [options] bytes options. - * - * @returns {string|number|null} - */ - - function bytes(value, options) { - if (typeof value === 'string') { - return parse(value); - } - - if (typeof value === 'number') { - return format$1(value, options); - } - - return null; - } - - /** - * Format the given value in bytes into a string. - * - * If the value is negative, it is kept as such. If it is a float, - * it is rounded. - * - * @param {number} value - * @param {object} [options] - * @param {number} [options.decimalPlaces=2] - * @param {number} [options.fixedDecimals=false] - * @param {string} [options.thousandsSeparator=] - * @param {string} [options.unit=] - * @param {string} [options.unitSeparator=] - * - * @returns {string|null} - * @public - */ - - function format$1(value, options) { - if (!Number.isFinite(value)) { - return null; - } - - var mag = Math.abs(value); - var thousandsSeparator = (options && options.thousandsSeparator) || ''; - var unitSeparator = (options && options.unitSeparator) || ''; - var decimalPlaces = options && options.decimalPlaces !== undefined ? options.decimalPlaces : 2; - var fixedDecimals = Boolean(options && options.fixedDecimals); - var unit = (options && options.unit) || ''; - - if (!unit || !map$1[unit.toLowerCase()]) { - if (mag >= map$1.pb) { - unit = 'PB'; - } else if (mag >= map$1.tb) { - unit = 'TB'; - } else if (mag >= map$1.gb) { - unit = 'GB'; - } else if (mag >= map$1.mb) { - unit = 'MB'; - } else if (mag >= map$1.kb) { - unit = 'KB'; - } else { - unit = 'B'; - } - } - - var val = value / map$1[unit.toLowerCase()]; - var str = val.toFixed(decimalPlaces); - - if (!fixedDecimals) { - str = str.replace(formatDecimalsRegExp, '$1'); - } - - if (thousandsSeparator) { - str = str - .split('.') - .map(function (s, i) { - return i === 0 ? s.replace(formatThousandsRegExp, thousandsSeparator) : s; - }) - .join('.'); - } - - return str + unitSeparator + unit; - } - - /** - * Parse the string value into an integer in bytes. - * - * If no unit is given, it is assumed the value is in bytes. - * - * @param {number|string} val - * - * @returns {number|null} - * @public - */ - - function parse(val) { - if (typeof val === 'number' && !isNaN(val)) { - return val; - } - - if (typeof val !== 'string') { - return null; - } - - // Test if the string passed is valid - var results = parseRegExp.exec(val); - var floatValue; - var unit = 'b'; - - if (!results) { - // Nothing could be extracted from the given string - floatValue = parseInt(val, 10); - unit = 'b'; - } else { - // Retrieve the value and the unit - floatValue = parseFloat(results[1]); - unit = results[4].toLowerCase(); - } - - if (isNaN(floatValue)) { - return null; - } - - return Math.floor(map$1[unit] * floatValue); - } - - const Tooltip_marginX = 10; - const Tooltip_marginY = 30; - const SOURCEMAP_RENDERED = u$1('span', { - children: [ - ' ', - u$1('b', { children: LABELS.renderedLength }), - ' is a number of characters in the file after individual and ', - u$1('br', {}), - ' ', - 'whole bundle transformations according to sourcemap.' - ] - }); - const RENDRED = u$1('span', { - children: [u$1('b', { children: LABELS.renderedLength }), ' is a byte size of individual file after transformations and treeshake.'] - }); - const COMPRESSED = u$1('span', { - children: [ - u$1('b', { children: LABELS.gzipLength }), - ' and ', - u$1('b', { children: LABELS.brotliLength }), - ' is a byte size of individual file after individual transformations,', - u$1('br', {}), - ' treeshake and compression.' - ] - }); - const Tooltip = ({ node, visible, root, sizeProperty }) => { - const { availableSizeProperties, getModuleSize, data } = q(StaticContext); - const ref = _(null); - const [style, setStyle] = h({}); - const content = F(() => { - if (!node) return null; - const mainSize = getModuleSize(node.data, sizeProperty); - const percentageNum = (100 * mainSize) / getModuleSize(root.data, sizeProperty); - const percentage = percentageNum.toFixed(2); - const percentageString = percentage + '%'; - const path = node - .ancestors() - .reverse() - .map((d) => d.data.name) - .join('/'); - let dataNode = null; - if (!isModuleTree(node.data)) { - const mainUid = data.nodeParts[node.data.uid].metaUid; - dataNode = data.nodeMetas[mainUid]; - } - return u$1(g$1, { - children: [ - u$1('div', { children: path }), - availableSizeProperties.map((sizeProp) => { - if (sizeProp === sizeProperty) { - return u$1( - 'div', - { children: [u$1('b', { children: [LABELS[sizeProp], ': ', format_1(mainSize)] }), ' ', '(', percentageString, ')'] }, - sizeProp - ); - } else { - return u$1('div', { children: [LABELS[sizeProp], ': ', format_1(getModuleSize(node.data, sizeProp))] }, sizeProp); - } - }), - u$1('br', {}), - dataNode && - dataNode.importedBy.length > 0 && - u$1('div', { - children: [ - u$1('div', { children: [u$1('b', { children: 'Imported By' }), ':'] }), - dataNode.importedBy.map(({ uid }) => { - const id = data.nodeMetas[uid].id; - return u$1('div', { children: id }, id); - }) - ] - }), - u$1('br', {}), - u$1('small', { children: data.options.sourcemap ? SOURCEMAP_RENDERED : RENDRED }), - (data.options.gzip || data.options.brotli) && u$1(g$1, { children: [u$1('br', {}), u$1('small', { children: COMPRESSED })] }) - ] - }); - }, [availableSizeProperties, data, getModuleSize, node, root.data, sizeProperty]); - const updatePosition = (mouseCoords) => { - if (!ref.current) return; - const pos = { - left: mouseCoords.x + Tooltip_marginX, - top: mouseCoords.y + Tooltip_marginY - }; - const boundingRect = ref.current.getBoundingClientRect(); - if (pos.left + boundingRect.width > window.innerWidth) { - // Shifting horizontally - pos.left = window.innerWidth - boundingRect.width; - } - if (pos.top + boundingRect.height > window.innerHeight) { - // Flipping vertically - pos.top = mouseCoords.y - Tooltip_marginY - boundingRect.height; - } - setStyle(pos); - }; - p(() => { - const handleMouseMove = (event) => { - updatePosition({ - x: event.pageX, - y: event.pageY - }); - }; - document.addEventListener('mousemove', handleMouseMove, true); - return () => { - document.removeEventListener('mousemove', handleMouseMove, true); - }; - }, []); - return u$1('div', { className: `tooltip ${visible ? '' : 'tooltip-hidden'}`, ref: ref, style: style, children: content }); - }; - - const Chart = ({ root, sizeProperty, selectedNode, setSelectedNode }) => { - const [showTooltip, setShowTooltip] = h(false); - const [tooltipNode, setTooltipNode] = h(undefined); - p(() => { - const handleMouseOut = () => { - setShowTooltip(false); - }; - document.addEventListener('mouseover', handleMouseOut); - return () => { - document.removeEventListener('mouseover', handleMouseOut); - }; - }, []); - return u$1(g$1, { - children: [ - u$1(TreeMap, { - root: root, - onNodeHover: (node) => { - setTooltipNode(node); - setShowTooltip(true); - }, - selectedNode: selectedNode, - onNodeClick: (node) => { - setSelectedNode(selectedNode === node ? undefined : node); - } - }), - u$1(Tooltip, { visible: showTooltip, node: tooltipNode, root: root, sizeProperty: sizeProperty }) - ] - }); - }; - - const Main = () => { - const { availableSizeProperties, rawHierarchy, getModuleSize, layout, data } = q(StaticContext); - const [sizeProperty, setSizeProperty] = h(availableSizeProperties[0]); - const [selectedNode, setSelectedNode] = h(undefined); - const { getModuleFilterMultiplier, setExcludeFilter, setIncludeFilter } = useFilter(); - console.time('getNodeSizeMultiplier'); - const getNodeSizeMultiplier = F(() => { - const selectedMultiplier = 1; // selectedSize < rootSize * increaseFactor ? (rootSize * increaseFactor) / selectedSize : rootSize / selectedSize; - const nonSelectedMultiplier = 0; // 1 / selectedMultiplier - if (selectedNode === undefined) { - return () => 1; - } else if (isModuleTree(selectedNode.data)) { - const leaves = new Set(selectedNode.leaves().map((d) => d.data)); - return (node) => { - if (leaves.has(node)) { - return selectedMultiplier; - } - return nonSelectedMultiplier; - }; - } else { - return (node) => { - if (node === selectedNode.data) { - return selectedMultiplier; - } - return nonSelectedMultiplier; - }; - } - }, [getModuleSize, rawHierarchy.data, selectedNode, sizeProperty]); - console.timeEnd('getNodeSizeMultiplier'); - console.time('root hierarchy compute'); - // root here always be the same as rawHierarchy even after layouting - const root = F(() => { - const rootWithSizesAndSorted = rawHierarchy - .sum((node) => { - var _a; - if (isModuleTree(node)) return 0; - const meta = data.nodeMetas[data.nodeParts[node.uid].metaUid]; - const bundleId = (_a = Object.entries(meta.moduleParts).find(([bundleId, uid]) => uid == node.uid)) === null || _a === void 0 ? void 0 : _a[0]; - const ownSize = getModuleSize(node, sizeProperty); - const zoomMultiplier = getNodeSizeMultiplier(node); - const filterMultiplier = getModuleFilterMultiplier(bundleId, meta); - return ownSize * zoomMultiplier * filterMultiplier; - }) - .sort((a, b) => getModuleSize(a.data, sizeProperty) - getModuleSize(b.data, sizeProperty)); - return layout(rootWithSizesAndSorted); - }, [data, getModuleFilterMultiplier, getModuleSize, getNodeSizeMultiplier, layout, rawHierarchy, sizeProperty]); - console.timeEnd('root hierarchy compute'); - return u$1(g$1, { - children: [ - u$1(SideBar, { - sizeProperty: sizeProperty, - availableSizeProperties: availableSizeProperties, - setSizeProperty: setSizeProperty, - onExcludeChange: setExcludeFilter, - onIncludeChange: setIncludeFilter - }), - u$1(Chart, { root: root, sizeProperty: sizeProperty, selectedNode: selectedNode, setSelectedNode: setSelectedNode }) - ] - }); - }; - - function initRange(domain, range) { - switch (arguments.length) { - case 0: - break; - case 1: - this.range(domain); - break; - default: - this.range(range).domain(domain); - break; - } - return this; - } - - function initInterpolator(domain, interpolator) { - switch (arguments.length) { - case 0: - break; - case 1: { - if (typeof domain === 'function') this.interpolator(domain); - else this.range(domain); - break; - } - default: { - this.domain(domain); - if (typeof interpolator === 'function') this.interpolator(interpolator); - else this.range(interpolator); - break; - } - } - return this; - } - - function define(constructor, factory, prototype) { - constructor.prototype = factory.prototype = prototype; - prototype.constructor = constructor; - } - - function extend(parent, definition) { - var prototype = Object.create(parent.prototype); - for (var key in definition) prototype[key] = definition[key]; - return prototype; - } - - function Color() {} - - var darker = 0.7; - var brighter = 1 / darker; - - var reI = '\\s*([+-]?\\d+)\\s*', - reN = '\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*', - reP = '\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*', - reHex = /^#([0-9a-f]{3,8})$/, - reRgbInteger = new RegExp(`^rgb\\(${reI},${reI},${reI}\\)$`), - reRgbPercent = new RegExp(`^rgb\\(${reP},${reP},${reP}\\)$`), - reRgbaInteger = new RegExp(`^rgba\\(${reI},${reI},${reI},${reN}\\)$`), - reRgbaPercent = new RegExp(`^rgba\\(${reP},${reP},${reP},${reN}\\)$`), - reHslPercent = new RegExp(`^hsl\\(${reN},${reP},${reP}\\)$`), - reHslaPercent = new RegExp(`^hsla\\(${reN},${reP},${reP},${reN}\\)$`); - - var named = { - aliceblue: 0xf0f8ff, - antiquewhite: 0xfaebd7, - aqua: 0x00ffff, - aquamarine: 0x7fffd4, - azure: 0xf0ffff, - beige: 0xf5f5dc, - bisque: 0xffe4c4, - black: 0x000000, - blanchedalmond: 0xffebcd, - blue: 0x0000ff, - blueviolet: 0x8a2be2, - brown: 0xa52a2a, - burlywood: 0xdeb887, - cadetblue: 0x5f9ea0, - chartreuse: 0x7fff00, - chocolate: 0xd2691e, - coral: 0xff7f50, - cornflowerblue: 0x6495ed, - cornsilk: 0xfff8dc, - crimson: 0xdc143c, - cyan: 0x00ffff, - darkblue: 0x00008b, - darkcyan: 0x008b8b, - darkgoldenrod: 0xb8860b, - darkgray: 0xa9a9a9, - darkgreen: 0x006400, - darkgrey: 0xa9a9a9, - darkkhaki: 0xbdb76b, - darkmagenta: 0x8b008b, - darkolivegreen: 0x556b2f, - darkorange: 0xff8c00, - darkorchid: 0x9932cc, - darkred: 0x8b0000, - darksalmon: 0xe9967a, - darkseagreen: 0x8fbc8f, - darkslateblue: 0x483d8b, - darkslategray: 0x2f4f4f, - darkslategrey: 0x2f4f4f, - darkturquoise: 0x00ced1, - darkviolet: 0x9400d3, - deeppink: 0xff1493, - deepskyblue: 0x00bfff, - dimgray: 0x696969, - dimgrey: 0x696969, - dodgerblue: 0x1e90ff, - firebrick: 0xb22222, - floralwhite: 0xfffaf0, - forestgreen: 0x228b22, - fuchsia: 0xff00ff, - gainsboro: 0xdcdcdc, - ghostwhite: 0xf8f8ff, - gold: 0xffd700, - goldenrod: 0xdaa520, - gray: 0x808080, - green: 0x008000, - greenyellow: 0xadff2f, - grey: 0x808080, - honeydew: 0xf0fff0, - hotpink: 0xff69b4, - indianred: 0xcd5c5c, - indigo: 0x4b0082, - ivory: 0xfffff0, - khaki: 0xf0e68c, - lavender: 0xe6e6fa, - lavenderblush: 0xfff0f5, - lawngreen: 0x7cfc00, - lemonchiffon: 0xfffacd, - lightblue: 0xadd8e6, - lightcoral: 0xf08080, - lightcyan: 0xe0ffff, - lightgoldenrodyellow: 0xfafad2, - lightgray: 0xd3d3d3, - lightgreen: 0x90ee90, - lightgrey: 0xd3d3d3, - lightpink: 0xffb6c1, - lightsalmon: 0xffa07a, - lightseagreen: 0x20b2aa, - lightskyblue: 0x87cefa, - lightslategray: 0x778899, - lightslategrey: 0x778899, - lightsteelblue: 0xb0c4de, - lightyellow: 0xffffe0, - lime: 0x00ff00, - limegreen: 0x32cd32, - linen: 0xfaf0e6, - magenta: 0xff00ff, - maroon: 0x800000, - mediumaquamarine: 0x66cdaa, - mediumblue: 0x0000cd, - mediumorchid: 0xba55d3, - mediumpurple: 0x9370db, - mediumseagreen: 0x3cb371, - mediumslateblue: 0x7b68ee, - mediumspringgreen: 0x00fa9a, - mediumturquoise: 0x48d1cc, - mediumvioletred: 0xc71585, - midnightblue: 0x191970, - mintcream: 0xf5fffa, - mistyrose: 0xffe4e1, - moccasin: 0xffe4b5, - navajowhite: 0xffdead, - navy: 0x000080, - oldlace: 0xfdf5e6, - olive: 0x808000, - olivedrab: 0x6b8e23, - orange: 0xffa500, - orangered: 0xff4500, - orchid: 0xda70d6, - palegoldenrod: 0xeee8aa, - palegreen: 0x98fb98, - paleturquoise: 0xafeeee, - palevioletred: 0xdb7093, - papayawhip: 0xffefd5, - peachpuff: 0xffdab9, - peru: 0xcd853f, - pink: 0xffc0cb, - plum: 0xdda0dd, - powderblue: 0xb0e0e6, - purple: 0x800080, - rebeccapurple: 0x663399, - red: 0xff0000, - rosybrown: 0xbc8f8f, - royalblue: 0x4169e1, - saddlebrown: 0x8b4513, - salmon: 0xfa8072, - sandybrown: 0xf4a460, - seagreen: 0x2e8b57, - seashell: 0xfff5ee, - sienna: 0xa0522d, - silver: 0xc0c0c0, - skyblue: 0x87ceeb, - slateblue: 0x6a5acd, - slategray: 0x708090, - slategrey: 0x708090, - snow: 0xfffafa, - springgreen: 0x00ff7f, - steelblue: 0x4682b4, - tan: 0xd2b48c, - teal: 0x008080, - thistle: 0xd8bfd8, - tomato: 0xff6347, - turquoise: 0x40e0d0, - violet: 0xee82ee, - wheat: 0xf5deb3, - white: 0xffffff, - whitesmoke: 0xf5f5f5, - yellow: 0xffff00, - yellowgreen: 0x9acd32 - }; - - define(Color, color, { - copy(channels) { - return Object.assign(new this.constructor(), this, channels); - }, - displayable() { - return this.rgb().displayable(); - }, - hex: color_formatHex, // Deprecated! Use color.formatHex. - formatHex: color_formatHex, - formatHex8: color_formatHex8, - formatHsl: color_formatHsl, - formatRgb: color_formatRgb, - toString: color_formatRgb - }); - - function color_formatHex() { - return this.rgb().formatHex(); - } - - function color_formatHex8() { - return this.rgb().formatHex8(); - } - - function color_formatHsl() { - return hslConvert(this).formatHsl(); - } - - function color_formatRgb() { - return this.rgb().formatRgb(); - } - - function color(format) { - var m, l; - format = (format + '').trim().toLowerCase(); - return (m = reHex.exec(format)) - ? ((l = m[1].length), - (m = parseInt(m[1], 16)), - l === 6 - ? rgbn(m) // #ff0000 - : l === 3 - ? new Rgb(((m >> 8) & 0xf) | ((m >> 4) & 0xf0), ((m >> 4) & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00 - : l === 8 - ? rgba((m >> 24) & 0xff, (m >> 16) & 0xff, (m >> 8) & 0xff, (m & 0xff) / 0xff) // #ff000000 - : l === 4 - ? rgba( - ((m >> 12) & 0xf) | ((m >> 8) & 0xf0), - ((m >> 8) & 0xf) | ((m >> 4) & 0xf0), - ((m >> 4) & 0xf) | (m & 0xf0), - (((m & 0xf) << 4) | (m & 0xf)) / 0xff - ) // #f000 - : null) // invalid hex - : (m = reRgbInteger.exec(format)) - ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0) - : (m = reRgbPercent.exec(format)) - ? new Rgb((m[1] * 255) / 100, (m[2] * 255) / 100, (m[3] * 255) / 100, 1) // rgb(100%, 0%, 0%) - : (m = reRgbaInteger.exec(format)) - ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1) - : (m = reRgbaPercent.exec(format)) - ? rgba((m[1] * 255) / 100, (m[2] * 255) / 100, (m[3] * 255) / 100, m[4]) // rgb(100%, 0%, 0%, 1) - : (m = reHslPercent.exec(format)) - ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%) - : (m = reHslaPercent.exec(format)) - ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1) - : named.hasOwnProperty(format) - ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins - : format === 'transparent' - ? new Rgb(NaN, NaN, NaN, 0) - : null; - } - - function rgbn(n) { - return new Rgb((n >> 16) & 0xff, (n >> 8) & 0xff, n & 0xff, 1); - } - - function rgba(r, g, b, a) { - if (a <= 0) r = g = b = NaN; - return new Rgb(r, g, b, a); - } - - function rgbConvert(o) { - if (!(o instanceof Color)) o = color(o); - if (!o) return new Rgb(); - o = o.rgb(); - return new Rgb(o.r, o.g, o.b, o.opacity); - } - - function rgb$1(r, g, b, opacity) { - return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity); - } - - function Rgb(r, g, b, opacity) { - this.r = +r; - this.g = +g; - this.b = +b; - this.opacity = +opacity; - } - - define( - Rgb, - rgb$1, - extend(Color, { - brighter(k) { - k = k == null ? brighter : Math.pow(brighter, k); - return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity); - }, - darker(k) { - k = k == null ? darker : Math.pow(darker, k); - return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity); - }, - rgb() { - return this; - }, - clamp() { - return new Rgb(clampi(this.r), clampi(this.g), clampi(this.b), clampa(this.opacity)); - }, - displayable() { - return ( - -0.5 <= this.r && - this.r < 255.5 && - -0.5 <= this.g && - this.g < 255.5 && - -0.5 <= this.b && - this.b < 255.5 && - 0 <= this.opacity && - this.opacity <= 1 - ); - }, - hex: rgb_formatHex, // Deprecated! Use color.formatHex. - formatHex: rgb_formatHex, - formatHex8: rgb_formatHex8, - formatRgb: rgb_formatRgb, - toString: rgb_formatRgb - }) - ); - - function rgb_formatHex() { - return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}`; - } - - function rgb_formatHex8() { - return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}${hex((isNaN(this.opacity) ? 1 : this.opacity) * 255)}`; - } - - function rgb_formatRgb() { - const a = clampa(this.opacity); - return `${a === 1 ? 'rgb(' : 'rgba('}${clampi(this.r)}, ${clampi(this.g)}, ${clampi(this.b)}${a === 1 ? ')' : `, ${a})`}`; - } - - function clampa(opacity) { - return isNaN(opacity) ? 1 : Math.max(0, Math.min(1, opacity)); - } - - function clampi(value) { - return Math.max(0, Math.min(255, Math.round(value) || 0)); - } - - function hex(value) { - value = clampi(value); - return (value < 16 ? '0' : '') + value.toString(16); - } - - function hsla(h, s, l, a) { - if (a <= 0) h = s = l = NaN; - else if (l <= 0 || l >= 1) h = s = NaN; - else if (s <= 0) h = NaN; - return new Hsl(h, s, l, a); - } - - function hslConvert(o) { - if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity); - if (!(o instanceof Color)) o = color(o); - if (!o) return new Hsl(); - if (o instanceof Hsl) return o; - o = o.rgb(); - var r = o.r / 255, - g = o.g / 255, - b = o.b / 255, - min = Math.min(r, g, b), - max = Math.max(r, g, b), - h = NaN, - s = max - min, - l = (max + min) / 2; - if (s) { - if (r === max) h = (g - b) / s + (g < b) * 6; - else if (g === max) h = (b - r) / s + 2; - else h = (r - g) / s + 4; - s /= l < 0.5 ? max + min : 2 - max - min; - h *= 60; - } else { - s = l > 0 && l < 1 ? 0 : h; - } - return new Hsl(h, s, l, o.opacity); - } - - function hsl(h, s, l, opacity) { - return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity); - } - - function Hsl(h, s, l, opacity) { - this.h = +h; - this.s = +s; - this.l = +l; - this.opacity = +opacity; - } - - define( - Hsl, - hsl, - extend(Color, { - brighter(k) { - k = k == null ? brighter : Math.pow(brighter, k); - return new Hsl(this.h, this.s, this.l * k, this.opacity); - }, - darker(k) { - k = k == null ? darker : Math.pow(darker, k); - return new Hsl(this.h, this.s, this.l * k, this.opacity); - }, - rgb() { - var h = (this.h % 360) + (this.h < 0) * 360, - s = isNaN(h) || isNaN(this.s) ? 0 : this.s, - l = this.l, - m2 = l + (l < 0.5 ? l : 1 - l) * s, - m1 = 2 * l - m2; - return new Rgb(hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2), hsl2rgb(h, m1, m2), hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2), this.opacity); - }, - clamp() { - return new Hsl(clamph(this.h), clampt(this.s), clampt(this.l), clampa(this.opacity)); - }, - displayable() { - return ((0 <= this.s && this.s <= 1) || isNaN(this.s)) && 0 <= this.l && this.l <= 1 && 0 <= this.opacity && this.opacity <= 1; - }, - formatHsl() { - const a = clampa(this.opacity); - return `${a === 1 ? 'hsl(' : 'hsla('}${clamph(this.h)}, ${clampt(this.s) * 100}%, ${clampt(this.l) * 100}%${a === 1 ? ')' : `, ${a})`}`; - } - }) - ); - - function clamph(value) { - value = (value || 0) % 360; - return value < 0 ? value + 360 : value; - } - - function clampt(value) { - return Math.max(0, Math.min(1, value || 0)); - } - - /* From FvD 13.37, CSS Color Module Level 3 */ - function hsl2rgb(h, m1, m2) { - return (h < 60 ? m1 + ((m2 - m1) * h) / 60 : h < 180 ? m2 : h < 240 ? m1 + ((m2 - m1) * (240 - h)) / 60 : m1) * 255; - } - - var constant = (x) => () => x; - - function linear$1(a, d) { - return function (t) { - return a + t * d; - }; - } - - function exponential(a, b, y) { - return ( - (a = Math.pow(a, y)), - (b = Math.pow(b, y) - a), - (y = 1 / y), - function (t) { - return Math.pow(a + t * b, y); - } - ); - } - - function gamma(y) { - return (y = +y) === 1 - ? nogamma - : function (a, b) { - return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a); - }; - } - - function nogamma(a, b) { - var d = b - a; - return d ? linear$1(a, d) : constant(isNaN(a) ? b : a); - } - - var rgb = (function rgbGamma(y) { - var color = gamma(y); - - function rgb(start, end) { - var r = color((start = rgb$1(start)).r, (end = rgb$1(end)).r), - g = color(start.g, end.g), - b = color(start.b, end.b), - opacity = nogamma(start.opacity, end.opacity); - return function (t) { - start.r = r(t); - start.g = g(t); - start.b = b(t); - start.opacity = opacity(t); - return start + ''; - }; - } - - rgb.gamma = rgbGamma; - - return rgb; - })(1); - - function numberArray(a, b) { - if (!b) b = []; - var n = a ? Math.min(b.length, a.length) : 0, - c = b.slice(), - i; - return function (t) { - for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t; - return c; - }; - } - - function isNumberArray(x) { - return ArrayBuffer.isView(x) && !(x instanceof DataView); - } - - function genericArray(a, b) { - var nb = b ? b.length : 0, - na = a ? Math.min(nb, a.length) : 0, - x = new Array(na), - c = new Array(nb), - i; - - for (i = 0; i < na; ++i) x[i] = interpolate(a[i], b[i]); - for (; i < nb; ++i) c[i] = b[i]; - - return function (t) { - for (i = 0; i < na; ++i) c[i] = x[i](t); - return c; - }; - } - - function date(a, b) { - var d = new Date(); - return ( - (a = +a), - (b = +b), - function (t) { - return d.setTime(a * (1 - t) + b * t), d; - } - ); - } - - function interpolateNumber(a, b) { - return ( - (a = +a), - (b = +b), - function (t) { - return a * (1 - t) + b * t; - } - ); - } - - function object(a, b) { - var i = {}, - c = {}, - k; - - if (a === null || typeof a !== 'object') a = {}; - if (b === null || typeof b !== 'object') b = {}; - - for (k in b) { - if (k in a) { - i[k] = interpolate(a[k], b[k]); - } else { - c[k] = b[k]; - } - } - - return function (t) { - for (k in i) c[k] = i[k](t); - return c; - }; - } - - var reA = /[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g, - reB = new RegExp(reA.source, 'g'); - - function zero(b) { - return function () { - return b; - }; - } - - function one(b) { - return function (t) { - return b(t) + ''; - }; - } - - function string(a, b) { - var bi = (reA.lastIndex = reB.lastIndex = 0), // scan index for next number in b - am, // current match in a - bm, // current match in b - bs, // string preceding current number in b, if any - i = -1, // index in s - s = [], // string constants and placeholders - q = []; // number interpolators - - // Coerce inputs to strings. - (a = a + ''), (b = b + ''); - - // Interpolate pairs of numbers in a & b. - while ((am = reA.exec(a)) && (bm = reB.exec(b))) { - if ((bs = bm.index) > bi) { - // a string precedes the next number in b - bs = b.slice(bi, bs); - if (s[i]) - s[i] += bs; // coalesce with previous string - else s[++i] = bs; - } - if ((am = am[0]) === (bm = bm[0])) { - // numbers in a & b match - if (s[i]) - s[i] += bm; // coalesce with previous string - else s[++i] = bm; - } else { - // interpolate non-matching numbers - s[++i] = null; - q.push({ i: i, x: interpolateNumber(am, bm) }); - } - bi = reB.lastIndex; - } - - // Add remains of b. - if (bi < b.length) { - bs = b.slice(bi); - if (s[i]) - s[i] += bs; // coalesce with previous string - else s[++i] = bs; - } - - // Special optimization for only a single match. - // Otherwise, interpolate each of the numbers and rejoin the string. - return s.length < 2 - ? q[0] - ? one(q[0].x) - : zero(b) - : ((b = q.length), - function (t) { - for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t); - return s.join(''); - }); - } - - function interpolate(a, b) { - var t = typeof b, - c; - return b == null || t === 'boolean' - ? constant(b) - : (t === 'number' - ? interpolateNumber - : t === 'string' - ? (c = color(b)) - ? ((b = c), rgb) - : string - : b instanceof color - ? rgb - : b instanceof Date - ? date - : isNumberArray(b) - ? numberArray - : Array.isArray(b) - ? genericArray - : (typeof b.valueOf !== 'function' && typeof b.toString !== 'function') || isNaN(b) - ? object - : interpolateNumber)(a, b); - } - - function interpolateRound(a, b) { - return ( - (a = +a), - (b = +b), - function (t) { - return Math.round(a * (1 - t) + b * t); - } - ); - } - - function constants(x) { - return function () { - return x; - }; - } - - function number(x) { - return +x; - } - - var unit = [0, 1]; - - function identity$1(x) { - return x; - } - - function normalize(a, b) { - return (b -= a = +a) - ? function (x) { - return (x - a) / b; - } - : constants(isNaN(b) ? NaN : 0.5); - } - - function clamper(a, b) { - var t; - if (a > b) (t = a), (a = b), (b = t); - return function (x) { - return Math.max(a, Math.min(b, x)); - }; - } - - // normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1]. - // interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b]. - function bimap(domain, range, interpolate) { - var d0 = domain[0], - d1 = domain[1], - r0 = range[0], - r1 = range[1]; - if (d1 < d0) (d0 = normalize(d1, d0)), (r0 = interpolate(r1, r0)); - else (d0 = normalize(d0, d1)), (r0 = interpolate(r0, r1)); - return function (x) { - return r0(d0(x)); - }; - } - - function polymap(domain, range, interpolate) { - var j = Math.min(domain.length, range.length) - 1, - d = new Array(j), - r = new Array(j), - i = -1; - - // Reverse descending domains. - if (domain[j] < domain[0]) { - domain = domain.slice().reverse(); - range = range.slice().reverse(); - } - - while (++i < j) { - d[i] = normalize(domain[i], domain[i + 1]); - r[i] = interpolate(range[i], range[i + 1]); - } - - return function (x) { - var i = bisect(domain, x, 1, j) - 1; - return r[i](d[i](x)); - }; - } - - function copy$1(source, target) { - return target.domain(source.domain()).range(source.range()).interpolate(source.interpolate()).clamp(source.clamp()).unknown(source.unknown()); - } - - function transformer$1() { - var domain = unit, - range = unit, - interpolate$1 = interpolate, - transform, - untransform, - unknown, - clamp = identity$1, - piecewise, - output, - input; - - function rescale() { - var n = Math.min(domain.length, range.length); - if (clamp !== identity$1) clamp = clamper(domain[0], domain[n - 1]); - piecewise = n > 2 ? polymap : bimap; - output = input = null; - return scale; - } - - function scale(x) { - return x == null || isNaN((x = +x)) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate$1)))(transform(clamp(x))); - } - - scale.invert = function (y) { - return clamp(untransform((input || (input = piecewise(range, domain.map(transform), interpolateNumber)))(y))); - }; - - scale.domain = function (_) { - return arguments.length ? ((domain = Array.from(_, number)), rescale()) : domain.slice(); - }; - - scale.range = function (_) { - return arguments.length ? ((range = Array.from(_)), rescale()) : range.slice(); - }; - - scale.rangeRound = function (_) { - return (range = Array.from(_)), (interpolate$1 = interpolateRound), rescale(); - }; - - scale.clamp = function (_) { - return arguments.length ? ((clamp = _ ? true : identity$1), rescale()) : clamp !== identity$1; - }; - - scale.interpolate = function (_) { - return arguments.length ? ((interpolate$1 = _), rescale()) : interpolate$1; - }; - - scale.unknown = function (_) { - return arguments.length ? ((unknown = _), scale) : unknown; - }; - - return function (t, u) { - (transform = t), (untransform = u); - return rescale(); - }; - } - - function continuous() { - return transformer$1()(identity$1, identity$1); - } - - function formatDecimal(x) { - return Math.abs((x = Math.round(x))) >= 1e21 ? x.toLocaleString('en').replace(/,/g, '') : x.toString(10); - } - - // Computes the decimal coefficient and exponent of the specified number x with - // significant digits p, where x is positive and p is in [1, 21] or undefined. - // For example, formatDecimalParts(1.23) returns ["123", 0]. - function formatDecimalParts(x, p) { - if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf('e')) < 0) return null; // NaN, ±Infinity - var i, - coefficient = x.slice(0, i); - - // The string returned by toExponential either has the form \d\.\d+e[-+]\d+ - // (e.g., 1.2e+3) or the form \de[-+]\d+ (e.g., 1e+3). - return [coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient, +x.slice(i + 1)]; - } - - function exponent(x) { - return (x = formatDecimalParts(Math.abs(x))), x ? x[1] : NaN; - } - - function formatGroup(grouping, thousands) { - return function (value, width) { - var i = value.length, - t = [], - j = 0, - g = grouping[0], - length = 0; - - while (i > 0 && g > 0) { - if (length + g + 1 > width) g = Math.max(1, width - length); - t.push(value.substring((i -= g), i + g)); - if ((length += g + 1) > width) break; - g = grouping[(j = (j + 1) % grouping.length)]; - } - - return t.reverse().join(thousands); - }; - } - - function formatNumerals(numerals) { - return function (value) { - return value.replace(/[0-9]/g, function (i) { - return numerals[+i]; - }); - }; - } - - // [[fill]align][sign][symbol][0][width][,][.precision][~][type] - var re = /^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i; - - function formatSpecifier(specifier) { - if (!(match = re.exec(specifier))) throw new Error('invalid format: ' + specifier); - var match; - return new FormatSpecifier({ - fill: match[1], - align: match[2], - sign: match[3], - symbol: match[4], - zero: match[5], - width: match[6], - comma: match[7], - precision: match[8] && match[8].slice(1), - trim: match[9], - type: match[10] - }); - } - - formatSpecifier.prototype = FormatSpecifier.prototype; // instanceof - - function FormatSpecifier(specifier) { - this.fill = specifier.fill === undefined ? ' ' : specifier.fill + ''; - this.align = specifier.align === undefined ? '>' : specifier.align + ''; - this.sign = specifier.sign === undefined ? '-' : specifier.sign + ''; - this.symbol = specifier.symbol === undefined ? '' : specifier.symbol + ''; - this.zero = !!specifier.zero; - this.width = specifier.width === undefined ? undefined : +specifier.width; - this.comma = !!specifier.comma; - this.precision = specifier.precision === undefined ? undefined : +specifier.precision; - this.trim = !!specifier.trim; - this.type = specifier.type === undefined ? '' : specifier.type + ''; - } - - FormatSpecifier.prototype.toString = function () { - return ( - this.fill + - this.align + - this.sign + - this.symbol + - (this.zero ? '0' : '') + - (this.width === undefined ? '' : Math.max(1, this.width | 0)) + - (this.comma ? ',' : '') + - (this.precision === undefined ? '' : '.' + Math.max(0, this.precision | 0)) + - (this.trim ? '~' : '') + - this.type - ); - }; - - // Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k. - function formatTrim(s) { - out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) { - switch (s[i]) { - case '.': - i0 = i1 = i; - break; - case '0': - if (i0 === 0) i0 = i; - i1 = i; - break; - default: - if (!+s[i]) break out; - if (i0 > 0) i0 = 0; - break; - } - } - return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s; - } - - var prefixExponent; - - function formatPrefixAuto(x, p) { - var d = formatDecimalParts(x, p); - if (!d) return x + ''; - var coefficient = d[0], - exponent = d[1], - i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1, - n = coefficient.length; - return i === n - ? coefficient - : i > n - ? coefficient + new Array(i - n + 1).join('0') - : i > 0 - ? coefficient.slice(0, i) + '.' + coefficient.slice(i) - : '0.' + new Array(1 - i).join('0') + formatDecimalParts(x, Math.max(0, p + i - 1))[0]; // less than 1y! - } - - function formatRounded(x, p) { - var d = formatDecimalParts(x, p); - if (!d) return x + ''; - var coefficient = d[0], - exponent = d[1]; - return exponent < 0 - ? '0.' + new Array(-exponent).join('0') + coefficient - : coefficient.length > exponent + 1 - ? coefficient.slice(0, exponent + 1) + '.' + coefficient.slice(exponent + 1) - : coefficient + new Array(exponent - coefficient.length + 2).join('0'); - } - - var formatTypes = { - '%': (x, p) => (x * 100).toFixed(p), - b: (x) => Math.round(x).toString(2), - c: (x) => x + '', - d: formatDecimal, - e: (x, p) => x.toExponential(p), - f: (x, p) => x.toFixed(p), - g: (x, p) => x.toPrecision(p), - o: (x) => Math.round(x).toString(8), - p: (x, p) => formatRounded(x * 100, p), - r: formatRounded, - s: formatPrefixAuto, - X: (x) => Math.round(x).toString(16).toUpperCase(), - x: (x) => Math.round(x).toString(16) - }; - - function identity(x) { - return x; - } - - var map = Array.prototype.map, - prefixes = ['y', 'z', 'a', 'f', 'p', 'n', 'µ', 'm', '', 'k', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y']; - - function formatLocale(locale) { - var group = - locale.grouping === undefined || locale.thousands === undefined - ? identity - : formatGroup(map.call(locale.grouping, Number), locale.thousands + ''), - currencyPrefix = locale.currency === undefined ? '' : locale.currency[0] + '', - currencySuffix = locale.currency === undefined ? '' : locale.currency[1] + '', - decimal = locale.decimal === undefined ? '.' : locale.decimal + '', - numerals = locale.numerals === undefined ? identity : formatNumerals(map.call(locale.numerals, String)), - percent = locale.percent === undefined ? '%' : locale.percent + '', - minus = locale.minus === undefined ? '−' : locale.minus + '', - nan = locale.nan === undefined ? 'NaN' : locale.nan + ''; - - function newFormat(specifier) { - specifier = formatSpecifier(specifier); - - var fill = specifier.fill, - align = specifier.align, - sign = specifier.sign, - symbol = specifier.symbol, - zero = specifier.zero, - width = specifier.width, - comma = specifier.comma, - precision = specifier.precision, - trim = specifier.trim, - type = specifier.type; - - // The "n" type is an alias for ",g". - if (type === 'n') (comma = true), (type = 'g'); - // The "" type, and any invalid type, is an alias for ".12~g". - else if (!formatTypes[type]) precision === undefined && (precision = 12), (trim = true), (type = 'g'); - - // If zero fill is specified, padding goes after sign and before digits. - if (zero || (fill === '0' && align === '=')) (zero = true), (fill = '0'), (align = '='); - - // Compute the prefix and suffix. - // For SI-prefix, the suffix is lazily computed. - var prefix = symbol === '$' ? currencyPrefix : symbol === '#' && /[boxX]/.test(type) ? '0' + type.toLowerCase() : '', - suffix = symbol === '$' ? currencySuffix : /[%p]/.test(type) ? percent : ''; - - // What format function should we use? - // Is this an integer type? - // Can this type generate exponential notation? - var formatType = formatTypes[type], - maybeSuffix = /[defgprs%]/.test(type); - - // Set the default precision if not specified, - // or clamp the specified precision to the supported range. - // For significant precision, it must be in [1, 21]. - // For fixed precision, it must be in [0, 20]. - precision = precision === undefined ? 6 : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision)) : Math.max(0, Math.min(20, precision)); - - function format(value) { - var valuePrefix = prefix, - valueSuffix = suffix, - i, - n, - c; - - if (type === 'c') { - valueSuffix = formatType(value) + valueSuffix; - value = ''; - } else { - value = +value; - - // Determine the sign. -0 is not less than 0, but 1 / -0 is! - var valueNegative = value < 0 || 1 / value < 0; - - // Perform the initial formatting. - value = isNaN(value) ? nan : formatType(Math.abs(value), precision); - - // Trim insignificant zeros. - if (trim) value = formatTrim(value); - - // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign. - if (valueNegative && +value === 0 && sign !== '+') valueNegative = false; - - // Compute the prefix and suffix. - valuePrefix = (valueNegative ? (sign === '(' ? sign : minus) : sign === '-' || sign === '(' ? '' : sign) + valuePrefix; - valueSuffix = (type === 's' ? prefixes[8 + prefixExponent / 3] : '') + valueSuffix + (valueNegative && sign === '(' ? ')' : ''); - - // Break the formatted value into the integer “value” part that can be - // grouped, and fractional or exponential “suffix” part that is not. - if (maybeSuffix) { - (i = -1), (n = value.length); - while (++i < n) { - if (((c = value.charCodeAt(i)), 48 > c || c > 57)) { - valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix; - value = value.slice(0, i); - break; - } - } - } - } - - // If the fill character is not "0", grouping is applied before padding. - if (comma && !zero) value = group(value, Infinity); - - // Compute the padding. - var length = valuePrefix.length + value.length + valueSuffix.length, - padding = length < width ? new Array(width - length + 1).join(fill) : ''; - - // If the fill character is "0", grouping is applied after padding. - if (comma && zero) (value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity)), (padding = ''); - - // Reconstruct the final output based on the desired alignment. - switch (align) { - case '<': - value = valuePrefix + value + valueSuffix + padding; - break; - case '=': - value = valuePrefix + padding + value + valueSuffix; - break; - case '^': - value = padding.slice(0, (length = padding.length >> 1)) + valuePrefix + value + valueSuffix + padding.slice(length); - break; - default: - value = padding + valuePrefix + value + valueSuffix; - break; - } - - return numerals(value); - } - - format.toString = function () { - return specifier + ''; - }; - - return format; - } - - function formatPrefix(specifier, value) { - var f = newFormat(((specifier = formatSpecifier(specifier)), (specifier.type = 'f'), specifier)), - e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3, - k = Math.pow(10, -e), - prefix = prefixes[8 + e / 3]; - return function (value) { - return f(k * value) + prefix; - }; - } - - return { - format: newFormat, - formatPrefix: formatPrefix - }; - } - - var locale; - var format; - var formatPrefix; - - defaultLocale({ - thousands: ',', - grouping: [3], - currency: ['$', ''] - }); - - function defaultLocale(definition) { - locale = formatLocale(definition); - format = locale.format; - formatPrefix = locale.formatPrefix; - return locale; - } - - function precisionFixed(step) { - return Math.max(0, -exponent(Math.abs(step))); - } - - function precisionPrefix(step, value) { - return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step))); - } - - function precisionRound(step, max) { - (step = Math.abs(step)), (max = Math.abs(max) - step); - return Math.max(0, exponent(max) - exponent(step)) + 1; - } - - function tickFormat(start, stop, count, specifier) { - var step = tickStep(start, stop, count), - precision; - specifier = formatSpecifier(specifier == null ? ',f' : specifier); - switch (specifier.type) { - case 's': { - var value = Math.max(Math.abs(start), Math.abs(stop)); - if (specifier.precision == null && !isNaN((precision = precisionPrefix(step, value)))) specifier.precision = precision; - return formatPrefix(specifier, value); - } - case '': - case 'e': - case 'g': - case 'p': - case 'r': { - if (specifier.precision == null && !isNaN((precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop)))))) - specifier.precision = precision - (specifier.type === 'e'); - break; - } - case 'f': - case '%': { - if (specifier.precision == null && !isNaN((precision = precisionFixed(step)))) specifier.precision = precision - (specifier.type === '%') * 2; - break; - } - } - return format(specifier); - } - - function linearish(scale) { - var domain = scale.domain; - - scale.ticks = function (count) { - var d = domain(); - return ticks(d[0], d[d.length - 1], count == null ? 10 : count); - }; - - scale.tickFormat = function (count, specifier) { - var d = domain(); - return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier); - }; - - scale.nice = function (count) { - if (count == null) count = 10; - - var d = domain(); - var i0 = 0; - var i1 = d.length - 1; - var start = d[i0]; - var stop = d[i1]; - var prestep; - var step; - var maxIter = 10; - - if (stop < start) { - (step = start), (start = stop), (stop = step); - (step = i0), (i0 = i1), (i1 = step); - } - - while (maxIter-- > 0) { - step = tickIncrement(start, stop, count); - if (step === prestep) { - d[i0] = start; - d[i1] = stop; - return domain(d); - } else if (step > 0) { - start = Math.floor(start / step) * step; - stop = Math.ceil(stop / step) * step; - } else if (step < 0) { - start = Math.ceil(start * step) / step; - stop = Math.floor(stop * step) / step; - } else { - break; - } - prestep = step; - } - - return scale; - }; - - return scale; - } - - function linear() { - var scale = continuous(); - - scale.copy = function () { - return copy$1(scale, linear()); - }; - - initRange.apply(scale, arguments); - - return linearish(scale); - } - - function transformer() { - var x0 = 0, - x1 = 1, - t0, - t1, - k10, - transform, - interpolator = identity$1, - clamp = false, - unknown; - - function scale(x) { - return x == null || isNaN((x = +x)) - ? unknown - : interpolator(k10 === 0 ? 0.5 : ((x = (transform(x) - t0) * k10), clamp ? Math.max(0, Math.min(1, x)) : x)); - } - - scale.domain = function (_) { - return arguments.length - ? (([x0, x1] = _), (t0 = transform((x0 = +x0))), (t1 = transform((x1 = +x1))), (k10 = t0 === t1 ? 0 : 1 / (t1 - t0)), scale) - : [x0, x1]; - }; - - scale.clamp = function (_) { - return arguments.length ? ((clamp = !!_), scale) : clamp; - }; - - scale.interpolator = function (_) { - return arguments.length ? ((interpolator = _), scale) : interpolator; - }; - - function range(interpolate) { - return function (_) { - var r0, r1; - return arguments.length ? (([r0, r1] = _), (interpolator = interpolate(r0, r1)), scale) : [interpolator(0), interpolator(1)]; - }; - } - - scale.range = range(interpolate); - - scale.rangeRound = range(interpolateRound); - - scale.unknown = function (_) { - return arguments.length ? ((unknown = _), scale) : unknown; - }; - - return function (t) { - (transform = t), (t0 = t(x0)), (t1 = t(x1)), (k10 = t0 === t1 ? 0 : 1 / (t1 - t0)); - return scale; - }; - } - - function copy(source, target) { - return target.domain(source.domain()).interpolator(source.interpolator()).clamp(source.clamp()).unknown(source.unknown()); - } - - function sequential() { - var scale = linearish(transformer()(identity$1)); - - scale.copy = function () { - return copy(scale, sequential()); - }; - - return initInterpolator.apply(scale, arguments); - } - - const COLOR_BASE = '#cecece'; - - // https://www.w3.org/TR/WCAG20/#relativeluminancedef - const rc = 0.2126; - const gc = 0.7152; - const bc = 0.0722; - // low-gamma adjust coefficient - const lowc = 1 / 12.92; - function adjustGamma(p) { - return Math.pow((p + 0.055) / 1.055, 2.4); - } - function relativeLuminance(o) { - const rsrgb = o.r / 255; - const gsrgb = o.g / 255; - const bsrgb = o.b / 255; - const r = rsrgb <= 0.03928 ? rsrgb * lowc : adjustGamma(rsrgb); - const g = gsrgb <= 0.03928 ? gsrgb * lowc : adjustGamma(gsrgb); - const b = bsrgb <= 0.03928 ? bsrgb * lowc : adjustGamma(bsrgb); - return r * rc + g * gc + b * bc; - } - const createRainbowColor = (root) => { - const colorParentMap = new Map(); - colorParentMap.set(root, COLOR_BASE); - if (root.children != null) { - const colorScale = sequential([0, root.children.length], (n) => hsl(360 * n, 0.3, 0.85)); - root.children.forEach((c, id) => { - colorParentMap.set(c, colorScale(id).toString()); - }); - } - const colorMap = new Map(); - const lightScale = linear().domain([0, root.height]).range([0.9, 0.3]); - const getBackgroundColor = (node) => { - const parents = node.ancestors(); - const colorStr = parents.length === 1 ? colorParentMap.get(parents[0]) : colorParentMap.get(parents[parents.length - 2]); - const hslColor = hsl(colorStr); - hslColor.l = lightScale(node.depth); - return hslColor; - }; - return (node) => { - if (!colorMap.has(node)) { - const backgroundColor = getBackgroundColor(node); - const l = relativeLuminance(backgroundColor.rgb()); - const fontColor = l > 0.19 ? '#000' : '#fff'; - colorMap.set(node, { - backgroundColor: backgroundColor.toString(), - fontColor - }); - } - return colorMap.get(node); - }; - }; - - const StaticContext = F$1({}); - const drawChart = (parentNode, data, width, height) => { - const availableSizeProperties = getAvailableSizeOptions(data.options); - console.time('layout create'); - const layout = treemap() - .size([width, height]) - .paddingOuter(PADDING) - .paddingTop(TOP_PADDING) - .paddingInner(PADDING) - .round(true) - .tile(treemapResquarify); - console.timeEnd('layout create'); - console.time('rawHierarchy create'); - const rawHierarchy = hierarchy(data.tree); - console.timeEnd('rawHierarchy create'); - const nodeSizesCache = new Map(); - const nodeIdsCache = new Map(); - const getModuleSize = (node, sizeKey) => { - var _a, _b; - return (_b = (_a = nodeSizesCache.get(node)) === null || _a === void 0 ? void 0 : _a[sizeKey]) !== null && _b !== void 0 ? _b : 0; - }; - console.time('rawHierarchy eachAfter cache'); - rawHierarchy.eachAfter((node) => { - var _a; - const nodeData = node.data; - nodeIdsCache.set(nodeData, { - nodeUid: generateUniqueId('node'), - clipUid: generateUniqueId('clip') - }); - const sizes = { renderedLength: 0, gzipLength: 0, brotliLength: 0 }; - if (isModuleTree(nodeData)) { - for (const sizeKey of availableSizeProperties) { - sizes[sizeKey] = nodeData.children.reduce((acc, child) => getModuleSize(child, sizeKey) + acc, 0); - } - } else { - for (const sizeKey of availableSizeProperties) { - sizes[sizeKey] = (_a = data.nodeParts[nodeData.uid][sizeKey]) !== null && _a !== void 0 ? _a : 0; - } - } - nodeSizesCache.set(nodeData, sizes); - }); - console.timeEnd('rawHierarchy eachAfter cache'); - const getModuleIds = (node) => nodeIdsCache.get(node); - console.time('color'); - const getModuleColor = createRainbowColor(rawHierarchy); - console.timeEnd('color'); - q$1( - u$1(StaticContext.Provider, { - value: { - data, - availableSizeProperties, - width, - height, - getModuleSize, - getModuleIds, - getModuleColor, - rawHierarchy, - layout - }, - children: u$1(Main, {}) - }), - parentNode - ); - }; - - exports.StaticContext = StaticContext; - exports.default = drawChart; - - Object.defineProperty(exports, '__esModule', { value: true }); - - return exports; - })({}); - - /*-->*/ - - - - diff --git a/package-lock.json b/package-lock.json index 19798e9c..b2ec0e50 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,10 +9,10 @@ "version": "1.0.0-alpha.6", "license": "AGPL-3.0-or-later", "dependencies": { - "html-react-parser": "5.1.6" + "html-react-parser": "5.1.7" }, "devDependencies": { - "@types/react": "18.2.55", + "@types/react": "18.2.57", "nodemon": "3.0.3", "npm-run-all": "4.1.5", "picocolors": "1.0.0", @@ -221,9 +221,9 @@ "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" }, "node_modules/@types/react": { - "version": "18.2.55", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.55.tgz", - "integrity": "sha512-Y2Tz5P4yz23brwm2d7jNon39qoAtMMmalOQv6+fEFt1mT+FcM3D841wDpoUvFXhaYenuROCy3FZYqdTjM7qVyA==", + "version": "18.2.57", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.57.tgz", + "integrity": "sha512-ZvQsktJgSYrQiMirAN60y4O/LRevIV8hUzSOSNB6gfR3/o3wCBFQx3sPwIYtuDMeiVgsSS3UzCV26tEzgnfvQw==", "dependencies": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -1183,11 +1183,11 @@ } }, "node_modules/html-react-parser": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/html-react-parser/-/html-react-parser-5.1.6.tgz", - "integrity": "sha512-kx3QLNoeEUNfCRBeOfjPLa6d2RWrcqr9sv7vKD0/cKu1wWnYGAgMYDpChiqEoBDQ1YTS5QxrpSsuItamFszRXg==", + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/html-react-parser/-/html-react-parser-5.1.7.tgz", + "integrity": "sha512-clDscCPYxpZbKLAXJVw3DIiuklZejb5ChK+yXMaA7KKuc0c74ep8jY40pUvMo2WnUU7GB3/hAike/ZAfQ+Ybkw==", "dependencies": { - "@types/react": "18.2.55", + "@types/react": "17 || 18", "domhandler": "5.0.3", "html-dom-parser": "5.0.8", "react-property": "2.0.2", diff --git a/package.json b/package.json index 679be825..9b6f7e45 100644 --- a/package.json +++ b/package.json @@ -41,10 +41,10 @@ "react": ">=16.x" }, "dependencies": { - "html-react-parser": "5.1.6" + "html-react-parser": "5.1.7" }, "devDependencies": { - "@types/react": "18.2.55", + "@types/react": "18.2.57", "nodemon": "3.0.3", "npm-run-all": "4.1.5", "picocolors": "1.0.0",