@liforma/client 0.4.2 → 0.4.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.
Files changed (98) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/next/index.js +681 -573
  3. package/dist/next/index.js.map +1 -1
  4. package/dist/next/react/ExperienceThumbnail.d.ts +1 -1
  5. package/dist/next/react/ExperienceThumbnail.d.ts.map +1 -1
  6. package/dist/next/react/ExperienceWidget.d.ts +4 -0
  7. package/dist/next/react/ExperienceWidget.d.ts.map +1 -1
  8. package/dist/next/thumbnail/index.d.ts +1 -0
  9. package/dist/next/thumbnail/index.d.ts.map +1 -1
  10. package/dist/next/thumbnail/styles.d.ts.map +1 -1
  11. package/dist/next/thumbnail/types.d.ts +3 -2
  12. package/dist/next/thumbnail/types.d.ts.map +1 -1
  13. package/dist/next/v2/embed/iframeHost.d.ts +27 -1
  14. package/dist/next/v2/embed/iframeHost.d.ts.map +1 -1
  15. package/dist/next/v2/embed/protocol.d.ts +61 -1
  16. package/dist/next/v2/embed/protocol.d.ts.map +1 -1
  17. package/dist/next/v2/experience.d.ts +16 -2
  18. package/dist/next/v2/experience.d.ts.map +1 -1
  19. package/dist/next/v2/experienceEvents.d.ts +25 -0
  20. package/dist/next/v2/experienceEvents.d.ts.map +1 -1
  21. package/dist/next/v2/shims/embedBaseUrl.d.ts +1 -1
  22. package/dist/next/v2/shims/embedBaseUrl.d.ts.map +1 -1
  23. package/dist/next/v2/types/sessionInteraction.d.ts +3 -1
  24. package/dist/next/v2/types/sessionInteraction.d.ts.map +1 -1
  25. package/dist/next/widget/mountExperienceWidget.d.ts.map +1 -1
  26. package/dist/next/widget/types.d.ts +7 -0
  27. package/dist/next/widget/types.d.ts.map +1 -1
  28. package/dist/npm/index.js +542 -440
  29. package/dist/npm/index.js.map +1 -1
  30. package/dist/npm/thumbnail/index.d.ts +1 -0
  31. package/dist/npm/thumbnail/index.d.ts.map +1 -1
  32. package/dist/npm/thumbnail/styles.d.ts.map +1 -1
  33. package/dist/npm/thumbnail/types.d.ts +3 -2
  34. package/dist/npm/thumbnail/types.d.ts.map +1 -1
  35. package/dist/npm/v2/embed/iframeHost.d.ts +27 -1
  36. package/dist/npm/v2/embed/iframeHost.d.ts.map +1 -1
  37. package/dist/npm/v2/embed/protocol.d.ts +61 -1
  38. package/dist/npm/v2/embed/protocol.d.ts.map +1 -1
  39. package/dist/npm/v2/experience.d.ts +16 -2
  40. package/dist/npm/v2/experience.d.ts.map +1 -1
  41. package/dist/npm/v2/experienceEvents.d.ts +25 -0
  42. package/dist/npm/v2/experienceEvents.d.ts.map +1 -1
  43. package/dist/npm/v2/index.d.ts +1 -1
  44. package/dist/npm/v2/index.d.ts.map +1 -1
  45. package/dist/npm/v2/liforma-experience-thumbnail.d.ts.map +1 -1
  46. package/dist/npm/v2/liforma-experience.d.ts.map +1 -1
  47. package/dist/npm/v2/npm.d.ts +2 -1
  48. package/dist/npm/v2/npm.d.ts.map +1 -1
  49. package/dist/npm/v2/shims/embedBaseUrl.d.ts +1 -1
  50. package/dist/npm/v2/shims/embedBaseUrl.d.ts.map +1 -1
  51. package/dist/npm/v2/types/sessionInteraction.d.ts +3 -1
  52. package/dist/npm/v2/types/sessionInteraction.d.ts.map +1 -1
  53. package/dist/npm/v2/types/sessionManifestSchema.d.ts +1 -1
  54. package/dist/npm/v2/types/sessionManifestSchema.d.ts.map +1 -1
  55. package/dist/npm/widget/mountExperienceWidget.d.ts.map +1 -1
  56. package/dist/npm/widget/types.d.ts +7 -0
  57. package/dist/npm/widget/types.d.ts.map +1 -1
  58. package/dist/react/component/experienceComponentLaunch.d.ts.map +1 -1
  59. package/dist/react/component/experienceComponentRuntime.d.ts +4 -0
  60. package/dist/react/component/experienceComponentRuntime.d.ts.map +1 -1
  61. package/dist/react/component/experienceComponentTypes.d.ts +17 -1
  62. package/dist/react/component/experienceComponentTypes.d.ts.map +1 -1
  63. package/dist/react/index.js +761 -636
  64. package/dist/react/index.js.map +1 -1
  65. package/dist/react/react/Experience.d.ts.map +1 -1
  66. package/dist/react/react/ExperienceThumbnail.d.ts +1 -1
  67. package/dist/react/react/ExperienceThumbnail.d.ts.map +1 -1
  68. package/dist/react/react/ExperienceWidget.d.ts +4 -0
  69. package/dist/react/react/ExperienceWidget.d.ts.map +1 -1
  70. package/dist/react/thumbnail/index.d.ts +1 -0
  71. package/dist/react/thumbnail/index.d.ts.map +1 -1
  72. package/dist/react/thumbnail/styles.d.ts.map +1 -1
  73. package/dist/react/thumbnail/types.d.ts +3 -2
  74. package/dist/react/thumbnail/types.d.ts.map +1 -1
  75. package/dist/react/v2/embed/iframeHost.d.ts +27 -1
  76. package/dist/react/v2/embed/iframeHost.d.ts.map +1 -1
  77. package/dist/react/v2/embed/protocol.d.ts +61 -1
  78. package/dist/react/v2/embed/protocol.d.ts.map +1 -1
  79. package/dist/react/v2/experience.d.ts +16 -2
  80. package/dist/react/v2/experience.d.ts.map +1 -1
  81. package/dist/react/v2/experienceEvents.d.ts +25 -0
  82. package/dist/react/v2/experienceEvents.d.ts.map +1 -1
  83. package/dist/react/v2/shims/embedBaseUrl.d.ts +1 -1
  84. package/dist/react/v2/shims/embedBaseUrl.d.ts.map +1 -1
  85. package/dist/react/v2/types/sessionInteraction.d.ts +3 -1
  86. package/dist/react/v2/types/sessionInteraction.d.ts.map +1 -1
  87. package/dist/react/widget/mountExperienceWidget.d.ts.map +1 -1
  88. package/dist/react/widget/types.d.ts +7 -0
  89. package/dist/react/widget/types.d.ts.map +1 -1
  90. package/dist/sdk/v2/client.js +30 -5
  91. package/dist/sdk/v2/client.js.map +1 -1
  92. package/dist/svelte/Experience.svelte +29 -0
  93. package/dist/svelte/Experience.svelte.d.ts +2 -0
  94. package/dist/svelte/ExperienceThumbnail.svelte +3 -2
  95. package/dist/svelte/ExperienceThumbnail.svelte.d.ts +1 -1
  96. package/dist/svelte/ExperienceWidget.svelte +12 -1
  97. package/dist/svelte/ExperienceWidget.svelte.d.ts +3 -0
  98. package/package.json +14 -2
