react-ai-avatar 0.1.0 → 0.1.1

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.
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Caption text helpers.
3
+ *
4
+ * An LLM reply is usually rich markdown — headings, bold, tables, lists. That
5
+ * reads fine in a chat transcript, but a *caption* under a talking face wants
6
+ * short, clean, spoken prose: the line being said right now, not the whole
7
+ * document with `**` and `| col |` showing through.
8
+ *
9
+ * These two pure helpers do exactly that, and nothing else (no React, no DOM):
10
+ * - `toPlainText` flattens markdown to readable text.
11
+ * - `tailWindow` keeps only the trailing slice, cut on a word/sentence boundary,
12
+ * so a caption tracks the end of a growing stream instead of overflowing.
13
+ *
14
+ * The library stays presentational: you bring the text, these shape it.
15
+ */
16
+ /**
17
+ * Flatten markdown / rich text to plain spoken prose.
18
+ *
19
+ * Drops table rows entirely (they don't read aloud), strips emphasis,
20
+ * heading, link and code syntax, and collapses whitespace. Tolerant of the
21
+ * *partial* markdown you get mid-stream (an unmatched `**`, a half-typed link).
22
+ */
23
+ export declare function toPlainText(input: string): string;
24
+ export interface TailWindowOptions {
25
+ /** Hard upper bound on returned length. Default 160. */
26
+ maxChars?: number;
27
+ }
28
+ /**
29
+ * Keep only the trailing window of `text`, so a caption tracks the end of a
30
+ * growing stream. Prefers to cut on a sentence boundary, falls back to a word
31
+ * boundary, and prefixes an ellipsis when text was dropped from the front.
32
+ */
33
+ export declare function tailWindow(text: string, options?: TailWindowOptions): string;
@@ -21,6 +21,10 @@ export { DICEBEAR_STYLES, DICEBEAR_STYLE_BY_ID, DICEBEAR_RIGS, DICEBEAR_FEATURED
21
21
  export type { DiceBearCollection, DiceBearStyleMeta, DiceBearRig, DiceBearFeaturedFace, DiceBearModules, } from './dicebear';
22
22
  export { AudioVisualizer } from '../components/AudioVisualizer';
23
23
  export type { AudioVisualizerProps } from '../components/AudioVisualizer';
24
+ export { AvatarCaption, AvatarThought } from '../components/AvatarCaption';
25
+ export type { AvatarCaptionProps, AvatarThoughtProps } from '../components/AvatarCaption';
26
+ export { toPlainText, tailWindow } from './captionText';
27
+ export type { TailWindowOptions } from './captionText';
24
28
  export { useAvatarRuntime } from './useAvatarRuntime';
25
29
  export type { AvatarRuntimeOptions } from './useAvatarRuntime';
26
30
  export { useAudioMouth } from './useAudioMouth';
@@ -1 +1 @@
1
- /*! tailwindcss v4.3.0 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial}}}@layer theme{:root,:host{--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-400:oklch(70.4% .191 22.216);--color-amber-400:oklch(82.8% .189 84.429);--color-emerald-500:oklch(69.6% .17 162.48);--color-purple-400:oklch(71.4% .203 305.504);--color-purple-500:oklch(62.7% .265 303.9);--color-zinc-100:oklch(96.7% .001 286.375);--color-zinc-200:oklch(92% .004 286.32);--color-zinc-300:oklch(87.1% .006 286.286);--color-zinc-400:oklch(70.5% .015 286.067);--color-zinc-500:oklch(55.2% .016 285.938);--color-zinc-800:oklch(27.4% .006 286.033);--color-zinc-900:oklch(21% .006 285.885);--color-zinc-950:oklch(14.1% .005 285.823);--color-white:#fff;--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--font-weight-medium:500;--font-weight-bold:700;--tracking-wider:.05em;--tracking-widest:.1em;--leading-relaxed:1.625;--radius-md:.375rem;--radius-xl:.75rem;--radius-2xl:1rem;--radius-3xl:1.5rem;--drop-shadow-2xl:0 25px 25px #00000026;--animate-spin:spin 1s linear infinite;--animate-ping:ping 1s cubic-bezier(0, 0, .2, 1) infinite;--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--blur-md:12px;--blur-xl:24px;--blur-2xl:40px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1)}}@layer base,components;@layer utilities{.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.inset-0{inset:calc(var(--spacing) * 0)}.top-\[115\%\]{top:115%}.-bottom-3{bottom:calc(var(--spacing) * -3)}.-bottom-6{bottom:calc(var(--spacing) * -6)}.-bottom-8{bottom:calc(var(--spacing) * -8)}.bottom-\[108\%\]{bottom:108%}.left-1\/2{left:50%}.left-\[47\%\]{left:47%}.left-\[48\%\]{left:48%}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.mb-1{margin-bottom:calc(var(--spacing) * 1)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-2{height:calc(var(--spacing) * 2)}.h-2\.5{height:calc(var(--spacing) * 2.5)}.h-4{height:calc(var(--spacing) * 4)}.h-8{height:calc(var(--spacing) * 8)}.h-10{height:calc(var(--spacing) * 10)}.h-full{height:100%}.w-1\.5{width:calc(var(--spacing) * 1.5)}.w-2{width:calc(var(--spacing) * 2)}.w-2\.5{width:calc(var(--spacing) * 2.5)}.w-4{width:calc(var(--spacing) * 4)}.w-8{width:calc(var(--spacing) * 8)}.w-10{width:calc(var(--spacing) * 10)}.w-\[90vw\]{width:90vw}.w-full{width:100%}.max-w-\[200px\]{max-width:200px}.max-w-\[220px\]{max-width:220px}.max-w-\[340px\]{max-width:340px}.max-w-\[500px\]{max-width:500px}.-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-ping{animation:var(--animate-ping)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-default{cursor:default}.resize{resize:both}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.overflow-hidden{overflow:hidden}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-3xl{border-radius:var(--radius-3xl)}.rounded-\[1\.75rem\]{border-radius:1.75rem}.rounded-full{border-radius:3.40282e38px}.rounded-md{border-radius:var(--radius-md)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-4{border-style:var(--tw-border-style);border-width:4px}.border-emerald-500\/20{border-color:#00bb7f33}@supports (color:color-mix(in lab,red,red)){.border-emerald-500\/20{border-color:color-mix(in oklab,var(--color-emerald-500) 20%,transparent)}}.border-purple-500\/10{border-color:#ac4bff1a}@supports (color:color-mix(in lab,red,red)){.border-purple-500\/10{border-color:color-mix(in oklab,var(--color-purple-500) 10%,transparent)}}.border-purple-500\/15{border-color:#ac4bff26}@supports (color:color-mix(in lab,red,red)){.border-purple-500\/15{border-color:color-mix(in oklab,var(--color-purple-500) 15%,transparent)}}.border-purple-500\/20{border-color:#ac4bff33}@supports (color:color-mix(in lab,red,red)){.border-purple-500\/20{border-color:color-mix(in oklab,var(--color-purple-500) 20%,transparent)}}.border-purple-500\/25{border-color:#ac4bff40}@supports (color:color-mix(in lab,red,red)){.border-purple-500\/25{border-color:color-mix(in oklab,var(--color-purple-500) 25%,transparent)}}.border-white\/10{border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.border-white\/10{border-color:color-mix(in oklab,var(--color-white) 10%,transparent)}}.border-zinc-800{border-color:var(--color-zinc-800)}.border-zinc-800\/40{border-color:#27272a66}@supports (color:color-mix(in lab,red,red)){.border-zinc-800\/40{border-color:color-mix(in oklab,var(--color-zinc-800) 40%,transparent)}}.border-t-emerald-500{border-top-color:var(--color-emerald-500)}.bg-purple-400{background-color:var(--color-purple-400)}.bg-white{background-color:var(--color-white)}.bg-zinc-800\/40{background-color:#27272a66}@supports (color:color-mix(in lab,red,red)){.bg-zinc-800\/40{background-color:color-mix(in oklab,var(--color-zinc-800) 40%,transparent)}}.bg-zinc-900{background-color:var(--color-zinc-900)}.bg-zinc-900\/90{background-color:#18181be6}@supports (color:color-mix(in lab,red,red)){.bg-zinc-900\/90{background-color:color-mix(in oklab,var(--color-zinc-900) 90%,transparent)}}.bg-zinc-950\/40{background-color:#09090b66}@supports (color:color-mix(in lab,red,red)){.bg-zinc-950\/40{background-color:color-mix(in oklab,var(--color-zinc-950) 40%,transparent)}}.bg-zinc-950\/80{background-color:#09090bcc}@supports (color:color-mix(in lab,red,red)){.bg-zinc-950\/80{background-color:color-mix(in oklab,var(--color-zinc-950) 80%,transparent)}}.bg-zinc-950\/90{background-color:#09090be6}@supports (color:color-mix(in lab,red,red)){.bg-zinc-950\/90{background-color:color-mix(in oklab,var(--color-zinc-950) 90%,transparent)}}.p-2{padding:calc(var(--spacing) * 2)}.p-4{padding:calc(var(--spacing) * 4)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-4{padding-block:calc(var(--spacing) * 4)}.pb-8{padding-bottom:calc(var(--spacing) * 8)}.text-center{text-align:center}.text-left{text-align:left}.font-mono{font-family:var(--font-mono)}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[10px\]{font-size:10px}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.text-amber-400{color:var(--color-amber-400)}.text-purple-400{color:var(--color-purple-400)}.text-red-400{color:var(--color-red-400)}.text-white{color:var(--color-white)}.text-zinc-100{color:var(--color-zinc-100)}.text-zinc-200{color:var(--color-zinc-200)}.text-zinc-300{color:var(--color-zinc-300)}.text-zinc-400{color:var(--color-zinc-400)}.text-zinc-500{color:var(--color-zinc-500)}.uppercase{text-transform:uppercase}.italic{font-style:italic}.opacity-50{opacity:.5}.opacity-75{opacity:.75}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_10px_30px_rgba\(139\,92\,246\,0\.15\)\]{--tw-shadow:0 10px 30px var(--tw-shadow-color,#8b5cf626);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur-2xl{--tw-blur:blur(var(--blur-2xl));filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.drop-shadow-2xl{--tw-drop-shadow-size:drop-shadow(0 25px 25px var(--tw-drop-shadow-color,#00000026));--tw-drop-shadow:drop-shadow(var(--drop-shadow-2xl));filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-blur-md{--tw-backdrop-blur:blur(var(--blur-md));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-blur-xl{--tw-backdrop-blur:blur(var(--blur-xl));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.select-none{-webkit-user-select:none;user-select:none}@media(min-width:48rem){.md\:max-w-\[420px\]{max-width:420px}.md\:max-w-\[640px\]{max-width:640px}.md\:text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}}.\[\&\>svg\]\:h-full>svg{height:100%}.\[\&\>svg\]\:w-full>svg{width:100%}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}@keyframes pulse{50%{opacity:.5}}
1
+ /*! tailwindcss v4.3.0 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial}}}@layer theme{:root,:host{--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-400:oklch(70.4% .191 22.216);--color-amber-400:oklch(82.8% .189 84.429);--color-emerald-500:oklch(69.6% .17 162.48);--color-purple-400:oklch(71.4% .203 305.504);--color-purple-500:oklch(62.7% .265 303.9);--color-zinc-100:oklch(96.7% .001 286.375);--color-zinc-200:oklch(92% .004 286.32);--color-zinc-300:oklch(87.1% .006 286.286);--color-zinc-400:oklch(70.5% .015 286.067);--color-zinc-500:oklch(55.2% .016 285.938);--color-zinc-700:oklch(37% .013 285.805);--color-zinc-800:oklch(27.4% .006 286.033);--color-zinc-900:oklch(21% .006 285.885);--color-zinc-950:oklch(14.1% .005 285.823);--color-white:#fff;--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--font-weight-medium:500;--font-weight-bold:700;--tracking-wider:.05em;--tracking-widest:.1em;--leading-relaxed:1.625;--radius-md:.375rem;--radius-xl:.75rem;--radius-2xl:1rem;--radius-3xl:1.5rem;--drop-shadow-2xl:0 25px 25px #00000026;--animate-spin:spin 1s linear infinite;--animate-ping:ping 1s cubic-bezier(0, 0, .2, 1) infinite;--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--blur-md:12px;--blur-xl:24px;--blur-2xl:40px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1)}}@layer base,components;@layer utilities{.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.inset-0{inset:calc(var(--spacing) * 0)}.top-\[115\%\]{top:115%}.-bottom-3{bottom:calc(var(--spacing) * -3)}.-bottom-6{bottom:calc(var(--spacing) * -6)}.-bottom-8{bottom:calc(var(--spacing) * -8)}.bottom-\[108\%\]{bottom:108%}.left-1\/2{left:50%}.left-\[47\%\]{left:47%}.left-\[48\%\]{left:48%}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.mb-1{margin-bottom:calc(var(--spacing) * 1)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-2{height:calc(var(--spacing) * 2)}.h-2\.5{height:calc(var(--spacing) * 2.5)}.h-4{height:calc(var(--spacing) * 4)}.h-8{height:calc(var(--spacing) * 8)}.h-10{height:calc(var(--spacing) * 10)}.h-full{height:100%}.w-1\.5{width:calc(var(--spacing) * 1.5)}.w-2{width:calc(var(--spacing) * 2)}.w-2\.5{width:calc(var(--spacing) * 2.5)}.w-4{width:calc(var(--spacing) * 4)}.w-8{width:calc(var(--spacing) * 8)}.w-10{width:calc(var(--spacing) * 10)}.w-\[90vw\]{width:90vw}.w-full{width:100%}.max-w-\[200px\]{max-width:200px}.max-w-\[220px\]{max-width:220px}.max-w-\[340px\]{max-width:340px}.max-w-\[420px\]{max-width:420px}.max-w-\[500px\]{max-width:500px}.max-w-\[640px\]{max-width:640px}.max-w-none{max-width:none}.-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-ping{animation:var(--animate-ping)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-default{cursor:default}.resize{resize:both}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.overflow-hidden{overflow:hidden}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-3xl{border-radius:var(--radius-3xl)}.rounded-\[1\.75rem\]{border-radius:1.75rem}.rounded-full{border-radius:3.40282e38px}.rounded-md{border-radius:var(--radius-md)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-4{border-style:var(--tw-border-style);border-width:4px}.border-emerald-500\/20{border-color:#00bb7f33}@supports (color:color-mix(in lab,red,red)){.border-emerald-500\/20{border-color:color-mix(in oklab,var(--color-emerald-500) 20%,transparent)}}.border-purple-500\/10{border-color:#ac4bff1a}@supports (color:color-mix(in lab,red,red)){.border-purple-500\/10{border-color:color-mix(in oklab,var(--color-purple-500) 10%,transparent)}}.border-purple-500\/15{border-color:#ac4bff26}@supports (color:color-mix(in lab,red,red)){.border-purple-500\/15{border-color:color-mix(in oklab,var(--color-purple-500) 15%,transparent)}}.border-purple-500\/20{border-color:#ac4bff33}@supports (color:color-mix(in lab,red,red)){.border-purple-500\/20{border-color:color-mix(in oklab,var(--color-purple-500) 20%,transparent)}}.border-purple-500\/25{border-color:#ac4bff40}@supports (color:color-mix(in lab,red,red)){.border-purple-500\/25{border-color:color-mix(in oklab,var(--color-purple-500) 25%,transparent)}}.border-white\/10{border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.border-white\/10{border-color:color-mix(in oklab,var(--color-white) 10%,transparent)}}.border-zinc-700\/40{border-color:#3f3f4666}@supports (color:color-mix(in lab,red,red)){.border-zinc-700\/40{border-color:color-mix(in oklab,var(--color-zinc-700) 40%,transparent)}}.border-zinc-800{border-color:var(--color-zinc-800)}.border-zinc-800\/40{border-color:#27272a66}@supports (color:color-mix(in lab,red,red)){.border-zinc-800\/40{border-color:color-mix(in oklab,var(--color-zinc-800) 40%,transparent)}}.border-t-emerald-500{border-top-color:var(--color-emerald-500)}.bg-purple-400{background-color:var(--color-purple-400)}.bg-white{background-color:var(--color-white)}.bg-zinc-800\/40{background-color:#27272a66}@supports (color:color-mix(in lab,red,red)){.bg-zinc-800\/40{background-color:color-mix(in oklab,var(--color-zinc-800) 40%,transparent)}}.bg-zinc-900{background-color:var(--color-zinc-900)}.bg-zinc-900\/90{background-color:#18181be6}@supports (color:color-mix(in lab,red,red)){.bg-zinc-900\/90{background-color:color-mix(in oklab,var(--color-zinc-900) 90%,transparent)}}.bg-zinc-950\/40{background-color:#09090b66}@supports (color:color-mix(in lab,red,red)){.bg-zinc-950\/40{background-color:color-mix(in oklab,var(--color-zinc-950) 40%,transparent)}}.bg-zinc-950\/80{background-color:#09090bcc}@supports (color:color-mix(in lab,red,red)){.bg-zinc-950\/80{background-color:color-mix(in oklab,var(--color-zinc-950) 80%,transparent)}}.bg-zinc-950\/90{background-color:#09090be6}@supports (color:color-mix(in lab,red,red)){.bg-zinc-950\/90{background-color:color-mix(in oklab,var(--color-zinc-950) 90%,transparent)}}.p-2{padding:calc(var(--spacing) * 2)}.p-4{padding:calc(var(--spacing) * 4)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.pb-8{padding-bottom:calc(var(--spacing) * 8)}.text-center{text-align:center}.text-left{text-align:left}.font-mono{font-family:var(--font-mono)}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[10px\]{font-size:10px}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.text-amber-400{color:var(--color-amber-400)}.text-purple-400{color:var(--color-purple-400)}.text-red-400{color:var(--color-red-400)}.text-white{color:var(--color-white)}.text-zinc-100{color:var(--color-zinc-100)}.text-zinc-200{color:var(--color-zinc-200)}.text-zinc-300{color:var(--color-zinc-300)}.text-zinc-400{color:var(--color-zinc-400)}.text-zinc-500{color:var(--color-zinc-500)}.uppercase{text-transform:uppercase}.italic{font-style:italic}.opacity-50{opacity:.5}.opacity-75{opacity:.75}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_10px_30px_rgba\(139\,92\,246\,0\.15\)\]{--tw-shadow:0 10px 30px var(--tw-shadow-color,#8b5cf626);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur-2xl{--tw-blur:blur(var(--blur-2xl));filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.drop-shadow-2xl{--tw-drop-shadow-size:drop-shadow(0 25px 25px var(--tw-drop-shadow-color,#00000026));--tw-drop-shadow:drop-shadow(var(--drop-shadow-2xl));filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-blur-md{--tw-backdrop-blur:blur(var(--blur-md));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-blur-xl{--tw-backdrop-blur:blur(var(--blur-xl));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.select-none{-webkit-user-select:none;user-select:none}@media(min-width:48rem){.md\:max-w-\[420px\]{max-width:420px}.md\:max-w-\[640px\]{max-width:640px}.md\:text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}}.\[\&\>svg\]\:h-full>svg{height:100%}.\[\&\>svg\]\:w-full>svg{width:100%}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}@keyframes pulse{50%{opacity:.5}}
package/dist/lib/vrm.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("./VrmAvatar-D_jr2TOG.cjs");exports.VrmAvatar=r.VrmAvatar;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("./VrmAvatar-g_9JGG0m.cjs");exports.VrmAvatar=r.VrmAvatar;
package/dist/lib/vrm.js CHANGED
@@ -1,4 +1,4 @@
1
- import { VrmAvatar as m } from "./VrmAvatar-CehRzj0J.js";
1
+ import { VrmAvatar as m } from "./VrmAvatar-Dw0gf27E.js";
2
2
  export {
3
3
  m as VrmAvatar
4
4
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-ai-avatar",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "A presentational React avatar for realtime LLM voice UIs — you bring the connection, it brings the face.",
5
5
  "license": "MIT",
6
6
  "author": "Ariel A. <ariel.a.deibe@gmail.com>",
@@ -51,10 +51,7 @@
51
51
  "dist/lib"
52
52
  ],
53
53
  "scripts": {
54
- "dev": "tsx server.ts",
55
- "build": "vite build && esbuild server.ts --bundle --platform=node --format=cjs --packages=external --sourcemap --outfile=dist/server.cjs",
56
54
  "build:lib": "vite build --config vite.config.lib.ts && tsc --project tsconfig.lib.json",
57
- "start": "node dist/server.cjs",
58
55
  "clean": "node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\"",
59
56
  "lint": "tsc --noEmit",
60
57
  "test": "vitest run",
@@ -98,30 +95,21 @@
98
95
  "devDependencies": {
99
96
  "@dicebear/collection": "^9.4.2",
100
97
  "@dicebear/core": "^9.4.2",
101
- "@google/genai": "^1.29.0",
102
98
  "@pixiv/three-vrm": "^3.5.3",
103
99
  "@react-three/drei": "^10.7.7",
104
100
  "@react-three/fiber": "^9.6.1",
105
101
  "@tailwindcss/vite": "^4.1.14",
106
- "@types/express": "^4.17.21",
107
102
  "@types/node": "^22.14.0",
108
103
  "@types/three": "^0.184.1",
109
- "@types/ws": "^8.18.1",
110
104
  "@vitejs/plugin-react": "^5.0.4",
111
105
  "autoprefixer": "^10.4.21",
112
- "dotenv": "^17.2.3",
113
- "esbuild": "^0.28.0",
114
- "express": "^4.21.2",
115
- "lucide-react": "^0.546.0",
116
106
  "motion": "^12.0.0",
117
107
  "react": "^19.0.0",
118
108
  "react-dom": "^19.0.0",
119
109
  "tailwindcss": "^4.1.14",
120
110
  "three": "^0.184.0",
121
- "tsx": "^4.21.0",
122
111
  "typescript": "~5.8.2",
123
112
  "vite": "^6.2.0",
124
- "vitest": "^3.2.6",
125
- "ws": "^8.21.0"
113
+ "vitest": "^3.2.6"
126
114
  }
127
115
  }
@@ -1 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("react/jsx-runtime"),n=require("react"),_=require("@react-three/fiber"),he=require("three/addons/loaders/GLTFLoader.js"),me=require("@react-three/drei"),de=require("three"),ae=require("./useReducedMotion-BRDEmRNI.cjs");function ge(l){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(l){for(const o in l)if(o!=="default"){const L=Object.getOwnPropertyDescriptor(l,o);Object.defineProperty(t,o,L.get?L:{enumerable:!0,get:()=>l[o]})}}return t.default=l,Object.freeze(t)}const Y=ge(de);class pe extends n.Component{constructor(t){super(t),this.state={hasError:!1}}static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(t){this.props.onError((t==null?void 0:t.message)||String(t))}render(){return this.state.hasError?null:this.props.children}}function xe(l){const t=new Map,o=c=>c.toLowerCase().replace(/[^a-z]/g,"");l.traverse(c=>{const f=c,h=f.morphTargetDictionary;if(!(!h||!f.morphTargetInfluences))for(const i of Object.keys(h)){const g=h[i],r=o(i);t.has(r)||t.set(r,[]),t.get(r).push({mesh:f,index:g})}});const L=c=>{const f=o(c);if(t.has(f))return t.get(f);const h=[];for(const[i,g]of t)i.endsWith(f)&&h.push(...g);return h},S=new Map;return{has(c){return this.entries(c).length>0},entries(c){return S.has(c)||S.set(c,L(c)),S.get(c)},set(c,f){const h=this.entries(c),i=Math.max(0,Math.min(1,f));for(const{mesh:g,index:r}of h)g.morphTargetInfluences[r]=i},names:Array.from(t.keys())}}function be({url:l,state:t,analyser:o,maxMouthOpening:L=30,mouseTrackingIntensity:S=1,blinkIntervalMin:c=2e3,blinkIntervalMax:f=6e3,blinkDuration:h=100,reducedMotion:i=!1,onLoaded:g}){const r=_.useLoader(he.GLTFLoader,l),{camera:a,controls:G}=_.useThree(),p=r.scene,e=n.useMemo(()=>xe(p),[p]);n.useEffect(()=>{var D;g(!0),console.log("[GLB] Model loaded. ARKit blendshapes found:",e.names),p.traverse(B=>{B.frustumCulled=!1});const y=new Y.Box3().setFromObject(p),k=new Y.Vector3,u=new Y.Vector3;y.getSize(k),y.getCenter(u);const w=y.max.y-k.y*.08,Z=Math.max(.45,k.y*.42);a.position.set(u.x,w,y.max.z+Z),a.lookAt(u.x,w,u.z),a.updateProjectionMatrix();const R=G;R!=null&&R.target&&(R.target.set(u.x,w,u.z),(D=R.update)==null||D.call(R))},[p,e,a,G,g]);const v=n.useRef(0),T=n.useRef(0),z=n.useRef(0),E=n.useRef(0),A=n.useRef(0),d=n.useRef(0),m=n.useRef(0),x=n.useRef(0),$=n.useRef(t),V=n.useRef(0),q=n.useRef(0),W=n.useRef(0),X=n.useRef(0),J=n.useRef(Math.random()*3+2),b=n.useRef(0),I=n.useRef(!1),K=n.useRef(null),ee=n.useRef(null);return _.useFrame((y,k)=>{var ue,oe;const u=Y.MathUtils.lerp,w=y.clock.elapsedTime;if(t!==$.current&&(t==="listening"&&!i&&(x.current=1),$.current==="speaking"&&t!=="speaking"&&!i&&(q.current=2),$.current=t),x.current=Math.max(0,x.current-k*2.5),q.current=Math.max(0,q.current-k),!i)if(!I.current)J.current-=k,J.current<=0&&(I.current=!0);else{const j=1e3/(h||100);b.current+=k*j*2,b.current>=1&&(b.current=1,I.current=!1,J.current=Math.random()*((f-c)/1e3)+c/1e3)}if(!I.current&&b.current>0){const j=1e3/(h||100);b.current-=k*j*2,b.current<0&&(b.current=0)}e.set("eyeBlinkLeft",b.current),e.set("eyeBlinkRight",b.current);const Z=((ue=y.pointer)==null?void 0:ue.x)??0,R=((oe=y.pointer)==null?void 0:oe.y)??0,D=i?0:S;let B=Z*D,Q=R*D;t==="thinking"?(B=-.5*(i?0:1),Q=.6*(i?0:1)):i||(B+=Math.sin(w*.23)*.12,Q+=Math.sin(w*.31+1.3)*.08),W.current=u(W.current,B,.1),X.current=u(X.current,Q,.1);const N=W.current,F=X.current;e.set("eyeLookOutRight",Math.max(0,N)),e.set("eyeLookInLeft",Math.max(0,N)),e.set("eyeLookOutLeft",Math.max(0,-N)),e.set("eyeLookInRight",Math.max(0,-N)),e.set("eyeLookUpLeft",Math.max(0,F)),e.set("eyeLookUpRight",Math.max(0,F)),e.set("eyeLookDownLeft",Math.max(0,-F)),e.set("eyeLookDownRight",Math.max(0,-F));let P=0,te=0,ne=0;t==="listening"?(P=.35,te=.25):t==="thinking"?ne=.45:t==="speaking"?P=.12:P=.05,q.current>0&&t!=="speaking"&&(P=Math.max(P,.55));const le=t==="thinking"&&!i?1:0;A.current=u(A.current,P,.1),d.current=u(d.current,te,.1),m.current=u(m.current,ne,.1),V.current=u(V.current,le,.08);const M=A.current,H=V.current;e.set("mouthSmileLeft",M),e.set("mouthSmileRight",M),e.set("browInnerUp",d.current),e.set("browDownLeft",m.current),e.set("browDownRight",m.current),e.set("cheekSquintLeft",M*.6),e.set("cheekSquintRight",M*.6),e.set("mouthDimpleLeft",M*.5),e.set("mouthDimpleRight",M*.5),e.set("eyeSquintLeft",Math.max(M*.35,H*.45)),e.set("eyeSquintRight",Math.max(M*.35,H*.45)),e.set("mouthPressLeft",H*.4),e.set("mouthPressRight",H*.4),e.set("eyeWideLeft",x.current*.7),e.set("eyeWideRight",x.current*.7),e.set("browOuterUpLeft",x.current*.6),e.set("browOuterUpRight",x.current*.6);let U=0,re=0,se=0,ce=0;if(t==="speaking"){(!K.current||ee.current!==o)&&(K.current=ae.createMouthEngine(o),ee.current=o);const j=K.current.read(),fe=L/30,O=j.level*fe;j.shape==="o"?(re=O*.85,se=O*.6,U=O*.35):j.shape==="e"?(ce=O*.7,U=O*.3):j.shape==="a"&&(U=O*.9)}v.current=u(v.current,U,.25),T.current=u(T.current,re,.25),z.current=u(z.current,se,.25),E.current=u(E.current,ce,.25),e.set("jawOpen",v.current),e.set("mouthFunnel",T.current),e.set("mouthPucker",z.current),e.set("mouthStretchLeft",E.current),e.set("mouthStretchRight",E.current);const C=i||t==="speaking"||t==="thinking"?0:1,ie=Math.sin(w*.4)*.06*C;e.set("mouthLeft",Math.max(0,ie)),e.set("mouthRight",Math.max(0,-ie)),e.set("mouthRollLower",(Math.sin(w*.33)*.5+.5)*.07*C),e.set("mouthShrugUpper",(Math.sin(w*.7)*.5+.5)*.06*C)}),s.jsx("primitive",{object:p})}function ke({state:l,analyser:t,size:o=300,className:L="",style:S,maxMouthOpening:c,blinkIntervalMin:f,blinkIntervalMax:h,blinkDuration:i,mouseTrackingIntensity:g,stateColors:r,glbUrl:a}){const[G,p]=n.useState(!1),[e,v]=n.useState(null),[T,z]=n.useState(!1),E=ae.useReducedMotion();n.useEffect(()=>{if(p(!1),v(null),z(!1),!a)return;let d=!1;return fetch(a).then(m=>{const x=m.headers.get("content-type")||"";if(!m.ok)throw new Error(`HTTP ${m.status} for ${a}`);if(x.includes("text/html"))throw new Error(`No .glb found at ${a} (server returned HTML).`);d||z(!0)}).catch(m=>{d||v((m==null?void 0:m.message)||String(m))}),()=>{d=!0}},[a]);const A={idle:(r==null?void 0:r.idle)??"#4b5563",listening:(r==null?void 0:r.listening)??"#3b82f6",thinking:(r==null?void 0:r.thinking)??"#8b5cf6",speaking:(r==null?void 0:r.speaking)??"#10b981",working:(r==null?void 0:r.working)??"#f59e0b"};return s.jsxs("div",{className:`relative flex items-center justify-center rounded-3xl overflow-hidden border border-zinc-800/40 bg-zinc-950/40 ${L}`,style:{width:o,height:o,...S},children:[s.jsxs(_.Canvas,{camera:{position:[0,1.5,1],fov:35},shadows:!0,gl:{antialias:!0,alpha:!0,preserveDrawingBuffer:!0},style:{width:"100%",height:"100%",background:"transparent"},children:[s.jsx("ambientLight",{intensity:1.5}),s.jsx("spotLight",{position:[0,3,2],angle:.6,penumbra:1,intensity:3,color:A[l],castShadow:!0}),s.jsx("directionalLight",{position:[-2,2,-2],intensity:1.8,color:"#ffffff"}),s.jsx("directionalLight",{position:[2,2,2],intensity:2.2,color:"#ffffff"}),s.jsx(pe,{onError:d=>v(d),children:a&&T&&s.jsx(n.Suspense,{fallback:null,children:s.jsx(be,{url:a,state:l,analyser:t,maxMouthOpening:c,mouseTrackingIntensity:g,blinkIntervalMin:f,blinkIntervalMax:h,blinkDuration:i,reducedMotion:E,onLoaded:d=>p(d)})})}),s.jsx(me.OrbitControls,{makeDefault:!0,enableZoom:!1,enablePan:!1,minPolarAngle:Math.PI/2.6,maxPolarAngle:Math.PI/1.7,minAzimuthAngle:-Math.PI/4,maxAzimuthAngle:Math.PI/4})]}),!a&&s.jsxs("div",{className:"absolute inset-0 flex flex-col items-center justify-center bg-zinc-950/90 backdrop-blur-md z-20 p-4 text-center",children:[s.jsx("span",{className:"text-xs font-mono font-bold text-amber-400 uppercase tracking-wider mb-2",children:"Missing glbUrl"}),s.jsx("p",{className:"text-[10px] text-zinc-500 max-w-[200px] leading-relaxed",children:"Pass a CORS-enabled .glb URL (with ARKit blendshapes) via the glbUrl prop."})]}),a&&!G&&!e&&s.jsxs("div",{className:"absolute inset-0 flex flex-col items-center justify-center bg-zinc-950/80 backdrop-blur-md z-20",children:[s.jsx("div",{className:"w-10 h-10 border-4 border-t-emerald-500 border-emerald-500/20 rounded-full animate-spin mb-3"}),s.jsx("span",{className:"text-[10px] font-mono font-bold tracking-widest text-zinc-400 animate-pulse",children:"LOADING GLB MODEL..."})]}),e&&s.jsxs("div",{className:"absolute inset-0 flex flex-col items-center justify-center bg-zinc-950/90 backdrop-blur-md z-20 p-4 text-center",children:[s.jsx("span",{className:"text-xs font-mono font-bold text-red-400 uppercase tracking-wider mb-2",children:"Failed to load GLB"}),s.jsx("p",{className:"text-[10px] text-zinc-500 max-w-[200px] leading-relaxed break-all",children:e})]})]})}exports.GlbArkitAvatar=ke;
@@ -1,232 +0,0 @@
1
- import { jsxs as I, jsx as o } from "react/jsx-runtime";
2
- import fe, { useState as ee, useEffect as le, Suspense as pe, useMemo as de, useRef as s } from "react";
3
- import { Canvas as ge, useLoader as xe, useThree as ke, useFrame as be } from "@react-three/fiber";
4
- import { GLTFLoader as we } from "three/addons/loaders/GLTFLoader.js";
5
- import { OrbitControls as Le } from "@react-three/drei";
6
- import * as H from "three";
7
- import { u as ye, c as Me } from "./useReducedMotion-BDcEizfP.js";
8
- class Re extends fe.Component {
9
- constructor(t) {
10
- super(t), this.state = { hasError: !1 };
11
- }
12
- static getDerivedStateFromError() {
13
- return { hasError: !0 };
14
- }
15
- componentDidCatch(t) {
16
- this.props.onError((t == null ? void 0 : t.message) || String(t));
17
- }
18
- render() {
19
- return this.state.hasError ? null : this.props.children;
20
- }
21
- }
22
- function ze(R) {
23
- const t = /* @__PURE__ */ new Map(), p = (r) => r.toLowerCase().replace(/[^a-z]/g, "");
24
- R.traverse((r) => {
25
- const u = r, l = u.morphTargetDictionary;
26
- if (!(!l || !u.morphTargetInfluences))
27
- for (const c of Object.keys(l)) {
28
- const f = l[c], n = p(c);
29
- t.has(n) || t.set(n, []), t.get(n).push({ mesh: u, index: f });
30
- }
31
- });
32
- const B = (r) => {
33
- const u = p(r);
34
- if (t.has(u)) return t.get(u);
35
- const l = [];
36
- for (const [c, f] of t)
37
- c.endsWith(u) && l.push(...f);
38
- return l;
39
- }, z = /* @__PURE__ */ new Map();
40
- return {
41
- has(r) {
42
- return this.entries(r).length > 0;
43
- },
44
- entries(r) {
45
- return z.has(r) || z.set(r, B(r)), z.get(r);
46
- },
47
- set(r, u) {
48
- const l = this.entries(r), c = Math.max(0, Math.min(1, u));
49
- for (const { mesh: f, index: n } of l)
50
- f.morphTargetInfluences[n] = c;
51
- },
52
- /** All normalized morph-target names found, for debugging. */
53
- names: Array.from(t.keys())
54
- };
55
- }
56
- function Se({
57
- url: R,
58
- state: t,
59
- analyser: p,
60
- maxMouthOpening: B = 30,
61
- mouseTrackingIntensity: z = 1,
62
- blinkIntervalMin: r = 2e3,
63
- blinkIntervalMax: u = 6e3,
64
- blinkDuration: l = 100,
65
- reducedMotion: c = !1,
66
- onLoaded: f
67
- }) {
68
- const n = xe(we, R), { camera: a, controls: O } = ke(), d = n.scene, e = de(() => ze(d), [d]);
69
- le(() => {
70
- var j;
71
- f(!0), console.log("[GLB] Model loaded. ARKit blendshapes found:", e.names), d.traverse((G) => {
72
- G.frustumCulled = !1;
73
- });
74
- const L = new H.Box3().setFromObject(d), k = new H.Vector3(), i = new H.Vector3();
75
- L.getSize(k), L.getCenter(i);
76
- const b = L.max.y - k.y * 0.08, Q = Math.max(0.45, k.y * 0.42);
77
- a.position.set(i.x, b, L.max.z + Q), a.lookAt(i.x, b, i.z), a.updateProjectionMatrix();
78
- const w = O;
79
- w != null && w.target && (w.target.set(i.x, b, i.z), (j = w.update) == null || j.call(w));
80
- }, [d, e, a, O, f]);
81
- const S = s(0), D = s(0), v = s(0), E = s(0), T = s(0), m = s(0), h = s(0), g = s(0), V = s(t), W = s(0), N = s(0), X = s(0), J = s(0), K = s(Math.random() * 3 + 2), x = s(0), F = s(!1), Z = s(null), te = s(null);
82
- return be((L, k) => {
83
- var ae, ue;
84
- const i = H.MathUtils.lerp, b = L.clock.elapsedTime;
85
- if (t !== V.current && (t === "listening" && !c && (g.current = 1), V.current === "speaking" && t !== "speaking" && !c && (N.current = 2), V.current = t), g.current = Math.max(0, g.current - k * 2.5), N.current = Math.max(0, N.current - k), !c)
86
- if (!F.current)
87
- K.current -= k, K.current <= 0 && (F.current = !0);
88
- else {
89
- const M = 1e3 / (l || 100);
90
- x.current += k * M * 2, x.current >= 1 && (x.current = 1, F.current = !1, K.current = Math.random() * ((u - r) / 1e3) + r / 1e3);
91
- }
92
- if (!F.current && x.current > 0) {
93
- const M = 1e3 / (l || 100);
94
- x.current -= k * M * 2, x.current < 0 && (x.current = 0);
95
- }
96
- e.set("eyeBlinkLeft", x.current), e.set("eyeBlinkRight", x.current);
97
- const Q = ((ae = L.pointer) == null ? void 0 : ae.x) ?? 0, w = ((ue = L.pointer) == null ? void 0 : ue.y) ?? 0, j = c ? 0 : z;
98
- let G = Q * j, _ = w * j;
99
- t === "thinking" ? (G = -0.5 * (c ? 0 : 1), _ = 0.6 * (c ? 0 : 1)) : c || (G += Math.sin(b * 0.23) * 0.12, _ += Math.sin(b * 0.31 + 1.3) * 0.08), X.current = i(X.current, G, 0.1), J.current = i(J.current, _, 0.1);
100
- const q = X.current, U = J.current;
101
- e.set("eyeLookOutRight", Math.max(0, q)), e.set("eyeLookInLeft", Math.max(0, q)), e.set("eyeLookOutLeft", Math.max(0, -q)), e.set("eyeLookInRight", Math.max(0, -q)), e.set("eyeLookUpLeft", Math.max(0, U)), e.set("eyeLookUpRight", Math.max(0, U)), e.set("eyeLookDownLeft", Math.max(0, -U)), e.set("eyeLookDownRight", Math.max(0, -U));
102
- let P = 0, ne = 0, re = 0;
103
- t === "listening" ? (P = 0.35, ne = 0.25) : t === "thinking" ? re = 0.45 : t === "speaking" ? P = 0.12 : P = 0.05, N.current > 0 && t !== "speaking" && (P = Math.max(P, 0.55));
104
- const he = t === "thinking" && !c ? 1 : 0;
105
- T.current = i(T.current, P, 0.1), m.current = i(m.current, ne, 0.1), h.current = i(h.current, re, 0.1), W.current = i(W.current, he, 0.08);
106
- const y = T.current, Y = W.current;
107
- e.set("mouthSmileLeft", y), e.set("mouthSmileRight", y), e.set("browInnerUp", m.current), e.set("browDownLeft", h.current), e.set("browDownRight", h.current), e.set("cheekSquintLeft", y * 0.6), e.set("cheekSquintRight", y * 0.6), e.set("mouthDimpleLeft", y * 0.5), e.set("mouthDimpleRight", y * 0.5), e.set("eyeSquintLeft", Math.max(y * 0.35, Y * 0.45)), e.set("eyeSquintRight", Math.max(y * 0.35, Y * 0.45)), e.set("mouthPressLeft", Y * 0.4), e.set("mouthPressRight", Y * 0.4), e.set("eyeWideLeft", g.current * 0.7), e.set("eyeWideRight", g.current * 0.7), e.set("browOuterUpLeft", g.current * 0.6), e.set("browOuterUpRight", g.current * 0.6);
108
- let $ = 0, ce = 0, se = 0, ie = 0;
109
- if (t === "speaking") {
110
- (!Z.current || te.current !== p) && (Z.current = Me(p), te.current = p);
111
- const M = Z.current.read(), me = B / 30, A = M.level * me;
112
- M.shape === "o" ? (ce = A * 0.85, se = A * 0.6, $ = A * 0.35) : M.shape === "e" ? (ie = A * 0.7, $ = A * 0.3) : M.shape === "a" && ($ = A * 0.9);
113
- }
114
- S.current = i(S.current, $, 0.25), D.current = i(D.current, ce, 0.25), v.current = i(v.current, se, 0.25), E.current = i(E.current, ie, 0.25), e.set("jawOpen", S.current), e.set("mouthFunnel", D.current), e.set("mouthPucker", v.current), e.set("mouthStretchLeft", E.current), e.set("mouthStretchRight", E.current);
115
- const C = c || t === "speaking" || t === "thinking" ? 0 : 1, oe = Math.sin(b * 0.4) * 0.06 * C;
116
- e.set("mouthLeft", Math.max(0, oe)), e.set("mouthRight", Math.max(0, -oe)), e.set("mouthRollLower", (Math.sin(b * 0.33) * 0.5 + 0.5) * 0.07 * C), e.set("mouthShrugUpper", (Math.sin(b * 0.7) * 0.5 + 0.5) * 0.06 * C);
117
- }), /* @__PURE__ */ o("primitive", { object: d });
118
- }
119
- function Te({
120
- state: R,
121
- analyser: t,
122
- size: p = 300,
123
- className: B = "",
124
- style: z,
125
- maxMouthOpening: r,
126
- blinkIntervalMin: u,
127
- blinkIntervalMax: l,
128
- blinkDuration: c,
129
- mouseTrackingIntensity: f,
130
- stateColors: n,
131
- glbUrl: a
132
- }) {
133
- const [O, d] = ee(!1), [e, S] = ee(null), [D, v] = ee(!1), E = ye();
134
- le(() => {
135
- if (d(!1), S(null), v(!1), !a) return;
136
- let m = !1;
137
- return fetch(a).then((h) => {
138
- const g = h.headers.get("content-type") || "";
139
- if (!h.ok) throw new Error(`HTTP ${h.status} for ${a}`);
140
- if (g.includes("text/html"))
141
- throw new Error(`No .glb found at ${a} (server returned HTML).`);
142
- m || v(!0);
143
- }).catch((h) => {
144
- m || S((h == null ? void 0 : h.message) || String(h));
145
- }), () => {
146
- m = !0;
147
- };
148
- }, [a]);
149
- const T = {
150
- idle: (n == null ? void 0 : n.idle) ?? "#4b5563",
151
- listening: (n == null ? void 0 : n.listening) ?? "#3b82f6",
152
- thinking: (n == null ? void 0 : n.thinking) ?? "#8b5cf6",
153
- speaking: (n == null ? void 0 : n.speaking) ?? "#10b981",
154
- working: (n == null ? void 0 : n.working) ?? "#f59e0b"
155
- };
156
- return /* @__PURE__ */ I(
157
- "div",
158
- {
159
- className: `relative flex items-center justify-center rounded-3xl overflow-hidden border border-zinc-800/40 bg-zinc-950/40 ${B}`,
160
- style: { width: p, height: p, ...z },
161
- children: [
162
- /* @__PURE__ */ I(
163
- ge,
164
- {
165
- camera: { position: [0, 1.5, 1], fov: 35 },
166
- shadows: !0,
167
- gl: { antialias: !0, alpha: !0, preserveDrawingBuffer: !0 },
168
- style: { width: "100%", height: "100%", background: "transparent" },
169
- children: [
170
- /* @__PURE__ */ o("ambientLight", { intensity: 1.5 }),
171
- /* @__PURE__ */ o(
172
- "spotLight",
173
- {
174
- position: [0, 3, 2],
175
- angle: 0.6,
176
- penumbra: 1,
177
- intensity: 3,
178
- color: T[R],
179
- castShadow: !0
180
- }
181
- ),
182
- /* @__PURE__ */ o("directionalLight", { position: [-2, 2, -2], intensity: 1.8, color: "#ffffff" }),
183
- /* @__PURE__ */ o("directionalLight", { position: [2, 2, 2], intensity: 2.2, color: "#ffffff" }),
184
- /* @__PURE__ */ o(Re, { onError: (m) => S(m), children: a && D && /* @__PURE__ */ o(pe, { fallback: null, children: /* @__PURE__ */ o(
185
- Se,
186
- {
187
- url: a,
188
- state: R,
189
- analyser: t,
190
- maxMouthOpening: r,
191
- mouseTrackingIntensity: f,
192
- blinkIntervalMin: u,
193
- blinkIntervalMax: l,
194
- blinkDuration: c,
195
- reducedMotion: E,
196
- onLoaded: (m) => d(m)
197
- }
198
- ) }) }),
199
- /* @__PURE__ */ o(
200
- Le,
201
- {
202
- makeDefault: !0,
203
- enableZoom: !1,
204
- enablePan: !1,
205
- minPolarAngle: Math.PI / 2.6,
206
- maxPolarAngle: Math.PI / 1.7,
207
- minAzimuthAngle: -Math.PI / 4,
208
- maxAzimuthAngle: Math.PI / 4
209
- }
210
- )
211
- ]
212
- }
213
- ),
214
- !a && /* @__PURE__ */ I("div", { className: "absolute inset-0 flex flex-col items-center justify-center bg-zinc-950/90 backdrop-blur-md z-20 p-4 text-center", children: [
215
- /* @__PURE__ */ o("span", { className: "text-xs font-mono font-bold text-amber-400 uppercase tracking-wider mb-2", children: "Missing glbUrl" }),
216
- /* @__PURE__ */ o("p", { className: "text-[10px] text-zinc-500 max-w-[200px] leading-relaxed", children: "Pass a CORS-enabled .glb URL (with ARKit blendshapes) via the glbUrl prop." })
217
- ] }),
218
- a && !O && !e && /* @__PURE__ */ I("div", { className: "absolute inset-0 flex flex-col items-center justify-center bg-zinc-950/80 backdrop-blur-md z-20", children: [
219
- /* @__PURE__ */ o("div", { className: "w-10 h-10 border-4 border-t-emerald-500 border-emerald-500/20 rounded-full animate-spin mb-3" }),
220
- /* @__PURE__ */ o("span", { className: "text-[10px] font-mono font-bold tracking-widest text-zinc-400 animate-pulse", children: "LOADING GLB MODEL..." })
221
- ] }),
222
- e && /* @__PURE__ */ I("div", { className: "absolute inset-0 flex flex-col items-center justify-center bg-zinc-950/90 backdrop-blur-md z-20 p-4 text-center", children: [
223
- /* @__PURE__ */ o("span", { className: "text-xs font-mono font-bold text-red-400 uppercase tracking-wider mb-2", children: "Failed to load GLB" }),
224
- /* @__PURE__ */ o("p", { className: "text-[10px] text-zinc-500 max-w-[200px] leading-relaxed break-all", children: e })
225
- ] })
226
- ]
227
- }
228
- );
229
- }
230
- export {
231
- Te as GlbArkitAvatar
232
- };