@@ -169,154 +169,168 @@ watch(() => environmentVariables.value, (newVariables) => {
169169 </script >
170170
171171<template >
172- <div class =" space-y-6" >
173- <!-- No Environment Variables -->
174- <div v-if =" !environmentVariables.length" class =" text-center py-8" >
175- <Settings class="h-12 w-12 text-gray-400 mx-auto mb-4" />
176- <h3 class =" text-lg font-medium text-gray-900 mb-2" >
177- {{ t('mcpInstallations.wizard.environment.noVariables') }}
178- </h3 >
179- <p class =" text-gray-600" >
180- {{ t('mcpInstallations.wizard.environment.noVariablesDescription') }}
181- </p >
182- </div >
183-
184- <!-- Environment Variables Form -->
185- <div v-else class =" space-y-6" >
186- <!-- Server Info -->
187- <Card v-if =" serverData " >
188- <CardHeader >
189- <CardTitle class="flex items-center gap-2">
190- <Settings class="h-5 w-5" />
191- {{ serverData.name }}
192- </CardTitle >
193- <CardDescription >
194- {{ t('mcpInstallations.wizard.environment.configureFor', { name: serverData.name }) }}
195- </CardDescription >
196- </CardHeader >
197- </Card >
198-
199-
200- <!-- Required Variables -->
201- <div v-if =" hasRequiredVariables" class =" space-y-4" >
202- <h3 class =" text-lg font-medium text-gray-900" >
203- {{ t('mcpInstallations.wizard.environment.requiredVariables') }}
204- </h3 >
205-
206- <div class =" space-y-4" >
207- <div
208- v-for =" env in requiredVariables"
209- :key =" env.name"
210- class =" space-y-2"
211- >
212- <Label :for =" env .name " class="text-sm font-medium">
213- {{ env.name }}
214- </Label >
215-
216- <!-- Textarea for long values -->
217- <div v-if =" isTextarea(env)" class =" relative" >
218- <Textarea
219- :id =" env .name "
220- :value =" modelValue [env .name ] || ' ' "
221- @input =" updateValue (env .name , ($event .target as HTMLTextAreaElement ).value )"
222- :placeholder =" env .placeholder || ` Enter ${env .name } ` "
223- class="min-h-[100px]"
224- :class =" { ' border-red-500' : env .required && isPlaceholderValue (modelValue [env .name ] || ' ' , env ) } "
225- />
226- </div >
227-
228- <!-- Regular input -->
229- <div v-else class =" relative" >
230- <Input
231- :id =" env .name "
232- :type =" getInputType (env )"
233- :value =" modelValue [env .name ] || ' ' "
234- @input =" updateValue (env .name , ($event .target as HTMLInputElement ).value )"
235- :placeholder =" env .placeholder || ` Enter ${env .name } ` "
236- :class =" { ' border-red-500' : env .required && isPlaceholderValue (modelValue [env .name ] || ' ' , env ) } "
237- />
238-
239- <!-- Password toggle -->
240- <Button
241- v-if =" env .type === ' password' "
242- type="button"
243- variant="ghost"
244- size="sm"
245- class="absolute right-2 top-1/2 transform -translate-y-1/2 h-6 w-6 p-0"
246- @click =" togglePasswordVisibility (env .name )"
247- >
248- <Eye v-if =" ! showPasswords [env .name ]" class="h-4 w-4" />
249- <EyeOff v-else class="h-4 w-4" />
250- </Button >
251- </div >
252-
253- <!-- Validation message -->
254- <p v-if =" env.validation" class =" text-xs text-gray-600" >
255- {{ env.validation }}
172+ <div class =" bg-muted/50 sm:rounded-lg" >
173+ <div class =" py-16 sm:py-24" >
174+ <div class =" mx-auto max-w-7xl sm:px-2 lg:px-8" >
175+ <div class =" mx-auto max-w-2xl px-4 lg:max-w-4xl lg:px-0" >
176+ <!-- No Environment Variables -->
177+ <div v-if =" !environmentVariables.length" class =" text-center py-8" >
178+ <Settings class="h-12 w-12 text-gray-400 mx-auto mb-4" />
179+ <h3 class =" text-lg font-medium text-gray-900 mb-2" >
180+ {{ t('mcpInstallations.wizard.environment.noVariables') }}
181+ </h3 >
182+ <p class =" text-gray-600" >
183+ {{ t('mcpInstallations.wizard.environment.noVariablesDescription') }}
256184 </p >
257185 </div >
258186 </div >
259187 </div >
260188
261- <!-- Optional Variables -->
262- <div v-if =" hasOptionalVariables" class =" space-y-4" >
263- <h3 class =" text-lg font-medium text-gray-900" >
264- {{ t('mcpInstallations.wizard.environment.optionalVariables') }}
265- </h3 >
266-
267- <div class =" space-y-4" >
268- <div
269- v-for =" env in optionalVariables"
270- :key =" env.name"
271- class =" space-y-2"
272- >
273- <Label :for =" env .name " class="text-sm font-medium">
274- {{ env.name }}
275- </Label >
276-
277- <!-- Textarea for long values -->
278- <div v-if =" isTextarea(env)" class =" relative" >
279- <Textarea
280- :id =" env .name "
281- :value =" modelValue [env .name ] || ' ' "
282- @input =" updateValue (env .name , ($event .target as HTMLTextAreaElement ).value )"
283- :placeholder =" env .placeholder || ` Enter ${env .name } (optional) ` "
284- class="min-h-[100px]"
285- />
189+ <!-- Environment Variables Form -->
190+ <div v-if =" environmentVariables.length" >
191+ <div class =" mx-auto max-w-7xl sm:px-2 lg:px-8" >
192+ <div class =" mx-auto max-w-2xl space-y-8 sm:px-4 lg:max-w-4xl lg:px-0" >
193+ <!-- Server Info -->
194+ <Card v-if =" serverData " class="border-t border-b border-gray-200 bg-white shadow-xs sm:rounded-lg sm:border ">
195+ <CardHeader >
196+ <CardTitle class="flex items-center gap-2">
197+ <Settings class="h-5 w-5" />
198+ {{ serverData.name }}
199+ </CardTitle >
200+ <CardDescription >
201+ {{ t('mcpInstallations.wizard.environment.configureFor', { name: serverData.name }) }}
202+ </CardDescription >
203+ </CardHeader >
204+ </Card >
205+
206+ <!-- Required Variables -->
207+ <div v-if =" hasRequiredVariables" class =" border-t border-b border-gray-200 bg-white shadow-xs sm:rounded-lg sm:border" >
208+ <div class =" p-4 sm:p-6" >
209+ <h3 class =" text-lg font-medium text-gray-900 mb-4" >
210+ {{ t('mcpInstallations.wizard.environment.requiredVariables') }}
211+ </h3 >
212+
213+ <div class =" space-y-4" >
214+ <div
215+ v-for =" env in requiredVariables"
216+ :key =" env.name"
217+ class =" space-y-2"
218+ >
219+ <Label :for =" env .name " class="text-sm font-medium">
220+ {{ env.name }}
221+ </Label >
222+
223+ <!-- Textarea for long values -->
224+ <div v-if =" isTextarea(env)" class =" relative" >
225+ <Textarea
226+ :id =" env .name "
227+ :value =" modelValue [env .name ] || ' ' "
228+ @input =" updateValue (env .name , ($event .target as HTMLTextAreaElement ).value )"
229+ :placeholder =" env .placeholder || ` Enter ${env .name } ` "
230+ class="min-h-[100px] bg-white"
231+ :class =" { ' border-red-500' : env .required && isPlaceholderValue (modelValue [env .name ] || ' ' , env ) } "
232+ />
233+ </div >
234+
235+ <!-- Regular input -->
236+ <div v-else class =" relative" >
237+ <Input
238+ :id =" env .name "
239+ :type =" getInputType (env )"
240+ :value =" modelValue [env .name ] || ' ' "
241+ @input =" updateValue (env .name , ($event .target as HTMLInputElement ).value )"
242+ :placeholder =" env .placeholder || ` Enter ${env .name } ` "
243+ class="bg-white"
244+ :class =" { ' border-red-500' : env .required && isPlaceholderValue (modelValue [env .name ] || ' ' , env ) } "
245+ />
246+
247+ <!-- Password toggle -->
248+ <Button
249+ v-if =" env .type === ' password' "
250+ type="button"
251+ variant="ghost"
252+ size="sm"
253+ class="absolute right-2 top-1/2 transform -translate-y-1/2 h-6 w-6 p-0"
254+ @click =" togglePasswordVisibility (env .name )"
255+ >
256+ <Eye v-if =" ! showPasswords [env .name ]" class="h-4 w-4" />
257+ <EyeOff v-else class="h-4 w-4" />
258+ </Button >
259+ </div >
260+
261+ <!-- Validation message -->
262+ <p v-if =" env.validation" class =" text-xs text-gray-600" >
263+ {{ env.validation }}
264+ </p >
265+ </div >
266+ </div >
267+ </div >
286268 </div >
287269
288- <!-- Regular input -->
289- <div v-else class =" relative" >
290- <Input
291- :id =" env .name "
292- :type =" getInputType (env )"
293- :value =" modelValue [env .name ] || ' ' "
294- @input =" updateValue (env .name , ($event .target as HTMLInputElement ).value )"
295- :placeholder =" env .placeholder || ` Enter ${env .name } (optional) ` "
296- />
297-
298- <!-- Password toggle -->
299- <Button
300- v-if =" env .type === ' password' "
301- type="button"
302- variant="ghost"
303- size="sm"
304- class="absolute right-2 top-1/2 transform -translate-y-1/2 h-6 w-6 p-0"
305- @click =" togglePasswordVisibility (env .name )"
306- >
307- <Eye v-if =" ! showPasswords [env .name ]" class="h-4 w-4" />
308- <EyeOff v-else class="h-4 w-4" />
309- </Button >
270+ <!-- Optional Variables -->
271+ <div v-if =" hasOptionalVariables" class =" border-t border-b border-gray-200 bg-white shadow-xs sm:rounded-lg sm:border" >
272+ <div class =" p-4 sm:p-6" >
273+ <h3 class =" text-lg font-medium text-gray-900 mb-4" >
274+ {{ t('mcpInstallations.wizard.environment.optionalVariables') }}
275+ </h3 >
276+
277+ <div class =" space-y-4" >
278+ <div
279+ v-for =" env in optionalVariables"
280+ :key =" env.name"
281+ class =" space-y-2"
282+ >
283+ <Label :for =" env .name " class="text-sm font-medium">
284+ {{ env.name }}
285+ </Label >
286+
287+ <!-- Textarea for long values -->
288+ <div v-if =" isTextarea(env)" class =" relative" >
289+ <Textarea
290+ :id =" env .name "
291+ :value =" modelValue [env .name ] || ' ' "
292+ @input =" updateValue (env .name , ($event .target as HTMLTextAreaElement ).value )"
293+ :placeholder =" env .placeholder || ` Enter ${env .name } (optional) ` "
294+ class="min-h-[100px] bg-white"
295+ />
296+ </div >
297+
298+ <!-- Regular input -->
299+ <div v-else class =" relative" >
300+ <Input
301+ :id =" env .name "
302+ :type =" getInputType (env )"
303+ :value =" modelValue [env .name ] || ' ' "
304+ @input =" updateValue (env .name , ($event .target as HTMLInputElement ).value )"
305+ :placeholder =" env .placeholder || ` Enter ${env .name } (optional) ` "
306+ class="bg-white"
307+ />
308+
309+ <!-- Password toggle -->
310+ <Button
311+ v-if =" env .type === ' password' "
312+ type="button"
313+ variant="ghost"
314+ size="sm"
315+ class="absolute right-2 top-1/2 transform -translate-y-1/2 h-6 w-6 p-0"
316+ @click =" togglePasswordVisibility (env .name )"
317+ >
318+ <Eye v-if =" ! showPasswords [env .name ]" class="h-4 w-4" />
319+ <EyeOff v-else class="h-4 w-4" />
320+ </Button >
321+ </div >
322+
323+ <!-- Validation message -->
324+ <p v-if =" env.validation" class =" text-xs text-gray-600" >
325+ {{ env.validation }}
326+ </p >
327+ </div >
328+ </div >
329+ </div >
310330 </div >
311-
312- <!-- Validation message -->
313- <p v-if =" env.validation" class =" text-xs text-gray-600" >
314- {{ env.validation }}
315- </p >
316331 </div >
317332 </div >
318333 </div >
319-
320334 </div >
321335 </div >
322336</template >
0 commit comments