@ensembleapp/client-sdk 0.0.56 → 0.0.57

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.
@@ -651,3 +651,114 @@
651
651
  .chat-widget__collapsed--animating .chat-widget__collapsed-preview {
652
652
  animation: chat-widget-slide-up 300ms ease-out forwards;
653
653
  }
654
+
655
+ .chat-widget .chat-widget__voice { display: flex; flex-direction: column; min-height: 0; min-width: 0; border-bottom: 1px solid var(--chat-border); }
656
+
657
+ .chat-widget .chat-widget__avatar-stage { display: block; position: relative; flex: 1; min-height: 0; min-width: 0; overflow: hidden; background: #080c14; }
658
+ .chat-widget .chat-widget__avatar-stage video { display: block; position: absolute; inset: 0; width: 100%; height: 100%; max-width: none; max-height: none; object-fit: cover; }
659
+ .chat-widget .chat-widget__avatar-stage audio { display: none; }
660
+ .chat-widget .chat-widget__call-footer { display: flex; flex-direction: column; flex: 0 0 auto; gap: 8px; padding: 16px; margin-top: auto; border-top: 1px solid var(--chat-border); }
661
+ .chat-widget .chat-widget__call-controls { display: flex; align-items: center; justify-content: center; flex-wrap: wrap; gap: 10px; }
662
+ .chat-widget .chat-widget__call-controls > [role="status"] { flex-basis: 100%; text-align: center; font-size: 12px; color: var(--chat-text-muted); }
663
+ .chat-widget .chat-widget__call-controls button { flex: 0 0 auto; padding: 8px 12px; border: 1px solid var(--chat-border); border-radius: 8px; white-space: nowrap; cursor: pointer; }
664
+ .chat-widget .chat-widget__call-controls button:disabled { opacity: 0.5; }
665
+ .chat-widget .chat-widget__call-controls button:hover { background: var(--chat-border); }
666
+
667
+ .chat-widget .chat-widget__voice { position: relative; }
668
+ .chat-widget--avatar .chat-widget__call-footer {
669
+ position: absolute;
670
+ left: 0; right: 0; bottom: 0;
671
+ border-top: 0;
672
+ color: #fff;
673
+ background: linear-gradient(transparent, rgba(0,0,0,.8));
674
+ padding-top: 48px;
675
+ z-index: 1;
676
+ }
677
+ .chat-widget--avatar .chat-widget__call-controls button {
678
+ color: #fff; background: rgba(15,23,42,.75); border-color: rgba(255,255,255,.3);
679
+ backdrop-filter: blur(8px);
680
+ }
681
+ .chat-widget--avatar .chat-widget__call-controls > [role="status"] { color: #fff; }
682
+ /* Voice opens beside the existing chat without changing its dimensions. */
683
+ .chat-widget--avatar { overflow: visible; }
684
+ .chat-widget--avatar > .chat-widget__voice {
685
+ position: absolute;
686
+ top: 0;
687
+ bottom: 0;
688
+ right: calc(100% + 12px);
689
+ width: clamp(240px, calc(100vw - 100% - 52px), 520px);
690
+ border: 1px solid var(--chat-border);
691
+ border-radius: var(--chat-radius);
692
+ overflow: hidden;
693
+ background: var(--chat-background);
694
+ }
695
+ .chat-widget .chat-widget__connect-voice {
696
+ display: inline-flex;
697
+ align-items: center;
698
+ justify-content: center;
699
+ width: 32px;
700
+ height: 32px;
701
+ padding: 4px;
702
+ border: 0;
703
+ background: transparent;
704
+ color: var(--chat-primary);
705
+ cursor: pointer;
706
+ }
707
+ .chat-widget .chat-widget__connect-voice:disabled { opacity: .5; cursor: default; }
708
+ @media (max-width: 800px) {
709
+ .chat-widget--avatar > .chat-widget__voice {
710
+ position: fixed;
711
+ inset: 20px;
712
+ width: auto;
713
+ z-index: 20;
714
+ }
715
+ }
716
+
717
+ /* The connected voice view replaces only the presentation, not the chat session. */
718
+ .chat-widget .chat-widget__voice-view { display: grid; flex: 1; min-height: 0; grid-template-rows: minmax(0, 1fr) minmax(0, 0fr); overflow: hidden; transition: grid-template-rows 320ms ease; }
719
+ .chat-widget .chat-widget__voice-view:fullscreen { width: 100%; height: 100%; background: var(--chat-background); color: var(--chat-text); }
720
+ .chat-widget .chat-widget__voice-fullscreen { position: absolute; top: 12px; right: 12px; z-index: 2; display: grid; place-items: center; width: 40px; height: 40px; padding: 0; border: 1px solid rgba(255,255,255,.3); border-radius: 10px; background: rgba(15,23,42,.75); color: #fff; cursor: pointer; }
721
+ .chat-widget .chat-widget__voice-fullscreen:hover { background: rgba(15,23,42,.95); }
722
+ .chat-widget .chat-widget__voice-fullscreen:focus-visible { outline: 2px solid #67e8f9; outline-offset: 2px; }
723
+ .chat-widget .chat-widget__voice-view[hidden] { display: none; }
724
+ .chat-widget .chat-widget__voice-scene { position: relative; flex: 1; min-height: 0; background: #080c14; }
725
+ .chat-widget .chat-widget__voice-scene > .chat-widget__avatar-stage { position: absolute; inset: 0; }
726
+ .chat-widget .chat-widget__voice-overlay { position: absolute; bottom: 0; left: 0; right: 0; z-index: 1; padding-top: 32px; background: linear-gradient(transparent, rgba(0,0,0,.8)); color: #fff; }
727
+ .chat-widget .chat-widget__voice-overlay .chat-widget__call-footer { border: 0; padding: 10px; margin: 0; }
728
+ .chat-widget .chat-widget__voice-overlay button { color: #fff; background: rgba(15,23,42,.75); }
729
+ .chat-widget .chat-widget__voice-overlay [role="status"] { color: #fff; }
730
+ .chat-widget .chat-widget__subtitles { position: relative; font-size: 16px; line-height: 24px; max-height: 48px; width: calc(100% - 48px); max-width: 640px; overflow: hidden; margin: 0 auto 8px; text-align: center; white-space: pre-wrap; overflow-wrap: anywhere; }
731
+ .chat-widget .chat-widget__subtitle-current { color: #67e8f9; }
732
+ .chat-widget .chat-widget__voice-view--content { grid-template-rows: minmax(0, .48fr) minmax(0, .52fr); }
733
+ .chat-widget .chat-widget__voice-view--content .chat-widget__avatar-stage video { object-fit: contain; }
734
+ .chat-widget .chat-widget__voice-content-wrap { min-height: 0; overflow: hidden; opacity: 0; transform: translateY(16px); transition: opacity 250ms ease, transform 320ms ease; }
735
+ .chat-widget .chat-widget__voice-view--content .chat-widget__voice-content-wrap { opacity: 1; transform: translateY(0); }
736
+ .chat-widget .chat-widget__voice-content { position: relative; height: 100%; box-sizing: border-box; overflow: auto; padding: 24px; border-top: 1px solid var(--chat-border); }
737
+ .chat-widget .chat-widget__dismiss-content { position: absolute; top: 8px; right: 8px; display: grid; place-items: center; padding: 6px; border-radius: 50%; color: var(--chat-text-secondary); background: var(--chat-background-secondary); cursor: pointer; z-index: 1; }
738
+ .chat-widget .chat-widget__table-card { min-width: 0; }
739
+ .chat-widget .chat-widget__table-card h3 { margin: 0 24px 16px 0; font-size: 1.1em; font-weight: 600; }
740
+ .chat-widget .chat-widget__table-scroll { overflow-x: auto; }
741
+ .chat-widget .chat-widget__table-card table { width: 100%; border-collapse: collapse; text-align: left; }
742
+ .chat-widget .chat-widget__table-card th, .chat-widget .chat-widget__table-card td { padding: 10px 12px; border: 1px solid var(--chat-border); vertical-align: top; }
743
+ .chat-widget .chat-widget__table-card th { background: var(--chat-background-secondary); font-weight: 600; }
744
+ .chat-widget .chat-widget__voice-content .chat-widget__table-card { font-size: 18px; line-height: 1.5; }
745
+ .chat-widget .chat-widget__voice-content .chat-widget__table-card th, .chat-widget .chat-widget__voice-content .chat-widget__table-card td { padding: 14px 16px; }
746
+ @media (prefers-reduced-motion: reduce) {
747
+ .chat-widget .chat-widget__voice-view, .chat-widget .chat-widget__voice-content-wrap { transition: none; transform: none; }
748
+ }
749
+
750
+ /* shadcn/Recharts widgets use SDK theme tokens without requiring host Tailwind styles. */
751
+ .chat-widget .chat-widget__chart-card { margin: 0; min-width: 0; }
752
+ .chat-widget .chat-widget__chart-card h3 { margin: 0 24px 8px 0; font-size: 1.1em; font-weight: 600; }
753
+ .chat-widget .chat-widget__chart-card figcaption p { margin: 4px 0; color: var(--chat-text-secondary); font-size: 14px; }
754
+ .chat-widget .chat-widget__chart { margin-top: 12px; }
755
+ .chat-widget .chat-widget__chart svg:focus-visible { outline: 2px solid var(--chat-primary); }
756
+ .chat-widget .chat-widget__chart-tooltip { padding: 10px 12px; background: var(--chat-background); color: var(--chat-text); border: 1px solid var(--chat-border); border-radius: 8px; box-shadow: 0 4px 12px #0003; font-size: 13px; }
757
+ .chat-widget .chat-widget__chart-tooltip > div { display: grid; gap: 6px; }
758
+ .chat-widget .chat-widget__chart-legend { display: flex; flex-wrap: wrap; justify-content: center; gap: 8px 16px; margin-top: 8px; font-size: 13px; }
759
+ .chat-widget .chat-widget__chart-legend span { display: inline-flex; align-items: center; gap: 6px; }
760
+ .chat-widget .chat-widget__chart-legend i { display: inline-block; width: 10px; height: 10px; border-radius: 2px; }
761
+ .chat-widget .chat-widget__chart-data { margin-top: 12px; font-size: 14px; }
762
+ .chat-widget .chat-widget__chart-data summary { cursor: pointer; color: var(--chat-text-secondary); }
763
+ .chat-widget .chat-widget__chart-data table { width: 100%; border-collapse: collapse; margin-top: 8px; }
764
+ .chat-widget .chat-widget__chart-data th, .chat-widget .chat-widget__chart-data td { padding: 8px 12px; border: 1px solid var(--chat-border); text-align: left; }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ensembleapp/client-sdk",
3
- "version": "0.0.56",
3
+ "version": "0.0.57",
4
4
  "description": "React client SDK for chat functionality",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -40,11 +40,13 @@
40
40
  "dependencies": {
41
41
  "@ai-sdk/provider-utils": "^4.0.19",
42
42
  "@ai-sdk/react": "^3.0.41",
43
+ "@livekit/components-react": "^2.9.24",
43
44
  "camelcase-css": "^2.0.1",
44
45
  "clsx": "^2.1.1",
45
46
  "didyoumean": "^1.2.2",
46
47
  "dlv": "^1.1.3",
47
48
  "fast-glob": "^3.3.3",
49
+ "livekit-client": "^2.22.4",
48
50
  "lucide-react": "^0.553.0",
49
51
  "micromatch": "^4.0.8",
50
52
  "object-hash": "^3.0.0",
@@ -52,6 +54,7 @@
52
54
  "postcss-import": "^15.1.0",
53
55
  "postcss-nested": "^6.2.0",
54
56
  "react-markdown": "^10.1.0",
57
+ "recharts": "^2.15.4",
55
58
  "remark-gfm": "^4.0.1",
56
59
  "tailwind-merge": "^2.5.4",
57
60
  "zod": "^4.0.4"
@@ -59,6 +62,7 @@
59
62
  "devDependencies": {
60
63
  "@repo/agent-sdk": "workspace:*",
61
64
  "@repo/eslint-config": "workspace:*",
65
+ "@repo/ui": "workspace:*",
62
66
  "@types/jest": "^30.0.0",
63
67
  "@types/minimatch": "^6.0.0",
64
68
  "@types/object-hash": "^3.0.6",
@@ -73,7 +77,8 @@
73
77
  "tailwindcss": "^3.4.14",
74
78
  "ts-jest": "^29.4.11",
75
79
  "tsup": "^8.3.5",
76
- "typescript": "^5.8.2"
80
+ "typescript": "^5.8.2",
81
+ "@repo/shared-common": "workspace:*"
77
82
  },
78
83
  "publishConfig": {
79
84
  "access": "public"