@ai-matrx/content-ir-react 0.22.0 → 0.24.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,48 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.24.0 — 2026-10-06
4
+
5
+ `KindActionButton` joins the kind kit: the one-click door from a kind component to a host Action.
6
+
7
+ - `KindActionButton` / `KindActionButtonProps` in `/kind-kit`. Wraps the component's `runAction(key, input)`
8
+ prop: busy state with no double fire, an optional inline `confirm` (one-sentence consequence + confirm
9
+ button, never `window.confirm`), a one-line inline error (<=60 chars, full text in `title`) on
10
+ `{ok:false}`, `onDone(result)` on ok, `compact` icon-only mode.
11
+
12
+ ### Consumer action
13
+
14
+ - Stored code imports it as `@/components/kind-kit/KindActionButton`: add that path to the host's stored
15
+ scope (`"@/components/kind-kit/KindActionButton": kindKit`) and to the gate lists (code-runtime >= 0.3.0).
16
+
17
+ ## 0.23.1 — 2026-10-06
18
+
19
+ - `KindKitCopyProps` is `MatrxCopyMenuProps` from `@ai-matrx/alchemy/react/workspace` (ALC-16); adds the
20
+ `@ai-matrx/alchemy` dependency.
21
+ - Consumer action: none.
22
+
23
+ ## 0.23.0 — 2026-10-06
24
+
25
+ The kind kit moves into the package (Applets AP-5): `@ai-matrx/content-ir-react/kind-kit`.
26
+
27
+ - Carries `SortableList`, `KindPanelGrid`, `KindPanel`, `KindHeaderBar`, `StreamingSkeleton`,
28
+ `useStreamingValue`, `streamList`, `streamText`, `KeywordChip`, `TagList` and the icon-slot
29
+ helper `renderKindKitIcon` — same props, markup and class names as the matrx-frontend copy.
30
+ - Host slots: `setKindKitHost({ CopyButtons?, ReadEmpty?, ReadStaleNotice? })` (state on
31
+ `globalThis`, `Symbol.for("ai-matrx.content-ir-react.kind-kit-host")`), `getKindKitHost`,
32
+ `resetKindKitHost`, and the defaults (`DefaultCopyButtons`, `DefaultReadEmpty`,
33
+ `DefaultReadStaleNotice`). Defaults: a plain "Copy" button; loading / "Could not load X."
34
+ with a retry / the empty state; a stale-rows notice with retry.
35
+ - New dependency `@ai-matrx/design-system`; glyphs are inlined SVGs (no icon library).
36
+ - Type tightening only (`exactOptionalPropertyTypes`): `KeywordChipProps` optional fields accept
37
+ `undefined`; `KindPanel` passes `disabled ?? false`.
38
+
39
+ ### Consumer action
40
+
41
+ - Hosts call `setKindKitHost` once at boot with their copy bar (`CopyButtons`) and read notices
42
+ (`ReadEmpty`, `ReadStaleNotice`).
43
+ - matrx-frontend: point the `@/components/kind-kit/*` scope entries at
44
+ `@ai-matrx/content-ir-react/kind-kit`, then delete `components/kind-kit/`.
45
+
3
46
  ## 0.22.0 — 2026-10-06
4
47
 
5
48
  Kind components call Actions (Applets AP-5, CONTRACTS §6/§7).
@@ -1,4 +1,4 @@
1
- import * as react from 'react';
1
+ import * as React from 'react';
2
2
  import { C as ComponentResolution, a as ContentIrErrorReporter } from './component-resolution.types-BQa2ik3i.cjs';
3
3
 
4
4
  /**
@@ -97,7 +97,7 @@ interface DbKindComponentRenderProps {
97
97
  uiOptions?: KindComponentUiOptions;
98
98
  }
99
99
  interface CompiledDbKindComponent {
100
- Component: react.ComponentType<DbKindComponentRenderProps>;
100
+ Component: React.ComponentType<DbKindComponentRenderProps>;
101
101
  /** Compiled `props_transform`, or null when the row declares none. */
102
102
  transform: ((data: unknown) => unknown) | null;
103
103
  }