@@ -57,12 +57,14 @@
57
57
  mode,
58
58
  speechInputMode,
59
59
  startButton,
60
+ showFeedback,
60
61
  closeButton,
61
62
  conversationProcessor,
62
63
  speechOnly = false,
63
64
  fit,
64
65
  avatarId,
65
66
  locationId,
67
+ castSize,
66
68
  embedBaseUrl,
67
69
  debug = false,
68
70
  returnUrl,
@@ -73,10 +75,13 @@
73
75
  onUserSpeechEnded,
74
76
  onCharacterSpeechStarted,
75
77
  onCharacterSpeechEnded,
78
+ onCharacterFocusChanged,
76
79
  onConversationUpdate,
77
80
  onMessage,
78
81
  onListeningState,
79
82
  onActivityChange,
83
+ onFeedback,
84
+ onFeedbackFailed,
80
85
  onConversationProcessorError,
81
86
  onPlayerStatusChange,
82
87
  onStateUpdate,
@@ -106,6 +111,7 @@
106
111
  speechOnly,
107
112
  avatarId,
108
113
  locationId,
114
+ castSize,
109
115
  embedBaseUrl,
110
116
  debug
111
117
  ])
@@ -263,12 +269,17 @@
263
269
  subscribe(generation, session, 'characterSpeechEnded', (event) =>
264
270
  onCharacterSpeechEnded?.(event)
265
271
  );
