| <script lang="ts"> |
| import { type IconName, ICONS, ICON_SVG_STRINGS } from "@graphite/utility-functions/icons"; |
|
|
| import LayoutRow from "@graphite/components/layout/LayoutRow.svelte"; |
|
|
| let className = ""; |
| export { className as class }; |
| export let classes: Record<string, boolean> = {}; |
| export let icon: IconName; |
| export let iconSizeOverride: number | undefined = undefined; |
| export let disabled = false; |
| export let tooltip: string | undefined = undefined; |
|
|
| $: iconSizeClass = ((icon: IconName) => { |
| const iconData = ICONS[icon]; |
| if (!iconData) { |
| |
| console.warn(`Icon "${icon}" does not exist.`); |
| return "size-24"; |
| } |
| if (iconData.size === undefined) return ""; |
| return `size-${iconSizeOverride || iconData.size}`; |
| })(icon); |
| $: extraClasses = Object.entries(classes) |
| .flatMap(([className, stateName]) => (stateName ? [className] : [])) |
| .join(" "); |
| </script> |
|
|
| <LayoutRow class={`icon-label ${iconSizeClass} ${className} ${extraClasses}`.trim()} classes={{ disabled }} {tooltip}> |
| {@html ICON_SVG_STRINGS[icon] || "�"} |
| </LayoutRow> |
|
|
| <style lang="scss" global> |
| .icon-label { |
| flex: 0 0 auto; |
| fill: var(--color-e-nearwhite); |
|
|
| &.disabled { |
| fill: var(--color-8-uppergray); |
| } |
|
|
| &.size-12 { |
| width: 12px; |
| height: 12px; |
| } |
|
|
| &.size-16 { |
| width: 16px; |
| height: 16px; |
| } |
|
|
| &.size-24 { |
| width: 24px; |
| height: 24px; |
| } |
| } |
| </style> |
| |