@leafygreen-ui/icon 11.12.4 → 11.12.6

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/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/glyphCommon.ts","../src/createGlyphComponent.tsx","../src/createIconComponent.tsx","../src/glyphs/index.ts","../src/Icon.tsx","../src/isComponentGlyph.ts"],"sourcesContent":["export const Size = {\n Small: 'small',\n Default: 'default',\n Large: 'large',\n XLarge: 'xlarge',\n} as const;\n\nexport type Size = typeof Size[keyof typeof Size];\n\nexport const sizeMap: Record<Size, number> = {\n small: 14,\n default: 16,\n large: 20,\n xlarge: 24,\n} as const;\n\ninterface AccessibleFunctionParams {\n 'aria-labelledby'?: string;\n 'aria-label'?: string;\n title?: string | null;\n}\n\ntype AccessibleFunctionReturnType =\n | AccessibleFunctionParams\n | { 'aria-hidden': true; alt: '' };\n\nexport function generateAccessibleProps(\n role: 'img' | 'presentation',\n glyphName: string,\n {\n ['aria-label']: ariaLabel,\n ['aria-labelledby']: ariaLabelledby,\n title,\n }: AccessibleFunctionParams,\n): AccessibleFunctionReturnType {\n switch (role) {\n case 'img':\n if (!ariaLabel && !ariaLabelledby && !title) {\n return { 'aria-label': getGlyphLabel(glyphName) };\n }\n\n return {\n ['aria-labelledby']: ariaLabelledby,\n ['aria-label']: ariaLabel,\n title,\n };\n\n case 'presentation':\n return { 'aria-hidden': true, alt: '' };\n }\n}\n\nexport function getGlyphLabel(name: string) {\n return `${name.replace(/([a-z])([A-Z])/g, '$1 $2')} Icon`;\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { css, cx } from '@leafygreen-ui/emotion';\n\nimport { generateAccessibleProps, Size, sizeMap } from './glyphCommon';\nimport { LGGlyph, SVGR } from './types';\n\n/**\n * Returns a single glyph component.\n * Process custom glyphs to ensure consistent behavior between custom and built-in icons\n * @param glyphName: string - the display name of the icon\n * @param Glyph: SVGR.Component - the SVG icon component\n * @returns LGGlyph.Component\n */\nexport function createGlyphComponent(\n glyphName: string,\n Glyph: SVGR.Component,\n): LGGlyph.Component {\n const GlyphComponent: LGGlyph.Component = ({\n className,\n size = Size.Default,\n fill,\n title,\n 'aria-labelledby': ariaLabelledby,\n 'aria-label': ariaLabel,\n role = 'img',\n ...rest\n }: LGGlyph.ComponentProps) => {\n const fillStyle = css`\n color: ${fill};\n `;\n\n const renderedSize = typeof size === 'number' ? size : sizeMap[size];\n\n if (!(role === 'img' || role === 'presentation')) {\n console.warn(\n \"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'.\",\n );\n }\n\n return (\n <Glyph\n className={cx(\n {\n [fillStyle]: fill != null,\n },\n className,\n )}\n height={renderedSize}\n width={renderedSize}\n role={role}\n {...generateAccessibleProps(role, glyphName, {\n title,\n ['aria-label']: ariaLabel,\n ['aria-labelledby']: ariaLabelledby,\n })}\n {...rest}\n />\n );\n };\n\n GlyphComponent.displayName = glyphName;\n\n GlyphComponent.isGlyph = true;\n\n GlyphComponent.propTypes = {\n fill: PropTypes.string,\n size: PropTypes.oneOfType([\n PropTypes.oneOf(Object.values(Size)),\n PropTypes.number,\n ]),\n className: PropTypes.string,\n };\n\n return GlyphComponent;\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { Size } from './glyphCommon';\nimport { LGGlyph } from './types';\n\n// We omit size here because we map string values for size to numbers in this component.\nexport interface IconProps extends Omit<LGGlyph.ComponentProps, 'size'> {\n /**\n * The name of the icon glyph\n */\n glyph: string;\n\n /**\n * Size of the icon\n */\n size?: Size | number;\n}\n\ntype GlyphObject = Record<string, LGGlyph.Component>;\n\n/**\n * Returns a single component with a `glyph` prop to select the glyph\n * @param glyphs The set of glyphs\n * @returns Icon component\n */\nexport function createIconComponent<G extends GlyphObject = GlyphObject>(\n glyphs: G,\n) {\n const Icon = ({ glyph, ...rest }: IconProps) => {\n const SVGComponent = glyphs[glyph];\n SVGComponent.isGlyph = true;\n return <SVGComponent {...rest} />;\n };\n\n Icon.displayName = 'Icon';\n\n Icon.isGlyph = true;\n\n Icon.propTypes = {\n glyph: PropTypes.oneOf(Object.keys(glyphs)).isRequired,\n size: PropTypes.oneOfType([\n PropTypes.oneOf(Object.values(Size)),\n PropTypes.number,\n ]),\n } as any;\n\n return Icon;\n}\n","import { createGlyphComponent } from '../createGlyphComponent';\nimport { LGGlyph } from '../types';\n\n// Glyphs\nimport ActivityFeed from './ActivityFeed.svg';\nimport AddFile from './AddFile.svg';\nimport Apps from './Apps.svg';\nimport Array from './Array.svg';\nimport ArrowDown from './ArrowDown.svg';\nimport ArrowLeft from './ArrowLeft.svg';\nimport ArrowRight from './ArrowRight.svg';\nimport ArrowUp from './ArrowUp.svg';\nimport Beaker from './Beaker.svg';\nimport Bell from './Bell.svg';\nimport Biometric from './Biometric.svg';\nimport Building from './Building.svg';\nimport Bulb from './Bulb.svg';\nimport Calendar from './Calendar.svg';\nimport CaretDown from './CaretDown.svg';\nimport CaretLeft from './CaretLeft.svg';\nimport CaretRight from './CaretRight.svg';\nimport CaretUp from './CaretUp.svg';\nimport Charts from './Charts.svg';\nimport Checkmark from './Checkmark.svg';\nimport CheckmarkWithCircle from './CheckmarkWithCircle.svg';\nimport ChevronDown from './ChevronDown.svg';\nimport ChevronLeft from './ChevronLeft.svg';\nimport ChevronRight from './ChevronRight.svg';\nimport ChevronUp from './ChevronUp.svg';\nimport Clock from './Clock.svg';\nimport ClockWithArrow from './ClockWithArrow.svg';\nimport Clone from './Clone.svg';\nimport Cloud from './Cloud.svg';\nimport Code from './Code.svg';\nimport Connect from './Connect.svg';\nimport Copy from './Copy.svg';\nimport CreditCard from './CreditCard.svg';\nimport CurlyBraces from './CurlyBraces.svg';\nimport Cursor from './Cursor.svg';\nimport Database from './Database.svg';\nimport Diagram from './Diagram.svg';\nimport Diagram2 from './Diagram2.svg';\nimport Diagram3 from './Diagram3.svg';\nimport Disconnect from './Disconnect.svg';\nimport Download from './Download.svg';\nimport Drag from './Drag.svg';\nimport Edit from './Edit.svg';\nimport Ellipsis from './Ellipsis.svg';\nimport Email from './Email.svg';\nimport Export from './Export.svg';\nimport Favorite from './Favorite.svg';\nimport File from './File.svg';\nimport Filter from './Filter.svg';\nimport Folder from './Folder.svg';\nimport FullScreenEnter from './FullScreenEnter.svg';\nimport FullScreenExit from './FullScreenExit.svg';\nimport GlobeAmericas from './GlobeAmericas.svg';\nimport GovernmentBuilding from './GovernmentBuilding.svg';\nimport Home from './Home.svg';\nimport Import from './Import.svg';\nimport ImportantWithCircle from './ImportantWithCircle.svg';\nimport InfoWithCircle from './InfoWithCircle.svg';\nimport InviteUser from './InviteUser.svg';\nimport Key from './Key.svg';\nimport Laptop from './Laptop.svg';\nimport Link from './Link.svg';\nimport Lock from './Lock.svg';\nimport MagnifyingGlass from './MagnifyingGlass.svg';\nimport Megaphone from './Megaphone.svg';\nimport Menu from './Menu.svg';\nimport Minus from './Minus.svg';\nimport NoFilter from './NoFilter.svg';\nimport NotAllowed from './NotAllowed.svg';\nimport Note from './Note.svg';\nimport OpenNewTab from './OpenNewTab.svg';\nimport Pause from './Pause.svg';\nimport Person from './Person.svg';\nimport PersonGroup from './PersonGroup.svg';\nimport PersonWithLock from './PersonWithLock.svg';\nimport Play from './Play.svg';\nimport Plus from './Plus.svg';\nimport PlusWithCircle from './PlusWithCircle.svg';\nimport QuestionMarkWithCircle from './QuestionMarkWithCircle.svg';\nimport Read from './Read.svg';\nimport Redo from './Redo.svg';\nimport Refresh from './Refresh.svg';\nimport Relationship from './Relationship.svg';\nimport ReplicaSet from './ReplicaSet.svg';\nimport Resize from './Resize.svg';\nimport Save from './Save.svg';\nimport Serverless from './Serverless.svg';\nimport Settings from './Settings.svg';\nimport ShardedCluster from './ShardedCluster.svg';\nimport Shell from './Shell.svg';\nimport SMS from './SMS.svg';\nimport SortAscending from './SortAscending.svg';\nimport SortDescending from './SortDescending.svg';\nimport SplitHorizontal from './SplitHorizontal.svg';\nimport SplitVertical from './SplitVertical.svg';\nimport Stitch from './Stitch.svg';\nimport Support from './Support.svg';\nimport Sweep from './Sweep.svg';\nimport Table from './Table.svg';\nimport TimeSeries from './TimeSeries.svg';\nimport Trash from './Trash.svg';\nimport Undo from './Undo.svg';\nimport University from './University.svg';\nimport Unlock from './Unlock.svg';\nimport Unsorted from './Unsorted.svg';\nimport UpDownCarets from './UpDownCarets.svg';\nimport Upload from './Upload.svg';\nimport VerticalEllipsis from './VerticalEllipsis.svg';\nimport Visibility from './Visibility.svg';\nimport VisibilityOff from './VisibilityOff.svg';\nimport Warning from './Warning.svg';\nimport Write from './Write.svg';\nimport X from './X.svg';\nimport XWithCircle from './XWithCircle.svg';\n\nconst _glyphs = {\n ActivityFeed,\n AddFile,\n Apps,\n Array,\n ArrowDown,\n ArrowLeft,\n ArrowRight,\n ArrowUp,\n Beaker,\n Bell,\n Biometric,\n Building,\n Bulb,\n Calendar,\n CaretDown,\n CaretLeft,\n CaretRight,\n CaretUp,\n Charts,\n Checkmark,\n CheckmarkWithCircle,\n ChevronDown,\n ChevronLeft,\n ChevronRight,\n ChevronUp,\n Clock,\n ClockWithArrow,\n Clone,\n Cloud,\n Code,\n Connect,\n Copy,\n CreditCard,\n CurlyBraces,\n Cursor,\n Database,\n Diagram,\n Diagram2,\n Diagram3,\n Disconnect,\n Download,\n Drag,\n Edit,\n Ellipsis,\n Email,\n Export,\n Favorite,\n File,\n Filter,\n FullScreenEnter,\n FullScreenExit,\n Folder,\n GlobeAmericas,\n GovernmentBuilding,\n Home,\n Import,\n ImportantWithCircle,\n InfoWithCircle,\n InviteUser,\n Key,\n Laptop,\n Link,\n Lock,\n MagnifyingGlass,\n Megaphone,\n Menu,\n Minus,\n NoFilter,\n NotAllowed,\n Note,\n OpenNewTab,\n Pause,\n Person,\n PersonGroup,\n PersonWithLock,\n Play,\n Plus,\n PlusWithCircle,\n QuestionMarkWithCircle,\n Read,\n Redo,\n Refresh,\n Relationship,\n ReplicaSet,\n Resize,\n Save,\n Serverless,\n ShardedCluster,\n Settings,\n Shell,\n SMS,\n SortAscending,\n SortDescending,\n SplitHorizontal,\n SplitVertical,\n Stitch,\n Support,\n Sweep,\n Table,\n TimeSeries,\n Trash,\n Undo,\n University,\n Unlock,\n Unsorted,\n UpDownCarets,\n Upload,\n VerticalEllipsis,\n Visibility,\n VisibilityOff,\n Warning,\n Write,\n X,\n XWithCircle,\n} as const;\n\nexport type GlyphName = keyof typeof _glyphs;\n\nconst glyphKeys = Object.keys(_glyphs) as Array<GlyphName>;\n\nexport const glyphs = glyphKeys.reduce((acc, name) => {\n acc[name] = createGlyphComponent(name, _glyphs[name]);\n\n return acc;\n}, {} as Record<GlyphName, LGGlyph.Component>);\n","import { createIconComponent } from './createIconComponent';\nimport { glyphs } from './glyphs';\n\nexport const Icon = createIconComponent(glyphs);\n","import { ComponentType, isValidElement, ReactNode } from 'react';\n\nimport { LGGlyph } from './types';\n\ntype ExtendedComponentType = ComponentType<any> & {\n [key: string]: any;\n};\n/**\n * Helper type to check if element is a LeafyGreen UI Glyph\n * @internal\n */\nfunction isComponentGlyph(node: ReactNode): node is LGGlyph.Element;\nfunction isComponentGlyph(\n component: ExtendedComponentType,\n): component is LGGlyph.Component;\nfunction isComponentGlyph(\n child: ReactNode | ExtendedComponentType,\n): child is LGGlyph.Element | LGGlyph.Component {\n // If we're received a rendered component (i.e. ReactNode)\n if (isValidElement(child)) {\n return (\n child != null &&\n typeof child === 'object' &&\n 'type' in child &&\n (child.type as any).isGlyph === true\n );\n }\n\n // If we've recieved a component function\n return (\n child != null &&\n typeof child === 'function' &&\n 'isGlyph' in child &&\n child.isGlyph === true\n );\n}\n\nexport { isComponentGlyph };\n"],"names":["_templateObject","Size","Small","Default","Large","XLarge","sizeMap","small","default","large","xlarge","_excluded","createGlyphComponent","glyphName","Glyph","GlyphComponent","_ref","_generateAccessiblePr","className","_ref$size","size","fill","title","ariaLabelledby","ariaLabel","_ref$role","role","rest","_objectWithoutProperties","fillStyle","css","renderedSize","console","warn","React","createElement","_extends","cx","_defineProperty","height","width","_ref2","name","concat","replace","alt","generateAccessibleProps","displayName","isGlyph","propTypes","PropTypes","string","oneOfType","oneOf","Object","values","number","createIconComponent","glyphs","Icon","glyph","SVGComponent","keys","isRequired","_glyphs","ActivityFeed","AddFile","Apps","Array","ArrowDown","ArrowLeft","ArrowRight","ArrowUp","Beaker","Bell","Biometric","Building","Bulb","Calendar","CaretDown","CaretLeft","CaretRight","CaretUp","Charts","Checkmark","CheckmarkWithCircle","ChevronDown","ChevronLeft","ChevronRight","ChevronUp","Clock","ClockWithArrow","Clone","Cloud","Code","Connect","Copy","CreditCard","CurlyBraces","Cursor","Database","Diagram","Diagram2","Diagram3","Disconnect","Download","Drag","Edit","Ellipsis","Email","Export","Favorite","File","Filter","FullScreenEnter","FullScreenExit","Folder","GlobeAmericas","GovernmentBuilding","Home","Import","ImportantWithCircle","InfoWithCircle","InviteUser","Key","Laptop","Link","Lock","MagnifyingGlass","Megaphone","Menu","Minus","NoFilter","NotAllowed","Note","OpenNewTab","Pause","Person","PersonGroup","PersonWithLock","Play","Plus","PlusWithCircle","QuestionMarkWithCircle","Read","Redo","Refresh","Relationship","ReplicaSet","Resize","Save","Serverless","ShardedCluster","Settings","Shell","SMS","SortAscending","SortDescending","SplitHorizontal","SplitVertical","Stitch","Support","Sweep","Table","TimeSeries","Trash","Undo","University","Unlock","Unsorted","UpDownCarets","Upload","VerticalEllipsis","Visibility","VisibilityOff","Warning","Write","X","XWithCircle","reduce","acc","child","isValidElement","_typeof","type"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/glyphCommon.ts","../src/createGlyphComponent.tsx","../src/createIconComponent.tsx","../src/glyphs/index.ts","../src/Icon.tsx","../src/isComponentGlyph.ts"],"sourcesContent":["export const Size = {\n Small: 'small',\n Default: 'default',\n Large: 'large',\n XLarge: 'xlarge',\n} as const;\n\nexport type Size = typeof Size[keyof typeof Size];\n\nexport const sizeMap: Record<Size, number> = {\n small: 14,\n default: 16,\n large: 20,\n xlarge: 24,\n} as const;\n\ninterface AccessibleFunctionParams {\n 'aria-labelledby'?: string;\n 'aria-label'?: string;\n title?: string | null;\n}\n\ntype AccessibleFunctionReturnType =\n | AccessibleFunctionParams\n | { 'aria-hidden': true; alt: '' };\n\nexport function generateAccessibleProps(\n role: 'img' | 'presentation',\n glyphName: string,\n {\n ['aria-label']: ariaLabel,\n ['aria-labelledby']: ariaLabelledby,\n title,\n }: AccessibleFunctionParams,\n): AccessibleFunctionReturnType {\n switch (role) {\n case 'img':\n if (!ariaLabel && !ariaLabelledby && !title) {\n return { 'aria-label': getGlyphLabel(glyphName) };\n }\n\n return {\n ['aria-labelledby']: ariaLabelledby,\n ['aria-label']: ariaLabel,\n title,\n };\n\n case 'presentation':\n return { 'aria-hidden': true, alt: '' };\n }\n}\n\nexport function getGlyphLabel(name: string) {\n return `${name.replace(/([a-z])([A-Z])/g, '$1 $2')} Icon`;\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { css, cx } from '@leafygreen-ui/emotion';\n\nimport { generateAccessibleProps, Size, sizeMap } from './glyphCommon';\nimport { LGGlyph, SVGR } from './types';\n\n/**\n * Returns a single glyph component.\n * Process custom glyphs to ensure consistent behavior between custom and built-in icons\n * @param glyphName: string - the display name of the icon\n * @param Glyph: SVGR.Component - the SVG icon component\n * @returns LGGlyph.Component\n */\nexport function createGlyphComponent(\n glyphName: string,\n Glyph: SVGR.Component,\n): LGGlyph.Component {\n const GlyphComponent: LGGlyph.Component = ({\n className,\n size = Size.Default,\n fill,\n title,\n 'aria-labelledby': ariaLabelledby,\n 'aria-label': ariaLabel,\n role = 'img',\n ...rest\n }: LGGlyph.ComponentProps) => {\n const fillStyle = css`\n color: ${fill};\n `;\n\n const renderedSize = typeof size === 'number' ? size : sizeMap[size];\n\n if (!(role === 'img' || role === 'presentation')) {\n console.warn(\n \"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'.\",\n );\n }\n\n return (\n <Glyph\n className={cx(\n {\n [fillStyle]: fill != null,\n },\n className,\n )}\n height={renderedSize}\n width={renderedSize}\n role={role}\n {...generateAccessibleProps(role, glyphName, {\n title,\n ['aria-label']: ariaLabel,\n ['aria-labelledby']: ariaLabelledby,\n })}\n {...rest}\n />\n );\n };\n\n GlyphComponent.displayName = glyphName;\n\n GlyphComponent.isGlyph = true;\n\n GlyphComponent.propTypes = {\n fill: PropTypes.string,\n size: PropTypes.oneOfType([\n PropTypes.oneOf(Object.values(Size)),\n PropTypes.number,\n ]),\n className: PropTypes.string,\n };\n\n return GlyphComponent;\n}\n","import React from 'react';\nimport kebabCase from 'lodash/kebabCase';\nimport PropTypes from 'prop-types';\n\nimport { Size } from './glyphCommon';\nimport { LGGlyph } from './types';\n\n// We omit size here because we map string values for size to numbers in this component.\nexport interface IconProps extends Omit<LGGlyph.ComponentProps, 'size'> {\n /**\n * The name of the icon glyph\n */\n glyph: string;\n\n /**\n * Size of the icon\n */\n size?: Size | number;\n}\n\ntype GlyphObject = Record<string, LGGlyph.Component>;\n\n/**\n * Returns a single component with a `glyph` prop to select the glyph\n * @param glyphs The set of glyphs\n * @returns Icon component\n */\nexport function createIconComponent<G extends GlyphObject = GlyphObject>(\n glyphs: G,\n) {\n const Icon = ({ glyph, ...rest }: IconProps) => {\n const SVGComponent = glyphs[glyph];\n\n if (SVGComponent) {\n return <SVGComponent {...rest} />;\n } else {\n // TODO: improve fuzzy match\n // Suggest the proper icon casing if there's a near match\n const nearMatch = Object.keys(glyphs).find(\n key => kebabCase(key) === kebabCase(glyph),\n );\n console.error(\n 'Error in Icon',\n `Could not find glyph named \"${glyph}\" in the icon set.`,\n nearMatch && `Did you mean \"${nearMatch}?\"`,\n );\n return <></>;\n }\n };\n\n Icon.displayName = 'Icon';\n\n Icon.isGlyph = true;\n\n Icon.propTypes = {\n glyph: PropTypes.oneOf(Object.keys(glyphs)).isRequired,\n size: PropTypes.oneOfType([\n PropTypes.oneOf(Object.values(Size)),\n PropTypes.number,\n ]),\n } as any;\n\n return Icon;\n}\n","import { createGlyphComponent } from '../createGlyphComponent';\nimport { LGGlyph } from '../types';\n\n// Glyphs\nimport ActivityFeed from './ActivityFeed.svg';\nimport AddFile from './AddFile.svg';\nimport Apps from './Apps.svg';\nimport Array from './Array.svg';\nimport ArrowDown from './ArrowDown.svg';\nimport ArrowLeft from './ArrowLeft.svg';\nimport ArrowRight from './ArrowRight.svg';\nimport ArrowUp from './ArrowUp.svg';\nimport Beaker from './Beaker.svg';\nimport Bell from './Bell.svg';\nimport Biometric from './Biometric.svg';\nimport Building from './Building.svg';\nimport Bulb from './Bulb.svg';\nimport Calendar from './Calendar.svg';\nimport CaretDown from './CaretDown.svg';\nimport CaretLeft from './CaretLeft.svg';\nimport CaretRight from './CaretRight.svg';\nimport CaretUp from './CaretUp.svg';\nimport Charts from './Charts.svg';\nimport Checkmark from './Checkmark.svg';\nimport CheckmarkWithCircle from './CheckmarkWithCircle.svg';\nimport ChevronDown from './ChevronDown.svg';\nimport ChevronLeft from './ChevronLeft.svg';\nimport ChevronRight from './ChevronRight.svg';\nimport ChevronUp from './ChevronUp.svg';\nimport Clock from './Clock.svg';\nimport ClockWithArrow from './ClockWithArrow.svg';\nimport Clone from './Clone.svg';\nimport Cloud from './Cloud.svg';\nimport Code from './Code.svg';\nimport Connect from './Connect.svg';\nimport Copy from './Copy.svg';\nimport CreditCard from './CreditCard.svg';\nimport CurlyBraces from './CurlyBraces.svg';\nimport Cursor from './Cursor.svg';\nimport Database from './Database.svg';\nimport Diagram from './Diagram.svg';\nimport Diagram2 from './Diagram2.svg';\nimport Diagram3 from './Diagram3.svg';\nimport Disconnect from './Disconnect.svg';\nimport Download from './Download.svg';\nimport Drag from './Drag.svg';\nimport Edit from './Edit.svg';\nimport Ellipsis from './Ellipsis.svg';\nimport Email from './Email.svg';\nimport Export from './Export.svg';\nimport Favorite from './Favorite.svg';\nimport File from './File.svg';\nimport Filter from './Filter.svg';\nimport Folder from './Folder.svg';\nimport FullScreenEnter from './FullScreenEnter.svg';\nimport FullScreenExit from './FullScreenExit.svg';\nimport Gauge from './Gauge.svg';\nimport GlobeAmericas from './GlobeAmericas.svg';\nimport GovernmentBuilding from './GovernmentBuilding.svg';\nimport Home from './Home.svg';\nimport Import from './Import.svg';\nimport ImportantWithCircle from './ImportantWithCircle.svg';\nimport InfoWithCircle from './InfoWithCircle.svg';\nimport InviteUser from './InviteUser.svg';\nimport Key from './Key.svg';\nimport Laptop from './Laptop.svg';\nimport Link from './Link.svg';\nimport Lock from './Lock.svg';\nimport MagnifyingGlass from './MagnifyingGlass.svg';\nimport Megaphone from './Megaphone.svg';\nimport Menu from './Menu.svg';\nimport Minus from './Minus.svg';\nimport NoFilter from './NoFilter.svg';\nimport NotAllowed from './NotAllowed.svg';\nimport Note from './Note.svg';\nimport OpenNewTab from './OpenNewTab.svg';\nimport Pause from './Pause.svg';\nimport Person from './Person.svg';\nimport PersonGroup from './PersonGroup.svg';\nimport PersonWithLock from './PersonWithLock.svg';\nimport Play from './Play.svg';\nimport Plus from './Plus.svg';\nimport PlusWithCircle from './PlusWithCircle.svg';\nimport QuestionMarkWithCircle from './QuestionMarkWithCircle.svg';\nimport Read from './Read.svg';\nimport Redo from './Redo.svg';\nimport Refresh from './Refresh.svg';\nimport Relationship from './Relationship.svg';\nimport ReplicaSet from './ReplicaSet.svg';\nimport Resize from './Resize.svg';\nimport Save from './Save.svg';\nimport Serverless from './Serverless.svg';\nimport Settings from './Settings.svg';\nimport ShardedCluster from './ShardedCluster.svg';\nimport Shell from './Shell.svg';\nimport SMS from './SMS.svg';\nimport SortAscending from './SortAscending.svg';\nimport SortDescending from './SortDescending.svg';\nimport SplitHorizontal from './SplitHorizontal.svg';\nimport SplitVertical from './SplitVertical.svg';\nimport Stitch from './Stitch.svg';\nimport Support from './Support.svg';\nimport Sweep from './Sweep.svg';\nimport Table from './Table.svg';\nimport TimeSeries from './TimeSeries.svg';\nimport Trash from './Trash.svg';\nimport Undo from './Undo.svg';\nimport University from './University.svg';\nimport Unlock from './Unlock.svg';\nimport Unsorted from './Unsorted.svg';\nimport UpDownCarets from './UpDownCarets.svg';\nimport Upload from './Upload.svg';\nimport VerticalEllipsis from './VerticalEllipsis.svg';\nimport Visibility from './Visibility.svg';\nimport VisibilityOff from './VisibilityOff.svg';\nimport Warning from './Warning.svg';\nimport Write from './Write.svg';\nimport X from './X.svg';\nimport XWithCircle from './XWithCircle.svg';\n\nconst _glyphs = {\n ActivityFeed,\n AddFile,\n Apps,\n Array,\n ArrowDown,\n ArrowLeft,\n ArrowRight,\n ArrowUp,\n Beaker,\n Bell,\n Biometric,\n Building,\n Bulb,\n Calendar,\n CaretDown,\n CaretLeft,\n CaretRight,\n CaretUp,\n Charts,\n Checkmark,\n CheckmarkWithCircle,\n ChevronDown,\n ChevronLeft,\n ChevronRight,\n ChevronUp,\n Clock,\n ClockWithArrow,\n Clone,\n Cloud,\n Code,\n Connect,\n Copy,\n CreditCard,\n CurlyBraces,\n Cursor,\n Database,\n Diagram,\n Diagram2,\n Diagram3,\n Disconnect,\n Download,\n Drag,\n Edit,\n Ellipsis,\n Email,\n Export,\n Favorite,\n File,\n Filter,\n FullScreenEnter,\n FullScreenExit,\n Folder,\n Gauge,\n GlobeAmericas,\n GovernmentBuilding,\n Home,\n Import,\n ImportantWithCircle,\n InfoWithCircle,\n InviteUser,\n Key,\n Laptop,\n Link,\n Lock,\n MagnifyingGlass,\n Megaphone,\n Menu,\n Minus,\n NoFilter,\n NotAllowed,\n Note,\n OpenNewTab,\n Pause,\n Person,\n PersonGroup,\n PersonWithLock,\n Play,\n Plus,\n PlusWithCircle,\n QuestionMarkWithCircle,\n Read,\n Redo,\n Refresh,\n Relationship,\n ReplicaSet,\n Resize,\n Save,\n Serverless,\n ShardedCluster,\n Settings,\n Shell,\n SMS,\n SortAscending,\n SortDescending,\n SplitHorizontal,\n SplitVertical,\n Stitch,\n Support,\n Sweep,\n Table,\n TimeSeries,\n Trash,\n Undo,\n University,\n Unlock,\n Unsorted,\n UpDownCarets,\n Upload,\n VerticalEllipsis,\n Visibility,\n VisibilityOff,\n Warning,\n Write,\n X,\n XWithCircle,\n} as const;\n\nexport type GlyphName = keyof typeof _glyphs;\n\nconst glyphKeys = Object.keys(_glyphs) as Array<GlyphName>;\n\nexport const glyphs = glyphKeys.reduce((acc, name) => {\n acc[name] = createGlyphComponent(name, _glyphs[name]);\n\n return acc;\n}, {} as Record<GlyphName, LGGlyph.Component>);\n","import { createIconComponent } from './createIconComponent';\nimport { glyphs } from './glyphs';\n\nexport const Icon = createIconComponent(glyphs);\n","import { ComponentType, isValidElement, ReactNode } from 'react';\n\nimport { LGGlyph } from './types';\n\ntype ExtendedComponentType = ComponentType<any> & {\n [key: string]: any;\n};\n/**\n * Helper type to check if element is a LeafyGreen UI Glyph\n * @internal\n */\nfunction isComponentGlyph(node: ReactNode): node is LGGlyph.Element;\nfunction isComponentGlyph(\n component: ExtendedComponentType,\n): component is LGGlyph.Component;\nfunction isComponentGlyph(\n child: ReactNode | ExtendedComponentType,\n): child is LGGlyph.Element | LGGlyph.Component {\n // If we're received a rendered component (i.e. ReactNode)\n if (isValidElement(child)) {\n return (\n child != null &&\n typeof child === 'object' &&\n 'type' in child &&\n (child.type as any).isGlyph === true\n );\n }\n\n // If we've recieved a component function\n return (\n child != null &&\n typeof child === 'function' &&\n 'isGlyph' in child &&\n child.isGlyph === true\n );\n}\n\nexport { isComponentGlyph };\n"],"names":["_templateObject","Size","Small","Default","Large","XLarge","sizeMap","small","default","large","xlarge","_excluded","createGlyphComponent","glyphName","Glyph","GlyphComponent","_ref","_generateAccessiblePr","className","_ref$size","size","fill","title","ariaLabelledby","ariaLabel","_ref$role","role","rest","_objectWithoutProperties","fillStyle","css","renderedSize","console","warn","React","createElement","_extends","cx","_defineProperty","height","width","_ref2","name","concat","replace","alt","generateAccessibleProps","displayName","isGlyph","propTypes","PropTypes","string","oneOfType","oneOf","Object","values","number","createIconComponent","glyphs","Icon","glyph","SVGComponent","nearMatch","keys","find","key","kebabCase","error","Fragment","isRequired","_glyphs","ActivityFeed","AddFile","Apps","Array","ArrowDown","ArrowLeft","ArrowRight","ArrowUp","Beaker","Bell","Biometric","Building","Bulb","Calendar","CaretDown","CaretLeft","CaretRight","CaretUp","Charts","Checkmark","CheckmarkWithCircle","ChevronDown","ChevronLeft","ChevronRight","ChevronUp","Clock","ClockWithArrow","Clone","Cloud","Code","Connect","Copy","CreditCard","CurlyBraces","Cursor","Database","Diagram","Diagram2","Diagram3","Disconnect","Download","Drag","Edit","Ellipsis","Email","Export","Favorite","File","Filter","FullScreenEnter","FullScreenExit","Folder","Gauge","GlobeAmericas","GovernmentBuilding","Home","Import","ImportantWithCircle","InfoWithCircle","InviteUser","Key","Laptop","Link","Lock","MagnifyingGlass","Megaphone","Menu","Minus","NoFilter","NotAllowed","Note","OpenNewTab","Pause","Person","PersonGroup","PersonWithLock","Play","Plus","PlusWithCircle","QuestionMarkWithCircle","Read","Redo","Refresh","Relationship","ReplicaSet","Resize","Save","Serverless","ShardedCluster","Settings","Shell","SMS","SortAscending","SortDescending","SplitHorizontal","SplitVertical","Stitch","Support","Sweep","Table","TimeSeries","Trash","Undo","University","Unlock","Unsorted","UpDownCarets","Upload","VerticalEllipsis","Visibility","VisibilityOff","Warning","Write","X","XWithCircle","reduce","acc","child","isValidElement","_typeof","type"],"mappings":"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ACAC,6mBACAC,ySACAC,gdACAC,2bACAC,siBACAC,ioBACAC,qmBACAC,iWACAC,iYACAC,koBACAC,2aACAC,gjBACAC,41BACAC,qaACAC,4bACAC,kaACAC,2UACAC,8QACAC,idACAC,gZACAC,0hBACAC,mrBACAC,kVACAC,8kBACAC,0wBACAC,otBACAC,wTACAC,+XACAC,+VACAC,8pBACAC,guCACAC,yhBACAC,ywBACAC,ibACAC,6eACAC,6aACAC,ylCACAC,kYACAC,ovBACAC,8lCACAC,8aACAC,ueACAC,2dACAC,+dACAC,mWACAC,2VACAC,qTACAC,8bACAC,yxBACAC,wcACAC,6mBACAC,mXACAC,+gBACAC,i5BACAC,meACAC,0jBACAC,scACAC,yjBACAC,gZACAC,4xBACAC,ooCACAC,oaACAC,+tCACAC,+fACAC,ucAGS/H,GADKJ,OAAOS,KAAKO,IACEoH,QAAO,SAAUC,EAAKjJ,GAElD,OADAiJ,EAAIjJ,GAAQ9B,EAAqB8B,EAAM4B,GAAQ5B,IACxCiJ,IACN,IC5OQhI,GAAOF,GAAoBC,+JCCtC,SAA0BkI,GAExB,OAAkBC,EAAAA,eAAeD,GACf,MAATA,GAAoC,WAAnBE,EAAQF,IAAuB,SAAUA,IAAgC,IAAvBA,EAAMG,KAAK/I,QAIvE,MAAT4I,GAAkC,mBAAVA,GAAwB,YAAaA,IAA2B,IAAlBA,EAAM5I"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@leafygreen-ui/icon",
3
- "version": "11.12.4",
3
+ "version": "11.12.6",
4
4
  "description": "LeafyGreen UI Kit Icons",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/esm/index.js",
@@ -22,7 +22,7 @@
22
22
  },
23
23
  "devDependencies": {
24
24
  "xml2json": "^0.12.0",
25
- "@leafygreen-ui/palette": "^3.4.7"
25
+ "@leafygreen-ui/palette": "^4.0.0"
26
26
  },
27
27
  "dependencies": {
28
28
  "@leafygreen-ui/emotion": "^4.0.3"
package/src/Icon.spec.tsx CHANGED
@@ -246,6 +246,12 @@ describe('packages/Icon/createIconComponent', () => {
246
246
  expect(glyph).toHaveAttribute('role', 'presentation');
247
247
  });
248
248
  });
249
+
250
+ test('returned Icon function logs an error when glyph does not exist', () => {
251
+ const consoleSpy = jest.spyOn(console, 'error');
252
+ render(<IconComponent glyph="error" />);
253
+ expect(consoleSpy).toHaveBeenCalled();
254
+ });
249
255
  });
250
256
 
251
257
  describe('Generated glyphs', () => {
@@ -87,3 +87,5 @@ export const AllIcons: ComponentStory<typeof Icon> = (
87
87
  })}
88
88
  </div>
89
89
  );
90
+
91
+ export const Error = () => <Icon glyph="glyph-does-not-exist" />;
@@ -1,4 +1,5 @@
1
1
  import React from 'react';
2
+ import kebabCase from 'lodash/kebabCase';
2
3
  import PropTypes from 'prop-types';
3
4
 
4
5
  import { Size } from './glyphCommon';
@@ -29,8 +30,22 @@ export function createIconComponent<G extends GlyphObject = GlyphObject>(
29
30
  ) {
30
31
  const Icon = ({ glyph, ...rest }: IconProps) => {
31
32
  const SVGComponent = glyphs[glyph];
32
- SVGComponent.isGlyph = true;
33
- return <SVGComponent {...rest} />;
33
+
34
+ if (SVGComponent) {
35
+ return <SVGComponent {...rest} />;
36
+ } else {
37
+ // TODO: improve fuzzy match
38
+ // Suggest the proper icon casing if there's a near match
39
+ const nearMatch = Object.keys(glyphs).find(
40
+ key => kebabCase(key) === kebabCase(glyph),
41
+ );
42
+ console.error(
43
+ 'Error in Icon',
44
+ `Could not find glyph named "${glyph}" in the icon set.`,
45
+ nearMatch && `Did you mean "${nearMatch}?"`,
46
+ );
47
+ return <></>;
48
+ }
34
49
  };
35
50
 
36
51
  Icon.displayName = 'Icon';
@@ -2,7 +2,7 @@
2
2
  * This is a generated file. Do not modify it manually.
3
3
  *
4
4
  * @script ./node_modules/.bin/ts-node packages/icon/scripts/build.ts
5
- * @checksum 8dc0787dba6887c6be766b1d2caea6db
5
+ * @checksum 172a4774960354c946c1bbb124cb4927
6
6
  */
7
7
  import { css, cx } from '@leafygreen-ui/emotion';
8
8
  import PropTypes from 'prop-types';
@@ -50,27 +50,27 @@ const Drag = ({
50
50
  viewBox="0 0 16 16"
51
51
  >
52
52
  <path
53
- d="M4 4C4 4.55228 3.55228 5 3 5C2.44772 5 2 4.55228 2 4C2 3.44772 2.44772 3 3 3C3.55228 3 4 3.44772 4 4Z"
53
+ d="M7 4C7 4.55228 6.55228 5 6 5C5.44772 5 5 4.55228 5 4C5 3.44772 5.44772 3 6 3C6.55228 3 7 3.44772 7 4Z"
54
54
  fill={'currentColor'}
55
55
  />
56
56
  <path
57
- d="M8 4C8 4.55228 7.5523 5 7 5C6.44772 5 6 4.55228 6 4C6 3.44772 6.44772 3 7 3C7.5523 3 8 3.44772 8 4Z"
57
+ d="M11 4C11 4.55228 10.5523 5 10 5C9.44772 5 9 4.55228 9 4C9 3.44772 9.44772 3 10 3C10.5523 3 11 3.44772 11 4Z"
58
58
  fill={'currentColor'}
59
59
  />
60
60
  <path
61
- d="M4 8C4 8.55228 3.55228 9 3 9C2.44772 9 2 8.55228 2 8C2 7.44772 2.44772 7 3 7C3.55228 7 4 7.44772 4 8Z"
61
+ d="M7 8C7 8.55228 6.55228 9 6 9C5.44772 9 5 8.55228 5 8C5 7.44772 5.44772 7 6 7C6.55228 7 7 7.44772 7 8Z"
62
62
  fill={'currentColor'}
63
63
  />
64
64
  <path
65
- d="M4 12C4 12.5523 3.55228 13 3 13C2.44772 13 2 12.5523 2 12C2 11.4477 2.44772 11 3 11C3.55228 11 4 11.4477 4 12Z"
65
+ d="M7 12C7 12.5523 6.55228 13 6 13C5.44772 13 5 12.5523 5 12C5 11.4477 5.44772 11 6 11C6.55228 11 7 11.4477 7 12Z"
66
66
  fill={'currentColor'}
67
67
  />
68
68
  <path
69
- d="M8 8C8 8.55228 7.5523 9 7 9C6.44772 9 6 8.55228 6 8C6 7.44772 6.44772 7 7 7C7.5523 7 8 7.44772 8 8Z"
69
+ d="M11 8C11 8.55228 10.5523 9 10 9C9.44772 9 9 8.55228 9 8C9 7.44772 9.44772 7 10 7C10.5523 7 11 7.44772 11 8Z"
70
70
  fill={'currentColor'}
71
71
  />
72
72
  <path
73
- d="M8 12C8 12.5523 7.5523 13 7 13C6.44772 13 6 12.5523 6 12C6 11.4477 6.44772 11 7 11C7.5523 11 8 11.4477 8 12Z"
73
+ d="M11 12C11 12.5523 10.5523 13 10 13C9.44772 13 9 12.5523 9 12C9 11.4477 9.44772 11 10 11C10.5523 11 11 11.4477 11 12Z"
74
74
  fill={'currentColor'}
75
75
  />
76
76
  </svg>
@@ -0,0 +1,71 @@
1
+ /**
2
+ * This is a generated file. Do not modify it manually.
3
+ *
4
+ * @script ./node_modules/.bin/ts-node packages/icon/scripts/build.ts
5
+ * @checksum 04e94894ecd5b07eaefdad5ea0b3d150
6
+ */
7
+ import { css, cx } from '@leafygreen-ui/emotion';
8
+ import PropTypes from 'prop-types';
9
+ import * as React from 'react';
10
+
11
+ import { generateAccessibleProps, sizeMap } from '../glyphCommon';
12
+ import { LGGlyph } from '../types';
13
+ export interface GaugeProps extends LGGlyph.ComponentProps {}
14
+
15
+ const Gauge = ({
16
+ className,
17
+ size = 16,
18
+ title,
19
+ ['aria-label']: ariaLabel,
20
+ ['aria-labelledby']: ariaLabelledby,
21
+ fill,
22
+ role = 'img',
23
+ ...props
24
+ }: GaugeProps) => {
25
+ const fillStyle = css`
26
+ color: ${fill};
27
+ `;
28
+ const noFlexShrink = css`
29
+ flex-shrink: 0;
30
+ `;
31
+ const accessibleProps = generateAccessibleProps(role, 'Gauge', {
32
+ title,
33
+ ['aria-label']: ariaLabel,
34
+ ['aria-labelledby']: ariaLabelledby,
35
+ });
36
+ return (
37
+ <svg
38
+ className={cx(
39
+ {
40
+ [fillStyle]: fill != null,
41
+ },
42
+ noFlexShrink,
43
+ className,
44
+ )}
45
+ height={typeof size === 'number' ? size : sizeMap[size]}
46
+ width={typeof size === 'number' ? size : sizeMap[size]}
47
+ role={role}
48
+ {...accessibleProps}
49
+ {...props}
50
+ viewBox="0 0 16 16"
51
+ >
52
+ <path
53
+ d="M1.041 10.2514C0.996713 10.6632 1.33666 11 1.75088 11H4.2449C4.65912 11 4.98569 10.6591 5.08798 10.2577C5.22027 9.73864 5.49013 9.25966 5.87533 8.87446C6.43906 8.31073 7.20364 7.99403 8.00088 7.99403C8.27011 7.99403 8.53562 8.03015 8.79093 8.0997L11.7818 5.10887C10.6623 4.39046 9.35172 4 8.00088 4C6.14436 4 4.36388 4.7375 3.05113 6.05025C1.91604 7.18534 1.21104 8.67012 1.041 10.2514Z"
54
+ fill={'currentColor'}
55
+ />
56
+ <path
57
+ d="M13.2967 6.42237L10.455 9.26409C10.6678 9.56493 10.8231 9.90191 10.9138 10.2577C11.0161 10.6591 11.3426 11 11.7568 11L14.2509 11C14.6651 11 15.005 10.6632 14.9608 10.2514C14.8087 8.83759 14.229 7.50093 13.2967 6.42237Z"
58
+ fill={'currentColor'}
59
+ />
60
+ </svg>
61
+ );
62
+ };
63
+
64
+ Gauge.displayName = 'Gauge';
65
+ Gauge.isGlyph = true;
66
+ Gauge.propTypes = {
67
+ fill: PropTypes.string,
68
+ size: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
69
+ className: PropTypes.string,
70
+ };
71
+ export default Gauge;
@@ -1,8 +1,8 @@
1
1
  <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
2
- <path d="M4 4C4 4.55228 3.55228 5 3 5C2.44772 5 2 4.55228 2 4C2 3.44772 2.44772 3 3 3C3.55228 3 4 3.44772 4 4Z" fill="#000"/>
3
- <path d="M8 4C8 4.55228 7.5523 5 7 5C6.44772 5 6 4.55228 6 4C6 3.44772 6.44772 3 7 3C7.5523 3 8 3.44772 8 4Z" fill="#000"/>
4
- <path d="M4 8C4 8.55228 3.55228 9 3 9C2.44772 9 2 8.55228 2 8C2 7.44772 2.44772 7 3 7C3.55228 7 4 7.44772 4 8Z" fill="#000"/>
5
- <path d="M4 12C4 12.5523 3.55228 13 3 13C2.44772 13 2 12.5523 2 12C2 11.4477 2.44772 11 3 11C3.55228 11 4 11.4477 4 12Z" fill="#000"/>
6
- <path d="M8 8C8 8.55228 7.5523 9 7 9C6.44772 9 6 8.55228 6 8C6 7.44772 6.44772 7 7 7C7.5523 7 8 7.44772 8 8Z" fill="#000"/>
7
- <path d="M8 12C8 12.5523 7.5523 13 7 13C6.44772 13 6 12.5523 6 12C6 11.4477 6.44772 11 7 11C7.5523 11 8 11.4477 8 12Z" fill="#000"/>
2
+ <path d="M7 4C7 4.55228 6.55228 5 6 5C5.44772 5 5 4.55228 5 4C5 3.44772 5.44772 3 6 3C6.55228 3 7 3.44772 7 4Z" fill="#000000"/>
3
+ <path d="M11 4C11 4.55228 10.5523 5 10 5C9.44772 5 9 4.55228 9 4C9 3.44772 9.44772 3 10 3C10.5523 3 11 3.44772 11 4Z" fill="#000000"/>
4
+ <path d="M7 8C7 8.55228 6.55228 9 6 9C5.44772 9 5 8.55228 5 8C5 7.44772 5.44772 7 6 7C6.55228 7 7 7.44772 7 8Z" fill="#000000"/>
5
+ <path d="M7 12C7 12.5523 6.55228 13 6 13C5.44772 13 5 12.5523 5 12C5 11.4477 5.44772 11 6 11C6.55228 11 7 11.4477 7 12Z" fill="#000000"/>
6
+ <path d="M11 8C11 8.55228 10.5523 9 10 9C9.44772 9 9 8.55228 9 8C9 7.44772 9.44772 7 10 7C10.5523 7 11 7.44772 11 8Z" fill="#000000"/>
7
+ <path d="M11 12C11 12.5523 10.5523 13 10 13C9.44772 13 9 12.5523 9 12C9 11.4477 9.44772 11 10 11C10.5523 11 11 11.4477 11 12Z" fill="#000000"/>
8
8
  </svg>
@@ -0,0 +1,4 @@
1
+ <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M1.041 10.2514C0.996713 10.6632 1.33666 11 1.75088 11H4.2449C4.65912 11 4.98569 10.6591 5.08798 10.2577C5.22027 9.73864 5.49013 9.25966 5.87533 8.87446C6.43906 8.31073 7.20364 7.99403 8.00088 7.99403C8.27011 7.99403 8.53562 8.03015 8.79093 8.0997L11.7818 5.10887C10.6623 4.39046 9.35172 4 8.00088 4C6.14436 4 4.36388 4.7375 3.05113 6.05025C1.91604 7.18534 1.21104 8.67012 1.041 10.2514Z" fill="#000000"/>
3
+ <path d="M13.2967 6.42237L10.455 9.26409C10.6678 9.56493 10.8231 9.90191 10.9138 10.2577C11.0161 10.6591 11.3426 11 11.7568 11L14.2509 11C14.6651 11 15.005 10.6632 14.9608 10.2514C14.8087 8.83759 14.229 7.50093 13.2967 6.42237Z" fill="#000000"/>
4
+ </svg>
@@ -54,6 +54,7 @@ import Filter from './Filter.svg';
54
54
  import Folder from './Folder.svg';
55
55
  import FullScreenEnter from './FullScreenEnter.svg';
56
56
  import FullScreenExit from './FullScreenExit.svg';
57
+ import Gauge from './Gauge.svg';
57
58
  import GlobeAmericas from './GlobeAmericas.svg';
58
59
  import GovernmentBuilding from './GovernmentBuilding.svg';
59
60
  import Home from './Home.svg';
@@ -170,6 +171,7 @@ const _glyphs = {
170
171
  FullScreenEnter,
171
172
  FullScreenExit,
172
173
  Folder,
174
+ Gauge,
173
175
  GlobeAmericas,
174
176
  GovernmentBuilding,
175
177
  Home,