mirror of
https://github.com/GraphiteEditor/Graphite.git
synced 2026-09-21 02:48:11 +08:00
* remove branded files * use branding repo * include favicons * nixpkg fixup * win fix ico path * fix fmt * skip licensenses for dev builds * review fixup * test * test * ci test * ci test * ci test * fix ci
58 lines
1.4 KiB
Svelte
58 lines
1.4 KiB
Svelte
<script lang="ts">
|
|
import { type IconName, ICONS, ICON_SVG_STRINGS } from "@graphite/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) {
|
|
// eslint-disable-next-line no-console
|
|
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>
|