Files
windmill/frontend/src/lib/components/CenteredModal.svelte
T
63cb46d7bb feat: add a minimal skin for the approval page and slack/teams (#11061)
* feat: add an approval skin to the approval page and slack/teams messages

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KK2Ye4PizykReZVuMEm3m9

* chore: point ee-repo-ref at the teams approval skin commit

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KK2Ye4PizykReZVuMEm3m9

* fix: resolve the approval skin from the step awaiting approval

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KK2Ye4PizykReZVuMEm3m9

* fix: shorten the slack approval message to fit the button value limit

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KK2Ye4PizykReZVuMEm3m9

* fix: rename skins to detailed/minimal and keep long slack messages

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KK2Ye4PizykReZVuMEm3m9

* feat: title the minimal approval page from the step and flow summaries

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KK2Ye4PizykReZVuMEm3m9

* feat: let wait_for_approval set the description approvers see

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KK2Ye4PizykReZVuMEm3m9

* fix: keep a finished workflow's approval description, still gated

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KK2Ye4PizykReZVuMEm3m9

* fix: keep a login-required approval locked after the run moves on

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KK2Ye4PizykReZVuMEm3m9

* feat: hide the windmill version on the approval page

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KK2Ye4PizykReZVuMEm3m9

* chore: update ee-repo-ref to e92abc9d1fba3ba898640df0cfeb0af8a50849b4

This commit updates the EE repository reference after PR #786 was merged in windmill-ee-private.

Previous ee-repo-ref: bf1766ff49458f62d3f11746f1a06893ae3c2325

New ee-repo-ref: e92abc9d1fba3ba898640df0cfeb0af8a50849b4

Automated by sync-ee-ref workflow.

---------

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: windmill-internal-app[bot] <windmill-internal-app[bot]@users.noreply.github.com>
2026-09-10 18:50:09 +00:00

90 lines
2.3 KiB
Svelte

<script lang="ts">
import { setLicense } from '$lib/enterpriseUtils'
import { twMerge } from 'tailwind-merge'
import { Loader2 } from 'lucide-svelte'
import LoginPageHeader from './LoginPageHeader.svelte'
interface Props {
subtitle?: string | undefined
/** Rendered under the title, for a subtitle that needs markup (a link, say).
* Sits below `subtitle` when both are given. */
subtitleSnippet?: import('svelte').Snippet
title?: string
large?: boolean
centerVertically?: boolean
loading?: boolean
containOverflow?: boolean
/** The Windmill version and update notice in the header. */
showVersion?: boolean
children?: import('svelte').Snippet
}
let {
subtitle = undefined,
subtitleSnippet = undefined,
title = 'Windmill',
large = false,
centerVertically = true,
loading = false,
containOverflow = false,
showVersion = true,
children
}: Props = $props()
setLicense()
let height = $state(0)
</script>
<div
class="flex justify-center h-screen p-4 relative bg-surface-secondary {containOverflow
? 'overflow-hidden'
: 'overflow-auto'}"
class:items-center={centerVertically}
style="scrollbar-gutter: stable both-edges;"
bind:clientHeight={height}
>
<div
class={twMerge(
'flex flex-col gap-2 items-center w-full pb-8',
containOverflow ? 'min-h-0' : 'h-fit',
containOverflow ? '' : height > 1080 ? 'pt-28' : 'pt-12'
)}
>
<div class="mb-4">
<!-- The mark moved to the header, so a page that is only waiting (logging out,
redirecting) needs its own thing that moves. -->
<h1
class="flex items-center justify-center gap-2 text-center text-lg text-emphasis font-semibold"
>
{title}
{#if loading}
<Loader2 size={16} class="animate-spin shrink-0 text-secondary" />
{/if}
</h1>
{#if subtitle}
<p class="text-xs font-normal text-primary text-center mt-2">
{subtitle}
</p>
{/if}
{#if subtitleSnippet}
<div class="text-center mt-2">{@render subtitleSnippet()}</div>
{/if}
</div>
{#if children}
<div
class="rounded-md bg-surface w-full {large
? 'max-w-5xl'
: 'max-w-[640px]'} p-4 sm:py-8 sm:px-10 z-10 {containOverflow
? 'flex-1 min-h-0 flex flex-col'
: ''}"
>
{@render children()}
</div>
{/if}
</div>
<LoginPageHeader {showVersion} />
</div>