272
+ subscribe(generation, session, 'characterFocusChanged', (event) =>
273
+ onCharacterFocusChanged?.(event)
274
+ );
266
275
  subscribe(generation, session, 'conversationUpdate', (event) =>
267
276
  onConversationUpdate?.(event)
268
277
  );
269
278
  subscribe(generation, session, 'message', (event) => onMessage?.(event));
270
279
  subscribe(generation, session, 'listeningState', (event) => onListeningState?.(event));
271
280
  subscribe(generation, session, 'activityChange', (event) => onActivityChange?.(event));
281
+ subscribe(generation, session, 'feedback', (event) => onFeedback?.(event));
282
+ subscribe(generation, session, 'feedbackFailed', (event) => onFeedbackFailed?.(event));
272
283
  subscribe(generation, session, 'conversationProcessorError', (event) =>
273
284
  onConversationProcessorError?.(event)
274
285
  );
@@ -304,6 +315,7 @@
304
315
  language,
305
316
  locationId,
306
317
  avatarId,
318
+ castSize,
307
319
  embedBaseUrl,
308
320
  debug,
309
321
  mode,
@@ -321,6 +333,7 @@
321
333
  language,
322
334
  locationId,
323
335
  avatarId,
336
+ castSize,
324
337
  embedBaseUrl,
325
338
  debug,
326
339
  mode,
@@ -358,6 +371,7 @@
358
371
  container,
359
372
  fit: untrack(() => fit),
360
373
  startButton: untrack(() => startButton),
374
+ showFeedback: untrack(() => showFeedback),
361
375
  closeButton: untrack(() => closeButton),
362
376
  returnUrl: untrack(() => returnUrl),
363
377
  showClose: Boolean(onClose || returnUrl?.trim() || closeButton),
@@ -455,6 +469,14 @@
455
469
  return activeGeneration?.instance?.getConversation() ?? [];
456
470
  }
457
471
 
472
+ export function focusCharacter(characterId: string): Promise<void> {
473
+ return withSession((session) => session.focusCharacter(characterId));
474
+ }
475
+
476
+ export function setFit(nextFit: NonNullable<ExperienceProps['fit']>): Promise<void> {
477
+ return withSession((session) => session.setFit(nextFit));
478
+ }
479
+
458
480
  export function end(): Promise<void> {
459
481
  return withSession((session) => session.end());
460
482
  }
@@ -502,6 +524,13 @@
502
524
 
503
525
  $effect(restartSession);
504
526
 
