@aura3d/apps 1.4.0 → 1.4.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.
Files changed (3) hide show
  1. package/README.md +34 -0
  2. package/package.json +37 -5
  3. package/src/index.ts +0 -162
package/README.md ADDED
@@ -0,0 +1,34 @@
1
+ # @aura3d/apps
2
+
3
+ `@aura3d/apps` owns high-level Aura3D app workflow presets for asset viewers,
4
+ product configurators, material studios, scene showcases, and interactive
5
+ scenes.
6
+
7
+ ## Public API
8
+
9
+ - `createA3DApp`: creates an app shell with an Aura3D `Engine`, optional
10
+ renderer, quality presets, workflow execution, diagnostics, and disposal.
11
+ - `A3D_APP_WORKFLOW_PRESETS`: the supported workflow preset IDs.
12
+ - `resolveA3DAppQualityPreset`: resolves draft, balanced, and production-sized
13
+ app quality settings.
14
+ - `renderWorkflow(...)`: runs one of the package workflow presets and renders it
15
+ when the app owns a canvas-backed renderer.
16
+
17
+ ## Workflow Presets
18
+
19
+ - `asset-viewer`
20
+ - `product-configurator`
21
+ - `material-studio`
22
+ - `scene-showcase`
23
+ - `interactive-scene`
24
+
25
+ This package composes `@aura3d/core`, `@aura3d/rendering`, and
26
+ `@aura3d/workflows`. It is a workflow/app shell package, not the root
27
+ agent-authored `createAuraApp` safe API.
28
+
29
+ ## Verification
30
+
31
+ Use the package through its exported workflow/app APIs and keep public examples
32
+ bounded to the evidence for the workflow being rendered. Root public examples
33
+ should still import from `@aura3d/engine` unless the task explicitly targets
34
+ workflow internals.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aura3d/apps",
3
- "version": "1.4.0",
3
+ "version": "1.4.2",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -11,9 +11,41 @@
11
11
  "main": "./dist/index.js",
12
12
  "types": "./dist/index.d.ts",
13
13
  "dependencies": {
14
- "@aura3d/core": "1.4.0",
15
- "@aura3d/rendering": "1.4.0",
16
- "@aura3d/workflows": "1.4.0"
14
+ "@aura3d/core": "1.4.2",
15
+ "@aura3d/rendering": "1.4.2",
16
+ "@aura3d/workflows": "1.4.2"
17
17
  },
18
- "sideEffects": false
18
+ "sideEffects": false,
19
+ "description": "High-level Aura3D app workflow presets for asset viewers, product configurators, material studios, scene showcases, and interactive scenes.",
20
+ "keywords": [
21
+ "aura3d",
22
+ "3d",
23
+ "browser-3d",
24
+ "web-3d",
25
+ "typescript",
26
+ "3d-apps",
27
+ "app-workflows",
28
+ "asset-viewer",
29
+ "product-configurator",
30
+ "material-studio",
31
+ "scene-showcase",
32
+ "interactive-3d"
33
+ ],
34
+ "homepage": "https://aura3d.auraone.ai",
35
+ "repository": {
36
+ "type": "git",
37
+ "url": "git+https://github.com/auraoneai/aura3d.git",
38
+ "directory": "packages/apps"
39
+ },
40
+ "bugs": {
41
+ "url": "https://github.com/auraoneai/aura3d/issues"
42
+ },
43
+ "license": "MIT",
44
+ "publishConfig": {
45
+ "access": "public"
46
+ },
47
+ "files": [
48
+ "README.md",
49
+ "dist"
50
+ ]
19
51
  }
