@lovelace_lol/polymer 0.0.1 → 0.0.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 CHANGED
@@ -186,7 +186,8 @@ import {
186
186
  await initEmbodyCore();
187
187
  if (supportsRustEmbodyPreset('cc4')) {
188
188
  const engine = createRustEmbodyHostUnbound({
189
- presetType: 'cc4',
189
+ profileMode: 'preset',
190
+ presetId: 'cc4',
190
191
  profile: characterProfileOverrides,
191
192
  });
192
193
  engine.onReady({ model, meshes });
package/dist/index.d.ts CHANGED
@@ -80,6 +80,7 @@ export interface WasmHairPhysicsSolver {
80
80
 
81
81
  export interface WasmRuntimeCore {
82
82
  configure(profileJson: string, modelJson: string): void;
83
+ configure_with_profile(profileJson: string, modelJson: string): void;
83
84
  configure_with_preset(presetId: string, overrideJson: string, modelJson: string): void;
84
85
  viseme_slot_index(slotId: string): number;
85
86
  load_au_morph_bindings(values: Float32Array): void;
@@ -150,14 +151,24 @@ export interface EmbodyCoreWasmModule {
150
151
  RuntimeCore: new (visemeSlotCount: number) => WasmRuntimeCore;
151
152
  }
152
153
 
153
- export type RustEmbodyProfileMode = 'embedded-preset' | 'exact-profile';
154
+ export type RustEmbodyProfileMode = 'preset' | 'profile';
154
155
 
155
- export interface RustEmbodyHostConfig {
156
- profile?: Partial<Profile>;
157
- presetType?: string;
158
- profileMode?: RustEmbodyProfileMode;
159
- meshes?: unknown[];
160
- }
156
+ export type RustEmbodyHostConfig =
157
+ | {
158
+ profileMode?: 'preset';
159
+ presetId?: string;
160
+ /** @deprecated Use presetId. */
161
+ presetType?: string;
162
+ profile?: Partial<Profile>;
163
+ meshes?: unknown[];
164
+ }
165
+ | {
166
+ profileMode: 'profile';
167
+ profile: Profile;
168
+ presetId?: never;
169
+ presetType?: never;
170
+ meshes?: unknown[];
171
+ };
161
172
 
162
173
  /**
163
174
  * Polymer's CLJS-owned character runtime contract.
@@ -175,6 +186,7 @@ export interface PolymerCharacterRuntime {
175
186
  setProfile(profile: Profile): void;
176
187
  getProfile(): Profile;
177
188
  getProfileMode(): RustEmbodyProfileMode;
189
+ getPresetId(): string | null;
178
190
  supportsPreset(presetId?: string): boolean;
179
191
  setAU(id: number, value: number, balance?: number): void;
180
192
  getAU(id: number): number;
package/dist/index.js CHANGED
@@ -621,8 +621,8 @@ Td,q);return function(){return Z.i(h,Kk,q)}},notifyAgentSpeech:function(q){retur
621
621
  case "WORD":return c(new m(null,2,[V,"agentSpeechWord",nw,nw.g(q)],null));default:return null}},dispose:function(){if(t(x(l)))return null;P(l,!0);var q=x(k);t(q)&&(q.l?q.l():q.call(null),P(k,null));P(e,Vg);P(f,Vg);P(h,Vg);return AI(d,"dispose")},notifyAgentSpeechEnd:function(){return c(new m(null,1,[V,"agentSpeechEnded"],null))},getState:function(){return AI(d,"snapshot")},onTranscript:function(q){Z.i(e,Td,q);return function(){return Z.i(e,Kk,q)}}}},EI=function(a){for(var b=[],c=arguments.length,
622
622
  d=0;;)if(d<c)b.push(arguments[d]),d+=1;else break;return DI(arguments[0],arguments[1],2<b.length?new vc(b.slice(2),0,null):null)},DI=function(a,b,c){a=a[b];if(!fd(a))throw Error(["Embody Wasm module is missing method: ",w.g(b)].join(""));return oe(a,c)},GI=function(){var a=x(FI);if(t(a))return a;throw Error("Embody Wasm core is not initialized. Call initEmbodyCore / init-core! first.");},II=function(){var a=x(HI);t(a)||(a=esm_import$$lovelace_lol$embody$wasm.initEmbodyCore().then(function(b){var c=
623
623
  esm_import$$lovelace_lol$embody$wasm.EMBODY_CORE_ABI_VERSION;c=t(c)?c:1;var d=EI(b,"core_abi_version");if(ye(d,c))throw Error(["Embody Wasm ABI mismatch: runtime\x3d",w.g(d)," expected\x3d",w.g(c)].join(""));P(FI,b);return b}).catch(function(b){P(HI,null);throw b;}),P(HI,a));return a},JI=function(a,b){return DI(GI(),"solve_bilateral_values",K([a,b]))},KI=function(){return EI(GI(),"default_hair_physics_config_values")},MI=function(a){for(var b=[],c=arguments.length,d=0;;)if(d<c)b.push(arguments[d]),
624
- d+=1;else break;return LI(arguments[0],1<b.length?new vc(b.slice(1),0,null):null)},LI=function(a,b){if(!t(a))throw Error("The installed Embody package is missing a required Three.js adapter export.");return Reflect.construct(a,Ad(b))},NI=function(a){return ya(a)?K(a):yc},OI=function(a){var b="number"===typeof a;a=t(b?isFinite(a):b)?a:0;a=1<a?1:a;return 0>a?0:a},PI=function(a){a="string"===typeof a?a.trim().toLowerCase():null;return J.h(null,a)?"cc4":J.h("",a)?"cc4":J.h("default",a)?"cc4":J.h("human",
625
- a)?"cc4":a},QI=function(a){var b="string"===typeof a?a.trim().toLowerCase():null;if(J.h(null,b)||J.h("",b)||J.h("preset",b)||J.h("embedded-preset",b))return"embedded-preset";if(J.h("exact",b)||J.h("exact-profile",b))return"exact-profile";throw Error(['Unknown Rust Embody profileMode "',w.g(a),'". Expected "embedded-preset" or "exact-profile".'].join(""));},RI=function(a,b){if(null==a){if(t(b))throw Error("Rust Embody exact-profile mode requires a profile object.");return""}if(ya(a)||ye("object",ba(a)))throw Error("Rust Embody profile must be a JSON object.");
624
+ d+=1;else break;return LI(arguments[0],1<b.length?new vc(b.slice(1),0,null):null)},LI=function(a,b){if(!t(a))throw Error("The installed Embody package is missing a required Three.js adapter export.");return Reflect.construct(a,Ad(b))},NI=function(a){return ya(a)?K(a):yc},OI=function(a){var b="number"===typeof a;a=t(b?isFinite(a):b)?a:0;a=1<a?1:a;return 0>a?0:a},PI=function(a){a="string"===typeof a?a.trim().toLowerCase():null;return null==a||J.h("",a)?"cc4":a},QI=function(a){var b="string"===typeof a?
625
+ a.trim().toLowerCase():null;if(J.h(null,b)||J.h("",b)||J.h("preset",b)||J.h("embedded-preset",b))return"preset";if(J.h("profile",b)||J.h("resolved-profile",b)||J.h("exact",b)||J.h("exact-profile",b))return"profile";throw Error(['Unknown Rust Embody profileMode "',w.g(a),'". Expected "preset" or "profile".'].join(""));},RI=function(a,b){if(null==a){if(t(b))throw Error("Rust Embody profile mode requires a resolved profile object.");return""}if(ya(a)||ye("object",ba(a)))throw Error("Rust Embody profile must be a JSON object.");
626
626
  return JSON.stringify(a)},TI=function(a){var b=GI();return td(SI.j(b,"has_preset",K([PI(a)])))},UI=function(a,b){a=t(a)?a[b]:null;return t(a)?a:{}},VI=function(a,b,c,d){d=ya(d)&&0<d.length?d:function(){var e=UI(c,"morphToMesh").face;return ya(e)&&0<e.length?e:a.map(function(f){return f.name})}();return Me(function(e){return b.get(e)},NI(d))},WI=function(a,b,c,d,e){return Ja(function(f,h){var l=h.morphTargetDictionary;h=h.morphTargetInfluences;l="number"===typeof d?d:t(l)?l[d]:null;return t(t(h)?"number"===
627
627
  typeof l&&0<=l&&l<h.length:h)?Td.h(f,{infl:h,idx:l}):f},ef,VI(a,b,c,e))},XI=function(a,b,c,d,e){return Ja(function(f,h){h=h.infl[h.idx];h=t(h)?h:0;return f>h?f:h},0,WI(a,b,c,d,e))},YI=function(a,b){var c=UI(a,"auToMorphs")[w.g(b)];a=UI(a,"auToBones")[w.g(b)];b=function(){return t(c)?De(function(d){d=c[d];return 0<(t(d)?d:[]).length},new Q(null,3,5,T,["left","right","center"],null)):c}();return td(t(b)?ya(a)&&0<a.length:b)},ZI=function(a,b,c){a[c]=function(){function d(f){var h=null;if(0<arguments.length){h=
628
628
  0;for(var l=Array(arguments.length-0);h<l.length;)l[h]=arguments[h+0],++h;h=new vc(l,0,null)}return e.call(this,h)}function e(f){return qe(SI,x(b),c,f)}d.C=0;d.G=function(f){f=C(f);return e(f)};d.j=e;return d}()};/*
@@ -979,29 +979,29 @@ pK=function pK(a){switch(arguments.length){case 0:return pK.l();case 1:return pK
979
979
  pK.g=function(a){function b(la,R,aa){la=WI(x(ea),x(S),x(B),la,aa);R=OI(R);la=C(la);aa=null;for(var ta=0,oa=0;;)if(oa<ta){var Ka=aa.B(null,oa);Ka.infl[Ka.idx]=R;oa+=1}else if(la=C(la))aa=la,rd(aa)?(la=Yb(aa),ta=Zb(aa),aa=la,Ka=G(la),la=ta,ta=Ka):(Ka=D(aa),Ka.infl[Ka.idx]=R,la=F(aa),aa=null,ta=0),oa=0;else return null}function c(la){var R="number"===typeof la;la=t(R?isFinite(la):R)?la:0;la=0>la?0:la;if(0<la){R=SI(y,"active_transition_count");var aa=SI.j(y,"update",K([la]));SI.j(H,"tick",K([la]));(0<
980
980
  R||0<aa)&&d();t(x(Aa))&&SI.j(x(Aa),"update",K([la]));return t(x(Qa))?SI.j(x(Qa),"update",K([la])):null}return null}function d(){var la=SI(y,"evaluate_morph_frame_delta"),R=SI(y,"evaluate_bone_frame_delta");0<la.length&&SI.j(A,"applyPackedMorphFrameDelta",K([la]));return 0<R.length?(SI.j(A,"applyPackedBoneFrameDelta",K([R])),t(x(W))?SI.j(x(W),"updateMatrixWorld",K([!0])):null):null}function e(){P(Ib,!1);P(E,null);if(null!=x(M)){var la=globalThis.cancelAnimationFrame;t(la)&&la.call(globalThis,x(M));
981
981
  return P(M,null)}return null}function f(la){if(t(x(W))){la=t(la)?{profile:x(B),meshes:la}:{profile:x(B)};la=SI.j(v,"inspectModel",K([x(W),la]));var R=la.allMeshes;var aa=la.morphMeshes;aa=t(t(aa)?0<aa.length:aa)?aa:R;P(Ha,la);P(ea,aa);P(N,R);P(S,la.meshByName);P(pa,la.bones);da.meshes=aa;da.meshByName=x(S);da.bones=x(pa);SI.j(A,"setBindings",K([lK.g?lK.g(la):lK.call(null,la)]));SI.j(A,"applyMeshMaterialConfigs",K([x(W),UI(x(B),"meshes")]));t(x(Qa))&&(SI.j(x(Qa),"registerHairObjects",K([Ad(l())])),
982
- SI.j(x(Qa),"setHairPhysicsProfileConfig",K([x(B).hairPhysics])));la=JSON.stringify(la.descriptor);r?SI.j(y,"configure_exact_profile",K([x(z),la])):SI.j(y,"configure_with_preset",K([u,x(z),la]));return d()}return null}function h(la){var R=bd(x(Jb),la);if(t(R))return R;la=UI(x(B),"auMixDefaults")[w.g(la)];return t(la)?la:1}function l(){return bf(function(la){la=UI(x(B),"meshes")[la.name];la=t(la)?la.category:null;return J.h(la,"hair")||J.h(la,"eyebrow")},NI(x(N)))}function n(la,R,aa,ta){var oa=WI(x(ea),
982
+ SI.j(x(Qa),"setHairPhysicsProfileConfig",K([x(B).hairPhysics])));la=JSON.stringify(la.descriptor);r?SI.j(y,"configure_with_profile",K([x(z),la])):SI.j(y,"configure_with_preset",K([u,x(z),la]));return d()}return null}function h(la){var R=bd(x(Jb),la);if(t(R))return R;la=UI(x(B),"auMixDefaults")[w.g(la)];return t(la)?la:1}function l(){return bf(function(la){la=UI(x(B),"meshes")[la.name];la=t(la)?la.category:null;return J.h(la,"hair")||J.h(la,"eyebrow")},NI(x(N)))}function n(la,R,aa,ta){var oa=WI(x(ea),
983
983
  x(S),x(B),la,ta),Ka=Ja(function(ib,kb){kb=kb.infl[kb.idx];kb=t(kb)?kb:0;return ib>kb?ib:kb},0,oa);R=OI(R);return SI.j(H,"addTransition",K([["morph:",w.g(ya(ta)&&0<ta.length?ta.join(","):"*"),":",w.g(la)].join(""),Ka,R,t(aa)?aa:120,function(ib){for(var kb=C(oa),hb=null,be=0,Sg=0;;)if(Sg<be){var cf=hb.B(null,Sg);cf.infl[cf.idx]=OI(ib);Sg+=1}else if(kb=C(kb))hb=kb,rd(hb)?(kb=Yb(hb),be=Zb(hb),hb=kb,cf=G(kb),kb=be,be=cf):(cf=D(hb),cf.infl[cf.idx]=OI(ib),kb=F(hb),hb=null,be=0),Sg=0;else return null}]))}
984
- var k=t(a)?a:{},q=GI(),p=QI(k.profileMode),r=J.h(p,"exact-profile"),u=PI(k.presetType);if(!r&&za(SI.j(q,"has_preset",K([u]))))throw Error(['Rust Embody preset "',w.g(u),'" is not embedded. Known presets: ',w.g(SI(q,"list_presets").join(", ")),"."].join(""));var z=Oe(RI(k.profile,r)),B=Oe(r?JSON.parse(x(z)):JSON.parse(SI.j(q,"merge_embedded_preset",K([u,x(z)])))),I=q.RuntimeCore,y=LI(I,K([0])),v=MI(gK),A=MI(hK),H=MI(iK),W=Oe(null),ea=Oe([]),N=Oe([]),S=Oe(new Map),pa=Oe({}),Ha=Oe(null),Aa=Oe(null),
985
- Qa=Oe(null),rb=Oe([]),Jb=Oe(we),Ib=Oe(!1),M=Oe(null),E=Oe(null),da={},La=function R(){if(t(x(Ib))){var aa=globalThis.requestAnimationFrame;return t(aa)?P(M,aa.call(globalThis,function(ta){var oa=x(E);t(oa)?(oa=ta-oa,oa=(0>oa?0:oa)/1E3):oa=0;P(E,ta);c(oa);return R()})):null}return null};P(Aa,LI(jK,K([{getMeshByName:function(R){return x(S).get(R)},getMeshes:function(){return x(ea)},reapplyProceduralState:d,getBones:function(){return x(pa)},getCurrentBonePositionValue:function(R,aa){R=x(pa)[R];R=null==
986
- R?null:R.obj;R=null==R?null:R.position;return null==R?null:R[aa]},getCurrentBoneQuaternion:function(R){R=x(pa)[R];R=null==R?null:R.obj;R=null==R?null:R.quaternion;return null==R?null:R.clone()},getCurrentVisemeValue:function(R){R=x(rb)[R];return t(R)?R:0},getAUMixWeight:h,getCurrentMorphIndexValue:function(R,aa){return XI(x(ea),x(S),x(B),R,aa)},getCurrentMorphValue:function(R,aa){return XI(x(ea),x(S),x(B),R,aa)},getConfig:function(){return x(B)},computeSideValues:function(R,aa){R=JI(R,t(aa)?aa:0);
987
- return{left:R[0],right:R[1]}},getMeshNamesForViseme:function(){var R=x(B);return nK.g?nK.g(R):nK.call(null,R)},getModel:function(){return x(W)},getMeshNamesForAU:function(R){var aa=x(B);return mK.h?mK.h(aa,R):mK.call(null,aa,R)},isMixedAU:function(R){return YI(x(B),R)},getCompositeRotations:function(){var R=x(B);R=t(R)?R.compositeRotations:null;return ya(R)?R:[]},getCurrentAUValue:function(R){return SI.j(y,"get_au",K([R]))}}])));a=LI(kK,K([{getMeshByName:function(R){return x(S).get(R)},getSelectedHairMeshNames:function(){return Ad(We.h(function(R){return R.name},
988
- bf(function(R){var aa=J.h;R=UI(x(B),"meshes")[R.name];return aa.call(J,"hair",null==R?null:R.category)},NI(x(N)))))},buildClip:function(R,aa,ta){return SI.j(x(Aa),"buildClip",K([R,aa,ta]))},cleanupSnippet:function(R){return SI.j(x(Aa),"cleanupSnippet",K([R]))}}]));SI.j(a,"setCore",K([q]));P(Qa,a);da.onReady=function(R){P(W,R.model);return f(R.meshes)};da.bindModel=f;da.setProfile=function(R){SI(y,"clear");SI(H,"clearTransitions");d();P(rb,[]);P(Jb,we);P(z,RI(R,r));P(B,r?JSON.parse(x(z)):JSON.parse(SI.j(q,
989
- "merge_embedded_preset",K([u,x(z)]))));return f(x(ea))};da.getProfile=function(){return x(B)};da.getProfileMode=function(){return p};da.supportsPreset=function(R){return TI(R)};da.setAU=function(R,aa,ta){SI.j(y,"set_au_signed",K([R,aa,"number"===typeof ta?ta:NaN]));return d()};da.getAU=function(R){return SI.j(y,"get_au",K([R]))};da.setContinuum=function(R,aa,ta,oa){SI.j(y,"set_continuum",K([R,aa,ta,"number"===typeof oa?oa:NaN]));return d()};da.getContinuum=function(R,aa){return SI.j(y,"get_continuum",
990
- K([R,aa]))};da.transitionAU=function(R,aa,ta,oa){return SI.j(y,"transition_au",K([R,aa,t(ta)?ta:200,"number"===typeof oa?oa:NaN]))};da.transitionViseme=function(R,aa,ta,oa){return SI.j(y,"transition_viseme",K([R,aa,t(ta)?ta:80,t(oa)?oa:1]))};da.setViseme=function(R,aa,ta){SI.j(y,"set_viseme",K([R,aa]));SI.j(y,"set_viseme_jaw_scale",K([R,t(ta)?ta:1]));x(rb)[R]=aa;return d()};da.setVisemeById=function(R,aa,ta){R=SI.j(y,"viseme_slot_index",K([R]));return 0<=R?SI.j(da,"setViseme",K([R,aa,t(ta)?ta:1])):
991
- null};da.transitionVisemeById=function(R,aa,ta,oa){R=SI.j(y,"viseme_slot_index",K([R]));return 0<=R?SI.j(da,"transitionViseme",K([R,aa,t(ta)?ta:80,t(oa)?oa:1])):null};da.setAUMixWeight=function(R,aa){Z.o(Jb,U,R,aa);SI.j(y,"set_au_mix_weight",K([R,aa]));return d()};da.getAUMixWeight=h;da.hasLeftRightBones=function(R){R=UI(x(B),"auToBones")[w.g(R)];R=Yg(We.h(function(aa){return aa.side},NI(R)));return wd(R,"left")&&wd(R,"right")};da.setMorph=function(){function R(ta,oa){return b(ta,oa,null)}var aa=
992
- null;aa=function(ta,oa,Ka){switch(arguments.length){case 2:return R.call(this,ta,oa);case 3:return b(ta,oa,Ka)}throw Error("Invalid arity: "+arguments.length);};aa.h=R;aa.i=function(ta,oa,Ka){return b(ta,oa,Ka)};return aa}();da.setMorphOnMeshes=function(R,aa,ta){return b(aa,ta,R)};da.transitionMorph=function(){function R(oa,Ka,ib){return n(oa,Ka,ib,null)}function aa(oa,Ka){return n(oa,Ka,120,null)}var ta=null;ta=function(oa,Ka,ib,kb){switch(arguments.length){case 2:return aa.call(this,oa,Ka);case 3:return R.call(this,
993
- oa,Ka,ib);case 4:return n(oa,Ka,ib,kb)}throw Error("Invalid arity: "+arguments.length);};ta.h=aa;ta.i=R;ta.o=function(oa,Ka,ib,kb){return n(oa,Ka,ib,kb)};return ta}();da.getMorphTargets=function(){for(var R={},aa=C(NI(x(ea))),ta=null,oa=0,Ka=0;;)if(Ka<oa){var ib=ta.B(null,Ka),kb=ib.morphTargetDictionary;t(kb)&&(R[ib.name]=Object.keys(kb).sort());Ka+=1}else if(aa=C(aa))rd(aa)?(oa=Yb(aa),aa=Zb(aa),ta=oa,oa=G(oa)):(ta=D(aa),oa=ta.morphTargetDictionary,t(oa)&&(R[ta.name]=Object.keys(oa).sort()),aa=F(aa),
994
- ta=null,oa=0),Ka=0;else break;return R};da.getMorphTargetIndices=function(){for(var R={},aa=C(NI(x(ea))),ta=null,oa=0,Ka=0;;)if(Ka<oa){var ib=ta.B(null,Ka),kb=ib.morphTargetDictionary;if(t(kb)){var hb=kb,be=Object.entries(hb).map(function(){return function(ig){return{name:ig[0],index:ig[1]}}}(aa,ta,oa,Ka,hb,kb,ib,R,k,q,p,r,u,null,z,B,I,y,v,A,H,W,ea,N,S,pa,Ha,Aa,Qa,rb,Jb,Ib,M,E,da));be.sort(function(){return function(ig,nn){return ig.index-nn.index}}(aa,ta,oa,Ka,be,hb,kb,ib,R,k,q,p,r,u,null,z,B,I,
995
- y,v,A,H,W,ea,N,S,pa,Ha,Aa,Qa,rb,Jb,Ib,M,E,da));R[ib.name]=be}Ka+=1}else if(kb=C(aa)){ib=kb;if(rd(ib))aa=Yb(ib),Ka=Zb(ib),ta=aa,oa=G(aa),aa=Ka;else{hb=D(ib);be=hb.morphTargetDictionary;if(t(be)){var Sg=be,cf=Object.entries(Sg).map(function(){return function(ig){return{name:ig[0],index:ig[1]}}}(aa,ta,oa,Ka,Sg,be,hb,ib,kb,R,k,q,p,r,u,null,z,B,I,y,v,A,H,W,ea,N,S,pa,Ha,Aa,Qa,rb,Jb,Ib,M,E,da));cf.sort(function(){return function(ig,nn){return ig.index-nn.index}}(aa,ta,oa,Ka,cf,Sg,be,hb,ib,kb,R,k,q,p,r,u,
996
- null,z,B,I,y,v,A,H,W,ea,N,S,pa,Ha,Aa,Qa,rb,Jb,Ib,M,E,da));R[hb.name]=cf}aa=F(ib);ta=null;oa=0}Ka=0}else break;return R};da.getHairMorphTargets=function(){function R(oa){return SI.j(x(Qa),"getHairMorphTargets",K([oa]))}function aa(){return SI(x(Qa),"getHairMorphTargets")}var ta=null;ta=function(oa){switch(arguments.length){case 0:return aa.call(this);case 1:return R.call(this,oa)}throw Error("Invalid arity: "+arguments.length);};ta.l=aa;ta.g=R;return ta}();da.getMeshList=function(){return x(N).map(function(R){var aa=
997
- R.name,ta=UI(x(B),"meshes")[aa];return{name:aa,visible:R.visible,morphCount:function(){var oa=R.morphTargetInfluences;return t(oa)?oa:[]}().length,category:function(){var oa=t(ta)?ta.category:null;return t(oa)?oa:"other"}()}})};da.getBones=function(){return x(pa)};da.setMeshVisible=function(R,aa){return t(x(W))?SI.j(A,"setMeshVisible",K([x(W),R,aa])):null};da.highlightMesh=function(){function R(Ka,ib,kb){return t(x(W))?SI.j(A,"highlightMesh",K([x(W),Ka,ib,kb])):null}function aa(Ka,ib){return t(x(W))?
998
- SI.j(A,"highlightMesh",K([x(W),Ka,ib])):null}function ta(Ka){return t(x(W))?SI.j(A,"highlightMesh",K([x(W),Ka])):null}var oa=null;oa=function(Ka,ib,kb){switch(arguments.length){case 1:return ta.call(this,Ka);case 2:return aa.call(this,Ka,ib);case 3:return R.call(this,Ka,ib,kb)}throw Error("Invalid arity: "+arguments.length);};oa.g=ta;oa.h=aa;oa.i=R;return oa}();da.getMeshMaterialConfig=function(R){return t(x(W))?SI.j(A,"getMeshMaterialConfig",K([x(W),R])):null};da.setMeshMaterialConfig=function(R,
999
- aa){return t(x(W))?SI.j(A,"setMeshMaterialConfig",K([x(W),R,aa])):null};a=C(new Q(null,16,5,T,"registerHairObjects getRegisteredHairObjects getHairAppearance setHairColor setEyebrowColor setHairBaseColor setEyebrowBaseColor setHairGlow setEyebrowGlow setHairOutline setHairPhysicsEnabled isHairPhysicsEnabled setHairPhysicsConfig getHairPhysicsConfig validateHairMorphTargets applyHairStateToObject".split(" "),null));for(var Wa=null,cb=0,Ua=0;;)if(Ua<cb){var ec=Wa.B(null,Ua);da[ec]=function(R,aa,ta,
1000
- oa,Ka,ib,kb,hb,be,Sg,cf,ig,nn,vK,wK,xK,yK,zK,AK,BK,CK,DK,EK,FK,GK,EA){return function(){function on(jg){var kg=null;if(0<arguments.length){kg=0;for(var Tg=Array(arguments.length-0);kg<Tg.length;)Tg[kg]=arguments[kg+0],++kg;kg=new vc(Tg,0,null)}return pn.call(this,kg)}function pn(jg){return qe(SI,x(EA),Ka,jg)}on.C=0;on.G=function(jg){jg=C(jg);return pn(jg)};on.j=pn;return on}()}(a,Wa,cb,Ua,ec,k,q,p,r,u,null,z,B,I,y,v,A,H,W,ea,N,S,pa,Ha,Aa,Qa,rb,Jb,Ib,M,E,da);Ua+=1}else{var Vb=C(a);if(Vb){ec=Vb;if(rd(ec))a=
1001
- Yb(ec),Ua=Zb(ec),Wa=a,cb=G(a),a=Ua;else{var sa=D(ec);da[sa]=function(R,aa,ta,oa,Ka,ib,kb,hb,be,Sg,cf,ig,nn,vK,wK,xK,yK,zK,AK,BK,CK,DK,EK,FK,GK,EA,on,pn){return function(){function jg(Tg){var Aj=null;if(0<arguments.length){Aj=0;for(var st=Array(arguments.length-0);Aj<st.length;)st[Aj]=arguments[Aj+0],++Aj;Aj=new vc(st,0,null)}return kg.call(this,Aj)}function kg(Tg){return qe(SI,x(pn),Ka,Tg)}jg.C=0;jg.G=function(Tg){Tg=C(Tg);return kg(Tg)};jg.j=kg;return jg}()}(a,Wa,cb,Ua,sa,ec,Vb,k,q,p,r,u,null,z,
1002
- B,I,y,v,A,H,W,ea,N,S,pa,Ha,Aa,Qa,rb,Jb,Ib,M,E,da);a=F(ec);Wa=null;cb=0}Ua=0}else break}da.updateHairPhysics=function(R){return SI.j(x(Qa),"update",K([R]))};da.update=c;da.start=function(){if(t(x(Ib)))return null;P(Ib,!0);P(E,null);return La()};da.stop=e;da.clear=function(){SI(y,"clear");SI(H,"clearTransitions");return d()};da.resetToNeutral=da.clear;da.dispose=function(){e();t(x(Aa))&&SI(x(Aa),"dispose");t(x(Qa))&&SI(x(Qa),"clearRegisteredHairObjects");var R=y.free;t(R)&&R.call(y);P(W,null);P(ea,
1003
- []);P(N,[]);P(S,new Map);return P(pa,{})};a=C(oK);Wa=null;for(Ua=cb=0;;)if(Ua<cb)ec=Wa.B(null,Ua),ZI(da,Aa,ec),Ua+=1;else if(a=C(a))Wa=a,rd(Wa)?(a=Yb(Wa),Ua=Zb(Wa),Wa=a,cb=G(a),a=Ua):(a=D(Wa),ZI(da,Aa,a),a=F(Wa),Wa=null,cb=0),Ua=0;else break;return da};pK.C=1;var qK=function qK(a){switch(arguments.length){case 1:return qK.g(arguments[0]);case 2:return qK.h(arguments[0],arguments[1]);default:throw Error(["Invalid arity: ",w.g(arguments.length)].join(""));}};qK.g=function(a){return qK.h(a,{})};
1004
- qK.h=function(a,b){return II().then(function(){var c=pK.g(b);SI.j(c,"onReady",K([{model:a,meshes:b.meshes}]));return c})};qK.C=2;var rK=esm_import$$lovelace_lol$embody.Embody,sK,tK=esm_import$$lovelace_lol$embody.BLENDING_MODES;sK=t(tK)?tK:esm_import$$lovelace_lol$embody.THREE_BLENDING_MODES;
984
+ var k=t(a)?a:{},q=GI(),p=QI(k.profileMode),r=J.h(p,"profile"),u=PI(function(){var la=k.presetId;return t(la)?la:k.presetType}());if(!r&&za(SI.j(q,"has_preset",K([u]))))throw Error(['Rust Embody preset "',w.g(u),'" is not embedded. Known presets: ',w.g(SI(q,"list_presets").join(", ")),"."].join(""));var z=Oe(RI(k.profile,r)),B=Oe(r?JSON.parse(x(z)):JSON.parse(SI.j(q,"merge_embedded_preset",K([u,x(z)])))),I=q.RuntimeCore,y=LI(I,K([0])),v=MI(gK),A=MI(hK),H=MI(iK),W=Oe(null),ea=Oe([]),N=Oe([]),S=Oe(new Map),
985
+ pa=Oe({}),Ha=Oe(null),Aa=Oe(null),Qa=Oe(null),rb=Oe([]),Jb=Oe(we),Ib=Oe(!1),M=Oe(null),E=Oe(null),da={},La=function R(){if(t(x(Ib))){var aa=globalThis.requestAnimationFrame;return t(aa)?P(M,aa.call(globalThis,function(ta){var oa=x(E);t(oa)?(oa=ta-oa,oa=(0>oa?0:oa)/1E3):oa=0;P(E,ta);c(oa);return R()})):null}return null};P(Aa,LI(jK,K([{getMeshByName:function(R){return x(S).get(R)},getMeshes:function(){return x(ea)},reapplyProceduralState:d,getBones:function(){return x(pa)},getCurrentBonePositionValue:function(R,
986
+ aa){R=x(pa)[R];R=null==R?null:R.obj;R=null==R?null:R.position;return null==R?null:R[aa]},getCurrentBoneQuaternion:function(R){R=x(pa)[R];R=null==R?null:R.obj;R=null==R?null:R.quaternion;return null==R?null:R.clone()},getCurrentVisemeValue:function(R){R=x(rb)[R];return t(R)?R:0},getAUMixWeight:h,getCurrentMorphIndexValue:function(R,aa){return XI(x(ea),x(S),x(B),R,aa)},getCurrentMorphValue:function(R,aa){return XI(x(ea),x(S),x(B),R,aa)},getConfig:function(){return x(B)},computeSideValues:function(R,
987
+ aa){R=JI(R,t(aa)?aa:0);return{left:R[0],right:R[1]}},getMeshNamesForViseme:function(){var R=x(B);return nK.g?nK.g(R):nK.call(null,R)},getModel:function(){return x(W)},getMeshNamesForAU:function(R){var aa=x(B);return mK.h?mK.h(aa,R):mK.call(null,aa,R)},isMixedAU:function(R){return YI(x(B),R)},getCompositeRotations:function(){var R=x(B);R=t(R)?R.compositeRotations:null;return ya(R)?R:[]},getCurrentAUValue:function(R){return SI.j(y,"get_au",K([R]))}}])));a=LI(kK,K([{getMeshByName:function(R){return x(S).get(R)},
988
+ getSelectedHairMeshNames:function(){return Ad(We.h(function(R){return R.name},bf(function(R){var aa=J.h;R=UI(x(B),"meshes")[R.name];return aa.call(J,"hair",null==R?null:R.category)},NI(x(N)))))},buildClip:function(R,aa,ta){return SI.j(x(Aa),"buildClip",K([R,aa,ta]))},cleanupSnippet:function(R){return SI.j(x(Aa),"cleanupSnippet",K([R]))}}]));SI.j(a,"setCore",K([q]));P(Qa,a);da.onReady=function(R){P(W,R.model);return f(R.meshes)};da.bindModel=f;da.setProfile=function(R){SI(y,"clear");SI(H,"clearTransitions");
989
+ d();P(rb,[]);P(Jb,we);P(z,RI(R,r));P(B,r?JSON.parse(x(z)):JSON.parse(SI.j(q,"merge_embedded_preset",K([u,x(z)]))));return f(x(ea))};da.getProfile=function(){return x(B)};da.getProfileMode=function(){return p};da.getPresetId=function(){return r?null:u};da.supportsPreset=function(R){return TI(R)};da.setAU=function(R,aa,ta){SI.j(y,"set_au_signed",K([R,aa,"number"===typeof ta?ta:NaN]));return d()};da.getAU=function(R){return SI.j(y,"get_au",K([R]))};da.setContinuum=function(R,aa,ta,oa){SI.j(y,"set_continuum",
990
+ K([R,aa,ta,"number"===typeof oa?oa:NaN]));return d()};da.getContinuum=function(R,aa){return SI.j(y,"get_continuum",K([R,aa]))};da.transitionAU=function(R,aa,ta,oa){return SI.j(y,"transition_au",K([R,aa,t(ta)?ta:200,"number"===typeof oa?oa:NaN]))};da.transitionViseme=function(R,aa,ta,oa){return SI.j(y,"transition_viseme",K([R,aa,t(ta)?ta:80,t(oa)?oa:1]))};da.setViseme=function(R,aa,ta){SI.j(y,"set_viseme",K([R,aa]));SI.j(y,"set_viseme_jaw_scale",K([R,t(ta)?ta:1]));x(rb)[R]=aa;return d()};da.setVisemeById=
991
+ function(R,aa,ta){R=SI.j(y,"viseme_slot_index",K([R]));return 0<=R?SI.j(da,"setViseme",K([R,aa,t(ta)?ta:1])):null};da.transitionVisemeById=function(R,aa,ta,oa){R=SI.j(y,"viseme_slot_index",K([R]));return 0<=R?SI.j(da,"transitionViseme",K([R,aa,t(ta)?ta:80,t(oa)?oa:1])):null};da.setAUMixWeight=function(R,aa){Z.o(Jb,U,R,aa);SI.j(y,"set_au_mix_weight",K([R,aa]));return d()};da.getAUMixWeight=h;da.hasLeftRightBones=function(R){R=UI(x(B),"auToBones")[w.g(R)];R=Yg(We.h(function(aa){return aa.side},NI(R)));
992
+ return wd(R,"left")&&wd(R,"right")};da.setMorph=function(){function R(ta,oa){return b(ta,oa,null)}var aa=null;aa=function(ta,oa,Ka){switch(arguments.length){case 2:return R.call(this,ta,oa);case 3:return b(ta,oa,Ka)}throw Error("Invalid arity: "+arguments.length);};aa.h=R;aa.i=function(ta,oa,Ka){return b(ta,oa,Ka)};return aa}();da.setMorphOnMeshes=function(R,aa,ta){return b(aa,ta,R)};da.transitionMorph=function(){function R(oa,Ka,ib){return n(oa,Ka,ib,null)}function aa(oa,Ka){return n(oa,Ka,120,null)}
993
+ var ta=null;ta=function(oa,Ka,ib,kb){switch(arguments.length){case 2:return aa.call(this,oa,Ka);case 3:return R.call(this,oa,Ka,ib);case 4:return n(oa,Ka,ib,kb)}throw Error("Invalid arity: "+arguments.length);};ta.h=aa;ta.i=R;ta.o=function(oa,Ka,ib,kb){return n(oa,Ka,ib,kb)};return ta}();da.getMorphTargets=function(){for(var R={},aa=C(NI(x(ea))),ta=null,oa=0,Ka=0;;)if(Ka<oa){var ib=ta.B(null,Ka),kb=ib.morphTargetDictionary;t(kb)&&(R[ib.name]=Object.keys(kb).sort());Ka+=1}else if(aa=C(aa))rd(aa)?(oa=
994
+ Yb(aa),aa=Zb(aa),ta=oa,oa=G(oa)):(ta=D(aa),oa=ta.morphTargetDictionary,t(oa)&&(R[ta.name]=Object.keys(oa).sort()),aa=F(aa),ta=null,oa=0),Ka=0;else break;return R};da.getMorphTargetIndices=function(){for(var R={},aa=C(NI(x(ea))),ta=null,oa=0,Ka=0;;)if(Ka<oa){var ib=ta.B(null,Ka),kb=ib.morphTargetDictionary;if(t(kb)){var hb=kb,be=Object.entries(hb).map(function(){return function(ig){return{name:ig[0],index:ig[1]}}}(aa,ta,oa,Ka,hb,kb,ib,R,k,q,p,r,u,null,z,B,I,y,v,A,H,W,ea,N,S,pa,Ha,Aa,Qa,rb,Jb,Ib,M,
995
+ E,da));be.sort(function(){return function(ig,nn){return ig.index-nn.index}}(aa,ta,oa,Ka,be,hb,kb,ib,R,k,q,p,r,u,null,z,B,I,y,v,A,H,W,ea,N,S,pa,Ha,Aa,Qa,rb,Jb,Ib,M,E,da));R[ib.name]=be}Ka+=1}else if(kb=C(aa)){ib=kb;if(rd(ib))aa=Yb(ib),Ka=Zb(ib),ta=aa,oa=G(aa),aa=Ka;else{hb=D(ib);be=hb.morphTargetDictionary;if(t(be)){var Sg=be,cf=Object.entries(Sg).map(function(){return function(ig){return{name:ig[0],index:ig[1]}}}(aa,ta,oa,Ka,Sg,be,hb,ib,kb,R,k,q,p,r,u,null,z,B,I,y,v,A,H,W,ea,N,S,pa,Ha,Aa,Qa,rb,Jb,
996
+ Ib,M,E,da));cf.sort(function(){return function(ig,nn){return ig.index-nn.index}}(aa,ta,oa,Ka,cf,Sg,be,hb,ib,kb,R,k,q,p,r,u,null,z,B,I,y,v,A,H,W,ea,N,S,pa,Ha,Aa,Qa,rb,Jb,Ib,M,E,da));R[hb.name]=cf}aa=F(ib);ta=null;oa=0}Ka=0}else break;return R};da.getHairMorphTargets=function(){function R(oa){return SI.j(x(Qa),"getHairMorphTargets",K([oa]))}function aa(){return SI(x(Qa),"getHairMorphTargets")}var ta=null;ta=function(oa){switch(arguments.length){case 0:return aa.call(this);case 1:return R.call(this,
997
+ oa)}throw Error("Invalid arity: "+arguments.length);};ta.l=aa;ta.g=R;return ta}();da.getMeshList=function(){return x(N).map(function(R){var aa=R.name,ta=UI(x(B),"meshes")[aa];return{name:aa,visible:R.visible,morphCount:function(){var oa=R.morphTargetInfluences;return t(oa)?oa:[]}().length,category:function(){var oa=t(ta)?ta.category:null;return t(oa)?oa:"other"}()}})};da.getBones=function(){return x(pa)};da.setMeshVisible=function(R,aa){return t(x(W))?SI.j(A,"setMeshVisible",K([x(W),R,aa])):null};
998
+ da.highlightMesh=function(){function R(Ka,ib,kb){return t(x(W))?SI.j(A,"highlightMesh",K([x(W),Ka,ib,kb])):null}function aa(Ka,ib){return t(x(W))?SI.j(A,"highlightMesh",K([x(W),Ka,ib])):null}function ta(Ka){return t(x(W))?SI.j(A,"highlightMesh",K([x(W),Ka])):null}var oa=null;oa=function(Ka,ib,kb){switch(arguments.length){case 1:return ta.call(this,Ka);case 2:return aa.call(this,Ka,ib);case 3:return R.call(this,Ka,ib,kb)}throw Error("Invalid arity: "+arguments.length);};oa.g=ta;oa.h=aa;oa.i=R;return oa}();
999
+ da.getMeshMaterialConfig=function(R){return t(x(W))?SI.j(A,"getMeshMaterialConfig",K([x(W),R])):null};da.setMeshMaterialConfig=function(R,aa){return t(x(W))?SI.j(A,"setMeshMaterialConfig",K([x(W),R,aa])):null};a=C(new Q(null,16,5,T,"registerHairObjects getRegisteredHairObjects getHairAppearance setHairColor setEyebrowColor setHairBaseColor setEyebrowBaseColor setHairGlow setEyebrowGlow setHairOutline setHairPhysicsEnabled isHairPhysicsEnabled setHairPhysicsConfig getHairPhysicsConfig validateHairMorphTargets applyHairStateToObject".split(" "),
1000
+ null));for(var Wa=null,cb=0,Ua=0;;)if(Ua<cb){var ec=Wa.B(null,Ua);da[ec]=function(R,aa,ta,oa,Ka,ib,kb,hb,be,Sg,cf,ig,nn,vK,wK,xK,yK,zK,AK,BK,CK,DK,EK,FK,GK,EA){return function(){function on(jg){var kg=null;if(0<arguments.length){kg=0;for(var Tg=Array(arguments.length-0);kg<Tg.length;)Tg[kg]=arguments[kg+0],++kg;kg=new vc(Tg,0,null)}return pn.call(this,kg)}function pn(jg){return qe(SI,x(EA),Ka,jg)}on.C=0;on.G=function(jg){jg=C(jg);return pn(jg)};on.j=pn;return on}()}(a,Wa,cb,Ua,ec,k,q,p,r,u,null,z,
1001
+ B,I,y,v,A,H,W,ea,N,S,pa,Ha,Aa,Qa,rb,Jb,Ib,M,E,da);Ua+=1}else{var Vb=C(a);if(Vb){ec=Vb;if(rd(ec))a=Yb(ec),Ua=Zb(ec),Wa=a,cb=G(a),a=Ua;else{var sa=D(ec);da[sa]=function(R,aa,ta,oa,Ka,ib,kb,hb,be,Sg,cf,ig,nn,vK,wK,xK,yK,zK,AK,BK,CK,DK,EK,FK,GK,EA,on,pn){return function(){function jg(Tg){var Aj=null;if(0<arguments.length){Aj=0;for(var st=Array(arguments.length-0);Aj<st.length;)st[Aj]=arguments[Aj+0],++Aj;Aj=new vc(st,0,null)}return kg.call(this,Aj)}function kg(Tg){return qe(SI,x(pn),Ka,Tg)}jg.C=0;jg.G=
1002
+ function(Tg){Tg=C(Tg);return kg(Tg)};jg.j=kg;return jg}()}(a,Wa,cb,Ua,sa,ec,Vb,k,q,p,r,u,null,z,B,I,y,v,A,H,W,ea,N,S,pa,Ha,Aa,Qa,rb,Jb,Ib,M,E,da);a=F(ec);Wa=null;cb=0}Ua=0}else break}da.updateHairPhysics=function(R){return SI.j(x(Qa),"update",K([R]))};da.update=c;da.start=function(){if(t(x(Ib)))return null;P(Ib,!0);P(E,null);return La()};da.stop=e;da.clear=function(){SI(y,"clear");SI(H,"clearTransitions");return d()};da.resetToNeutral=da.clear;da.dispose=function(){e();t(x(Aa))&&SI(x(Aa),"dispose");
1003
+ t(x(Qa))&&SI(x(Qa),"clearRegisteredHairObjects");var R=y.free;t(R)&&R.call(y);P(W,null);P(ea,[]);P(N,[]);P(S,new Map);return P(pa,{})};a=C(oK);Wa=null;for(Ua=cb=0;;)if(Ua<cb)ec=Wa.B(null,Ua),ZI(da,Aa,ec),Ua+=1;else if(a=C(a))Wa=a,rd(Wa)?(a=Yb(Wa),Ua=Zb(Wa),Wa=a,cb=G(a),a=Ua):(a=D(Wa),ZI(da,Aa,a),a=F(Wa),Wa=null,cb=0),Ua=0;else break;return da};pK.C=1;
1004
+ var qK=function qK(a){switch(arguments.length){case 1:return qK.g(arguments[0]);case 2:return qK.h(arguments[0],arguments[1]);default:throw Error(["Invalid arity: ",w.g(arguments.length)].join(""));}};qK.g=function(a){return qK.h(a,{})};qK.h=function(a,b){return II().then(function(){var c=pK.g(b);SI.j(c,"onReady",K([{model:a,meshes:b.meshes}]));return c})};qK.C=2;var rK=esm_import$$lovelace_lol$embody.Embody,sK,tK=esm_import$$lovelace_lol$embody.BLENDING_MODES;sK=t(tK)?tK:esm_import$$lovelace_lol$embody.THREE_BLENDING_MODES;
1005
1005
  var uK=esm_import$$lovelace_lol$embody.THREE_BLENDING_MODES,HK=esm_import$$lovelace_lol$embody.collectMorphMeshes,IK=esm_import$$lovelace_lol$embody.analyzeModel,JK=esm_import$$lovelace_lol$embody.extractModelData,KK=esm_import$$lovelace_lol$embody.getPreset,LK=esm_import$$lovelace_lol$embody.validateMappings,MK=esm_import$$lovelace_lol$embody.extendCharacterConfigWithPreset,NK=esm_import$$lovelace_lol$embody.extractProfileOverrides,OK=esm_import$$lovelace_lol$embody.mergeCharacterRegionsByName,PK=
1006
1006
  esm_import$$lovelace_lol$embody.applyAUBoneBindingUpdate,QK=esm_import$$lovelace_lol$embody.applyBilateralAxisBindingUpdate,RK=esm_import$$lovelace_lol$embody.applyBoneAxisBindingUpdate,SK=esm_import$$lovelace_lol$embody.buildBoneAuOptions,TK=esm_import$$lovelace_lol$embody.classifyAuAsJointControl,UK=esm_import$$lovelace_lol$embody.createBilateralBoneAxisAu,VK=esm_import$$lovelace_lol$embody.createBoneAxisAu,WK=esm_import$$lovelace_lol$embody.DEFAULT_AXIS_TO_CHANNEL,XK=esm_import$$lovelace_lol$embody.DEFAULT_BONE_MAX_DEGREES,
1007
1007
  YK=esm_import$$lovelace_lol$embody.ensureBilateralBoneNodeKeys,ZK=esm_import$$lovelace_lol$embody.ensureBoneNodeKey,$K=esm_import$$lovelace_lol$embody.findNodeKeyForBone,aL=esm_import$$lovelace_lol$embody.formatAxisDirectionLabel,bL=esm_import$$lovelace_lol$embody.formatAxisLabel,cL=esm_import$$lovelace_lol$embody.getAUBoneBindingState,dL=esm_import$$lovelace_lol$embody.getAxisFromChannel,eL=esm_import$$lovelace_lol$embody.getBilateralAxisBindingState,fL=esm_import$$lovelace_lol$embody.getBoneAxisBindingState,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lovelace_lol/polymer",
3
- "version": "0.0.1",
3
+ "version": "0.0.3",
4
4
  "description": "Pure ClojureScript character agencies for Character Loom.",
5
5
  "license": "UNLICENSED",
6
6
  "private": false,
@@ -40,8 +40,8 @@
40
40
  (defn- normalize-preset-id
41
41
  [preset-id]
42
42
  (let [normalized (when (string? preset-id) (.toLowerCase (.trim preset-id)))]
43
- (case normalized
44
- (nil "" "default" "human") "cc4"
43
+ (if (or (nil? normalized) (= "" normalized))
44
+ "cc4"
45
45
  normalized)))
46
46
 
47
47
  (defn- normalize-profile-mode
@@ -49,18 +49,18 @@
49
49
  (let [normalized (when (string? profile-mode)
50
50
  (.toLowerCase (.trim profile-mode)))]
51
51
  (case normalized
52
- (nil "" "preset" "embedded-preset") "embedded-preset"
53
- ("exact" "exact-profile") "exact-profile"
52
+ (nil "" "preset" "embedded-preset") "preset"
53
+ ("profile" "resolved-profile" "exact" "exact-profile") "profile"
54
54
  (throw (js/Error.
55
55
  (str "Unknown Rust Embody profileMode \"" profile-mode
56
- "\". Expected \"embedded-preset\" or \"exact-profile\"."))))))
56
+ "\". Expected \"preset\" or \"profile\"."))))))
57
57
 
58
58
  (defn- profile-json
59
59
  [profile required?]
60
60
  (cond
61
61
  (nil? profile)
62
62
  (if required?
63
- (throw (js/Error. "Rust Embody exact-profile mode requires a profile object."))
63
+ (throw (js/Error. "Rust Embody profile mode requires a resolved profile object."))
64
64
  "")
65
65
 
66
66
  (or (array? profile) (not= "object" (goog/typeOf profile)))
@@ -176,16 +176,17 @@
176
176
  (let [config (or config #js {})
177
177
  wasm (embody-wasm/get-core)
178
178
  profile-mode (normalize-profile-mode (aget config "profileMode"))
179
- exact-profile? (= profile-mode "exact-profile")
180
- preset-id (normalize-preset-id (aget config "presetType"))
181
- _ (when (and (not exact-profile?)
179
+ resolved-profile? (= profile-mode "profile")
180
+ preset-id (normalize-preset-id
181
+ (or (aget config "presetId") (aget config "presetType")))
182
+ _ (when (and (not resolved-profile?)
182
183
  (not (js-call wasm "has_preset" preset-id)))
183
184
  (throw (js/Error.
184
185
  (str "Rust Embody preset \"" preset-id
185
186
  "\" is not embedded. Known presets: "
186
187
  (.join (js-call wasm "list_presets") ", ") "."))))
187
- profile-source-json (atom (profile-json (aget config "profile") exact-profile?))
188
- profile (atom (if exact-profile?
188
+ profile-source-json (atom (profile-json (aget config "profile") resolved-profile?))
189
+ profile (atom (if resolved-profile?
189
190
  (.parse js/JSON @profile-source-json)
190
191
  (.parse js/JSON
191
192
  (js-call wasm
@@ -251,9 +252,9 @@
251
252
  "setHairPhysicsProfileConfig"
252
253
  (aget @profile "hairPhysics")))
253
254
  (let [descriptor-json (.stringify js/JSON (aget result "descriptor"))]
254
- (if exact-profile?
255
+ (if resolved-profile?
255
256
  (js-call core
256
- "configure_exact_profile"
257
+ "configure_with_profile"
257
258
  @profile-source-json
258
259
  descriptor-json)
259
260
  (js-call core
@@ -269,9 +270,9 @@
269
270
  (apply-frame!)
270
271
  (reset! viseme-values #js [])
271
272
  (reset! mix-weights {})
272
- (reset! profile-source-json (profile-json next-profile exact-profile?))
273
+ (reset! profile-source-json (profile-json next-profile resolved-profile?))
273
274
  (reset! profile
274
- (if exact-profile?
275
+ (if resolved-profile?
275
276
  (.parse js/JSON @profile-source-json)
276
277
  (.parse js/JSON
277
278
  (js-call wasm
@@ -431,6 +432,7 @@
431
432
  (aset host "setProfile" set-profile!)
432
433
  (aset host "getProfile" (fn [] @profile))
433
434
  (aset host "getProfileMode" (fn [] profile-mode))
435
+ (aset host "getPresetId" (fn [] (when-not resolved-profile? preset-id)))
434
436
  (aset host "supportsPreset" (fn [id] (supports-preset? id)))
435
437
  (aset host "setAU"
436
438
  (fn [id value balance]