@@ -147,7 +147,7 @@ type DbKindComponentCompiler = (args: {
147
147
  code: string;
148
148
  allowedImports: string[];
149
149
  }) => {
150
- Component: react.ComponentType<Record<string, unknown>> | null;
150
+ Component: React.ComponentType<Record<string, unknown>> | null;
151
151
  error: string | null;
152
152
  };
153
153
  interface DbKindComponentCachePorts {
@@ -234,8 +234,8 @@ interface DbKindComponentErrorBoundaryProps {
234
234
  kind: string;
235
235
  /** The resolved component's `updated_at`; a change means a new version. */
236
236
  resetSignal: string | null;
237
- fallback: react.ReactNode;
238
- children: react.ReactNode;
237
+ fallback: React.ReactNode;
238
+ children: React.ReactNode;
239
239
  /**
240
240
  * Where the catch lands. A host binds structured capture + incident filing
241
241
  * here; the default screams to the console. NOTE for hosts whose console
@@ -256,12 +256,12 @@ interface State {
256
256
  */
257
257
  signalAtLastRender: string | null;
258
258
  }
259
- declare class DbKindComponentErrorBoundary extends react.Component<DbKindComponentErrorBoundaryProps, State> {
259
+ declare class DbKindComponentErrorBoundary extends React.Component<DbKindComponentErrorBoundaryProps, State> {
260
260
  constructor(props: DbKindComponentErrorBoundaryProps);
261
261
  static getDerivedStateFromError(): Partial<State>;
262
262
  static getDerivedStateFromProps(props: DbKindComponentErrorBoundaryProps, state: State): State | null;
263
- componentDidCatch(error: Error, errorInfo: react.ErrorInfo): void;
264
- render(): react.ReactNode;
263
+ componentDidCatch(error: Error, errorInfo: React.ErrorInfo): void;
264
+ render(): React.ReactNode;
265
265
  }
266
266
 
267
267
  /**
@@ -1,4 +1,4 @@
1
- import * as react from 'react';
1
+ import * as React from 'react';
2
2
  import { C as ComponentResolution, a as ContentIrErrorReporter } from './component-resolution.types-BQa2ik3i.js';
3
3
 
4
4
  /**
@@ -97,7 +97,7 @@ interface DbKindComponentRenderProps {
97
97
  uiOptions?: KindComponentUiOptions;
98
98
  }
99
99
  interface CompiledDbKindComponent {
100
- Component: react.ComponentType<DbKindComponentRenderProps>;
100
+ Component: React.ComponentType<DbKindComponentRenderProps>;
101
101
  /** Compiled `props_transform`, or null when the row declares none. */
102
102
  transform: ((data: unknown) => unknown) | null;
103
103
  }
@@ -147,7 +147,7 @@ type DbKindComponentCompiler = (args: {
147
147
  code: string;
148
148
  allowedImports: string[];
149
149
  }) => {
150
- Component: react.ComponentType<Record<string, unknown>> | null;
150
+ Component: React.ComponentType<Record<string, unknown>> | null;
151
151
  error: string | null;
152
152
  };
153
153
  interface DbKindComponentCachePorts {
@@ -234,8 +234,8 @@ interface DbKindComponentErrorBoundaryProps {
234
234
  kind: string;
235
235
  /** The resolved component's `updated_at`; a change means a new version. */
236
236
  resetSignal: string | null;
237
- fallback: react.ReactNode;
238
- children: react.ReactNode;
237
+ fallback: React.ReactNode;
238
+ children: React.ReactNode;
239
239
  /**
240
240
  * Where the catch lands. A host binds structured capture + incident filing
241
241
  * here; the default screams to the console. NOTE for hosts whose console
@@ -256,12 +256,12 @@ interface State {
256
256
  */
257
257
  signalAtLastRender: string | null;
258
258
  }
259
- declare class DbKindComponentErrorBoundary extends react.Component<DbKindComponentErrorBoundaryProps, State> {
259
+ declare class DbKindComponentErrorBoundary extends React.Component<DbKindComponentErrorBoundaryProps, State> {
260
260
  constructor(props: DbKindComponentErrorBoundaryProps);
261
261
  static getDerivedStateFromError(): Partial<State>;
262
262
  static getDerivedStateFromProps(props: DbKindComponentErrorBoundaryProps, state: State): State | null;
263
- componentDidCatch(error: Error, errorInfo: react.ErrorInfo): void;
264
- render(): react.ReactNode;
263
+ componentDidCatch(error: Error, errorInfo: React.ErrorInfo): void;
264
+ render(): React.ReactNode;
265
265
  }
266
266
 
267
267
  /**
@@ -1,4 +1,4 @@
1
- import * as react from 'react';
1
+ import * as React from 'react';
2
2
  import { ReactNode } from 'react';
3
3
  import { DecodedDirective, DirectiveNounCatalog, DirectiveItemKindLookup } from '@ai-matrx/content-ir';
4
4
 
@@ -241,13 +241,13 @@ interface DirectiveScope {
241
241
  */
242
242
  declare function DirectiveScopeProvider({ conversationId, children, }: DirectiveScope & {
243
243
  children: ReactNode;
244
- }): react.JSX.Element;
244
+ }): React.JSX.Element;
245
245
  declare function useDirectiveScope(): DirectiveScope;
246
246
  interface DirectiveHostProviderProps {
247
247
  host: DirectiveHost;
248
248
  children: ReactNode;
249
249
  }
250
- declare function DirectiveHostProvider({ host, children }: DirectiveHostProviderProps): react.JSX.Element;
250
+ declare function DirectiveHostProvider({ host, children }: DirectiveHostProviderProps): React.JSX.Element;
251
251
  /**
252
252
  * The wired directive host. Unlike the render host this does NOT throw when
253
253
  * unwired: a directive still renders (named, itemised, copy-less, apply-less)
@@ -1,4 +1,4 @@
1
- import * as react from 'react';
1
+ import * as React from 'react';
2
2
  import { ReactNode } from 'react';
3
3
  import { DecodedDirective, DirectiveNounCatalog, DirectiveItemKindLookup } from '@ai-matrx/content-ir';
4
4
 
@@ -241,13 +241,13 @@ interface DirectiveScope {
241
241
  */
242
242
  declare function DirectiveScopeProvider({ conversationId, children, }: DirectiveScope & {
243
243
  children: ReactNode;
244
- }): react.JSX.Element;
244
+ }): React.JSX.Element;
245
245
  declare function useDirectiveScope(): DirectiveScope;
