@opengeni/react 1.4.0 → 1.4.2
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/README.md +8 -0
- package/dist/accounts.js +2 -0
- package/dist/accounts.js.map +1 -1
- package/dist/artifacts-document.js +5 -4
- package/dist/artifacts-presentation.js +5 -4
- package/dist/artifacts-spreadsheet.js +4 -3
- package/dist/artifacts.js +14 -13
- package/dist/artifacts.js.map +1 -1
- package/dist/browser-viewer-WGJ43YGI.js +17 -0
- package/dist/chat-interactive-block-ZFHOKTMS.js +12 -0
- package/dist/{chunk-WEHMPOXK.js → chunk-2DDJ6YH6.js} +3 -1
- package/dist/{chunk-WEHMPOXK.js.map → chunk-2DDJ6YH6.js.map} +1 -1
- package/dist/{chunk-C5X5AJXK.js → chunk-2HVLQ26H.js} +5 -4
- package/dist/{chunk-C5X5AJXK.js.map → chunk-2HVLQ26H.js.map} +1 -1
- package/dist/{chunk-A4UJB2MM.js → chunk-32CGLXW2.js} +4 -3
- package/dist/{chunk-A4UJB2MM.js.map → chunk-32CGLXW2.js.map} +1 -1
- package/dist/{chunk-5CVXZA3Y.js → chunk-45NUOSXQ.js} +3 -2
- package/dist/{chunk-5CVXZA3Y.js.map → chunk-45NUOSXQ.js.map} +1 -1
- package/dist/{chunk-WUISZ3WU.js → chunk-53KJBGPZ.js} +5 -4
- package/dist/{chunk-WUISZ3WU.js.map → chunk-53KJBGPZ.js.map} +1 -1
- package/dist/{chunk-MBMPHOMA.js → chunk-55DXD22O.js} +3 -2
- package/dist/{chunk-MBMPHOMA.js.map → chunk-55DXD22O.js.map} +1 -1
- package/dist/{chunk-JT4JW7BC.js → chunk-5I4VRWBB.js} +3 -1
- package/dist/{chunk-JT4JW7BC.js.map → chunk-5I4VRWBB.js.map} +1 -1
- package/dist/{chunk-UK4TINKT.js → chunk-B27E3V37.js} +3 -1
- package/dist/{chunk-UK4TINKT.js.map → chunk-B27E3V37.js.map} +1 -1
- package/dist/{chunk-J6DBS4T3.js → chunk-BNKV5ZLF.js} +5 -4
- package/dist/{chunk-J6DBS4T3.js.map → chunk-BNKV5ZLF.js.map} +1 -1
- package/dist/{chunk-YM2DE7BQ.js → chunk-C5BF4L26.js} +13 -12
- package/dist/{chunk-YM2DE7BQ.js.map → chunk-C5BF4L26.js.map} +1 -1
- package/dist/{chunk-YBXQDQFX.js → chunk-C7CMD56T.js} +6 -5
- package/dist/{chunk-YBXQDQFX.js.map → chunk-C7CMD56T.js.map} +1 -1
- package/dist/{chunk-UGLEYEMP.js → chunk-CM7LVUKC.js} +3 -1
- package/dist/{chunk-UGLEYEMP.js.map → chunk-CM7LVUKC.js.map} +1 -1
- package/dist/{chunk-LJ2UTJJE.js → chunk-CREMJMVN.js} +181 -96
- package/dist/chunk-CREMJMVN.js.map +1 -0
- package/dist/{chunk-JVYQRRC4.js → chunk-CVYCLFMH.js} +3 -1
- package/dist/{chunk-JVYQRRC4.js.map → chunk-CVYCLFMH.js.map} +1 -1
- package/dist/{chunk-Y2PRMYLC.js → chunk-G3U2A6GS.js} +3 -2
- package/dist/{chunk-Y2PRMYLC.js.map → chunk-G3U2A6GS.js.map} +1 -1
- package/dist/{chunk-WZMYFJD3.js → chunk-G6YRCIYJ.js} +16 -7
- package/dist/{chunk-WZMYFJD3.js.map → chunk-G6YRCIYJ.js.map} +1 -1
- package/dist/{chunk-B3V6TG77.js → chunk-GC3PH6N7.js} +3 -1
- package/dist/{chunk-B3V6TG77.js.map → chunk-GC3PH6N7.js.map} +1 -1
- package/dist/{chunk-CJUO7J5Z.js → chunk-HXYOSSQO.js} +3 -2
- package/dist/{chunk-CJUO7J5Z.js.map → chunk-HXYOSSQO.js.map} +1 -1
- package/dist/{chunk-BRM6FVZA.js → chunk-IEE7WCLN.js} +4 -3
- package/dist/{chunk-BRM6FVZA.js.map → chunk-IEE7WCLN.js.map} +1 -1
- package/dist/{chunk-DYWBUX5Q.js → chunk-IMSUVYQB.js} +6 -5
- package/dist/{chunk-DYWBUX5Q.js.map → chunk-IMSUVYQB.js.map} +1 -1
- package/dist/{chunk-LN6TCXD3.js → chunk-IUHHPMAX.js} +184 -48
- package/dist/chunk-IUHHPMAX.js.map +1 -0
- package/dist/{chunk-SGKD2OCN.js → chunk-IYQCWGU5.js} +6 -5
- package/dist/{chunk-SGKD2OCN.js.map → chunk-IYQCWGU5.js.map} +1 -1
- package/dist/{chunk-J2QWVSQY.js → chunk-JH7V627O.js} +8 -7
- package/dist/{chunk-J2QWVSQY.js.map → chunk-JH7V627O.js.map} +1 -1
- package/dist/{chunk-EESD3PY3.js → chunk-JHTIMBOL.js} +6 -5
- package/dist/{chunk-EESD3PY3.js.map → chunk-JHTIMBOL.js.map} +1 -1
- package/dist/{chunk-LNIRAOA3.js → chunk-L2J3PU7A.js} +7 -6
- package/dist/{chunk-LNIRAOA3.js.map → chunk-L2J3PU7A.js.map} +1 -1
- package/dist/{chunk-ZYRGEKWS.js → chunk-LJUMYUBO.js} +3 -1
- package/dist/{chunk-ZYRGEKWS.js.map → chunk-LJUMYUBO.js.map} +1 -1
- package/dist/{chunk-4RVYOY4O.js → chunk-LSW2OJVV.js} +4 -3
- package/dist/{chunk-4RVYOY4O.js.map → chunk-LSW2OJVV.js.map} +1 -1
- package/dist/{chunk-UTRTG6LH.js → chunk-LVS3MH5T.js} +3 -1
- package/dist/{chunk-UTRTG6LH.js.map → chunk-LVS3MH5T.js.map} +1 -1
- package/dist/chunk-M357MHH3.js +2 -0
- package/dist/{chunk-GYVRFZDY.js → chunk-MDIXFKA3.js} +9 -8
- package/dist/{chunk-GYVRFZDY.js.map → chunk-MDIXFKA3.js.map} +1 -1
- package/dist/{chunk-WRHIZYZF.js → chunk-MEQM4LI3.js} +6 -5
- package/dist/{chunk-WRHIZYZF.js.map → chunk-MEQM4LI3.js.map} +1 -1
- package/dist/chunk-NX4ADH73.js +14 -0
- package/dist/chunk-NX4ADH73.js.map +1 -0
- package/dist/{chunk-XCHWDJ22.js → chunk-OGTTUYNT.js} +3 -1
- package/dist/{chunk-XCHWDJ22.js.map → chunk-OGTTUYNT.js.map} +1 -1
- package/dist/{chunk-GIMRELBW.js → chunk-OYQQJL3J.js} +3 -1
- package/dist/{chunk-GIMRELBW.js.map → chunk-OYQQJL3J.js.map} +1 -1
- package/dist/{chunk-RSI7XYXL.js → chunk-PBCZL4JP.js} +6 -5
- package/dist/{chunk-RSI7XYXL.js.map → chunk-PBCZL4JP.js.map} +1 -1
- package/dist/{chunk-I7IWRQLN.js → chunk-PHBFJCEU.js} +17 -11
- package/dist/chunk-PHBFJCEU.js.map +1 -0
- package/dist/{chunk-3CTRFMAK.js → chunk-PKCAYHDC.js} +5 -4
- package/dist/{chunk-3CTRFMAK.js.map → chunk-PKCAYHDC.js.map} +1 -1
- package/dist/{chunk-K3HQAKQX.js → chunk-PMV53IMM.js} +3 -1
- package/dist/{chunk-K3HQAKQX.js.map → chunk-PMV53IMM.js.map} +1 -1
- package/dist/{chunk-YQEAA6LT.js → chunk-QHUE7E4N.js} +3 -2
- package/dist/{chunk-YQEAA6LT.js.map → chunk-QHUE7E4N.js.map} +1 -1
- package/dist/{chunk-OA6HFRQP.js → chunk-QMMCJGFI.js} +4 -3
- package/dist/{chunk-OA6HFRQP.js.map → chunk-QMMCJGFI.js.map} +1 -1
- package/dist/{chunk-YV4L3ILF.js → chunk-QV3DJVRZ.js} +3 -1
- package/dist/{chunk-YV4L3ILF.js.map → chunk-QV3DJVRZ.js.map} +1 -1
- package/dist/{chunk-447JLCBU.js → chunk-S2QH6EZ5.js} +3 -1
- package/dist/{chunk-447JLCBU.js.map → chunk-S2QH6EZ5.js.map} +1 -1
- package/dist/{chunk-PNY3JKBJ.js → chunk-SFH43JT2.js} +5 -4
- package/dist/{chunk-PNY3JKBJ.js.map → chunk-SFH43JT2.js.map} +1 -1
- package/dist/{chunk-AWZLIMKX.js → chunk-T46QZH3E.js} +3 -1
- package/dist/{chunk-AWZLIMKX.js.map → chunk-T46QZH3E.js.map} +1 -1
- package/dist/{chunk-5J4FOW6Q.js → chunk-TNEZNMSN.js} +3 -1
- package/dist/{chunk-5J4FOW6Q.js.map → chunk-TNEZNMSN.js.map} +1 -1
- package/dist/{chunk-22KP6LR5.js → chunk-TXS65BB2.js} +3 -1
- package/dist/{chunk-22KP6LR5.js.map → chunk-TXS65BB2.js.map} +1 -1
- package/dist/{chunk-H5X55XH7.js → chunk-UDPH5SLV.js} +4 -3
- package/dist/{chunk-H5X55XH7.js.map → chunk-UDPH5SLV.js.map} +1 -1
- package/dist/{chunk-HDJWDK7W.js → chunk-VCSERYXH.js} +10 -9
- package/dist/{chunk-HDJWDK7W.js.map → chunk-VCSERYXH.js.map} +1 -1
- package/dist/{chunk-VZTQ73XT.js → chunk-XEA5BCMA.js} +3 -1
- package/dist/{chunk-VZTQ73XT.js.map → chunk-XEA5BCMA.js.map} +1 -1
- package/dist/{chunk-5F4WR7X7.js → chunk-XS67YG5R.js} +3 -1
- package/dist/{chunk-5F4WR7X7.js.map → chunk-XS67YG5R.js.map} +1 -1
- package/dist/{chunk-TKOTKRWY.js → chunk-XTD7TZHW.js} +3 -1
- package/dist/{chunk-TKOTKRWY.js.map → chunk-XTD7TZHW.js.map} +1 -1
- package/dist/{chunk-A2PI6UMY.js → chunk-YSRBFJMQ.js} +3 -1
- package/dist/{chunk-A2PI6UMY.js.map → chunk-YSRBFJMQ.js.map} +1 -1
- package/dist/chunk-YVFRBXST.js +1420 -0
- package/dist/chunk-YVFRBXST.js.map +1 -0
- package/dist/{chunk-SCOTPE2I.js → chunk-YYLBXXTE.js} +3 -1
- package/dist/{chunk-SCOTPE2I.js.map → chunk-YYLBXXTE.js.map} +1 -1
- package/dist/{chunk-RHREZ7BO.js → chunk-ZUWF4NF7.js} +3 -1
- package/dist/{chunk-RHREZ7BO.js.map → chunk-ZUWF4NF7.js.map} +1 -1
- package/dist/clipboard.js +3 -2
- package/dist/components/composer-transcription-control.d.ts +4 -0
- package/dist/components/session-conversation.d.ts +6 -0
- package/dist/composer-voice-events.d.ts +8 -0
- package/dist/composer.js +15 -13
- package/dist/computer-viewer-46UIN7F3.js +20 -0
- package/dist/connect.js +15 -12
- package/dist/connect.js.map +1 -1
- package/dist/desktop.js +6 -5
- package/dist/desktop.js.map +1 -1
- package/dist/diffs.js +2 -1
- package/dist/diffs.js.map +1 -1
- package/dist/editor.js +4 -3
- package/dist/editor.js.map +1 -1
- package/dist/embedded-voice-NIL4RDX3.js +69 -0
- package/dist/embedded-voice-NIL4RDX3.js.map +1 -0
- package/dist/{fleet-decision-row-YZ3ZKWMM.js → fleet-decision-row-SI63O5V4.js} +3 -1
- package/dist/{fleet-decision-row-YZ3ZKWMM.js.map → fleet-decision-row-SI63O5V4.js.map} +1 -1
- package/dist/hooks/use-client-config-flags.d.ts +6 -0
- package/dist/hooks/use-realtime-voice-models.d.ts +9 -0
- package/dist/hooks/use-voice-input.d.ts +8 -1
- package/dist/index.js +47 -45
- package/dist/index.js.map +1 -1
- package/dist/interaction.js +14 -13
- package/dist/interaction.js.map +1 -1
- package/dist/{latest-question-GPYM2JNU.js → latest-question-2POFPYNB.js} +5 -4
- package/dist/{latest-question-GPYM2JNU.js.map → latest-question-2POFPYNB.js.map} +1 -1
- package/dist/machines.js +8 -7
- package/dist/{markdown-table-layout-QXSLK4BY.js → markdown-table-layout-DQ4DRNVT.js} +3 -1
- package/dist/{markdown-table-layout-QXSLK4BY.js.map → markdown-table-layout-DQ4DRNVT.js.map} +1 -1
- package/dist/model-policy-picker-menu-WRNSRFQC.js +15 -0
- package/dist/model-policy.js +2 -1
- package/dist/{noto-sans-arabic-loader-IA2T4X2A.js → noto-sans-arabic-loader-XSH2KYWJ.js} +3 -1
- package/dist/{noto-sans-arabic-loader-IA2T4X2A.js.map → noto-sans-arabic-loader-XSH2KYWJ.js.map} +1 -1
- package/dist/{noto-sans-jp-loader.generated-HFGLYBR3.js → noto-sans-jp-loader.generated-MR5L6V7K.js} +3 -1
- package/dist/{noto-sans-jp-loader.generated-HFGLYBR3.js.map → noto-sans-jp-loader.generated-MR5L6V7K.js.map} +1 -1
- package/dist/{platform-activity-row-627BFZ46.js → platform-activity-row-PJJVATTZ.js} +3 -1
- package/dist/{platform-activity-row-627BFZ46.js.map → platform-activity-row-PJJVATTZ.js.map} +1 -1
- package/dist/{queue-surface-implementation-ZHFI5JBP.js → queue-surface-implementation-67FS7FUI.js} +10 -9
- package/dist/{queue-surface-implementation-ZHFI5JBP.js.map → queue-surface-implementation-67FS7FUI.js.map} +1 -1
- package/dist/realtime/embedded-voice.d.ts +20 -0
- package/dist/realtime.js +22 -1353
- package/dist/realtime.js.map +1 -1
- package/dist/sandbox-files-34CJJNOY.js +21 -0
- package/dist/session-ui.js +32 -30
- package/dist/session-ui.js.map +1 -1
- package/dist/session.js +10 -9
- package/dist/sites.js +2 -1
- package/dist/terminal.js +6 -5
- package/dist/terminal.js.map +1 -1
- package/dist/{timeline-annotation-markers-GNDHTGBD.js → timeline-annotation-markers-U3G66KUD.js} +5 -4
- package/dist/{timeline-annotation-markers-GNDHTGBD.js.map → timeline-annotation-markers-U3G66KUD.js.map} +1 -1
- package/dist/{timeline-annotation-selection-DMLMM2TX.js → timeline-annotation-selection-BI7QTPTZ.js} +4 -3
- package/dist/{timeline-annotation-selection-DMLMM2TX.js.map → timeline-annotation-selection-BI7QTPTZ.js.map} +1 -1
- package/dist/{timeline-annotations-dialog-ELRDBHTS.js → timeline-annotations-dialog-FOMHSDTE.js} +7 -6
- package/dist/{timeline-annotations-dialog-ELRDBHTS.js.map → timeline-annotations-dialog-FOMHSDTE.js.map} +1 -1
- package/dist/usage.js +6 -5
- package/dist/usage.js.map +1 -1
- package/dist/voice-recording-owner.d.ts +7 -0
- package/package.json +3 -3
- package/src/components/composer-transcription-control.tsx +109 -27
- package/src/components/markdown.tsx +7 -2
- package/src/components/message-timeline.tsx +10 -1
- package/src/components/session-conversation.tsx +44 -0
- package/src/components/session-proxy-scope.tsx +26 -5
- package/src/composer-voice-events.ts +12 -0
- package/src/connection-discovery.tsx +4 -1
- package/src/hooks/use-client-config-flags.ts +8 -0
- package/src/hooks/use-goal.ts +12 -1
- package/src/hooks/use-realtime-voice-models.ts +67 -0
- package/src/hooks/use-voice-input.ts +109 -18
- package/src/realtime/embedded-voice.tsx +81 -0
- package/src/realtime/realtime-control.tsx +82 -17
- package/src/voice-recording-owner.ts +22 -0
- package/styles/compiled.css +72 -18
- package/styles/index.css +49 -0
- package/styles/responsive.css +61 -4
- package/styles/session-capability.css +1 -1
- package/dist/browser-viewer-SHYKQRNX.js +0 -16
- package/dist/chat-interactive-block-UGBTNB3L.js +0 -11
- package/dist/chunk-I7IWRQLN.js.map +0 -1
- package/dist/chunk-IWIDV7SB.js +0 -1
- package/dist/chunk-LJ2UTJJE.js.map +0 -1
- package/dist/chunk-LN6TCXD3.js.map +0 -1
- package/dist/computer-viewer-6SRGWRUX.js +0 -19
- package/dist/model-policy-picker-menu-DXHUL73H.js +0 -14
- package/dist/sandbox-files-GORZOUUJ.js +0 -20
- /package/dist/{browser-viewer-SHYKQRNX.js.map → browser-viewer-WGJ43YGI.js.map} +0 -0
- /package/dist/{chat-interactive-block-UGBTNB3L.js.map → chat-interactive-block-ZFHOKTMS.js.map} +0 -0
- /package/dist/{chunk-IWIDV7SB.js.map → chunk-M357MHH3.js.map} +0 -0
- /package/dist/{computer-viewer-6SRGWRUX.js.map → computer-viewer-46UIN7F3.js.map} +0 -0
- /package/dist/{model-policy-picker-menu-DXHUL73H.js.map → model-policy-picker-menu-WRNSRFQC.js.map} +0 -0
- /package/dist/{sandbox-files-GORZOUUJ.js.map → sandbox-files-34CJJNOY.js.map} +0 -0
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
1
3
|
// src/lib/sandbox-liveness.ts
|
|
2
4
|
function sandboxAcceptsLiveIo(liveness) {
|
|
3
5
|
return liveness === "warm";
|
|
@@ -6,4 +8,4 @@ function sandboxAcceptsLiveIo(liveness) {
|
|
|
6
8
|
export {
|
|
7
9
|
sandboxAcceptsLiveIo
|
|
8
10
|
};
|
|
9
|
-
//# sourceMappingURL=chunk-
|
|
11
|
+
//# sourceMappingURL=chunk-QV3DJVRZ.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/lib/sandbox-liveness.ts"],"sourcesContent":["/**\n * A sandbox is available for new I/O only after a holder has observed `warm`.\n *\n * `draining` means the holder count is zero and teardown owns the provider\n * instance. The provider may disappear before the durable lease reaches `cold`,\n * so treating `draining` as live races capture/termination. Explicit user intent\n * reacquires a holder; only its subsequent `warm` state re-enables live I/O.\n */\nexport function sandboxAcceptsLiveIo(liveness: string | null | undefined): boolean {\n return liveness === \"warm\";\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../src/lib/sandbox-liveness.ts"],"sourcesContent":["/**\n * A sandbox is available for new I/O only after a holder has observed `warm`.\n *\n * `draining` means the holder count is zero and teardown owns the provider\n * instance. The provider may disappear before the durable lease reaches `cold`,\n * so treating `draining` as live races capture/termination. Explicit user intent\n * reacquires a holder; only its subsequent `warm` state re-enables live I/O.\n */\nexport function sandboxAcceptsLiveIo(liveness: string | null | undefined): boolean {\n return liveness === \"warm\";\n}\n"],"mappings":";;;AAQO,SAAS,qBAAqB,UAA8C;AACjF,SAAO,aAAa;AACtB;","names":[]}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
1
3
|
// src/components/timeline-annotation-shared.ts
|
|
2
4
|
var ANNOTATION_CHROME_SELECTOR = "[data-og-annotation-chrome], [data-og-annotation-badge], [data-og-annotation-popover]";
|
|
3
5
|
function annotationHasNote(note) {
|
|
@@ -206,4 +208,4 @@ export {
|
|
|
206
208
|
resolveAnnotationRevealRoot,
|
|
207
209
|
revealLoadedAnnotationSource
|
|
208
210
|
};
|
|
209
|
-
//# sourceMappingURL=chunk-
|
|
211
|
+
//# sourceMappingURL=chunk-S2QH6EZ5.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/timeline-annotation-shared.ts"],"sourcesContent":["import type { TimelineAnnotationSource } from \"@opengeni/sdk\";\n\nexport const ANNOTATION_CHROME_SELECTOR =\n \"[data-og-annotation-chrome], [data-og-annotation-badge], [data-og-annotation-popover]\";\n\nexport function annotationHasNote(note: string): boolean {\n return note.trim().length > 0;\n}\n\nexport function annotationDisplayOrdinal(\n annotation: { readonly id?: string; readonly ordinal?: number | undefined },\n index: number,\n): number {\n return typeof annotation.ordinal === \"number\" ? annotation.ordinal : index + 1;\n}\n\nexport function sourceKindLabel(kind: TimelineAnnotationSource[\"kind\"]): string {\n switch (kind) {\n case \"user_message\":\n return \"Your message\";\n case \"assistant_message\":\n return \"Assistant\";\n case \"tool_output\":\n return \"Tool output\";\n }\n}\n\nexport function annotationSourceLabel(source: TimelineAnnotationSource): string {\n return source.label?.trim() || sourceKindLabel(source.kind);\n}\n\nexport function truncateAnnotationQuote(quote: string, maxChars = 160): string {\n const normalized = quote.replace(/\\s+/g, \" \").trim();\n if (normalized.length <= maxChars) return normalized;\n return `${normalized.slice(0, Math.max(0, maxChars - 1)).trimEnd()}…`;\n}\n\nexport function cssEscapeAttribute(value: string): string {\n if (typeof CSS !== \"undefined\" && typeof CSS.escape === \"function\") return CSS.escape(value);\n return value.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"');\n}\n\nexport function isAnnotationChromeNode(node: Node | null): boolean {\n const element = node instanceof Element ? node : node?.parentElement;\n return Boolean(element?.closest(ANNOTATION_CHROME_SELECTOR));\n}\n\nexport function occurrenceOffsets(text: string, quote: string): number[] {\n if (!quote) return [];\n const offsets: number[] = [];\n let cursor = 0;\n while (cursor <= text.length - quote.length) {\n const offset = text.indexOf(quote, cursor);\n if (offset < 0) break;\n offsets.push(offset);\n cursor = offset + 1;\n }\n return offsets;\n}\n\nfunction uniqueNonEmpty(values: string[]): string[] {\n const seen = new Set<string>();\n const out: string[] = [];\n for (const value of values) {\n if (!value || seen.has(value)) continue;\n seen.add(value);\n out.push(value);\n }\n return out;\n}\n\nexport function matchingQuoteInSource(sourceText: string, quote: string): string | null {\n for (const candidate of uniqueNonEmpty([quote, quote.trim()])) {\n if (sourceText.includes(candidate)) return candidate;\n }\n const trimmed = quote.trim();\n for (let length = trimmed.length; length >= 8; length--) {\n const slice = trimmed.slice(0, length);\n if (sourceText.includes(slice)) return slice;\n }\n for (let start = 1; start <= trimmed.length - 8; start++) {\n const slice = trimmed.slice(start);\n if (sourceText.includes(slice)) return slice;\n }\n return null;\n}\n\ntype AnnotatableSpan = {\n node: Text;\n start: number;\n length: number;\n};\n\nexport function annotatableText(root: HTMLElement): { text: string; spans: AnnotatableSpan[] } {\n const walker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT, {\n acceptNode(node) {\n if (!(node instanceof Text) || node.data.length === 0) return NodeFilter.FILTER_REJECT;\n if (isAnnotationChromeNode(node)) return NodeFilter.FILTER_REJECT;\n return NodeFilter.FILTER_ACCEPT;\n },\n });\n const spans: AnnotatableSpan[] = [];\n let text = \"\";\n let current: Node | null;\n while ((current = walker.nextNode())) {\n if (!(current instanceof Text)) continue;\n spans.push({ node: current, start: text.length, length: current.data.length });\n text += current.data;\n }\n return { text, spans };\n}\n\nfunction pointAt(\n spans: AnnotatableSpan[],\n offset: number,\n stickEnd: boolean,\n): { node: Text; offset: number } | null {\n if (spans.length === 0) return null;\n for (let index = 0; index < spans.length; index++) {\n const span = spans[index]!;\n const local = offset - span.start;\n if (local < 0) continue;\n if (\n local < span.length ||\n (local === span.length && (stickEnd || index === spans.length - 1))\n ) {\n return { node: span.node, offset: local };\n }\n }\n const last = spans[spans.length - 1]!;\n return { node: last.node, offset: last.length };\n}\n\nexport function rangeFromOffsets(\n spans: AnnotatableSpan[],\n startOffset: number,\n endOffset: number,\n): Range | null {\n const start = pointAt(spans, startOffset, false);\n const end = pointAt(spans, endOffset, true);\n if (!start || !end) return null;\n const range = document.createRange();\n range.setStart(start.node, start.offset);\n range.setEnd(end.node, end.offset);\n return range.collapsed ? null : range;\n}\n\nexport function buildQuoteRange(\n sourceEl: HTMLElement,\n quote: string,\n occurrenceIndex = 0,\n): Range | null {\n if (!quote) return null;\n const { text, spans } = annotatableText(sourceEl);\n const offsets = occurrenceOffsets(text, quote);\n if (offsets.length === 0) return null;\n const start = offsets[Math.min(Math.max(0, occurrenceIndex), offsets.length - 1)]!;\n return rangeFromOffsets(spans, start, start + quote.length);\n}\n\nexport function quoteOccurrenceIndex(sourceEl: HTMLElement, range: Range, quote: string): number {\n try {\n const prefix = range.cloneRange();\n prefix.selectNodeContents(sourceEl);\n prefix.setEnd(range.startContainer, range.startOffset);\n return occurrenceOffsets(prefix.toString(), quote).length;\n } catch {\n return 0;\n }\n}\n\nexport function clipRangeToSource(range: Range, sourceEl: HTMLElement): Range | null {\n const startOk =\n sourceEl.contains(range.startContainer) && !isAnnotationChromeNode(range.startContainer);\n const endOk =\n sourceEl.contains(range.endContainer) && !isAnnotationChromeNode(range.endContainer);\n if (!startOk && !endOk) return null;\n const { spans } = annotatableText(sourceEl);\n if (spans.length === 0) return null;\n const next = range.cloneRange();\n const first = spans[0]!;\n const last = spans[spans.length - 1]!;\n if (!startOk) next.setStart(first.node, 0);\n if (!endOk) next.setEnd(last.node, last.node.data.length);\n return next.collapsed ? null : next;\n}\n\nexport function visibleClientRect(range: Range): DOMRect | null {\n try {\n const bounding = range.getBoundingClientRect();\n if (bounding.width > 0 || bounding.height > 0) return bounding;\n } catch {\n // jsdom ranges may omit layout geometry.\n }\n try {\n const rects = range.getClientRects();\n for (let index = 0; index < rects.length; index++) {\n const rect = rects.item(index);\n if (rect && (rect.width > 0 || rect.height > 0)) return rect;\n }\n } catch {\n // jsdom ranges may omit client rects.\n }\n return null;\n}\n\nexport function resolveAnnotationRevealRoot(from: Element | null | undefined): HTMLElement | null {\n const conversation = from?.closest(\"[data-og-conversation]\");\n if (conversation instanceof HTMLElement) {\n const nested = conversation.querySelector(\"[data-og-timeline-scroller]\");\n return nested instanceof HTMLElement ? nested : conversation;\n }\n const scroller = from?.closest(\"[data-og-timeline-scroller]\");\n return scroller instanceof HTMLElement ? scroller : null;\n}\n\nexport function revealLoadedAnnotationSource(\n source: TimelineAnnotationSource,\n root?: ParentNode | null,\n): boolean {\n if (typeof document === \"undefined\") return false;\n // An explicit null root means the caller already scoped the search and found\n // no owning timeline. Do not fall back to `document`, or a second mounted\n // timeline with the same event id would steal the reveal.\n if (root === null) return false;\n const element = (root ?? document).querySelector(\n `[data-og-annotation-source-key=\"${cssEscapeAttribute(source.eventId)}\"]`,\n );\n if (!(element instanceof HTMLElement)) return false;\n element.scrollIntoView({ block: \"center\", behavior: \"smooth\" });\n element.animate?.(\n [\n {\n boxShadow: \"inset 0 0 0 2px color-mix(in oklch, var(--og-color-accent) 70%, transparent)\",\n backgroundColor: \"color-mix(in oklch, var(--og-color-accent) 14%, transparent)\",\n },\n {\n boxShadow: \"inset 0 0 0 2px transparent\",\n backgroundColor: \"transparent\",\n },\n ],\n { duration: 1400, easing: \"ease-out\" },\n );\n return true;\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/components/timeline-annotation-shared.ts"],"sourcesContent":["import type { TimelineAnnotationSource } from \"@opengeni/sdk\";\n\nexport const ANNOTATION_CHROME_SELECTOR =\n \"[data-og-annotation-chrome], [data-og-annotation-badge], [data-og-annotation-popover]\";\n\nexport function annotationHasNote(note: string): boolean {\n return note.trim().length > 0;\n}\n\nexport function annotationDisplayOrdinal(\n annotation: { readonly id?: string; readonly ordinal?: number | undefined },\n index: number,\n): number {\n return typeof annotation.ordinal === \"number\" ? annotation.ordinal : index + 1;\n}\n\nexport function sourceKindLabel(kind: TimelineAnnotationSource[\"kind\"]): string {\n switch (kind) {\n case \"user_message\":\n return \"Your message\";\n case \"assistant_message\":\n return \"Assistant\";\n case \"tool_output\":\n return \"Tool output\";\n }\n}\n\nexport function annotationSourceLabel(source: TimelineAnnotationSource): string {\n return source.label?.trim() || sourceKindLabel(source.kind);\n}\n\nexport function truncateAnnotationQuote(quote: string, maxChars = 160): string {\n const normalized = quote.replace(/\\s+/g, \" \").trim();\n if (normalized.length <= maxChars) return normalized;\n return `${normalized.slice(0, Math.max(0, maxChars - 1)).trimEnd()}…`;\n}\n\nexport function cssEscapeAttribute(value: string): string {\n if (typeof CSS !== \"undefined\" && typeof CSS.escape === \"function\") return CSS.escape(value);\n return value.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"');\n}\n\nexport function isAnnotationChromeNode(node: Node | null): boolean {\n const element = node instanceof Element ? node : node?.parentElement;\n return Boolean(element?.closest(ANNOTATION_CHROME_SELECTOR));\n}\n\nexport function occurrenceOffsets(text: string, quote: string): number[] {\n if (!quote) return [];\n const offsets: number[] = [];\n let cursor = 0;\n while (cursor <= text.length - quote.length) {\n const offset = text.indexOf(quote, cursor);\n if (offset < 0) break;\n offsets.push(offset);\n cursor = offset + 1;\n }\n return offsets;\n}\n\nfunction uniqueNonEmpty(values: string[]): string[] {\n const seen = new Set<string>();\n const out: string[] = [];\n for (const value of values) {\n if (!value || seen.has(value)) continue;\n seen.add(value);\n out.push(value);\n }\n return out;\n}\n\nexport function matchingQuoteInSource(sourceText: string, quote: string): string | null {\n for (const candidate of uniqueNonEmpty([quote, quote.trim()])) {\n if (sourceText.includes(candidate)) return candidate;\n }\n const trimmed = quote.trim();\n for (let length = trimmed.length; length >= 8; length--) {\n const slice = trimmed.slice(0, length);\n if (sourceText.includes(slice)) return slice;\n }\n for (let start = 1; start <= trimmed.length - 8; start++) {\n const slice = trimmed.slice(start);\n if (sourceText.includes(slice)) return slice;\n }\n return null;\n}\n\ntype AnnotatableSpan = {\n node: Text;\n start: number;\n length: number;\n};\n\nexport function annotatableText(root: HTMLElement): { text: string; spans: AnnotatableSpan[] } {\n const walker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT, {\n acceptNode(node) {\n if (!(node instanceof Text) || node.data.length === 0) return NodeFilter.FILTER_REJECT;\n if (isAnnotationChromeNode(node)) return NodeFilter.FILTER_REJECT;\n return NodeFilter.FILTER_ACCEPT;\n },\n });\n const spans: AnnotatableSpan[] = [];\n let text = \"\";\n let current: Node | null;\n while ((current = walker.nextNode())) {\n if (!(current instanceof Text)) continue;\n spans.push({ node: current, start: text.length, length: current.data.length });\n text += current.data;\n }\n return { text, spans };\n}\n\nfunction pointAt(\n spans: AnnotatableSpan[],\n offset: number,\n stickEnd: boolean,\n): { node: Text; offset: number } | null {\n if (spans.length === 0) return null;\n for (let index = 0; index < spans.length; index++) {\n const span = spans[index]!;\n const local = offset - span.start;\n if (local < 0) continue;\n if (\n local < span.length ||\n (local === span.length && (stickEnd || index === spans.length - 1))\n ) {\n return { node: span.node, offset: local };\n }\n }\n const last = spans[spans.length - 1]!;\n return { node: last.node, offset: last.length };\n}\n\nexport function rangeFromOffsets(\n spans: AnnotatableSpan[],\n startOffset: number,\n endOffset: number,\n): Range | null {\n const start = pointAt(spans, startOffset, false);\n const end = pointAt(spans, endOffset, true);\n if (!start || !end) return null;\n const range = document.createRange();\n range.setStart(start.node, start.offset);\n range.setEnd(end.node, end.offset);\n return range.collapsed ? null : range;\n}\n\nexport function buildQuoteRange(\n sourceEl: HTMLElement,\n quote: string,\n occurrenceIndex = 0,\n): Range | null {\n if (!quote) return null;\n const { text, spans } = annotatableText(sourceEl);\n const offsets = occurrenceOffsets(text, quote);\n if (offsets.length === 0) return null;\n const start = offsets[Math.min(Math.max(0, occurrenceIndex), offsets.length - 1)]!;\n return rangeFromOffsets(spans, start, start + quote.length);\n}\n\nexport function quoteOccurrenceIndex(sourceEl: HTMLElement, range: Range, quote: string): number {\n try {\n const prefix = range.cloneRange();\n prefix.selectNodeContents(sourceEl);\n prefix.setEnd(range.startContainer, range.startOffset);\n return occurrenceOffsets(prefix.toString(), quote).length;\n } catch {\n return 0;\n }\n}\n\nexport function clipRangeToSource(range: Range, sourceEl: HTMLElement): Range | null {\n const startOk =\n sourceEl.contains(range.startContainer) && !isAnnotationChromeNode(range.startContainer);\n const endOk =\n sourceEl.contains(range.endContainer) && !isAnnotationChromeNode(range.endContainer);\n if (!startOk && !endOk) return null;\n const { spans } = annotatableText(sourceEl);\n if (spans.length === 0) return null;\n const next = range.cloneRange();\n const first = spans[0]!;\n const last = spans[spans.length - 1]!;\n if (!startOk) next.setStart(first.node, 0);\n if (!endOk) next.setEnd(last.node, last.node.data.length);\n return next.collapsed ? null : next;\n}\n\nexport function visibleClientRect(range: Range): DOMRect | null {\n try {\n const bounding = range.getBoundingClientRect();\n if (bounding.width > 0 || bounding.height > 0) return bounding;\n } catch {\n // jsdom ranges may omit layout geometry.\n }\n try {\n const rects = range.getClientRects();\n for (let index = 0; index < rects.length; index++) {\n const rect = rects.item(index);\n if (rect && (rect.width > 0 || rect.height > 0)) return rect;\n }\n } catch {\n // jsdom ranges may omit client rects.\n }\n return null;\n}\n\nexport function resolveAnnotationRevealRoot(from: Element | null | undefined): HTMLElement | null {\n const conversation = from?.closest(\"[data-og-conversation]\");\n if (conversation instanceof HTMLElement) {\n const nested = conversation.querySelector(\"[data-og-timeline-scroller]\");\n return nested instanceof HTMLElement ? nested : conversation;\n }\n const scroller = from?.closest(\"[data-og-timeline-scroller]\");\n return scroller instanceof HTMLElement ? scroller : null;\n}\n\nexport function revealLoadedAnnotationSource(\n source: TimelineAnnotationSource,\n root?: ParentNode | null,\n): boolean {\n if (typeof document === \"undefined\") return false;\n // An explicit null root means the caller already scoped the search and found\n // no owning timeline. Do not fall back to `document`, or a second mounted\n // timeline with the same event id would steal the reveal.\n if (root === null) return false;\n const element = (root ?? document).querySelector(\n `[data-og-annotation-source-key=\"${cssEscapeAttribute(source.eventId)}\"]`,\n );\n if (!(element instanceof HTMLElement)) return false;\n element.scrollIntoView({ block: \"center\", behavior: \"smooth\" });\n element.animate?.(\n [\n {\n boxShadow: \"inset 0 0 0 2px color-mix(in oklch, var(--og-color-accent) 70%, transparent)\",\n backgroundColor: \"color-mix(in oklch, var(--og-color-accent) 14%, transparent)\",\n },\n {\n boxShadow: \"inset 0 0 0 2px transparent\",\n backgroundColor: \"transparent\",\n },\n ],\n { duration: 1400, easing: \"ease-out\" },\n );\n return true;\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
"use client";
|
|
1
2
|
import {
|
|
2
3
|
useLatestTaskRunner
|
|
3
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-2DDJ6YH6.js";
|
|
4
5
|
import {
|
|
5
6
|
ArtifactSurface,
|
|
6
7
|
EditableArtifactMessage,
|
|
@@ -9,10 +10,10 @@ import {
|
|
|
9
10
|
editableArtifactProjectionKey,
|
|
10
11
|
editableArtifactStatusLabel,
|
|
11
12
|
useEditableArtifactView
|
|
12
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-G3U2A6GS.js";
|
|
13
14
|
import {
|
|
14
15
|
cn
|
|
15
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-TXS65BB2.js";
|
|
16
17
|
|
|
17
18
|
// src/components/artifacts/presentation-editor.tsx
|
|
18
19
|
import {
|
|
@@ -3466,4 +3467,4 @@ export {
|
|
|
3466
3467
|
PresentationProjectionArtifactSurface,
|
|
3467
3468
|
EditablePresentationArtifactSurface
|
|
3468
3469
|
};
|
|
3469
|
-
//# sourceMappingURL=chunk-
|
|
3470
|
+
//# sourceMappingURL=chunk-SFH43JT2.js.map
|