@lovelace_lol/loom3 1.0.28 → 1.0.30

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/dist/index.d.cts CHANGED
@@ -61,6 +61,16 @@ declare const CC4_BONE_NODES: {
61
61
  readonly NECK_TWIST: "NeckTwist02";
62
62
  readonly JAW: "JawRoot";
63
63
  readonly TONGUE: "Tongue01";
64
+ readonly SPINE_01: "Spine01";
65
+ readonly SPINE_02: "Spine02";
66
+ readonly CLAVICLE_L: "L_Clavicle";
67
+ readonly CLAVICLE_R: "R_Clavicle";
68
+ readonly HAND_L: "L_Hand";
69
+ readonly HAND_R: "R_Hand";
70
+ readonly FOOT_L: "L_Foot";
71
+ readonly FOOT_R: "R_Foot";
72
+ readonly TOEBASE_L: "L_ToeBase";
73
+ readonly TOEBASE_R: "R_ToeBase";
64
74
  };
65
75
  declare const CC4_EYE_MESH_NODES: {
66
76
  readonly LEFT: "CC_Base_Eye";
@@ -740,7 +750,6 @@ interface AnnotationRegion {
740
750
  parent?: string;
741
751
  children?: string[];
742
752
  expandAnimation?: 'outward' | 'staggered';
743
- showChildConnections?: boolean;
744
753
  style?: {
745
754
  markerColor?: number;
746
755
  markerRadius?: number;
@@ -1842,8 +1851,6 @@ interface Region {
1842
1851
  children?: string[];
1843
1852
  /** Animation style for expand/collapse. Default: 'outward' */
1844
1853
  expandAnimation?: ExpandAnimation;
1845
- /** Show connecting lines to children when expanded. Default: true */
1846
- showChildConnections?: boolean;
1847
1854
  /** Per-marker style overrides */
1848
1855
  style?: MarkerStyleOverrides;
1849
1856
  /** Marker group ID for fallback behavior */
@@ -1932,15 +1939,19 @@ declare function mergeRegionsByName(base?: Region[], override?: Region[]): Regio
1932
1939
  declare function extractProfileOverrides(config: CharacterConfig): Partial<Profile>;
1933
1940
  declare function applyCharacterProfileToPreset(config: CharacterConfig): Profile | null;
1934
1941
  /**
1935
- * Resolve a saved character config into the runtime shape DPthree and similar
1936
- * tools should consume.
1942
+ * Extend a saved character config with its selected preset so callers get one
1943
+ * canonical runtime object.
1937
1944
  *
1938
1945
  * Precedence:
1939
1946
  * 1. preset defaults
1940
1947
  * 2. flattened top-level profile overrides
1941
1948
  * 3. legacy nested `config.profile` overrides (compatibility only)
1942
1949
  * 4. top-level saved `config.regions` overrides by region name
1943
- * 5. top-level saved bone naming fields remain compatibility overrides
1950
+ */
1951
+ declare function extendCharacterConfigWithPreset(config: CharacterConfig): CharacterConfig;
1952
+ /**
1953
+ * Backward-compatible alias for older integrations. Prefer
1954
+ * `extendCharacterConfigWithPreset(...)` at new call sites.
1944
1955
  */
1945
1956
  declare function resolveCharacterConfig(config: CharacterConfig): CharacterConfig;
1946
1957
 
@@ -2382,4 +2393,4 @@ declare function detectFacingDirection(model: THREE.Object3D, eyeBoneNames?: {
2382
2393
  right: string[];
2383
2394
  }): 'forward' | 'backward' | 'unknown';
2384
2395
 
2385
- export { type AUInfo, type AUSelector, AU_INFO, AU_MAPPING_CONFIG, AU_MIX_DEFAULTS, AU_TO_MORPHS, type AnalyzeModelOptions, type Animation, type AnimationActionHandle, type AnimationAnalysis, type AnimationBlendMode, type AnimationClipInfo, type AnimationEasing, type AnimationInfo, type AnimationPlayOptions, type AnimationSource, type AnimationState, AnimationThree, BETTA_FISH_PRESET, BLENDING_MODES, BONE_AU_TO_BINDINGS, type BlendingMode, type BoneBinding, type BoneInfo, type BoneKey, CC4_BONE_NODES, CC4_BONE_PREFIX, CC4_EYE_MESH_NODES, CC4_MESHES, CC4_PRESET, CC4_SUFFIX_PATTERN, COMPOSITE_ROTATIONS, CONTINUUM_LABELS, CONTINUUM_PAIRS_MAP, type CharacterConfig, type CharacterRegistry, type ClipHandle, type ClipOptions, type CompositeRotation, type CompositeRotationState, type CurvePoint, type CurvesMap, DEFAULT_HAIR_PHYSICS_CONFIG, type ExpandAnimation, type ExpandedRegionState, FISH_AU_MAPPING_CONFIG, type FaceCenterResult, type FallbackConfig, type FindFaceCenterOptions, type Hair, type HairMorphAxis, type HairMorphOutput$1 as HairMorphOutput, type HairMorphTargetMapping, type HairMorphTargetValueMapping, type HairMorphTargetsConfig, type HairObjectRef, type HairObjectState, HairPhysics, type HairPhysicsConfig$1 as HairPhysicsConfig, type HairPhysicsDirectionConfig, type HairPhysics$1 as HairPhysicsInterface, type HairMorphOutput as HairPhysicsMorphOutput, type HairPhysicsProfileConfig, type HairPhysicsRuntimeConfig, type HairPhysicsRuntimeConfigUpdate, type HairPhysicsState, type HairState, type HairStrand, type HeadState$1 as HeadState, type LineConfig, type LineCurve, type LineStyle, Loom3, type Loom3Config, Loom3 as Loom3Three, type LoomLarge, type LoomLargeConfig, Loom3 as LoomLargeThree, MORPH_TO_MESH, type MappingConsistencyResult, type MappingCorrection, type MappingCorrectionOptions, type MappingCorrectionResult, type MappingIssue, type MarkerGroup, type MarkerStyle, type MarkerStyleOverrides, type MeshCategory, type MeshInfo, type MeshMaterialSettings, type MixerLoopMode, type ModelAnalysisReport, type ModelData, type ModelMeshInfo, type MorphCategory, type MorphInfo, type MorphTargetRef, type MorphTargetsBySide, type NamedDirection, type PresetType, type Profile, type ReadyPayload, type Region, type RotationAxis, type RotationsState, type Snippet, type TrackInfo, type TransitionHandle, VISEME_JAW_AMOUNTS, VISEME_KEYS, type ValidateMappingOptions, type ValidationResult, analyzeModel, applyCharacterProfileToPreset, applyProfileToPreset, collectMorphMeshes, detectFacingDirection, extractFromGLTF, extractModelData, extractProfileOverrides, findFaceCenter, fuzzyNameMatch, generateMappingCorrections, getModelForwardDirection, hasLeftRightMorphs, isMixedAU, isPresetCompatible, mergeRegionsByName as mergeCharacterRegionsByName, resolveBoneName, resolveBoneNames, resolveCharacterConfig, resolveFaceCenter, resolvePreset, resolvePresetWithOverrides, resolveProfile, suggestBestPreset, validateMappingConfig, validateMappings };
2396
+ export { type AUInfo, type AUSelector, AU_INFO, AU_MAPPING_CONFIG, AU_MIX_DEFAULTS, AU_TO_MORPHS, type AnalyzeModelOptions, type Animation, type AnimationActionHandle, type AnimationAnalysis, type AnimationBlendMode, type AnimationClipInfo, type AnimationEasing, type AnimationInfo, type AnimationPlayOptions, type AnimationSource, type AnimationState, AnimationThree, BETTA_FISH_PRESET, BLENDING_MODES, BONE_AU_TO_BINDINGS, type BlendingMode, type BoneBinding, type BoneInfo, type BoneKey, CC4_BONE_NODES, CC4_BONE_PREFIX, CC4_EYE_MESH_NODES, CC4_MESHES, CC4_PRESET, CC4_SUFFIX_PATTERN, COMPOSITE_ROTATIONS, CONTINUUM_LABELS, CONTINUUM_PAIRS_MAP, type CharacterConfig, type CharacterRegistry, type ClipHandle, type ClipOptions, type CompositeRotation, type CompositeRotationState, type CurvePoint, type CurvesMap, DEFAULT_HAIR_PHYSICS_CONFIG, type ExpandAnimation, type ExpandedRegionState, FISH_AU_MAPPING_CONFIG, type FaceCenterResult, type FallbackConfig, type FindFaceCenterOptions, type Hair, type HairMorphAxis, type HairMorphOutput$1 as HairMorphOutput, type HairMorphTargetMapping, type HairMorphTargetValueMapping, type HairMorphTargetsConfig, type HairObjectRef, type HairObjectState, HairPhysics, type HairPhysicsConfig$1 as HairPhysicsConfig, type HairPhysicsDirectionConfig, type HairPhysics$1 as HairPhysicsInterface, type HairMorphOutput as HairPhysicsMorphOutput, type HairPhysicsProfileConfig, type HairPhysicsRuntimeConfig, type HairPhysicsRuntimeConfigUpdate, type HairPhysicsState, type HairState, type HairStrand, type HeadState$1 as HeadState, type LineConfig, type LineCurve, type LineStyle, Loom3, type Loom3Config, Loom3 as Loom3Three, type LoomLarge, type LoomLargeConfig, Loom3 as LoomLargeThree, MORPH_TO_MESH, type MappingConsistencyResult, type MappingCorrection, type MappingCorrectionOptions, type MappingCorrectionResult, type MappingIssue, type MarkerGroup, type MarkerStyle, type MarkerStyleOverrides, type MeshCategory, type MeshInfo, type MeshMaterialSettings, type MixerLoopMode, type ModelAnalysisReport, type ModelData, type ModelMeshInfo, type MorphCategory, type MorphInfo, type MorphTargetRef, type MorphTargetsBySide, type NamedDirection, type PresetType, type Profile, type ReadyPayload, type Region, type RotationAxis, type RotationsState, type Snippet, type TrackInfo, type TransitionHandle, VISEME_JAW_AMOUNTS, VISEME_KEYS, type ValidateMappingOptions, type ValidationResult, analyzeModel, applyCharacterProfileToPreset, applyProfileToPreset, collectMorphMeshes, detectFacingDirection, extendCharacterConfigWithPreset, extractFromGLTF, extractModelData, extractProfileOverrides, findFaceCenter, fuzzyNameMatch, generateMappingCorrections, getModelForwardDirection, hasLeftRightMorphs, isMixedAU, isPresetCompatible, mergeRegionsByName as mergeCharacterRegionsByName, resolveBoneName, resolveBoneNames, resolveCharacterConfig, resolveFaceCenter, resolvePreset, resolvePresetWithOverrides, resolveProfile, suggestBestPreset, validateMappingConfig, validateMappings };
package/dist/index.d.ts CHANGED
@@ -61,6 +61,16 @@ declare const CC4_BONE_NODES: {
61
61
  readonly NECK_TWIST: "NeckTwist02";
62
62
  readonly JAW: "JawRoot";
63
63
  readonly TONGUE: "Tongue01";
64
+ readonly SPINE_01: "Spine01";
65
+ readonly SPINE_02: "Spine02";
66
+ readonly CLAVICLE_L: "L_Clavicle";
67
+ readonly CLAVICLE_R: "R_Clavicle";
68
+ readonly HAND_L: "L_Hand";
69
+ readonly HAND_R: "R_Hand";
70
+ readonly FOOT_L: "L_Foot";
71
+ readonly FOOT_R: "R_Foot";
72
+ readonly TOEBASE_L: "L_ToeBase";
73
+ readonly TOEBASE_R: "R_ToeBase";
64
74
  };
65
75
  declare const CC4_EYE_MESH_NODES: {
66
76
  readonly LEFT: "CC_Base_Eye";
@@ -740,7 +750,6 @@ interface AnnotationRegion {
740
750
  parent?: string;
741
751
  children?: string[];
742
752
  expandAnimation?: 'outward' | 'staggered';
743
- showChildConnections?: boolean;
744
753
  style?: {
745
754
  markerColor?: number;
746
755
  markerRadius?: number;
@@ -1842,8 +1851,6 @@ interface Region {
1842
1851
  children?: string[];
1843
1852
  /** Animation style for expand/collapse. Default: 'outward' */
1844
1853
  expandAnimation?: ExpandAnimation;
1845
- /** Show connecting lines to children when expanded. Default: true */
1846
- showChildConnections?: boolean;
1847
1854
  /** Per-marker style overrides */
1848
1855
  style?: MarkerStyleOverrides;
1849
1856
  /** Marker group ID for fallback behavior */
@@ -1932,15 +1939,19 @@ declare function mergeRegionsByName(base?: Region[], override?: Region[]): Regio
1932
1939
  declare function extractProfileOverrides(config: CharacterConfig): Partial<Profile>;
1933
1940
  declare function applyCharacterProfileToPreset(config: CharacterConfig): Profile | null;
1934
1941
  /**
1935
- * Resolve a saved character config into the runtime shape DPthree and similar
1936
- * tools should consume.
1942
+ * Extend a saved character config with its selected preset so callers get one
1943
+ * canonical runtime object.
1937
1944
  *
1938
1945
  * Precedence:
1939
1946
  * 1. preset defaults
1940
1947
  * 2. flattened top-level profile overrides
1941
1948
  * 3. legacy nested `config.profile` overrides (compatibility only)
1942
1949
  * 4. top-level saved `config.regions` overrides by region name
1943
- * 5. top-level saved bone naming fields remain compatibility overrides
1950
+ */
1951
+ declare function extendCharacterConfigWithPreset(config: CharacterConfig): CharacterConfig;
1952
+ /**
1953
+ * Backward-compatible alias for older integrations. Prefer
1954
+ * `extendCharacterConfigWithPreset(...)` at new call sites.
1944
1955
  */
1945
1956
  declare function resolveCharacterConfig(config: CharacterConfig): CharacterConfig;
1946
1957
 
@@ -2382,4 +2393,4 @@ declare function detectFacingDirection(model: THREE.Object3D, eyeBoneNames?: {
2382
2393
  right: string[];
2383
2394
  }): 'forward' | 'backward' | 'unknown';
2384
2395
 
2385
- export { type AUInfo, type AUSelector, AU_INFO, AU_MAPPING_CONFIG, AU_MIX_DEFAULTS, AU_TO_MORPHS, type AnalyzeModelOptions, type Animation, type AnimationActionHandle, type AnimationAnalysis, type AnimationBlendMode, type AnimationClipInfo, type AnimationEasing, type AnimationInfo, type AnimationPlayOptions, type AnimationSource, type AnimationState, AnimationThree, BETTA_FISH_PRESET, BLENDING_MODES, BONE_AU_TO_BINDINGS, type BlendingMode, type BoneBinding, type BoneInfo, type BoneKey, CC4_BONE_NODES, CC4_BONE_PREFIX, CC4_EYE_MESH_NODES, CC4_MESHES, CC4_PRESET, CC4_SUFFIX_PATTERN, COMPOSITE_ROTATIONS, CONTINUUM_LABELS, CONTINUUM_PAIRS_MAP, type CharacterConfig, type CharacterRegistry, type ClipHandle, type ClipOptions, type CompositeRotation, type CompositeRotationState, type CurvePoint, type CurvesMap, DEFAULT_HAIR_PHYSICS_CONFIG, type ExpandAnimation, type ExpandedRegionState, FISH_AU_MAPPING_CONFIG, type FaceCenterResult, type FallbackConfig, type FindFaceCenterOptions, type Hair, type HairMorphAxis, type HairMorphOutput$1 as HairMorphOutput, type HairMorphTargetMapping, type HairMorphTargetValueMapping, type HairMorphTargetsConfig, type HairObjectRef, type HairObjectState, HairPhysics, type HairPhysicsConfig$1 as HairPhysicsConfig, type HairPhysicsDirectionConfig, type HairPhysics$1 as HairPhysicsInterface, type HairMorphOutput as HairPhysicsMorphOutput, type HairPhysicsProfileConfig, type HairPhysicsRuntimeConfig, type HairPhysicsRuntimeConfigUpdate, type HairPhysicsState, type HairState, type HairStrand, type HeadState$1 as HeadState, type LineConfig, type LineCurve, type LineStyle, Loom3, type Loom3Config, Loom3 as Loom3Three, type LoomLarge, type LoomLargeConfig, Loom3 as LoomLargeThree, MORPH_TO_MESH, type MappingConsistencyResult, type MappingCorrection, type MappingCorrectionOptions, type MappingCorrectionResult, type MappingIssue, type MarkerGroup, type MarkerStyle, type MarkerStyleOverrides, type MeshCategory, type MeshInfo, type MeshMaterialSettings, type MixerLoopMode, type ModelAnalysisReport, type ModelData, type ModelMeshInfo, type MorphCategory, type MorphInfo, type MorphTargetRef, type MorphTargetsBySide, type NamedDirection, type PresetType, type Profile, type ReadyPayload, type Region, type RotationAxis, type RotationsState, type Snippet, type TrackInfo, type TransitionHandle, VISEME_JAW_AMOUNTS, VISEME_KEYS, type ValidateMappingOptions, type ValidationResult, analyzeModel, applyCharacterProfileToPreset, applyProfileToPreset, collectMorphMeshes, detectFacingDirection, extractFromGLTF, extractModelData, extractProfileOverrides, findFaceCenter, fuzzyNameMatch, generateMappingCorrections, getModelForwardDirection, hasLeftRightMorphs, isMixedAU, isPresetCompatible, mergeRegionsByName as mergeCharacterRegionsByName, resolveBoneName, resolveBoneNames, resolveCharacterConfig, resolveFaceCenter, resolvePreset, resolvePresetWithOverrides, resolveProfile, suggestBestPreset, validateMappingConfig, validateMappings };
2396
+ export { type AUInfo, type AUSelector, AU_INFO, AU_MAPPING_CONFIG, AU_MIX_DEFAULTS, AU_TO_MORPHS, type AnalyzeModelOptions, type Animation, type AnimationActionHandle, type AnimationAnalysis, type AnimationBlendMode, type AnimationClipInfo, type AnimationEasing, type AnimationInfo, type AnimationPlayOptions, type AnimationSource, type AnimationState, AnimationThree, BETTA_FISH_PRESET, BLENDING_MODES, BONE_AU_TO_BINDINGS, type BlendingMode, type BoneBinding, type BoneInfo, type BoneKey, CC4_BONE_NODES, CC4_BONE_PREFIX, CC4_EYE_MESH_NODES, CC4_MESHES, CC4_PRESET, CC4_SUFFIX_PATTERN, COMPOSITE_ROTATIONS, CONTINUUM_LABELS, CONTINUUM_PAIRS_MAP, type CharacterConfig, type CharacterRegistry, type ClipHandle, type ClipOptions, type CompositeRotation, type CompositeRotationState, type CurvePoint, type CurvesMap, DEFAULT_HAIR_PHYSICS_CONFIG, type ExpandAnimation, type ExpandedRegionState, FISH_AU_MAPPING_CONFIG, type FaceCenterResult, type FallbackConfig, type FindFaceCenterOptions, type Hair, type HairMorphAxis, type HairMorphOutput$1 as HairMorphOutput, type HairMorphTargetMapping, type HairMorphTargetValueMapping, type HairMorphTargetsConfig, type HairObjectRef, type HairObjectState, HairPhysics, type HairPhysicsConfig$1 as HairPhysicsConfig, type HairPhysicsDirectionConfig, type HairPhysics$1 as HairPhysicsInterface, type HairMorphOutput as HairPhysicsMorphOutput, type HairPhysicsProfileConfig, type HairPhysicsRuntimeConfig, type HairPhysicsRuntimeConfigUpdate, type HairPhysicsState, type HairState, type HairStrand, type HeadState$1 as HeadState, type LineConfig, type LineCurve, type LineStyle, Loom3, type Loom3Config, Loom3 as Loom3Three, type LoomLarge, type LoomLargeConfig, Loom3 as LoomLargeThree, MORPH_TO_MESH, type MappingConsistencyResult, type MappingCorrection, type MappingCorrectionOptions, type MappingCorrectionResult, type MappingIssue, type MarkerGroup, type MarkerStyle, type MarkerStyleOverrides, type MeshCategory, type MeshInfo, type MeshMaterialSettings, type MixerLoopMode, type ModelAnalysisReport, type ModelData, type ModelMeshInfo, type MorphCategory, type MorphInfo, type MorphTargetRef, type MorphTargetsBySide, type NamedDirection, type PresetType, type Profile, type ReadyPayload, type Region, type RotationAxis, type RotationsState, type Snippet, type TrackInfo, type TransitionHandle, VISEME_JAW_AMOUNTS, VISEME_KEYS, type ValidateMappingOptions, type ValidationResult, analyzeModel, applyCharacterProfileToPreset, applyProfileToPreset, collectMorphMeshes, detectFacingDirection, extendCharacterConfigWithPreset, extractFromGLTF, extractModelData, extractProfileOverrides, findFaceCenter, fuzzyNameMatch, generateMappingCorrections, getModelForwardDirection, hasLeftRightMorphs, isMixedAU, isPresetCompatible, mergeRegionsByName as mergeCharacterRegionsByName, resolveBoneName, resolveBoneNames, resolveCharacterConfig, resolveFaceCenter, resolvePreset, resolvePresetWithOverrides, resolveProfile, suggestBestPreset, validateMappingConfig, validateMappings };
package/dist/index.js CHANGED
@@ -1866,7 +1866,17 @@ var CC4_BONE_NODES = {
1866
1866
  NECK: "NeckTwist01",
1867
1867
  NECK_TWIST: "NeckTwist02",
1868
1868
  JAW: "JawRoot",
1869
- TONGUE: "Tongue01"
1869
+ TONGUE: "Tongue01",
1870
+ SPINE_01: "Spine01",
1871
+ SPINE_02: "Spine02",
1872
+ CLAVICLE_L: "L_Clavicle",
1873
+ CLAVICLE_R: "R_Clavicle",
1874
+ HAND_L: "L_Hand",
1875
+ HAND_R: "R_Hand",
1876
+ FOOT_L: "L_Foot",
1877
+ FOOT_R: "R_Foot",
1878
+ TOEBASE_L: "L_ToeBase",
1879
+ TOEBASE_R: "R_ToeBase"
1870
1880
  };
1871
1881
  var CC4_EYE_MESH_NODES = {
1872
1882
  LEFT: "CC_Base_Eye",
@@ -2104,74 +2114,73 @@ var CC4_PRESET = {
2104
2114
  },
2105
2115
  {
2106
2116
  name: "head",
2107
- bones: ["CC_Base_Head", "CC_Base_JawRoot"],
2117
+ bones: ["HEAD", "JAW"],
2108
2118
  paddingFactor: 1.5,
2109
2119
  children: ["face", "left_eye", "right_eye", "mouth"],
2110
- expandAnimation: "staggered",
2111
- showChildConnections: true
2120
+ expandAnimation: "staggered"
2112
2121
  },
2113
2122
  {
2114
2123
  name: "face",
2115
- bones: ["CC_Base_Head"],
2124
+ bones: ["HEAD"],
2116
2125
  // meshes: populated by user selection in wizard - varies per character
2117
2126
  paddingFactor: 1.3,
2118
2127
  parent: "head"
2119
2128
  },
2120
2129
  {
2121
2130
  name: "left_eye",
2122
- bones: ["CC_Base_L_Eye"],
2131
+ bones: ["EYE_L"],
2123
2132
  paddingFactor: 0.9,
2124
2133
  parent: "head"
2125
2134
  },
2126
2135
  {
2127
2136
  name: "right_eye",
2128
- bones: ["CC_Base_R_Eye"],
2137
+ bones: ["EYE_R"],
2129
2138
  paddingFactor: 0.9,
2130
2139
  parent: "head"
2131
2140
  },
2132
2141
  {
2133
2142
  name: "mouth",
2134
- bones: ["CC_Base_JawRoot"],
2143
+ bones: ["JAW"],
2135
2144
  paddingFactor: 1.5,
2136
2145
  parent: "head"
2137
2146
  },
2138
2147
  {
2139
2148
  name: "upper_body",
2140
2149
  bones: [
2141
- "CC_Base_Spine02",
2142
- "CC_Base_Head",
2143
- "CC_Base_L_Clavicle",
2144
- "CC_Base_R_Clavicle"
2150
+ "SPINE_02",
2151
+ "HEAD",
2152
+ "CLAVICLE_L",
2153
+ "CLAVICLE_R"
2145
2154
  ],
2146
2155
  paddingFactor: 1.6
2147
2156
  },
2148
2157
  {
2149
2158
  name: "back",
2150
- bones: ["CC_Base_Spine01", "CC_Base_Spine02"],
2159
+ bones: ["SPINE_01", "SPINE_02"],
2151
2160
  paddingFactor: 1.8,
2152
2161
  cameraAngle: 180
2153
2162
  },
2154
2163
  {
2155
2164
  name: "left_hand",
2156
- bones: ["CC_Base_L_Hand"],
2165
+ bones: ["HAND_L"],
2157
2166
  paddingFactor: 1.3,
2158
2167
  cameraAngle: 270
2159
2168
  },
2160
2169
  {
2161
2170
  name: "right_hand",
2162
- bones: ["CC_Base_R_Hand"],
2171
+ bones: ["HAND_R"],
2163
2172
  paddingFactor: 1.3,
2164
2173
  cameraAngle: 90
2165
2174
  },
2166
2175
  {
2167
2176
  name: "left_foot",
2168
- bones: ["CC_Base_L_Foot", "CC_Base_L_ToeBase"],
2177
+ bones: ["FOOT_L", "TOEBASE_L"],
2169
2178
  paddingFactor: 2.5,
2170
2179
  cameraAngle: 270
2171
2180
  },
2172
2181
  {
2173
2182
  name: "right_foot",
2174
- bones: ["CC_Base_R_Foot", "CC_Base_R_ToeBase"],
2183
+ bones: ["FOOT_R", "TOEBASE_R"],
2175
2184
  paddingFactor: 2.5,
2176
2185
  cameraAngle: 90
2177
2186
  }
@@ -5426,13 +5435,6 @@ function mergeRegion(base, override) {
5426
5435
  } : void 0
5427
5436
  };
5428
5437
  }
5429
- function mergeStringRecord(base, override) {
5430
- if (!base && !override) return void 0;
5431
- return {
5432
- ...base ? { ...base } : {},
5433
- ...override ? { ...override } : {}
5434
- };
5435
- }
5436
5438
  function mergeRegionsByName(base, override) {
5437
5439
  if (!base && !override) return void 0;
5438
5440
  const merged = /* @__PURE__ */ new Map();
@@ -5498,7 +5500,7 @@ function orderResolvedRegions(resolvedRegions, prioritizedLists) {
5498
5500
  }
5499
5501
  return orderedNames.map((name) => resolvedByName.get(name)).filter((region) => Boolean(region));
5500
5502
  }
5501
- function resolveCharacterConfig(config) {
5503
+ function extendCharacterConfigWithPreset(config) {
5502
5504
  const presetType = config.auPresetType;
5503
5505
  if (!presetType || presetType === "custom") {
5504
5506
  return config;
@@ -5516,13 +5518,13 @@ function resolveCharacterConfig(config) {
5516
5518
  );
5517
5519
  return {
5518
5520
  ...config,
5519
- bonePrefix: config.bonePrefix ?? presetResolvedProfile.bonePrefix,
5520
- boneSuffix: config.boneSuffix ?? presetResolvedProfile.boneSuffix,
5521
- boneNodes: mergeStringRecord(presetResolvedProfile.boneNodes, config.boneNodes),
5522
- suffixPattern: config.suffixPattern ?? presetResolvedProfile.suffixPattern,
5521
+ ...presetResolvedProfile,
5523
5522
  regions: resolvedRegions ?? config.regions
5524
5523
  };
5525
5524
  }
5525
+ function resolveCharacterConfig(config) {
5526
+ return extendCharacterConfigWithPreset(config);
5527
+ }
5526
5528
  var DEFAULT_HEAD_BONE_NAMES = ["CC_Base_Head", "Head", "head", "Bip01_Head"];
5527
5529
  var DEFAULT_REFERENCE_HEIGHT = 1.8;
5528
5530
  var DEFAULT_FORWARD_OFFSET = 0.08;
@@ -5710,23 +5712,32 @@ function detectFacingDirection(model, eyeBoneNames = {
5710
5712
  function normalizeLooseName(value) {
5711
5713
  return value.replace(/\./g, "");
5712
5714
  }
5713
- function resolveBoneName(semanticName, config) {
5714
- if (!config) return semanticName;
5715
+ function resolveBoneNameCandidates(semanticName, config) {
5716
+ if (!config) return [semanticName];
5715
5717
  const { bonePrefix, boneSuffix, boneNodes } = config;
5716
5718
  if (!boneNodes || !boneNodes[semanticName]) {
5717
- return semanticName;
5719
+ return [semanticName];
5718
5720
  }
5719
5721
  const baseName = boneNodes[semanticName];
5720
- if (baseName.includes("_") || baseName.includes(".")) {
5721
- return baseName;
5722
- }
5723
5722
  const prefix = bonePrefix || "";
5724
5723
  const suffix = boneSuffix || "";
5725
- return prefix + baseName + suffix;
5724
+ if (!prefix && !suffix) {
5725
+ return [baseName];
5726
+ }
5727
+ const prefixedBase = prefix && baseName.startsWith(prefix) ? baseName : prefix + baseName;
5728
+ const fullyAffixed = suffix && !prefixedBase.endsWith(suffix) ? `${prefixedBase}${suffix}` : prefixedBase;
5729
+ return Array.from(/* @__PURE__ */ new Set([fullyAffixed, baseName]));
5730
+ }
5731
+ function resolveBoneName(semanticName, config) {
5732
+ return resolveBoneNameCandidates(semanticName, config)[0] ?? semanticName;
5726
5733
  }
5727
5734
  function resolveBoneNames(names, config) {
5728
5735
  if (!names || names.length === 0) return [];
5729
- return names.map((name) => resolveBoneName(name, config));
5736
+ return Array.from(
5737
+ new Set(
5738
+ names.flatMap((name) => resolveBoneNameCandidates(name, config))
5739
+ )
5740
+ );
5730
5741
  }
5731
5742
  function fuzzyNameMatch(objectName, targetName, suffixPattern) {
5732
5743
  if (objectName === targetName) return true;
@@ -6832,6 +6843,6 @@ async function analyzeModel(options) {
6832
6843
  };
6833
6844
  }
6834
6845
 
6835
- export { AU_INFO, AU_MAPPING_CONFIG, AU_MIX_DEFAULTS, AU_TO_MORPHS, AnimationThree, BETTA_FISH_PRESET, BLENDING_MODES, BONE_AU_TO_BINDINGS, CC4_BONE_NODES, CC4_BONE_PREFIX, CC4_EYE_MESH_NODES, CC4_MESHES, CC4_PRESET, CC4_SUFFIX_PATTERN, COMPOSITE_ROTATIONS, CONTINUUM_LABELS, CONTINUUM_PAIRS_MAP, DEFAULT_HAIR_PHYSICS_CONFIG, FISH_AU_MAPPING_CONFIG, HairPhysics, Loom3, Loom3 as Loom3Three, Loom3 as LoomLargeThree, MORPH_TO_MESH, VISEME_JAW_AMOUNTS, VISEME_KEYS, analyzeModel, applyCharacterProfileToPreset, applyProfileToPreset, collectMorphMeshes, detectFacingDirection, extractFromGLTF, extractModelData, extractProfileOverrides, findFaceCenter, fuzzyNameMatch, generateMappingCorrections, getModelForwardDirection, hasLeftRightMorphs, isMixedAU, isPresetCompatible, mergeRegionsByName as mergeCharacterRegionsByName, resolveBoneName, resolveBoneNames, resolveCharacterConfig, resolveFaceCenter, resolvePreset, resolvePresetWithOverrides, resolveProfile, suggestBestPreset, validateMappingConfig, validateMappings };
6846
+ export { AU_INFO, AU_MAPPING_CONFIG, AU_MIX_DEFAULTS, AU_TO_MORPHS, AnimationThree, BETTA_FISH_PRESET, BLENDING_MODES, BONE_AU_TO_BINDINGS, CC4_BONE_NODES, CC4_BONE_PREFIX, CC4_EYE_MESH_NODES, CC4_MESHES, CC4_PRESET, CC4_SUFFIX_PATTERN, COMPOSITE_ROTATIONS, CONTINUUM_LABELS, CONTINUUM_PAIRS_MAP, DEFAULT_HAIR_PHYSICS_CONFIG, FISH_AU_MAPPING_CONFIG, HairPhysics, Loom3, Loom3 as Loom3Three, Loom3 as LoomLargeThree, MORPH_TO_MESH, VISEME_JAW_AMOUNTS, VISEME_KEYS, analyzeModel, applyCharacterProfileToPreset, applyProfileToPreset, collectMorphMeshes, detectFacingDirection, extendCharacterConfigWithPreset, extractFromGLTF, extractModelData, extractProfileOverrides, findFaceCenter, fuzzyNameMatch, generateMappingCorrections, getModelForwardDirection, hasLeftRightMorphs, isMixedAU, isPresetCompatible, mergeRegionsByName as mergeCharacterRegionsByName, resolveBoneName, resolveBoneNames, resolveCharacterConfig, resolveFaceCenter, resolvePreset, resolvePresetWithOverrides, resolveProfile, suggestBestPreset, validateMappingConfig, validateMappings };
6836
6847
  //# sourceMappingURL=index.js.map
6837
6848
  //# sourceMappingURL=index.js.map