@doki-land/live2d-core 0.0.17 → 0.0.19

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.ts CHANGED
@@ -37,51 +37,6 @@ interface SessionState {
37
37
  readonly generation: number;
38
38
  }
39
39
 
40
- /** Model binary family (file extension / settings shape). */
41
- type ModelFormat = "moc2" | "moc3";
42
- /** Normalized, format-agnostic model settings. */
43
- interface ModelSettings {
44
- format: ModelFormat;
45
- url: string;
46
- name?: string;
47
- moc: string;
48
- textures: string[];
49
- motionGroups: Record<string, MotionDefinition[]>;
50
- expressions: ExpressionDefinition[];
51
- physics?: string;
52
- pose?: string;
53
- hitAreas: HitAreaDefinition[];
54
- layout?: Record<string, number>;
55
- }
56
- interface MotionDefinition {
57
- file: string;
58
- sound?: string;
59
- fadeInTime?: number;
60
- fadeOutTime?: number;
61
- }
62
- interface ExpressionDefinition {
63
- name: string;
64
- file: string;
65
- }
66
- interface HitAreaDefinition {
67
- name: string;
68
- id: string;
69
- }
70
- /** Opaque in-memory model handle. */
71
- interface InternalModel {
72
- readonly id: string;
73
- readonly settings: ModelSettings;
74
- readonly format: ModelFormat;
75
- }
76
-
77
- /**
78
- * Settings JSON format detection (moc2 vs moc3).
79
- * Shared by loader normalize and renderer backends — keep binary peek in renderer.
80
- */
81
-
82
- /** Detect moc2 vs moc3 from model settings JSON shape. Returns null if unknown. */
83
- declare function detectModelSettingsFormat(json: unknown): ModelFormat | null;
84
-
85
40
  /** Load pipeline stage for progress UI. */
86
41
  type LoadProgressStage = "mounting" | "resolve" | "settings" | "moc" | "textures" | "decode" | "ready";