246
246
  interface DirectiveHostProviderProps {
247
247
  host: DirectiveHost;
248
248
  children: ReactNode;
249
249
  }
250
- declare function DirectiveHostProvider({ host, children }: DirectiveHostProviderProps): react.JSX.Element;
250
+ declare function DirectiveHostProvider({ host, children }: DirectiveHostProviderProps): React.JSX.Element;
251
251
  /**
252
252
  * The wired directive host. Unlike the render host this does NOT throw when
253
253
  * unwired: a directive still renders (named, itemised, copy-less, apply-less)
@@ -1,6 +1,6 @@
1
- import { D as DirectiveHost, a as DirectiveFailure, b as DirectiveFailureWords, c as DirectiveRecordRef } from './directive-host-CtFMuSZc.cjs';
2
- export { d as DirectiveApplyResult, e as DirectiveApplyState, f as DirectiveAskRequest, g as DirectiveCopyProps, h as DirectiveHostProvider, i as DirectiveHostProviderProps, j as DirectiveOpenItemOptions, k as DirectiveRecordProps, l as DirectiveScope, m as DirectiveScopeProvider, n as DirectiveShell, o as DirectiveValueRef, u as useDirectiveHost, p as useDirectiveScope } from './directive-host-CtFMuSZc.cjs';
3
- import * as react from 'react';
1
+ import { D as DirectiveHost, a as DirectiveFailure, b as DirectiveFailureWords, c as DirectiveRecordRef } from './directive-host-QjoZEeik.cjs';
2
+ export { d as DirectiveApplyResult, e as DirectiveApplyState, f as DirectiveAskRequest, g as DirectiveCopyProps, h as DirectiveHostProvider, i as DirectiveHostProviderProps, j as DirectiveOpenItemOptions, k as DirectiveRecordProps, l as DirectiveScope, m as DirectiveScopeProvider, n as DirectiveShell, o as DirectiveValueRef, u as useDirectiveHost, p as useDirectiveScope } from './directive-host-QjoZEeik.cjs';
3
+ import * as React from 'react';
4
4
  import { ComponentType } from 'react';
5
5
  import { DecodedDirective, DirectiveClass } from '@ai-matrx/content-ir';
6
6
 
@@ -75,7 +75,7 @@ interface ApplyDirectiveButtonProps {
75
75
  */
