@sliiu/present-three-bake 0.0.0-stage → 0.1.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/COPYRIGHT +5 -0
- package/LICENSE +661 -0
- package/THIRD-PARTY-NOTICES.md +221 -0
- package/dist/cjs/bake-sp3d.js +176 -0
- package/dist/cjs/camera.js +94 -0
- package/dist/cjs/index.js +47 -0
- package/dist/cjs/light-rig.js +162 -0
- package/dist/cjs/material.js +136 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/path-to-shape.js +331 -0
- package/dist/cjs/presets.js +112 -0
- package/dist/cjs/resolve.js +98 -0
- package/dist/cjs/runtime.js +146 -0
- package/dist/cjs/scene-builder.js +329 -0
- package/dist/cjs/shape-path.js +71 -0
- package/dist/cjs/types.js +2 -0
- package/dist/esm/bake-sp3d.js +140 -0
- package/dist/esm/camera.js +58 -0
- package/dist/esm/index.js +9 -0
- package/dist/esm/light-rig.js +126 -0
- package/dist/esm/material.js +98 -0
- package/dist/esm/path-to-shape.js +295 -0
- package/dist/esm/presets.js +109 -0
- package/dist/esm/resolve.js +91 -0
- package/dist/esm/runtime.js +141 -0
- package/dist/esm/scene-builder.js +290 -0
- package/dist/esm/shape-path.js +64 -0
- package/dist/esm/types.js +1 -0
- package/dist/types/bake-sp3d.d.ts +2 -0
- package/dist/types/camera.d.ts +7 -0
- package/dist/types/index.d.ts +8 -0
- package/dist/types/light-rig.d.ts +10 -0
- package/dist/types/material.d.ts +17 -0
- package/dist/types/path-to-shape.d.ts +11 -0
- package/dist/types/presets.d.ts +23 -0
- package/dist/types/resolve.d.ts +67 -0
- package/dist/types/runtime.d.ts +22 -0
- package/dist/types/scene-builder.d.ts +35 -0
- package/dist/types/shape-path.d.ts +15 -0
- package/dist/types/types.d.ts +1 -0
- package/package.json +30 -4
- package/README.md +0 -3
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
# 第三方许可证
|
|
2
|
+
|
|
3
|
+
公开包自有代码的版权人是 Sliiu Inc,使用 AGPL-3.0-or-later,全文是同目录的 `AGPL-3.0.txt`。版权行见 `COPYRIGHT`。下面这些库不是 SlimPPT 写的,许可证保持原样。版本是整理这份声明时锁文件里的版本。
|
|
4
|
+
|
|
5
|
+
各依赖包自带的 `LICENSE` 随 npm 安装保留。这里记下标识,以及不能被商业授权盖住的那几份。
|
|
6
|
+
|
|
7
|
+
## 不能并进商业授权
|
|
8
|
+
|
|
9
|
+
`mtx-decompressor@1.6.0`(`@ppt/parser`)是 MPL-2.0,作者 ChristopherVR。全文是 `MPL-2.0.txt`。只约束这个库的文件,可以和闭源程序放在一起,不能改成专有许可。
|
|
10
|
+
|
|
11
|
+
`@ffmpeg/ffmpeg@0.12.15` 和 `@ffmpeg/util@0.12.2` 是 MIT,作者 Jerome Wu。编辑器在 `packages/editor/src/video-export.ts` 里另从 `https://unpkg.com/@ffmpeg/core@0.12.6/dist/esm` 加载内核。`0.12.6` 的 npm 元数据写着 MIT。该 WebAssembly 的构建串包含 libx264、libx265 和 libmp3lame,实际是 GPL-2.0-or-later。GPL-2.0 全文是 `GPL-2.0.txt`;“or later” 也可以选用 GNU GPL 3.0。商业授权不含这段内核。
|
|
12
|
+
|
|
13
|
+
## Apache-2.0
|
|
14
|
+
|
|
15
|
+
全文是 `Apache-2.0.txt`。可以放进 AGPL 程序,文件本身仍是 Apache-2.0。
|
|
16
|
+
|
|
17
|
+
| 包 | 版本 | 版权声明 |
|
|
18
|
+
|---|---|---|
|
|
19
|
+
| `ai`、`@ai-sdk/anthropic`、`@ai-sdk/google`、`@ai-sdk/mcp`、`@ai-sdk/openai`、`@ai-sdk/openai-compatible`,以及它们带上的 `@ai-sdk/gateway`、`@ai-sdk/provider`、`@ai-sdk/provider-utils`、`@vercel/oidc` | 见附录 | Copyright 2023 Vercel, Inc. |
|
|
20
|
+
| `@paddleocr/paddleocr-js` | 0.4.2 | PaddlePaddle Authors |
|
|
21
|
+
| `@techstark/opencv-js` | 4.10.0-release.1 | Apache-2.0 |
|
|
22
|
+
| `tesseract.js`、`tesseract.js-core` | 7.0.0 | Apache-2.0 |
|
|
23
|
+
| `emf-converter` | 4.8.0 | ChristopherVR |
|
|
24
|
+
|
|
25
|
+
## 字体
|
|
26
|
+
|
|
27
|
+
`katex@0.18.9` 的代码是 MIT,Copyright (c) 2013-2020 Khan Academy and other contributors。随包的字体文件是 SIL OFL 1.1,全文是 `OFL-1.1.txt`。字体不能改许可,可以随软件分发;用这些字体排出来的幻灯片不因此变成 OFL。
|
|
28
|
+
|
|
29
|
+
主题只引用 Google Fonts 的 CSS,字体文件不打进包。
|
|
30
|
+
|
|
31
|
+
网站壳自带的那份字体许可证是另一份 OFL,不进公开包。
|
|
32
|
+
|
|
33
|
+
## 其余直接依赖
|
|
34
|
+
|
|
35
|
+
| 包 | 版本 | 许可证 | 版权声明 |
|
|
36
|
+
|---|---|---|---|
|
|
37
|
+
| `fast-xml-parser` | 5.11.1 | MIT | Copyright (c) 2017 Amit Kumar Gupta |
|
|
38
|
+
| `fflate` | 0.8.3 | MIT | Copyright (c) 2026 Arjun Barrett |
|
|
39
|
+
| `three` | 0.186.0 | MIT | Copyright © 2010-2026 three.js authors |
|
|
40
|
+
| `zod` | 4.6.5 | MIT | Copyright (c) 2025 Colin McDonnell |
|
|
41
|
+
| `@modelcontextprotocol/sdk` | 1.30.1 | MIT | Copyright (c) 2024 Anthropic, PBC |
|
|
42
|
+
| `lucide` | 1.48.0 | ISC | Copyright (c) 2026 Lucide Icons and Contributors。其中来自 Feather 的图标另为 MIT,Copyright (c) 2013-present Cole Bemis |
|
|
43
|
+
| `clipper-lib` | 6.4.2 | Boost-1.0 | Copyright Angus Johnson 2010-2017。使用、修改和分发遵循 Boost Software License 1.0 |
|
|
44
|
+
| `js-yaml` | 4.3.2 | MIT | Copyright (C) 2011-2015 by Vitaly Puzrin |
|
|
45
|
+
| `onnxruntime-web`、`onnxruntime-common` | 1.30.0 | MIT | 版权声明以包内 LICENSE 为准 |
|
|
46
|
+
|
|
47
|
+
`@modelcontextprotocol/sdk` 会带上 `express`、`hono` 这些服务端库。它们随 `@ppt/ai` 安装,许可证见附录,不因此把网关算进公开包。
|
|
48
|
+
|
|
49
|
+
`json-schema@0.4.0` 是 AFL-2.1 或 BSD-3-Clause。这里取 BSD-3-Clause。
|
|
50
|
+
|
|
51
|
+
## 不在这份声明里
|
|
52
|
+
|
|
53
|
+
网关及其依赖、`tests/pptx-viewer` 依赖的 `pptx-react-viewer`(Apache-2.0)、构建工具(`lightningcss`、`sharp`、`axe-core`、Sentry 命令行)。这些不进公开包。
|
|
54
|
+
|
|
55
|
+
## 附录:公开包生产依赖
|
|
56
|
+
|
|
57
|
+
`animation`、`core`、`parser`、`serializer`、`three-bake`、`renderer`、`transition-fx`、`plugin-sdk`、`themes`、`ui`、`player`、`editor`、`ai` 的生产依赖,含传递依赖。不含 `@ppt/*` 自身,不含上面那份另行加载的 `@ffmpeg/core`。
|
|
58
|
+
|
|
59
|
+
| 包 | 版本 | 许可证 |
|
|
60
|
+
|---|---|---|
|
|
61
|
+
| `@ai-sdk/anthropic` | 4.0.62 | `Apache-2.0` |
|
|
62
|
+
| `@ai-sdk/gateway` | 4.0.91 | `Apache-2.0` |
|
|
63
|
+
| `@ai-sdk/google` | 4.0.79 | `Apache-2.0` |
|
|
64
|
+
| `@ai-sdk/mcp` | 2.0.57 | `Apache-2.0` |
|
|
65
|
+
| `@ai-sdk/openai` | 4.0.74 | `Apache-2.0` |
|
|
66
|
+
| `@ai-sdk/openai-compatible` | 3.0.55 | `Apache-2.0` |
|
|
67
|
+
| `@ai-sdk/provider` | 4.0.18 | `Apache-2.0` |
|
|
68
|
+
| `@ai-sdk/provider-utils` | 5.0.47 | `Apache-2.0` |
|
|
69
|
+
| `@exodus/bytes` | 1.16.0 | `MIT` |
|
|
70
|
+
| `@ffmpeg/ffmpeg` | 0.12.15 | `MIT` |
|
|
71
|
+
| `@ffmpeg/types` | 0.12.4 | `MIT` |
|
|
72
|
+
| `@ffmpeg/util` | 0.12.2 | `MIT` |
|
|
73
|
+
| `@hono/node-server` | 2.1.1 | `MIT` |
|
|
74
|
+
| `@modelcontextprotocol/sdk` | 1.30.1 | `MIT` |
|
|
75
|
+
| `@nodable/entities` | 3.0.0 | `MIT` |
|
|
76
|
+
| `@paddleocr/paddleocr-js` | 0.4.2 | `Apache-2.0` |
|
|
77
|
+
| `@protobufjs/aspromise` | 1.1.2 | `BSD-3-Clause` |
|
|
78
|
+
| `@protobufjs/base64` | 1.1.2 | `BSD-3-Clause` |
|
|
79
|
+
| `@protobufjs/codegen` | 2.0.5 | `BSD-3-Clause` |
|
|
80
|
+
| `@protobufjs/eventemitter` | 1.1.1 | `BSD-3-Clause` |
|
|
81
|
+
| `@protobufjs/fetch` | 1.1.1 | `BSD-3-Clause` |
|
|
82
|
+
| `@protobufjs/float` | 1.0.2 | `BSD-3-Clause` |
|
|
83
|
+
| `@protobufjs/path` | 1.1.2 | `BSD-3-Clause` |
|
|
84
|
+
| `@protobufjs/pool` | 1.1.0 | `BSD-3-Clause` |
|
|
85
|
+
| `@protobufjs/utf8` | 1.1.2 | `BSD-3-Clause` |
|
|
86
|
+
| `@standard-schema/spec` | 1.1.0 | `MIT` |
|
|
87
|
+
| `@techstark/opencv-js` | 4.10.0-release.1 | `Apache-2.0` |
|
|
88
|
+
| `@types/node` | 26.6.2 | `MIT` |
|
|
89
|
+
| `@vercel/oidc` | 3.2.0 | `Apache-2.0` |
|
|
90
|
+
| `@workflow/serde` | 4.1.0 | `Apache-2.0` |
|
|
91
|
+
| `accepts` | 2.0.0 | `MIT` |
|
|
92
|
+
| `ai` | 7.0.113 | `Apache-2.0` |
|
|
93
|
+
| `ajv` | 8.20.0 | `MIT` |
|
|
94
|
+
| `ajv-formats` | 3.0.1 | `MIT` |
|
|
95
|
+
| `anynum` | 1.0.1 | `MIT` |
|
|
96
|
+
| `argparse` | 2.0.1 | `Python-2.0` |
|
|
97
|
+
| `bmp-js` | 0.1.0 | `MIT` |
|
|
98
|
+
| `body-parser` | 2.3.0 | `MIT` |
|
|
99
|
+
| `bytes` | 3.1.2 | `MIT` |
|
|
100
|
+
| `call-bind-apply-helpers` | 1.0.2 | `MIT` |
|
|
101
|
+
| `call-bound` | 1.0.4 | `MIT` |
|
|
102
|
+
| `clipper-lib` | 6.4.2 | `BSL`(Boost-1.0) |
|
|
103
|
+
| `commander` | 15.0.0 | `MIT` |
|
|
104
|
+
| `content-disposition` | 1.1.0 | `MIT` |
|
|
105
|
+
| `content-type` | 1.0.5 | `MIT` |
|
|
106
|
+
| `cookie` | 1.1.1 | `MIT` |
|
|
107
|
+
| `cookie-signature` | 1.2.2 | `MIT` |
|
|
108
|
+
| `cors` | 2.8.6 | `MIT` |
|
|
109
|
+
| `cross-spawn` | 7.0.6 | `MIT` |
|
|
110
|
+
| `debug` | 4.4.3 | `MIT` |
|
|
111
|
+
| `depd` | 2.0.0 | `MIT` |
|
|
112
|
+
| `dunder-proto` | 1.0.1 | `MIT` |
|
|
113
|
+
| `ee-first` | 1.1.1 | `MIT` |
|
|
114
|
+
| `emf-converter` | 4.8.0 | `Apache-2.0` |
|
|
115
|
+
| `encodeurl` | 2.0.0 | `MIT` |
|
|
116
|
+
| `es-define-property` | 1.0.1 | `MIT` |
|
|
117
|
+
| `es-errors` | 1.3.0 | `MIT` |
|
|
118
|
+
| `es-object-atoms` | 1.1.2 | `MIT` |
|
|
119
|
+
| `escape-html` | 1.0.3 | `MIT` |
|
|
120
|
+
| `etag` | 1.8.1 | `MIT` |
|
|
121
|
+
| `eventsource` | 3.0.7 | `MIT` |
|
|
122
|
+
| `eventsource-parser` | 3.1.1 | `MIT` |
|
|
123
|
+
| `express` | 5.2.1 | `MIT` |
|
|
124
|
+
| `express-rate-limit` | 8.7.0 | `MIT` |
|
|
125
|
+
| `fast-deep-equal` | 3.1.3 | `MIT` |
|
|
126
|
+
| `fast-uri` | 3.1.8 | `BSD-3-Clause` |
|
|
127
|
+
| `fast-xml-builder` | 1.3.1 | `MIT` |
|
|
128
|
+
| `fast-xml-parser` | 5.11.1 | `MIT` |
|
|
129
|
+
| `fflate` | 0.8.3 | `MIT` |
|
|
130
|
+
| `finalhandler` | 2.1.1 | `MIT` |
|
|
131
|
+
| `flatbuffers` | 25.9.23 | `Apache-2.0` |
|
|
132
|
+
| `forwarded` | 0.2.0 | `MIT` |
|
|
133
|
+
| `fresh` | 2.0.0 | `MIT` |
|
|
134
|
+
| `function-bind` | 1.1.2 | `MIT` |
|
|
135
|
+
| `get-intrinsic` | 1.3.0 | `MIT` |
|
|
136
|
+
| `get-proto` | 1.0.1 | `MIT` |
|
|
137
|
+
| `gopd` | 1.2.0 | `MIT` |
|
|
138
|
+
| `guid-typescript` | 1.0.9 | `ISC` |
|
|
139
|
+
| `has-symbols` | 1.1.0 | `MIT` |
|
|
140
|
+
| `hasown` | 2.0.4 | `MIT` |
|
|
141
|
+
| `hono` | 4.13.9 | `MIT` |
|
|
142
|
+
| `http-errors` | 2.0.1 | `MIT` |
|
|
143
|
+
| `iconv-lite` | 0.7.3 | `MIT` |
|
|
144
|
+
| `idb-keyval` | 6.3.0 | `Apache-2.0` |
|
|
145
|
+
| `inherits` | 2.0.4 | `ISC` |
|
|
146
|
+
| `ip-address` | 10.7.2 | `MIT` |
|
|
147
|
+
| `ipaddr.js` | 1.9.1 | `MIT` |
|
|
148
|
+
| `is-promise` | 4.0.0 | `MIT` |
|
|
149
|
+
| `is-unsafe` | 2.0.2 | `MIT` |
|
|
150
|
+
| `is-url` | 1.2.4 | `MIT` |
|
|
151
|
+
| `isexe` | 2.0.0 | `ISC` |
|
|
152
|
+
| `jose` | 6.2.12 | `MIT` |
|
|
153
|
+
| `js-yaml` | 4.3.2 | `MIT` |
|
|
154
|
+
| `json-schema` | 0.4.0 | `BSD-3-Clause`(双许可,取这一支) |
|
|
155
|
+
| `json-schema-traverse` | 1.0.0 | `MIT` |
|
|
156
|
+
| `json-schema-typed` | 8.0.2 | `BSD-2-Clause` |
|
|
157
|
+
| `katex` | 0.18.9 | `MIT` |
|
|
158
|
+
| `long` | 5.3.2 | `Apache-2.0` |
|
|
159
|
+
| `lucide` | 1.48.0 | `ISC` |
|
|
160
|
+
| `math-intrinsics` | 1.1.0 | `MIT` |
|
|
161
|
+
| `media-typer` | 1.1.1 | `MIT` |
|
|
162
|
+
| `merge-descriptors` | 2.0.0 | `MIT` |
|
|
163
|
+
| `mime-db` | 1.54.0 | `MIT` |
|
|
164
|
+
| `mime-types` | 3.0.2 | `MIT` |
|
|
165
|
+
| `ms` | 2.1.3 | `MIT` |
|
|
166
|
+
| `mtx-decompressor` | 1.6.0 | `MPL-2.0` |
|
|
167
|
+
| `negotiator` | 1.1.0 | `MIT` |
|
|
168
|
+
| `node-fetch` | 2.7.0 | `MIT` |
|
|
169
|
+
| `object-assign` | 4.1.1 | `MIT` |
|
|
170
|
+
| `object-inspect` | 1.13.4 | `MIT` |
|
|
171
|
+
| `on-finished` | 2.4.1 | `MIT` |
|
|
172
|
+
| `once` | 1.4.0 | `ISC` |
|
|
173
|
+
| `onnxruntime-common` | 1.30.0 | `MIT` |
|
|
174
|
+
| `onnxruntime-web` | 1.30.0 | `MIT` |
|
|
175
|
+
| `opencollective-postinstall` | 2.0.3 | `MIT` |
|
|
176
|
+
| `parseurl` | 1.3.3 | `MIT` |
|
|
177
|
+
| `path-expression-matcher` | 1.6.2 | `MIT` |
|
|
178
|
+
| `path-key` | 3.1.1 | `MIT` |
|
|
179
|
+
| `path-to-regexp` | 8.4.2 | `MIT` |
|
|
180
|
+
| `pkce-challenge` | 5.0.1 | `MIT` |
|
|
181
|
+
| `platform` | 1.3.6 | `MIT` |
|
|
182
|
+
| `protobufjs` | 7.6.6 | `BSD-3-Clause` |
|
|
183
|
+
| `proxy-addr` | 2.0.8 | `MIT` |
|
|
184
|
+
| `punycode` | 2.3.1 | `MIT` |
|
|
185
|
+
| `qs` | 6.16.0 | `BSD-3-Clause` |
|
|
186
|
+
| `range-parser` | 1.3.0 | `MIT` |
|
|
187
|
+
| `raw-body` | 3.0.2 | `MIT` |
|
|
188
|
+
| `regenerator-runtime` | 0.13.11 | `MIT` |
|
|
189
|
+
| `require-from-string` | 2.0.2 | `MIT` |
|
|
190
|
+
| `router` | 2.2.0 | `MIT` |
|
|
191
|
+
| `safer-buffer` | 2.1.2 | `MIT` |
|
|
192
|
+
| `send` | 1.2.1 | `MIT` |
|
|
193
|
+
| `serve-static` | 2.2.1 | `MIT` |
|
|
194
|
+
| `setprototypeof` | 1.2.0 | `ISC` |
|
|
195
|
+
| `shebang-command` | 2.0.0 | `MIT` |
|
|
196
|
+
| `shebang-regex` | 3.0.0 | `MIT` |
|
|
197
|
+
| `side-channel` | 1.1.1 | `MIT` |
|
|
198
|
+
| `side-channel-list` | 1.0.1 | `MIT` |
|
|
199
|
+
| `side-channel-map` | 1.0.1 | `MIT` |
|
|
200
|
+
| `side-channel-weakmap` | 1.0.2 | `MIT` |
|
|
201
|
+
| `statuses` | 2.0.2 | `MIT` |
|
|
202
|
+
| `strnum` | 2.4.2 | `MIT` |
|
|
203
|
+
| `tesseract.js` | 7.0.0 | `Apache-2.0` |
|
|
204
|
+
| `tesseract.js-core` | 7.0.0 | `Apache-2.0` |
|
|
205
|
+
| `three` | 0.186.0 | `MIT` |
|
|
206
|
+
| `toidentifier` | 1.0.1 | `MIT` |
|
|
207
|
+
| `tr46` | 6.0.0 | `MIT` |
|
|
208
|
+
| `type-is` | 2.1.0 | `MIT` |
|
|
209
|
+
| `undici` | 7.29.0 | `MIT` |
|
|
210
|
+
| `undici-types` | 8.9.0 | `MIT` |
|
|
211
|
+
| `unpipe` | 1.0.0 | `MIT` |
|
|
212
|
+
| `vary` | 1.1.2 | `MIT` |
|
|
213
|
+
| `wasm-feature-detect` | 1.9.0 | `Apache-2.0` |
|
|
214
|
+
| `webidl-conversions` | 8.0.1 | `BSD-2-Clause` |
|
|
215
|
+
| `whatwg-url` | 17.1.2 | `MIT` |
|
|
216
|
+
| `which` | 2.0.2 | `ISC` |
|
|
217
|
+
| `wrappy` | 1.0.2 | `ISC` |
|
|
218
|
+
| `xml-naming` | 0.3.0 | `MIT` |
|
|
219
|
+
| `zlibjs` | 0.3.1 | `MIT` |
|
|
220
|
+
| `zod` | 4.6.5 | `MIT` |
|
|
221
|
+
| `zod-to-json-schema` | 3.25.2 | `ISC` |
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.bakeSp3d = bakeSp3d;
|
|
37
|
+
const THREE = __importStar(require("three"));
|
|
38
|
+
const material_1 = require("./material");
|
|
39
|
+
const resolve_1 = require("./resolve");
|
|
40
|
+
const scene_builder_1 = require("./scene-builder");
|
|
41
|
+
const shape_path_1 = require("./shape-path");
|
|
42
|
+
// 离屏光栅路径:把 3D 烘成 PNG,给无法挂 live WebGL context 的消费者用
|
|
43
|
+
// (thumbnail=SvgBackend / snapshot+pdf=CanvasBackend / parse-time bake3D 选项)。
|
|
44
|
+
// player/editor 的实时视图改走 packages/renderer 的 WebGLShapeBackend(live three.js)。
|
|
45
|
+
// 几何/材质/光照/相机与 live 完全共用 scene-builder,确保两条路径一致。
|
|
46
|
+
async function bakeSp3d(req) {
|
|
47
|
+
if (!hasOffscreenCanvas() && typeof document === "undefined")
|
|
48
|
+
return null;
|
|
49
|
+
const dpr = req.dpr ?? Math.min(2, getDevicePixelRatio());
|
|
50
|
+
const isImage = !!req.imageSrc;
|
|
51
|
+
// image bake:slab 几何全收在 bbox 内不外溢,只需 5% pad 吸收 3D 投影 overshoot;
|
|
52
|
+
// 非 image(path/纯色 extrude)倒角对称外扩,留 15%。
|
|
53
|
+
const pad = req.pad ?? (0, shape_path_1.shape3DPad)(isImage ? "image" : "path");
|
|
54
|
+
const baseW = Math.max(8, req.bbox.w);
|
|
55
|
+
const baseH = Math.max(8, req.bbox.h);
|
|
56
|
+
const padW = Math.ceil(baseW * (1 + pad));
|
|
57
|
+
const padH = Math.ceil(baseH * (1 + pad));
|
|
58
|
+
const pixelW = Math.ceil(padW * dpr);
|
|
59
|
+
const pixelH = Math.ceil(padH * dpr);
|
|
60
|
+
const canvas = createBakeCanvas(pixelW, pixelH);
|
|
61
|
+
if (!canvas)
|
|
62
|
+
return null;
|
|
63
|
+
let renderer = null;
|
|
64
|
+
let dispose;
|
|
65
|
+
try {
|
|
66
|
+
renderer = new THREE.WebGLRenderer({
|
|
67
|
+
canvas: canvas,
|
|
68
|
+
alpha: true,
|
|
69
|
+
antialias: true,
|
|
70
|
+
premultipliedAlpha: true,
|
|
71
|
+
});
|
|
72
|
+
renderer.setPixelRatio(1);
|
|
73
|
+
renderer.setSize(pixelW, pixelH, false);
|
|
74
|
+
renderer.setClearColor(0x000000, 0);
|
|
75
|
+
// 输出端补 SRGB,否则 PBR 在 linear 空间写到 canvas 会让纯白变灰、棋盘对比被压扁。
|
|
76
|
+
renderer.outputColorSpace = THREE.SRGBColorSpace;
|
|
77
|
+
const resolved = (0, resolve_1.resolveScene3D)({ sp3d: req.sp3d, scene3d: req.scene3d });
|
|
78
|
+
let texture = null;
|
|
79
|
+
if (req.imageSrc) {
|
|
80
|
+
texture = await (0, scene_builder_1.loadImageTexture)(req.imageSrc);
|
|
81
|
+
if (texture)
|
|
82
|
+
(0, material_1.applyTextureCrop)(texture, req.cropRect);
|
|
83
|
+
}
|
|
84
|
+
const built = (0, scene_builder_1.buildThreeScene)({
|
|
85
|
+
baseW,
|
|
86
|
+
baseH,
|
|
87
|
+
pathD: req.pathD,
|
|
88
|
+
fill: req.fill,
|
|
89
|
+
stroke: req.stroke,
|
|
90
|
+
resolved,
|
|
91
|
+
texture,
|
|
92
|
+
isImage,
|
|
93
|
+
});
|
|
94
|
+
dispose = built.dispose;
|
|
95
|
+
const camera = (0, scene_builder_1.createSceneCamera)(resolved.camera, built.geoW, built.geoH, padW, padH, pad, resolved.backdrop);
|
|
96
|
+
renderer.render(built.scene, camera);
|
|
97
|
+
const src = await canvasToDataURL(canvas);
|
|
98
|
+
if (!src)
|
|
99
|
+
return null;
|
|
100
|
+
return {
|
|
101
|
+
src,
|
|
102
|
+
natural: { w: pixelW, h: pixelH },
|
|
103
|
+
paddedBBox: {
|
|
104
|
+
x: req.bbox.x - (padW - baseW) / 2,
|
|
105
|
+
y: req.bbox.y - (padH - baseH) / 2,
|
|
106
|
+
w: padW,
|
|
107
|
+
h: padH,
|
|
108
|
+
},
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
catch (err) {
|
|
112
|
+
if (typeof console !== "undefined")
|
|
113
|
+
console.warn("[three-bake] bake failed", err);
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
finally {
|
|
117
|
+
dispose?.();
|
|
118
|
+
if (renderer) {
|
|
119
|
+
renderer.forceContextLoss();
|
|
120
|
+
renderer.dispose();
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
function getDevicePixelRatio() {
|
|
125
|
+
if (typeof window !== "undefined" && window.devicePixelRatio)
|
|
126
|
+
return window.devicePixelRatio;
|
|
127
|
+
return 1;
|
|
128
|
+
}
|
|
129
|
+
function hasOffscreenCanvas() {
|
|
130
|
+
return typeof OffscreenCanvas !== "undefined";
|
|
131
|
+
}
|
|
132
|
+
function createBakeCanvas(w, h) {
|
|
133
|
+
if (typeof OffscreenCanvas !== "undefined") {
|
|
134
|
+
try {
|
|
135
|
+
return new OffscreenCanvas(w, h);
|
|
136
|
+
}
|
|
137
|
+
catch {
|
|
138
|
+
// fall through
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
if (typeof document !== "undefined") {
|
|
142
|
+
const c = document.createElement("canvas");
|
|
143
|
+
c.width = w;
|
|
144
|
+
c.height = h;
|
|
145
|
+
return c;
|
|
146
|
+
}
|
|
147
|
+
return null;
|
|
148
|
+
}
|
|
149
|
+
async function canvasToDataURL(c) {
|
|
150
|
+
if (typeof OffscreenCanvas !== "undefined" && c instanceof OffscreenCanvas) {
|
|
151
|
+
try {
|
|
152
|
+
const blob = await c.convertToBlob({ type: "image/png" });
|
|
153
|
+
return await blobToDataURL(blob);
|
|
154
|
+
}
|
|
155
|
+
catch {
|
|
156
|
+
return null;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
if (typeof HTMLCanvasElement !== "undefined" && c instanceof HTMLCanvasElement) {
|
|
160
|
+
try {
|
|
161
|
+
return c.toDataURL("image/png");
|
|
162
|
+
}
|
|
163
|
+
catch {
|
|
164
|
+
return null;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
return null;
|
|
168
|
+
}
|
|
169
|
+
function blobToDataURL(blob) {
|
|
170
|
+
return new Promise((resolve, reject) => {
|
|
171
|
+
const fr = new FileReader();
|
|
172
|
+
fr.onload = () => resolve(typeof fr.result === "string" ? fr.result : "");
|
|
173
|
+
fr.onerror = () => reject(fr.error);
|
|
174
|
+
fr.readAsDataURL(blob);
|
|
175
|
+
});
|
|
176
|
+
}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.setupCamera = setupCamera;
|
|
37
|
+
const THREE = __importStar(require("three"));
|
|
38
|
+
// 相机方位约定(与几何 / UV 协调):
|
|
39
|
+
// - ExtrudeGeometry / slab 把 Shape 的 (0..baseW, 0..baseH) 作为顶点 (x,y,0),
|
|
40
|
+
// rectFrontUVGenerator 把 Shape.y=0 → uv.v=0、y=baseH → uv.v=1;texture.flipY=true
|
|
41
|
+
// 使 uv.v=1 取图像最顶行 → "图像顶部" 位于 three.js 世界 +Y。
|
|
42
|
+
// - PowerPoint 的 perspectiveAbove / perspectiveRelaxedModerately 等 "Above" 类语义是
|
|
43
|
+
// 相机在物体上方俯视,"图像顶部应远离相机"(梯形上窄下宽)。要让 lat=-15° 这样的
|
|
44
|
+
// 负值产生这种效果,相机必须落在世界 -Y 方向(远离图像顶部、贴近底部),即
|
|
45
|
+
// eye.y = +D·sin(lat)(lat<0 → eye.y<0)。
|
|
46
|
+
// - `<a:backdrop>` 把场景平面从默认 +Z 旋到 norm,并用 up 覆盖相机 up。identity / 全 0
|
|
47
|
+
// 在 resolveBackdrop 已滤掉,这里只处理非默认。
|
|
48
|
+
function setupCamera(cam, target, distance, backdrop) {
|
|
49
|
+
const { lat, lon, rev, fov, isOrtho } = cam;
|
|
50
|
+
const latRad = THREE.MathUtils.degToRad(lat);
|
|
51
|
+
const lonRad = THREE.MathUtils.degToRad(lon);
|
|
52
|
+
const revRad = THREE.MathUtils.degToRad(rev);
|
|
53
|
+
const lookAt = backdrop
|
|
54
|
+
? new THREE.Vector3(target.x + backdrop.target.x, target.y + backdrop.target.y, target.z + backdrop.target.z)
|
|
55
|
+
: target.clone();
|
|
56
|
+
const eye = new THREE.Vector3();
|
|
57
|
+
eye.x = distance * Math.cos(latRad) * Math.sin(lonRad);
|
|
58
|
+
eye.y = distance * Math.sin(latRad);
|
|
59
|
+
eye.z = distance * Math.cos(latRad) * Math.cos(lonRad);
|
|
60
|
+
eye.add(lookAt);
|
|
61
|
+
const basisQ = backdrop?.forward &&
|
|
62
|
+
new THREE.Quaternion().setFromUnitVectors(new THREE.Vector3(0, 0, 1), new THREE.Vector3(backdrop.forward.x, backdrop.forward.y, backdrop.forward.z));
|
|
63
|
+
if (basisQ) {
|
|
64
|
+
eye.sub(lookAt).applyQuaternion(basisQ).add(lookAt);
|
|
65
|
+
}
|
|
66
|
+
const up = new THREE.Vector3(0, -1, 0).applyAxisAngle(new THREE.Vector3(0, 0, 1), revRad);
|
|
67
|
+
if (basisQ)
|
|
68
|
+
up.applyQuaternion(basisQ);
|
|
69
|
+
if (backdrop?.up)
|
|
70
|
+
up.set(backdrop.up.x, backdrop.up.y, backdrop.up.z);
|
|
71
|
+
let camera;
|
|
72
|
+
if (isOrtho) {
|
|
73
|
+
const half = distance * 0.6;
|
|
74
|
+
const ortho = new THREE.OrthographicCamera(-half, half, half, -half, 0.1, distance * 10);
|
|
75
|
+
ortho.position.copy(eye);
|
|
76
|
+
ortho.up.copy(up);
|
|
77
|
+
ortho.lookAt(lookAt);
|
|
78
|
+
ortho.updateProjectionMatrix();
|
|
79
|
+
camera = ortho;
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
const persp = new THREE.PerspectiveCamera(fov, 1, 0.1, distance * 10);
|
|
83
|
+
persp.position.copy(eye);
|
|
84
|
+
persp.up.copy(up);
|
|
85
|
+
persp.lookAt(lookAt);
|
|
86
|
+
persp.updateProjectionMatrix();
|
|
87
|
+
camera = persp;
|
|
88
|
+
}
|
|
89
|
+
if (cam.zoom !== undefined && cam.zoom > 0) {
|
|
90
|
+
camera.zoom = cam.zoom;
|
|
91
|
+
camera.updateProjectionMatrix();
|
|
92
|
+
}
|
|
93
|
+
return { camera, isOrtho };
|
|
94
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.CAMERA_PRESETS = exports.SHAPE_3D_PAD = exports.IMAGE_3D_PAD = exports.shape3DPad = exports.shape3DPathD = exports.shape3DInfo = exports.shapeSupports3D = exports.applyTextureCrop = exports.getCachedImageTexture = exports.loadImageTexture = exports.createSceneCamera = exports.buildThreeScene = exports.resolveBackdrop = exports.resolveLightRig = exports.resolveSp3D = exports.resolveCamera = exports.resolveScene3D = exports.needs3DBake = exports.needs3DRender = exports.createBake3DRuntime = exports.bakeSp3d = void 0;
|
|
18
|
+
__exportStar(require("./types"), exports);
|
|
19
|
+
var bake_sp3d_1 = require("./bake-sp3d");
|
|
20
|
+
Object.defineProperty(exports, "bakeSp3d", { enumerable: true, get: function () { return bake_sp3d_1.bakeSp3d; } });
|
|
21
|
+
var runtime_1 = require("./runtime");
|
|
22
|
+
Object.defineProperty(exports, "createBake3DRuntime", { enumerable: true, get: function () { return runtime_1.createBake3DRuntime; } });
|
|
23
|
+
Object.defineProperty(exports, "needs3DRender", { enumerable: true, get: function () { return runtime_1.needs3DRender; } });
|
|
24
|
+
Object.defineProperty(exports, "needs3DBake", { enumerable: true, get: function () { return runtime_1.needs3DBake; } });
|
|
25
|
+
// PowerPoint 效果层 + 共享场景构建器(live WebGLShapeBackend 复用)。
|
|
26
|
+
var resolve_1 = require("./resolve");
|
|
27
|
+
Object.defineProperty(exports, "resolveScene3D", { enumerable: true, get: function () { return resolve_1.resolveScene3D; } });
|
|
28
|
+
Object.defineProperty(exports, "resolveCamera", { enumerable: true, get: function () { return resolve_1.resolveCamera; } });
|
|
29
|
+
Object.defineProperty(exports, "resolveSp3D", { enumerable: true, get: function () { return resolve_1.resolveSp3D; } });
|
|
30
|
+
Object.defineProperty(exports, "resolveLightRig", { enumerable: true, get: function () { return resolve_1.resolveLightRig; } });
|
|
31
|
+
Object.defineProperty(exports, "resolveBackdrop", { enumerable: true, get: function () { return resolve_1.resolveBackdrop; } });
|
|
32
|
+
var scene_builder_1 = require("./scene-builder");
|
|
33
|
+
Object.defineProperty(exports, "buildThreeScene", { enumerable: true, get: function () { return scene_builder_1.buildThreeScene; } });
|
|
34
|
+
Object.defineProperty(exports, "createSceneCamera", { enumerable: true, get: function () { return scene_builder_1.createSceneCamera; } });
|
|
35
|
+
Object.defineProperty(exports, "loadImageTexture", { enumerable: true, get: function () { return scene_builder_1.loadImageTexture; } });
|
|
36
|
+
Object.defineProperty(exports, "getCachedImageTexture", { enumerable: true, get: function () { return scene_builder_1.getCachedImageTexture; } });
|
|
37
|
+
var material_1 = require("./material");
|
|
38
|
+
Object.defineProperty(exports, "applyTextureCrop", { enumerable: true, get: function () { return material_1.applyTextureCrop; } });
|
|
39
|
+
var shape_path_1 = require("./shape-path");
|
|
40
|
+
Object.defineProperty(exports, "shapeSupports3D", { enumerable: true, get: function () { return shape_path_1.shapeSupports3D; } });
|
|
41
|
+
Object.defineProperty(exports, "shape3DInfo", { enumerable: true, get: function () { return shape_path_1.shape3DInfo; } });
|
|
42
|
+
Object.defineProperty(exports, "shape3DPathD", { enumerable: true, get: function () { return shape_path_1.shape3DPathD; } });
|
|
43
|
+
Object.defineProperty(exports, "shape3DPad", { enumerable: true, get: function () { return shape_path_1.shape3DPad; } });
|
|
44
|
+
Object.defineProperty(exports, "IMAGE_3D_PAD", { enumerable: true, get: function () { return shape_path_1.IMAGE_3D_PAD; } });
|
|
45
|
+
Object.defineProperty(exports, "SHAPE_3D_PAD", { enumerable: true, get: function () { return shape_path_1.SHAPE_3D_PAD; } });
|
|
46
|
+
var presets_1 = require("./presets");
|
|
47
|
+
Object.defineProperty(exports, "CAMERA_PRESETS", { enumerable: true, get: function () { return presets_1.CAMERA_PRESETS; } });
|