87
42
  interface LoadProgress {
@@ -151,6 +106,51 @@ declare class EventEmitter {
151
106
  clear(): void;
152
107
  }
153
108
 
109
+ /** Model binary family (file extension / settings shape). */
110
+ type ModelFormat = "moc2" | "moc3";
111
+ /** Normalized, format-agnostic model settings. */
112
+ interface ModelSettings {
113
+ format: ModelFormat;
114
+ url: string;
115
+ name?: string;
116
+ moc: string;
117
+ textures: string[];
118
+ motionGroups: Record<string, MotionDefinition[]>;
119
+ expressions: ExpressionDefinition[];
120
+ physics?: string;
121
+ pose?: string;
122
+ hitAreas: HitAreaDefinition[];
123
+ layout?: Record<string, number>;
124
+ }
125
+ interface MotionDefinition {
126
+ file: string;
127
+ sound?: string;
128
+ fadeInTime?: number;
129
+ fadeOutTime?: number;
130
+ }
131
+ interface ExpressionDefinition {
132
+ name: string;
133
+ file: string;
134
+ }
135
+ interface HitAreaDefinition {
136
+ name: string;
137
+ id: string;
138
+ }
139
+ /** Opaque in-memory model handle. */
140
+ interface InternalModel {
141
+ readonly id: string;
142
+ readonly settings: ModelSettings;
143
+ readonly format: ModelFormat;
144
+ }
145
+
146
+ /**
147
+ * Settings JSON format detection (moc2 vs moc3).
148
+ * Shared by loader normalize and renderer backends — keep binary peek in renderer.
149
+ */
150
+
151
+ /** Detect moc2 vs moc3 from model settings JSON shape. Returns null if unknown. */
152
+ declare function detectModelSettingsFormat(json: unknown): ModelFormat | null;
153
+
154
154
  /**
155
155
  * CPU frame output — format-agnostic mesh list ready for any RenderDevice.
156
156
  */
@@ -348,6 +348,16 @@ interface Live2dActor {
348
348
  defaultValue: number;
349
349
  value: number;
350
350
  }>;
351
+ /** Load-time stable id → binding map (binding.value updated on setParameter). */
352
+ parameterMap(): ReadonlyMap<string, {
353
+ id: string;
354
+ min: number;
355
+ max: number;
356
+ defaultValue: number;
357
+ value: number;
358
+ }>;
359
+ /** Resolve parameter id → index (O(1) after load). */
360
+ resolveParameter(id: string): number | undefined;
351
361
  listMotionGroups(): Record<string, readonly MotionDefinition[]>;
352
362
  playMotion(group: string, index?: number, options?: PlayMotionActorOptions): Promise<boolean>;
353
363
  stopMotion(opts?: {
package/dist/index.js CHANGED
@@ -9,6 +9,28 @@ function modelSourceUrl(source) {
9
9
  return source.baseUrl;
10
10
  }
11
11
 
12
+ // src/events.ts
13
+ var EventEmitter = class {
14
+ #listeners = /* @__PURE__ */ new Map();
15
+ on(event, listener) {
16
+ const set = this.#listeners.get(event) ?? /* @__PURE__ */ new Set();
17
+ set.add(listener);
18
+ this.#listeners.set(event, set);
19
+ return () => this.off(event, listener);
20
+ }
21
+ off(event, listener) {
22
+ this.#listeners.get(event)?.delete(listener);
23
+ }
24
+ emit(event, payload) {
25
+ for (const listener of this.#listeners.get(event) ?? []) {
26
+ listener(payload);
27
+ }
28
+ }
29
+ clear() {
30
+ this.#listeners.clear();
31
+ }
32
+ };
33
+
12
34
  // src/format/detect-format.ts
13
35
  function detectModelSettingsFormat(json) {
14
36
  if (!json || typeof json !== "object") return null;
@@ -33,28 +55,6 @@ function detectModelSettingsFormat(json) {
33
55
  return null;
34
56
  }
35
57
 
36
- // src/events.ts
37
- var EventEmitter = class {
38
- #listeners = /* @__PURE__ */ new Map();
39
- on(event, listener) {
40
- const set = this.#listeners.get(event) ?? /* @__PURE__ */ new Set();
41
- set.add(listener);
42
- this.#listeners.set(event, set);
43
- return () => this.off(event, listener);
44
- }
45
- off(event, listener) {
46
- this.#listeners.get(event)?.delete(listener);
47
- }
48
- emit(event, payload) {
49
- for (const listener of this.#listeners.get(event) ?? []) {
50
- listener(payload);
51
- }
52
- }
53
- clear() {
54
- this.#listeners.clear();
55
- }
56
- };
57
-
58
58
  // src/frame.ts
59
59
  var FrameBlendMode = {
60
60
  Normal: 0,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@doki-land/live2d-core",
3
- "version": "0.0.17",
3
+ "version": "0.0.19",
4
4
  "description": "Shared TypeScript contracts for live2d.ts — ModelSource, Live2dStage/Actor, ModelAsset, events (no DOM/GPU).",
5
5
  "type": "module",
6
6
  "license": "MIT",
package/src/index.ts CHANGED
@@ -16,7 +16,6 @@ export type {
16
16
  SessionState,
17
17
  } from "./contracts.js";
18
18
  export { modelSourceUrl } from "./contracts.js";
19
- export { detectModelSettingsFormat } from "./format/detect-format.js";
20
19
  export {
21
20
  EventEmitter,
22
21
  type FrameProfile,
@@ -26,6 +25,7 @@ export {
26
25
  type LoadProgress,
27
26
  type LoadProgressStage,
28
27
  } from "./events.js";
28
+ export { detectModelSettingsFormat } from "./format/detect-format.js";
29
29
  export {
30
30
  FrameBlendMode,
31
31
  type FrameDrawable,
@@ -117,6 +117,21 @@ export interface Live2dActor {
117
117
  value: number;
118
118
  }>;
119
119
 
120
+ /** Load-time stable id → binding map (binding.value updated on setParameter). */
121
+ parameterMap(): ReadonlyMap<
122
+ string,
123
+ {
124
+ id: string;
125
+ min: number;
126
+ max: number;
127
+ defaultValue: number;
128
+ value: number;
129
+ }
130
+ >;
131
+
132
+ /** Resolve parameter id → index (O(1) after load). */
133
+ resolveParameter(id: string): number | undefined;
134
+
120
135
  listMotionGroups(): Record<string, readonly MotionDefinition[]>;
121
136
 
122
137
  playMotion(