@tangle-network/ui 9.1.3 → 10.0.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 CHANGED
@@ -1,5 +1,18 @@
1
1
  # @tangle-network/ui
2
2
 
3
+ ## 10.0.0
4
+
5
+ ### Patch Changes
6
+
7
+ - 68e5053: Transcript spacing, markdown styling, and the remaining WCAG AA fixes.
8
+
9
+ - **Markdown was unstyled**: `@tailwindcss/typography` isn't loaded and `tangle-prose` was undefined, so structured markdown had no styling — table cells collided (no dividers/padding) and text ran flush into code blocks. Defined `tangle-prose` (self-contained, theme-tokened): tables get border-collapse hairline dividers + cell padding, and blocks (headings, paragraphs, lists, `pre`, code) get proper vertical rhythm. Links use `--accent-text` (readable in every theme).
10
+ - **Timeline spacing**: user messages sat flush against the status/tool/agent row below them. They're off-spine, so they now carry their own vertical rhythm (`mt-6 mb-4`).
11
+ - **WCAG AA (measured live across 7 themes)**: `--btn-primary-*` (dark + all named themes were 4.47/2.98 → now ≥5.9 via `#5B4ED4`/`#4F46E5`); `--hsl-destructive` button/badge (3.67 → ≥4.5); named light themes now carry light-tuned `--hsl-destructive`/`--hsl-secondary-foreground`/`--surface-neutral-text` (were inheriting dark values, secondary badge ~1.05); input borders (`--input` → `--hsl-muted-foreground`) now clear 1.4.11 3:1 as visible field boundaries.
12
+
13
+ - Updated dependencies [68e5053]
14
+ - @tangle-network/brand@0.9.0
15
+
3
16
  ## 9.1.3
4
17
 
5
18
  ### Patch Changes
package/dist/chat.js CHANGED
@@ -5,7 +5,7 @@ import {
5
5
  MessageList,
6
6
  ThinkingIndicator,
7
7
  UserMessage
8
- } from "./chunk-7BMLW3H2.js";
8
+ } from "./chunk-KHO7DYXH.js";
9
9
  import "./chunk-AZWDI2JG.js";
10
10
  import "./chunk-HHYUPAOJ.js";
11
11
  import "./chunk-INMWNFAS.js";
@@ -242,7 +242,7 @@ function AgentTimeline({
242
242
  const timelineItems = renderedItems.filter((item) => !(item.kind === "message" && item.role === "user"));
243
243
  return /* @__PURE__ */ jsx4("div", { className: cn("mx-auto w-full max-w-5xl px-4 py-4", className), children: renderedItems.map((item, index) => {
244
244
  if (item.kind === "message" && item.role === "user") {
245
- return /* @__PURE__ */ jsx4(UserMessage, { content: item.content, timestamp: item.timestamp }, item.id);
245
+ return /* @__PURE__ */ jsx4("div", { className: "mt-6 mb-4 first:mt-0", children: /* @__PURE__ */ jsx4(UserMessage, { content: item.content, timestamp: item.timestamp }) }, item.id);
246
246
  }
247
247
  const timelineIndex = timelineItems.indexOf(item);
248
248
  const isLast = timelineIndex === timelineItems.length - 1;
@@ -610,6 +610,7 @@ function ToastContainer({ toasts, onDismiss }) {
610
610
  return /* @__PURE__ */ jsx8(
611
611
  "div",
612
612
  {
613
+ role: "region",
613
614
  className: "fixed right-4 bottom-4 z-50 flex max-w-md flex-col gap-2",
614
615
  "aria-label": "Notifications",
615
616
  children: toasts.map((toast) => /* @__PURE__ */ jsx8(ToastComponent, { ...toast, onDismiss }, toast.id))
package/dist/index.js CHANGED
@@ -109,7 +109,7 @@ import {
109
109
  UploadProgress,
110
110
  useTheme,
111
111
  useToast
112
- } from "./chunk-XY2FP763.js";
112
+ } from "./chunk-XZFJAF6G.js";
113
113
  import {
114
114
  Avatar,
115
115
  AvatarFallback,
@@ -137,7 +137,7 @@ import {
137
137
  MessageList,
138
138
  ThinkingIndicator,
139
139
  UserMessage
140
- } from "./chunk-7BMLW3H2.js";
140
+ } from "./chunk-KHO7DYXH.js";
141
141
  import {
142
142
  useAutoScroll,
143
143
  useRunCollapseState,
@@ -44,7 +44,7 @@ import {
44
44
  UploadProgress,
45
45
  useTheme,
46
46
  useToast
47
- } from "./chunk-XY2FP763.js";
47
+ } from "./chunk-XZFJAF6G.js";
48
48
  import {
49
49
  Avatar,
50
50
  AvatarFallback,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tangle-network/ui",
3
- "version": "9.1.3",
3
+ "version": "10.0.0",
4
4
  "description": "Generic React UI components for Tangle products — primitives, chat, run, files, editor, markdown.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -132,7 +132,7 @@
132
132
  "react": "^18 || ^19",
133
133
  "react-dom": "^18 || ^19",
134
134
  "react-router": "^7",
135
- "@tangle-network/brand": "^0.8.2"
135
+ "@tangle-network/brand": "^0.9.0"
136
136
  },
137
137
  "peerDependenciesMeta": {
138
138
  "@nanostores/react": {
@@ -265,9 +265,14 @@ export function AgentTimeline({
265
265
  return (
266
266
  <div className={cn("mx-auto w-full max-w-5xl px-4 py-4", className)}>
267
267
  {renderedItems.map((item, index) => {
268
- // User messages: right-aligned bubble, no connector
268
+ // User messages: right-aligned bubble, off-spine — needs its own vertical
269
+ // rhythm so it doesn't sit flush against the status/tool/agent row below.
269
270
  if (item.kind === "message" && item.role === "user") {
270
- return <UserMessage key={item.id} content={item.content} timestamp={item.timestamp} />;
271
+ return (
272
+ <div key={item.id} className="mt-6 mb-4 first:mt-0">
273
+ <UserMessage content={item.content} timestamp={item.timestamp} />
274
+ </div>
275
+ );
271
276
  }
272
277
 
273
278
  const timelineIndex = timelineItems.indexOf(item);
@@ -93,6 +93,11 @@ interface ToastContainerProps {
93
93
  export function ToastContainer({ toasts, onDismiss }: ToastContainerProps) {
94
94
  return (
95
95
  <div
96
+ // A generic div can't carry aria-label (WCAG 4.1.2 / axe
97
+ // aria-prohibited-attr); role="region" makes it a valid, navigable
98
+ // landmark. Live announcement stays on each toast (role="alert"
99
+ // aria-live="polite"), so the region itself is not a live region.
100
+ role="region"
96
101
  className="fixed right-4 bottom-4 z-50 flex max-w-md flex-col gap-2"
97
102
  aria-label="Notifications"
98
103
  >