@yahoo/uds-icons 0.0.2 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/generated/iconNames.cjs +1 -1
- package/dist/generated/iconNames.d.cts +1 -1
- package/dist/generated/iconNames.d.ts +1 -1
- package/dist/generated/iconNames.js +1 -1
- package/dist/generated/icons/A11Y.cjs +1 -1
- package/dist/generated/icons/A11Y.js +1 -1
- package/dist/generated/icons/Accessible.cjs +1 -1
- package/dist/generated/icons/Accessible.js +1 -1
- package/dist/generated/icons/AccountRefresh.cjs +1 -1
- package/dist/generated/icons/AccountRefresh.js +1 -1
- package/dist/generated/icons/AccountSwitchAlt.cjs +1 -1
- package/dist/generated/icons/AccountSwitchAlt.js +1 -1
- package/dist/generated/icons/AccountSwitcher.cjs +1 -1
- package/dist/generated/icons/AccountSwitcher.js +1 -1
- package/dist/generated/icons/AcousticGuitar.cjs +1 -1
- package/dist/generated/icons/AcousticGuitar.js +1 -1
- package/dist/generated/icons/AddBell.cjs +1 -1
- package/dist/generated/icons/AddBell.js +1 -1
- package/dist/generated/icons/AddCalendar.cjs +1 -1
- package/dist/generated/icons/AddCalendar.js +1 -1
- package/dist/generated/icons/AddCheckCircle.cjs +1 -1
- package/dist/generated/icons/AddCheckCircle.js +1 -1
- package/dist/generated/icons/AddCircle.cjs +1 -1
- package/dist/generated/icons/AddCircle.js +1 -1
- package/dist/generated/icons/AddDocument.cjs +1 -1
- package/dist/generated/icons/AddDocument.js +1 -1
- package/dist/generated/icons/AddFace.cjs +1 -1
- package/dist/generated/icons/AddFace.js +1 -1
- package/dist/generated/icons/AddPeople.cjs +1 -1
- package/dist/generated/icons/AddPeople.js +1 -1
- package/dist/generated/icons/AddQuestion.cjs +1 -1
- package/dist/generated/icons/AddQuestion.js +1 -1
- package/dist/generated/icons/AffiliateLink.cjs +2 -2
- package/dist/generated/icons/AffiliateLink.js +2 -2
- package/dist/generated/icons/Airplane.cjs +1 -1
- package/dist/generated/icons/Airplane.js +1 -1
- package/dist/generated/icons/AirplaneTakeOff.cjs +1 -1
- package/dist/generated/icons/AirplaneTakeOff.js +1 -1
- package/dist/generated/icons/AppSwitcher.cjs +1 -1
- package/dist/generated/icons/AppSwitcher.js +1 -1
- package/dist/generated/icons/ArrowDown.cjs +1 -1
- package/dist/generated/icons/ArrowDown.js +1 -1
- package/dist/generated/icons/ArrowLeft.cjs +2 -2
- package/dist/generated/icons/ArrowLeft.js +2 -2
- package/dist/generated/icons/ArrowLineUp.cjs +1 -1
- package/dist/generated/icons/ArrowLineUp.js +1 -1
- package/dist/generated/icons/ArrowRight.cjs +2 -2
- package/dist/generated/icons/ArrowRight.js +2 -2
- package/dist/generated/icons/ArrowUp.cjs +2 -2
- package/dist/generated/icons/ArrowUp.js +2 -2
- package/dist/generated/icons/BackTimeTen.cjs +1 -1
- package/dist/generated/icons/BackTimeTen.js +1 -1
- package/dist/generated/icons/Badge.cjs +1 -1
- package/dist/generated/icons/Badge.js +1 -1
- package/dist/generated/icons/Baseball.cjs +1 -1
- package/dist/generated/icons/Baseball.js +1 -1
- package/dist/generated/icons/Basketball.cjs +1 -1
- package/dist/generated/icons/Basketball.js +1 -1
- package/dist/generated/icons/Bed.cjs +1 -1
- package/dist/generated/icons/Bed.js +1 -1
- package/dist/generated/icons/BusFront.cjs +1 -1
- package/dist/generated/icons/BusFront.js +1 -1
- package/dist/generated/icons/Cake.cjs +1 -1
- package/dist/generated/icons/Cake.js +1 -1
- package/dist/generated/icons/CalendarConfirm.cjs +1 -1
- package/dist/generated/icons/CalendarConfirm.js +1 -1
- package/dist/generated/icons/Car.cjs +1 -1
- package/dist/generated/icons/Car.js +1 -1
- package/dist/generated/icons/ChatAi.cjs +2 -2
- package/dist/generated/icons/ChatAi.js +2 -2
- package/dist/generated/icons/CheckCircle.cjs +1 -1
- package/dist/generated/icons/CheckCircle.js +1 -1
- package/dist/generated/icons/CheckEnvelope.cjs +1 -1
- package/dist/generated/icons/CheckEnvelope.js +2 -2
- package/dist/generated/icons/CheckPeople.cjs +2 -2
- package/dist/generated/icons/CheckPeople.js +2 -2
- package/dist/generated/icons/ChevronLeftPeople.cjs +1 -1
- package/dist/generated/icons/ChevronLeftPeople.js +1 -1
- package/dist/generated/icons/ChevronRightPeople.cjs +2 -2
- package/dist/generated/icons/ChevronRightPeople.js +2 -2
- package/dist/generated/icons/Clipboard.cjs +1 -1
- package/dist/generated/icons/Clipboard.js +1 -1
- package/dist/generated/icons/Clock.cjs +1 -1
- package/dist/generated/icons/Clock.js +1 -1
- package/dist/generated/icons/CloudDay.cjs +1 -1
- package/dist/generated/icons/CloudDay.js +1 -1
- package/dist/generated/icons/Cog.cjs +1 -1
- package/dist/generated/icons/Cog.js +1 -1
- package/dist/generated/icons/Compass.cjs +1 -1
- package/dist/generated/icons/Compass.js +1 -1
- package/dist/generated/icons/ConnectionScreen.cjs +1 -1
- package/dist/generated/icons/ConnectionScreen.js +1 -1
- package/dist/generated/icons/ConvertAlt.cjs +2 -2
- package/dist/generated/icons/ConvertAlt.js +2 -2
- package/dist/generated/icons/ConvertLeft.cjs +1 -1
- package/dist/generated/icons/ConvertLeft.js +1 -1
- package/dist/generated/icons/ConvertRight.cjs +2 -2
- package/dist/generated/icons/ConvertRight.js +2 -2
- package/dist/generated/icons/CrescentMoon.cjs +1 -1
- package/dist/generated/icons/CrescentMoon.js +1 -1
- package/dist/generated/icons/CrossCircle.cjs +1 -1
- package/dist/generated/icons/CrossCircle.js +1 -1
- package/dist/generated/icons/CrossPeople.cjs +2 -2
- package/dist/generated/icons/CrossPeople.js +2 -2
- package/dist/generated/icons/DeliveryPackage.cjs +1 -1
- package/dist/generated/icons/DeliveryPackage.js +1 -1
- package/dist/generated/icons/DenyCircle.cjs +1 -1
- package/dist/generated/icons/DenyCircle.js +1 -1
- package/dist/generated/icons/DiagonalKey.cjs +1 -1
- package/dist/generated/icons/DiagonalKey.js +1 -1
- package/dist/generated/icons/DiagonalLeftUp.cjs +1 -1
- package/dist/generated/icons/DiagonalLeftUp.js +1 -1
- package/dist/generated/icons/Direction.cjs +1 -1
- package/dist/generated/icons/Direction.js +1 -1
- package/dist/generated/icons/DiscoBall.cjs +1 -1
- package/dist/generated/icons/DiscoBall.js +1 -1
- package/dist/generated/icons/DoubleBigLeftArrow.cjs +1 -1
- package/dist/generated/icons/DoubleBigLeftArrow.js +1 -1
- package/dist/generated/icons/DoubleChervronLeft.cjs +1 -1
- package/dist/generated/icons/DoubleChervronLeft.js +1 -1
- package/dist/generated/icons/DownCurveArrow.cjs +1 -1
- package/dist/generated/icons/DownCurveArrow.js +1 -1
- package/dist/generated/icons/Dusk.cjs +1 -1
- package/dist/generated/icons/Dusk.js +1 -1
- package/dist/generated/icons/Eclipse.cjs +1 -1
- package/dist/generated/icons/Eclipse.js +1 -1
- package/dist/generated/icons/Edit.cjs +1 -1
- package/dist/generated/icons/Edit.js +1 -1
- package/dist/generated/icons/Eye.cjs +1 -1
- package/dist/generated/icons/Eye.js +1 -1
- package/dist/generated/icons/EyeSearch.cjs +1 -1
- package/dist/generated/icons/EyeSearch.js +1 -1
- package/dist/generated/icons/EyeShut.cjs +1 -1
- package/dist/generated/icons/EyeShut.js +1 -1
- package/dist/generated/icons/FingerPointLeftArrow.cjs +1 -1
- package/dist/generated/icons/FingerPointLeftArrow.js +1 -1
- package/dist/generated/icons/FingerPointRightArrow.cjs +1 -1
- package/dist/generated/icons/FingerPointRightArrow.js +1 -1
- package/dist/generated/icons/FingerPrint.cjs +1 -1
- package/dist/generated/icons/FingerPrint.js +1 -1
- package/dist/generated/icons/Fire.cjs +1 -1
- package/dist/generated/icons/Fire.js +1 -1
- package/dist/generated/icons/FirstAidKit.cjs +2 -2
- package/dist/generated/icons/FirstAidKit.js +2 -2
- package/dist/generated/icons/FirstQuarter.cjs +1 -1
- package/dist/generated/icons/FirstQuarter.js +1 -1
- package/dist/generated/icons/FlowerDaisy.cjs +1 -1
- package/dist/generated/icons/FlowerDaisy.js +1 -1
- package/dist/generated/icons/FogDay.cjs +1 -1
- package/dist/generated/icons/FogDay.js +1 -1
- package/dist/generated/icons/FourCornersMusicNote.cjs +1 -1
- package/dist/generated/icons/FourCornersMusicNote.js +1 -1
- package/dist/generated/icons/GraduationHat.cjs +1 -1
- package/dist/generated/icons/GraduationHat.js +1 -1
- package/dist/generated/icons/HalfStar.cjs +1 -1
- package/dist/generated/icons/HalfStar.js +1 -1
- package/dist/generated/icons/HappyFace.cjs +2 -2
- package/dist/generated/icons/HappyFace.js +2 -2
- package/dist/generated/icons/HazeDay.cjs +1 -1
- package/dist/generated/icons/HazeDay.js +1 -1
- package/dist/generated/icons/HazeNight.cjs +1 -1
- package/dist/generated/icons/HazeNight.js +1 -1
- package/dist/generated/icons/Heart.cjs +1 -1
- package/dist/generated/icons/Heart.js +1 -1
- package/dist/generated/icons/HeartArrow.cjs +1 -1
- package/dist/generated/icons/HeartArrow.js +1 -1
- package/dist/generated/icons/HeavyRainLightning.cjs +1 -1
- package/dist/generated/icons/HeavyRainLightning.js +1 -1
- package/dist/generated/icons/HeavyRainLightningDay.cjs +1 -1
- package/dist/generated/icons/HeavyRainLightningDay.js +1 -1
- package/dist/generated/icons/HeavyRainLightningNight.cjs +1 -1
- package/dist/generated/icons/HeavyRainLightningNight.js +1 -1
- package/dist/generated/icons/Home.cjs +1 -1
- package/dist/generated/icons/Home.js +1 -1
- package/dist/generated/icons/HotTub.cjs +1 -1
- package/dist/generated/icons/HotTub.js +1 -1
- package/dist/generated/icons/Hurricane.cjs +1 -1
- package/dist/generated/icons/Hurricane.js +1 -1
- package/dist/generated/icons/Infinity.cjs +1 -1
- package/dist/generated/icons/Infinity.js +1 -1
- package/dist/generated/icons/JoyfulFace.cjs +1 -1
- package/dist/generated/icons/JoyfulFace.js +1 -1
- package/dist/generated/icons/Keyboard.cjs +1 -1
- package/dist/generated/icons/Keyboard.js +1 -1
- package/dist/generated/icons/LifeRing.cjs +1 -1
- package/dist/generated/icons/LifeRing.js +1 -1
- package/dist/generated/icons/LightningDay.cjs +1 -1
- package/dist/generated/icons/LightningDay.js +1 -1
- package/dist/generated/icons/LightningNight.cjs +1 -1
- package/dist/generated/icons/LightningNight.js +1 -1
- package/dist/generated/icons/Link.cjs +1 -1
- package/dist/generated/icons/Link.js +1 -1
- package/dist/generated/icons/LocationCircle.cjs +1 -1
- package/dist/generated/icons/LocationCircle.js +1 -1
- package/dist/generated/icons/LocationMap.cjs +1 -1
- package/dist/generated/icons/LocationMap.js +1 -1
- package/dist/generated/icons/Lock.cjs +1 -1
- package/dist/generated/icons/Lock.js +1 -1
- package/dist/generated/icons/Lollipop.cjs +1 -1
- package/dist/generated/icons/Lollipop.js +1 -1
- package/dist/generated/icons/Mannequin.cjs +1 -1
- package/dist/generated/icons/Mannequin.js +1 -1
- package/dist/generated/icons/MedicinePill.cjs +1 -1
- package/dist/generated/icons/MedicinePill.js +1 -1
- package/dist/generated/icons/Microphone.cjs +1 -1
- package/dist/generated/icons/Microphone.js +1 -1
- package/dist/generated/icons/Microscope.cjs +2 -2
- package/dist/generated/icons/Microscope.js +2 -2
- package/dist/generated/icons/MinusCircle.cjs +1 -1
- package/dist/generated/icons/MinusCircle.js +1 -1
- package/dist/generated/icons/MinusPeople.cjs +1 -1
- package/dist/generated/icons/MinusPeople.js +1 -1
- package/dist/generated/icons/NeutralFace.cjs +1 -1
- package/dist/generated/icons/NeutralFace.js +1 -1
- package/dist/generated/icons/Night.cjs +1 -1
- package/dist/generated/icons/Night.js +1 -1
- package/dist/generated/icons/NoBell.cjs +1 -1
- package/dist/generated/icons/NoBell.js +1 -1
- package/dist/generated/icons/NoEye.cjs +1 -1
- package/dist/generated/icons/NoEye.js +1 -1
- package/dist/generated/icons/NoPeople.cjs +1 -1
- package/dist/generated/icons/NoPeople.js +1 -1
- package/dist/generated/icons/NoShield.cjs +1 -1
- package/dist/generated/icons/NoShield.js +1 -1
- package/dist/generated/icons/NoSmoking.cjs +1 -1
- package/dist/generated/icons/NoSmoking.js +1 -1
- package/dist/generated/icons/NoVideoCamera.cjs +1 -1
- package/dist/generated/icons/NoVideoCamera.js +1 -1
- package/dist/generated/icons/NoWifi.cjs +1 -1
- package/dist/generated/icons/NoWifi.js +1 -1
- package/dist/generated/icons/PaperPlaneDiagonal.cjs +1 -1
- package/dist/generated/icons/PaperPlaneDiagonal.js +1 -1
- package/dist/generated/icons/Paperclip.cjs +1 -1
- package/dist/generated/icons/Paperclip.js +1 -1
- package/dist/generated/icons/PayphoneFace.cjs +1 -1
- package/dist/generated/icons/PayphoneFace.js +1 -1
- package/dist/generated/icons/Pencil.cjs +1 -1
- package/dist/generated/icons/Pencil.js +1 -1
- package/dist/generated/icons/PencilLines.cjs +1 -1
- package/dist/generated/icons/PencilLines.js +1 -1
- package/dist/generated/icons/People.cjs +1 -1
- package/dist/generated/icons/People.js +1 -1
- package/dist/generated/icons/Person.cjs +1 -1
- package/dist/generated/icons/Person.js +1 -1
- package/dist/generated/icons/Pin.cjs +1 -1
- package/dist/generated/icons/Pin.js +1 -1
- package/dist/generated/icons/PlayCircle.cjs +2 -2
- package/dist/generated/icons/PlayCircle.js +2 -2
- package/dist/generated/icons/PowerSwitch.cjs +1 -1
- package/dist/generated/icons/PowerSwitch.js +1 -1
- package/dist/generated/icons/Profile.cjs +1 -1
- package/dist/generated/icons/Profile.js +1 -1
- package/dist/generated/icons/QuestionBubble.cjs +1 -1
- package/dist/generated/icons/QuestionBubble.js +1 -1
- package/dist/generated/icons/RainDay.cjs +1 -1
- package/dist/generated/icons/RainDay.js +1 -1
- package/dist/generated/icons/RainNight.cjs +2 -2
- package/dist/generated/icons/RainNight.js +2 -2
- package/dist/generated/icons/Receipt.cjs +1 -1
- package/dist/generated/icons/Receipt.js +1 -1
- package/dist/generated/icons/RedoPencil.cjs +1 -1
- package/dist/generated/icons/RedoPencil.js +1 -1
- package/dist/generated/icons/RetailTag.cjs +1 -1
- package/dist/generated/icons/RetailTag.js +1 -1
- package/dist/generated/icons/RightCurveArrow.cjs +1 -1
- package/dist/generated/icons/RightCurveArrow.js +1 -1
- package/dist/generated/icons/SadFace.cjs +1 -1
- package/dist/generated/icons/SadFace.js +1 -1
- package/dist/generated/icons/SadderFace.cjs +1 -1
- package/dist/generated/icons/SadderFace.js +1 -1
- package/dist/generated/icons/SearchConfirm.cjs +1 -1
- package/dist/generated/icons/SearchConfirm.js +1 -1
- package/dist/generated/icons/SearchWorldWithLines.cjs +1 -1
- package/dist/generated/icons/SearchWorldWithLines.js +1 -1
- package/dist/generated/icons/SettingsCogPeople.cjs +1 -1
- package/dist/generated/icons/SettingsCogPeople.js +1 -1
- package/dist/generated/icons/Shapes.cjs +1 -1
- package/dist/generated/icons/Shapes.js +1 -1
- package/dist/generated/icons/Shield.cjs +1 -1
- package/dist/generated/icons/Shield.js +1 -1
- package/dist/generated/icons/ShockedFace.cjs +1 -1
- package/dist/generated/icons/ShockedFace.js +1 -1
- package/dist/generated/icons/SkipTimeTen.cjs +1 -1
- package/dist/generated/icons/SkipTimeTen.js +1 -1
- package/dist/generated/icons/Skull.cjs +1 -1
- package/dist/generated/icons/Skull.js +1 -1
- package/dist/generated/icons/SmileFace.cjs +1 -1
- package/dist/generated/icons/SmileFace.js +1 -1
- package/dist/generated/icons/Sneaker.cjs +1 -1
- package/dist/generated/icons/Sneaker.js +1 -1
- package/dist/generated/icons/Snow.cjs +1 -1
- package/dist/generated/icons/Snow.js +1 -1
- package/dist/generated/icons/SnowDay.cjs +1 -1
- package/dist/generated/icons/SnowDay.js +1 -1
- package/dist/generated/icons/Snowflake.cjs +1 -1
- package/dist/generated/icons/Snowflake.js +1 -1
- package/dist/generated/icons/Soccer.cjs +1 -1
- package/dist/generated/icons/Soccer.js +1 -1
- package/dist/generated/icons/Spa.cjs +1 -1
- package/dist/generated/icons/Spa.js +1 -1
- package/dist/generated/icons/SparkleTennisBall.cjs +1 -1
- package/dist/generated/icons/SparkleTennisBall.js +1 -1
- package/dist/generated/icons/SpeechBubble.cjs +2 -2
- package/dist/generated/icons/SpeechBubble.js +2 -2
- package/dist/generated/icons/SpinkleDay.cjs +1 -1
- package/dist/generated/icons/SpinkleDay.js +1 -1
- package/dist/generated/icons/SpinkleNight.cjs +1 -1
- package/dist/generated/icons/SpinkleNight.js +1 -1
- package/dist/generated/icons/Star.cjs +1 -1
- package/dist/generated/icons/Star.js +1 -1
- package/dist/generated/icons/StarMedal.cjs +1 -1
- package/dist/generated/icons/StarMedal.js +1 -1
- package/dist/generated/icons/Stopwatch.cjs +2 -2
- package/dist/generated/icons/Stopwatch.js +2 -2
- package/dist/generated/icons/Sun.cjs +1 -1
- package/dist/generated/icons/Sun.js +1 -1
- package/dist/generated/icons/Sunrise.cjs +1 -1
- package/dist/generated/icons/Sunrise.js +1 -1
- package/dist/generated/icons/Sunset.cjs +2 -2
- package/dist/generated/icons/Sunset.js +2 -2
- package/dist/generated/icons/Swimming.cjs +1 -1
- package/dist/generated/icons/Swimming.js +1 -1
- package/dist/generated/icons/ThirdQuarter.cjs +7 -0
- package/dist/generated/icons/ThirdQuarter.d.cts +6 -0
- package/dist/generated/icons/ThirdQuarter.d.ts +6 -0
- package/dist/generated/icons/ThirdQuarter.js +5 -0
- package/dist/generated/icons/Trending.cjs +1 -1
- package/dist/generated/icons/Trending.js +1 -1
- package/dist/generated/icons/Tsunami.cjs +1 -1
- package/dist/generated/icons/Tsunami.js +1 -1
- package/dist/generated/icons/TwoCorners.cjs +1 -1
- package/dist/generated/icons/TwoCorners.js +1 -1
- package/dist/generated/icons/Unlock.cjs +1 -1
- package/dist/generated/icons/Unlock.js +1 -1
- package/dist/generated/icons/UpCurveArrow.cjs +1 -1
- package/dist/generated/icons/UpCurveArrow.js +1 -1
- package/dist/generated/icons/Verification.cjs +1 -1
- package/dist/generated/icons/Verification.js +1 -1
- package/dist/generated/icons/Virus.cjs +2 -2
- package/dist/generated/icons/Virus.js +2 -2
- package/dist/generated/icons/WaningGibbous.cjs +1 -1
- package/dist/generated/icons/WaningGibbous.js +1 -1
- package/dist/generated/icons/Warning.cjs +1 -1
- package/dist/generated/icons/Warning.js +1 -1
- package/dist/generated/icons/WaxingCrescent.cjs +1 -1
- package/dist/generated/icons/WaxingCrescent.js +1 -1
- package/dist/generated/icons/WaxingGibbous.cjs +1 -1
- package/dist/generated/icons/WaxingGibbous.js +1 -1
- package/dist/generated/icons/Wifi.cjs +1 -1
- package/dist/generated/icons/Wifi.js +1 -1
- package/dist/generated/icons/Wind.cjs +1 -1
- package/dist/generated/icons/Wind.js +1 -1
- package/dist/generated/icons/WindCloudDay.cjs +1 -1
- package/dist/generated/icons/WindCloudDay.js +1 -1
- package/dist/generated/icons/WindCloudNight.cjs +1 -1
- package/dist/generated/icons/WindCloudNight.js +1 -1
- package/dist/generated/icons/WorldWithLines.cjs +1 -1
- package/dist/generated/icons/WorldWithLines.js +1 -1
- package/dist/generated/icons/Wrench.cjs +1 -1
- package/dist/generated/icons/Wrench.js +1 -1
- package/dist/generated/icons/WritingAi.cjs +1 -1
- package/dist/generated/icons/WritingAi.js +1 -1
- package/dist/generated/icons/index.cjs +5 -0
- package/dist/generated/icons/index.d.cts +1 -0
- package/dist/generated/icons/index.d.ts +1 -0
- package/dist/generated/icons/index.js +1 -0
- package/dist/src/index.d.cts +1 -0
- package/dist/src/index.d.ts +1 -0
- package/package.json +1 -1
- package/README.md +0 -463
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx, Fragment, jsxs } from 'react/jsx-runtime';
|
|
2
2
|
|
|
3
|
-
const o=({size:h,variant:a})=>{if(a==="outline")switch(h){case"sm":return jsx(Fragment,{children:jsx("path",{fill:"currentColor",d:"M.65 14.298C.65 6.75 6.366 1.15 14 1.15h.956l-.112.95L14 2l.844.1v.007l-.
|
|
3
|
+
const o=({size:h,variant:a})=>{if(a==="outline")switch(h){case"sm":return jsx(Fragment,{children:jsx("path",{fill:"currentColor",d:"M.65 14.298C.65 6.75 6.366 1.15 14 1.15h.956l-.112.95L14 2l.844.1v.007l-.002.014-.007.045-.024.152a9.6 9.6 0 0 1-.686 2.207c-.583 1.293-1.654 2.863-3.575 3.727l-.167.075H9.31l.442.495a.85.85 0 0 1 .016 1.114l-.02.023c.65.548.02-.023.02-.023l-.001.001-.002.002-.004.005-.013.015a4 4 0 0 1-.192.207 8 8 0 0 1-.547.508 7.5 7.5 0 0 1-1.993 1.222c-.76.307-1.555.34-2.213.34H2.518q-.116.69-.152 1.414H14.85v1.7H.65zm2.28-3.763h1.872c.629 0 1.14-.04 1.575-.216a5.8 5.8 0 0 0 1.565-.97L6.688 7.943l-.048-.215.829-.187-.83.187v-.007l-.002-.008-.004-.02a1 1 0 0 1-.015-.232.87.87 0 0 1 .873-.835h2.52c1.315-.649 2.1-1.77 2.564-2.8.152-.336.266-.655.351-.935-4.845.384-8.607 3.363-9.995 7.643"})});case"md":return jsx(Fragment,{children:jsx("path",{fill:"currentColor",d:"M2.972 19.76c0-9.217 7.59-16.67 16.918-16.67h1.115l-.236 1.09-.88-.19.88.19v.004l-.002.005-.003.017a7 7 0 0 1-.063.254 15.7 15.7 0 0 1-1.116 2.925c-.852 1.691-2.298 3.745-4.623 4.792l-.176.079h-1.691a22 22 0 0 0 .625.65l.115.112.028.027.007.006.627.584-.552.655-.688-.58.688.58-.001.002-.002.002-.005.006-.016.019-.055.06q-.068.076-.194.206a9 9 0 0 1-.711.652c-.606.503-1.493 1.118-2.588 1.518-.759.278-1.54.316-2.208.316H5.019a15 15 0 0 0-.233 2.038h6.793v1.8H2.972zm2.502-4.489h2.69c.62 0 1.14-.042 1.59-.207.842-.307 1.551-.792 2.058-1.212q.09-.075.172-.148l-.001-.001a23 23 0 0 1-1.469-1.717.96.96 0 0 1-.178-.792.94.94 0 0 1 .917-.738h3.139c1.688-.826 2.84-2.4 3.585-3.88.303-.602.53-1.171.694-1.637-6.226.488-11.38 4.686-13.197 10.332m7.108 3.838h2.601v1.8h-2.6zm2.502-2.304h1.602v4.005l4.005-4.805h-1.602V12z"})});case"lg":return jsx(Fragment,{children:jsx("path",{fill:"currentColor",d:"M1.85 28.589C1.85 13.548 13.766 1.85 29 1.85h1.366l-.233 1.346L29 3l1.133.196v.005l-.002.008-.005.025-.016.086q-.021.11-.065.308c-.059.262-.15.634-.28 1.088-.26.905-.68 2.144-1.325 3.486-1.281 2.667-3.51 5.863-7.25 7.546l-.214.096-3.447.07a145 145 0 0 1 1.649 1.705l.134.144.034.036.01.01.003.004-.848.777c.88.741.879.741.879.742l-.002.002-.003.003-.008.01-.027.031-.096.107q-.121.137-.348.365c-.299.302-.734.712-1.286 1.156-1.097.883-2.697 1.934-4.655 2.52-.771.231-1.545.281-2.238.281H4.602a25 25 0 0 0-.442 4.043H15.4v2.3H1.85zm16.66-9.999.849-.777.682.746-.651.773zM5.16 21.507h5.567c.595 0 1.115-.046 1.578-.184 1.58-.473 2.917-1.34 3.873-2.109.284-.228.53-.445.736-.636-.506-.525-1.293-1.33-2.436-2.474l-2.381-2.381 8.357-.169c2.925-1.396 4.777-3.983 5.913-6.348a20 20 0 0 0 1.156-3.016c-10.798.588-19.492 7.594-22.362 17.317m16.99 8.643h-5.3v-2.3h5.3zM21 23.636h2.571V30L30 22.364h-2.572V16z"})})}if(a==="fill")switch(h){case"sm":return jsx(Fragment,{children:jsx("path",{fill:"currentColor",d:"M14 1.15C6.366 1.15.65 6.75.65 14.298v1.052h14.2v-1.7H2.366q.037-.723.151-1.415h2.285c.658 0 1.453-.032 2.213-.34a7.5 7.5 0 0 0 1.993-1.221 8 8 0 0 0 .739-.715l.013-.015.004-.005.002-.002v-.001a.85.85 0 0 0-.015-1.114l-.442-.495h1.074l.167-.075c1.921-.864 2.992-2.434 3.575-3.726a9.6 9.6 0 0 0 .686-2.208l.024-.152.006-.045.002-.014v-.006l.113-.951zm-9.198 9.385H2.93q.322-.992.807-1.883l3.04-.608 1.164 1.304-.031.027c-.377.318-.905.69-1.534.944-.434.176-.946.216-1.575.216m7.573-6.299-7.63 2.886c1.886-2.398 4.764-3.959 8.181-4.23a8 8 0 0 1-.551 1.344"})});case"md":return jsxs(Fragment,{children:[jsx("path",{fill:"currentColor",d:"M19.89 3.09c-9.328 0-16.919 7.454-16.919 16.67v1.149h8.608v-1.8H4.786q.046-1.04.232-2.038h3.147c.667 0 1.45-.038 2.208-.316 1.095-.4 1.982-1.015 2.588-1.518a10 10 0 0 0 .905-.858l.054-.06.016-.019.006-.006.002-.002.553-.657-.627-.583-.007-.007-.028-.027-.115-.112a18 18 0 0 1-.625-.65h1.69l.177-.08c2.325-1.046 3.77-3.1 4.622-4.79a15.7 15.7 0 0 0 1.117-2.926 8 8 0 0 0 .063-.254l.003-.017.002-.005v-.002l.236-1.091zM8.165 15.272H5.474q.177-.552.397-1.085l4.969-1.788c.43.529.83.973 1.143 1.305l.001.002-.172.147c-.507.42-1.216.905-2.057 1.213-.45.164-.97.206-1.59.206m9.496-8.108L6.753 12.399a15.14 15.14 0 0 1 11.918-7.46 14 14 0 0 1-.694 1.637q-.147.291-.316.587"}),jsx("path",{fill:"currentColor",d:"M15.183 19.109h-2.6v1.8h2.6zm1.503-2.304h-1.602L19.09 12v4.005h1.601l-4.004 4.805z"})]});case"lg":return jsx(Fragment,{children:jsx("path",{fill:"currentColor",d:"M4.206 17.48C2.689 20.842 1.85 24.597 1.85 28.588v1.561h13.551v-2.3H4.161c.039-1.383.189-2.733.44-4.043h6.126c.693 0 1.467-.05 2.238-.28 1.958-.587 3.558-1.638 4.655-2.52a16 16 0 0 0 1.287-1.157 12 12 0 0 0 .443-.472l.027-.031.008-.01.003-.003.001-.002-.878-.742.88.741.65-.772-.682-.745-.848.776.848-.776-.004-.005-.009-.01-.034-.036-.134-.144a145 145 0 0 0-1.649-1.705l3.447-.07.214-.096c3.74-1.683 5.969-4.88 7.25-7.546a22.4 22.4 0 0 0 1.326-3.486 19 19 0 0 0 .344-1.396l.017-.086.004-.025.001-.008v-.003l.001-.001L29 3l1.133.197.233-1.347H29c-10.408 0-19.268 5.46-23.836 13.718l-.178.066zm2.686-.267 6.9-1.796.686.687a192 192 0 0 1 2.436 2.474c-.206.191-.452.408-.736.636-.956.77-2.294 1.636-3.873 2.109-.463.138-.983.184-1.578.184H5.161a24 24 0 0 1 1.731-4.294m19.17-9.4L8.724 14.247c4.195-5.801 10.94-9.63 18.8-10.057a20 20 0 0 1-1.462 3.623M22.15 30.15v-2.3h-5.3v2.3zm1.422-6.514H21L27.43 16v6.364H30L23.572 30z"})})}return jsx(Fragment,{})};
|
|
4
4
|
|
|
5
5
|
export { o as WritingAi };
|
|
@@ -315,6 +315,7 @@ var Sunrise = require('./Sunrise');
|
|
|
315
315
|
var Sunset = require('./Sunset');
|
|
316
316
|
var Swimming = require('./Swimming');
|
|
317
317
|
var TechnicalRoute = require('./TechnicalRoute');
|
|
318
|
+
var ThirdQuarter = require('./ThirdQuarter');
|
|
318
319
|
var ThreeLines = require('./ThreeLines');
|
|
319
320
|
var ThreeLinesSpread = require('./ThreeLinesSpread');
|
|
320
321
|
var ThumbsDown = require('./ThumbsDown');
|
|
@@ -1626,6 +1627,10 @@ Object.defineProperty(exports, "TechnicalRoute", {
|
|
|
1626
1627
|
enumerable: true,
|
|
1627
1628
|
get: function () { return TechnicalRoute.TechnicalRoute; }
|
|
1628
1629
|
});
|
|
1630
|
+
Object.defineProperty(exports, "ThirdQuarter", {
|
|
1631
|
+
enumerable: true,
|
|
1632
|
+
get: function () { return ThirdQuarter.ThirdQuarter; }
|
|
1633
|
+
});
|
|
1629
1634
|
Object.defineProperty(exports, "ThreeLines", {
|
|
1630
1635
|
enumerable: true,
|
|
1631
1636
|
get: function () { return ThreeLines.ThreeLines; }
|
|
@@ -313,6 +313,7 @@ export { Sunrise } from './Sunrise.cjs';
|
|
|
313
313
|
export { Sunset } from './Sunset.cjs';
|
|
314
314
|
export { Swimming } from './Swimming.cjs';
|
|
315
315
|
export { TechnicalRoute } from './TechnicalRoute.cjs';
|
|
316
|
+
export { ThirdQuarter } from './ThirdQuarter.cjs';
|
|
316
317
|
export { ThreeLines } from './ThreeLines.cjs';
|
|
317
318
|
export { ThreeLinesSpread } from './ThreeLinesSpread.cjs';
|
|
318
319
|
export { ThumbsDown } from './ThumbsDown.cjs';
|
|
@@ -313,6 +313,7 @@ export { Sunrise } from './Sunrise.js';
|
|
|
313
313
|
export { Sunset } from './Sunset.js';
|
|
314
314
|
export { Swimming } from './Swimming.js';
|
|
315
315
|
export { TechnicalRoute } from './TechnicalRoute.js';
|
|
316
|
+
export { ThirdQuarter } from './ThirdQuarter.js';
|
|
316
317
|
export { ThreeLines } from './ThreeLines.js';
|
|
317
318
|
export { ThreeLinesSpread } from './ThreeLinesSpread.js';
|
|
318
319
|
export { ThumbsDown } from './ThumbsDown.js';
|
|
@@ -313,6 +313,7 @@ export { Sunrise } from './Sunrise';
|
|
|
313
313
|
export { Sunset } from './Sunset';
|
|
314
314
|
export { Swimming } from './Swimming';
|
|
315
315
|
export { TechnicalRoute } from './TechnicalRoute';
|
|
316
|
+
export { ThirdQuarter } from './ThirdQuarter';
|
|
316
317
|
export { ThreeLines } from './ThreeLines';
|
|
317
318
|
export { ThreeLinesSpread } from './ThreeLinesSpread';
|
|
318
319
|
export { ThumbsDown } from './ThumbsDown';
|
package/dist/src/index.d.cts
CHANGED
|
@@ -313,6 +313,7 @@ export { Sunrise } from '../generated/icons/Sunrise.cjs';
|
|
|
313
313
|
export { Sunset } from '../generated/icons/Sunset.cjs';
|
|
314
314
|
export { Swimming } from '../generated/icons/Swimming.cjs';
|
|
315
315
|
export { TechnicalRoute } from '../generated/icons/TechnicalRoute.cjs';
|
|
316
|
+
export { ThirdQuarter } from '../generated/icons/ThirdQuarter.cjs';
|
|
316
317
|
export { ThreeLines } from '../generated/icons/ThreeLines.cjs';
|
|
317
318
|
export { ThreeLinesSpread } from '../generated/icons/ThreeLinesSpread.cjs';
|
|
318
319
|
export { ThumbsDown } from '../generated/icons/ThumbsDown.cjs';
|
package/dist/src/index.d.ts
CHANGED
|
@@ -313,6 +313,7 @@ export { Sunrise } from '../generated/icons/Sunrise.js';
|
|
|
313
313
|
export { Sunset } from '../generated/icons/Sunset.js';
|
|
314
314
|
export { Swimming } from '../generated/icons/Swimming.js';
|
|
315
315
|
export { TechnicalRoute } from '../generated/icons/TechnicalRoute.js';
|
|
316
|
+
export { ThirdQuarter } from '../generated/icons/ThirdQuarter.js';
|
|
316
317
|
export { ThreeLines } from '../generated/icons/ThreeLines.js';
|
|
317
318
|
export { ThreeLinesSpread } from '../generated/icons/ThreeLinesSpread.js';
|
|
318
319
|
export { ThumbsDown } from '../generated/icons/ThumbsDown.js';
|
package/package.json
CHANGED
package/README.md
DELETED
|
@@ -1,463 +0,0 @@
|
|
|
1
|
-
import { DocImage } from '~/components/DocImage';
|
|
2
|
-
|
|
3
|
-
# Icon system design
|
|
4
|
-
|
|
5
|
-
Build a comprehensive Icon component which uses the [new icon library](https://www.figma.com/file/PVSsdT9z4uw7gg0JKMO8Ue/Icon-Library-%5BWIP%5D?type=design&node-id=2970-2&mode=design&t=ttNox6vrtc4q9tTf-0) created by the Design Studio team.
|
|
6
|
-
|
|
7
|
-
**Goals**
|
|
8
|
-
|
|
9
|
-
1. Scalable. Addresses all the icon (feature) needs across Yahoo products, today and tomorrow.
|
|
10
|
-
1. Build a source of truth. Reduce code duplication and ensure icons are always consistent and up-to-date.
|
|
11
|
-
1. Fast delivery from Studio team creation -> code -> icons in the hands of product teams.
|
|
12
|
-
1. Best-in-class performance.
|
|
13
|
-
1. Deprecate Fuji icons.
|
|
14
|
-
|
|
15
|
-
## Requirements
|
|
16
|
-
|
|
17
|
-
### Styles
|
|
18
|
-
|
|
19
|
-
The following styling options are available for icons:
|
|
20
|
-
|
|
21
|
-
| Style | Possible values |
|
|
22
|
-
| ------- | ---------------------------------------------------------------------------- |
|
|
23
|
-
| Size | 16px, 24px, 32px |
|
|
24
|
-
| Variant | `outline`, `fill` |
|
|
25
|
-
| Color | One of the [foreground colors](/docs/core-concepts/color#foreground-palette) |
|
|
26
|
-
|
|
27
|
-
> In the future, we may support customizing the sizes and colors in the [Configurator](/docs/getting-started/using-configurator). For now, the [Icon component](/docs/components/icon#examples) accepts overrides in code.
|
|
28
|
-
|
|
29
|
-
### Naming convention
|
|
30
|
-
|
|
31
|
-
Icons follow a `name-variant-size` naming convention within the [Figma library](https://www.figma.com/file/PVSsdT9z4uw7gg0JKMO8Ue/Icon-Library-%5BWIP%5D?type=design&node-id=2970-2&mode=design&t=ttNox6vrtc4q9tTf-0). This convention maps to the Icon component's API, which contains props for `name`, `size`, and `variant`.
|
|
32
|
-
|
|
33
|
-
| Figma name | Variant | Size | Size alias | Example usage |
|
|
34
|
-
| ---------------- | ------- | ---- | ---------- | --------------------------------------------------- |
|
|
35
|
-
| trash-outline-16 | outline | 16px | sm | `<Icon name={Trash} variant="outline" size="sm" />` |
|
|
36
|
-
| trash-fill-16 | fill | 16px | sm | `<Icon name={Trash} variant="fill" size="sm" />` |
|
|
37
|
-
| trash-outline-24 | outline | 24px | md | `<Icon name={Trash} variant="outline" size="md" />` |
|
|
38
|
-
| trash-fill-24 | fill | 24px | md | `<Icon name={Trash} variant="fill" size="md" />` |
|
|
39
|
-
| trash-outline-32 | outline | 32px | lg | `<Icon name={Trash} variant="outline" size="lg" />` |
|
|
40
|
-
| trash-fill-32 | fill | 32px | lg | `<Icon name={Trash} variant="fill" size="lg" />` |
|
|
41
|
-
|
|
42
|
-
## Implementation details
|
|
43
|
-
|
|
44
|
-
### Overview
|
|
45
|
-
|
|
46
|
-
Icons are typically implemented using web fonts or SVGs. UDS Icons are implemented
|
|
47
|
-
using SVG because web fonts come with performance challenges (see [considerations](#considerations)) that we
|
|
48
|
-
want to avoid. SVG also supports [all the features](#requirements) we need today, scales well,
|
|
49
|
-
and keep the door open for for future features (e.g. multi-color, animations, or custom sizes).
|
|
50
|
-
|
|
51
|
-
Benefits of SVG:
|
|
52
|
-
|
|
53
|
-
- The performance impact of SVG is minimal.
|
|
54
|
-
- SVG is a vector format that scales well to arbitrary sizes.
|
|
55
|
-
- Easily targeted and styled with CSS features.
|
|
56
|
-
- Built-in accessibility features
|
|
57
|
-
- Works on web and react native.
|
|
58
|
-
- Animations [[future work](#future-work)] - easily manipulated and animated with CSS and/or JS.
|
|
59
|
-
- Multi-colored & Two-tone ([future work](#future-work)) - individual SVG paths can be styled with different colors.
|
|
60
|
-
|
|
61
|
-
### Package structure
|
|
62
|
-
|
|
63
|
-
Icon assets are shipped in separate package from core `@yahoo/uds`. This for a few reasons:
|
|
64
|
-
|
|
65
|
-
- Keeps the size of core `@yahoo/uds` small. There currently 1200+ icons, which will increase over time.
|
|
66
|
-
- Separate packages can be versioned independently.
|
|
67
|
-
- Adding a new icon or updating an existing illustrations doesn't require code changes or a new release of to `@yahoo/uds`.
|
|
68
|
-
|
|
69
|
-
| Bundle | Description |
|
|
70
|
-
| --------------------------- | -------------------------------------------------- |
|
|
71
|
-
| `@yahoo/uds-icons` | Icons to import and use |
|
|
72
|
-
| `@yahoo/uds-icons/fixtures` | An exported `iconNames` containing all icon names. |
|
|
73
|
-
|
|
74
|
-
### Component design
|
|
75
|
-
|
|
76
|
-
The component API uses a [familiar approach](#prior-art)) to other popular icon
|
|
77
|
-
libraries, which is is break icons up from the core library package. A user
|
|
78
|
-
consumes icons by importing an icon from the `@yahoo/uds-icons` package
|
|
79
|
-
and passing it to the `Icon` component from the `@yahoo/uds` package.
|
|
80
|
-
The latter is responsible for rendering the icon.
|
|
81
|
-
|
|
82
|
-
#### Usage
|
|
83
|
-
|
|
84
|
-
```tsx
|
|
85
|
-
import { Icon } from '@yahoo/uds';
|
|
86
|
-
import { AccountRefresh, VideoCamera } from '@yahoo/uds-icons';
|
|
87
|
-
|
|
88
|
-
<Icon name={AccountRefresh} variant="fill" size="sm" />
|
|
89
|
-
<Icon name={VideoCamera} variant="fill" size="sm" />
|
|
90
|
-
```
|
|
91
|
-
|
|
92
|
-
> **Tip**: See the Icon [component API docs](/docs/components/icon#usage) for alternate examples of how to import and use icons.
|
|
93
|
-
|
|
94
|
-
#### API
|
|
95
|
-
|
|
96
|
-
`Icon` provides the `<svg>` wrapper for all icons, as well as the props,
|
|
97
|
-
functionality, and API surface. The design provides for flexibility and
|
|
98
|
-
centralized location for making API changes in UDS. Adding features, style
|
|
99
|
-
updates, or a11y hooks can be made across all icons without having to
|
|
100
|
-
update icon assets, regenerate code, or ship a icon packages release.
|
|
101
|
-
|
|
102
|
-
```tsx title="packages/uds/src/components/Icon.tsx"
|
|
103
|
-
import { getStyles } from '~/styles/styler';
|
|
104
|
-
import { DEFAULT_SCALE_MODE, defaultTokensConfig } from '~/tokens';
|
|
105
|
-
|
|
106
|
-
type HtmlSpanProps = Omit<React.HTMLAttributes<HTMLSpanElement>, 'color'>;
|
|
107
|
-
|
|
108
|
-
interface IconProps extends HtmlSpanProps {
|
|
109
|
-
// Icon to render from the icons package.
|
|
110
|
-
name: (props: Pick<IconProps, 'size' | 'variant'>) => JSX.Element;
|
|
111
|
-
size: 'sm' | 'md' | 'lg';
|
|
112
|
-
variant: 'fill' | 'outline';
|
|
113
|
-
color?: ForegroundColor;
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
export const Icon = ({
|
|
117
|
-
name: SVGIcon,
|
|
118
|
-
size,
|
|
119
|
-
variant,
|
|
120
|
-
color = 'primary',
|
|
121
|
-
className,
|
|
122
|
-
...props
|
|
123
|
-
}: IconProps) => {
|
|
124
|
-
const styles = getStyles({ color, className });
|
|
125
|
-
const scaleMode = defaultTokensConfig.scaleMode[DEFAULT_SCALE_MODE];
|
|
126
|
-
const sizePx = scaleMode.iconSizes[size];
|
|
127
|
-
return (
|
|
128
|
-
<span {...props}>
|
|
129
|
-
<svg
|
|
130
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
131
|
-
width={sizePx}
|
|
132
|
-
height={sizePx}
|
|
133
|
-
viewBox={`0 0 ${sizePx} ${sizePx}`}
|
|
134
|
-
aria-hidden="true"
|
|
135
|
-
focusable="false"
|
|
136
|
-
className={styles}
|
|
137
|
-
>
|
|
138
|
-
<SVGIcon size={size} variant={variant} />
|
|
139
|
-
</svg>
|
|
140
|
-
</span>
|
|
141
|
-
);
|
|
142
|
-
};
|
|
143
|
-
```
|
|
144
|
-
|
|
145
|
-
## Consumption pipeline
|
|
146
|
-
|
|
147
|
-
The majority of the icon system is code-generated. This allows us to keep assets
|
|
148
|
-
up-to-date and ingest quickly should the Studio team create new icons or make changes to existing ones.
|
|
149
|
-
|
|
150
|
-
> **Tip**: the entire flow below can be run with one command: `bun run icons:pipeline`
|
|
151
|
-
|
|
152
|
-
The pipeline consists of three steps:
|
|
153
|
-
|
|
154
|
-
#### 1. Export icons from Figma
|
|
155
|
-
|
|
156
|
-
Run the following command to export icons from Figma:
|
|
157
|
-
|
|
158
|
-
```bash
|
|
159
|
-
bun run icons:export
|
|
160
|
-
```
|
|
161
|
-
|
|
162
|
-
**What it's doing**
|
|
163
|
-
|
|
164
|
-
Icons are exported as SVG using the Figma REST API. Files are saved in `./assets` with the naming convention from Figma (`name-variant-size.svg`).
|
|
165
|
-
|
|
166
|
-
<DocImage light={{ src: '/images/icondocs/export_command.png' }} />
|
|
167
|
-
|
|
168
|
-
The script flags any icons which are missing a variant or size and does not save these files. **This ensures that all icon in the library are complete and work as expected**.
|
|
169
|
-
|
|
170
|
-
Notes:
|
|
171
|
-
|
|
172
|
-
- If an icon is missing a variant or size, it will not be saved. Check Figma to ensure
|
|
173
|
-
the icon is named properly and has all variants and sizes.
|
|
174
|
-
- The script cerates `generated/iconNames.ts` containing the list of
|
|
175
|
-
all icons that were exported and those which were ignored (e.g. not-saved) from Figma.
|
|
176
|
-
|
|
177
|
-
#### 2. Optimize the SVG
|
|
178
|
-
|
|
179
|
-
> **Note**: `bun run icons:export` needs to be run before this step.
|
|
180
|
-
|
|
181
|
-
To optimize the exported .svg, run:
|
|
182
|
-
|
|
183
|
-
```bash
|
|
184
|
-
bun run icons:optimize
|
|
185
|
-
```
|
|
186
|
-
|
|
187
|
-
**What it's doing**
|
|
188
|
-
|
|
189
|
-
The raw SVG files are optimized using SVGO and re-saved back to `./assets`.
|
|
190
|
-
Unnecessary metadata is removed and path information is clean up.
|
|
191
|
-
This **reduces the total size of all icons by ~682kb**.
|
|
192
|
-
|
|
193
|
-
#### 3. Generate TSX icons
|
|
194
|
-
|
|
195
|
-
> **Note**: `bun run icons:export` needs to be run before this step.
|
|
196
|
-
|
|
197
|
-
TypeScript files are generated for each icon containing the JSX for each size and variant. To regenerate
|
|
198
|
-
these files, run:
|
|
199
|
-
|
|
200
|
-
```bash
|
|
201
|
-
bun run icons:codegen
|
|
202
|
-
```
|
|
203
|
-
|
|
204
|
-
This script does the following:
|
|
205
|
-
|
|
206
|
-
- Creates a `generated/icons/*.tsx` file for each JSX icon.
|
|
207
|
-
- Creates a barrel `generated/icons/index.ts` file that exports all icons.
|
|
208
|
-
|
|
209
|
-
**What it's doing**
|
|
210
|
-
|
|
211
|
-
Raw .svg assets in the previous step are read `scripts/codgen.ts` and converted to TypeScript components. This script generates JSX elements which contain all the `<path>` information for
|
|
212
|
-
each size and variant for a given icon. This allows for future variants or sizes to be added to
|
|
213
|
-
the system without needing to change the component API.
|
|
214
|
-
|
|
215
|
-
```tsx title="Example code generated icon file"
|
|
216
|
-
import { type IconProps } from '@yahoo/uds';
|
|
217
|
-
|
|
218
|
-
export const Trash = ({ size, variant }: IconProps) => {
|
|
219
|
-
if (variant === 'outline') {
|
|
220
|
-
switch (size) {
|
|
221
|
-
case 'sm':
|
|
222
|
-
return <path fill="currentColor" d="M5 1h6v.9h3.9v1.8h-.998l-.00..." />;
|
|
223
|
-
case 'md':
|
|
224
|
-
return <path fill="currentColor" d="M8.364 2h7.272v1.727h5.546v2..." />;
|
|
225
|
-
case 'lg':
|
|
226
|
-
return <path fill="currentColor" d="M11 1H9.85v3H3v2.3h2.11l.007..." />;
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
if (variant === 'fill') {
|
|
231
|
-
switch (size) {
|
|
232
|
-
case 'sm':
|
|
233
|
-
return <path fill="currentColor" d="M5 1h6v.9h3.9v1...." />;
|
|
234
|
-
case 'md':
|
|
235
|
-
return <path fill="currentColor" d="M10.364 2h-2v1.727H2.818v2h18.36..." />;
|
|
236
|
-
case 'lg':
|
|
237
|
-
return <path fill="currentColor" d="M11 .85H9.85v3H3v2.3h26v-2.3h5v..." />;
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
};
|
|
241
|
-
```
|
|
242
|
-
|
|
243
|
-
## Open questions
|
|
244
|
-
|
|
245
|
-
1. Do we need a icon color palette? Foreground colors might not be flexible enough for icons?
|
|
246
|
-
1. Do we only allow scaling up the `lg` size icons?
|
|
247
|
-
1. Naming convention for generated files: `Clock` vs. `ClockIcon`.
|
|
248
|
-
|
|
249
|
-
```tsx
|
|
250
|
-
<Icon name={Clock} />
|
|
251
|
-
// vs.
|
|
252
|
-
<Icon name={ClockIcon} />
|
|
253
|
-
```
|
|
254
|
-
|
|
255
|
-
Benefit of later is further grokability of code and intelliense help when typing just "icon".
|
|
256
|
-
|
|
257
|
-
1. Do we need a `variant` prop? TSX icons could be further broken down into `Outline` and `Fill` components. This would shed more bytes for perf.
|
|
258
|
-
|
|
259
|
-
```tsx
|
|
260
|
-
<Icon name={Clock} variant="fill" />
|
|
261
|
-
// vs.
|
|
262
|
-
<Icon name={ClockFill} />
|
|
263
|
-
```
|
|
264
|
-
|
|
265
|
-
1. API for button and icon button:
|
|
266
|
-
```tsx
|
|
267
|
-
// 1. Allow no customizations. Components decide everything (sizes, colors).
|
|
268
|
-
<Button startIcon={Clock} />
|
|
269
|
-
<IconButton name={Clock} />
|
|
270
|
-
// 2. Customization through props:
|
|
271
|
-
<Button startIcon={Clock} iconVariant="fill" iconSize="md" />
|
|
272
|
-
<Button startIcon={Clock} {...iconProps} />
|
|
273
|
-
// 3. Or, customization through composition:
|
|
274
|
-
<Button startIcon={<Icon icon={Clock} variant="fill" size="md" />} />
|
|
275
|
-
<IconButton name={<Icon icon={Clock} variant="fill" size="md" className="text-blue-900" />} />
|
|
276
|
-
```
|
|
277
|
-
|
|
278
|
-
## Future work
|
|
279
|
-
|
|
280
|
-
This section covers possible future work and customizations to the icon system.
|
|
281
|
-
Work can be prioritized based on product teams' needs and feedback.
|
|
282
|
-
|
|
283
|
-
### Scale mode
|
|
284
|
-
|
|
285
|
-
[Scale modes](/docs/core-concepts/tokens#scale-modes-) is a project coming soon.
|
|
286
|
-
When scale modes are available, icons can be updated to support different scale modes.
|
|
287
|
-
|
|
288
|
-
### React Native
|
|
289
|
-
|
|
290
|
-
Explore [react-native-svg](https://github.com/software-mansion/react-native-svg) when
|
|
291
|
-
we prioritize React Native components.
|
|
292
|
-
|
|
293
|
-
### SVGR
|
|
294
|
-
|
|
295
|
-
Explore [SVGR CLI](https://react-svgr.com/docs/configuration-files/) for code generation.
|
|
296
|
-
This wasn't used for the implementation beacuse SVGR's React component output
|
|
297
|
-
is too limiting. However, their [custom
|
|
298
|
-
templates](https://react-svgr.com/docs/custom-templates/) might be a viable option.
|
|
299
|
-
|
|
300
|
-
### Fuji -> new icons tool
|
|
301
|
-
|
|
302
|
-
Create a tool to help teams migrate from Fuji to the new icon system.
|
|
303
|
-
|
|
304
|
-
### Custom icon sets
|
|
305
|
-
|
|
306
|
-
> We would need to consider the use case to support this feature.
|
|
307
|
-
> Teams may have existing icons they wish to use alongside Universal's Icons.
|
|
308
|
-
> Custom icon sets could supported by passing to the `Icon` component if they adhere to
|
|
309
|
-
> the format of the [Generated TSX icon](#3-generate-tsx-icons).
|
|
310
|
-
|
|
311
|
-
```tsx
|
|
312
|
-
import { Icon, type IconProps } from '@yahoo/uds';
|
|
313
|
-
|
|
314
|
-
// Extracted from the Fuji icon library
|
|
315
|
-
// https://www.figma.com/file/5NG1HmR7s3LPxEJGL5gsWt/%F0%9F%97%BB-Fuji-Library?node-id=0%3A1951&mode=dev
|
|
316
|
-
const FujiAlarmClock = ({ size, variant }: IconProps) => {
|
|
317
|
-
if (variant === 'outline') {
|
|
318
|
-
return (
|
|
319
|
-
<path
|
|
320
|
-
fillRule="evenodd"
|
|
321
|
-
clipRule="evenodd"
|
|
322
|
-
d="M6.22825 2.7065L2.70725 6.2275C2.51225 6.4225 2.25625 6.5205 2.00025 6.5205C1.74425 6.5205 1.48825 6.4225 1.29325 6.2275C0.90225 5.8375 0.90225 5.2035 1.29325 4.8135L4.81325 1.2925C5.20425 0.9025 5.83725 0.9025 6.22825 1.2925C6.61825 1.6835 6.61825 2.3165 6.22825 2.7065ZM22.7072 4.8135L19.1862 1.2925C18.9912 1.0975 18.7353 1.0005 18.4792 1.0005C18.2242 1.0005 17.9683 1.0975 17.7722 1.2925C17.3822 1.6835 17.3822 2.3165 17.7722 2.7075L21.2932 6.2275C21.6842 6.6185 22.3162 6.6185 22.7072 6.2275C23.0982 5.8375 23.0982 5.2035 22.7072 4.8135ZM11.9998 3C6.47775 3 1.99975 7.477 1.99975 13C1.99975 18.522 6.47775 23 11.9998 23C17.5227 23 21.9998 18.522 21.9998 13C21.9998 7.477 17.5227 3 11.9998 3ZM11.9998 21C7.58875 21 3.99975 17.411 3.99975 13C3.99975 8.589 7.58875 5 11.9998 5C16.4107 5 19.9998 8.589 19.9998 13C19.9998 17.411 16.4107 21 11.9998 21ZM11.4254 14.796L13.3443 16.714C13.7224 17.093 14.3367 17.093 14.7159 16.714C15.095 16.335 15.095 15.722 14.7159 15.343L13.0011 13.629V9C13.0011 8.447 12.5529 8 12.0007 8C11.4484 8 11.0002 8.447 11.0002 9V14C11.0002 14.333 11.1743 14.614 11.4254 14.796Z"
|
|
323
|
-
fill="currentColor"
|
|
324
|
-
/>
|
|
325
|
-
);
|
|
326
|
-
}
|
|
327
|
-
if (variant === 'fill') {
|
|
328
|
-
return (
|
|
329
|
-
<path
|
|
330
|
-
fillRule="evenodd"
|
|
331
|
-
clipRule="evenodd"
|
|
332
|
-
d="M6.229 2.7065L2.708 6.2275C2.512 6.4235 2.257 6.5205 2.001 6.5205C1.745 6.5205 1.489 6.4235 1.294 6.2275C0.902 5.8375 0.902 5.2045 1.294 4.8135L4.814 1.2925C5.204 0.9025 5.838 0.9025 6.229 1.2925C6.618 1.6845 6.618 2.3165 6.229 2.7065ZM22.708 4.8135L19.187 1.2925C18.992 1.0985 18.736 1.0015 18.48 1.0015C18.225 1.0015 17.969 1.0985 17.773 1.2925C17.383 1.6845 17.383 2.3165 17.773 2.7085L21.294 6.2275C21.685 6.6185 22.316 6.6185 22.708 6.2275C23.099 5.8375 23.099 5.2045 22.708 4.8135ZM2 13.0005C2 7.4775 6.478 3.0005 12 3.0005C17.523 3.0005 22 7.4775 22 13.0005C22 18.5225 17.523 23.0005 12 23.0005C6.478 23.0005 2 18.5225 2 13.0005ZM11.426 14.7965L13.345 16.7145C13.723 17.0935 14.337 17.0935 14.716 16.7145C15.095 16.3355 15.095 15.7225 14.716 15.3435L13.001 13.6295V9.0005C13.001 8.4475 12.553 8.0005 12.001 8.0005C11.449 8.0005 11.001 8.4475 11.001 9.0005V14.0005C11.001 14.3335 11.175 14.6145 11.426 14.7965Z"
|
|
333
|
-
fill="currentColor"
|
|
334
|
-
/>
|
|
335
|
-
);
|
|
336
|
-
}
|
|
337
|
-
};
|
|
338
|
-
|
|
339
|
-
export const CustomIconExample = () => {
|
|
340
|
-
// @ts-expect-error - FujiAlarmClock is a custom icon name.
|
|
341
|
-
return <Icon name={FujiAlarmClock} variant="outline" size="md" />;
|
|
342
|
-
};
|
|
343
|
-
```
|
|
344
|
-
|
|
345
|
-
### Animated icons
|
|
346
|
-
|
|
347
|
-
Icons could be extended to support motion through formats like [dotLottie](https://dotlottie.io/) or SVG animations. How to systemize motion across all icons is up for debate. There are
|
|
348
|
-
also performance considerations to take into account introducing large amounts
|
|
349
|
-
of JS or CSS to perform animations.
|
|
350
|
-
|
|
351
|
-
### Colors: Multi-colored, two-tone, linear gradients
|
|
352
|
-
|
|
353
|
-
Icons could be extended to support more complex color options icons. Multi-color
|
|
354
|
-
and two-two would require underlying changes to the SVG assets designed by
|
|
355
|
-
the Studio team. We would also need systemize an API around what parts of an
|
|
356
|
-
icon can be colored and how to apply things like linear gradients.
|
|
357
|
-
|
|
358
|
-
### RTL
|
|
359
|
-
|
|
360
|
-
Right-to-left support could be added for icons. This would require changes to the `Icon` component to flip the icon horizontally when the `dir=rtl` attribute.
|
|
361
|
-
|
|
362
|
-
RTL would be a larger project for UDS as it would require changes to all components, not just icons.
|
|
363
|
-
|
|
364
|
-
### Figma plugin
|
|
365
|
-
|
|
366
|
-
The name validation script `bun icons:validate` can be turned into a Figma plugin. This would allow designers to validate icons while they work on them in Figma. Most of the issues
|
|
367
|
-
with icons are due to naming inconsistencies.
|
|
368
|
-
|
|
369
|
-
## Development
|
|
370
|
-
|
|
371
|
-
### Setup
|
|
372
|
-
|
|
373
|
-
1. Copy the Figma access token from the [Vercel dashboard](https://vercel.com/yahoo-design/~/settings/environment-variables) or use your own by creating one in Figma > Settings.
|
|
374
|
-
1. Create a `.env` file in packages/icons :
|
|
375
|
-
|
|
376
|
-
```
|
|
377
|
-
FIGMA_ACCESS_TOKEN=<FIGMA_ACCESS_TOKEN>
|
|
378
|
-
```
|
|
379
|
-
|
|
380
|
-
This token is also added to the Github repo.
|
|
381
|
-
|
|
382
|
-
### Validating icons
|
|
383
|
-
|
|
384
|
-
Running `icons:validate` will check that all icons have all variants and sizes defined
|
|
385
|
-
but will not export the icons or generate code.
|
|
386
|
-
|
|
387
|
-
```bash
|
|
388
|
-
# Do a dry-run
|
|
389
|
-
bun --cwd packages/icons icons:validate
|
|
390
|
-
```
|
|
391
|
-
|
|
392
|
-
### Updating UDS icons
|
|
393
|
-
|
|
394
|
-
> For now this is a manual process. In the future, icon export will be automated through CI.
|
|
395
|
-
|
|
396
|
-
To update `@yahoo/uds-icons` with new icons, run the following command from the root of the monorepo:
|
|
397
|
-
|
|
398
|
-
```bash
|
|
399
|
-
bun --cwd packages/icons icons:pipeline
|
|
400
|
-
```
|
|
401
|
-
|
|
402
|
-
This exports and validates icons from Figma, optimizes the SVGs, and generates the TypeScript files.
|
|
403
|
-
**If there are warnings of missing variants or sizes, check Figma to ensure the icon is named properly.**.
|
|
404
|
-
|
|
405
|
-
If all goes well, commit the changes and push a PR:
|
|
406
|
-
|
|
407
|
-
```bash
|
|
408
|
-
git co -b icons-update
|
|
409
|
-
git add .
|
|
410
|
-
git commit -m 'Updating codegen icons from Figma'
|
|
411
|
-
git push origin icons-update
|
|
412
|
-
```
|
|
413
|
-
|
|
414
|
-
### Releases
|
|
415
|
-
|
|
416
|
-
New versions of the `@yahoo/uds-icons` package are automatically released
|
|
417
|
-
when the changeset PR is merged.
|
|
418
|
-
|
|
419
|
-
## Considerations
|
|
420
|
-
|
|
421
|
-
### Prior art
|
|
422
|
-
|
|
423
|
-
There are many popular React icon libraries that have inspired the design of the Icon component:
|
|
424
|
-
|
|
425
|
-
- [@coreui](https://coreui.io/react/docs/components/icon/#usage) react icon library
|
|
426
|
-
- [Material UI icons](https://mui.com/material-ui/icons/)
|
|
427
|
-
- [Lucide React](https://lucide.dev/guide/packages/lucide-react#one-generic-icon-component) icon library
|
|
428
|
-
- [Shopify Polaris icons](https://polaris.shopify.com/components/images-and-icons/icon?example=icon-default)
|
|
429
|
-
|
|
430
|
-
In the case of Material UI, Carbon, ADS, Uber Base UI, the icon base component is declared directly:
|
|
431
|
-
|
|
432
|
-
```tsx
|
|
433
|
-
import { CameraIcon } from '@mui/icons-material';
|
|
434
|
-
<CameraIcon color="primary" .../>
|
|
435
|
-
```
|
|
436
|
-
|
|
437
|
-
Other references:
|
|
438
|
-
|
|
439
|
-
- [Material UI icons](https://mui.com/material-ui/icons/)
|
|
440
|
-
- [MS Fluent UI icons](https://react.fluentui.dev/?path=/docs/concepts-migration-from-v0-icons--page)
|
|
441
|
-
- [Carbon Design system icons](https://carbondesignsystem.com/elements/icons/code)
|
|
442
|
-
- [Atlassian Design System icons](https://atlassian.design/components/icon/examples)
|
|
443
|
-
- [Material UI guide to reducing bundle size](https://mui.com/material-ui/guides/minimizing-bundle-size/)
|
|
444
|
-
|
|
445
|
-
### Performance of web fonts
|
|
446
|
-
|
|
447
|
-
Web font files are easy to but are a common performance bottleneck
|
|
448
|
-
on the web due to their large file sizes. This can range from dozens of
|
|
449
|
-
KB to 1-2MB. For example Material Design's icon font is 129KB.
|
|
450
|
-
|
|
451
|
-
Fonts causes issues like delaying first render, [FOUT](https://fonts.google.com/knowledge/glossary/fout), and negatively affecting core web vitals like [First Contentful Paint (FCP)](https://web.dev/articles/fcp). These problems grow worse over time as the file size grows
|
|
452
|
-
due to new icons being added.
|
|
453
|
-
|
|
454
|
-
All icon glyphs are contained in a single binary font file. This essentially means
|
|
455
|
-
using 1-2 icons requires the user to download all icons. The entire font needs to be
|
|
456
|
-
downloaded before any icons can be displayed.
|
|
457
|
-
|
|
458
|
-
Fonts also pose an issue from workflow perspective. A font needs to be
|
|
459
|
-
regenerated for any small change to the illustration library. While this isn't
|
|
460
|
-
too difficult (there are online tools that exist for generating fonts from SVGs albeit
|
|
461
|
-
not great ones), the downstream effect on users is cache invalidation. Users
|
|
462
|
-
revisiting a page will be hit with re-downloading the font, repeating the
|
|
463
|
-
cycle of poor page load UX.
|