@liforma/client 0.4.2 → 0.4.4

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 (105) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/dist/next/index.js +689 -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 +24 -2
  18. package/dist/next/v2/experience.d.ts.map +1 -1
  19. package/dist/next/v2/experienceEvents.d.ts +30 -0
  20. package/dist/next/v2/experienceEvents.d.ts.map +1 -1
  21. package/dist/next/v2/shims/embedBaseUrl.d.ts +3 -2
  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/v2/types/sessionManifest.d.ts +12 -0
  26. package/dist/next/v2/types/sessionManifest.d.ts.map +1 -1
  27. package/dist/next/widget/mountExperienceWidget.d.ts.map +1 -1
  28. package/dist/next/widget/types.d.ts +7 -0
  29. package/dist/next/widget/types.d.ts.map +1 -1
  30. package/dist/npm/index.js +632 -522
  31. package/dist/npm/index.js.map +1 -1
  32. package/dist/npm/thumbnail/index.d.ts +1 -0
  33. package/dist/npm/thumbnail/index.d.ts.map +1 -1
  34. package/dist/npm/thumbnail/styles.d.ts.map +1 -1
  35. package/dist/npm/thumbnail/types.d.ts +3 -2
  36. package/dist/npm/thumbnail/types.d.ts.map +1 -1
  37. package/dist/npm/v2/embed/iframeHost.d.ts +27 -1
  38. package/dist/npm/v2/embed/iframeHost.d.ts.map +1 -1
  39. package/dist/npm/v2/embed/protocol.d.ts +61 -1
  40. package/dist/npm/v2/embed/protocol.d.ts.map +1 -1
  41. package/dist/npm/v2/experience.d.ts +24 -2
  42. package/dist/npm/v2/experience.d.ts.map +1 -1
  43. package/dist/npm/v2/experienceEvents.d.ts +30 -0
  44. package/dist/npm/v2/experienceEvents.d.ts.map +1 -1
  45. package/dist/npm/v2/index.d.ts +1 -1
  46. package/dist/npm/v2/index.d.ts.map +1 -1
  47. package/dist/npm/v2/liforma-experience-thumbnail.d.ts.map +1 -1
  48. package/dist/npm/v2/liforma-experience.d.ts.map +1 -1
  49. package/dist/npm/v2/npm.d.ts +2 -1
  50. package/dist/npm/v2/npm.d.ts.map +1 -1
  51. package/dist/npm/v2/shims/embedBaseUrl.d.ts +3 -2
  52. package/dist/npm/v2/shims/embedBaseUrl.d.ts.map +1 -1
  53. package/dist/npm/v2/speechOnlyManifest.d.ts.map +1 -1
  54. package/dist/npm/v2/types/sessionInteraction.d.ts +3 -1
  55. package/dist/npm/v2/types/sessionInteraction.d.ts.map +1 -1
  56. package/dist/npm/v2/types/sessionManifest.d.ts +12 -0
  57. package/dist/npm/v2/types/sessionManifest.d.ts.map +1 -1
  58. package/dist/npm/v2/types/sessionManifestSchema.d.ts +20 -1
  59. package/dist/npm/v2/types/sessionManifestSchema.d.ts.map +1 -1
  60. package/dist/npm/widget/mountExperienceWidget.d.ts.map +1 -1
  61. package/dist/npm/widget/types.d.ts +7 -0
  62. package/dist/npm/widget/types.d.ts.map +1 -1
  63. package/dist/react/component/experienceComponentLaunch.d.ts.map +1 -1
  64. package/dist/react/component/experienceComponentRuntime.d.ts +4 -0
  65. package/dist/react/component/experienceComponentRuntime.d.ts.map +1 -1
  66. package/dist/react/component/experienceComponentTypes.d.ts +19 -1
  67. package/dist/react/component/experienceComponentTypes.d.ts.map +1 -1
  68. package/dist/react/index.js +768 -629
  69. package/dist/react/index.js.map +1 -1
  70. package/dist/react/react/Experience.d.ts.map +1 -1
  71. package/dist/react/react/ExperienceThumbnail.d.ts +1 -1
  72. package/dist/react/react/ExperienceThumbnail.d.ts.map +1 -1
  73. package/dist/react/react/ExperienceWidget.d.ts +4 -0
  74. package/dist/react/react/ExperienceWidget.d.ts.map +1 -1
  75. package/dist/react/thumbnail/index.d.ts +1 -0
  76. package/dist/react/thumbnail/index.d.ts.map +1 -1
  77. package/dist/react/thumbnail/styles.d.ts.map +1 -1
  78. package/dist/react/thumbnail/types.d.ts +3 -2
  79. package/dist/react/thumbnail/types.d.ts.map +1 -1
  80. package/dist/react/v2/embed/iframeHost.d.ts +27 -1
  81. package/dist/react/v2/embed/iframeHost.d.ts.map +1 -1
  82. package/dist/react/v2/embed/protocol.d.ts +61 -1
  83. package/dist/react/v2/embed/protocol.d.ts.map +1 -1
  84. package/dist/react/v2/experience.d.ts +24 -2
  85. package/dist/react/v2/experience.d.ts.map +1 -1
  86. package/dist/react/v2/experienceEvents.d.ts +30 -0
  87. package/dist/react/v2/experienceEvents.d.ts.map +1 -1
  88. package/dist/react/v2/shims/embedBaseUrl.d.ts +3 -2
  89. package/dist/react/v2/shims/embedBaseUrl.d.ts.map +1 -1
  90. package/dist/react/v2/types/sessionInteraction.d.ts +3 -1
  91. package/dist/react/v2/types/sessionInteraction.d.ts.map +1 -1
  92. package/dist/react/v2/types/sessionManifest.d.ts +12 -0
  93. package/dist/react/v2/types/sessionManifest.d.ts.map +1 -1
  94. package/dist/react/widget/mountExperienceWidget.d.ts.map +1 -1
  95. package/dist/react/widget/types.d.ts +7 -0
  96. package/dist/react/widget/types.d.ts.map +1 -1
  97. package/dist/sdk/v2/client.js +31 -6
  98. package/dist/sdk/v2/client.js.map +1 -1
  99. package/dist/svelte/Experience.svelte +36 -0
  100. package/dist/svelte/Experience.svelte.d.ts +2 -0
  101. package/dist/svelte/ExperienceThumbnail.svelte +3 -2
  102. package/dist/svelte/ExperienceThumbnail.svelte.d.ts +1 -1
  103. package/dist/svelte/ExperienceWidget.svelte +12 -1
  104. package/dist/svelte/ExperienceWidget.svelte.d.ts +3 -0
  105. package/package.json +14 -2
