@livelayer/react 0.10.0 → 0.10.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/styles.css CHANGED
@@ -121,7 +121,18 @@
121
121
  ancestor (translateZ, scale, etc.) capture the fixed chrome and
122
122
  pin it to the slot rather than the viewport edge — that's what
123
123
  made the side-tab and audio-waveform pill unreachable in EMBEDDED
124
- pre-0.10.0. The .ll-widget base rules above apply unchanged. */
124
+ pre-0.10.0. The .ll-widget base rules above apply unchanged.
125
+
126
+ The position rules INSIDE this container (HiddenLayout's
127
+ `position: fixed` on the side-tab) follow normal containing-block
128
+ rules: when the consumer scopes the portal to a specific element
129
+ via `floatingChromeContainer` (a fork-demo card, for example),
130
+ that element's `position: relative` becomes the containing block
131
+ if the chrome's positioning is `absolute` rather than `fixed`. We
132
+ leave HiddenLayout / MinimizedLayout's existing `position: fixed`
133
+ alone — consumers who pass a scoped container should mark it with
134
+ `transform: translateZ(0)` so `position: fixed` descendants
135
+ capture to the container instead of the viewport. */
125
136
  .ll-widget--floating {
126
137
  position: fixed;
127
138
  pointer-events: none;
@@ -267,6 +278,19 @@
267
278
  height: 80px;
268
279
  }
269
280
 
281
+ /* Scoped variant — used when the package portals the tab to a host
282
+ container instead of document.body (e.g. a fork-demo card on a
283
+ marketing page). Drag-to-reposition is disabled in scoped mode
284
+ because a 260px-tall card has no room for it; the cursor reflects
285
+ that. CSS centering (top:50%/translateY(-50%)) handles vertical
286
+ placement against the container's bounds. */
287
+ .ll-widget .ll-hidden--scoped {
288
+ cursor: pointer;
289
+ }
290
+ .ll-widget .ll-hidden--scoped.is-dragging {
291
+ cursor: pointer;
292
+ }
293
+
270
294
  .ll-widget .ll-hidden__chevron {
271
295
  /* Centered visually inside the tab. The SVG's stroke handles color;
272
296
  `display: block` prevents any baseline gap that would offset the
@@ -1040,19 +1064,22 @@
1040
1064
  }
1041
1065
 
1042
1066
  /* Captions affordance for deaf-friendly UX: when the latest transcript
1043
- line is the AGENT's spoken output, tint the pill ORANGE so it reads
1044
- unambiguously as "this text is coming from Live Layer." The user's
1045
- STT pill keeps default dark styling so the two voices contrast
1046
- immediately at a glance. Previous opacity (0.18) was so faint
1047
- testers couldn't tell the agent line was differentiated at all —
1048
- now the pill is brand-orange, with a saturated glow + warm white
1049
- text on the colored background. */
1067
+ line is the AGENT's spoken output, render the pill in fully-saturated
1068
+ brand orange with crisp white text. The user's STT pill keeps the
1069
+ default dark styling so the two voices contrast immediately at a
1070
+ glance. Pre-0.10.1 the orange was rendered as a soft tint over a
1071
+ semi-transparent black backdrop, which compressed the color into
1072
+ a muddy brown the user couldn't see "the agent is talking" at
1073
+ all. Now: solid #e06540 background, white 500-weight text, no
1074
+ blur (removed the dark backdrop-filter that was washing it out). */
1050
1075
  .ll-expanded__transcript--agent {
1051
- background: rgba(224, 101, 64, 0.85);
1052
- border-color: rgba(255, 175, 110, 0.6);
1076
+ background: #e06540;
1077
+ border-color: rgba(255, 200, 160, 0.55);
1078
+ -webkit-backdrop-filter: none;
1079
+ backdrop-filter: none;
1053
1080
  box-shadow:
1054
- 0 0 24px rgba(224, 101, 64, 0.4),
1055
- inset 0 0 0 1px rgba(255, 200, 160, 0.25);
1081
+ 0 0 28px rgba(224, 101, 64, 0.5),
1082
+ inset 0 0 0 1px rgba(255, 215, 180, 0.3);
1056
1083
  }
1057
1084
 
1058
1085
  .ll-expanded__transcript--agent .ll-expanded__transcript-text {
@@ -1084,8 +1111,13 @@
1084
1111
  display: flex;
1085
1112
  align-items: center;
1086
1113
  justify-content: center;
1087
- gap: 4px;
1088
- flex-wrap: wrap;
1114
+ gap: 2px;
1115
+ /* Toolbar must stay on one line. Wrapping produces a "4 buttons +
1116
+ red end-call below" layout in narrow slots (280px-wide marketing
1117
+ dock) — visually broken. Tight gap + slim split paddings below
1118
+ fit screen / camera-split / mic-split / speaker / end-call in
1119
+ ~250px of usable width. */
1120
+ flex-wrap: nowrap;
1089
1121
  }
1090
1122
 
1091
1123
  .ll-tool {
@@ -1164,14 +1196,14 @@
1164
1196
  }
1165
1197
 
1166
1198
  .ll-tool-split .ll-tool--left {
1167
- padding-left: 14px;
1168
- padding-right: 4px;
1199
+ padding-left: 10px;
1200
+ padding-right: 2px;
1169
1201
  width: auto;
1170
1202
  }
1171
1203
 
1172
1204
  .ll-tool-split .ll-tool--right {
1173
- padding-left: 4px;
1174
- padding-right: 10px;
1205
+ padding-left: 2px;
1206
+ padding-right: 8px;
1175
1207
  width: auto;
1176
1208
  color: rgba(255, 255, 255, 0.7);
1177
1209
  }
@@ -1189,6 +1221,14 @@
1189
1221
  /* ── Device selection menu (mic / camera) ───────────────── */
1190
1222
 
1191
1223
  .ll-device-menu {
1224
+ /* Default = absolute (used inline within toolbar split). The
1225
+ ll-device-menu--floating modifier below overrides for the
1226
+ portaled variant rendered to document.body. The inline form
1227
+ was getting clipped by .ll-tool-split's overflow:hidden, which
1228
+ is why chevron clicks looked like no-ops — that's why
1229
+ ExpandedLayout now portals the menu by default. Keep the inline
1230
+ styles for backwards compatibility with consumers calling
1231
+ DeviceMenu directly. */
1192
1232
  position: absolute;
1193
1233
  bottom: calc(100% + 8px);
1194
1234
  left: 50%;
@@ -1207,6 +1247,18 @@
1207
1247
  gap: 2px;
1208
1248
  }
1209
1249
 
1250
+ /* Portaled variant: rendered to document.body so it escapes any
1251
+ ancestor overflow:hidden / transform context. Position is set
1252
+ inline via getBoundingClientRect; reset the static defaults so
1253
+ they don't fight the inline styles. z-index matches the rest of
1254
+ the floating chrome (max-int) so we win over consumer overlays. */
1255
+ .ll-device-menu--floating {
1256
+ position: fixed;
1257
+ bottom: auto;
1258
+ left: auto;
1259
+ z-index: 2147483647;
1260
+ }
1261
+
1210
1262
  .ll-device-menu__label {
1211
1263
  margin: 0;
1212
1264
  padding: 6px 10px 4px;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@livelayer/react",
3
- "version": "0.10.0",
3
+ "version": "0.10.2",
4
4
  "description": "LiveLayer agent widget for React — avatar video, team switching, responsive layouts, full-fidelity embed",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",