@gradio/model3d 0.15.1-dev.0 → 0.15.1-dev.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +25 -0
- package/Index.svelte +113 -99
- package/dist/Example.svelte +4 -3
- package/dist/Example.svelte.d.ts +20 -18
- package/dist/Index.svelte +125 -101
- package/dist/Index.svelte.d.ts +3 -39
- package/dist/shared/Canvas3D.svelte +107 -86
- package/dist/shared/Canvas3D.svelte.d.ts +28 -25
- package/dist/shared/Canvas3DGS.svelte +99 -80
- package/dist/shared/Canvas3DGS.svelte.d.ts +20 -18
- package/dist/shared/Model3D.svelte +66 -51
- package/dist/shared/Model3D.svelte.d.ts +27 -25
- package/dist/shared/Model3DUpload.svelte +89 -67
- package/dist/shared/Model3DUpload.svelte.d.ts +47 -37
- package/dist/types.d.ts +19 -0
- package/dist/types.js +1 -0
- package/package.json +19 -14
- package/shared/Canvas3D.svelte +1 -1
- package/shared/Model3DUpload.svelte +3 -1
- package/types.ts +21 -0
|
@@ -1,75 +1,97 @@
|
|
|
1
|
-
<script
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
export let
|
|
12
|
-
export let
|
|
13
|
-
export let
|
|
14
|
-
export let
|
|
15
|
-
export let
|
|
16
|
-
export let
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
export let
|
|
22
|
-
export let
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { createEventDispatcher, tick } from "svelte";
|
|
3
|
+
import { Upload, ModifyUpload } from "@gradio/upload";
|
|
4
|
+
import type { FileData, Client } from "@gradio/client";
|
|
5
|
+
import { BlockLabel } from "@gradio/atoms";
|
|
6
|
+
import { File } from "@gradio/icons";
|
|
7
|
+
import type { I18nFormatter } from "@gradio/utils";
|
|
8
|
+
import type Canvas3DGS from "./Canvas3DGS.svelte";
|
|
9
|
+
import type Canvas3D from "./Canvas3D.svelte";
|
|
10
|
+
|
|
11
|
+
export let value: null | FileData;
|
|
12
|
+
export let display_mode: "solid" | "point_cloud" | "wireframe" = "solid";
|
|
13
|
+
export let clear_color: [number, number, number, number] = [0, 0, 0, 0];
|
|
14
|
+
export let label = "";
|
|
15
|
+
export let show_label: boolean;
|
|
16
|
+
export let root: string;
|
|
17
|
+
export let i18n: I18nFormatter;
|
|
18
|
+
export let zoom_speed = 1;
|
|
19
|
+
export let pan_speed = 1;
|
|
20
|
+
export let max_file_size: number | null = null;
|
|
21
|
+
export let uploading = false;
|
|
22
|
+
export let upload_promise: Promise<(FileData | null)[]> | null = null;
|
|
23
|
+
|
|
24
|
+
// alpha, beta, radius
|
|
25
|
+
export let camera_position: [number | null, number | null, number | null] = [
|
|
26
|
+
null,
|
|
27
|
+
null,
|
|
28
|
+
null
|
|
29
|
+
];
|
|
30
|
+
export let upload: Client["upload"];
|
|
31
|
+
export let stream_handler: Client["stream"];
|
|
32
|
+
|
|
33
|
+
async function handle_upload({
|
|
34
|
+
detail
|
|
35
|
+
}: CustomEvent<FileData>): Promise<void> {
|
|
36
|
+
value = detail;
|
|
37
|
+
await tick();
|
|
38
|
+
dispatch("change", value);
|
|
39
|
+
dispatch("load", value);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
async function handle_clear(): Promise<void> {
|
|
43
|
+
value = null;
|
|
44
|
+
await tick();
|
|
45
|
+
dispatch("clear");
|
|
46
|
+
dispatch("change");
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
let use_3dgs = false;
|
|
50
|
+
let Canvas3DGSComponent: typeof Canvas3DGS;
|
|
51
|
+
let Canvas3DComponent: typeof Canvas3D;
|
|
52
|
+
async function loadCanvas3D(): Promise<typeof Canvas3D> {
|
|
53
|
+
const module = await import("./Canvas3D.svelte");
|
|
54
|
+
return module.default;
|
|
55
|
+
}
|
|
56
|
+
async function loadCanvas3DGS(): Promise<typeof Canvas3DGS> {
|
|
57
|
+
const module = await import("./Canvas3DGS.svelte");
|
|
58
|
+
return module.default;
|
|
59
|
+
}
|
|
60
|
+
$: if (value) {
|
|
61
|
+
use_3dgs = value.path.endsWith(".splat") || value.path.endsWith(".ply");
|
|
62
|
+
if (use_3dgs) {
|
|
63
|
+
loadCanvas3DGS().then((component) => {
|
|
64
|
+
Canvas3DGSComponent = component;
|
|
65
|
+
});
|
|
66
|
+
} else {
|
|
67
|
+
loadCanvas3D().then((component) => {
|
|
68
|
+
Canvas3DComponent = component;
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
let canvas3d: Canvas3D | undefined;
|
|
74
|
+
async function handle_undo(): Promise<void> {
|
|
75
|
+
canvas3d?.reset_camera_position();
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
const dispatch = createEventDispatcher<{
|
|
79
|
+
change: FileData | null;
|
|
80
|
+
clear: undefined;
|
|
81
|
+
drag: boolean;
|
|
82
|
+
load: FileData;
|
|
83
|
+
}>();
|
|
84
|
+
|
|
85
|
+
let dragging = false;
|
|
86
|
+
|
|
87
|
+
$: dispatch("drag", dragging);
|
|
67
88
|
</script>
|
|
68
89
|
|
|
69
90
|
<BlockLabel {show_label} Icon={File} label={label || "3D Model"} />
|
|
70
91
|
|
|
71
|
-
{#if value
|
|
92
|
+
{#if value == null}
|
|
72
93
|
<Upload
|
|
94
|
+
bind:upload_promise
|
|
73
95
|
{upload}
|
|
74
96
|
{stream_handler}
|
|
75
97
|
on:load={handle_upload}
|
|
@@ -1,41 +1,51 @@
|
|
|
1
|
-
import { SvelteComponent } from "svelte";
|
|
2
1
|
import type { FileData, Client } from "@gradio/client";
|
|
3
2
|
import type { I18nFormatter } from "@gradio/utils";
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
pan_speed?: number;
|
|
15
|
-
max_file_size?: number | null;
|
|
16
|
-
uploading?: boolean;
|
|
17
|
-
camera_position?: [number | null, number | null, number | null];
|
|
18
|
-
upload: Client["upload"];
|
|
19
|
-
stream_handler: Client["stream"];
|
|
3
|
+
interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
|
|
4
|
+
new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
|
|
5
|
+
$$bindings?: Bindings;
|
|
6
|
+
} & Exports;
|
|
7
|
+
(internal: unknown, props: Props & {
|
|
8
|
+
$$events?: Events;
|
|
9
|
+
$$slots?: Slots;
|
|
10
|
+
}): Exports & {
|
|
11
|
+
$set?: any;
|
|
12
|
+
$on?: any;
|
|
20
13
|
};
|
|
21
|
-
|
|
22
|
-
error: CustomEvent<any>;
|
|
23
|
-
change: CustomEvent<any>;
|
|
24
|
-
clear: CustomEvent<undefined>;
|
|
25
|
-
drag: CustomEvent<boolean>;
|
|
26
|
-
load: CustomEvent<FileData>;
|
|
27
|
-
} & {
|
|
28
|
-
[evt: string]: CustomEvent<any>;
|
|
29
|
-
};
|
|
30
|
-
slots: {
|
|
31
|
-
default: {};
|
|
32
|
-
};
|
|
33
|
-
exports?: {} | undefined;
|
|
34
|
-
bindings?: string | undefined;
|
|
35
|
-
};
|
|
36
|
-
export type Model3DUploadProps = typeof __propDef.props;
|
|
37
|
-
export type Model3DUploadEvents = typeof __propDef.events;
|
|
38
|
-
export type Model3DUploadSlots = typeof __propDef.slots;
|
|
39
|
-
export default class Model3DUpload extends SvelteComponent<Model3DUploadProps, Model3DUploadEvents, Model3DUploadSlots> {
|
|
14
|
+
z_$$bindings?: Bindings;
|
|
40
15
|
}
|
|
41
|
-
|
|
16
|
+
type $$__sveltets_2_PropsWithChildren<Props, Slots> = Props & (Slots extends {
|
|
17
|
+
default: any;
|
|
18
|
+
} ? Props extends Record<string, never> ? any : {
|
|
19
|
+
children?: any;
|
|
20
|
+
} : {});
|
|
21
|
+
declare const Model3DUpload: $$__sveltets_2_IsomorphicComponent<$$__sveltets_2_PropsWithChildren<{
|
|
22
|
+
value: null | FileData;
|
|
23
|
+
display_mode?: "solid" | "point_cloud" | "wireframe";
|
|
24
|
+
clear_color?: [number, number, number, number];
|
|
25
|
+
label?: string;
|
|
26
|
+
show_label: boolean;
|
|
27
|
+
root: string;
|
|
28
|
+
i18n: I18nFormatter;
|
|
29
|
+
zoom_speed?: number;
|
|
30
|
+
pan_speed?: number;
|
|
31
|
+
max_file_size?: number | null;
|
|
32
|
+
uploading?: boolean;
|
|
33
|
+
upload_promise?: Promise<(FileData | null)[]> | null;
|
|
34
|
+
camera_position?: [number | null, number | null, number | null];
|
|
35
|
+
upload: Client["upload"];
|
|
36
|
+
stream_handler: Client["stream"];
|
|
37
|
+
}, {
|
|
38
|
+
default: {};
|
|
39
|
+
}>, {
|
|
40
|
+
error: CustomEvent<any>;
|
|
41
|
+
change: CustomEvent<FileData | null>;
|
|
42
|
+
clear: CustomEvent<undefined>;
|
|
43
|
+
drag: CustomEvent<boolean>;
|
|
44
|
+
load: CustomEvent<FileData>;
|
|
45
|
+
} & {
|
|
46
|
+
[evt: string]: CustomEvent<any>;
|
|
47
|
+
}, {
|
|
48
|
+
default: {};
|
|
49
|
+
}, {}, string>;
|
|
50
|
+
type Model3DUpload = InstanceType<typeof Model3DUpload>;
|
|
51
|
+
export default Model3DUpload;
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { FileData } from "@gradio/client";
|
|
2
|
+
import type { LoadingStatus } from "js/statustracker";
|
|
3
|
+
export interface Model3DProps {
|
|
4
|
+
value: null | FileData;
|
|
5
|
+
display_mode: "solid" | "point_cloud" | "wireframe";
|
|
6
|
+
clear_color: [number, number, number, number];
|
|
7
|
+
height: number | undefined;
|
|
8
|
+
zoom_speed: number;
|
|
9
|
+
has_change_history: boolean;
|
|
10
|
+
camera_position: [number | null, number | null, number | null];
|
|
11
|
+
}
|
|
12
|
+
export interface Model3DEvents {
|
|
13
|
+
change: FileData | null;
|
|
14
|
+
upload: FileData;
|
|
15
|
+
edit: never;
|
|
16
|
+
clear: never;
|
|
17
|
+
clear_status: LoadingStatus;
|
|
18
|
+
error: string;
|
|
19
|
+
}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/package.json
CHANGED
|
@@ -1,27 +1,27 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gradio/model3d",
|
|
3
|
-
"version": "0.15.1-dev.
|
|
3
|
+
"version": "0.15.1-dev.2",
|
|
4
4
|
"description": "Gradio UI packages",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"author": "",
|
|
7
7
|
"license": "ISC",
|
|
8
8
|
"private": false,
|
|
9
9
|
"dependencies": {
|
|
10
|
-
"@
|
|
11
|
-
"@babylonjs/
|
|
12
|
-
"@babylonjs/
|
|
13
|
-
"@
|
|
14
|
-
"dequal": "^2.0.
|
|
10
|
+
"@babylonjs/core": "^8.30.5",
|
|
11
|
+
"@babylonjs/loaders": "^8.30.5",
|
|
12
|
+
"@babylonjs/viewer": "^8.30.5",
|
|
13
|
+
"@types/babylon": "^6.16.9",
|
|
14
|
+
"dequal": "^2.0.3",
|
|
15
15
|
"gsplat": "^1.2.9",
|
|
16
|
-
"@gradio/atoms": "^0.
|
|
17
|
-
"@gradio/
|
|
18
|
-
"@gradio/
|
|
19
|
-
"@gradio/
|
|
20
|
-
"@gradio/
|
|
21
|
-
"@gradio/
|
|
16
|
+
"@gradio/atoms": "^0.19.0-dev.1",
|
|
17
|
+
"@gradio/statustracker": "^0.12.0-dev.1",
|
|
18
|
+
"@gradio/client": "^2.0.0-dev.2",
|
|
19
|
+
"@gradio/icons": "^0.15.0-dev.0",
|
|
20
|
+
"@gradio/upload": "^0.17.2-dev.2",
|
|
21
|
+
"@gradio/utils": "^0.10.3-dev.0"
|
|
22
22
|
},
|
|
23
23
|
"devDependencies": {
|
|
24
|
-
"@gradio/preview": "^0.
|
|
24
|
+
"@gradio/preview": "^0.15.0-dev.0"
|
|
25
25
|
},
|
|
26
26
|
"main_changeset": true,
|
|
27
27
|
"main": "./Index.svelte",
|
|
@@ -36,10 +36,15 @@
|
|
|
36
36
|
"svelte": "./dist/Example.svelte",
|
|
37
37
|
"types": "./dist/Example.svelte.d.ts"
|
|
38
38
|
},
|
|
39
|
+
"./base": {
|
|
40
|
+
"gradio": "./shared/Model3D.svelte",
|
|
41
|
+
"svelte": "./dist/shared/Model3D.svelte",
|
|
42
|
+
"types": "./dist/shared/Model3D.svelte.d.ts"
|
|
43
|
+
},
|
|
39
44
|
"./package.json": "./package.json"
|
|
40
45
|
},
|
|
41
46
|
"peerDependencies": {
|
|
42
|
-
"svelte": "^
|
|
47
|
+
"svelte": "^5.43.4"
|
|
43
48
|
},
|
|
44
49
|
"repository": {
|
|
45
50
|
"type": "git",
|
package/shared/Canvas3D.svelte
CHANGED
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
onMount(() => {
|
|
23
23
|
const initViewer = async (): Promise<void> => {
|
|
24
24
|
BABYLON_VIEWER = await import("@babylonjs/viewer");
|
|
25
|
-
BABYLON_VIEWER.
|
|
25
|
+
BABYLON_VIEWER.CreateViewerForCanvas(canvas, {
|
|
26
26
|
clearColor: clear_color,
|
|
27
27
|
useRightHandedSystem: true,
|
|
28
28
|
animationAutoPlay: true,
|
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
export let pan_speed = 1;
|
|
20
20
|
export let max_file_size: number | null = null;
|
|
21
21
|
export let uploading = false;
|
|
22
|
+
export let upload_promise: Promise<(FileData | null)[]> | null = null;
|
|
22
23
|
|
|
23
24
|
// alpha, beta, radius
|
|
24
25
|
export let camera_position: [number | null, number | null, number | null] = [
|
|
@@ -88,8 +89,9 @@
|
|
|
88
89
|
|
|
89
90
|
<BlockLabel {show_label} Icon={File} label={label || "3D Model"} />
|
|
90
91
|
|
|
91
|
-
{#if value
|
|
92
|
+
{#if value == null}
|
|
92
93
|
<Upload
|
|
94
|
+
bind:upload_promise
|
|
93
95
|
{upload}
|
|
94
96
|
{stream_handler}
|
|
95
97
|
on:load={handle_upload}
|
package/types.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { FileData } from "@gradio/client";
|
|
2
|
+
import type { LoadingStatus } from "js/statustracker";
|
|
3
|
+
|
|
4
|
+
export interface Model3DProps {
|
|
5
|
+
value: null | FileData;
|
|
6
|
+
display_mode: "solid" | "point_cloud" | "wireframe";
|
|
7
|
+
clear_color: [number, number, number, number];
|
|
8
|
+
height: number | undefined;
|
|
9
|
+
zoom_speed: number;
|
|
10
|
+
has_change_history: boolean;
|
|
11
|
+
camera_position: [number | null, number | null, number | null];
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export interface Model3DEvents {
|
|
15
|
+
change: FileData | null;
|
|
16
|
+
upload: FileData;
|
|
17
|
+
edit: never;
|
|
18
|
+
clear: never;
|
|
19
|
+
clear_status: LoadingStatus;
|
|
20
|
+
error: string;
|
|
21
|
+
}
|