76
76
  nothingToChange?: boolean;
77
77
  }
78
- declare function ApplyDirectiveButton({ directive, label, itemCount, onApplied, onPhase, nothingToChange, }: ApplyDirectiveButtonProps): react.JSX.Element | null;
78
+ declare function ApplyDirectiveButton({ directive, label, itemCount, onApplied, onPhase, nothingToChange, }: ApplyDirectiveButtonProps): React.JSX.Element | null;
79
79
 
80
80
  /**
81
81
  * WHAT A DIRECTIVE ITEM WILL DO TO AN EXISTING RECORD — for the card, the
@@ -200,15 +200,15 @@ declare function directiveValueWord(host: Pick<DirectiveHost, "valueLabel">, nou
200
200
  declare function DirectiveChangeList({ changes, className, }: {
201
201
  changes: ItemChange[];
202
202
  className?: string;
203
- }): react.JSX.Element;
204
- declare function SideEffectDirectiveCard({ directive }: SideEffectDirectiveCardProps): react.JSX.Element;
203
+ }): React.JSX.Element;
204
+ declare function SideEffectDirectiveCard({ directive }: SideEffectDirectiveCardProps): React.JSX.Element;
205
205
 
206
206
  interface DirectiveFallbackCardProps {
207
207
  directive: DecodedDirective;
208
208
  /** Short, human explanation of why the rich renderer degraded. */
209
209
  reason?: string;
210
210
  }
211
- declare function DirectiveFallbackCard({ directive, reason }: DirectiveFallbackCardProps): react.JSX.Element;
211
+ declare function DirectiveFallbackCard({ directive, reason }: DirectiveFallbackCardProps): React.JSX.Element;
212
212
 
213
213
  /** The directive slug of a partial document, once its closing quote has arrived. */
214
214
  declare function provisionalDirectiveSlug(content: string): string | null;
@@ -222,7 +222,7 @@ interface DirectiveProvisionalCardProps {
222
222
  streaming: boolean;
223
223
  className?: string | undefined;
224
224
  }
225
- declare function DirectiveProvisionalCard({ content, streaming, className }: DirectiveProvisionalCardProps): react.JSX.Element;
225
+ declare function DirectiveProvisionalCard({ content, streaming, className }: DirectiveProvisionalCardProps): React.JSX.Element;
226
226
 
227
227
  interface DirectiveRenderProps {
228
228
  /** The fence body (JSON string) or an already-parsed shell / value. */
@@ -242,7 +242,7 @@ interface DirectiveRenderProps {
242
242
  */
243
243
  conversationId?: string | null;
244
244
  }
245
- declare function DirectiveRender({ conversationId, ...props }: DirectiveRenderProps): react.JSX.Element;
245
+ declare function DirectiveRender({ conversationId, ...props }: DirectiveRenderProps): React.JSX.Element;
246
246
 
247
247
  /**
248
248
  * THE WORDS A FAILED APPLY SHOWS A PERSON.
@@ -1,6 +1,6 @@
1
- import { D as DirectiveHost, a as DirectiveFailure, b as DirectiveFailureWords, c as DirectiveRecordRef } from './directive-host-CtFMuSZc.js';
2
- export { d as DirectiveApplyResult, e as DirectiveApplyState, f as DirectiveAskRequest, g as DirectiveCopyProps, h as DirectiveHostProvider, i as DirectiveHostProviderProps, j as DirectiveOpenItemOptions, k as DirectiveRecordProps, l as DirectiveScope, m as DirectiveScopeProvider, n as DirectiveShell, o as DirectiveValueRef, u as useDirectiveHost, p as useDirectiveScope } from './directive-host-CtFMuSZc.js';
3
- import * as react from 'react';
1
+ import { D as DirectiveHost, a as DirectiveFailure, b as DirectiveFailureWords, c as DirectiveRecordRef } from './directive-host-QjoZEeik.js';
2
+ export { d as DirectiveApplyResult, e as DirectiveApplyState, f as DirectiveAskRequest, g as DirectiveCopyProps, h as DirectiveHostProvider, i as DirectiveHostProviderProps, j as DirectiveOpenItemOptions, k as DirectiveRecordProps, l as DirectiveScope, m as DirectiveScopeProvider, n as DirectiveShell, o as DirectiveValueRef, u as useDirectiveHost, p as useDirectiveScope } from './directive-host-QjoZEeik.js';
3
+ import * as React from 'react';
4
4
  import { ComponentType } from 'react';
5
5
  import { DecodedDirective, DirectiveClass } from '@ai-matrx/content-ir';
6
6
 
@@ -75,7 +75,7 @@ interface ApplyDirectiveButtonProps {
75
75
  */
76
76
  nothingToChange?: boolean;
77
77
  }
