@ai-matrx/rich-content 0.2.46 → 0.2.48

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,20 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.2.48
4
+
5
+ - The copy commands and the document menu strip thinking with THE rule
6
+ (`stripThinking`, `@ai-matrx/content-ir/source`) instead of a static import of
7
+ `@ai-matrx/print/markdown`, which put KaTeX and an HTML parser on every first screen. The
8
+ formatted-HTML copy still loads print at click time.
9
+
10
+ ## 0.2.47
11
+
12
+ - The JSON value types and guards (`isJsonObject`, `isJsonArray`, `isJsonPrimitive`, `Json*`)
13
+ in `./utils/json` are re-exported from their one home, `@ai-matrx/kit/json-format`; only
14
+ `toJsonRecord` stays rich-content's own (architecture step 3).
15
+
16
+ Consumer action: none — `@ai-matrx/rich-content/utils/json` keeps every name.
17
+
3
18
  ## 0.2.46
4
19
 
5
20
  - **A text field's "…" menu reads its text aloud.** `RegistryActionList` has no bar above it,
@@ -1,3 +1,3 @@
1
- export { removeThinkingContent } from "@ai-matrx/print/markdown";
1
+ export { stripThinking as removeThinkingContent } from "@ai-matrx/content-ir/source";
2
2
  /** The formatted HTML for a copy (loaded at click time), or `undefined` when this host writes plain text only. */
3
3
  export declare function formattedCopyHtml(markdown: string): Promise<string> | undefined;
@@ -1,8 +1,8 @@
1
- import { removeThinkingContent } from "@ai-matrx/print/markdown";
1
+ import { stripThinking } from "@ai-matrx/content-ir/source";
2
2
  function formattedCopyHtml(markdown) {
3
3
  return import("@ai-matrx/print/markdown").then(({ markdownToHtml }) => markdownToHtml(markdown));
4
4
  }
5
5
  export {
6
6
  formattedCopyHtml,
7
- removeThinkingContent
7
+ stripThinking as removeThinkingContent
8
8
  };
@@ -111,7 +111,7 @@ declare const JSON_BLOCK_PATTERNS: {
111
111
  };
112
112
  readonly decision_tree: {
113
113
  readonly rootKey: "decision_tree";
114
- readonly validate: (parsed: unknown) => import("../../../../utils/json.js").JsonValue | undefined;
114
+ readonly validate: (parsed: unknown) => import("@ai-matrx/kit/json-format").JsonValue | undefined;
115
115
  };
