@actioneer/ads 0.2.4 → 0.3.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.
- package/components/ai-elements/chain-of-thought.d.ts +88 -6
- package/components/ai-elements/chain-of-thought.js +370 -107
- package/components/ai-elements/chart.d.ts +30 -0
- package/components/ai-elements/chart.js +303 -0
- package/components/ai-elements/index.d.ts +2 -0
- package/components/ai-elements/message.d.ts +12 -2
- package/components/ai-elements/message.js +133 -100
- package/components/ai-elements/research-activity.d.ts +62 -0
- package/components/ai-elements/research-activity.js +278 -0
- package/components/ai-elements/task.d.ts +7 -3
- package/components/ai-elements/task.js +84 -52
- package/components/ai-elements/tool.js +39 -35
- package/components/ai-elements/voice.d.ts +7 -1
- package/components/ai-elements/voice.js +234 -180
- package/components/alert.js +28 -16
- package/components/answer.d.ts +16 -0
- package/components/answer.js +273 -249
- package/components/assistant-ui/attachment.js +5 -1
- package/components/assistant-ui/composer-deep-research.js +44 -29
- package/components/assistant-ui/composer-harness.js +45 -27
- package/components/assistant-ui/composer.js +16 -16
- package/components/assistant-ui/index.d.ts +0 -1
- package/components/assistant-ui/message.d.ts +7 -0
- package/components/assistant-ui/message.js +36 -36
- package/components/assistant-ui/thread.js +1 -1
- package/components/brand-texture.d.ts +37 -0
- package/components/brand-texture.js +54 -0
- package/components/code-block.d.ts +42 -0
- package/components/code-block.js +235 -0
- package/components/drawer.d.ts +1 -1
- package/components/file-dropzone.d.ts +32 -0
- package/components/file-dropzone.js +134 -0
- package/components/index.d.ts +10 -0
- package/components/index.js +482 -433
- package/components/infinite-canvas.d.ts +50 -0
- package/components/infinite-canvas.js +215 -0
- package/components/page-header.d.ts +22 -0
- package/components/page-header.js +52 -0
- package/components/resizable-panel.d.ts +29 -0
- package/components/resizable-panel.js +102 -0
- package/components/reveal.d.ts +36 -0
- package/components/reveal.js +35 -0
- package/components/scroll-area.d.ts +19 -0
- package/components/scroll-area.js +57 -0
- package/components/setting-row.d.ts +35 -0
- package/components/setting-row.js +86 -0
- package/components/sidebar.js +131 -131
- package/components/stepper.d.ts +40 -0
- package/components/stepper.js +102 -0
- package/components/table.js +16 -15
- package/components/tabs.js +1 -1
- package/lib/icons.d.ts +12 -0
- package/lib/icons.js +98 -95
- package/lib/motion.d.ts +7 -3
- package/lib/motion.js +29 -27
- package/llms.txt +123 -28
- package/manifest.json +883 -68
- package/package.json +2 -2
- package/styles.css +179 -30
- package/theme.css +29 -17
- package/components/assistant-ui/smart-message-text.d.ts +0 -15
- package/components/assistant-ui/smart-message-text.js +0 -29
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@actioneer/ads",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.1",
|
|
4
4
|
"description": "Actioneer Design System 1.0 — React 19 + Tailwind v4 component library.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"sideEffects": [
|
|
@@ -38,9 +38,9 @@
|
|
|
38
38
|
"@assistant-ui/react-markdown": "^0.14.5",
|
|
39
39
|
"@hugeicons/core-free-icons": "^4.2.2",
|
|
40
40
|
"@hugeicons/react": "^1.1.9",
|
|
41
|
-
"@openuidev/react-lang": "^0.2.8",
|
|
42
41
|
"@paper-design/shaders": "^0.0.77",
|
|
43
42
|
"@paper-design/shaders-react": "^0.0.77",
|
|
43
|
+
"@xyflow/react": "^12.11.2",
|
|
44
44
|
"class-variance-authority": "^0.7.1",
|
|
45
45
|
"clsx": "^2.1.1",
|
|
46
46
|
"motion": "^12.42.2",
|
package/styles.css
CHANGED
|
@@ -34,28 +34,34 @@
|
|
|
34
34
|
*/
|
|
35
35
|
@theme {
|
|
36
36
|
/* ---- Typography ----
|
|
37
|
-
One typeface
|
|
38
|
-
|
|
37
|
+
One brand typeface. Figures inside prose stay in Aribau Grotesk with
|
|
38
|
+
`tabular-nums`; only literal source code steps to the mono stack. */
|
|
39
39
|
--font-sans: "Aribau Grotesk", ui-sans-serif, system-ui, -apple-system,
|
|
40
40
|
"Segoe UI", Roboto, Helvetica, Arial, sans-serif;
|
|
41
41
|
|
|
42
|
-
/*
|
|
43
|
-
|
|
42
|
+
/* Source code only (CodeBlock, inline Code). ADS ships no mono webfont —
|
|
43
|
+
this resolves to the reader's platform mono, which is what a developer
|
|
44
|
+
already reads code in. Never use it for UI copy or data. */
|
|
45
|
+
--font-mono: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas,
|
|
46
|
+
"Liberation Mono", "Courier New", monospace;
|
|
47
|
+
|
|
48
|
+
/* ---- Type scale ---- base = 15px (0.9375rem). Root stays 16px so the
|
|
49
|
+
spacing grid is unaffected; only text sizes are anchored to 15px. */
|
|
44
50
|
/* SIX sizes only — a deliberately small ladder (captions → display).
|
|
45
51
|
Don't reintroduce 2xs/3xl/4xl or in-between steps; if a size feels
|
|
46
52
|
missing, the answer is weight/color, not a new size. */
|
|
47
|
-
--text-xs: 0.
|
|
48
|
-
--text-xs--line-height:
|
|
49
|
-
/* text-sm is aliased to text-xs (both
|
|
50
|
-
|
|
51
|
-
pointed at
|
|
52
|
-
Tailwind's default 14px, which would
|
|
53
|
-
--text-sm: 0.
|
|
54
|
-
--text-sm--line-height:
|
|
55
|
-
--text-base: 0.
|
|
56
|
-
--text-base--line-height: 1.
|
|
57
|
-
--text-lg:
|
|
58
|
-
--text-lg--line-height: 1.
|
|
53
|
+
--text-xs: 0.8125rem; /* 13px — the FLOOR: captions, secondary text, table cells, keycaps */
|
|
54
|
+
--text-xs--line-height: 1.125rem;
|
|
55
|
+
/* text-sm is aliased to text-xs (both 13px). The scale is intentionally
|
|
56
|
+
13 · 15 · 17 · 21 · 26 with no in-between tier — keeping the token
|
|
57
|
+
pointed at 13px stops any stray `text-sm` from falling back to
|
|
58
|
+
Tailwind's default 14px, which would land off the scale. */
|
|
59
|
+
--text-sm: 0.8125rem;
|
|
60
|
+
--text-sm--line-height: 1.125rem;
|
|
61
|
+
--text-base: 0.9375rem; /* 15px — BASE body */
|
|
62
|
+
--text-base--line-height: 1.375rem;
|
|
63
|
+
--text-lg: 1.0625rem; /* 17px — emphasized body, section headings */
|
|
64
|
+
--text-lg--line-height: 1.5rem;
|
|
59
65
|
--text-xl: 1.3125rem; /* 21px — page titles */
|
|
60
66
|
--text-xl--line-height: 1.75rem;
|
|
61
67
|
--text-2xl: 1.625rem; /* 26px — display */
|
|
@@ -138,13 +144,16 @@
|
|
|
138
144
|
to these system-wide. JS mirror: src/lib/motion.ts — keep in sync. */
|
|
139
145
|
--ease-out: cubic-bezier(0.23, 1, 0.32, 1); /* entrances, exits, presses */
|
|
140
146
|
--ease-in-out: cubic-bezier(0.77, 0, 0.175, 1); /* on-screen movement / morphs */
|
|
141
|
-
--ease-
|
|
147
|
+
--ease-expo-out: cubic-bezier(0.16, 1, 0.3, 1); /* side-panel and drawer slide */
|
|
148
|
+
--ease-drawer: var(--ease-expo-out); /* backwards-compatible alias */
|
|
142
149
|
--ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1); /* playful overshoot (rare) */
|
|
150
|
+
--ease-disclosure: cubic-bezier(0.32, 0.72, 0, 1); /* height reveals — moves off the mark immediately, settles long */
|
|
143
151
|
|
|
144
152
|
/* Durations — every animation/transition timing flows from these.
|
|
145
153
|
UI animations stay under 300ms; exits run faster than enters. */
|
|
146
154
|
--duration-fast: 0.15s; /* menu / popover / tooltip enter */
|
|
147
155
|
--duration-normal: 0.2s; /* state transitions */
|
|
156
|
+
--duration-disclosure: 0.28s; /* collapsible open — travels a real distance */
|
|
148
157
|
--duration-spin: 0.8s; /* rotation loops (spinner) */
|
|
149
158
|
--duration-pulse: 1.5s; /* breathing / shimmer loops */
|
|
150
159
|
--duration-bloom: 0.9s; /* ambient reveals (chat texture bloom, curtain wipe) */
|
|
@@ -166,6 +175,8 @@
|
|
|
166
175
|
--sidebar-item: 2rem; /* 32px — collapsed rail hit target (square) */
|
|
167
176
|
--sidebar-logo: 1.25rem; /* 20px — brand mark, centered in a --sidebar-item square */
|
|
168
177
|
--sidebar-text-indent: 2.375rem; /* px-3 + icon size-4 + gap-2.5 — history rows align to nav-item text */
|
|
178
|
+
--sidebar-navigation-text-size: 0.8125rem; /* 13px — sidebar actions, items, history, and account text */
|
|
179
|
+
--sidebar-section-label-size: 0.8125rem; /* 13px — section and history labels */
|
|
169
180
|
--panel-header-height: 2.75rem; /* 44px — Panel / toolbar header */
|
|
170
181
|
--aside-width: 20rem; /* 320px — right-hand panel column */
|
|
171
182
|
|
|
@@ -180,6 +191,7 @@
|
|
|
180
191
|
--composer-bg: color-mix(in oklab, var(--muted) 30%, var(--background));
|
|
181
192
|
--composer-radius: var(--radius-2xl);
|
|
182
193
|
--composer-padding: 0.5rem;
|
|
194
|
+
--composer-placeholder-max-h: calc(var(--text-base--line-height) * 2); /* rotating placeholder clamp — two lines of the input's own rhythm, so it can never overlap the accessory row */
|
|
183
195
|
--chat-texture-opacity: 0.06; /* welcome-state halftone wash */
|
|
184
196
|
}
|
|
185
197
|
|
|
@@ -313,10 +325,11 @@
|
|
|
313
325
|
display: none;
|
|
314
326
|
}
|
|
315
327
|
|
|
316
|
-
/*
|
|
317
|
-
the centre out to the corners (clip-path circle)
|
|
318
|
-
rest. `from{}`-only keyframe, so it settles into
|
|
319
|
-
|
|
328
|
+
/* BrandTexture entrance (src/components/brand-texture.tsx): a radial bloom —
|
|
329
|
+
the halftone reveals from the centre out to the corners (clip-path circle)
|
|
330
|
+
while gently scaling up to rest. `from{}`-only keyframe, so it settles into
|
|
331
|
+
the element's own opacity. */
|
|
332
|
+
@keyframes ads-texture-reveal {
|
|
320
333
|
from {
|
|
321
334
|
clip-path: circle(10% at 50% 50%);
|
|
322
335
|
opacity: 0;
|
|
@@ -326,8 +339,8 @@
|
|
|
326
339
|
clip-path: circle(102% at 50% 50%);
|
|
327
340
|
}
|
|
328
341
|
}
|
|
329
|
-
.
|
|
330
|
-
animation:
|
|
342
|
+
.ads-texture-reveal {
|
|
343
|
+
animation: ads-texture-reveal var(--duration-bloom) var(--ease-out) both;
|
|
331
344
|
}
|
|
332
345
|
|
|
333
346
|
/* Paper's WebGL shader owns the halftone animation. The canvas is bounded to
|
|
@@ -371,7 +384,7 @@
|
|
|
371
384
|
animation-direction: reverse;
|
|
372
385
|
}
|
|
373
386
|
@media (prefers-reduced-motion: reduce) {
|
|
374
|
-
.
|
|
387
|
+
.ads-texture-reveal {
|
|
375
388
|
animation: none;
|
|
376
389
|
}
|
|
377
390
|
.voice-surface-drift {
|
|
@@ -379,13 +392,13 @@
|
|
|
379
392
|
}
|
|
380
393
|
}
|
|
381
394
|
|
|
382
|
-
/*
|
|
395
|
+
/* BrandTexture exit — cloud lift. When the conversation starts the
|
|
383
396
|
halftone dissolves from the BOTTOM upward (a soft mask band sweeps up
|
|
384
397
|
through it) while the whole layer drifts up and fades — cloud cover
|
|
385
398
|
breaking and rising, not a curtain covering it. The mask rests fully
|
|
386
399
|
opaque (element aligned with the black end of an oversized gradient), and
|
|
387
400
|
the lifted state slides the element to the transparent end. */
|
|
388
|
-
.
|
|
401
|
+
.ads-texture-lift {
|
|
389
402
|
mask-image: linear-gradient(to top, transparent 0%, transparent 42%, black 58%, black 100%);
|
|
390
403
|
-webkit-mask-image: linear-gradient(to top, transparent 0%, transparent 42%, black 58%, black 100%);
|
|
391
404
|
mask-repeat: no-repeat;
|
|
@@ -400,16 +413,16 @@
|
|
|
400
413
|
translate 1s var(--ease-out),
|
|
401
414
|
opacity 1s var(--ease-out);
|
|
402
415
|
}
|
|
403
|
-
.
|
|
416
|
+
.ads-texture-lifted {
|
|
404
417
|
mask-position: 0% 100%;
|
|
405
418
|
-webkit-mask-position: 0% 100%;
|
|
406
419
|
translate: 0 -3.5rem;
|
|
407
420
|
}
|
|
408
421
|
@media (prefers-reduced-motion: reduce) {
|
|
409
|
-
.
|
|
422
|
+
.ads-texture-lift {
|
|
410
423
|
transition: opacity var(--duration-normal) var(--ease-out);
|
|
411
424
|
}
|
|
412
|
-
.
|
|
425
|
+
.ads-texture-lifted {
|
|
413
426
|
mask-position: 0% 0%;
|
|
414
427
|
-webkit-mask-position: 0% 0%;
|
|
415
428
|
translate: none;
|
|
@@ -470,7 +483,7 @@
|
|
|
470
483
|
background-color: var(--background);
|
|
471
484
|
color: var(--foreground);
|
|
472
485
|
font-family: var(--font-sans);
|
|
473
|
-
font-size: var(--text-base); /*
|
|
486
|
+
font-size: var(--text-base); /* 15px base */
|
|
474
487
|
font-feature-settings: "cv01", "ss01";
|
|
475
488
|
font-synthesis-weight: none;
|
|
476
489
|
}
|
|
@@ -533,6 +546,44 @@
|
|
|
533
546
|
@keyframes ads-shimmer {
|
|
534
547
|
100% { transform: translateX(100%); }
|
|
535
548
|
}
|
|
549
|
+
|
|
550
|
+
/* Reveal — the "data draws itself" entrance (src/components/reveal.tsx).
|
|
551
|
+
The real layout lands instantly; content arrives in hierarchy — shells
|
|
552
|
+
rise, labels/values ink in, visualizations wipe left→right — each slot
|
|
553
|
+
delayed by --reveal-order × --reveal-step. The wipe runs longer than UI
|
|
554
|
+
chrome on purpose: data drawing is explanatory motion, not chrome. */
|
|
555
|
+
@keyframes ads-reveal-ink {
|
|
556
|
+
from { opacity: 0; filter: blur(4px); }
|
|
557
|
+
to { opacity: 1; filter: blur(0); }
|
|
558
|
+
}
|
|
559
|
+
@keyframes ads-reveal-rise {
|
|
560
|
+
from { opacity: 0; transform: translate3d(0, 8px, 0); }
|
|
561
|
+
to { opacity: 1; transform: translate3d(0, 0, 0); }
|
|
562
|
+
}
|
|
563
|
+
@keyframes ads-reveal-wipe {
|
|
564
|
+
from { clip-path: inset(0 100% 0 0); }
|
|
565
|
+
to { clip-path: inset(0 0 0 0); }
|
|
566
|
+
}
|
|
567
|
+
@keyframes ads-reveal-fade {
|
|
568
|
+
from { opacity: 0; }
|
|
569
|
+
to { opacity: 1; }
|
|
570
|
+
}
|
|
571
|
+
.ads-reveal {
|
|
572
|
+
animation: ads-reveal-rise var(--reveal-duration, 0.45s) var(--ease-out) both;
|
|
573
|
+
animation-delay: calc(var(--reveal-step, 70ms) * var(--reveal-order, 0));
|
|
574
|
+
}
|
|
575
|
+
.ads-reveal-ink { animation-name: ads-reveal-ink; }
|
|
576
|
+
.ads-reveal-wipe {
|
|
577
|
+
animation-name: ads-reveal-wipe;
|
|
578
|
+
animation-duration: var(--reveal-duration-draw, 0.9s);
|
|
579
|
+
}
|
|
580
|
+
@media (prefers-reduced-motion: reduce) {
|
|
581
|
+
.ads-reveal,
|
|
582
|
+
.ads-reveal-ink,
|
|
583
|
+
.ads-reveal-wipe {
|
|
584
|
+
animation-name: ads-reveal-fade;
|
|
585
|
+
}
|
|
586
|
+
}
|
|
536
587
|
@keyframes ads-indeterminate {
|
|
537
588
|
0% { transform: translate3d(-100%, 0, 0); }
|
|
538
589
|
60%, 100% { transform: translate3d(250%, 0, 0); }
|
|
@@ -649,5 +700,103 @@
|
|
|
649
700
|
animation: none !important;
|
|
650
701
|
}
|
|
651
702
|
}
|
|
703
|
+
|
|
704
|
+
/* Collapsible disclosure (CSS path) — opt-in via .ads-collapsible for simple
|
|
705
|
+
disclosures. ChainOfThoughtContent does NOT use this: it animates with
|
|
706
|
+
Motion so a toggle mid-flight reverses from the current height instead of
|
|
707
|
+
restarting, which CSS keyframes cannot do.
|
|
708
|
+
|
|
709
|
+
Height, opacity and a short rise in ONE animation.
|
|
710
|
+
Two separate `animation` declarations cannot coexist (the shorthand replaces,
|
|
711
|
+
it does not merge), so animating height alongside tw-animate-css's enter/exit
|
|
712
|
+
silently drops the fade and leaves a bare height shutter — which reads as
|
|
713
|
+
rigid no matter how it is timed. Radix publishes the measured height as
|
|
714
|
+
--radix-collapsible-content-height; exits run faster than enters.
|
|
715
|
+
Eased with --ease-disclosure. --ease-out front-loads ~60% of the travel into
|
|
716
|
+
the first third (pop, then settle); --ease-in-out holds ~150ms before moving
|
|
717
|
+
(lag, then rush). A height reveal needs to leave the mark immediately and
|
|
718
|
+
settle long, which is what this curve does. */
|
|
719
|
+
@keyframes ads-collapsible-down {
|
|
720
|
+
from {
|
|
721
|
+
height: 0;
|
|
722
|
+
opacity: 0;
|
|
723
|
+
transform: translate3d(0, -4px, 0);
|
|
724
|
+
}
|
|
725
|
+
to {
|
|
726
|
+
height: var(--radix-collapsible-content-height);
|
|
727
|
+
opacity: 1;
|
|
728
|
+
transform: translate3d(0, 0, 0);
|
|
729
|
+
}
|
|
730
|
+
}
|
|
731
|
+
@keyframes ads-collapsible-up {
|
|
732
|
+
from {
|
|
733
|
+
height: var(--radix-collapsible-content-height);
|
|
734
|
+
opacity: 1;
|
|
735
|
+
transform: translate3d(0, 0, 0);
|
|
736
|
+
}
|
|
737
|
+
to {
|
|
738
|
+
height: 0;
|
|
739
|
+
opacity: 0;
|
|
740
|
+
transform: translate3d(0, -4px, 0);
|
|
741
|
+
}
|
|
742
|
+
}
|
|
743
|
+
.ads-collapsible[data-state="open"] {
|
|
744
|
+
animation: ads-collapsible-down var(--duration-disclosure) var(--ease-disclosure);
|
|
745
|
+
}
|
|
746
|
+
.ads-collapsible[data-state="closed"] {
|
|
747
|
+
animation: ads-collapsible-up var(--duration-normal) var(--ease-disclosure);
|
|
748
|
+
}
|
|
749
|
+
@media (prefers-reduced-motion: reduce) {
|
|
750
|
+
.ads-collapsible[data-state="open"],
|
|
751
|
+
.ads-collapsible[data-state="closed"] {
|
|
752
|
+
animation: none;
|
|
753
|
+
}
|
|
754
|
+
}
|
|
755
|
+
|
|
756
|
+
/* Tree connector — the rail that links a group of children back to their
|
|
757
|
+
parent, and the L-shaped elbow that reaches an individual child.
|
|
758
|
+
|
|
759
|
+
Two classes so a rail can pass THROUGH content that is not itself a branch:
|
|
760
|
+
`.ads-tree-rail` draws the vertical only, `.ads-tree-branch` adds the elbow.
|
|
761
|
+
Mixing them keeps the rail unbroken from the parent icon while only the
|
|
762
|
+
rows that are actual children get an elbow.
|
|
763
|
+
|
|
764
|
+
- --tree-rail-lead : how far the FIRST child's rail climbs to meet the
|
|
765
|
+
parent row.
|
|
766
|
+
- --tree-elbow : where the elbow meets the child — its icon centre. */
|
|
767
|
+
.ads-tree-rail,
|
|
768
|
+
.ads-tree-branch {
|
|
769
|
+
position: relative;
|
|
770
|
+
padding-inline-start: 1.25rem;
|
|
771
|
+
}
|
|
772
|
+
.ads-tree-rail::before,
|
|
773
|
+
.ads-tree-branch::before {
|
|
774
|
+
content: "";
|
|
775
|
+
position: absolute;
|
|
776
|
+
inset-block: 0;
|
|
777
|
+
left: 0;
|
|
778
|
+
border-left: 1px solid var(--border);
|
|
779
|
+
}
|
|
780
|
+
.ads-tree-rail:first-child::before,
|
|
781
|
+
.ads-tree-branch:first-child::before {
|
|
782
|
+
top: calc(-1 * var(--tree-rail-lead, 0px));
|
|
783
|
+
}
|
|
784
|
+
/* The last child needs no rail: its elbow (or the content's end) terminates
|
|
785
|
+
the branch, and a rail there pokes through the curve. */
|
|
786
|
+
.ads-tree-rail:last-child::before,
|
|
787
|
+
.ads-tree-branch:last-child::before {
|
|
788
|
+
display: none;
|
|
789
|
+
}
|
|
790
|
+
.ads-tree-branch::after {
|
|
791
|
+
content: "";
|
|
792
|
+
position: absolute;
|
|
793
|
+
left: 0;
|
|
794
|
+
top: 0;
|
|
795
|
+
height: var(--tree-elbow, 1.125rem);
|
|
796
|
+
width: 1rem;
|
|
797
|
+
border-bottom: 1px solid var(--border);
|
|
798
|
+
border-left: 1px solid var(--border);
|
|
799
|
+
border-bottom-left-radius: 9px;
|
|
800
|
+
}
|
|
652
801
|
/* Let the consumer's Tailwind discover the classes ADS components use. */
|
|
653
802
|
@source "./**/*.{js,mjs}";
|
package/theme.css
CHANGED
|
@@ -7,28 +7,34 @@
|
|
|
7
7
|
*/
|
|
8
8
|
@theme {
|
|
9
9
|
/* ---- Typography ----
|
|
10
|
-
One typeface
|
|
11
|
-
|
|
10
|
+
One brand typeface. Figures inside prose stay in Aribau Grotesk with
|
|
11
|
+
`tabular-nums`; only literal source code steps to the mono stack. */
|
|
12
12
|
--font-sans: "Aribau Grotesk", ui-sans-serif, system-ui, -apple-system,
|
|
13
13
|
"Segoe UI", Roboto, Helvetica, Arial, sans-serif;
|
|
14
14
|
|
|
15
|
-
/*
|
|
16
|
-
|
|
15
|
+
/* Source code only (CodeBlock, inline Code). ADS ships no mono webfont —
|
|
16
|
+
this resolves to the reader's platform mono, which is what a developer
|
|
17
|
+
already reads code in. Never use it for UI copy or data. */
|
|
18
|
+
--font-mono: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas,
|
|
19
|
+
"Liberation Mono", "Courier New", monospace;
|
|
20
|
+
|
|
21
|
+
/* ---- Type scale ---- base = 15px (0.9375rem). Root stays 16px so the
|
|
22
|
+
spacing grid is unaffected; only text sizes are anchored to 15px. */
|
|
17
23
|
/* SIX sizes only — a deliberately small ladder (captions → display).
|
|
18
24
|
Don't reintroduce 2xs/3xl/4xl or in-between steps; if a size feels
|
|
19
25
|
missing, the answer is weight/color, not a new size. */
|
|
20
|
-
--text-xs: 0.
|
|
21
|
-
--text-xs--line-height:
|
|
22
|
-
/* text-sm is aliased to text-xs (both
|
|
23
|
-
|
|
24
|
-
pointed at
|
|
25
|
-
Tailwind's default 14px, which would
|
|
26
|
-
--text-sm: 0.
|
|
27
|
-
--text-sm--line-height:
|
|
28
|
-
--text-base: 0.
|
|
29
|
-
--text-base--line-height: 1.
|
|
30
|
-
--text-lg:
|
|
31
|
-
--text-lg--line-height: 1.
|
|
26
|
+
--text-xs: 0.8125rem; /* 13px — the FLOOR: captions, secondary text, table cells, keycaps */
|
|
27
|
+
--text-xs--line-height: 1.125rem;
|
|
28
|
+
/* text-sm is aliased to text-xs (both 13px). The scale is intentionally
|
|
29
|
+
13 · 15 · 17 · 21 · 26 with no in-between tier — keeping the token
|
|
30
|
+
pointed at 13px stops any stray `text-sm` from falling back to
|
|
31
|
+
Tailwind's default 14px, which would land off the scale. */
|
|
32
|
+
--text-sm: 0.8125rem;
|
|
33
|
+
--text-sm--line-height: 1.125rem;
|
|
34
|
+
--text-base: 0.9375rem; /* 15px — BASE body */
|
|
35
|
+
--text-base--line-height: 1.375rem;
|
|
36
|
+
--text-lg: 1.0625rem; /* 17px — emphasized body, section headings */
|
|
37
|
+
--text-lg--line-height: 1.5rem;
|
|
32
38
|
--text-xl: 1.3125rem; /* 21px — page titles */
|
|
33
39
|
--text-xl--line-height: 1.75rem;
|
|
34
40
|
--text-2xl: 1.625rem; /* 26px — display */
|
|
@@ -111,13 +117,16 @@
|
|
|
111
117
|
to these system-wide. JS mirror: src/lib/motion.ts — keep in sync. */
|
|
112
118
|
--ease-out: cubic-bezier(0.23, 1, 0.32, 1); /* entrances, exits, presses */
|
|
113
119
|
--ease-in-out: cubic-bezier(0.77, 0, 0.175, 1); /* on-screen movement / morphs */
|
|
114
|
-
--ease-
|
|
120
|
+
--ease-expo-out: cubic-bezier(0.16, 1, 0.3, 1); /* side-panel and drawer slide */
|
|
121
|
+
--ease-drawer: var(--ease-expo-out); /* backwards-compatible alias */
|
|
115
122
|
--ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1); /* playful overshoot (rare) */
|
|
123
|
+
--ease-disclosure: cubic-bezier(0.32, 0.72, 0, 1); /* height reveals — moves off the mark immediately, settles long */
|
|
116
124
|
|
|
117
125
|
/* Durations — every animation/transition timing flows from these.
|
|
118
126
|
UI animations stay under 300ms; exits run faster than enters. */
|
|
119
127
|
--duration-fast: 0.15s; /* menu / popover / tooltip enter */
|
|
120
128
|
--duration-normal: 0.2s; /* state transitions */
|
|
129
|
+
--duration-disclosure: 0.28s; /* collapsible open — travels a real distance */
|
|
121
130
|
--duration-spin: 0.8s; /* rotation loops (spinner) */
|
|
122
131
|
--duration-pulse: 1.5s; /* breathing / shimmer loops */
|
|
123
132
|
--duration-bloom: 0.9s; /* ambient reveals (chat texture bloom, curtain wipe) */
|
|
@@ -139,6 +148,8 @@
|
|
|
139
148
|
--sidebar-item: 2rem; /* 32px — collapsed rail hit target (square) */
|
|
140
149
|
--sidebar-logo: 1.25rem; /* 20px — brand mark, centered in a --sidebar-item square */
|
|
141
150
|
--sidebar-text-indent: 2.375rem; /* px-3 + icon size-4 + gap-2.5 — history rows align to nav-item text */
|
|
151
|
+
--sidebar-navigation-text-size: 0.8125rem; /* 13px — sidebar actions, items, history, and account text */
|
|
152
|
+
--sidebar-section-label-size: 0.8125rem; /* 13px — section and history labels */
|
|
142
153
|
--panel-header-height: 2.75rem; /* 44px — Panel / toolbar header */
|
|
143
154
|
--aside-width: 20rem; /* 320px — right-hand panel column */
|
|
144
155
|
|
|
@@ -153,6 +164,7 @@
|
|
|
153
164
|
--composer-bg: color-mix(in oklab, var(--muted) 30%, var(--background));
|
|
154
165
|
--composer-radius: var(--radius-2xl);
|
|
155
166
|
--composer-padding: 0.5rem;
|
|
167
|
+
--composer-placeholder-max-h: calc(var(--text-base--line-height) * 2); /* rotating placeholder clamp — two lines of the input's own rhythm, so it can never overlap the accessory row */
|
|
156
168
|
--chat-texture-opacity: 0.06; /* welcome-state halftone wash */
|
|
157
169
|
}
|
|
158
170
|
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { ComponentProps, ReactNode } from 'react';
|
|
2
|
-
import { Renderer } from '@openuidev/react-lang';
|
|
3
|
-
/**
|
|
4
|
-
* The OpenUI Lang library used to render fenced `openui-lang` answers. ADS
|
|
5
|
-
* ships no default library — the host injects its own component registry via
|
|
6
|
-
* {@link OpenUiLibraryProvider}. Absent a provider, structured answers fall
|
|
7
|
-
* back to Markdown (see {@link SmartMessageText}).
|
|
8
|
-
*/
|
|
9
|
-
type OpenUiLibrary = ComponentProps<typeof Renderer>["library"];
|
|
10
|
-
export declare function OpenUiLibraryProvider({ library, children, }: {
|
|
11
|
-
library: OpenUiLibrary;
|
|
12
|
-
children: ReactNode;
|
|
13
|
-
}): import("react").JSX.Element;
|
|
14
|
-
export declare const SmartMessageText: import('react').MemoExoticComponent<() => import("react").JSX.Element>;
|
|
15
|
-
export {};
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import { jsx as t } from "react/jsx-runtime";
|
|
3
|
-
import { createContext as c, memo as p, useContext as m } from "react";
|
|
4
|
-
import { useMessagePartText as u } from "@assistant-ui/react";
|
|
5
|
-
import { Renderer as d } from "@openuidev/react-lang";
|
|
6
|
-
import { MarkdownText as l } from "./markdown-text.js";
|
|
7
|
-
const i = c(null);
|
|
8
|
-
function M({
|
|
9
|
-
library: e,
|
|
10
|
-
children: r
|
|
11
|
-
}) {
|
|
12
|
-
return /* @__PURE__ */ t(i.Provider, { value: e, children: r });
|
|
13
|
-
}
|
|
14
|
-
const x = /```openui-lang\r?\n([\s\S]*?)(?:\r?\n```|$)/;
|
|
15
|
-
function f(e) {
|
|
16
|
-
const r = e.match(x);
|
|
17
|
-
return r ? r[1].replace(/```$/, "").trimEnd() : null;
|
|
18
|
-
}
|
|
19
|
-
const g = () => {
|
|
20
|
-
var o;
|
|
21
|
-
const e = u(), r = m(i), s = e.type === "text" ? e.text : "", n = f(s), a = e.status.type === "running";
|
|
22
|
-
return n && r ? /* @__PURE__ */ t("div", { className: "ads-openui my-1", children: /* @__PURE__ */ t(d, { response: n, library: r, isStreaming: a }) }) : (n && typeof process < "u" && ((o = process.env) == null ? void 0 : o.NODE_ENV) !== "production" && console.warn(
|
|
23
|
-
"[ADS] SmartMessageText got an openui-lang answer but no OpenUiLibraryProvider is present; falling back to Markdown. Wrap the Thread in <OpenUiLibraryProvider library={…}>."
|
|
24
|
-
), /* @__PURE__ */ t(l, {}));
|
|
25
|
-
}, P = p(g);
|
|
26
|
-
export {
|
|
27
|
-
M as OpenUiLibraryProvider,
|
|
28
|
-
P as SmartMessageText
|
|
29
|
-
};
|