@cueplusplus/ui 0.12.0 → 0.14.0
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/CHANGELOG.md +305 -0
- package/LICENSE +21 -0
- package/NOTICE.md +34 -0
- package/README.md +2 -19
- package/dist/agent-runtime/tool-call-card.js +2 -2
- package/dist/chat/ask-box.js +2 -2
- package/dist/chat/composer.js +1 -1
- package/dist/chat/message.js +1 -1
- package/dist/chrome/_band.js +54 -0
- package/dist/chrome/band.d.ts +106 -0
- package/dist/chrome/band.js +97 -0
- package/dist/chrome/empty-state.js +1 -1
- package/dist/chrome/footer.d.ts +13 -0
- package/dist/chrome/footer.js +17 -2
- package/dist/chrome/index.d.ts +2 -1
- package/dist/chrome/index.js +2 -1
- package/dist/chrome/navigation-menu.js +1 -1
- package/dist/chrome/page-shell.js +4 -4
- package/dist/configurator/export-dialog.js +1 -1
- package/dist/configurator/panel-sections.js +1 -1
- package/dist/elements/agent-card.js +1 -1
- package/dist/elements/agent-handoff.js +2 -2
- package/dist/elements/canvas-split.js +2 -2
- package/dist/elements/chat-panel.js +1 -1
- package/dist/elements/code-diff.js +1 -1
- package/dist/elements/code-runner.js +2 -2
- package/dist/elements/comparison-card.js +1 -1
- package/dist/elements/confidence-marker.js +1 -1
- package/dist/elements/conversation-search.js +1 -1
- package/dist/elements/day-separator.js +1 -1
- package/dist/elements/document-reference.js +1 -1
- package/dist/elements/edit-message.js +1 -1
- package/dist/elements/elicitation-form.js +1 -1
- package/dist/elements/guardrail-notice.js +1 -1
- package/dist/elements/image-generation.js +1 -1
- package/dist/elements/inline-citation.js +2 -2
- package/dist/elements/markdown.js +1 -1
- package/dist/elements/math-block.js +1 -1
- package/dist/elements/message-branches.js +1 -1
- package/dist/elements/message-pair.js +1 -1
- package/dist/elements/onboarding.js +2 -2
- package/dist/elements/prompt-library.js +1 -1
- package/dist/elements/quote-reply.js +2 -2
- package/dist/elements/read-aloud.js +1 -1
- package/dist/elements/reasoning-panel.js +1 -1
- package/dist/elements/recommendation-card.js +1 -1
- package/dist/elements/research-report.js +1 -1
- package/dist/elements/retrieval-chunks.js +1 -1
- package/dist/elements/reviewable-diff.js +1 -1
- package/dist/elements/score-breakdown.js +1 -1
- package/dist/elements/scroll-anchor.js +1 -1
- package/dist/elements/settings-panel.js +1 -1
- package/dist/elements/shared-conversation.js +1 -1
- package/dist/elements/speaker-identity.js +1 -1
- package/dist/elements/stopped-run.js +1 -1
- package/dist/elements/streaming-text.js +1 -1
- package/dist/elements/timeline.js +1 -1
- package/dist/elements/tool-error.js +1 -1
- package/dist/elements/voice-conversation.js +1 -1
- package/dist/forms/textarea.js +1 -1
- package/dist/index.d.ts +5 -4
- package/dist/index.js +4 -2
- package/dist/instruments/code-block.js +1 -1
- package/dist/instruments/progress.d.ts +19 -3
- package/dist/instruments/progress.js +19 -1
- package/dist/instruments/terminal-frame.js +1 -1
- package/dist/layout/_collapse.js +1 -1
- package/dist/layout/card.js +1 -1
- package/dist/layout/container.js +3 -3
- package/dist/layout/frames.d.ts +19 -1
- package/dist/layout/frames.js +21 -7
- package/dist/layout/index.d.ts +2 -2
- package/dist/layout/preview.d.ts +29 -9
- package/dist/layout/preview.js +38 -17
- package/dist/overlays/_surface.d.ts +1 -1
- package/dist/overlays/_surface.js +1 -1
- package/dist/overlays/toast.js +1 -1
- package/dist/overlays/tooltip.js +1 -1
- package/dist/primitives/chip.d.ts +1 -1
- package/dist/system/density.d.ts +34 -6
- package/dist/system/density.js +41 -10
- package/dist/system/index.d.ts +2 -1
- package/dist/system/index.js +2 -1
- package/dist/system/portal.d.ts +8 -7
- package/dist/system/portal.js +16 -9
- package/dist/system/prepaint.d.ts +25 -5
- package/dist/system/prepaint.js +10 -2
- package/dist/system/theme-provider.d.ts +86 -7
- package/dist/system/theme-provider.js +62 -20
- package/dist/system/use-theme.d.ts +9 -2
- package/dist/system/use-theme.js +9 -2
- package/dist/system/vocabulary.d.ts +2 -1
- package/dist/system/vocabulary.js +16 -2
- package/manifest/components/accordion.json +1 -0
- package/manifest/components/agent-card.json +1 -0
- package/manifest/components/agent-handoff.json +1 -0
- package/manifest/components/alert-dialog.json +1 -0
- package/manifest/components/ask-box.json +1 -0
- package/manifest/components/autocomplete.json +1 -0
- package/manifest/components/band.json +104 -0
- package/manifest/components/canvas-split-body.json +1 -0
- package/manifest/components/canvas-split-document.json +1 -0
- package/manifest/components/canvas-split-header.json +1 -0
- package/manifest/components/canvas-split-line.json +1 -0
- package/manifest/components/canvas-split-message.json +1 -0
- package/manifest/components/canvas-split-thread.json +1 -0
- package/manifest/components/canvas-split.json +1 -0
- package/manifest/components/card.json +1 -0
- package/manifest/components/channel-matrix.json +1 -0
- package/manifest/components/chart-tooltip-content.json +1 -0
- package/manifest/components/chat-panel-assistant-message.json +1 -0
- package/manifest/components/chat-panel-composer.json +1 -0
- package/manifest/components/chat-panel-messages.json +1 -0
- package/manifest/components/chat-panel-typing.json +1 -0
- package/manifest/components/chat-panel-user-message.json +1 -0
- package/manifest/components/chat-panel.json +1 -0
- package/manifest/components/code-block.json +1 -0
- package/manifest/components/code-diff.json +1 -0
- package/manifest/components/code-runner.json +1 -0
- package/manifest/components/collapsible.json +1 -0
- package/manifest/components/colors-section.json +1 -0
- package/manifest/components/combobox.json +1 -0
- package/manifest/components/command-palette.json +1 -0
- package/manifest/components/comparison-card.json +1 -0
- package/manifest/components/composer.json +1 -0
- package/manifest/components/confidence-marker.json +1 -0
- package/manifest/components/container.json +3 -0
- package/manifest/components/context-menu.json +1 -0
- package/manifest/components/conversation-search.json +1 -0
- package/manifest/components/cue-portal-frame.json +1 -1
- package/manifest/components/day-separator.json +1 -0
- package/manifest/components/density.json +16 -1
- package/manifest/components/dialog.json +1 -0
- package/manifest/components/disclosure.json +1 -0
- package/manifest/components/dmx-bar.json +1 -0
- package/manifest/components/dmx-strip.json +1 -0
- package/manifest/components/document-reference.json +1 -0
- package/manifest/components/drawer.json +1 -0
- package/manifest/components/dropdown-menu.json +1 -0
- package/manifest/components/edit-message.json +1 -0
- package/manifest/components/elements-timeline.json +1 -0
- package/manifest/components/elicitation-form.json +1 -0
- package/manifest/components/empty-state.json +1 -0
- package/manifest/components/export-dialog.json +1 -0
- package/manifest/components/footer.json +3 -2
- package/manifest/components/frac.json +1 -0
- package/manifest/components/frames.json +14 -0
- package/manifest/components/guardrail-notice.json +1 -0
- package/manifest/components/hover-card.json +1 -0
- package/manifest/components/inline-citation.json +1 -0
- package/manifest/components/markdown-text.json +1 -0
- package/manifest/components/math-block.json +1 -0
- package/manifest/components/menubar.json +1 -0
- package/manifest/components/message-branches.json +1 -0
- package/manifest/components/message-pair.json +1 -0
- package/manifest/components/message.json +1 -0
- package/manifest/components/multi-select.json +1 -0
- package/manifest/components/navigation-menu.json +1 -0
- package/manifest/components/onboarding.json +1 -0
- package/manifest/components/page-shell.json +4 -0
- package/manifest/components/popover.json +1 -0
- package/manifest/components/preset-section.json +1 -0
- package/manifest/components/preview.json +17 -2
- package/manifest/components/progress.json +2 -2
- package/manifest/components/prompt-library.json +1 -0
- package/manifest/components/quote-reply.json +1 -0
- package/manifest/components/read-aloud.json +1 -0
- package/manifest/components/reasoning-panel.json +1 -0
- package/manifest/components/recommendation-card.json +1 -0
- package/manifest/components/research-report.json +1 -0
- package/manifest/components/retrieval-chunks.json +1 -0
- package/manifest/components/reviewable-diff.json +1 -0
- package/manifest/components/score-breakdown.json +1 -0
- package/manifest/components/scroll-anchor.json +1 -0
- package/manifest/components/settings-panel.json +1 -0
- package/manifest/components/shape-section.json +1 -0
- package/manifest/components/shared-conversation.json +1 -0
- package/manifest/components/sheet.json +1 -0
- package/manifest/components/speaker-identity.json +1 -0
- package/manifest/components/stopped-run.json +1 -0
- package/manifest/components/streaming-text.json +1 -0
- package/manifest/components/sub.json +1 -0
- package/manifest/components/sup.json +1 -0
- package/manifest/components/tags-input.json +1 -0
- package/manifest/components/terminal-frame.json +1 -0
- package/manifest/components/textarea.json +1 -0
- package/manifest/components/theme-configurator.json +1 -0
- package/manifest/components/theme-provider.json +26 -1
- package/manifest/components/toast.json +1 -0
- package/manifest/components/tool-call-card.json +1 -0
- package/manifest/components/tool-error.json +1 -0
- package/manifest/components/tooltip.json +1 -0
- package/manifest/components/voice-conversation.json +1 -0
- package/manifest/manifest.json +133 -105
- package/manifest/tokens.json +20 -1
- package/package.json +11 -9
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { cn } from "../lib/cn.js";
|
|
2
|
+
import { Container } from "../layout/container.js";
|
|
3
|
+
import { bandClasses } from "./_band.js";
|
|
4
|
+
import * as React from "react";
|
|
5
|
+
import { jsx } from "react/jsx-runtime";
|
|
6
|
+
//#region src/chrome/band.tsx
|
|
7
|
+
/**
|
|
8
|
+
* What each separation adds to the frame `bandClasses` draws, and the two
|
|
9
|
+
* `--cue-*` names that live in this file rather than in the chassis beside it.
|
|
10
|
+
*
|
|
11
|
+
* `_band.ts` holds only what `Footer` can also render — the rhythm and the
|
|
12
|
+
* rule — because docgen's token scanner reads a chassis file whole and cannot
|
|
13
|
+
* see that `Footer` calls `bandClasses` with the literal `"rule"`. The ground
|
|
14
|
+
* is reachable only from `<Band separation="ground">`, so it is written here,
|
|
15
|
+
* next to the prop whose value selects it. `_band.ts`'s own docblock carries
|
|
16
|
+
* the argument.
|
|
17
|
+
*
|
|
18
|
+
* `rule`'s entry is the colour and not the width: the width is
|
|
19
|
+
* `--cue-band-rule` and belongs to the chassis, and both elements name
|
|
20
|
+
* `border-border` in their own class list rather than inheriting it from the
|
|
21
|
+
* other.
|
|
22
|
+
*/
|
|
23
|
+
const SEPARATION_PAINT = {
|
|
24
|
+
rule: "border-border",
|
|
25
|
+
ground: "bg-(--cue-band-ground)",
|
|
26
|
+
bleed: null,
|
|
27
|
+
none: null
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* A full-bleed horizontal section: the page's rhythm, its separation, and a
|
|
31
|
+
* column at the measure.
|
|
32
|
+
*
|
|
33
|
+
* This is `Footer`'s recipe with the footer taken out of it — a `w-full`
|
|
34
|
+
* element, a rule running edge to edge, and a centred `Container` inside so the
|
|
35
|
+
* line reaches the window while the words stop at the measure. `Footer` is
|
|
36
|
+
* built on this rather than beside it; the recipe exists once.
|
|
37
|
+
*
|
|
38
|
+
* Every dimension it spends belongs to the style axis, so the same markup
|
|
39
|
+
* composes differently under `[data-style]` without a prop changing: the
|
|
40
|
+
* vertical rhythm is `--cue-band-y` (one `--cue-space-7` with no set, doubled
|
|
41
|
+
* under `editorial`, trebled under `marketing`), the column is
|
|
42
|
+
* `--cue-measure-prose` unless `width` names a fixed rung, and the rule and the
|
|
43
|
+
* ground are `--cue-band-rule` and `--cue-band-ground`. Read `separation`'s own
|
|
44
|
+
* documentation before choosing one, because two of the four can come out to
|
|
45
|
+
* nothing and they do not vanish symmetrically: `--cue-band-ground` is
|
|
46
|
+
* `transparent` on `:root` and on two of the three sets, so a `"ground"` paints
|
|
47
|
+
* nothing in three of the four states a page can be in, while `--cue-band-rule`
|
|
48
|
+
* is `0px` under `marketing` alone. Both are deliberate and nothing warns.
|
|
49
|
+
*
|
|
50
|
+
* **Two substitution boundaries, because `--cue-band-y` is a `calc()` resolved
|
|
51
|
+
* at the element that declares it.** A `<Density>` island nested inside a
|
|
52
|
+
* styled page moves every `--cue-space-*` and the band rhythm does **not**
|
|
53
|
+
* follow it — the island inherits the rhythm already resolved above. Restate
|
|
54
|
+
* the set on the island (`<Density density="compact" styleSet="editorial">`) to
|
|
55
|
+
* re-resolve it against that island's rung. Likewise a nested `[data-theme]`
|
|
56
|
+
* under a marketing band paints the **outer** theme's `--cue-surface-1` through
|
|
57
|
+
* an already-resolved `--cue-band-ground`.
|
|
58
|
+
*
|
|
59
|
+
* It renders a `<section>`, which is not a landmark until it has an accessible
|
|
60
|
+
* name — so a band with a heading should carry `aria-labelledby` pointing at
|
|
61
|
+
* it, and a band without one costs the document nothing.
|
|
62
|
+
*
|
|
63
|
+
* Static markup — no `"use client"`.
|
|
64
|
+
*
|
|
65
|
+
* @example
|
|
66
|
+
* <Band aria-labelledby="pitch">
|
|
67
|
+
* <h2 id="pitch">One import</h2>
|
|
68
|
+
* <p>Everything on one token layer.</p>
|
|
69
|
+
* </Band>
|
|
70
|
+
* @example
|
|
71
|
+
* <Band separation="ground" width="broad">
|
|
72
|
+
* <Bento.Root cols={3}>{tiles}</Bento.Root>
|
|
73
|
+
* </Band>
|
|
74
|
+
*/
|
|
75
|
+
const Band = React.forwardRef(function Band({ className, columnClassName, separation = "rule", width = "prose", children, ...elementProps }, ref) {
|
|
76
|
+
const column = width === "prose" ? {
|
|
77
|
+
width: "full",
|
|
78
|
+
className: "max-w-(--cue-measure-prose)"
|
|
79
|
+
} : {
|
|
80
|
+
width,
|
|
81
|
+
className: null
|
|
82
|
+
};
|
|
83
|
+
return /* @__PURE__ */ jsx("section", {
|
|
84
|
+
ref,
|
|
85
|
+
"data-slot": "band",
|
|
86
|
+
"data-separation": separation,
|
|
87
|
+
className: cn(bandClasses(separation), SEPARATION_PAINT[separation], className),
|
|
88
|
+
...elementProps,
|
|
89
|
+
children: separation === "bleed" ? children : /* @__PURE__ */ jsx(Container, {
|
|
90
|
+
width: column.width,
|
|
91
|
+
className: cn(column.className, columnClassName),
|
|
92
|
+
children
|
|
93
|
+
})
|
|
94
|
+
});
|
|
95
|
+
});
|
|
96
|
+
//#endregion
|
|
97
|
+
export { Band };
|
|
@@ -41,7 +41,7 @@ const EmptyState = React.forwardRef(function EmptyState({ className, title, hint
|
|
|
41
41
|
}),
|
|
42
42
|
hint === void 0 ? null : /* @__PURE__ */ jsx("p", {
|
|
43
43
|
"data-slot": "empty-state-hint",
|
|
44
|
-
className: "max-w-[36ch] text-(length:--cue-text-ui) leading-
|
|
44
|
+
className: "max-w-[36ch] text-(length:--cue-text-ui) leading-(--cue-leading-ui) text-fg-muted",
|
|
45
45
|
children: hint
|
|
46
46
|
}),
|
|
47
47
|
children,
|
package/dist/chrome/footer.d.ts
CHANGED
|
@@ -53,6 +53,19 @@ interface FooterProps extends React.ComponentPropsWithoutRef<"footer"> {
|
|
|
53
53
|
* and reads as chrome it is not. It coexists with `StatusBar`, which is the
|
|
54
54
|
* opposite object: a strip of the frame, always on screen, never scrolled.
|
|
55
55
|
*
|
|
56
|
+
* Under the skin this **is** `Band`'s recipe — `separation="rule"`, spent
|
|
57
|
+
* through `bandClasses` rather than through `<Band>` itself, because `Band`
|
|
58
|
+
* renders a `<section>` and this has to render the `<footer>` that makes it the
|
|
59
|
+
* `contentinfo` landmark. The two dimensions that recipe carries are the
|
|
60
|
+
* rhythm and the rule, and both are the style axis's now, the same as any other
|
|
61
|
+
* band: see `separation`'s table on `Band` for what each `[data-style]` set
|
|
62
|
+
* makes them paint. With no set active nothing changes from what this component
|
|
63
|
+
* always rendered. It does **not** reach `Band`'s other two style-owned
|
|
64
|
+
* spends — the ground and the reading measure — because `separation` is the
|
|
65
|
+
* literal `"rule"` here and `width` is a `ContainerWidth`; `_band.ts`'s
|
|
66
|
+
* docblock says why that is a fact about the published manifest and not only
|
|
67
|
+
* about the markup.
|
|
68
|
+
*
|
|
56
69
|
* Static markup — no `"use client"`.
|
|
57
70
|
*
|
|
58
71
|
* @example
|
package/dist/chrome/footer.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { cn } from "../lib/cn.js";
|
|
2
2
|
import { Container } from "../layout/container.js";
|
|
3
|
+
import { bandClasses } from "./_band.js";
|
|
3
4
|
import * as React from "react";
|
|
4
5
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
5
6
|
//#region src/chrome/footer.tsx
|
|
@@ -30,6 +31,19 @@ import { jsx, jsxs } from "react/jsx-runtime";
|
|
|
30
31
|
* and reads as chrome it is not. It coexists with `StatusBar`, which is the
|
|
31
32
|
* opposite object: a strip of the frame, always on screen, never scrolled.
|
|
32
33
|
*
|
|
34
|
+
* Under the skin this **is** `Band`'s recipe — `separation="rule"`, spent
|
|
35
|
+
* through `bandClasses` rather than through `<Band>` itself, because `Band`
|
|
36
|
+
* renders a `<section>` and this has to render the `<footer>` that makes it the
|
|
37
|
+
* `contentinfo` landmark. The two dimensions that recipe carries are the
|
|
38
|
+
* rhythm and the rule, and both are the style axis's now, the same as any other
|
|
39
|
+
* band: see `separation`'s table on `Band` for what each `[data-style]` set
|
|
40
|
+
* makes them paint. With no set active nothing changes from what this component
|
|
41
|
+
* always rendered. It does **not** reach `Band`'s other two style-owned
|
|
42
|
+
* spends — the ground and the reading measure — because `separation` is the
|
|
43
|
+
* literal `"rule"` here and `width` is a `ContainerWidth`; `_band.ts`'s
|
|
44
|
+
* docblock says why that is a fact about the published manifest and not only
|
|
45
|
+
* about the markup.
|
|
46
|
+
*
|
|
33
47
|
* Static markup — no `"use client"`.
|
|
34
48
|
*
|
|
35
49
|
* @example
|
|
@@ -51,11 +65,12 @@ const Footer = React.forwardRef(function Footer({ className, columnClassName, wi
|
|
|
51
65
|
return /* @__PURE__ */ jsx("footer", {
|
|
52
66
|
ref,
|
|
53
67
|
"data-slot": "footer",
|
|
54
|
-
|
|
68
|
+
"data-separation": "rule",
|
|
69
|
+
className: cn(bandClasses("rule"), "border-border", className),
|
|
55
70
|
...elementProps,
|
|
56
71
|
children: /* @__PURE__ */ jsxs(Container, {
|
|
57
72
|
width,
|
|
58
|
-
className: cn("flex flex-col gap-(--cue-space-6)
|
|
73
|
+
className: cn("flex flex-col gap-(--cue-space-6) font-mono text-(length:--cue-text-ui)", columnClassName),
|
|
59
74
|
children: [children, meta === void 0 ? null : /* @__PURE__ */ jsx("div", {
|
|
60
75
|
"data-slot": "footer-meta",
|
|
61
76
|
className: "flex flex-wrap items-center justify-between gap-(--cue-space-3) border-t border-border pt-(--cue-space-5) font-mono text-(length:--cue-text-label) text-fg-subtle",
|
package/dist/chrome/index.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ import { BarOverflow } from "./_edge-scroller.js";
|
|
|
3
3
|
import { TREE_GUIDE_GLYPHS, TreeGuide, TreeItem, TreeRow, flattenTree } from "./_tree.js";
|
|
4
4
|
import { AppBar, AppBarActionsProps, AppBarBrandProps, AppBarLinkProps, AppBarNavProps, AppBarRegister, AppBarRootProps, AppBarSeparatorProps } from "./app-bar.js";
|
|
5
5
|
import { AppShell, AppShellAsideProps, AppShellBarProps, AppShellBodyProps, AppShellContentProps, AppShellNavTriggerProps, AppShellRootProps, AppShellScrollerProps, AppShellSidebarProps } from "./app-shell.js";
|
|
6
|
+
import { Band, BandProps, BandSeparation, BandWidth } from "./band.js";
|
|
6
7
|
import { EmptyState, EmptyStateProps } from "./empty-state.js";
|
|
7
8
|
import { Eyebrow, EyebrowProps } from "./eyebrow.js";
|
|
8
9
|
import { Footer, FooterProps } from "./footer.js";
|
|
@@ -20,4 +21,4 @@ import { ScrollableTabsList, ScrollableTabsListProps, Tabs, TabsListProps, TabsP
|
|
|
20
21
|
import { TitleBar, TitleBarProps } from "./title-bar.js";
|
|
21
22
|
import { Tree, TreeProps, TreeVisibility, TreeVisibilityToggle, TreeVisibilityToggleProps } from "./tree.js";
|
|
22
23
|
import { Toolbar, ToolbarButtonProps, ToolbarGroupProps, ToolbarRootProps, ToolbarSeparatorProps } from "./toolbar.js";
|
|
23
|
-
export { AppBar, type AppBarActionsProps, type AppBarBrandProps, type AppBarLinkProps, type AppBarNavProps, type AppBarRegister, type AppBarRootProps, type AppBarSeparatorProps, AppShell, type AppShellAsideProps, type AppShellBarProps, type AppShellBodyProps, type AppShellContentProps, type AppShellNavTriggerProps, type AppShellRootProps, type AppShellScrollerProps, type AppShellSidebarProps, type BarOverflow, EmptyState, type EmptyStateProps, Eyebrow, type EyebrowProps, Footer, type FooterProps, Inspector, type InspectorFooterProps, type InspectorRootProps, type InspectorRowProps, type InspectorSectionProps, NavigationMenu, type NavigationMenuContentProps, type NavigationMenuItemProps, type NavigationMenuLinkProps, type NavigationMenuListProps, type NavigationMenuRootProps, type NavigationMenuTriggerProps, type NavigationMenuViewportProps, PageShell, type PageShellProps, type PageWidth, Panel, PanelHeader, type PanelHeaderProps, type PanelProps, Row, type RowProps, ScrollArea, type ScrollAreaOrientation, type ScrollAreaProps, type ScrollEdges, ScrollableTabsList, type ScrollableTabsListProps, SeamList, type SeamListProps, SectionHeader, type SectionHeaderProps, SegmentedControl, type SegmentedControlItem, type SegmentedControlProps, type SegmentedControlSize, StatusBar, type StatusBarGroupProps, type StatusBarItemProps, type StatusBarProminence, type StatusBarProps, type StatusBarTone, TAB_FADE_PX, TREE_GUIDE_GLYPHS, Tabs, type TabsListProps, type TabsPanelProps, type TabsRootProps, type TabsTabProps, TitleBar, type TitleBarProps, Toolbar, type ToolbarButtonProps, type ToolbarGroupProps, type ToolbarRootProps, type ToolbarSeparatorProps, Tree, type TreeGuide, type TreeItem, type TreeProps, type TreeRow, type TreeVisibility, TreeVisibilityToggle, type TreeVisibilityToggleProps, computeScrollEdges, edgeFadeMask, flattenTree, rowVariants };
|
|
24
|
+
export { AppBar, type AppBarActionsProps, type AppBarBrandProps, type AppBarLinkProps, type AppBarNavProps, type AppBarRegister, type AppBarRootProps, type AppBarSeparatorProps, AppShell, type AppShellAsideProps, type AppShellBarProps, type AppShellBodyProps, type AppShellContentProps, type AppShellNavTriggerProps, type AppShellRootProps, type AppShellScrollerProps, type AppShellSidebarProps, Band, type BandProps, type BandSeparation, type BandWidth, type BarOverflow, EmptyState, type EmptyStateProps, Eyebrow, type EyebrowProps, Footer, type FooterProps, Inspector, type InspectorFooterProps, type InspectorRootProps, type InspectorRowProps, type InspectorSectionProps, NavigationMenu, type NavigationMenuContentProps, type NavigationMenuItemProps, type NavigationMenuLinkProps, type NavigationMenuListProps, type NavigationMenuRootProps, type NavigationMenuTriggerProps, type NavigationMenuViewportProps, PageShell, type PageShellProps, type PageWidth, Panel, PanelHeader, type PanelHeaderProps, type PanelProps, Row, type RowProps, ScrollArea, type ScrollAreaOrientation, type ScrollAreaProps, type ScrollEdges, ScrollableTabsList, type ScrollableTabsListProps, SeamList, type SeamListProps, SectionHeader, type SectionHeaderProps, SegmentedControl, type SegmentedControlItem, type SegmentedControlProps, type SegmentedControlSize, StatusBar, type StatusBarGroupProps, type StatusBarItemProps, type StatusBarProminence, type StatusBarProps, type StatusBarTone, TAB_FADE_PX, TREE_GUIDE_GLYPHS, Tabs, type TabsListProps, type TabsPanelProps, type TabsRootProps, type TabsTabProps, TitleBar, type TitleBarProps, Toolbar, type ToolbarButtonProps, type ToolbarGroupProps, type ToolbarRootProps, type ToolbarSeparatorProps, Tree, type TreeGuide, type TreeItem, type TreeProps, type TreeRow, type TreeVisibility, TreeVisibilityToggle, type TreeVisibilityToggleProps, computeScrollEdges, edgeFadeMask, flattenTree, rowVariants };
|
package/dist/chrome/index.js
CHANGED
|
@@ -2,6 +2,7 @@ import { TAB_FADE_PX, computeScrollEdges, edgeFadeMask } from "./_tabs-scroll.js
|
|
|
2
2
|
import { TREE_GUIDE_GLYPHS, flattenTree } from "./_tree.js";
|
|
3
3
|
import { AppBar } from "./app-bar.js";
|
|
4
4
|
import { AppShell } from "./app-shell.js";
|
|
5
|
+
import { Band } from "./band.js";
|
|
5
6
|
import { EmptyState } from "./empty-state.js";
|
|
6
7
|
import { Eyebrow } from "./eyebrow.js";
|
|
7
8
|
import { Footer } from "./footer.js";
|
|
@@ -18,4 +19,4 @@ import { ScrollableTabsList, Tabs } from "./tabs.js";
|
|
|
18
19
|
import { TitleBar } from "./title-bar.js";
|
|
19
20
|
import { Tree, TreeVisibilityToggle } from "./tree.js";
|
|
20
21
|
import { Toolbar } from "./toolbar.js";
|
|
21
|
-
export { AppBar, AppShell, EmptyState, Eyebrow, Footer, Inspector, NavigationMenu, PageShell, Panel, PanelHeader, Row, ScrollArea, ScrollableTabsList, SeamList, SectionHeader, SegmentedControl, StatusBar, TAB_FADE_PX, TREE_GUIDE_GLYPHS, Tabs, TitleBar, Toolbar, Tree, TreeVisibilityToggle, computeScrollEdges, edgeFadeMask, flattenTree, rowVariants };
|
|
22
|
+
export { AppBar, AppShell, Band, EmptyState, Eyebrow, Footer, Inspector, NavigationMenu, PageShell, Panel, PanelHeader, Row, ScrollArea, ScrollableTabsList, SeamList, SectionHeader, SegmentedControl, StatusBar, TAB_FADE_PX, TREE_GUIDE_GLYPHS, Tabs, TitleBar, Toolbar, Tree, TreeVisibilityToggle, computeScrollEdges, edgeFadeMask, flattenTree, rowVariants };
|
|
@@ -89,7 +89,7 @@ const NavigationMenu$1 = {
|
|
|
89
89
|
className: cn("flex cursor-pointer flex-col gap-(--cue-space-1) rounded-(--radius-control) px-(--cue-space-3) py-(--cue-space-2) font-mono text-(length:--cue-text-ui) text-fg-muted no-underline transition-colors duration-150 outline-none select-none hover:bg-surface-3 hover:text-fg focus-visible:outline-2 focus-visible:outline-solid focus-visible:-outline-offset-1 focus-visible:outline-accent data-[active]:text-accent", className),
|
|
90
90
|
...elementProps,
|
|
91
91
|
children: [/* @__PURE__ */ jsx("span", { children }), description === void 0 ? null : /* @__PURE__ */ jsx("span", {
|
|
92
|
-
className: "text-(length:--cue-text-label) leading-
|
|
92
|
+
className: "text-(length:--cue-text-label) leading-(--cue-leading-ui) text-fg-subtle",
|
|
93
93
|
children: description
|
|
94
94
|
})]
|
|
95
95
|
});
|
|
@@ -17,9 +17,9 @@ import { jsx, jsxs } from "react/jsx-runtime";
|
|
|
17
17
|
* with its own scroller — is `AppShell`, not this.
|
|
18
18
|
*/
|
|
19
19
|
const WIDTHS = {
|
|
20
|
-
narrow: "max-w-
|
|
21
|
-
wide: "max-w-
|
|
22
|
-
broad: "max-w-
|
|
20
|
+
narrow: "max-w-(--cue-measure-narrow)",
|
|
21
|
+
wide: "max-w-(--cue-measure-wide)",
|
|
22
|
+
broad: "max-w-(--cue-measure-broad)",
|
|
23
23
|
full: ""
|
|
24
24
|
};
|
|
25
25
|
/**
|
|
@@ -60,7 +60,7 @@ const PageShell = React.forwardRef(function PageShell({ className, width = "narr
|
|
|
60
60
|
}),
|
|
61
61
|
subtitle === void 0 ? null : /* @__PURE__ */ jsx("p", {
|
|
62
62
|
"data-slot": "page-shell-subtitle",
|
|
63
|
-
className: "font-mono text-(length:--cue-text-ui) leading-
|
|
63
|
+
className: "font-mono text-(length:--cue-text-ui) leading-(--cue-leading-ui) text-fg-muted",
|
|
64
64
|
children: subtitle
|
|
65
65
|
})
|
|
66
66
|
]
|
|
@@ -96,7 +96,7 @@ function ExportDialog({ open, onOpenChange, overrides, scope, defaultFormat = "c
|
|
|
96
96
|
}), /* @__PURE__ */ jsx("pre", {
|
|
97
97
|
"data-testid": "configurator-export-text",
|
|
98
98
|
"data-slot": "configurator-export-text",
|
|
99
|
-
className: "max-h-[38vh] overflow-auto rounded-(--radius-control) border border-border bg-sunken p-(--cue-space-3) font-mono text-(length:--cue-text-label) leading-
|
|
99
|
+
className: "max-h-[38vh] overflow-auto rounded-(--radius-control) border border-border bg-sunken p-(--cue-space-3) font-mono text-(length:--cue-text-label) leading-(--cue-leading-ui) whitespace-pre text-fg",
|
|
100
100
|
children: entry.text
|
|
101
101
|
})]
|
|
102
102
|
}, entry.id))]
|
|
@@ -327,7 +327,7 @@ function ShapeSection({ edits, className }) {
|
|
|
327
327
|
bounds: DENSITY_NUDGE
|
|
328
328
|
}),
|
|
329
329
|
/* @__PURE__ */ jsxs("p", {
|
|
330
|
-
className: "font-mono text-(length:--cue-text-micro) leading-
|
|
330
|
+
className: "font-mono text-(length:--cue-text-micro) leading-(--cue-leading-ui) text-fg-subtle",
|
|
331
331
|
children: [
|
|
332
332
|
"Density factor scales app geometry that reads ",
|
|
333
333
|
/* @__PURE__ */ jsx("code", { children: "var(--cue-density)" }),
|
|
@@ -51,7 +51,7 @@ function AgentCard({ name, description, provider, version, model, endpoint, skil
|
|
|
51
51
|
})]
|
|
52
52
|
}),
|
|
53
53
|
/* @__PURE__ */ jsx("p", {
|
|
54
|
-
className: "text-fg-muted text-(length:--cue-text-ui) leading-
|
|
54
|
+
className: "text-fg-muted text-(length:--cue-text-ui) leading-(--cue-leading-ui)",
|
|
55
55
|
children: description
|
|
56
56
|
}),
|
|
57
57
|
/* @__PURE__ */ jsx("div", {
|
|
@@ -33,7 +33,7 @@ function AgentHandoff({ from, to, reason, carried, settled, className, ...props
|
|
|
33
33
|
]
|
|
34
34
|
}),
|
|
35
35
|
/* @__PURE__ */ jsx("p", {
|
|
36
|
-
className: "text-fg-muted text-(length:--cue-text-ui) leading-
|
|
36
|
+
className: "text-fg-muted text-(length:--cue-text-ui) leading-(--cue-leading-ui)",
|
|
37
37
|
children: reason
|
|
38
38
|
}),
|
|
39
39
|
carried.length > 0 && /* @__PURE__ */ jsxs("div", {
|
|
@@ -42,7 +42,7 @@ function AgentHandoff({ from, to, reason, carried, settled, className, ...props
|
|
|
42
42
|
className: cn("font-mono text-(length:--cue-text-label) tracking-tight", "text-fg-subtle"),
|
|
43
43
|
children: "carried over"
|
|
44
44
|
}), carried.map((item) => /* @__PURE__ */ jsx("span", {
|
|
45
|
-
className: "text-fg-muted border-border border-s ps-2.5 text-(length:--cue-text-ui) leading-
|
|
45
|
+
className: "text-fg-muted border-border border-s ps-2.5 text-(length:--cue-text-ui) leading-(--cue-leading-ui)",
|
|
46
46
|
children: item
|
|
47
47
|
}, item))]
|
|
48
48
|
})
|
|
@@ -54,7 +54,7 @@ function CanvasSplitMessage({ speaker, className, ...props }) {
|
|
|
54
54
|
return /* @__PURE__ */ jsx("div", {
|
|
55
55
|
"data-slot": "canvas-split-message",
|
|
56
56
|
"data-speaker": speaker,
|
|
57
|
-
className: cn("cue-elements-fade-in cue-elements-animate-in cue-elements-fill-mode-both text-(length:--cue-text-body) leading-
|
|
57
|
+
className: cn("cue-elements-fade-in cue-elements-animate-in cue-elements-fill-mode-both text-(length:--cue-text-body) leading-(--cue-leading-ui) duration-300", speaker === "user" ? cn(field, "text-fg-muted ms-auto rounded-(--radius-overlay) px-3 py-2") : "text-fg-muted", className),
|
|
58
58
|
...props
|
|
59
59
|
});
|
|
60
60
|
}
|
|
@@ -130,7 +130,7 @@ function CanvasSplitBody({ writing, className, children, ...props }) {
|
|
|
130
130
|
function CanvasSplitLine({ heading, className, ...props }) {
|
|
131
131
|
return /* @__PURE__ */ jsx("p", {
|
|
132
132
|
"data-slot": "canvas-split-line",
|
|
133
|
-
className: cn("cue-elements-fade-in cue-elements-slide-in-from-bottom-1 cue-elements-animate-in cue-elements-fill-mode-both text-(length:--cue-text-body) leading-
|
|
133
|
+
className: cn("cue-elements-fade-in cue-elements-slide-in-from-bottom-1 cue-elements-animate-in cue-elements-fill-mode-both text-(length:--cue-text-body) leading-(--cue-leading-ui) duration-300", heading ? "text-fg font-medium" : "text-fg-muted", className),
|
|
134
134
|
...props
|
|
135
135
|
});
|
|
136
136
|
}
|
|
@@ -54,7 +54,7 @@ function ChatPanelUserMessage({ className, ...props }) {
|
|
|
54
54
|
function ChatPanelAssistantMessage({ className, ...props }) {
|
|
55
55
|
return /* @__PURE__ */ jsx("p", {
|
|
56
56
|
"data-slot": "chat-panel-assistant-message",
|
|
57
|
-
className: cn("text-fg-muted max-w-[85%] self-start text-(length:--cue-text-ui) leading-
|
|
57
|
+
className: cn("text-fg-muted max-w-[85%] self-start text-(length:--cue-text-ui) leading-(--cue-leading-ui)", className),
|
|
58
58
|
...props
|
|
59
59
|
});
|
|
60
60
|
}
|
|
@@ -54,7 +54,7 @@ function CodeDiff({ filename, additions, deletions, lines, cycle, className, ...
|
|
|
54
54
|
children: /* @__PURE__ */ jsx("div", {
|
|
55
55
|
className: codeSurface,
|
|
56
56
|
children: lines.map((line, i) => /* @__PURE__ */ jsxs("div", {
|
|
57
|
-
className: cn("cue-elements-fade-in cue-elements-animate-in cue-elements-fill-mode-both flex px-4 py-0.5 leading-
|
|
57
|
+
className: cn("cue-elements-fade-in cue-elements-animate-in cue-elements-fill-mode-both flex px-4 py-0.5 leading-(--cue-leading-ui) whitespace-pre duration-300", line.kind === "context" && "text-fg-muted", line.kind === "added" && "bg-ok/10 text-ok", line.kind === "removed" && "bg-danger/10 text-danger"),
|
|
58
58
|
style: { animationDelay: `${i * 60}ms` },
|
|
59
59
|
children: [/* @__PURE__ */ jsx("span", {
|
|
60
60
|
className: "w-4 shrink-0 select-none",
|
|
@@ -47,7 +47,7 @@ function CodeRunner({ language, code, state, output, durationMs, onRun, classNam
|
|
|
47
47
|
]
|
|
48
48
|
}),
|
|
49
49
|
/* @__PURE__ */ jsx("pre", {
|
|
50
|
-
className: "border-border overflow-x-auto border-t px-3.5 py-2.5 font-mono text-(length:--cue-text-ui) leading-
|
|
50
|
+
className: "border-border overflow-x-auto border-t px-3.5 py-2.5 font-mono text-(length:--cue-text-ui) leading-(--cue-leading-ui)",
|
|
51
51
|
children: /* @__PURE__ */ jsx("code", {
|
|
52
52
|
className: "text-fg-muted",
|
|
53
53
|
children: code
|
|
@@ -65,7 +65,7 @@ function CodeRunner({ language, code, state, output, durationMs, onRun, classNam
|
|
|
65
65
|
children: /* @__PURE__ */ jsx("div", {
|
|
66
66
|
className: cn("w-max min-w-full", "flex flex-col"),
|
|
67
67
|
children: output.map((line, i) => /* @__PURE__ */ jsx("span", {
|
|
68
|
-
className: cn("cue-elements-fade-in cue-elements-animate-in cue-elements-fill-mode-both font-mono text-(length:--cue-text-ui) leading-
|
|
68
|
+
className: cn("cue-elements-fade-in cue-elements-animate-in cue-elements-fill-mode-both font-mono text-(length:--cue-text-ui) leading-(--cue-leading-ui) whitespace-pre", state === "error" ? "text-danger" : "text-fg-muted"),
|
|
69
69
|
style: { animationDelay: `${i * 80}ms` },
|
|
70
70
|
children: line
|
|
71
71
|
}, `${i}-${line}`))
|
|
@@ -60,7 +60,7 @@ function ComparisonCard({ traitLabels, options, recommendedId, reason, className
|
|
|
60
60
|
}, option.id);
|
|
61
61
|
})
|
|
62
62
|
}), /* @__PURE__ */ jsx("p", {
|
|
63
|
-
className: "text-fg-muted text-(length:--cue-text-ui) leading-
|
|
63
|
+
className: "text-fg-muted text-(length:--cue-text-ui) leading-(--cue-leading-ui)",
|
|
64
64
|
children: reason
|
|
65
65
|
})]
|
|
66
66
|
});
|
|
@@ -30,7 +30,7 @@ function ConfidenceMarker({ claims, hoveredId, onHover, className, ...props }) {
|
|
|
30
30
|
className: cn("flex w-full max-w-sm flex-col gap-2.5", className),
|
|
31
31
|
...props,
|
|
32
32
|
children: [/* @__PURE__ */ jsx("p", {
|
|
33
|
-
className: "text-(length:--cue-text-body) leading-
|
|
33
|
+
className: "text-(length:--cue-text-body) leading-(--cue-leading-ui)",
|
|
34
34
|
children: claims.map((claim) => /* @__PURE__ */ jsxs("button", {
|
|
35
35
|
type: "button",
|
|
36
36
|
"aria-describedby": hoveredId === claim.id ? basisId : void 0,
|
|
@@ -58,7 +58,7 @@ function ConversationSearch({ query, hits, activeIndex, onQueryChange, onStep, c
|
|
|
58
58
|
})
|
|
59
59
|
]
|
|
60
60
|
}), active && /* @__PURE__ */ jsxs("div", {
|
|
61
|
-
className: cn("bg-fg/[0.06]", "cue-elements-fade-in cue-elements-animate-in rounded-(--radius-surface) px-3 py-2 text-(length:--cue-text-ui) leading-
|
|
61
|
+
className: cn("bg-fg/[0.06]", "cue-elements-fade-in cue-elements-animate-in rounded-(--radius-surface) px-3 py-2 text-(length:--cue-text-ui) leading-(--cue-leading-ui) duration-200"),
|
|
62
62
|
children: [
|
|
63
63
|
/* @__PURE__ */ jsx("span", {
|
|
64
64
|
className: "text-fg-muted",
|
|
@@ -35,7 +35,7 @@ function DaySeparator({ messages, className, ...props }) {
|
|
|
35
35
|
}), /* @__PURE__ */ jsxs("div", {
|
|
36
36
|
className: cn("group flex items-baseline gap-2", message.role === "user" && "flex-row-reverse"),
|
|
37
37
|
children: [/* @__PURE__ */ jsx("span", {
|
|
38
|
-
className: cn("max-w-[80%] text-(length:--cue-text-body) leading-
|
|
38
|
+
className: cn("max-w-[80%] text-(length:--cue-text-body) leading-(--cue-leading-ui) break-words", message.role === "user" ? "bg-surface-1 rounded-(--radius-overlay) px-3.5 py-2" : "text-fg-muted"),
|
|
39
39
|
children: message.text
|
|
40
40
|
}), /* @__PURE__ */ jsx("span", {
|
|
41
41
|
className: cn(mono, "text-transparent group-hover:text-fg-subtle shrink-0 tabular-nums transition-colors"),
|
|
@@ -55,7 +55,7 @@ function DocumentReference({ title, pages, anchors, activePage, onJump, classNam
|
|
|
55
55
|
className: cn(mono, "text-fg-subtle"),
|
|
56
56
|
children: ["p. ", anchor.page]
|
|
57
57
|
}), /* @__PURE__ */ jsx("span", {
|
|
58
|
-
className: "text-fg-muted border-border-strong border-s-2 ps-2 text-(length:--cue-text-ui) leading-
|
|
58
|
+
className: "text-fg-muted border-border-strong border-s-2 ps-2 text-(length:--cue-text-ui) leading-(--cue-leading-ui) break-words",
|
|
59
59
|
children: anchor.quote
|
|
60
60
|
})]
|
|
61
61
|
}, `${anchor.page}-${i}`))
|
|
@@ -42,7 +42,7 @@ function EditMessage({ value, discardedReplies, editing, onValueChange, onSave,
|
|
|
42
42
|
onChange: (event) => onValueChange?.(event.target.value),
|
|
43
43
|
rows: 2,
|
|
44
44
|
"aria-label": "Edit your message",
|
|
45
|
-
className: cn(field, "text-fg focus-visible:outline-2 focus-visible:outline-solid focus-visible:outline-offset-1 focus-visible:outline-accent resize-none rounded-(--radius-surface) px-3 py-2.5 text-(length:--cue-text-body) leading-
|
|
45
|
+
className: cn(field, "text-fg focus-visible:outline-2 focus-visible:outline-solid focus-visible:outline-offset-1 focus-visible:outline-accent resize-none rounded-(--radius-surface) px-3 py-2.5 text-(length:--cue-text-body) leading-(--cue-leading-ui) outline-none")
|
|
46
46
|
}),
|
|
47
47
|
discardedReplies > 0 && /* @__PURE__ */ jsxs("div", {
|
|
48
48
|
className: "flex items-center gap-2 text-warn",
|
|
@@ -43,7 +43,7 @@ function ElicitationForm({ server, message, fields, state, onAccept, onDecline,
|
|
|
43
43
|
]
|
|
44
44
|
}),
|
|
45
45
|
/* @__PURE__ */ jsx("p", {
|
|
46
|
-
className: "text-fg-muted text-(length:--cue-text-ui) leading-
|
|
46
|
+
className: "text-fg-muted text-(length:--cue-text-ui) leading-(--cue-leading-ui)",
|
|
47
47
|
children: message
|
|
48
48
|
}),
|
|
49
49
|
/* @__PURE__ */ jsx("div", {
|
|
@@ -41,7 +41,7 @@ function GuardrailNotice({ title, explanation, policy, alternatives, onPick, cla
|
|
|
41
41
|
]
|
|
42
42
|
}),
|
|
43
43
|
/* @__PURE__ */ jsx("p", {
|
|
44
|
-
className: "text-fg-muted text-(length:--cue-text-ui) leading-
|
|
44
|
+
className: "text-fg-muted text-(length:--cue-text-ui) leading-(--cue-leading-ui)",
|
|
45
45
|
children: explanation
|
|
46
46
|
}),
|
|
47
47
|
alternatives.length > 0 && /* @__PURE__ */ jsxs("div", {
|
|
@@ -35,7 +35,7 @@ function ImageGeneration({ prompt, generating, className, ...props }) {
|
|
|
35
35
|
}),
|
|
36
36
|
/* @__PURE__ */ jsx("div", {
|
|
37
37
|
"aria-hidden": true,
|
|
38
|
-
className: cn("absolute inset-0 transition-[opacity,filter] duration-1000 ease-out motion-reduce:transition-none", generating ? "opacity-0 blur-xl" : "blur-
|
|
38
|
+
className: cn("absolute inset-0 transition-[opacity,filter] duration-1000 ease-out motion-reduce:transition-none", generating ? "opacity-0 blur-xl" : "blur-none opacity-100"),
|
|
39
39
|
style: { background: "radial-gradient(120% 90% at 20% 100%, oklch(0.45 0.09 265) 0%, transparent 55%), radial-gradient(110% 80% at 85% 90%, oklch(0.62 0.1 300 / 0.8) 0%, transparent 60%), radial-gradient(130% 100% at 60% 0%, oklch(0.88 0.06 60) 0%, oklch(0.74 0.09 25 / 0.9) 45%, transparent 75%), linear-gradient(to top, oklch(0.35 0.06 275), oklch(0.82 0.07 50))" }
|
|
40
40
|
}),
|
|
41
41
|
/* @__PURE__ */ jsx("span", {
|
|
@@ -38,7 +38,7 @@ function Citation({ index, source, open, onOpenChange }) {
|
|
|
38
38
|
children: source.title
|
|
39
39
|
}),
|
|
40
40
|
/* @__PURE__ */ jsx("p", {
|
|
41
|
-
className: "text-fg-muted mt-1 text-(length:--cue-text-body) leading-
|
|
41
|
+
className: "text-fg-muted mt-1 text-(length:--cue-text-body) leading-(--cue-leading-ui)",
|
|
42
42
|
children: source.snippet
|
|
43
43
|
})
|
|
44
44
|
]
|
|
@@ -68,7 +68,7 @@ function Citation({ index, source, open, onOpenChange }) {
|
|
|
68
68
|
function InlineCitation({ sources, openIndex, onOpenIndexChange, className, ...props }) {
|
|
69
69
|
return /* @__PURE__ */ jsxs("p", {
|
|
70
70
|
"data-slot": "inline-citation",
|
|
71
|
-
className: cn("text-fg max-w-sm text-(length:--cue-text-body) leading-
|
|
71
|
+
className: cn("text-fg max-w-sm text-(length:--cue-text-body) leading-(--cue-leading-ui)", className),
|
|
72
72
|
...props,
|
|
73
73
|
children: [
|
|
74
74
|
"Optimistic updates keep the thread responsive while the server confirms the write",
|
|
@@ -403,7 +403,7 @@ const MarkdownText = React.forwardRef(function MarkdownText({ className, childre
|
|
|
403
403
|
ref,
|
|
404
404
|
"data-slot": "markdown-text",
|
|
405
405
|
"data-streaming": streaming ? "" : void 0,
|
|
406
|
-
className: cn("flex min-w-0 flex-col gap-(--cue-space-3) text-(length:--cue-text-body) leading-
|
|
406
|
+
className: cn("flex min-w-0 flex-col gap-(--cue-space-3) text-(length:--cue-text-body) leading-(--cue-leading-ui) break-words whitespace-normal", className),
|
|
407
407
|
...elementProps,
|
|
408
408
|
children: /* @__PURE__ */ jsx(Markdown, {
|
|
409
409
|
components,
|
|
@@ -23,7 +23,7 @@ function MathBlock({ label, steps, visibleSteps, className, ...props }) {
|
|
|
23
23
|
}), take(steps, visibleSteps).map((step, i) => /* @__PURE__ */ jsxs("div", {
|
|
24
24
|
className: "cue-elements-fade-in cue-elements-slide-in-from-bottom-1 cue-elements-animate-in cue-elements-fill-mode-both flex flex-col gap-1 duration-300",
|
|
25
25
|
children: [/* @__PURE__ */ jsx("span", {
|
|
26
|
-
className: "text-fg overflow-x-auto py-1 text-center font-serif text-(length:--cue-text-emphasis) leading-
|
|
26
|
+
className: "text-fg overflow-x-auto py-1 text-center font-serif text-(length:--cue-text-emphasis) leading-(--cue-leading-ui) italic",
|
|
27
27
|
children: step.expression
|
|
28
28
|
}), step.note && /* @__PURE__ */ jsx("span", {
|
|
29
29
|
className: cn("font-mono text-(length:--cue-text-label) tracking-tight", "text-fg-subtle text-center"),
|
|
@@ -32,7 +32,7 @@ function MessageBranches({ variants, index, onIndexChange, className, ...props }
|
|
|
32
32
|
className: cn("flex max-w-sm flex-col gap-2", className),
|
|
33
33
|
...props,
|
|
34
34
|
children: [/* @__PURE__ */ jsx("p", {
|
|
35
|
-
className: "cue-elements-fade-in cue-elements-slide-in-from-bottom-1 cue-elements-animate-in text-fg min-h-[4.25rem] text-(length:--cue-text-body) leading-
|
|
35
|
+
className: "cue-elements-fade-in cue-elements-slide-in-from-bottom-1 cue-elements-animate-in text-fg min-h-[4.25rem] text-(length:--cue-text-body) leading-(--cue-leading-ui) duration-300 motion-reduce:animate-none",
|
|
36
36
|
children: message
|
|
37
37
|
}, index), /* @__PURE__ */ jsxs("div", {
|
|
38
38
|
className: "flex items-center gap-1",
|
|
@@ -30,7 +30,7 @@ function MessagePair({ userMessage, words, visibleWords, streaming, variant = "b
|
|
|
30
30
|
}), /* @__PURE__ */ jsxs("div", {
|
|
31
31
|
className: "group/message flex flex-col items-start",
|
|
32
32
|
children: [/* @__PURE__ */ jsxs("p", {
|
|
33
|
-
className: "min-h-[4.25rem] text-(length:--cue-text-body) leading-
|
|
33
|
+
className: "min-h-[4.25rem] text-(length:--cue-text-body) leading-(--cue-leading-ui)",
|
|
34
34
|
children: [shown.map((word, index) => {
|
|
35
35
|
const fresh = streaming && shown.length - 1 - index < 2;
|
|
36
36
|
return /* @__PURE__ */ jsxs("span", {
|
|
@@ -37,11 +37,11 @@ function Onboarding({ steps, index, onNext, onSkip, className, ...props }) {
|
|
|
37
37
|
children: step.title
|
|
38
38
|
}),
|
|
39
39
|
/* @__PURE__ */ jsx("p", {
|
|
40
|
-
className: "text-fg-muted text-(length:--cue-text-body) leading-
|
|
40
|
+
className: "text-fg-muted text-(length:--cue-text-body) leading-(--cue-leading-ui) break-words",
|
|
41
41
|
children: step.body
|
|
42
42
|
}),
|
|
43
43
|
/* @__PURE__ */ jsx("span", {
|
|
44
|
-
className: cn(field, "text-fg-muted rounded-(--radius-surface) px-3 py-2 text-(length:--cue-text-body) leading-
|
|
44
|
+
className: cn(field, "text-fg-muted rounded-(--radius-surface) px-3 py-2 text-(length:--cue-text-body) leading-(--cue-leading-ui)"),
|
|
45
45
|
children: step.example
|
|
46
46
|
})
|
|
47
47
|
]
|
|
@@ -100,7 +100,7 @@ function PromptLibrary({ prompts, query, selectedId, onQueryChange, onSelect, on
|
|
|
100
100
|
selected && /* @__PURE__ */ jsxs("div", {
|
|
101
101
|
className: cn("bg-fg/[0.06]", "cue-elements-fade-in cue-elements-animate-in flex flex-col gap-2 rounded-(--radius-surface) p-2.5 duration-200"),
|
|
102
102
|
children: [/* @__PURE__ */ jsx("p", {
|
|
103
|
-
className: "text-fg-muted text-(length:--cue-text-ui) leading-
|
|
103
|
+
className: "text-fg-muted text-(length:--cue-text-ui) leading-(--cue-leading-ui) break-words",
|
|
104
104
|
children: selected.body
|
|
105
105
|
}), selected.variables.length > 0 && /* @__PURE__ */ jsx("div", {
|
|
106
106
|
className: "flex flex-wrap gap-1",
|
|
@@ -31,7 +31,7 @@ function QuoteReply({ before, selection, after, actions, toolbarVisible, quoted,
|
|
|
31
31
|
...props,
|
|
32
32
|
children: [
|
|
33
33
|
/* @__PURE__ */ jsxs("p", {
|
|
34
|
-
className: "relative text-(length:--cue-text-body) leading-
|
|
34
|
+
className: "relative text-(length:--cue-text-body) leading-(--cue-leading-ui)",
|
|
35
35
|
children: [
|
|
36
36
|
/* @__PURE__ */ jsx("span", {
|
|
37
37
|
className: "text-fg-muted",
|
|
@@ -68,7 +68,7 @@ function QuoteReply({ before, selection, after, actions, toolbarVisible, quoted,
|
|
|
68
68
|
className: cn("font-mono text-(length:--cue-text-label) tracking-tight", "text-fg-subtle"),
|
|
69
69
|
children: "replying to"
|
|
70
70
|
}), /* @__PURE__ */ jsx("div", {
|
|
71
|
-
className: "border-border-strong text-fg-muted border-s-2 ps-2.5 text-(length:--cue-text-ui) leading-
|
|
71
|
+
className: "border-border-strong text-fg-muted border-s-2 ps-2.5 text-(length:--cue-text-ui) leading-(--cue-leading-ui)",
|
|
72
72
|
children: quoted
|
|
73
73
|
})]
|
|
74
74
|
})
|
|
@@ -29,7 +29,7 @@ function ReadAloud({ words, spokenIndex, playing, rate, elapsed, duration, onTog
|
|
|
29
29
|
className: cn(paper, "flex w-full max-w-sm flex-col gap-3 rounded-(--radius-overlay) p-3.5", className),
|
|
30
30
|
...props,
|
|
31
31
|
children: [/* @__PURE__ */ jsx("p", {
|
|
32
|
-
className: "text-(length:--cue-text-body) leading-
|
|
32
|
+
className: "text-(length:--cue-text-body) leading-(--cue-leading-ui)",
|
|
33
33
|
children: words.map((word, i) => /* @__PURE__ */ jsxs("span", {
|
|
34
34
|
className: cn("transition-colors duration-200 motion-reduce:transition-none", i < spokenIndex ? "text-fg-subtle" : i === spokenIndex ? "text-fg rounded-(--radius-control) bg-stream/15" : "text-fg-muted"),
|
|
35
35
|
children: [word, " "]
|
|
@@ -61,7 +61,7 @@ function ReasoningPanel({ steps, visibleSteps, streaming, open, onOpenChange, re
|
|
|
61
61
|
className: "text-fg text-(length:--cue-text-body) font-medium",
|
|
62
62
|
children: step.title
|
|
63
63
|
}), /* @__PURE__ */ jsx("p", {
|
|
64
|
-
className: "text-fg-muted mt-0.5 text-(length:--cue-text-body) leading-
|
|
64
|
+
className: "text-fg-muted mt-0.5 text-(length:--cue-text-body) leading-(--cue-leading-ui) break-words",
|
|
65
65
|
children: step.body
|
|
66
66
|
})]
|
|
67
67
|
})]
|
|
@@ -40,7 +40,7 @@ function RecommendationCard({ state, question, children, confidenceLabel, accept
|
|
|
40
40
|
children: question
|
|
41
41
|
}),
|
|
42
42
|
/* @__PURE__ */ jsx("p", {
|
|
43
|
-
className: "text-fg-muted text-(length:--cue-text-body) leading-
|
|
43
|
+
className: "text-fg-muted text-(length:--cue-text-body) leading-(--cue-leading-ui)",
|
|
44
44
|
children
|
|
45
45
|
}),
|
|
46
46
|
/* @__PURE__ */ jsx("div", {
|
|
@@ -58,7 +58,7 @@ function ResearchReport({ title, sections, sourcesRead, className, ...props }) {
|
|
|
58
58
|
})
|
|
59
59
|
]
|
|
60
60
|
}), section.preview && /* @__PURE__ */ jsx("p", {
|
|
61
|
-
className: "text-fg-muted cue-elements-fade-in cue-elements-animate-in ps-5.5 text-(length:--cue-text-ui) leading-
|
|
61
|
+
className: "text-fg-muted cue-elements-fade-in cue-elements-animate-in ps-5.5 text-(length:--cue-text-ui) leading-(--cue-leading-ui) duration-300",
|
|
62
62
|
children: section.preview
|
|
63
63
|
})]
|
|
64
64
|
}, section.id))
|
|
@@ -61,7 +61,7 @@ function RetrievalChunks({ query, chunks, visibleCount, searching, className, ..
|
|
|
61
61
|
]
|
|
62
62
|
}),
|
|
63
63
|
/* @__PURE__ */ jsx("p", {
|
|
64
|
-
className: "text-fg-muted line-clamp-2 text-(length:--cue-text-ui) leading-
|
|
64
|
+
className: "text-fg-muted line-clamp-2 text-(length:--cue-text-ui) leading-(--cue-leading-ui)",
|
|
65
65
|
children: chunk.text
|
|
66
66
|
}),
|
|
67
67
|
/* @__PURE__ */ jsx("span", {
|
|
@@ -80,7 +80,7 @@ function ReviewableDiff({ filename, hunks, onKeep, onDiscard, onApply, className
|
|
|
80
80
|
children: /* @__PURE__ */ jsx("div", {
|
|
81
81
|
className: codeSurface,
|
|
82
82
|
children: hunk.lines.map((line, i) => /* @__PURE__ */ jsxs("div", {
|
|
83
|
-
className: cn("flex px-4 py-0.5 leading-
|
|
83
|
+
className: cn("flex px-4 py-0.5 leading-(--cue-leading-ui) whitespace-pre", line.kind === "context" && "text-fg-subtle", line.kind === "added" && "bg-ok/10 text-ok", line.kind === "removed" && "bg-danger/10 text-danger"),
|
|
84
84
|
children: [/* @__PURE__ */ jsx("span", {
|
|
85
85
|
className: "w-4 shrink-0 select-none",
|
|
86
86
|
children: GUTTER[line.kind]
|