gradio/js/image/shared/Image.svelte

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

47 lines
1.4 KiB
Svelte
Raw Normal View History

<script lang="ts">
import type { HTMLImgAttributes } from "svelte/elements";
2024-06-25 05:41:06 +08:00
import { createEventDispatcher } from "svelte";
const dispatch = createEventDispatcher<{ load?: void }>();
interface Props extends HTMLImgAttributes {
"data-testid"?: string;
}
type $$Props = Props;
import { resolve_wasm_src } from "@gradio/wasm/svelte";
export let src: HTMLImgAttributes["src"] = undefined;
Lite v4 (#6398) * Fix vite.config.js detecting the development mode * Fix the imports of @gradio/theme in js/app/src/lite/index.ts * [WIP] Install Pydantic V1 and mock the RootModel class * Remove Wasm WebSocket implementations * Move ASGI-HTTP conversion logic from the worker to the worker-proxy so we have fine controls on the ASGI connection at the worker-proxy level for the HTTP stream connection impl in the future * Fix asgi-types.ts * Create `WasmWorkerEventSource` and inject the `EventSource` creation in @gradio/client * Mock Pydantic V2's BaseModel * Fix Pydantic V1 installation * Make <ImageUploader /> and <ImagePreview /> Wasm-compatible * Create `getHeaderValue()` * Create `<DownloadLink />` for Wasm-compatible download and fix `<ImagePreview />` to use it * Make `gr.Video()` Wasm-compatible avoiding unnecessary execution of ffprobe * Move `<DownloadLink />` to @gradio/wasm and use it in `<VideoPreview />` too * Fix `<DownloadLink />` making `href` optional and adding `rel="noopener noreferrer"` * Make the download button of `<StaticAudio>` and `<Code />` Wasm-compatible * Make the download button of `<FilePreview />` Wasm-compatible * Improve the RootModel mock class for `.model_dump()` and `.model_json_schame()` to work * Make `<UploadProgress />` Wasm-compatible * Fix `WorkerProxy.httpRequest()` to use `decodeURIComponent()` to process `path` and `query_string` * Fix `<InteractiveAudio />` to make its upload feature Wasm-compatible * [WIP] Revert "Make `<UploadProgress />` Wasm-compatible" This reverts commit f96b4b7d5e92bb488cfe1939d25063366f714178. * Fix Image styles * Fix `<AudioPlayer />`'s `create_waveform()` to be Wasm-compatible * add changeset * formatting * Fix js/image/shared/Image.svelte to render <img> immediately * Fix js/image/shared/Image.svelte to avoid race condition * Fix js/image/shared/Image.svelte * Fix js/image/shared/Image.svelte * Fix js/image/shared/Image.svelte removing unnecessary styles * Fix js/video/shared/Video.svelte to use the passed immediately without waiting for the async resolution --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> Co-authored-by: aliabd <ali.si3luwa@gmail.com> Co-authored-by: Abubakar Abid <abubakar@huggingface.co>
2023-12-13 06:10:16 +08:00
let resolved_src: typeof src;
// The `src` prop can be updated before the Promise from `resolve_wasm_src` is resolved.
// In such a case, the resolved value for the old `src` has to be discarded,
// This variable `latest_src` is used to pick up only the value resolved for the latest `src` prop.
let latest_src: typeof src;
$: {
// In normal (non-Wasm) Gradio, the `<img>` element should be rendered with the passed `src` props immediately
// without waiting for `resolve_wasm_src()` to resolve.
// If it waits, a blank image is displayed until the async task finishes
Lite v4 (#6398) * Fix vite.config.js detecting the development mode * Fix the imports of @gradio/theme in js/app/src/lite/index.ts * [WIP] Install Pydantic V1 and mock the RootModel class * Remove Wasm WebSocket implementations * Move ASGI-HTTP conversion logic from the worker to the worker-proxy so we have fine controls on the ASGI connection at the worker-proxy level for the HTTP stream connection impl in the future * Fix asgi-types.ts * Create `WasmWorkerEventSource` and inject the `EventSource` creation in @gradio/client * Mock Pydantic V2's BaseModel * Fix Pydantic V1 installation * Make <ImageUploader /> and <ImagePreview /> Wasm-compatible * Create `getHeaderValue()` * Create `<DownloadLink />` for Wasm-compatible download and fix `<ImagePreview />` to use it * Make `gr.Video()` Wasm-compatible avoiding unnecessary execution of ffprobe * Move `<DownloadLink />` to @gradio/wasm and use it in `<VideoPreview />` too * Fix `<DownloadLink />` making `href` optional and adding `rel="noopener noreferrer"` * Make the download button of `<StaticAudio>` and `<Code />` Wasm-compatible * Make the download button of `<FilePreview />` Wasm-compatible * Improve the RootModel mock class for `.model_dump()` and `.model_json_schame()` to work * Make `<UploadProgress />` Wasm-compatible * Fix `WorkerProxy.httpRequest()` to use `decodeURIComponent()` to process `path` and `query_string` * Fix `<InteractiveAudio />` to make its upload feature Wasm-compatible * [WIP] Revert "Make `<UploadProgress />` Wasm-compatible" This reverts commit f96b4b7d5e92bb488cfe1939d25063366f714178. * Fix Image styles * Fix `<AudioPlayer />`'s `create_waveform()` to be Wasm-compatible * add changeset * formatting * Fix js/image/shared/Image.svelte to render <img> immediately * Fix js/image/shared/Image.svelte to avoid race condition * Fix js/image/shared/Image.svelte * Fix js/image/shared/Image.svelte * Fix js/image/shared/Image.svelte removing unnecessary styles * Fix js/video/shared/Video.svelte to use the passed immediately without waiting for the async resolution --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> Co-authored-by: aliabd <ali.si3luwa@gmail.com> Co-authored-by: Abubakar Abid <abubakar@huggingface.co>
2023-12-13 06:10:16 +08:00
// and it leads to undesirable flickering.
// So set `src` to `resolved_src` here.
resolved_src = src;
latest_src = src;
const resolving_src = src;
resolve_wasm_src(resolving_src).then((s) => {
if (latest_src === resolving_src) {
resolved_src = s;
}
});
}
</script>
Lite v4 (#6398) * Fix vite.config.js detecting the development mode * Fix the imports of @gradio/theme in js/app/src/lite/index.ts * [WIP] Install Pydantic V1 and mock the RootModel class * Remove Wasm WebSocket implementations * Move ASGI-HTTP conversion logic from the worker to the worker-proxy so we have fine controls on the ASGI connection at the worker-proxy level for the HTTP stream connection impl in the future * Fix asgi-types.ts * Create `WasmWorkerEventSource` and inject the `EventSource` creation in @gradio/client * Mock Pydantic V2's BaseModel * Fix Pydantic V1 installation * Make <ImageUploader /> and <ImagePreview /> Wasm-compatible * Create `getHeaderValue()` * Create `<DownloadLink />` for Wasm-compatible download and fix `<ImagePreview />` to use it * Make `gr.Video()` Wasm-compatible avoiding unnecessary execution of ffprobe * Move `<DownloadLink />` to @gradio/wasm and use it in `<VideoPreview />` too * Fix `<DownloadLink />` making `href` optional and adding `rel="noopener noreferrer"` * Make the download button of `<StaticAudio>` and `<Code />` Wasm-compatible * Make the download button of `<FilePreview />` Wasm-compatible * Improve the RootModel mock class for `.model_dump()` and `.model_json_schame()` to work * Make `<UploadProgress />` Wasm-compatible * Fix `WorkerProxy.httpRequest()` to use `decodeURIComponent()` to process `path` and `query_string` * Fix `<InteractiveAudio />` to make its upload feature Wasm-compatible * [WIP] Revert "Make `<UploadProgress />` Wasm-compatible" This reverts commit f96b4b7d5e92bb488cfe1939d25063366f714178. * Fix Image styles * Fix `<AudioPlayer />`'s `create_waveform()` to be Wasm-compatible * add changeset * formatting * Fix js/image/shared/Image.svelte to render <img> immediately * Fix js/image/shared/Image.svelte to avoid race condition * Fix js/image/shared/Image.svelte * Fix js/image/shared/Image.svelte * Fix js/image/shared/Image.svelte removing unnecessary styles * Fix js/video/shared/Video.svelte to use the passed immediately without waiting for the async resolution --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> Co-authored-by: aliabd <ali.si3luwa@gmail.com> Co-authored-by: Abubakar Abid <abubakar@huggingface.co>
2023-12-13 06:10:16 +08:00
<!-- svelte-ignore a11y-missing-attribute -->
2024-06-25 05:41:06 +08:00
<img src={resolved_src} {...$$restProps} on:load={() => dispatch("load")} />
<style>
img {
object-fit: cover;
}
</style>