package/src/index.ts DELETED
@@ -1,162 +0,0 @@
1
- import { Engine, type DiagnosticsSnapshot } from "@aura3d/core";
2
- import { Renderer, type RenderDeviceDiagnostics, type RendererOptions } from "@aura3d/rendering";
3
- import {
4
- createAssetViewerWorkflow,
5
- createInteractiveSceneWorkflow,
6
- createMaterialStudioWorkflow,
7
- createProductConfiguratorWorkflow,
8
- createSceneShowcaseWorkflow,
9
- type AssetViewerWorkflowOptions,
10
- type A3DWorkflowResult,
11
- type InteractiveSceneWorkflowOptions,
12
- type MaterialStudioWorkflowOptions,
13
- type ProductConfiguratorWorkflowOptions,
14
- type SceneShowcaseWorkflowOptions
15
- } from "@aura3d/workflows";
16
-
17
- export type A3DAppQualityPreset = "draft" | "balanced" | "production";
18
- export type A3DAppWorkflowPreset = "asset-viewer" | "product-configurator" | "material-studio" | "scene-showcase" | "interactive-scene";
19
-
20
- export interface A3DAppQualitySettings {
21
- readonly preset: A3DAppQualityPreset;
22
- readonly width: number;
23
- readonly height: number;
24
- readonly antialias: boolean;
25
- readonly preserveDrawingBuffer: boolean;
26
- readonly targetFormat: "rgba8" | "rgba16f";
27
- readonly diagnostics: readonly string[];
28
- }
29
-
30
- export interface A3DAppOptions {
31
- readonly canvas?: HTMLCanvasElement | OffscreenCanvas;
32
- readonly quality?: A3DAppQualityPreset;
33
- readonly width?: number;
34
- readonly height?: number;
35
- readonly rendererFactory?: (options: RendererOptions) => Promise<A3DAppRendererLike>;
36
- }
37
-
38
- export interface A3DAppRendererLike {
39
- render(source: A3DWorkflowResult["source"], camera?: A3DWorkflowResult["camera"]): RenderDeviceDiagnostics;
40
- dispose?(): void;
41
- }
42
-
43
- export interface A3DAppDiagnostics {
44
- readonly appState: "ready" | "disposed";
45
- readonly quality: A3DAppQualitySettings;
46
- readonly workflowRuns: number;
47
- readonly lastWorkflow?: A3DAppWorkflowPreset;
48
- readonly lastRender?: RenderDeviceDiagnostics;
49
- readonly engine: DiagnosticsSnapshot;
50
- }
51
-
52
- export interface A3DApp {
53
- readonly engine: Engine;
54
- readonly renderer?: A3DAppRendererLike;
55
- readonly quality: A3DAppQualitySettings;
56
- renderWorkflow(preset: "asset-viewer", options: AssetViewerWorkflowOptions): Promise<A3DWorkflowResult>;
57
- renderWorkflow(preset: "product-configurator", options: ProductConfiguratorWorkflowOptions): Promise<A3DWorkflowResult>;
58
- renderWorkflow(preset: "material-studio", options?: MaterialStudioWorkflowOptions): Promise<A3DWorkflowResult>;
59
- renderWorkflow(preset: "scene-showcase", options?: SceneShowcaseWorkflowOptions): Promise<A3DWorkflowResult>;
60
- renderWorkflow(preset: "interactive-scene", options?: InteractiveSceneWorkflowOptions): Promise<A3DWorkflowResult>;
61
- renderWorkflow(preset: A3DAppWorkflowPreset, options?: unknown): Promise<A3DWorkflowResult>;
62
- diagnostics(): A3DAppDiagnostics;
63
- dispose(): Promise<void>;
64
- }
65
-
66
- export const A3D_APP_WORKFLOW_PRESETS: readonly A3DAppWorkflowPreset[] = [
67
- "asset-viewer",
68
- "product-configurator",
69
- "material-studio",
70
- "scene-showcase",
71
- "interactive-scene"
72
- ] as const;
73
-
74
- export function resolveA3DAppQualityPreset(preset: A3DAppQualityPreset = "balanced", overrides: Pick<A3DAppOptions, "width" | "height"> = {}): A3DAppQualitySettings {
75
- const base = preset === "production"
76
- ? { width: 1600, height: 1000, antialias: true, preserveDrawingBuffer: true, targetFormat: "rgba16f" as const }
77
- : preset === "draft"
78
- ? { width: 960, height: 540, antialias: false, preserveDrawingBuffer: false, targetFormat: "rgba8" as const }
79
- : { width: 1280, height: 720, antialias: true, preserveDrawingBuffer: true, targetFormat: "rgba16f" as const };
80
- return {
81
- preset,
82
- ...base,
83
- width: overrides.width ?? base.width,
84
- height: overrides.height ?? base.height,
85
- diagnostics: [
86
- "quality-preset",
87
- "workflow-presets",
88
- "renderer-diagnostics",
89
- "engine-diagnostics"
90
- ]
91
- };
92
- }
93
-
94
- export async function createA3DApp(options: A3DAppOptions = {}): Promise<A3DApp> {
95
- const quality = resolveA3DAppQualityPreset(options.quality, options);
96
- const engine = new Engine({ autoStart: false });
97
- await engine.init();
98
- const renderer = options.canvas
99
- ? await (options.rendererFactory ?? Renderer.create)({
100
- backend: "webgl2",
101
- canvas: options.canvas,
102
- width: quality.width,
103
- height: quality.height,
104
- antialias: quality.antialias,
105
- preserveDrawingBuffer: quality.preserveDrawingBuffer,
106
- clearColor: [0.018, 0.02, 0.024, 1]
107
- })
108
- : undefined;
109
- let disposed = false;
110
- let workflowRuns = 0;
111
- let lastWorkflow: A3DAppWorkflowPreset | undefined;
112
- let lastRender: RenderDeviceDiagnostics | undefined;
113
-
114
- return {
115
- engine,
116
- renderer,
117
- quality,
118
- async renderWorkflow(preset: A3DAppWorkflowPreset, workflowOptions?: unknown): Promise<A3DWorkflowResult> {
119
- if (disposed) throw new Error("A3D app has been disposed.");
120
- const workflow = await createWorkflow(preset, workflowOptions);
121
- workflowRuns += 1;
122
- lastWorkflow = preset;
123
- engine.diagnostics.increment(`workflow.${preset}.runs`);
124
- if (renderer) {
125
- lastRender = renderer.render(workflow.source, workflow.camera);
126
- engine.diagnostics.gauge("renderer.drawCalls", lastRender.drawCalls);
127
- }
128
- return workflow;
129
- },
130
- diagnostics(): A3DAppDiagnostics {
131
- return {
132
- appState: disposed ? "disposed" : "ready",
133
- quality,
134
- workflowRuns,
135
- ...(lastWorkflow ? { lastWorkflow } : {}),
136
- ...(lastRender ? { lastRender } : {}),
137
- engine: engine.diagnostics.snapshot()
138
- };
139
- },
140
- async dispose(): Promise<void> {
141
- if (disposed) return;
142
- disposed = true;
143
- renderer?.dispose?.();
144
- await engine.dispose();
145
- }
146
- };
147
- }
148
-
149
- async function createWorkflow(preset: A3DAppWorkflowPreset, options: unknown): Promise<A3DWorkflowResult> {
150
- switch (preset) {
151
- case "asset-viewer":
152
- return createAssetViewerWorkflow(options as AssetViewerWorkflowOptions);
153
- case "product-configurator":
154
- return createProductConfiguratorWorkflow(options as ProductConfiguratorWorkflowOptions);
155
- case "material-studio":
156
- return createMaterialStudioWorkflow(options as MaterialStudioWorkflowOptions | undefined);
157
- case "scene-showcase":
158
- return createSceneShowcaseWorkflow(options as SceneShowcaseWorkflowOptions | undefined);
159
- case "interactive-scene":
160
- return createInteractiveSceneWorkflow(options as InteractiveSceneWorkflowOptions | undefined);
161
- }
162
- }