basalt-ui 1.11.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 +32 -0
- package/README.md +63 -51
- package/agent/rules/basalt-agent.md +14 -0
- package/agent/rules/basalt-content.md +16 -3
- 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 +150 -0
- package/dist/agent/adapter.d.ts.map +1 -0
- package/dist/agent/adapter.js +482 -0
- package/dist/agent/adapter.test.d.ts +2 -0
- package/dist/agent/adapter.test.d.ts.map +1 -0
- package/dist/agent/ai-sdk-transport.d.ts.map +1 -1
- package/dist/agent/ai-sdk-transport.js +6 -2
- package/dist/agent/ai-sdk-transport.test.d.ts +2 -0
- package/dist/agent/ai-sdk-transport.test.d.ts.map +1 -0
- package/dist/agent/coalesce.d.ts +20 -4
- package/dist/agent/coalesce.d.ts.map +1 -1
- package/dist/agent/coalesce.js +76 -8
- package/dist/agent/coalesce.test.d.ts +2 -0
- package/dist/agent/coalesce.test.d.ts.map +1 -0
- package/dist/agent/foreign.test.d.ts +2 -0
- package/dist/agent/foreign.test.d.ts.map +1 -0
- package/dist/agent/id.d.ts +78 -0
- package/dist/agent/id.d.ts.map +1 -1
- package/dist/agent/id.js +30 -0
- package/dist/agent/id.test.d.ts +2 -0
- package/dist/agent/id.test.d.ts.map +1 -0
- package/dist/agent/index.d.ts +2 -0
- package/dist/agent/index.d.ts.map +1 -1
- package/dist/agent/index.js +3 -0
- package/dist/agent/merge.d.ts.map +1 -1
- package/dist/agent/merge.js +19 -7
- package/dist/agent/merge.test.d.ts +2 -0
- package/dist/agent/merge.test.d.ts.map +1 -0
- package/dist/agent/part-list.d.ts +49 -34
- package/dist/agent/part-list.d.ts.map +1 -1
- package/dist/agent/part-list.js +42 -6
- package/dist/agent/part-list.test.d.ts +2 -0
- package/dist/agent/part-list.test.d.ts.map +1 -0
- package/dist/agent/parts.d.ts +46 -10
- package/dist/agent/parts.d.ts.map +1 -1
- package/dist/agent/parts.js +16 -6
- package/dist/agent/parts.test.d.ts +2 -0
- package/dist/agent/parts.test.d.ts.map +1 -0
- package/dist/agent/thread.d.ts +18 -0
- package/dist/agent/thread.d.ts.map +1 -1
- package/dist/agent/thread.js +8 -2
- package/dist/agent/thread.test.d.ts +2 -0
- package/dist/agent/thread.test.d.ts.map +1 -0
- package/dist/agent/transport.test.d.ts +2 -0
- package/dist/agent/transport.test.d.ts.map +1 -0
- 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-stream.test.d.ts +2 -0
- package/dist/agent/use-agent-stream.test.d.ts.map +1 -0
- 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.foreign.test.d.ts +2 -0
- package/dist/agent/use-agent-thread-runs.foreign.test.d.ts.map +1 -0
- package/dist/agent/use-agent-thread-runs.js +55 -15
- package/dist/agent/use-agent-thread-runs.resume.test.d.ts +2 -0
- package/dist/agent/use-agent-thread-runs.resume.test.d.ts.map +1 -0
- package/dist/agent/use-agent-thread-runs.test.d.ts +2 -0
- package/dist/agent/use-agent-thread-runs.test.d.ts.map +1 -0
- package/dist/agent/use-agent-thread-runs.wedge.test.d.ts +2 -0
- package/dist/agent/use-agent-thread-runs.wedge.test.d.ts.map +1 -0
- package/dist/agent-chat/composer.d.ts +130 -8
- package/dist/agent-chat/composer.d.ts.map +1 -1
- package/dist/agent-chat/composer.js +189 -23
- package/dist/agent-chat/composer.test.d.ts +2 -0
- package/dist/agent-chat/composer.test.d.ts.map +1 -0
- package/dist/agent-chat/index.d.ts +5 -1
- 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-detail-panel.d.ts.map +1 -1
- package/dist/agent-chat/thread-detail-panel.js +1 -1
- 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 +329 -37
- package/dist/agent-chat/thread-message.test.d.ts +2 -0
- package/dist/agent-chat/thread-message.test.d.ts.map +1 -0
- 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 +30 -4
- 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/tool-chip.test.d.ts +2 -0
- package/dist/agent-chat/tool-chip.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/charts/primitives/ChartFrame.test.d.ts +2 -0
- package/dist/charts/primitives/ChartFrame.test.d.ts.map +1 -0
- package/dist/charts/utils/domain.test.d.ts +2 -0
- package/dist/charts/utils/domain.test.d.ts.map +1 -0
- package/dist/cli/check-theme.test.d.ts +2 -0
- package/dist/cli/check-theme.test.d.ts.map +1 -0
- package/dist/cli/help.test.d.ts +2 -0
- package/dist/cli/help.test.d.ts.map +1 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/init-sync.test.d.ts +2 -0
- package/dist/cli/init-sync.test.d.ts.map +1 -0
- package/dist/cli/placement-engine.test.d.ts +2 -0
- package/dist/cli/placement-engine.test.d.ts.map +1 -0
- package/dist/cli/tarball-parity.test.d.ts +2 -0
- package/dist/cli/tarball-parity.test.d.ts.map +1 -0
- package/dist/cli/template-format.test.d.ts +2 -0
- package/dist/cli/template-format.test.d.ts.map +1 -0
- package/dist/cli/template-ledger.test.d.ts +2 -0
- package/dist/cli/template-ledger.test.d.ts.map +1 -0
- package/dist/cli/tokens-css.test.d.ts +2 -0
- package/dist/cli/tokens-css.test.d.ts.map +1 -0
- package/dist/content/article-actions.test.d.ts +2 -0
- package/dist/content/article-actions.test.d.ts.map +1 -0
- package/dist/content/article-model.test.d.ts +2 -0
- package/dist/content/article-model.test.d.ts.map +1 -0
- package/dist/content/block-split.test.d.ts +2 -0
- package/dist/content/block-split.test.d.ts.map +1 -0
- package/dist/content/fence-block.d.ts +37 -10
- package/dist/content/fence-block.d.ts.map +1 -1
- package/dist/content/fence-block.js +80 -14
- package/dist/content/heading-components.d.ts.map +1 -1
- package/dist/content/heading-components.js +7 -4
- package/dist/content/heading-components.test.d.ts +2 -0
- package/dist/content/heading-components.test.d.ts.map +1 -0
- package/dist/content/index.d.ts +6 -3
- package/dist/content/index.d.ts.map +1 -1
- package/dist/content/index.js +5 -1
- package/dist/content/markdown.d.ts +101 -14
- package/dist/content/markdown.d.ts.map +1 -1
- package/dist/content/markdown.js +141 -28
- package/dist/content/markdown.test.d.ts +2 -0
- package/dist/content/markdown.test.d.ts.map +1 -0
- package/dist/content/prose.module.css.test.d.ts +2 -0
- package/dist/content/prose.module.css.test.d.ts.map +1 -0
- package/dist/content/sanitize.d.ts +170 -0
- package/dist/content/sanitize.d.ts.map +1 -0
- package/dist/content/sanitize.js +178 -0
- package/dist/content/sanitize.test.d.ts +2 -0
- package/dist/content/sanitize.test.d.ts.map +1 -0
- package/dist/content/slug.test.d.ts +2 -0
- package/dist/content/slug.test.d.ts.map +1 -0
- package/dist/dashboard/stat-card.test.d.ts +2 -0
- package/dist/dashboard/stat-card.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/guard/check-source.test.d.ts +2 -0
- package/dist/guard/check-source.test.d.ts.map +1 -0
- package/dist/guard/guard-hook.test.d.ts +2 -0
- package/dist/guard/guard-hook.test.d.ts.map +1 -0
- package/dist/index.d.ts +4 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -1
- package/dist/provider/index.test.d.ts +2 -0
- package/dist/provider/index.test.d.ts.map +1 -0
- package/dist/provider/lab-theme.test.d.ts +2 -0
- package/dist/provider/lab-theme.test.d.ts.map +1 -0
- package/dist/router-tanstack/multi-search-param-store.test.d.ts +2 -0
- package/dist/router-tanstack/multi-search-param-store.test.d.ts.map +1 -0
- package/dist/styles.floor.test.d.ts +2 -0
- package/dist/styles.floor.test.d.ts.map +1 -0
- package/dist/surfaces.d.ts +5 -5
- package/dist/surfaces.d.ts.map +1 -1
- package/dist/surfaces.js +14 -4
- package/dist/theme/border-coverage.test.d.ts +18 -0
- package/dist/theme/border-coverage.test.d.ts.map +1 -0
- package/dist/theme/contrast.test.d.ts +2 -0
- package/dist/theme/contrast.test.d.ts.map +1 -0
- package/dist/theme/density-option.test.d.ts +2 -0
- package/dist/theme/density-option.test.d.ts.map +1 -0
- package/dist/theme/density-relations.test.d.ts +2 -0
- package/dist/theme/density-relations.test.d.ts.map +1 -0
- package/dist/theme/derive-theme.test.d.ts +2 -0
- package/dist/theme/derive-theme.test.d.ts.map +1 -0
- package/dist/theme/fonts-option.test.d.ts +2 -0
- package/dist/theme/fonts-option.test.d.ts.map +1 -0
- package/dist/theme/radius-option.test.d.ts +2 -0
- package/dist/theme/radius-option.test.d.ts.map +1 -0
- package/dist/theme/radius.test.d.ts +2 -0
- package/dist/theme/radius.test.d.ts.map +1 -0
- package/dist/theme/shadow-surfaces.test.d.ts +26 -0
- package/dist/theme/shadow-surfaces.test.d.ts.map +1 -0
- package/dist/theme/spacing.test.d.ts +2 -0
- package/dist/theme/spacing.test.d.ts.map +1 -0
- package/dist/theme/use-basalt-spacing.test.d.ts +2 -0
- package/dist/theme/use-basalt-spacing.test.d.ts.map +1 -0
- package/dist/theme-lab/derive-controls.test.d.ts +2 -0
- package/dist/theme-lab/derive-controls.test.d.ts.map +1 -0
- package/dist/theme-lab/derive-state.test.d.ts +2 -0
- package/dist/theme-lab/derive-state.test.d.ts.map +1 -0
- package/dist/theme-lab/theme-lab.test.d.ts +2 -0
- package/dist/theme-lab/theme-lab.test.d.ts.map +1 -0
- package/dist/tokens/build-fonts-css.test.d.ts +2 -0
- package/dist/tokens/build-fonts-css.test.d.ts.map +1 -0
- package/dist/tokens/build-radius-css.test.d.ts +2 -0
- package/dist/tokens/build-radius-css.test.d.ts.map +1 -0
- package/dist/tokens/density.test.d.ts +2 -0
- package/dist/tokens/density.test.d.ts.map +1 -0
- package/dist/tokens/derive-radius.test.d.ts +2 -0
- package/dist/tokens/derive-radius.test.d.ts.map +1 -0
- package/dist/tokens/derive.test.d.ts +2 -0
- package/dist/tokens/derive.test.d.ts.map +1 -0
- package/dist/tokens/palette.test.d.ts +2 -0
- package/dist/tokens/palette.test.d.ts.map +1 -0
- package/dist/vite-color-mix.test.d.ts +2 -0
- package/dist/vite-color-mix.test.d.ts.map +1 -0
- package/dist/vite.test.d.ts +2 -0
- package/dist/vite.test.d.ts.map +1 -0
- package/llms.txt +9 -9
- package/package.json +7 -2
- package/src/agent/adapter.test.ts +1640 -0
- package/src/agent/adapter.ts +945 -0
- package/src/agent/ai-sdk-transport.test.ts +117 -26
- package/src/agent/ai-sdk-transport.ts +8 -2
- package/src/agent/coalesce.test.ts +202 -9
- package/src/agent/coalesce.ts +126 -15
- package/src/agent/foreign.test.ts +5 -1
- package/src/agent/id.test.ts +101 -3
- package/src/agent/id.ts +118 -0
- package/src/agent/index.ts +8 -0
- package/src/agent/merge.test.ts +87 -0
- package/src/agent/merge.ts +57 -10
- package/src/agent/part-list.test.tsx +31 -1
- package/src/agent/part-list.tsx +77 -29
- package/src/agent/parts.test.ts +121 -4
- package/src/agent/parts.ts +78 -17
- package/src/agent/thread.test.ts +75 -2
- package/src/agent/thread.ts +25 -1
- package/src/agent/use-agent-stream.test.tsx +31 -5
- package/src/agent/use-agent-stream.ts +6 -3
- package/src/agent/use-agent-thread-runs.foreign.test.tsx +5 -0
- package/src/agent/use-agent-thread-runs.resume.test.tsx +16 -11
- package/src/agent/use-agent-thread-runs.test.tsx +356 -17
- package/src/agent/use-agent-thread-runs.ts +159 -23
- package/src/agent/use-agent-thread-runs.wedge.test.tsx +93 -7
- package/src/agent-chat/composer.test.tsx +924 -0
- package/src/agent-chat/composer.tsx +521 -52
- package/src/agent-chat/index.ts +13 -1
- 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-detail-panel.tsx +3 -1
- 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 +1078 -4
- package/src/agent-chat/thread-message.tsx +795 -42
- 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 +70 -6
- package/src/agent-chat/virtualize.ts +132 -0
- package/src/agent-chat/virtualize.type-guard.test.ts +49 -0
- package/src/cli/index.ts +0 -1
- package/src/cli/template-format.test.ts +2 -2
- package/src/content/fence-block.tsx +242 -15
- package/src/content/heading-components.test.tsx +65 -0
- package/src/content/heading-components.tsx +26 -5
- package/src/content/index.ts +19 -3
- package/src/content/markdown.test.tsx +603 -0
- package/src/content/markdown.tsx +355 -35
- package/src/content/sanitize.test.ts +659 -0
- package/src/content/sanitize.ts +510 -0
- package/src/dashboard/stat-card.test.tsx +6 -1
- 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 +18 -1
- package/src/surfaces.ts +13 -3
- package/src/theme/contrast.test.ts +1 -4
- package/src/theme/density-relations.test.ts +4 -2
- package/src/theme/fonts-option.test.ts +7 -1
- package/src/theme/shadow-surfaces.test.ts +21 -6
- package/src/theme/use-basalt-spacing.test.tsx +2 -1
|
@@ -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":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChartFrame.test.d.ts","sourceRoot":"","sources":["../../../src/charts/primitives/ChartFrame.test.tsx"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"domain.test.d.ts","sourceRoot":"","sources":["../../../src/charts/utils/domain.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check-theme.test.d.ts","sourceRoot":"","sources":["../../src/cli/check-theme.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"help.test.d.ts","sourceRoot":"","sources":["../../src/cli/help.test.ts"],"names":[],"mappings":""}
|
package/dist/cli/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init-sync.test.d.ts","sourceRoot":"","sources":["../../src/cli/init-sync.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"placement-engine.test.d.ts","sourceRoot":"","sources":["../../src/cli/placement-engine.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tarball-parity.test.d.ts","sourceRoot":"","sources":["../../src/cli/tarball-parity.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template-format.test.d.ts","sourceRoot":"","sources":["../../src/cli/template-format.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template-ledger.test.d.ts","sourceRoot":"","sources":["../../src/cli/template-ledger.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokens-css.test.d.ts","sourceRoot":"","sources":["../../src/cli/tokens-css.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"article-actions.test.d.ts","sourceRoot":"","sources":["../../src/content/article-actions.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"article-model.test.d.ts","sourceRoot":"","sources":["../../src/content/article-model.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"block-split.test.d.ts","sourceRoot":"","sources":["../../src/content/block-split.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,19 +1,46 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
import type { Element } from 'hast';
|
|
3
|
+
export type FenceRenderContext = {
|
|
4
|
+
/** The fence body, without the surrounding fence markers. */
|
|
5
|
+
readonly code: string;
|
|
6
|
+
/** The info string's first word (` ```ts title="x" ` → `'ts'`), absent on a bare fence. */
|
|
7
|
+
readonly language?: string;
|
|
8
|
+
/** Raw meta string after the language on the opening fence line (`'title="x"'` above). */
|
|
9
|
+
readonly meta?: string;
|
|
10
|
+
/** Parsed `title="…"` out of `meta` — the filename tab `CodeBlock` renders. */
|
|
11
|
+
readonly title?: string;
|
|
12
|
+
/** `false` only for the in-flight tail block of a streaming message. Monotone: never true→false. */
|
|
13
|
+
readonly settled: boolean;
|
|
14
|
+
};
|
|
1
15
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
16
|
+
* `undefined` DECLINES — the fence falls back to the default `CodeBlock` rendering, no different
|
|
17
|
+
* from an unclaimed language. `null` is NOT a decline; it is a deliberate "render nothing" result
|
|
18
|
+
* and is used as-is. A renderer that THROWS is also contained and falls back to `CodeBlock` (see the
|
|
19
|
+
* module doc above) — no renderer needs its own try/parse/fallback scaffolding to survive malformed,
|
|
20
|
+
* model-authored fence bodies.
|
|
21
|
+
*/
|
|
22
|
+
export type FenceRenderer = (ctx: FenceRenderContext) => ReactNode;
|
|
23
|
+
/** Fence renderers keyed by language. */
|
|
24
|
+
export type FenceRenderers = Readonly<Record<string, FenceRenderer>>;
|
|
25
|
+
/**
|
|
26
|
+
* Wraps a renderer that is only worth running on finished text: renders the plain `CodeBlock`
|
|
27
|
+
* while the fence is still streaming, then `render` once its block settles. The built-in `mermaid`
|
|
28
|
+
* entry IS this — a consumer's own heavyweight fence (a chart spec, a diagram DSL) wants the same
|
|
29
|
+
* deal.
|
|
5
30
|
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* wasted parse pass on a still-changing diagram. Every other fenced language hides its copy
|
|
9
|
-
* action while unsettled for the same reason (copying a still-streaming block is misleading).
|
|
31
|
+
* @example
|
|
32
|
+
* import { settledOnly } from 'basalt-ui/content'
|
|
10
33
|
*
|
|
11
|
-
*
|
|
34
|
+
* <Markdown fenceRenderers={{ vega: settledOnly(({ code }) => <VegaChart spec={code} />) }}>
|
|
12
35
|
*/
|
|
13
|
-
|
|
36
|
+
export declare function settledOnly(render: FenceRenderer): FenceRenderer;
|
|
37
|
+
/** basalt's own fence renderers. A consumer entry for the same key wins over these. */
|
|
38
|
+
export declare const BUILT_IN_FENCE_RENDERERS: FenceRenderers;
|
|
14
39
|
export type FenceBlockProps = {
|
|
15
40
|
readonly node?: Element;
|
|
16
41
|
readonly settled: boolean;
|
|
42
|
+
/** Consumer overrides, consulted BEFORE `BUILT_IN_FENCE_RENDERERS`. */
|
|
43
|
+
readonly renderers?: FenceRenderers;
|
|
17
44
|
};
|
|
18
|
-
export declare function FenceBlock({ node, settled }: FenceBlockProps): import("react").JSX.Element | null;
|
|
45
|
+
export declare function FenceBlock({ node, settled, renderers }: FenceBlockProps): import("react").JSX.Element | null;
|
|
19
46
|
//# sourceMappingURL=fence-block.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fence-block.d.ts","sourceRoot":"","sources":["../../src/content/fence-block.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"fence-block.d.ts","sourceRoot":"","sources":["../../src/content/fence-block.tsx"],"names":[],"mappings":"AAgCA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACtC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAOnC,MAAM,MAAM,kBAAkB,GAAG;IAC/B,6DAA6D;IAC7D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,2FAA2F;IAC3F,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAC1B,0FAA0F;IAC1F,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,+EAA+E;IAC/E,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,oGAAoG;IACpG,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;CAC1B,CAAA;AAED;;;;;;GAMG;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,GAAG,EAAE,kBAAkB,KAAK,SAAS,CAAA;AAElE,yCAAyC;AACzC,MAAM,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAA;AAYpE;;;;;;;;;;GAUG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,aAAa,GAAG,aAAa,CAEhE;AAED,uFAAuF;AACvF,eAAO,MAAM,wBAAwB,EAAE,cAEtC,CAAA;AAiBD,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAA;IACvB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,uEAAuE;IACvE,QAAQ,CAAC,SAAS,CAAC,EAAE,cAAc,CAAA;CACpC,CAAA;AA2HD,wBAAgB,UAAU,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,eAAe,sCA2BvE"}
|
|
@@ -1,23 +1,89 @@
|
|
|
1
1
|
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Component, useRef } from "react";
|
|
2
3
|
import { CodeBlock } from "./code-block.js";
|
|
3
4
|
import { extractFenceInfo } from "./markdown-hast.js";
|
|
4
5
|
import { MermaidDiagram } from "./mermaid.js";
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
const defaultFenceRenderer = ({ code, language, title, settled }) => /* @__PURE__ */ jsx(
|
|
7
|
+
CodeBlock,
|
|
8
|
+
{
|
|
9
|
+
code,
|
|
10
|
+
showCopy: settled,
|
|
11
|
+
...language !== void 0 && { language },
|
|
12
|
+
...title !== void 0 && { title }
|
|
10
13
|
}
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
14
|
+
);
|
|
15
|
+
function settledOnly(render) {
|
|
16
|
+
return (ctx) => ctx.settled ? render(ctx) : defaultFenceRenderer(ctx);
|
|
17
|
+
}
|
|
18
|
+
const BUILT_IN_FENCE_RENDERERS = {
|
|
19
|
+
mermaid: settledOnly(({ code }) => /* @__PURE__ */ jsx(MermaidDiagram, { code }))
|
|
20
|
+
};
|
|
21
|
+
function extractFenceMeta(preNode) {
|
|
22
|
+
const codeNode = preNode.children.find(
|
|
23
|
+
(child) => child.type === "element" && child.tagName === "code"
|
|
19
24
|
);
|
|
25
|
+
const data = codeNode?.data;
|
|
26
|
+
return data?.meta;
|
|
27
|
+
}
|
|
28
|
+
function lookupFenceRenderer(registry, language) {
|
|
29
|
+
if (registry === void 0 || !Object.hasOwn(registry, language)) return void 0;
|
|
30
|
+
const candidate = registry[language];
|
|
31
|
+
return typeof candidate === "function" ? candidate : void 0;
|
|
32
|
+
}
|
|
33
|
+
function warnFenceRendererThrew(warned, error) {
|
|
34
|
+
if (warned.current) return;
|
|
35
|
+
warned.current = true;
|
|
36
|
+
if (process.env["NODE_ENV"] !== "production") {
|
|
37
|
+
console.warn(
|
|
38
|
+
"[basalt] FenceBlock: a fence renderer threw \u2014 falling back to the default CodeBlock rendering.",
|
|
39
|
+
error
|
|
40
|
+
);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
function renderFenceSafely(render, ctx, warned) {
|
|
44
|
+
let rendered;
|
|
45
|
+
try {
|
|
46
|
+
rendered = render(ctx);
|
|
47
|
+
} catch (error) {
|
|
48
|
+
warnFenceRendererThrew(warned, error);
|
|
49
|
+
return defaultFenceRenderer(ctx);
|
|
50
|
+
}
|
|
51
|
+
return rendered === void 0 ? defaultFenceRenderer(ctx) : rendered;
|
|
52
|
+
}
|
|
53
|
+
class FenceRenderBoundary extends Component {
|
|
54
|
+
constructor(props) {
|
|
55
|
+
super(props);
|
|
56
|
+
this.state = { hasError: false };
|
|
57
|
+
}
|
|
58
|
+
static getDerivedStateFromError() {
|
|
59
|
+
return { hasError: true };
|
|
60
|
+
}
|
|
61
|
+
componentDidCatch(error) {
|
|
62
|
+
warnFenceRendererThrew(this.props.warned, error);
|
|
63
|
+
}
|
|
64
|
+
render() {
|
|
65
|
+
return this.state.hasError ? defaultFenceRenderer(this.props.ctx) : this.props.children;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
function FenceBlock({ node, settled, renderers }) {
|
|
69
|
+
const warned = useRef(false);
|
|
70
|
+
const fence = node ? extractFenceInfo(node) : void 0;
|
|
71
|
+
if (!fence) return null;
|
|
72
|
+
const meta = node ? extractFenceMeta(node) : void 0;
|
|
73
|
+
const ctx = {
|
|
74
|
+
code: fence.code,
|
|
75
|
+
settled,
|
|
76
|
+
...fence.language !== void 0 && { language: fence.language },
|
|
77
|
+
...fence.title !== void 0 && { title: fence.title },
|
|
78
|
+
...meta !== void 0 && { meta }
|
|
79
|
+
};
|
|
80
|
+
const language = fence.language;
|
|
81
|
+
const render = language === void 0 ? void 0 : lookupFenceRenderer(renderers, language) ?? lookupFenceRenderer(BUILT_IN_FENCE_RENDERERS, language);
|
|
82
|
+
const active = render ?? defaultFenceRenderer;
|
|
83
|
+
return /* @__PURE__ */ jsx(FenceRenderBoundary, { ctx, warned, children: renderFenceSafely(active, ctx, warned) }, ctx.code);
|
|
20
84
|
}
|
|
21
85
|
export {
|
|
22
|
-
|
|
86
|
+
BUILT_IN_FENCE_RENDERERS,
|
|
87
|
+
FenceBlock,
|
|
88
|
+
settledOnly
|
|
23
89
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"heading-components.d.ts","sourceRoot":"","sources":["../../src/content/heading-components.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"heading-components.d.ts","sourceRoot":"","sources":["../../src/content/heading-components.tsx"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,UAAU,EAAc,MAAM,gBAAgB,CAAA;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA;AA8CzC,yFAAyF;AACzF,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CASjF"}
|
|
@@ -18,11 +18,14 @@ function headingText(node) {
|
|
|
18
18
|
}
|
|
19
19
|
function createHeadingRenderer(level, tracker) {
|
|
20
20
|
const Tag = HEADING_TAGS[level];
|
|
21
|
-
return function HeadingRenderer({ children }) {
|
|
22
|
-
|
|
23
|
-
|
|
21
|
+
return function HeadingRenderer({ id, children, node: _node, ...rest }) {
|
|
22
|
+
if (id !== void 0) {
|
|
23
|
+
return /* @__PURE__ */ jsx(Tag, { id, ...rest, children });
|
|
24
|
+
}
|
|
25
|
+
const slug = tracker.slug(headingText(children));
|
|
26
|
+
return /* @__PURE__ */ jsxs(Tag, { id: slug, ...rest, children: [
|
|
24
27
|
children,
|
|
25
|
-
/* @__PURE__ */ jsx(HeadingAnchor, { id })
|
|
28
|
+
/* @__PURE__ */ jsx(HeadingAnchor, { id: slug })
|
|
26
29
|
] });
|
|
27
30
|
};
|
|
28
31
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"heading-components.test.d.ts","sourceRoot":"","sources":["../../src/content/heading-components.test.tsx"],"names":[],"mappings":""}
|
package/dist/content/index.d.ts
CHANGED
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
* Mantine-coupled (like `./forms`/`./notifications`/`./data`): prose typography, a shiki-backed
|
|
5
5
|
* code block (optional peer, lazy singleton), a semantic callout, a scroll-spy TOC rail, a
|
|
6
6
|
* scroll-driven reading-progress bar, a streaming-aware `Markdown` renderer (react-markdown +
|
|
7
|
-
* remark-gfm, optional peers)
|
|
7
|
+
* remark-gfm + rehype-sanitize + remend, all optional peers) with its fence-renderer registry,
|
|
8
|
+
* `MermaidDiagram` (beautiful-mermaid, optional peer), the MDX
|
|
8
9
|
* component map, the docs-page frame (`ArticleLayout`), overview cards (`ArticleCard`/
|
|
9
10
|
* `ArticleGrid`), and the contextual-help drawer (`GuideLink`/`GuideDrawer`). See
|
|
10
11
|
* `agent/rules/basalt-content.md` for the full doctrine + the content-collections recipe.
|
|
@@ -23,8 +24,10 @@ export { headingSlug, readingTime, SlugTracker } from './slug.js';
|
|
|
23
24
|
export type { ReadingTime } from './slug.js';
|
|
24
25
|
export { HeadingAnchor } from './heading-anchor.js';
|
|
25
26
|
export type { HeadingAnchorProps } from './heading-anchor.js';
|
|
26
|
-
export { Markdown } from './markdown.js';
|
|
27
|
-
export type { MarkdownComponents, MarkdownProps } from './markdown.js';
|
|
27
|
+
export { Markdown, settledOnly } from './markdown.js';
|
|
28
|
+
export type { FenceRenderContext, FenceRenderer, FenceRenderers, MarkdownComponents, MarkdownContentTrust, MarkdownProps, } from './markdown.js';
|
|
29
|
+
export { BASALT_SANITIZE_SCHEMA, mergeSanitizeSchema } from './sanitize.js';
|
|
30
|
+
export type { SanitizePropertyDefinition, SanitizeSchema, SanitizeSchemaExtension, SanitizeSchemaInput, } from './sanitize.js';
|
|
28
31
|
export { MermaidDiagram } from './mermaid.js';
|
|
29
32
|
export type { MermaidDiagramProps } from './mermaid.js';
|
|
30
33
|
export { blockSplit } from './block-split.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/content/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/content/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAC/B,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAEvD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AACxC,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAElD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAE1D,OAAO,EAAE,eAAe,EAAE,MAAM,OAAO,CAAA;AACvC,YAAY,EAAE,oBAAoB,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAE1D,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,YAAY,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AAE9D,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA;AAC9D,YAAY,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA;AAEzC,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,YAAY,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAE1D,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAClD,YAAY,EACV,kBAAkB,EAClB,aAAa,EACb,cAAc,EACd,kBAAkB,EAClB,oBAAoB,EACpB,aAAa,GACd,MAAM,YAAY,CAAA;AAEnB,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AACxE,YAAY,EACV,0BAA0B,EAC1B,cAAc,EACd,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,YAAY,CAAA;AAEnB,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAC1C,YAAY,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAA;AAEpD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAE1C,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAC1D,YAAY,EAAE,0BAA0B,EAAE,MAAM,OAAO,CAAA;AAEvD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,YAAY,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAE/F,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AACzD,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAExE,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AACjF,YAAY,EAAE,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAEhF,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACpD,YAAY,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAA;AAEhE,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AACvD,YAAY,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AAEjE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAChD,YAAY,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA"}
|
package/dist/content/index.js
CHANGED
|
@@ -5,7 +5,8 @@ import { TableOfContents } from "./toc.js";
|
|
|
5
5
|
import { ReadingProgress } from "./reading-progress.js";
|
|
6
6
|
import { headingSlug, readingTime, SlugTracker } from "./slug.js";
|
|
7
7
|
import { HeadingAnchor } from "./heading-anchor.js";
|
|
8
|
-
import { Markdown } from "./markdown.js";
|
|
8
|
+
import { Markdown, settledOnly } from "./markdown.js";
|
|
9
|
+
import { BASALT_SANITIZE_SCHEMA, mergeSanitizeSchema } from "./sanitize.js";
|
|
9
10
|
import { MermaidDiagram } from "./mermaid.js";
|
|
10
11
|
import { blockSplit } from "./block-split.js";
|
|
11
12
|
import { createMdxComponents, mdxComponents } from "./mdx.js";
|
|
@@ -20,6 +21,7 @@ export {
|
|
|
20
21
|
ArticleFilterBar,
|
|
21
22
|
ArticleGrid,
|
|
22
23
|
ArticleLayout,
|
|
24
|
+
BASALT_SANITIZE_SCHEMA,
|
|
23
25
|
Callout,
|
|
24
26
|
CodeBlock,
|
|
25
27
|
GuideDrawer,
|
|
@@ -37,7 +39,9 @@ export {
|
|
|
37
39
|
formatArticleDate,
|
|
38
40
|
headingSlug,
|
|
39
41
|
mdxComponents,
|
|
42
|
+
mergeSanitizeSchema,
|
|
40
43
|
readingTime,
|
|
44
|
+
settledOnly,
|
|
41
45
|
sortArticles,
|
|
42
46
|
toArticleActions
|
|
43
47
|
};
|