@pose-tracker/pose-estimation-web-react 0.1.0 → 0.3.0

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
@@ -17,6 +17,8 @@ import {
17
17
  function Screen() {
18
18
  usePoseTracker({ onKeypoints: (e) => console.log(e.keypoints.length) });
19
19
  return <PoseCamera style={{ height: 480 }} />;
20
+ // Video / image: <PoseCamera source="image" sourceFile={file} />
21
+ // or sourceUrl — see docs/MEDIA_SOURCES.md · https://docs.posetracker.com/media-sources
20
22
  }
21
23
 
22
24
  export function App() {
package/dist/index.cjs CHANGED
@@ -8,16 +8,23 @@ var jsxRuntime = require('react/jsx-runtime');
8
8
  var PoseTrackerContext = react.createContext(null);
9
9
  function PoseTrackerProvider({
10
10
  apiToken,
11
+ engine,
11
12
  options,
12
13
  autoStart = true,
13
14
  autoPreload = false,
14
15
  children
15
16
  }) {
16
17
  const merged = react.useMemo(
17
- () => ({ ...options, apiToken: apiToken ?? options?.apiToken }),
18
+ () => ({
19
+ ...options,
20
+ apiToken: apiToken ?? options?.apiToken,
21
+ engine: engine ?? options?.engine
22
+ }),
18
23
  // eslint-disable-next-line react-hooks/exhaustive-deps
19
24
  [
20
25
  apiToken,
26
+ engine,
27
+ options?.engine,
21
28
  options?.model,
22
29
  options?.modelUrl,
23
30
  options?.facingMode,
@@ -76,6 +83,12 @@ function PoseTrackerProvider({
76
83
  (model, modelUrl) => client.setModel(model, modelUrl),
77
84
  [client]
78
85
  );
86
+ const setSource = react.useCallback(
87
+ (...args) => client.setSource(...args),
88
+ [client]
89
+ );
90
+ const analyze = react.useCallback(() => client.analyze(), [client]);
91
+ const getSource = react.useCallback(() => client.getSource(), [client]);
79
92
  const getAvailableExercises = react.useCallback(() => client.getAvailableExercises(), [client]);
80
93
  const getAvailableCustomExercises = react.useCallback(
81
94
  () => client.getAvailableCustomExercises(),
@@ -106,6 +119,9 @@ function PoseTrackerProvider({
106
119
  startExercise,
107
120
  stopExercise,
108
121
  setModel,
122
+ setSource,
123
+ analyze,
124
+ getSource,
109
125
  getAvailableExercises,
110
126
  getAvailableCustomExercises,
111
127
  addEventListener,
@@ -127,6 +143,9 @@ function PoseTrackerProvider({
127
143
  startExercise,
128
144
  stopExercise,
129
145
  setModel,
146
+ setSource,
147
+ analyze,
148
+ getSource,
130
149
  getAvailableExercises,
131
150
  getAvailableCustomExercises,
132
151
  addEventListener,
@@ -150,6 +169,9 @@ function PoseCamera({
150
169
  style,
151
170
  className,
152
171
  position,
172
+ source,
173
+ sourceUrl,
174
+ sourceFile,
153
175
  drawSkeleton,
154
176
  drawPlacementBox,
155
177
  placementPaddingPercent,
@@ -170,6 +192,9 @@ function PoseCamera({
170
192
  if (!el) return;
171
193
  client.updateOptions({
172
194
  ...position ? { position } : {},
195
+ ...source !== void 0 ? { source } : {},
196
+ ...sourceUrl !== void 0 ? { sourceUrl } : {},
197
+ ...sourceFile !== void 0 ? { sourceFile } : {},
173
198
  ...typeof drawSkeleton === "boolean" ? { drawSkeleton } : {},
174
199
  ...typeof drawPlacementBox === "boolean" ? { drawPlacementBox } : {},
175
200
  ...typeof placementPaddingPercent === "number" ? { placementPaddingPercent } : {},
@@ -184,7 +209,13 @@ function PoseCamera({
184
209
  const shouldStart = autoStartProp ?? providerAutoStart;
185
210
  if (shouldStart && !startedRef.current) {
186
211
  startedRef.current = true;
187
- client.start().catch(() => {
212
+ const boot = async () => {
213
+ if (source !== void 0) {
214
+ await client.setSource(source, { sourceUrl, sourceFile });
215
+ }
216
+ await client.start();
217
+ };
218
+ boot().catch(() => {
188
219
  });
189
220
  }
190
221
  return () => {
@@ -193,6 +224,11 @@ function PoseCamera({
193
224
  _registerMountHost(null);
194
225
  };
195
226
  }, [client]);
227
+ react.useEffect(() => {
228
+ if (!startedRef.current || source === void 0) return;
229
+ void client.setSource(source, { sourceUrl, sourceFile }).catch(() => {
230
+ });
231
+ }, [client, source, sourceUrl, sourceFile]);
196
232
  return /* @__PURE__ */ jsxRuntime.jsx(
197
233
  "div",
198
234
  {
@@ -316,10 +352,26 @@ Object.defineProperty(exports, "SDK_VERSION", {
316
352
  enumerable: true,
317
353
  get: function () { return poseEstimationWeb.SDK_VERSION; }
318
354
  });
355
+ Object.defineProperty(exports, "V4_ONLY_EXERCISE_IDS", {
356
+ enumerable: true,
357
+ get: function () { return poseEstimationWeb.V4_ONLY_EXERCISE_IDS; }
358
+ });
319
359
  Object.defineProperty(exports, "createPoseTracker", {
320
360
  enumerable: true,
321
361
  get: function () { return poseEstimationWeb.createPoseTracker; }
322
362
  });
363
+ Object.defineProperty(exports, "normalizeEngineChannel", {
364
+ enumerable: true,
365
+ get: function () { return poseEstimationWeb.normalizeEngineChannel; }
366
+ });
367
+ Object.defineProperty(exports, "normalizePoseSource", {
368
+ enumerable: true,
369
+ get: function () { return poseEstimationWeb.normalizePoseSource; }
370
+ });
371
+ Object.defineProperty(exports, "requiresEngineV4", {
372
+ enumerable: true,
373
+ get: function () { return poseEstimationWeb.requiresEngineV4; }
374
+ });
323
375
  Object.defineProperty(exports, "resolvePoseModel", {
324
376
  enumerable: true,
325
377
  get: function () { return poseEstimationWeb.resolvePoseModel; }
package/dist/index.d.cts CHANGED
@@ -1,5 +1,5 @@
1
- import { PoseTrackerClient, PoseTrackerStatus, PoseTrackerMode, ErrorEvent, SdkManifest, ExerciseConfig, PreloadOptions, StartExerciseOptions, PoseTrackerClientOptions, PoseTrackerEventListener, ClassicNativeMessage, SkeletonDefinition, PoseTrackerCallbacks } from '@pose-tracker/pose-estimation-web';
2
- export { COCO_KEYPOINT_NAMES, ColdStartMode, CounterEvent, DEFAULT_LOADING_TEXT, DEFAULT_MOVENET_LIGHTNING_URL, ErrorEvent, ExerciseConfig, InitializationEvent, Keypoint, KeypointsEvent, Pose, PoseModelAlias, PoseTracker, PoseTrackerCallbacks, PoseTrackerClient, PoseTrackerClientOptions, PoseTrackerOptions, PostureEvent, PreloadOptions, SDK_NAME, SDK_VERSION, SdkManifest, StartExerciseOptions, createPoseTracker, resolvePoseModel, shouldShowWatermark } from '@pose-tracker/pose-estimation-web';
1
+ import { PoseTrackerClient, PoseTrackerStatus, PoseTrackerMode, ErrorEvent, SdkManifest, ExerciseConfig, PreloadOptions, StartExerciseOptions, PoseTrackerClientOptions, PoseTrackerEventListener, ClassicNativeMessage, PoseSource, PoseSourceType, SkeletonDefinition, PoseTrackerCallbacks } from '@pose-tracker/pose-estimation-web';
2
+ export { COCO_KEYPOINT_NAMES, ColdStartMode, CounterEvent, DEFAULT_LOADING_TEXT, DEFAULT_MOVENET_LIGHTNING_URL, EngineChannel, ErrorEvent, ExerciseConfig, InitializationEvent, Keypoint, KeypointsEvent, Pose, PoseModelAlias, PoseSource, PoseSourceType, PoseTracker, PoseTrackerCallbacks, PoseTrackerClient, PoseTrackerClientOptions, PoseTrackerOptions, PostureEvent, PreloadOptions, SDK_NAME, SDK_VERSION, SdkManifest, StartExerciseOptions, V4_ONLY_EXERCISE_IDS, createPoseTracker, normalizeEngineChannel, normalizePoseSource, requiresEngineV4, resolvePoseModel, shouldShowWatermark } from '@pose-tracker/pose-estimation-web';
3
3
  import React from 'react';
4
4
 
5
5
  /**
@@ -20,6 +20,9 @@ interface PoseTrackerContextValue {
20
20
  startExercise: (exerciseId: string, options?: StartExerciseOptions) => void;
21
21
  stopExercise: () => void;
22
22
  setModel: (model?: PoseTrackerClientOptions['model'], modelUrl?: string) => Promise<void>;
23
+ setSource: PoseTrackerClient['setSource'];
24
+ analyze: PoseTrackerClient['analyze'];
25
+ getSource: PoseTrackerClient['getSource'];
23
26
  getAvailableExercises: () => ExerciseConfig[];
24
27
  getAvailableCustomExercises: () => ReturnType<PoseTrackerClient['getAvailableCustomExercises']>;
25
28
  addEventListener: (listener: PoseTrackerEventListener) => () => void;
@@ -32,6 +35,10 @@ interface PoseTrackerContextValue {
32
35
  }
33
36
  interface PoseTrackerProviderProps {
34
37
  apiToken?: string;
38
+ /**
39
+ * Opt-in V4 engine (`'v4'`). Default `'v3'` — production FSM, unchanged.
40
+ */
41
+ engine?: 'v3' | 'v4';
35
42
  options?: PoseTrackerClientOptions;
36
43
  /**
37
44
  * When true, PoseCamera calls `start()` after mount (full cold start).
@@ -42,7 +49,7 @@ interface PoseTrackerProviderProps {
42
49
  autoPreload?: boolean;
43
50
  children: React.ReactNode;
44
51
  }
45
- declare function PoseTrackerProvider({ apiToken, options, autoStart, autoPreload, children, }: PoseTrackerProviderProps): React.JSX.Element;
52
+ declare function PoseTrackerProvider({ apiToken, engine, options, autoStart, autoPreload, children, }: PoseTrackerProviderProps): React.JSX.Element;
46
53
  declare function usePoseTrackerContext(): PoseTrackerContextValue;
47
54
 
48
55
  interface PoseCameraProps {
@@ -51,6 +58,16 @@ interface PoseCameraProps {
51
58
  className?: string;
52
59
  /** 'front' | 'back' — mapped to getUserMedia facingMode. Default front. */
53
60
  position?: 'front' | 'back';
61
+ /**
62
+ * Input mode. Default `camera`.
63
+ * Pass a full {@link PoseSource} or `'camera' | 'video' | 'image'` with
64
+ * `sourceUrl` / `sourceFile`.
65
+ */
66
+ source?: PoseSource | PoseSourceType;
67
+ /** URL / object URL for `source: 'video' | 'image'`. */
68
+ sourceUrl?: string;
69
+ /** File/Blob for `source: 'video' | 'image'`. */
70
+ sourceFile?: File | Blob;
54
71
  /** Draw navy/gold skeleton overlay. Default true. */
55
72
  drawSkeleton?: boolean;
56
73
  /** Placement guide while posture.ready === false. Default true. */
@@ -78,7 +95,7 @@ interface PoseCameraProps {
78
95
  * Browser camera + canvas overlay (web equivalent of RN `WebViewPoseView`).
79
96
  * Must be rendered under {@link PoseTrackerProvider}.
80
97
  */
81
- declare function PoseCamera({ style, className, position, drawSkeleton, drawPlacementBox, placementPaddingPercent, coldStart, loadingText, showWatermark, skeletonDef, skeletonUuid, debugHud, autoStart: autoStartProp, }: PoseCameraProps): React.JSX.Element;
98
+ declare function PoseCamera({ style, className, position, source, sourceUrl, sourceFile, drawSkeleton, drawPlacementBox, placementPaddingPercent, coldStart, loadingText, showWatermark, skeletonDef, skeletonUuid, debugHud, autoStart: autoStartProp, }: PoseCameraProps): React.JSX.Element;
82
99
 
83
100
  /**
84
101
  * Access the PoseTracker pipeline and subscribe to typed events (RN light parity).
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { PoseTrackerClient, PoseTrackerStatus, PoseTrackerMode, ErrorEvent, SdkManifest, ExerciseConfig, PreloadOptions, StartExerciseOptions, PoseTrackerClientOptions, PoseTrackerEventListener, ClassicNativeMessage, SkeletonDefinition, PoseTrackerCallbacks } from '@pose-tracker/pose-estimation-web';
2
- export { COCO_KEYPOINT_NAMES, ColdStartMode, CounterEvent, DEFAULT_LOADING_TEXT, DEFAULT_MOVENET_LIGHTNING_URL, ErrorEvent, ExerciseConfig, InitializationEvent, Keypoint, KeypointsEvent, Pose, PoseModelAlias, PoseTracker, PoseTrackerCallbacks, PoseTrackerClient, PoseTrackerClientOptions, PoseTrackerOptions, PostureEvent, PreloadOptions, SDK_NAME, SDK_VERSION, SdkManifest, StartExerciseOptions, createPoseTracker, resolvePoseModel, shouldShowWatermark } from '@pose-tracker/pose-estimation-web';
1
+ import { PoseTrackerClient, PoseTrackerStatus, PoseTrackerMode, ErrorEvent, SdkManifest, ExerciseConfig, PreloadOptions, StartExerciseOptions, PoseTrackerClientOptions, PoseTrackerEventListener, ClassicNativeMessage, PoseSource, PoseSourceType, SkeletonDefinition, PoseTrackerCallbacks } from '@pose-tracker/pose-estimation-web';
2
+ export { COCO_KEYPOINT_NAMES, ColdStartMode, CounterEvent, DEFAULT_LOADING_TEXT, DEFAULT_MOVENET_LIGHTNING_URL, EngineChannel, ErrorEvent, ExerciseConfig, InitializationEvent, Keypoint, KeypointsEvent, Pose, PoseModelAlias, PoseSource, PoseSourceType, PoseTracker, PoseTrackerCallbacks, PoseTrackerClient, PoseTrackerClientOptions, PoseTrackerOptions, PostureEvent, PreloadOptions, SDK_NAME, SDK_VERSION, SdkManifest, StartExerciseOptions, V4_ONLY_EXERCISE_IDS, createPoseTracker, normalizeEngineChannel, normalizePoseSource, requiresEngineV4, resolvePoseModel, shouldShowWatermark } from '@pose-tracker/pose-estimation-web';
3
3
  import React from 'react';
4
4
 
5
5
  /**
@@ -20,6 +20,9 @@ interface PoseTrackerContextValue {
20
20
  startExercise: (exerciseId: string, options?: StartExerciseOptions) => void;
21
21
  stopExercise: () => void;
22
22
  setModel: (model?: PoseTrackerClientOptions['model'], modelUrl?: string) => Promise<void>;
23
+ setSource: PoseTrackerClient['setSource'];
24
+ analyze: PoseTrackerClient['analyze'];
25
+ getSource: PoseTrackerClient['getSource'];
23
26
  getAvailableExercises: () => ExerciseConfig[];
24
27
  getAvailableCustomExercises: () => ReturnType<PoseTrackerClient['getAvailableCustomExercises']>;
25
28
  addEventListener: (listener: PoseTrackerEventListener) => () => void;
@@ -32,6 +35,10 @@ interface PoseTrackerContextValue {
32
35
  }
33
36
  interface PoseTrackerProviderProps {
34
37
  apiToken?: string;
38
+ /**
39
+ * Opt-in V4 engine (`'v4'`). Default `'v3'` — production FSM, unchanged.
40
+ */
41
+ engine?: 'v3' | 'v4';
35
42
  options?: PoseTrackerClientOptions;
36
43
  /**
37
44
  * When true, PoseCamera calls `start()` after mount (full cold start).
@@ -42,7 +49,7 @@ interface PoseTrackerProviderProps {
42
49
  autoPreload?: boolean;
43
50
  children: React.ReactNode;
44
51
  }
45
- declare function PoseTrackerProvider({ apiToken, options, autoStart, autoPreload, children, }: PoseTrackerProviderProps): React.JSX.Element;
52
+ declare function PoseTrackerProvider({ apiToken, engine, options, autoStart, autoPreload, children, }: PoseTrackerProviderProps): React.JSX.Element;
46
53
  declare function usePoseTrackerContext(): PoseTrackerContextValue;
47
54
 
48
55
  interface PoseCameraProps {
@@ -51,6 +58,16 @@ interface PoseCameraProps {
51
58
  className?: string;
52
59
  /** 'front' | 'back' — mapped to getUserMedia facingMode. Default front. */
53
60
  position?: 'front' | 'back';
61
+ /**
62
+ * Input mode. Default `camera`.
63
+ * Pass a full {@link PoseSource} or `'camera' | 'video' | 'image'` with
64
+ * `sourceUrl` / `sourceFile`.
65
+ */
66
+ source?: PoseSource | PoseSourceType;
67
+ /** URL / object URL for `source: 'video' | 'image'`. */
68
+ sourceUrl?: string;
69
+ /** File/Blob for `source: 'video' | 'image'`. */
70
+ sourceFile?: File | Blob;
54
71
  /** Draw navy/gold skeleton overlay. Default true. */
55
72
  drawSkeleton?: boolean;
56
73
  /** Placement guide while posture.ready === false. Default true. */
@@ -78,7 +95,7 @@ interface PoseCameraProps {
78
95
  * Browser camera + canvas overlay (web equivalent of RN `WebViewPoseView`).
79
96
  * Must be rendered under {@link PoseTrackerProvider}.
80
97
  */
81
- declare function PoseCamera({ style, className, position, drawSkeleton, drawPlacementBox, placementPaddingPercent, coldStart, loadingText, showWatermark, skeletonDef, skeletonUuid, debugHud, autoStart: autoStartProp, }: PoseCameraProps): React.JSX.Element;
98
+ declare function PoseCamera({ style, className, position, source, sourceUrl, sourceFile, drawSkeleton, drawPlacementBox, placementPaddingPercent, coldStart, loadingText, showWatermark, skeletonDef, skeletonUuid, debugHud, autoStart: autoStartProp, }: PoseCameraProps): React.JSX.Element;
82
99
 
83
100
  /**
84
101
  * Access the PoseTracker pipeline and subscribe to typed events (RN light parity).
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { createPoseTracker } from '@pose-tracker/pose-estimation-web';
2
- export { COCO_KEYPOINT_NAMES, DEFAULT_LOADING_TEXT, DEFAULT_MOVENET_LIGHTNING_URL, PoseTrackerClient, SDK_NAME, SDK_VERSION, createPoseTracker, resolvePoseModel, shouldShowWatermark } from '@pose-tracker/pose-estimation-web';
2
+ export { COCO_KEYPOINT_NAMES, DEFAULT_LOADING_TEXT, DEFAULT_MOVENET_LIGHTNING_URL, PoseTrackerClient, SDK_NAME, SDK_VERSION, V4_ONLY_EXERCISE_IDS, createPoseTracker, normalizeEngineChannel, normalizePoseSource, requiresEngineV4, resolvePoseModel, shouldShowWatermark } from '@pose-tracker/pose-estimation-web';
3
3
  import { createContext, useMemo, useRef, useState, useEffect, useCallback, useContext } from 'react';
4
4
  import { jsx } from 'react/jsx-runtime';
5
5
 
@@ -7,16 +7,23 @@ import { jsx } from 'react/jsx-runtime';
7
7
  var PoseTrackerContext = createContext(null);
8
8
  function PoseTrackerProvider({
9
9
  apiToken,
10
+ engine,
10
11
  options,
11
12
  autoStart = true,
12
13
  autoPreload = false,
13
14
  children
14
15
  }) {
15
16
  const merged = useMemo(
16
- () => ({ ...options, apiToken: apiToken ?? options?.apiToken }),
17
+ () => ({
18
+ ...options,
19
+ apiToken: apiToken ?? options?.apiToken,
20
+ engine: engine ?? options?.engine
21
+ }),
17
22
  // eslint-disable-next-line react-hooks/exhaustive-deps
18
23
  [
19
24
  apiToken,
25
+ engine,
26
+ options?.engine,
20
27
  options?.model,
21
28
  options?.modelUrl,
22
29
  options?.facingMode,
@@ -75,6 +82,12 @@ function PoseTrackerProvider({
75
82
  (model, modelUrl) => client.setModel(model, modelUrl),
76
83
  [client]
77
84
  );
85
+ const setSource = useCallback(
86
+ (...args) => client.setSource(...args),
87
+ [client]
88
+ );
89
+ const analyze = useCallback(() => client.analyze(), [client]);
90
+ const getSource = useCallback(() => client.getSource(), [client]);
78
91
  const getAvailableExercises = useCallback(() => client.getAvailableExercises(), [client]);
79
92
  const getAvailableCustomExercises = useCallback(
80
93
  () => client.getAvailableCustomExercises(),
@@ -105,6 +118,9 @@ function PoseTrackerProvider({
105
118
  startExercise,
106
119
  stopExercise,
107
120
  setModel,
121
+ setSource,
122
+ analyze,
123
+ getSource,
108
124
  getAvailableExercises,
109
125
  getAvailableCustomExercises,
110
126
  addEventListener,
@@ -126,6 +142,9 @@ function PoseTrackerProvider({
126
142
  startExercise,
127
143
  stopExercise,
128
144
  setModel,
145
+ setSource,
146
+ analyze,
147
+ getSource,
129
148
  getAvailableExercises,
130
149
  getAvailableCustomExercises,
131
150
  addEventListener,
@@ -149,6 +168,9 @@ function PoseCamera({
149
168
  style,
150
169
  className,
151
170
  position,
171
+ source,
172
+ sourceUrl,
173
+ sourceFile,
152
174
  drawSkeleton,
153
175
  drawPlacementBox,
154
176
  placementPaddingPercent,
@@ -169,6 +191,9 @@ function PoseCamera({
169
191
  if (!el) return;
170
192
  client.updateOptions({
171
193
  ...position ? { position } : {},
194
+ ...source !== void 0 ? { source } : {},
195
+ ...sourceUrl !== void 0 ? { sourceUrl } : {},
196
+ ...sourceFile !== void 0 ? { sourceFile } : {},
172
197
  ...typeof drawSkeleton === "boolean" ? { drawSkeleton } : {},
173
198
  ...typeof drawPlacementBox === "boolean" ? { drawPlacementBox } : {},
174
199
  ...typeof placementPaddingPercent === "number" ? { placementPaddingPercent } : {},
@@ -183,7 +208,13 @@ function PoseCamera({
183
208
  const shouldStart = autoStartProp ?? providerAutoStart;
184
209
  if (shouldStart && !startedRef.current) {
185
210
  startedRef.current = true;
186
- client.start().catch(() => {
211
+ const boot = async () => {
212
+ if (source !== void 0) {
213
+ await client.setSource(source, { sourceUrl, sourceFile });
214
+ }
215
+ await client.start();
216
+ };
217
+ boot().catch(() => {
187
218
  });
188
219
  }
189
220
  return () => {
@@ -192,6 +223,11 @@ function PoseCamera({
192
223
  _registerMountHost(null);
193
224
  };
194
225
  }, [client]);
226
+ useEffect(() => {
227
+ if (!startedRef.current || source === void 0) return;
228
+ void client.setSource(source, { sourceUrl, sourceFile }).catch(() => {
229
+ });
230
+ }, [client, source, sourceUrl, sourceFile]);
195
231
  return /* @__PURE__ */ jsx(
196
232
  "div",
197
233
  {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pose-tracker/pose-estimation-web-react",
3
- "version": "0.1.0",
3
+ "version": "0.3.0",
4
4
  "private": false,
5
5
  "description": "PoseTracker React (web) pose estimation — thin wrapper over @pose-tracker/pose-estimation-web. Browser camera + canvas, not React Native.",
6
6
  "type": "module",
@@ -54,7 +54,7 @@
54
54
  "access": "public"
55
55
  },
56
56
  "dependencies": {
57
- "@pose-tracker/pose-estimation-web": "0.1.0"
57
+ "@pose-tracker/pose-estimation-web": "0.3.0"
58
58
  },
59
59
  "peerDependencies": {
60
60
  "react": ">=18.0.0",