<template>
<div
:style="borderStyle(component)"
:class="
clsx(
'flex flex-row items-center rounded-sm border-l-2 p-xs space-x-sm',
themeClasses('bg-neutral-200', 'bg-neutral-800'),
)
"
>
<Icon
:name="pickBrandIconByString(component.schemaCategory)"
size="lg"
class="flex-none"
/>
<div class="flex-1 min-w-0">
<TruncateWithTooltip :lineClamp="3" class="text-sm font-semibold">{{
component.name
}}</TruncateWithTooltip>
<TruncateWithTooltip class="text-xs">{{
component.schemaName
}}</TruncateWithTooltip>
</div>
<ComponentTileQualificationStatus :component="component" hideTitle />
<StatusIndicatorIcon
v-if="component.hasResource"
type="resource"
size="sm"
status="exists"
/>
<slot name="endItems" />
</div>
</template>
<script setup lang="ts">
import {
Icon,
themeClasses,
TruncateWithTooltip,
} from "@si/vue-lib/design-system";
import clsx from "clsx";
import {
BifrostComponent,
ComponentInList,
} from "@/workers/types/entity_kind_types";
import StatusIndicatorIcon from "@/components/StatusIndicatorIcon.vue";
import { pickBrandIconByString, getAssetColor } from "./util";
import ComponentTileQualificationStatus from "./ComponentTileQualificationStatus.vue";
defineProps<{
component: ComponentInList | BifrostComponent;
}>();
const borderStyle = (component: ComponentInList | BifrostComponent) => {
const color = getAssetColor(component.schemaCategory);
return `border-color: ${color}`;
};
</script>