@opengeni/react 5.0.2-canary.0 → 5.0.4-canary.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/dist/{chunk-WRVKY242.js → chunk-SCZ6SUBW.js} +9 -5
- package/dist/chunk-SCZ6SUBW.js.map +1 -0
- package/dist/components/markdown-table-layout.d.ts +4 -1
- package/dist/index.js +1 -1
- package/dist/{markdown-table-layout-3Z3AWBY7.js → markdown-table-layout-PFUEZ2U4.js} +7 -4
- package/dist/{markdown-table-layout-3Z3AWBY7.js.map → markdown-table-layout-PFUEZ2U4.js.map} +1 -1
- package/dist/session-ui.js +1 -1
- package/package.json +3 -3
- package/src/components/markdown-table-layout.ts +6 -3
- package/src/components/markdown.tsx +11 -3
- package/dist/chunk-WRVKY242.js.map +0 -1
|
@@ -6,4 +6,7 @@ export declare function markdownTableWidth({ columnLeft, columnWidth, contentLef
|
|
|
6
6
|
preferredWidth: number;
|
|
7
7
|
}): number;
|
|
8
8
|
/** Loaded only for assistant tables. Keep prose and nested scroll owners intact. */
|
|
9
|
-
export declare function observeMarkdownTableLayout(wrapper: HTMLDivElement, table: HTMLTableElement):
|
|
9
|
+
export declare function observeMarkdownTableLayout(wrapper: HTMLDivElement, table: HTMLTableElement): {
|
|
10
|
+
measure: () => void;
|
|
11
|
+
disconnect: () => void;
|
|
12
|
+
} | undefined;
|
package/dist/index.js
CHANGED
|
@@ -110,7 +110,7 @@ import {
|
|
|
110
110
|
useWorkspaceModelCatalog,
|
|
111
111
|
userMessageLikelyNeedsDisclosure,
|
|
112
112
|
v4aToGitFileDiff
|
|
113
|
-
} from "./chunk-
|
|
113
|
+
} from "./chunk-SCZ6SUBW.js";
|
|
114
114
|
import "./chunk-YBM6CQRU.js";
|
|
115
115
|
import "./chunk-5M6VTFJ5.js";
|
|
116
116
|
import "./chunk-ZYRGEKWS.js";
|
|
@@ -59,13 +59,16 @@ function observeMarkdownTableLayout(wrapper, table) {
|
|
|
59
59
|
observer?.observe(scroller);
|
|
60
60
|
observer?.observe(body);
|
|
61
61
|
observer?.observe(table);
|
|
62
|
-
return
|
|
63
|
-
|
|
64
|
-
|
|
62
|
+
return {
|
|
63
|
+
measure,
|
|
64
|
+
disconnect: () => {
|
|
65
|
+
observer?.disconnect();
|
|
66
|
+
reset();
|
|
67
|
+
}
|
|
65
68
|
};
|
|
66
69
|
}
|
|
67
70
|
export {
|
|
68
71
|
markdownTableWidth,
|
|
69
72
|
observeMarkdownTableLayout
|
|
70
73
|
};
|
|
71
|
-
//# sourceMappingURL=markdown-table-layout-
|
|
74
|
+
//# sourceMappingURL=markdown-table-layout-PFUEZ2U4.js.map
|
package/dist/{markdown-table-layout-3Z3AWBY7.js.map → markdown-table-layout-PFUEZ2U4.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/markdown-table-layout.ts"],"sourcesContent":["export function markdownTableWidth({\n columnLeft,\n columnWidth,\n contentLeft,\n contentRight,\n preferredWidth,\n}: {\n columnLeft: number;\n columnWidth: number;\n contentLeft: number;\n contentRight: number;\n preferredWidth: number;\n}): number {\n const center = columnLeft + columnWidth / 2;\n const available = 2 * Math.min(center - contentLeft, contentRight - center);\n return Math.max(columnWidth, Math.min(preferredWidth, available));\n}\n\n/** Loaded only for assistant tables. Keep prose and nested scroll owners intact. */\nexport function observeMarkdownTableLayout(wrapper: HTMLDivElement, table: HTMLTableElement) {\n const body = wrapper.parentElement;\n const scroller = body\n ?.closest(\"[data-og-wide-table-message]\")\n ?.closest<HTMLElement>(\"[data-og-timeline-scroller]\");\n if (!body?.classList.contains(\"og-markdown-body\") || !scroller) return;\n\n let width: number | null = null;\n const reset = () => {\n width = null;\n wrapper.style.width = \"\";\n wrapper.style.maxWidth = \"\";\n wrapper.style.marginInline = \"\";\n };\n const measure = () => {\n // Intermediate clipped/scrollable surfaces own their own content bounds.\n for (\n let ancestor: HTMLElement | null = body;\n ancestor && ancestor !== scroller;\n ancestor = ancestor.parentElement\n ) {\n if (getComputedStyle(ancestor).overflowX !== \"visible\") {\n reset();\n return;\n }\n }\n const column = body.getBoundingClientRect();\n const panel = scroller.getBoundingClientRect();\n const panelStyle = getComputedStyle(scroller);\n const left = panel.left + scroller.clientLeft + parseFloat(panelStyle.paddingLeft);\n const right =\n panel.left + scroller.clientLeft + scroller.clientWidth - parseFloat(panelStyle.paddingRight);\n\n // Measure the original table, preserving its wrapping and TSV copy DOM.\n const previousWidth = table.style.width;\n let preferred: number;\n try {\n table.style.width = \"max-content\";\n preferred = table.getBoundingClientRect().width;\n } finally {\n table.style.width = previousWidth;\n }\n const next = markdownTableWidth({\n columnLeft: column.left,\n columnWidth: column.width,\n contentLeft: left,\n contentRight: right,\n preferredWidth: preferred,\n });\n if (width !== null && Math.abs(width - next) < 0.5) return;\n width = next;\n wrapper.style.width = `${width}px`;\n wrapper.style.maxWidth = \"none\";\n wrapper.style.marginInline = `calc((100% - ${width}px) / 2)`;\n };\n\n measure();\n const observer = typeof ResizeObserver === \"undefined\" ? undefined : new ResizeObserver(measure);\n observer?.observe(scroller);\n observer?.observe(body);\n observer?.observe(table);\n return () => {\n
|
|
1
|
+
{"version":3,"sources":["../src/components/markdown-table-layout.ts"],"sourcesContent":["export function markdownTableWidth({\n columnLeft,\n columnWidth,\n contentLeft,\n contentRight,\n preferredWidth,\n}: {\n columnLeft: number;\n columnWidth: number;\n contentLeft: number;\n contentRight: number;\n preferredWidth: number;\n}): number {\n const center = columnLeft + columnWidth / 2;\n const available = 2 * Math.min(center - contentLeft, contentRight - center);\n return Math.max(columnWidth, Math.min(preferredWidth, available));\n}\n\n/** Loaded only for assistant tables. Keep prose and nested scroll owners intact. */\nexport function observeMarkdownTableLayout(wrapper: HTMLDivElement, table: HTMLTableElement) {\n const body = wrapper.parentElement;\n const scroller = body\n ?.closest(\"[data-og-wide-table-message]\")\n ?.closest<HTMLElement>(\"[data-og-timeline-scroller]\");\n if (!body?.classList.contains(\"og-markdown-body\") || !scroller) return;\n\n let width: number | null = null;\n const reset = () => {\n width = null;\n wrapper.style.width = \"\";\n wrapper.style.maxWidth = \"\";\n wrapper.style.marginInline = \"\";\n };\n const measure = () => {\n // Intermediate clipped/scrollable surfaces own their own content bounds.\n for (\n let ancestor: HTMLElement | null = body;\n ancestor && ancestor !== scroller;\n ancestor = ancestor.parentElement\n ) {\n if (getComputedStyle(ancestor).overflowX !== \"visible\") {\n reset();\n return;\n }\n }\n const column = body.getBoundingClientRect();\n const panel = scroller.getBoundingClientRect();\n const panelStyle = getComputedStyle(scroller);\n const left = panel.left + scroller.clientLeft + parseFloat(panelStyle.paddingLeft);\n const right =\n panel.left + scroller.clientLeft + scroller.clientWidth - parseFloat(panelStyle.paddingRight);\n\n // Measure the original table, preserving its wrapping and TSV copy DOM.\n const previousWidth = table.style.width;\n let preferred: number;\n try {\n table.style.width = \"max-content\";\n preferred = table.getBoundingClientRect().width;\n } finally {\n table.style.width = previousWidth;\n }\n const next = markdownTableWidth({\n columnLeft: column.left,\n columnWidth: column.width,\n contentLeft: left,\n contentRight: right,\n preferredWidth: preferred,\n });\n if (width !== null && Math.abs(width - next) < 0.5) return;\n width = next;\n wrapper.style.width = `${width}px`;\n wrapper.style.maxWidth = \"none\";\n wrapper.style.marginInline = `calc((100% - ${width}px) / 2)`;\n };\n\n measure();\n const observer = typeof ResizeObserver === \"undefined\" ? undefined : new ResizeObserver(measure);\n observer?.observe(scroller);\n observer?.observe(body);\n observer?.observe(table);\n return {\n measure,\n disconnect: () => {\n observer?.disconnect();\n reset();\n },\n };\n}\n"],"mappings":";AAAO,SAAS,mBAAmB;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAMW;AACT,QAAM,SAAS,aAAa,cAAc;AAC1C,QAAM,YAAY,IAAI,KAAK,IAAI,SAAS,aAAa,eAAe,MAAM;AAC1E,SAAO,KAAK,IAAI,aAAa,KAAK,IAAI,gBAAgB,SAAS,CAAC;AAClE;AAGO,SAAS,2BAA2B,SAAyB,OAAyB;AAC3F,QAAM,OAAO,QAAQ;AACrB,QAAM,WAAW,MACb,QAAQ,8BAA8B,GACtC,QAAqB,6BAA6B;AACtD,MAAI,CAAC,MAAM,UAAU,SAAS,kBAAkB,KAAK,CAAC,SAAU;AAEhE,MAAI,QAAuB;AAC3B,QAAM,QAAQ,MAAM;AAClB,YAAQ;AACR,YAAQ,MAAM,QAAQ;AACtB,YAAQ,MAAM,WAAW;AACzB,YAAQ,MAAM,eAAe;AAAA,EAC/B;AACA,QAAM,UAAU,MAAM;AAEpB,aACM,WAA+B,MACnC,YAAY,aAAa,UACzB,WAAW,SAAS,eACpB;AACA,UAAI,iBAAiB,QAAQ,EAAE,cAAc,WAAW;AACtD,cAAM;AACN;AAAA,MACF;AAAA,IACF;AACA,UAAM,SAAS,KAAK,sBAAsB;AAC1C,UAAM,QAAQ,SAAS,sBAAsB;AAC7C,UAAM,aAAa,iBAAiB,QAAQ;AAC5C,UAAM,OAAO,MAAM,OAAO,SAAS,aAAa,WAAW,WAAW,WAAW;AACjF,UAAM,QACJ,MAAM,OAAO,SAAS,aAAa,SAAS,cAAc,WAAW,WAAW,YAAY;AAG9F,UAAM,gBAAgB,MAAM,MAAM;AAClC,QAAI;AACJ,QAAI;AACF,YAAM,MAAM,QAAQ;AACpB,kBAAY,MAAM,sBAAsB,EAAE;AAAA,IAC5C,UAAE;AACA,YAAM,MAAM,QAAQ;AAAA,IACtB;AACA,UAAM,OAAO,mBAAmB;AAAA,MAC9B,YAAY,OAAO;AAAA,MACnB,aAAa,OAAO;AAAA,MACpB,aAAa;AAAA,MACb,cAAc;AAAA,MACd,gBAAgB;AAAA,IAClB,CAAC;AACD,QAAI,UAAU,QAAQ,KAAK,IAAI,QAAQ,IAAI,IAAI,IAAK;AACpD,YAAQ;AACR,YAAQ,MAAM,QAAQ,GAAG,KAAK;AAC9B,YAAQ,MAAM,WAAW;AACzB,YAAQ,MAAM,eAAe,gBAAgB,KAAK;AAAA,EACpD;AAEA,UAAQ;AACR,QAAM,WAAW,OAAO,mBAAmB,cAAc,SAAY,IAAI,eAAe,OAAO;AAC/F,YAAU,QAAQ,QAAQ;AAC1B,YAAU,QAAQ,IAAI;AACtB,YAAU,QAAQ,KAAK;AACvB,SAAO;AAAA,IACL;AAAA,IACA,YAAY,MAAM;AAChB,gBAAU,WAAW;AACrB,YAAM;AAAA,IACR;AAAA,EACF;AACF;","names":[]}
|
package/dist/session-ui.js
CHANGED
|
@@ -14,7 +14,7 @@ import {
|
|
|
14
14
|
sessionChromeGoalPillLabel,
|
|
15
15
|
sessionChromeGoalPillState,
|
|
16
16
|
userMessageLikelyNeedsDisclosure
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-SCZ6SUBW.js";
|
|
18
18
|
import "./chunk-YBM6CQRU.js";
|
|
19
19
|
import "./chunk-5M6VTFJ5.js";
|
|
20
20
|
import "./chunk-ZYRGEKWS.js";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@opengeni/react",
|
|
3
|
-
"version": "5.0.
|
|
3
|
+
"version": "5.0.4-canary.0",
|
|
4
4
|
"description": "React hooks and styled components for OpenGeni: live session streaming, chat composer, message timeline, session status, and fleet views — token-themed (CSS variables), dark-first, built on Tailwind v4 + Radix + Motion.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"repository": {
|
|
@@ -133,8 +133,8 @@
|
|
|
133
133
|
"@dnd-kit/utilities": "3.2.2",
|
|
134
134
|
"@fontsource-variable/noto-sans-arabic": "5.2.10",
|
|
135
135
|
"@fontsource-variable/noto-sans-jp": "5.2.10",
|
|
136
|
-
"@opengeni/connect": "^0.2.0-canary.
|
|
137
|
-
"@opengeni/sdk": "^5.0.
|
|
136
|
+
"@opengeni/connect": "^0.2.0-canary.1",
|
|
137
|
+
"@opengeni/sdk": "^5.0.3-canary.0",
|
|
138
138
|
"clsx": "^2.1.1",
|
|
139
139
|
"dequal": "2.0.3",
|
|
140
140
|
"lucide-react": "^1.8.0",
|
|
@@ -78,8 +78,11 @@ export function observeMarkdownTableLayout(wrapper: HTMLDivElement, table: HTMLT
|
|
|
78
78
|
observer?.observe(scroller);
|
|
79
79
|
observer?.observe(body);
|
|
80
80
|
observer?.observe(table);
|
|
81
|
-
return
|
|
82
|
-
|
|
83
|
-
|
|
81
|
+
return {
|
|
82
|
+
measure,
|
|
83
|
+
disconnect: () => {
|
|
84
|
+
observer?.disconnect();
|
|
85
|
+
reset();
|
|
86
|
+
},
|
|
84
87
|
};
|
|
85
88
|
}
|
|
@@ -21,6 +21,7 @@ import { tableElementToTsv } from "../lib/clipboard";
|
|
|
21
21
|
import { prefersReducedMotion } from "../lib/motion";
|
|
22
22
|
import { MOTION_INSPECT_SCALE } from "../lib/motion-inspect";
|
|
23
23
|
import { CopyButton } from "./copy-button";
|
|
24
|
+
import type { observeMarkdownTableLayout } from "./markdown-table-layout";
|
|
24
25
|
import { softenStreamingMarkdown } from "./soften-streaming-markdown";
|
|
25
26
|
import { createStreamReveal, rehypeStreamReveal, type StreamReveal } from "./stream-reveal";
|
|
26
27
|
import { TooltipProvider } from "./tooltip";
|
|
@@ -413,22 +414,29 @@ function MarkdownCodeBlock({ children }: { children?: ReactNode }) {
|
|
|
413
414
|
function MarkdownTable({ children, className, ...props }: ComponentPropsWithoutRef<"table">) {
|
|
414
415
|
const wrapperRef = useRef<HTMLDivElement>(null);
|
|
415
416
|
const tableRef = useRef<HTMLTableElement>(null);
|
|
417
|
+
const layoutRef = useRef<ReturnType<typeof observeMarkdownTableLayout>>(undefined);
|
|
416
418
|
useEffect(() => {
|
|
417
419
|
const wrapper = wrapperRef.current;
|
|
418
420
|
const table = tableRef.current;
|
|
419
421
|
if (!wrapper?.closest("[data-og-wide-table-message]") || !table) return;
|
|
420
422
|
let disposed = false;
|
|
421
|
-
let cleanup: (() => void) | undefined;
|
|
422
423
|
// Ordinary tables remain usable even if this optional layout chunk fails.
|
|
423
424
|
void import("./markdown-table-layout")
|
|
424
425
|
.then(({ observeMarkdownTableLayout }) => {
|
|
425
|
-
if (!disposed)
|
|
426
|
+
if (!disposed) layoutRef.current = observeMarkdownTableLayout(wrapper, table);
|
|
426
427
|
})
|
|
427
428
|
.catch(() => {});
|
|
428
429
|
return () => {
|
|
429
430
|
disposed = true;
|
|
430
|
-
|
|
431
|
+
layoutRef.current?.disconnect();
|
|
432
|
+
layoutRef.current = undefined;
|
|
431
433
|
};
|
|
434
|
+
}, []);
|
|
435
|
+
// ReactMarkdown recreates table children even when only later prose changes.
|
|
436
|
+
// Remeasure genuine content changes without collapsing the expanded wrapper
|
|
437
|
+
// between cleanup and the asynchronous observer-module import on each update.
|
|
438
|
+
useEffect(() => {
|
|
439
|
+
layoutRef.current?.measure();
|
|
432
440
|
}, [children]);
|
|
433
441
|
return (
|
|
434
442
|
<div ref={wrapperRef} className="group/copy relative mt-3 max-w-full first:mt-0">
|