|
<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 fill_width: boolean;
|
|
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:fill_width
|
|
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:not(.fill_width) {
|
|
max-width: 640px;
|
|
}
|
|
}
|
|
@media (--screen-md) {
|
|
.app:not(.fill_width) {
|
|
max-width: 768px;
|
|
}
|
|
}
|
|
@media (--screen-lg) {
|
|
.app:not(.fill_width) {
|
|
max-width: 1024px;
|
|
}
|
|
}
|
|
@media (--screen-xl) {
|
|
.app:not(.fill_width) {
|
|
max-width: 1280px;
|
|
}
|
|
}
|
|
@media (--screen-xxl) {
|
|
.app:not(.fill_width) {
|
|
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>
|
|
|