basalt-ui 1.12.0 → 1.13.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/AGENTS.md +21 -21
- package/CHANGELOG.md +17 -0
- package/README.md +38 -35
- package/agent/rules/basalt-agent.md +14 -0
- package/configs/oxlint-plugin.js +7 -3
- package/configs/oxlint-plugin.test.ts +34 -5
- package/configs/oxlint.json +4 -4
- package/dist/agent/adapter.d.ts +5 -1
- package/dist/agent/adapter.d.ts.map +1 -1
- package/dist/agent/adapter.js +22 -13
- package/dist/agent/ai-sdk-transport.d.ts.map +1 -1
- package/dist/agent/ai-sdk-transport.js +6 -2
- package/dist/agent/id.d.ts +67 -19
- package/dist/agent/id.d.ts.map +1 -1
- package/dist/agent/id.js +21 -7
- package/dist/agent/thread.d.ts +4 -0
- package/dist/agent/thread.d.ts.map +1 -1
- package/dist/agent/use-agent-stream.d.ts.map +1 -1
- package/dist/agent/use-agent-stream.js +2 -2
- package/dist/agent/use-agent-thread-runs.d.ts +24 -3
- package/dist/agent/use-agent-thread-runs.d.ts.map +1 -1
- package/dist/agent/use-agent-thread-runs.js +55 -15
- package/dist/agent-chat/index.d.ts +4 -0
- package/dist/agent-chat/index.d.ts.map +1 -1
- package/dist/agent-chat/index.js +2 -0
- package/dist/agent-chat/message-affordances.d.ts +59 -0
- package/dist/agent-chat/message-affordances.d.ts.map +1 -0
- package/dist/agent-chat/message-affordances.js +7 -0
- package/dist/agent-chat/relative-time.d.ts +27 -0
- package/dist/agent-chat/relative-time.d.ts.map +1 -0
- package/dist/agent-chat/relative-time.js +27 -0
- package/dist/agent-chat/relative-time.test.d.ts +2 -0
- package/dist/agent-chat/relative-time.test.d.ts.map +1 -0
- package/dist/agent-chat/thread-feed-row.d.ts +65 -0
- package/dist/agent-chat/thread-feed-row.d.ts.map +1 -0
- package/dist/agent-chat/thread-feed-row.js +156 -0
- package/dist/agent-chat/thread-feed-row.test.d.ts +2 -0
- package/dist/agent-chat/thread-feed-row.test.d.ts.map +1 -0
- package/dist/agent-chat/thread-feed.d.ts +34 -5
- package/dist/agent-chat/thread-feed.d.ts.map +1 -1
- package/dist/agent-chat/thread-feed.js +52 -19
- package/dist/agent-chat/thread-feed.test.d.ts +2 -0
- package/dist/agent-chat/thread-feed.test.d.ts.map +1 -0
- package/dist/agent-chat/thread-message.d.ts +183 -2
- package/dist/agent-chat/thread-message.d.ts.map +1 -1
- package/dist/agent-chat/thread-message.js +315 -34
- package/dist/agent-chat/thread-outcome-card.d.ts.map +1 -1
- package/dist/agent-chat/thread-outcome-card.js +1 -16
- package/dist/agent-chat/thread-workspace.d.ts +14 -2
- package/dist/agent-chat/thread-workspace.d.ts.map +1 -1
- package/dist/agent-chat/thread-workspace.js +29 -3
- package/dist/agent-chat/thread-workspace.test.d.ts +2 -0
- package/dist/agent-chat/thread-workspace.test.d.ts.map +1 -0
- package/dist/agent-chat/virtualize.d.ts +123 -0
- package/dist/agent-chat/virtualize.d.ts.map +1 -0
- package/dist/agent-chat/virtualize.js +9 -0
- package/dist/agent-chat/virtualize.type-guard.test.d.ts +2 -0
- package/dist/agent-chat/virtualize.type-guard.test.d.ts.map +1 -0
- package/dist/data/index.d.ts +5 -1
- package/dist/data/index.d.ts.map +1 -1
- package/dist/data/virtual-list.d.ts.map +1 -1
- package/dist/data/virtual.d.ts +2 -1
- package/dist/data/virtual.d.ts.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/surfaces.d.ts +2 -2
- package/dist/surfaces.d.ts.map +1 -1
- package/dist/surfaces.js +3 -2
- package/dist/theme/shadow-surfaces.test.d.ts.map +1 -1
- package/llms.txt +6 -6
- package/package.json +2 -2
- package/src/agent/adapter.test.ts +237 -0
- package/src/agent/adapter.ts +72 -14
- package/src/agent/ai-sdk-transport.test.ts +64 -0
- package/src/agent/ai-sdk-transport.ts +8 -2
- package/src/agent/id.test.ts +95 -1
- package/src/agent/id.ts +98 -28
- package/src/agent/thread.ts +4 -0
- package/src/agent/use-agent-stream.test.tsx +22 -0
- package/src/agent/use-agent-stream.ts +6 -3
- package/src/agent/use-agent-thread-runs.test.tsx +326 -0
- package/src/agent/use-agent-thread-runs.ts +159 -23
- package/src/agent/use-agent-thread-runs.wedge.test.tsx +80 -0
- package/src/agent-chat/index.ts +12 -0
- package/src/agent-chat/message-affordances.ts +61 -0
- package/src/agent-chat/relative-time.test.ts +95 -0
- package/src/agent-chat/relative-time.ts +55 -0
- package/src/agent-chat/thread-feed-row.test.tsx +510 -0
- package/src/agent-chat/thread-feed-row.tsx +274 -0
- package/src/agent-chat/thread-feed.test.tsx +241 -0
- package/src/agent-chat/thread-feed.tsx +119 -18
- package/src/agent-chat/thread-message.test.tsx +937 -3
- package/src/agent-chat/thread-message.tsx +766 -38
- package/src/agent-chat/thread-outcome-card.tsx +1 -25
- package/src/agent-chat/thread-workspace.test.tsx +169 -0
- package/src/agent-chat/thread-workspace.tsx +69 -5
- package/src/agent-chat/virtualize.ts +132 -0
- package/src/agent-chat/virtualize.type-guard.test.ts +49 -0
- package/src/data/index.ts +5 -1
- package/src/data/virtual-list.tsx +2 -1
- package/src/data/virtual.ts +2 -1
- package/src/index.ts +5 -0
- package/src/surfaces.ts +2 -1
- package/src/theme/shadow-surfaces.test.ts +9 -0
|
@@ -2,26 +2,11 @@ import { jsx, jsxs } from "react/jsx-runtime";
|
|
|
2
2
|
import { Badge, Group, Skeleton, Stack, Text, UnstyledButton } from "@mantine/core";
|
|
3
3
|
import { useHover } from "@mantine/hooks";
|
|
4
4
|
import { alpha, VX } from "../tokens/index.js";
|
|
5
|
+
import { formatRelativeTime } from "./relative-time.js";
|
|
5
6
|
const STATUS_BADGE = {
|
|
6
7
|
attention: { label: "Needs review", statusToken: VX.status.warn },
|
|
7
8
|
error: { label: "Failed", statusToken: VX.status.bad }
|
|
8
9
|
};
|
|
9
|
-
const RELATIVE_TIME_FORMAT = new Intl.RelativeTimeFormat("en", { numeric: "auto" });
|
|
10
|
-
const RELATIVE_TIME_UNITS = [
|
|
11
|
-
{ unit: "year", ms: 31536e6 },
|
|
12
|
-
{ unit: "month", ms: 2628e6 },
|
|
13
|
-
{ unit: "week", ms: 6048e5 },
|
|
14
|
-
{ unit: "day", ms: 864e5 },
|
|
15
|
-
{ unit: "hour", ms: 36e5 },
|
|
16
|
-
{ unit: "minute", ms: 6e4 }
|
|
17
|
-
];
|
|
18
|
-
function formatRelativeTime(timestamp) {
|
|
19
|
-
const diffMs = timestamp - Date.now();
|
|
20
|
-
const absMs = Math.abs(diffMs);
|
|
21
|
-
if (absMs < 6e4) return "just now";
|
|
22
|
-
const unit = RELATIVE_TIME_UNITS.find(({ ms }) => absMs >= ms) ?? RELATIVE_TIME_UNITS.at(-1);
|
|
23
|
-
return RELATIVE_TIME_FORMAT.format(Math.round(diffMs / unit.ms), unit.unit);
|
|
24
|
-
}
|
|
25
10
|
function OutcomeSkeleton() {
|
|
26
11
|
return /* @__PURE__ */ jsxs(Stack, { gap: 6, children: [
|
|
27
12
|
/* @__PURE__ */ jsx(Skeleton, { height: 14, width: "60%", radius: "sm" }),
|
|
@@ -12,8 +12,20 @@ export type ThreadWorkspaceProps = {
|
|
|
12
12
|
readonly resolveOutcome: OutcomeResolver<AgentPart>;
|
|
13
13
|
/** Placeholder for the new-thread composer pinned under the feed. */
|
|
14
14
|
readonly newThreadPlaceholder?: string;
|
|
15
|
-
/**
|
|
15
|
+
/**
|
|
16
|
+
* Rendered in place of the feed once the store is hydrated and there really are no threads.
|
|
17
|
+
* Shown ONLY when `store.hydrated` is true — while an async store's initial load is still in
|
|
18
|
+
* flight, `ThreadWorkspace` holds a neutral loading state instead (see `FeedHydratingState`),
|
|
19
|
+
* so a server-backed workspace never asserts "no threads yet" before it actually knows that.
|
|
20
|
+
*/
|
|
16
21
|
readonly emptyState?: ReactNode;
|
|
22
|
+
/**
|
|
23
|
+
* Rendered in place of the feed when the store's initial load has failed — `!store.hydrated &&
|
|
24
|
+
* store.error !== undefined` (see `ThreadsStore.hydrated`'s doc for the discriminant). Shown
|
|
25
|
+
* instead of `FeedHydratingState`, so a rejected `listThreads` surfaces a legible failure rather
|
|
26
|
+
* than an endless skeleton.
|
|
27
|
+
*/
|
|
28
|
+
readonly errorState?: ReactNode;
|
|
17
29
|
};
|
|
18
30
|
/**
|
|
19
31
|
* A two-pane master-detail thread workspace: a scrollable feed of threads with an anchored
|
|
@@ -23,5 +35,5 @@ export type ThreadWorkspaceProps = {
|
|
|
23
35
|
* @example
|
|
24
36
|
* <ThreadWorkspace useThreads={useThreads} transport={transport} resolveOutcome={heuristicOutcome} />
|
|
25
37
|
*/
|
|
26
|
-
export declare function ThreadWorkspace({ useThreads, transport, resolveOutcome, newThreadPlaceholder, emptyState, }: ThreadWorkspaceProps): JSX.Element;
|
|
38
|
+
export declare function ThreadWorkspace({ useThreads, transport, resolveOutcome, newThreadPlaceholder, emptyState, errorState, }: ThreadWorkspaceProps): JSX.Element;
|
|
27
39
|
//# sourceMappingURL=thread-workspace.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"thread-workspace.d.ts","sourceRoot":"","sources":["../../src/agent-chat/thread-workspace.tsx"],"names":[],"mappings":"AAoCA,OAAO,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAC3C,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"thread-workspace.d.ts","sourceRoot":"","sources":["../../src/agent-chat/thread-workspace.tsx"],"names":[],"mappings":"AAoCA,OAAO,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAC3C,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAUxF,MAAM,MAAM,oBAAoB,GAAG;IACjC;;;OAGG;IACH,QAAQ,CAAC,UAAU,EAAE,MAAM,YAAY,CAAA;IACvC,mEAAmE;IACnE,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;IACrD,mEAAmE;IACnE,QAAQ,CAAC,cAAc,EAAE,eAAe,CAAC,SAAS,CAAC,CAAA;IACnD,qEAAqE;IACrE,QAAQ,CAAC,oBAAoB,CAAC,EAAE,MAAM,CAAA;IACtC;;;;;OAKG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,CAAA;IAC/B;;;;;OAKG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,CAAA;CAChC,CAAA;AA4DD;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,EAC9B,UAAU,EACV,SAAS,EACT,cAAc,EACd,oBAAoB,EACpB,UAAU,EACV,UAAU,GACX,EAAE,oBAAoB,GAAG,GAAG,CAAC,OAAO,CA8FpC"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { Box, Divider, Flex, Stack, Text } from "@mantine/core";
|
|
2
|
+
import { Box, Divider, Flex, Skeleton, Stack, Text } from "@mantine/core";
|
|
3
3
|
import { useMediaQuery } from "@mantine/hooks";
|
|
4
4
|
import { useAgentThreadRuns } from "../agent/index.js";
|
|
5
|
+
import { VX } from "../tokens/index.js";
|
|
5
6
|
import { Composer } from "./composer.js";
|
|
6
7
|
import { ThreadDetailPanel } from "./thread-detail-panel.js";
|
|
7
8
|
import { ThreadFeed } from "./thread-feed.js";
|
|
@@ -13,12 +14,37 @@ function FeedEmptyState() {
|
|
|
13
14
|
/* @__PURE__ */ jsx(Text, { size: "xs", c: "dimmed", ta: "center", children: "Send a message below to start your first thread." })
|
|
14
15
|
] });
|
|
15
16
|
}
|
|
17
|
+
function FeedHydratingState() {
|
|
18
|
+
return /* @__PURE__ */ jsxs(Stack, { gap: "sm", p: "sm", "data-testid": "thread-workspace-hydrating", children: [
|
|
19
|
+
/* @__PURE__ */ jsx(Skeleton, { height: 54, radius: "sm" }),
|
|
20
|
+
/* @__PURE__ */ jsx(Skeleton, { height: 54, radius: "sm" }),
|
|
21
|
+
/* @__PURE__ */ jsx(Skeleton, { height: 54, radius: "sm" })
|
|
22
|
+
] });
|
|
23
|
+
}
|
|
24
|
+
function FeedErrorState() {
|
|
25
|
+
return /* @__PURE__ */ jsxs(
|
|
26
|
+
Stack,
|
|
27
|
+
{
|
|
28
|
+
align: "center",
|
|
29
|
+
justify: "center",
|
|
30
|
+
gap: 4,
|
|
31
|
+
h: "100%",
|
|
32
|
+
p: "xl",
|
|
33
|
+
"data-testid": "thread-workspace-error",
|
|
34
|
+
children: [
|
|
35
|
+
/* @__PURE__ */ jsx(Text, { fw: 600, size: "sm", style: { color: VX.status.bad }, children: "Couldn't load threads" }),
|
|
36
|
+
/* @__PURE__ */ jsx(Text, { size: "xs", c: "dimmed", ta: "center", children: "Something went wrong loading your threads. Try refreshing the page." })
|
|
37
|
+
]
|
|
38
|
+
}
|
|
39
|
+
);
|
|
40
|
+
}
|
|
16
41
|
function ThreadWorkspace({
|
|
17
42
|
useThreads,
|
|
18
43
|
transport,
|
|
19
44
|
resolveOutcome,
|
|
20
45
|
newThreadPlaceholder,
|
|
21
|
-
emptyState
|
|
46
|
+
emptyState,
|
|
47
|
+
errorState
|
|
22
48
|
}) {
|
|
23
49
|
const store = useThreads();
|
|
24
50
|
const runs = useAgentThreadRuns({ transport, store, resolveOutcome });
|
|
@@ -50,7 +76,7 @@ function ThreadWorkspace({
|
|
|
50
76
|
runs.retry(store.activeId);
|
|
51
77
|
};
|
|
52
78
|
const feed = /* @__PURE__ */ jsxs(Flex, { direction: "column", h: "100%", style: { overflow: "hidden" }, children: [
|
|
53
|
-
/* @__PURE__ */ jsx(Box, { style: { flex: 1, minHeight: 0 }, children:
|
|
79
|
+
/* @__PURE__ */ jsx(Box, { style: { flex: 1, minHeight: 0 }, children: threads.length === 0 ? store.hydrated ? emptyState ?? /* @__PURE__ */ jsx(FeedEmptyState, {}) : store.error !== void 0 ? errorState ?? /* @__PURE__ */ jsx(FeedErrorState, {}) : /* @__PURE__ */ jsx(FeedHydratingState, {}) : /* @__PURE__ */ jsx(ThreadFeed, { threads, activeId: store.activeId, onSelect: handleSelect }) }),
|
|
54
80
|
/* @__PURE__ */ jsx(Divider, { color: "var(--vx-divider)" }),
|
|
55
81
|
/* @__PURE__ */ jsx(Box, { p: "sm", children: /* @__PURE__ */ jsx(
|
|
56
82
|
Composer,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"thread-workspace.test.d.ts","sourceRoot":"","sources":["../../src/agent-chat/thread-workspace.test.tsx"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Virtualization contract shared by the transcript/feed components that can opt into
|
|
3
|
+
* `@tanstack/react-virtual` for long lists.
|
|
4
|
+
*
|
|
5
|
+
* The `VirtualizeProps` union IS the guard: a virtualizer needs a measured scroll container, so
|
|
6
|
+
* turning `virtualize` on REQUIRES a `height` and turning it off (or omitting it) FORBIDS one. See
|
|
7
|
+
* `virtualize.type-guard.test.ts` beside this file for a compile-time proof that the union actually
|
|
8
|
+
* rejects the invalid combinations.
|
|
9
|
+
*
|
|
10
|
+
* The one piece of runtime here is {@link resolveVirtualize} — the single narrowing point every
|
|
11
|
+
* component that accepts `VirtualizeProps` goes through, so no call site has to re-derive (or
|
|
12
|
+
* assert its way past) the union's `virtualize`-implies-`height` link.
|
|
13
|
+
*
|
|
14
|
+
* The other half of the contract, not encoded in the types (it's a runtime/composition rule, not
|
|
15
|
+
* a shape): a virtualized transcript OWNS ITS OWN SCROLL NODE (the element `getScrollElement`
|
|
16
|
+
* measures) and must NOT be nested inside `BasaltStickToBottom` — unlike the non-virtual path,
|
|
17
|
+
* which `ThreadDetailPanel` nests inside `BasaltStickToBottom` today (its transcript body).
|
|
18
|
+
* Stacking a virtualizer's own scroll container inside `BasaltStickToBottom`'s would give the
|
|
19
|
+
* transcript two competing owners of "which element scrolls" and break both the virtualizer's
|
|
20
|
+
* `scrollToEnd` and stick-to-bottom's anchor tracking.
|
|
21
|
+
*
|
|
22
|
+
* A third composition rule, same category (runtime, not a shape): a virtualized transcript
|
|
23
|
+
* tolerates being hidden via `display: none` on an ANCESTOR (e.g. sitting inside a collapsible
|
|
24
|
+
* `ThreadFeedRow`) — collapsing does not corrupt its measurement cache, and re-expanding restores
|
|
25
|
+
* the same scroll position (same top-visible row) it had before the collapse. This is NOT free of
|
|
26
|
+
* virtual-core: hiding an ancestor makes every mounted row's ResizeObserver box report `0` (a
|
|
27
|
+
* `display: none` ancestor un-lays-out its descendants), and virtual-core 3.17.1's default
|
|
28
|
+
* `measureElement`/`resizeItem` write that `0` into `itemSizeCache` with no floor — unguarded, a
|
|
29
|
+
* few collapse/expand cycles permanently shrink `getTotalSize()` and silently scroll the visible
|
|
30
|
+
* window to a DIFFERENT part of the transcript (`scrollTop` stays put; the content under it moves).
|
|
31
|
+
* `thread-message.tsx` closes this with a `measureElement` override (`resolveGuardedMeasurement`)
|
|
32
|
+
* that treats a `0` reading as unreliable and keeps the last-known size instead of committing it —
|
|
33
|
+
* see that function's doc for the full mechanism, including why `useVirtualizer`'s `enabled` option
|
|
34
|
+
* is NOT the fix (it wipes the measurement cache outright, worse than the bug). A consumer combining a
|
|
35
|
+
* virtualized transcript with its own hide-via-CSS container gets this for free; a consumer who
|
|
36
|
+
* unmounts/remounts the transcript instead of hiding it is unaffected either way (a fresh
|
|
37
|
+
* `useVirtualizer` call has no stale cache to poison).
|
|
38
|
+
*
|
|
39
|
+
* A fourth composition rule: a virtualized transcript SCROLLS ITSELF on mount. `initialScroll`
|
|
40
|
+
* defaults to `'end'` — `anchorTo: 'end'` and `followOnAppend` (both wired in `thread-message.tsx`)
|
|
41
|
+
* only keep an ALREADY-at-the-end transcript pinned as content changes; neither performs the initial
|
|
42
|
+
* jump, so left alone a freshly mounted virtualized transcript renders at message #0, not the
|
|
43
|
+
* newest. The fix fires exactly once, on first mount, via `scrollToEnd()` — never again, so a user
|
|
44
|
+
* who has scrolled up is never yanked back down by a later append (that is precisely the failure
|
|
45
|
+
* `followOnAppend` exists to avoid, and re-introducing it here would be worse than the defect this
|
|
46
|
+
* closes). A consumer wiring its OWN scroll-restoration (e.g. `initialOffset` /
|
|
47
|
+
* `initialMeasurementsCache`, restoring a prior session's position) wants `initialScroll: 'start'` —
|
|
48
|
+
* otherwise this default jump fires first and the restoration has to fight it. `initialScroll` is
|
|
49
|
+
* ignored (no scroll, no throw) for an empty transcript, and is deferred rather than treated as done
|
|
50
|
+
* if the transcript's own scroll container measures 0px on mount (e.g. mounted behind a hidden
|
|
51
|
+
* ancestor) — it then lands on the first commit where the container is genuinely measurable, which
|
|
52
|
+
* is what makes "opens at the newest message" hold for a transcript whose lazy virtualizer settled
|
|
53
|
+
* while its `ThreadFeedRow` was collapsed. See `thread-message.tsx`'s `applyInitialScroll` for the
|
|
54
|
+
* guard, and `VirtualizedRowsInner` for why its effect is deliberately dependency-free.
|
|
55
|
+
*
|
|
56
|
+
* Firing `scrollToEnd()` once is not sufficient on its own to land there, because virtual-core
|
|
57
|
+
* 3.17.1's own `_willUpdate` writes to the SAME scroll container on the very next commit it runs
|
|
58
|
+
* on, from state that lags behind the DOM: `_scrollToOffset` only ever records the write's
|
|
59
|
+
* intent (`_intendedScrollOffset`) — `this.scrollOffset` itself updates ASYNCHRONOUSLY, from the
|
|
60
|
+
* native `scroll` event, not from the call that requested it. So a commit that runs `_willUpdate`
|
|
61
|
+
* before this effect had a chance to fire (element-attach) or that re-derives an anchor from
|
|
62
|
+
* `getScrollOffset()` while `this.scrollOffset` is still the pre-jump value (the anchor branch,
|
|
63
|
+
* gated on `pendingScrollAnchor`) writes that stale offset — 0, on first mount — straight back to
|
|
64
|
+
* `scrollTop`, clobbering this effect's jump within roughly one extra commit of it landing.
|
|
65
|
+
* `applyInitialScroll` survives this the same way the hidden-ancestor case above already
|
|
66
|
+
* (accidentally) does: by not treating one successful call as permanent. It fires, then — on a
|
|
67
|
+
* LATER call, i.e. a later commit, exactly the cadence this dependency-free effect already runs on
|
|
68
|
+
* — reads the container's REAL `scrollTop`/`scrollHeight`/`clientHeight` (never virtual-core's own
|
|
69
|
+
* `scrollOffset`, which is exactly the stale value that caused the clobber) to check whether the
|
|
70
|
+
* jump survived; if it didn't, it re-fires, bounded by `MAX_INITIAL_SCROLL_ATTEMPTS` so a DOM that
|
|
71
|
+
* pathologically never reports settled can never be fought forever. `resolveInitialScrollAction`
|
|
72
|
+
* itself is untouched by any of this — it is still the one-shot "should I even attempt this"
|
|
73
|
+
* decision; `applyInitialScroll` layers the across-commits verification on top.
|
|
74
|
+
*
|
|
75
|
+
* `initialOffset` (`number | (() => number)`, `virtual-core`'s own construction-time seed for
|
|
76
|
+
* `scrollOffset`) was investigated as a way to avoid the clobber altogether and rejected: it takes
|
|
77
|
+
* a concrete pixel number, not an `'end'` sentinel, and the only number available at the point
|
|
78
|
+
* it would need to resolve — before any row has ever been measured — is an ESTIMATE
|
|
79
|
+
* (`estimateSize` × count), not the real total. It would relocate the transcript's initial paint
|
|
80
|
+
* from message #0 to an approximately-right position, but the moment real measurements replace
|
|
81
|
+
* those estimates the total size (and therefore the true end offset) changes, which still needs a
|
|
82
|
+
* corrective `scrollToEnd()` once rows have actually measured — the exact write this whole
|
|
83
|
+
* mechanism exists to protect. It also can't reference the `virtualizer` instance it would be
|
|
84
|
+
* computing an offset for without a separate ref indirection, since it is itself one of the options
|
|
85
|
+
* passed to construct that instance. Not a fix for this defect, just a smaller wrong first paint.
|
|
86
|
+
*/
|
|
87
|
+
/** Tuning knobs passed through to `@tanstack/react-virtual`'s `useVirtualizer`. */
|
|
88
|
+
export type VirtualizeOptions = {
|
|
89
|
+
/** Extra rows rendered beyond the visible viewport, each side. Library default: 1. */
|
|
90
|
+
readonly overscan?: number;
|
|
91
|
+
/** Estimated row height in px, used before a row has been measured. */
|
|
92
|
+
readonly estimateSize?: number;
|
|
93
|
+
/** Where the transcript sits on first mount. Default 'end' — a chat transcript opens at the
|
|
94
|
+
newest message. 'start' opens at the oldest. See this module's fourth composition rule
|
|
95
|
+
above for the mechanism and why a consumer restoring its own scroll position wants 'start'. */
|
|
96
|
+
readonly initialScroll?: 'end' | 'start';
|
|
97
|
+
};
|
|
98
|
+
/**
|
|
99
|
+
* `virtualize: false` (or omitted) → no `height` prop (content-sized, non-scrolling-owner layout).
|
|
100
|
+
* `virtualize: true | VirtualizeOptions` → `height` is REQUIRED — the virtualizer measures a fixed
|
|
101
|
+
* scroll container, so there is no valid virtualized layout without one.
|
|
102
|
+
*/
|
|
103
|
+
export type VirtualizeProps = {
|
|
104
|
+
readonly virtualize?: false;
|
|
105
|
+
readonly height?: never;
|
|
106
|
+
} | {
|
|
107
|
+
readonly virtualize: true | VirtualizeOptions;
|
|
108
|
+
readonly height: number | string;
|
|
109
|
+
};
|
|
110
|
+
/** The enabled branch of {@link VirtualizeProps}, with `height` no longer optional. */
|
|
111
|
+
export type ResolvedVirtualize = {
|
|
112
|
+
readonly options: VirtualizeOptions;
|
|
113
|
+
readonly height: number | string;
|
|
114
|
+
};
|
|
115
|
+
/**
|
|
116
|
+
* Narrows a `VirtualizeProps` pair once, centrally: `null` when virtualization is off, otherwise
|
|
117
|
+
* the options object (normalizing the bare `virtualize: true` shorthand to `{}`) alongside the
|
|
118
|
+
* `height` the union guarantees is present. Every component accepting `VirtualizeProps` resolves
|
|
119
|
+
* through here rather than destructuring the two fields apart — destructuring severs the link TS
|
|
120
|
+
* needs, which is what forces a non-null assertion on `height` at each call site.
|
|
121
|
+
*/
|
|
122
|
+
export declare function resolveVirtualize(props: VirtualizeProps): ResolvedVirtualize | null;
|
|
123
|
+
//# sourceMappingURL=virtualize.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"virtualize.d.ts","sourceRoot":"","sources":["../../src/agent-chat/virtualize.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqFG;AAEH,mFAAmF;AACnF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,sFAAsF;IACtF,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAC1B,uEAAuE;IACvE,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAA;IAC9B;;sGAEkG;IAClG,QAAQ,CAAC,aAAa,CAAC,EAAE,KAAK,GAAG,OAAO,CAAA;CACzC,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,eAAe,GACvB;IAAE,QAAQ,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,CAAA;CAAE,GACxD;IAAE,QAAQ,CAAC,UAAU,EAAE,IAAI,GAAG,iBAAiB,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,CAAA;AAEvF,uFAAuF;AACvF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAA;IACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAA;CACjC,CAAA;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,eAAe,GAAG,kBAAkB,GAAG,IAAI,CAUnF"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
function resolveVirtualize(props) {
|
|
2
|
+
const { virtualize } = props;
|
|
3
|
+
if (virtualize === void 0 || virtualize === false) return null;
|
|
4
|
+
const height = props.height;
|
|
5
|
+
return { options: virtualize === true ? {} : virtualize, height };
|
|
6
|
+
}
|
|
7
|
+
export {
|
|
8
|
+
resolveVirtualize
|
|
9
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"virtualize.type-guard.test.d.ts","sourceRoot":"","sources":["../../src/agent-chat/virtualize.type-guard.test.ts"],"names":[],"mappings":""}
|
package/dist/data/index.d.ts
CHANGED
|
@@ -7,7 +7,11 @@
|
|
|
7
7
|
*
|
|
8
8
|
* Optional peers:
|
|
9
9
|
* - @tanstack/react-table >=8 <9 (BasaltDataTable)
|
|
10
|
-
* - @tanstack/react-virtual >=3 <4 (BasaltVirtualList)
|
|
10
|
+
* - @tanstack/react-virtual >=3.13.26 <4 (BasaltVirtualList)
|
|
11
|
+
*
|
|
12
|
+
* BasaltVirtualList itself works on any 3.x; the declared floor is set by ./agent-chat's
|
|
13
|
+
* ThreadTranscript virtualize mode (it calls scrollToEnd/anchorTo, added in virtual-core 3.16.0,
|
|
14
|
+
* first pinned by react-virtual 3.13.26). npm has one peer range per package, so do not lower it.
|
|
11
15
|
*
|
|
12
16
|
* Install with:
|
|
13
17
|
* bun add @tanstack/react-table @tanstack/react-virtual
|
package/dist/data/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/data/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/data/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAGH,cAAc,SAAS,CAAA;AAGvB,cAAc,WAAW,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"virtual-list.d.ts","sourceRoot":"","sources":["../../src/data/virtual-list.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"virtual-list.d.ts","sourceRoot":"","sources":["../../src/data/virtual-list.tsx"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAItC;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,sBAAsB,CAAC,CAAC,IAAI;IACtC,+EAA+E;IAC/E,KAAK,EAAE,CAAC,EAAE,CAAA;IACV,+FAA+F;IAC/F,MAAM,EAAE,MAAM,GAAG,MAAM,CAAA;IACvB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;;OAGG;IACH,UAAU,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,SAAS,CAAA;IACjD;;;OAGG;IACH,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,MAAM,CAAA;IACxD;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB,CAAA;AAID;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,EACnC,KAAK,EACL,MAAM,EACN,YAAiB,EACjB,QAAY,EACZ,UAAU,EACV,UAAU,EACV,SAAiB,EACjB,YAAgB,GACjB,EAAE,sBAAsB,CAAC,CAAC,CAAC,+BAmF3B"}
|
package/dist/data/virtual.d.ts
CHANGED
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
* ./data/virtual — BasaltVirtualList: a windowed virtual list over @tanstack/react-virtual,
|
|
3
3
|
* rendered with a Mantine Box scroll container.
|
|
4
4
|
*
|
|
5
|
-
* Optional peer: @tanstack/react-virtual >=3 <4.
|
|
5
|
+
* Optional peer: @tanstack/react-virtual >=3.13.26 <4. This list works on any 3.x — the floor is
|
|
6
|
+
* set by ./agent-chat's virtualize mode (see ./data/index.ts), so do not lower it.
|
|
6
7
|
*
|
|
7
8
|
* Use this fine subpath instead of the `./data` barrel when your app only needs the virtual list
|
|
8
9
|
* — it does NOT value-import @tanstack/react-table, so the data-table peer is never required.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"virtual.d.ts","sourceRoot":"","sources":["../../src/data/virtual.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"virtual.d.ts","sourceRoot":"","sources":["../../src/data/virtual.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAClD,YAAY,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAA"}
|
package/dist/index.d.ts
CHANGED
|
@@ -18,8 +18,8 @@ export { ConnectivityProvider, ConnectivityIndicator, useConnectivity } from './
|
|
|
18
18
|
export type { ConnectivityStatus, ConnectivitySnapshot, ConnectivityProviderProps, ConnectivityOverride, } from './connectivity/index.js';
|
|
19
19
|
export type { SurfaceSpec, RuleName, SkillName } from './surfaces.js';
|
|
20
20
|
export type { GuardKind } from './guard/types.js';
|
|
21
|
-
export { ThreadWorkspace, ThreadFeed, ThreadOutcomeCard, ThreadDetailPanel, Composer, threadPartRenderers, ThreadTranscript, ToolChip, } from './agent-chat/index.js';
|
|
22
|
-
export type { ThreadWorkspaceProps, ThreadFeedProps, ThreadOutcomeCardProps, ThreadDetailPanelProps, ComposerProps, ComposerSubmit, ComposerAttachment, ComposerHandle, ThreadTranscriptProps, ToolChipProps, } from './agent-chat/index.js';
|
|
21
|
+
export { ThreadWorkspace, ThreadFeed, ThreadFeedRow, ThreadOutcomeCard, ThreadDetailPanel, Composer, threadPartRenderers, ThreadTranscript, ToolChip, } from './agent-chat/index.js';
|
|
22
|
+
export type { ThreadWorkspaceProps, ThreadFeedProps, ThreadFeedRowProps, ThreadOutcomeCardProps, ThreadDetailPanelProps, ComposerProps, ComposerSubmit, ComposerAttachment, ComposerHandle, ThreadTranscriptProps, MessageAffordances, VirtualizeOptions, VirtualizeProps, ToolChipProps, } from './agent-chat/index.js';
|
|
23
23
|
export { createAdapterThreadsStore, createThreadsStore, heuristicOutcome, threadsStoreAdapterContract, useAgentThreadRuns, } from './agent/index.js';
|
|
24
24
|
export type { AdapterThreadsStoreOptions, AgentThread, AgentOutcome, ThreadStatus, ThreadsStore, ThreadsStoreAdapter, ThreadsStoreAdapterContractCase, ThreadsStoreOptions, OutcomeResolver, ChatMessage, AgentPart, AgentTransport, } from './agent/index.js';
|
|
25
25
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -37,6 +37,7 @@ import { ConnectivityProvider, ConnectivityIndicator, useConnectivity } from "./
|
|
|
37
37
|
import {
|
|
38
38
|
ThreadWorkspace,
|
|
39
39
|
ThreadFeed,
|
|
40
|
+
ThreadFeedRow,
|
|
40
41
|
ThreadOutcomeCard,
|
|
41
42
|
ThreadDetailPanel,
|
|
42
43
|
Composer,
|
|
@@ -79,6 +80,7 @@ export {
|
|
|
79
80
|
ThemeToggle,
|
|
80
81
|
ThreadDetailPanel,
|
|
81
82
|
ThreadFeed,
|
|
83
|
+
ThreadFeedRow,
|
|
82
84
|
ThreadOutcomeCard,
|
|
83
85
|
ThreadTranscript,
|
|
84
86
|
ThreadWorkspace,
|
package/dist/surfaces.d.ts
CHANGED
|
@@ -297,8 +297,8 @@ export declare const SURFACES: {
|
|
|
297
297
|
readonly rule: "agent";
|
|
298
298
|
readonly skill: readonly ["basalt-app"];
|
|
299
299
|
readonly guardKinds: readonly [];
|
|
300
|
-
readonly description: "Mantine-styled thread-chat components over basalt-ui/agent: ThreadWorkspace, ThreadFeed, ThreadOutcomeCard, ThreadDetailPanel, Composer, ThreadTranscript (open part-renderer registry via its renderers/fallbackRenderer props), threadPartRenderers, ToolChip (Mantine-coupled). motion is required, not optional — ThreadFeed/ThreadDetailPanel import motion/react eagerly, so this subpath fails to resolve without it installed even though peerDependenciesMeta marks it optional (npm has no per-subpath optionality). remend is genuinely optional here — ThreadTranscript reaches it only through the lazy dynamic import() inside content/markdown.tsx.";
|
|
301
|
-
readonly optionalPeers: readonly ["ai", "motion", "remend", "use-stick-to-bottom", "react-markdown", "remark-gfm", "shiki", "@shikijs/langs", "@shikijs/themes", "beautiful-mermaid"];
|
|
300
|
+
readonly description: "Mantine-styled thread-chat components over basalt-ui/agent: ThreadWorkspace, ThreadFeed (variant/renderRow), ThreadFeedRow (inline-expanding Slack row, lazily mounted + kept mounted), ThreadOutcomeCard, ThreadDetailPanel, Composer, ThreadTranscript (open part-renderer registry via its renderers/fallbackRenderer props, per-message MessageAffordances, groupConsecutive, and an optional virtualize/height windowing mode whose VirtualizeOptions carry overscan/estimateSize/initialScroll — a virtualized transcript opens scrolled to the newest message unless initialScroll is \"start\"), threadPartRenderers, ToolChip (Mantine-coupled). motion is required, not optional — ThreadFeed/ThreadDetailPanel import motion/react eagerly, so this subpath fails to resolve without it installed even though peerDependenciesMeta marks it optional (npm has no per-subpath optionality). remend is genuinely optional here — ThreadTranscript reaches it only through the lazy dynamic import() inside content/markdown.tsx, and @tanstack/react-virtual the same way through the lazy import() behind ThreadTranscript virtualize (absent peer degrades to an unwindowed, height-bound pane).";
|
|
301
|
+
readonly optionalPeers: readonly ["ai", "motion", "remend", "use-stick-to-bottom", "react-markdown", "remark-gfm", "shiki", "@shikijs/langs", "@shikijs/themes", "beautiful-mermaid", "@tanstack/react-virtual"];
|
|
302
302
|
readonly forbiddenImports: readonly [];
|
|
303
303
|
};
|
|
304
304
|
readonly './content': {
|
package/dist/surfaces.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"surfaces.d.ts","sourceRoot":"","sources":["../src/surfaces.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"surfaces.d.ts","sourceRoot":"","sources":["../src/surfaces.ts"],"names":[],"mappings":"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"}
|
package/dist/surfaces.js
CHANGED
|
@@ -210,7 +210,7 @@ const SURFACES = {
|
|
|
210
210
|
rule: "agent",
|
|
211
211
|
skill: ["basalt-app"],
|
|
212
212
|
guardKinds: [],
|
|
213
|
-
description:
|
|
213
|
+
description: 'Mantine-styled thread-chat components over basalt-ui/agent: ThreadWorkspace, ThreadFeed (variant/renderRow), ThreadFeedRow (inline-expanding Slack row, lazily mounted + kept mounted), ThreadOutcomeCard, ThreadDetailPanel, Composer, ThreadTranscript (open part-renderer registry via its renderers/fallbackRenderer props, per-message MessageAffordances, groupConsecutive, and an optional virtualize/height windowing mode whose VirtualizeOptions carry overscan/estimateSize/initialScroll \u2014 a virtualized transcript opens scrolled to the newest message unless initialScroll is "start"), threadPartRenderers, ToolChip (Mantine-coupled). motion is required, not optional \u2014 ThreadFeed/ThreadDetailPanel import motion/react eagerly, so this subpath fails to resolve without it installed even though peerDependenciesMeta marks it optional (npm has no per-subpath optionality). remend is genuinely optional here \u2014 ThreadTranscript reaches it only through the lazy dynamic import() inside content/markdown.tsx, and @tanstack/react-virtual the same way through the lazy import() behind ThreadTranscript virtualize (absent peer degrades to an unwindowed, height-bound pane).',
|
|
214
214
|
optionalPeers: [
|
|
215
215
|
"ai",
|
|
216
216
|
"motion",
|
|
@@ -221,7 +221,8 @@ const SURFACES = {
|
|
|
221
221
|
"shiki",
|
|
222
222
|
"@shikijs/langs",
|
|
223
223
|
"@shikijs/themes",
|
|
224
|
-
"beautiful-mermaid"
|
|
224
|
+
"beautiful-mermaid",
|
|
225
|
+
"@tanstack/react-virtual"
|
|
225
226
|
],
|
|
226
227
|
forbiddenImports: []
|
|
227
228
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shadow-surfaces.test.d.ts","sourceRoot":"","sources":["../../src/theme/shadow-surfaces.test.ts"],"names":[],"mappings":"AAsHA,KAAK,UAAU,GAAG;IAChB,iEAAiE;IACjE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB;;iGAE6F;IAC7F,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CACtB,CAAA;AA6FD,KAAK,kBAAkB,GAAG,UAAU,GAAG;IACrC;;;;;mFAK+E;IAC/E,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAC3B,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,eAAe,EAAE,SAAS,kBAAkB,
|
|
1
|
+
{"version":3,"file":"shadow-surfaces.test.d.ts","sourceRoot":"","sources":["../../src/theme/shadow-surfaces.test.ts"],"names":[],"mappings":"AAsHA,KAAK,UAAU,GAAG;IAChB,iEAAiE;IACjE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB;;iGAE6F;IAC7F,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CACtB,CAAA;AA6FD,KAAK,kBAAkB,GAAG,UAAU,GAAG;IACrC;;;;;mFAK+E;IAC/E,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAC3B,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,eAAe,EAAE,SAAS,kBAAkB,EAmLxD,CAAA"}
|
package/llms.txt
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# basalt-ui v1.
|
|
1
|
+
# basalt-ui v1.13.0
|
|
2
2
|
# Opinionated framework for Mantine-based React apps — theme, app shell, visx charts, toolchain presets
|
|
3
3
|
#
|
|
4
4
|
# basalt-ui is an opinionated framework for Mantine-based React apps.
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
# ./tokens.css subpath. Guide: docs/FRAMEWORK-FREE.md in the repo.
|
|
20
20
|
|
|
21
21
|
Package: basalt-ui
|
|
22
|
-
Version: 1.
|
|
22
|
+
Version: 1.13.0
|
|
23
23
|
|
|
24
24
|
## basalt-ui
|
|
25
25
|
Import: import { ... } from 'basalt-ui'
|
|
@@ -96,7 +96,7 @@ Import: import { ... } from 'basalt-ui/data'
|
|
|
96
96
|
Description: Convenience barrel pulling both TanStack Table + Virtual peer groups: BasaltDataTable, BasaltVirtualList (Mantine-rendered) — prefer ./data/table or ./data/virtual for per-feature opt-in
|
|
97
97
|
Layer: mantine-coupled
|
|
98
98
|
Rule: basalt-data
|
|
99
|
-
OptionalPeers: @tanstack/react-table@>=8 <9, @tanstack/react-virtual@>=3 <4
|
|
99
|
+
OptionalPeers: @tanstack/react-table@>=8 <9, @tanstack/react-virtual@>=3.13.26 <4
|
|
100
100
|
|
|
101
101
|
## basalt-ui/data/table
|
|
102
102
|
Import: import { ... } from 'basalt-ui/data/table'
|
|
@@ -110,7 +110,7 @@ Import: import { ... } from 'basalt-ui/data/virtual'
|
|
|
110
110
|
Description: BasaltVirtualList: a windowed virtual list over TanStack Virtual, rendered with Mantine (Mantine-rendered)
|
|
111
111
|
Layer: mantine-coupled
|
|
112
112
|
Rule: basalt-data
|
|
113
|
-
OptionalPeers: @tanstack/react-virtual@>=3 <4
|
|
113
|
+
OptionalPeers: @tanstack/react-virtual@>=3.13.26 <4
|
|
114
114
|
|
|
115
115
|
## basalt-ui/agent
|
|
116
116
|
Import: import { ... } from 'basalt-ui/agent'
|
|
@@ -121,10 +121,10 @@ OptionalPeers: ai@^7.0.15, use-stick-to-bottom@^1.1.6
|
|
|
121
121
|
|
|
122
122
|
## basalt-ui/agent-chat
|
|
123
123
|
Import: import { ... } from 'basalt-ui/agent-chat'
|
|
124
|
-
Description: Mantine-styled thread-chat components over basalt-ui/agent: ThreadWorkspace, ThreadFeed, ThreadOutcomeCard, ThreadDetailPanel, Composer, ThreadTranscript (open part-renderer registry via its renderers/fallbackRenderer props), threadPartRenderers, ToolChip (Mantine-coupled). motion is required, not optional — ThreadFeed/ThreadDetailPanel import motion/react eagerly, so this subpath fails to resolve without it installed even though peerDependenciesMeta marks it optional (npm has no per-subpath optionality). remend is genuinely optional here — ThreadTranscript reaches it only through the lazy dynamic import() inside content/markdown.tsx.
|
|
124
|
+
Description: Mantine-styled thread-chat components over basalt-ui/agent: ThreadWorkspace, ThreadFeed (variant/renderRow), ThreadFeedRow (inline-expanding Slack row, lazily mounted + kept mounted), ThreadOutcomeCard, ThreadDetailPanel, Composer, ThreadTranscript (open part-renderer registry via its renderers/fallbackRenderer props, per-message MessageAffordances, groupConsecutive, and an optional virtualize/height windowing mode whose VirtualizeOptions carry overscan/estimateSize/initialScroll — a virtualized transcript opens scrolled to the newest message unless initialScroll is "start"), threadPartRenderers, ToolChip (Mantine-coupled). motion is required, not optional — ThreadFeed/ThreadDetailPanel import motion/react eagerly, so this subpath fails to resolve without it installed even though peerDependenciesMeta marks it optional (npm has no per-subpath optionality). remend is genuinely optional here — ThreadTranscript reaches it only through the lazy dynamic import() inside content/markdown.tsx, and @tanstack/react-virtual the same way through the lazy import() behind ThreadTranscript virtualize (absent peer degrades to an unwindowed, height-bound pane).
|
|
125
125
|
Layer: mantine-coupled
|
|
126
126
|
Rule: basalt-agent
|
|
127
|
-
OptionalPeers: ai@^7.0.15, motion@12.42.0, remend@1.3.0, use-stick-to-bottom@^1.1.6, react-markdown@^10.1.0, remark-gfm@^4.0.1, shiki@^4.3.0, @shikijs/langs@^4.3.1, @shikijs/themes@^4.3.1, beautiful-mermaid@^1.1.0
|
|
127
|
+
OptionalPeers: ai@^7.0.15, motion@12.42.0, remend@1.3.0, use-stick-to-bottom@^1.1.6, react-markdown@^10.1.0, remark-gfm@^4.0.1, shiki@^4.3.0, @shikijs/langs@^4.3.1, @shikijs/themes@^4.3.1, beautiful-mermaid@^1.1.0, @tanstack/react-virtual@>=3.13.26 <4
|
|
128
128
|
|
|
129
129
|
## basalt-ui/content
|
|
130
130
|
Import: import { ... } from 'basalt-ui/content'
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "basalt-ui",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.13.0",
|
|
4
4
|
"description": "Opinionated framework for Mantine-based React apps — theme, app shell, visx charts, toolchain presets",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"charts",
|
|
@@ -190,7 +190,7 @@
|
|
|
190
190
|
"@tanstack/react-query-devtools": "^5.101.0",
|
|
191
191
|
"@tanstack/react-router": "^1.170.0",
|
|
192
192
|
"@tanstack/react-table": ">=8 <9",
|
|
193
|
-
"@tanstack/react-virtual": ">=3 <4",
|
|
193
|
+
"@tanstack/react-virtual": ">=3.13.26 <4",
|
|
194
194
|
"@visx/axis": "4.0.0",
|
|
195
195
|
"@visx/curve": "4.0.0",
|
|
196
196
|
"@visx/event": "4.0.0",
|