@leafygreen-ui/icon 14.7.1 → 14.7.2
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/CHANGELOG.md +6 -0
- package/dist/esm/AIModel.js.map +1 -1
- package/dist/esm/ActivityFeed.js.map +1 -1
- package/dist/esm/AddFile.js.map +1 -1
- package/dist/esm/AllProducts.js.map +1 -1
- package/dist/esm/AnalyticsNode.js.map +1 -1
- package/dist/esm/Apps.js.map +1 -1
- package/dist/esm/Array.js.map +1 -1
- package/dist/esm/ArrowDown.js.map +1 -1
- package/dist/esm/ArrowLeft.js.map +1 -1
- package/dist/esm/ArrowRight.js.map +1 -1
- package/dist/esm/ArrowUp.js.map +1 -1
- package/dist/esm/Award.js.map +1 -1
- package/dist/esm/Beaker.js.map +1 -1
- package/dist/esm/Bell.js.map +1 -1
- package/dist/esm/Biometric.js.map +1 -1
- package/dist/esm/Boolean.js.map +1 -1
- package/dist/esm/Building.js.map +1 -1
- package/dist/esm/Bulb.js.map +1 -1
- package/dist/esm/Calendar.js.map +1 -1
- package/dist/esm/Camera.js.map +1 -1
- package/dist/esm/Cap.js.map +1 -1
- package/dist/esm/CaretDown.js.map +1 -1
- package/dist/esm/CaretLeft.js.map +1 -1
- package/dist/esm/CaretRight.js.map +1 -1
- package/dist/esm/CaretUp.js.map +1 -1
- package/dist/esm/ChartFilled.js.map +1 -1
- package/dist/esm/Charts.js.map +1 -1
- package/dist/esm/Checkmark.js.map +1 -1
- package/dist/esm/CheckmarkWithCircle.js.map +1 -1
- package/dist/esm/ChevronDown.js.map +1 -1
- package/dist/esm/ChevronLeft.js.map +1 -1
- package/dist/esm/ChevronRight.js.map +1 -1
- package/dist/esm/ChevronUp.js.map +1 -1
- package/dist/esm/Circle.js.map +1 -1
- package/dist/esm/Clock.js.map +1 -1
- package/dist/esm/ClockWithArrow.js.map +1 -1
- package/dist/esm/Clone.js.map +1 -1
- package/dist/esm/Cloud.js.map +1 -1
- package/dist/esm/Code.js.map +1 -1
- package/dist/esm/CodeBlock.js.map +1 -1
- package/dist/esm/Coin.js.map +1 -1
- package/dist/esm/Colon.js.map +1 -1
- package/dist/esm/Config.js.map +1 -1
- package/dist/esm/Connect.js.map +1 -1
- package/dist/esm/Copy.js.map +1 -1
- package/dist/esm/CreditCard.js.map +1 -1
- package/dist/esm/CurlyBraces.js.map +1 -1
- package/dist/esm/Cursor.js.map +1 -1
- package/dist/esm/Dashboard.js.map +1 -1
- package/dist/esm/Database.js.map +1 -1
- package/dist/esm/Diagram.js.map +1 -1
- package/dist/esm/Diagram2.js.map +1 -1
- package/dist/esm/Diagram3.js.map +1 -1
- package/dist/esm/Disconnect.js.map +1 -1
- package/dist/esm/Download.js.map +1 -1
- package/dist/esm/Drag.js.map +1 -1
- package/dist/esm/Edit.js.map +1 -1
- package/dist/esm/Ellipsis.js.map +1 -1
- package/dist/esm/Email.js.map +1 -1
- package/dist/esm/EmptyDatabase.js.map +1 -1
- package/dist/esm/EmptyFolder.js.map +1 -1
- package/dist/esm/Eraser.js.map +1 -1
- package/dist/esm/Escalation.js.map +1 -1
- package/dist/esm/Export.js.map +1 -1
- package/dist/esm/Favorite.js.map +1 -1
- package/dist/esm/Federation.js.map +1 -1
- package/dist/esm/File.js.map +1 -1
- package/dist/esm/Filter.js.map +1 -1
- package/dist/esm/Folder.js.map +1 -1
- package/dist/esm/Format.js.map +1 -1
- package/dist/esm/FullScreenEnter.js.map +1 -1
- package/dist/esm/FullScreenExit.js.map +1 -1
- package/dist/esm/Function.js.map +1 -1
- package/dist/esm/Gauge.js.map +1 -1
- package/dist/esm/GlobeAmericas.js.map +1 -1
- package/dist/esm/GovernmentBuilding.js.map +1 -1
- package/dist/esm/Guide.js.map +1 -1
- package/dist/esm/Hash.js.map +1 -1
- package/dist/esm/HiddenSecondaryNode.js.map +1 -1
- package/dist/esm/Highlight.js.map +1 -1
- package/dist/esm/Home.js.map +1 -1
- package/dist/esm/HorizontalDrag.js.map +1 -1
- package/dist/esm/Import.js.map +1 -1
- package/dist/esm/ImportantWithCircle.js.map +1 -1
- package/dist/esm/InfoWithCircle.js.map +1 -1
- package/dist/esm/InternalEmployee.js.map +1 -1
- package/dist/esm/InviteUser.js.map +1 -1
- package/dist/esm/Key.js.map +1 -1
- package/dist/esm/Laptop.js.map +1 -1
- package/dist/esm/LightningBolt.js.map +1 -1
- package/dist/esm/Link.js.map +1 -1
- package/dist/esm/List.js.map +1 -1
- package/dist/esm/Lock.js.map +1 -1
- package/dist/esm/LogIn.js.map +1 -1
- package/dist/esm/LogOut.js.map +1 -1
- package/dist/esm/MagnifyingGlass.js.map +1 -1
- package/dist/esm/Megaphone.js.map +1 -1
- package/dist/esm/Menu.js.map +1 -1
- package/dist/esm/Minus.js.map +1 -1
- package/dist/esm/Mobile.js.map +1 -1
- package/dist/esm/Moon.js.map +1 -1
- package/dist/esm/MultiDirectionArrow.js.map +1 -1
- package/dist/esm/MultiLayers.js.map +1 -1
- package/dist/esm/NavCollapse.js.map +1 -1
- package/dist/esm/NavExpand.js.map +1 -1
- package/dist/esm/NoFilter.js.map +1 -1
- package/dist/esm/NotAllowed.js.map +1 -1
- package/dist/esm/Note.js.map +1 -1
- package/dist/esm/NumberedList.js.map +1 -1
- package/dist/esm/OpenNewTab.js.map +1 -1
- package/dist/esm/OutlineFavorite.js.map +1 -1
- package/dist/esm/Package.js.map +1 -1
- package/dist/esm/Pause.js.map +1 -1
- package/dist/esm/Pending.js.map +1 -1
- package/dist/esm/Person.js.map +1 -1
- package/dist/esm/PersonGroup.js.map +1 -1
- package/dist/esm/PersonWithLock.js.map +1 -1
- package/dist/esm/Pin.js.map +1 -1
- package/dist/esm/Play.js.map +1 -1
- package/dist/esm/Plus.js.map +1 -1
- package/dist/esm/PlusWithCircle.js.map +1 -1
- package/dist/esm/Primary.js.map +1 -1
- package/dist/esm/Project.js.map +1 -1
- package/dist/esm/QuestionMarkWithCircle.js.map +1 -1
- package/dist/esm/Read.js.map +1 -1
- package/dist/esm/Recommended.js.map +1 -1
- package/dist/esm/Redo.js.map +1 -1
- package/dist/esm/Refresh.js.map +1 -1
- package/dist/esm/Relationship.js.map +1 -1
- package/dist/esm/ReplicaSet.js.map +1 -1
- package/dist/esm/Resize.js.map +1 -1
- package/dist/esm/Resource.js.map +1 -1
- package/dist/esm/Return.js.map +1 -1
- package/dist/esm/Revert.js.map +1 -1
- package/dist/esm/Router.js.map +1 -1
- package/dist/esm/SMS.js.map +1 -1
- package/dist/esm/Save.js.map +1 -1
- package/dist/esm/SearchIndex.js.map +1 -1
- package/dist/esm/Secondary.js.map +1 -1
- package/dist/esm/Serverless.js.map +1 -1
- package/dist/esm/Settings.js.map +1 -1
- package/dist/esm/ShardedCluster.js.map +1 -1
- package/dist/esm/Shell.js.map +1 -1
- package/dist/esm/Shield.js.map +1 -1
- package/dist/esm/Shirt.js.map +1 -1
- package/dist/esm/Shortcut.js.map +1 -1
- package/dist/esm/SortAscending.js.map +1 -1
- package/dist/esm/SortDescending.js.map +1 -1
- package/dist/esm/Sparkle.js.map +1 -1
- package/dist/esm/SplitHorizontal.js.map +1 -1
- package/dist/esm/SplitVertical.js.map +1 -1
- package/dist/esm/Stitch.js.map +1 -1
- package/dist/esm/Stop.js.map +1 -1
- package/dist/esm/Streaming.js.map +1 -1
- package/dist/esm/String.js.map +1 -1
- package/dist/esm/Sun.js.map +1 -1
- package/dist/esm/Support.js.map +1 -1
- package/dist/esm/Sweep.js.map +1 -1
- package/dist/esm/Table.js.map +1 -1
- package/dist/esm/Tag.js.map +1 -1
- package/dist/esm/TemporaryTable.js.map +1 -1
- package/dist/esm/ThumbsDown.js.map +1 -1
- package/dist/esm/ThumbsUp.js.map +1 -1
- package/dist/esm/TimeSeries.js.map +1 -1
- package/dist/esm/TimeSeriesCollection.js.map +1 -1
- package/dist/esm/Trash.js.map +1 -1
- package/dist/esm/Undo.js.map +1 -1
- package/dist/esm/University.js.map +1 -1
- package/dist/esm/Unlock.js.map +1 -1
- package/dist/esm/Unsorted.js.map +1 -1
- package/dist/esm/UpDownCarets.js.map +1 -1
- package/dist/esm/Upload.js.map +1 -1
- package/dist/esm/VerticalEllipsis.js.map +1 -1
- package/dist/esm/View.js.map +1 -1
- package/dist/esm/Visibility.js.map +1 -1
- package/dist/esm/VisibilityOff.js.map +1 -1
- package/dist/esm/Warning.js.map +1 -1
- package/dist/esm/Wizard.js.map +1 -1
- package/dist/esm/Wrench.js.map +1 -1
- package/dist/esm/Write.js.map +1 -1
- package/dist/esm/X.js.map +1 -1
- package/dist/esm/XWithCircle.js.map +1 -1
- package/dist/esm/glyphCommon-cTThlth0.js.map +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/types/createGlyphComponent.d.ts.map +1 -1
- package/dist/types/createGlyphComponent.spec.d.ts +2 -0
- package/dist/types/createGlyphComponent.spec.d.ts.map +1 -0
- package/dist/types/createIconComponent.d.ts.map +1 -1
- package/dist/types/createIconComponent.spec.d.ts +2 -0
- package/dist/types/createIconComponent.spec.d.ts.map +1 -0
- package/dist/types/testUtils.d.ts +10 -0
- package/dist/types/testUtils.d.ts.map +1 -0
- package/dist/umd/AIModel.js.map +1 -1
- package/dist/umd/ActivityFeed.js.map +1 -1
- package/dist/umd/AddFile.js.map +1 -1
- package/dist/umd/AllProducts.js.map +1 -1
- package/dist/umd/AnalyticsNode.js.map +1 -1
- package/dist/umd/Apps.js.map +1 -1
- package/dist/umd/Array.js.map +1 -1
- package/dist/umd/ArrowDown.js.map +1 -1
- package/dist/umd/ArrowLeft.js.map +1 -1
- package/dist/umd/ArrowRight.js.map +1 -1
- package/dist/umd/ArrowUp.js.map +1 -1
- package/dist/umd/Award.js.map +1 -1
- package/dist/umd/Beaker.js.map +1 -1
- package/dist/umd/Bell.js.map +1 -1
- package/dist/umd/Biometric.js.map +1 -1
- package/dist/umd/Boolean.js.map +1 -1
- package/dist/umd/Building.js.map +1 -1
- package/dist/umd/Bulb.js.map +1 -1
- package/dist/umd/Calendar.js.map +1 -1
- package/dist/umd/Camera.js.map +1 -1
- package/dist/umd/Cap.js.map +1 -1
- package/dist/umd/CaretDown.js.map +1 -1
- package/dist/umd/CaretLeft.js.map +1 -1
- package/dist/umd/CaretRight.js.map +1 -1
- package/dist/umd/CaretUp.js.map +1 -1
- package/dist/umd/ChartFilled.js.map +1 -1
- package/dist/umd/Charts.js.map +1 -1
- package/dist/umd/Checkmark.js.map +1 -1
- package/dist/umd/CheckmarkWithCircle.js.map +1 -1
- package/dist/umd/ChevronDown.js.map +1 -1
- package/dist/umd/ChevronLeft.js.map +1 -1
- package/dist/umd/ChevronRight.js.map +1 -1
- package/dist/umd/ChevronUp.js.map +1 -1
- package/dist/umd/Circle.js.map +1 -1
- package/dist/umd/Clock.js.map +1 -1
- package/dist/umd/ClockWithArrow.js.map +1 -1
- package/dist/umd/Clone.js.map +1 -1
- package/dist/umd/Cloud.js.map +1 -1
- package/dist/umd/Code.js.map +1 -1
- package/dist/umd/CodeBlock.js.map +1 -1
- package/dist/umd/Coin.js.map +1 -1
- package/dist/umd/Colon.js.map +1 -1
- package/dist/umd/Config.js.map +1 -1
- package/dist/umd/Connect.js.map +1 -1
- package/dist/umd/Copy.js.map +1 -1
- package/dist/umd/CreditCard.js.map +1 -1
- package/dist/umd/CurlyBraces.js.map +1 -1
- package/dist/umd/Cursor.js.map +1 -1
- package/dist/umd/Dashboard.js.map +1 -1
- package/dist/umd/Database.js.map +1 -1
- package/dist/umd/Diagram.js.map +1 -1
- package/dist/umd/Diagram2.js.map +1 -1
- package/dist/umd/Diagram3.js.map +1 -1
- package/dist/umd/Disconnect.js.map +1 -1
- package/dist/umd/Download.js.map +1 -1
- package/dist/umd/Drag.js.map +1 -1
- package/dist/umd/Edit.js.map +1 -1
- package/dist/umd/Ellipsis.js.map +1 -1
- package/dist/umd/Email.js.map +1 -1
- package/dist/umd/EmptyDatabase.js.map +1 -1
- package/dist/umd/EmptyFolder.js.map +1 -1
- package/dist/umd/Eraser.js.map +1 -1
- package/dist/umd/Escalation.js.map +1 -1
- package/dist/umd/Export.js.map +1 -1
- package/dist/umd/Favorite.js.map +1 -1
- package/dist/umd/Federation.js.map +1 -1
- package/dist/umd/File.js.map +1 -1
- package/dist/umd/Filter.js.map +1 -1
- package/dist/umd/Folder.js.map +1 -1
- package/dist/umd/Format.js.map +1 -1
- package/dist/umd/FullScreenEnter.js.map +1 -1
- package/dist/umd/FullScreenExit.js.map +1 -1
- package/dist/umd/Function.js.map +1 -1
- package/dist/umd/Gauge.js.map +1 -1
- package/dist/umd/GlobeAmericas.js.map +1 -1
- package/dist/umd/GovernmentBuilding.js.map +1 -1
- package/dist/umd/Guide.js.map +1 -1
- package/dist/umd/Hash.js.map +1 -1
- package/dist/umd/HiddenSecondaryNode.js.map +1 -1
- package/dist/umd/Highlight.js.map +1 -1
- package/dist/umd/Home.js.map +1 -1
- package/dist/umd/HorizontalDrag.js.map +1 -1
- package/dist/umd/Import.js.map +1 -1
- package/dist/umd/ImportantWithCircle.js.map +1 -1
- package/dist/umd/InfoWithCircle.js.map +1 -1
- package/dist/umd/InternalEmployee.js.map +1 -1
- package/dist/umd/InviteUser.js.map +1 -1
- package/dist/umd/Key.js.map +1 -1
- package/dist/umd/Laptop.js.map +1 -1
- package/dist/umd/LightningBolt.js.map +1 -1
- package/dist/umd/Link.js.map +1 -1
- package/dist/umd/List.js.map +1 -1
- package/dist/umd/Lock.js.map +1 -1
- package/dist/umd/LogIn.js.map +1 -1
- package/dist/umd/LogOut.js.map +1 -1
- package/dist/umd/MagnifyingGlass.js.map +1 -1
- package/dist/umd/Megaphone.js.map +1 -1
- package/dist/umd/Menu.js.map +1 -1
- package/dist/umd/Minus.js.map +1 -1
- package/dist/umd/Mobile.js.map +1 -1
- package/dist/umd/Moon.js.map +1 -1
- package/dist/umd/MultiDirectionArrow.js.map +1 -1
- package/dist/umd/MultiLayers.js.map +1 -1
- package/dist/umd/NavCollapse.js.map +1 -1
- package/dist/umd/NavExpand.js.map +1 -1
- package/dist/umd/NoFilter.js.map +1 -1
- package/dist/umd/NotAllowed.js.map +1 -1
- package/dist/umd/Note.js.map +1 -1
- package/dist/umd/NumberedList.js.map +1 -1
- package/dist/umd/OpenNewTab.js.map +1 -1
- package/dist/umd/OutlineFavorite.js.map +1 -1
- package/dist/umd/Package.js.map +1 -1
- package/dist/umd/Pause.js.map +1 -1
- package/dist/umd/Pending.js.map +1 -1
- package/dist/umd/Person.js.map +1 -1
- package/dist/umd/PersonGroup.js.map +1 -1
- package/dist/umd/PersonWithLock.js.map +1 -1
- package/dist/umd/Pin.js.map +1 -1
- package/dist/umd/Play.js.map +1 -1
- package/dist/umd/Plus.js.map +1 -1
- package/dist/umd/PlusWithCircle.js.map +1 -1
- package/dist/umd/Primary.js.map +1 -1
- package/dist/umd/Project.js.map +1 -1
- package/dist/umd/QuestionMarkWithCircle.js.map +1 -1
- package/dist/umd/Read.js.map +1 -1
- package/dist/umd/Recommended.js.map +1 -1
- package/dist/umd/Redo.js.map +1 -1
- package/dist/umd/Refresh.js.map +1 -1
- package/dist/umd/Relationship.js.map +1 -1
- package/dist/umd/ReplicaSet.js.map +1 -1
- package/dist/umd/Resize.js.map +1 -1
- package/dist/umd/Resource.js.map +1 -1
- package/dist/umd/Return.js.map +1 -1
- package/dist/umd/Revert.js.map +1 -1
- package/dist/umd/Router.js.map +1 -1
- package/dist/umd/SMS.js.map +1 -1
- package/dist/umd/Save.js.map +1 -1
- package/dist/umd/SearchIndex.js.map +1 -1
- package/dist/umd/Secondary.js.map +1 -1
- package/dist/umd/Serverless.js.map +1 -1
- package/dist/umd/Settings.js.map +1 -1
- package/dist/umd/ShardedCluster.js.map +1 -1
- package/dist/umd/Shell.js.map +1 -1
- package/dist/umd/Shield.js.map +1 -1
- package/dist/umd/Shirt.js.map +1 -1
- package/dist/umd/Shortcut.js.map +1 -1
- package/dist/umd/SortAscending.js.map +1 -1
- package/dist/umd/SortDescending.js.map +1 -1
- package/dist/umd/Sparkle.js.map +1 -1
- package/dist/umd/SplitHorizontal.js.map +1 -1
- package/dist/umd/SplitVertical.js.map +1 -1
- package/dist/umd/Stitch.js.map +1 -1
- package/dist/umd/Stop.js.map +1 -1
- package/dist/umd/Streaming.js.map +1 -1
- package/dist/umd/String.js.map +1 -1
- package/dist/umd/Sun.js.map +1 -1
- package/dist/umd/Support.js.map +1 -1
- package/dist/umd/Sweep.js.map +1 -1
- package/dist/umd/Table.js.map +1 -1
- package/dist/umd/Tag.js.map +1 -1
- package/dist/umd/TemporaryTable.js.map +1 -1
- package/dist/umd/ThumbsDown.js.map +1 -1
- package/dist/umd/ThumbsUp.js.map +1 -1
- package/dist/umd/TimeSeries.js.map +1 -1
- package/dist/umd/TimeSeriesCollection.js.map +1 -1
- package/dist/umd/Trash.js.map +1 -1
- package/dist/umd/Undo.js.map +1 -1
- package/dist/umd/University.js.map +1 -1
- package/dist/umd/Unlock.js.map +1 -1
- package/dist/umd/Unsorted.js.map +1 -1
- package/dist/umd/UpDownCarets.js.map +1 -1
- package/dist/umd/Upload.js.map +1 -1
- package/dist/umd/VerticalEllipsis.js.map +1 -1
- package/dist/umd/View.js.map +1 -1
- package/dist/umd/Visibility.js.map +1 -1
- package/dist/umd/VisibilityOff.js.map +1 -1
- package/dist/umd/Warning.js.map +1 -1
- package/dist/umd/Wizard.js.map +1 -1
- package/dist/umd/Wrench.js.map +1 -1
- package/dist/umd/Write.js.map +1 -1
- package/dist/umd/X.js.map +1 -1
- package/dist/umd/XWithCircle.js.map +1 -1
- package/dist/umd/index.js +1 -1
- package/dist/umd/index.js.map +1 -1
- package/package.json +6 -6
- package/scripts/build/build-batch.ts +13 -6
- package/scripts/build/build.ts +1 -0
- package/src/Icon.spec.tsx +13 -0
- package/src/Icon.stories.tsx +13 -1
- package/src/createGlyphComponent.spec.tsx +274 -0
- package/src/createGlyphComponent.tsx +3 -1
- package/src/createIconComponent.spec.tsx +395 -0
- package/src/createIconComponent.tsx +14 -1
- package/src/testUtils.tsx +26 -0
- package/stories.js +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@leafygreen-ui/icon",
|
|
3
|
-
"version": "14.7.
|
|
3
|
+
"version": "14.7.2",
|
|
4
4
|
"description": "LeafyGreen UI Kit Icons",
|
|
5
5
|
"main": "./dist/umd/index.js",
|
|
6
6
|
"module": "./dist/esm/index.js",
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
},
|
|
30
30
|
"dependencies": {
|
|
31
31
|
"lodash": "^4.17.21",
|
|
32
|
-
"@leafygreen-ui/emotion": "^5.
|
|
32
|
+
"@leafygreen-ui/emotion": "^5.2.0",
|
|
33
33
|
"@leafygreen-ui/hooks": "^9.3.0"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
|
@@ -44,10 +44,10 @@
|
|
|
44
44
|
"rollup-plugin-node-externals": "7.1.1",
|
|
45
45
|
"xml2json": "^0.12.0",
|
|
46
46
|
"@leafygreen-ui/palette": "^5.0.2",
|
|
47
|
-
"@
|
|
48
|
-
"@
|
|
49
|
-
"@lg-tools/lint": "^3.1.
|
|
50
|
-
"@lg-tools/storybook-utils": "^0.3.
|
|
47
|
+
"@leafygreen-ui/lib": "^15.7.0",
|
|
48
|
+
"@lg-tools/build": "^0.9.0",
|
|
49
|
+
"@lg-tools/lint": "^3.1.1",
|
|
50
|
+
"@lg-tools/storybook-utils": "^0.3.4"
|
|
51
51
|
},
|
|
52
52
|
"gitHead": "dd71a2d404218ccec2e657df9c0263dc1c15b9e0",
|
|
53
53
|
"homepage": "https://github.com/mongodb/leafygreen-ui/tree/main/packages/icon",
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
/* eslint-disable no-console */
|
|
2
|
-
import {
|
|
2
|
+
import { InputPluginOption, rollup, type RollupOptions } from 'rollup';
|
|
3
3
|
|
|
4
4
|
import { GENERATED_DIR } from './constants';
|
|
5
5
|
|
|
6
6
|
async function getBatchBuildOptions(
|
|
7
7
|
batch: Array<string>,
|
|
8
|
-
): Promise<Array<
|
|
8
|
+
): Promise<Array<RollupOptions>> {
|
|
9
9
|
const { constructUMDGlobalName } = await import(
|
|
10
10
|
'@lg-tools/build/config/utils/constructUMDGlobalName.mjs'
|
|
11
11
|
);
|
|
@@ -21,11 +21,11 @@ async function getBatchBuildOptions(
|
|
|
21
21
|
{
|
|
22
22
|
...esmConfig,
|
|
23
23
|
input: batch.map(icon => `${GENERATED_DIR}/${icon}.tsx`),
|
|
24
|
-
output:
|
|
24
|
+
output: esmConfig.output,
|
|
25
25
|
plugins: [
|
|
26
26
|
// Ensure @emotion packages are externalized (not bundled into icons)
|
|
27
27
|
nodeExternals({ deps: true, include: [/@emotion/] }),
|
|
28
|
-
...esmConfig.plugins,
|
|
28
|
+
...(esmConfig.plugins as Array<InputPluginOption>),
|
|
29
29
|
],
|
|
30
30
|
},
|
|
31
31
|
// UMD builds need a single input file
|
|
@@ -43,7 +43,7 @@ async function getBatchBuildOptions(
|
|
|
43
43
|
plugins: [
|
|
44
44
|
// Ensure @emotion packages are externalized (not bundled into icons)
|
|
45
45
|
nodeExternals({ deps: true, include: [/@emotion/] }),
|
|
46
|
-
...umdConfig.plugins,
|
|
46
|
+
...(umdConfig.plugins as Array<InputPluginOption>),
|
|
47
47
|
],
|
|
48
48
|
};
|
|
49
49
|
}),
|
|
@@ -64,7 +64,14 @@ export async function buildBatch(
|
|
|
64
64
|
for (const config of rollupConfigs) {
|
|
65
65
|
const bundle = await rollup(config);
|
|
66
66
|
|
|
67
|
-
|
|
67
|
+
if (config.output) {
|
|
68
|
+
const outputs = Array.isArray(config.output)
|
|
69
|
+
? config.output
|
|
70
|
+
: [config.output];
|
|
71
|
+
|
|
72
|
+
await Promise.all(outputs.map(bundle.write));
|
|
73
|
+
}
|
|
74
|
+
|
|
68
75
|
await bundle.close();
|
|
69
76
|
}
|
|
70
77
|
} catch (e) {
|
package/scripts/build/build.ts
CHANGED
|
@@ -89,6 +89,7 @@ async function buildIcons(options: BuildIconOptions): Promise<void> {
|
|
|
89
89
|
|
|
90
90
|
new Command()
|
|
91
91
|
.description('Split icon files into batches for bundling in parallel')
|
|
92
|
+
.option('-f, --force', 'Force build all icons', false)
|
|
92
93
|
.option('-v, --verbose', 'Enable verbose output', false)
|
|
93
94
|
.action(buildIcons)
|
|
94
95
|
.parse();
|
package/src/Icon.spec.tsx
CHANGED
|
@@ -9,6 +9,7 @@ import { typeIs } from '@leafygreen-ui/lib';
|
|
|
9
9
|
|
|
10
10
|
import EditIcon from './generated/Edit';
|
|
11
11
|
import { Size } from './glyphCommon';
|
|
12
|
+
import { Icon } from './Icon';
|
|
12
13
|
import { isComponentGlyph } from './isComponentGlyph';
|
|
13
14
|
import { SVGR } from './types';
|
|
14
15
|
import { createGlyphComponent, createIconComponent, glyphs } from '.';
|
|
@@ -256,6 +257,18 @@ describe('packages/Icon/createIconComponent', () => {
|
|
|
256
257
|
});
|
|
257
258
|
});
|
|
258
259
|
|
|
260
|
+
describe('packages/Icon/Icon', () => {
|
|
261
|
+
test('`fill` prop applies CSS color correctly', () => {
|
|
262
|
+
const { container } = render(<Icon glyph="Edit" fill="red" />);
|
|
263
|
+
const svg = container.querySelector('svg');
|
|
264
|
+
expect(svg).toBeInTheDocument();
|
|
265
|
+
// The fill prop should be applied as a CSS color via emotion
|
|
266
|
+
// We check that the computed style has the correct color
|
|
267
|
+
const computedStyle = window.getComputedStyle(svg!);
|
|
268
|
+
expect(computedStyle.color).toBe('red');
|
|
269
|
+
});
|
|
270
|
+
});
|
|
271
|
+
|
|
259
272
|
describe('Generated glyphs', () => {
|
|
260
273
|
test('Edit icon has displayName: "Edit"', () => {
|
|
261
274
|
expect(EditIcon.displayName).toBe('Edit');
|
package/src/Icon.stories.tsx
CHANGED
|
@@ -9,7 +9,7 @@ import { css } from '@leafygreen-ui/emotion';
|
|
|
9
9
|
import { palette } from '@leafygreen-ui/palette';
|
|
10
10
|
|
|
11
11
|
import { GlyphName } from './glyphs';
|
|
12
|
-
import Icon, { glyphs, IconProps, Size } from '.';
|
|
12
|
+
import Icon, { createIconComponent, glyphs, IconProps, Size } from '.';
|
|
13
13
|
|
|
14
14
|
const meta: StoryMetaType<typeof Icon> = {
|
|
15
15
|
title: 'Components/Display/Icon',
|
|
@@ -109,6 +109,18 @@ export const LiveExample: StoryObj<IconProps> = {
|
|
|
109
109
|
),
|
|
110
110
|
};
|
|
111
111
|
|
|
112
|
+
export const Custom: StoryObj<typeof Icon> = {
|
|
113
|
+
parameters: {
|
|
114
|
+
controls: {
|
|
115
|
+
exclude: [...meta.parameters.controls!.exclude!, 'glyph'],
|
|
116
|
+
},
|
|
117
|
+
},
|
|
118
|
+
render: (args: Omit<IconProps, 'glyph'>) => {
|
|
119
|
+
const CustomIcon = createIconComponent(glyphs);
|
|
120
|
+
return <CustomIcon glyph="Checkmark" {...args} />;
|
|
121
|
+
},
|
|
122
|
+
};
|
|
123
|
+
|
|
112
124
|
export const Generated: StoryObj<typeof Icon> = {
|
|
113
125
|
parameters: {
|
|
114
126
|
generate: {
|
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { render, screen } from '@testing-library/react';
|
|
3
|
+
|
|
4
|
+
import { createGlyphComponent } from './createGlyphComponent';
|
|
5
|
+
import { Size } from './glyphCommon';
|
|
6
|
+
import { isComponentGlyph } from './isComponentGlyph';
|
|
7
|
+
import { TestSVGRGlyph, TestSVGRGlyphWithChildren } from './testUtils';
|
|
8
|
+
|
|
9
|
+
describe('packages/Icon/createGlyphComponent', () => {
|
|
10
|
+
describe('basic functionality', () => {
|
|
11
|
+
const GlyphComponent = createGlyphComponent('TestGlyph', TestSVGRGlyph);
|
|
12
|
+
|
|
13
|
+
test('returns a function', () => {
|
|
14
|
+
expect(typeof GlyphComponent).toBe('function');
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
test('returned component has the correct displayName', () => {
|
|
18
|
+
expect(GlyphComponent.displayName).toBe('TestGlyph');
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
test('returned component has the property `isGlyph`', () => {
|
|
22
|
+
expect(GlyphComponent).toHaveProperty('isGlyph');
|
|
23
|
+
expect(GlyphComponent.isGlyph).toBe(true);
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
test('returned component passes `isComponentGlyph`', () => {
|
|
27
|
+
expect(isComponentGlyph(GlyphComponent)).toBe(true);
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
describe('rendering', () => {
|
|
32
|
+
const GlyphComponent = createGlyphComponent('TestGlyph', TestSVGRGlyph);
|
|
33
|
+
|
|
34
|
+
test('renders an SVG element', () => {
|
|
35
|
+
render(<GlyphComponent />);
|
|
36
|
+
const glyph = screen.getByTestId('mock-glyph');
|
|
37
|
+
expect(glyph).toBeInTheDocument();
|
|
38
|
+
expect(glyph.nodeName.toLowerCase()).toBe('svg');
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
test('passes through additional props to the SVG element', () => {
|
|
42
|
+
render(<GlyphComponent data-custom="custom-value" />);
|
|
43
|
+
const glyph = screen.getByTestId('mock-glyph');
|
|
44
|
+
expect(glyph).toHaveAttribute('data-custom', 'custom-value');
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
describe('size prop', () => {
|
|
49
|
+
const GlyphComponent = createGlyphComponent('TestGlyph', TestSVGRGlyph);
|
|
50
|
+
|
|
51
|
+
test('applies numeric size to height and width', () => {
|
|
52
|
+
render(<GlyphComponent size={24} />);
|
|
53
|
+
const glyph = screen.getByTestId('mock-glyph');
|
|
54
|
+
expect(glyph).toHaveAttribute('height', '24');
|
|
55
|
+
expect(glyph).toHaveAttribute('width', '24');
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
test('applies Size.Small correctly (14px)', () => {
|
|
59
|
+
render(<GlyphComponent size={Size.Small} />);
|
|
60
|
+
const glyph = screen.getByTestId('mock-glyph');
|
|
61
|
+
expect(glyph).toHaveAttribute('height', '14');
|
|
62
|
+
expect(glyph).toHaveAttribute('width', '14');
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
test('applies Size.Default correctly (16px)', () => {
|
|
66
|
+
render(<GlyphComponent size={Size.Default} />);
|
|
67
|
+
const glyph = screen.getByTestId('mock-glyph');
|
|
68
|
+
expect(glyph).toHaveAttribute('height', '16');
|
|
69
|
+
expect(glyph).toHaveAttribute('width', '16');
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
test('applies Size.Large correctly (20px)', () => {
|
|
73
|
+
render(<GlyphComponent size={Size.Large} />);
|
|
74
|
+
const glyph = screen.getByTestId('mock-glyph');
|
|
75
|
+
expect(glyph).toHaveAttribute('height', '20');
|
|
76
|
+
expect(glyph).toHaveAttribute('width', '20');
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
test('applies Size.XLarge correctly (24px)', () => {
|
|
80
|
+
render(<GlyphComponent size={Size.XLarge} />);
|
|
81
|
+
const glyph = screen.getByTestId('mock-glyph');
|
|
82
|
+
expect(glyph).toHaveAttribute('height', '24');
|
|
83
|
+
expect(glyph).toHaveAttribute('width', '24');
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
test('uses Size.Default (16px) when size prop is not provided', () => {
|
|
87
|
+
render(<GlyphComponent />);
|
|
88
|
+
const glyph = screen.getByTestId('mock-glyph');
|
|
89
|
+
expect(glyph).toHaveAttribute('height', '16');
|
|
90
|
+
expect(glyph).toHaveAttribute('width', '16');
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
describe('fill prop', () => {
|
|
95
|
+
const GlyphComponent = createGlyphComponent('TestGlyph', TestSVGRGlyph);
|
|
96
|
+
|
|
97
|
+
test('applies fill as CSS color via className', () => {
|
|
98
|
+
render(<GlyphComponent fill="red" />);
|
|
99
|
+
const glyph = screen.getByTestId('mock-glyph');
|
|
100
|
+
// Fill is applied as a CSS color via an emotion-generated class
|
|
101
|
+
expect(glyph).toHaveAttribute('class');
|
|
102
|
+
expect(glyph.className).not.toBe('');
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
test('does not apply fill style class when fill is not provided', () => {
|
|
106
|
+
render(<GlyphComponent />);
|
|
107
|
+
const glyph = screen.getByTestId('mock-glyph');
|
|
108
|
+
// When no fill is provided, no emotion class should be applied
|
|
109
|
+
expect(glyph.classList.length).toBe(0);
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
test('applies fill alongside other props', () => {
|
|
113
|
+
render(<GlyphComponent fill="blue" className="custom-class" size={32} />);
|
|
114
|
+
const glyph = screen.getByTestId('mock-glyph');
|
|
115
|
+
expect(glyph).toHaveClass('custom-class');
|
|
116
|
+
expect(glyph).toHaveAttribute('height', '32');
|
|
117
|
+
expect(glyph).toHaveAttribute('width', '32');
|
|
118
|
+
// Fill adds an emotion class in addition to custom-class
|
|
119
|
+
expect(glyph.classList.length).toBeGreaterThan(1);
|
|
120
|
+
});
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
describe('className prop', () => {
|
|
124
|
+
const GlyphComponent = createGlyphComponent('TestGlyph', TestSVGRGlyph);
|
|
125
|
+
|
|
126
|
+
test('applies className to the SVG element', () => {
|
|
127
|
+
render(<GlyphComponent className="my-custom-class" />);
|
|
128
|
+
const glyph = screen.getByTestId('mock-glyph');
|
|
129
|
+
expect(glyph).toHaveClass('my-custom-class');
|
|
130
|
+
});
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
describe('role prop', () => {
|
|
134
|
+
const GlyphComponent = createGlyphComponent('TestGlyph', TestSVGRGlyph);
|
|
135
|
+
|
|
136
|
+
test('applies role="img" by default', () => {
|
|
137
|
+
render(<GlyphComponent />);
|
|
138
|
+
const glyph = screen.getByTestId('mock-glyph');
|
|
139
|
+
expect(glyph).toHaveAttribute('role', 'img');
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
test('applies role="presentation" when specified', () => {
|
|
143
|
+
render(<GlyphComponent role="presentation" />);
|
|
144
|
+
const glyph = screen.getByTestId('mock-glyph');
|
|
145
|
+
expect(glyph).toHaveAttribute('role', 'presentation');
|
|
146
|
+
expect(glyph).toHaveAttribute('aria-hidden', 'true');
|
|
147
|
+
});
|
|
148
|
+
|
|
149
|
+
test('logs a warning when an invalid role is provided', () => {
|
|
150
|
+
const consoleSpy = jest
|
|
151
|
+
.spyOn(console, 'warn')
|
|
152
|
+
.mockImplementation(() => {});
|
|
153
|
+
|
|
154
|
+
// @ts-expect-error - intentionally passing invalid role for testing
|
|
155
|
+
// eslint-disable-next-line jsx-a11y/aria-role
|
|
156
|
+
render(<GlyphComponent role="invalid" />);
|
|
157
|
+
|
|
158
|
+
expect(consoleSpy).toHaveBeenCalledWith(
|
|
159
|
+
"Please provide a valid role to this component. Valid options are 'img' and 'presentation'. If you'd like the Icon to be accessible to screen readers please use 'img', otherwise set the role to 'presentation'.",
|
|
160
|
+
);
|
|
161
|
+
|
|
162
|
+
consoleSpy.mockRestore();
|
|
163
|
+
});
|
|
164
|
+
});
|
|
165
|
+
|
|
166
|
+
describe('accessibility props', () => {
|
|
167
|
+
const GlyphComponent = createGlyphComponent('TestGlyph', TestSVGRGlyph);
|
|
168
|
+
|
|
169
|
+
test('generates default aria-label from glyph name when no accessibility props provided', () => {
|
|
170
|
+
render(<GlyphComponent />);
|
|
171
|
+
const glyph = screen.getByTestId('mock-glyph');
|
|
172
|
+
expect(glyph).toHaveAttribute('aria-label', 'Test Glyph Icon');
|
|
173
|
+
});
|
|
174
|
+
|
|
175
|
+
test('applies custom aria-label when provided', () => {
|
|
176
|
+
render(<GlyphComponent aria-label="My Custom Label" />);
|
|
177
|
+
const glyph = screen.getByTestId('mock-glyph');
|
|
178
|
+
expect(glyph).toHaveAttribute('aria-label', 'My Custom Label');
|
|
179
|
+
});
|
|
180
|
+
|
|
181
|
+
test('applies aria-labelledby when provided', () => {
|
|
182
|
+
render(<GlyphComponent aria-labelledby="my-label-id" />);
|
|
183
|
+
const glyph = screen.getByTestId('mock-glyph');
|
|
184
|
+
expect(glyph).toHaveAttribute('aria-labelledby', 'my-label-id');
|
|
185
|
+
});
|
|
186
|
+
|
|
187
|
+
test('sets aria-labelledby when title is provided', () => {
|
|
188
|
+
render(<GlyphComponent title="Test Title" />);
|
|
189
|
+
const glyph = screen.getByTestId('mock-glyph');
|
|
190
|
+
const ariaLabelledBy = glyph.getAttribute('aria-labelledby');
|
|
191
|
+
expect(ariaLabelledBy).not.toBeNull();
|
|
192
|
+
expect(ariaLabelledBy).toContain('icon-title');
|
|
193
|
+
});
|
|
194
|
+
|
|
195
|
+
test('combines title ID with aria-labelledby when both are provided', () => {
|
|
196
|
+
render(
|
|
197
|
+
<GlyphComponent title="Test Title" aria-labelledby="external-label" />,
|
|
198
|
+
);
|
|
199
|
+
const glyph = screen.getByTestId('mock-glyph');
|
|
200
|
+
|
|
201
|
+
const ariaLabelledBy = glyph.getAttribute('aria-labelledby');
|
|
202
|
+
expect(ariaLabelledBy).toContain('external-label');
|
|
203
|
+
expect(ariaLabelledBy).toContain('icon-title');
|
|
204
|
+
});
|
|
205
|
+
|
|
206
|
+
test('sets the title ID when title is provided', () => {
|
|
207
|
+
render(<GlyphComponent title="Test Title" />);
|
|
208
|
+
const glyph = screen.getByTestId('mock-glyph');
|
|
209
|
+
const titleId = glyph.getAttribute('aria-labelledby');
|
|
210
|
+
expect(titleId).not.toBeNull();
|
|
211
|
+
expect(titleId).toContain('icon-title');
|
|
212
|
+
});
|
|
213
|
+
|
|
214
|
+
test('sets aria-hidden to true when role is presentation', () => {
|
|
215
|
+
render(<GlyphComponent role="presentation" />);
|
|
216
|
+
const glyph = screen.getByTestId('mock-glyph');
|
|
217
|
+
expect(glyph).toHaveAttribute('aria-hidden', 'true');
|
|
218
|
+
});
|
|
219
|
+
});
|
|
220
|
+
|
|
221
|
+
describe('title prop', () => {
|
|
222
|
+
const GlyphComponent = createGlyphComponent(
|
|
223
|
+
'TestGlyph',
|
|
224
|
+
TestSVGRGlyphWithChildren,
|
|
225
|
+
);
|
|
226
|
+
|
|
227
|
+
test('does not include title in children when title is not provided', () => {
|
|
228
|
+
render(<GlyphComponent />);
|
|
229
|
+
const glyph = screen.getByTestId('mock-glyph-with-children');
|
|
230
|
+
const titleElement = glyph.querySelector('title');
|
|
231
|
+
expect(titleElement).not.toBeInTheDocument();
|
|
232
|
+
});
|
|
233
|
+
});
|
|
234
|
+
|
|
235
|
+
describe('combined props', () => {
|
|
236
|
+
const GlyphComponent = createGlyphComponent('TestGlyph', TestSVGRGlyph);
|
|
237
|
+
|
|
238
|
+
test('applies all props correctly together', () => {
|
|
239
|
+
render(
|
|
240
|
+
<GlyphComponent
|
|
241
|
+
size={32}
|
|
242
|
+
className="combined-class"
|
|
243
|
+
fill="purple"
|
|
244
|
+
aria-label="Combined Icon"
|
|
245
|
+
/>,
|
|
246
|
+
);
|
|
247
|
+
const glyph = screen.getByTestId('mock-glyph');
|
|
248
|
+
|
|
249
|
+
expect(glyph).toHaveAttribute('height', '32');
|
|
250
|
+
expect(glyph).toHaveAttribute('width', '32');
|
|
251
|
+
expect(glyph).toHaveClass('combined-class');
|
|
252
|
+
expect(glyph).toHaveAttribute('aria-label', 'Combined Icon');
|
|
253
|
+
// Fill adds an emotion class in addition to combined-class
|
|
254
|
+
expect(glyph.classList.length).toBeGreaterThan(1);
|
|
255
|
+
});
|
|
256
|
+
|
|
257
|
+
test('applies size enum with className and role', () => {
|
|
258
|
+
render(
|
|
259
|
+
<GlyphComponent
|
|
260
|
+
size={Size.Large}
|
|
261
|
+
className="accessible-class"
|
|
262
|
+
role="presentation"
|
|
263
|
+
/>,
|
|
264
|
+
);
|
|
265
|
+
const glyph = screen.getByTestId('mock-glyph');
|
|
266
|
+
|
|
267
|
+
expect(glyph).toHaveAttribute('height', '20');
|
|
268
|
+
expect(glyph).toHaveAttribute('width', '20');
|
|
269
|
+
expect(glyph).toHaveClass('accessible-class');
|
|
270
|
+
expect(glyph).toHaveAttribute('role', 'presentation');
|
|
271
|
+
expect(glyph).toHaveAttribute('aria-hidden', 'true');
|
|
272
|
+
});
|
|
273
|
+
});
|
|
274
|
+
});
|
|
@@ -34,6 +34,8 @@ export function createGlyphComponent(
|
|
|
34
34
|
color: ${fill};
|
|
35
35
|
`;
|
|
36
36
|
|
|
37
|
+
// Note: We do not currently support title prop for custom glyphs. TODO: LG-5828
|
|
38
|
+
|
|
37
39
|
const renderedSize = typeof size === 'number' ? size : sizeMap[size];
|
|
38
40
|
|
|
39
41
|
if (!(role === 'img' || role === 'presentation')) {
|
|
@@ -60,7 +62,7 @@ export function createGlyphComponent(
|
|
|
60
62
|
['aria-labelledby']: ariaLabelledby,
|
|
61
63
|
})}
|
|
62
64
|
{...rest}
|
|
63
|
-
|
|
65
|
+
></Glyph>
|
|
64
66
|
);
|
|
65
67
|
};
|
|
66
68
|
|