116
116
  readonly comparison_table: {
117
117
  readonly rootKey: "comparison";
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
  import { ConfirmDialog as DesignSystemConfirmDialog } from "@ai-matrx/design-system";
3
- import { createElement } from "react";
3
+ import { createElement, lazy, Suspense } from "react";
4
4
  import { GenericStructuredView } from "@ai-matrx/content-ir-react";
5
5
  import { announceBareHost, BARE_HOST_ATTR, hostCapability } from "./registry.js";
6
6
  function binding(key) {
@@ -47,7 +47,17 @@ const getArtifactDef = fn("getArtifactDef", nothing, "no artifact types are know
47
47
  const resolveArtifactDef = fn("resolveArtifactDef", nothing, "no artifact types are known");
48
48
  const hasArtifactRenderer = fn("hasArtifactRenderer", () => false, "no artifact renderers are known");
49
49
  const ArtifactRender = component("ArtifactRender", ValueFloor, "artifacts render through the generic structured view");
50
- const CodeBlockWithContextAttach = component("CodeBlockWithContextAttach", null, "code blocks render without the attach-to-context action");
50
+ const LazyCodeBlock = lazy(() => import("../code-block/CodeBlock.js"));
51
+ function PlainCodeBlock(props) {
52
+ const { conversationId: _c, messageId: _m, existingArtifactId: _a, extraMenuItems: _e, ...rest } = props;
53
+ const code = typeof rest.code === "string" ? rest.code : "";
54
+ return createElement(
55
+ Suspense,
56
+ { fallback: createElement("pre", { ...BARE_HOST_ATTR, "data-code-block-loading": "" }, createElement("code", null, code)) },
57
+ createElement(LazyCodeBlock, rest)
58
+ );
59
+ }
60
+ const CodeBlockWithContextAttach = component("CodeBlockWithContextAttach", PlainCodeBlock, "code blocks render without the attach-to-context action");
51
61
  const useOpenConvertToShapeWindow = fn("useOpenConvertToShapeWindow", nothing, "no convert-to-shape window");
52
62
  const useOpenSmartCodeEditorWindow = fn("useOpenSmartCodeEditorWindow", nothing, "no code editor window");
53
63
  const useOpenTableViewerWindow = fn("useOpenTableViewerWindow", nothing, "no table viewer window");
@@ -5,7 +5,7 @@ import * as React from "react";
5
5
  import { ContentTransferMenu } from "@ai-matrx/alchemy/react/workspace";
6
6
  import { unwrapKindEnvelopes } from "@ai-matrx/content-ir/source";
7
7
  import { directSource } from "@ai-matrx/alchemy/operate";
8
- import { removeThinkingContent } from "@ai-matrx/print/markdown";
8
+ import { stripThinking as removeThinkingContent } from "@ai-matrx/content-ir/source";
9
9
  function AlchemyDocumentMenu({
10
10
  getCtx,
11
11
  sourceId,
@@ -35,21 +35,9 @@
35
35
  * open / loosely-shaped JSON the standards doc calls "just an object" — they
36
36
  * give it an honest name so nobody reaches for `any` or a whole-row cast.
37
37
  */
38
- export type JsonPrimitive = string | number | boolean | null;
39
- /**
40
- * A JSON object. Values are `JsonValue | undefined` so optional keys read
41
- * cleanly (mirrors Supabase's original generated `Json` object member).
42
- */
43
- export interface JsonObject {
44
- [key: string]: JsonValue | undefined;
45
- }
46
- export type JsonArray = JsonValue[];
47
- export type JsonValue = JsonPrimitive | JsonObject | JsonArray;
48
- /**
49
- * Narrow an `unknown` (e.g. a bare JSONB column) to a `JsonObject`.
50
- * Plain object only — arrays and `null` return false.
51
- */
52
- export declare function isJsonObject(value: unknown): value is JsonObject;
38
+ import type { JsonObject, JsonValue } from "@ai-matrx/kit/json-format";
39
+ export { isJsonArray, isJsonObject, isJsonPrimitive } from "@ai-matrx/kit/json-format";
40
+ export type { JsonArray, JsonObject, JsonPrimitive, JsonValue } from "@ai-matrx/kit/json-format";
53
41
  /**
54
42
  * Convert a `JsonObject` (values `JsonValue | undefined`) into the strict
55
43
  * `Record<string, JsonValue>` shape generated API request bodies demand,
@@ -57,7 +45,3 @@ export declare function isJsonObject(value: unknown): value is JsonObject;
57
45
  * only appears via optional-key reads). Cast-free by construction.
58
46
  */
59
47
  export declare function toJsonRecord(obj: JsonObject): Record<string, JsonValue>;
60
- /** Narrow an `unknown` to a `JsonArray`. */
61
- export declare function isJsonArray(value: unknown): value is JsonArray;
62
- /** Narrow an `unknown` to a JSON primitive (string | number | boolean | null). */
63
- export declare function isJsonPrimitive(value: unknown): value is JsonPrimitive;
@@ -1,6 +1,4 @@
1
- function isJsonObject(value) {
2
- return typeof value === "object" && value !== null && !Array.isArray(value);
3
- }
1
+ import { isJsonArray, isJsonObject, isJsonPrimitive } from "@ai-matrx/kit/json-format";
4
2
  function toJsonRecord(obj) {
5
3
  const out = {};
6
4
  for (const [key, value] of Object.entries(obj)) {
@@ -8,12 +6,6 @@ function toJsonRecord(obj) {
8
6
  }
9
7
  return out;
10
8
  }
11
- function isJsonArray(value) {
12
- return Array.isArray(value);
13
- }
14
- function isJsonPrimitive(value) {
15
- return value === null || typeof value === "string" || typeof value === "number" || typeof value === "boolean";
16
- }
17
9
  export {
18
10
  isJsonArray,
19
11
  isJsonObject,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ai-matrx/rich-content",
3
- "version": "0.2.46",
3
+ "version": "0.2.48",
4
4
  "description": "The AI Matrx formatted-text engine: the one markdown renderer, streaming markdown, the block splitter and renderer, the generic blocks, <RichContent> levels, the rich-document action registry and menus, copy, and the selection toolbar — as portable React.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -130,21 +130,21 @@
130
130
  "unist-util-visit": "^5.1.0",
131
131
  "unist-util-visit-parents": "^6.0.2",
132
132
  "yaml": "^2.9.1",
133
- "@ai-matrx/agents": "latest",
134
- "@ai-matrx/alchemy": "latest",
135
- "@ai-matrx/canvas": "latest",
136
133
  "@ai-matrx/content-ir": "latest",
134
+ "@ai-matrx/alchemy": "latest",
137
135
  "@ai-matrx/content-ir-react": "latest",
136
+ "@ai-matrx/agents": "latest",
138
137
  "@ai-matrx/data": "latest",
139
- "@ai-matrx/design-system": "latest",
138
+ "@ai-matrx/canvas": "latest",
140
139
  "@ai-matrx/diff": "latest",
141
140
  "@ai-matrx/icons": "latest",
142
141
  "@ai-matrx/kit": "latest",
143
- "@ai-matrx/media": "latest",
144
- "@ai-matrx/print": "latest",
145
142
  "@ai-matrx/records": "latest",
143
+ "@ai-matrx/print": "latest",
146
144
  "@ai-matrx/records-ui": "latest",
147
- "@ai-matrx/tap-target": "latest"
145
+ "@ai-matrx/media": "latest",
146
+ "@ai-matrx/tap-target": "latest",
147
+ "@ai-matrx/design-system": "latest"
148
148
  },
149
149
  "peerDependencies": {
150
150
  "react": ">=19.0.0",