@thatopen/services 0.3.16 → 0.4.0
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/cli.js +4 -1
- package/dist/core/client.d.ts +1 -0
- package/dist/core/platform-client.d.ts +7 -0
- package/dist/index.cjs.js +2 -2
- package/dist/index.es.js +382 -370
- package/dist/vite-env.d.ts +1 -1
- package/docs/ai-quickstart.md +130 -130
- 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/docs/cloud/GaussianSplatConverter.md +43 -43
- package/docs/cloud/PointCloudConverter.md +53 -53
- package/docs/revit-collab-quickstart.md +256 -256
- package/package.json +95 -95
- package/resources/AGENTS.md +40 -40
- 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/ClashesManager/example.ts +283 -283
- 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/Sidebar/example.ts +102 -102
- package/src/cli/templates/app/README.md +217 -217
- package/src/cli/templates/app/index.html +35 -35
- package/src/cli/templates/app/package.json +32 -32
- package/src/cli/templates/app/src/app.ts +37 -37
- package/src/cli/templates/app/src/assets/tool-placeholder.ts +50 -50
- 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/main.ts +199 -199
- package/src/cli/templates/app/src/setups/reality-capture/lib/hidden-tiles-plugin.ts +88 -88
- package/src/cli/templates/app/src/setups/reality-capture/lib/point-tile-plugin.ts +166 -166
- package/src/cli/templates/app/src/setups/reality-capture/lib/render-frame.ts +31 -31
- package/src/cli/templates/app/src/setups/reality-capture/lib/splat-tile-plugin.ts +51 -51
- package/src/cli/templates/app/src/setups/reality-capture-viewer.ts +1383 -1383
- 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,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
|
+
}
|
|
@@ -1,57 +1,57 @@
|
|
|
1
|
-
// Production build config — builds dist/bundle.js as IIFE.
|
|
2
|
-
// For local development, use: npm run dev (runs thatopen serve with esbuild).
|
|
3
|
-
// Do NOT run "vite" or "vite build --watch" directly for dev.
|
|
4
|
-
import { defineConfig } from 'vite';
|
|
5
|
-
import { resolve } from 'path';
|
|
6
|
-
import { existsSync, readFileSync } from 'fs';
|
|
7
|
-
|
|
8
|
-
// When `.thatopen` marks the project as beta, alias the public engine imports
|
|
9
|
-
// to their `@thatopen-platform/*-beta` packages at build time, so the source
|
|
10
|
-
// can use the stable import names in both stable and beta modes.
|
|
11
|
-
function getBetaAliases() {
|
|
12
|
-
if (!existsSync('.thatopen')) return {};
|
|
13
|
-
try {
|
|
14
|
-
const config = JSON.parse(readFileSync('.thatopen', 'utf-8'));
|
|
15
|
-
if (!config.beta) return {};
|
|
16
|
-
return {
|
|
17
|
-
'@thatopen/components': '@thatopen-platform/components-beta',
|
|
18
|
-
'@thatopen/components-front': '@thatopen-platform/components-front-beta',
|
|
19
|
-
'@thatopen/fragments': '@thatopen-platform/fragments-beta',
|
|
20
|
-
};
|
|
21
|
-
} catch {
|
|
22
|
-
return {};
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
// Some three.js example loaders (e.g. TTFLoader) import their deps from a
|
|
27
|
-
// jsdelivr `/+esm` CDN URL. A bundler can't put a URL import in an IIFE — it
|
|
28
|
-
// degrades to a runtime `require("https://…")` that throws — so rewrite any such
|
|
29
|
-
// URL back to the bare package name and let it resolve from node_modules.
|
|
30
|
-
const CDN_ESM = /^https:\/\/cdn\.jsdelivr\.net\/npm\/((?:@[^/]+\/)?[^@/]+)(?:@[^/]+)?\/\+esm$/;
|
|
31
|
-
|
|
32
|
-
export default defineConfig({
|
|
33
|
-
resolve: {
|
|
34
|
-
alias: [
|
|
35
|
-
{ find: CDN_ESM, replacement: '$1' },
|
|
36
|
-
...Object.entries(getBetaAliases()).map(([find, replacement]) => ({
|
|
37
|
-
find,
|
|
38
|
-
replacement,
|
|
39
|
-
})),
|
|
40
|
-
],
|
|
41
|
-
},
|
|
42
|
-
build: {
|
|
43
|
-
lib: {
|
|
44
|
-
entry: resolve(__dirname, 'src/main.ts'),
|
|
45
|
-
name: 'ThatOpenApp',
|
|
46
|
-
formats: ['iife'],
|
|
47
|
-
fileName: () => 'bundle.js',
|
|
48
|
-
},
|
|
49
|
-
outDir: 'dist',
|
|
50
|
-
sourcemap: true,
|
|
51
|
-
rollupOptions: {
|
|
52
|
-
output: {
|
|
53
|
-
entryFileNames: 'bundle.js',
|
|
54
|
-
},
|
|
55
|
-
},
|
|
56
|
-
},
|
|
57
|
-
});
|
|
1
|
+
// Production build config — builds dist/bundle.js as IIFE.
|
|
2
|
+
// For local development, use: npm run dev (runs thatopen serve with esbuild).
|
|
3
|
+
// Do NOT run "vite" or "vite build --watch" directly for dev.
|
|
4
|
+
import { defineConfig } from 'vite';
|
|
5
|
+
import { resolve } from 'path';
|
|
6
|
+
import { existsSync, readFileSync } from 'fs';
|
|
7
|
+
|
|
8
|
+
// When `.thatopen` marks the project as beta, alias the public engine imports
|
|
9
|
+
// to their `@thatopen-platform/*-beta` packages at build time, so the source
|
|
10
|
+
// can use the stable import names in both stable and beta modes.
|
|
11
|
+
function getBetaAliases() {
|
|
12
|
+
if (!existsSync('.thatopen')) return {};
|
|
13
|
+
try {
|
|
14
|
+
const config = JSON.parse(readFileSync('.thatopen', 'utf-8'));
|
|
15
|
+
if (!config.beta) return {};
|
|
16
|
+
return {
|
|
17
|
+
'@thatopen/components': '@thatopen-platform/components-beta',
|
|
18
|
+
'@thatopen/components-front': '@thatopen-platform/components-front-beta',
|
|
19
|
+
'@thatopen/fragments': '@thatopen-platform/fragments-beta',
|
|
20
|
+
};
|
|
21
|
+
} catch {
|
|
22
|
+
return {};
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// Some three.js example loaders (e.g. TTFLoader) import their deps from a
|
|
27
|
+
// jsdelivr `/+esm` CDN URL. A bundler can't put a URL import in an IIFE — it
|
|
28
|
+
// degrades to a runtime `require("https://…")` that throws — so rewrite any such
|
|
29
|
+
// URL back to the bare package name and let it resolve from node_modules.
|
|
30
|
+
const CDN_ESM = /^https:\/\/cdn\.jsdelivr\.net\/npm\/((?:@[^/]+\/)?[^@/]+)(?:@[^/]+)?\/\+esm$/;
|
|
31
|
+
|
|
32
|
+
export default defineConfig({
|
|
33
|
+
resolve: {
|
|
34
|
+
alias: [
|
|
35
|
+
{ find: CDN_ESM, replacement: '$1' },
|
|
36
|
+
...Object.entries(getBetaAliases()).map(([find, replacement]) => ({
|
|
37
|
+
find,
|
|
38
|
+
replacement,
|
|
39
|
+
})),
|
|
40
|
+
],
|
|
41
|
+
},
|
|
42
|
+
build: {
|
|
43
|
+
lib: {
|
|
44
|
+
entry: resolve(__dirname, 'src/main.ts'),
|
|
45
|
+
name: 'ThatOpenApp',
|
|
46
|
+
formats: ['iife'],
|
|
47
|
+
fileName: () => 'bundle.js',
|
|
48
|
+
},
|
|
49
|
+
outDir: 'dist',
|
|
50
|
+
sourcemap: true,
|
|
51
|
+
rollupOptions: {
|
|
52
|
+
output: {
|
|
53
|
+
entryFileNames: 'bundle.js',
|
|
54
|
+
},
|
|
55
|
+
},
|
|
56
|
+
},
|
|
57
|
+
});
|