@opengeni/react 1.4.2 → 1.4.5-canary.37458084490001
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 +17 -6
- package/dist/artifacts.d.ts +1 -0
- package/dist/artifacts.js +22 -15
- package/dist/artifacts.js.map +1 -1
- package/dist/{browser-viewer-WGJ43YGI.js → browser-viewer-CV23VIHB.js} +8 -6
- package/dist/chunk-3ZC6QPOM.js +174 -0
- package/dist/chunk-3ZC6QPOM.js.map +1 -0
- package/dist/{chunk-YVFRBXST.js → chunk-4BCVCJSU.js} +2 -2
- package/dist/{chunk-JHTIMBOL.js → chunk-5JSUNNQN.js} +26 -4
- package/dist/{chunk-JHTIMBOL.js.map → chunk-5JSUNNQN.js.map} +1 -1
- package/dist/{chunk-MDIXFKA3.js → chunk-6FOTSVWU.js} +303 -109
- package/dist/chunk-6FOTSVWU.js.map +1 -0
- package/dist/{chunk-IUHHPMAX.js → chunk-7RRBX5EM.js} +14 -85
- package/dist/chunk-7RRBX5EM.js.map +1 -0
- package/dist/{chunk-L2J3PU7A.js → chunk-7ZB7I3KP.js} +24 -98
- package/dist/chunk-7ZB7I3KP.js.map +1 -0
- package/dist/{chunk-LVS3MH5T.js → chunk-ATIRUHBZ.js} +128 -10
- package/dist/chunk-ATIRUHBZ.js.map +1 -0
- package/dist/chunk-BOFEQC6K.js +162 -0
- package/dist/chunk-BOFEQC6K.js.map +1 -0
- package/dist/{chunk-VCSERYXH.js → chunk-CESBPQP5.js} +309 -162
- package/dist/chunk-CESBPQP5.js.map +1 -0
- package/dist/{chunk-IYQCWGU5.js → chunk-GHJU7XG7.js} +35 -62
- package/dist/chunk-GHJU7XG7.js.map +1 -0
- package/dist/{chunk-G6YRCIYJ.js → chunk-HNVWMDNN.js} +55 -60
- package/dist/chunk-HNVWMDNN.js.map +1 -0
- package/dist/{chunk-PHBFJCEU.js → chunk-I5EGRXXG.js} +110 -7
- package/dist/chunk-I5EGRXXG.js.map +1 -0
- package/dist/{chunk-PBCZL4JP.js → chunk-INIZSNXT.js} +2 -2
- package/dist/{chunk-XS67YG5R.js → chunk-IX3K4THH.js} +24 -3
- package/dist/chunk-IX3K4THH.js.map +1 -0
- package/dist/chunk-IZV5FTJC.js +55 -0
- package/dist/chunk-IZV5FTJC.js.map +1 -0
- package/dist/chunk-JDJJMBB3.js +1883 -0
- package/dist/chunk-JDJJMBB3.js.map +1 -0
- package/dist/{chunk-C5BF4L26.js → chunk-KHF2VRXF.js} +7 -7
- package/dist/{chunk-QMMCJGFI.js → chunk-L5OKM2VX.js} +2 -2
- package/dist/chunk-LHF6BVM4.js +83 -0
- package/dist/chunk-LHF6BVM4.js.map +1 -0
- package/dist/chunk-N7S72EXK.js +25 -0
- package/dist/chunk-N7S72EXK.js.map +1 -0
- package/dist/{chunk-CVYCLFMH.js → chunk-PEHTX3V7.js} +19 -1
- package/dist/chunk-PEHTX3V7.js.map +1 -0
- package/dist/chunk-R5R5RQQD.js +51 -0
- package/dist/chunk-R5R5RQQD.js.map +1 -0
- package/dist/chunk-RI42H5IU.js +326 -0
- package/dist/chunk-RI42H5IU.js.map +1 -0
- package/dist/{chunk-JH7V627O.js → chunk-SHLZMAJN.js} +2 -11
- package/dist/chunk-SHLZMAJN.js.map +1 -0
- package/dist/{chunk-CREMJMVN.js → chunk-TZQSHCZN.js} +692 -1996
- package/dist/chunk-TZQSHCZN.js.map +1 -0
- package/dist/chunk-ZIB4H5LN.js +101 -0
- package/dist/chunk-ZIB4H5LN.js.map +1 -0
- package/dist/client.d.ts +9 -3
- package/dist/clipboard.js +1 -1
- package/dist/components/browser-viewer.d.ts +6 -0
- package/dist/components/composer.d.ts +3 -69
- package/dist/components/human-input-form.d.ts +3 -32
- package/dist/components/markdown.d.ts +8 -0
- package/dist/components/model-policy-picker.d.ts +4 -37
- package/dist/components/opper-mark.d.ts +7 -0
- package/dist/components/provider-recovery-notice.d.ts +15 -0
- package/dist/components/remark-soft-line-breaks.d.ts +38 -0
- package/dist/components/sandbox-workspace.d.ts +13 -0
- package/dist/components/session-chrome.d.ts +5 -3
- package/dist/components/session-conversation.d.ts +15 -3
- package/dist/composer-messages.d.ts +74 -0
- package/dist/composer-messages.js +9 -0
- package/dist/composer.js +15 -10
- package/dist/{computer-viewer-46UIN7F3.js → computer-viewer-K4CKYRX6.js} +4 -4
- package/dist/connect-setup.d.ts +2 -0
- package/dist/connect.d.ts +1 -1
- package/dist/connect.js +21 -6
- package/dist/connect.js.map +1 -1
- package/dist/{embedded-voice-NIL4RDX3.js → embedded-voice-3ZFWWJ6O.js} +6 -4
- package/dist/{embedded-voice-NIL4RDX3.js.map → embedded-voice-3ZFWWJ6O.js.map} +1 -1
- package/dist/hooks/shared-machines-list.d.ts +4 -0
- package/dist/hooks/use-client-config-flags.d.ts +6 -0
- package/dist/hooks/use-computer-session.d.ts +2 -0
- package/dist/hooks/use-goal.d.ts +2 -1
- package/dist/human-input-model.d.ts +40 -0
- package/dist/index.d.ts +4 -1
- package/dist/index.js +116 -73
- package/dist/index.js.map +1 -1
- package/dist/interaction.js +5 -5
- package/dist/{latest-question-2POFPYNB.js → latest-question-SWC6QEVN.js} +3 -3
- package/dist/lib/clipboard.d.ts +7 -0
- package/dist/lib/provider-recovery.d.ts +49 -0
- package/dist/machines.js +2 -2
- package/dist/model-mark-paths.d.ts +34 -0
- package/dist/model-mark-paths.js +16 -0
- package/dist/model-picker-model.d.ts +111 -0
- package/dist/model-picker-model.js +25 -0
- package/dist/model-picker-model.js.map +1 -0
- package/dist/{model-policy-picker-menu-WRNSRFQC.js → model-policy-picker-menu-NM4RPTY6.js} +6 -4
- package/dist/model-policy-picker-menu-NM4RPTY6.js.map +1 -0
- package/dist/model-policy.d.ts +10 -0
- package/dist/model-policy.js +5 -1
- package/dist/organization-model.d.ts +32 -0
- package/dist/organization-model.js +65 -0
- package/dist/organization-model.js.map +1 -0
- package/dist/{platform-activity-row-PJJVATTZ.js → platform-activity-row-NJ47YBXW.js} +7 -84
- package/dist/platform-activity-row-NJ47YBXW.js.map +1 -0
- package/dist/queue-presentation-model.d.ts +72 -0
- package/dist/queue-presentation-model.js +38 -0
- package/dist/queue-presentation-model.js.map +1 -0
- package/dist/{queue-surface-implementation-67FS7FUI.js → queue-surface-implementation-YPJFQ3O6.js} +24 -252
- package/dist/queue-surface-implementation-YPJFQ3O6.js.map +1 -0
- package/dist/realtime.js +5 -3
- package/dist/{sandbox-files-34CJJNOY.js → sandbox-files-RCVCMXG7.js} +5 -5
- package/dist/sandbox-files-RCVCMXG7.js.map +1 -0
- package/dist/sandbox-label-model.d.ts +23 -0
- package/dist/sandbox-label-model.js +28 -0
- package/dist/sandbox-label-model.js.map +1 -0
- package/dist/session-attention-model.d.ts +8 -0
- package/dist/session-attention-model.js +46 -0
- package/dist/session-attention-model.js.map +1 -0
- package/dist/session-feedback-model.d.ts +20 -0
- package/dist/session-feedback-model.js +56 -0
- package/dist/session-feedback-model.js.map +1 -0
- package/dist/session-list-model.d.ts +96 -0
- package/dist/session-list-model.js +219 -0
- package/dist/session-list-model.js.map +1 -0
- package/dist/session-status-model.d.ts +19 -0
- package/dist/session-ui.js +26 -17
- package/dist/session-ui.js.map +1 -1
- package/dist/session.js +8 -6
- package/dist/testing/session-scenarios.d.ts +10 -0
- package/dist/testing/session-scenarios.js +303 -0
- package/dist/testing/session-scenarios.js.map +1 -0
- package/dist/timeline/genie-copy.d.ts +3 -0
- package/dist/timeline/genie-loading.d.ts +11 -0
- package/dist/timeline/index.d.ts +1 -1
- package/dist/timeline/notice-presentation.d.ts +7 -0
- package/dist/timeline/patch-apply-command.d.ts +18 -0
- package/dist/timeline/platform-activity-presentation.d.ts +7 -0
- package/dist/timeline/presented-image.d.ts +6 -1
- package/dist/timeline/question-nav-model.d.ts +23 -0
- package/dist/timeline/registry.d.ts +10 -1
- package/dist/timeline/retained-loaders.d.ts +1 -1
- package/dist/timeline/tool-presentation.d.ts +172 -0
- package/dist/timeline/turn-summary-model.d.ts +90 -0
- package/dist/timeline/turn-summary.d.ts +4 -74
- package/dist/timeline/work-presentation.d.ts +42 -0
- package/dist/timeline-model.d.ts +24 -0
- package/dist/timeline-model.js +152 -0
- package/dist/timeline-model.js.map +1 -0
- package/package.json +47 -3
- package/src/artifacts.ts +1 -0
- package/src/client.ts +9 -3
- package/src/components/browser-viewer.tsx +23 -2
- package/src/components/claude-mark.tsx +2 -1
- package/src/components/composer.tsx +4 -144
- package/src/components/computer-viewer.tsx +139 -30
- package/src/components/grok-mark.tsx +2 -1
- package/src/components/human-input-form.tsx +13 -124
- package/src/components/markdown.tsx +19 -1
- package/src/components/message-timeline.tsx +45 -99
- package/src/components/model-mark.tsx +2 -1
- package/src/components/model-policy-picker-menu.tsx +30 -85
- package/src/components/model-policy-picker.tsx +15 -148
- package/src/components/opper-mark.tsx +18 -0
- package/src/components/provider-recovery-notice.tsx +41 -0
- package/src/components/queue-surface-implementation.tsx +20 -349
- package/src/components/remark-soft-line-breaks.ts +166 -0
- package/src/components/sandbox-workspace.tsx +17 -1
- package/src/components/session-chrome.tsx +114 -99
- package/src/components/session-conversation.tsx +55 -6
- package/src/components/session-list.tsx +1 -1
- package/src/components/session-status.tsx +17 -16
- package/src/composer-messages.ts +150 -0
- package/src/connect-setup.tsx +45 -11
- package/src/connect.ts +1 -1
- package/src/hooks/shared-machines-list.ts +34 -1
- package/src/hooks/use-browser-session.ts +445 -168
- package/src/hooks/use-client-config-flags.ts +8 -0
- package/src/hooks/use-computer-session.ts +334 -98
- package/src/hooks/use-goal.ts +66 -10
- package/src/human-input-model.ts +147 -0
- package/src/index.ts +16 -0
- package/src/lib/clipboard.ts +29 -0
- package/src/lib/format.ts +7 -0
- package/src/lib/provider-recovery.ts +202 -0
- package/src/model-mark-paths.ts +53 -0
- package/src/model-picker-model.ts +330 -0
- package/src/model-policy.ts +43 -2
- package/src/organization-model.ts +118 -0
- package/src/queue-presentation-model.ts +464 -0
- package/src/sandbox-label-model.ts +41 -0
- package/src/session-attention-model.ts +59 -0
- package/src/session-feedback-model.ts +95 -0
- package/src/session-list-model.ts +327 -0
- package/src/session-status-model.ts +62 -0
- package/src/testing/session-scenarios.ts +326 -0
- package/src/timeline/activity-rail.tsx +5 -17
- package/src/timeline/genie-copy.ts +19 -0
- package/src/timeline/genie-loading.tsx +13 -18
- package/src/timeline/index.ts +1 -0
- package/src/timeline/notice-presentation.ts +22 -0
- package/src/timeline/patch-apply-command.tsx +135 -0
- package/src/timeline/platform-activity-presentation.ts +122 -0
- package/src/timeline/platform-activity-row.tsx +6 -96
- package/src/timeline/presented-image.ts +16 -2
- package/src/timeline/question-nav-model.ts +28 -0
- package/src/timeline/registry.ts +11 -1
- package/src/timeline/retained-loaders.ts +9 -4
- package/src/timeline/rolling-activity.tsx +7 -19
- package/src/timeline/tool-presentation.ts +1316 -0
- package/src/timeline/tool-renderers.tsx +226 -1025
- package/src/timeline/turn-summary-model.ts +338 -0
- package/src/timeline/turn-summary.tsx +21 -326
- package/src/timeline/work-presentation.ts +139 -0
- package/src/timeline-model.ts +108 -0
- package/styles/compiled.css +8 -0
- package/styles/connect.css +4 -0
- package/dist/chunk-CREMJMVN.js.map +0 -1
- package/dist/chunk-CVYCLFMH.js.map +0 -1
- package/dist/chunk-G6YRCIYJ.js.map +0 -1
- package/dist/chunk-HXYOSSQO.js +0 -117
- package/dist/chunk-HXYOSSQO.js.map +0 -1
- package/dist/chunk-IUHHPMAX.js.map +0 -1
- package/dist/chunk-IYQCWGU5.js.map +0 -1
- package/dist/chunk-JH7V627O.js.map +0 -1
- package/dist/chunk-L2J3PU7A.js.map +0 -1
- package/dist/chunk-LVS3MH5T.js.map +0 -1
- package/dist/chunk-MDIXFKA3.js.map +0 -1
- package/dist/chunk-PHBFJCEU.js.map +0 -1
- package/dist/chunk-VCSERYXH.js.map +0 -1
- package/dist/chunk-XS67YG5R.js.map +0 -1
- package/dist/platform-activity-row-PJJVATTZ.js.map +0 -1
- package/dist/queue-surface-implementation-67FS7FUI.js.map +0 -1
- /package/dist/{browser-viewer-WGJ43YGI.js.map → browser-viewer-CV23VIHB.js.map} +0 -0
- /package/dist/{chunk-YVFRBXST.js.map → chunk-4BCVCJSU.js.map} +0 -0
- /package/dist/{chunk-PBCZL4JP.js.map → chunk-INIZSNXT.js.map} +0 -0
- /package/dist/{chunk-C5BF4L26.js.map → chunk-KHF2VRXF.js.map} +0 -0
- /package/dist/{chunk-QMMCJGFI.js.map → chunk-L5OKM2VX.js.map} +0 -0
- /package/dist/{computer-viewer-46UIN7F3.js.map → composer-messages.js.map} +0 -0
- /package/dist/{model-policy-picker-menu-WRNSRFQC.js.map → computer-viewer-K4CKYRX6.js.map} +0 -0
- /package/dist/{latest-question-2POFPYNB.js.map → latest-question-SWC6QEVN.js.map} +0 -0
- /package/dist/{sandbox-files-34CJJNOY.js.map → model-mark-paths.js.map} +0 -0
package/dist/interaction.js
CHANGED
|
@@ -8,22 +8,23 @@ import {
|
|
|
8
8
|
useBrowserSession,
|
|
9
9
|
useBrowserSessions,
|
|
10
10
|
useSiteAuthConnections
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-CESBPQP5.js";
|
|
12
12
|
import {
|
|
13
13
|
ComputerViewer,
|
|
14
14
|
useComputerFrameStream,
|
|
15
15
|
useComputerSession,
|
|
16
16
|
useComputerSessions
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-6FOTSVWU.js";
|
|
18
18
|
import {
|
|
19
19
|
useInteractionInterventions,
|
|
20
20
|
useInteractionInvalidation
|
|
21
21
|
} from "./chunk-BNKV5ZLF.js";
|
|
22
|
-
import "./chunk-
|
|
22
|
+
import "./chunk-PEHTX3V7.js";
|
|
23
23
|
import "./chunk-IMSUVYQB.js";
|
|
24
24
|
import "./chunk-ZUWF4NF7.js";
|
|
25
|
-
import "./chunk-
|
|
25
|
+
import "./chunk-ATIRUHBZ.js";
|
|
26
26
|
import "./chunk-TNEZNMSN.js";
|
|
27
|
+
import "./chunk-5I4VRWBB.js";
|
|
27
28
|
import "./chunk-QHUE7E4N.js";
|
|
28
29
|
import "./chunk-CM7LVUKC.js";
|
|
29
30
|
import {
|
|
@@ -32,7 +33,6 @@ import {
|
|
|
32
33
|
useEmbeddedInteraction,
|
|
33
34
|
useEmbeddedInterventions
|
|
34
35
|
} from "./chunk-XTD7TZHW.js";
|
|
35
|
-
import "./chunk-5I4VRWBB.js";
|
|
36
36
|
import "./chunk-TXS65BB2.js";
|
|
37
37
|
|
|
38
38
|
// src/hooks/use-network-routes.ts
|
|
@@ -3,9 +3,9 @@ import {
|
|
|
3
3
|
isTimelineUserQuestion,
|
|
4
4
|
isTurnExecutionEvidence,
|
|
5
5
|
timelineQuestionPlacement
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-L5OKM2VX.js";
|
|
7
7
|
import "./chunk-T46QZH3E.js";
|
|
8
|
-
import "./chunk-
|
|
8
|
+
import "./chunk-ATIRUHBZ.js";
|
|
9
9
|
|
|
10
10
|
// src/hooks/latest-question.ts
|
|
11
11
|
import { SESSION_EVENT_TYPES } from "@opengeni/sdk";
|
|
@@ -115,4 +115,4 @@ export {
|
|
|
115
115
|
TIMELINE_TURN_ANCHOR_EVENT_TYPES,
|
|
116
116
|
resolveLatestQuestion
|
|
117
117
|
};
|
|
118
|
-
//# sourceMappingURL=latest-question-
|
|
118
|
+
//# sourceMappingURL=latest-question-SWC6QEVN.js.map
|
package/dist/lib/clipboard.d.ts
CHANGED
|
@@ -3,5 +3,12 @@
|
|
|
3
3
|
* back to a short-lived textarea for older embeds / denied permissions.
|
|
4
4
|
*/
|
|
5
5
|
export declare function copyTextToClipboard(text: string): Promise<boolean>;
|
|
6
|
+
/**
|
|
7
|
+
* Copy text that is still being prepared, such as a command around a freshly
|
|
8
|
+
* minted URL. Safari only allows a clipboard write during the click itself, so
|
|
9
|
+
* hand the pending text to a `ClipboardItem` where supported; otherwise wait
|
|
10
|
+
* for it and copy. Resolves false when the text failed or nothing was copied.
|
|
11
|
+
*/
|
|
12
|
+
export declare function copyPendingTextToClipboard(text: Promise<string>): Promise<boolean>;
|
|
6
13
|
/** Serialize an HTML table to tab-separated values (spreadsheet-friendly). */
|
|
7
14
|
export declare function tableElementToTsv(table: HTMLTableElement | null | undefined): string;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { SessionEvent, SessionStatus } from "@opengeni/sdk";
|
|
2
|
+
/**
|
|
3
|
+
* Finite same-turn provider recovery, projected for people. Presentation only:
|
|
4
|
+
* the worker owns retry authority, pacing and the recovery budget. The worker
|
|
5
|
+
* (`apps/worker/src/activities/agent-turn/provider-recovery-copy.ts`) writes
|
|
6
|
+
* the same exhausted sentence into `turn.failed.error`; keep the two in step.
|
|
7
|
+
*/
|
|
8
|
+
export type ProviderRecoveryCondition = "overloaded" | "unavailable" | "unresponsive" | "rate_limited";
|
|
9
|
+
export type ProviderRecoveryFacts = {
|
|
10
|
+
/** Recorded worker failure code (`provider_unavailable`, `mcp_transport_timeout`, ...). */
|
|
11
|
+
code: string;
|
|
12
|
+
condition: ProviderRecoveryCondition | null;
|
|
13
|
+
/** Display label of the affected model, when the route was recorded. */
|
|
14
|
+
modelLabel: string | null;
|
|
15
|
+
/** Display label of the serving provider, when the route was recorded. */
|
|
16
|
+
providerLabel: string | null;
|
|
17
|
+
/** Automatic retries scheduled (live) or spent (exhausted). */
|
|
18
|
+
attempt: number | null;
|
|
19
|
+
/** Finite automatic retry budget. */
|
|
20
|
+
maxAttempts: number | null;
|
|
21
|
+
/** True when the model route itself is affected, so another model may help. */
|
|
22
|
+
modelRoute: boolean;
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Read a retryable `turn.recovery.requested` payload or an exhausted
|
|
26
|
+
* `turn.failed` payload. Returns null for every other recovery reason (human
|
|
27
|
+
* Retry, worker shutdown, credential rotation, capacity waits, ...).
|
|
28
|
+
*/
|
|
29
|
+
export declare function parseProviderRecovery(payload: unknown): ProviderRecoveryFacts | null;
|
|
30
|
+
/** One present-tense clause naming what is unavailable, without a trailing period. */
|
|
31
|
+
export declare function providerRecoverySubject(facts: ProviderRecoveryFacts): string;
|
|
32
|
+
/** Live status while the same turn waits for its next automatic retry. */
|
|
33
|
+
export declare function providerRecoveryRetryingText(facts: ProviderRecoveryFacts): string;
|
|
34
|
+
/** Terminal sentence once the automatic budget is spent. */
|
|
35
|
+
export declare function providerRecoveryExhaustedText(facts: ProviderRecoveryFacts): string;
|
|
36
|
+
/**
|
|
37
|
+
* The active turn's current automatic provider retry, or null. Only a
|
|
38
|
+
* `recovering`, unpaused session qualifies, and only the newest boundary of its
|
|
39
|
+
* exact active turn counts, so merged or replayed pages never borrow another
|
|
40
|
+
* turn's diagnosis.
|
|
41
|
+
*/
|
|
42
|
+
export declare function currentProviderRecovery(session: {
|
|
43
|
+
id: string;
|
|
44
|
+
status: SessionStatus | null | undefined;
|
|
45
|
+
activeTurnId: string | null | undefined;
|
|
46
|
+
effectiveControl?: {
|
|
47
|
+
state: string;
|
|
48
|
+
} | null | undefined;
|
|
49
|
+
}, events: readonly SessionEvent[]): ProviderRecoveryFacts | null;
|
package/dist/machines.js
CHANGED
|
@@ -29,9 +29,9 @@ import {
|
|
|
29
29
|
healthPulses,
|
|
30
30
|
pointsFor,
|
|
31
31
|
useMachines
|
|
32
|
-
} from "./chunk-
|
|
32
|
+
} from "./chunk-5JSUNNQN.js";
|
|
33
33
|
import "./chunk-PKCAYHDC.js";
|
|
34
|
-
import "./chunk-
|
|
34
|
+
import "./chunk-ATIRUHBZ.js";
|
|
35
35
|
import "./chunk-QHUE7E4N.js";
|
|
36
36
|
import "./chunk-CM7LVUKC.js";
|
|
37
37
|
import "./chunk-XTD7TZHW.js";
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { type ModelDisplayInput, type ModelVendor } from "@opengeni/sdk/model-display";
|
|
2
|
+
/** ChatGPT / OpenAI mark (Simple Icons, CC0). */
|
|
3
|
+
export declare const CHATGPT_MARK_PATH = "M22.2819 9.8211a5.9847 5.9847 0 0 0-.5157-4.9108 6.0462 6.0462 0 0 0-6.5098-2.9A6.0651 6.0651 0 0 0 4.9807 4.1818a5.9847 5.9847 0 0 0-3.9977 2.9 6.0462 6.0462 0 0 0 .7427 7.0966 5.98 5.98 0 0 0 .511 4.9107 6.051 6.051 0 0 0 6.5146 2.9001A5.9847 5.9847 0 0 0 13.2599 24a6.0557 6.0557 0 0 0 5.7718-4.2058 5.9894 5.9894 0 0 0 3.9977-2.9001 6.0557 6.0557 0 0 0-.7475-7.0729zm-9.022 12.6081a4.4755 4.4755 0 0 1-2.8764-1.0408l.1419-.0804 4.7783-2.7582a.7948.7948 0 0 0 .3927-.6813v-6.7369l2.02 1.1686a.071.071 0 0 1 .038.052v5.5826a4.504 4.504 0 0 1-4.4945 4.4944zm-9.6607-4.1254a4.4708 4.4708 0 0 1-.5346-3.0137l.142.0852 4.783 2.7582a.7712.7712 0 0 0 .7806 0l5.8428-3.3685v2.3324a.0804.0804 0 0 1-.0332.0615L9.74 19.9502a4.4992 4.4992 0 0 1-6.1408-1.6464zM2.3408 7.8956a4.485 4.485 0 0 1 2.3653-1.9728V11.6a.7664.7664 0 0 0 .3879.6765l5.8414 3.3698-2.02 1.1685a.0757.0757 0 0 1-.071 0l-4.8303-2.7865A4.504 4.504 0 0 1 2.3408 7.872zm16.5963 3.8558L13.1038 8.364 15.1192 7.2a.0757.0757 0 0 1 .071 0l4.8303 2.7913a4.4944 4.4944 0 0 1-.6765 8.1042v-5.6772a.79.79 0 0 0-.407-.667zm2.0107-3.0231l-.142-.0852-4.783-2.7622a.7759.7759 0 0 0-.7854 0L9.409 9.2297V6.8974a.0662.0662 0 0 1 .0284-.0615l4.8303-2.7866a4.4992 4.4992 0 0 1 6.6802 4.66zM8.3065 12.863l-2.02-1.1638a.0804.0804 0 0 1-.038-.0567V6.0742a4.4992 4.4992 0 0 1 7.3757-3.4537l-.142.0805L8.704 5.459a.7948.7948 0 0 0-.3927.6813zm1.0976-2.3654l2.602-1.4998 2.6069 1.4998v2.9994l-2.5974 1.4997-2.6067-1.4997Z";
|
|
4
|
+
/** Claude mark (Simple Icons, CC0; https://github.com/simple-icons/simple-icons). */
|
|
5
|
+
export declare const CLAUDE_MARK_PATH = "m4.7144 15.9555 4.7174-2.6471.079-.2307-.079-.1275h-.2307l-.7893-.0486-2.6956-.0729-2.3375-.0971-2.2646-.1214-.5707-.1215-.5343-.7042.0546-.3522.4797-.3218.686.0608 1.5179.1032 2.2767.1578 1.6514.0972 2.4468.255h.3886l.0546-.1579-.1336-.0971-.1032-.0972L6.973 9.8356l-2.55-1.6879-1.3356-.9714-.7225-.4918-.3643-.4614-.1578-1.0078.6557-.7225.8803.0607.2246.0607.8925.686 1.9064 1.4754 2.4893 1.8336.3643.3035.1457-.1032.0182-.0728-.164-.2733-1.3539-2.4467-1.445-2.4893-.6435-1.032-.17-.6194c-.0607-.255-.1032-.4674-.1032-.7285L6.287.1335 6.6997 0l.9957.1336.419.3642.6192 1.4147 1.0018 2.2282 1.5543 3.0296.4553.8985.2429.8318.091.255h.1579v-.1457l.1275-1.706.2368-2.0947.2307-2.6957.0789-.7589.3764-.9107.7468-.4918.5828.2793.4797.686-.0668.4433-.2853 1.8517-.5586 2.9021-.3643 1.9429h.2125l.2429-.2429.9835-1.3053 1.6514-2.0643.7286-.8196.85-.9046.5464-.4311h1.0321l.759 1.1293-.34 1.1657-1.0625 1.3478-.8804 1.1414-1.2628 1.7-.7893 1.36.0729.1093.1882-.0183 2.8535-.607 1.5421-.2794 1.8396-.3157.8318.3886.091.3946-.3278.8075-1.967.4857-2.3072.4614-3.4364.8136-.0425.0304.0486.0607 1.5482.1457.6618.0364h1.621l3.0175.2247.7892.522.4736.6376-.079.4857-1.2142.6193-1.6393-.3886-3.825-.9107-1.3113-.3279h-.1822v.1093l1.0929 1.0686 2.0035 1.8092 2.5075 2.3314.1275.5768-.3218.4554-.34-.0486-2.2039-1.6575-.85-.7468-1.9246-1.621h-.1275v.17l.4432.6496 2.3436 3.5214.1214 1.0807-.17.3521-.6071.2125-.6679-.1214-1.3721-1.9246L14.38 17.959l-1.1414-1.9428-.1397.079-.674 7.2552-.3156.3703-.7286.2793-.6071-.4614-.3218-.7468.3218-1.4753.3886-1.9246.3157-1.53.2853-1.9004.17-.6314-.0121-.0425-.1397.0182-1.4328 1.9672-2.1796 2.9446-1.7243 1.8456-.4128.164-.7164-.3704.0667-.6618.4008-.5889 2.386-3.0357 1.4389-1.882.929-1.0868-.0062-.1579h-.0546l-6.3385 4.1164-1.1293.1457-.4857-.4554.0608-.7467.2307-.2429 1.9064-1.3114Z";
|
|
6
|
+
/**
|
|
7
|
+
* MIT License
|
|
8
|
+
*
|
|
9
|
+
* Copyright (c) 2023 LobeHub
|
|
10
|
+
*
|
|
11
|
+
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
12
|
+
* of this software and associated documentation files (the "Software"), to deal
|
|
13
|
+
* in the Software without restriction, including without limitation the rights
|
|
14
|
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
15
|
+
* copies of the Software, and to permit persons to whom the Software is
|
|
16
|
+
* furnished to do so, subject to the following conditions:
|
|
17
|
+
*
|
|
18
|
+
* The above copyright notice and this permission notice shall be included in all
|
|
19
|
+
* copies or substantial portions of the Software.
|
|
20
|
+
*
|
|
21
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
22
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
23
|
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
24
|
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
25
|
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
26
|
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
27
|
+
* SOFTWARE.
|
|
28
|
+
* Source: https://raw.githubusercontent.com/lobehub/lobe-icons/master/src/Grok/components/Mono.tsx
|
|
29
|
+
*/
|
|
30
|
+
export declare const GROK_MARK_PATH = "M9.27 15.29l7.978-5.897c.391-.29.95-.177 1.137.272.98 2.369.542 5.215-1.41 7.169-1.951 1.954-4.667 2.382-7.149 1.406l-2.711 1.257c3.889 2.661 8.611 2.003 11.562-.953 2.341-2.344 3.066-5.539 2.388-8.42l.006.007c-.983-4.232.242-5.924 2.75-9.383.06-.082.12-.164.179-.248l-3.301 3.305v-.01L9.267 15.292M7.623 16.723c-2.792-2.67-2.31-6.801.071-9.184 1.761-1.763 4.647-2.483 7.166-1.425l2.705-1.25a7.808 7.808 0 00-1.829-1A8.975 8.975 0 005.984 5.83c-2.533 2.536-3.33 6.436-1.962 9.764 1.022 2.487-.653 4.246-2.34 6.022-.599.63-1.199 1.259-1.682 1.925l7.62-6.815";
|
|
31
|
+
export type MarkedModelVendor = Extract<ModelVendor, "openai" | "anthropic" | "xai">;
|
|
32
|
+
export declare const MODEL_MARK_PATHS: Record<MarkedModelVendor, string>;
|
|
33
|
+
/** The maker whose logo marks this model, or null for the neutral fallback. */
|
|
34
|
+
export declare function modelMarkVendor(model: ModelDisplayInput): MarkedModelVendor | null;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import {
|
|
3
|
+
CHATGPT_MARK_PATH,
|
|
4
|
+
CLAUDE_MARK_PATH,
|
|
5
|
+
GROK_MARK_PATH,
|
|
6
|
+
MODEL_MARK_PATHS,
|
|
7
|
+
modelMarkVendor
|
|
8
|
+
} from "./chunk-N7S72EXK.js";
|
|
9
|
+
export {
|
|
10
|
+
CHATGPT_MARK_PATH,
|
|
11
|
+
CLAUDE_MARK_PATH,
|
|
12
|
+
GROK_MARK_PATH,
|
|
13
|
+
MODEL_MARK_PATHS,
|
|
14
|
+
modelMarkVendor
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=model-mark-paths.js.map
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The model picker's presentation logic, free of any renderer: which rows show,
|
|
3
|
+
* how they group and filter, and which thinking/latency controls apply. The web
|
|
4
|
+
* menu and native sheets both render from this.
|
|
5
|
+
*/
|
|
6
|
+
import type { ClientModel, LatencyMode, ReasoningEffort } from "@opengeni/sdk";
|
|
7
|
+
import { type PickerBillingClass, type PickerModelRow } from "./model-policy.js";
|
|
8
|
+
type ClientPickerModelRow = PickerModelRow<ClientModel>;
|
|
9
|
+
export type ModelPolicyPickerMessages = {
|
|
10
|
+
label: string;
|
|
11
|
+
loading: string;
|
|
12
|
+
noModels: string;
|
|
13
|
+
connectTitle: string;
|
|
14
|
+
connectBody: string;
|
|
15
|
+
connectAction: string;
|
|
16
|
+
thinking: string;
|
|
17
|
+
fast: string;
|
|
18
|
+
fastRateHint: string;
|
|
19
|
+
codexOnly: string;
|
|
20
|
+
searchLabel?: string;
|
|
21
|
+
searchPlaceholder?: string;
|
|
22
|
+
currentModel?: string;
|
|
23
|
+
noMatches?: string;
|
|
24
|
+
unsupportedAttachments?: string;
|
|
25
|
+
thinkingEffort?: string;
|
|
26
|
+
selected?: string;
|
|
27
|
+
free?: string;
|
|
28
|
+
billingHints: Record<PickerBillingClass, string>;
|
|
29
|
+
};
|
|
30
|
+
export declare const defaultModelPolicyPickerMessages: ModelPolicyPickerMessages;
|
|
31
|
+
/** Host branding for one payment group; the icon type belongs to the renderer. */
|
|
32
|
+
export type ModelPickerGroupBranding<TIcon = unknown> = {
|
|
33
|
+
label?: string | undefined;
|
|
34
|
+
/** Omit to preserve the default; null hides the supporting text. */
|
|
35
|
+
description?: string | null | undefined;
|
|
36
|
+
/** Decorative, non-interactive content. Omit for the default; null hides it. */
|
|
37
|
+
icon?: TIcon | undefined;
|
|
38
|
+
};
|
|
39
|
+
export type ModelPickerGroupPresentation<TIcon = unknown> = Partial<Record<PickerBillingClass, ModelPickerGroupBranding<TIcon>>>;
|
|
40
|
+
/** The renderer-neutral inputs every picker surface shares. */
|
|
41
|
+
export type ModelPickerInput<TIcon = unknown> = {
|
|
42
|
+
groupPresentation?: ModelPickerGroupPresentation<TIcon> | undefined;
|
|
43
|
+
models?: ClientModel[] | undefined;
|
|
44
|
+
rows?: PickerModelRow[] | undefined;
|
|
45
|
+
hasImageAttachments?: boolean | undefined;
|
|
46
|
+
model: string;
|
|
47
|
+
effort: ReasoningEffort;
|
|
48
|
+
latencyMode: LatencyMode;
|
|
49
|
+
codexOnly?: boolean | undefined;
|
|
50
|
+
collapseScopes?: boolean | undefined;
|
|
51
|
+
allowLatencyMode?: boolean | undefined;
|
|
52
|
+
messages?: Partial<ModelPolicyPickerMessages> | undefined;
|
|
53
|
+
};
|
|
54
|
+
/** Models settings keeps naming who is billed for a key. */
|
|
55
|
+
export declare const SCOPED_BILLING_HINTS: Partial<Record<PickerBillingClass, string>>;
|
|
56
|
+
export declare function isCodexPickerModel(model: ClientModel): boolean;
|
|
57
|
+
/** The payment group a selection the catalog no longer lists most likely belonged to. */
|
|
58
|
+
export declare function billingClassForMissingSelection(modelId: string): PickerBillingClass;
|
|
59
|
+
/**
|
|
60
|
+
* Host branding for a payment group. While scopes are collapsed, API keys are
|
|
61
|
+
* one group, so either API-key presentation serves both.
|
|
62
|
+
*/
|
|
63
|
+
export declare function groupPresentationFor<TIcon>(props: {
|
|
64
|
+
groupPresentation?: ModelPickerGroupPresentation<TIcon> | undefined;
|
|
65
|
+
collapseScopes?: boolean | undefined;
|
|
66
|
+
}, billingClass: PickerBillingClass): ModelPickerGroupBranding<TIcon> | undefined;
|
|
67
|
+
export declare function effectiveRows<TIcon>(props: ModelPickerInput<TIcon>): ClientPickerModelRow[];
|
|
68
|
+
export type ModelPickerMenuGroup = {
|
|
69
|
+
billingClass: PickerBillingClass;
|
|
70
|
+
label: string;
|
|
71
|
+
description: string | null;
|
|
72
|
+
rows: ClientPickerModelRow[];
|
|
73
|
+
};
|
|
74
|
+
export type ModelPickerThinking = {
|
|
75
|
+
efforts: ReasoningEffort[];
|
|
76
|
+
value: ReasoningEffort;
|
|
77
|
+
showThinking: boolean;
|
|
78
|
+
showFast: boolean;
|
|
79
|
+
/** The selected row cannot run, so its controls are read-only. */
|
|
80
|
+
disabled: boolean;
|
|
81
|
+
};
|
|
82
|
+
export type ModelPickerMenuView = {
|
|
83
|
+
messages: ModelPolicyPickerMessages;
|
|
84
|
+
rows: ClientPickerModelRow[];
|
|
85
|
+
selected: ClientPickerModelRow | null;
|
|
86
|
+
/** Any row can run; otherwise the surface offers to connect models instead. */
|
|
87
|
+
anySelectable: boolean;
|
|
88
|
+
/** Whether the query is non-empty (decides "no matches" versus "no models"). */
|
|
89
|
+
searching: boolean;
|
|
90
|
+
groups: ModelPickerMenuGroup[];
|
|
91
|
+
matchCount: number;
|
|
92
|
+
/** Thinking and Fast controls for the selected model, or null when it has none. */
|
|
93
|
+
thinking: ModelPickerThinking | null;
|
|
94
|
+
/** The selected model cannot view images the draft carries. */
|
|
95
|
+
unsupportedAttachments: boolean;
|
|
96
|
+
};
|
|
97
|
+
/** Everything a picker menu shows for this input and search query. */
|
|
98
|
+
export declare function modelPickerMenuView<TIcon>(props: ModelPickerInput<TIcon>, query: string): ModelPickerMenuView;
|
|
99
|
+
export type ModelPickerChoice = {
|
|
100
|
+
/** The new model, or null when the row is already selected. */
|
|
101
|
+
model: string | null;
|
|
102
|
+
/** Always reported, so hosts can commit model and effort together. */
|
|
103
|
+
effort: ReasoningEffort;
|
|
104
|
+
/** Fast falls back to standard when the new model cannot run it. */
|
|
105
|
+
latencyMode: LatencyMode | null;
|
|
106
|
+
};
|
|
107
|
+
/** What choosing a row changes, or null when the row cannot be chosen. */
|
|
108
|
+
export declare function modelPickerChoice(props: Pick<ModelPickerInput, "model" | "effort" | "latencyMode">, row: ClientPickerModelRow): ModelPickerChoice | null;
|
|
109
|
+
/** The web segmented control's short labels ("X-high" fits a phone row). */
|
|
110
|
+
export declare function compactEffortLabel(effort: ReasoningEffort, label: string): string;
|
|
111
|
+
export {};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import {
|
|
3
|
+
SCOPED_BILLING_HINTS,
|
|
4
|
+
billingClassForMissingSelection,
|
|
5
|
+
compactEffortLabel,
|
|
6
|
+
defaultModelPolicyPickerMessages,
|
|
7
|
+
effectiveRows,
|
|
8
|
+
groupPresentationFor,
|
|
9
|
+
isCodexPickerModel,
|
|
10
|
+
modelPickerChoice,
|
|
11
|
+
modelPickerMenuView
|
|
12
|
+
} from "./chunk-3ZC6QPOM.js";
|
|
13
|
+
import "./chunk-IX3K4THH.js";
|
|
14
|
+
export {
|
|
15
|
+
SCOPED_BILLING_HINTS,
|
|
16
|
+
billingClassForMissingSelection,
|
|
17
|
+
compactEffortLabel,
|
|
18
|
+
defaultModelPolicyPickerMessages,
|
|
19
|
+
effectiveRows,
|
|
20
|
+
groupPresentationFor,
|
|
21
|
+
isCodexPickerModel,
|
|
22
|
+
modelPickerChoice,
|
|
23
|
+
modelPickerMenuView
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=model-picker-model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -2,14 +2,16 @@
|
|
|
2
2
|
import {
|
|
3
3
|
ModelPolicyPickerMenu,
|
|
4
4
|
ModelPolicyPickerPopover
|
|
5
|
-
} from "./chunk-
|
|
6
|
-
import "./chunk-
|
|
5
|
+
} from "./chunk-GHJU7XG7.js";
|
|
6
|
+
import "./chunk-7ZB7I3KP.js";
|
|
7
7
|
import "./chunk-PMV53IMM.js";
|
|
8
|
-
import "./chunk-
|
|
8
|
+
import "./chunk-N7S72EXK.js";
|
|
9
|
+
import "./chunk-3ZC6QPOM.js";
|
|
9
10
|
import "./chunk-XEA5BCMA.js";
|
|
11
|
+
import "./chunk-IX3K4THH.js";
|
|
10
12
|
import "./chunk-TXS65BB2.js";
|
|
11
13
|
export {
|
|
12
14
|
ModelPolicyPickerMenu,
|
|
13
15
|
ModelPolicyPickerPopover
|
|
14
16
|
};
|
|
15
|
-
//# sourceMappingURL=model-policy-picker-menu-
|
|
17
|
+
//# sourceMappingURL=model-policy-picker-menu-NM4RPTY6.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
package/dist/model-policy.d.ts
CHANGED
|
@@ -24,6 +24,16 @@ export declare function availabilityReasonLabel(reason: WorkspaceModelCatalogMod
|
|
|
24
24
|
export declare function effortOptionsForModel(model: ClientModel): ReasoningEffort[];
|
|
25
25
|
export declare function defaultEffortForModel(model: ClientModel): ReasoningEffort;
|
|
26
26
|
export declare function coerceReasoningEffortForModel(model: ClientModel, effort: ReasoningEffort): ReasoningEffort;
|
|
27
|
+
/** Whether the composer offers (and therefore labels) a reasoning-effort choice. */
|
|
28
|
+
export declare function modelOffersEffortChoice(model: ClientModel): boolean;
|
|
29
|
+
/**
|
|
30
|
+
* The composer model pill at phone width: the catalog's compact name (falling
|
|
31
|
+
* back to the display name) and the effort label when effort is a choice.
|
|
32
|
+
*/
|
|
33
|
+
export declare function compactModelPill(models: readonly ClientModel[], modelId: string, effort: ReasoningEffort | null | undefined): {
|
|
34
|
+
name: string;
|
|
35
|
+
effort: string | null;
|
|
36
|
+
};
|
|
27
37
|
export declare function runnableLatencyModesForModel(model: ClientModel): LatencyModeId[];
|
|
28
38
|
export declare function labelLatencyMode(mode: LatencyModeId): string;
|
|
29
39
|
export declare function labelReasoningEffort(effort: ReasoningEffort): string;
|
package/dist/model-policy.js
CHANGED
|
@@ -5,6 +5,7 @@ import {
|
|
|
5
5
|
billingClassForModel,
|
|
6
6
|
billingClassLabel,
|
|
7
7
|
coerceReasoningEffortForModel,
|
|
8
|
+
compactModelPill,
|
|
8
9
|
defaultEffortForModel,
|
|
9
10
|
effortOptionsForModel,
|
|
10
11
|
findPickerRow,
|
|
@@ -12,6 +13,7 @@ import {
|
|
|
12
13
|
labelLatencyMode,
|
|
13
14
|
labelReasoningEffort,
|
|
14
15
|
modelDisplayName,
|
|
16
|
+
modelOffersEffortChoice,
|
|
15
17
|
modelUsesCredits,
|
|
16
18
|
modelVendor,
|
|
17
19
|
payerSummaryForModel,
|
|
@@ -20,13 +22,14 @@ import {
|
|
|
20
22
|
runnableLatencyModesForModel,
|
|
21
23
|
scopedBillingClassLabel,
|
|
22
24
|
sortPickerRows
|
|
23
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-IX3K4THH.js";
|
|
24
26
|
export {
|
|
25
27
|
advancedSourceSummary,
|
|
26
28
|
availabilityReasonLabel,
|
|
27
29
|
billingClassForModel,
|
|
28
30
|
billingClassLabel,
|
|
29
31
|
coerceReasoningEffortForModel,
|
|
32
|
+
compactModelPill,
|
|
30
33
|
defaultEffortForModel,
|
|
31
34
|
effortOptionsForModel,
|
|
32
35
|
findPickerRow,
|
|
@@ -34,6 +37,7 @@ export {
|
|
|
34
37
|
labelLatencyMode,
|
|
35
38
|
labelReasoningEffort,
|
|
36
39
|
modelDisplayName,
|
|
40
|
+
modelOffersEffortChoice,
|
|
37
41
|
modelUsesCredits,
|
|
38
42
|
modelVendor,
|
|
39
43
|
payerSummaryForModel,
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { AccessContext, AccountGrant, Workspace } from "@opengeni/sdk";
|
|
2
|
+
export type OrgOption = {
|
|
3
|
+
accountId: string;
|
|
4
|
+
label: string;
|
|
5
|
+
/** Whether the subject has the owner/admin authority required by organization settings. */
|
|
6
|
+
canManage: boolean;
|
|
7
|
+
};
|
|
8
|
+
/** Organizations the subject administers (owner or admin), sorted by id. */
|
|
9
|
+
export declare function organizationAdministrationAccountIds(accessContext: AccessContext): string[];
|
|
10
|
+
/** A short, stable id fragment for an account that has no human name. */
|
|
11
|
+
export declare function shortAccountId(accountId: string): string;
|
|
12
|
+
/** The organization's real name, or null when the API sent none. */
|
|
13
|
+
export declare function orgName(accountId: string, grants: AccountGrant[]): string | null;
|
|
14
|
+
/** Human label for an organization: the grant's subjectLabel, else a short id. */
|
|
15
|
+
export declare function orgLabel(accountId: string, grants: AccountGrant[]): string;
|
|
16
|
+
/**
|
|
17
|
+
* The organizations the subject belongs to, in a stable order (default org
|
|
18
|
+
* first, then by name). Derived from account grants, unioned with the accounts
|
|
19
|
+
* that own the accessible workspaces so an org always shows even without an
|
|
20
|
+
* explicit grant.
|
|
21
|
+
*/
|
|
22
|
+
export declare function organizationsForSubject(context: AccessContext, workspaces: Workspace[]): OrgOption[];
|
|
23
|
+
/** Workspaces that belong to a given organization, ordered by name. */
|
|
24
|
+
export declare function workspacesInOrg(workspaces: Workspace[], accountId: string): Workspace[];
|
|
25
|
+
/** Organization settings remain anchored to an accessible workspace in that organization. */
|
|
26
|
+
export declare function organizationSettingsWorkspaceId(workspaces: Workspace[], accountId: string, activeWorkspaceId: string): string | null;
|
|
27
|
+
/**
|
|
28
|
+
* Where switching to an organization lands: the workspace last used there
|
|
29
|
+
* while it is still open to the person, else its first shared workspace, else
|
|
30
|
+
* their Personal workspace there. Null when nothing in it is open to them.
|
|
31
|
+
*/
|
|
32
|
+
export declare function organizationLandingWorkspaceId(workspaces: Workspace[], accountId: string, rememberedWorkspaceId?: string | null): string | null;
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
// src/organization-model.ts
|
|
4
|
+
function organizationAdministrationAccountIds(accessContext) {
|
|
5
|
+
return accessContext.accountGrants.filter(
|
|
6
|
+
(grant) => grant.subjectId === accessContext.subjectId && (grant.role === "owner" || grant.role === "admin")
|
|
7
|
+
).map((grant) => grant.accountId).sort();
|
|
8
|
+
}
|
|
9
|
+
function shortAccountId(accountId) {
|
|
10
|
+
return accountId.length > 8 ? accountId.slice(0, 8) : accountId;
|
|
11
|
+
}
|
|
12
|
+
function orgName(accountId, grants) {
|
|
13
|
+
const grant = grants.find((candidate) => candidate.accountId === accountId);
|
|
14
|
+
const label = grant?.metadata && typeof grant.metadata.accountName === "string" ? grant.metadata.accountName : void 0;
|
|
15
|
+
return label?.trim() || null;
|
|
16
|
+
}
|
|
17
|
+
function orgLabel(accountId, grants) {
|
|
18
|
+
return orgName(accountId, grants) ?? `Org ${shortAccountId(accountId)}`;
|
|
19
|
+
}
|
|
20
|
+
function organizationsForSubject(context, workspaces) {
|
|
21
|
+
const administeredIds = new Set(organizationAdministrationAccountIds(context));
|
|
22
|
+
const ids = /* @__PURE__ */ new Set();
|
|
23
|
+
for (const grant of context.accountGrants) {
|
|
24
|
+
ids.add(grant.accountId);
|
|
25
|
+
}
|
|
26
|
+
for (const workspace of workspaces) {
|
|
27
|
+
ids.add(workspace.accountId);
|
|
28
|
+
}
|
|
29
|
+
const options = [...ids].map((accountId) => ({
|
|
30
|
+
accountId,
|
|
31
|
+
label: orgLabel(accountId, context.accountGrants),
|
|
32
|
+
canManage: administeredIds.has(accountId)
|
|
33
|
+
}));
|
|
34
|
+
return options.sort((a, b) => {
|
|
35
|
+
if (a.accountId === context.defaultAccountId) {
|
|
36
|
+
return -1;
|
|
37
|
+
}
|
|
38
|
+
if (b.accountId === context.defaultAccountId) {
|
|
39
|
+
return 1;
|
|
40
|
+
}
|
|
41
|
+
return a.label.localeCompare(b.label) || a.accountId.localeCompare(b.accountId);
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
function workspacesInOrg(workspaces, accountId) {
|
|
45
|
+
return workspaces.filter((workspace) => workspace.accountId === accountId).sort((a, b) => a.name.localeCompare(b.name));
|
|
46
|
+
}
|
|
47
|
+
function organizationSettingsWorkspaceId(workspaces, accountId, activeWorkspaceId) {
|
|
48
|
+
const candidates = workspacesInOrg(workspaces, accountId);
|
|
49
|
+
return candidates.find((workspace) => workspace.id === activeWorkspaceId)?.id ?? candidates[0]?.id ?? null;
|
|
50
|
+
}
|
|
51
|
+
function organizationLandingWorkspaceId(workspaces, accountId, rememberedWorkspaceId) {
|
|
52
|
+
const candidates = workspacesInOrg(workspaces, accountId);
|
|
53
|
+
return candidates.find((workspace) => workspace.id === rememberedWorkspaceId)?.id ?? candidates.find((workspace) => workspace.kind !== "personal")?.id ?? candidates[0]?.id ?? null;
|
|
54
|
+
}
|
|
55
|
+
export {
|
|
56
|
+
orgLabel,
|
|
57
|
+
orgName,
|
|
58
|
+
organizationAdministrationAccountIds,
|
|
59
|
+
organizationLandingWorkspaceId,
|
|
60
|
+
organizationSettingsWorkspaceId,
|
|
61
|
+
organizationsForSubject,
|
|
62
|
+
shortAccountId,
|
|
63
|
+
workspacesInOrg
|
|
64
|
+
};
|
|
65
|
+
//# sourceMappingURL=organization-model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/organization-model.ts"],"sourcesContent":["// Pure organization and workspace selection rules shared by the web rail's\n// switcher and native renderers. The wire model has no account *name*, so a\n// display label is derived from the access grant — preferring the account\n// name, falling back to a short, stable id fragment. No DOM, no React.\nimport type { AccessContext, AccountGrant, Workspace } from \"@opengeni/sdk\";\n\nexport type OrgOption = {\n accountId: string;\n label: string;\n /** Whether the subject has the owner/admin authority required by organization settings. */\n canManage: boolean;\n};\n\n/** Organizations the subject administers (owner or admin), sorted by id. */\nexport function organizationAdministrationAccountIds(accessContext: AccessContext): string[] {\n return accessContext.accountGrants\n .filter(\n (grant) =>\n grant.subjectId === accessContext.subjectId &&\n (grant.role === \"owner\" || grant.role === \"admin\"),\n )\n .map((grant) => grant.accountId)\n .sort();\n}\n\n/** A short, stable id fragment for an account that has no human name. */\nexport function shortAccountId(accountId: string): string {\n return accountId.length > 8 ? accountId.slice(0, 8) : accountId;\n}\n\n/** The organization's real name, or null when the API sent none. */\nexport function orgName(accountId: string, grants: AccountGrant[]): string | null {\n const grant = grants.find((candidate) => candidate.accountId === accountId);\n const label =\n grant?.metadata && typeof grant.metadata.accountName === \"string\"\n ? grant.metadata.accountName\n : undefined;\n return label?.trim() || null;\n}\n\n/** Human label for an organization: the grant's subjectLabel, else a short id. */\nexport function orgLabel(accountId: string, grants: AccountGrant[]): string {\n return orgName(accountId, grants) ?? `Org ${shortAccountId(accountId)}`;\n}\n\n/**\n * The organizations the subject belongs to, in a stable order (default org\n * first, then by name). Derived from account grants, unioned with the accounts\n * that own the accessible workspaces so an org always shows even without an\n * explicit grant.\n */\nexport function organizationsForSubject(\n context: AccessContext,\n workspaces: Workspace[],\n): OrgOption[] {\n const administeredIds = new Set(organizationAdministrationAccountIds(context));\n const ids = new Set<string>();\n for (const grant of context.accountGrants) {\n ids.add(grant.accountId);\n }\n for (const workspace of workspaces) {\n ids.add(workspace.accountId);\n }\n const options = [...ids].map((accountId) => ({\n accountId,\n label: orgLabel(accountId, context.accountGrants),\n canManage: administeredIds.has(accountId),\n }));\n return options.sort((a, b) => {\n if (a.accountId === context.defaultAccountId) {\n return -1;\n }\n if (b.accountId === context.defaultAccountId) {\n return 1;\n }\n return a.label.localeCompare(b.label) || a.accountId.localeCompare(b.accountId);\n });\n}\n\n/** Workspaces that belong to a given organization, ordered by name. */\nexport function workspacesInOrg(workspaces: Workspace[], accountId: string): Workspace[] {\n return workspaces\n .filter((workspace) => workspace.accountId === accountId)\n .sort((a, b) => a.name.localeCompare(b.name));\n}\n\n/** Organization settings remain anchored to an accessible workspace in that organization. */\nexport function organizationSettingsWorkspaceId(\n workspaces: Workspace[],\n accountId: string,\n activeWorkspaceId: string,\n): string | null {\n const candidates = workspacesInOrg(workspaces, accountId);\n return (\n candidates.find((workspace) => workspace.id === activeWorkspaceId)?.id ??\n candidates[0]?.id ??\n null\n );\n}\n\n/**\n * Where switching to an organization lands: the workspace last used there\n * while it is still open to the person, else its first shared workspace, else\n * their Personal workspace there. Null when nothing in it is open to them.\n */\nexport function organizationLandingWorkspaceId(\n workspaces: Workspace[],\n accountId: string,\n rememberedWorkspaceId?: string | null,\n): string | null {\n const candidates = workspacesInOrg(workspaces, accountId);\n return (\n candidates.find((workspace) => workspace.id === rememberedWorkspaceId)?.id ??\n candidates.find((workspace) => workspace.kind !== \"personal\")?.id ??\n candidates[0]?.id ??\n null\n );\n}\n"],"mappings":";;;AAcO,SAAS,qCAAqC,eAAwC;AAC3F,SAAO,cAAc,cAClB;AAAA,IACC,CAAC,UACC,MAAM,cAAc,cAAc,cACjC,MAAM,SAAS,WAAW,MAAM,SAAS;AAAA,EAC9C,EACC,IAAI,CAAC,UAAU,MAAM,SAAS,EAC9B,KAAK;AACV;AAGO,SAAS,eAAe,WAA2B;AACxD,SAAO,UAAU,SAAS,IAAI,UAAU,MAAM,GAAG,CAAC,IAAI;AACxD;AAGO,SAAS,QAAQ,WAAmB,QAAuC;AAChF,QAAM,QAAQ,OAAO,KAAK,CAAC,cAAc,UAAU,cAAc,SAAS;AAC1E,QAAM,QACJ,OAAO,YAAY,OAAO,MAAM,SAAS,gBAAgB,WACrD,MAAM,SAAS,cACf;AACN,SAAO,OAAO,KAAK,KAAK;AAC1B;AAGO,SAAS,SAAS,WAAmB,QAAgC;AAC1E,SAAO,QAAQ,WAAW,MAAM,KAAK,OAAO,eAAe,SAAS,CAAC;AACvE;AAQO,SAAS,wBACd,SACA,YACa;AACb,QAAM,kBAAkB,IAAI,IAAI,qCAAqC,OAAO,CAAC;AAC7E,QAAM,MAAM,oBAAI,IAAY;AAC5B,aAAW,SAAS,QAAQ,eAAe;AACzC,QAAI,IAAI,MAAM,SAAS;AAAA,EACzB;AACA,aAAW,aAAa,YAAY;AAClC,QAAI,IAAI,UAAU,SAAS;AAAA,EAC7B;AACA,QAAM,UAAU,CAAC,GAAG,GAAG,EAAE,IAAI,CAAC,eAAe;AAAA,IAC3C;AAAA,IACA,OAAO,SAAS,WAAW,QAAQ,aAAa;AAAA,IAChD,WAAW,gBAAgB,IAAI,SAAS;AAAA,EAC1C,EAAE;AACF,SAAO,QAAQ,KAAK,CAAC,GAAG,MAAM;AAC5B,QAAI,EAAE,cAAc,QAAQ,kBAAkB;AAC5C,aAAO;AAAA,IACT;AACA,QAAI,EAAE,cAAc,QAAQ,kBAAkB;AAC5C,aAAO;AAAA,IACT;AACA,WAAO,EAAE,MAAM,cAAc,EAAE,KAAK,KAAK,EAAE,UAAU,cAAc,EAAE,SAAS;AAAA,EAChF,CAAC;AACH;AAGO,SAAS,gBAAgB,YAAyB,WAAgC;AACvF,SAAO,WACJ,OAAO,CAAC,cAAc,UAAU,cAAc,SAAS,EACvD,KAAK,CAAC,GAAG,MAAM,EAAE,KAAK,cAAc,EAAE,IAAI,CAAC;AAChD;AAGO,SAAS,gCACd,YACA,WACA,mBACe;AACf,QAAM,aAAa,gBAAgB,YAAY,SAAS;AACxD,SACE,WAAW,KAAK,CAAC,cAAc,UAAU,OAAO,iBAAiB,GAAG,MACpE,WAAW,CAAC,GAAG,MACf;AAEJ;AAOO,SAAS,+BACd,YACA,WACA,uBACe;AACf,QAAM,aAAa,gBAAgB,YAAY,SAAS;AACxD,SACE,WAAW,KAAK,CAAC,cAAc,UAAU,OAAO,qBAAqB,GAAG,MACxE,WAAW,KAAK,CAAC,cAAc,UAAU,SAAS,UAAU,GAAG,MAC/D,WAAW,CAAC,GAAG,MACf;AAEJ;","names":[]}
|
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
"use client";
|
|
2
|
+
import {
|
|
3
|
+
STARTUP_WAIT_TITLES,
|
|
4
|
+
sandboxRowTitle,
|
|
5
|
+
startupDuration,
|
|
6
|
+
startupPhaseTitle
|
|
7
|
+
} from "./chunk-ZIB4H5LN.js";
|
|
2
8
|
|
|
3
9
|
// src/timeline/platform-activity-row.tsx
|
|
4
10
|
function PlatformActivityRow({
|
|
@@ -95,90 +101,7 @@ function lucideIcon(j, s, name, children) {
|
|
|
95
101
|
children
|
|
96
102
|
});
|
|
97
103
|
}
|
|
98
|
-
function sandboxRowTitle(item, displayName) {
|
|
99
|
-
if (item.name === "sandbox.provision") {
|
|
100
|
-
return startupPhaseTitle(
|
|
101
|
-
"sandbox",
|
|
102
|
-
item.status === "cancelled" ? "complete" : item.status,
|
|
103
|
-
item.origin ?? null
|
|
104
|
-
);
|
|
105
|
-
}
|
|
106
|
-
return displayName(item.name);
|
|
107
|
-
}
|
|
108
|
-
function startupPhaseTitle(phase, status, outcome) {
|
|
109
|
-
if (status === "complete" && phase === "sandbox" && outcome && outcome !== "skipped") {
|
|
110
|
-
return `Sandbox ${outcome === "resumed" ? "reattached" : outcome}`;
|
|
111
|
-
}
|
|
112
|
-
if (status === "complete" && phase === "rig" && outcome === "skipped") {
|
|
113
|
-
return "Sandbox Environment already ready";
|
|
114
|
-
}
|
|
115
|
-
const statusIndex = status === "running" ? 0 : status === "failed" ? 1 : status === "cancelled" ? 2 : 3;
|
|
116
|
-
return STARTUP_PHASE_TITLES[phase][statusIndex];
|
|
117
|
-
}
|
|
118
|
-
var STARTUP_WAIT_TITLES = {
|
|
119
|
-
capture_in_progress: "Waiting for sandbox checkpoint",
|
|
120
|
-
rotation_in_progress: "Waiting for sandbox rotation",
|
|
121
|
-
provider_recovery_in_progress: "Waiting for sandbox recovery"
|
|
122
|
-
};
|
|
123
|
-
var STARTUP_PHASE_TITLES = {
|
|
124
|
-
queue: [
|
|
125
|
-
"Waiting for a worker",
|
|
126
|
-
"Worker startup failed",
|
|
127
|
-
"Worker wait interrupted",
|
|
128
|
-
"Worker started"
|
|
129
|
-
],
|
|
130
|
-
sandbox: [
|
|
131
|
-
"Starting sandbox",
|
|
132
|
-
"Sandbox didn\u2019t start",
|
|
133
|
-
"Sandbox startup interrupted",
|
|
134
|
-
"Sandbox ready"
|
|
135
|
-
],
|
|
136
|
-
rig: [
|
|
137
|
-
"Setting up sandbox environment",
|
|
138
|
-
"Sandbox Environment setup failed",
|
|
139
|
-
"Sandbox Environment setup interrupted",
|
|
140
|
-
"Sandbox Environment ready"
|
|
141
|
-
],
|
|
142
|
-
repository: [
|
|
143
|
-
"Preparing repository",
|
|
144
|
-
"Repository preparation failed",
|
|
145
|
-
"Repository preparation interrupted",
|
|
146
|
-
"Repository ready"
|
|
147
|
-
],
|
|
148
|
-
files: [
|
|
149
|
-
"Preparing files",
|
|
150
|
-
"File preparation failed",
|
|
151
|
-
"File preparation interrupted",
|
|
152
|
-
"Files ready"
|
|
153
|
-
],
|
|
154
|
-
tools: [
|
|
155
|
-
"Connecting tools",
|
|
156
|
-
"Tool connection failed",
|
|
157
|
-
"Tool connection interrupted",
|
|
158
|
-
"Tools ready"
|
|
159
|
-
],
|
|
160
|
-
model_preparation: [
|
|
161
|
-
"Preparing runtime and model request",
|
|
162
|
-
"Runtime/model preparation failed",
|
|
163
|
-
"Runtime/model preparation interrupted",
|
|
164
|
-
"Model request dispatched"
|
|
165
|
-
],
|
|
166
|
-
provider_first_byte: [
|
|
167
|
-
"Waiting for model",
|
|
168
|
-
"Model didn\u2019t respond",
|
|
169
|
-
"Model wait interrupted",
|
|
170
|
-
"Model started responding"
|
|
171
|
-
]
|
|
172
|
-
};
|
|
173
|
-
function startupDuration(durationMs) {
|
|
174
|
-
if (durationMs === null || !Number.isFinite(durationMs) || durationMs < 0) return null;
|
|
175
|
-
if (durationMs < 1e3) return `${Math.round(durationMs)}ms`;
|
|
176
|
-
if (durationMs < 6e4) return `${(durationMs / 1e3).toFixed(1)}s`;
|
|
177
|
-
const minutes = Math.floor(durationMs / 6e4);
|
|
178
|
-
const seconds = Math.round(durationMs % 6e4 / 1e3);
|
|
179
|
-
return `${minutes}m ${String(seconds).padStart(2, "0")}s`;
|
|
180
|
-
}
|
|
181
104
|
export {
|
|
182
105
|
PlatformActivityRow as default
|
|
183
106
|
};
|
|
184
|
-
//# sourceMappingURL=platform-activity-row-
|
|
107
|
+
//# sourceMappingURL=platform-activity-row-NJ47YBXW.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/timeline/platform-activity-row.tsx"],"sourcesContent":["import {\n sandboxRowTitle,\n startupDuration,\n startupPhaseTitle,\n STARTUP_WAIT_TITLES,\n} from \"./platform-activity-presentation\";\nimport 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"],"mappings":";;;;;;;;;AAWe,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;","names":[]}
|