@@ -84,135 +84,138 @@ const handlePasswordGenerated = (password: string, index: number) => variablesIn
8484 :ui =" { root: border } "
8585 class="duration-500"
8686 >
87- <div :class =" { 'absolute': isOverDropZone, 'hidden': !isOverDropZone }" class =" pointer-events-none left-0 top-0 z-40 size-full content-center items-center justify-center" >
88- <div class =" icon-container flex flex-col items-center gap-2" >
89- <UIcon name="lucide:file-up " class="text-primary size-10" />
90- <p class =" text-lg font-semibold" >
91- Drop your file here
92- </p >
93- </div >
94- </div >
95- <template #header >
96- <div :class =" { 'opacity-30': isOverDropZone }" class =" flex items-center justify-between" >
97- <div class =" flex flex-col" >
98- <h2 class =" text-lg font-semibold" >
99- Environment Variables
100- </h2 >
101- <p class =" text-sm font-normal text-muted" >
102- Manage your environment variables
87+ <div :class =" { 'absolute': isOverDropZone, 'hidden': !isOverDropZone }" class =" pointer-events-none left-0 top-0 z-40 size-full content-center items-center justify-center" >
88+ <div class =" icon-container flex flex-col items-center gap-2" >
89+ <UIcon name="lucide:file-up " class="text-primary size-10" />
90+ <p class =" text-lg font-semibold" >
91+ Drop your file here
10392 </p >
10493 </div >
105- <UDropdownMenu :items :content =" { align: ' start' ,side: ' right' , sideOffset: 8 } " >
106- <UButton variant="ghost" icon="heroicons:ellipsis-horizontal-20-solid " />
107- </UDropdownMenu >
10894 </div >
109- </template >
110- <div :class =" { 'opacity-30': isOverDropZone }" class =" flex flex-col gap-3" >
111- <div class =" flex w-full flex-col gap-4 md:w-1/3" >
112- <h4 class =" text-sm font-semibold" >
113- Environments
114- </h4 >
115- <div class =" flex select-none gap-4" >
116- <UCheckbox
117- v-for =" env in environments "
118- :key =" env .id "
119- v-model =" selectedEnvironments [env .id ]"
120- :name =" env .name "
121- :label =" capitalize (env .name )"
122- />
95+ <template #header >
96+ <div :class =" { 'opacity-30': isOverDropZone }" class =" flex items-center justify-between" >
97+ <div class =" flex flex-col" >
98+ <h2 class =" text-lg font-semibold" >
99+ Environment Variables
100+ </h2 >
101+ <p class =" text-sm font-normal text-muted" >
102+ Manage your environment variables
103+ </p >
104+ </div >
105+ <UDropdownMenu :items :content =" { align: ' start' ,side: ' right' , sideOffset: 8 } " >
106+ <UButton variant="ghost" icon="heroicons:ellipsis-horizontal-20-solid " />
107+ </UDropdownMenu >
123108 </div >
124- </div >
125- <Separator class="my-1" />
126- <div class =" flex items-center gap-2" >
127- <USwitch v-model =" autoUppercase " size="sm" label="Auto uppercase" />
128- <UTooltip
129- class="hidden sm:block "
130- :content =" { side: ' right' } "
131- text="Automatically uppercase all variable keys (e.g . Api_Key -> API_KEY)"
132- >
133- <UIcon name="lucide:info " class="text-muted size-4" />
134- </UTooltip >
135- </div >
136- <div class =" flex items-center gap-2 mt-2" >
137- <USwitch v-model =" syncWithGitHub " size="sm" label="Sync with GitHub" :disabled =" ! apps || apps .length === 0 " />
138- <UTooltip
139- class="hidden sm:block "
140- :content =" { side: ' right' } "
141- text="Automatically send your environment variables to GitHub secrets"
142- >
143- <UIcon name="lucide:info " class="text-muted size-4" />
144- </UTooltip >
145- <TextGradient text="New" class="font-normal text-sm" />
146- </div >
147- <Separator class="my-1" />
148- <p class =" text-xs font-normal text-muted" >
149- You can also paste all your environment variables (.env) as key value pairs to prefilled the form
150- </p >
151- <div class =" mb-4 flex flex-col gap-2" >
152- <div class =" hidden items-center sm:flex" >
153- <span class =" w-full text-sm font-normal text-muted" >Key</span >
154- <span class =" w-full text-sm font-normal text-muted" >Value</span >
155- <div class =" w-[100px]" />
109+ </template >
110+ <div :class =" { 'opacity-30': isOverDropZone }" class =" flex flex-col gap-3" >
111+ <div class =" flex w-full flex-col gap-4 md:w-1/3" >
112+ <h4 class =" text-sm font-semibold" >
113+ Environments
114+ </h4 >
115+ <div class =" flex select-none gap-4" >
116+ <UCheckbox
117+ v-for =" env in environments "
118+ :key =" env .id "
119+ v-model =" selectedEnvironments [env .id ]"
120+ :name =" env .name "
121+ :label =" capitalize (env .name )"
122+ />
123+ </div >
124+ </div >
125+ <Separator class="my-1" />
126+ <div class =" flex items-center gap-2" >
127+ <USwitch v-model =" autoUppercase " size="sm" label="Auto uppercase" />
128+ <UTooltip
129+ class="hidden sm:block "
130+ :content =" { side: ' right' } "
131+ text="Automatically uppercase all variable keys (e.g . Api_Key -> API_KEY)"
132+ >
133+ <UIcon name="lucide:info " class="text-muted size-4" />
134+ </UTooltip >
135+ </div >
136+ <div class =" flex items-center gap-2 mt-2" >
137+ <USwitch v-model =" syncWithGitHub " size="sm" label="Sync with GitHub" :disabled =" ! apps || apps .length === 0 " />
138+ <UTooltip
139+ class="hidden sm:block "
140+ :content =" { side: ' right' } "
141+ text="Automatically send your environment variables to GitHub secrets"
142+ >
143+ <UIcon name="lucide:info " class="text-muted size-4" />
144+ </UTooltip >
145+ <TextGradient text="New" class="font-normal text-sm" />
156146 </div >
157- <div v-for =" variable in variablesToCreate" :key =" variable" class =" flex flex-col gap-4" >
158- <div class =" flex flex-col gap-1" >
159- <div class =" flex flex-col items-start gap-1 sm:flex-row" >
160- <div class =" w-full flex items-start gap-1" >
147+ <Separator class="my-1" />
148+ <p class =" text-xs font-normal text-muted" >
149+ You can also paste all your environment variables (.env) as key value pairs to prefilled the form
150+ </p >
151+ <div class =" mb-4 flex flex-col gap-3" >
152+ <div
153+ v-for =" variable in variablesToCreate"
154+ :key =" variable"
155+ class =" relative rounded-lg border border-default p-3"
156+ >
157+ <div class =" flex items-start gap-3" >
158+ <span class =" text-xs text-muted tabular-nums pt-2 select-none" >{{ variable }}</span >
159+ <div class =" flex flex-1 flex-col gap-2" >
160+ <div class =" flex flex-col gap-2 sm:flex-row" >
161+ <div class =" w-full flex items-start gap-1" >
162+ <UInput
163+ v-model =" variablesInput .variables [variable - 1 ]! .key "
164+ required
165+ class="w-full"
166+ placeholder="e.g . API_KEY"
167+ />
168+ <VariablePrefix v-model =" variablesInput .variables [variable - 1 ]! .key " />
169+ </div >
170+ <div class =" w-full flex items-start gap-1" >
171+ <UTextarea
172+ v-model =" variablesInput .variables [variable - 1 ]! .value "
173+ required
174+ :rows =" 1 "
175+ :maxrows =" 4 "
176+ class="w-full"
177+ autoresize
178+ placeholder="e.g . 123456"
179+ />
180+ <VariableGenerator @password-generated =" handlePasswordGenerated ($event , variable - 1 )" />
181+ </div >
182+ </div >
161183 <UInput
162- v-model =" variablesInput .variables [variable - 1 ]! .key "
163- required
184+ v-model =" variablesInput .variables [variable - 1 ]! .description "
185+ placeholder="Description (optional)"
164186 class="w-full"
165- placeholder="e.g . API_KEY"
166187 />
167- <VariablePrefix v-model =" variablesInput .variables [variable - 1 ]! .key " />
168- </div >
169- <div class =" w-full flex items-start gap-1" >
170- <UTextarea
171- v-model =" variablesInput .variables [variable - 1 ]! .value "
172- required
173- :rows =" 1 "
174- class="w-full"
175- autoresize
176- placeholder="e.g . 123456"
177- />
178- <VariableGenerator @password-generated =" handlePasswordGenerated ($event , variable - 1 )" />
179188 </div >
180189 <UTooltip text="Remove variable" :content =" { side: ' top' } " >
181- <UButton icon="lucide:x " variant="soft " color="error" @click =" removeVariable (variable - 1 )" />
190+ <UButton icon="lucide:x " variant="ghost " color="error" size="xs " @click =" removeVariable (variable - 1 )" />
182191 </UTooltip >
183192 </div >
184- <UInput
185- v-model =" variablesInput .variables [variable - 1 ]! .description "
186- placeholder="Description (optional)"
187- class="w-full"
188- />
189193 </div >
190194 </div >
191195 </div >
192- </div >
193- <template #footer >
194- <div :class =" { 'opacity-30': isOverDropZone }" class =" flex justify-between gap-4" >
195- <div class =" flex gap-2" >
196- <UButton
197- label="Add variable"
198- size="xs"
199- variant="soft"
200- icon="heroicons:plus-circle-20-solid "
201- @click =" addVariable "
202- />
203- <input ref =" fileInputRef" type =" file" accept =" text" style =" display : none ;" @change =" handleFileUpload" >
204- <UButton
205- label="Import .env "
206- size="xs"
207- variant="soft"
208- icon="lucide:download "
209- @click =" triggerFileInput "
210- />
196+ <template #footer >
197+ <div :class =" { 'opacity-30': isOverDropZone }" class =" flex justify-between gap-4" >
198+ <div class =" flex gap-2" >
199+ <UButton
200+ label="Add variable"
201+ size="xs"
202+ variant="soft"
203+ icon="heroicons:plus-circle-20-solid "
204+ @click =" addVariable "
205+ />
206+ <input ref =" fileInputRef" type =" file" accept =" text" style =" display : none ;" @change =" handleFileUpload" >
207+ <UButton
208+ label="Import .env "
209+ size="xs"
210+ variant="soft"
211+ icon="lucide:download "
212+ @click =" triggerFileInput "
213+ />
214+ </div >
215+ <UButton label="Save" :loading =" createLoading " type="submit" />
211216 </div >
212- <UButton label="Save" :loading =" createLoading " type="submit" />
213- </div >
214- </template >
215- </UCard >
217+ </template >
218+ </UCard >
216219 </div >
217220 </form >
218221</template >
0 commit comments