527
+ $effect(() => {
528
+ const nextFit = fit ?? 'full';
529
+ const session = untrack(() => activeGeneration?.instance ?? null);
530
+ if (!session) return;
531
+ void session.setFit(nextFit);
532
+ });
533
+
505
534
  $effect(() => {
506
535
  const container = errorHost;
507
536
  const presentation = loadError;
@@ -15,6 +15,8 @@ declare const Experience: import("svelte").Component<ExperienceProps, {
15
15
  getSession: () => Session | null;
16
16
  getManifest: () => SessionManifest | null;
17
17
  getConversation: () => ReturnType<ExperienceSession["getConversation"]>;
18
+ focusCharacter: (characterId: string) => Promise<void>;
19
+ setFit: (nextFit: NonNullable<ExperienceProps["fit"]>) => Promise<void>;
18
20
  end: () => Promise<void>;
19
21
  }, "">;
20
22
  type Experience = ReturnType<typeof Experience>;
@@ -12,6 +12,7 @@
12
12
  resolveThumbnailHref,
13
13
  resolveThumbnailInteraction,
14
14
  resolveThumbnailLayers,
15
+ thumbnailFitClass,
15
16
  type GalleryThumb
16
17
  } from '@liforma/client';
17
18
 
@@ -47,7 +48,7 @@
47
48
  returnUrl?: string;
48
49
  playerBaseUrl?: string;
49
50
  parallax?: boolean;
50
- fit?: 'full' | 'face';
51
+ fit?: 'full' | 'face' | 'medium';
51
52
  lazy?: boolean;
52
53
  class?: string;
53
54
  fallbackImage?: string;
@@ -263,7 +264,7 @@
263
264
  [
264
265
  'liforma-et',
265
266
  hasScene ? 'liforma-et--scene' : '',
266
- fit === 'face' ? 'liforma-et--fit-face' : '',
267
+ thumbnailFitClass(fit),
267
268
  parallaxLayersActive ? 'liforma-et--parallax' : '',
268
269
  scrollParallax ? 'liforma-et--scroll-parallax' : '',
269
270
  shouldLoad && !revealThumb ? 'liforma-et--loading' : '',
@@ -13,7 +13,7 @@ type $$ComponentProps = {
13
13
  returnUrl?: string;
14
14
  playerBaseUrl?: string;
15
15
  parallax?: boolean;
16
- fit?: 'full' | 'face';
16
+ fit?: 'full' | 'face' | 'medium';
17
17
  lazy?: boolean;
18
18
  class?: string;
19
19
  fallbackImage?: string;
@@ -35,13 +35,16 @@
35
35
  expandedMaxHeight,
36
36
  startButtonLabel,
37
37
  startButton,
38
+ showFeedback,
38
39
  class: className = '',
39
40
  onExpanded,
40
41
  onCollapsed,
41
42
  onStarted,
42
43
  onClose,
43
44
  onError,
44
- onPrefetchReady
45
+ onPrefetchReady,
46
+ onFeedback,
47
+ onFeedbackFailed
45
48
  }: {
46
49
  experienceId: string;
47
50
  alt: string;
@@ -65,6 +68,7 @@
65
68
  expandedMaxHeight?: string;
66
69
  startButtonLabel?: string;
67
70
  startButton?: StartButtonOptions;
71
+ showFeedback?: boolean;
68
72
  class?: string;
69
73
  onExpanded?: () => void;
70
74
  onCollapsed?: () => void;
@@ -72,6 +76,10 @@
72
76
  onClose?: () => void;
73
77
  onError?: (error: Error) => void;
74
78
  onPrefetchReady?: () => void;
79
+ onFeedback?: (event: import('@liforma/client').ExperienceEvents['feedback']) => void;
80
+ onFeedbackFailed?: (
81
+ event: import('@liforma/client').ExperienceEvents['feedbackFailed']
82
+ ) => void;
75
83
  } = $props();
76
84
 
77
85
  let hostEl: HTMLDivElement | undefined = $state();
@@ -107,6 +115,9 @@
107
115
  expandedMaxHeight,
108
116
  startButtonLabel,
109
117
  startButton,
118
+ showFeedback,
119
+ onFeedback,
120
+ onFeedbackFailed,
110
121
  onExpanded,
111
122
  onCollapsed,
112
123
  onStarted,
@@ -22,6 +22,7 @@ type $$ComponentProps = {
22
22
  expandedMaxHeight?: string;
23
23
  startButtonLabel?: string;
24
24
  startButton?: StartButtonOptions;
25
+ showFeedback?: boolean;
25
26
  class?: string;
26
27
  onExpanded?: () => void;
27
28
  onCollapsed?: () => void;
@@ -29,6 +30,8 @@ type $$ComponentProps = {
29
30
  onClose?: () => void;
30
31
  onError?: (error: Error) => void;
31
32
  onPrefetchReady?: () => void;
33
+ onFeedback?: (event: import('@liforma/client').ExperienceEvents['feedback']) => void;
34
+ onFeedbackFailed?: (event: import('@liforma/client').ExperienceEvents['feedbackFailed']) => void;
32
35
  };
33
36
  declare const ExperienceWidget: import("svelte").Component<$$ComponentProps, {}, "">;
34
37
  type ExperienceWidget = ReturnType<typeof ExperienceWidget>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@liforma/client",
3
- "version": "0.4.2",
3
+ "version": "0.4.3",
4
4
  "type": "module",
5
5
  "description": "Liforma browser SDK — Experience sessions, speech API, and Svelte embed component.",
6
6
  "license": "MIT",
@@ -137,7 +137,11 @@
137
137
  "test:parse-composite-filename": "node scripts/test-parse-composite-filename.mjs",
138
138
  "test:avatar-composite-rendered-path": "node scripts/test-avatar-composite-rendered-path.mjs",
139
139
  "test:avatar-compose-worker-cors": "node scripts/test-avatar-compose-worker-cors.mjs",
140
+ "test:experience-thumb-url": "node scripts/test-experience-thumb-url.mjs",
141
+ "test:compose-experience-thumb": "node scripts/test-compose-experience-thumb.mjs",
140
142
  "test:location-depth-paths": "node scripts/test-location-depth-paths.mjs",
143
+ "test:location-binary-assets": "node scripts/test-location-binary-assets.mjs",
144
+ "test:location-da3-depth": "node scripts/test-location-da3-depth.mjs",
141
145
  "test:location-interactions": "node scripts/test-location-interactions.mjs",
142
146
  "test:render-plate-chroma-key": "node scripts/test-render-plate-chroma-key.mjs",
143
147
  "test:sparse-plate": "node scripts/test-sparse-plate.mjs",
@@ -149,26 +153,34 @@
149
153
  "catalogue:locations": "node scripts/catalogue-locations.mjs",
150
154
  "generate:location-interactions": "node scripts/generate-location-interactions.mjs",
151
155
  "generate:location-depth": "node scripts/generate-location-depth.mjs",
156
+ "generate:location-depth16-da3": "node scripts/generate-location-depth16-da3.mjs",
157
+ "generate:location-discontinuities": "node scripts/generate-location-discontinuities.mjs",
152
158
  "build:locations": "node scripts/build-locations.mjs",
153
159
  "publish:locations": "node scripts/publish-locations.mjs",
154
160
  "verify:locations": "node scripts/verify-location-sources.mjs",
155
161
  "publish:models": "node scripts/publish-models.mjs",
162
+ "publish:models:krea-int8": "node scripts/_upload-model-prefix.mjs text-to-image/lf-t2i-turbo-int8",
163
+ "publish:models:ltx-int8": "node scripts/_upload-model-prefix.mjs text-to-video/lf-t2v-distill-int8",
164
+ "publish:models:video-omni": "node scripts/_upload-model-prefix.mjs text-to-video/lf-video-omni-v1",
156
165
  "fetch:depth-anything-v2": "node scripts/fetch-depth-anything-v2.mjs",
157
166
  "fetch:video-depth-anything": "node scripts/fetch-video-depth-anything.mjs",
158
167
  "fetch:depth-pro": "node scripts/fetch-depth-pro.mjs",
159
168
  "fetch:face-landmarker": "node scripts/fetch-face-landmarker.mjs",
160
169
  "fetch:anime-face-detector": "node scripts/fetch-anime-face-detector.mjs",
161
170
  "fetch:face-parsing": "node scripts/fetch-face-parsing.mjs",
171
+ "fetch:vitmatte": "node scripts/fetch-vitmatte.mjs",
172
+ "fetch:liveportrait-mlx": "node scripts/fetch-liveportrait-mlx.mjs",
162
173
  "fetch:wav2vec-phoneme-ctc": "node scripts/fetch-wav2vec-phoneme-ctc.mjs",
163
174
  "fetch:lf-sta": "node scripts/fetch-wav2vec-phoneme-ctc.mjs",
164
175
  "fetch:supertonic-3": "node scripts/fetch-supertonic-3.mjs",
165
176
  "fetch:lf-tts": "node scripts/fetch-supertonic-3.mjs",
166
177
  "fetch:lf-t2i-turbo": "python3 ../tools/krea-2-salad/scripts/fetch_cdn_snapshot.py",
167
- "fetch:models": "npm run fetch:depth-anything-v2 && npm run fetch:video-depth-anything && npm run fetch:depth-pro && npm run fetch:face-landmarker && npm run fetch:anime-face-detector && npm run fetch:face-parsing && npm run fetch:lf-sta && npm run fetch:lf-tts",
178
+ "fetch:models": "npm run fetch:depth-anything-v2 && npm run fetch:video-depth-anything && npm run fetch:depth-pro && npm run fetch:face-landmarker && npm run fetch:anime-face-detector && npm run fetch:face-parsing && npm run fetch:vitmatte && npm run fetch:lf-sta && npm run fetch:lf-tts",
168
179
  "locations": "npm run catalogue:locations && npm run build:locations",
169
180
  "configure:cors": "node scripts/configure-r2-cors.mjs",
170
181
  "verify:cors": "node scripts/verify-cdn-cors.mjs",
171
182
  "deploy:worker:avatar-compose": "node scripts/deploy-avatar-compose-worker.mjs",
183
+ "deploy:worker:experience-thumb": "node scripts/deploy-experience-thumb-worker.mjs",
172
184
  "deploy": "npm run build && npm run publish:sdk",
173
185
  "verify": "npm run build && node scripts/check-sdk-size.mjs && node scripts/test-embed-protocol.mjs && node scripts/test-manifest-embed-url.mjs && node scripts/test-player-reachability.mjs && node scripts/test-session-endpoint.mjs && node scripts/verify-package.mjs",
174
186
  "preview:test": "npm run build && npm run preview"