78
- declare function ApplyDirectiveButton({ directive, label, itemCount, onApplied, onPhase, nothingToChange, }: ApplyDirectiveButtonProps): react.JSX.Element | null;
78
+ declare function ApplyDirectiveButton({ directive, label, itemCount, onApplied, onPhase, nothingToChange, }: ApplyDirectiveButtonProps): React.JSX.Element | null;
79
79
 
80
80
  /**
81
81
  * WHAT A DIRECTIVE ITEM WILL DO TO AN EXISTING RECORD — for the card, the
@@ -200,15 +200,15 @@ declare function directiveValueWord(host: Pick<DirectiveHost, "valueLabel">, nou
200
200
  declare function DirectiveChangeList({ changes, className, }: {
201
201
  changes: ItemChange[];
202
202
  className?: string;
203
- }): react.JSX.Element;
204
- declare function SideEffectDirectiveCard({ directive }: SideEffectDirectiveCardProps): react.JSX.Element;
203
+ }): React.JSX.Element;
204
+ declare function SideEffectDirectiveCard({ directive }: SideEffectDirectiveCardProps): React.JSX.Element;
205
205
 
206
206
  interface DirectiveFallbackCardProps {
207
207
  directive: DecodedDirective;
208
208
  /** Short, human explanation of why the rich renderer degraded. */
209
209
  reason?: string;
210
210
  }
211
- declare function DirectiveFallbackCard({ directive, reason }: DirectiveFallbackCardProps): react.JSX.Element;
211
+ declare function DirectiveFallbackCard({ directive, reason }: DirectiveFallbackCardProps): React.JSX.Element;
212
212
 
213
213
  /** The directive slug of a partial document, once its closing quote has arrived. */
214
214
  declare function provisionalDirectiveSlug(content: string): string | null;
@@ -222,7 +222,7 @@ interface DirectiveProvisionalCardProps {
222
222
  streaming: boolean;
223
223
  className?: string | undefined;
224
224
  }
225
- declare function DirectiveProvisionalCard({ content, streaming, className }: DirectiveProvisionalCardProps): react.JSX.Element;
225
+ declare function DirectiveProvisionalCard({ content, streaming, className }: DirectiveProvisionalCardProps): React.JSX.Element;
226
226
 
