ugly-app 0.1.969 → 0.1.971
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 +9 -13
- package/dist/character/client/CharacterCanvas.d.ts +7 -0
- package/dist/character/client/CharacterCanvas.d.ts.map +1 -1
- package/dist/character/client/CharacterCanvas.js +11 -1
- package/dist/character/client/CharacterCanvas.js.map +1 -1
- package/dist/character/client/CharacterCreator.d.ts +1 -3
- package/dist/character/client/CharacterCreator.d.ts.map +1 -1
- package/dist/character/client/CharacterCreator.js +103 -50
- package/dist/character/client/CharacterCreator.js.map +1 -1
- package/dist/character/client/lib/characterScene.d.ts +8 -0
- package/dist/character/client/lib/characterScene.d.ts.map +1 -1
- package/dist/character/client/lib/characterScene.js +26 -1
- package/dist/character/client/lib/characterScene.js.map +1 -1
- package/dist/character/client/lib/groundGrid.d.ts +53 -0
- package/dist/character/client/lib/groundGrid.d.ts.map +1 -0
- package/dist/character/client/lib/groundGrid.js +233 -0
- package/dist/character/client/lib/groundGrid.js.map +1 -0
- package/dist/character/shared/index.d.ts +1 -0
- package/dist/character/shared/index.d.ts.map +1 -1
- package/dist/character/shared/index.js +1 -0
- package/dist/character/shared/index.js.map +1 -1
- package/dist/character/shared/lib/charSpec.d.ts +12 -0
- package/dist/character/shared/lib/charSpec.d.ts.map +1 -1
- package/dist/character/shared/lib/charSpec.js +5 -1
- package/dist/character/shared/lib/charSpec.js.map +1 -1
- package/dist/character/shared/lib/randomSpec.d.ts +17 -0
- package/dist/character/shared/lib/randomSpec.d.ts.map +1 -0
- package/dist/character/shared/lib/randomSpec.js +134 -0
- package/dist/character/shared/lib/randomSpec.js.map +1 -0
- package/dist/character/shared/lib/retarget.d.ts.map +1 -1
- package/dist/character/shared/lib/retarget.js +34 -1
- package/dist/character/shared/lib/retarget.js.map +1 -1
- package/dist/cli/auth/cloudflareOauth.d.ts.map +1 -1
- package/dist/cli/auth/cloudflareOauth.js +1 -4
- package/dist/cli/auth/cloudflareOauth.js.map +1 -1
- package/dist/cli/auth/refreshCli.d.ts.map +1 -1
- package/dist/cli/auth/refreshCli.js.map +1 -1
- package/dist/cli/refreshCommand.d.ts.map +1 -1
- package/dist/cli/refreshCommand.js.map +1 -1
- package/dist/cli/version.d.ts +1 -1
- package/dist/cli/version.js +1 -1
- package/package.json +1 -1
- package/src/character/client/CharacterCanvas.tsx +18 -0
- package/src/character/client/CharacterCreator.tsx +187 -94
- package/src/character/client/lib/characterScene.ts +38 -1
- package/src/character/client/lib/groundGrid.ts +254 -0
- package/src/character/shared/index.ts +2 -0
- package/src/character/shared/lib/charSpec.ts +5 -1
- package/src/character/shared/lib/randomSpec.ts +159 -0
- package/src/character/shared/lib/retarget.ts +35 -1
- package/src/cli/version.ts +1 -1
package/README.md
CHANGED
|
@@ -23,7 +23,7 @@ npm run dev
|
|
|
23
23
|
|-------------|----------|
|
|
24
24
|
| `ugly-app` | Server: `createApp`, `TypedDB`, auth, AI clients, storage, NATS, workers. |
|
|
25
25
|
| `ugly-app/shared` | Cross-tier: `defineRequests`, `defineCollections`, `definePage`, `defineWorkers`, Zod, experiments. |
|
|
26
|
-
| `ugly-app/client` | React: `bootstrapApp`, `createRouter`, `lazyPage
|
|
26
|
+
| `ugly-app/client` | React: `bootstrapApp`, `createRouter`, `lazyPage`, `AppProvider`, components, animations, audio, AI helpers. |
|
|
27
27
|
| `ugly-app/server/adapter/workers` | Cloudflare Workers entry (Hono router + Durable Objects + Neon HTTP driver + R2). |
|
|
28
28
|
| `ugly-app/server/ssr` | SSR renderer used by the Workers adapter. |
|
|
29
29
|
| `ugly-app/playwright` | E2E test utilities. |
|
|
@@ -68,12 +68,11 @@ const app = createApp(
|
|
|
68
68
|
(configurator: AppConfigurator) => {
|
|
69
69
|
configurator.setPages({ pages });
|
|
70
70
|
configurator.setExperiments(experiments);
|
|
71
|
-
const tables: Record<string, Record<string, string>> = { en, es };
|
|
72
71
|
configurator.setStrings({
|
|
73
72
|
defaultLang: stringsDef.defaultLang,
|
|
74
73
|
langs: stringsDef.langs,
|
|
75
74
|
criticalKeys: stringsDef.criticalKeys,
|
|
76
|
-
getTable: (lang) =>
|
|
75
|
+
getTable: (lang) => (lang === 'es' ? es : en),
|
|
77
76
|
});
|
|
78
77
|
configurator.setWorkers(cronTasks, cronHandlers);
|
|
79
78
|
configurator.setOnEmail(async (inbound: InboundEmail) => { /* … */ });
|
|
@@ -114,7 +113,7 @@ for in-process invocation of any registered handler.
|
|
|
114
113
|
| `db` | `TypedDB<Map>` — map inferred from your collections + framework built-ins. |
|
|
115
114
|
| `httpServer` | The underlying Node `http.Server`. |
|
|
116
115
|
| `wss` | The main `WebSocketServer` (path set via `setWsPath`, default `/rpc`). |
|
|
117
|
-
| `dispatch(name, input, userId)` | `
|
|
116
|
+
| `dispatch(name, input, userId)` | `Promise<unknown>` — invoke any registered RPC handler programmatically. |
|
|
118
117
|
| `registerRoutes(fn)` | Mount additional Express routes after creation. |
|
|
119
118
|
| `pushSend(input)` | Typed push whose click-through target is a route from this app's `pages`. Mints a `https://ugly.bot/l/<code>` short link so the URL is always absolute and dock-app-routable. |
|
|
120
119
|
|
|
@@ -181,13 +180,9 @@ override the framework's defaults. Rate-limited handlers are marked below.
|
|
|
181
180
|
| `uploadUrl` | Issues a presigned PUT for the `temp` bucket. |
|
|
182
181
|
| `shareLink` | Mint a `https://ugly.bot/l/<code>` short link with OG metadata. Rate-limited 60/60s. |
|
|
183
182
|
| `feedbackReportCreateNoAuth` | Public, same-origin feedback endpoint used by browser telemetry. Rate-limited 10/60s. |
|
|
184
|
-
| `feedbackReportResolve` | Mark an in-app feedback report resolved/declined. Admin-gated. |
|
|
185
|
-
| `submitFeedbackBot` | Feedback path used by the bot-swarm test tooling. |
|
|
186
183
|
| `errorLogCaptureNoAuth` | Public error-log capture. |
|
|
187
184
|
| `perfSnapshotCaptureNoAuth` | Public perf snapshot capture. Rate-limited 60/60s. |
|
|
188
|
-
| `adminGetPerfLogs` | Admin-only perf log query used by the CLI `perf:*` commands. |
|
|
189
185
|
| `adminCreateTestUser` / `adminListTestUsers` / `adminDeleteTestUser` | Admin-only synthetic-user management. Gated by `setIsAdmin()`. |
|
|
190
|
-
| `projectPlanList` / `projectPlanCreate` / `projectPlanUpdate` / `projectPlanDelete` | Studio-integration project-plan management. |
|
|
191
186
|
|
|
192
187
|
Add per-endpoint rate limits on your own handlers with
|
|
193
188
|
`rateLimit: { max, window }` on the request definition.
|
|
@@ -338,7 +333,7 @@ export const {
|
|
|
338
333
|
|
|
339
334
|
**Returns:**
|
|
340
335
|
|
|
341
|
-
- **`RouterProvider`** — props: `children`, `fallback
|
|
336
|
+
- **`RouterProvider`** — props: `children`, `fallback?`, `isAuthenticated?: () => boolean`, `initialUrl?: { pathname, search }` (required for SSR + hydration). Manages route state, browser history, and the popup layer. Runs the per-route auth check synchronously — apps cannot override the login fallback.
|
|
342
337
|
- **`RouterView`** — renders the active page with animated transitions. Props: `durationMs?`, `easing?: EasingFunction`, `transitionComponent?: React.ComponentType<RouterTransitionProps>` (replaces the default `ViewFlipper`), `renderPage?(state: RouterStateRaw) => ReactElement` (sync alternative to `allPages` loaders).
|
|
343
338
|
- **`useRouter()`** — returns `RouterContextValue<Pages>` (typed navigation + popup API). Throws if used outside `<RouterProvider>`.
|
|
344
339
|
- **`Link`** — typed SPA link bound to this router. Renders a real `<a>` (right-click / cmd-click / SEO keep working) but intercepts a plain left-click and routes through `push` / `replace`. Props: `to`, `params` (both type-checked against `pages`), `replace?`, `children`, plus common anchor attrs (`className`, `style`, `target`, `aria-label`, `data-id`, `onClick`).
|
|
@@ -760,14 +755,15 @@ const textGen = createTextGen(userId);
|
|
|
760
755
|
const text = await textGen.generate(messages, { model: 'gemini_2_5_flash' });
|
|
761
756
|
```
|
|
762
757
|
|
|
763
|
-
Or
|
|
758
|
+
Or call the framework `textGen` request directly:
|
|
764
759
|
|
|
765
760
|
```ts
|
|
766
|
-
import {
|
|
767
|
-
const {
|
|
761
|
+
import { uglyBotRequest } from 'ugly-app';
|
|
762
|
+
const { message } = await uglyBotRequest<{ message: { content: string } }>('textGen', {
|
|
768
763
|
model: 'gemini_2_5_flash',
|
|
769
764
|
messages: [{ role: 'user', content: 'Hello!' }],
|
|
770
|
-
|
|
765
|
+
options: { maxTokens: 512 },
|
|
766
|
+
});
|
|
771
767
|
```
|
|
772
768
|
|
|
773
769
|
Available models are exposed via `textGenModels` / `textGenModelData` from
|
|
@@ -18,6 +18,13 @@ export interface CharacterCanvasProps {
|
|
|
18
18
|
anims?: FbxClipIndex | undefined;
|
|
19
19
|
/** The framing. Animated to over ~350 ms when it changes. */
|
|
20
20
|
camera?: CharacterCameraPreset | undefined;
|
|
21
|
+
/**
|
|
22
|
+
* Draw the grid floor under the character. Defaults to on.
|
|
23
|
+
*
|
|
24
|
+
* ⚠️ FORCED OFF FOR `captureThumbnail`, whatever this says — a thumbnail is a portrait on a
|
|
25
|
+
* clean backdrop, and a grid behind a face reads as a screenshot of the editor.
|
|
26
|
+
*/
|
|
27
|
+
ground?: boolean | undefined;
|
|
21
28
|
/** Degrees about +Y. 0 faces +Z, which is where the camera stands. */
|
|
22
29
|
yaw?: number | undefined;
|
|
23
30
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CharacterCanvas.d.ts","sourceRoot":"","sources":["../../../src/character/client/CharacterCanvas.tsx"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAO9D,OAAO,EAAe,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAE7D,sGAAsG;AACtG,MAAM,MAAM,qBAAqB,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAE7D,MAAM,WAAW,oBAAoB;IACnC,kEAAkE;IAClE,MAAM,EAAE,kBAAkB,CAAC;IAC3B,kFAAkF;IAClF,IAAI,EAAE,aAAa,CAAC;IACpB;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACjC,4EAA4E;IAC5E,KAAK,CAAC,EAAE,YAAY,GAAG,SAAS,CAAC;IACjC,6DAA6D;IAC7D,MAAM,CAAC,EAAE,qBAAqB,GAAG,SAAS,CAAC;IAC3C,sEAAsE;IACtE,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB;;;;OAIG;IACH,WAAW,CAAC,EAAE,YAAY,GAAG,IAAI,GAAG,SAAS,CAAC;IAC9C,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,yFAAyF;IACzF,OAAO,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;IACnC,yFAAyF;IACzF,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IAC/C;;;;OAIG;IACH,OAAO,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IACtD,sEAAsE;IACtE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;CACnD;AAED,MAAM,WAAW,yBAAyB;IACxC,oEAAoE;IACpE,MAAM,CAAC,EAAE,qBAAqB,GAAG,SAAS,CAAC;IAC3C,iFAAiF;IACjF,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC1B;AAED,MAAM,WAAW,qBAAqB;IACpC;;;;;;OAMG;IACH,gBAAgB,CAAC,IAAI,CAAC,EAAE,yBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClE,qFAAqF;IACrF,OAAO,CAAC,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC3C,oEAAoE;IACpE,MAAM,IAAI,iBAAiB,GAAG,IAAI,CAAC;CACpC;AAuED,eAAO,MAAM,eAAe,
|
|
1
|
+
{"version":3,"file":"CharacterCanvas.d.ts","sourceRoot":"","sources":["../../../src/character/client/CharacterCanvas.tsx"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAO9D,OAAO,EAAe,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAE7D,sGAAsG;AACtG,MAAM,MAAM,qBAAqB,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAE7D,MAAM,WAAW,oBAAoB;IACnC,kEAAkE;IAClE,MAAM,EAAE,kBAAkB,CAAC;IAC3B,kFAAkF;IAClF,IAAI,EAAE,aAAa,CAAC;IACpB;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACjC,4EAA4E;IAC5E,KAAK,CAAC,EAAE,YAAY,GAAG,SAAS,CAAC;IACjC,6DAA6D;IAC7D,MAAM,CAAC,EAAE,qBAAqB,GAAG,SAAS,CAAC;IAC3C;;;;;OAKG;IACH,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7B,sEAAsE;IACtE,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB;;;;OAIG;IACH,WAAW,CAAC,EAAE,YAAY,GAAG,IAAI,GAAG,SAAS,CAAC;IAC9C,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,yFAAyF;IACzF,OAAO,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;IACnC,yFAAyF;IACzF,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IAC/C;;;;OAIG;IACH,OAAO,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IACtD,sEAAsE;IACtE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;CACnD;AAED,MAAM,WAAW,yBAAyB;IACxC,oEAAoE;IACpE,MAAM,CAAC,EAAE,qBAAqB,GAAG,SAAS,CAAC;IAC3C,iFAAiF;IACjF,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC1B;AAED,MAAM,WAAW,qBAAqB;IACpC;;;;;;OAMG;IACH,gBAAgB,CAAC,IAAI,CAAC,EAAE,yBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClE,qFAAqF;IACrF,OAAO,CAAC,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC3C,oEAAoE;IACpE,MAAM,IAAI,iBAAiB,GAAG,IAAI,CAAC;CACpC;AAuED,eAAO,MAAM,eAAe,wHAqe1B,CAAC"}
|
|
@@ -74,7 +74,7 @@ function sunDir(eye, tgt) {
|
|
|
74
74
|
const l = Math.hypot(dx, dy, dz) || 1;
|
|
75
75
|
return [dx / l - 0.25, dy / l - 0.45, dz / l + 0.15];
|
|
76
76
|
}
|
|
77
|
-
export const CharacterCanvas = forwardRef(function CharacterCanvas({ source, spec, pose = null, anims, camera = 'full', yaw = 0, faceWeights = null, className, onReady, onTier, onFacts, onError, }, ref) {
|
|
77
|
+
export const CharacterCanvas = forwardRef(function CharacterCanvas({ source, spec, pose = null, anims, camera = 'full', ground = true, yaw = 0, faceWeights = null, className, onReady, onTier, onFacts, onError, }, ref) {
|
|
78
78
|
const canvasRef = useRef(null);
|
|
79
79
|
const gpuRef = useRef(null);
|
|
80
80
|
const [err, setErr] = useState(null);
|
|
@@ -88,6 +88,8 @@ export const CharacterCanvas = forwardRef(function CharacterCanvas({ source, spe
|
|
|
88
88
|
animsRef.current = anims;
|
|
89
89
|
const cameraRef = useRef(camera);
|
|
90
90
|
cameraRef.current = camera;
|
|
91
|
+
const groundRef = useRef(ground);
|
|
92
|
+
groundRef.current = ground;
|
|
91
93
|
const yawRef = useRef(yaw);
|
|
92
94
|
yawRef.current = yaw;
|
|
93
95
|
// Drag-to-orbit: degrees the pointer has ADDED to the `yaw` prop. A ref, not state — it is
|
|
@@ -307,6 +309,9 @@ export const CharacterCanvas = forwardRef(function CharacterCanvas({ source, spe
|
|
|
307
309
|
const aspect = w / h;
|
|
308
310
|
ensurePoseClip(scene, live);
|
|
309
311
|
scene.setYaw(yawRef.current + orbitYawRef.current);
|
|
312
|
+
// Per frame and idempotent, exactly like `setYaw`: the loop is created once and cannot
|
|
313
|
+
// see later prop changes any other way.
|
|
314
|
+
scene.setGround(groundRef.current);
|
|
310
315
|
// Exponential approach toward the preset's goal: a half-life, not a fixed fraction, so
|
|
311
316
|
// the transition feels the same at any frame rate. ~350 ms to settle.
|
|
312
317
|
const goal = cameraGoal(cameraRef.current, scene, aspect);
|
|
@@ -387,9 +392,14 @@ export const CharacterCanvas = forwardRef(function CharacterCanvas({ source, spe
|
|
|
387
392
|
cam.tgt = [...goal.tgt];
|
|
388
393
|
st.scene.update(cam.eye, 0);
|
|
389
394
|
st.scene.faceFrame();
|
|
395
|
+
// ⚠️ NO FLOOR IN A THUMBNAIL. Restored below rather than left off — the render loop
|
|
396
|
+
// would put it back on its next tick anyway, but a capture that leaves the scene in a
|
|
397
|
+
// state its caller did not ask for is a trap for the next person.
|
|
398
|
+
st.scene.setGround(false);
|
|
390
399
|
const enc = st.device.createCommandEncoder();
|
|
391
400
|
st.scene.frame(enc, st.ctx.getCurrentTexture().createView(), st.depth.createView(), new Float32Array(viewProjection(cam.eye, cam.tgt, FOV, aspect, 0.05, 60)), sunDir(cam.eye, cam.tgt), SUN_COL, AMB, [cam.eye[0], cam.eye[1], cam.eye[2]], FOG, FOG_DENSITY, CLEAR);
|
|
392
401
|
st.device.queue.submit([enc.finish()]);
|
|
402
|
+
st.scene.setGround(groundRef.current);
|
|
393
403
|
// ⚠️ SAME TASK as the render — see the handle's contract above.
|
|
394
404
|
const blob = await new Promise((resolve) => c.toBlob(resolve, 'image/webp', 0.92));
|
|
395
405
|
st.scene.setYaw(savedYaw);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CharacterCanvas.js","sourceRoot":"","sources":["../../../src/character/client/CharacterCanvas.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CharacterCanvas.js","sourceRoot":"","sources":["../../../src/character/client/CharacterCanvas.tsx"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,4EAA4E;AAC5E,EAAE;AACF,6FAA6F;AAC7F,8FAA8F;AAC9F,6FAA6F;AAC7F,8EAA8E;AAC9E,EAAE;AACF,0FAA0F;AAC1F,+FAA+F;AAC/F,4EAA4E;AAC5E,EAAE;AACF,yFAAyF;AACzF,gGAAgG;AAChG,0FAA0F;AAC1F,gFAAgF;AAChF,OAAO,EACL,UAAU,EACV,WAAW,EACX,SAAS,EACT,mBAAmB,EACnB,MAAM,EACN,QAAQ,GACT,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAGhF,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAqB,MAAM,mBAAmB,CAAC;AAwEnE,mGAAmG;AACnG,MAAM,GAAG,GAAG,GAAG,CAAC;AAEhB,4FAA4F;AAC5F,gFAAgF;AAChF,MAAM,OAAO,GAA6B,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAC5D,MAAM,GAAG,GAA6B,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AACzD,MAAM,KAAK,GAA6B,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAC3D,MAAM,GAAG,GAA6B,KAAK,CAAC;AAC5C,MAAM,WAAW,GAAG,CAAC,CAAC;AAYtB,sGAAsG;AACtG,MAAM,OAAO,GAAG,CAAC,MAAc,EAAE,MAAc,EAAU,EAAE,CACzD,MAAM,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AAErD;;;;;;GAMG;AACH,SAAS,UAAU,CACjB,MAA6B,EAC7B,KAA4B,EAC5B,MAAc;IAEd,MAAM,CAAC,GAAG,KAAK,EAAE,UAAU,IAAI,GAAG,CAAC;IACnC,MAAM,IAAI,GAAG,KAAK,EAAE,SAAS,EAAE,IAAI,IAAI,CAAC;IACxC,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACtB,MAAM,GAAG,GAAS,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;QAC3C,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,CAAC;QACvC,OAAO;YACL,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;YAC7D,GAAG;SACJ,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACtB,MAAM,GAAG,GAAS,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;QAC3C,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,CAAC;QACvC,OAAO;YACL,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;YAC9D,GAAG;SACJ,CAAC;IACJ,CAAC;IACD,MAAM,GAAG,GAAS,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;IACnC,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,CAAC;IACvC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;AACrD,CAAC;AAED,sFAAsF;AACtF,SAAS,MAAM,CAAC,GAAS,EAAE,GAAS;IAClC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;IAC3B,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;IAC3B,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;IAC3B,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;IACtC,OAAO,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,EAAE,EAAE,GAAG,CAAC,GAAG,IAAI,EAAE,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,UAAU,CAGvC,SAAS,eAAe,CACxB,EACE,MAAM,EACN,IAAI,EACJ,IAAI,GAAG,IAAI,EACX,KAAK,EACL,MAAM,GAAG,MAAM,EACf,MAAM,GAAG,IAAI,EACb,GAAG,GAAG,CAAC,EACP,WAAW,GAAG,IAAI,EAClB,SAAS,EACT,OAAO,EACP,MAAM,EACN,OAAO,EACP,OAAO,GACR,EACD,GAAG;IAEH,MAAM,SAAS,GAAG,MAAM,CAA2B,IAAI,CAAC,CAAC;IACzD,MAAM,MAAM,GAAG,MAAM,CAAkB,IAAI,CAAC,CAAC;IAC7C,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAEpD,2FAA2F;IAC3F,qCAAqC;IACrC,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAC7B,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IACvB,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAC7B,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IACvB,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC/B,QAAQ,CAAC,OAAO,GAAG,KAAK,CAAC;IACzB,MAAM,SAAS,GAAG,MAAM,CAAwB,MAAM,CAAC,CAAC;IACxD,SAAS,CAAC,OAAO,GAAG,MAAM,CAAC;IAC3B,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IACjC,SAAS,CAAC,OAAO,GAAG,MAAM,CAAC;IAC3B,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAC3B,MAAM,CAAC,OAAO,GAAG,GAAG,CAAC;IACrB,2FAA2F;IAC3F,yFAAyF;IACzF,4BAA4B;IAC5B,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAC9B,MAAM,YAAY,GAAG,MAAM,CAA0C,IAAI,CAAC,CAAC;IAC3E,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IACnC,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC;IAC7B,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IACjC,SAAS,CAAC,OAAO,GAAG,MAAM,CAAC;IAC3B,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IACnC,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC;IAC7B,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IACnC,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC;IAC7B,MAAM,cAAc,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;IAC3C,cAAc,CAAC,OAAO,GAAG,WAAW,CAAC;IAErC,4FAA4F;IAC5F,uEAAuE;IACvE,MAAM,cAAc,GAAG,MAAM,CAAgB,IAAI,CAAC,CAAC;IACnD,MAAM,gBAAgB,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IACvC,MAAM,cAAc,GAAG,MAAM,CAAgB,IAAI,CAAC,CAAC;IAEnD,MAAM,WAAW,GAAG,WAAW,CAAC,CAAC,OAAe,EAAE,EAAE;QAClD,MAAM,CAAC,OAAO,CAAC,CAAC;QAChB,UAAU,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,mFAAmF;IACnF,MAAM,MAAM,GAAG,MAAM,CAA2B;QAC9C,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;QACpB,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;KAClB,CAAC,CAAC;IAEH;;;;OAIG;IACH,MAAM,cAAc,GAAG,CACrB,KAAqB,EACrB,IAAuB,EACjB,EAAE;QACR,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC;QAC7B,IAAI,IAAI,KAAK,cAAc,CAAC,OAAO;YAAE,OAAO;QAC5C,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACpB,cAAc,CAAC,OAAO,GAAG,IAAI,CAAC;YAC9B,OAAO;QACT,CAAC;QACD,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,sFAAsF;YACtF,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC;gBAC9B,gBAAgB,CAAC,OAAO,GAAG,IAAI,CAAC;gBAChC,OAAO,CAAC,KAAK,CACX,qBAAqB,IAAI,wDAAwD;oBAC/E,yEAAyE,CAC5E,CAAC;YACJ,CAAC;YACD,OAAO;QACT,CAAC;QACD,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC;QAC5B,IAAI,CAAC,IAAI;YAAE,OAAO,CAAC,kCAAkC;QACrD,IAAI,cAAc,CAAC,OAAO,KAAK,IAAI;YAAE,OAAO;QAC5C,cAAc,CAAC,OAAO,GAAG,IAAI,CAAC;QAC9B,KAAK,WAAW,CACd,KAAK,EACL,IAAI,EACJ,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,OAAO,CACb;aACE,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;YACd,IAAI,IAAI,CAAC,IAAI;gBAAE,OAAO;YACtB,cAAc,CAAC,OAAO,GAAG,IAAI,CAAC;YAC9B,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YACtB,kFAAkF;YAClF,uFAAuF;YACvF,4BAA4B;YAC5B,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC;gBAC7C,CAAC,CAAC,IAAI;gBACN,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,IAAI,CAAC,CAAC;YAC7B,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACpB,cAAc,CAAC,OAAO,GAAG,IAAI,CAAC;QAChC,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,CAAU,EAAE,EAAE;YACpB,cAAc,CAAC,OAAO,GAAG,IAAI,CAAC;YAC9B,8EAA8E;YAC9E,cAAc,CAAC,OAAO,GAAG,IAAI,CAAC;YAC9B,OAAO,CAAC,KAAK,CAAC,qBAAqB,IAAI,gBAAgB,EAAE,CAAC,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;IACP,CAAC,CAAC;IAEF,8FAA8F;IAC9F,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,MAAM,IAAI,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;QAC7B,KAAK,CAAC,KAAK,IAAI,EAAE;YACf,2FAA2F;YAC3F,0FAA0F;YAC1F,oEAAoE;YACpE,MAAM,GAAG,GAAI,SAAsC,CAAC,GAAG,CAAC;YACxD,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,WAAW,CACT,gFAAgF;oBAC9E,4DAA4D,CAC/D,CAAC;gBACF,OAAO;YACT,CAAC;YACD,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC;YACjC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI;gBAAE,OAAO;YACjC,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,cAAc,EAAE,CAAC;YAC3C,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,WAAW,CACT,2DAA2D,CAC5D,CAAC;gBACF,OAAO;YACT,CAAC;YACD,0FAA0F;YAC1F,wFAAwF;YACxF,mEAAmE;YACnE,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC;gBACzC,gBAAgB,EAAE,kBAAkB,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;aACnE,CAAC,CAAC;YACH,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACd,MAAM,CAAC,OAAO,EAAE,CAAC;gBACjB,OAAO;YACT,CAAC;YACD,0FAA0F;YAC1F,kFAAkF;YAClF,MAAM,CAAC,gBAAgB,CAAC,iBAAiB,EAAE,CAAC,CAAQ,EAAE,EAAE;gBACtD,MAAM,GAAG,GACN,CAAiD,CAAC,KAAK,EAAE,OAAO;oBACjE,SAAS,CAAC;gBACZ,WAAW,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACrE,CAAC,CAAC,CAAC;YACH,KAAK,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;gBAC1B,IAAI,CAAC,IAAI,CAAC,IAAI;oBACZ,WAAW,CAAC,uBAAuB,CAAC,CAAC,MAAM,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YAClE,CAAC,CAAC,CAAC;YAEH,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YACxC,IAAI,CAAC,GAAG;gBAAE,OAAO;YACjB,MAAM,MAAM,GAAG,GAAG,CAAC,wBAAwB,EAAE,CAAC;YAC9C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,gBAAgB,IAAI,CAAC,CAAC,CAAC;YACtD,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,WAAW,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;YAC7D,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,YAAY,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;YAC/D,GAAG,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;YAEvD,MAAM,KAAK,GAAG,IAAI,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACjD,MAAM,EAAE,GAAa;gBACnB,MAAM;gBACN,GAAG;gBACH,KAAK;gBACL,GAAG;gBACH,KAAK,EAAE,MAAM,CAAC,aAAa,CAAC;oBAC1B,IAAI,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC;oBACnC,MAAM,EAAE,aAAa;oBACrB,KAAK,EAAE,eAAe,CAAC,iBAAiB;iBACzC,CAAC;aACH,CAAC;YACF,MAAM,CAAC,OAAO,GAAG,EAAE,CAAC;YACpB,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAC7B,IAAI,cAAc,CAAC,OAAO;gBAAE,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;YAEzE,uFAAuF;YACvF,EAAE;YACF,0FAA0F;YAC1F,4FAA4F;YAC5F,4FAA4F;YAC5F,sFAAsF;YACtF,mBAAmB;YACnB,KAAK,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE;gBACvC,IAAI,IAAI,CAAC,IAAI;oBAAE,OAAO;gBACtB,IAAI,CAAC;oBACH,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;oBAClB,yEAAyE;oBACzE,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;oBAC/B,SAAS,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;oBAC9B,UAAU,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBAClC,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACX,WAAW,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC1D,CAAC;YACH,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAU,EAAE,EAAE;gBACtB,WAAW,CACT,iCAAiC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAC9E,CAAC;YACJ,CAAC,CAAC,CAAC;YACH,KAAK,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC;iBAChD,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;gBACd,IAAI,CAAC,IAAI,CAAC,IAAI;oBAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YACxC,CAAC,CAAC;iBACD,KAAK,CAAC,CAAC,CAAU,EAAE,EAAE,CACpB,OAAO,CAAC,KAAK,CAAC,qCAAqC,EAAE,CAAC,CAAC,CACxD,CAAC;YACJ,KAAK,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC;iBAChC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;gBACb,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI;oBAAE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC9C,CAAC,CAAC;iBACD,KAAK,CAAC,CAAC,CAAU,EAAE,EAAE,CACpB,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,CAAC,CAAC,CAClD,CAAC;YACJ,KAAK,YAAY,CAAC,MAAM,CAAC;iBACtB,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;gBACZ,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI;oBACnB,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;YACrE,CAAC,CAAC;iBACD,KAAK,CAAC,CAAC,CAAU,EAAE,EAAE,CACpB,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,CAAC,CAAC,CACtD,CAAC;YAEJ,uFAAuF;YACvF,IAAI,IAAI,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;YAC7B,IAAI,SAAS,GAAG,KAAK,CAAC;YACtB,MAAM,IAAI,GAAG,CAAC,KAAa,EAAQ,EAAE;gBACnC,IAAI,IAAI,CAAC,IAAI;oBAAE,OAAO;gBACtB,GAAG,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;gBAClC,MAAM,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC;gBAC5B,IAAI,CAAC,CAAC;oBAAE,OAAO;gBACf,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC;gBACtD,IAAI,GAAG,KAAK,CAAC;gBAEb,sEAAsE;gBACtE,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;gBACtD,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;gBACvD,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACpC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;oBACZ,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;oBACb,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;oBACnB,EAAE,CAAC,KAAK,GAAG,MAAM,CAAC,aAAa,CAAC;wBAC9B,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;wBACZ,MAAM,EAAE,aAAa;wBACrB,KAAK,EAAE,eAAe,CAAC,iBAAiB;qBACzC,CAAC,CAAC;gBACL,CAAC;gBACD,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC;gBAErB,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;gBAC5B,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;gBACnD,uFAAuF;gBACvF,wCAAwC;gBACxC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;gBAEnC,uFAAuF;gBACvF,sEAAsE;gBACtE,MAAM,IAAI,GAAG,UAAU,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;gBAC1D,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;gBACvC,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC;gBAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC3B,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAE,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,GAAG,CAAC,CAAC;oBAC5D,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAE,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,GAAG,CAAC,CAAC;gBAC9D,CAAC;gBAED,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;gBAC5B,KAAK,CAAC,SAAS,EAAE,CAAC;gBAClB,MAAM,KAAK,GAAG,IAAI,YAAY,CAC5B,cAAc,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,CACxD,CAAC;gBACF,MAAM,GAAG,GAAG,MAAM,CAAC,oBAAoB,EAAE,CAAC;gBAC1C,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CACtB,GAAG,EACH,GAAG,CAAC,iBAAiB,EAAE,CAAC,UAAU,EAAE,EACpC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,EACrB,KAAK,EACL,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,EACxB,OAAO,EACP,GAAG,EACH,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EACpC,GAAG,EACH,WAAW,EACX,KAAK,CACN,CAAC;gBACF,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;gBACpC,uFAAuF;gBACvF,0EAA0E;gBAC1E,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;oBACvB,SAAS,GAAG,IAAI,CAAC;oBACjB,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC;gBACzB,CAAC;YACH,CAAC,CAAC;YACF,GAAG,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;QACpC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAU,EAAE,EAAE;YACxB,WAAW,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;QACH,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;YACjB,oBAAoB,CAAC,GAAG,CAAC,CAAC;YAC1B,MAAM,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC;YAC1B,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;YACtB,IAAI,EAAE,EAAE,CAAC;gBACP,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;gBACnB,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACtB,CAAC;QACH,CAAC,CAAC;QACF,qFAAqF;QACrF,uDAAuD;IACzD,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC;IAE1B,8FAA8F;IAC9F,EAAE;IACF,0FAA0F;IAC1F,sFAAsF;IACtF,6BAA6B;IAC7B,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC;QACpC,IAAI,CAAC,KAAK;YAAE,OAAO;QACnB,IAAI,CAAC;YACH,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,WAAW,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC,EAAE,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC;IAExB,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;IACpD,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;IAElB,6FAA6F;IAC7F,mBAAmB,CACjB,GAAG,EACH,GAA0B,EAAE,CAAC,CAAC;QAC5B,gBAAgB,EAAE,KAAK,EAAE,IAAI,GAAG,EAAE,EAAE,EAAE;YACpC,MAAM,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC;YAC1B,MAAM,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC;YAC5B,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK;gBAC9B,MAAM,IAAI,KAAK,CACb,6EAA6E,CAC9E,CAAC;YACJ,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC;YAC3B,MAAM,QAAQ,GAAS,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;YACpC,MAAM,QAAQ,GAAS,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;YACpC,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC;YACtD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,SAAS,CAAC,OAAO,CAAC;YAChD,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS;gBAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAEtD,mFAAmF;YACnF,yCAAyC;YACzC,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC;YAClC,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YAClD,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;YACxB,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;YACxB,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAC5B,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;YACrB,oFAAoF;YACpF,sFAAsF;YACtF,kEAAkE;YAClE,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YAC1B,MAAM,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,oBAAoB,EAAE,CAAC;YAC7C,EAAE,CAAC,KAAK,CAAC,KAAK,CACZ,GAAG,EACH,EAAE,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC,UAAU,EAAE,EACvC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,EACrB,IAAI,YAAY,CACd,cAAc,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,CACxD,EACD,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,EACxB,OAAO,EACP,GAAG,EACH,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EACpC,GAAG,EACH,WAAW,EACX,KAAK,CACN,CAAC;YACF,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YACvC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YACtC,gEAAgE;YAChE,MAAM,IAAI,GAAG,MAAM,IAAI,OAAO,CAAc,CAAC,OAAO,EAAE,EAAE,CACtD,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,CAAC,CACtC,CAAC;YACF,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC1B,GAAG,CAAC,GAAG,GAAG,QAAQ,CAAC;YACnB,GAAG,CAAC,GAAG,GAAG,QAAQ,CAAC;YACnB,IAAI,CAAC,IAAI;gBACP,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;YAClE,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAChD,MAAM,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,OAAO;KAChC,CAAC,EACF,EAAE,CACH,CAAC;IAEF,OAAO,CACL,eACE,SAAS,EAAE,SAAS,aACZ,kBAAkB,EAC1B,KAAK,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,aAE9D,iBACE,GAAG,EAAE,SAAS,gBACH,mBAAmB,EAC9B,KAAK,EAAE;oBACL,OAAO,EAAE,OAAO;oBAChB,KAAK,EAAE,MAAM;oBACb,MAAM,EAAE,MAAM;oBACd,4EAA4E;oBAC5E,gEAAgE;oBAChE,WAAW,EAAE,MAAM;oBACnB,oFAAoF;oBACpF,4CAA4C;oBAC5C,MAAM,EAAE,MAAM;iBACf,EACD,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE;oBACnB,gFAAgF;oBAChF,YAAY,CAAC,OAAO,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;oBAChE,CAAC,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;oBAC/C,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,GAAG,UAAU,CAAC;gBAC5C,CAAC,EACD,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE;oBACnB,IAAI,YAAY,CAAC,OAAO,EAAE,SAAS,KAAK,CAAC,CAAC,SAAS;wBAAE,OAAO;oBAC5D,WAAW,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;oBAClE,YAAY,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC;gBACrC,CAAC,EACD,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE;oBACjB,IAAI,YAAY,CAAC,OAAO,EAAE,SAAS,KAAK,CAAC,CAAC,SAAS;wBAAE,OAAO;oBAC5D,YAAY,CAAC,OAAO,GAAG,IAAI,CAAC;oBAC5B,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;gBACxC,CAAC,EACD,eAAe,EAAE,CAAC,CAAC,EAAE,EAAE;oBACrB,IAAI,YAAY,CAAC,OAAO,EAAE,SAAS,KAAK,CAAC,CAAC,SAAS;wBAAE,OAAO;oBAC5D,YAAY,CAAC,OAAO,GAAG,IAAI,CAAC;oBAC5B,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;gBACxC,CAAC,GACD,EACD,GAAG,IAAI,CACN,cACE,IAAI,EAAC,OAAO,EACZ,KAAK,EAAE;oBACL,QAAQ,EAAE,UAAU;oBACpB,KAAK,EAAE,CAAC;oBACR,OAAO,EAAE,MAAM;oBACf,UAAU,EAAE,QAAQ;oBACpB,cAAc,EAAE,QAAQ;oBACxB,OAAO,EAAE,EAAE;oBACX,KAAK,EAAE,SAAS;oBAChB,UAAU,EAAE,uBAAuB;oBACnC,IAAI,EAAE,gCAAgC;oBACtC,SAAS,EAAE,QAAQ;iBACpB,YAEA,GAAG,GACA,CACP,IACG,CACP,CAAC;AACJ,CAAC,CAAC,CAAC"}
|
|
@@ -9,7 +9,6 @@ export type CharacterCategory = 'basics' | 'body' | 'face' | 'hair' | 'outfit' |
|
|
|
9
9
|
export interface CharacterCreatorDraft {
|
|
10
10
|
spec: CharacterSpec;
|
|
11
11
|
name: string;
|
|
12
|
-
tags: string[];
|
|
13
12
|
}
|
|
14
13
|
export type { CharacterVoiceOption } from './lib/voiceCatalog.js';
|
|
15
14
|
/** What `onGenerateTexture` hands back: a texture URL the creator can show in its recents strip. */
|
|
@@ -24,7 +23,6 @@ export interface CharacterCreatorProps {
|
|
|
24
23
|
anims?: FbxClipIndex | undefined;
|
|
25
24
|
initialSpec?: CharacterSpec | undefined;
|
|
26
25
|
initialName?: string | undefined;
|
|
27
|
-
initialTags?: readonly string[] | undefined;
|
|
28
26
|
/**
|
|
29
27
|
* The voices the picker offers. When omitted (or empty), the picker fetches ugly.bot's
|
|
30
28
|
* `voiceList` catalog itself (see `useVoiceCatalog`) — pass a list only to curate one.
|
|
@@ -46,5 +44,5 @@ export interface CharacterCreatorProps {
|
|
|
46
44
|
onGenerateTexture?: ((prompt: string, slot: GarmentSlot) => Promise<CharacterTextureResult | null>) | undefined;
|
|
47
45
|
className?: string | undefined;
|
|
48
46
|
}
|
|
49
|
-
export declare function CharacterCreator({ source, anims, initialSpec, initialName,
|
|
47
|
+
export declare function CharacterCreator({ source, anims, initialSpec, initialName, voices, onChange, onSave, onGenerateTexture, className, }: CharacterCreatorProps): import("react").JSX.Element;
|
|
50
48
|
//# sourceMappingURL=CharacterCreator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CharacterCreator.d.ts","sourceRoot":"","sources":["../../../src/character/client/CharacterCreator.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"CharacterCreator.d.ts","sourceRoot":"","sources":["../../../src/character/client/CharacterCreator.tsx"],"names":[],"mappings":"AAsCA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAgB,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEpE,OAAO,EAGL,KAAK,oBAAoB,EAC1B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAiB,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAyBvE,OAAO,EAA0B,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAI/E,sDAAsD;AACtD,MAAM,MAAM,iBAAiB,GAC3B,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE3D,iGAAiG;AACjG,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,aAAa,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd;AAID,YAAY,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAElE,oGAAoG;AACpG,MAAM,WAAW,sBAAsB;IACrC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B;AAED,MAAM,WAAW,qBAAqB;IACpC,kFAAkF;IAClF,MAAM,EAAE,kBAAkB,CAAC;IAC3B,+FAA+F;IAC/F,KAAK,CAAC,EAAE,YAAY,GAAG,SAAS,CAAC;IACjC,WAAW,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;IACxC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC;;;OAGG;IACH,MAAM,CAAC,EAAE,SAAS,oBAAoB,EAAE,GAAG,SAAS,CAAC;IACrD,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,qBAAqB,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IAChE;;;;OAIG;IACH,MAAM,CAAC,EACH,CAAC,CAAC,KAAK,EAAE,qBAAqB,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,GACtE,SAAS,CAAC;IACd;;;;OAIG;IACH,iBAAiB,CAAC,EACd,CAAC,CACC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,WAAW,KACd,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC,CAAC,GAC5C,SAAS,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAChC;AAmxBD,wBAAgB,gBAAgB,CAAC,EAC/B,MAAM,EACN,KAAK,EACL,WAAW,EACX,WAAW,EACX,MAAM,EACN,QAAQ,EACR,MAAM,EACN,iBAAiB,EACjB,SAAS,GACV,EAAE,qBAAqB,+BA4qCvB"}
|
|
@@ -3,7 +3,8 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
|
|
|
3
3
|
// CharacterCreator — the design-mock character designer, made real.
|
|
4
4
|
//
|
|
5
5
|
// Six kit-driven categories (Basics / Body / Face / Hair / Outfit / Voice) around a live
|
|
6
|
-
// `CharacterCanvas`. Desktop ≥900 px: stage left, 360 px editor
|
|
6
|
+
// `CharacterCanvas`. Desktop ≥900 px: stage left, 360 px editor, and a 76 px category rail on
|
|
7
|
+
// the far right — icon over label, stacked top to bottom.
|
|
7
8
|
// Mobile <900 px: stage fills, the editor becomes a bottom dock — horizontal options strip on
|
|
8
9
|
// top, icon category row below — exactly the mock's app-shell, expressed as one DOM plus media
|
|
9
10
|
// queries (no JS layout switching, so the two layouts can never drift apart).
|
|
@@ -35,13 +36,18 @@ import { EYE_COLOURS, EYE_COLOUR_NAMES, HAIR_COLOURS, HAIR_COLOUR_NAMES, } from
|
|
|
35
36
|
import { ETHNICITIES, ethnicityPercents, rebalanceEthnicity, } from '../shared/lib/humanMacro.js';
|
|
36
37
|
import { CHAR_MATERIALS, GLASS_ALPHA, } from '../shared/lib/charMaterial.js';
|
|
37
38
|
import { DEFAULT_CHARACTER_SPEC } from '../shared/spec.js';
|
|
39
|
+
import { randomCharacterSpec, pickVoiceId } from '../shared/lib/randomSpec.js';
|
|
38
40
|
import { sanitizeSpec } from '../shared/specAdapter.js';
|
|
39
41
|
/* ============================== option presets ============================== */
|
|
40
42
|
//
|
|
41
43
|
// The friendly stops the Body panel offers. Each is one point on a macro axis, not a new
|
|
42
44
|
// capability: `stops()` in humanMacro.ts is what turns these into real blend weights.
|
|
43
45
|
//
|
|
44
|
-
|
|
46
|
+
/**
|
|
47
|
+
* Three named points on `macro.gender`, which is ONE 0..1 axis and not a category. The tiles are
|
|
48
|
+
* a shortcut onto it; the blend row below them is the axis itself.
|
|
49
|
+
*/
|
|
50
|
+
const GENDER_STOPS = [
|
|
45
51
|
{ label: 'Feminine', gender: 0.1 },
|
|
46
52
|
{ label: 'Androgynous', gender: 0.5 },
|
|
47
53
|
{ label: 'Masculine', gender: 0.9 },
|
|
@@ -154,17 +160,6 @@ const FIRMNESS_STOPS = [
|
|
|
154
160
|
{ label: 'Average', v: 0.5 },
|
|
155
161
|
{ label: 'Firm', v: 0.85 },
|
|
156
162
|
];
|
|
157
|
-
/** The mock's style tags — freeform metadata on the doc, not part of the renderable spec. */
|
|
158
|
-
const STYLE_TAGS = [
|
|
159
|
-
'Friendly',
|
|
160
|
-
'Bold',
|
|
161
|
-
'Chill',
|
|
162
|
-
'Witty',
|
|
163
|
-
'Mysterious',
|
|
164
|
-
'Heroic',
|
|
165
|
-
'Goofy',
|
|
166
|
-
'Wise',
|
|
167
|
-
];
|
|
168
163
|
/**
|
|
169
164
|
* The mock's four archetypes, translated to what a spec can actually express: a build, an age,
|
|
170
165
|
* a height, and a deterministic outfit pick per slot (`pick % count` — deterministic so the same
|
|
@@ -423,7 +418,7 @@ const CREATOR_CSS = `
|
|
|
423
418
|
}
|
|
424
419
|
.ucc, .ucc *{box-sizing:border-box;}
|
|
425
420
|
.ucc{
|
|
426
|
-
position:relative; display:grid; grid-template-columns:minmax(0,1fr) 360px;
|
|
421
|
+
position:relative; display:grid; grid-template-columns:minmax(0,1fr) 360px 76px;
|
|
427
422
|
height:100%; min-height:0; overflow:hidden;
|
|
428
423
|
background:var(--ucc-bg); color:var(--ucc-text);
|
|
429
424
|
font:15px 'Inter',system-ui,sans-serif;
|
|
@@ -474,24 +469,38 @@ const CREATOR_CSS = `
|
|
|
474
469
|
}
|
|
475
470
|
.ucc-pose-pill:hover{color:var(--ucc-text);}
|
|
476
471
|
.ucc-pose-pill.selected{border-color:var(--ucc-brand); color:var(--ucc-brand); background:var(--ucc-brand-glow);}
|
|
472
|
+
/* the floor switch — its own dock, so it is never mistaken for a pose */
|
|
473
|
+
.ucc-floor-dock{
|
|
474
|
+
position:absolute; bottom:14px; left:16px; z-index:3; display:flex; padding:6px;
|
|
475
|
+
border-radius:99px; background:color-mix(in srgb, var(--ucc-bg) 55%, transparent);
|
|
476
|
+
border:1px solid var(--ucc-border);
|
|
477
|
+
backdrop-filter:blur(10px); -webkit-backdrop-filter:blur(10px);
|
|
478
|
+
}
|
|
477
479
|
/* editor */
|
|
478
480
|
.ucc-editor{border-left:1px solid var(--ucc-border); display:flex; flex-direction:column;
|
|
479
481
|
min-height:0; background:var(--ucc-bg);}
|
|
482
|
+
/* the category rail — desktop puts it in the third grid column, far right */
|
|
480
483
|
.ucc-pill-tabs{
|
|
481
|
-
order:
|
|
482
|
-
|
|
484
|
+
/* ⚠️ order:3, NOT the order:1 this had as the editor's first child. On a grid, order
|
|
485
|
+
drives auto-placement: left at 1 the rail would be placed in the FIRST column and shove
|
|
486
|
+
the stage across. (No backticks in here — this whole block is a template literal.) */
|
|
487
|
+
order:3; display:flex; flex-direction:column; gap:6px; padding:12px 8px;
|
|
488
|
+
border-left:1px solid var(--ucc-border); background:var(--ucc-bg);
|
|
489
|
+
overflow-y:auto; overflow-x:hidden; min-height:0; scrollbar-width:none;
|
|
483
490
|
}
|
|
484
491
|
.ucc-pill-tabs::-webkit-scrollbar{display:none;}
|
|
485
492
|
.ucc-pill-tab{
|
|
486
|
-
flex:
|
|
493
|
+
display:flex; flex-direction:column; align-items:center; justify-content:center; gap:5px;
|
|
494
|
+
width:100%; flex:0 0 auto; padding:10px 4px 8px; border-radius:12px; cursor:pointer;
|
|
487
495
|
border:1.5px solid var(--ucc-border); background:var(--ucc-bg-elev);
|
|
488
|
-
font:600
|
|
496
|
+
font:600 9.5px 'JetBrains Mono',ui-monospace,monospace; letter-spacing:.12em; text-transform:uppercase;
|
|
489
497
|
color:var(--ucc-text-muted); transition:all .15s; white-space:nowrap;
|
|
490
|
-
display:flex; align-items:center; gap:7px;
|
|
491
498
|
}
|
|
492
499
|
.ucc-pill-tab:hover{color:var(--ucc-text);}
|
|
493
500
|
.ucc-pill-tab.active{border-color:var(--ucc-brand); color:var(--ucc-brand); background:var(--ucc-brand-glow);}
|
|
494
|
-
|
|
501
|
+
/* the glyphs are shown at EVERY width now — the rail and the mobile dock both want them */
|
|
502
|
+
.ucc-tab-ico{display:block;}
|
|
503
|
+
.ucc-tab-ico svg{width:18px; height:18px; display:block;}
|
|
495
504
|
.ucc-panels{order:2; flex:1; overflow-y:auto; padding:18px 16px 30px; min-height:0;}
|
|
496
505
|
.ucc-panel h3{
|
|
497
506
|
font:800 19px 'Plus Jakarta Sans',system-ui,sans-serif; letter-spacing:-0.02em; margin:0 0 4px;
|
|
@@ -626,7 +635,7 @@ const CREATOR_CSS = `
|
|
|
626
635
|
.ucc ::-webkit-scrollbar-track{background:transparent;}
|
|
627
636
|
/* responsive */
|
|
628
637
|
@media (max-width:1100px){
|
|
629
|
-
.ucc{grid-template-columns:minmax(0,1fr) 320px;}
|
|
638
|
+
.ucc{grid-template-columns:minmax(0,1fr) 320px 72px;}
|
|
630
639
|
}
|
|
631
640
|
@media (max-width:899px){
|
|
632
641
|
.ucc{display:flex; flex-direction:column; height:100%; overflow:hidden;}
|
|
@@ -681,22 +690,27 @@ const CREATOR_CSS = `
|
|
|
681
690
|
.ucc-cost-line{margin-top:0; white-space:nowrap;}
|
|
682
691
|
.ucc-tex-strip{margin-top:0; flex-wrap:nowrap; min-height:0;}
|
|
683
692
|
.ucc-tex-strip .ucc-empty{white-space:nowrap;}
|
|
684
|
-
/* category selector row */
|
|
693
|
+
/* category selector row — the rail lies back down as the dock's bottom strip */
|
|
685
694
|
.ucc-pill-tabs{
|
|
686
|
-
order:2; position:static; display:flex;
|
|
695
|
+
order:2; position:static; display:flex; flex-direction:row; gap:2px;
|
|
696
|
+
overflow-x:auto; overflow-y:hidden; flex:none;
|
|
687
697
|
padding:4px 8px calc(6px + env(safe-area-inset-bottom));
|
|
688
|
-
border-bottom:none; border-top:1px solid var(--ucc-border);
|
|
698
|
+
border-left:none; border-bottom:none; border-top:1px solid var(--ucc-border);
|
|
699
|
+
background:var(--ucc-bg-elev); scrollbar-width:none;
|
|
689
700
|
}
|
|
690
701
|
.ucc-pill-tab{
|
|
691
|
-
display:flex; flex-direction:column; align-items:center; gap:4px; flex:none;
|
|
702
|
+
display:flex; flex-direction:column; align-items:center; gap:4px; flex:none; width:auto;
|
|
692
703
|
padding:7px 14px 5px; border:none; border-bottom:2px solid transparent; border-radius:0;
|
|
693
704
|
background:transparent; font-size:9.5px; letter-spacing:.18em; color:var(--ucc-text-muted);
|
|
694
705
|
}
|
|
695
706
|
.ucc-pill-tab:hover{color:var(--ucc-text);}
|
|
696
707
|
.ucc-pill-tab.active{border-color:var(--ucc-brand); color:var(--ucc-brand); background:transparent;}
|
|
697
|
-
.ucc-tab-ico{display:block;}
|
|
698
|
-
.ucc-tab-ico svg{width:18px; height:18px; display:block;}
|
|
699
708
|
.ucc-save{top:10px; right:12px; padding:8px 13px; font-size:13px;}
|
|
709
|
+
/* ⚠️ TOP-LEFT ON A PHONE. The pose dock is centred on the bottom edge and grows to
|
|
710
|
+
100% - 32px; a floor pill in the bottom-left corner overlaps it on a narrow screen, and
|
|
711
|
+
__uglyInspect reports overlapping interactive controls as a defect. Top-left is empty —
|
|
712
|
+
the save button is top-right. */
|
|
713
|
+
.ucc-floor-dock{bottom:auto; top:10px; left:12px; padding:4px;}
|
|
700
714
|
.ucc-toast{bottom:calc(150px + env(safe-area-inset-bottom));}
|
|
701
715
|
}
|
|
702
716
|
`;
|
|
@@ -711,21 +725,25 @@ function Sect({ eyebrow, children }) {
|
|
|
711
725
|
const FEATURE_LESS = -0.7;
|
|
712
726
|
const FEATURE_MORE = 0.7;
|
|
713
727
|
const featureBucket = (w) => w <= -0.2 ? -1 : w >= 0.2 ? 1 : 0;
|
|
714
|
-
export function CharacterCreator({ source, anims, initialSpec, initialName,
|
|
728
|
+
export function CharacterCreator({ source, anims, initialSpec, initialName, voices, onChange, onSave, onGenerateTexture, className, }) {
|
|
715
729
|
const [spec, setSpec] = useState(() => initialSpec ?? {
|
|
716
730
|
...structuredClone(DEFAULT_CHARACTER_SPEC),
|
|
717
731
|
seed: Math.floor(Math.random() * 0x7fffffff),
|
|
718
732
|
});
|
|
719
733
|
const [name, setName] = useState(initialName ?? '');
|
|
720
|
-
const [tags, setTags] = useState(() => [...(initialTags ?? [])]);
|
|
721
734
|
const [category, setCategory] = useState('basics');
|
|
722
735
|
const [facts, setFacts] = useState(null);
|
|
723
736
|
const [previewError, setPreviewError] = useState(null);
|
|
724
737
|
const [archetype, setArchetype] = useState(null);
|
|
725
738
|
const [pose, setPose] = useState(null);
|
|
739
|
+
// On by default: a character with nothing under their feet reads as floating.
|
|
740
|
+
const [ground, setGround] = useState(true);
|
|
726
741
|
// The ancestry blend starts folded away: the four tiles are the answer for almost everybody,
|
|
727
742
|
// and three sliders open by default make the Body panel read as a settings screen.
|
|
728
743
|
const [blendOpen, setBlendOpen] = useState(false);
|
|
744
|
+
// Folded away for the same reason the ancestry blend is: three tiles answer it for almost
|
|
745
|
+
// everybody, and a slider open by default makes the Body panel read as a settings screen.
|
|
746
|
+
const [genderBlendOpen, setGenderBlendOpen] = useState(false);
|
|
729
747
|
// AI restyle state.
|
|
730
748
|
const [texPrompt, setTexPrompt] = useState('');
|
|
731
749
|
const [texSlot, setTexSlot] = useState('body');
|
|
@@ -734,6 +752,25 @@ export function CharacterCreator({ source, anims, initialSpec, initialName, init
|
|
|
734
752
|
const [texHistory, setTexHistory] = useState([]);
|
|
735
753
|
const [texApplied, setTexApplied] = useState({});
|
|
736
754
|
const canvasRef = useRef(null);
|
|
755
|
+
/**
|
|
756
|
+
* Whether this character has had its opening roll.
|
|
757
|
+
*
|
|
758
|
+
* ⚠️ A REF AND NOT STATE, and it starts `true` when a spec was handed in. The roll can only
|
|
759
|
+
* happen once the kit's option lists arrive (`onFacts`), which is long after mount and can
|
|
760
|
+
* happen AGAIN — so without a latch a second `onFacts` would throw away everything the user
|
|
761
|
+
* had done. Editing a saved character never rolls at all.
|
|
762
|
+
*/
|
|
763
|
+
const rolledRef = useRef(initialSpec !== undefined);
|
|
764
|
+
const voiceRolledRef = useRef(initialSpec !== undefined);
|
|
765
|
+
const onFactsArrived = useCallback((f) => {
|
|
766
|
+
setFacts(f);
|
|
767
|
+
if (rolledRef.current)
|
|
768
|
+
return;
|
|
769
|
+
rolledRef.current = true;
|
|
770
|
+
// The seed the initial state already drew — so the number the spec carries for provenance
|
|
771
|
+
// really is the number that produced the body.
|
|
772
|
+
setSpec((s) => randomCharacterSpec(f, s.seed, s));
|
|
773
|
+
}, []);
|
|
737
774
|
/* ---- toast ---- */
|
|
738
775
|
const [toastMsg, setToastMsg] = useState(null);
|
|
739
776
|
const toastTimer = useRef(null);
|
|
@@ -756,8 +793,8 @@ export function CharacterCreator({ source, anims, initialSpec, initialName, init
|
|
|
756
793
|
mountedRef.current = true;
|
|
757
794
|
return;
|
|
758
795
|
}
|
|
759
|
-
onChangeRef.current?.({ spec, name
|
|
760
|
-
}, [spec, name
|
|
796
|
+
onChangeRef.current?.({ spec, name });
|
|
797
|
+
}, [spec, name]);
|
|
761
798
|
/* ---- speech → faceWeights ----
|
|
762
799
|
*
|
|
763
800
|
* The viseme events land on a `VisemeSchedule`; a per-frame `ChannelSmoother` turns them into
|
|
@@ -881,6 +918,26 @@ export function CharacterCreator({ source, anims, initialSpec, initialName, init
|
|
|
881
918
|
// A long catalog renders capped — the search is the way through it, not the scroll.
|
|
882
919
|
const filteredVoices = useMemo(() => filterVoiceOptions(voiceOptions, voiceQuery), [voiceOptions, voiceQuery]);
|
|
883
920
|
const shownVoices = filteredVoices.slice(0, 60);
|
|
921
|
+
/**
|
|
922
|
+
* The opening roll's voice, once there is a catalog to roll from.
|
|
923
|
+
*
|
|
924
|
+
* ⚠️ GATED ON THE CATALOG, NEVER ON `voiceOptions`. That memo always yields at least one
|
|
925
|
+
* entry — it prepends the spec's own voice when the list does not contain it — so a length
|
|
926
|
+
* check there passes instantly against an empty catalog and pins every new character to the
|
|
927
|
+
* default.
|
|
928
|
+
*/
|
|
929
|
+
useEffect(() => {
|
|
930
|
+
if (voiceRolledRef.current)
|
|
931
|
+
return;
|
|
932
|
+
const list = voices?.length ? voices : catalog.voices;
|
|
933
|
+
if (!list.length)
|
|
934
|
+
return;
|
|
935
|
+
voiceRolledRef.current = true;
|
|
936
|
+
setSpec((s) => {
|
|
937
|
+
const id = pickVoiceId(list.map((v) => v.id), s.seed);
|
|
938
|
+
return id ? { ...s, voice: { provider: 'inworld', voiceId: id } } : s;
|
|
939
|
+
});
|
|
940
|
+
}, [voices, catalog.voices]);
|
|
884
941
|
/* ---- edit helpers ---- */
|
|
885
942
|
const updateSpec = (next) => setSpec(next);
|
|
886
943
|
const setMacro = (patch) => updateSpec({ ...spec, macro: { ...spec.macro, ...patch } });
|
|
@@ -944,14 +1001,6 @@ export function CharacterCreator({ source, anims, initialSpec, initialName, init
|
|
|
944
1001
|
setArchetype(a.name);
|
|
945
1002
|
toast(`${a.name} defaults applied`);
|
|
946
1003
|
};
|
|
947
|
-
const toggleTag = (tag) => {
|
|
948
|
-
if (tags.includes(tag))
|
|
949
|
-
setTags(tags.filter((t) => t !== tag));
|
|
950
|
-
else if (tags.length >= 3)
|
|
951
|
-
toast('Pick up to 3 tags');
|
|
952
|
-
else
|
|
953
|
-
setTags([...tags, tag]);
|
|
954
|
-
};
|
|
955
1004
|
const generateTexture = () => {
|
|
956
1005
|
if (!onGenerateTexture || texBusy)
|
|
957
1006
|
return;
|
|
@@ -994,7 +1043,7 @@ export function CharacterCreator({ source, anims, initialSpec, initialName, init
|
|
|
994
1043
|
const n = name.trim() || 'Unnamed';
|
|
995
1044
|
if (n !== name)
|
|
996
1045
|
setName(n);
|
|
997
|
-
onSave?.({ spec, name: n
|
|
1046
|
+
onSave?.({ spec, name: n }, () => {
|
|
998
1047
|
const h = canvasRef.current;
|
|
999
1048
|
if (!h)
|
|
1000
1049
|
return Promise.reject(new Error('the preview is not ready yet — wait for the first frame'));
|
|
@@ -1005,10 +1054,14 @@ export function CharacterCreator({ source, anims, initialSpec, initialName, init
|
|
|
1005
1054
|
const wardrobeNote = previewError
|
|
1006
1055
|
? `The preview could not start, so its option lists never arrived — ${previewError}`
|
|
1007
1056
|
: 'Loading the wardrobe…';
|
|
1008
|
-
const basicsPanel = (_jsxs(_Fragment, { children: [_jsx(Sect, { eyebrow: "Name", children: _jsx("input", { type: "text", "data-id": "character-name", "aria-label": "Character name", value: name, placeholder: "Give them a name", onChange: (e) => setName(e.target.value) }) }), _jsx(Sect, { eyebrow: "
|
|
1009
|
-
const bodyPanel = !facts ? (_jsx("div", { className: "ucc-note", children: wardrobeNote })) : (_jsxs(_Fragment, { children: [
|
|
1010
|
-
|
|
1011
|
-
|
|
1057
|
+
const basicsPanel = (_jsxs(_Fragment, { children: [_jsx(Sect, { eyebrow: "Name", children: _jsx("input", { type: "text", "data-id": "character-name", "aria-label": "Character name", value: name, placeholder: "Give them a name", onChange: (e) => setName(e.target.value) }) }), _jsx(Sect, { eyebrow: "Archetype \u2014 sets sensible defaults", children: _jsx("div", { className: "ucc-opt-grid ucc-wide", children: ARCHETYPES.map((a, i) => (_jsxs("button", { type: "button", "data-id": `archetype-${a.name.toLowerCase()}`, className: `ucc-opt-tile${archetype === a.name ? ' selected' : ''}`, disabled: !facts, onClick: () => applyArchetype(a, i), children: [_jsx("div", { className: "ucc-t-name", children: a.name }), _jsx("div", { className: "ucc-t-desc", children: a.desc })] }, a.name))) }) })] }));
|
|
1058
|
+
const bodyPanel = !facts ? (_jsx("div", { className: "ucc-note", children: wardrobeNote })) : (_jsxs(_Fragment, { children: [_jsxs(Sect, { eyebrow: "Gender", children: [_jsx("div", { className: "ucc-opt-grid", children: GENDER_STOPS.map((f) => (_jsx("button", { type: "button", "data-id": `gender-${f.label.toLowerCase()}`, className: `ucc-opt-tile${nearestStop(spec.macro.gender, GENDER_STOPS.map((s) => s.gender)) === GENDER_STOPS.indexOf(f)
|
|
1059
|
+
? ' selected'
|
|
1060
|
+
: ''}`, onClick: () => setMacro({ gender: f.gender }), children: _jsx("div", { className: "ucc-t-name", children: f.label }) }, f.label))) }), _jsxs("div", { className: "ucc-blend", children: [_jsx("button", { type: "button", "data-id": "gender-blend-toggle", className: "ucc-btn-ghost ucc-btn-sm", "aria-expanded": genderBlendOpen, onClick: () => setGenderBlendOpen(!genderBlendOpen), children: genderBlendOpen ? 'Hide blend' : 'Custom blend' }), genderBlendOpen && (_jsxs("div", { className: "ucc-blend-row", children: [_jsx("span", { className: "ucc-b-name", children: "Masculine" }), _jsx("input", { "data-id": "gender-share", type: "range", min: 0, max: 100, step: 1, "aria-label": "Masculine share", value: Math.round(spec.macro.gender * 100),
|
|
1061
|
+
// ⚠️ WRITTEN STRAIGHT THROUGH, unlike the ancestry blend. That one renormalises
|
|
1062
|
+
// because its three shares must sum to 1 or the spec's own zod refinement
|
|
1063
|
+
// rejects it; this is a single scalar with nothing to balance against.
|
|
1064
|
+
onChange: (e) => setMacro({ gender: Number(e.target.value) / 100 }) }), _jsx("span", { className: "ucc-b-val", children: Math.round(spec.macro.gender * 100) })] }))] }), _jsx("div", { className: "ucc-hint", children: "The tiles are three points on one axis; the slider is everywhere between. 0 is fully feminine, 100 fully masculine." })] }), _jsxs(Sect, { eyebrow: "Ancestry", children: [_jsx("div", { className: "ucc-opt-grid", children: ANCESTRY_STOPS.map((a) => (_jsx("button", { type: "button", "data-id": `ancestry-${a.label.toLowerCase()}`, className: `ucc-opt-tile${sameEthnicity(spec.macro.ethnicity, a.e) ? ' selected' : ''}`, onClick: () => setMacro({ ethnicity: [...a.e] }), children: _jsx("div", { className: "ucc-t-name", children: a.label }) }, a.label))) }), _jsxs("div", { className: "ucc-blend", children: [_jsx("button", { type: "button", "data-id": "ancestry-blend-toggle", className: "ucc-btn-ghost ucc-btn-sm", "aria-expanded": blendOpen, onClick: () => setBlendOpen(!blendOpen), children: blendOpen ? 'Hide blend' : 'Custom blend' }), blendOpen &&
|
|
1012
1065
|
ETHNICITIES.map((eth, i) => (_jsxs("div", { className: "ucc-blend-row", children: [_jsx("span", { className: "ucc-b-name", children: eth }), _jsx("input", { "data-id": `ancestry-share-${eth}`, type: "range", min: 0, max: 100, step: 1, "aria-label": `${eth} share`, value: ancestryPercents[i], onChange: (e) =>
|
|
1013
1066
|
// ⚠️ `rebalanceEthnicity`, never a direct write: the three shares must sum to
|
|
1014
1067
|
// 1 or the spec's own zod refinement rejects it, and `macroWeights` blends the
|
|
@@ -1074,11 +1127,11 @@ export function CharacterCreator({ source, anims, initialSpec, initialName, init
|
|
|
1074
1127
|
voice: voicePanel,
|
|
1075
1128
|
};
|
|
1076
1129
|
const active = CATEGORIES.find((c) => c.id === category);
|
|
1077
|
-
return (_jsxs("div", { className: `ucc${className ? ` ${className}` : ''}`, "data-id": "character-creator", children: [_jsx("style", { children: CREATOR_CSS }), _jsx("div", { className: "ucc-stage", children: _jsxs("div", { className: "ucc-stage-canvas", children: [_jsx(CharacterCanvas, { ref: canvasRef, className: "ucc-canvas", source: source, spec: spec, pose: pose, anims: anims, camera: active.camera, faceWeights: faceWeights, onFacts:
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
|
|
1130
|
+
return (_jsxs("div", { className: `ucc${className ? ` ${className}` : ''}`, "data-id": "character-creator", children: [_jsx("style", { children: CREATOR_CSS }), _jsx("div", { className: "ucc-stage", children: _jsxs("div", { className: "ucc-stage-canvas", children: [_jsx(CharacterCanvas, { ref: canvasRef, className: "ucc-canvas", source: source, spec: spec, pose: pose, anims: anims, camera: active.camera, ground: ground, faceWeights: faceWeights, onFacts: onFactsArrived, onError: setPreviewError }), onSave && (_jsx("button", { type: "button", "data-id": "save-character", className: "ucc-btn-primary ucc-save", onClick: saveDraft, children: "Save character" })), _jsx("div", { className: "ucc-floor-dock", children: _jsx("button", { type: "button", "data-id": "floor-toggle", "aria-label": "Show the floor", "aria-pressed": ground, className: `ucc-pose-pill${ground ? ' selected' : ''}`, onClick: () => setGround(!ground), children: ground ? '● floor' : 'no floor' }) }), clipNames.length > 0 && (_jsxs("div", { className: "ucc-pose-dock", "data-id": "pose-dock", children: [_jsx("button", { type: "button", "data-id": "idle-standing", className: `ucc-pose-pill${pose === null ? ' selected' : ''}`, onClick: () => setPose(null), children: "Standing" }), clipNames.map((c) => (_jsx("button", { type: "button", "data-id": `idle-${c}`, className: `ucc-pose-pill${pose === c ? ' selected' : ''}`, onClick: () => setPose(c), children: friendlyId(c) }, c)))] }))] }) }), _jsx("div", { className: "ucc-editor", children: _jsx("div", { className: "ucc-panels", children: _jsxs("div", { className: "ucc-panel", role: "tabpanel", children: [_jsx("h3", { children: active.label }), _jsx("div", { className: "ucc-sub", children: active.sub }), panels[category]] }) }) }), _jsx("div", { className: "ucc-pill-tabs", role: "tablist", children: CATEGORIES.map((c) => (_jsxs("div", { role: "tab", tabIndex: 0, "aria-selected": category === c.id, "data-id": `tab-${c.id}`, className: `ucc-pill-tab${category === c.id ? ' active' : ''}`, onClick: () => setCategory(c.id), onKeyDown: (e) => {
|
|
1131
|
+
if (e.key === 'Enter' || e.key === ' ') {
|
|
1132
|
+
e.preventDefault();
|
|
1133
|
+
setCategory(c.id);
|
|
1134
|
+
}
|
|
1135
|
+
}, children: [_jsx("span", { className: "ucc-tab-ico", children: _jsx("svg", { viewBox: "0 0 18 18", fill: "none", stroke: "currentColor", strokeWidth: 1.8, strokeLinecap: "round", strokeLinejoin: "round", dangerouslySetInnerHTML: { __html: CATEGORY_ICONS[c.id] } }) }), _jsx("span", { children: c.label })] }, c.id))) }), _jsx("div", { className: `ucc-toast${toastMsg ? ' show' : ''}`, role: "status", children: toastMsg })] }));
|
|
1083
1136
|
}
|
|
1084
1137
|
//# sourceMappingURL=CharacterCreator.js.map
|