@markii/ansi 0.17.0-next.2 → 0.17.0-next.4

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/dist/ansi.d.ts CHANGED
@@ -46,8 +46,7 @@ export declare const inverse: (text: string, level: ColorLevel) => string;
46
46
  * at a line boundary are closed with a reset before the `\n` and reopened
47
47
  * at the start of the next line.
48
48
  *
49
- * This is the SYSTEMATIC fix for a real Ink behavior discovered during
50
- * batch 10's post-phase-2 review: Ink's `<Text>` does not treat an embedded
49
+ * This is the systematic fix for an Ink behavior: Ink's `<Text>` does not treat an embedded
51
50
  * raw ANSI escape as transparent across an embedded newline the way a
52
51
  * terminal receiving the same bytes directly would — it resets SGR state
53
52
  * at every line boundary within one `<Text>` value and does not reopen it.
package/dist/ansi.js CHANGED
@@ -72,8 +72,7 @@ const SGR_TOKEN = /\x1b\[([0-9;]*)m/g;
72
72
  * at a line boundary are closed with a reset before the `\n` and reopened
73
73
  * at the start of the next line.
74
74
  *
75
- * This is the SYSTEMATIC fix for a real Ink behavior discovered during
76
- * batch 10's post-phase-2 review: Ink's `<Text>` does not treat an embedded
75
+ * This is the systematic fix for an Ink behavior: Ink's `<Text>` does not treat an embedded
77
76
  * raw ANSI escape as transparent across an embedded newline the way a
78
77
  * terminal receiving the same bytes directly would — it resets SGR state
79
78
  * at every line boundary within one `<Text>` value and does not reopen it.
@@ -18,8 +18,7 @@ export declare function resolveCardBoxWidth(attributes: DirectiveAttributes, lay
18
18
  * children are built ONCE, directly at the correct inner width, and never
19
19
  * built wide and re-wrapped narrower afterward.
20
20
  *
21
- * That re-wrap-afterward shape was a real, shipped regression (caught
22
- * post-phase-2 review): re-wrapping an ALREADY-RENDERED child block with a
21
+ * That re-wrap-afterward shape was a real, shipped regression: re-wrapping an ALREADY-RENDERED child block with a
23
22
  * word-based wrapper corrupts anything in it that draws its own fixed-width
24
23
  * glyphs (a nested `card`/`callout`'s frame, a nested `row`'s columns) — the
25
24
  * word-wrapper has no notion that a run of box-drawing characters is not
@@ -31,8 +31,7 @@ export function resolveCardBoxWidth(attributes, layout, outerWidth) {
31
31
  * children are built ONCE, directly at the correct inner width, and never
32
32
  * built wide and re-wrapped narrower afterward.
33
33
  *
34
- * That re-wrap-afterward shape was a real, shipped regression (caught
35
- * post-phase-2 review): re-wrapping an ALREADY-RENDERED child block with a
34
+ * That re-wrap-afterward shape was a real, shipped regression: re-wrapping an ALREADY-RENDERED child block with a
36
35
  * word-based wrapper corrupts anything in it that draws its own fixed-width
37
36
  * glyphs (a nested `card`/`callout`'s frame, a nested `row`'s columns) — the
38
37
  * word-wrapper has no notion that a run of box-drawing characters is not
@@ -1,7 +1,7 @@
1
1
  import type { AnsiComponent, DirectiveAttributes } from '../registry.js';
2
2
  declare const TEXT_ALIGNS: readonly ["left", "center", "right"];
3
3
  export type RowTextAlign = (typeof TEXT_ALIGNS)[number];
4
- /** Below this width, cells stack vertically instead of sitting side by side — a named constant per the batch brief, not a magic number. */
4
+ /** Below this width, cells stack vertically instead of sitting side by side — a named constant, not a magic number. */
5
5
  export declare const ROW_COLUMN_THRESHOLD = 60;
6
6
  /** The blank columns between two cells of a grid row. Shared by both emitters (the Ink flex `Box` and the flattened string). */
7
7
  export declare const ROW_GUTTER = 1;
@@ -6,7 +6,7 @@ const TEXT_ALIGNS = ['left', 'center', 'right'];
6
6
  function isTextAlign(value) {
7
7
  return TEXT_ALIGNS.includes(value);
8
8
  }
9
- /** Below this width, cells stack vertically instead of sitting side by side — a named constant per the batch brief, not a magic number. */
9
+ /** Below this width, cells stack vertically instead of sitting side by side — a named constant, not a magic number. */
10
10
  export const ROW_COLUMN_THRESHOLD = 60;
11
11
  /** The blank columns between two cells of a grid row. Shared by both emitters (the Ink flex `Box` and the flattened string). */
12
12
  export const ROW_GUTTER = 1;
@@ -3,8 +3,7 @@ import type { ReactElement } from 'react';
3
3
  * Mounts `element` with Ink at `columns` wide, captures the first (and only)
4
4
  * frame as a plain string, and unmounts. `ink` is imported dynamically
5
5
  * because `yoga-layout` (Ink's layout engine) resolves its WASM module via a
6
- * top-level `await` at ES-module-evaluation time (`SPIKE-10-findings.md`'s
7
- * "Item 3"): the first call to this function pays that one-time cost, and
6
+ * top-level `await` at ES-module-evaluation time: the first call to this function pays that one-time cost, and
8
7
  * every exported entry point that reaches here is therefore `async`. A
9
8
  * later call in the same process reuses the already-evaluated module graph,
10
9
  * the ordinary ESM module-cache guarantee.
@@ -20,8 +20,7 @@ function makeCollectingStream(columns) {
20
20
  * Mounts `element` with Ink at `columns` wide, captures the first (and only)
21
21
  * frame as a plain string, and unmounts. `ink` is imported dynamically
22
22
  * because `yoga-layout` (Ink's layout engine) resolves its WASM module via a
23
- * top-level `await` at ES-module-evaluation time (`SPIKE-10-findings.md`'s
24
- * "Item 3"): the first call to this function pays that one-time cost, and
23
+ * top-level `await` at ES-module-evaluation time: the first call to this function pays that one-time cost, and
25
24
  * every exported entry point that reaches here is therefore `async`. A
26
25
  * later call in the same process reuses the already-evaluated module graph,
27
26
  * the ordinary ESM module-cache guarantee.
@@ -53,7 +53,7 @@ export interface FocusableDescriptor {
53
53
  export interface InteractiveRootProps {
54
54
  /** Every focusable component the walk assigned a `focusId` to, in `focusId` order (empty for none). */
55
55
  focusables: readonly FocusableDescriptor[];
56
- /** Called when the reader presses `q`. The engine owns no process state: it never calls `process.exit` itself (AGENTS.md, batch-10 brief). */
56
+ /** Called when the reader presses `q`. The engine owns no process state: it never calls `process.exit` itself. */
57
57
  onExit?: () => void;
58
58
  color: ColorLevel;
59
59
  theme: AnsiTheme;
@@ -73,7 +73,7 @@ export interface InteractiveRootProps {
73
73
  /**
74
74
  * The root of an interactive render: owns which `focusId` is focused, moves
75
75
  * it on up/down/j/k, calls `onExit` on `q`, and renders the one-line status
76
- * bar (batch 10.1) naming the focused block and the key legend. Rendered
76
+ * bar naming the focused block and the key legend. Rendered
77
77
  * only when the caller actually wants a live, keyboard-driven view:
78
78
  * `buildMarkElement` mounts this when `interactive` is true, but the
79
79
  * render-ONCE string path (`ink-string.ts`, `renderRootToString`) never
@@ -78,7 +78,7 @@ export function useFocusAnchor(focusId) {
78
78
  /**
79
79
  * The root of an interactive render: owns which `focusId` is focused, moves
80
80
  * it on up/down/j/k, calls `onExit` on `q`, and renders the one-line status
81
- * bar (batch 10.1) naming the focused block and the key legend. Rendered
81
+ * bar naming the focused block and the key legend. Rendered
82
82
  * only when the caller actually wants a live, keyboard-driven view:
83
83
  * `buildMarkElement` mounts this when `interactive` is true, but the
84
84
  * render-ONCE string path (`ink-string.ts`, `renderRootToString`) never
@@ -8,14 +8,11 @@ import type { ResolvedLayoutAttributes } from './layout.js';
8
8
  import type { ResolveImageSrc } from './image-resolve.js';
9
9
  import type { ResolveHref } from './href-resolve.js';
10
10
  /**
11
- * The registry contract for the terminal engine, batch-10 (the Ink
12
- * rewrite): a component is a React function component receiving
11
+ * The registry contract for the terminal engine: a component is a React function component receiving
13
12
  * `{ attributes, children, ctx }`, where `children` is ALREADY a built Ink
14
13
  * element tree (a `ReactNode`) rather than the lazy string-producing
15
14
  * `AnsiChildren` handle the pre-Ink engine used. Building children eagerly
16
- * is the batch-10 brief's own instruction (`AGENTS.md`'s architecture
17
- * section is silent on this; the brief is explicit: "Delete... the lazy-
18
- * children machinery"): Ink/Yoga lays a tree out AFTER it is built, exactly
15
+ * is how this engine works: Ink/Yoga lays a tree out AFTER it is built, exactly
19
16
  * like a browser reflows HTML, so a component no longer needs to ask for a
20
17
  * narrower re-render of its own body the way the old string engine did —
21
18
  * the one standard component that still needs a per-cell WIDTH NUMBER before
@@ -233,7 +230,7 @@ export declare function resolveDirectiveAlias(registry: AnsiRegistry, name: stri
233
230
  * top comment on why those three are the only ones that get a real Ink
234
231
  * element tree instead. `children` is still typed `ReactNode` on
235
232
  * `AnsiComponentProps` (the honest public contract: "an Ink element tree",
236
- * per the batch-10 brief, and a string IS a valid `ReactNode`), so a
233
+ * and a string IS a valid `ReactNode`), so a
237
234
  * component that needs its body AS TEXT (to measure it, frame it, indent
238
235
  * it, or check whether it is empty) reads it through this helper rather
239
236
  * than assuming the type; a non-string `children` degrades to `''` rather
package/dist/registry.js CHANGED
@@ -117,7 +117,7 @@ export function resolveDirectiveAlias(registry, name, attributes) {
117
117
  * top comment on why those three are the only ones that get a real Ink
118
118
  * element tree instead. `children` is still typed `ReactNode` on
119
119
  * `AnsiComponentProps` (the honest public contract: "an Ink element tree",
120
- * per the batch-10 brief, and a string IS a valid `ReactNode`), so a
120
+ * and a string IS a valid `ReactNode`), so a
121
121
  * component that needs its body AS TEXT (to measure it, frame it, indent
122
122
  * it, or check whether it is empty) reads it through this helper rather
123
123
  * than assuming the type; a non-string `children` degrades to `''` rather
package/dist/render.d.ts CHANGED
@@ -99,8 +99,7 @@ export interface RenderMarkOptions {
99
99
  * defaults to `defaultAnsiRegistry`.
100
100
  *
101
101
  * `async` since the first call in a process pays Ink/Yoga's one-time module-
102
- * evaluation cost (`ink-string.ts`'s doc comment; `SPIKE-10-findings.md`'s
103
- * "Item 3"). Never throws: parsing is tolerant, unknown names always render
102
+ * evaluation cost (`ink-string.ts`'s doc comment). Never throws: parsing is tolerant, unknown names always render
104
103
  * a fallback, and any unexpected internal error degrades to the "failed to
105
104
  * render document" line.
106
105
  *
@@ -125,7 +124,7 @@ export declare function renderMarkNodeToAnsi(node: MarkNode | MarkRoot, registry
125
124
  */
126
125
  export declare function renderMarkInlineToAnsi(text: string, registry?: AnsiRegistry, store?: AnsiValueStore, vault?: AnsiVaultStore, options?: RenderMarkOptions): Promise<string>;
127
126
  /**
128
- * The live-viewer entry point (phase 3 consumes this): builds the same Ink
127
+ * The live-viewer entry point: builds the same Ink
129
128
  * element tree `renderMarkToAnsi` would render to a string, but returns the
130
129
  * element itself so a host (the CLI's `markii view`) can mount it directly
131
130
  * with Ink's own `render()` instead of re-rendering a string on every
package/dist/render.js CHANGED
@@ -26,12 +26,12 @@ import { glyphsFor } from './glyphs.js';
26
26
  import { InteractiveTabs } from './components/tabs.js';
27
27
  import { InteractiveDetails } from './components/details.js';
28
28
  /**
29
- * The hast walk for the terminal engine (batch 10: the Ink rewrite). Every
29
+ * The hast walk for the terminal engine (the Ink rewrite). Every
30
30
  * DECISION this walk makes is unchanged from the pre-Ink engine (alias
31
31
  * resolution, layout resolution, data binding, form mismatch, invalid-enum
32
32
  * notice, empty-inline notice, never-throw component containment, script-
33
33
  * fence markers, link and image handling) — see AGENTS.md's architecture
34
- * rules and the batch-10 brief. What changed is the OUTPUT shape: instead of
34
+ * rules. The OUTPUT is a tree of Ink elements: instead of
35
35
  * building one big plain string, the walk builds a tree of Ink elements
36
36
  * (`Box`/`Text`) and hands it to `ink-string.ts` (the render-once path) or
37
37
  * returns it directly (the new live-viewer export, `buildMarkElement`).
@@ -82,7 +82,7 @@ const ROW_NAME = 'row';
82
82
  const TABS_NAME = 'tabs';
83
83
  const DETAILS_NAME = 'details';
84
84
  /**
85
- * `card` and `figure` join this list (batch 11's Ink-frames phase): both are
85
+ * `card` and `figure` join this list: both are
86
86
  * containers whose body previously only ever reached STRING mode, so a
87
87
  * `tabs`/`details` nested inside one could never become focusable. `card`
88
88
  * draws its frame with an Ink `Box` border (`renderCardElement`); `figure`
@@ -877,7 +877,7 @@ function renderDirectiveString(element, width, indent, walk) {
877
877
  // own attributes (never from the body), so the walk resolves it here,
878
878
  // BEFORE building children, and builds children exactly ONCE at that
879
879
  // final width — never at the outer width followed by a re-wrap. A
880
- // re-wrap-afterward shipped as a real regression (post-phase-2 review):
880
+ // re-wrap-afterward shipped as a regression:
881
881
  // it corrupts anything self-drawing nested inside (a card's frame, a
882
882
  // row's columns), since a word-based re-wrapper has no notion that a run
883
883
  // of box-drawing characters is not prose. See `resolveCardInnerWidth`'s
@@ -1012,13 +1012,11 @@ function renderAlignedBodyElement(nodes, width, indent, wctx, align) {
1012
1012
  * Renders one `row` cell at `cellWidth`. `text=left` (the default) keeps
1013
1013
  * the cell a real Ink element tree (`renderBlockElement`), so anything
1014
1014
  * focusable inside it stays focusable. `text=center`/`text=right` instead
1015
- * falls back to a flattened, pre-justified STRING — batch 11's justification
1015
+ * falls back to a flattened, pre-justified STRING — the justification
1016
1016
  * rule: exactly ONE implementation, `text-grid.ts`'s `padText`, never a
1017
- * second Ink-`alignItems`-based mechanism. Before this batch, `row`'s
1018
- * ELEMENT-mode grid silently ignored `text=` altogether (only the STRING-
1019
- * mode fallback, reached when a `row` is nested inside a self-drawing
1020
- * container, honored it); this closes that gap using the SAME helper the
1021
- * STRING mode already uses, rather than inventing a second mechanism.
1017
+ * second Ink-`alignItems`-based mechanism. The ELEMENT-mode grid and the STRING-mode fallback (reached when a `row`
1018
+ * is nested inside a self-drawing container) both honor `text=` through
1019
+ * that one helper.
1022
1020
  */
1023
1021
  function renderRowCellElement(node, cellWidth, indent, wctx, align) {
1024
1022
  if (align === 'left')
@@ -1129,7 +1127,7 @@ function selfLayoutAlignElement(element, boxWidth, layout, width) {
1129
1127
  }
1130
1128
  /**
1131
1129
  * `:::card{title="..." text=left|center|right} ... :::` as a real Ink
1132
- * element (batch 11: card moves off `frameBlock`'s hand-drawn string frame
1130
+ * element (card moves off `frameBlock`'s hand-drawn string frame
1133
1131
  * onto Ink's own `Box` border, so a `tabs`/`details` nested in its body can
1134
1132
  * become a real focusable — this function's `body` is built through
1135
1133
  * `renderBlocksElement`, ELEMENT mode, whenever that is possible).
@@ -1141,9 +1139,7 @@ function selfLayoutAlignElement(element, boxWidth, layout, width) {
1141
1139
  * `frameGlyphs`'s character set makes byte-identical to `frameBlock`'s own
1142
1140
  * untitled output (proven against the committed fixtures).
1143
1141
  *
1144
- * `text=center`/`text=right` (batch 11's justification rule: exactly ONE
1145
- * implementation, `text-grid.ts`'s `padText`, pre-justifying a STRING before
1146
- * Ink ever sees it, never a second Ink-`alignItems`-based mechanism) falls
1142
+ * `text=center`/`text=right` falls
1147
1143
  * back to building the body as one flattened, pre-justified string, exactly
1148
1144
  * like the pre-Ink engine did — an accepted, documented trade: a `tabs`/
1149
1145
  * `details` nested inside a CENTERED or RIGHT-aligned card body is not
@@ -1226,7 +1222,7 @@ function renderCalloutElement(element, attributes, width, indent, wctx, layout)
1226
1222
  }
1227
1223
  /**
1228
1224
  * `:::figure{src="..." alt="..."} caption markdown :::` as a real Ink
1229
- * element (batch 11: `figure` never drew a hand-drawn frame — it is a plain
1225
+ * element (`figure` never drew a hand-drawn frame — it is a plain
1230
1226
  * dim alt/src line followed by its caption body — but its body still only
1231
1227
  * ever reached STRING mode before this change, so a `tabs`/`details` in its
1232
1228
  * caption could never become focusable. `body` here is built through
@@ -1498,7 +1494,7 @@ function diagnosticsFor(options) {
1498
1494
  }
1499
1495
  /** The columns assumed when a caller supplies no `width` option. */
1500
1496
  const DEFAULT_WIDTH = 80;
1501
- /** Builds the root Ink element for `root`, given every resolved render input. Exported for `buildMarkElement` (the live-viewer entry point, phase 3) as well as this module's own three string-producing entry points. */
1497
+ /** Builds the root Ink element for `root`, given every resolved render input. Exported for `buildMarkElement` (the live-viewer entry point) as well as this module's own three string-producing entry points. */
1502
1498
  function buildRootElement(root, registry, scope, color, theme, glyphs, interactive, resolveImageSrc, resolveHref, onDiagnostic, unavailable, width, renderCode) {
1503
1499
  const wctx = buildWalkContext(registry, scope, color, theme, glyphs, interactive, resolveImageSrc, resolveHref, onDiagnostic, unavailable, renderCode);
1504
1500
  const body = renderBlocksElement(root.children, width, '', wctx);
@@ -1516,8 +1512,7 @@ async function renderRootToString(root, registry, scope, color, theme, glyphs, i
1516
1512
  * defaults to `defaultAnsiRegistry`.
1517
1513
  *
1518
1514
  * `async` since the first call in a process pays Ink/Yoga's one-time module-
1519
- * evaluation cost (`ink-string.ts`'s doc comment; `SPIKE-10-findings.md`'s
1520
- * "Item 3"). Never throws: parsing is tolerant, unknown names always render
1515
+ * evaluation cost (`ink-string.ts`'s doc comment). Never throws: parsing is tolerant, unknown names always render
1521
1516
  * a fallback, and any unexpected internal error degrades to the "failed to
1522
1517
  * render document" line.
1523
1518
  *
@@ -1584,7 +1579,7 @@ export async function renderMarkInlineToAnsi(text, registry = defaultAnsiRegistr
1584
1579
  return renderMarkToAnsi(text, registry, store, vault, options);
1585
1580
  }
1586
1581
  /**
1587
- * The live-viewer entry point (phase 3 consumes this): builds the same Ink
1582
+ * The live-viewer entry point: builds the same Ink
1588
1583
  * element tree `renderMarkToAnsi` would render to a string, but returns the
1589
1584
  * element itself so a host (the CLI's `markii view`) can mount it directly
1590
1585
  * with Ink's own `render()` instead of re-rendering a string on every
@@ -3,9 +3,8 @@
3
3
  * handful of STANDARD COMPONENTS that draw their own fixed-width glyphs
4
4
  * (`card`, `callout`, `divider`, `chart`, `table`, and the plain-markdown
5
5
  * table grid in `render.tsx`). Everything else in this engine wraps prose
6
- * through Ink's own layout (`ink-string.ts`'s doc comment and AGENTS.md's
7
- * batch-10 brief: "Drop wrap/pad/columns/frame/rule: Ink's layout replaces
8
- * them").
6
+ * through Ink's own layout (`ink-string.ts`'s doc comment): Ink's layout replaces
7
+ * wrap, pad, columns, frame and rule.
9
8
  *
10
9
  * A self-drawing component cannot lean on Ink for this: the string it builds
11
10
  * (a box-drawing frame, a sparkline, a table grid) is a fixed block of
@@ -13,9 +12,8 @@
13
12
  * `<Text>` renders it verbatim rather than reflowing pre-drawn glyphs. This
14
13
  * module is therefore kept as a small, PRIVATE (not exported from
15
14
  * `src/index.ts`) implementation detail of those few components, replacing
16
- * the old public `measure.ts`/`box.ts` modules the batch-10 brief has this
17
- * engine delete. The width-measurement approximation is unchanged from the
18
- * old `measure.ts`: Latin/CJK/emoji/combining-mark ranges, not a full
15
+ * the old public `measure.ts`/`box.ts` modules. The width-measurement
16
+ * approximation covers Latin/CJK/emoji/combining-mark ranges, not a full
19
17
  * Unicode grapheme-segmentation table (see the doc comment below for the one
20
18
  * documented limitation).
21
19
  */
package/dist/text-grid.js CHANGED
@@ -3,9 +3,8 @@
3
3
  * handful of STANDARD COMPONENTS that draw their own fixed-width glyphs
4
4
  * (`card`, `callout`, `divider`, `chart`, `table`, and the plain-markdown
5
5
  * table grid in `render.tsx`). Everything else in this engine wraps prose
6
- * through Ink's own layout (`ink-string.ts`'s doc comment and AGENTS.md's
7
- * batch-10 brief: "Drop wrap/pad/columns/frame/rule: Ink's layout replaces
8
- * them").
6
+ * through Ink's own layout (`ink-string.ts`'s doc comment): Ink's layout replaces
7
+ * wrap, pad, columns, frame and rule.
9
8
  *
10
9
  * A self-drawing component cannot lean on Ink for this: the string it builds
11
10
  * (a box-drawing frame, a sparkline, a table grid) is a fixed block of
@@ -13,9 +12,8 @@
13
12
  * `<Text>` renders it verbatim rather than reflowing pre-drawn glyphs. This
14
13
  * module is therefore kept as a small, PRIVATE (not exported from
15
14
  * `src/index.ts`) implementation detail of those few components, replacing
16
- * the old public `measure.ts`/`box.ts` modules the batch-10 brief has this
17
- * engine delete. The width-measurement approximation is unchanged from the
18
- * old `measure.ts`: Latin/CJK/emoji/combining-mark ranges, not a full
15
+ * the old public `measure.ts`/`box.ts` modules. The width-measurement
16
+ * approximation covers Latin/CJK/emoji/combining-mark ranges, not a full
19
17
  * Unicode grapheme-segmentation table (see the doc comment below for the one
20
18
  * documented limitation).
21
19
  */
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * `@markii/ansi`'s own structural view of `@markii/runtime`'s value-store
3
3
  * contract. This package's dependency list is deliberately minimal (exactly
4
- * `@markii/core` and `@markii/stdlib`; see AGENTS.md and the batch brief),
4
+ * `@markii/core` and `@markii/stdlib`; see AGENTS.md),
5
5
  * so it never imports `@markii/runtime` at runtime: declaring the shapes it
6
6
  * needs here, rather than importing them, keeps a terminal render usable in
7
7
  * a context that never pulled in the runtime package at all (a CLI that
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * `@markii/ansi`'s own structural view of `@markii/runtime`'s value-store
3
3
  * contract. This package's dependency list is deliberately minimal (exactly
4
- * `@markii/core` and `@markii/stdlib`; see AGENTS.md and the batch brief),
4
+ * `@markii/core` and `@markii/stdlib`; see AGENTS.md),
5
5
  * so it never imports `@markii/runtime` at runtime: declaring the shapes it
6
6
  * needs here, rather than importing them, keeps a terminal render usable in
7
7
  * a context that never pulled in the runtime package at all (a CLI that
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@markii/ansi",
3
- "version": "0.17.0-next.2",
3
+ "version": "0.17.0-next.4",
4
4
  "description": "The terminal renderer for Markii (.mk.md): a registry-driven hast-to-terminal engine built on Ink. Renders a note once as a string with optional color, for a pipe or a log, or as a live Ink tree a host can mount.",
5
5
  "keywords": [
6
6
  "markdown",
@@ -51,15 +51,15 @@
51
51
  "regenerate:fixtures": "npm run build:dist && node scripts/regenerate-ansi-fixtures.ts"
52
52
  },
53
53
  "dependencies": {
54
- "@markii/core": "^0.17.0-next.2",
55
- "@markii/pack": "^0.17.0-next.2",
56
- "@markii/stdlib": "^0.17.0-next.2",
54
+ "@markii/core": "^0.17.0-next.4",
55
+ "@markii/pack": "^0.17.0-next.4",
56
+ "@markii/stdlib": "^0.17.0-next.4",
57
57
  "ink": "^7.1.1",
58
58
  "react": "^19.2.0"
59
59
  },
60
60
  "devDependencies": {
61
61
  "@types/hast": "^3.0.4",
62
- "@markii/runtime": "^0.17.0-next.2",
62
+ "@markii/runtime": "^0.17.0-next.4",
63
63
  "@types/react": "^19.2.0"
64
64
  }
65
65
  }