Skip to main content
Glama
ConnectionLayout.vue8.03 kB
<!-- eslint-disable vue/no-multiple-template-root --> <template> <h3 class="m-xs text-sm">{{ props.label }}</h3> <ul class="flex flex-col gap-xs mx-xs"> <li v-for="conn in props.connections" :key="`${conn.key}`" :class=" clsx( 'py-xs pr-xs border rounded-sm', themeClasses('border-neutral-300', 'border-neutral-600'), props.label === 'Incoming' && highlightedPath === conn.self && themeClasses( 'border-neutral-500 bg-neutral-300', 'border-neutral-400 bg-neutral-700', ), ) " > <div class="flex flex-row gap-2xs"> <div class="flex-none flex items-center justify-center pl-2xs mt-[1px]"> <Icon name="incoming-connection" size="none" :class=" clsx( 'w-8 h-11', themeClasses('text-neutral-500', 'text-neutral-400'), ) " /> </div> <div class="flex-1 min-w-0 flex flex-col gap-3xs pl-0 font-mono text-xs" > <div :class=" clsx( 'flex flex-row gap-xs -ml-xs p-2xs rounded-sm', props.label === 'Incoming' && ctx.componentDetails.value[conn.componentId]?.name && clsx( 'cursor-pointer', themeClasses( 'hover:bg-neutral-200', 'hover:bg-neutral-700', ), ), ) " @click=" props.label === 'Incoming' && ctx.componentDetails.value[conn.componentId]?.name ? navigate(conn.componentId) : undefined " > <template v-if="props.label === 'Incoming'"> <TruncateWithTooltip :class=" clsx( 'flex-1 min-w-0 basis-1/3 max-w-fit px-2xs py-2xs rounded-[2px] border', themeClasses( 'bg-white border-neutral-300 text-[#207E65]', 'bg-neutral-900 border-neutral-600 text-[#AAFEC7]', ), ) " > {{ ctx.componentDetails.value[conn.componentId] ?.schemaVariantName }} </TruncateWithTooltip> <TruncateWithTooltip :class=" clsx( 'flex-1 min-w-0 basis-1/3 max-w-fit px-2xs py-2xs rounded-[2px] border', themeClasses( 'bg-white border-neutral-300 text-[#631AC2]', 'bg-neutral-900 border-neutral-600 text-[#D4B4FE]', ), ) " > {{ ctx.componentDetails.value[conn.componentId]?.name }} </TruncateWithTooltip> <TruncateWithTooltip :class=" clsx( 'flex-1 min-w-0 basis-1/3 max-w-fit px-2xs py-2xs rounded-[2px] border', themeClasses( 'bg-white border-neutral-300 text-action-700', 'bg-neutral-900 border-neutral-600 text-[#8BCDEE]', ), ) " > {{ conn.other }} </TruncateWithTooltip> </template> <template v-else-if="props.label === 'Outgoing'"> <TruncateWithTooltip :class=" clsx( 'flex-shrink min-w-0 px-2xs py-2xs rounded-[2px] border', themeClasses( 'bg-white border-neutral-300 text-action-700', 'bg-neutral-900 border-neutral-600 text-[#8BCDEE]', ), ) " > {{ conn.self }} </TruncateWithTooltip> </template> </div> <div :class=" clsx( 'flex flex-row gap-xs p-2xs rounded-sm', props.label === 'Outgoing' && ctx.componentDetails.value[conn.componentId]?.name && clsx( 'cursor-pointer', themeClasses( 'hover:bg-neutral-200', 'hover:bg-neutral-700', ), ), ) " @click=" props.label === 'Outgoing' && ctx.componentDetails.value[conn.componentId]?.name ? navigate(conn.componentId) : undefined " > <template v-if="props.label === 'Incoming'"> <TruncateWithTooltip :class=" clsx( 'flex-shrink min-w-0 px-2xs py-2xs rounded-[2px] border', themeClasses( 'bg-white border-neutral-300 text-action-700', 'bg-neutral-900 border-neutral-600 text-[#8BCDEE]', ), ) " > {{ conn.self }} </TruncateWithTooltip> </template> <template v-else-if="props.label === 'Outgoing'"> <TruncateWithTooltip :class=" clsx( 'flex-1 min-w-0 basis-1/3 max-w-fit px-2xs py-2xs rounded-[2px] border', themeClasses( 'bg-white border-neutral-300 text-[#207E65]', 'bg-neutral-900 border-neutral-600 text-[#AAFEC7]', ), ) " > {{ ctx.componentDetails.value[conn.componentId] ?.schemaVariantName }} </TruncateWithTooltip> <TruncateWithTooltip :class=" clsx( 'flex-1 min-w-0 basis-1/3 max-w-fit px-2xs py-2xs rounded-[2px] border', themeClasses( 'bg-white border-neutral-300 text-[#631AC2]', 'bg-neutral-900 border-neutral-600 text-[#D4B4FE]', ), ) " > {{ ctx.componentDetails.value[conn.componentId]?.name }} </TruncateWithTooltip> <TruncateWithTooltip :class=" clsx( 'flex-1 min-w-0 basis-1/3 max-w-fit px-2xs py-2xs rounded-[2px] border', themeClasses( 'bg-white border-neutral-300 text-action-700', 'bg-neutral-900 border-neutral-600 text-[#8BCDEE]', ), ) " > {{ conn.other }} </TruncateWithTooltip> </template> </div> </div> </div> </li> </ul> </template> <script setup lang="ts"> import { useRoute, useRouter } from "vue-router"; import clsx from "clsx"; import { themeClasses, TruncateWithTooltip, Icon, } from "@si/vue-lib/design-system"; import { useContext } from "../logic_composables/context"; export interface SimpleConnection { key: string; componentId: string; self: string; other: string; } const ctx = useContext(); const props = defineProps<{ label: string; connections: SimpleConnection[]; highlightedPath?: string; }>(); const router = useRouter(); const route = useRoute(); const navigate = (componentId: string) => { const params = { ...route.params }; params.componentId = componentId; router.push({ name: "new-hotness-component", params, }); }; </script>

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/systeminit/si'

If you have feedback or need assistance with the MCP directory API, please join our Discord server