<script lang="ts">
	import space_logo from "./images/spaces.svg";
	import { _ } from "svelte-i18n";
	export let wrapper: HTMLDivElement;
	export let version: string;
	export let initial_height: string;
	export let is_embed: boolean;

	export let space: string | null;
	export let display: boolean;
	export let info: boolean;
	export let loaded: boolean;
</script>

<div
	bind:this={wrapper}
	class:app={!display && !is_embed}
	class:embed-container={display}
	class:with-info={info}
	class="gradio-container gradio-container-{version}"
	style:min-height={loaded ? "initial" : initial_height}
	style:flex-grow={!display ? "1" : "auto"}
	data-iframe-height
>
	<div class="main">
		<slot />
	</div>
	{#if display && space && info}
		<div class="info">
			<span>
				<a href="https://huggingface.co/spaces/{space}" class="title">{space}</a
				>
			</span>
			<span>
				{$_("common.built_with")}
				<a class="gradio" href="https://gradio.app">Gradio</a>.
			</span>
			<span>
				{$_("common.hosted_on")}
				<a class="hf" href="https://huggingface.co/spaces"
					><span class="space-logo">
						<img src={space_logo} alt="Hugging Face Space" />
					</span> Spaces</a
				>
			</span>
		</div>
	{/if}
</div>

<style>
	.gradio-container {
		display: flex;
		position: relative;
		flex-direction: column;
		padding: 0;
		min-height: 1px;
		overflow: hidden;
		color: var(--button-secondary-text-color);
	}

	.embed-container {
		margin: var(--size-4) 0px;
		border: 1px solid var(--button-secondary-border-color);
		border-radius: var(--embed-radius);
	}

	.with-info {
		padding-bottom: var(--size-7);
	}

	.embed-container > .main {
		padding: var(--size-4);
	}

	.app > .main {
		display: flex;
		flex-grow: 1;
		flex-direction: column;
	}

	.app {
		position: relative;
		margin: auto;
		padding: var(--size-4) var(--size-8);
		width: 100%;
		height: 100%;
	}

	@media (--screen-sm) {
		.app {
			max-width: 640px;
		}
	}
	@media (--screen-md) {
		.app {
			max-width: 768px;
		}
	}
	@media (--screen-lg) {
		.app {
			max-width: 1024px;
		}
	}
	@media (--screen-xl) {
		.app {
			max-width: 1280px;
		}
	}
	@media (--screen-xxl) {
		.app {
			max-width: 1536px;
		}
	}

	.info {
		display: flex;
		position: absolute;
		bottom: 0;
		justify-content: flex-start;
		border-top: 1px solid var(--button-secondary-border-color);
		padding: var(--size-1) var(--size-5);
		width: 100%;
		color: var(--body-text-color-subdued);
		font-size: var(--text-md);
		white-space: nowrap;
	}

	.info > span {
		word-wrap: break-word;
		-break: keep-all;
		display: block;
		word-break: keep-all;
	}

	.info > span:nth-child(1) {
		margin-right: 4px;
		min-width: 0px;
		max-width: max-content;
		overflow: hidden;
		color: var(--body-text-color);
		text-overflow: ellipsis;
		white-space: nowrap;
	}

	.info > span:nth-child(2) {
		margin-right: 3px;
	}

	.info > span:nth-child(2),
	.info > span:nth-child(3) {
		width: max-content;
	}

	.info > span:nth-child(3) {
		align-self: flex-end;
		justify-self: flex-end;
		margin-left: auto;
		text-align: right;
	}

	.info > span:nth-child(1) {
		flex-shrink: 9;
	}

	.hidden-title {
		position: absolute;
		left: var(--size-5);
		opacity: 0;
		background: var(--button-secondary-background-fill);
		padding-right: 4px;
	}

	.info a {
		color: var(--body-text-color);
	}

	.title {
		font-size: var(--text-sm);
		font-family: var(--font-mono);
	}

	.hf {
		margin-left: 5px;
	}

	.space-logo img {
		display: inline-block;
		margin-bottom: 4px;
		height: 12px;
	}

	a:hover {
		text-decoration: underline;
	}
</style>