@@ -57,12 +57,15 @@
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,
66
+ backdropId,
65
67
  locationId,
68
+ castSize,
66
69
  embedBaseUrl,
67
70
  debug = false,
68
71
  returnUrl,
@@ -73,10 +76,13 @@
73
76
  onUserSpeechEnded,
74
77
  onCharacterSpeechStarted,
75
78
  onCharacterSpeechEnded,
79
+ onCharacterFocusChanged,
76
80
  onConversationUpdate,
77
81
  onMessage,
78
82
  onListeningState,
79
83
  onActivityChange,
84
+ onFeedback,
85
+ onFeedbackFailed,
80
86
  onConversationProcessorError,
81
87
  onPlayerStatusChange,
82
88
  onStateUpdate,
@@ -105,7 +111,9 @@
105
111
  conversationProcessor ? identityKey(conversationProcessor) : 0,
106
112
  speechOnly,
107
113
  avatarId,
114
+ backdropId,
108
115
  locationId,
116
+ castSize,
109
117
  embedBaseUrl,
110
118
  debug
111
119
  ])
@@ -263,12 +271,17 @@
263
271
  subscribe(generation, session, 'characterSpeechEnded', (event) =>
264
272
  onCharacterSpeechEnded?.(event)
265
273
  );
274
+ subscribe(generation, session, 'characterFocusChanged', (event) =>
275
+ onCharacterFocusChanged?.(event)
276
+ );
266
277
  subscribe(generation, session, 'conversationUpdate', (event) =>
267
278
  onConversationUpdate?.(event)
268
279
  );
269
280
  subscribe(generation, session, 'message', (event) => onMessage?.(event));
270
281
  subscribe(generation, session, 'listeningState', (event) => onListeningState?.(event));
271
282
  subscribe(generation, session, 'activityChange', (event) => onActivityChange?.(event));
283
+ subscribe(generation, session, 'feedback', (event) => onFeedback?.(event));
284
+ subscribe(generation, session, 'feedbackFailed', (event) => onFeedbackFailed?.(event));
272
285
  subscribe(generation, session, 'conversationProcessorError', (event) =>
273
286
  onConversationProcessorError?.(event)
274
287
  );
@@ -288,6 +301,9 @@
288
301
  return {
289
302
  launch: launchToken,
290
303
  session: launchSessionSummary,
304
+ backdropId,
305
+ locationId,
306
+ avatarId,
291
307
  embedBaseUrl,
292
308
  debug,
293
309
  speechOnly,
@@ -302,8 +318,10 @@
302
318
  secondaryLocale,
303
319
  learningLocale,
304
320
  language,
321
+ backdropId,
305
322
  locationId,
306
323
  avatarId,
324
+ castSize,
307
325
  embedBaseUrl,
308
326
  debug,
309
327
  mode,
@@ -319,8 +337,10 @@
319
337
  secondaryLocale,
320
338
  learningLocale,
321
339
  language,
340
+ backdropId,
322
341
  locationId,
323
342
  avatarId,
343
+ castSize,
324
344
  embedBaseUrl,
325
345
  debug,
326
346
  mode,
@@ -358,6 +378,7 @@
358
378
  container,
359
379
  fit: untrack(() => fit),
360
380
  startButton: untrack(() => startButton),
381
+ showFeedback: untrack(() => showFeedback),
361
382
  closeButton: untrack(() => closeButton),
362
383
  returnUrl: untrack(() => returnUrl),
363
384
  showClose: Boolean(onClose || returnUrl?.trim() || closeButton),
@@ -455,6 +476,14 @@
455
476
  return activeGeneration?.instance?.getConversation() ?? [];
456
477
  }
457
478
 
479
+ export function focusCharacter(characterId: string): Promise<void> {
480
+ return withSession((session) => session.focusCharacter(characterId));
481
+ }
482
+
483
+ export function setFit(nextFit: NonNullable<ExperienceProps['fit']>): Promise<void> {
484
+ return withSession((session) => session.setFit(nextFit));
485
+ }
486
+
458
487
  export function end(): Promise<void> {
459
488
  return withSession((session) => session.end());
460
489
  }
@@ -502,6 +531,13 @@
502
531
 
503
532
  $effect(restartSession);
504
533
 
534
+ $effect(() => {
535
+ const nextFit = fit ?? 'full';
536
+ const session = untrack(() => activeGeneration?.instance ?? null);
537
+ if (!session) return;
538
+ void session.setFit(nextFit);
539
+ });
540
+
505
541
  $effect(() => {
506
542
  const container = errorHost;
507
543
  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.4",
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"