feat(forms): make textarea monospace opt-in and improve multiline toggle

Add `monospace` prop to Textarea component so font-mono is no longer
applied by default. Apply it explicitly to env variable editors, private
key fields, and shared variable forms where monospace is appropriate.

Use Alpine.js x-data/x-model to make the multiline toggle reactive
without a full Livewire round-trip. Add wire:key on the input/textarea
wrappers to force proper DOM replacement when switching modes.
This commit is contained in:
Andras Bacsai committed 2026-03-31 15:37:42 +02:00
1 parent 47025c7815
commit 3961077b90
12 files changed
+87 -35

No files matched your search

@@ -1,17 +1,23 @@
<form class="flex flex-col w-full gap-2 rounded-sm" wire:submit='submit'>
<form class="flex flex-col w-full gap-2 rounded-sm" wire:submit='submit'
x-data="{ isMultiline: $wire.entangle('is_multiline') }">
<x-forms.input placeholder="NODE_ENV" id="key" label="Name" required />
@if ($is_multiline)
<x-forms.textarea id="value" label="Value" required />
@else
<x-forms.env-var-input placeholder="production" id="value" label="Value" required
:availableVars="$shared ? [] : $this->availableSharedVariables"
:projectUuid="data_get($parameters, 'project_uuid')"
:environmentUuid="data_get($parameters, 'environment_uuid')"
:serverUuid="data_get($parameters, 'server_uuid')" />
@endif
<template x-if="isMultiline">
<div wire:key="env-value-textarea">
<x-forms.textarea id="value" label="Value" required class="font-sans" spellcheck />
</div>
</template>
<template x-if="!isMultiline">
<div wire:key="env-value-input">
<x-forms.env-var-input placeholder="production" id="value" label="Value" required
:availableVars="$shared ? [] : $this->availableSharedVariables"
:projectUuid="data_get($parameters, 'project_uuid')"
:environmentUuid="data_get($parameters, 'environment_uuid')"
:serverUuid="data_get($parameters, 'server_uuid')" />
</div>
</template>
@if (!$shared && !$is_multiline)
<div class="text-xs text-neutral-500 dark:text-neutral-400 -mt-1">
@if (!$shared)
<div x-cloak x-show="!isMultiline" wire:key="env-value-tip" class="text-xs text-neutral-500 dark:text-neutral-400 -mt-1">
Tip: Type <span class="font-mono dark:text-warning text-coollabs">{{</span> to reference a shared environment
variable
</div>
@@ -34,8 +40,8 @@
label="Is Literal?" />
@endif
<x-forms.checkbox id="is_multiline" label="Is Multiline?" />
<x-forms.checkbox id="is_multiline" x-model="isMultiline" label="Is Multiline?" />
<x-forms.button type="submit" @click="slideOverOpen=false">
Save
</x-forms.button>
</form>
</form>