@codeuxai/codeux 0.8.1 → 0.8.3
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 +128 -45
- package/dashboard/dist/assets/{AgentAvatarScene-DAjdNR8q.js → AgentAvatarScene-CdYNjBsU.js} +1 -1
- package/dashboard/dist/assets/{AgentsPage-dG7HaQww.js → AgentsPage-BKJ1Zdbv.js} +2 -2
- package/dashboard/dist/assets/{BackgroundManager-CxjNC7ME.js → BackgroundManager-B4A4jACF.js} +1 -1
- package/dashboard/dist/assets/{BranchNameSchemeEditor-wfv629Ml.js → BranchNameSchemeEditor-DfnH2VYW.js} +1 -1
- package/dashboard/dist/assets/{BrowserPage-5eFh6pZt.js → BrowserPage-BxfAsG3M.js} +1 -1
- package/dashboard/dist/assets/{ChatPage-CfunB4-0.js → ChatPage-MXugCDvS.js} +1 -1
- package/dashboard/dist/assets/{ErrorPage-CEHtK2Hk.js → ErrorPage-Y-fEDzly.js} +1 -1
- package/dashboard/dist/assets/{FileBrowserPage-BOVIkrrv.js → FileBrowserPage-B4JEdW9B.js} +1 -1
- package/dashboard/dist/assets/{KnowledgePage-CeKSiAys.js → KnowledgePage-DVbW7o61.js} +1 -1
- package/dashboard/dist/assets/{ListWindowSelector-cshzGFot.js → ListWindowSelector-CPMgebqM.js} +1 -1
- package/dashboard/dist/assets/{MemoryPage-Cctk6NFp.js → MemoryPage-C3RWZJL5.js} +1 -1
- package/dashboard/dist/assets/{OverviewTelemetry-D_V7-M2H.js → OverviewTelemetry-Cy9vzhdY.js} +1 -1
- package/dashboard/dist/assets/{ProjectsPage-D8ICYJVv.js → ProjectsPage-RmR2LMuR.js} +1 -1
- package/dashboard/dist/assets/{SchedulerPage-BM0sGrEZ.js → SchedulerPage-Bg08X7Tm.js} +1 -1
- package/dashboard/dist/assets/{SettingsPage-BlDplYC7.js → SettingsPage-DzE_F7Kw.js} +1 -1
- package/dashboard/dist/assets/{SprintBoatRace-DaP10JYZ.js → SprintBoatRace-BeZOItMO.js} +1 -1
- package/dashboard/dist/assets/{SprintDag-DbxJdjBK.js → SprintDag-vF8f33gn.js} +1 -1
- package/dashboard/dist/assets/{SprintsPage-XGhd04Sn.js → SprintsPage-bRHQPfWP.js} +1 -1
- package/dashboard/dist/assets/{StatsPage-CrSwtTGq.js → StatsPage-BZl_tzUr.js} +1 -1
- package/dashboard/dist/assets/{TasksPage-DNpVBxt6.js → TasksPage-rLMlkgxX.js} +1 -1
- package/dashboard/dist/assets/{index-BViPTeJx.js → index-DdNzHP9F.js} +5 -5
- package/dashboard/dist/assets/{monaco.contribution-KtWzfVt5.js → monaco.contribution-2KFAi0p0.js} +2 -2
- package/dashboard/dist/assets/{tsMode-CalcmZZa.js → tsMode-dZI5bz0O.js} +1 -1
- package/dashboard/dist/index.html +1 -1
- package/dist/infrastructure/providers/cli/provider-logs/opencode-log-parser.js +174 -20
- package/dist/infrastructure/providers/cli/provider-runner.js +51 -0
- package/dist/infrastructure/providers/cli/provider-usage.js +39 -6
- package/dist/infrastructure/providers/cli/workspace-artifact-service.js +17 -7
- package/dist/repositories/execution-repository.js +77 -0
- package/dist/services/provider-execution-service.js +10 -1
- package/dist/services/runtime-startup-recovery-service.js +170 -0
- package/dist/services/sprint-task-dispatch-service.js +7 -0
- package/docs/getting-started/quickstart.md +14 -3
- package/docs/operations/runbook.md +2 -0
- package/docs/settings/configuration-and-storage.md +2 -0
- package/package.json +1 -1
- package/.code-ux/debug.log +0 -97190
package/README.md
CHANGED
|
@@ -1,37 +1,69 @@
|
|
|
1
1
|
# Code UX
|
|
2
2
|
|
|
3
|
-
**
|
|
3
|
+
**The open-source, container-first agentic coding runtime.**
|
|
4
4
|
|
|
5
|
-
[](https://www.npmjs.com/package/@codeuxai/codeux)
|
|
6
|
+
[](https://www.npmjs.com/package/@codeuxai/codeux)
|
|
7
|
+
[](https://github.com/codeux-ai/codeux/stargazers)
|
|
8
|
+
[](./LICENSE)
|
|
6
9
|
[](https://nodejs.org/)
|
|
7
|
-
[](https://pnpm.io/)
|
|
8
|
-
[](./LICENSE)
|
|
9
10
|
|
|
10
|
-
Code UX is a local-first orchestration platform for running serious AI-assisted
|
|
11
|
+
Code UX is a **local-first, MIT-licensed** orchestration platform for running serious AI-assisted
|
|
12
|
+
engineering work. It turns a feature, refactor, migration, QA pass, or CI repair into a managed
|
|
13
|
+
sprint: planned, routed to the right agent provider, executed in isolated workspaces, tracked in a
|
|
14
|
+
live dashboard, reviewed through Git and CI, and surfaced back to the developer with clear
|
|
15
|
+
intervention points.
|
|
11
16
|
|
|
12
|
-
The
|
|
17
|
+
The idea is simple: **a token-efficient agentic runtime built around how professional programmers and
|
|
18
|
+
agencies already work.** Code UX does not try to replace the tools developers love — it coordinates
|
|
19
|
+
them. Jules, Claude Code, Codex CLI, Gemini CLI, Qwen Code, OpenCode, Antigravity CLI, MCP tools,
|
|
20
|
+
GitHub, GitLab, Jira, Docker, and browser previews all become part of one governed runtime.
|
|
13
21
|
|
|
14
|
-
|
|
22
|
+
No accounts, no seats, no usage limits. Everything runs on your machine. **If it saves you time,
|
|
23
|
+
[star the repo](https://github.com/codeux-ai/codeux) — it genuinely helps.**
|
|
15
24
|
|
|
16
|
-
|
|
25
|
+
## Download
|
|
17
26
|
|
|
18
|
-
|
|
27
|
+
The recommended path is the desktop app. Download the latest installer for your platform from
|
|
28
|
+
[GitHub Releases](https://github.com/codeux-ai/codeux/releases/latest).
|
|
29
|
+
|
|
30
|
+
| Platform | Artifact | Notes |
|
|
19
31
|
| --- | --- | --- |
|
|
20
|
-
| Windows |
|
|
21
|
-
| macOS |
|
|
22
|
-
| Linux |
|
|
32
|
+
| **Windows** | `Code-UX-<version>-win-x64.exe` | Assisted installer. On first run, Windows SmartScreen may warn because the build is not yet code-signed — choose **More info → Run anyway**. |
|
|
33
|
+
| **macOS** | `Code-UX-<version>-mac-arm64.dmg` (or `.zip`) | Apple Silicon build. |
|
|
34
|
+
| **Linux** | `Code-UX-<version>-linux-x86_64.AppImage`, `…-linux-amd64.deb`, or `…-linux-x64.tar.gz` | Use the AppImage for portable use or the `.deb` for Debian/Ubuntu-style installs. |
|
|
23
35
|
|
|
24
|
-
After launch, Code UX opens its local dashboard
|
|
36
|
+
After launch, Code UX opens its local dashboard at:
|
|
25
37
|
|
|
26
38
|
```text
|
|
27
39
|
http://localhost:4444
|
|
28
40
|
```
|
|
29
41
|
|
|
42
|
+
### npm (CLI)
|
|
43
|
+
|
|
44
|
+
Prefer the command line? Install the runtime globally from npm:
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
npm i -g @codeuxai/codeux
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
This installs the `codeux` command — the orchestration server, MCP server, and live dashboard (the
|
|
51
|
+
same runtime that powers the desktop app, without the Electron shell). Start it with:
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
codeux
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Then open the dashboard at `http://localhost:4444`. Requires **Node.js 22 or newer**; Docker is
|
|
58
|
+
recommended for virtual worker execution and required for preview containers. Run `codeux --help` for
|
|
59
|
+
the full list of flags and environment variables.
|
|
60
|
+
|
|
30
61
|
Need to build or run from source? Jump to [Run From Source](#run-from-source).
|
|
31
62
|
|
|
32
63
|
## What Code UX Does
|
|
33
64
|
|
|
34
|
-
Code UX is an agentic desktop runtime with a full dashboard for projects, sprints, agents, settings,
|
|
65
|
+
Code UX is an agentic desktop runtime with a full dashboard for projects, sprints, agents, settings,
|
|
66
|
+
live execution, memory, telemetry, Git state, and browser previews.
|
|
35
67
|
|
|
36
68
|
At a high level, Code UX:
|
|
37
69
|
|
|
@@ -48,9 +80,16 @@ At a high level, Code UX:
|
|
|
48
80
|
|
|
49
81
|
## Why It Exists
|
|
50
82
|
|
|
51
|
-
Most current agentic coding tools try to be a single autonomous agent for everything. They push more
|
|
83
|
+
Most current agentic coding tools try to be a single autonomous agent for everything. They push more
|
|
84
|
+
context into longer conversations, ask a model to reason through every operational step, and burn
|
|
85
|
+
tokens on work that should be deterministic: branch setup, dependency ordering, merge checks, CI
|
|
86
|
+
polling, PR state, reruns, conflict detection, and status bookkeeping.
|
|
52
87
|
|
|
53
|
-
Code UX takes the opposite path. It keeps the coding path predictable and moves the repetitive
|
|
88
|
+
Code UX takes the opposite path. It keeps the coding path predictable and moves the repetitive
|
|
89
|
+
operational work into software. The runtime plans work as a dependency-aware DAG, starts only the
|
|
90
|
+
tasks that are ready, tracks each execution in durable state, watches Git and CI programmatically,
|
|
91
|
+
and automates merge gates wherever policy allows. Agents spend their tokens on the parts that
|
|
92
|
+
actually need judgment: planning, implementation, review, repair, and conflict resolution.
|
|
54
93
|
|
|
55
94
|
That difference matters at professional scale:
|
|
56
95
|
|
|
@@ -62,15 +101,21 @@ That difference matters at professional scale:
|
|
|
62
101
|
- Short-lived worker containers isolate agent execution and are destroyed after runs, reducing long-lived access and keeping company workspaces easier to govern.
|
|
63
102
|
- CI failures, merge conflicts, PR gates, issue imports, sprint exports, and intervention states are handled by the runtime instead of repeatedly explained to a model.
|
|
64
103
|
|
|
65
|
-
For agencies and senior engineers, this turns AI coding from an ad hoc chat workflow into an
|
|
66
|
-
|
|
67
|
-
|
|
104
|
+
For agencies and senior engineers, this turns AI coding from an ad hoc chat workflow into an
|
|
105
|
+
operating system for delivery. Jira, GitHub, and GitLab issue imports let teams start from the
|
|
106
|
+
project-management systems they already use. Sprint planning turns client requests and backlog items
|
|
107
|
+
into executable work. Containerized workers keep repositories separate. Sprint-aware memory carries
|
|
108
|
+
forward what matters without bloating every provider call. Live Browser previews make frontend
|
|
109
|
+
progress inspectable without terminal juggling. The dashboard gives leads a way to supervise many
|
|
110
|
+
moving parts without reading every token of every agent conversation.
|
|
68
111
|
|
|
69
112
|
## Core Features
|
|
70
113
|
|
|
71
114
|
### Multi-provider agent routing
|
|
72
115
|
|
|
73
|
-
Route work across all supported providers and models. Each provider can be configured with weights,
|
|
116
|
+
Route work across all supported providers and models. Each provider can be configured with weights,
|
|
117
|
+
concurrency limits, thinking mode, model defaults, credentials, Docker auth mounting, and
|
|
118
|
+
route-specific overrides.
|
|
74
119
|
|
|
75
120
|
| Provider | Runtime type | Typical role |
|
|
76
121
|
| --- | --- | --- |
|
|
@@ -82,11 +127,15 @@ Route work across all supported providers and models. Each provider can be confi
|
|
|
82
127
|
| OpenCode | Local OpenCode CLI | Multi-model CLI routing, OpenRouter-style provider flexibility, custom endpoints. |
|
|
83
128
|
| Antigravity | Local Antigravity CLI | CLI routing for teams that use Antigravity in their development flow. |
|
|
84
129
|
|
|
85
|
-
Code UX brings the same centralized routing, agents, memory, and tool setup to the provider CLIs
|
|
130
|
+
Code UX brings the same centralized routing, agents, memory, and tool setup to the provider CLIs
|
|
131
|
+
teams already use: Claude Code, Codex CLI, Gemini CLI, Qwen Code, OpenCode, and Antigravity CLI.
|
|
86
132
|
|
|
87
133
|
### Docker-first execution
|
|
88
134
|
|
|
89
|
-
The default runtime is containerized. Code UX executes CLI providers in Docker-backed workspaces
|
|
135
|
+
The default runtime is containerized. Code UX executes CLI providers in Docker-backed workspaces
|
|
136
|
+
using a shared, configurable runtime image and setup flow. This keeps agent runs isolated from the
|
|
137
|
+
host while still allowing controlled access to repository checkouts, Git credentials, provider auth,
|
|
138
|
+
and runtime caches.
|
|
90
139
|
|
|
91
140
|
Docker-backed execution provides:
|
|
92
141
|
|
|
@@ -97,13 +146,22 @@ Docker-backed execution provides:
|
|
|
97
146
|
- Isolated merge-conflict repair and CI autofix flows.
|
|
98
147
|
- Startup cleanup for stale containers, workspaces, and preview sessions.
|
|
99
148
|
|
|
100
|
-
Host execution is available for provider CLIs when speed or local tooling access is more important
|
|
149
|
+
Host execution is available for provider CLIs when speed or local tooling access is more important
|
|
150
|
+
than isolation.
|
|
101
151
|
|
|
102
152
|
### Security by deterministic isolation
|
|
103
153
|
|
|
104
|
-
Code UX is designed for
|
|
154
|
+
Code UX is designed for environments where agent execution must be understandable, bounded, and
|
|
155
|
+
auditable. The runtime avoids handing an autonomous agent an open-ended workspace and hoping it
|
|
156
|
+
behaves correctly. Instead, Code UX keeps the workflow deterministic: tasks are dispatched through
|
|
157
|
+
known routes, dependencies are explicit, merge rules are enforced by policy, CI state is checked
|
|
158
|
+
programmatically, and human intervention points are surfaced when the runtime cannot safely proceed.
|
|
105
159
|
|
|
106
|
-
The container model strengthens that control. Provider CLIs run in short-lived Docker workspaces by
|
|
160
|
+
The container model strengthens that control. Provider CLIs run in short-lived Docker workspaces by
|
|
161
|
+
default, scoped to the task or repair flow they are handling. After the run, Code UX captures the
|
|
162
|
+
resulting patch, memory learnings, logs, and execution state, then cleans up the worker environment.
|
|
163
|
+
Credentials can be mounted deliberately, caches can be shared without exposing full host state, and
|
|
164
|
+
stale containers are pruned on startup.
|
|
107
165
|
|
|
108
166
|
For teams, this creates a stronger security posture than persistent, all-purpose agent sandboxes:
|
|
109
167
|
|
|
@@ -115,7 +173,9 @@ For teams, this creates a stronger security posture than persistent, all-purpose
|
|
|
115
173
|
|
|
116
174
|
### Live Browser preview containers
|
|
117
175
|
|
|
118
|
-
Code UX can start one preview container per sprint and render the running app inside the dashboard.
|
|
176
|
+
Code UX can start one preview container per sprint and render the running app inside the dashboard.
|
|
177
|
+
Preview sessions are isolated by project and sprint, receive their own local origin, proxy HTTP and
|
|
178
|
+
websocket traffic, and can be rebuilt as tasks complete.
|
|
119
179
|
|
|
120
180
|
The Browser page supports:
|
|
121
181
|
|
|
@@ -128,7 +188,9 @@ The Browser page supports:
|
|
|
128
188
|
|
|
129
189
|
### Sprint orchestration
|
|
130
190
|
|
|
131
|
-
Sprints are database-backed and can also round-trip through markdown for portable, reviewable task
|
|
191
|
+
Sprints are database-backed and can also round-trip through markdown for portable, reviewable task
|
|
192
|
+
definitions. The orchestrator understands task dependencies, branch preparation, provider assignment,
|
|
193
|
+
worker attention, CI gates, QA state, merge state, and terminal sprint outcomes.
|
|
132
194
|
|
|
133
195
|
Important sprint capabilities include:
|
|
134
196
|
|
|
@@ -142,7 +204,9 @@ Important sprint capabilities include:
|
|
|
142
204
|
|
|
143
205
|
### Sprint-aware memory
|
|
144
206
|
|
|
145
|
-
Code UX treats memory as part of the runtime, not as an ever-growing prompt dump. It separates
|
|
207
|
+
Code UX treats memory as part of the runtime, not as an ever-growing prompt dump. It separates
|
|
208
|
+
short-term sprint memory from long-term project memory so agents can learn from completed work
|
|
209
|
+
without carrying irrelevant history into every task.
|
|
146
210
|
|
|
147
211
|
The memory architecture is designed for token efficiency:
|
|
148
212
|
|
|
@@ -151,15 +215,16 @@ The memory architecture is designed for token efficiency:
|
|
|
151
215
|
- Planning, coding, QA, CI repair, and merge-conflict prompts can receive scoped memory instead of a full transcript.
|
|
152
216
|
- Memory inspection in the dashboard lets operators see what the runtime has learned and where that context came from.
|
|
153
217
|
|
|
154
|
-
This keeps context focused: a worker fixing a CI failure gets the relevant sprint and project
|
|
218
|
+
This keeps context focused: a worker fixing a CI failure gets the relevant sprint and project
|
|
219
|
+
learnings, not a noisy archive of unrelated conversations.
|
|
155
220
|
|
|
156
221
|
### Professional dashboard
|
|
157
222
|
|
|
158
|
-
The dashboard is a real-time Preact interface served locally by the backend and packaged inside the
|
|
223
|
+
The dashboard is a real-time Preact interface served locally by the backend and packaged inside the
|
|
224
|
+
desktop app. It is designed for active operation, not passive reporting.
|
|
159
225
|
|
|
160
226
|
Main surfaces include:
|
|
161
227
|
|
|
162
|
-
- **Overview**: cross-project status, active runs, telemetry, and runtime health.
|
|
163
228
|
- **Projects**: local and Git URL project creation, setup-agent initialization, project selection, and repository metadata.
|
|
164
229
|
- **Sprints**: sprint composer, quicksprint templates, imported issues, live controls, status ledger, gallery, filters, and exports.
|
|
165
230
|
- **Tasks**: task creation, dependency editing, board/list views, and sprint-scoped task management.
|
|
@@ -169,7 +234,7 @@ Main surfaces include:
|
|
|
169
234
|
- **Scheduler**: scheduled sprints, quicksprints, and project messages with recurrence support.
|
|
170
235
|
- **File Browser**: project file inspection and repository navigation from the dashboard.
|
|
171
236
|
- **Memory**: short-term and long-term agent memory inspection.
|
|
172
|
-
- **Stats**: token, time, provider, purpose, task, and sprint analytics.
|
|
237
|
+
- **Stats**: token, time, provider, purpose, task, and sprint analytics, plus Git telemetry.
|
|
173
238
|
- **Settings**: scoped system/project/sprint configuration, provider setup, route mapping, Git integrations, Docker controls, appearance, scheduler, and browser preview settings.
|
|
174
239
|
- **Browser**: embedded sprint preview containers with logs, controls, and editable startup scripts.
|
|
175
240
|
|
|
@@ -187,7 +252,9 @@ Code UX is built around existing professional delivery mechanics:
|
|
|
187
252
|
|
|
188
253
|
### Centralized MCP and agent setup
|
|
189
254
|
|
|
190
|
-
Code UX gives teams one place to configure the tools and agents used by all their favorite coding
|
|
255
|
+
Code UX gives teams one place to configure the tools and agents used by all their favorite coding
|
|
256
|
+
CLIs. Instead of maintaining separate agent files, MCP tool connections, and setup instructions for
|
|
257
|
+
every provider, Code UX centralizes that configuration at the system, project, and sprint level.
|
|
191
258
|
|
|
192
259
|
MCP support is provider-wide:
|
|
193
260
|
|
|
@@ -196,13 +263,22 @@ MCP support is provider-wide:
|
|
|
196
263
|
- Gemini, Codex, Claude Code, Qwen Code, OpenCode, and Antigravity CLI can receive the same tool surface without hand-configuring each CLI separately.
|
|
197
264
|
- Containerized runs get the same project MCP setup as host runs, while still keeping execution scoped to the active project and task.
|
|
198
265
|
|
|
199
|
-
|
|
266
|
+
Code UX itself also runs as an **MCP server** (over stdio or streamable HTTP), so MCP-aware clients
|
|
267
|
+
can drive the runtime directly. See the [MCP clients guide](./docs-web/user/mcp-clients.md).
|
|
268
|
+
|
|
269
|
+
Agent setup works the same way. Project agent presets live in Code UX, can be edited from the
|
|
270
|
+
dashboard, synced to project markdown, and routed per invocation type. A team can define a planning
|
|
271
|
+
agent, implementation agent, QA agent, CI repair agent, merge-conflict agent, and project-specific
|
|
272
|
+
specialists once, then reuse them across all supported provider CLIs.
|
|
200
273
|
|
|
201
|
-
For new repositories, the Project Setup Agent can bootstrap a tailored set of specialized agents,
|
|
274
|
+
For new repositories, the Project Setup Agent can bootstrap a tailored set of specialized agents,
|
|
275
|
+
quicksprint templates, preview scripts, and CI guidance. That makes project onboarding much faster:
|
|
276
|
+
add the repository, let Code UX inspect the project, generate the right operating structure, and
|
|
277
|
+
start planning sprint work without rebuilding the same agent setup for every CLI.
|
|
202
278
|
|
|
203
279
|
## Typical Workflow
|
|
204
280
|
|
|
205
|
-
1. Install Code UX from Releases and open the dashboard.
|
|
281
|
+
1. Install Code UX from Releases (or npm) and open the dashboard.
|
|
206
282
|
2. Add a local repository or clone a Git URL into a managed project.
|
|
207
283
|
3. Configure provider credentials and choose Docker or host execution for each provider.
|
|
208
284
|
4. Create a sprint from a prompt, linked issue set, or quicksprint template.
|
|
@@ -213,13 +289,14 @@ For new repositories, the Project Setup Agent can bootstrap a tailored set of sp
|
|
|
213
289
|
|
|
214
290
|
## Documentation
|
|
215
291
|
|
|
216
|
-
- [Documentation index](./docs/index.md)
|
|
217
292
|
- [User quickstart](./docs-web/user/quickstart.md)
|
|
293
|
+
- [Installation](./docs-web/user/installation.md)
|
|
218
294
|
- [Providers and models](./docs-web/user/providers-and-models.md)
|
|
219
|
-
- [
|
|
220
|
-
- [
|
|
295
|
+
- [Sprint orchestration](./docs-web/user/sprint-orchestration.md)
|
|
296
|
+
- [MCP clients](./docs-web/user/mcp-clients.md)
|
|
221
297
|
- [Configuration](./docs-web/developer/configuration.md)
|
|
222
298
|
- [Building from source](./docs-web/developer/building-from-source.md)
|
|
299
|
+
- [Architecture overview](./docs-web/architecture/index.md)
|
|
223
300
|
|
|
224
301
|
## Run From Source
|
|
225
302
|
|
|
@@ -243,7 +320,10 @@ pnpm install
|
|
|
243
320
|
|
|
244
321
|
### Configure providers
|
|
245
322
|
|
|
246
|
-
You can start Code UX without API keys or environment variables. When you are ready to run agent
|
|
323
|
+
You can start Code UX without API keys or environment variables. When you are ready to run agent
|
|
324
|
+
work, configure providers from the dashboard. For local CLI providers, authenticate with the
|
|
325
|
+
provider's normal CLI login flow; Code UX can detect and optionally mount local auth for Gemini,
|
|
326
|
+
Codex, Claude Code, Qwen Code, OpenCode, and Antigravity CLI.
|
|
247
327
|
|
|
248
328
|
### Run in development
|
|
249
329
|
|
|
@@ -251,11 +331,7 @@ You can start Code UX without API keys or environment variables. When you are re
|
|
|
251
331
|
pnpm run dev
|
|
252
332
|
```
|
|
253
333
|
|
|
254
|
-
Then open:
|
|
255
|
-
|
|
256
|
-
```text
|
|
257
|
-
http://localhost:4444
|
|
258
|
-
```
|
|
334
|
+
Then open `http://localhost:4444`.
|
|
259
335
|
|
|
260
336
|
### Build and run
|
|
261
337
|
|
|
@@ -285,6 +361,13 @@ GitHub Actions also runs the high-severity dependency audit after the consolidat
|
|
|
285
361
|
pnpm run audit
|
|
286
362
|
```
|
|
287
363
|
|
|
364
|
+
## Contributing
|
|
365
|
+
|
|
366
|
+
Code UX is open source and contributions are welcome. Open an
|
|
367
|
+
[issue](https://github.com/codeux-ai/codeux/issues) to report a bug or propose a feature, or send a
|
|
368
|
+
pull request. If the project is useful to you, the simplest way to help is to
|
|
369
|
+
**[star it on GitHub](https://github.com/codeux-ai/codeux)**.
|
|
370
|
+
|
|
288
371
|
## License
|
|
289
372
|
|
|
290
373
|
Code UX is released under the [MIT License](./LICENSE).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime-Cyuzqnbw.js";import{a as t,h as n,w as r,x as i,y as a}from"./vendor-Dl0fhdV0.js";import{$n as o,An as s,Bn as c,Dn as l,En as u,Fn as d,Hn as f,In as p,Ln as m,Mn as h,Nn as g,On as _,Pn as v,Rn as y,er as b,jn as x,kn as S,nr as C,tr as w,zn as T}from"./index-BViPTeJx.js";import{A as E,C as D,D as O,E as k,M as A,O as j,T as M,_ as N,a as P,b as F,c as I,d as L,f as R,g as z,h as B,i as V,j as ee,k as te,l as H,m as ne,n as re,p as U,r as W,s as G,t as ie,v as ae,w as K,x as oe,y as se}from"./WebGLRenderer-D904dTMp.js";import{n as ce,t as le}from"./Points-T2ogl268.js";var ue=class extends se{constructor(e,t=1){super(),this.isLight=!0,this.type=`Light`,this.color=new N(e),this.intensity=t}dispose(){this.dispatchEvent({type:`dispose`})}copy(e,t){return super.copy(e,t),this.color.copy(e.color),this.intensity=e.intensity,this}toJSON(e){let t=super.toJSON(e);return t.object.color=this.color.getHex(),t.object.intensity=this.intensity,t}},de=class extends ue{constructor(e,t){super(e,t),this.isAmbientLight=!0,this.type=`AmbientLight`}},fe=new oe,pe=new k,me=new k,he=class{constructor(e){this.camera=e,this.intensity=1,this.bias=0,this.biasNode=null,this.normalBias=0,this.radius=1,this.blurSamples=8,this.mapSize=new M(512,512),this.mapType=A,this.map=null,this.mapPass=null,this.matrix=new oe,this.autoUpdate=!0,this.needsUpdate=!1,this._frustum=new U,this._frameExtents=new M(1,1),this._viewportCount=1,this._viewports=[new ne(0,0,1,1)]}getViewportCount(){return this._viewportCount}getFrustum(){return this._frustum}updateMatrices(e){let t=this.camera,n=this.matrix;pe.setFromMatrixPosition(e.matrixWorld),t.position.copy(pe),me.setFromMatrixPosition(e.target.matrixWorld),t.lookAt(me),t.updateMatrixWorld(),fe.multiplyMatrices(t.projectionMatrix,t.matrixWorldInverse),this._frustum.setFromProjectionMatrix(fe,t.coordinateSystem,t.reversedDepth),t.coordinateSystem===2001||t.reversedDepth?n.set(.5,0,0,.5,0,.5,0,.5,0,0,1,0,0,0,0,1):n.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1),n.multiply(fe)}getViewport(e){return this._viewports[e]}getFrameExtents(){return this._frameExtents}dispose(){this.map&&this.map.dispose(),this.mapPass&&this.mapPass.dispose()}copy(e){return this.camera=e.camera.clone(),this.intensity=e.intensity,this.bias=e.bias,this.radius=e.radius,this.autoUpdate=e.autoUpdate,this.needsUpdate=e.needsUpdate,this.normalBias=e.normalBias,this.blurSamples=e.blurSamples,this.mapSize.copy(e.mapSize),this.biasNode=e.biasNode,this}clone(){return new this.constructor().copy(this)}toJSON(){let e={};return this.intensity!==1&&(e.intensity=this.intensity),this.bias!==0&&(e.bias=this.bias),this.normalBias!==0&&(e.normalBias=this.normalBias),this.radius!==1&&(e.radius=this.radius),(this.mapSize.x!==512||this.mapSize.y!==512)&&(e.mapSize=this.mapSize.toArray()),e.camera=this.camera.toJSON(!1).object,delete e.camera.matrix,e}},ge=class extends he{constructor(){super(new z(-5,5,5,-5,.5,500)),this.isDirectionalLightShadow=!0}},_e=class extends ue{constructor(e,t){super(e,t),this.isDirectionalLight=!0,this.type=`DirectionalLight`,this.position.copy(se.DEFAULT_UP),this.updateMatrix(),this.target=new se,this.shadow=new ge}dispose(){super.dispose(),this.shadow.dispose()}copy(e){return super.copy(e),this.target=e.target.clone(),this.shadow=e.shadow.clone(),this}toJSON(e){let t=super.toJSON(e);return t.object.shadow=this.shadow.toJSON(),t.object.target=this.target.uuid,t}},ve=class extends ue{constructor(e,t,n){super(e,n),this.isHemisphereLight=!0,this.type=`HemisphereLight`,this.position.copy(se.DEFAULT_UP),this.updateMatrix(),this.groundColor=new N(t)}copy(e,t){return super.copy(e,t),this.groundColor.copy(e.groundColor),this}toJSON(e){let t=super.toJSON(e);return t.object.groundColor=this.groundColor.getHex(),t}},ye=class extends he{constructor(){super(new B(90,1,.5,500)),this.isPointLightShadow=!0}},be=class extends ue{constructor(e,t,n=0,r=2){super(e,t),this.isPointLight=!0,this.type=`PointLight`,this.distance=n,this.decay=r,this.shadow=new ye}get power(){return this.intensity*4*Math.PI}set power(e){this.intensity=e/(4*Math.PI)}dispose(){super.dispose(),this.shadow.dispose()}copy(e,t){return super.copy(e,t),this.distance=e.distance,this.decay=e.decay,this.shadow=e.shadow.clone(),this}toJSON(e){let t=super.toJSON(e);return t.object.distance=this.distance,t.object.decay=this.decay,t.object.shadow=this.shadow.toJSON(),t}},xe=class extends R{constructor(e){super(),this.isMeshStandardMaterial=!0,this.type=`MeshStandardMaterial`,this.defines={STANDARD:``},this.color=new N(16777215),this.roughness=1,this.metalness=0,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new N(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new M(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.roughnessMap=null,this.metalnessMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new F,this.envMapIntensity=1,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap=`round`,this.wireframeLinejoin=`round`,this.flatShading=!1,this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.defines={STANDARD:``},this.color.copy(e.color),this.roughness=e.roughness,this.metalness=e.metalness,this.map=e.map,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.emissive.copy(e.emissive),this.emissiveMap=e.emissiveMap,this.emissiveIntensity=e.emissiveIntensity,this.bumpMap=e.bumpMap,this.bumpScale=e.bumpScale,this.normalMap=e.normalMap,this.normalMapType=e.normalMapType,this.normalScale.copy(e.normalScale),this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.roughnessMap=e.roughnessMap,this.metalnessMap=e.metalnessMap,this.alphaMap=e.alphaMap,this.envMap=e.envMap,this.envMapRotation.copy(e.envMapRotation),this.envMapIntensity=e.envMapIntensity,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.flatShading=e.flatShading,this.fog=e.fog,this}},Se=class extends xe{constructor(e){super(),this.isMeshPhysicalMaterial=!0,this.defines={STANDARD:``,PHYSICAL:``},this.type=`MeshPhysicalMaterial`,this.anisotropyRotation=0,this.anisotropyMap=null,this.clearcoatMap=null,this.clearcoatRoughness=0,this.clearcoatRoughnessMap=null,this.clearcoatNormalScale=new M(1,1),this.clearcoatNormalMap=null,this.ior=1.5,Object.defineProperty(this,"reflectivity",{get:function(){return j(2.5*(this.ior-1)/(this.ior+1),0,1)},set:function(e){this.ior=(1+.4*e)/(1-.4*e)}}),this.iridescenceMap=null,this.iridescenceIOR=1.3,this.iridescenceThicknessRange=[100,400],this.iridescenceThicknessMap=null,this.sheenColor=new N(0),this.sheenColorMap=null,this.sheenRoughness=1,this.sheenRoughnessMap=null,this.transmissionMap=null,this.thickness=0,this.thicknessMap=null,this.attenuationDistance=1/0,this.attenuationColor=new N(1,1,1),this.specularIntensity=1,this.specularIntensityMap=null,this.specularColor=new N(1,1,1),this.specularColorMap=null,this._anisotropy=0,this._clearcoat=0,this._dispersion=0,this._iridescence=0,this._sheen=0,this._transmission=0,this.setValues(e)}get anisotropy(){return this._anisotropy}set anisotropy(e){this._anisotropy>0!=e>0&&this.version++,this._anisotropy=e}get clearcoat(){return this._clearcoat}set clearcoat(e){this._clearcoat>0!=e>0&&this.version++,this._clearcoat=e}get iridescence(){return this._iridescence}set iridescence(e){this._iridescence>0!=e>0&&this.version++,this._iridescence=e}get dispersion(){return this._dispersion}set dispersion(e){this._dispersion>0!=e>0&&this.version++,this._dispersion=e}get sheen(){return this._sheen}set sheen(e){this._sheen>0!=e>0&&this.version++,this._sheen=e}get transmission(){return this._transmission}set transmission(e){this._transmission>0!=e>0&&this.version++,this._transmission=e}copy(e){return super.copy(e),this.defines={STANDARD:``,PHYSICAL:``},this.anisotropy=e.anisotropy,this.anisotropyRotation=e.anisotropyRotation,this.anisotropyMap=e.anisotropyMap,this.clearcoat=e.clearcoat,this.clearcoatMap=e.clearcoatMap,this.clearcoatRoughness=e.clearcoatRoughness,this.clearcoatRoughnessMap=e.clearcoatRoughnessMap,this.clearcoatNormalMap=e.clearcoatNormalMap,this.clearcoatNormalScale.copy(e.clearcoatNormalScale),this.dispersion=e.dispersion,this.ior=e.ior,this.iridescence=e.iridescence,this.iridescenceMap=e.iridescenceMap,this.iridescenceIOR=e.iridescenceIOR,this.iridescenceThicknessRange=[...e.iridescenceThicknessRange],this.iridescenceThicknessMap=e.iridescenceThicknessMap,this.sheen=e.sheen,this.sheenColor.copy(e.sheenColor),this.sheenColorMap=e.sheenColorMap,this.sheenRoughness=e.sheenRoughness,this.sheenRoughnessMap=e.sheenRoughnessMap,this.transmission=e.transmission,this.transmissionMap=e.transmissionMap,this.thickness=e.thickness,this.thicknessMap=e.thicknessMap,this.attenuationDistance=e.attenuationDistance,this.attenuationColor.copy(e.attenuationColor),this.specularIntensity=e.specularIntensity,this.specularIntensityMap=e.specularIntensityMap,this.specularColor.copy(e.specularColor),this.specularColorMap=e.specularColorMap,this}},Ce=class e extends ae{constructor(e=1,t=32,n=0,r=Math.PI*2){super(),this.type=`CircleGeometry`,this.parameters={radius:e,segments:t,thetaStart:n,thetaLength:r},t=Math.max(3,t);let i=[],a=[],o=[],s=[],c=new k,l=new M;a.push(0,0,0),o.push(0,0,1),s.push(.5,.5);for(let i=0,u=3;i<=t;i++,u+=3){let d=n+i/t*r;c.x=e*Math.cos(d),c.y=e*Math.sin(d),a.push(c.x,c.y,c.z),o.push(0,0,1),l.x=(a[u]/e+1)/2,l.y=(a[u+1]/e+1)/2,s.push(l.x,l.y)}for(let e=1;e<=t;e++)i.push(e,e+1,0);this.setIndex(i),this.setAttribute(`position`,new K(a,3)),this.setAttribute(`normal`,new K(o,3)),this.setAttribute(`uv`,new K(s,2))}copy(e){return super.copy(e),this.parameters=Object.assign({},e.parameters),this}static fromJSON(t){return new e(t.radius,t.segments,t.thetaStart,t.thetaLength)}},q=class e extends ae{constructor(e=1,t=32,n=16,r=0,i=Math.PI*2,a=0,o=Math.PI){super(),this.type=`SphereGeometry`,this.parameters={radius:e,widthSegments:t,heightSegments:n,phiStart:r,phiLength:i,thetaStart:a,thetaLength:o},t=Math.max(3,Math.floor(t)),n=Math.max(2,Math.floor(n));let s=Math.min(a+o,Math.PI),c=0,l=[],u=new k,d=new k,f=[],p=[],m=[],h=[];for(let f=0;f<=n;f++){let g=[],_=f/n,v=0;f===0&&a===0?v=.5/t:f===n&&s===Math.PI&&(v=-.5/t);for(let n=0;n<=t;n++){let s=n/t;u.x=-e*Math.cos(r+s*i)*Math.sin(a+_*o),u.y=e*Math.cos(a+_*o),u.z=e*Math.sin(r+s*i)*Math.sin(a+_*o),p.push(u.x,u.y,u.z),d.copy(u).normalize(),m.push(d.x,d.y,d.z),h.push(s+v,1-_),g.push(c++)}l.push(g)}for(let e=0;e<n;e++)for(let r=0;r<t;r++){let t=l[e][r+1],i=l[e][r],o=l[e+1][r],c=l[e+1][r+1];(e!==0||a>0)&&f.push(t,i,c),(e!==n-1||s<Math.PI)&&f.push(i,o,c)}this.setIndex(f),this.setAttribute(`position`,new K(p,3)),this.setAttribute(`normal`,new K(m,3)),this.setAttribute(`uv`,new K(h,2))}copy(e){return super.copy(e),this.parameters=Object.assign({},e.parameters),this}static fromJSON(t){return new e(t.radius,t.widthSegments,t.heightSegments,t.phiStart,t.phiLength,t.thetaStart,t.thetaLength)}},J=class e extends ae{constructor(e=1,t=.4,n=12,r=48,i=Math.PI*2,a=0,o=Math.PI*2){super(),this.type=`TorusGeometry`,this.parameters={radius:e,tube:t,radialSegments:n,tubularSegments:r,arc:i,thetaStart:a,thetaLength:o},n=Math.floor(n),r=Math.floor(r);let s=[],c=[],l=[],u=[],d=new k,f=new k,p=new k;for(let s=0;s<=n;s++){let m=a+s/n*o;for(let a=0;a<=r;a++){let o=a/r*i;f.x=(e+t*Math.cos(m))*Math.cos(o),f.y=(e+t*Math.cos(m))*Math.sin(o),f.z=t*Math.sin(m),c.push(f.x,f.y,f.z),d.x=e*Math.cos(o),d.y=e*Math.sin(o),p.subVectors(f,d).normalize(),l.push(p.x,p.y,p.z),u.push(a/r),u.push(s/n)}}for(let e=1;e<=n;e++)for(let t=1;t<=r;t++){let n=(r+1)*e+t-1,i=(r+1)*(e-1)+t-1,a=(r+1)*(e-1)+t,o=(r+1)*e+t;s.push(n,i,o),s.push(i,a,o)}this.setIndex(s),this.setAttribute(`position`,new K(c,3)),this.setAttribute(`normal`,new K(l,3)),this.setAttribute(`uv`,new K(u,2))}copy(e){return super.copy(e),this.parameters=Object.assign({},e.parameters),this}static fromJSON(t){return new e(t.radius,t.tube,t.radialSegments,t.tubularSegments,t.arc)}},Y=class{constructor(){this.type=`Curve`,this.arcLengthDivisions=200,this.needsUpdate=!1,this.cacheArcLengths=null}getPoint(){ee(`Curve: .getPoint() not implemented.`)}getPointAt(e,t){let n=this.getUtoTmapping(e);return this.getPoint(n,t)}getPoints(e=5){let t=[];for(let n=0;n<=e;n++)t.push(this.getPoint(n/e));return t}getSpacedPoints(e=5){let t=[];for(let n=0;n<=e;n++)t.push(this.getPointAt(n/e));return t}getLength(){let e=this.getLengths();return e[e.length-1]}getLengths(e=this.arcLengthDivisions){if(this.cacheArcLengths&&this.cacheArcLengths.length===e+1&&!this.needsUpdate)return this.cacheArcLengths;this.needsUpdate=!1;let t=[],n,r=this.getPoint(0),i=0;t.push(0);for(let a=1;a<=e;a++)n=this.getPoint(a/e),i+=n.distanceTo(r),t.push(i),r=n;return this.cacheArcLengths=t,t}updateArcLengths(){this.needsUpdate=!0,this.getLengths()}getUtoTmapping(e,t=null){let n=this.getLengths(),r=0,i=n.length,a;a=t||e*n[i-1];let o=0,s=i-1,c;for(;o<=s;)if(r=Math.floor(o+(s-o)/2),c=n[r]-a,c<0)o=r+1;else if(c>0)s=r-1;else{s=r;break}if(r=s,n[r]===a)return r/(i-1);let l=n[r],u=n[r+1]-l,d=(a-l)/u;return(r+d)/(i-1)}getTangent(e,t){let n=1e-4,r=e-n,i=e+n;r<0&&(r=0),i>1&&(i=1);let a=this.getPoint(r),o=this.getPoint(i),s=t||(a.isVector2?new M:new k);return s.copy(o).sub(a).normalize(),s}getTangentAt(e,t){let n=this.getUtoTmapping(e);return this.getTangent(n,t)}computeFrenetFrames(e,t=!1){let n=new k,r=[],i=[],a=[],o=new k,s=new oe;for(let t=0;t<=e;t++){let n=t/e;r[t]=this.getTangentAt(n,new k)}i[0]=new k,a[0]=new k;let c=Number.MAX_VALUE,l=Math.abs(r[0].x),u=Math.abs(r[0].y),d=Math.abs(r[0].z);l<=c&&(c=l,n.set(1,0,0)),u<=c&&(c=u,n.set(0,1,0)),d<=c&&n.set(0,0,1),o.crossVectors(r[0],n).normalize(),i[0].crossVectors(r[0],o),a[0].crossVectors(r[0],i[0]);for(let t=1;t<=e;t++){if(i[t]=i[t-1].clone(),a[t]=a[t-1].clone(),o.crossVectors(r[t-1],r[t]),o.length()>2**-52){o.normalize();let e=Math.acos(j(r[t-1].dot(r[t]),-1,1));i[t].applyMatrix4(s.makeRotationAxis(o,e))}a[t].crossVectors(r[t],i[t])}if(t===!0){let t=Math.acos(j(i[0].dot(i[e]),-1,1));t/=e,r[0].dot(o.crossVectors(i[0],i[e]))>0&&(t=-t);for(let n=1;n<=e;n++)i[n].applyMatrix4(s.makeRotationAxis(r[n],t*n)),a[n].crossVectors(r[n],i[n])}return{tangents:r,normals:i,binormals:a}}clone(){return new this.constructor().copy(this)}copy(e){return this.arcLengthDivisions=e.arcLengthDivisions,this}toJSON(){let e={metadata:{version:4.7,type:`Curve`,generator:`Curve.toJSON`}};return e.arcLengthDivisions=this.arcLengthDivisions,e.type=this.type,e}fromJSON(e){return this.arcLengthDivisions=e.arcLengthDivisions,this}},we=class extends Y{constructor(e=0,t=0,n=1,r=1,i=0,a=Math.PI*2,o=!1,s=0){super(),this.isEllipseCurve=!0,this.type=`EllipseCurve`,this.aX=e,this.aY=t,this.xRadius=n,this.yRadius=r,this.aStartAngle=i,this.aEndAngle=a,this.aClockwise=o,this.aRotation=s}getPoint(e,t=new M){let n=t,r=Math.PI*2,i=this.aEndAngle-this.aStartAngle,a=Math.abs(i)<2**-52;for(;i<0;)i+=r;for(;i>r;)i-=r;i<2**-52&&(i=a?0:r),this.aClockwise===!0&&!a&&(i===r?i=-r:i-=r);let o=this.aStartAngle+e*i,s=this.aX+this.xRadius*Math.cos(o),c=this.aY+this.yRadius*Math.sin(o);if(this.aRotation!==0){let e=Math.cos(this.aRotation),t=Math.sin(this.aRotation),n=s-this.aX,r=c-this.aY;s=n*e-r*t+this.aX,c=n*t+r*e+this.aY}return n.set(s,c)}copy(e){return super.copy(e),this.aX=e.aX,this.aY=e.aY,this.xRadius=e.xRadius,this.yRadius=e.yRadius,this.aStartAngle=e.aStartAngle,this.aEndAngle=e.aEndAngle,this.aClockwise=e.aClockwise,this.aRotation=e.aRotation,this}toJSON(){let e=super.toJSON();return e.aX=this.aX,e.aY=this.aY,e.xRadius=this.xRadius,e.yRadius=this.yRadius,e.aStartAngle=this.aStartAngle,e.aEndAngle=this.aEndAngle,e.aClockwise=this.aClockwise,e.aRotation=this.aRotation,e}fromJSON(e){return super.fromJSON(e),this.aX=e.aX,this.aY=e.aY,this.xRadius=e.xRadius,this.yRadius=e.yRadius,this.aStartAngle=e.aStartAngle,this.aEndAngle=e.aEndAngle,this.aClockwise=e.aClockwise,this.aRotation=e.aRotation,this}},Te=class extends we{constructor(e,t,n,r,i,a){super(e,t,n,n,r,i,a),this.isArcCurve=!0,this.type=`ArcCurve`}};function Ee(){let e=0,t=0,n=0,r=0;function i(i,a,o,s){e=i,t=o,n=-3*i+3*a-2*o-s,r=2*i-2*a+o+s}return{initCatmullRom:function(e,t,n,r,a){i(t,n,a*(n-e),a*(r-t))},initNonuniformCatmullRom:function(e,t,n,r,a,o,s){let c=(t-e)/a-(n-e)/(a+o)+(n-t)/o,l=(n-t)/o-(r-t)/(o+s)+(r-n)/s;c*=o,l*=o,i(t,n,c,l)},calc:function(i){let a=i*i,o=a*i;return e+t*i+n*a+r*o}}}var De=new k,Oe=new Ee,ke=new Ee,Ae=new Ee,je=class extends Y{constructor(e=[],t=!1,n=`centripetal`,r=.5){super(),this.isCatmullRomCurve3=!0,this.type=`CatmullRomCurve3`,this.points=e,this.closed=t,this.curveType=n,this.tension=r}getPoint(e,t=new k){let n=t,r=this.points,i=r.length,a=(i-+!this.closed)*e,o=Math.floor(a),s=a-o;this.closed?o+=o>0?0:(Math.floor(Math.abs(o)/i)+1)*i:s===0&&o===i-1&&(o=i-2,s=1);let c,l;this.closed||o>0?c=r[(o-1)%i]:(De.subVectors(r[0],r[1]).add(r[0]),c=De);let u=r[o%i],d=r[(o+1)%i];if(this.closed||o+2<i?l=r[(o+2)%i]:(De.subVectors(r[i-1],r[i-2]).add(r[i-1]),l=De),this.curveType===`centripetal`||this.curveType===`chordal`){let e=this.curveType===`chordal`?.5:.25,t=c.distanceToSquared(u)**+e,n=u.distanceToSquared(d)**+e,r=d.distanceToSquared(l)**+e;n<1e-4&&(n=1),t<1e-4&&(t=n),r<1e-4&&(r=n),Oe.initNonuniformCatmullRom(c.x,u.x,d.x,l.x,t,n,r),ke.initNonuniformCatmullRom(c.y,u.y,d.y,l.y,t,n,r),Ae.initNonuniformCatmullRom(c.z,u.z,d.z,l.z,t,n,r)}else this.curveType===`catmullrom`&&(Oe.initCatmullRom(c.x,u.x,d.x,l.x,this.tension),ke.initCatmullRom(c.y,u.y,d.y,l.y,this.tension),Ae.initCatmullRom(c.z,u.z,d.z,l.z,this.tension));return n.set(Oe.calc(s),ke.calc(s),Ae.calc(s)),n}copy(e){super.copy(e),this.points=[];for(let t=0,n=e.points.length;t<n;t++){let n=e.points[t];this.points.push(n.clone())}return this.closed=e.closed,this.curveType=e.curveType,this.tension=e.tension,this}toJSON(){let e=super.toJSON();e.points=[];for(let t=0,n=this.points.length;t<n;t++){let n=this.points[t];e.points.push(n.toArray())}return e.closed=this.closed,e.curveType=this.curveType,e.tension=this.tension,e}fromJSON(e){super.fromJSON(e),this.points=[];for(let t=0,n=e.points.length;t<n;t++){let n=e.points[t];this.points.push(new k().fromArray(n))}return this.closed=e.closed,this.curveType=e.curveType,this.tension=e.tension,this}};function Me(e,t,n,r,i){let a=(r-t)*.5,o=(i-n)*.5,s=e*e,c=e*s;return(2*n-2*r+a+o)*c+(-3*n+3*r-2*a-o)*s+a*e+n}function Ne(e,t){let n=1-e;return n*n*t}function Pe(e,t){return 2*(1-e)*e*t}function Fe(e,t){return e*e*t}function Ie(e,t,n,r){return Ne(e,t)+Pe(e,n)+Fe(e,r)}function Le(e,t){let n=1-e;return n*n*n*t}function Re(e,t){let n=1-e;return 3*n*n*e*t}function ze(e,t){return 3*(1-e)*e*e*t}function Be(e,t){return e*e*e*t}function Ve(e,t,n,r,i){return Le(e,t)+Re(e,n)+ze(e,r)+Be(e,i)}var He=class extends Y{constructor(e=new M,t=new M,n=new M,r=new M){super(),this.isCubicBezierCurve=!0,this.type=`CubicBezierCurve`,this.v0=e,this.v1=t,this.v2=n,this.v3=r}getPoint(e,t=new M){let n=t,r=this.v0,i=this.v1,a=this.v2,o=this.v3;return n.set(Ve(e,r.x,i.x,a.x,o.x),Ve(e,r.y,i.y,a.y,o.y)),n}copy(e){return super.copy(e),this.v0.copy(e.v0),this.v1.copy(e.v1),this.v2.copy(e.v2),this.v3.copy(e.v3),this}toJSON(){let e=super.toJSON();return e.v0=this.v0.toArray(),e.v1=this.v1.toArray(),e.v2=this.v2.toArray(),e.v3=this.v3.toArray(),e}fromJSON(e){return super.fromJSON(e),this.v0.fromArray(e.v0),this.v1.fromArray(e.v1),this.v2.fromArray(e.v2),this.v3.fromArray(e.v3),this}},Ue=class extends Y{constructor(e=new k,t=new k,n=new k,r=new k){super(),this.isCubicBezierCurve3=!0,this.type=`CubicBezierCurve3`,this.v0=e,this.v1=t,this.v2=n,this.v3=r}getPoint(e,t=new k){let n=t,r=this.v0,i=this.v1,a=this.v2,o=this.v3;return n.set(Ve(e,r.x,i.x,a.x,o.x),Ve(e,r.y,i.y,a.y,o.y),Ve(e,r.z,i.z,a.z,o.z)),n}copy(e){return super.copy(e),this.v0.copy(e.v0),this.v1.copy(e.v1),this.v2.copy(e.v2),this.v3.copy(e.v3),this}toJSON(){let e=super.toJSON();return e.v0=this.v0.toArray(),e.v1=this.v1.toArray(),e.v2=this.v2.toArray(),e.v3=this.v3.toArray(),e}fromJSON(e){return super.fromJSON(e),this.v0.fromArray(e.v0),this.v1.fromArray(e.v1),this.v2.fromArray(e.v2),this.v3.fromArray(e.v3),this}},We=class extends Y{constructor(e=new M,t=new M){super(),this.isLineCurve=!0,this.type=`LineCurve`,this.v1=e,this.v2=t}getPoint(e,t=new M){let n=t;return e===1?n.copy(this.v2):(n.copy(this.v2).sub(this.v1),n.multiplyScalar(e).add(this.v1)),n}getPointAt(e,t){return this.getPoint(e,t)}getTangent(e,t=new M){return t.subVectors(this.v2,this.v1).normalize()}getTangentAt(e,t){return this.getTangent(e,t)}copy(e){return super.copy(e),this.v1.copy(e.v1),this.v2.copy(e.v2),this}toJSON(){let e=super.toJSON();return e.v1=this.v1.toArray(),e.v2=this.v2.toArray(),e}fromJSON(e){return super.fromJSON(e),this.v1.fromArray(e.v1),this.v2.fromArray(e.v2),this}},Ge=class extends Y{constructor(e=new k,t=new k){super(),this.isLineCurve3=!0,this.type=`LineCurve3`,this.v1=e,this.v2=t}getPoint(e,t=new k){let n=t;return e===1?n.copy(this.v2):(n.copy(this.v2).sub(this.v1),n.multiplyScalar(e).add(this.v1)),n}getPointAt(e,t){return this.getPoint(e,t)}getTangent(e,t=new k){return t.subVectors(this.v2,this.v1).normalize()}getTangentAt(e,t){return this.getTangent(e,t)}copy(e){return super.copy(e),this.v1.copy(e.v1),this.v2.copy(e.v2),this}toJSON(){let e=super.toJSON();return e.v1=this.v1.toArray(),e.v2=this.v2.toArray(),e}fromJSON(e){return super.fromJSON(e),this.v1.fromArray(e.v1),this.v2.fromArray(e.v2),this}},Ke=class extends Y{constructor(e=new M,t=new M,n=new M){super(),this.isQuadraticBezierCurve=!0,this.type=`QuadraticBezierCurve`,this.v0=e,this.v1=t,this.v2=n}getPoint(e,t=new M){let n=t,r=this.v0,i=this.v1,a=this.v2;return n.set(Ie(e,r.x,i.x,a.x),Ie(e,r.y,i.y,a.y)),n}copy(e){return super.copy(e),this.v0.copy(e.v0),this.v1.copy(e.v1),this.v2.copy(e.v2),this}toJSON(){let e=super.toJSON();return e.v0=this.v0.toArray(),e.v1=this.v1.toArray(),e.v2=this.v2.toArray(),e}fromJSON(e){return super.fromJSON(e),this.v0.fromArray(e.v0),this.v1.fromArray(e.v1),this.v2.fromArray(e.v2),this}},qe=class extends Y{constructor(e=new k,t=new k,n=new k){super(),this.isQuadraticBezierCurve3=!0,this.type=`QuadraticBezierCurve3`,this.v0=e,this.v1=t,this.v2=n}getPoint(e,t=new k){let n=t,r=this.v0,i=this.v1,a=this.v2;return n.set(Ie(e,r.x,i.x,a.x),Ie(e,r.y,i.y,a.y),Ie(e,r.z,i.z,a.z)),n}copy(e){return super.copy(e),this.v0.copy(e.v0),this.v1.copy(e.v1),this.v2.copy(e.v2),this}toJSON(){let e=super.toJSON();return e.v0=this.v0.toArray(),e.v1=this.v1.toArray(),e.v2=this.v2.toArray(),e}fromJSON(e){return super.fromJSON(e),this.v0.fromArray(e.v0),this.v1.fromArray(e.v1),this.v2.fromArray(e.v2),this}},Je=class extends Y{constructor(e=[]){super(),this.isSplineCurve=!0,this.type=`SplineCurve`,this.points=e}getPoint(e,t=new M){let n=t,r=this.points,i=(r.length-1)*e,a=Math.floor(i),o=i-a,s=r[a===0?a:a-1],c=r[a],l=r[a>r.length-2?r.length-1:a+1],u=r[a>r.length-3?r.length-1:a+2];return n.set(Me(o,s.x,c.x,l.x,u.x),Me(o,s.y,c.y,l.y,u.y)),n}copy(e){super.copy(e),this.points=[];for(let t=0,n=e.points.length;t<n;t++){let n=e.points[t];this.points.push(n.clone())}return this}toJSON(){let e=super.toJSON();e.points=[];for(let t=0,n=this.points.length;t<n;t++){let n=this.points[t];e.points.push(n.toArray())}return e}fromJSON(e){super.fromJSON(e),this.points=[];for(let t=0,n=e.points.length;t<n;t++){let n=e.points[t];this.points.push(new M().fromArray(n))}return this}},Ye=e({ArcCurve:()=>Te,CatmullRomCurve3:()=>je,CubicBezierCurve:()=>He,CubicBezierCurve3:()=>Ue,EllipseCurve:()=>we,LineCurve:()=>We,LineCurve3:()=>Ge,QuadraticBezierCurve:()=>Ke,QuadraticBezierCurve3:()=>qe,SplineCurve:()=>Je}),Xe=class extends Y{constructor(){super(),this.type=`CurvePath`,this.curves=[],this.autoClose=!1}add(e){this.curves.push(e)}closePath(){let e=this.curves[0].getPoint(0),t=this.curves[this.curves.length-1].getPoint(1);if(!e.equals(t)){let n=e.isVector2===!0?`LineCurve`:`LineCurve3`;this.curves.push(new Ye[n](t,e))}return this}getPoint(e,t){let n=e*this.getLength(),r=this.getCurveLengths(),i=0;for(;i<r.length;){if(r[i]>=n){let e=r[i]-n,a=this.curves[i],o=a.getLength(),s=o===0?0:1-e/o;return a.getPointAt(s,t)}i++}return null}getLength(){let e=this.getCurveLengths();return e[e.length-1]}updateArcLengths(){this.needsUpdate=!0,this.cacheLengths=null,this.getCurveLengths()}getCurveLengths(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;let e=[],t=0;for(let n=0,r=this.curves.length;n<r;n++)t+=this.curves[n].getLength(),e.push(t);return this.cacheLengths=e,e}getSpacedPoints(e=40){let t=[];for(let n=0;n<=e;n++)t.push(this.getPoint(n/e));return this.autoClose&&t.push(t[0]),t}getPoints(e=12){let t=[],n;for(let r=0,i=this.curves;r<i.length;r++){let a=i[r],o=a.isEllipseCurve?e*2:a.isLineCurve||a.isLineCurve3?1:a.isSplineCurve?e*a.points.length:e,s=a.getPoints(o);for(let e=0;e<s.length;e++){let r=s[e];n&&n.equals(r)||(t.push(r),n=r)}}return this.autoClose&&t.length>1&&!t[t.length-1].equals(t[0])&&t.push(t[0]),t}copy(e){super.copy(e),this.curves=[];for(let t=0,n=e.curves.length;t<n;t++){let n=e.curves[t];this.curves.push(n.clone())}return this.autoClose=e.autoClose,this}toJSON(){let e=super.toJSON();e.autoClose=this.autoClose,e.curves=[];for(let t=0,n=this.curves.length;t<n;t++){let n=this.curves[t];e.curves.push(n.toJSON())}return e}fromJSON(e){super.fromJSON(e),this.autoClose=e.autoClose,this.curves=[];for(let t=0,n=e.curves.length;t<n;t++){let n=e.curves[t];this.curves.push(new Ye[n.type]().fromJSON(n))}return this}},Ze=class extends Xe{constructor(e){super(),this.type=`Path`,this.currentPoint=new M,e&&this.setFromPoints(e)}setFromPoints(e){this.moveTo(e[0].x,e[0].y);for(let t=1,n=e.length;t<n;t++)this.lineTo(e[t].x,e[t].y);return this}moveTo(e,t){return this.currentPoint.set(e,t),this}lineTo(e,t){let n=new We(this.currentPoint.clone(),new M(e,t));return this.curves.push(n),this.currentPoint.set(e,t),this}quadraticCurveTo(e,t,n,r){let i=new Ke(this.currentPoint.clone(),new M(e,t),new M(n,r));return this.curves.push(i),this.currentPoint.set(n,r),this}bezierCurveTo(e,t,n,r,i,a){let o=new He(this.currentPoint.clone(),new M(e,t),new M(n,r),new M(i,a));return this.curves.push(o),this.currentPoint.set(i,a),this}splineThru(e){let t=new Je([this.currentPoint.clone()].concat(e));return this.curves.push(t),this.currentPoint.copy(e[e.length-1]),this}arc(e,t,n,r,i,a){let o=this.currentPoint.x,s=this.currentPoint.y;return this.absarc(e+o,t+s,n,r,i,a),this}absarc(e,t,n,r,i,a){return this.absellipse(e,t,n,n,r,i,a),this}ellipse(e,t,n,r,i,a,o,s){let c=this.currentPoint.x,l=this.currentPoint.y;return this.absellipse(e+c,t+l,n,r,i,a,o,s),this}absellipse(e,t,n,r,i,a,o,s){let c=new we(e,t,n,r,i,a,o,s);if(this.curves.length>0){let e=c.getPoint(0);e.equals(this.currentPoint)||this.lineTo(e.x,e.y)}this.curves.push(c);let l=c.getPoint(1);return this.currentPoint.copy(l),this}copy(e){return super.copy(e),this.currentPoint.copy(e.currentPoint),this}toJSON(){let e=super.toJSON();return e.currentPoint=this.currentPoint.toArray(),e}fromJSON(e){return super.fromJSON(e),this.currentPoint.fromArray(e.currentPoint),this}},Qe=class extends Ze{constructor(e){super(e),this.uuid=te(),this.type=`Shape`,this.holes=[]}getPointsHoles(e){let t=[];for(let n=0,r=this.holes.length;n<r;n++)t[n]=this.holes[n].getPoints(e);return t}extractPoints(e){return{shape:this.getPoints(e),holes:this.getPointsHoles(e)}}copy(e){super.copy(e),this.holes=[];for(let t=0,n=e.holes.length;t<n;t++){let n=e.holes[t];this.holes.push(n.clone())}return this}toJSON(){let e=super.toJSON();e.uuid=this.uuid,e.holes=[];for(let t=0,n=this.holes.length;t<n;t++){let n=this.holes[t];e.holes.push(n.toJSON())}return e}fromJSON(e){super.fromJSON(e),this.uuid=e.uuid,this.holes=[];for(let t=0,n=e.holes.length;t<n;t++){let n=e.holes[t];this.holes.push(new Ze().fromJSON(n))}return this}};function $e(e,t,n=2){let r=t&&t.length,i=r?t[0]*n:e.length,a=et(e,0,i,n,!0),o=[];if(!a||a.next===a.prev)return o;let s,c,l;if(r&&(a=ot(e,t,a,n)),e.length>80*n){s=e[0],c=e[1];let t=s,r=c;for(let a=n;a<i;a+=n){let n=e[a],i=e[a+1];n<s&&(s=n),i<c&&(c=i),n>t&&(t=n),i>r&&(r=i)}l=Math.max(t-s,r-c),l=l===0?0:32767/l}return tt(a,o,n,s,c,l,0),o}function et(e,t,n,r,i){let a;if(i===kt(e,t,n,r)>0)for(let i=t;i<n;i+=r)a=Et(i/r|0,e[i],e[i+1],a);else for(let i=n-r;i>=t;i-=r)a=Et(i/r|0,e[i],e[i+1],a);return a&&vt(a,a.next)&&(Dt(a),a=a.next),a}function X(e,t){if(!e)return e;t||=e;let n=e,r;do if(r=!1,!n.steiner&&(vt(n,n.next)||Z(n.prev,n,n.next)===0)){if(Dt(n),n=t=n.prev,n===n.next)break;r=!0}else n=n.next;while(r||n!==t);return t}function tt(e,t,n,r,i,a,o){if(!e)return;!o&&a&&dt(e,r,i,a);let s=e;for(;e.prev!==e.next;){let c=e.prev,l=e.next;if(a?rt(e,r,i,a):nt(e)){t.push(c.i,e.i,l.i),Dt(e),e=l.next,s=l.next;continue}if(e=l,e===s){o?o===1?(e=it(X(e),t),tt(e,t,n,r,i,a,2)):o===2&&at(e,t,n,r,i,a):tt(X(e),t,n,r,i,a,1);break}}}function nt(e){let t=e.prev,n=e,r=e.next;if(Z(t,n,r)>=0)return!1;let i=t.x,a=n.x,o=r.x,s=t.y,c=n.y,l=r.y,u=Math.min(i,a,o),d=Math.min(s,c,l),f=Math.max(i,a,o),p=Math.max(s,c,l),m=r.next;for(;m!==t;){if(m.x>=u&&m.x<=f&&m.y>=d&&m.y<=p&>(i,s,a,c,o,l,m.x,m.y)&&Z(m.prev,m,m.next)>=0)return!1;m=m.next}return!0}function rt(e,t,n,r){let i=e.prev,a=e,o=e.next;if(Z(i,a,o)>=0)return!1;let s=i.x,c=a.x,l=o.x,u=i.y,d=a.y,f=o.y,p=Math.min(s,c,l),m=Math.min(u,d,f),h=Math.max(s,c,l),g=Math.max(u,d,f),_=pt(p,m,t,n,r),v=pt(h,g,t,n,r),y=e.prevZ,b=e.nextZ;for(;y&&y.z>=_&&b&&b.z<=v;){if(y.x>=p&&y.x<=h&&y.y>=m&&y.y<=g&&y!==i&&y!==o&>(s,u,c,d,l,f,y.x,y.y)&&Z(y.prev,y,y.next)>=0||(y=y.prevZ,b.x>=p&&b.x<=h&&b.y>=m&&b.y<=g&&b!==i&&b!==o&>(s,u,c,d,l,f,b.x,b.y)&&Z(b.prev,b,b.next)>=0))return!1;b=b.nextZ}for(;y&&y.z>=_;){if(y.x>=p&&y.x<=h&&y.y>=m&&y.y<=g&&y!==i&&y!==o&>(s,u,c,d,l,f,y.x,y.y)&&Z(y.prev,y,y.next)>=0)return!1;y=y.prevZ}for(;b&&b.z<=v;){if(b.x>=p&&b.x<=h&&b.y>=m&&b.y<=g&&b!==i&&b!==o&>(s,u,c,d,l,f,b.x,b.y)&&Z(b.prev,b,b.next)>=0)return!1;b=b.nextZ}return!0}function it(e,t){let n=e;do{let r=n.prev,i=n.next.next;!vt(r,i)&&yt(r,n,n.next,i)&&Ct(r,i)&&Ct(i,r)&&(t.push(r.i,n.i,i.i),Dt(n),Dt(n.next),n=e=i),n=n.next}while(n!==e);return X(n)}function at(e,t,n,r,i,a){let o=e;do{let e=o.next.next;for(;e!==o.prev;){if(o.i!==e.i&&_t(o,e)){let s=Tt(o,e);o=X(o,o.next),s=X(s,s.next),tt(o,t,n,r,i,a,0),tt(s,t,n,r,i,a,0);return}e=e.next}o=o.next}while(o!==e)}function ot(e,t,n,r){let i=[];for(let n=0,a=t.length;n<a;n++){let o=et(e,t[n]*r,n<a-1?t[n+1]*r:e.length,r,!1);o===o.next&&(o.steiner=!0),i.push(mt(o))}i.sort(st);for(let e=0;e<i.length;e++)n=ct(i[e],n);return n}function st(e,t){let n=e.x-t.x;return n===0&&(n=e.y-t.y,n===0&&(n=(e.next.y-e.y)/(e.next.x-e.x)-(t.next.y-t.y)/(t.next.x-t.x))),n}function ct(e,t){let n=lt(e,t);if(!n)return t;let r=Tt(n,e);return X(r,r.next),X(n,n.next)}function lt(e,t){let n=t,r=e.x,i=e.y,a=-1/0,o;if(vt(e,n))return n;do{if(vt(e,n.next))return n.next;if(i<=n.y&&i>=n.next.y&&n.next.y!==n.y){let e=n.x+(i-n.y)*(n.next.x-n.x)/(n.next.y-n.y);if(e<=r&&e>a&&(a=e,o=n.x<n.next.x?n:n.next,e===r))return o}n=n.next}while(n!==t);if(!o)return null;let s=o,c=o.x,l=o.y,u=1/0;n=o;do{if(r>=n.x&&n.x>=c&&r!==n.x&&ht(i<l?r:a,i,c,l,i<l?a:r,i,n.x,n.y)){let t=Math.abs(i-n.y)/(r-n.x);Ct(n,e)&&(t<u||t===u&&(n.x>o.x||n.x===o.x&&ut(o,n)))&&(o=n,u=t)}n=n.next}while(n!==s);return o}function ut(e,t){return Z(e.prev,e,t.prev)<0&&Z(t.next,e,e.next)<0}function dt(e,t,n,r){let i=e;do i.z===0&&(i.z=pt(i.x,i.y,t,n,r)),i.prevZ=i.prev,i.nextZ=i.next,i=i.next;while(i!==e);i.prevZ.nextZ=null,i.prevZ=null,ft(i)}function ft(e){let t,n=1;do{let r=e,i;e=null;let a=null;for(t=0;r;){t++;let o=r,s=0;for(let e=0;e<n&&(s++,o=o.nextZ,o);e++);let c=n;for(;s>0||c>0&&o;)s!==0&&(c===0||!o||r.z<=o.z)?(i=r,r=r.nextZ,s--):(i=o,o=o.nextZ,c--),a?a.nextZ=i:e=i,i.prevZ=a,a=i;r=o}a.nextZ=null,n*=2}while(t>1);return e}function pt(e,t,n,r,i){return e=(e-n)*i|0,t=(t-r)*i|0,e=(e|e<<8)&16711935,e=(e|e<<4)&252645135,e=(e|e<<2)&858993459,e=(e|e<<1)&1431655765,t=(t|t<<8)&16711935,t=(t|t<<4)&252645135,t=(t|t<<2)&858993459,t=(t|t<<1)&1431655765,e|t<<1}function mt(e){let t=e,n=e;do(t.x<n.x||t.x===n.x&&t.y<n.y)&&(n=t),t=t.next;while(t!==e);return n}function ht(e,t,n,r,i,a,o,s){return(i-o)*(t-s)>=(e-o)*(a-s)&&(e-o)*(r-s)>=(n-o)*(t-s)&&(n-o)*(a-s)>=(i-o)*(r-s)}function gt(e,t,n,r,i,a,o,s){return!(e===o&&t===s)&&ht(e,t,n,r,i,a,o,s)}function _t(e,t){return e.next.i!==t.i&&e.prev.i!==t.i&&!St(e,t)&&(Ct(e,t)&&Ct(t,e)&&wt(e,t)&&(Z(e.prev,e,t.prev)||Z(e,t.prev,t))||vt(e,t)&&Z(e.prev,e,e.next)>0&&Z(t.prev,t,t.next)>0)}function Z(e,t,n){return(t.y-e.y)*(n.x-t.x)-(t.x-e.x)*(n.y-t.y)}function vt(e,t){return e.x===t.x&&e.y===t.y}function yt(e,t,n,r){let i=xt(Z(e,t,n)),a=xt(Z(e,t,r)),o=xt(Z(n,r,e)),s=xt(Z(n,r,t));return!!(i!==a&&o!==s||i===0&&bt(e,n,t)||a===0&&bt(e,r,t)||o===0&&bt(n,e,r)||s===0&&bt(n,t,r))}function bt(e,t,n){return t.x<=Math.max(e.x,n.x)&&t.x>=Math.min(e.x,n.x)&&t.y<=Math.max(e.y,n.y)&&t.y>=Math.min(e.y,n.y)}function xt(e){return e>0?1:e<0?-1:0}function St(e,t){let n=e;do{if(n.i!==e.i&&n.next.i!==e.i&&n.i!==t.i&&n.next.i!==t.i&&yt(n,n.next,e,t))return!0;n=n.next}while(n!==e);return!1}function Ct(e,t){return Z(e.prev,e,e.next)<0?Z(e,t,e.next)>=0&&Z(e,e.prev,t)>=0:Z(e,t,e.prev)<0||Z(e,e.next,t)<0}function wt(e,t){let n=e,r=!1,i=(e.x+t.x)/2,a=(e.y+t.y)/2;do n.y>a!=n.next.y>a&&n.next.y!==n.y&&i<(n.next.x-n.x)*(a-n.y)/(n.next.y-n.y)+n.x&&(r=!r),n=n.next;while(n!==e);return r}function Tt(e,t){let n=Ot(e.i,e.x,e.y),r=Ot(t.i,t.x,t.y),i=e.next,a=t.prev;return e.next=t,t.prev=e,n.next=i,i.prev=n,r.next=n,n.prev=r,a.next=r,r.prev=a,r}function Et(e,t,n,r){let i=Ot(e,t,n);return r?(i.next=r.next,i.prev=r,r.next.prev=i,r.next=i):(i.prev=i,i.next=i),i}function Dt(e){e.next.prev=e.prev,e.prev.next=e.next,e.prevZ&&(e.prevZ.nextZ=e.nextZ),e.nextZ&&(e.nextZ.prevZ=e.prevZ)}function Ot(e,t,n){return{i:e,x:t,y:n,prev:null,next:null,z:0,prevZ:null,nextZ:null,steiner:!1}}function kt(e,t,n,r){let i=0;for(let a=t,o=n-r;a<n;a+=r)i+=(e[o]-e[a])*(e[a+1]+e[o+1]),o=a;return i}var At=class{static triangulate(e,t,n=2){return $e(e,t,n)}},jt=class e{static area(e){let t=e.length,n=0;for(let r=t-1,i=0;i<t;r=i++)n+=e[r].x*e[i].y-e[i].x*e[r].y;return n*.5}static isClockWise(t){return e.area(t)<0}static triangulateShape(e,t){let n=[],r=[],i=[];Mt(e),Nt(n,e);let a=e.length;t.forEach(Mt);for(let e=0;e<t.length;e++)r.push(a),a+=t[e].length,Nt(n,t[e]);let o=At.triangulate(n,r);for(let e=0;e<o.length;e+=3)i.push(o.slice(e,e+3));return i}};function Mt(e){let t=e.length;t>2&&e[t-1].equals(e[0])&&e.pop()}function Nt(e,t){for(let n=0;n<t.length;n++)e.push(t[n].x),e.push(t[n].y)}var Pt=class e extends ae{constructor(e=new Qe([new M(.5,.5),new M(-.5,.5),new M(-.5,-.5),new M(.5,-.5)]),t={}){super(),this.type=`ExtrudeGeometry`,this.parameters={shapes:e,options:t},e=Array.isArray(e)?e:[e];let n=this,r=[],i=[];for(let t=0,n=e.length;t<n;t++){let n=e[t];a(n)}this.setAttribute(`position`,new K(r,3)),this.setAttribute(`uv`,new K(i,2)),this.computeVertexNormals();function a(e){let a=[],o=t.curveSegments===void 0?12:t.curveSegments,s=t.steps===void 0?1:t.steps,c=t.depth===void 0?1:t.depth,l=t.bevelEnabled===void 0?!0:t.bevelEnabled,u=t.bevelThickness===void 0?.2:t.bevelThickness,d=t.bevelSize===void 0?u-.1:t.bevelSize,f=t.bevelOffset===void 0?0:t.bevelOffset,p=t.bevelSegments===void 0?3:t.bevelSegments,m=t.extrudePath,h=t.UVGenerator===void 0?Ft:t.UVGenerator,g,_=!1,v,y,b,x;if(m){g=m.getSpacedPoints(s),_=!0,l=!1;let e=m.isCatmullRomCurve3?m.closed:!1;v=m.computeFrenetFrames(s,e),y=new k,b=new k,x=new k}l||(p=0,u=0,d=0,f=0);let S=e.extractPoints(o),C=S.shape,w=S.holes;if(!jt.isClockWise(C)){C=C.reverse();for(let e=0,t=w.length;e<t;e++){let t=w[e];jt.isClockWise(t)&&(w[e]=t.reverse())}}function T(e){let t=e[0];for(let n=1;n<=e.length;n++){let r=n%e.length,i=e[r],a=i.x-t.x,o=i.y-t.y,s=a*a+o*o,c=Math.max(Math.abs(i.x),Math.abs(i.y),Math.abs(t.x),Math.abs(t.y));if(s<=10000000000000001e-36*c*c){e.splice(r,1),n--;continue}t=i}}T(C),w.forEach(T);let D=w.length,O=C;for(let e=0;e<D;e++){let t=w[e];C=C.concat(t)}function A(e,t,n){return t||E(`ExtrudeGeometry: vec does not exist`),e.clone().addScaledVector(t,n)}let j=C.length;function N(e,t,n){let r,i,a,o=e.x-t.x,s=e.y-t.y,c=n.x-e.x,l=n.y-e.y,u=o*o+s*s,d=o*l-s*c;if(Math.abs(d)>2**-52){let d=Math.sqrt(u),f=Math.sqrt(c*c+l*l),p=t.x-s/d,m=t.y+o/d,h=n.x-l/f,g=n.y+c/f,_=((h-p)*l-(g-m)*c)/(o*l-s*c);r=p+o*_-e.x,i=m+s*_-e.y;let v=r*r+i*i;if(v<=2)return new M(r,i);a=Math.sqrt(v/2)}else{let e=!1;o>2**-52?c>2**-52&&(e=!0):o<-(2**-52)?c<-(2**-52)&&(e=!0):Math.sign(s)===Math.sign(l)&&(e=!0),e?(r=-s,i=o,a=Math.sqrt(u)):(r=o,i=s,a=Math.sqrt(u/2))}return new M(r/a,i/a)}let P=[];for(let e=0,t=O.length,n=t-1,r=e+1;e<t;e++,n++,r++)n===t&&(n=0),r===t&&(r=0),P[e]=N(O[e],O[n],O[r]);let F=[],I,L=P.concat();for(let e=0,t=D;e<t;e++){let t=w[e];I=[];for(let e=0,n=t.length,r=n-1,i=e+1;e<n;e++,r++,i++)r===n&&(r=0),i===n&&(i=0),I[e]=N(t[e],t[r],t[i]);F.push(I),L=L.concat(I)}let R;if(p===0)R=jt.triangulateShape(O,w);else{let e=[],t=[];for(let n=0;n<p;n++){let r=n/p,i=u*Math.cos(r*Math.PI/2),a=d*Math.sin(r*Math.PI/2)+f;for(let t=0,n=O.length;t<n;t++){let n=A(O[t],P[t],a);H(n.x,n.y,-i),r===0&&e.push(n)}for(let e=0,n=D;e<n;e++){let n=w[e];I=F[e];let o=[];for(let e=0,t=n.length;e<t;e++){let t=A(n[e],I[e],a);H(t.x,t.y,-i),r===0&&o.push(t)}r===0&&t.push(o)}}R=jt.triangulateShape(e,t)}let z=R.length,B=d+f;for(let e=0;e<j;e++){let t=l?A(C[e],L[e],B):C[e];_?(b.copy(v.normals[0]).multiplyScalar(t.x),y.copy(v.binormals[0]).multiplyScalar(t.y),x.copy(g[0]).add(b).add(y),H(x.x,x.y,x.z)):H(t.x,t.y,0)}for(let e=1;e<=s;e++)for(let t=0;t<j;t++){let n=l?A(C[t],L[t],B):C[t];_?(b.copy(v.normals[e]).multiplyScalar(n.x),y.copy(v.binormals[e]).multiplyScalar(n.y),x.copy(g[e]).add(b).add(y),H(x.x,x.y,x.z)):H(n.x,n.y,c/s*e)}for(let e=p-1;e>=0;e--){let t=e/p,n=u*Math.cos(t*Math.PI/2),r=d*Math.sin(t*Math.PI/2)+f;for(let e=0,t=O.length;e<t;e++){let t=A(O[e],P[e],r);H(t.x,t.y,c+n)}for(let e=0,t=w.length;e<t;e++){let t=w[e];I=F[e];for(let e=0,i=t.length;e<i;e++){let i=A(t[e],I[e],r);_?H(i.x,i.y+g[s-1].y,g[s-1].x+n):H(i.x,i.y,c+n)}}}V(),ee();function V(){let e=r.length/3;if(l){let e=0,t=j*e;for(let e=0;e<z;e++){let n=R[e];ne(n[2]+t,n[1]+t,n[0]+t)}e=s+p*2,t=j*e;for(let e=0;e<z;e++){let n=R[e];ne(n[0]+t,n[1]+t,n[2]+t)}}else{for(let e=0;e<z;e++){let t=R[e];ne(t[2],t[1],t[0])}for(let e=0;e<z;e++){let t=R[e];ne(t[0]+j*s,t[1]+j*s,t[2]+j*s)}}n.addGroup(e,r.length/3-e,0)}function ee(){let e=r.length/3,t=0;te(O,t),t+=O.length;for(let e=0,n=w.length;e<n;e++){let n=w[e];te(n,t),t+=n.length}n.addGroup(e,r.length/3-e,1)}function te(e,t){let n=e.length;for(;--n>=0;){let r=n,i=n-1;i<0&&(i=e.length-1);for(let e=0,n=s+p*2;e<n;e++){let n=j*e,a=j*(e+1);re(t+r+n,t+i+n,t+i+a,t+r+a)}}}function H(e,t,n){a.push(e),a.push(t),a.push(n)}function ne(e,t,i){U(e),U(t),U(i);let a=r.length/3,o=h.generateTopUV(n,r,a-3,a-2,a-1);W(o[0]),W(o[1]),W(o[2])}function re(e,t,i,a){U(e),U(t),U(a),U(t),U(i),U(a);let o=r.length/3,s=h.generateSideWallUV(n,r,o-6,o-3,o-2,o-1);W(s[0]),W(s[1]),W(s[3]),W(s[1]),W(s[2]),W(s[3])}function U(e){r.push(a[e*3+0]),r.push(a[e*3+1]),r.push(a[e*3+2])}function W(e){i.push(e.x),i.push(e.y)}}}copy(e){return super.copy(e),this.parameters=Object.assign({},e.parameters),this}toJSON(){let e=super.toJSON(),t=this.parameters.shapes,n=this.parameters.options;return It(t,n,e)}static fromJSON(t,n){let r=[];for(let e=0,i=t.shapes.length;e<i;e++){let i=n[t.shapes[e]];r.push(i)}let i=t.options.extrudePath;return i!==void 0&&(t.options.extrudePath=new Ye[i.type]().fromJSON(i)),new e(r,t.options)}},Ft={generateTopUV:function(e,t,n,r,i){let a=t[n*3],o=t[n*3+1],s=t[r*3],c=t[r*3+1],l=t[i*3],u=t[i*3+1];return[new M(a,o),new M(s,c),new M(l,u)]},generateSideWallUV:function(e,t,n,r,i,a){let o=t[n*3],s=t[n*3+1],c=t[n*3+2],l=t[r*3],u=t[r*3+1],d=t[r*3+2],f=t[i*3],p=t[i*3+1],m=t[i*3+2],h=t[a*3],g=t[a*3+1],_=t[a*3+2];return Math.abs(s-u)<Math.abs(o-l)?[new M(o,1-c),new M(l,1-d),new M(f,1-m),new M(h,1-_)]:[new M(s,1-c),new M(u,1-d),new M(p,1-m),new M(g,1-_)]}};function It(e,t,n){if(n.shapes=[],Array.isArray(e))for(let t=0,r=e.length;t<r;t++){let r=e[t];n.shapes.push(r.uuid)}else n.shapes.push(e.uuid);return n.options=Object.assign({},t),t.extrudePath!==void 0&&(n.options.extrudePath=t.extrudePath.toJSON()),n}var Lt=class extends W{constructor(e,t,n,r,i,a,o,s,c){super(e,t,n,r,i,a,o,s,c),this.isCanvasTexture=!0,this.needsUpdate=!0}};i();var Rt=/[MLCZmlcz]|-?(?:\d+\.?\d*|\.\d+)(?:[eE][-+]?\d+)?/g;function zt(e,t){let n=e.match(Rt)??[],r=[],i=null,a=``,o=0,s=e=>(e-t.cx)/t.pxPerUnit,c=e=>(t.cy-e)/t.pxPerUnit,l=()=>parseFloat(n[o++]);for(;o<n.length;){let e=n[o];if(/^[MLCZmlcz]$/.test(e)){a=e.toUpperCase(),o++,a===`Z`&&(i?.closePath(),a=``);continue}a===`M`?(i=new Qe,r.push(i),i.moveTo(s(l()),c(l())),a=`L`):a===`L`?i?.lineTo(s(l()),c(l())):a===`C`?i?.bezierCurveTo(s(l()),c(l()),s(l()),c(l()),s(l()),c(l())):o++}return r}function Q(e,t,n){let r=new Pt(zt(e,t),{depth:n.depth,bevelEnabled:!0,bevelSize:n.bevel,bevelThickness:n.bevel,bevelSegments:n.bevelSegments??4,curveSegments:n.curveSegments??14});return r.translate(0,0,-n.depth/2),r}function Bt(e,t=0){let n=e.match(/^#?([\da-f]{6})$/i);return n?parseInt(n[1],16):t}var Vt={cx:_.CX,cy:_.CY,pxPerUnit:_.PX_PER_UNIT},Ht=.3,Ut=.085,Wt=.24,Gt=.31500000000000006,$=(l.eyeR.x-l.eyeL.x)/2/_.PX_PER_UNIT,Kt=l.insetHalfW*2/_.PX_PER_UNIT,qt=-1.04;function Jt(e,t,n){let r=e/2,i=t/2,a=Math.min(n,r,i),o=new Qe;return o.moveTo(-r+a,-i),o.lineTo(r-a,-i),o.quadraticCurveTo(r,-i,r,-i+a),o.lineTo(r,i-a),o.quadraticCurveTo(r,i,r-a,i),o.lineTo(-r+a,i),o.quadraticCurveTo(-r,i,-r,i-a),o.lineTo(-r,-i+a),o.quadraticCurveTo(-r,-i,-r+a,-i),o}function Yt(e,t){let n=e/2,r=t/2,i=new Qe;return i.moveTo(-n,-r+n),i.bezierCurveTo(-n,-r,n,-r,n,-r+n),i.lineTo(n,r-n),i.bezierCurveTo(n,r,-n,r,-n,r-n),i.lineTo(-n,-r+n),i}function Xt(e,t,n,r=4){return new Pt(e,{depth:t,bevelEnabled:!0,bevelSize:n,bevelThickness:n,bevelSegments:r,curveSegments:24})}function Zt(e){try{let t=[],n=e>>16&255,r=e>>8&255,i=e&255,a=(e,t,n,r)=>{let i=128*t,a=128*n,o=e.createLinearGradient(0,i,0,i+a);o.addColorStop(0,`rgba(255,255,255,0)`),o.addColorStop(.5,`rgba(255,250,244,${r})`),o.addColorStop(1,`rgba(255,255,255,0)`),e.fillStyle=o,e.fillRect(0,i,128,a)};for(let e=0;e<6;e++){let o=document.createElement(`canvas`);o.width=128,o.height=128;let s=o.getContext(`2d`);if(!s||typeof s.createLinearGradient!=`function`)return null;let c=s.createLinearGradient(0,0,0,128);if(c.addColorStop(0,`rgb(46,48,58)`),c.addColorStop(.55,`rgb(20,21,27)`),c.addColorStop(1,`rgb(7,7,10)`),s.fillStyle=c,s.fillRect(0,0,128,128),e===2){let e=s.createRadialGradient(128/2,128/2,6,128/2,128/2,128*.72);e.addColorStop(0,`rgba(255,252,246,0.95)`),e.addColorStop(1,`rgba(255,255,255,0.05)`),s.fillStyle=e,s.fillRect(0,0,128,128)}else if(e===0)a(s,.16,.3,.85);else if(e===1)a(s,.22,.26,.4);else if(e===4)a(s,.2,.2,.28);else if(e===5){let e=s.createRadialGradient(128/2,128*.62,4,128/2,128*.62,128*.6);e.addColorStop(0,`rgba(${n},${r},${i},0.7)`),e.addColorStop(1,`rgba(0,0,0,0)`),s.fillStyle=e,s.fillRect(0,0,128,128)}else e===3&&(s.fillStyle=`rgba(64,52,40,0.35)`,s.fillRect(0,0,128,128));for(let e=0;e<90;e++)s.fillStyle=`rgba(255,255,255,${Math.random()*.05})`,s.fillRect(Math.random()*128,Math.random()*128,1,1);t.push(o)}let o=new re(t);return o.needsUpdate=!0,o}catch{return null}}function Qt(){try{let e=document.createElement(`canvas`);e.width=128,e.height=128;let t=e.getContext(`2d`);if(!t||typeof t.createRadialGradient!=`function`)return null;let n=t.createRadialGradient(128/2,128/2,2,128/2,128/2,128/2);return n.addColorStop(0,`rgba(0,0,0,0.55)`),n.addColorStop(.6,`rgba(0,0,0,0.22)`),n.addColorStop(1,`rgba(0,0,0,0)`),t.fillStyle=n,t.fillRect(0,0,128,128),new Lt(e)}catch{return null}}function $t(e){let{shell:t,inset:n,accent:r,envMap:i,light:a}=e;return{shell:new Se({color:t,metalness:.05,roughness:.34,clearcoat:.9,clearcoatRoughness:.32,envMap:i,envMapIntensity:a?.85:1}),inset:new Se({color:n,metalness:.1,roughness:.16,clearcoat:1,clearcoatRoughness:.1,envMap:i,envMapIntensity:1.15}),bezel:new xe({color:1052688,metalness:.7,roughness:.35,envMap:i,envMapIntensity:.4}),jade:new xe({color:r,emissive:r,emissiveIntensity:.95,metalness:.4,roughness:.18,envMap:i,envMapIntensity:.55}),jadeStem:new xe({color:r,emissive:r,emissiveIntensity:.7,metalness:.35,roughness:.25,envMap:i,envMapIntensity:.45}),jadeGlow:new L({color:r,transparent:!0,opacity:.45}),glint:new L({color:15663096,transparent:!0,opacity:.85}),sheen:new L({color:16777215,transparent:!0,opacity:.07,depthWrite:!1})}}function en(e,t,n){if(e===`bumper`)return;let r=c(l.earL.y),i=T(l.earL.x),a=T(l.earR.x),o=[{x:i,sign:-1},{x:a,sign:1}];if(e===`studio`){let e=new P(new J(Math.abs(i),.045,12,56,Math.PI),n.shell);e.position.set(0,r,.04),t.add(e),o.forEach(({x:e,sign:i})=>{let a=new q(.23,26,26);a.scale(.72,1,.85);let o=new P(a,n.inset);o.position.set(e+i*.04,r,.05),t.add(o);let s=new q(.12,20,20);s.scale(.5,1,1);let c=new P(s,n.jade);c.position.set(e+i*.16,r,.05),t.add(c);let l=new P(new J(.21,.016,10,36),n.shell);l.scale.set(.75,1,1),l.position.set(e+i*.02,r,.08),t.add(l)});return}if(e===`earbuds`){o.forEach(({x:e,sign:i})=>{let a=new P(new q(.09,20,20),n.jade);a.position.set(e+i*.08,r,.12),t.add(a);let o=new P(new J(.17,.013,8,24,Math.PI/2),n.jadeStem);o.rotation.z=i>0?-Math.PI/2:Math.PI,o.position.set(e+i*.08,r-.12,.12),t.add(o)});return}if(e===`loop`){o.forEach(({x:e})=>{let i=new P(new J(.2,.034,12,44),n.jade);i.scale.set(.72,1,1),i.position.set(e,r,.16),t.add(i);let a=new P(new Ce(.16,32),n.jadeGlow);a.scale.set(.72,1,1),a.position.set(e,r,.14),t.add(a)});return}if(e===`fins`){o.forEach(({x:e,sign:i})=>{let a=new Qe;a.moveTo(0,.2),a.lineTo(i*.4,-.05),a.lineTo(i*.46,-.18),a.lineTo(i*.13,-.13),a.lineTo(0,-.05),a.lineTo(0,.2);let o=new P(new Pt(a,{depth:.045,bevelEnabled:!0,bevelSize:.012,bevelThickness:.012,bevelSegments:3,curveSegments:16}),n.jade);o.position.set(e,r,.04),t.add(o)});return}}function tn(e,t){let n=new G,r=new G;n.add(r);let i=y(e.chassis),a=new G;a.scale.set(i.scaleX,i.scaleY,1),r.add(a);let o=new P(Q(p,Vt,{depth:Ht,bevel:Ut,bevelSegments:6,curveSegments:20}),t.shell);a.add(o);let u=new P(Q(h,Vt,{depth:.14,bevel:.05,bevelSegments:5,curveSegments:16}),t.shell);a.add(u);let f=new P(Q(g,Vt,{depth:.14,bevel:.05,bevelSegments:5,curveSegments:16}),t.shell);a.add(f);let b=new P(Q(m,Vt,{depth:.05,bevel:.03,bevelSegments:5,curveSegments:20}),t.inset);b.position.set(0,0,Wt),a.add(b);let C=new P(new I(.8,.2),t.sheen);C.rotation.z=-.3,C.position.set(-.24,-.18,.29900000000000004),a.add(C);let w=new P(new I(.8,.06),t.sheen);w.rotation.z=-.3,w.position.set(-.28,-.32,.29900000000000004),a.add(w);let E=new G;a.add(E),E.position.set(T(l.eyeMid.x),c(l.eyeMid.y),Gt);let D=e.eyes??`smile`,O,k=null,A=`smile`;if(D===`visor`){A=`visor`;let e=new G,n=Kt*.95,r=.24,i=.07,a=new P(Xt(Jt(n+.04,.27999999999999997,r*.48),.02,.005,3),t.inset);a.position.set(0,0,-.02),e.add(a);let o=new P(Xt(Jt(n,r,r*.45),i,.014,5),t.jade);e.add(o);let s=new xe({color:531734,emissive:268818,emissiveIntensity:.45,metalness:.55,roughness:.2}),c=new P(Xt(Jt(n*.92,r*.55,r*.22),.015,.004,3),s);c.position.set(0,0,i*.75),e.add(c);let l=new P(new H(n*.85,r*.2,.006),t.sheen);l.position.set(0,r*.32,i*.95),e.add(l);let u=new q(.034,18,18),d=new P(u,t.jade);d.position.set(-$,0,i*.95),e.add(d);let f=new P(u,t.jade);f.position.set($,0,i*.95),e.add(f);let p=new q(.013,12,12),m=new P(p,t.glint);m.position.set(-$,.005,.08800000000000001),e.add(m);let h=new P(p,t.glint);h.position.set($,.005,.08800000000000001),e.add(h);let g=Xt(Jt(.016,.085,.006),.018,.003,2);[-1,1].forEach(r=>{let a=new P(g,t.jade);a.position.set(r*n*.46,0,i*.85),e.add(a);let o=new P(g,t.jade);o.position.set(r*n*.42,0,i*.85),o.scale.set(1,.55,1),e.add(o)}),E.add(e),O=e}else if(D===`heart`){A=`heart`;let e=e=>{let n=new G,r=new q(.06,18,18),i=new P(r,t.jade);i.position.set(-.04,.025,0);let a=new P(r,t.jade);a.position.set(.04,.025,0),n.add(i),n.add(a);let o=new Qe;o.moveTo(-.07,.02),o.lineTo(.07,.02),o.lineTo(0,-.09),o.lineTo(-.07,.02);let s=new Pt(o,{depth:.04,bevelEnabled:!0,bevelSize:.008,bevelThickness:.008,bevelSegments:3,curveSegments:12});return n.add(new P(s,t.jade)),n.scale.set(1.75,1.75,1.75),n.position.set(e*$,0,.05),E.add(n),n};O=e(-1),k=e(1)}else if(D===`single`){A=`single`,O=new P(new q(.19,32,32),t.jade),E.add(O);let e=new P(new J(.24,.018,12,48),t.jade);E.add(e),k=e;let n=new P(new q(.045,10,10),t.glint);n.position.set(-.055,.055,.17),E.add(n)}else if(D===`pixel`){A=`pixel`;let e=new H(.16,.16,.05);O=new P(e,t.jade),O.position.set(-$,0,.02),E.add(O),k=new P(e,t.jade),k.position.set($,0,.02),E.add(k)}else{A=`smile`;let e={depth:.045,bevel:.014,bevelSegments:4,curveSegments:16};O=new P(Q(v,{cx:l.eyeL.x,cy:l.eyeL.y,pxPerUnit:_.PX_PER_UNIT},e),t.jade),O.position.set(-$,0,.02),E.add(O),k=new P(Q(d,{cx:l.eyeR.x,cy:l.eyeR.y,pxPerUnit:_.PX_PER_UNIT},e),t.jade),k.position.set($,0,.02),E.add(k)}en(e.headphones??`bumper`,a,t);let j=new G;a.add(j),j.position.set(T(l.antennaPivot.x),c(l.antennaPivot.y),0);let M=e.antenna??`jewel`,N=null,F={cx:l.antennaPivot.x,cy:l.antennaPivot.y,pxPerUnit:_.PX_PER_UNIT};if(M===`bunny`)[-1,1].forEach(e=>{let n=new P(Xt(Yt(.07,.42),.04,.012,3),t.jade);n.position.set(e*.18,.16,.02),n.rotation.z=e*.38,j.add(n);let r=new P(new q(.07,18,18),t.jade);r.position.set(e*.34,.36,.03),j.add(r),N||=r});else if(M===`beam`){let e=new P(Xt(Yt(.05,.46),.04,.01,3),t.jade);e.position.set(0,.2,.02),j.add(e);let n=new P(new q(.1,20,20),t.jade);n.position.set(0,.46,.03),j.add(n),N=n;let r=new P(new J(.16,.012,8,32),t.jadeGlow);r.rotation.x=Math.PI/2,r.position.copy(n.position),j.add(r)}else if(M===`wifi`){let e=new P(new q(.05,16,16),t.jade);e.position.set(0,.03,.02),j.add(e),N=e,[.15,.23,.31].forEach(e=>{let n=new P(new J(e,.018,10,24,Math.PI),t.jade);n.position.set(0,.03,.02),j.add(n)})}else if(M!==`none`){let e={depth:.07,bevel:.02,bevelSegments:4,curveSegments:14},n=new P(Q(S,F,e),t.jade);j.add(n),N=n;let r=new P(Q(s,F,e),t.jadeStem);j.add(r);let i=new P(Q(x,F,e),t.jadeStem);j.add(i)}let R=new G;n.add(R);let z=e.wings??`none`,B={kind:z};if(z===`halo`){let e=new P(new J(1,.035,12,80),t.jade);e.rotation.x=Math.PI/2.4,e.position.set(0,.95,-.2),R.add(e),B.halo=e;let n=new P(new J(.82,.02,10,64),t.jade);n.rotation.x=Math.PI/2.4,n.position.set(0,.95,-.2),R.add(n),[-1,0,1].forEach(e=>{let n=new P(new q(.04,14,14),t.jade),r=Math.PI/3*e+Math.PI/2;n.position.set(Math.cos(r)*1,.95+Math.sin(r)*.38-.05,-.2),R.add(n)})}else if(z===`pulse`){let e=new P(new J(1.1,.025,12,80),t.jade);e.rotation.x=Math.PI/2,e.position.y=-.95,R.add(e),B.r1=e;let n=new P(new J(1.3,.018,12,80),t.jadeStem);n.rotation.x=Math.PI/2,n.position.y=-.98,R.add(n),B.r2=n;let r=new P(new J(1.2,.014,10,64),t.jade);r.rotation.x=Math.PI/2,r.rotation.z=Math.PI/8,r.position.y=-.92,R.add(r),B.r3=r}else if(z===`orbit`){let e=[];[0,Math.PI*2/3,Math.PI*4/3].forEach(n=>{let r=new P(new q(.07,18,18),t.jade);r.position.set(Math.cos(n)*1.45,0,Math.sin(n)*.35),r.userData.phase=n,R.add(r),e.push(r)}),B.orbits=e}let V=null,ee=Qt();if(ee){let e=new L({map:ee,transparent:!0,opacity:.32,depthWrite:!1});V=new P(new I(2.2,.9),e),V.rotation.x=-Math.PI/2,V.position.set(0,qt,0),n.add(V)}return{root:n,headGroup:r,innerGroup:a,shell:o,inset:b,ears:[u,f],eyesGroup:E,leftEye:O,rightEye:k,eyesKind:A,antennaGroup:j,antennaTip:N,auraGroup:R,auraRefs:B,shadow:V}}function nn(e,t=[]){let n=new Set,r=new Set,i=new Set;e.traverse(e=>{let t=e;t.geometry&&!r.has(t.geometry)&&(r.add(t.geometry),t.geometry.dispose());let a=t.material;if(!a)return;let o=Array.isArray(a)?a:[a];for(let e of o){if(n.has(e))continue;n.add(e);let t=e;t.map&&!i.has(t.map)&&i.add(t.map),t.envMap&&!i.has(t.envMap)&&i.add(t.envMap),t.normalMap&&!i.has(t.normalMap)&&i.add(t.normalMap),e.dispose()}});for(let e of t)e&&!i.has(e)&&i.add(e);for(let e of i)e.dispose()}function rn({config:e=f,expression:i=`happy`,className:s=``,fallbackMode:c=!1}){let l=n(null),[d,p]=a(!1),[m,h]=a(!1),g=n(null),_=n(null),v=n({x:0,y:0,active:!1});r(()=>{if(typeof window>`u`||!window.matchMedia)return;let e=window.matchMedia(`(prefers-reduced-motion: reduce)`);h(e.matches);let t=e=>h(e.matches);return e.addEventListener?.(`change`,t),()=>e.removeEventListener?.(`change`,t)},[]);let y=`${e.chassis}-${e.eyes}-${e.antenna}-${e.wings}-${e.headphones}-${e.accent}-${e.baseColor}-${e.visorColor}`;return r(()=>{if(c||d)return;let e=l.current;if(!e)return;let t;try{t=new ie({alpha:!0,antialias:!0})}catch{p(!0);return}let{clientWidth:n,clientHeight:r}=e;t.setSize(n,r),t.setPixelRatio(Math.min(window.devicePixelRatio,2)),t.toneMapping=4,t.toneMappingExposure=1.15,e.appendChild(t.domElement);let i=new V,a=new B(34,n/r,.1,100);a.position.set(0,.12,4.8),a.lookAt(0,-.02,0);let o=new de(16777215,.3);i.add(o);let s=new ve(13623551,1315344,.5);i.add(s);let u=new _e(16777215,1.25);u.position.set(2.6,4.2,4.6),i.add(u);let f=new _e(11982079,.4);f.position.set(-3.6,1.2,2.6),i.add(f);let m=new _e(16767395,.3);m.position.set(0,2.6,-4),i.add(m);let h=new be(60075,1,8);h.position.set(0,-1.7,2.1),i.add(h);let y=new be(60075,.35,6);y.position.set(0,2.4,1.6),i.add(y);let b=new G;i.add(b),g.current={renderer:t,scene:i,camera:a,avatarGroup:b,ambient:o,rim:h,kicker:y,animationId:0};let x=()=>{let e=g.current;if(!l.current||!e)return;let{clientWidth:t,clientHeight:n}=l.current;e.renderer.setSize(t,n),e.camera.aspect=t/n,e.camera.updateProjectionMatrix()};window.addEventListener(`resize`,x);let S=t=>{let n=e.getBoundingClientRect();!n.width||!n.height||(v.current.x=(t.clientX-n.left)/n.width*2-1,v.current.y=(t.clientY-n.top)/n.height*2-1,v.current.active=!0)},C=()=>{v.current.active=!1};return e.addEventListener(`pointermove`,S),e.addEventListener(`pointerleave`,C),()=>{window.removeEventListener(`resize`,x),e.removeEventListener(`pointermove`,S),e.removeEventListener(`pointerleave`,C);let t=g.current;if(t){cancelAnimationFrame(t.animationId),_.current&&=(nn(t.avatarGroup,[_.current.envMap]),null),e.contains(t.renderer.domElement)&&e.removeChild(t.renderer.domElement);try{t.renderer.forceContextLoss()}catch{}t.renderer.dispose(),g.current=null}}},[c,d]),r(()=>{let t=g.current;if(!t||c||d)return;_.current&&=(t.avatarGroup.remove(_.current.parts.root),t.avatarGroup.remove(_.current.particles),nn(_.current.parts.root,[_.current.envMap]),_.current.particles.geometry.dispose(),_.current.particles.material.dispose(),null);let n=Bt(o(e.accent),60075),r=Bt(w(e.baseColor),16579580),i=Bt(b(e.baseColor,e.visorColor)),a=C(e.baseColor);t.ambient.intensity=a?.42:.3,t.rim.color.setHex(n),t.kicker.color.setHex(n);let s=Zt(n),l=tn(e,$t({shell:r,inset:i,accent:n,envMap:s,light:a}));t.avatarGroup.add(l.root);let u=e.wings===`dust`?36:16,f=new ae,p=new Float32Array(u*3);for(let e=0;e<u;e++)p[e*3]=(Math.random()-.5)*3.2,p[e*3+1]=-1.6+Math.random()*3.6,p[e*3+2]=-.6+Math.random()*.8;f.setAttribute(`position`,new D(p,3));let m=new le(f,new ce({color:n,size:e.wings===`dust`?.045:.025,transparent:!0,opacity:e.wings===`dust`?.7:.4}));t.avatarGroup.add(m),_.current={parts:l,particles:m,envMap:s}},[y,c,d]),r(()=>{let e=g.current;if(!e||c||d)return;let t=0,n=3+Math.random()*2,r=0,a=0,o=.04,s=1.4,l=.05,u=!1,f=1,p=.95;switch(i){case`happy`:o=.06,s=1.8,p=1;break;case`sad`:r=.14,o=.02,s=.6,u=!0,p=.4;break;case`angry`:r=-.05,o=.03,s=2.6,u=!0,f=.7,l=.1,p=1.25;break;case`sleepy`:f=.18,a=.18,r=.08,o=.02,s=.5,l=.015,p=.35;break;case`bored`:f=.35,a=.08,o=.02,s=.7,p=.5;break;case`hyped`:o=.14,s=3.2,l=.14,f=1.2,p=1.4;break;case`shake_head`:case`nod`:o=.04;break}let h=()=>{let e=g.current;if(!e)return;e.animationId=requestAnimationFrame(h);let c=_.current;if(!c){e.renderer.render(e.scene,e.camera);return}if(m){e.renderer.render(e.scene,e.camera);return}let d=c.parts,y=c.particles;t+=.016;let b=Math.sin(t*s)*o+.02;e.avatarGroup.position.y=b;let x=1+Math.sin(t*1.5)*.012;if(d.headGroup.scale.set(x,x,x),d.shadow){d.shadow.position.y=qt-b;let e=1-b*.35;d.shadow.scale.set(e,e,e),d.shadow.material.opacity=Math.max(.16,.34-b*.6)}let S=v.current;if(i===`shake_head`)d.headGroup.rotation.y=Math.sin(t*5)*.25;else if(i===`nod`)d.headGroup.rotation.x=Math.sin(t*4)*.18;else{let e=S.active?S.x*.34:Math.sin(t*.4)*.06,n=r+(S.active?S.y*.16:0);d.headGroup.rotation.y=O.lerp(d.headGroup.rotation.y,e,S.active?.12:.08),d.headGroup.rotation.x=O.lerp(d.headGroup.rotation.x,n,.08),d.headGroup.rotation.z=O.lerp(d.headGroup.rotation.z,a,.06)}d.antennaGroup.rotation.z=Math.sin(t*2)*l;let C=1;if(t>n){let e=t-n;e<.16?C=1-e/.16:e<.32?C=(e-.16)/.16:n=t+3+Math.random()*3}let w=f*Math.max(.08,C),T=d.eyesKind===`smile`&&u?-w:w;d.leftEye.scale.y=O.lerp(d.leftEye.scale.y,T,.35),d.rightEye&&(d.rightEye.scale.y=O.lerp(d.rightEye.scale.y,T,.35));let E=p*(.85+Math.sin(t*2.4)*.2),D=d.antennaTip?.material;if(D&&(D.emissiveIntensity=O.lerp(D.emissiveIntensity,E*1.05,.08)),d.auraRefs.kind===`pulse`&&d.auraRefs.r1&&d.auraRefs.r2){let e=1+Math.sin(t*1.8)*.06,n=1+Math.sin(t*1.8+.5)*.05;if(d.auraRefs.r1.scale.set(e,e,e),d.auraRefs.r2.scale.set(n*1.04,n*1.04,n*1.04),d.auraRefs.r3){let e=1+Math.sin(t*1.8+1)*.04;d.auraRefs.r3.scale.set(e*1.02,e*1.02,e*1.02),d.auraRefs.r3.rotation.z+=.004}}d.auraRefs.kind===`halo`&&d.auraRefs.halo&&(d.auraGroup.rotation.y+=.006),d.auraRefs.kind===`orbit`&&d.auraRefs.orbits&&d.auraRefs.orbits.forEach(e=>{let n=(e.userData.phase??0)+t*.6;e.position.x=Math.cos(n)*1.5,e.position.z=Math.sin(n)*.45,e.position.y=Math.sin(n*.5)*.18});let k=y.geometry.getAttribute(`position`);if(k&&k.count){for(let e=0;e<k.count;e++){let n=k.getY(e);n+=.008,n>2.4&&(n=-1.6),k.setY(e,n),k.setX(e,k.getX(e)+Math.sin(t+e*.4)*8e-4)}k.needsUpdate=!0}e.renderer.render(e.scene,e.camera)};return cancelAnimationFrame(e.animationId),h(),()=>{let e=g.current;e&&cancelAnimationFrame(e.animationId)}},[i,m,c,d]),c||d?t(`div`,{className:`flex items-center justify-center rounded-2xl bg-slate-50 dark:bg-void-800/40 ${s}`,style:{minHeight:`200px`,width:`100%`,height:`100%`},"data-testid":`agent-avatar-fallback`,children:t(u,{config:e,expression:i,className:`w-full h-full max-w-[220px]`})}):t(`div`,{ref:l,className:`w-full h-full relative ${s}`,style:{minHeight:`200px`},"data-testid":`agent-avatar-scene`})}export{rn as AgentAvatarScene};
|
|
1
|
+
import{r as e}from"./rolldown-runtime-Cyuzqnbw.js";import{a as t,h as n,w as r,x as i,y as a}from"./vendor-Dl0fhdV0.js";import{$n as o,An as s,Bn as c,Dn as l,En as u,Fn as d,Hn as f,In as p,Ln as m,Mn as h,Nn as g,On as _,Pn as v,Rn as y,er as b,jn as x,kn as S,nr as C,tr as w,zn as T}from"./index-DdNzHP9F.js";import{A as E,C as D,D as O,E as k,M as A,O as j,T as M,_ as N,a as P,b as F,c as I,d as L,f as R,g as z,h as B,i as V,j as ee,k as te,l as H,m as ne,n as re,p as U,r as W,s as G,t as ie,v as ae,w as K,x as oe,y as se}from"./WebGLRenderer-D904dTMp.js";import{n as ce,t as le}from"./Points-T2ogl268.js";var ue=class extends se{constructor(e,t=1){super(),this.isLight=!0,this.type=`Light`,this.color=new N(e),this.intensity=t}dispose(){this.dispatchEvent({type:`dispose`})}copy(e,t){return super.copy(e,t),this.color.copy(e.color),this.intensity=e.intensity,this}toJSON(e){let t=super.toJSON(e);return t.object.color=this.color.getHex(),t.object.intensity=this.intensity,t}},de=class extends ue{constructor(e,t){super(e,t),this.isAmbientLight=!0,this.type=`AmbientLight`}},fe=new oe,pe=new k,me=new k,he=class{constructor(e){this.camera=e,this.intensity=1,this.bias=0,this.biasNode=null,this.normalBias=0,this.radius=1,this.blurSamples=8,this.mapSize=new M(512,512),this.mapType=A,this.map=null,this.mapPass=null,this.matrix=new oe,this.autoUpdate=!0,this.needsUpdate=!1,this._frustum=new U,this._frameExtents=new M(1,1),this._viewportCount=1,this._viewports=[new ne(0,0,1,1)]}getViewportCount(){return this._viewportCount}getFrustum(){return this._frustum}updateMatrices(e){let t=this.camera,n=this.matrix;pe.setFromMatrixPosition(e.matrixWorld),t.position.copy(pe),me.setFromMatrixPosition(e.target.matrixWorld),t.lookAt(me),t.updateMatrixWorld(),fe.multiplyMatrices(t.projectionMatrix,t.matrixWorldInverse),this._frustum.setFromProjectionMatrix(fe,t.coordinateSystem,t.reversedDepth),t.coordinateSystem===2001||t.reversedDepth?n.set(.5,0,0,.5,0,.5,0,.5,0,0,1,0,0,0,0,1):n.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1),n.multiply(fe)}getViewport(e){return this._viewports[e]}getFrameExtents(){return this._frameExtents}dispose(){this.map&&this.map.dispose(),this.mapPass&&this.mapPass.dispose()}copy(e){return this.camera=e.camera.clone(),this.intensity=e.intensity,this.bias=e.bias,this.radius=e.radius,this.autoUpdate=e.autoUpdate,this.needsUpdate=e.needsUpdate,this.normalBias=e.normalBias,this.blurSamples=e.blurSamples,this.mapSize.copy(e.mapSize),this.biasNode=e.biasNode,this}clone(){return new this.constructor().copy(this)}toJSON(){let e={};return this.intensity!==1&&(e.intensity=this.intensity),this.bias!==0&&(e.bias=this.bias),this.normalBias!==0&&(e.normalBias=this.normalBias),this.radius!==1&&(e.radius=this.radius),(this.mapSize.x!==512||this.mapSize.y!==512)&&(e.mapSize=this.mapSize.toArray()),e.camera=this.camera.toJSON(!1).object,delete e.camera.matrix,e}},ge=class extends he{constructor(){super(new z(-5,5,5,-5,.5,500)),this.isDirectionalLightShadow=!0}},_e=class extends ue{constructor(e,t){super(e,t),this.isDirectionalLight=!0,this.type=`DirectionalLight`,this.position.copy(se.DEFAULT_UP),this.updateMatrix(),this.target=new se,this.shadow=new ge}dispose(){super.dispose(),this.shadow.dispose()}copy(e){return super.copy(e),this.target=e.target.clone(),this.shadow=e.shadow.clone(),this}toJSON(e){let t=super.toJSON(e);return t.object.shadow=this.shadow.toJSON(),t.object.target=this.target.uuid,t}},ve=class extends ue{constructor(e,t,n){super(e,n),this.isHemisphereLight=!0,this.type=`HemisphereLight`,this.position.copy(se.DEFAULT_UP),this.updateMatrix(),this.groundColor=new N(t)}copy(e,t){return super.copy(e,t),this.groundColor.copy(e.groundColor),this}toJSON(e){let t=super.toJSON(e);return t.object.groundColor=this.groundColor.getHex(),t}},ye=class extends he{constructor(){super(new B(90,1,.5,500)),this.isPointLightShadow=!0}},be=class extends ue{constructor(e,t,n=0,r=2){super(e,t),this.isPointLight=!0,this.type=`PointLight`,this.distance=n,this.decay=r,this.shadow=new ye}get power(){return this.intensity*4*Math.PI}set power(e){this.intensity=e/(4*Math.PI)}dispose(){super.dispose(),this.shadow.dispose()}copy(e,t){return super.copy(e,t),this.distance=e.distance,this.decay=e.decay,this.shadow=e.shadow.clone(),this}toJSON(e){let t=super.toJSON(e);return t.object.distance=this.distance,t.object.decay=this.decay,t.object.shadow=this.shadow.toJSON(),t}},xe=class extends R{constructor(e){super(),this.isMeshStandardMaterial=!0,this.type=`MeshStandardMaterial`,this.defines={STANDARD:``},this.color=new N(16777215),this.roughness=1,this.metalness=0,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new N(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new M(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.roughnessMap=null,this.metalnessMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new F,this.envMapIntensity=1,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap=`round`,this.wireframeLinejoin=`round`,this.flatShading=!1,this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.defines={STANDARD:``},this.color.copy(e.color),this.roughness=e.roughness,this.metalness=e.metalness,this.map=e.map,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.emissive.copy(e.emissive),this.emissiveMap=e.emissiveMap,this.emissiveIntensity=e.emissiveIntensity,this.bumpMap=e.bumpMap,this.bumpScale=e.bumpScale,this.normalMap=e.normalMap,this.normalMapType=e.normalMapType,this.normalScale.copy(e.normalScale),this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.roughnessMap=e.roughnessMap,this.metalnessMap=e.metalnessMap,this.alphaMap=e.alphaMap,this.envMap=e.envMap,this.envMapRotation.copy(e.envMapRotation),this.envMapIntensity=e.envMapIntensity,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.flatShading=e.flatShading,this.fog=e.fog,this}},Se=class extends xe{constructor(e){super(),this.isMeshPhysicalMaterial=!0,this.defines={STANDARD:``,PHYSICAL:``},this.type=`MeshPhysicalMaterial`,this.anisotropyRotation=0,this.anisotropyMap=null,this.clearcoatMap=null,this.clearcoatRoughness=0,this.clearcoatRoughnessMap=null,this.clearcoatNormalScale=new M(1,1),this.clearcoatNormalMap=null,this.ior=1.5,Object.defineProperty(this,"reflectivity",{get:function(){return j(2.5*(this.ior-1)/(this.ior+1),0,1)},set:function(e){this.ior=(1+.4*e)/(1-.4*e)}}),this.iridescenceMap=null,this.iridescenceIOR=1.3,this.iridescenceThicknessRange=[100,400],this.iridescenceThicknessMap=null,this.sheenColor=new N(0),this.sheenColorMap=null,this.sheenRoughness=1,this.sheenRoughnessMap=null,this.transmissionMap=null,this.thickness=0,this.thicknessMap=null,this.attenuationDistance=1/0,this.attenuationColor=new N(1,1,1),this.specularIntensity=1,this.specularIntensityMap=null,this.specularColor=new N(1,1,1),this.specularColorMap=null,this._anisotropy=0,this._clearcoat=0,this._dispersion=0,this._iridescence=0,this._sheen=0,this._transmission=0,this.setValues(e)}get anisotropy(){return this._anisotropy}set anisotropy(e){this._anisotropy>0!=e>0&&this.version++,this._anisotropy=e}get clearcoat(){return this._clearcoat}set clearcoat(e){this._clearcoat>0!=e>0&&this.version++,this._clearcoat=e}get iridescence(){return this._iridescence}set iridescence(e){this._iridescence>0!=e>0&&this.version++,this._iridescence=e}get dispersion(){return this._dispersion}set dispersion(e){this._dispersion>0!=e>0&&this.version++,this._dispersion=e}get sheen(){return this._sheen}set sheen(e){this._sheen>0!=e>0&&this.version++,this._sheen=e}get transmission(){return this._transmission}set transmission(e){this._transmission>0!=e>0&&this.version++,this._transmission=e}copy(e){return super.copy(e),this.defines={STANDARD:``,PHYSICAL:``},this.anisotropy=e.anisotropy,this.anisotropyRotation=e.anisotropyRotation,this.anisotropyMap=e.anisotropyMap,this.clearcoat=e.clearcoat,this.clearcoatMap=e.clearcoatMap,this.clearcoatRoughness=e.clearcoatRoughness,this.clearcoatRoughnessMap=e.clearcoatRoughnessMap,this.clearcoatNormalMap=e.clearcoatNormalMap,this.clearcoatNormalScale.copy(e.clearcoatNormalScale),this.dispersion=e.dispersion,this.ior=e.ior,this.iridescence=e.iridescence,this.iridescenceMap=e.iridescenceMap,this.iridescenceIOR=e.iridescenceIOR,this.iridescenceThicknessRange=[...e.iridescenceThicknessRange],this.iridescenceThicknessMap=e.iridescenceThicknessMap,this.sheen=e.sheen,this.sheenColor.copy(e.sheenColor),this.sheenColorMap=e.sheenColorMap,this.sheenRoughness=e.sheenRoughness,this.sheenRoughnessMap=e.sheenRoughnessMap,this.transmission=e.transmission,this.transmissionMap=e.transmissionMap,this.thickness=e.thickness,this.thicknessMap=e.thicknessMap,this.attenuationDistance=e.attenuationDistance,this.attenuationColor.copy(e.attenuationColor),this.specularIntensity=e.specularIntensity,this.specularIntensityMap=e.specularIntensityMap,this.specularColor.copy(e.specularColor),this.specularColorMap=e.specularColorMap,this}},Ce=class e extends ae{constructor(e=1,t=32,n=0,r=Math.PI*2){super(),this.type=`CircleGeometry`,this.parameters={radius:e,segments:t,thetaStart:n,thetaLength:r},t=Math.max(3,t);let i=[],a=[],o=[],s=[],c=new k,l=new M;a.push(0,0,0),o.push(0,0,1),s.push(.5,.5);for(let i=0,u=3;i<=t;i++,u+=3){let d=n+i/t*r;c.x=e*Math.cos(d),c.y=e*Math.sin(d),a.push(c.x,c.y,c.z),o.push(0,0,1),l.x=(a[u]/e+1)/2,l.y=(a[u+1]/e+1)/2,s.push(l.x,l.y)}for(let e=1;e<=t;e++)i.push(e,e+1,0);this.setIndex(i),this.setAttribute(`position`,new K(a,3)),this.setAttribute(`normal`,new K(o,3)),this.setAttribute(`uv`,new K(s,2))}copy(e){return super.copy(e),this.parameters=Object.assign({},e.parameters),this}static fromJSON(t){return new e(t.radius,t.segments,t.thetaStart,t.thetaLength)}},q=class e extends ae{constructor(e=1,t=32,n=16,r=0,i=Math.PI*2,a=0,o=Math.PI){super(),this.type=`SphereGeometry`,this.parameters={radius:e,widthSegments:t,heightSegments:n,phiStart:r,phiLength:i,thetaStart:a,thetaLength:o},t=Math.max(3,Math.floor(t)),n=Math.max(2,Math.floor(n));let s=Math.min(a+o,Math.PI),c=0,l=[],u=new k,d=new k,f=[],p=[],m=[],h=[];for(let f=0;f<=n;f++){let g=[],_=f/n,v=0;f===0&&a===0?v=.5/t:f===n&&s===Math.PI&&(v=-.5/t);for(let n=0;n<=t;n++){let s=n/t;u.x=-e*Math.cos(r+s*i)*Math.sin(a+_*o),u.y=e*Math.cos(a+_*o),u.z=e*Math.sin(r+s*i)*Math.sin(a+_*o),p.push(u.x,u.y,u.z),d.copy(u).normalize(),m.push(d.x,d.y,d.z),h.push(s+v,1-_),g.push(c++)}l.push(g)}for(let e=0;e<n;e++)for(let r=0;r<t;r++){let t=l[e][r+1],i=l[e][r],o=l[e+1][r],c=l[e+1][r+1];(e!==0||a>0)&&f.push(t,i,c),(e!==n-1||s<Math.PI)&&f.push(i,o,c)}this.setIndex(f),this.setAttribute(`position`,new K(p,3)),this.setAttribute(`normal`,new K(m,3)),this.setAttribute(`uv`,new K(h,2))}copy(e){return super.copy(e),this.parameters=Object.assign({},e.parameters),this}static fromJSON(t){return new e(t.radius,t.widthSegments,t.heightSegments,t.phiStart,t.phiLength,t.thetaStart,t.thetaLength)}},J=class e extends ae{constructor(e=1,t=.4,n=12,r=48,i=Math.PI*2,a=0,o=Math.PI*2){super(),this.type=`TorusGeometry`,this.parameters={radius:e,tube:t,radialSegments:n,tubularSegments:r,arc:i,thetaStart:a,thetaLength:o},n=Math.floor(n),r=Math.floor(r);let s=[],c=[],l=[],u=[],d=new k,f=new k,p=new k;for(let s=0;s<=n;s++){let m=a+s/n*o;for(let a=0;a<=r;a++){let o=a/r*i;f.x=(e+t*Math.cos(m))*Math.cos(o),f.y=(e+t*Math.cos(m))*Math.sin(o),f.z=t*Math.sin(m),c.push(f.x,f.y,f.z),d.x=e*Math.cos(o),d.y=e*Math.sin(o),p.subVectors(f,d).normalize(),l.push(p.x,p.y,p.z),u.push(a/r),u.push(s/n)}}for(let e=1;e<=n;e++)for(let t=1;t<=r;t++){let n=(r+1)*e+t-1,i=(r+1)*(e-1)+t-1,a=(r+1)*(e-1)+t,o=(r+1)*e+t;s.push(n,i,o),s.push(i,a,o)}this.setIndex(s),this.setAttribute(`position`,new K(c,3)),this.setAttribute(`normal`,new K(l,3)),this.setAttribute(`uv`,new K(u,2))}copy(e){return super.copy(e),this.parameters=Object.assign({},e.parameters),this}static fromJSON(t){return new e(t.radius,t.tube,t.radialSegments,t.tubularSegments,t.arc)}},Y=class{constructor(){this.type=`Curve`,this.arcLengthDivisions=200,this.needsUpdate=!1,this.cacheArcLengths=null}getPoint(){ee(`Curve: .getPoint() not implemented.`)}getPointAt(e,t){let n=this.getUtoTmapping(e);return this.getPoint(n,t)}getPoints(e=5){let t=[];for(let n=0;n<=e;n++)t.push(this.getPoint(n/e));return t}getSpacedPoints(e=5){let t=[];for(let n=0;n<=e;n++)t.push(this.getPointAt(n/e));return t}getLength(){let e=this.getLengths();return e[e.length-1]}getLengths(e=this.arcLengthDivisions){if(this.cacheArcLengths&&this.cacheArcLengths.length===e+1&&!this.needsUpdate)return this.cacheArcLengths;this.needsUpdate=!1;let t=[],n,r=this.getPoint(0),i=0;t.push(0);for(let a=1;a<=e;a++)n=this.getPoint(a/e),i+=n.distanceTo(r),t.push(i),r=n;return this.cacheArcLengths=t,t}updateArcLengths(){this.needsUpdate=!0,this.getLengths()}getUtoTmapping(e,t=null){let n=this.getLengths(),r=0,i=n.length,a;a=t||e*n[i-1];let o=0,s=i-1,c;for(;o<=s;)if(r=Math.floor(o+(s-o)/2),c=n[r]-a,c<0)o=r+1;else if(c>0)s=r-1;else{s=r;break}if(r=s,n[r]===a)return r/(i-1);let l=n[r],u=n[r+1]-l,d=(a-l)/u;return(r+d)/(i-1)}getTangent(e,t){let n=1e-4,r=e-n,i=e+n;r<0&&(r=0),i>1&&(i=1);let a=this.getPoint(r),o=this.getPoint(i),s=t||(a.isVector2?new M:new k);return s.copy(o).sub(a).normalize(),s}getTangentAt(e,t){let n=this.getUtoTmapping(e);return this.getTangent(n,t)}computeFrenetFrames(e,t=!1){let n=new k,r=[],i=[],a=[],o=new k,s=new oe;for(let t=0;t<=e;t++){let n=t/e;r[t]=this.getTangentAt(n,new k)}i[0]=new k,a[0]=new k;let c=Number.MAX_VALUE,l=Math.abs(r[0].x),u=Math.abs(r[0].y),d=Math.abs(r[0].z);l<=c&&(c=l,n.set(1,0,0)),u<=c&&(c=u,n.set(0,1,0)),d<=c&&n.set(0,0,1),o.crossVectors(r[0],n).normalize(),i[0].crossVectors(r[0],o),a[0].crossVectors(r[0],i[0]);for(let t=1;t<=e;t++){if(i[t]=i[t-1].clone(),a[t]=a[t-1].clone(),o.crossVectors(r[t-1],r[t]),o.length()>2**-52){o.normalize();let e=Math.acos(j(r[t-1].dot(r[t]),-1,1));i[t].applyMatrix4(s.makeRotationAxis(o,e))}a[t].crossVectors(r[t],i[t])}if(t===!0){let t=Math.acos(j(i[0].dot(i[e]),-1,1));t/=e,r[0].dot(o.crossVectors(i[0],i[e]))>0&&(t=-t);for(let n=1;n<=e;n++)i[n].applyMatrix4(s.makeRotationAxis(r[n],t*n)),a[n].crossVectors(r[n],i[n])}return{tangents:r,normals:i,binormals:a}}clone(){return new this.constructor().copy(this)}copy(e){return this.arcLengthDivisions=e.arcLengthDivisions,this}toJSON(){let e={metadata:{version:4.7,type:`Curve`,generator:`Curve.toJSON`}};return e.arcLengthDivisions=this.arcLengthDivisions,e.type=this.type,e}fromJSON(e){return this.arcLengthDivisions=e.arcLengthDivisions,this}},we=class extends Y{constructor(e=0,t=0,n=1,r=1,i=0,a=Math.PI*2,o=!1,s=0){super(),this.isEllipseCurve=!0,this.type=`EllipseCurve`,this.aX=e,this.aY=t,this.xRadius=n,this.yRadius=r,this.aStartAngle=i,this.aEndAngle=a,this.aClockwise=o,this.aRotation=s}getPoint(e,t=new M){let n=t,r=Math.PI*2,i=this.aEndAngle-this.aStartAngle,a=Math.abs(i)<2**-52;for(;i<0;)i+=r;for(;i>r;)i-=r;i<2**-52&&(i=a?0:r),this.aClockwise===!0&&!a&&(i===r?i=-r:i-=r);let o=this.aStartAngle+e*i,s=this.aX+this.xRadius*Math.cos(o),c=this.aY+this.yRadius*Math.sin(o);if(this.aRotation!==0){let e=Math.cos(this.aRotation),t=Math.sin(this.aRotation),n=s-this.aX,r=c-this.aY;s=n*e-r*t+this.aX,c=n*t+r*e+this.aY}return n.set(s,c)}copy(e){return super.copy(e),this.aX=e.aX,this.aY=e.aY,this.xRadius=e.xRadius,this.yRadius=e.yRadius,this.aStartAngle=e.aStartAngle,this.aEndAngle=e.aEndAngle,this.aClockwise=e.aClockwise,this.aRotation=e.aRotation,this}toJSON(){let e=super.toJSON();return e.aX=this.aX,e.aY=this.aY,e.xRadius=this.xRadius,e.yRadius=this.yRadius,e.aStartAngle=this.aStartAngle,e.aEndAngle=this.aEndAngle,e.aClockwise=this.aClockwise,e.aRotation=this.aRotation,e}fromJSON(e){return super.fromJSON(e),this.aX=e.aX,this.aY=e.aY,this.xRadius=e.xRadius,this.yRadius=e.yRadius,this.aStartAngle=e.aStartAngle,this.aEndAngle=e.aEndAngle,this.aClockwise=e.aClockwise,this.aRotation=e.aRotation,this}},Te=class extends we{constructor(e,t,n,r,i,a){super(e,t,n,n,r,i,a),this.isArcCurve=!0,this.type=`ArcCurve`}};function Ee(){let e=0,t=0,n=0,r=0;function i(i,a,o,s){e=i,t=o,n=-3*i+3*a-2*o-s,r=2*i-2*a+o+s}return{initCatmullRom:function(e,t,n,r,a){i(t,n,a*(n-e),a*(r-t))},initNonuniformCatmullRom:function(e,t,n,r,a,o,s){let c=(t-e)/a-(n-e)/(a+o)+(n-t)/o,l=(n-t)/o-(r-t)/(o+s)+(r-n)/s;c*=o,l*=o,i(t,n,c,l)},calc:function(i){let a=i*i,o=a*i;return e+t*i+n*a+r*o}}}var De=new k,Oe=new Ee,ke=new Ee,Ae=new Ee,je=class extends Y{constructor(e=[],t=!1,n=`centripetal`,r=.5){super(),this.isCatmullRomCurve3=!0,this.type=`CatmullRomCurve3`,this.points=e,this.closed=t,this.curveType=n,this.tension=r}getPoint(e,t=new k){let n=t,r=this.points,i=r.length,a=(i-+!this.closed)*e,o=Math.floor(a),s=a-o;this.closed?o+=o>0?0:(Math.floor(Math.abs(o)/i)+1)*i:s===0&&o===i-1&&(o=i-2,s=1);let c,l;this.closed||o>0?c=r[(o-1)%i]:(De.subVectors(r[0],r[1]).add(r[0]),c=De);let u=r[o%i],d=r[(o+1)%i];if(this.closed||o+2<i?l=r[(o+2)%i]:(De.subVectors(r[i-1],r[i-2]).add(r[i-1]),l=De),this.curveType===`centripetal`||this.curveType===`chordal`){let e=this.curveType===`chordal`?.5:.25,t=c.distanceToSquared(u)**+e,n=u.distanceToSquared(d)**+e,r=d.distanceToSquared(l)**+e;n<1e-4&&(n=1),t<1e-4&&(t=n),r<1e-4&&(r=n),Oe.initNonuniformCatmullRom(c.x,u.x,d.x,l.x,t,n,r),ke.initNonuniformCatmullRom(c.y,u.y,d.y,l.y,t,n,r),Ae.initNonuniformCatmullRom(c.z,u.z,d.z,l.z,t,n,r)}else this.curveType===`catmullrom`&&(Oe.initCatmullRom(c.x,u.x,d.x,l.x,this.tension),ke.initCatmullRom(c.y,u.y,d.y,l.y,this.tension),Ae.initCatmullRom(c.z,u.z,d.z,l.z,this.tension));return n.set(Oe.calc(s),ke.calc(s),Ae.calc(s)),n}copy(e){super.copy(e),this.points=[];for(let t=0,n=e.points.length;t<n;t++){let n=e.points[t];this.points.push(n.clone())}return this.closed=e.closed,this.curveType=e.curveType,this.tension=e.tension,this}toJSON(){let e=super.toJSON();e.points=[];for(let t=0,n=this.points.length;t<n;t++){let n=this.points[t];e.points.push(n.toArray())}return e.closed=this.closed,e.curveType=this.curveType,e.tension=this.tension,e}fromJSON(e){super.fromJSON(e),this.points=[];for(let t=0,n=e.points.length;t<n;t++){let n=e.points[t];this.points.push(new k().fromArray(n))}return this.closed=e.closed,this.curveType=e.curveType,this.tension=e.tension,this}};function Me(e,t,n,r,i){let a=(r-t)*.5,o=(i-n)*.5,s=e*e,c=e*s;return(2*n-2*r+a+o)*c+(-3*n+3*r-2*a-o)*s+a*e+n}function Ne(e,t){let n=1-e;return n*n*t}function Pe(e,t){return 2*(1-e)*e*t}function Fe(e,t){return e*e*t}function Ie(e,t,n,r){return Ne(e,t)+Pe(e,n)+Fe(e,r)}function Le(e,t){let n=1-e;return n*n*n*t}function Re(e,t){let n=1-e;return 3*n*n*e*t}function ze(e,t){return 3*(1-e)*e*e*t}function Be(e,t){return e*e*e*t}function Ve(e,t,n,r,i){return Le(e,t)+Re(e,n)+ze(e,r)+Be(e,i)}var He=class extends Y{constructor(e=new M,t=new M,n=new M,r=new M){super(),this.isCubicBezierCurve=!0,this.type=`CubicBezierCurve`,this.v0=e,this.v1=t,this.v2=n,this.v3=r}getPoint(e,t=new M){let n=t,r=this.v0,i=this.v1,a=this.v2,o=this.v3;return n.set(Ve(e,r.x,i.x,a.x,o.x),Ve(e,r.y,i.y,a.y,o.y)),n}copy(e){return super.copy(e),this.v0.copy(e.v0),this.v1.copy(e.v1),this.v2.copy(e.v2),this.v3.copy(e.v3),this}toJSON(){let e=super.toJSON();return e.v0=this.v0.toArray(),e.v1=this.v1.toArray(),e.v2=this.v2.toArray(),e.v3=this.v3.toArray(),e}fromJSON(e){return super.fromJSON(e),this.v0.fromArray(e.v0),this.v1.fromArray(e.v1),this.v2.fromArray(e.v2),this.v3.fromArray(e.v3),this}},Ue=class extends Y{constructor(e=new k,t=new k,n=new k,r=new k){super(),this.isCubicBezierCurve3=!0,this.type=`CubicBezierCurve3`,this.v0=e,this.v1=t,this.v2=n,this.v3=r}getPoint(e,t=new k){let n=t,r=this.v0,i=this.v1,a=this.v2,o=this.v3;return n.set(Ve(e,r.x,i.x,a.x,o.x),Ve(e,r.y,i.y,a.y,o.y),Ve(e,r.z,i.z,a.z,o.z)),n}copy(e){return super.copy(e),this.v0.copy(e.v0),this.v1.copy(e.v1),this.v2.copy(e.v2),this.v3.copy(e.v3),this}toJSON(){let e=super.toJSON();return e.v0=this.v0.toArray(),e.v1=this.v1.toArray(),e.v2=this.v2.toArray(),e.v3=this.v3.toArray(),e}fromJSON(e){return super.fromJSON(e),this.v0.fromArray(e.v0),this.v1.fromArray(e.v1),this.v2.fromArray(e.v2),this.v3.fromArray(e.v3),this}},We=class extends Y{constructor(e=new M,t=new M){super(),this.isLineCurve=!0,this.type=`LineCurve`,this.v1=e,this.v2=t}getPoint(e,t=new M){let n=t;return e===1?n.copy(this.v2):(n.copy(this.v2).sub(this.v1),n.multiplyScalar(e).add(this.v1)),n}getPointAt(e,t){return this.getPoint(e,t)}getTangent(e,t=new M){return t.subVectors(this.v2,this.v1).normalize()}getTangentAt(e,t){return this.getTangent(e,t)}copy(e){return super.copy(e),this.v1.copy(e.v1),this.v2.copy(e.v2),this}toJSON(){let e=super.toJSON();return e.v1=this.v1.toArray(),e.v2=this.v2.toArray(),e}fromJSON(e){return super.fromJSON(e),this.v1.fromArray(e.v1),this.v2.fromArray(e.v2),this}},Ge=class extends Y{constructor(e=new k,t=new k){super(),this.isLineCurve3=!0,this.type=`LineCurve3`,this.v1=e,this.v2=t}getPoint(e,t=new k){let n=t;return e===1?n.copy(this.v2):(n.copy(this.v2).sub(this.v1),n.multiplyScalar(e).add(this.v1)),n}getPointAt(e,t){return this.getPoint(e,t)}getTangent(e,t=new k){return t.subVectors(this.v2,this.v1).normalize()}getTangentAt(e,t){return this.getTangent(e,t)}copy(e){return super.copy(e),this.v1.copy(e.v1),this.v2.copy(e.v2),this}toJSON(){let e=super.toJSON();return e.v1=this.v1.toArray(),e.v2=this.v2.toArray(),e}fromJSON(e){return super.fromJSON(e),this.v1.fromArray(e.v1),this.v2.fromArray(e.v2),this}},Ke=class extends Y{constructor(e=new M,t=new M,n=new M){super(),this.isQuadraticBezierCurve=!0,this.type=`QuadraticBezierCurve`,this.v0=e,this.v1=t,this.v2=n}getPoint(e,t=new M){let n=t,r=this.v0,i=this.v1,a=this.v2;return n.set(Ie(e,r.x,i.x,a.x),Ie(e,r.y,i.y,a.y)),n}copy(e){return super.copy(e),this.v0.copy(e.v0),this.v1.copy(e.v1),this.v2.copy(e.v2),this}toJSON(){let e=super.toJSON();return e.v0=this.v0.toArray(),e.v1=this.v1.toArray(),e.v2=this.v2.toArray(),e}fromJSON(e){return super.fromJSON(e),this.v0.fromArray(e.v0),this.v1.fromArray(e.v1),this.v2.fromArray(e.v2),this}},qe=class extends Y{constructor(e=new k,t=new k,n=new k){super(),this.isQuadraticBezierCurve3=!0,this.type=`QuadraticBezierCurve3`,this.v0=e,this.v1=t,this.v2=n}getPoint(e,t=new k){let n=t,r=this.v0,i=this.v1,a=this.v2;return n.set(Ie(e,r.x,i.x,a.x),Ie(e,r.y,i.y,a.y),Ie(e,r.z,i.z,a.z)),n}copy(e){return super.copy(e),this.v0.copy(e.v0),this.v1.copy(e.v1),this.v2.copy(e.v2),this}toJSON(){let e=super.toJSON();return e.v0=this.v0.toArray(),e.v1=this.v1.toArray(),e.v2=this.v2.toArray(),e}fromJSON(e){return super.fromJSON(e),this.v0.fromArray(e.v0),this.v1.fromArray(e.v1),this.v2.fromArray(e.v2),this}},Je=class extends Y{constructor(e=[]){super(),this.isSplineCurve=!0,this.type=`SplineCurve`,this.points=e}getPoint(e,t=new M){let n=t,r=this.points,i=(r.length-1)*e,a=Math.floor(i),o=i-a,s=r[a===0?a:a-1],c=r[a],l=r[a>r.length-2?r.length-1:a+1],u=r[a>r.length-3?r.length-1:a+2];return n.set(Me(o,s.x,c.x,l.x,u.x),Me(o,s.y,c.y,l.y,u.y)),n}copy(e){super.copy(e),this.points=[];for(let t=0,n=e.points.length;t<n;t++){let n=e.points[t];this.points.push(n.clone())}return this}toJSON(){let e=super.toJSON();e.points=[];for(let t=0,n=this.points.length;t<n;t++){let n=this.points[t];e.points.push(n.toArray())}return e}fromJSON(e){super.fromJSON(e),this.points=[];for(let t=0,n=e.points.length;t<n;t++){let n=e.points[t];this.points.push(new M().fromArray(n))}return this}},Ye=e({ArcCurve:()=>Te,CatmullRomCurve3:()=>je,CubicBezierCurve:()=>He,CubicBezierCurve3:()=>Ue,EllipseCurve:()=>we,LineCurve:()=>We,LineCurve3:()=>Ge,QuadraticBezierCurve:()=>Ke,QuadraticBezierCurve3:()=>qe,SplineCurve:()=>Je}),Xe=class extends Y{constructor(){super(),this.type=`CurvePath`,this.curves=[],this.autoClose=!1}add(e){this.curves.push(e)}closePath(){let e=this.curves[0].getPoint(0),t=this.curves[this.curves.length-1].getPoint(1);if(!e.equals(t)){let n=e.isVector2===!0?`LineCurve`:`LineCurve3`;this.curves.push(new Ye[n](t,e))}return this}getPoint(e,t){let n=e*this.getLength(),r=this.getCurveLengths(),i=0;for(;i<r.length;){if(r[i]>=n){let e=r[i]-n,a=this.curves[i],o=a.getLength(),s=o===0?0:1-e/o;return a.getPointAt(s,t)}i++}return null}getLength(){let e=this.getCurveLengths();return e[e.length-1]}updateArcLengths(){this.needsUpdate=!0,this.cacheLengths=null,this.getCurveLengths()}getCurveLengths(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;let e=[],t=0;for(let n=0,r=this.curves.length;n<r;n++)t+=this.curves[n].getLength(),e.push(t);return this.cacheLengths=e,e}getSpacedPoints(e=40){let t=[];for(let n=0;n<=e;n++)t.push(this.getPoint(n/e));return this.autoClose&&t.push(t[0]),t}getPoints(e=12){let t=[],n;for(let r=0,i=this.curves;r<i.length;r++){let a=i[r],o=a.isEllipseCurve?e*2:a.isLineCurve||a.isLineCurve3?1:a.isSplineCurve?e*a.points.length:e,s=a.getPoints(o);for(let e=0;e<s.length;e++){let r=s[e];n&&n.equals(r)||(t.push(r),n=r)}}return this.autoClose&&t.length>1&&!t[t.length-1].equals(t[0])&&t.push(t[0]),t}copy(e){super.copy(e),this.curves=[];for(let t=0,n=e.curves.length;t<n;t++){let n=e.curves[t];this.curves.push(n.clone())}return this.autoClose=e.autoClose,this}toJSON(){let e=super.toJSON();e.autoClose=this.autoClose,e.curves=[];for(let t=0,n=this.curves.length;t<n;t++){let n=this.curves[t];e.curves.push(n.toJSON())}return e}fromJSON(e){super.fromJSON(e),this.autoClose=e.autoClose,this.curves=[];for(let t=0,n=e.curves.length;t<n;t++){let n=e.curves[t];this.curves.push(new Ye[n.type]().fromJSON(n))}return this}},Ze=class extends Xe{constructor(e){super(),this.type=`Path`,this.currentPoint=new M,e&&this.setFromPoints(e)}setFromPoints(e){this.moveTo(e[0].x,e[0].y);for(let t=1,n=e.length;t<n;t++)this.lineTo(e[t].x,e[t].y);return this}moveTo(e,t){return this.currentPoint.set(e,t),this}lineTo(e,t){let n=new We(this.currentPoint.clone(),new M(e,t));return this.curves.push(n),this.currentPoint.set(e,t),this}quadraticCurveTo(e,t,n,r){let i=new Ke(this.currentPoint.clone(),new M(e,t),new M(n,r));return this.curves.push(i),this.currentPoint.set(n,r),this}bezierCurveTo(e,t,n,r,i,a){let o=new He(this.currentPoint.clone(),new M(e,t),new M(n,r),new M(i,a));return this.curves.push(o),this.currentPoint.set(i,a),this}splineThru(e){let t=new Je([this.currentPoint.clone()].concat(e));return this.curves.push(t),this.currentPoint.copy(e[e.length-1]),this}arc(e,t,n,r,i,a){let o=this.currentPoint.x,s=this.currentPoint.y;return this.absarc(e+o,t+s,n,r,i,a),this}absarc(e,t,n,r,i,a){return this.absellipse(e,t,n,n,r,i,a),this}ellipse(e,t,n,r,i,a,o,s){let c=this.currentPoint.x,l=this.currentPoint.y;return this.absellipse(e+c,t+l,n,r,i,a,o,s),this}absellipse(e,t,n,r,i,a,o,s){let c=new we(e,t,n,r,i,a,o,s);if(this.curves.length>0){let e=c.getPoint(0);e.equals(this.currentPoint)||this.lineTo(e.x,e.y)}this.curves.push(c);let l=c.getPoint(1);return this.currentPoint.copy(l),this}copy(e){return super.copy(e),this.currentPoint.copy(e.currentPoint),this}toJSON(){let e=super.toJSON();return e.currentPoint=this.currentPoint.toArray(),e}fromJSON(e){return super.fromJSON(e),this.currentPoint.fromArray(e.currentPoint),this}},Qe=class extends Ze{constructor(e){super(e),this.uuid=te(),this.type=`Shape`,this.holes=[]}getPointsHoles(e){let t=[];for(let n=0,r=this.holes.length;n<r;n++)t[n]=this.holes[n].getPoints(e);return t}extractPoints(e){return{shape:this.getPoints(e),holes:this.getPointsHoles(e)}}copy(e){super.copy(e),this.holes=[];for(let t=0,n=e.holes.length;t<n;t++){let n=e.holes[t];this.holes.push(n.clone())}return this}toJSON(){let e=super.toJSON();e.uuid=this.uuid,e.holes=[];for(let t=0,n=this.holes.length;t<n;t++){let n=this.holes[t];e.holes.push(n.toJSON())}return e}fromJSON(e){super.fromJSON(e),this.uuid=e.uuid,this.holes=[];for(let t=0,n=e.holes.length;t<n;t++){let n=e.holes[t];this.holes.push(new Ze().fromJSON(n))}return this}};function $e(e,t,n=2){let r=t&&t.length,i=r?t[0]*n:e.length,a=et(e,0,i,n,!0),o=[];if(!a||a.next===a.prev)return o;let s,c,l;if(r&&(a=ot(e,t,a,n)),e.length>80*n){s=e[0],c=e[1];let t=s,r=c;for(let a=n;a<i;a+=n){let n=e[a],i=e[a+1];n<s&&(s=n),i<c&&(c=i),n>t&&(t=n),i>r&&(r=i)}l=Math.max(t-s,r-c),l=l===0?0:32767/l}return tt(a,o,n,s,c,l,0),o}function et(e,t,n,r,i){let a;if(i===kt(e,t,n,r)>0)for(let i=t;i<n;i+=r)a=Et(i/r|0,e[i],e[i+1],a);else for(let i=n-r;i>=t;i-=r)a=Et(i/r|0,e[i],e[i+1],a);return a&&vt(a,a.next)&&(Dt(a),a=a.next),a}function X(e,t){if(!e)return e;t||=e;let n=e,r;do if(r=!1,!n.steiner&&(vt(n,n.next)||Z(n.prev,n,n.next)===0)){if(Dt(n),n=t=n.prev,n===n.next)break;r=!0}else n=n.next;while(r||n!==t);return t}function tt(e,t,n,r,i,a,o){if(!e)return;!o&&a&&dt(e,r,i,a);let s=e;for(;e.prev!==e.next;){let c=e.prev,l=e.next;if(a?rt(e,r,i,a):nt(e)){t.push(c.i,e.i,l.i),Dt(e),e=l.next,s=l.next;continue}if(e=l,e===s){o?o===1?(e=it(X(e),t),tt(e,t,n,r,i,a,2)):o===2&&at(e,t,n,r,i,a):tt(X(e),t,n,r,i,a,1);break}}}function nt(e){let t=e.prev,n=e,r=e.next;if(Z(t,n,r)>=0)return!1;let i=t.x,a=n.x,o=r.x,s=t.y,c=n.y,l=r.y,u=Math.min(i,a,o),d=Math.min(s,c,l),f=Math.max(i,a,o),p=Math.max(s,c,l),m=r.next;for(;m!==t;){if(m.x>=u&&m.x<=f&&m.y>=d&&m.y<=p&>(i,s,a,c,o,l,m.x,m.y)&&Z(m.prev,m,m.next)>=0)return!1;m=m.next}return!0}function rt(e,t,n,r){let i=e.prev,a=e,o=e.next;if(Z(i,a,o)>=0)return!1;let s=i.x,c=a.x,l=o.x,u=i.y,d=a.y,f=o.y,p=Math.min(s,c,l),m=Math.min(u,d,f),h=Math.max(s,c,l),g=Math.max(u,d,f),_=pt(p,m,t,n,r),v=pt(h,g,t,n,r),y=e.prevZ,b=e.nextZ;for(;y&&y.z>=_&&b&&b.z<=v;){if(y.x>=p&&y.x<=h&&y.y>=m&&y.y<=g&&y!==i&&y!==o&>(s,u,c,d,l,f,y.x,y.y)&&Z(y.prev,y,y.next)>=0||(y=y.prevZ,b.x>=p&&b.x<=h&&b.y>=m&&b.y<=g&&b!==i&&b!==o&>(s,u,c,d,l,f,b.x,b.y)&&Z(b.prev,b,b.next)>=0))return!1;b=b.nextZ}for(;y&&y.z>=_;){if(y.x>=p&&y.x<=h&&y.y>=m&&y.y<=g&&y!==i&&y!==o&>(s,u,c,d,l,f,y.x,y.y)&&Z(y.prev,y,y.next)>=0)return!1;y=y.prevZ}for(;b&&b.z<=v;){if(b.x>=p&&b.x<=h&&b.y>=m&&b.y<=g&&b!==i&&b!==o&>(s,u,c,d,l,f,b.x,b.y)&&Z(b.prev,b,b.next)>=0)return!1;b=b.nextZ}return!0}function it(e,t){let n=e;do{let r=n.prev,i=n.next.next;!vt(r,i)&&yt(r,n,n.next,i)&&Ct(r,i)&&Ct(i,r)&&(t.push(r.i,n.i,i.i),Dt(n),Dt(n.next),n=e=i),n=n.next}while(n!==e);return X(n)}function at(e,t,n,r,i,a){let o=e;do{let e=o.next.next;for(;e!==o.prev;){if(o.i!==e.i&&_t(o,e)){let s=Tt(o,e);o=X(o,o.next),s=X(s,s.next),tt(o,t,n,r,i,a,0),tt(s,t,n,r,i,a,0);return}e=e.next}o=o.next}while(o!==e)}function ot(e,t,n,r){let i=[];for(let n=0,a=t.length;n<a;n++){let o=et(e,t[n]*r,n<a-1?t[n+1]*r:e.length,r,!1);o===o.next&&(o.steiner=!0),i.push(mt(o))}i.sort(st);for(let e=0;e<i.length;e++)n=ct(i[e],n);return n}function st(e,t){let n=e.x-t.x;return n===0&&(n=e.y-t.y,n===0&&(n=(e.next.y-e.y)/(e.next.x-e.x)-(t.next.y-t.y)/(t.next.x-t.x))),n}function ct(e,t){let n=lt(e,t);if(!n)return t;let r=Tt(n,e);return X(r,r.next),X(n,n.next)}function lt(e,t){let n=t,r=e.x,i=e.y,a=-1/0,o;if(vt(e,n))return n;do{if(vt(e,n.next))return n.next;if(i<=n.y&&i>=n.next.y&&n.next.y!==n.y){let e=n.x+(i-n.y)*(n.next.x-n.x)/(n.next.y-n.y);if(e<=r&&e>a&&(a=e,o=n.x<n.next.x?n:n.next,e===r))return o}n=n.next}while(n!==t);if(!o)return null;let s=o,c=o.x,l=o.y,u=1/0;n=o;do{if(r>=n.x&&n.x>=c&&r!==n.x&&ht(i<l?r:a,i,c,l,i<l?a:r,i,n.x,n.y)){let t=Math.abs(i-n.y)/(r-n.x);Ct(n,e)&&(t<u||t===u&&(n.x>o.x||n.x===o.x&&ut(o,n)))&&(o=n,u=t)}n=n.next}while(n!==s);return o}function ut(e,t){return Z(e.prev,e,t.prev)<0&&Z(t.next,e,e.next)<0}function dt(e,t,n,r){let i=e;do i.z===0&&(i.z=pt(i.x,i.y,t,n,r)),i.prevZ=i.prev,i.nextZ=i.next,i=i.next;while(i!==e);i.prevZ.nextZ=null,i.prevZ=null,ft(i)}function ft(e){let t,n=1;do{let r=e,i;e=null;let a=null;for(t=0;r;){t++;let o=r,s=0;for(let e=0;e<n&&(s++,o=o.nextZ,o);e++);let c=n;for(;s>0||c>0&&o;)s!==0&&(c===0||!o||r.z<=o.z)?(i=r,r=r.nextZ,s--):(i=o,o=o.nextZ,c--),a?a.nextZ=i:e=i,i.prevZ=a,a=i;r=o}a.nextZ=null,n*=2}while(t>1);return e}function pt(e,t,n,r,i){return e=(e-n)*i|0,t=(t-r)*i|0,e=(e|e<<8)&16711935,e=(e|e<<4)&252645135,e=(e|e<<2)&858993459,e=(e|e<<1)&1431655765,t=(t|t<<8)&16711935,t=(t|t<<4)&252645135,t=(t|t<<2)&858993459,t=(t|t<<1)&1431655765,e|t<<1}function mt(e){let t=e,n=e;do(t.x<n.x||t.x===n.x&&t.y<n.y)&&(n=t),t=t.next;while(t!==e);return n}function ht(e,t,n,r,i,a,o,s){return(i-o)*(t-s)>=(e-o)*(a-s)&&(e-o)*(r-s)>=(n-o)*(t-s)&&(n-o)*(a-s)>=(i-o)*(r-s)}function gt(e,t,n,r,i,a,o,s){return!(e===o&&t===s)&&ht(e,t,n,r,i,a,o,s)}function _t(e,t){return e.next.i!==t.i&&e.prev.i!==t.i&&!St(e,t)&&(Ct(e,t)&&Ct(t,e)&&wt(e,t)&&(Z(e.prev,e,t.prev)||Z(e,t.prev,t))||vt(e,t)&&Z(e.prev,e,e.next)>0&&Z(t.prev,t,t.next)>0)}function Z(e,t,n){return(t.y-e.y)*(n.x-t.x)-(t.x-e.x)*(n.y-t.y)}function vt(e,t){return e.x===t.x&&e.y===t.y}function yt(e,t,n,r){let i=xt(Z(e,t,n)),a=xt(Z(e,t,r)),o=xt(Z(n,r,e)),s=xt(Z(n,r,t));return!!(i!==a&&o!==s||i===0&&bt(e,n,t)||a===0&&bt(e,r,t)||o===0&&bt(n,e,r)||s===0&&bt(n,t,r))}function bt(e,t,n){return t.x<=Math.max(e.x,n.x)&&t.x>=Math.min(e.x,n.x)&&t.y<=Math.max(e.y,n.y)&&t.y>=Math.min(e.y,n.y)}function xt(e){return e>0?1:e<0?-1:0}function St(e,t){let n=e;do{if(n.i!==e.i&&n.next.i!==e.i&&n.i!==t.i&&n.next.i!==t.i&&yt(n,n.next,e,t))return!0;n=n.next}while(n!==e);return!1}function Ct(e,t){return Z(e.prev,e,e.next)<0?Z(e,t,e.next)>=0&&Z(e,e.prev,t)>=0:Z(e,t,e.prev)<0||Z(e,e.next,t)<0}function wt(e,t){let n=e,r=!1,i=(e.x+t.x)/2,a=(e.y+t.y)/2;do n.y>a!=n.next.y>a&&n.next.y!==n.y&&i<(n.next.x-n.x)*(a-n.y)/(n.next.y-n.y)+n.x&&(r=!r),n=n.next;while(n!==e);return r}function Tt(e,t){let n=Ot(e.i,e.x,e.y),r=Ot(t.i,t.x,t.y),i=e.next,a=t.prev;return e.next=t,t.prev=e,n.next=i,i.prev=n,r.next=n,n.prev=r,a.next=r,r.prev=a,r}function Et(e,t,n,r){let i=Ot(e,t,n);return r?(i.next=r.next,i.prev=r,r.next.prev=i,r.next=i):(i.prev=i,i.next=i),i}function Dt(e){e.next.prev=e.prev,e.prev.next=e.next,e.prevZ&&(e.prevZ.nextZ=e.nextZ),e.nextZ&&(e.nextZ.prevZ=e.prevZ)}function Ot(e,t,n){return{i:e,x:t,y:n,prev:null,next:null,z:0,prevZ:null,nextZ:null,steiner:!1}}function kt(e,t,n,r){let i=0;for(let a=t,o=n-r;a<n;a+=r)i+=(e[o]-e[a])*(e[a+1]+e[o+1]),o=a;return i}var At=class{static triangulate(e,t,n=2){return $e(e,t,n)}},jt=class e{static area(e){let t=e.length,n=0;for(let r=t-1,i=0;i<t;r=i++)n+=e[r].x*e[i].y-e[i].x*e[r].y;return n*.5}static isClockWise(t){return e.area(t)<0}static triangulateShape(e,t){let n=[],r=[],i=[];Mt(e),Nt(n,e);let a=e.length;t.forEach(Mt);for(let e=0;e<t.length;e++)r.push(a),a+=t[e].length,Nt(n,t[e]);let o=At.triangulate(n,r);for(let e=0;e<o.length;e+=3)i.push(o.slice(e,e+3));return i}};function Mt(e){let t=e.length;t>2&&e[t-1].equals(e[0])&&e.pop()}function Nt(e,t){for(let n=0;n<t.length;n++)e.push(t[n].x),e.push(t[n].y)}var Pt=class e extends ae{constructor(e=new Qe([new M(.5,.5),new M(-.5,.5),new M(-.5,-.5),new M(.5,-.5)]),t={}){super(),this.type=`ExtrudeGeometry`,this.parameters={shapes:e,options:t},e=Array.isArray(e)?e:[e];let n=this,r=[],i=[];for(let t=0,n=e.length;t<n;t++){let n=e[t];a(n)}this.setAttribute(`position`,new K(r,3)),this.setAttribute(`uv`,new K(i,2)),this.computeVertexNormals();function a(e){let a=[],o=t.curveSegments===void 0?12:t.curveSegments,s=t.steps===void 0?1:t.steps,c=t.depth===void 0?1:t.depth,l=t.bevelEnabled===void 0?!0:t.bevelEnabled,u=t.bevelThickness===void 0?.2:t.bevelThickness,d=t.bevelSize===void 0?u-.1:t.bevelSize,f=t.bevelOffset===void 0?0:t.bevelOffset,p=t.bevelSegments===void 0?3:t.bevelSegments,m=t.extrudePath,h=t.UVGenerator===void 0?Ft:t.UVGenerator,g,_=!1,v,y,b,x;if(m){g=m.getSpacedPoints(s),_=!0,l=!1;let e=m.isCatmullRomCurve3?m.closed:!1;v=m.computeFrenetFrames(s,e),y=new k,b=new k,x=new k}l||(p=0,u=0,d=0,f=0);let S=e.extractPoints(o),C=S.shape,w=S.holes;if(!jt.isClockWise(C)){C=C.reverse();for(let e=0,t=w.length;e<t;e++){let t=w[e];jt.isClockWise(t)&&(w[e]=t.reverse())}}function T(e){let t=e[0];for(let n=1;n<=e.length;n++){let r=n%e.length,i=e[r],a=i.x-t.x,o=i.y-t.y,s=a*a+o*o,c=Math.max(Math.abs(i.x),Math.abs(i.y),Math.abs(t.x),Math.abs(t.y));if(s<=10000000000000001e-36*c*c){e.splice(r,1),n--;continue}t=i}}T(C),w.forEach(T);let D=w.length,O=C;for(let e=0;e<D;e++){let t=w[e];C=C.concat(t)}function A(e,t,n){return t||E(`ExtrudeGeometry: vec does not exist`),e.clone().addScaledVector(t,n)}let j=C.length;function N(e,t,n){let r,i,a,o=e.x-t.x,s=e.y-t.y,c=n.x-e.x,l=n.y-e.y,u=o*o+s*s,d=o*l-s*c;if(Math.abs(d)>2**-52){let d=Math.sqrt(u),f=Math.sqrt(c*c+l*l),p=t.x-s/d,m=t.y+o/d,h=n.x-l/f,g=n.y+c/f,_=((h-p)*l-(g-m)*c)/(o*l-s*c);r=p+o*_-e.x,i=m+s*_-e.y;let v=r*r+i*i;if(v<=2)return new M(r,i);a=Math.sqrt(v/2)}else{let e=!1;o>2**-52?c>2**-52&&(e=!0):o<-(2**-52)?c<-(2**-52)&&(e=!0):Math.sign(s)===Math.sign(l)&&(e=!0),e?(r=-s,i=o,a=Math.sqrt(u)):(r=o,i=s,a=Math.sqrt(u/2))}return new M(r/a,i/a)}let P=[];for(let e=0,t=O.length,n=t-1,r=e+1;e<t;e++,n++,r++)n===t&&(n=0),r===t&&(r=0),P[e]=N(O[e],O[n],O[r]);let F=[],I,L=P.concat();for(let e=0,t=D;e<t;e++){let t=w[e];I=[];for(let e=0,n=t.length,r=n-1,i=e+1;e<n;e++,r++,i++)r===n&&(r=0),i===n&&(i=0),I[e]=N(t[e],t[r],t[i]);F.push(I),L=L.concat(I)}let R;if(p===0)R=jt.triangulateShape(O,w);else{let e=[],t=[];for(let n=0;n<p;n++){let r=n/p,i=u*Math.cos(r*Math.PI/2),a=d*Math.sin(r*Math.PI/2)+f;for(let t=0,n=O.length;t<n;t++){let n=A(O[t],P[t],a);H(n.x,n.y,-i),r===0&&e.push(n)}for(let e=0,n=D;e<n;e++){let n=w[e];I=F[e];let o=[];for(let e=0,t=n.length;e<t;e++){let t=A(n[e],I[e],a);H(t.x,t.y,-i),r===0&&o.push(t)}r===0&&t.push(o)}}R=jt.triangulateShape(e,t)}let z=R.length,B=d+f;for(let e=0;e<j;e++){let t=l?A(C[e],L[e],B):C[e];_?(b.copy(v.normals[0]).multiplyScalar(t.x),y.copy(v.binormals[0]).multiplyScalar(t.y),x.copy(g[0]).add(b).add(y),H(x.x,x.y,x.z)):H(t.x,t.y,0)}for(let e=1;e<=s;e++)for(let t=0;t<j;t++){let n=l?A(C[t],L[t],B):C[t];_?(b.copy(v.normals[e]).multiplyScalar(n.x),y.copy(v.binormals[e]).multiplyScalar(n.y),x.copy(g[e]).add(b).add(y),H(x.x,x.y,x.z)):H(n.x,n.y,c/s*e)}for(let e=p-1;e>=0;e--){let t=e/p,n=u*Math.cos(t*Math.PI/2),r=d*Math.sin(t*Math.PI/2)+f;for(let e=0,t=O.length;e<t;e++){let t=A(O[e],P[e],r);H(t.x,t.y,c+n)}for(let e=0,t=w.length;e<t;e++){let t=w[e];I=F[e];for(let e=0,i=t.length;e<i;e++){let i=A(t[e],I[e],r);_?H(i.x,i.y+g[s-1].y,g[s-1].x+n):H(i.x,i.y,c+n)}}}V(),ee();function V(){let e=r.length/3;if(l){let e=0,t=j*e;for(let e=0;e<z;e++){let n=R[e];ne(n[2]+t,n[1]+t,n[0]+t)}e=s+p*2,t=j*e;for(let e=0;e<z;e++){let n=R[e];ne(n[0]+t,n[1]+t,n[2]+t)}}else{for(let e=0;e<z;e++){let t=R[e];ne(t[2],t[1],t[0])}for(let e=0;e<z;e++){let t=R[e];ne(t[0]+j*s,t[1]+j*s,t[2]+j*s)}}n.addGroup(e,r.length/3-e,0)}function ee(){let e=r.length/3,t=0;te(O,t),t+=O.length;for(let e=0,n=w.length;e<n;e++){let n=w[e];te(n,t),t+=n.length}n.addGroup(e,r.length/3-e,1)}function te(e,t){let n=e.length;for(;--n>=0;){let r=n,i=n-1;i<0&&(i=e.length-1);for(let e=0,n=s+p*2;e<n;e++){let n=j*e,a=j*(e+1);re(t+r+n,t+i+n,t+i+a,t+r+a)}}}function H(e,t,n){a.push(e),a.push(t),a.push(n)}function ne(e,t,i){U(e),U(t),U(i);let a=r.length/3,o=h.generateTopUV(n,r,a-3,a-2,a-1);W(o[0]),W(o[1]),W(o[2])}function re(e,t,i,a){U(e),U(t),U(a),U(t),U(i),U(a);let o=r.length/3,s=h.generateSideWallUV(n,r,o-6,o-3,o-2,o-1);W(s[0]),W(s[1]),W(s[3]),W(s[1]),W(s[2]),W(s[3])}function U(e){r.push(a[e*3+0]),r.push(a[e*3+1]),r.push(a[e*3+2])}function W(e){i.push(e.x),i.push(e.y)}}}copy(e){return super.copy(e),this.parameters=Object.assign({},e.parameters),this}toJSON(){let e=super.toJSON(),t=this.parameters.shapes,n=this.parameters.options;return It(t,n,e)}static fromJSON(t,n){let r=[];for(let e=0,i=t.shapes.length;e<i;e++){let i=n[t.shapes[e]];r.push(i)}let i=t.options.extrudePath;return i!==void 0&&(t.options.extrudePath=new Ye[i.type]().fromJSON(i)),new e(r,t.options)}},Ft={generateTopUV:function(e,t,n,r,i){let a=t[n*3],o=t[n*3+1],s=t[r*3],c=t[r*3+1],l=t[i*3],u=t[i*3+1];return[new M(a,o),new M(s,c),new M(l,u)]},generateSideWallUV:function(e,t,n,r,i,a){let o=t[n*3],s=t[n*3+1],c=t[n*3+2],l=t[r*3],u=t[r*3+1],d=t[r*3+2],f=t[i*3],p=t[i*3+1],m=t[i*3+2],h=t[a*3],g=t[a*3+1],_=t[a*3+2];return Math.abs(s-u)<Math.abs(o-l)?[new M(o,1-c),new M(l,1-d),new M(f,1-m),new M(h,1-_)]:[new M(s,1-c),new M(u,1-d),new M(p,1-m),new M(g,1-_)]}};function It(e,t,n){if(n.shapes=[],Array.isArray(e))for(let t=0,r=e.length;t<r;t++){let r=e[t];n.shapes.push(r.uuid)}else n.shapes.push(e.uuid);return n.options=Object.assign({},t),t.extrudePath!==void 0&&(n.options.extrudePath=t.extrudePath.toJSON()),n}var Lt=class extends W{constructor(e,t,n,r,i,a,o,s,c){super(e,t,n,r,i,a,o,s,c),this.isCanvasTexture=!0,this.needsUpdate=!0}};i();var Rt=/[MLCZmlcz]|-?(?:\d+\.?\d*|\.\d+)(?:[eE][-+]?\d+)?/g;function zt(e,t){let n=e.match(Rt)??[],r=[],i=null,a=``,o=0,s=e=>(e-t.cx)/t.pxPerUnit,c=e=>(t.cy-e)/t.pxPerUnit,l=()=>parseFloat(n[o++]);for(;o<n.length;){let e=n[o];if(/^[MLCZmlcz]$/.test(e)){a=e.toUpperCase(),o++,a===`Z`&&(i?.closePath(),a=``);continue}a===`M`?(i=new Qe,r.push(i),i.moveTo(s(l()),c(l())),a=`L`):a===`L`?i?.lineTo(s(l()),c(l())):a===`C`?i?.bezierCurveTo(s(l()),c(l()),s(l()),c(l()),s(l()),c(l())):o++}return r}function Q(e,t,n){let r=new Pt(zt(e,t),{depth:n.depth,bevelEnabled:!0,bevelSize:n.bevel,bevelThickness:n.bevel,bevelSegments:n.bevelSegments??4,curveSegments:n.curveSegments??14});return r.translate(0,0,-n.depth/2),r}function Bt(e,t=0){let n=e.match(/^#?([\da-f]{6})$/i);return n?parseInt(n[1],16):t}var Vt={cx:_.CX,cy:_.CY,pxPerUnit:_.PX_PER_UNIT},Ht=.3,Ut=.085,Wt=.24,Gt=.31500000000000006,$=(l.eyeR.x-l.eyeL.x)/2/_.PX_PER_UNIT,Kt=l.insetHalfW*2/_.PX_PER_UNIT,qt=-1.04;function Jt(e,t,n){let r=e/2,i=t/2,a=Math.min(n,r,i),o=new Qe;return o.moveTo(-r+a,-i),o.lineTo(r-a,-i),o.quadraticCurveTo(r,-i,r,-i+a),o.lineTo(r,i-a),o.quadraticCurveTo(r,i,r-a,i),o.lineTo(-r+a,i),o.quadraticCurveTo(-r,i,-r,i-a),o.lineTo(-r,-i+a),o.quadraticCurveTo(-r,-i,-r+a,-i),o}function Yt(e,t){let n=e/2,r=t/2,i=new Qe;return i.moveTo(-n,-r+n),i.bezierCurveTo(-n,-r,n,-r,n,-r+n),i.lineTo(n,r-n),i.bezierCurveTo(n,r,-n,r,-n,r-n),i.lineTo(-n,-r+n),i}function Xt(e,t,n,r=4){return new Pt(e,{depth:t,bevelEnabled:!0,bevelSize:n,bevelThickness:n,bevelSegments:r,curveSegments:24})}function Zt(e){try{let t=[],n=e>>16&255,r=e>>8&255,i=e&255,a=(e,t,n,r)=>{let i=128*t,a=128*n,o=e.createLinearGradient(0,i,0,i+a);o.addColorStop(0,`rgba(255,255,255,0)`),o.addColorStop(.5,`rgba(255,250,244,${r})`),o.addColorStop(1,`rgba(255,255,255,0)`),e.fillStyle=o,e.fillRect(0,i,128,a)};for(let e=0;e<6;e++){let o=document.createElement(`canvas`);o.width=128,o.height=128;let s=o.getContext(`2d`);if(!s||typeof s.createLinearGradient!=`function`)return null;let c=s.createLinearGradient(0,0,0,128);if(c.addColorStop(0,`rgb(46,48,58)`),c.addColorStop(.55,`rgb(20,21,27)`),c.addColorStop(1,`rgb(7,7,10)`),s.fillStyle=c,s.fillRect(0,0,128,128),e===2){let e=s.createRadialGradient(128/2,128/2,6,128/2,128/2,128*.72);e.addColorStop(0,`rgba(255,252,246,0.95)`),e.addColorStop(1,`rgba(255,255,255,0.05)`),s.fillStyle=e,s.fillRect(0,0,128,128)}else if(e===0)a(s,.16,.3,.85);else if(e===1)a(s,.22,.26,.4);else if(e===4)a(s,.2,.2,.28);else if(e===5){let e=s.createRadialGradient(128/2,128*.62,4,128/2,128*.62,128*.6);e.addColorStop(0,`rgba(${n},${r},${i},0.7)`),e.addColorStop(1,`rgba(0,0,0,0)`),s.fillStyle=e,s.fillRect(0,0,128,128)}else e===3&&(s.fillStyle=`rgba(64,52,40,0.35)`,s.fillRect(0,0,128,128));for(let e=0;e<90;e++)s.fillStyle=`rgba(255,255,255,${Math.random()*.05})`,s.fillRect(Math.random()*128,Math.random()*128,1,1);t.push(o)}let o=new re(t);return o.needsUpdate=!0,o}catch{return null}}function Qt(){try{let e=document.createElement(`canvas`);e.width=128,e.height=128;let t=e.getContext(`2d`);if(!t||typeof t.createRadialGradient!=`function`)return null;let n=t.createRadialGradient(128/2,128/2,2,128/2,128/2,128/2);return n.addColorStop(0,`rgba(0,0,0,0.55)`),n.addColorStop(.6,`rgba(0,0,0,0.22)`),n.addColorStop(1,`rgba(0,0,0,0)`),t.fillStyle=n,t.fillRect(0,0,128,128),new Lt(e)}catch{return null}}function $t(e){let{shell:t,inset:n,accent:r,envMap:i,light:a}=e;return{shell:new Se({color:t,metalness:.05,roughness:.34,clearcoat:.9,clearcoatRoughness:.32,envMap:i,envMapIntensity:a?.85:1}),inset:new Se({color:n,metalness:.1,roughness:.16,clearcoat:1,clearcoatRoughness:.1,envMap:i,envMapIntensity:1.15}),bezel:new xe({color:1052688,metalness:.7,roughness:.35,envMap:i,envMapIntensity:.4}),jade:new xe({color:r,emissive:r,emissiveIntensity:.95,metalness:.4,roughness:.18,envMap:i,envMapIntensity:.55}),jadeStem:new xe({color:r,emissive:r,emissiveIntensity:.7,metalness:.35,roughness:.25,envMap:i,envMapIntensity:.45}),jadeGlow:new L({color:r,transparent:!0,opacity:.45}),glint:new L({color:15663096,transparent:!0,opacity:.85}),sheen:new L({color:16777215,transparent:!0,opacity:.07,depthWrite:!1})}}function en(e,t,n){if(e===`bumper`)return;let r=c(l.earL.y),i=T(l.earL.x),a=T(l.earR.x),o=[{x:i,sign:-1},{x:a,sign:1}];if(e===`studio`){let e=new P(new J(Math.abs(i),.045,12,56,Math.PI),n.shell);e.position.set(0,r,.04),t.add(e),o.forEach(({x:e,sign:i})=>{let a=new q(.23,26,26);a.scale(.72,1,.85);let o=new P(a,n.inset);o.position.set(e+i*.04,r,.05),t.add(o);let s=new q(.12,20,20);s.scale(.5,1,1);let c=new P(s,n.jade);c.position.set(e+i*.16,r,.05),t.add(c);let l=new P(new J(.21,.016,10,36),n.shell);l.scale.set(.75,1,1),l.position.set(e+i*.02,r,.08),t.add(l)});return}if(e===`earbuds`){o.forEach(({x:e,sign:i})=>{let a=new P(new q(.09,20,20),n.jade);a.position.set(e+i*.08,r,.12),t.add(a);let o=new P(new J(.17,.013,8,24,Math.PI/2),n.jadeStem);o.rotation.z=i>0?-Math.PI/2:Math.PI,o.position.set(e+i*.08,r-.12,.12),t.add(o)});return}if(e===`loop`){o.forEach(({x:e})=>{let i=new P(new J(.2,.034,12,44),n.jade);i.scale.set(.72,1,1),i.position.set(e,r,.16),t.add(i);let a=new P(new Ce(.16,32),n.jadeGlow);a.scale.set(.72,1,1),a.position.set(e,r,.14),t.add(a)});return}if(e===`fins`){o.forEach(({x:e,sign:i})=>{let a=new Qe;a.moveTo(0,.2),a.lineTo(i*.4,-.05),a.lineTo(i*.46,-.18),a.lineTo(i*.13,-.13),a.lineTo(0,-.05),a.lineTo(0,.2);let o=new P(new Pt(a,{depth:.045,bevelEnabled:!0,bevelSize:.012,bevelThickness:.012,bevelSegments:3,curveSegments:16}),n.jade);o.position.set(e,r,.04),t.add(o)});return}}function tn(e,t){let n=new G,r=new G;n.add(r);let i=y(e.chassis),a=new G;a.scale.set(i.scaleX,i.scaleY,1),r.add(a);let o=new P(Q(p,Vt,{depth:Ht,bevel:Ut,bevelSegments:6,curveSegments:20}),t.shell);a.add(o);let u=new P(Q(h,Vt,{depth:.14,bevel:.05,bevelSegments:5,curveSegments:16}),t.shell);a.add(u);let f=new P(Q(g,Vt,{depth:.14,bevel:.05,bevelSegments:5,curveSegments:16}),t.shell);a.add(f);let b=new P(Q(m,Vt,{depth:.05,bevel:.03,bevelSegments:5,curveSegments:20}),t.inset);b.position.set(0,0,Wt),a.add(b);let C=new P(new I(.8,.2),t.sheen);C.rotation.z=-.3,C.position.set(-.24,-.18,.29900000000000004),a.add(C);let w=new P(new I(.8,.06),t.sheen);w.rotation.z=-.3,w.position.set(-.28,-.32,.29900000000000004),a.add(w);let E=new G;a.add(E),E.position.set(T(l.eyeMid.x),c(l.eyeMid.y),Gt);let D=e.eyes??`smile`,O,k=null,A=`smile`;if(D===`visor`){A=`visor`;let e=new G,n=Kt*.95,r=.24,i=.07,a=new P(Xt(Jt(n+.04,.27999999999999997,r*.48),.02,.005,3),t.inset);a.position.set(0,0,-.02),e.add(a);let o=new P(Xt(Jt(n,r,r*.45),i,.014,5),t.jade);e.add(o);let s=new xe({color:531734,emissive:268818,emissiveIntensity:.45,metalness:.55,roughness:.2}),c=new P(Xt(Jt(n*.92,r*.55,r*.22),.015,.004,3),s);c.position.set(0,0,i*.75),e.add(c);let l=new P(new H(n*.85,r*.2,.006),t.sheen);l.position.set(0,r*.32,i*.95),e.add(l);let u=new q(.034,18,18),d=new P(u,t.jade);d.position.set(-$,0,i*.95),e.add(d);let f=new P(u,t.jade);f.position.set($,0,i*.95),e.add(f);let p=new q(.013,12,12),m=new P(p,t.glint);m.position.set(-$,.005,.08800000000000001),e.add(m);let h=new P(p,t.glint);h.position.set($,.005,.08800000000000001),e.add(h);let g=Xt(Jt(.016,.085,.006),.018,.003,2);[-1,1].forEach(r=>{let a=new P(g,t.jade);a.position.set(r*n*.46,0,i*.85),e.add(a);let o=new P(g,t.jade);o.position.set(r*n*.42,0,i*.85),o.scale.set(1,.55,1),e.add(o)}),E.add(e),O=e}else if(D===`heart`){A=`heart`;let e=e=>{let n=new G,r=new q(.06,18,18),i=new P(r,t.jade);i.position.set(-.04,.025,0);let a=new P(r,t.jade);a.position.set(.04,.025,0),n.add(i),n.add(a);let o=new Qe;o.moveTo(-.07,.02),o.lineTo(.07,.02),o.lineTo(0,-.09),o.lineTo(-.07,.02);let s=new Pt(o,{depth:.04,bevelEnabled:!0,bevelSize:.008,bevelThickness:.008,bevelSegments:3,curveSegments:12});return n.add(new P(s,t.jade)),n.scale.set(1.75,1.75,1.75),n.position.set(e*$,0,.05),E.add(n),n};O=e(-1),k=e(1)}else if(D===`single`){A=`single`,O=new P(new q(.19,32,32),t.jade),E.add(O);let e=new P(new J(.24,.018,12,48),t.jade);E.add(e),k=e;let n=new P(new q(.045,10,10),t.glint);n.position.set(-.055,.055,.17),E.add(n)}else if(D===`pixel`){A=`pixel`;let e=new H(.16,.16,.05);O=new P(e,t.jade),O.position.set(-$,0,.02),E.add(O),k=new P(e,t.jade),k.position.set($,0,.02),E.add(k)}else{A=`smile`;let e={depth:.045,bevel:.014,bevelSegments:4,curveSegments:16};O=new P(Q(v,{cx:l.eyeL.x,cy:l.eyeL.y,pxPerUnit:_.PX_PER_UNIT},e),t.jade),O.position.set(-$,0,.02),E.add(O),k=new P(Q(d,{cx:l.eyeR.x,cy:l.eyeR.y,pxPerUnit:_.PX_PER_UNIT},e),t.jade),k.position.set($,0,.02),E.add(k)}en(e.headphones??`bumper`,a,t);let j=new G;a.add(j),j.position.set(T(l.antennaPivot.x),c(l.antennaPivot.y),0);let M=e.antenna??`jewel`,N=null,F={cx:l.antennaPivot.x,cy:l.antennaPivot.y,pxPerUnit:_.PX_PER_UNIT};if(M===`bunny`)[-1,1].forEach(e=>{let n=new P(Xt(Yt(.07,.42),.04,.012,3),t.jade);n.position.set(e*.18,.16,.02),n.rotation.z=e*.38,j.add(n);let r=new P(new q(.07,18,18),t.jade);r.position.set(e*.34,.36,.03),j.add(r),N||=r});else if(M===`beam`){let e=new P(Xt(Yt(.05,.46),.04,.01,3),t.jade);e.position.set(0,.2,.02),j.add(e);let n=new P(new q(.1,20,20),t.jade);n.position.set(0,.46,.03),j.add(n),N=n;let r=new P(new J(.16,.012,8,32),t.jadeGlow);r.rotation.x=Math.PI/2,r.position.copy(n.position),j.add(r)}else if(M===`wifi`){let e=new P(new q(.05,16,16),t.jade);e.position.set(0,.03,.02),j.add(e),N=e,[.15,.23,.31].forEach(e=>{let n=new P(new J(e,.018,10,24,Math.PI),t.jade);n.position.set(0,.03,.02),j.add(n)})}else if(M!==`none`){let e={depth:.07,bevel:.02,bevelSegments:4,curveSegments:14},n=new P(Q(S,F,e),t.jade);j.add(n),N=n;let r=new P(Q(s,F,e),t.jadeStem);j.add(r);let i=new P(Q(x,F,e),t.jadeStem);j.add(i)}let R=new G;n.add(R);let z=e.wings??`none`,B={kind:z};if(z===`halo`){let e=new P(new J(1,.035,12,80),t.jade);e.rotation.x=Math.PI/2.4,e.position.set(0,.95,-.2),R.add(e),B.halo=e;let n=new P(new J(.82,.02,10,64),t.jade);n.rotation.x=Math.PI/2.4,n.position.set(0,.95,-.2),R.add(n),[-1,0,1].forEach(e=>{let n=new P(new q(.04,14,14),t.jade),r=Math.PI/3*e+Math.PI/2;n.position.set(Math.cos(r)*1,.95+Math.sin(r)*.38-.05,-.2),R.add(n)})}else if(z===`pulse`){let e=new P(new J(1.1,.025,12,80),t.jade);e.rotation.x=Math.PI/2,e.position.y=-.95,R.add(e),B.r1=e;let n=new P(new J(1.3,.018,12,80),t.jadeStem);n.rotation.x=Math.PI/2,n.position.y=-.98,R.add(n),B.r2=n;let r=new P(new J(1.2,.014,10,64),t.jade);r.rotation.x=Math.PI/2,r.rotation.z=Math.PI/8,r.position.y=-.92,R.add(r),B.r3=r}else if(z===`orbit`){let e=[];[0,Math.PI*2/3,Math.PI*4/3].forEach(n=>{let r=new P(new q(.07,18,18),t.jade);r.position.set(Math.cos(n)*1.45,0,Math.sin(n)*.35),r.userData.phase=n,R.add(r),e.push(r)}),B.orbits=e}let V=null,ee=Qt();if(ee){let e=new L({map:ee,transparent:!0,opacity:.32,depthWrite:!1});V=new P(new I(2.2,.9),e),V.rotation.x=-Math.PI/2,V.position.set(0,qt,0),n.add(V)}return{root:n,headGroup:r,innerGroup:a,shell:o,inset:b,ears:[u,f],eyesGroup:E,leftEye:O,rightEye:k,eyesKind:A,antennaGroup:j,antennaTip:N,auraGroup:R,auraRefs:B,shadow:V}}function nn(e,t=[]){let n=new Set,r=new Set,i=new Set;e.traverse(e=>{let t=e;t.geometry&&!r.has(t.geometry)&&(r.add(t.geometry),t.geometry.dispose());let a=t.material;if(!a)return;let o=Array.isArray(a)?a:[a];for(let e of o){if(n.has(e))continue;n.add(e);let t=e;t.map&&!i.has(t.map)&&i.add(t.map),t.envMap&&!i.has(t.envMap)&&i.add(t.envMap),t.normalMap&&!i.has(t.normalMap)&&i.add(t.normalMap),e.dispose()}});for(let e of t)e&&!i.has(e)&&i.add(e);for(let e of i)e.dispose()}function rn({config:e=f,expression:i=`happy`,className:s=``,fallbackMode:c=!1}){let l=n(null),[d,p]=a(!1),[m,h]=a(!1),g=n(null),_=n(null),v=n({x:0,y:0,active:!1});r(()=>{if(typeof window>`u`||!window.matchMedia)return;let e=window.matchMedia(`(prefers-reduced-motion: reduce)`);h(e.matches);let t=e=>h(e.matches);return e.addEventListener?.(`change`,t),()=>e.removeEventListener?.(`change`,t)},[]);let y=`${e.chassis}-${e.eyes}-${e.antenna}-${e.wings}-${e.headphones}-${e.accent}-${e.baseColor}-${e.visorColor}`;return r(()=>{if(c||d)return;let e=l.current;if(!e)return;let t;try{t=new ie({alpha:!0,antialias:!0})}catch{p(!0);return}let{clientWidth:n,clientHeight:r}=e;t.setSize(n,r),t.setPixelRatio(Math.min(window.devicePixelRatio,2)),t.toneMapping=4,t.toneMappingExposure=1.15,e.appendChild(t.domElement);let i=new V,a=new B(34,n/r,.1,100);a.position.set(0,.12,4.8),a.lookAt(0,-.02,0);let o=new de(16777215,.3);i.add(o);let s=new ve(13623551,1315344,.5);i.add(s);let u=new _e(16777215,1.25);u.position.set(2.6,4.2,4.6),i.add(u);let f=new _e(11982079,.4);f.position.set(-3.6,1.2,2.6),i.add(f);let m=new _e(16767395,.3);m.position.set(0,2.6,-4),i.add(m);let h=new be(60075,1,8);h.position.set(0,-1.7,2.1),i.add(h);let y=new be(60075,.35,6);y.position.set(0,2.4,1.6),i.add(y);let b=new G;i.add(b),g.current={renderer:t,scene:i,camera:a,avatarGroup:b,ambient:o,rim:h,kicker:y,animationId:0};let x=()=>{let e=g.current;if(!l.current||!e)return;let{clientWidth:t,clientHeight:n}=l.current;e.renderer.setSize(t,n),e.camera.aspect=t/n,e.camera.updateProjectionMatrix()};window.addEventListener(`resize`,x);let S=t=>{let n=e.getBoundingClientRect();!n.width||!n.height||(v.current.x=(t.clientX-n.left)/n.width*2-1,v.current.y=(t.clientY-n.top)/n.height*2-1,v.current.active=!0)},C=()=>{v.current.active=!1};return e.addEventListener(`pointermove`,S),e.addEventListener(`pointerleave`,C),()=>{window.removeEventListener(`resize`,x),e.removeEventListener(`pointermove`,S),e.removeEventListener(`pointerleave`,C);let t=g.current;if(t){cancelAnimationFrame(t.animationId),_.current&&=(nn(t.avatarGroup,[_.current.envMap]),null),e.contains(t.renderer.domElement)&&e.removeChild(t.renderer.domElement);try{t.renderer.forceContextLoss()}catch{}t.renderer.dispose(),g.current=null}}},[c,d]),r(()=>{let t=g.current;if(!t||c||d)return;_.current&&=(t.avatarGroup.remove(_.current.parts.root),t.avatarGroup.remove(_.current.particles),nn(_.current.parts.root,[_.current.envMap]),_.current.particles.geometry.dispose(),_.current.particles.material.dispose(),null);let n=Bt(o(e.accent),60075),r=Bt(w(e.baseColor),16579580),i=Bt(b(e.baseColor,e.visorColor)),a=C(e.baseColor);t.ambient.intensity=a?.42:.3,t.rim.color.setHex(n),t.kicker.color.setHex(n);let s=Zt(n),l=tn(e,$t({shell:r,inset:i,accent:n,envMap:s,light:a}));t.avatarGroup.add(l.root);let u=e.wings===`dust`?36:16,f=new ae,p=new Float32Array(u*3);for(let e=0;e<u;e++)p[e*3]=(Math.random()-.5)*3.2,p[e*3+1]=-1.6+Math.random()*3.6,p[e*3+2]=-.6+Math.random()*.8;f.setAttribute(`position`,new D(p,3));let m=new le(f,new ce({color:n,size:e.wings===`dust`?.045:.025,transparent:!0,opacity:e.wings===`dust`?.7:.4}));t.avatarGroup.add(m),_.current={parts:l,particles:m,envMap:s}},[y,c,d]),r(()=>{let e=g.current;if(!e||c||d)return;let t=0,n=3+Math.random()*2,r=0,a=0,o=.04,s=1.4,l=.05,u=!1,f=1,p=.95;switch(i){case`happy`:o=.06,s=1.8,p=1;break;case`sad`:r=.14,o=.02,s=.6,u=!0,p=.4;break;case`angry`:r=-.05,o=.03,s=2.6,u=!0,f=.7,l=.1,p=1.25;break;case`sleepy`:f=.18,a=.18,r=.08,o=.02,s=.5,l=.015,p=.35;break;case`bored`:f=.35,a=.08,o=.02,s=.7,p=.5;break;case`hyped`:o=.14,s=3.2,l=.14,f=1.2,p=1.4;break;case`shake_head`:case`nod`:o=.04;break}let h=()=>{let e=g.current;if(!e)return;e.animationId=requestAnimationFrame(h);let c=_.current;if(!c){e.renderer.render(e.scene,e.camera);return}if(m){e.renderer.render(e.scene,e.camera);return}let d=c.parts,y=c.particles;t+=.016;let b=Math.sin(t*s)*o+.02;e.avatarGroup.position.y=b;let x=1+Math.sin(t*1.5)*.012;if(d.headGroup.scale.set(x,x,x),d.shadow){d.shadow.position.y=qt-b;let e=1-b*.35;d.shadow.scale.set(e,e,e),d.shadow.material.opacity=Math.max(.16,.34-b*.6)}let S=v.current;if(i===`shake_head`)d.headGroup.rotation.y=Math.sin(t*5)*.25;else if(i===`nod`)d.headGroup.rotation.x=Math.sin(t*4)*.18;else{let e=S.active?S.x*.34:Math.sin(t*.4)*.06,n=r+(S.active?S.y*.16:0);d.headGroup.rotation.y=O.lerp(d.headGroup.rotation.y,e,S.active?.12:.08),d.headGroup.rotation.x=O.lerp(d.headGroup.rotation.x,n,.08),d.headGroup.rotation.z=O.lerp(d.headGroup.rotation.z,a,.06)}d.antennaGroup.rotation.z=Math.sin(t*2)*l;let C=1;if(t>n){let e=t-n;e<.16?C=1-e/.16:e<.32?C=(e-.16)/.16:n=t+3+Math.random()*3}let w=f*Math.max(.08,C),T=d.eyesKind===`smile`&&u?-w:w;d.leftEye.scale.y=O.lerp(d.leftEye.scale.y,T,.35),d.rightEye&&(d.rightEye.scale.y=O.lerp(d.rightEye.scale.y,T,.35));let E=p*(.85+Math.sin(t*2.4)*.2),D=d.antennaTip?.material;if(D&&(D.emissiveIntensity=O.lerp(D.emissiveIntensity,E*1.05,.08)),d.auraRefs.kind===`pulse`&&d.auraRefs.r1&&d.auraRefs.r2){let e=1+Math.sin(t*1.8)*.06,n=1+Math.sin(t*1.8+.5)*.05;if(d.auraRefs.r1.scale.set(e,e,e),d.auraRefs.r2.scale.set(n*1.04,n*1.04,n*1.04),d.auraRefs.r3){let e=1+Math.sin(t*1.8+1)*.04;d.auraRefs.r3.scale.set(e*1.02,e*1.02,e*1.02),d.auraRefs.r3.rotation.z+=.004}}d.auraRefs.kind===`halo`&&d.auraRefs.halo&&(d.auraGroup.rotation.y+=.006),d.auraRefs.kind===`orbit`&&d.auraRefs.orbits&&d.auraRefs.orbits.forEach(e=>{let n=(e.userData.phase??0)+t*.6;e.position.x=Math.cos(n)*1.5,e.position.z=Math.sin(n)*.45,e.position.y=Math.sin(n*.5)*.18});let k=y.geometry.getAttribute(`position`);if(k&&k.count){for(let e=0;e<k.count;e++){let n=k.getY(e);n+=.008,n>2.4&&(n=-1.6),k.setY(e,n),k.setX(e,k.getX(e)+Math.sin(t+e*.4)*8e-4)}k.needsUpdate=!0}e.renderer.render(e.scene,e.camera)};return cancelAnimationFrame(e.animationId),h(),()=>{let e=g.current;e&&cancelAnimationFrame(e.animationId)}},[i,m,c,d]),c||d?t(`div`,{className:`flex items-center justify-center rounded-2xl bg-slate-50 dark:bg-void-800/40 ${s}`,style:{minHeight:`200px`,width:`100%`,height:`100%`},"data-testid":`agent-avatar-fallback`,children:t(u,{config:e,expression:i,className:`w-full h-full max-w-[220px]`})}):t(`div`,{ref:l,className:`w-full h-full relative ${s}`,style:{minHeight:`200px`},"data-testid":`agent-avatar-scene`})}export{rn as AgentAvatarScene};
|