227
227
  interface DirectiveRenderProps {
228
228
  /** The fence body (JSON string) or an already-parsed shell / value. */
@@ -242,7 +242,7 @@ interface DirectiveRenderProps {
242
242
  */
243
243
  conversationId?: string | null;
244
244
  }
245
- declare function DirectiveRender({ conversationId, ...props }: DirectiveRenderProps): react.JSX.Element;
245
+ declare function DirectiveRender({ conversationId, ...props }: DirectiveRenderProps): React.JSX.Element;
246
246
 
247
247
  /**
248
248
  * THE WORDS A FAILED APPLY SHOWS A PERSON.
@@ -1,7 +1,7 @@
1
1
  import { ReactNode } from 'react';
2
2
  import { KindDefinition } from '@ai-matrx/content-ir';
3
3
  import { d as ComponentResolutionSource, a as ContentIrErrorReporter } from './component-resolution.types-BQa2ik3i.cjs';
4
- import { D as DirectiveHost } from './directive-host-CtFMuSZc.cjs';
4
+ import { D as DirectiveHost } from './directive-host-QjoZEeik.cjs';
5
5
 
6
6
  /**
7
7
  * THE HOST CONTRACT — everything this package refuses to decide.
@@ -1,7 +1,7 @@
1
1
  import { ReactNode } from 'react';
2
2
  import { KindDefinition } from '@ai-matrx/content-ir';
3
3
  import { d as ComponentResolutionSource, a as ContentIrErrorReporter } from './component-resolution.types-BQa2ik3i.js';
4
- import { D as DirectiveHost } from './directive-host-CtFMuSZc.js';
4
+ import { D as DirectiveHost } from './directive-host-QjoZEeik.js';
5
5
 
6
6
  /**
7
7
  * THE HOST CONTRACT — everything this package refuses to decide.
package/dist/host.d.cts CHANGED
@@ -1,16 +1,16 @@
1
1
  export { b as ContentIrErrorReport, a as ContentIrErrorReporter, c as consoleErrorReporter } from './component-resolution.types-BQa2ik3i.cjs';
2
- import { C as ContentIrHost, K as KindRouteEnv } from './host-types-mMFt5-hQ.cjs';
3
- export { a as ContentIrRenderSeams, I as IrRenderBlock, b as IrRoutableBlock, c as KindDefinitionSource, S as StructuredValueRenderProps, r as routeEnvOf } from './host-types-mMFt5-hQ.cjs';
4
- import * as react from 'react';
2
+ import { C as ContentIrHost, K as KindRouteEnv } from './host-types-B2Q8fiU8.cjs';
3
+ export { a as ContentIrRenderSeams, I as IrRenderBlock, b as IrRoutableBlock, c as KindDefinitionSource, S as StructuredValueRenderProps, r as routeEnvOf } from './host-types-B2Q8fiU8.cjs';
4
+ import * as React from 'react';
5
5
  import { ReactNode } from 'react';
6
6
  import '@ai-matrx/content-ir';
7
- import './directive-host-CtFMuSZc.cjs';
7
+ import './directive-host-QjoZEeik.cjs';
8
8
 
9
9
  interface ContentIrRenderProviderProps {
10
10
  host: ContentIrHost;
11
11
  children: ReactNode;
12
12
  }
13
- declare function ContentIrRenderProvider({ host, children, }: ContentIrRenderProviderProps): react.JSX.Element;
13
+ declare function ContentIrRenderProvider({ host, children, }: ContentIrRenderProviderProps): React.JSX.Element;
14
14
  /**
15
15
  * The wired host, or null. For the rare consumer that can legitimately run
16
16
  * without a provider because it was handed its sources explicitly (see
package/dist/host.d.ts CHANGED
@@ -1,16 +1,16 @@
1
1
  export { b as ContentIrErrorReport, a as ContentIrErrorReporter, c as consoleErrorReporter } from './component-resolution.types-BQa2ik3i.js';
2
- import { C as ContentIrHost, K as KindRouteEnv } from './host-types-CGcK8Nib.js';
3
- export { a as ContentIrRenderSeams, I as IrRenderBlock, b as IrRoutableBlock, c as KindDefinitionSource, S as StructuredValueRenderProps, r as routeEnvOf } from './host-types-CGcK8Nib.js';
4
- import * as react from 'react';
2
+ import { C as ContentIrHost, K as KindRouteEnv } from './host-types-DvZukz6J.js';
3
+ export { a as ContentIrRenderSeams, I as IrRenderBlock, b as IrRoutableBlock, c as KindDefinitionSource, S as StructuredValueRenderProps, r as routeEnvOf } from './host-types-DvZukz6J.js';
4
+ import * as React from 'react';
5
5
  import { ReactNode } from 'react';
6
6
  import '@ai-matrx/content-ir';
7
- import './directive-host-CtFMuSZc.js';
7
+ import './directive-host-QjoZEeik.js';
8
8
 
9
9
  interface ContentIrRenderProviderProps {
10
10
  host: ContentIrHost;
11
11
  children: ReactNode;
12
12
  }
13
- declare function ContentIrRenderProvider({ host, children, }: ContentIrRenderProviderProps): react.JSX.Element;
13
+ declare function ContentIrRenderProvider({ host, children, }: ContentIrRenderProviderProps): React.JSX.Element;
14
14
  /**
15
15
  * The wired host, or null. For the rare consumer that can legitimately run
16
16
  * without a provider because it was handed its sources explicitly (see