2025-10-11 10:42:09 +00:00
|
|
|
<div>
|
2026-08-03 21:11:54 +00:00
|
|
|
<x-slot:title>
|
|
|
|
|
Cloud-Init Scripts | Coolify
|
|
|
|
|
</x-slot>
|
2025-10-11 10:42:09 +00:00
|
|
|
|
2026-08-05 14:24:31 +00:00
|
|
|
<x-security.settings-layout>
|
|
|
|
|
<x-application.settings-section title="Cloud-init scripts"
|
|
|
|
|
description="Reusable initialization scripts for cloud servers." flush>
|
2026-08-03 21:11:54 +00:00
|
|
|
<x-slot:actions>
|
|
|
|
|
@can('create', App\Models\CloudInitScript::class)
|
|
|
|
|
<x-modal-input title="New Cloud-Init Script">
|
|
|
|
|
<x-slot:content>
|
|
|
|
|
<button type="button"
|
2026-08-05 20:34:56 +00:00
|
|
|
class="button button-highlighted">
|
2026-08-03 21:11:54 +00:00
|
|
|
<x-reicon name="plus" class="size-3.5" />
|
|
|
|
|
New script
|
|
|
|
|
</button>
|
|
|
|
|
</x-slot:content>
|
|
|
|
|
<livewire:security.cloud-init-script-form />
|
|
|
|
|
</x-modal-input>
|
2026-07-08 10:58:27 +00:00
|
|
|
@endcan
|
2026-08-03 21:11:54 +00:00
|
|
|
</x-slot:actions>
|
|
|
|
|
|
2026-08-05 14:24:31 +00:00
|
|
|
|
2026-08-03 21:11:54 +00:00
|
|
|
@if ($scripts->isEmpty())
|
|
|
|
|
<x-empty title="No cloud-init scripts"
|
|
|
|
|
description="Create a script to reuse it during server provisioning."
|
|
|
|
|
icon-name="file-content" size="sm" />
|
|
|
|
|
@else
|
2026-08-05 14:24:31 +00:00
|
|
|
<div>
|
feat(ui): WCAG contrast, neutral oklch surface system, and mobile nav overhaul
Design tokens
- Fix WCAG AA text failures: darken light muted text and lighten dark
tertiary text so 13-14px copy clears 4.5:1 on every surface.
- Rebuild the dark surface ladder in correct values (oklch compresses to
near-black below ~15%), giving visible steps: content, chrome, cards.
- Establish a 3-layer shell (deep content, lighter sidebar/topbar chrome,
lifted cards) with crisp hairline rings and a restrained card shadow.
- Unify every surface to one neutral temperature (pure gray); neutralize
the cool-tinted sidebar text and legacy surface tokens.
- Convert all color tokens to oklch (neutrals + brand).
- Unify inputs to the recessed token; fix invisible dark placeholders.
- One shared --shadow-dropdown for all menus/listboxes/command palette.
Settings sidebar
- Sticky contained-card rail with subtle scrollbar; collapsible sub-section
groups (active open by default), cross-page section links.
- Mobile: collapsible disclosure with animated open, outside/Escape dismiss,
press feedback, and reduced-motion support.
Mobile
- Consolidate the resource header (title + status + links on one row).
- Tighten settings-page vertical rhythm.
- Rebuild the main sidebar as an animated shadcn-style sheet (slide/fade,
Escape, scroll lock, in-panel close, close-on-navigate).
Fixes
- #11532: selected server invisible in the light-mode terminal toolbar.
Docs: update DESIGN.md tokens, shell layering, and temperature rules.
2026-09-07 02:35:56 +00:00
|
|
|
<div class="grid grid-cols-[minmax(0,1fr)_12rem_1.75rem] items-center gap-3 border-b border-neutral-200 bg-neutral-50 px-4 py-2.5 text-[13px] font-medium text-neutral-500 dark:border-white/[0.08] dark:bg-white/[0.05] dark:text-fg-faint">
|
2026-08-05 14:24:31 +00:00
|
|
|
<div class="pl-11">Script</div>
|
|
|
|
|
<div>Last updated</div>
|
|
|
|
|
<div class="w-7"></div>
|
|
|
|
|
</div>
|
2026-08-03 21:11:54 +00:00
|
|
|
@foreach ($scripts as $script)
|
|
|
|
|
@can('view', $script)
|
2026-08-05 14:24:31 +00:00
|
|
|
<x-modal-input title="Edit Cloud-Init Script" isFullWidth :wireIgnore="false" :contentClicks="false"
|
|
|
|
|
wire:key="cloud-init-script-{{ $script->id }}"
|
|
|
|
|
class="border-b border-neutral-200 last:border-b-0 dark:border-white/[0.07]">
|
|
|
|
|
<x-slot:content>
|
|
|
|
|
<div
|
|
|
|
|
class="grid min-h-14 w-full grid-cols-[minmax(0,1fr)_12rem_1.75rem] items-center gap-3 px-4 py-2.5 text-left transition-colors hover:bg-neutral-50 dark:hover:bg-white/[0.025]"
|
|
|
|
|
>
|
|
|
|
|
<div class="flex min-w-0 items-center gap-3">
|
2026-08-03 21:11:54 +00:00
|
|
|
<div
|
|
|
|
|
class="flex size-8 shrink-0 items-center justify-center rounded-lg border border-neutral-200 bg-neutral-50 text-neutral-500 dark:border-white/[0.08] dark:bg-white/[0.04] dark:text-fg-dim">
|
|
|
|
|
<x-reicon name="file-content" class="size-4" />
|
|
|
|
|
</div>
|
|
|
|
|
<div class="min-w-0 flex-1">
|
|
|
|
|
<h3
|
|
|
|
|
class="truncate text-[13px]! leading-4! font-semibold! text-black dark:text-fg">
|
|
|
|
|
{{ $script->name }}
|
|
|
|
|
</h3>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
2026-08-05 14:24:31 +00:00
|
|
|
<div class="flex items-center">
|
2026-08-03 21:11:54 +00:00
|
|
|
<span class="text-[10px] text-neutral-400 dark:text-fg-faint">
|
|
|
|
|
Updated {{ $script->updated_at->diffForHumans() }}
|
|
|
|
|
</span>
|
|
|
|
|
</div>
|
2026-08-05 14:24:31 +00:00
|
|
|
<button type="button" class="icon-button" title="Edit cloud-init script"
|
|
|
|
|
aria-label="Edit {{ $script->name }}" @click="modalOpen=true">
|
|
|
|
|
<x-reicon name="settings" class="size-3.5" />
|
|
|
|
|
</button>
|
|
|
|
|
</div>
|
|
|
|
|
</x-slot:content>
|
|
|
|
|
<livewire:security.cloud-init-script.show :cloud_init_script_uuid="$script->uuid"
|
|
|
|
|
:modalMode="true" :key="'cloud-init-editor-'.$script->uuid" />
|
|
|
|
|
</x-modal-input>
|
2026-08-03 21:11:54 +00:00
|
|
|
@endcan
|
|
|
|
|
@endforeach
|
|
|
|
|
</div>
|
|
|
|
|
@endif
|
|
|
|
|
</x-application.settings-section>
|
2026-08-05 14:24:31 +00:00
|
|
|
|
|
|
|
|
</x-security.settings-layout>
|
2025-10-11 10:42:09 +00:00
|
|
|
</div>
|