@opengeni/react 1.3.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 +29 -1
- 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-TMYGL6X5.js → chunk-55DXD22O.js} +73 -7
- package/dist/chunk-55DXD22O.js.map +1 -0
- 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-PGSX7UCP.js → chunk-CREMJMVN.js} +1502 -833
- 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-WWEUO2PL.js → chunk-G6YRCIYJ.js} +202 -14
- package/dist/chunk-G6YRCIYJ.js.map +1 -0
- 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-FZCP527Y.js → chunk-HXYOSSQO.js} +3 -2
- package/dist/{chunk-FZCP527Y.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-CY7WK5FD.js → chunk-IUHHPMAX.js} +203 -46
- 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-RC6BZ44Q.js → chunk-QMMCJGFI.js} +4 -3
- package/dist/{chunk-RC6BZ44Q.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-ERGYJIBB.js → chunk-T46QZH3E.js} +4 -2
- package/dist/{chunk-ERGYJIBB.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-742CZ3L3.js → chunk-UDPH5SLV.js} +19 -202
- package/dist/chunk-UDPH5SLV.js.map +1 -0
- 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 +7 -0
- package/dist/components/open-geni-chat.d.ts +6 -2
- package/dist/components/session-conversation.d.ts +31 -19
- package/dist/components/session-list.d.ts +4 -1
- package/dist/components/tool-action-review.d.ts +29 -2
- package/dist/components/tool-review-history.d.ts +8 -4
- 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 +43 -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.d.ts +3 -3
- package/dist/index.js +60 -48
- package/dist/index.js.map +1 -1
- package/dist/interaction.js +14 -13
- package/dist/interaction.js.map +1 -1
- package/dist/{latest-question-YTOBHCWR.js → latest-question-2POFPYNB.js} +5 -4
- package/dist/{latest-question-YTOBHCWR.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/realtime-control.d.ts +2 -0
- package/dist/realtime.js +22 -1332
- package/dist/realtime.js.map +1 -1
- package/dist/sandbox-files-34CJJNOY.js +21 -0
- package/dist/session-capability-policy.d.ts +20 -1
- package/dist/session-ui.js +32 -30
- package/dist/session-ui.js.map +1 -1
- package/dist/session.js +12 -11
- package/dist/sites.js +2 -1
- package/dist/terminal.js +6 -5
- package/dist/terminal.js.map +1 -1
- package/dist/timeline/index.d.ts +2 -0
- package/dist/timeline/retained-loaders.d.ts +27 -0
- 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/approval-surface.tsx +190 -79
- package/src/components/artifacts/session-artifact-viewer.tsx +4 -2
- package/src/components/composer-transcription-control.tsx +121 -25
- package/src/components/composer.tsx +1 -0
- package/src/components/markdown.tsx +7 -2
- package/src/components/message-timeline.tsx +10 -1
- package/src/components/open-geni-chat.tsx +53 -13
- package/src/components/session-conversation.tsx +273 -63
- package/src/components/session-list.tsx +9 -2
- package/src/components/session-proxy-scope.tsx +26 -5
- package/src/components/tool-action-review.tsx +502 -239
- package/src/components/tool-review-history.tsx +18 -43
- package/src/composer-voice-events.ts +12 -0
- package/src/connection-discovery.tsx +4 -1
- package/src/hooks/use-client-config-flags.ts +110 -0
- package/src/hooks/use-goal.ts +12 -1
- package/src/hooks/use-realtime-voice-models.ts +67 -0
- package/src/hooks/use-session-events.ts +19 -16
- package/src/hooks/use-transcription.ts +6 -0
- package/src/hooks/use-voice-input.ts +115 -18
- package/src/index.ts +9 -0
- package/src/realtime/embedded-voice.tsx +81 -0
- package/src/realtime/realtime-control.tsx +109 -17
- package/src/session-capability-policy.ts +119 -6
- package/src/timeline/index.ts +10 -0
- package/src/timeline/retained-loaders.ts +86 -0
- package/src/timeline/tool-display-name.ts +5 -1
- package/src/timeline/tool-renderers.tsx +143 -10
- package/src/voice-recording-owner.ts +22 -0
- package/styles/compiled.css +135 -37
- package/styles/index.css +49 -0
- package/styles/responsive.css +61 -4
- package/styles/session-capability.css +1 -1
- package/styles/tokens.css +1 -1
- package/dist/browser-viewer-SHYKQRNX.js +0 -16
- package/dist/chat-interactive-block-UGBTNB3L.js +0 -11
- package/dist/chunk-742CZ3L3.js.map +0 -1
- package/dist/chunk-CY7WK5FD.js.map +0 -1
- package/dist/chunk-I7IWRQLN.js.map +0 -1
- package/dist/chunk-IWIDV7SB.js +0 -1
- package/dist/chunk-PGSX7UCP.js.map +0 -1
- package/dist/chunk-TMYGL6X5.js.map +0 -1
- package/dist/chunk-WWEUO2PL.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
package/dist/interaction.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
"use client";
|
|
1
2
|
import {
|
|
2
3
|
BrowserViewer,
|
|
3
4
|
useAttachedBrowsers,
|
|
@@ -7,32 +8,32 @@ import {
|
|
|
7
8
|
useBrowserSession,
|
|
8
9
|
useBrowserSessions,
|
|
9
10
|
useSiteAuthConnections
|
|
10
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-VCSERYXH.js";
|
|
11
12
|
import {
|
|
12
13
|
ComputerViewer,
|
|
13
14
|
useComputerFrameStream,
|
|
14
15
|
useComputerSession,
|
|
15
16
|
useComputerSessions
|
|
16
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-MDIXFKA3.js";
|
|
17
18
|
import {
|
|
18
19
|
useInteractionInterventions,
|
|
19
20
|
useInteractionInvalidation
|
|
20
|
-
} from "./chunk-
|
|
21
|
-
import "./chunk-
|
|
22
|
-
import "./chunk-
|
|
23
|
-
import "./chunk-
|
|
24
|
-
import "./chunk-
|
|
25
|
-
import "./chunk-
|
|
26
|
-
import "./chunk-
|
|
27
|
-
import "./chunk-
|
|
21
|
+
} from "./chunk-BNKV5ZLF.js";
|
|
22
|
+
import "./chunk-CVYCLFMH.js";
|
|
23
|
+
import "./chunk-IMSUVYQB.js";
|
|
24
|
+
import "./chunk-ZUWF4NF7.js";
|
|
25
|
+
import "./chunk-LVS3MH5T.js";
|
|
26
|
+
import "./chunk-TNEZNMSN.js";
|
|
27
|
+
import "./chunk-QHUE7E4N.js";
|
|
28
|
+
import "./chunk-CM7LVUKC.js";
|
|
28
29
|
import {
|
|
29
30
|
useEmbeddedBrowserInteraction,
|
|
30
31
|
useEmbeddedComputerInteraction,
|
|
31
32
|
useEmbeddedInteraction,
|
|
32
33
|
useEmbeddedInterventions
|
|
33
|
-
} from "./chunk-
|
|
34
|
-
import "./chunk-
|
|
35
|
-
import "./chunk-
|
|
34
|
+
} from "./chunk-XTD7TZHW.js";
|
|
35
|
+
import "./chunk-5I4VRWBB.js";
|
|
36
|
+
import "./chunk-TXS65BB2.js";
|
|
36
37
|
|
|
37
38
|
// src/hooks/use-network-routes.ts
|
|
38
39
|
import { useCallback, useEffect, useRef, useState } from "react";
|
package/dist/interaction.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/hooks/use-network-routes.ts","../src/hooks/use-auth-runs.ts"],"sourcesContent":["import type {\n CreateNetworkRouteRequest,\n NetworkRoute,\n NetworkRouteMutationResponse,\n UpdateNetworkRouteRequest,\n} from \"@opengeni/sdk/interaction\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport type { EmbeddedBrowserInteractionClientLike } from \"../client\";\nimport {\n type EmbeddedBrowserInteractionClientOverride,\n useEmbeddedBrowserInteraction,\n} from \"../session-context\";\nimport { useInteractionInvalidation } from \"./use-interaction-invalidation\";\n\nexport type UseNetworkRoutesOptions = EmbeddedBrowserInteractionClientOverride & {\n enabled?: boolean | undefined;\n includeArchived?: boolean | undefined;\n};\n\nexport type UseNetworkRoutesResult = {\n revision: number;\n routes: NetworkRoute[];\n loading: boolean;\n refreshing: boolean;\n mutating: boolean;\n error: Error | null;\n refresh: () => Promise<void>;\n create: (\n request: Omit<CreateNetworkRouteRequest, \"operationId\"> & { operationId?: string },\n ) => Promise<NetworkRouteMutationResponse>;\n update: (\n networkRouteId: string,\n request: Omit<UpdateNetworkRouteRequest, \"operationId\"> & { operationId?: string },\n ) => Promise<NetworkRouteMutationResponse>;\n};\n\n/** Workspace network-route registry. Route mutations never expose brokered credentials. */\nexport function useNetworkRoutes(options: UseNetworkRoutesOptions = {}): UseNetworkRoutesResult {\n const { client, workspaceId, workspaceInteractionEvent, workspaceInteractionConnectionState } =\n useEmbeddedBrowserInteraction(options);\n const enabled = options.enabled ?? true;\n const includeArchived = options.includeArchived ?? false;\n const key = `${workspaceId}:${includeArchived ? \"all\" : \"active\"}`;\n const [state, setState] = useState(() => emptyState(key, enabled));\n const [mutationCount, setMutationCount] = useState(0);\n const requestRef = useRef<{ id: number; controller: AbortController | null }>({\n id: 0,\n controller: null,\n });\n const mountedRef = useRef(true);\n const visible = state.key === key ? state : emptyState(key, enabled);\n\n const cancelLoad = useCallback(() => {\n requestRef.current.controller?.abort();\n requestRef.current = { id: requestRef.current.id + 1, controller: null };\n }, []);\n\n const load = useCallback(\n async (foreground: boolean): Promise<void> => {\n if (!enabled) return;\n const id = requestRef.current.id + 1;\n requestRef.current.controller?.abort();\n const controller = new AbortController();\n requestRef.current = { id, controller };\n setState((current) => ({\n ...(current.key === key ? current : emptyState(key, true)),\n loading: foreground,\n refreshing: !foreground,\n error: foreground || current.key !== key ? null : current.error,\n }));\n try {\n const response = await client.listNetworkRoutes(workspaceId, {\n includeArchived,\n signal: controller.signal,\n });\n if (!mountedRef.current || requestRef.current.id !== id) return;\n setState({\n key,\n revision: response.revision,\n routes: sortRoutes(response.routes),\n loading: false,\n refreshing: false,\n error: null,\n });\n } catch (cause) {\n if (controller.signal.aborted || !mountedRef.current || requestRef.current.id !== id)\n return;\n setState((current) => ({\n ...(current.key === key ? current : emptyState(key, true)),\n loading: false,\n refreshing: false,\n error: asError(cause),\n }));\n } finally {\n if (requestRef.current.id === id) requestRef.current = { id, controller: null };\n }\n },\n [client, enabled, includeArchived, key, workspaceId],\n );\n\n useEffect(() => {\n mountedRef.current = true;\n if (!enabled) {\n cancelLoad();\n setState(emptyState(key, false));\n return;\n }\n void load(true);\n return () => {\n mountedRef.current = false;\n cancelLoad();\n };\n }, [cancelLoad, enabled, key, load]);\n\n const refresh = useCallback(async () => await load(false), [load]);\n useInteractionInvalidation({\n workspaceId,\n key,\n enabled,\n event: workspaceInteractionEvent,\n connectionState: workspaceInteractionConnectionState,\n knownRevision: visible.revision,\n refresh,\n });\n\n const mutate = useCallback(async <T>(operation: () => Promise<T>): Promise<T> => {\n setMutationCount((count) => count + 1);\n try {\n return await operation();\n } finally {\n if (mountedRef.current) setMutationCount((count) => Math.max(0, count - 1));\n }\n }, []);\n\n const merge = useCallback(\n (route: NetworkRoute) => {\n setState((current) => {\n if (current.key !== key) return current;\n const routes = current.routes.filter((candidate) => candidate.id !== route.id);\n if (includeArchived || route.status !== \"archived\") routes.push(route);\n return { ...current, routes: sortRoutes(routes), error: null };\n });\n },\n [includeArchived, key],\n );\n\n const create = useCallback(\n async (\n request: Omit<CreateNetworkRouteRequest, \"operationId\"> & { operationId?: string },\n ): Promise<NetworkRouteMutationResponse> =>\n await mutate(async () => {\n const response = await client.createNetworkRoute(workspaceId, {\n ...request,\n operationId: request.operationId ?? crypto.randomUUID(),\n });\n merge(response.route);\n return response;\n }),\n [client, merge, mutate, workspaceId],\n );\n\n const update = useCallback(\n async (\n networkRouteId: string,\n request: Omit<UpdateNetworkRouteRequest, \"operationId\"> & { operationId?: string },\n ): Promise<NetworkRouteMutationResponse> =>\n await mutate(async () => {\n const response = await client.updateNetworkRoute(workspaceId, networkRouteId, {\n ...request,\n operationId: request.operationId ?? crypto.randomUUID(),\n });\n merge(response.route);\n return response;\n }),\n [client, merge, mutate, workspaceId],\n );\n\n return {\n revision: visible.revision,\n routes: visible.routes,\n loading: visible.loading,\n refreshing: visible.refreshing,\n mutating: mutationCount > 0,\n error: visible.error,\n refresh,\n create,\n update,\n };\n}\n\nfunction emptyState(key: string, loading: boolean) {\n return {\n key,\n revision: 0,\n routes: [] as NetworkRoute[],\n loading,\n refreshing: false,\n error: null as Error | null,\n };\n}\n\nfunction sortRoutes(routes: readonly NetworkRoute[]): NetworkRoute[] {\n return [...routes].sort(\n (left, right) =>\n Number(left.status === \"archived\") - Number(right.status === \"archived\") ||\n left.name.localeCompare(right.name),\n );\n}\n\nfunction asError(cause: unknown): Error {\n return cause instanceof Error ? cause : new Error(String(cause));\n}\n\nexport type NetworkRoutesClient = EmbeddedBrowserInteractionClientLike;\n","import type {\n AuthRun,\n AuthRunMutationResponse,\n ProtectedAuthFillRequest,\n ProtectedAuthFillResponse,\n ReportAuthRunRequest,\n StartAuthRunRequest,\n VerifyAuthRunRequest,\n} from \"@opengeni/sdk/interaction\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport type { EmbeddedBrowserInteractionClientLike } from \"../client\";\nimport {\n type EmbeddedBrowserInteractionClientOverride,\n useEmbeddedBrowserInteraction,\n} from \"../session-context\";\nimport { useInteractionInvalidation } from \"./use-interaction-invalidation\";\n\nexport type UseAuthRunsOptions = EmbeddedBrowserInteractionClientOverride & {\n enabled?: boolean | undefined;\n browserSessionId?: string | null | undefined;\n siteAuthConnectionId?: string | null | undefined;\n includeSettled?: boolean | undefined;\n};\n\nexport type UseAuthRunsResult = {\n runs: AuthRun[];\n loading: boolean;\n refreshing: boolean;\n mutating: boolean;\n error: Error | null;\n refresh: () => Promise<void>;\n start: (\n browserSessionId: string,\n request: Omit<StartAuthRunRequest, \"operationId\"> & { operationId?: string },\n ) => Promise<AuthRunMutationResponse>;\n report: (\n browserSessionId: string,\n authRunId: string,\n request: Omit<ReportAuthRunRequest, \"operationId\"> & { operationId?: string },\n ) => Promise<AuthRunMutationResponse>;\n protectedFill: (\n browserSessionId: string,\n authRunId: string,\n request: Omit<ProtectedAuthFillRequest, \"operationId\"> & { operationId?: string },\n ) => Promise<ProtectedAuthFillResponse>;\n verify: (\n browserSessionId: string,\n authRunId: string,\n request: Omit<VerifyAuthRunRequest, \"operationId\"> & { operationId?: string },\n ) => Promise<AuthRunMutationResponse>;\n};\n\n/** Live authentication state machines tied to exact browser document generations. */\nexport function useAuthRuns(options: UseAuthRunsOptions = {}): UseAuthRunsResult {\n const { client, workspaceId, workspaceInteractionEvent, workspaceInteractionConnectionState } =\n useEmbeddedBrowserInteraction(options);\n const enabled = options.enabled ?? true;\n const browserSessionId = options.browserSessionId ?? null;\n const siteAuthConnectionId = options.siteAuthConnectionId ?? null;\n const includeSettled = options.includeSettled ?? false;\n const key = `${workspaceId}:${browserSessionId ?? \"*\"}:${siteAuthConnectionId ?? \"*\"}:${includeSettled}`;\n const [state, setState] = useState(() => emptyState(key, enabled));\n const [mutationCount, setMutationCount] = useState(0);\n const requestRef = useRef<{ id: number; controller: AbortController | null }>({\n id: 0,\n controller: null,\n });\n const mountedRef = useRef(true);\n const visible = state.key === key ? state : emptyState(key, enabled);\n\n const cancelLoad = useCallback(() => {\n requestRef.current.controller?.abort();\n requestRef.current = { id: requestRef.current.id + 1, controller: null };\n }, []);\n\n const load = useCallback(\n async (foreground: boolean): Promise<void> => {\n if (!enabled) return;\n const id = requestRef.current.id + 1;\n requestRef.current.controller?.abort();\n const controller = new AbortController();\n requestRef.current = { id, controller };\n setState((current) => ({\n ...(current.key === key ? current : emptyState(key, true)),\n loading: foreground,\n refreshing: !foreground,\n error: foreground || current.key !== key ? null : current.error,\n }));\n try {\n const response = await client.listAuthRuns(workspaceId, {\n ...(browserSessionId ? { browserSessionId } : {}),\n ...(siteAuthConnectionId ? { siteAuthConnectionId } : {}),\n includeSettled,\n signal: controller.signal,\n });\n if (!mountedRef.current || requestRef.current.id !== id) return;\n setState({\n key,\n runs: sortRuns(response.runs),\n loading: false,\n refreshing: false,\n error: null,\n });\n } catch (cause) {\n if (controller.signal.aborted || !mountedRef.current || requestRef.current.id !== id)\n return;\n setState((current) => ({\n ...(current.key === key ? current : emptyState(key, true)),\n loading: false,\n refreshing: false,\n error: asError(cause),\n }));\n } finally {\n if (requestRef.current.id === id) requestRef.current = { id, controller: null };\n }\n },\n [browserSessionId, client, enabled, includeSettled, key, siteAuthConnectionId, workspaceId],\n );\n\n const refresh = useCallback(async () => await load(false), [load]);\n\n useEffect(() => {\n mountedRef.current = true;\n if (!enabled) {\n cancelLoad();\n setState(emptyState(key, false));\n return;\n }\n void load(true);\n return () => {\n mountedRef.current = false;\n cancelLoad();\n };\n }, [cancelLoad, enabled, key, load]);\n\n useInteractionInvalidation({\n workspaceId,\n key,\n enabled,\n event: workspaceInteractionEvent,\n connectionState: workspaceInteractionConnectionState,\n refresh,\n });\n\n const mutate = useCallback(async <T>(operation: () => Promise<T>): Promise<T> => {\n setMutationCount((count) => count + 1);\n try {\n return await operation();\n } finally {\n if (mountedRef.current) setMutationCount((count) => Math.max(0, count - 1));\n }\n }, []);\n\n const merge = useCallback(\n (run: AuthRun) => {\n setState((current) => {\n if (current.key !== key) return current;\n const runs = current.runs.filter((candidate) => candidate.id !== run.id);\n const matches =\n (!browserSessionId || run.browserSessionId === browserSessionId) &&\n (!siteAuthConnectionId || run.siteAuthConnectionId === siteAuthConnectionId);\n if (matches && (includeSettled || !isSettled(run))) runs.push(run);\n return { ...current, runs: sortRuns(runs), error: null };\n });\n },\n [browserSessionId, includeSettled, key, siteAuthConnectionId],\n );\n\n const start = useCallback(\n async (\n scopeBrowserSessionId: string,\n request: Omit<StartAuthRunRequest, \"operationId\"> & { operationId?: string },\n ): Promise<AuthRunMutationResponse> =>\n await mutate(async () => {\n const response = await client.startBrowserAuthRun(workspaceId, scopeBrowserSessionId, {\n ...request,\n operationId: request.operationId ?? crypto.randomUUID(),\n });\n merge(response.run);\n return response;\n }),\n [client, merge, mutate, workspaceId],\n );\n\n const report = useCallback(\n async (\n scopeBrowserSessionId: string,\n authRunId: string,\n request: Omit<ReportAuthRunRequest, \"operationId\"> & { operationId?: string },\n ): Promise<AuthRunMutationResponse> =>\n await mutate(async () => {\n const response = await client.reportBrowserAuthRun(\n workspaceId,\n scopeBrowserSessionId,\n authRunId,\n { ...request, operationId: request.operationId ?? crypto.randomUUID() },\n );\n merge(response.run);\n return response;\n }),\n [client, merge, mutate, workspaceId],\n );\n\n const protectedFill = useCallback(\n async (\n scopeBrowserSessionId: string,\n authRunId: string,\n request: Omit<ProtectedAuthFillRequest, \"operationId\"> & { operationId?: string },\n ): Promise<ProtectedAuthFillResponse> =>\n await mutate(async () => {\n const response = await client.protectedBrowserAuthFill(\n workspaceId,\n scopeBrowserSessionId,\n authRunId,\n { ...request, operationId: request.operationId ?? crypto.randomUUID() },\n );\n merge(response.run);\n return response;\n }),\n [client, merge, mutate, workspaceId],\n );\n\n const verify = useCallback(\n async (\n scopeBrowserSessionId: string,\n authRunId: string,\n request: Omit<VerifyAuthRunRequest, \"operationId\"> & { operationId?: string },\n ): Promise<AuthRunMutationResponse> =>\n await mutate(async () => {\n const response = await client.verifyBrowserAuthRun(\n workspaceId,\n scopeBrowserSessionId,\n authRunId,\n { ...request, operationId: request.operationId ?? crypto.randomUUID() },\n );\n merge(response.run);\n return response;\n }),\n [client, merge, mutate, workspaceId],\n );\n\n return {\n runs: visible.runs,\n loading: visible.loading,\n refreshing: visible.refreshing,\n mutating: mutationCount > 0,\n error: visible.error,\n refresh,\n start,\n report,\n protectedFill,\n verify,\n };\n}\n\nfunction emptyState(key: string, loading: boolean) {\n return {\n key,\n runs: [] as AuthRun[],\n loading,\n refreshing: false,\n error: null as Error | null,\n };\n}\n\nfunction sortRuns(runs: readonly AuthRun[]): AuthRun[] {\n return [...runs].sort((left, right) => Date.parse(right.updatedAt) - Date.parse(left.updatedAt));\n}\n\nfunction isSettled(run: AuthRun): boolean {\n return run.state === \"verified\" || run.state === \"failed\" || run.state === \"cancelled\";\n}\n\nfunction asError(cause: unknown): Error {\n return cause instanceof Error ? cause : new Error(String(cause));\n}\n\nexport type AuthRunsClient = EmbeddedBrowserInteractionClientLike;\n"],"mappings":"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","names":["useCallback","useEffect","useRef","useState","useState","emptyState","useRef","useCallback","asError","useEffect"]}
|
|
1
|
+
{"version":3,"sources":["../src/hooks/use-network-routes.ts","../src/hooks/use-auth-runs.ts"],"sourcesContent":["import type {\n CreateNetworkRouteRequest,\n NetworkRoute,\n NetworkRouteMutationResponse,\n UpdateNetworkRouteRequest,\n} from \"@opengeni/sdk/interaction\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport type { EmbeddedBrowserInteractionClientLike } from \"../client\";\nimport {\n type EmbeddedBrowserInteractionClientOverride,\n useEmbeddedBrowserInteraction,\n} from \"../session-context\";\nimport { useInteractionInvalidation } from \"./use-interaction-invalidation\";\n\nexport type UseNetworkRoutesOptions = EmbeddedBrowserInteractionClientOverride & {\n enabled?: boolean | undefined;\n includeArchived?: boolean | undefined;\n};\n\nexport type UseNetworkRoutesResult = {\n revision: number;\n routes: NetworkRoute[];\n loading: boolean;\n refreshing: boolean;\n mutating: boolean;\n error: Error | null;\n refresh: () => Promise<void>;\n create: (\n request: Omit<CreateNetworkRouteRequest, \"operationId\"> & { operationId?: string },\n ) => Promise<NetworkRouteMutationResponse>;\n update: (\n networkRouteId: string,\n request: Omit<UpdateNetworkRouteRequest, \"operationId\"> & { operationId?: string },\n ) => Promise<NetworkRouteMutationResponse>;\n};\n\n/** Workspace network-route registry. Route mutations never expose brokered credentials. */\nexport function useNetworkRoutes(options: UseNetworkRoutesOptions = {}): UseNetworkRoutesResult {\n const { client, workspaceId, workspaceInteractionEvent, workspaceInteractionConnectionState } =\n useEmbeddedBrowserInteraction(options);\n const enabled = options.enabled ?? true;\n const includeArchived = options.includeArchived ?? false;\n const key = `${workspaceId}:${includeArchived ? \"all\" : \"active\"}`;\n const [state, setState] = useState(() => emptyState(key, enabled));\n const [mutationCount, setMutationCount] = useState(0);\n const requestRef = useRef<{ id: number; controller: AbortController | null }>({\n id: 0,\n controller: null,\n });\n const mountedRef = useRef(true);\n const visible = state.key === key ? state : emptyState(key, enabled);\n\n const cancelLoad = useCallback(() => {\n requestRef.current.controller?.abort();\n requestRef.current = { id: requestRef.current.id + 1, controller: null };\n }, []);\n\n const load = useCallback(\n async (foreground: boolean): Promise<void> => {\n if (!enabled) return;\n const id = requestRef.current.id + 1;\n requestRef.current.controller?.abort();\n const controller = new AbortController();\n requestRef.current = { id, controller };\n setState((current) => ({\n ...(current.key === key ? current : emptyState(key, true)),\n loading: foreground,\n refreshing: !foreground,\n error: foreground || current.key !== key ? null : current.error,\n }));\n try {\n const response = await client.listNetworkRoutes(workspaceId, {\n includeArchived,\n signal: controller.signal,\n });\n if (!mountedRef.current || requestRef.current.id !== id) return;\n setState({\n key,\n revision: response.revision,\n routes: sortRoutes(response.routes),\n loading: false,\n refreshing: false,\n error: null,\n });\n } catch (cause) {\n if (controller.signal.aborted || !mountedRef.current || requestRef.current.id !== id)\n return;\n setState((current) => ({\n ...(current.key === key ? current : emptyState(key, true)),\n loading: false,\n refreshing: false,\n error: asError(cause),\n }));\n } finally {\n if (requestRef.current.id === id) requestRef.current = { id, controller: null };\n }\n },\n [client, enabled, includeArchived, key, workspaceId],\n );\n\n useEffect(() => {\n mountedRef.current = true;\n if (!enabled) {\n cancelLoad();\n setState(emptyState(key, false));\n return;\n }\n void load(true);\n return () => {\n mountedRef.current = false;\n cancelLoad();\n };\n }, [cancelLoad, enabled, key, load]);\n\n const refresh = useCallback(async () => await load(false), [load]);\n useInteractionInvalidation({\n workspaceId,\n key,\n enabled,\n event: workspaceInteractionEvent,\n connectionState: workspaceInteractionConnectionState,\n knownRevision: visible.revision,\n refresh,\n });\n\n const mutate = useCallback(async <T>(operation: () => Promise<T>): Promise<T> => {\n setMutationCount((count) => count + 1);\n try {\n return await operation();\n } finally {\n if (mountedRef.current) setMutationCount((count) => Math.max(0, count - 1));\n }\n }, []);\n\n const merge = useCallback(\n (route: NetworkRoute) => {\n setState((current) => {\n if (current.key !== key) return current;\n const routes = current.routes.filter((candidate) => candidate.id !== route.id);\n if (includeArchived || route.status !== \"archived\") routes.push(route);\n return { ...current, routes: sortRoutes(routes), error: null };\n });\n },\n [includeArchived, key],\n );\n\n const create = useCallback(\n async (\n request: Omit<CreateNetworkRouteRequest, \"operationId\"> & { operationId?: string },\n ): Promise<NetworkRouteMutationResponse> =>\n await mutate(async () => {\n const response = await client.createNetworkRoute(workspaceId, {\n ...request,\n operationId: request.operationId ?? crypto.randomUUID(),\n });\n merge(response.route);\n return response;\n }),\n [client, merge, mutate, workspaceId],\n );\n\n const update = useCallback(\n async (\n networkRouteId: string,\n request: Omit<UpdateNetworkRouteRequest, \"operationId\"> & { operationId?: string },\n ): Promise<NetworkRouteMutationResponse> =>\n await mutate(async () => {\n const response = await client.updateNetworkRoute(workspaceId, networkRouteId, {\n ...request,\n operationId: request.operationId ?? crypto.randomUUID(),\n });\n merge(response.route);\n return response;\n }),\n [client, merge, mutate, workspaceId],\n );\n\n return {\n revision: visible.revision,\n routes: visible.routes,\n loading: visible.loading,\n refreshing: visible.refreshing,\n mutating: mutationCount > 0,\n error: visible.error,\n refresh,\n create,\n update,\n };\n}\n\nfunction emptyState(key: string, loading: boolean) {\n return {\n key,\n revision: 0,\n routes: [] as NetworkRoute[],\n loading,\n refreshing: false,\n error: null as Error | null,\n };\n}\n\nfunction sortRoutes(routes: readonly NetworkRoute[]): NetworkRoute[] {\n return [...routes].sort(\n (left, right) =>\n Number(left.status === \"archived\") - Number(right.status === \"archived\") ||\n left.name.localeCompare(right.name),\n );\n}\n\nfunction asError(cause: unknown): Error {\n return cause instanceof Error ? cause : new Error(String(cause));\n}\n\nexport type NetworkRoutesClient = EmbeddedBrowserInteractionClientLike;\n","import type {\n AuthRun,\n AuthRunMutationResponse,\n ProtectedAuthFillRequest,\n ProtectedAuthFillResponse,\n ReportAuthRunRequest,\n StartAuthRunRequest,\n VerifyAuthRunRequest,\n} from \"@opengeni/sdk/interaction\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport type { EmbeddedBrowserInteractionClientLike } from \"../client\";\nimport {\n type EmbeddedBrowserInteractionClientOverride,\n useEmbeddedBrowserInteraction,\n} from \"../session-context\";\nimport { useInteractionInvalidation } from \"./use-interaction-invalidation\";\n\nexport type UseAuthRunsOptions = EmbeddedBrowserInteractionClientOverride & {\n enabled?: boolean | undefined;\n browserSessionId?: string | null | undefined;\n siteAuthConnectionId?: string | null | undefined;\n includeSettled?: boolean | undefined;\n};\n\nexport type UseAuthRunsResult = {\n runs: AuthRun[];\n loading: boolean;\n refreshing: boolean;\n mutating: boolean;\n error: Error | null;\n refresh: () => Promise<void>;\n start: (\n browserSessionId: string,\n request: Omit<StartAuthRunRequest, \"operationId\"> & { operationId?: string },\n ) => Promise<AuthRunMutationResponse>;\n report: (\n browserSessionId: string,\n authRunId: string,\n request: Omit<ReportAuthRunRequest, \"operationId\"> & { operationId?: string },\n ) => Promise<AuthRunMutationResponse>;\n protectedFill: (\n browserSessionId: string,\n authRunId: string,\n request: Omit<ProtectedAuthFillRequest, \"operationId\"> & { operationId?: string },\n ) => Promise<ProtectedAuthFillResponse>;\n verify: (\n browserSessionId: string,\n authRunId: string,\n request: Omit<VerifyAuthRunRequest, \"operationId\"> & { operationId?: string },\n ) => Promise<AuthRunMutationResponse>;\n};\n\n/** Live authentication state machines tied to exact browser document generations. */\nexport function useAuthRuns(options: UseAuthRunsOptions = {}): UseAuthRunsResult {\n const { client, workspaceId, workspaceInteractionEvent, workspaceInteractionConnectionState } =\n useEmbeddedBrowserInteraction(options);\n const enabled = options.enabled ?? true;\n const browserSessionId = options.browserSessionId ?? null;\n const siteAuthConnectionId = options.siteAuthConnectionId ?? null;\n const includeSettled = options.includeSettled ?? false;\n const key = `${workspaceId}:${browserSessionId ?? \"*\"}:${siteAuthConnectionId ?? \"*\"}:${includeSettled}`;\n const [state, setState] = useState(() => emptyState(key, enabled));\n const [mutationCount, setMutationCount] = useState(0);\n const requestRef = useRef<{ id: number; controller: AbortController | null }>({\n id: 0,\n controller: null,\n });\n const mountedRef = useRef(true);\n const visible = state.key === key ? state : emptyState(key, enabled);\n\n const cancelLoad = useCallback(() => {\n requestRef.current.controller?.abort();\n requestRef.current = { id: requestRef.current.id + 1, controller: null };\n }, []);\n\n const load = useCallback(\n async (foreground: boolean): Promise<void> => {\n if (!enabled) return;\n const id = requestRef.current.id + 1;\n requestRef.current.controller?.abort();\n const controller = new AbortController();\n requestRef.current = { id, controller };\n setState((current) => ({\n ...(current.key === key ? current : emptyState(key, true)),\n loading: foreground,\n refreshing: !foreground,\n error: foreground || current.key !== key ? null : current.error,\n }));\n try {\n const response = await client.listAuthRuns(workspaceId, {\n ...(browserSessionId ? { browserSessionId } : {}),\n ...(siteAuthConnectionId ? { siteAuthConnectionId } : {}),\n includeSettled,\n signal: controller.signal,\n });\n if (!mountedRef.current || requestRef.current.id !== id) return;\n setState({\n key,\n runs: sortRuns(response.runs),\n loading: false,\n refreshing: false,\n error: null,\n });\n } catch (cause) {\n if (controller.signal.aborted || !mountedRef.current || requestRef.current.id !== id)\n return;\n setState((current) => ({\n ...(current.key === key ? current : emptyState(key, true)),\n loading: false,\n refreshing: false,\n error: asError(cause),\n }));\n } finally {\n if (requestRef.current.id === id) requestRef.current = { id, controller: null };\n }\n },\n [browserSessionId, client, enabled, includeSettled, key, siteAuthConnectionId, workspaceId],\n );\n\n const refresh = useCallback(async () => await load(false), [load]);\n\n useEffect(() => {\n mountedRef.current = true;\n if (!enabled) {\n cancelLoad();\n setState(emptyState(key, false));\n return;\n }\n void load(true);\n return () => {\n mountedRef.current = false;\n cancelLoad();\n };\n }, [cancelLoad, enabled, key, load]);\n\n useInteractionInvalidation({\n workspaceId,\n key,\n enabled,\n event: workspaceInteractionEvent,\n connectionState: workspaceInteractionConnectionState,\n refresh,\n });\n\n const mutate = useCallback(async <T>(operation: () => Promise<T>): Promise<T> => {\n setMutationCount((count) => count + 1);\n try {\n return await operation();\n } finally {\n if (mountedRef.current) setMutationCount((count) => Math.max(0, count - 1));\n }\n }, []);\n\n const merge = useCallback(\n (run: AuthRun) => {\n setState((current) => {\n if (current.key !== key) return current;\n const runs = current.runs.filter((candidate) => candidate.id !== run.id);\n const matches =\n (!browserSessionId || run.browserSessionId === browserSessionId) &&\n (!siteAuthConnectionId || run.siteAuthConnectionId === siteAuthConnectionId);\n if (matches && (includeSettled || !isSettled(run))) runs.push(run);\n return { ...current, runs: sortRuns(runs), error: null };\n });\n },\n [browserSessionId, includeSettled, key, siteAuthConnectionId],\n );\n\n const start = useCallback(\n async (\n scopeBrowserSessionId: string,\n request: Omit<StartAuthRunRequest, \"operationId\"> & { operationId?: string },\n ): Promise<AuthRunMutationResponse> =>\n await mutate(async () => {\n const response = await client.startBrowserAuthRun(workspaceId, scopeBrowserSessionId, {\n ...request,\n operationId: request.operationId ?? crypto.randomUUID(),\n });\n merge(response.run);\n return response;\n }),\n [client, merge, mutate, workspaceId],\n );\n\n const report = useCallback(\n async (\n scopeBrowserSessionId: string,\n authRunId: string,\n request: Omit<ReportAuthRunRequest, \"operationId\"> & { operationId?: string },\n ): Promise<AuthRunMutationResponse> =>\n await mutate(async () => {\n const response = await client.reportBrowserAuthRun(\n workspaceId,\n scopeBrowserSessionId,\n authRunId,\n { ...request, operationId: request.operationId ?? crypto.randomUUID() },\n );\n merge(response.run);\n return response;\n }),\n [client, merge, mutate, workspaceId],\n );\n\n const protectedFill = useCallback(\n async (\n scopeBrowserSessionId: string,\n authRunId: string,\n request: Omit<ProtectedAuthFillRequest, \"operationId\"> & { operationId?: string },\n ): Promise<ProtectedAuthFillResponse> =>\n await mutate(async () => {\n const response = await client.protectedBrowserAuthFill(\n workspaceId,\n scopeBrowserSessionId,\n authRunId,\n { ...request, operationId: request.operationId ?? crypto.randomUUID() },\n );\n merge(response.run);\n return response;\n }),\n [client, merge, mutate, workspaceId],\n );\n\n const verify = useCallback(\n async (\n scopeBrowserSessionId: string,\n authRunId: string,\n request: Omit<VerifyAuthRunRequest, \"operationId\"> & { operationId?: string },\n ): Promise<AuthRunMutationResponse> =>\n await mutate(async () => {\n const response = await client.verifyBrowserAuthRun(\n workspaceId,\n scopeBrowserSessionId,\n authRunId,\n { ...request, operationId: request.operationId ?? crypto.randomUUID() },\n );\n merge(response.run);\n return response;\n }),\n [client, merge, mutate, workspaceId],\n );\n\n return {\n runs: visible.runs,\n loading: visible.loading,\n refreshing: visible.refreshing,\n mutating: mutationCount > 0,\n error: visible.error,\n refresh,\n start,\n report,\n protectedFill,\n verify,\n };\n}\n\nfunction emptyState(key: string, loading: boolean) {\n return {\n key,\n runs: [] as AuthRun[],\n loading,\n refreshing: false,\n error: null as Error | null,\n };\n}\n\nfunction sortRuns(runs: readonly AuthRun[]): AuthRun[] {\n return [...runs].sort((left, right) => Date.parse(right.updatedAt) - Date.parse(left.updatedAt));\n}\n\nfunction isSettled(run: AuthRun): boolean {\n return run.state === \"verified\" || run.state === \"failed\" || run.state === \"cancelled\";\n}\n\nfunction asError(cause: unknown): Error {\n return cause instanceof Error ? cause : new Error(String(cause));\n}\n\nexport type AuthRunsClient = EmbeddedBrowserInteractionClientLike;\n"],"mappings":"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","names":["useCallback","useEffect","useRef","useState","useState","emptyState","useRef","useCallback","asError","useEffect"]}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
+
"use client";
|
|
1
2
|
import {
|
|
2
3
|
isTimelineUserQuestion,
|
|
3
4
|
isTurnExecutionEvidence,
|
|
4
5
|
timelineQuestionPlacement
|
|
5
|
-
} from "./chunk-
|
|
6
|
-
import "./chunk-
|
|
7
|
-
import "./chunk-
|
|
6
|
+
} from "./chunk-QMMCJGFI.js";
|
|
7
|
+
import "./chunk-T46QZH3E.js";
|
|
8
|
+
import "./chunk-LVS3MH5T.js";
|
|
8
9
|
|
|
9
10
|
// src/hooks/latest-question.ts
|
|
10
11
|
import { SESSION_EVENT_TYPES } from "@opengeni/sdk";
|
|
@@ -114,4 +115,4 @@ export {
|
|
|
114
115
|
TIMELINE_TURN_ANCHOR_EVENT_TYPES,
|
|
115
116
|
resolveLatestQuestion
|
|
116
117
|
};
|
|
117
|
-
//# sourceMappingURL=latest-question-
|
|
118
|
+
//# sourceMappingURL=latest-question-2POFPYNB.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/hooks/latest-question.ts"],"sourcesContent":["import { SESSION_EVENT_TYPES, type SessionEvent, type SessionTurn } from \"@opengeni/sdk\";\nimport type { EmbeddedSessionClientLike } from \"../client\";\nimport {\n isTimelineUserQuestion,\n isTurnExecutionEvidence,\n timelineQuestionPlacement,\n} from \"../timeline/projection\";\n\nexport type LatestQuestionOptions = {\n /** Check navigation.isCurrent() after awaits and immediately before UI effects. */\n onQueuedQuestion?: (\n turn: SessionTurn,\n navigation: { isCurrent: () => boolean },\n ) => void | Promise<void>;\n};\n\n/** Include every canonical execution fallback, not just turn.started. Derive\n * this optional navigation index only when the user requests Latest question. */\nexport const TIMELINE_TURN_ANCHOR_EVENT_TYPES = SESSION_EVENT_TYPES.filter(\n (type) =>\n isTurnExecutionEvidence(type) ||\n type === \"turn.queued\" ||\n type === \"turn.started\" ||\n type === \"turn.cancelled\" ||\n type === \"session.queue.changed\" ||\n type === \"session.control.steer_requested\",\n);\n\n/** Resolve an optional navigation destination without owning the hook's window\n * or React state. The caller guards errors and applies only a current result. */\nexport async function resolveLatestQuestion({\n client,\n workspaceId,\n sessionId,\n isCurrent,\n resumeSequence,\n options,\n}: {\n client: EmbeddedSessionClientLike;\n workspaceId: string;\n sessionId: string;\n isCurrent: () => boolean;\n resumeSequence: (events: readonly SessionEvent[]) => number;\n options?: LatestQuestionOptions | undefined;\n}): Promise<{ questionSequence: number; anchor: number; events: SessionEvent[] } | null> {\n let before: number | undefined;\n while (true) {\n const latest = await client.listEvents(workspaceId, sessionId, {\n direction: \"before\",\n includeTypes: [\"user.message\"],\n // Historical worker completions also used user.message; page only this\n // filtered index when they occupy the tail.\n limit: before === undefined ? 1 : 64,\n ...(before === undefined ? {} : { before }),\n payloadMode: \"full\",\n mode: \"forensic\",\n });\n if (!isCurrent()) return null;\n // Keep legacy childCompletion classification aligned with the transcript.\n const question = [...latest]\n .sort((a, b) => b.sequence - a.sequence)\n .find(isTimelineUserQuestion);\n if (question) {\n const queue = await client.getQueue(workspaceId, sessionId);\n if (!isCurrent()) return null;\n const pending = queue.items.find(\n (turn) => turn.triggerEventId === question.id && turn.metadata.delivery !== \"steer\",\n );\n if (pending) {\n if (!options?.onQueuedQuestion) {\n const reason = new Error(\"The latest question is in the prompt queue.\");\n reason.name = \"LatestQuestionQueuedError\";\n throw reason;\n }\n await options.onQueuedQuestion(pending, { isCurrent });\n if (!isCurrent()) return null;\n // Queue refresh/focus can race a claim or withdrawal. Resolve that\n // transition below instead of settling on a row that just vanished.\n const refreshedQueue = await client.getQueue(workspaceId, sessionId);\n if (!isCurrent()) return null;\n if (\n refreshedQueue.items.some(\n (turn) => turn.triggerEventId === question.id && turn.metadata.delivery !== \"steer\",\n )\n )\n return null;\n }\n const evidence: SessionEvent[] = [];\n const payload =\n question.payload != null && typeof question.payload === \"object\"\n ? (question.payload as Record<string, unknown>)\n : {};\n // Explicit direct admission needs no lifecycle lookup. Older ledgers and\n // queued admission need their durable start/withdrawal witnesses.\n if (\n payload.routing !== \"accepted_for_execution\" &&\n payload.routing !== \"accepted_for_steering\" &&\n payload.delivery !== \"steer\"\n ) {\n let lifecycleAfter = question.sequence;\n while (true) {\n const page = await client.listEvents(workspaceId, sessionId, {\n direction: \"after\",\n after: lifecycleAfter,\n limit: 128,\n compact: true,\n mode: \"forensic\",\n payloadMode: \"full\",\n includeTypes: TIMELINE_TURN_ANCHOR_EVENT_TYPES,\n });\n if (!isCurrent()) return null;\n const next = Math.max(lifecycleAfter, resumeSequence(page));\n if (next === lifecycleAfter) break;\n const queued =\n page.find(\n (event) =>\n event.type === \"turn.queued\" &&\n ((event.payload ?? {}) as Record<string, unknown>).triggerEventId === question.id,\n ) ?? evidence.find((event) => event.type === \"turn.queued\");\n const turnId =\n queued && (((queued.payload ?? {}) as Record<string, unknown>).turnId ?? queued.turnId);\n evidence.push(\n ...page.filter((event) => {\n const data = (event.payload ?? {}) as Record<string, unknown>;\n return (\n data.triggerEventId === question.id ||\n (turnId != null &&\n (event.turnId === turnId ||\n data.turnId === turnId ||\n data.targetTurnId === turnId))\n );\n }),\n );\n lifecycleAfter = next;\n const placed = timelineQuestionPlacement(question, evidence);\n if (placed.kind === \"visible\" && placed.sequence !== question.sequence) break;\n }\n }\n const placement = timelineQuestionPlacement(question, evidence);\n if (placement.kind === \"withdrawn\") {\n before = question.sequence;\n continue;\n }\n if (placement.kind === \"pending\")\n throw new Error(\"The latest question is changing queue state. Try again.\");\n return {\n questionSequence: question.sequence,\n anchor: placement.sequence,\n events: [\n question,\n ...evidence.filter(\n (event) =>\n event.type === \"turn.queued\" &&\n ((event.payload ?? {}) as Record<string, unknown>).triggerEventId === question.id,\n ),\n ],\n };\n }\n const oldest = Math.min(...latest.map((event) => event.sequence));\n if (!Number.isSafeInteger(oldest) || oldest <= 1 || (before !== undefined && oldest >= before))\n return null;\n before = oldest;\n }\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../src/hooks/latest-question.ts"],"sourcesContent":["import { SESSION_EVENT_TYPES, type SessionEvent, type SessionTurn } from \"@opengeni/sdk\";\nimport type { EmbeddedSessionClientLike } from \"../client\";\nimport {\n isTimelineUserQuestion,\n isTurnExecutionEvidence,\n timelineQuestionPlacement,\n} from \"../timeline/projection\";\n\nexport type LatestQuestionOptions = {\n /** Check navigation.isCurrent() after awaits and immediately before UI effects. */\n onQueuedQuestion?: (\n turn: SessionTurn,\n navigation: { isCurrent: () => boolean },\n ) => void | Promise<void>;\n};\n\n/** Include every canonical execution fallback, not just turn.started. Derive\n * this optional navigation index only when the user requests Latest question. */\nexport const TIMELINE_TURN_ANCHOR_EVENT_TYPES = SESSION_EVENT_TYPES.filter(\n (type) =>\n isTurnExecutionEvidence(type) ||\n type === \"turn.queued\" ||\n type === \"turn.started\" ||\n type === \"turn.cancelled\" ||\n type === \"session.queue.changed\" ||\n type === \"session.control.steer_requested\",\n);\n\n/** Resolve an optional navigation destination without owning the hook's window\n * or React state. The caller guards errors and applies only a current result. */\nexport async function resolveLatestQuestion({\n client,\n workspaceId,\n sessionId,\n isCurrent,\n resumeSequence,\n options,\n}: {\n client: EmbeddedSessionClientLike;\n workspaceId: string;\n sessionId: string;\n isCurrent: () => boolean;\n resumeSequence: (events: readonly SessionEvent[]) => number;\n options?: LatestQuestionOptions | undefined;\n}): Promise<{ questionSequence: number; anchor: number; events: SessionEvent[] } | null> {\n let before: number | undefined;\n while (true) {\n const latest = await client.listEvents(workspaceId, sessionId, {\n direction: \"before\",\n includeTypes: [\"user.message\"],\n // Historical worker completions also used user.message; page only this\n // filtered index when they occupy the tail.\n limit: before === undefined ? 1 : 64,\n ...(before === undefined ? {} : { before }),\n payloadMode: \"full\",\n mode: \"forensic\",\n });\n if (!isCurrent()) return null;\n // Keep legacy childCompletion classification aligned with the transcript.\n const question = [...latest]\n .sort((a, b) => b.sequence - a.sequence)\n .find(isTimelineUserQuestion);\n if (question) {\n const queue = await client.getQueue(workspaceId, sessionId);\n if (!isCurrent()) return null;\n const pending = queue.items.find(\n (turn) => turn.triggerEventId === question.id && turn.metadata.delivery !== \"steer\",\n );\n if (pending) {\n if (!options?.onQueuedQuestion) {\n const reason = new Error(\"The latest question is in the prompt queue.\");\n reason.name = \"LatestQuestionQueuedError\";\n throw reason;\n }\n await options.onQueuedQuestion(pending, { isCurrent });\n if (!isCurrent()) return null;\n // Queue refresh/focus can race a claim or withdrawal. Resolve that\n // transition below instead of settling on a row that just vanished.\n const refreshedQueue = await client.getQueue(workspaceId, sessionId);\n if (!isCurrent()) return null;\n if (\n refreshedQueue.items.some(\n (turn) => turn.triggerEventId === question.id && turn.metadata.delivery !== \"steer\",\n )\n )\n return null;\n }\n const evidence: SessionEvent[] = [];\n const payload =\n question.payload != null && typeof question.payload === \"object\"\n ? (question.payload as Record<string, unknown>)\n : {};\n // Explicit direct admission needs no lifecycle lookup. Older ledgers and\n // queued admission need their durable start/withdrawal witnesses.\n if (\n payload.routing !== \"accepted_for_execution\" &&\n payload.routing !== \"accepted_for_steering\" &&\n payload.delivery !== \"steer\"\n ) {\n let lifecycleAfter = question.sequence;\n while (true) {\n const page = await client.listEvents(workspaceId, sessionId, {\n direction: \"after\",\n after: lifecycleAfter,\n limit: 128,\n compact: true,\n mode: \"forensic\",\n payloadMode: \"full\",\n includeTypes: TIMELINE_TURN_ANCHOR_EVENT_TYPES,\n });\n if (!isCurrent()) return null;\n const next = Math.max(lifecycleAfter, resumeSequence(page));\n if (next === lifecycleAfter) break;\n const queued =\n page.find(\n (event) =>\n event.type === \"turn.queued\" &&\n ((event.payload ?? {}) as Record<string, unknown>).triggerEventId === question.id,\n ) ?? evidence.find((event) => event.type === \"turn.queued\");\n const turnId =\n queued && (((queued.payload ?? {}) as Record<string, unknown>).turnId ?? queued.turnId);\n evidence.push(\n ...page.filter((event) => {\n const data = (event.payload ?? {}) as Record<string, unknown>;\n return (\n data.triggerEventId === question.id ||\n (turnId != null &&\n (event.turnId === turnId ||\n data.turnId === turnId ||\n data.targetTurnId === turnId))\n );\n }),\n );\n lifecycleAfter = next;\n const placed = timelineQuestionPlacement(question, evidence);\n if (placed.kind === \"visible\" && placed.sequence !== question.sequence) break;\n }\n }\n const placement = timelineQuestionPlacement(question, evidence);\n if (placement.kind === \"withdrawn\") {\n before = question.sequence;\n continue;\n }\n if (placement.kind === \"pending\")\n throw new Error(\"The latest question is changing queue state. Try again.\");\n return {\n questionSequence: question.sequence,\n anchor: placement.sequence,\n events: [\n question,\n ...evidence.filter(\n (event) =>\n event.type === \"turn.queued\" &&\n ((event.payload ?? {}) as Record<string, unknown>).triggerEventId === question.id,\n ),\n ],\n };\n }\n const oldest = Math.min(...latest.map((event) => event.sequence));\n if (!Number.isSafeInteger(oldest) || oldest <= 1 || (before !== undefined && oldest >= before))\n return null;\n before = oldest;\n }\n}\n"],"mappings":"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","names":[]}
|
package/dist/machines.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
"use client";
|
|
1
2
|
import {
|
|
2
3
|
CONNECTION_STATUS_META,
|
|
3
4
|
ConnectionDot,
|
|
@@ -28,13 +29,13 @@ import {
|
|
|
28
29
|
healthPulses,
|
|
29
30
|
pointsFor,
|
|
30
31
|
useMachines
|
|
31
|
-
} from "./chunk-
|
|
32
|
-
import "./chunk-
|
|
33
|
-
import "./chunk-
|
|
34
|
-
import "./chunk-
|
|
35
|
-
import "./chunk-
|
|
36
|
-
import "./chunk-
|
|
37
|
-
import "./chunk-
|
|
32
|
+
} from "./chunk-JHTIMBOL.js";
|
|
33
|
+
import "./chunk-PKCAYHDC.js";
|
|
34
|
+
import "./chunk-LVS3MH5T.js";
|
|
35
|
+
import "./chunk-QHUE7E4N.js";
|
|
36
|
+
import "./chunk-CM7LVUKC.js";
|
|
37
|
+
import "./chunk-XTD7TZHW.js";
|
|
38
|
+
import "./chunk-TXS65BB2.js";
|
|
38
39
|
export {
|
|
39
40
|
CONNECTION_STATUS_META,
|
|
40
41
|
ConnectionDot,
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
1
3
|
// src/components/markdown-table-layout.ts
|
|
2
4
|
function markdownTableWidth({
|
|
3
5
|
columnLeft,
|
|
@@ -103,4 +105,4 @@ export {
|
|
|
103
105
|
markdownTableWidth,
|
|
104
106
|
observeMarkdownTableLayout
|
|
105
107
|
};
|
|
106
|
-
//# sourceMappingURL=markdown-table-layout-
|
|
108
|
+
//# sourceMappingURL=markdown-table-layout-DQ4DRNVT.js.map
|
package/dist/{markdown-table-layout-QXSLK4BY.js.map → markdown-table-layout-DQ4DRNVT.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\nfunction measurementCopy(source: Node, document: Document): Node {\n if (source.nodeType === Node.ELEMENT_NODE) {\n const element = source as Element;\n // Inert prevents focus, not custom-element construction, media loading or\n // embedded browsing contexts. Do not clone those host-rendered surfaces.\n if (\n element.localName.includes(\"-\") ||\n [\"iframe\", \"object\", \"embed\", \"video\", \"audio\", \"canvas\", \"script\"].includes(\n element.localName,\n )\n ) {\n const bounds = element.getBoundingClientRect();\n const placeholder = document.createElement(\"span\");\n placeholder.style.display = \"inline-block\";\n placeholder.style.width = `${bounds.width}px`;\n placeholder.style.height = `${bounds.height}px`;\n return placeholder;\n }\n }\n const copy = document.importNode(source, false);\n if (copy.nodeType === Node.ELEMENT_NODE) {\n const element = copy as Element;\n element.removeAttribute(\"id\");\n for (const attribute of [...element.attributes]) {\n if (attribute.name.startsWith(\"on\")) element.removeAttribute(attribute.name);\n }\n }\n for (const child of source.childNodes) copy.appendChild(measurementCopy(child, document));\n return copy;\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 // Build the static copy without a browsing context before inserting its probe.\n const measurementDocument = table.ownerDocument.implementation.createHTMLDocument(\"\");\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 // Even a temporary max-content width on the live table changes its height\n // during forced layout. Browser scroll anchoring can retain that displacement\n // after the width is restored. Measure a copy without touching live geometry.\n const probe = table.ownerDocument.createElement(\"div\");\n probe.setAttribute(\"aria-hidden\", \"true\");\n probe.inert = true;\n // A zero-sized, contained box cannot extend the scroller's overflow area,\n // including inside transformed ancestors. Keep the same inherited styling.\n probe.style.cssText =\n \"position:absolute;width:0;height:0;overflow:hidden;contain:layout size paint;visibility:hidden;pointer-events:none\";\n const copy = measurementCopy(table, measurementDocument) as HTMLTableElement;\n copy.style.width = \"max-content\";\n probe.append(copy);\n let preferred: number;\n try {\n table.parentElement!.append(probe);\n preferred = copy.getBoundingClientRect().width;\n } finally {\n probe.remove();\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":"
|
|
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\nfunction measurementCopy(source: Node, document: Document): Node {\n if (source.nodeType === Node.ELEMENT_NODE) {\n const element = source as Element;\n // Inert prevents focus, not custom-element construction, media loading or\n // embedded browsing contexts. Do not clone those host-rendered surfaces.\n if (\n element.localName.includes(\"-\") ||\n [\"iframe\", \"object\", \"embed\", \"video\", \"audio\", \"canvas\", \"script\"].includes(\n element.localName,\n )\n ) {\n const bounds = element.getBoundingClientRect();\n const placeholder = document.createElement(\"span\");\n placeholder.style.display = \"inline-block\";\n placeholder.style.width = `${bounds.width}px`;\n placeholder.style.height = `${bounds.height}px`;\n return placeholder;\n }\n }\n const copy = document.importNode(source, false);\n if (copy.nodeType === Node.ELEMENT_NODE) {\n const element = copy as Element;\n element.removeAttribute(\"id\");\n for (const attribute of [...element.attributes]) {\n if (attribute.name.startsWith(\"on\")) element.removeAttribute(attribute.name);\n }\n }\n for (const child of source.childNodes) copy.appendChild(measurementCopy(child, document));\n return copy;\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 // Build the static copy without a browsing context before inserting its probe.\n const measurementDocument = table.ownerDocument.implementation.createHTMLDocument(\"\");\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 // Even a temporary max-content width on the live table changes its height\n // during forced layout. Browser scroll anchoring can retain that displacement\n // after the width is restored. Measure a copy without touching live geometry.\n const probe = table.ownerDocument.createElement(\"div\");\n probe.setAttribute(\"aria-hidden\", \"true\");\n probe.inert = true;\n // A zero-sized, contained box cannot extend the scroller's overflow area,\n // including inside transformed ancestors. Keep the same inherited styling.\n probe.style.cssText =\n \"position:absolute;width:0;height:0;overflow:hidden;contain:layout size paint;visibility:hidden;pointer-events:none\";\n const copy = measurementCopy(table, measurementDocument) as HTMLTableElement;\n copy.style.width = \"max-content\";\n probe.append(copy);\n let preferred: number;\n try {\n table.parentElement!.append(probe);\n preferred = copy.getBoundingClientRect().width;\n } finally {\n probe.remove();\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;AAEA,SAAS,gBAAgB,QAAc,UAA0B;AAC/D,MAAI,OAAO,aAAa,KAAK,cAAc;AACzC,UAAM,UAAU;AAGhB,QACE,QAAQ,UAAU,SAAS,GAAG,KAC9B,CAAC,UAAU,UAAU,SAAS,SAAS,SAAS,UAAU,QAAQ,EAAE;AAAA,MAClE,QAAQ;AAAA,IACV,GACA;AACA,YAAM,SAAS,QAAQ,sBAAsB;AAC7C,YAAM,cAAc,SAAS,cAAc,MAAM;AACjD,kBAAY,MAAM,UAAU;AAC5B,kBAAY,MAAM,QAAQ,GAAG,OAAO,KAAK;AACzC,kBAAY,MAAM,SAAS,GAAG,OAAO,MAAM;AAC3C,aAAO;AAAA,IACT;AAAA,EACF;AACA,QAAM,OAAO,SAAS,WAAW,QAAQ,KAAK;AAC9C,MAAI,KAAK,aAAa,KAAK,cAAc;AACvC,UAAM,UAAU;AAChB,YAAQ,gBAAgB,IAAI;AAC5B,eAAW,aAAa,CAAC,GAAG,QAAQ,UAAU,GAAG;AAC/C,UAAI,UAAU,KAAK,WAAW,IAAI,EAAG,SAAQ,gBAAgB,UAAU,IAAI;AAAA,IAC7E;AAAA,EACF;AACA,aAAW,SAAS,OAAO,WAAY,MAAK,YAAY,gBAAgB,OAAO,QAAQ,CAAC;AACxF,SAAO;AACT;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;AAGhE,QAAM,sBAAsB,MAAM,cAAc,eAAe,mBAAmB,EAAE;AACpF,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;AAK9F,UAAM,QAAQ,MAAM,cAAc,cAAc,KAAK;AACrD,UAAM,aAAa,eAAe,MAAM;AACxC,UAAM,QAAQ;AAGd,UAAM,MAAM,UACV;AACF,UAAM,OAAO,gBAAgB,OAAO,mBAAmB;AACvD,SAAK,MAAM,QAAQ;AACnB,UAAM,OAAO,IAAI;AACjB,QAAI;AACJ,QAAI;AACF,YAAM,cAAe,OAAO,KAAK;AACjC,kBAAY,KAAK,sBAAsB,EAAE;AAAA,IAC3C,UAAE;AACA,YAAM,OAAO;AAAA,IACf;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":[]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import {
|
|
3
|
+
ModelPolicyPickerMenu,
|
|
4
|
+
ModelPolicyPickerPopover
|
|
5
|
+
} from "./chunk-IYQCWGU5.js";
|
|
6
|
+
import "./chunk-L2J3PU7A.js";
|
|
7
|
+
import "./chunk-PMV53IMM.js";
|
|
8
|
+
import "./chunk-XS67YG5R.js";
|
|
9
|
+
import "./chunk-XEA5BCMA.js";
|
|
10
|
+
import "./chunk-TXS65BB2.js";
|
|
11
|
+
export {
|
|
12
|
+
ModelPolicyPickerMenu,
|
|
13
|
+
ModelPolicyPickerPopover
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=model-policy-picker-menu-WRNSRFQC.js.map
|
package/dist/model-policy.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
"use client";
|
|
1
2
|
import {
|
|
2
3
|
advancedSourceSummary,
|
|
3
4
|
availabilityReasonLabel,
|
|
@@ -19,7 +20,7 @@ import {
|
|
|
19
20
|
runnableLatencyModesForModel,
|
|
20
21
|
scopedBillingClassLabel,
|
|
21
22
|
sortPickerRows
|
|
22
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-XS67YG5R.js";
|
|
23
24
|
export {
|
|
24
25
|
advancedSourceSummary,
|
|
25
26
|
availabilityReasonLabel,
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
1
3
|
// src/lib/noto-sans-arabic-loader.ts
|
|
2
4
|
import fontUrl from "@fontsource-variable/noto-sans-arabic/files/noto-sans-arabic-arabic-wght-normal.woff2";
|
|
3
5
|
import unicodeRanges from "@fontsource-variable/noto-sans-arabic/unicode.json";
|
|
@@ -18,4 +20,4 @@ function loadNotoSansArabic() {
|
|
|
18
20
|
export {
|
|
19
21
|
loadNotoSansArabic
|
|
20
22
|
};
|
|
21
|
-
//# sourceMappingURL=noto-sans-arabic-loader-
|
|
23
|
+
//# sourceMappingURL=noto-sans-arabic-loader-XSH2KYWJ.js.map
|
package/dist/{noto-sans-arabic-loader-IA2T4X2A.js.map → noto-sans-arabic-loader-XSH2KYWJ.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/lib/noto-sans-arabic-loader.ts"],"sourcesContent":["import fontUrl from \"@fontsource-variable/noto-sans-arabic/files/noto-sans-arabic-arabic-wght-normal.woff2\";\nimport unicodeRanges from \"@fontsource-variable/noto-sans-arabic/unicode.json\";\n\nlet loading: Promise<void> | undefined;\n\nexport function loadNotoSansArabic(): Promise<void> {\n loading ??= new FontFace(\n \"Noto Sans Arabic Variable\",\n `url(\"${fontUrl}\") format(\"woff2-variations\")`,\n { style: \"normal\", weight: \"100 900\", unicodeRange: unicodeRanges.arabic },\n )\n .load()\n .then((font) => {\n document.fonts.add(font);\n })\n .catch((error: unknown) => {\n loading = undefined;\n throw error;\n });\n return loading;\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../src/lib/noto-sans-arabic-loader.ts"],"sourcesContent":["import fontUrl from \"@fontsource-variable/noto-sans-arabic/files/noto-sans-arabic-arabic-wght-normal.woff2\";\nimport unicodeRanges from \"@fontsource-variable/noto-sans-arabic/unicode.json\";\n\nlet loading: Promise<void> | undefined;\n\nexport function loadNotoSansArabic(): Promise<void> {\n loading ??= new FontFace(\n \"Noto Sans Arabic Variable\",\n `url(\"${fontUrl}\") format(\"woff2-variations\")`,\n { style: \"normal\", weight: \"100 900\", unicodeRange: unicodeRanges.arabic },\n )\n .load()\n .then((font) => {\n document.fonts.add(font);\n })\n .catch((error: unknown) => {\n loading = undefined;\n throw error;\n });\n return loading;\n}\n"],"mappings":";;;AAAA,OAAO,aAAa;AACpB,OAAO,mBAAmB;AAE1B,IAAI;AAEG,SAAS,qBAAoC;AAClD,cAAY,IAAI;AAAA,IACd;AAAA,IACA,QAAQ,OAAO;AAAA,IACf,EAAE,OAAO,UAAU,QAAQ,WAAW,cAAc,cAAc,OAAO;AAAA,EAC3E,EACG,KAAK,EACL,KAAK,CAAC,SAAS;AACd,aAAS,MAAM,IAAI,IAAI;AAAA,EACzB,CAAC,EACA,MAAM,CAAC,UAAmB;AACzB,cAAU;AACV,UAAM;AAAA,EACR,CAAC;AACH,SAAO;AACT;","names":[]}
|
package/dist/{noto-sans-jp-loader.generated-HFGLYBR3.js → noto-sans-jp-loader.generated-MR5L6V7K.js}
RENAMED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
1
3
|
// src/lib/noto-sans-jp-loader.generated.ts
|
|
2
4
|
import unicodeRanges from "@fontsource-variable/noto-sans-jp/unicode.json";
|
|
3
5
|
import font0 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-0-wght-normal.woff2";
|
|
@@ -289,4 +291,4 @@ function rangeContains(range, codePoint) {
|
|
|
289
291
|
export {
|
|
290
292
|
loadNotoSansJp
|
|
291
293
|
};
|
|
292
|
-
//# sourceMappingURL=noto-sans-jp-loader.generated-
|
|
294
|
+
//# sourceMappingURL=noto-sans-jp-loader.generated-MR5L6V7K.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/lib/noto-sans-jp-loader.generated.ts"],"sourcesContent":["/* This file is generated by scripts/generate-noto-jp-loader.ts. */\nimport unicodeRanges from \"@fontsource-variable/noto-sans-jp/unicode.json\";\nimport font0 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-0-wght-normal.woff2\";\nimport font1 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-1-wght-normal.woff2\";\nimport font2 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-2-wght-normal.woff2\";\nimport font3 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-3-wght-normal.woff2\";\nimport font4 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-4-wght-normal.woff2\";\nimport font5 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-5-wght-normal.woff2\";\nimport font6 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-6-wght-normal.woff2\";\nimport font7 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-7-wght-normal.woff2\";\nimport font8 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-8-wght-normal.woff2\";\nimport font9 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-9-wght-normal.woff2\";\nimport font10 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-10-wght-normal.woff2\";\nimport font11 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-11-wght-normal.woff2\";\nimport font12 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-12-wght-normal.woff2\";\nimport font13 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-13-wght-normal.woff2\";\nimport font14 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-14-wght-normal.woff2\";\nimport font15 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-15-wght-normal.woff2\";\nimport font16 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-16-wght-normal.woff2\";\nimport font17 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-17-wght-normal.woff2\";\nimport font18 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-18-wght-normal.woff2\";\nimport font19 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-19-wght-normal.woff2\";\nimport font20 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-20-wght-normal.woff2\";\nimport font21 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-21-wght-normal.woff2\";\nimport font22 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-22-wght-normal.woff2\";\nimport font23 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-23-wght-normal.woff2\";\nimport font24 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-24-wght-normal.woff2\";\nimport font25 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-25-wght-normal.woff2\";\nimport font26 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-26-wght-normal.woff2\";\nimport font27 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-27-wght-normal.woff2\";\nimport font28 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-28-wght-normal.woff2\";\nimport font29 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-29-wght-normal.woff2\";\nimport font30 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-30-wght-normal.woff2\";\nimport font31 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-31-wght-normal.woff2\";\nimport font32 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-32-wght-normal.woff2\";\nimport font33 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-33-wght-normal.woff2\";\nimport font34 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-34-wght-normal.woff2\";\nimport font35 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-35-wght-normal.woff2\";\nimport font36 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-36-wght-normal.woff2\";\nimport font37 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-37-wght-normal.woff2\";\nimport font38 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-38-wght-normal.woff2\";\nimport font39 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-39-wght-normal.woff2\";\nimport font40 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-40-wght-normal.woff2\";\nimport font41 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-41-wght-normal.woff2\";\nimport font42 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-42-wght-normal.woff2\";\nimport font43 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-43-wght-normal.woff2\";\nimport font44 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-44-wght-normal.woff2\";\nimport font45 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-45-wght-normal.woff2\";\nimport font46 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-46-wght-normal.woff2\";\nimport font47 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-47-wght-normal.woff2\";\nimport font48 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-48-wght-normal.woff2\";\nimport font49 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-49-wght-normal.woff2\";\nimport font50 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-50-wght-normal.woff2\";\nimport font51 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-51-wght-normal.woff2\";\nimport font52 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-52-wght-normal.woff2\";\nimport font53 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-53-wght-normal.woff2\";\nimport font54 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-54-wght-normal.woff2\";\nimport font55 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-55-wght-normal.woff2\";\nimport font56 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-56-wght-normal.woff2\";\nimport font57 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-57-wght-normal.woff2\";\nimport font58 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-58-wght-normal.woff2\";\nimport font59 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-59-wght-normal.woff2\";\nimport font60 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-60-wght-normal.woff2\";\nimport font61 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-61-wght-normal.woff2\";\nimport font62 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-62-wght-normal.woff2\";\nimport font63 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-63-wght-normal.woff2\";\nimport font64 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-64-wght-normal.woff2\";\nimport font65 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-65-wght-normal.woff2\";\nimport font66 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-66-wght-normal.woff2\";\nimport font67 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-67-wght-normal.woff2\";\nimport font68 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-68-wght-normal.woff2\";\nimport font69 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-69-wght-normal.woff2\";\nimport font70 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-70-wght-normal.woff2\";\nimport font71 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-71-wght-normal.woff2\";\nimport font72 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-72-wght-normal.woff2\";\nimport font73 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-73-wght-normal.woff2\";\nimport font74 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-74-wght-normal.woff2\";\nimport font75 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-75-wght-normal.woff2\";\nimport font76 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-76-wght-normal.woff2\";\nimport font77 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-77-wght-normal.woff2\";\nimport font78 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-78-wght-normal.woff2\";\nimport font79 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-79-wght-normal.woff2\";\nimport font80 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-80-wght-normal.woff2\";\nimport font81 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-81-wght-normal.woff2\";\nimport font82 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-82-wght-normal.woff2\";\nimport font83 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-83-wght-normal.woff2\";\nimport font84 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-84-wght-normal.woff2\";\nimport font85 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-85-wght-normal.woff2\";\nimport font86 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-86-wght-normal.woff2\";\nimport font87 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-87-wght-normal.woff2\";\nimport font88 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-88-wght-normal.woff2\";\nimport font89 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-89-wght-normal.woff2\";\nimport font90 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-90-wght-normal.woff2\";\nimport font91 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-91-wght-normal.woff2\";\nimport font92 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-92-wght-normal.woff2\";\nimport font93 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-93-wght-normal.woff2\";\nimport font94 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-94-wght-normal.woff2\";\nimport font95 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-95-wght-normal.woff2\";\nimport font96 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-96-wght-normal.woff2\";\nimport font97 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-97-wght-normal.woff2\";\nimport font98 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-98-wght-normal.woff2\";\nimport font99 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-99-wght-normal.woff2\";\nimport font100 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-100-wght-normal.woff2\";\nimport font101 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-101-wght-normal.woff2\";\nimport font102 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-102-wght-normal.woff2\";\nimport font103 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-103-wght-normal.woff2\";\nimport font104 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-104-wght-normal.woff2\";\nimport font105 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-105-wght-normal.woff2\";\nimport font106 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-106-wght-normal.woff2\";\nimport font107 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-107-wght-normal.woff2\";\nimport font108 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-108-wght-normal.woff2\";\nimport font109 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-109-wght-normal.woff2\";\nimport font110 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-110-wght-normal.woff2\";\nimport font111 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-111-wght-normal.woff2\";\nimport font112 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-112-wght-normal.woff2\";\nimport font113 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-113-wght-normal.woff2\";\nimport font114 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-114-wght-normal.woff2\";\nimport font115 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-115-wght-normal.woff2\";\nimport font116 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-116-wght-normal.woff2\";\nimport font117 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-117-wght-normal.woff2\";\nimport font118 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-118-wght-normal.woff2\";\nimport font119 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-119-wght-normal.woff2\";\n\nconst fontUrls: Record<string, string> = {\n \"[0]\": font0,\n \"[1]\": font1,\n \"[2]\": font2,\n \"[3]\": font3,\n \"[4]\": font4,\n \"[5]\": font5,\n \"[6]\": font6,\n \"[7]\": font7,\n \"[8]\": font8,\n \"[9]\": font9,\n \"[10]\": font10,\n \"[11]\": font11,\n \"[12]\": font12,\n \"[13]\": font13,\n \"[14]\": font14,\n \"[15]\": font15,\n \"[16]\": font16,\n \"[17]\": font17,\n \"[18]\": font18,\n \"[19]\": font19,\n \"[20]\": font20,\n \"[21]\": font21,\n \"[22]\": font22,\n \"[23]\": font23,\n \"[24]\": font24,\n \"[25]\": font25,\n \"[26]\": font26,\n \"[27]\": font27,\n \"[28]\": font28,\n \"[29]\": font29,\n \"[30]\": font30,\n \"[31]\": font31,\n \"[32]\": font32,\n \"[33]\": font33,\n \"[34]\": font34,\n \"[35]\": font35,\n \"[36]\": font36,\n \"[37]\": font37,\n \"[38]\": font38,\n \"[39]\": font39,\n \"[40]\": font40,\n \"[41]\": font41,\n \"[42]\": font42,\n \"[43]\": font43,\n \"[44]\": font44,\n \"[45]\": font45,\n \"[46]\": font46,\n \"[47]\": font47,\n \"[48]\": font48,\n \"[49]\": font49,\n \"[50]\": font50,\n \"[51]\": font51,\n \"[52]\": font52,\n \"[53]\": font53,\n \"[54]\": font54,\n \"[55]\": font55,\n \"[56]\": font56,\n \"[57]\": font57,\n \"[58]\": font58,\n \"[59]\": font59,\n \"[60]\": font60,\n \"[61]\": font61,\n \"[62]\": font62,\n \"[63]\": font63,\n \"[64]\": font64,\n \"[65]\": font65,\n \"[66]\": font66,\n \"[67]\": font67,\n \"[68]\": font68,\n \"[69]\": font69,\n \"[70]\": font70,\n \"[71]\": font71,\n \"[72]\": font72,\n \"[73]\": font73,\n \"[74]\": font74,\n \"[75]\": font75,\n \"[76]\": font76,\n \"[77]\": font77,\n \"[78]\": font78,\n \"[79]\": font79,\n \"[80]\": font80,\n \"[81]\": font81,\n \"[82]\": font82,\n \"[83]\": font83,\n \"[84]\": font84,\n \"[85]\": font85,\n \"[86]\": font86,\n \"[87]\": font87,\n \"[88]\": font88,\n \"[89]\": font89,\n \"[90]\": font90,\n \"[91]\": font91,\n \"[92]\": font92,\n \"[93]\": font93,\n \"[94]\": font94,\n \"[95]\": font95,\n \"[96]\": font96,\n \"[97]\": font97,\n \"[98]\": font98,\n \"[99]\": font99,\n \"[100]\": font100,\n \"[101]\": font101,\n \"[102]\": font102,\n \"[103]\": font103,\n \"[104]\": font104,\n \"[105]\": font105,\n \"[106]\": font106,\n \"[107]\": font107,\n \"[108]\": font108,\n \"[109]\": font109,\n \"[110]\": font110,\n \"[111]\": font111,\n \"[112]\": font112,\n \"[113]\": font113,\n \"[114]\": font114,\n \"[115]\": font115,\n \"[116]\": font116,\n \"[117]\": font117,\n \"[118]\": font118,\n \"[119]\": font119,\n};\nconst loads = new Map<string, Promise<void>>();\n\nexport async function loadNotoSansJp(text: string): Promise<void> {\n const required = new Set<string>();\n for (const character of text) {\n const codePoint = character.codePointAt(0);\n if (codePoint === undefined) continue;\n for (const [key, range] of Object.entries(unicodeRanges)) {\n if (!fontUrls[key]) continue;\n if (rangeContains(range, codePoint)) {\n required.add(key);\n break;\n }\n }\n }\n await Promise.all([...required].map(loadShard));\n}\n\nfunction loadShard(key: string): Promise<void> {\n const existing = loads.get(key);\n if (existing) return existing;\n const url = fontUrls[key];\n const unicodeRange = (unicodeRanges as Record<string, string>)[key];\n if (!url || !unicodeRange) throw new Error(`Missing Noto Sans JP shard ${key}`);\n const loading = new FontFace(\n \"Noto Sans JP Variable\",\n `url(\"${url}\") format(\"woff2-variations\")`,\n { style: \"normal\", weight: \"100 900\", unicodeRange },\n )\n .load()\n .then((font) => {\n document.fonts.add(font);\n })\n .catch((error: unknown) => {\n loads.delete(key);\n throw error;\n });\n loads.set(key, loading);\n return loading;\n}\n\nfunction rangeContains(range: string, codePoint: number): boolean {\n for (const token of range.split(\",\")) {\n const [startText, endText = startText] = token.trim().slice(2).split(\"-\");\n const start = Number.parseInt(startText ?? \"\", 16);\n const end = Number.parseInt(endText ?? \"\", 16);\n if (Number.isFinite(start) && codePoint >= start && codePoint <= end) return true;\n }\n return false;\n}\n"],"mappings":";AACA,OAAO,mBAAmB;AAC1B,OAAO,WAAW;AAClB,OAAO,WAAW;AAClB,OAAO,WAAW;AAClB,OAAO,WAAW;AAClB,OAAO,WAAW;AAClB,OAAO,WAAW;AAClB,OAAO,WAAW;AAClB,OAAO,WAAW;AAClB,OAAO,WAAW;AAClB,OAAO,WAAW;AAClB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,aAAa;AACpB,OAAO,aAAa;AACpB,OAAO,aAAa;AACpB,OAAO,aAAa;AACpB,OAAO,aAAa;AACpB,OAAO,aAAa;AACpB,OAAO,aAAa;AACpB,OAAO,aAAa;AACpB,OAAO,aAAa;AACpB,OAAO,aAAa;AACpB,OAAO,aAAa;AACpB,OAAO,aAAa;AACpB,OAAO,aAAa;AACpB,OAAO,aAAa;AACpB,OAAO,aAAa;AACpB,OAAO,aAAa;AACpB,OAAO,aAAa;AACpB,OAAO,aAAa;AACpB,OAAO,aAAa;AACpB,OAAO,aAAa;AAEpB,IAAM,WAAmC;AAAA,EACvC,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AACX;AACA,IAAM,QAAQ,oBAAI,IAA2B;AAE7C,eAAsB,eAAe,MAA6B;AAChE,QAAM,WAAW,oBAAI,IAAY;AACjC,aAAW,aAAa,MAAM;AAC5B,UAAM,YAAY,UAAU,YAAY,CAAC;AACzC,QAAI,cAAc,OAAW;AAC7B,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,aAAa,GAAG;AACxD,UAAI,CAAC,SAAS,GAAG,EAAG;AACpB,UAAI,cAAc,OAAO,SAAS,GAAG;AACnC,iBAAS,IAAI,GAAG;AAChB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,QAAM,QAAQ,IAAI,CAAC,GAAG,QAAQ,EAAE,IAAI,SAAS,CAAC;AAChD;AAEA,SAAS,UAAU,KAA4B;AAC7C,QAAM,WAAW,MAAM,IAAI,GAAG;AAC9B,MAAI,SAAU,QAAO;AACrB,QAAM,MAAM,SAAS,GAAG;AACxB,QAAM,eAAgB,cAAyC,GAAG;AAClE,MAAI,CAAC,OAAO,CAAC,aAAc,OAAM,IAAI,MAAM,8BAA8B,GAAG,EAAE;AAC9E,QAAM,UAAU,IAAI;AAAA,IAClB;AAAA,IACA,QAAQ,GAAG;AAAA,IACX,EAAE,OAAO,UAAU,QAAQ,WAAW,aAAa;AAAA,EACrD,EACG,KAAK,EACL,KAAK,CAAC,SAAS;AACd,aAAS,MAAM,IAAI,IAAI;AAAA,EACzB,CAAC,EACA,MAAM,CAAC,UAAmB;AACzB,UAAM,OAAO,GAAG;AAChB,UAAM;AAAA,EACR,CAAC;AACH,QAAM,IAAI,KAAK,OAAO;AACtB,SAAO;AACT;AAEA,SAAS,cAAc,OAAe,WAA4B;AAChE,aAAW,SAAS,MAAM,MAAM,GAAG,GAAG;AACpC,UAAM,CAAC,WAAW,UAAU,SAAS,IAAI,MAAM,KAAK,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG;AACxE,UAAM,QAAQ,OAAO,SAAS,aAAa,IAAI,EAAE;AACjD,UAAM,MAAM,OAAO,SAAS,WAAW,IAAI,EAAE;AAC7C,QAAI,OAAO,SAAS,KAAK,KAAK,aAAa,SAAS,aAAa,IAAK,QAAO;AAAA,EAC/E;AACA,SAAO;AACT;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/lib/noto-sans-jp-loader.generated.ts"],"sourcesContent":["/* This file is generated by scripts/generate-noto-jp-loader.ts. */\nimport unicodeRanges from \"@fontsource-variable/noto-sans-jp/unicode.json\";\nimport font0 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-0-wght-normal.woff2\";\nimport font1 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-1-wght-normal.woff2\";\nimport font2 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-2-wght-normal.woff2\";\nimport font3 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-3-wght-normal.woff2\";\nimport font4 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-4-wght-normal.woff2\";\nimport font5 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-5-wght-normal.woff2\";\nimport font6 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-6-wght-normal.woff2\";\nimport font7 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-7-wght-normal.woff2\";\nimport font8 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-8-wght-normal.woff2\";\nimport font9 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-9-wght-normal.woff2\";\nimport font10 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-10-wght-normal.woff2\";\nimport font11 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-11-wght-normal.woff2\";\nimport font12 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-12-wght-normal.woff2\";\nimport font13 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-13-wght-normal.woff2\";\nimport font14 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-14-wght-normal.woff2\";\nimport font15 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-15-wght-normal.woff2\";\nimport font16 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-16-wght-normal.woff2\";\nimport font17 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-17-wght-normal.woff2\";\nimport font18 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-18-wght-normal.woff2\";\nimport font19 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-19-wght-normal.woff2\";\nimport font20 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-20-wght-normal.woff2\";\nimport font21 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-21-wght-normal.woff2\";\nimport font22 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-22-wght-normal.woff2\";\nimport font23 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-23-wght-normal.woff2\";\nimport font24 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-24-wght-normal.woff2\";\nimport font25 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-25-wght-normal.woff2\";\nimport font26 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-26-wght-normal.woff2\";\nimport font27 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-27-wght-normal.woff2\";\nimport font28 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-28-wght-normal.woff2\";\nimport font29 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-29-wght-normal.woff2\";\nimport font30 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-30-wght-normal.woff2\";\nimport font31 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-31-wght-normal.woff2\";\nimport font32 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-32-wght-normal.woff2\";\nimport font33 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-33-wght-normal.woff2\";\nimport font34 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-34-wght-normal.woff2\";\nimport font35 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-35-wght-normal.woff2\";\nimport font36 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-36-wght-normal.woff2\";\nimport font37 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-37-wght-normal.woff2\";\nimport font38 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-38-wght-normal.woff2\";\nimport font39 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-39-wght-normal.woff2\";\nimport font40 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-40-wght-normal.woff2\";\nimport font41 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-41-wght-normal.woff2\";\nimport font42 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-42-wght-normal.woff2\";\nimport font43 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-43-wght-normal.woff2\";\nimport font44 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-44-wght-normal.woff2\";\nimport font45 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-45-wght-normal.woff2\";\nimport font46 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-46-wght-normal.woff2\";\nimport font47 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-47-wght-normal.woff2\";\nimport font48 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-48-wght-normal.woff2\";\nimport font49 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-49-wght-normal.woff2\";\nimport font50 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-50-wght-normal.woff2\";\nimport font51 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-51-wght-normal.woff2\";\nimport font52 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-52-wght-normal.woff2\";\nimport font53 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-53-wght-normal.woff2\";\nimport font54 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-54-wght-normal.woff2\";\nimport font55 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-55-wght-normal.woff2\";\nimport font56 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-56-wght-normal.woff2\";\nimport font57 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-57-wght-normal.woff2\";\nimport font58 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-58-wght-normal.woff2\";\nimport font59 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-59-wght-normal.woff2\";\nimport font60 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-60-wght-normal.woff2\";\nimport font61 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-61-wght-normal.woff2\";\nimport font62 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-62-wght-normal.woff2\";\nimport font63 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-63-wght-normal.woff2\";\nimport font64 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-64-wght-normal.woff2\";\nimport font65 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-65-wght-normal.woff2\";\nimport font66 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-66-wght-normal.woff2\";\nimport font67 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-67-wght-normal.woff2\";\nimport font68 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-68-wght-normal.woff2\";\nimport font69 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-69-wght-normal.woff2\";\nimport font70 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-70-wght-normal.woff2\";\nimport font71 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-71-wght-normal.woff2\";\nimport font72 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-72-wght-normal.woff2\";\nimport font73 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-73-wght-normal.woff2\";\nimport font74 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-74-wght-normal.woff2\";\nimport font75 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-75-wght-normal.woff2\";\nimport font76 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-76-wght-normal.woff2\";\nimport font77 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-77-wght-normal.woff2\";\nimport font78 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-78-wght-normal.woff2\";\nimport font79 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-79-wght-normal.woff2\";\nimport font80 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-80-wght-normal.woff2\";\nimport font81 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-81-wght-normal.woff2\";\nimport font82 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-82-wght-normal.woff2\";\nimport font83 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-83-wght-normal.woff2\";\nimport font84 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-84-wght-normal.woff2\";\nimport font85 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-85-wght-normal.woff2\";\nimport font86 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-86-wght-normal.woff2\";\nimport font87 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-87-wght-normal.woff2\";\nimport font88 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-88-wght-normal.woff2\";\nimport font89 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-89-wght-normal.woff2\";\nimport font90 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-90-wght-normal.woff2\";\nimport font91 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-91-wght-normal.woff2\";\nimport font92 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-92-wght-normal.woff2\";\nimport font93 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-93-wght-normal.woff2\";\nimport font94 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-94-wght-normal.woff2\";\nimport font95 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-95-wght-normal.woff2\";\nimport font96 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-96-wght-normal.woff2\";\nimport font97 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-97-wght-normal.woff2\";\nimport font98 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-98-wght-normal.woff2\";\nimport font99 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-99-wght-normal.woff2\";\nimport font100 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-100-wght-normal.woff2\";\nimport font101 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-101-wght-normal.woff2\";\nimport font102 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-102-wght-normal.woff2\";\nimport font103 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-103-wght-normal.woff2\";\nimport font104 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-104-wght-normal.woff2\";\nimport font105 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-105-wght-normal.woff2\";\nimport font106 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-106-wght-normal.woff2\";\nimport font107 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-107-wght-normal.woff2\";\nimport font108 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-108-wght-normal.woff2\";\nimport font109 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-109-wght-normal.woff2\";\nimport font110 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-110-wght-normal.woff2\";\nimport font111 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-111-wght-normal.woff2\";\nimport font112 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-112-wght-normal.woff2\";\nimport font113 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-113-wght-normal.woff2\";\nimport font114 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-114-wght-normal.woff2\";\nimport font115 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-115-wght-normal.woff2\";\nimport font116 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-116-wght-normal.woff2\";\nimport font117 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-117-wght-normal.woff2\";\nimport font118 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-118-wght-normal.woff2\";\nimport font119 from \"@fontsource-variable/noto-sans-jp/files/noto-sans-jp-119-wght-normal.woff2\";\n\nconst fontUrls: Record<string, string> = {\n \"[0]\": font0,\n \"[1]\": font1,\n \"[2]\": font2,\n \"[3]\": font3,\n \"[4]\": font4,\n \"[5]\": font5,\n \"[6]\": font6,\n \"[7]\": font7,\n \"[8]\": font8,\n \"[9]\": font9,\n \"[10]\": font10,\n \"[11]\": font11,\n \"[12]\": font12,\n \"[13]\": font13,\n \"[14]\": font14,\n \"[15]\": font15,\n \"[16]\": font16,\n \"[17]\": font17,\n \"[18]\": font18,\n \"[19]\": font19,\n \"[20]\": font20,\n \"[21]\": font21,\n \"[22]\": font22,\n \"[23]\": font23,\n \"[24]\": font24,\n \"[25]\": font25,\n \"[26]\": font26,\n \"[27]\": font27,\n \"[28]\": font28,\n \"[29]\": font29,\n \"[30]\": font30,\n \"[31]\": font31,\n \"[32]\": font32,\n \"[33]\": font33,\n \"[34]\": font34,\n \"[35]\": font35,\n \"[36]\": font36,\n \"[37]\": font37,\n \"[38]\": font38,\n \"[39]\": font39,\n \"[40]\": font40,\n \"[41]\": font41,\n \"[42]\": font42,\n \"[43]\": font43,\n \"[44]\": font44,\n \"[45]\": font45,\n \"[46]\": font46,\n \"[47]\": font47,\n \"[48]\": font48,\n \"[49]\": font49,\n \"[50]\": font50,\n \"[51]\": font51,\n \"[52]\": font52,\n \"[53]\": font53,\n \"[54]\": font54,\n \"[55]\": font55,\n \"[56]\": font56,\n \"[57]\": font57,\n \"[58]\": font58,\n \"[59]\": font59,\n \"[60]\": font60,\n \"[61]\": font61,\n \"[62]\": font62,\n \"[63]\": font63,\n \"[64]\": font64,\n \"[65]\": font65,\n \"[66]\": font66,\n \"[67]\": font67,\n \"[68]\": font68,\n \"[69]\": font69,\n \"[70]\": font70,\n \"[71]\": font71,\n \"[72]\": font72,\n \"[73]\": font73,\n \"[74]\": font74,\n \"[75]\": font75,\n \"[76]\": font76,\n \"[77]\": font77,\n \"[78]\": font78,\n \"[79]\": font79,\n \"[80]\": font80,\n \"[81]\": font81,\n \"[82]\": font82,\n \"[83]\": font83,\n \"[84]\": font84,\n \"[85]\": font85,\n \"[86]\": font86,\n \"[87]\": font87,\n \"[88]\": font88,\n \"[89]\": font89,\n \"[90]\": font90,\n \"[91]\": font91,\n \"[92]\": font92,\n \"[93]\": font93,\n \"[94]\": font94,\n \"[95]\": font95,\n \"[96]\": font96,\n \"[97]\": font97,\n \"[98]\": font98,\n \"[99]\": font99,\n \"[100]\": font100,\n \"[101]\": font101,\n \"[102]\": font102,\n \"[103]\": font103,\n \"[104]\": font104,\n \"[105]\": font105,\n \"[106]\": font106,\n \"[107]\": font107,\n \"[108]\": font108,\n \"[109]\": font109,\n \"[110]\": font110,\n \"[111]\": font111,\n \"[112]\": font112,\n \"[113]\": font113,\n \"[114]\": font114,\n \"[115]\": font115,\n \"[116]\": font116,\n \"[117]\": font117,\n \"[118]\": font118,\n \"[119]\": font119,\n};\nconst loads = new Map<string, Promise<void>>();\n\nexport async function loadNotoSansJp(text: string): Promise<void> {\n const required = new Set<string>();\n for (const character of text) {\n const codePoint = character.codePointAt(0);\n if (codePoint === undefined) continue;\n for (const [key, range] of Object.entries(unicodeRanges)) {\n if (!fontUrls[key]) continue;\n if (rangeContains(range, codePoint)) {\n required.add(key);\n break;\n }\n }\n }\n await Promise.all([...required].map(loadShard));\n}\n\nfunction loadShard(key: string): Promise<void> {\n const existing = loads.get(key);\n if (existing) return existing;\n const url = fontUrls[key];\n const unicodeRange = (unicodeRanges as Record<string, string>)[key];\n if (!url || !unicodeRange) throw new Error(`Missing Noto Sans JP shard ${key}`);\n const loading = new FontFace(\n \"Noto Sans JP Variable\",\n `url(\"${url}\") format(\"woff2-variations\")`,\n { style: \"normal\", weight: \"100 900\", unicodeRange },\n )\n .load()\n .then((font) => {\n document.fonts.add(font);\n })\n .catch((error: unknown) => {\n loads.delete(key);\n throw error;\n });\n loads.set(key, loading);\n return loading;\n}\n\nfunction rangeContains(range: string, codePoint: number): boolean {\n for (const token of range.split(\",\")) {\n const [startText, endText = startText] = token.trim().slice(2).split(\"-\");\n const start = Number.parseInt(startText ?? \"\", 16);\n const end = Number.parseInt(endText ?? \"\", 16);\n if (Number.isFinite(start) && codePoint >= start && codePoint <= end) return true;\n }\n return false;\n}\n"],"mappings":";;;AACA,OAAO,mBAAmB;AAC1B,OAAO,WAAW;AAClB,OAAO,WAAW;AAClB,OAAO,WAAW;AAClB,OAAO,WAAW;AAClB,OAAO,WAAW;AAClB,OAAO,WAAW;AAClB,OAAO,WAAW;AAClB,OAAO,WAAW;AAClB,OAAO,WAAW;AAClB,OAAO,WAAW;AAClB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,aAAa;AACpB,OAAO,aAAa;AACpB,OAAO,aAAa;AACpB,OAAO,aAAa;AACpB,OAAO,aAAa;AACpB,OAAO,aAAa;AACpB,OAAO,aAAa;AACpB,OAAO,aAAa;AACpB,OAAO,aAAa;AACpB,OAAO,aAAa;AACpB,OAAO,aAAa;AACpB,OAAO,aAAa;AACpB,OAAO,aAAa;AACpB,OAAO,aAAa;AACpB,OAAO,aAAa;AACpB,OAAO,aAAa;AACpB,OAAO,aAAa;AACpB,OAAO,aAAa;AACpB,OAAO,aAAa;AACpB,OAAO,aAAa;AAEpB,IAAM,WAAmC;AAAA,EACvC,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AACX;AACA,IAAM,QAAQ,oBAAI,IAA2B;AAE7C,eAAsB,eAAe,MAA6B;AAChE,QAAM,WAAW,oBAAI,IAAY;AACjC,aAAW,aAAa,MAAM;AAC5B,UAAM,YAAY,UAAU,YAAY,CAAC;AACzC,QAAI,cAAc,OAAW;AAC7B,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,aAAa,GAAG;AACxD,UAAI,CAAC,SAAS,GAAG,EAAG;AACpB,UAAI,cAAc,OAAO,SAAS,GAAG;AACnC,iBAAS,IAAI,GAAG;AAChB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,QAAM,QAAQ,IAAI,CAAC,GAAG,QAAQ,EAAE,IAAI,SAAS,CAAC;AAChD;AAEA,SAAS,UAAU,KAA4B;AAC7C,QAAM,WAAW,MAAM,IAAI,GAAG;AAC9B,MAAI,SAAU,QAAO;AACrB,QAAM,MAAM,SAAS,GAAG;AACxB,QAAM,eAAgB,cAAyC,GAAG;AAClE,MAAI,CAAC,OAAO,CAAC,aAAc,OAAM,IAAI,MAAM,8BAA8B,GAAG,EAAE;AAC9E,QAAM,UAAU,IAAI;AAAA,IAClB;AAAA,IACA,QAAQ,GAAG;AAAA,IACX,EAAE,OAAO,UAAU,QAAQ,WAAW,aAAa;AAAA,EACrD,EACG,KAAK,EACL,KAAK,CAAC,SAAS;AACd,aAAS,MAAM,IAAI,IAAI;AAAA,EACzB,CAAC,EACA,MAAM,CAAC,UAAmB;AACzB,UAAM,OAAO,GAAG;AAChB,UAAM;AAAA,EACR,CAAC;AACH,QAAM,IAAI,KAAK,OAAO;AACtB,SAAO;AACT;AAEA,SAAS,cAAc,OAAe,WAA4B;AAChE,aAAW,SAAS,MAAM,MAAM,GAAG,GAAG;AACpC,UAAM,CAAC,WAAW,UAAU,SAAS,IAAI,MAAM,KAAK,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG;AACxE,UAAM,QAAQ,OAAO,SAAS,aAAa,IAAI,EAAE;AACjD,UAAM,MAAM,OAAO,SAAS,WAAW,IAAI,EAAE;AAC7C,QAAI,OAAO,SAAS,KAAK,KAAK,aAAa,SAAS,aAAa,IAAK,QAAO;AAAA,EAC/E;AACA,SAAO;AACT;","names":[]}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
1
3
|
// src/timeline/platform-activity-row.tsx
|
|
2
4
|
function PlatformActivityRow({
|
|
3
5
|
item,
|
|
@@ -179,4 +181,4 @@ function startupDuration(durationMs) {
|
|
|
179
181
|
export {
|
|
180
182
|
PlatformActivityRow as default
|
|
181
183
|
};
|
|
182
|
-
//# sourceMappingURL=platform-activity-row-
|
|
184
|
+
//# sourceMappingURL=platform-activity-row-PJJVATTZ.js.map
|
package/dist/{platform-activity-row-627BFZ46.js.map → platform-activity-row-PJJVATTZ.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/timeline/platform-activity-row.tsx"],"sourcesContent":["import type { ReasoningItem, SandboxItem, StartupPhaseItem } from \"./types\";\n\ntype RowJsx = typeof import(\"react/jsx-runtime\").jsx;\ntype RowJsxs = typeof import(\"react/jsx-runtime\").jsxs;\n\nexport default function PlatformActivityRow({\n item,\n d: ActivityDisclosure,\n p: PayloadBlock,\n t: displayName,\n b: BotIcon,\n m: Markdown,\n j,\n s,\n}: {\n item: ReasoningItem | SandboxItem | StartupPhaseItem;\n d: typeof import(\"./shared\").ActivityDisclosure;\n p: typeof import(\"./shared\").PayloadBlock;\n t: (name: string) => string;\n b: typeof import(\"lucide-react\").BotIcon;\n m: typeof import(\"../components/markdown\").Markdown;\n j: RowJsx;\n s: RowJsxs;\n}) {\n if (item.kind === \"reasoning\") {\n return j(ActivityDisclosure, {\n icon: brainIcon(j, s),\n iconTone: \"muted\",\n title: item.streaming\n ? \"Thinking\"\n : j(\"span\", {\n className: \"font-normal italic text-og-fg-subtle\",\n children: \"Thought\",\n }),\n running: item.streaming,\n compactPreview: item.text.replace(/\\*\\*|__|`/g, \"\").replace(/\\s+/g, \" \"),\n preview: j(\"span\", {\n className: \"og-reasoning-preview\",\n children: j(Markdown, { streaming: item.streaming, children: item.text }),\n }),\n children: j(\"div\", {\n className: \"text-og-base leading-6 text-og-fg-muted [&_strong]:text-og-fg-muted\",\n children: j(Markdown, { streaming: item.streaming, children: item.text }),\n }),\n });\n }\n if (item.kind === \"sandbox\") {\n return s(ActivityDisclosure, {\n icon: terminalIcon(j, s),\n iconTone:\n item.status === \"failed\" ? \"failed\" : item.status === \"running\" ? \"running\" : \"muted\",\n title: sandboxRowTitle(item, displayName),\n running: item.status === \"running\",\n failed: item.status === \"failed\",\n cancelled: item.status === \"cancelled\",\n preview: item.command ?? undefined,\n children: [\n item.command ? j(PayloadBlock, { label: \"Command\", value: item.command }, \"command\") : null,\n item.output ? j(PayloadBlock, { label: \"Output\", value: item.output }, \"output\") : null,\n ],\n });\n }\n\n const failed = item.status === \"failed\";\n const running = item.status === \"running\";\n const duration = startupDuration(item.durationMs);\n return j(ActivityDisclosure, {\n icon: j(BotIcon, { className: \"size-3.5\" }),\n iconTone: failed ? \"failed\" : running ? \"running\" : \"muted\",\n title: item.blockedReason\n ? STARTUP_WAIT_TITLES[item.blockedReason]\n : startupPhaseTitle(item.phase, item.status, item.outcome),\n preview:\n item.phase === \"model_preparation\"\n ? \"Includes overlapping sandbox startup, custom environment setup, repository preparation, and runtime setup shown below.\"\n : undefined,\n running,\n failed,\n cancelled: item.status === \"cancelled\",\n chip: duration ? { tone: failed ? \"bad\" : \"muted\", text: duration } : undefined,\n expandable: false,\n });\n}\n\nfunction brainIcon(j: RowJsx, s: RowJsxs) {\n return lucideIcon(j, s, \"brain\", [\n j(\"path\", { d: \"M 12 18V5\" }, \"spine\"),\n j(\"path\", { d: \"M15 13a4.17 4.17 0 0 1-3-4 4.17 4.17 0 0 1-3 4\" }, \"center\"),\n j(\"path\", { d: \"M17.598 6.5A3 3 0 1 0 12 5a3 3 0 1 0-5.598 1.5\" }, \"top\"),\n j(\"path\", { d: \"M17.997 5.125a4 4 0 0 1 2.526 5.77\" }, \"upper-right\"),\n j(\"path\", { d: \"M18 18a4 4 0 0 0 2-7.464\" }, \"right\"),\n j(\"path\", { d: \"M19.967 17.483A4 4 0 1 1 12 18a4 4 0 1 1-7.967-.517\" }, \"base\"),\n j(\"path\", { d: \"M6 18a4 4 0 0 1-2-7.464\" }, \"left\"),\n j(\"path\", { d: \"M6.003 5.125a4 4 0 0 0-2.526 5.77\" }, \"upper-left\"),\n ]);\n}\n\nfunction terminalIcon(j: RowJsx, s: RowJsxs) {\n return lucideIcon(j, s, \"square-terminal\", [\n j(\"path\", { d: \"m7 11 2-2-2-2\" }, \"prompt\"),\n j(\"path\", { d: \"M11 13h4\" }, \"cursor\"),\n j(\"rect\", { width: 18, height: 18, x: 3, y: 3, rx: 2, ry: 2 }, \"frame\"),\n ]);\n}\n\nfunction lucideIcon(j: RowJsx, s: RowJsxs, name: string, children: ReturnType<RowJsx>[]) {\n return s(\"svg\", {\n \"aria-hidden\": \"true\",\n className: `lucide lucide-${name} size-3.5`,\n fill: \"none\",\n height: 24,\n stroke: \"currentColor\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n viewBox: \"0 0 24 24\",\n width: 24,\n children,\n });\n}\n\nfunction sandboxRowTitle(item: SandboxItem, displayName: (name: string) => string): string {\n if (item.name === \"sandbox.provision\") {\n return startupPhaseTitle(\n \"sandbox\",\n item.status === \"cancelled\" ? \"complete\" : item.status,\n item.origin ?? null,\n );\n }\n return displayName(item.name);\n}\n\nfunction startupPhaseTitle(\n phase: StartupPhaseItem[\"phase\"],\n status: StartupPhaseItem[\"status\"],\n outcome: StartupPhaseItem[\"outcome\"],\n): string {\n if (status === \"complete\" && phase === \"sandbox\" && outcome && outcome !== \"skipped\") {\n return `Sandbox ${outcome === \"resumed\" ? \"reattached\" : outcome}`;\n }\n if (status === \"complete\" && phase === \"rig\" && outcome === \"skipped\") {\n return \"Sandbox Environment already ready\";\n }\n const statusIndex =\n status === \"running\" ? 0 : status === \"failed\" ? 1 : status === \"cancelled\" ? 2 : 3;\n return STARTUP_PHASE_TITLES[phase][statusIndex];\n}\n\nconst STARTUP_WAIT_TITLES: Record<NonNullable<StartupPhaseItem[\"blockedReason\"]>, string> = {\n capture_in_progress: \"Waiting for sandbox checkpoint\",\n rotation_in_progress: \"Waiting for sandbox rotation\",\n provider_recovery_in_progress: \"Waiting for sandbox recovery\",\n};\n\nconst STARTUP_PHASE_TITLES: Record<\n StartupPhaseItem[\"phase\"],\n readonly [string, string, string, string]\n> = {\n queue: [\n \"Waiting for a worker\",\n \"Worker startup failed\",\n \"Worker wait interrupted\",\n \"Worker started\",\n ],\n sandbox: [\n \"Starting sandbox\",\n \"Sandbox didn’t start\",\n \"Sandbox startup interrupted\",\n \"Sandbox ready\",\n ],\n rig: [\n \"Setting up sandbox environment\",\n \"Sandbox Environment setup failed\",\n \"Sandbox Environment setup interrupted\",\n \"Sandbox Environment ready\",\n ],\n repository: [\n \"Preparing repository\",\n \"Repository preparation failed\",\n \"Repository preparation interrupted\",\n \"Repository ready\",\n ],\n files: [\n \"Preparing files\",\n \"File preparation failed\",\n \"File preparation interrupted\",\n \"Files ready\",\n ],\n tools: [\n \"Connecting tools\",\n \"Tool connection failed\",\n \"Tool connection interrupted\",\n \"Tools ready\",\n ],\n model_preparation: [\n \"Preparing runtime and model request\",\n \"Runtime/model preparation failed\",\n \"Runtime/model preparation interrupted\",\n \"Model request dispatched\",\n ],\n provider_first_byte: [\n \"Waiting for model\",\n \"Model didn’t respond\",\n \"Model wait interrupted\",\n \"Model started responding\",\n ],\n};\n\nfunction startupDuration(durationMs: number | null): string | null {\n if (durationMs === null || !Number.isFinite(durationMs) || durationMs < 0) return null;\n if (durationMs < 1_000) return `${Math.round(durationMs)}ms`;\n if (durationMs < 60_000) return `${(durationMs / 1_000).toFixed(1)}s`;\n const minutes = Math.floor(durationMs / 60_000);\n const seconds = Math.round((durationMs % 60_000) / 1_000);\n return `${minutes}m ${String(seconds).padStart(2, \"0\")}s`;\n}\n"],"mappings":";AAKe,SAAR,oBAAqC;AAAA,EAC1C;AAAA,EACA,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH;AAAA,EACA;AACF,GASG;AACD,MAAI,KAAK,SAAS,aAAa;AAC7B,WAAO,EAAE,oBAAoB;AAAA,MAC3B,MAAM,UAAU,GAAG,CAAC;AAAA,MACpB,UAAU;AAAA,MACV,OAAO,KAAK,YACR,aACA,EAAE,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,UAAU;AAAA,MACZ,CAAC;AAAA,MACL,SAAS,KAAK;AAAA,MACd,gBAAgB,KAAK,KAAK,QAAQ,cAAc,EAAE,EAAE,QAAQ,QAAQ,GAAG;AAAA,MACvE,SAAS,EAAE,QAAQ;AAAA,QACjB,WAAW;AAAA,QACX,UAAU,EAAE,UAAU,EAAE,WAAW,KAAK,WAAW,UAAU,KAAK,KAAK,CAAC;AAAA,MAC1E,CAAC;AAAA,MACD,UAAU,EAAE,OAAO;AAAA,QACjB,WAAW;AAAA,QACX,UAAU,EAAE,UAAU,EAAE,WAAW,KAAK,WAAW,UAAU,KAAK,KAAK,CAAC;AAAA,MAC1E,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AACA,MAAI,KAAK,SAAS,WAAW;AAC3B,WAAO,EAAE,oBAAoB;AAAA,MAC3B,MAAM,aAAa,GAAG,CAAC;AAAA,MACvB,UACE,KAAK,WAAW,WAAW,WAAW,KAAK,WAAW,YAAY,YAAY;AAAA,MAChF,OAAO,gBAAgB,MAAM,WAAW;AAAA,MACxC,SAAS,KAAK,WAAW;AAAA,MACzB,QAAQ,KAAK,WAAW;AAAA,MACxB,WAAW,KAAK,WAAW;AAAA,MAC3B,SAAS,KAAK,WAAW;AAAA,MACzB,UAAU;AAAA,QACR,KAAK,UAAU,EAAE,cAAc,EAAE,OAAO,WAAW,OAAO,KAAK,QAAQ,GAAG,SAAS,IAAI;AAAA,QACvF,KAAK,SAAS,EAAE,cAAc,EAAE,OAAO,UAAU,OAAO,KAAK,OAAO,GAAG,QAAQ,IAAI;AAAA,MACrF;AAAA,IACF,CAAC;AAAA,EACH;AAEA,QAAM,SAAS,KAAK,WAAW;AAC/B,QAAM,UAAU,KAAK,WAAW;AAChC,QAAM,WAAW,gBAAgB,KAAK,UAAU;AAChD,SAAO,EAAE,oBAAoB;AAAA,IAC3B,MAAM,EAAE,SAAS,EAAE,WAAW,WAAW,CAAC;AAAA,IAC1C,UAAU,SAAS,WAAW,UAAU,YAAY;AAAA,IACpD,OAAO,KAAK,gBACR,oBAAoB,KAAK,aAAa,IACtC,kBAAkB,KAAK,OAAO,KAAK,QAAQ,KAAK,OAAO;AAAA,IAC3D,SACE,KAAK,UAAU,sBACX,2HACA;AAAA,IACN;AAAA,IACA;AAAA,IACA,WAAW,KAAK,WAAW;AAAA,IAC3B,MAAM,WAAW,EAAE,MAAM,SAAS,QAAQ,SAAS,MAAM,SAAS,IAAI;AAAA,IACtE,YAAY;AAAA,EACd,CAAC;AACH;AAEA,SAAS,UAAU,GAAW,GAAY;AACxC,SAAO,WAAW,GAAG,GAAG,SAAS;AAAA,IAC/B,EAAE,QAAQ,EAAE,GAAG,YAAY,GAAG,OAAO;AAAA,IACrC,EAAE,QAAQ,EAAE,GAAG,iDAAiD,GAAG,QAAQ;AAAA,IAC3E,EAAE,QAAQ,EAAE,GAAG,iDAAiD,GAAG,KAAK;AAAA,IACxE,EAAE,QAAQ,EAAE,GAAG,qCAAqC,GAAG,aAAa;AAAA,IACpE,EAAE,QAAQ,EAAE,GAAG,2BAA2B,GAAG,OAAO;AAAA,IACpD,EAAE,QAAQ,EAAE,GAAG,sDAAsD,GAAG,MAAM;AAAA,IAC9E,EAAE,QAAQ,EAAE,GAAG,0BAA0B,GAAG,MAAM;AAAA,IAClD,EAAE,QAAQ,EAAE,GAAG,oCAAoC,GAAG,YAAY;AAAA,EACpE,CAAC;AACH;AAEA,SAAS,aAAa,GAAW,GAAY;AAC3C,SAAO,WAAW,GAAG,GAAG,mBAAmB;AAAA,IACzC,EAAE,QAAQ,EAAE,GAAG,gBAAgB,GAAG,QAAQ;AAAA,IAC1C,EAAE,QAAQ,EAAE,GAAG,WAAW,GAAG,QAAQ;AAAA,IACrC,EAAE,QAAQ,EAAE,OAAO,IAAI,QAAQ,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,EAAE,GAAG,OAAO;AAAA,EACxE,CAAC;AACH;AAEA,SAAS,WAAW,GAAW,GAAY,MAAc,UAAgC;AACvF,SAAO,EAAE,OAAO;AAAA,IACd,eAAe;AAAA,IACf,WAAW,iBAAiB,IAAI;AAAA,IAChC,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,aAAa;AAAA,IACb,SAAS;AAAA,IACT,OAAO;AAAA,IACP;AAAA,EACF,CAAC;AACH;AAEA,SAAS,gBAAgB,MAAmB,aAA+C;AACzF,MAAI,KAAK,SAAS,qBAAqB;AACrC,WAAO;AAAA,MACL;AAAA,MACA,KAAK,WAAW,cAAc,aAAa,KAAK;AAAA,MAChD,KAAK,UAAU;AAAA,IACjB;AAAA,EACF;AACA,SAAO,YAAY,KAAK,IAAI;AAC9B;AAEA,SAAS,kBACP,OACA,QACA,SACQ;AACR,MAAI,WAAW,cAAc,UAAU,aAAa,WAAW,YAAY,WAAW;AACpF,WAAO,WAAW,YAAY,YAAY,eAAe,OAAO;AAAA,EAClE;AACA,MAAI,WAAW,cAAc,UAAU,SAAS,YAAY,WAAW;AACrE,WAAO;AAAA,EACT;AACA,QAAM,cACJ,WAAW,YAAY,IAAI,WAAW,WAAW,IAAI,WAAW,cAAc,IAAI;AACpF,SAAO,qBAAqB,KAAK,EAAE,WAAW;AAChD;AAEA,IAAM,sBAAsF;AAAA,EAC1F,qBAAqB;AAAA,EACrB,sBAAsB;AAAA,EACtB,+BAA+B;AACjC;AAEA,IAAM,uBAGF;AAAA,EACF,OAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,SAAS;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,KAAK;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,YAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,mBAAmB;AAAA,IACjB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,qBAAqB;AAAA,IACnB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEA,SAAS,gBAAgB,YAA0C;AACjE,MAAI,eAAe,QAAQ,CAAC,OAAO,SAAS,UAAU,KAAK,aAAa,EAAG,QAAO;AAClF,MAAI,aAAa,IAAO,QAAO,GAAG,KAAK,MAAM,UAAU,CAAC;AACxD,MAAI,aAAa,IAAQ,QAAO,IAAI,aAAa,KAAO,QAAQ,CAAC,CAAC;AAClE,QAAM,UAAU,KAAK,MAAM,aAAa,GAAM;AAC9C,QAAM,UAAU,KAAK,MAAO,aAAa,MAAU,GAAK;AACxD,SAAO,GAAG,OAAO,KAAK,OAAO,OAAO,EAAE,SAAS,GAAG,GAAG,CAAC;AACxD;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/timeline/platform-activity-row.tsx"],"sourcesContent":["import type { ReasoningItem, SandboxItem, StartupPhaseItem } from \"./types\";\n\ntype RowJsx = typeof import(\"react/jsx-runtime\").jsx;\ntype RowJsxs = typeof import(\"react/jsx-runtime\").jsxs;\n\nexport default function PlatformActivityRow({\n item,\n d: ActivityDisclosure,\n p: PayloadBlock,\n t: displayName,\n b: BotIcon,\n m: Markdown,\n j,\n s,\n}: {\n item: ReasoningItem | SandboxItem | StartupPhaseItem;\n d: typeof import(\"./shared\").ActivityDisclosure;\n p: typeof import(\"./shared\").PayloadBlock;\n t: (name: string) => string;\n b: typeof import(\"lucide-react\").BotIcon;\n m: typeof import(\"../components/markdown\").Markdown;\n j: RowJsx;\n s: RowJsxs;\n}) {\n if (item.kind === \"reasoning\") {\n return j(ActivityDisclosure, {\n icon: brainIcon(j, s),\n iconTone: \"muted\",\n title: item.streaming\n ? \"Thinking\"\n : j(\"span\", {\n className: \"font-normal italic text-og-fg-subtle\",\n children: \"Thought\",\n }),\n running: item.streaming,\n compactPreview: item.text.replace(/\\*\\*|__|`/g, \"\").replace(/\\s+/g, \" \"),\n preview: j(\"span\", {\n className: \"og-reasoning-preview\",\n children: j(Markdown, { streaming: item.streaming, children: item.text }),\n }),\n children: j(\"div\", {\n className: \"text-og-base leading-6 text-og-fg-muted [&_strong]:text-og-fg-muted\",\n children: j(Markdown, { streaming: item.streaming, children: item.text }),\n }),\n });\n }\n if (item.kind === \"sandbox\") {\n return s(ActivityDisclosure, {\n icon: terminalIcon(j, s),\n iconTone:\n item.status === \"failed\" ? \"failed\" : item.status === \"running\" ? \"running\" : \"muted\",\n title: sandboxRowTitle(item, displayName),\n running: item.status === \"running\",\n failed: item.status === \"failed\",\n cancelled: item.status === \"cancelled\",\n preview: item.command ?? undefined,\n children: [\n item.command ? j(PayloadBlock, { label: \"Command\", value: item.command }, \"command\") : null,\n item.output ? j(PayloadBlock, { label: \"Output\", value: item.output }, \"output\") : null,\n ],\n });\n }\n\n const failed = item.status === \"failed\";\n const running = item.status === \"running\";\n const duration = startupDuration(item.durationMs);\n return j(ActivityDisclosure, {\n icon: j(BotIcon, { className: \"size-3.5\" }),\n iconTone: failed ? \"failed\" : running ? \"running\" : \"muted\",\n title: item.blockedReason\n ? STARTUP_WAIT_TITLES[item.blockedReason]\n : startupPhaseTitle(item.phase, item.status, item.outcome),\n preview:\n item.phase === \"model_preparation\"\n ? \"Includes overlapping sandbox startup, custom environment setup, repository preparation, and runtime setup shown below.\"\n : undefined,\n running,\n failed,\n cancelled: item.status === \"cancelled\",\n chip: duration ? { tone: failed ? \"bad\" : \"muted\", text: duration } : undefined,\n expandable: false,\n });\n}\n\nfunction brainIcon(j: RowJsx, s: RowJsxs) {\n return lucideIcon(j, s, \"brain\", [\n j(\"path\", { d: \"M 12 18V5\" }, \"spine\"),\n j(\"path\", { d: \"M15 13a4.17 4.17 0 0 1-3-4 4.17 4.17 0 0 1-3 4\" }, \"center\"),\n j(\"path\", { d: \"M17.598 6.5A3 3 0 1 0 12 5a3 3 0 1 0-5.598 1.5\" }, \"top\"),\n j(\"path\", { d: \"M17.997 5.125a4 4 0 0 1 2.526 5.77\" }, \"upper-right\"),\n j(\"path\", { d: \"M18 18a4 4 0 0 0 2-7.464\" }, \"right\"),\n j(\"path\", { d: \"M19.967 17.483A4 4 0 1 1 12 18a4 4 0 1 1-7.967-.517\" }, \"base\"),\n j(\"path\", { d: \"M6 18a4 4 0 0 1-2-7.464\" }, \"left\"),\n j(\"path\", { d: \"M6.003 5.125a4 4 0 0 0-2.526 5.77\" }, \"upper-left\"),\n ]);\n}\n\nfunction terminalIcon(j: RowJsx, s: RowJsxs) {\n return lucideIcon(j, s, \"square-terminal\", [\n j(\"path\", { d: \"m7 11 2-2-2-2\" }, \"prompt\"),\n j(\"path\", { d: \"M11 13h4\" }, \"cursor\"),\n j(\"rect\", { width: 18, height: 18, x: 3, y: 3, rx: 2, ry: 2 }, \"frame\"),\n ]);\n}\n\nfunction lucideIcon(j: RowJsx, s: RowJsxs, name: string, children: ReturnType<RowJsx>[]) {\n return s(\"svg\", {\n \"aria-hidden\": \"true\",\n className: `lucide lucide-${name} size-3.5`,\n fill: \"none\",\n height: 24,\n stroke: \"currentColor\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n viewBox: \"0 0 24 24\",\n width: 24,\n children,\n });\n}\n\nfunction sandboxRowTitle(item: SandboxItem, displayName: (name: string) => string): string {\n if (item.name === \"sandbox.provision\") {\n return startupPhaseTitle(\n \"sandbox\",\n item.status === \"cancelled\" ? \"complete\" : item.status,\n item.origin ?? null,\n );\n }\n return displayName(item.name);\n}\n\nfunction startupPhaseTitle(\n phase: StartupPhaseItem[\"phase\"],\n status: StartupPhaseItem[\"status\"],\n outcome: StartupPhaseItem[\"outcome\"],\n): string {\n if (status === \"complete\" && phase === \"sandbox\" && outcome && outcome !== \"skipped\") {\n return `Sandbox ${outcome === \"resumed\" ? \"reattached\" : outcome}`;\n }\n if (status === \"complete\" && phase === \"rig\" && outcome === \"skipped\") {\n return \"Sandbox Environment already ready\";\n }\n const statusIndex =\n status === \"running\" ? 0 : status === \"failed\" ? 1 : status === \"cancelled\" ? 2 : 3;\n return STARTUP_PHASE_TITLES[phase][statusIndex];\n}\n\nconst STARTUP_WAIT_TITLES: Record<NonNullable<StartupPhaseItem[\"blockedReason\"]>, string> = {\n capture_in_progress: \"Waiting for sandbox checkpoint\",\n rotation_in_progress: \"Waiting for sandbox rotation\",\n provider_recovery_in_progress: \"Waiting for sandbox recovery\",\n};\n\nconst STARTUP_PHASE_TITLES: Record<\n StartupPhaseItem[\"phase\"],\n readonly [string, string, string, string]\n> = {\n queue: [\n \"Waiting for a worker\",\n \"Worker startup failed\",\n \"Worker wait interrupted\",\n \"Worker started\",\n ],\n sandbox: [\n \"Starting sandbox\",\n \"Sandbox didn’t start\",\n \"Sandbox startup interrupted\",\n \"Sandbox ready\",\n ],\n rig: [\n \"Setting up sandbox environment\",\n \"Sandbox Environment setup failed\",\n \"Sandbox Environment setup interrupted\",\n \"Sandbox Environment ready\",\n ],\n repository: [\n \"Preparing repository\",\n \"Repository preparation failed\",\n \"Repository preparation interrupted\",\n \"Repository ready\",\n ],\n files: [\n \"Preparing files\",\n \"File preparation failed\",\n \"File preparation interrupted\",\n \"Files ready\",\n ],\n tools: [\n \"Connecting tools\",\n \"Tool connection failed\",\n \"Tool connection interrupted\",\n \"Tools ready\",\n ],\n model_preparation: [\n \"Preparing runtime and model request\",\n \"Runtime/model preparation failed\",\n \"Runtime/model preparation interrupted\",\n \"Model request dispatched\",\n ],\n provider_first_byte: [\n \"Waiting for model\",\n \"Model didn’t respond\",\n \"Model wait interrupted\",\n \"Model started responding\",\n ],\n};\n\nfunction startupDuration(durationMs: number | null): string | null {\n if (durationMs === null || !Number.isFinite(durationMs) || durationMs < 0) return null;\n if (durationMs < 1_000) return `${Math.round(durationMs)}ms`;\n if (durationMs < 60_000) return `${(durationMs / 1_000).toFixed(1)}s`;\n const minutes = Math.floor(durationMs / 60_000);\n const seconds = Math.round((durationMs % 60_000) / 1_000);\n return `${minutes}m ${String(seconds).padStart(2, \"0\")}s`;\n}\n"],"mappings":"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","names":[]}
|