@@ -4,6 +4,15 @@ import { ref, computed, onMounted, onUnmounted } from 'vue'
44import { useI18n } from ' vue-i18n'
55import { useRoute , useRouter } from ' vue-router'
66import { Button } from ' @/components/ui/button'
7+ import {
8+ Sheet ,
9+ SheetContent ,
10+ SheetFooter ,
11+ SheetHeader ,
12+ SheetTitle ,
13+ } from ' @/components/ui/sheet'
14+ import { Badge } from ' @/components/ui/badge'
15+ import { Globe , Github , Package , Code , User , Layers , Shield } from ' lucide-vue-next'
716import { DsProgressSteps , type ProgressStep } from ' @/components/ui/ds-progress-steps'
817import { toast } from ' vue-sonner'
918import { McpInstallationService } from ' @/services/mcpInstallationService'
@@ -64,6 +73,7 @@ interface InstallationFormData {
6473// State
6574const currentStep = ref (0 )
6675const isSubmitting = ref (false )
76+ const isDetailsSheetOpen = ref (false )
6777
6878const environmentValidation = ref ({
6979 isValid: true ,
@@ -655,7 +665,7 @@ onUnmounted(() => {
655665 >
656666 <div class =" px-6 md:flex md:items-center md:justify-between md:space-x-6 lg:space-x-8" >
657667 <!-- Avatar Image -->
658- <div class =" flex-shrink-0 mb-4 md:mb-0" >
668+ <div class =" flex-shrink-0 mb-4 md:mb-0 flex justify-center md:justify-start " >
659669 <McpServerAvatar
660670 :icon-url =" formData.server.server_data.icon_url"
661671 :server-name =" formData.server.server_data.name"
@@ -687,6 +697,17 @@ onUnmounted(() => {
687697 {{ formData.server.server_data.description }}
688698 </p >
689699 </div >
700+
701+ <!-- Details Button -->
702+ <div class =" flex items-center w-full md:w-auto mt-4 md:mt-0" >
703+ <Button
704+ variant =" outline"
705+ @click =" isDetailsSheetOpen = true"
706+ class =" bg-white w-full md:w-auto"
707+ >
708+ Details
709+ </Button >
710+ </div >
690711 </div >
691712 </div >
692713
@@ -838,5 +859,157 @@ onUnmounted(() => {
838859 </template >
839860 </DsProgressSteps >
840861 </template >
862+
863+ <!-- Details Sheet -->
864+ <Sheet v-model:open =" isDetailsSheetOpen" >
865+ <SheetContent class =" overflow-y-auto" >
866+ <SheetHeader >
867+ <SheetTitle >Server Details</SheetTitle >
868+ </SheetHeader >
869+
870+ <div v-if =" formData.server.server_data" class =" pb-4 px-4 space-y-6" >
871+ <!-- Basic Information Section -->
872+ <div class =" space-y-4" >
873+
874+ <!-- Description -->
875+ <div class =" space-y-1" >
876+ <dt class =" text-xs font-medium text-gray-500" >Description</dt >
877+ <dd class =" text-sm text-gray-900" >
878+ {{ formData.server.server_data.description || 'No description available' }}
879+ </dd >
880+ </div >
881+
882+ <!-- Website URL -->
883+ <div v-if =" formData.server.server_data.website_url" class =" space-y-1" >
884+ <dt class =" text-xs font-medium text-gray-500 flex items-center gap-1" >
885+ <Globe class =" h-3 w-3" />
886+ Website
887+ </dt >
888+ <dd class =" text-sm" >
889+ <a
890+ :href =" formData.server.server_data.website_url"
891+ target =" _blank"
892+ rel =" noopener noreferrer"
893+ class =" text-blue-600 hover:underline"
894+ >
895+ {{ formData.server.server_data.website_url }}
896+ </a >
897+ </dd >
898+ </div >
899+
900+ <!-- GitHub URL -->
901+ <div v-if =" formData.server.server_data.repository_url" class =" space-y-1" >
902+ <dt class =" text-xs font-medium text-gray-500 flex items-center gap-1" >
903+ <Github class =" h-3 w-3" />
904+ Repository
905+ </dt >
906+ <dd class =" text-sm" >
907+ <a
908+ :href =" formData.server.server_data.repository_url"
909+ target =" _blank"
910+ rel =" noopener noreferrer"
911+ class =" text-blue-600 hover:underline"
912+ >
913+ {{ formData.server.server_data.repository_url }}
914+ </a >
915+ </dd >
916+ </div >
917+
918+ <!-- Runtime -->
919+ <div class =" space-y-1" >
920+ <dt class =" text-xs font-medium text-gray-500 flex items-center gap-1" >
921+ <Layers class =" h-3 w-3" />
922+ Runtime
923+ </dt >
924+ <dd class =" text-sm" >
925+ <Badge variant =" secondary" class =" font-mono text-xs" >
926+ {{ formData.server.server_data.runtime }}
927+ </Badge >
928+ </dd >
929+ </div >
930+
931+ <!-- Language -->
932+ <div v-if =" formData.server.server_data.language && formData.server.server_data.language.toLowerCase() !== 'http'" class =" space-y-1" >
933+ <dt class =" text-xs font-medium text-gray-500 flex items-center gap-1" >
934+ <Code class =" h-3 w-3" />
935+ Language
936+ </dt >
937+ <dd class =" text-sm" >
938+ <Badge variant =" outline" class =" text-xs" >
939+ {{ formData.server.server_data.language }}
940+ </Badge >
941+ </dd >
942+ </div >
943+
944+ <!-- Author Name -->
945+ <div v-if =" formData.server.server_data.author_name" class =" space-y-1" >
946+ <dt class =" text-xs font-medium text-gray-500 flex items-center gap-1" >
947+ <User class =" h-3 w-3" />
948+ Author
949+ </dt >
950+ <dd class =" text-sm text-gray-900" >
951+ {{ formData.server.server_data.author_name }}
952+ </dd >
953+ </div >
954+
955+ <!-- Transport Type -->
956+ <div class =" space-y-1" >
957+ <dt class =" text-xs font-medium text-gray-500" >Transport Type</dt >
958+ <dd class =" text-sm" >
959+ <Badge variant =" outline" class =" text-xs uppercase" >
960+ {{ formData.server.server_data.transport_type }}
961+ </Badge >
962+ </dd >
963+ </div >
964+ </div >
965+
966+ <!-- Specifications Section -->
967+ <div class =" space-y-4 pt-4 border-t border-gray-200" >
968+ <h3 class =" text-sm font-semibold text-gray-900" >Specifications</h3 >
969+
970+ <!-- Requires OAuth -->
971+ <div v-if =" formData.server.server_data.requires_oauth" class =" space-y-1" >
972+ <dt class =" text-xs font-medium text-gray-500 flex items-center gap-1" >
973+ <Shield class =" h-3 w-3" />
974+ Authentication
975+ </dt >
976+ <dd class =" text-sm" >
977+ <Badge variant =" default" class =" text-xs" >
978+ Requires OAuth
979+ </Badge >
980+ </dd >
981+ </div >
982+
983+ <!-- Packages (if runtime !== 'http') -->
984+ <div v-if =" formData.server.server_data.runtime !== 'http' && formData.server.server_data.packages" class =" space-y-1" >
985+ <dt class =" text-xs font-medium text-gray-500 flex items-center gap-1" >
986+ <Package class =" h-3 w-3" />
987+ Packages
988+ </dt >
989+ <dd class =" text-sm" >
990+ <pre class =" bg-gray-50 border border-gray-200 rounded p-3 text-xs overflow-x-auto" >{{ JSON.stringify(formData.server.server_data.packages, null, 2) }}</pre >
991+ </dd >
992+ </div >
993+
994+ <!-- Remotes (if runtime === 'http') -->
995+ <div v-if =" formData.server.server_data.runtime === 'http' && formData.server.server_data.remotes" class =" space-y-1" >
996+ <dt class =" text-xs font-medium text-gray-500 flex items-center gap-1" >
997+ <Globe class =" h-3 w-3" />
998+ Remotes
999+ </dt >
1000+ <dd class =" text-sm" >
1001+ <pre class =" bg-gray-50 border border-gray-200 rounded p-3 text-xs overflow-x-auto" >{{ JSON.stringify(formData.server.server_data.remotes, null, 2) }}</pre >
1002+ </dd >
1003+ </div >
1004+ </div >
1005+ </div >
1006+
1007+ <SheetFooter >
1008+ <Button @click =" isDetailsSheetOpen = false" variant =" outline" >
1009+ Close
1010+ </Button >
1011+ </SheetFooter >
1012+ </SheetContent >
1013+ </Sheet >
8411014 </div >
8421015</template >
0 commit comments