@thatopen/services 0.8.0 → 0.9.1
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/README.md +62 -62
- package/dist/built-in/index.d.ts +66 -41
- package/dist/cli.js +31 -12
- package/dist/core/client.d.ts +6 -0
- package/dist/core/platform-client.d.ts +139 -0
- package/dist/core/platform-client.live.test.d.ts +1 -0
- package/dist/core/platform-client.notifications.test.d.ts +1 -0
- package/dist/index.cjs.js +2 -2
- package/dist/index.d.ts +1 -0
- package/dist/index.es.js +635 -445
- package/dist/types/notifications.d.ts +77 -0
- package/dist/vite-env.d.ts +1 -1
- package/docs/cli/create.md +29 -29
- package/docs/cli/local-server.md +38 -38
- package/docs/cli/login.md +32 -32
- package/docs/cli/publish.md +31 -31
- package/docs/cli/run.md +26 -26
- package/docs/cli/serve.md +43 -43
- package/docs/cli/swap.md +30 -30
- package/package.json +1 -1
- package/src/built-in/CDEManager/example.ts +214 -214
- package/src/built-in/CDEManager/examples/FileEditing/example.ts +226 -226
- package/src/built-in/CDEManager/examples/FileMoves/example.ts +186 -186
- package/src/built-in/CDEManager/examples/FileOperations/example.ts +295 -295
- package/src/built-in/CDEManager/examples/FileTransfers/example.ts +210 -210
- package/src/built-in/CDEManager/examples/FolderManagement/example.ts +230 -230
- package/src/built-in/CDEManager/examples/MetadataSchema/example.ts +230 -230
- package/src/built-in/CDEManager/examples/MetadataViews/example.ts +166 -166
- package/src/built-in/CDEManager/examples/ProjectConfig/example.ts +177 -177
- package/src/built-in/UIManager/src/app/example.ts +97 -97
- package/src/built-in/UIManager/src/app/examples/AppState/example.ts +140 -140
- package/src/built-in/UIManager/src/app/examples/Banner/example.ts +159 -159
- package/src/built-in/UIManager/src/app/examples/Contexts/example.ts +123 -123
- package/src/built-in/UIManager/src/app/examples/FileDrop/example.ts +124 -124
- package/src/built-in/UIManager/src/app/examples/FloatingLayout/example.ts +90 -90
- package/src/built-in/UIManager/src/app/examples/Modal/example.ts +163 -163
- package/src/built-in/UIManager/src/app/examples/Notifications/example.ts +133 -133
- package/src/built-in/UIManager/src/app/examples/ProjectFileStorage/example.ts +150 -150
- package/src/built-in/UIManager/src/app/examples/Sidebar/example.ts +102 -102
- package/src/built-in/UIManager/src/clashes-panel/example.ts +183 -183
- package/src/built-in/UIManager/src/git-history-panel/example.ts +70 -70
- package/src/built-in/UIManager/src/models-list/example.ts +122 -122
- package/src/built-in/UIManager/src/topics-panel/example.ts +170 -170
- package/src/built-in/index.ts +66 -41
- package/src/cli/templates/app/index.html +35 -35
- package/src/cli/templates/app/package.json +32 -32
- package/src/cli/templates/app/src/bim-components/CloudRunner/index.ts +95 -95
- package/src/cli/templates/app/src/bim-components/CloudRunner/src/index.ts +1 -1
- package/src/cli/templates/app/src/bim-components/CloudRunner/src/types.ts +5 -5
- package/src/cli/templates/app/src/bim-components/index.ts +1 -1
- package/src/cli/templates/app/src/globals.ts +1 -1
- package/src/cli/templates/app/src/ui-components/app-info-section/index.ts +26 -26
- package/src/cli/templates/app/src/ui-components/app-info-section/src/index.ts +1 -1
- package/src/cli/templates/app/src/ui-components/app-info-section/src/types.ts +15 -15
- package/src/cli/templates/app/src/ui-components/cloud-runner-section/index.ts +37 -37
- package/src/cli/templates/app/src/ui-components/cloud-runner-section/src/index.ts +1 -1
- package/src/cli/templates/app/src/ui-components/cloud-runner-section/src/types.ts +14 -14
- package/src/cli/templates/app/src/ui-components/index.ts +2 -2
- package/src/cli/templates/app/tsconfig.json +16 -16
- package/src/cli/templates/app/vite.config.js +57 -57
- package/src/cli/templates/cloud-component/README.md +205 -205
- package/src/cli/templates/cloud-component/_thatopen +5 -5
- package/src/cli/templates/cloud-component/declarations.json +4 -4
- package/src/cli/templates/cloud-component/package.json +21 -21
- package/src/cli/templates/cloud-component/src/main.ts +70 -70
- package/src/cli/templates/cloud-component/tsconfig.json +16 -16
- package/src/cli/templates/cloud-component/vite.config.js +46 -46
- package/src/cli/templates/shared/AGENTS.md +8 -8
- package/src/cli/templates/shared/CLAUDE.md +1 -1
- package/src/cli/templates/shared/_gitignore +5 -5
|
@@ -1,35 +1,35 @@
|
|
|
1
|
-
<!DOCTYPE html>
|
|
2
|
-
<html lang="en">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="UTF-8" />
|
|
5
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
|
-
<title>ThatOpen App</title>
|
|
7
|
-
<style>
|
|
8
|
-
*, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; }
|
|
9
|
-
html, body { width: 100%; height: 100%; overflow: hidden; font-family: system-ui, -apple-system, sans-serif; }
|
|
10
|
-
#that-open-app { width: 100%; height: 100%; }
|
|
11
|
-
/* Scrollbar rail = the panel surface (#262629). Every panel (app .xxx-vp
|
|
12
|
-
tracks) and every bim-* shadow-DOM scrollbar reads var(--bim-scrollbar--bgc,
|
|
13
|
-
…), so defining it once here makes all rails match the surface instead of
|
|
14
|
-
falling back to the lighter bg-contrast-40 (#5F5F64).
|
|
15
|
-
NOTE: must use --bim-ui_gray-1 (defined UNCONDITIONALLY at :root = #262629),
|
|
16
|
-
not --bim-ui_bg-contrast-* (only defined under @media/theme-class scopes, so
|
|
17
|
-
it doesn't resolve at <html>:root and left --bim-scrollbar--bgc unset). */
|
|
18
|
-
:root { --bim-scrollbar--bgc: var(--bim-ui_gray-1, #262629); }
|
|
19
|
-
</style>
|
|
20
|
-
</head>
|
|
21
|
-
<body>
|
|
22
|
-
<div id="that-open-app"></div>
|
|
23
|
-
<script>
|
|
24
|
-
// Simulates the context that the platform provides in production.
|
|
25
|
-
// When running inside the platform iframe, these values come from query params.
|
|
26
|
-
window.__THATOPEN_CONTEXT__ = {
|
|
27
|
-
appId: 'local-dev',
|
|
28
|
-
projectId: 'local-project',
|
|
29
|
-
accessToken: '',
|
|
30
|
-
apiUrl: 'http://localhost:3000',
|
|
31
|
-
};
|
|
32
|
-
</script>
|
|
33
|
-
<script type="module" src="/src/main.ts"></script>
|
|
34
|
-
</body>
|
|
35
|
-
</html>
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
|
+
<title>ThatOpen App</title>
|
|
7
|
+
<style>
|
|
8
|
+
*, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; }
|
|
9
|
+
html, body { width: 100%; height: 100%; overflow: hidden; font-family: system-ui, -apple-system, sans-serif; }
|
|
10
|
+
#that-open-app { width: 100%; height: 100%; }
|
|
11
|
+
/* Scrollbar rail = the panel surface (#262629). Every panel (app .xxx-vp
|
|
12
|
+
tracks) and every bim-* shadow-DOM scrollbar reads var(--bim-scrollbar--bgc,
|
|
13
|
+
…), so defining it once here makes all rails match the surface instead of
|
|
14
|
+
falling back to the lighter bg-contrast-40 (#5F5F64).
|
|
15
|
+
NOTE: must use --bim-ui_gray-1 (defined UNCONDITIONALLY at :root = #262629),
|
|
16
|
+
not --bim-ui_bg-contrast-* (only defined under @media/theme-class scopes, so
|
|
17
|
+
it doesn't resolve at <html>:root and left --bim-scrollbar--bgc unset). */
|
|
18
|
+
:root { --bim-scrollbar--bgc: var(--bim-ui_gray-1, #262629); }
|
|
19
|
+
</style>
|
|
20
|
+
</head>
|
|
21
|
+
<body>
|
|
22
|
+
<div id="that-open-app"></div>
|
|
23
|
+
<script>
|
|
24
|
+
// Simulates the context that the platform provides in production.
|
|
25
|
+
// When running inside the platform iframe, these values come from query params.
|
|
26
|
+
window.__THATOPEN_CONTEXT__ = {
|
|
27
|
+
appId: 'local-dev',
|
|
28
|
+
projectId: 'local-project',
|
|
29
|
+
accessToken: '',
|
|
30
|
+
apiUrl: 'http://localhost:3000',
|
|
31
|
+
};
|
|
32
|
+
</script>
|
|
33
|
+
<script type="module" src="/src/main.ts"></script>
|
|
34
|
+
</body>
|
|
35
|
+
</html>
|
|
@@ -1,33 +1,33 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "{{PROJECT_NAME}}",
|
|
3
|
-
"version": "1.0.0",
|
|
4
|
-
"private": true,
|
|
5
|
-
"scripts": {
|
|
6
|
-
"dev": "thatopen serve",
|
|
7
|
-
"build": "vite build",
|
|
8
|
-
"login": "thatopen login --local",
|
|
9
|
-
"publish": "thatopen publish"
|
|
10
|
-
},
|
|
11
|
-
"dependencies": {
|
|
12
|
-
"@lit/context": "^1.1.6",
|
|
13
|
-
"lit": "^3.0.0",
|
|
14
|
-
"@markerjs/markerjs3": "^3.9.0",
|
|
15
|
-
"@thatopen/components": "~3.4.0",
|
|
16
|
-
"@thatopen/components-front": "~3.4.0",
|
|
17
|
-
"@thatopen/fragments": "~3.4.0",
|
|
18
|
-
"@thatopen/services": "file:../../../..",
|
|
19
|
-
"@thatopen/ui": "~3.4.0",
|
|
20
|
-
"three": "0.185.0",
|
|
21
|
-
"@sparkjsdev/spark": "^0.1.10",
|
|
22
|
-
"3d-tiles-renderer": "^0.4.28",
|
|
23
|
-
"camera-controls": "^3.1.2",
|
|
24
|
-
"opentype.js": "1.3.4",
|
|
25
|
-
"potree-core": "^2.0.15",
|
|
26
|
-
"web-ifc": "^0.0.77"
|
|
27
|
-
},
|
|
28
|
-
"devDependencies": {
|
|
29
|
-
"@types/three": "^0.182.0",
|
|
30
|
-
"typescript": "^5.2.0",
|
|
31
|
-
"vite": "^5.2.0"
|
|
32
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "{{PROJECT_NAME}}",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"private": true,
|
|
5
|
+
"scripts": {
|
|
6
|
+
"dev": "thatopen serve",
|
|
7
|
+
"build": "vite build",
|
|
8
|
+
"login": "thatopen login --local",
|
|
9
|
+
"publish": "thatopen publish"
|
|
10
|
+
},
|
|
11
|
+
"dependencies": {
|
|
12
|
+
"@lit/context": "^1.1.6",
|
|
13
|
+
"lit": "^3.0.0",
|
|
14
|
+
"@markerjs/markerjs3": "^3.9.0",
|
|
15
|
+
"@thatopen/components": "~3.4.0",
|
|
16
|
+
"@thatopen/components-front": "~3.4.0",
|
|
17
|
+
"@thatopen/fragments": "~3.4.0",
|
|
18
|
+
"@thatopen/services": "file:../../../..",
|
|
19
|
+
"@thatopen/ui": "~3.4.0",
|
|
20
|
+
"three": "0.185.0",
|
|
21
|
+
"@sparkjsdev/spark": "^0.1.10",
|
|
22
|
+
"3d-tiles-renderer": "^0.4.28",
|
|
23
|
+
"camera-controls": "^3.1.2",
|
|
24
|
+
"opentype.js": "1.3.4",
|
|
25
|
+
"potree-core": "^2.0.15",
|
|
26
|
+
"web-ifc": "^0.0.77"
|
|
27
|
+
},
|
|
28
|
+
"devDependencies": {
|
|
29
|
+
"@types/three": "^0.182.0",
|
|
30
|
+
"typescript": "^5.2.0",
|
|
31
|
+
"vite": "^5.2.0"
|
|
32
|
+
}
|
|
33
33
|
}
|
|
@@ -1,95 +1,95 @@
|
|
|
1
|
-
import * as OBC from "@thatopen/components";
|
|
2
|
-
import { getAppManager } from "../../app";
|
|
3
|
-
import { CloudRunnerStatus } from "./src";
|
|
4
|
-
|
|
5
|
-
export class CloudRunner extends OBC.Component {
|
|
6
|
-
static readonly uuid = "7c4e5d3b-2a1f-4e8d-9b6c-0a3f7e2c5d1b" as const;
|
|
7
|
-
|
|
8
|
-
enabled = true;
|
|
9
|
-
|
|
10
|
-
readonly onExecutionUpdated = new OBC.Event<CloudRunnerStatus>();
|
|
11
|
-
|
|
12
|
-
// TODO: Replace with your actual component ID after publishing.
|
|
13
|
-
componentId = "your-component-id";
|
|
14
|
-
localServerUrl = "http://localhost:4001";
|
|
15
|
-
|
|
16
|
-
// Reactive state — read by the UI template on each render.
|
|
17
|
-
status = "Idle";
|
|
18
|
-
progress = 0;
|
|
19
|
-
messages: string[] = [];
|
|
20
|
-
|
|
21
|
-
constructor(components: OBC.Components) {
|
|
22
|
-
super(components);
|
|
23
|
-
components.add(CloudRunner.uuid, this);
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
async run(useLocal: boolean) {
|
|
27
|
-
// Resolve client at call time via the app shim — never store it as a field.
|
|
28
|
-
const client = getAppManager(this.components).client;
|
|
29
|
-
if (!client) {
|
|
30
|
-
this.status = "No platform client available.";
|
|
31
|
-
this._trigger();
|
|
32
|
-
return;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
client.localServerUrl = useLocal ? this.localServerUrl : null;
|
|
36
|
-
|
|
37
|
-
this.status = useLocal ? "Starting (local)..." : "Starting (deployed)...";
|
|
38
|
-
this.progress = 0;
|
|
39
|
-
this.messages = [];
|
|
40
|
-
this._trigger();
|
|
41
|
-
|
|
42
|
-
try {
|
|
43
|
-
const { executionId } = await client.executeComponent(this.componentId, {
|
|
44
|
-
greeting: "Hello from the BIM app!",
|
|
45
|
-
});
|
|
46
|
-
|
|
47
|
-
this.status = `Running (${executionId.slice(0, 8)}...)`;
|
|
48
|
-
this._trigger();
|
|
49
|
-
|
|
50
|
-
// Subscribe to real-time progress updates via WebSocket.
|
|
51
|
-
client.onExecutionProgress(executionId, (data) => {
|
|
52
|
-
if (data.progressUpdate) {
|
|
53
|
-
this.progress = data.progressUpdate.progress;
|
|
54
|
-
if (data.progressUpdate.result) {
|
|
55
|
-
this.status = `${data.progressUpdate.result}: ${data.progressUpdate.resultMessage ?? "Done"}`;
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
if (data.messageUpdate) {
|
|
59
|
-
this.messages.push(data.messageUpdate.content);
|
|
60
|
-
}
|
|
61
|
-
this._trigger();
|
|
62
|
-
});
|
|
63
|
-
|
|
64
|
-
// Poll once after a short delay to catch fast executions that complete
|
|
65
|
-
// before the WebSocket subscription is established.
|
|
66
|
-
setTimeout(async () => {
|
|
67
|
-
try {
|
|
68
|
-
const exec = await client.getExecution(executionId);
|
|
69
|
-
if (exec.result) {
|
|
70
|
-
this.progress = exec.progress;
|
|
71
|
-
this.status = `${exec.result}: ${exec.resultMessage ?? "Done"}`;
|
|
72
|
-
this._trigger();
|
|
73
|
-
}
|
|
74
|
-
} catch {
|
|
75
|
-
/* WebSocket handles it */
|
|
76
|
-
}
|
|
77
|
-
}, 2000);
|
|
78
|
-
} catch (err) {
|
|
79
|
-
this.status = `Error: ${err}`;
|
|
80
|
-
this._trigger();
|
|
81
|
-
} finally {
|
|
82
|
-
client.localServerUrl = null;
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
private _trigger() {
|
|
87
|
-
this.onExecutionUpdated.trigger({
|
|
88
|
-
status: this.status,
|
|
89
|
-
progress: this.progress,
|
|
90
|
-
messages: [...this.messages],
|
|
91
|
-
});
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
export * from "./src";
|
|
1
|
+
import * as OBC from "@thatopen/components";
|
|
2
|
+
import { getAppManager } from "../../app";
|
|
3
|
+
import { CloudRunnerStatus } from "./src";
|
|
4
|
+
|
|
5
|
+
export class CloudRunner extends OBC.Component {
|
|
6
|
+
static readonly uuid = "7c4e5d3b-2a1f-4e8d-9b6c-0a3f7e2c5d1b" as const;
|
|
7
|
+
|
|
8
|
+
enabled = true;
|
|
9
|
+
|
|
10
|
+
readonly onExecutionUpdated = new OBC.Event<CloudRunnerStatus>();
|
|
11
|
+
|
|
12
|
+
// TODO: Replace with your actual component ID after publishing.
|
|
13
|
+
componentId = "your-component-id";
|
|
14
|
+
localServerUrl = "http://localhost:4001";
|
|
15
|
+
|
|
16
|
+
// Reactive state — read by the UI template on each render.
|
|
17
|
+
status = "Idle";
|
|
18
|
+
progress = 0;
|
|
19
|
+
messages: string[] = [];
|
|
20
|
+
|
|
21
|
+
constructor(components: OBC.Components) {
|
|
22
|
+
super(components);
|
|
23
|
+
components.add(CloudRunner.uuid, this);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
async run(useLocal: boolean) {
|
|
27
|
+
// Resolve client at call time via the app shim — never store it as a field.
|
|
28
|
+
const client = getAppManager(this.components).client;
|
|
29
|
+
if (!client) {
|
|
30
|
+
this.status = "No platform client available.";
|
|
31
|
+
this._trigger();
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
client.localServerUrl = useLocal ? this.localServerUrl : null;
|
|
36
|
+
|
|
37
|
+
this.status = useLocal ? "Starting (local)..." : "Starting (deployed)...";
|
|
38
|
+
this.progress = 0;
|
|
39
|
+
this.messages = [];
|
|
40
|
+
this._trigger();
|
|
41
|
+
|
|
42
|
+
try {
|
|
43
|
+
const { executionId } = await client.executeComponent(this.componentId, {
|
|
44
|
+
greeting: "Hello from the BIM app!",
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
this.status = `Running (${executionId.slice(0, 8)}...)`;
|
|
48
|
+
this._trigger();
|
|
49
|
+
|
|
50
|
+
// Subscribe to real-time progress updates via WebSocket.
|
|
51
|
+
client.onExecutionProgress(executionId, (data) => {
|
|
52
|
+
if (data.progressUpdate) {
|
|
53
|
+
this.progress = data.progressUpdate.progress;
|
|
54
|
+
if (data.progressUpdate.result) {
|
|
55
|
+
this.status = `${data.progressUpdate.result}: ${data.progressUpdate.resultMessage ?? "Done"}`;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
if (data.messageUpdate) {
|
|
59
|
+
this.messages.push(data.messageUpdate.content);
|
|
60
|
+
}
|
|
61
|
+
this._trigger();
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
// Poll once after a short delay to catch fast executions that complete
|
|
65
|
+
// before the WebSocket subscription is established.
|
|
66
|
+
setTimeout(async () => {
|
|
67
|
+
try {
|
|
68
|
+
const exec = await client.getExecution(executionId);
|
|
69
|
+
if (exec.result) {
|
|
70
|
+
this.progress = exec.progress;
|
|
71
|
+
this.status = `${exec.result}: ${exec.resultMessage ?? "Done"}`;
|
|
72
|
+
this._trigger();
|
|
73
|
+
}
|
|
74
|
+
} catch {
|
|
75
|
+
/* WebSocket handles it */
|
|
76
|
+
}
|
|
77
|
+
}, 2000);
|
|
78
|
+
} catch (err) {
|
|
79
|
+
this.status = `Error: ${err}`;
|
|
80
|
+
this._trigger();
|
|
81
|
+
} finally {
|
|
82
|
+
client.localServerUrl = null;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
private _trigger() {
|
|
87
|
+
this.onExecutionUpdated.trigger({
|
|
88
|
+
status: this.status,
|
|
89
|
+
progress: this.progress,
|
|
90
|
+
messages: [...this.messages],
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
export * from "./src";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from "./types";
|
|
1
|
+
export * from "./types";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export interface CloudRunnerStatus {
|
|
2
|
-
status: string;
|
|
3
|
-
progress: number;
|
|
4
|
-
messages: string[];
|
|
5
|
-
}
|
|
1
|
+
export interface CloudRunnerStatus {
|
|
2
|
+
status: string;
|
|
3
|
+
progress: number;
|
|
4
|
+
messages: string[];
|
|
5
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from "./CloudRunner";
|
|
1
|
+
export * from "./CloudRunner";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export const icons = {};
|
|
1
|
+
export const icons = {};
|
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
import * as BUI from "@thatopen/ui";
|
|
2
|
-
import { AppInfoSectionComponent } from "./src";
|
|
3
|
-
import { getAppManager } from "../../app";
|
|
4
|
-
|
|
5
|
-
export const appInfoSectionTemplate: AppInfoSectionComponent = ({
|
|
6
|
-
components,
|
|
7
|
-
}) => {
|
|
8
|
-
const app = getAppManager(components);
|
|
9
|
-
|
|
10
|
-
const fileItems =
|
|
11
|
-
app.projectData?.files.map(
|
|
12
|
-
(f: { name: string }) => BUI.html`<bim-label>${f.name}</bim-label>`,
|
|
13
|
-
) ?? [];
|
|
14
|
-
|
|
15
|
-
return BUI.html`
|
|
16
|
-
<bim-panel-section label="App Info" icon="solar:info-circle-bold">
|
|
17
|
-
<bim-label>App ID: ${app.client?.context.appId}</bim-label>
|
|
18
|
-
<bim-label>Project ID: ${app.client?.context.projectId}</bim-label>
|
|
19
|
-
<bim-label>API URL: ${app.client?.context.apiUrl}</bim-label>
|
|
20
|
-
<bim-label>Files: ${fileItems.length}</bim-label>
|
|
21
|
-
${fileItems}
|
|
22
|
-
</bim-panel-section>
|
|
23
|
-
`;
|
|
24
|
-
};
|
|
25
|
-
|
|
26
|
-
export * from "./src";
|
|
1
|
+
import * as BUI from "@thatopen/ui";
|
|
2
|
+
import { AppInfoSectionComponent } from "./src";
|
|
3
|
+
import { getAppManager } from "../../app";
|
|
4
|
+
|
|
5
|
+
export const appInfoSectionTemplate: AppInfoSectionComponent = ({
|
|
6
|
+
components,
|
|
7
|
+
}) => {
|
|
8
|
+
const app = getAppManager(components);
|
|
9
|
+
|
|
10
|
+
const fileItems =
|
|
11
|
+
app.projectData?.files.map(
|
|
12
|
+
(f: { name: string }) => BUI.html`<bim-label>${f.name}</bim-label>`,
|
|
13
|
+
) ?? [];
|
|
14
|
+
|
|
15
|
+
return BUI.html`
|
|
16
|
+
<bim-panel-section label="App Info" icon="solar:info-circle-bold">
|
|
17
|
+
<bim-label>App ID: ${app.client?.context.appId}</bim-label>
|
|
18
|
+
<bim-label>Project ID: ${app.client?.context.projectId}</bim-label>
|
|
19
|
+
<bim-label>API URL: ${app.client?.context.apiUrl}</bim-label>
|
|
20
|
+
<bim-label>Files: ${fileItems.length}</bim-label>
|
|
21
|
+
${fileItems}
|
|
22
|
+
</bim-panel-section>
|
|
23
|
+
`;
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
export * from "./src";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from "./types";
|
|
1
|
+
export * from "./types";
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import * as BUI from "@thatopen/ui";
|
|
2
|
-
import * as OBC from "@thatopen/components";
|
|
3
|
-
|
|
4
|
-
export interface AppInfoSectionState {
|
|
5
|
-
components: OBC.Components;
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
export type AppInfoSectionComponent =
|
|
9
|
-
BUI.StatefullComponent<AppInfoSectionState>;
|
|
10
|
-
|
|
11
|
-
// Used in App type (app.ts) to type this element slot in the grid.
|
|
12
|
-
export type AppInfoSectionGridElement = {
|
|
13
|
-
name: "appInfoSection";
|
|
14
|
-
state: AppInfoSectionState;
|
|
15
|
-
};
|
|
1
|
+
import * as BUI from "@thatopen/ui";
|
|
2
|
+
import * as OBC from "@thatopen/components";
|
|
3
|
+
|
|
4
|
+
export interface AppInfoSectionState {
|
|
5
|
+
components: OBC.Components;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export type AppInfoSectionComponent =
|
|
9
|
+
BUI.StatefullComponent<AppInfoSectionState>;
|
|
10
|
+
|
|
11
|
+
// Used in App type (app.ts) to type this element slot in the grid.
|
|
12
|
+
export type AppInfoSectionGridElement = {
|
|
13
|
+
name: "appInfoSection";
|
|
14
|
+
state: AppInfoSectionState;
|
|
15
|
+
};
|
|
@@ -1,37 +1,37 @@
|
|
|
1
|
-
import * as BUI from "@thatopen/ui";
|
|
2
|
-
import { CloudRunner } from "../../bim-components";
|
|
3
|
-
import { CloudRunnerSectionComponent } from "./src";
|
|
4
|
-
|
|
5
|
-
export const cloudRunnerSectionTemplate: CloudRunnerSectionComponent = ({
|
|
6
|
-
components,
|
|
7
|
-
}) => {
|
|
8
|
-
const runner = components.get(CloudRunner);
|
|
9
|
-
|
|
10
|
-
const messageItems = runner.messages.map(
|
|
11
|
-
(m) => BUI.html`<bim-label>${m}</bim-label>`,
|
|
12
|
-
);
|
|
13
|
-
|
|
14
|
-
return BUI.html`
|
|
15
|
-
<bim-panel-section label="Cloud Component" icon="solar:code-bold">
|
|
16
|
-
<bim-label>Component ID: ${runner.componentId}</bim-label>
|
|
17
|
-
<bim-label>Local server: ${runner.localServerUrl}</bim-label>
|
|
18
|
-
<div style="display:flex;gap:0.5rem;">
|
|
19
|
-
<bim-button
|
|
20
|
-
label="Run Local"
|
|
21
|
-
icon="solar:play-bold"
|
|
22
|
-
@click=${() => runner.run(true)}
|
|
23
|
-
></bim-button>
|
|
24
|
-
<bim-button
|
|
25
|
-
label="Run Deployed"
|
|
26
|
-
icon="solar:cloud-bold-duotone"
|
|
27
|
-
@click=${() => runner.run(false)}
|
|
28
|
-
></bim-button>
|
|
29
|
-
</div>
|
|
30
|
-
<bim-label>${runner.status}</bim-label>
|
|
31
|
-
<bim-label>Progress: ${runner.progress}%</bim-label>
|
|
32
|
-
${messageItems}
|
|
33
|
-
</bim-panel-section>
|
|
34
|
-
`;
|
|
35
|
-
};
|
|
36
|
-
|
|
37
|
-
export * from "./src";
|
|
1
|
+
import * as BUI from "@thatopen/ui";
|
|
2
|
+
import { CloudRunner } from "../../bim-components";
|
|
3
|
+
import { CloudRunnerSectionComponent } from "./src";
|
|
4
|
+
|
|
5
|
+
export const cloudRunnerSectionTemplate: CloudRunnerSectionComponent = ({
|
|
6
|
+
components,
|
|
7
|
+
}) => {
|
|
8
|
+
const runner = components.get(CloudRunner);
|
|
9
|
+
|
|
10
|
+
const messageItems = runner.messages.map(
|
|
11
|
+
(m) => BUI.html`<bim-label>${m}</bim-label>`,
|
|
12
|
+
);
|
|
13
|
+
|
|
14
|
+
return BUI.html`
|
|
15
|
+
<bim-panel-section label="Cloud Component" icon="solar:code-bold">
|
|
16
|
+
<bim-label>Component ID: ${runner.componentId}</bim-label>
|
|
17
|
+
<bim-label>Local server: ${runner.localServerUrl}</bim-label>
|
|
18
|
+
<div style="display:flex;gap:0.5rem;">
|
|
19
|
+
<bim-button
|
|
20
|
+
label="Run Local"
|
|
21
|
+
icon="solar:play-bold"
|
|
22
|
+
@click=${() => runner.run(true)}
|
|
23
|
+
></bim-button>
|
|
24
|
+
<bim-button
|
|
25
|
+
label="Run Deployed"
|
|
26
|
+
icon="solar:cloud-bold-duotone"
|
|
27
|
+
@click=${() => runner.run(false)}
|
|
28
|
+
></bim-button>
|
|
29
|
+
</div>
|
|
30
|
+
<bim-label>${runner.status}</bim-label>
|
|
31
|
+
<bim-label>Progress: ${runner.progress}%</bim-label>
|
|
32
|
+
${messageItems}
|
|
33
|
+
</bim-panel-section>
|
|
34
|
+
`;
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
export * from "./src";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from "./types";
|
|
1
|
+
export * from "./types";
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import * as OBC from "@thatopen/components";
|
|
2
|
-
import * as BUI from "@thatopen/ui";
|
|
3
|
-
|
|
4
|
-
export interface CloudRunnerSectionState {
|
|
5
|
-
components: OBC.Components;
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
export type CloudRunnerSectionComponent =
|
|
9
|
-
BUI.StatefullComponent<CloudRunnerSectionState>;
|
|
10
|
-
|
|
11
|
-
export type CloudRunnerSectionGridElement = {
|
|
12
|
-
name: "cloudRunnerSection";
|
|
13
|
-
state: CloudRunnerSectionState;
|
|
14
|
-
};
|
|
1
|
+
import * as OBC from "@thatopen/components";
|
|
2
|
+
import * as BUI from "@thatopen/ui";
|
|
3
|
+
|
|
4
|
+
export interface CloudRunnerSectionState {
|
|
5
|
+
components: OBC.Components;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export type CloudRunnerSectionComponent =
|
|
9
|
+
BUI.StatefullComponent<CloudRunnerSectionState>;
|
|
10
|
+
|
|
11
|
+
export type CloudRunnerSectionGridElement = {
|
|
12
|
+
name: "cloudRunnerSection";
|
|
13
|
+
state: CloudRunnerSectionState;
|
|
14
|
+
};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from "./app-info-section";
|
|
2
|
-
export * from "./cloud-runner-section";
|
|
1
|
+
export * from "./app-info-section";
|
|
2
|
+
export * from "./cloud-runner-section";
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
{
|
|
2
|
-
"compilerOptions": {
|
|
3
|
-
"target": "ES2020",
|
|
4
|
-
"module": "ESNext",
|
|
5
|
-
"lib": ["ES2020", "DOM", "DOM.Iterable"],
|
|
6
|
-
"skipLibCheck": true,
|
|
7
|
-
"esModuleInterop": true,
|
|
8
|
-
"moduleResolution": "bundler",
|
|
9
|
-
"allowImportingTsExtensions": true,
|
|
10
|
-
"resolveJsonModule": true,
|
|
11
|
-
"isolatedModules": true,
|
|
12
|
-
"noEmit": true,
|
|
13
|
-
"strict": true
|
|
14
|
-
},
|
|
15
|
-
"include": ["src"]
|
|
16
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "ES2020",
|
|
4
|
+
"module": "ESNext",
|
|
5
|
+
"lib": ["ES2020", "DOM", "DOM.Iterable"],
|
|
6
|
+
"skipLibCheck": true,
|
|
7
|
+
"esModuleInterop": true,
|
|
8
|
+
"moduleResolution": "bundler",
|
|
9
|
+
"allowImportingTsExtensions": true,
|
|
10
|
+
"resolveJsonModule": true,
|
|
11
|
+
"isolatedModules": true,
|
|
12
|
+
"noEmit": true,
|
|
13
|
+
"strict": true
|
|
14
|
+
},
|
|
15
|
+
"include": ["src"]
|
|
16
|
+
}
|