@tangle-network/agent-app 0.45.46 → 0.45.47

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.
@@ -238,6 +238,40 @@
238
238
  --motion-surface: var(--duration-base) var(--ease-entrance);
239
239
  --motion-dismiss: var(--duration-instant) var(--ease-exit);
240
240
 
241
+ /* ── Entrance choreography ───────────────────────────────────────────────
242
+ The durations above answer "how fast does an existing thing change".
243
+ These answer "how does a thing that was not there ARRIVE", which is most
244
+ of what an agent surface does: text streams in, rows appear as work
245
+ completes, a trace expands, a pending label waits.
246
+
247
+ Shipping the ladder without these is why this package had FOUR durations,
248
+ THREE curves, and ZERO keyframes on `/web-react` — every arrival was a
249
+ pop, which reads as cheap no matter how correct the colours are.
250
+
251
+ `--motion-stream` is longer than `base` on purpose: streamed text arrives
252
+ continuously, so each chunk overlaps its neighbours and a fast curve makes
253
+ the paragraph flicker. `--motion-arrive` is the row/card entrance and is
254
+ meant to be staggered by index (see `--stagger-step`). */
255
+ --duration-stream: 420ms;
256
+ --duration-arrive: 600ms;
257
+ --ease-expo: cubic-bezier(0.23, 1, 0.32, 1);
258
+ --motion-stream: var(--duration-stream) var(--ease-expo);
259
+ --motion-arrive: var(--duration-arrive) var(--ease-expo);
260
+ /* Per-item delay in a staggered group. 5 items = 200ms tail, which stays
261
+ under the 250ms an interface can add before it reads as latency. */
262
+ --stagger-step: 50ms;
263
+ /* Position in a staggered group, overridden PER ELEMENT by the caller. It is
264
+ declared here with a zero default rather than read through a `var()`
265
+ fallback so the file never references a token it does not define — an
266
+ undefined `var()` resolves to nothing and paints silently, which is the
267
+ failure the token contract exists to catch. */
268
+ --stagger-index: 0;
269
+ /* How far an arriving surface travels, and how far a streamed chunk resolves
270
+ from. Both are small: motion that announces itself is motion you notice
271
+ twice. */
272
+ --arrive-distance: 8px;
273
+ --stream-blur: 4px;
274
+
241
275
  /* ── Border tiers ────────────────────────────────────────────────────────
242
276
  Three strengths of the SAME border colour, because a divider inside a
243
277
  panel and the edge of a card floated on the page are not the same line,
@@ -389,6 +423,140 @@
389
423
  --shadow-overlay: 0 2px 6px hsl(var(--foreground) / 0.12), 0 16px 40px hsl(var(--foreground) / 0.2);
390
424
  }
391
425
 
426
+ /**
427
+ * Entrance keyframes and the classes that ride them.
428
+ *
429
+ * They live in this file, not in a component, because a product already
430
+ * imports this stylesheet and because a keyframe defined inside a bundled
431
+ * component is a keyframe a precompiled consumer does not get — the same gap
432
+ * that shipped a picker with no text tier.
433
+ *
434
+ * Every duration below is a TOKEN, which is what makes the reduced-motion
435
+ * block underneath cover them without a second media query.
436
+ */
437
+
438
+ /* Streamed text: each chunk resolves out of a small blur instead of popping
439
+ in. This is the single most visible difference between a chat that feels
440
+ alive and one that feels like a log being appended to. */
441
+ @keyframes agent-stream-in {
442
+ from {
443
+ opacity: 0;
444
+ filter: blur(var(--stream-blur));
445
+ }
446
+ to {
447
+ opacity: 1;
448
+ filter: blur(0);
449
+ }
450
+ }
451
+
452
+ /* A row, card or chip that was not there a moment ago. Travels a short
453
+ distance so the eye is told WHERE it came from. */
454
+ @keyframes agent-arrive {
455
+ from {
456
+ opacity: 0;
457
+ transform: translateY(var(--arrive-distance));
458
+ }
459
+ to {
460
+ opacity: 1;
461
+ transform: none;
462
+ }
463
+ }
464
+
465
+ /* A control appearing in place — a chip, a badge, a menu row. No travel,
466
+ because it did not come from anywhere. */
467
+ @keyframes agent-pop-in {
468
+ from {
469
+ opacity: 0;
470
+ transform: scale(0.96);
471
+ }
472
+ to {
473
+ opacity: 1;
474
+ transform: none;
475
+ }
476
+ }
477
+
478
+ /* The insertion caret at the end of streaming text. A hard step blink, not a
479
+ fade: a caret that eases is a caret that reads as a loading placeholder. */
480
+ @keyframes agent-caret {
481
+ 0%,
482
+ 49% {
483
+ opacity: 1;
484
+ }
485
+ 50%,
486
+ 100% {
487
+ opacity: 0;
488
+ }
489
+ }
490
+
491
+ /* A label that is WAITING. The sweep is what separates "the agent is working"
492
+ from "the interface is stuck": a static label cannot tell you which. */
493
+ @keyframes agent-shimmer {
494
+ from {
495
+ background-position: 150% center;
496
+ }
497
+ to {
498
+ background-position: -50% center;
499
+ }
500
+ }
501
+
502
+ .agent-stream-in {
503
+ animation: agent-stream-in var(--motion-stream) both;
504
+ }
505
+
506
+ .agent-arrive {
507
+ animation: agent-arrive var(--motion-arrive) both;
508
+ }
509
+
510
+ .agent-pop-in {
511
+ animation: agent-pop-in var(--motion-control) both;
512
+ }
513
+
514
+ /* Stagger by index: set `--stagger-index` and a group arrives as a sequence
515
+ rather than as a flash. Capped at 8 so a 200-row list does not open with a
516
+ 10-second cascade — past the cap every row shares the last delay. */
517
+ .agent-arrive {
518
+ animation-delay: calc(min(var(--stagger-index), 8) * var(--stagger-step));
519
+ }
520
+
521
+ /* The waiting label. `background-clip: text` over a moving gradient, so the
522
+ shimmer runs THROUGH the glyphs rather than behind them. Marked essential:
523
+ it is the only signal that work is still in flight. */
524
+ .agent-shimmer {
525
+ background: linear-gradient(
526
+ 90deg,
527
+ hsl(var(--muted-foreground)) 0%,
528
+ hsl(var(--foreground)) 45%,
529
+ hsl(var(--muted-foreground)) 60%
530
+ );
531
+ background-size: 250% auto;
532
+ background-clip: text;
533
+ -webkit-background-clip: text;
534
+ color: transparent;
535
+ animation: agent-shimmer 1.4s linear infinite;
536
+ }
537
+
538
+ /* Height-auto disclosure without measuring anything in JavaScript. The row
539
+ animates between 0fr and 1fr; the child needs `min-height: 0` and
540
+ `overflow: hidden` to be clipped while it travels. A max-height guess is the
541
+ usual alternative and it either clips tall content or eases against a number
542
+ the content never reaches. */
543
+ .agent-disclose {
544
+ display: grid;
545
+ grid-template-rows: 0fr;
546
+ transition: grid-template-rows var(--motion-surface), opacity var(--motion-control);
547
+ opacity: 0;
548
+ }
549
+
550
+ .agent-disclose > * {
551
+ min-height: 0;
552
+ overflow: hidden;
553
+ }
554
+
555
+ .agent-disclose[data-open='true'] {
556
+ grid-template-rows: 1fr;
557
+ opacity: 1;
558
+ }
559
+
392
560
  /**
393
561
  * Reduced motion, at the token layer and at the floor.
394
562
  *
@@ -420,6 +588,11 @@
420
588
  --duration-fast: 1ms;
421
589
  --duration-base: 1ms;
422
590
  --duration-slow: 1ms;
591
+ --duration-stream: 1ms;
592
+ --duration-arrive: 1ms;
593
+ /* The stagger is a delay, not a duration, and a collapsed animation with a
594
+ live delay still arrives as a visible cascade. */
595
+ --stagger-step: 0ms;
423
596
  }
424
597
 
425
598
  *:where(:not([data-motion='essential'], [data-motion='essential'] *)) {
@@ -111,7 +111,7 @@ import {
111
111
  withoutRecordGridCreated,
112
112
  withoutRecordGridRemoved,
113
113
  withoutRecordGridUpdate
114
- } from "../chunk-UM6ODCLN.js";
114
+ } from "../chunk-ZX5UT4HF.js";
115
115
  import "../chunk-FBVLEGEG.js";
116
116
  import {
117
117
  EvidenceLineageTable,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tangle-network/agent-app",
3
- "version": "0.45.46",
3
+ "version": "0.45.47",
4
4
  "packageManager": "pnpm@11.17.0",
5
5
  "description": "Build agent applications with typed chat, tools, sandboxes, integrations, billing, and evaluation.",
6
6
  "keywords": [