@molecule/app-ide-react 1.20.4 → 1.21.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +21 -1
- package/dist/components/ChatPanel.d.ts +8 -2
- package/dist/components/ChatPanel.d.ts.map +1 -1
- package/dist/components/ChatPanel.js +13 -12
- package/dist/components/ChatPanel.js.map +1 -1
- package/dist/components/DockStrip.d.ts +3 -1
- package/dist/components/DockStrip.d.ts.map +1 -1
- package/dist/components/DockStrip.js +4 -4
- package/dist/components/DockStrip.js.map +1 -1
- package/dist/components/ShareModal.d.ts +16 -2
- package/dist/components/ShareModal.d.ts.map +1 -1
- package/dist/components/ShareModal.js +9 -9
- package/dist/components/ShareModal.js.map +1 -1
- package/dist/components/TestStatusBar.d.ts +8 -0
- package/dist/components/TestStatusBar.d.ts.map +1 -1
- package/dist/components/TestStatusBar.js +35 -10
- package/dist/components/TestStatusBar.js.map +1 -1
- package/dist/components/chat-model-mode-utilities.d.ts +44 -47
- package/dist/components/chat-model-mode-utilities.d.ts.map +1 -1
- package/dist/components/chat-model-mode-utilities.js +62 -72
- package/dist/components/chat-model-mode-utilities.js.map +1 -1
- package/dist/types.d.ts +11 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +1 -1
|
@@ -63,6 +63,8 @@ export interface DockStripProps {
|
|
|
63
63
|
hint?: ReactNode;
|
|
64
64
|
/** Right-hand readout and action buttons; clicks must stop propagation. */
|
|
65
65
|
actions?: ReactNode;
|
|
66
|
+
/** Secondary actions: at the top of the open detail in the tray, beside `actions` when standalone. */
|
|
67
|
+
detailActions?: ReactNode;
|
|
66
68
|
/** Extra attributes for the root (e.g. a tone `data-*`). */
|
|
67
69
|
rootProps?: Record<string, string>;
|
|
68
70
|
/** The detail shown when expanded. */
|
|
@@ -73,5 +75,5 @@ export interface DockStripProps {
|
|
|
73
75
|
* @param props - See {@link DockStripProps}.
|
|
74
76
|
* @returns The strip.
|
|
75
77
|
*/
|
|
76
|
-
export declare function DockStrip({ molId, toggleMolId, expanded, onToggle, icon, label, chipLabel, chipTitle, hint, actions, rootProps, children, }: DockStripProps): JSX.Element | null;
|
|
78
|
+
export declare function DockStrip({ molId, toggleMolId, expanded, onToggle, icon, label, chipLabel, chipTitle, hint, actions, detailActions, rootProps, children, }: DockStripProps): JSX.Element | null;
|
|
77
79
|
//# sourceMappingURL=DockStrip.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DockStrip.d.ts","sourceRoot":"","sources":["../../src/components/DockStrip.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAU3C;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC5B,2DAA2D;IAC3D,QAAQ,EAAE,WAAW,GAAG,IAAI,CAAA;IAC5B,4CAA4C;IAC5C,QAAQ,EAAE,WAAW,GAAG,IAAI,CAAA;IAC5B,0CAA0C;IAC1C,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,wEAAwE;IACxE,MAAM,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;CAC7B;AAED,mEAAmE;AACnE,eAAO,MAAM,eAAe,+CAA4C,CAAA;AAExE,wCAAwC;AACxC,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAA;AAE3F;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,IAAgB,GACjB,EAAE;IACD,KAAK,EAAE,eAAe,CAAA;IACtB,IAAI,CAAC,EAAE,MAAM,CAAA;CACd,GAAG,GAAG,CAAC,OAAO,CAgGd;AAED,mCAAmC;AACnC,MAAM,WAAW,cAAc;IAC7B,uCAAuC;IACvC,KAAK,EAAE,MAAM,CAAA;IACb,iDAAiD;IACjD,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,mCAAmC;IACnC,QAAQ,EAAE,OAAO,CAAA;IACjB,yBAAyB;IACzB,QAAQ,EAAE,MAAM,IAAI,CAAA;IACpB,sCAAsC;IACtC,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,oCAAoC;IACpC,KAAK,EAAE,SAAS,CAAA;IAChB,+DAA+D;IAC/D,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,oCAAoC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,0DAA0D;IAC1D,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,2EAA2E;IAC3E,OAAO,CAAC,EAAE,SAAS,CAAA;IACnB,4DAA4D;IAC5D,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAClC,sCAAsC;IACtC,QAAQ,CAAC,EAAE,SAAS,CAAA;CACrB;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,IAAI,EACJ,KAAK,EACL,SAAS,EACT,SAAS,EACT,IAAI,EACJ,OAAO,EACP,SAAS,EACT,QAAQ,GACT,EAAE,cAAc,GAAG,GAAG,CAAC,OAAO,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"DockStrip.d.ts","sourceRoot":"","sources":["../../src/components/DockStrip.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAU3C;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC5B,2DAA2D;IAC3D,QAAQ,EAAE,WAAW,GAAG,IAAI,CAAA;IAC5B,4CAA4C;IAC5C,QAAQ,EAAE,WAAW,GAAG,IAAI,CAAA;IAC5B,0CAA0C;IAC1C,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,wEAAwE;IACxE,MAAM,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;CAC7B;AAED,mEAAmE;AACnE,eAAO,MAAM,eAAe,+CAA4C,CAAA;AAExE,wCAAwC;AACxC,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAA;AAE3F;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,IAAgB,GACjB,EAAE;IACD,KAAK,EAAE,eAAe,CAAA;IACtB,IAAI,CAAC,EAAE,MAAM,CAAA;CACd,GAAG,GAAG,CAAC,OAAO,CAgGd;AAED,mCAAmC;AACnC,MAAM,WAAW,cAAc;IAC7B,uCAAuC;IACvC,KAAK,EAAE,MAAM,CAAA;IACb,iDAAiD;IACjD,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,mCAAmC;IACnC,QAAQ,EAAE,OAAO,CAAA;IACjB,yBAAyB;IACzB,QAAQ,EAAE,MAAM,IAAI,CAAA;IACpB,sCAAsC;IACtC,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,oCAAoC;IACpC,KAAK,EAAE,SAAS,CAAA;IAChB,+DAA+D;IAC/D,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,oCAAoC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,0DAA0D;IAC1D,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,2EAA2E;IAC3E,OAAO,CAAC,EAAE,SAAS,CAAA;IACnB,sGAAsG;IACtG,aAAa,CAAC,EAAE,SAAS,CAAA;IACzB,4DAA4D;IAC5D,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAClC,sCAAsC;IACtC,QAAQ,CAAC,EAAE,SAAS,CAAA;CACrB;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,IAAI,EACJ,KAAK,EACL,SAAS,EACT,SAAS,EACT,IAAI,EACJ,OAAO,EACP,aAAa,EACb,SAAS,EACT,QAAQ,GACT,EAAE,cAAc,GAAG,GAAG,CAAC,OAAO,GAAG,IAAI,CAyJrC"}
|
|
@@ -81,7 +81,7 @@ export function StatusMark({ state, size = MARK_SIZE, }) {
|
|
|
81
81
|
* @param props - See {@link DockStripProps}.
|
|
82
82
|
* @returns The strip.
|
|
83
83
|
*/
|
|
84
|
-
export function DockStrip({ molId, toggleMolId, expanded, onToggle, icon, label, chipLabel, chipTitle, hint, actions, rootProps, children, }) {
|
|
84
|
+
export function DockStrip({ molId, toggleMolId, expanded, onToggle, icon, label, chipLabel, chipTitle, hint, actions, detailActions, rootProps, children, }) {
|
|
85
85
|
const cm = getClassMap();
|
|
86
86
|
const tray = useContext(WorkTrayContext);
|
|
87
87
|
if (tray) {
|
|
@@ -105,8 +105,8 @@ export function DockStrip({ molId, toggleMolId, expanded, onToggle, icon, label,
|
|
|
105
105
|
borderRadius: 6,
|
|
106
106
|
cursor: 'pointer',
|
|
107
107
|
background: open ? 'rgba(128,128,128,0.18)' : 'rgba(128,128,128,0.08)',
|
|
108
|
-
}, children: [icon, _jsx("span", { className: cm.cn(cm.textMuted, cm.textSize('xs')), style: { whiteSpace: 'nowrap', overflow: 'hidden', textOverflow: 'ellipsis' }, children: chipLabel ?? label })] }), actions] }), tray.headerEl), open && children && tray.detailEl
|
|
109
|
-
? createPortal(
|
|
108
|
+
}, children: [icon, _jsx("span", { className: cm.cn(cm.textMuted, cm.textSize('xs')), style: { whiteSpace: 'nowrap', overflow: 'hidden', textOverflow: 'ellipsis' }, children: chipLabel ?? label })] }), actions] }), tray.headerEl), open && (children || detailActions) && tray.detailEl
|
|
109
|
+
? createPortal(_jsxs("div", { "data-mol-id": `${molId}-detail`, style: { padding: '2px 10px 8px' }, children: [detailActions ? (_jsx("div", { style: { display: 'flex', alignItems: 'center', gap: 6, marginBottom: 6 }, children: detailActions })) : null, children] }), tray.detailEl)
|
|
110
110
|
: null] }));
|
|
111
111
|
}
|
|
112
112
|
return (_jsxs("div", { "data-mol-id": molId, ...rootProps, style: { borderTop: '1px solid rgba(128,128,128,0.15)', padding: '8px 8px 8px 10px' }, children: [_jsxs("div", { role: "button", tabIndex: 0, "data-mol-id": toggleMolId, "aria-expanded": expanded, onClick: onToggle, onKeyDown: (e) => {
|
|
@@ -134,6 +134,6 @@ export function DockStrip({ molId, toggleMolId, expanded, onToggle, icon, label,
|
|
|
134
134
|
overflow: 'hidden',
|
|
135
135
|
textOverflow: 'ellipsis',
|
|
136
136
|
minWidth: 0,
|
|
137
|
-
}, children: hint })) : null] }), actions ? (
|
|
137
|
+
}, children: hint })) : null] }), actions || detailActions ? (_jsxs("div", { style: { display: 'flex', alignItems: 'center', gap: 6, flexShrink: 0 }, children: [actions, detailActions] })) : null] }), expanded && children ? (_jsx("div", { style: { marginTop: 6, paddingLeft: 18 }, children: children })) : null] }));
|
|
138
138
|
}
|
|
139
139
|
//# sourceMappingURL=DockStrip.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DockStrip.js","sourceRoot":"","sources":["../../src/components/DockStrip.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"DockStrip.js","sourceRoot":"","sources":["../../src/components/DockStrip.tsx"],"names":[],"mappings":"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"}
|
|
@@ -13,12 +13,16 @@
|
|
|
13
13
|
* credential, so write access through one is something a host has to opt into
|
|
14
14
|
* rather than something this modal offers by default.
|
|
15
15
|
*
|
|
16
|
+
* A host can add its own sections below the links (`children`) — e.g. what a
|
|
17
|
+
* link exposes beyond the app — and can hide the links section (`showLinks`)
|
|
18
|
+
* for a caller who may open the dialog but not see the links.
|
|
19
|
+
*
|
|
16
20
|
* Styling uses `getClassMap()` (`cm.*`); the only inline styles are layout the
|
|
17
21
|
* ClassMap can't express. All user-facing text goes through `t()`.
|
|
18
22
|
*
|
|
19
23
|
* @module
|
|
20
24
|
*/
|
|
21
|
-
import type { JSX } from 'react';
|
|
25
|
+
import type { JSX, ReactNode } from 'react';
|
|
22
26
|
import type { ShareLinkResult, ShareRole } from './chat-share-utilities.js';
|
|
23
27
|
/**
|
|
24
28
|
* The share-link modal opened by `/share`, `/share <role>`, and the header
|
|
@@ -27,7 +31,7 @@ import type { ShareLinkResult, ShareRole } from './chat-share-utilities.js';
|
|
|
27
31
|
* @param props - Component props.
|
|
28
32
|
* @returns The rendered share modal.
|
|
29
33
|
*/
|
|
30
|
-
export declare function ShareModal({ projectId, initialRole, roles, canManage, canCreate, canRevoke, onClose, onCreated, }: {
|
|
34
|
+
export declare function ShareModal({ projectId, initialRole, roles, canManage, canCreate, canRevoke, showLinks, refreshSignal, children, onClose, onCreated, }: {
|
|
31
35
|
projectId: string;
|
|
32
36
|
initialRole?: ShareRole;
|
|
33
37
|
/**
|
|
@@ -48,6 +52,16 @@ export declare function ShareModal({ projectId, initialRole, roles, canManage, c
|
|
|
48
52
|
canCreate?: boolean;
|
|
49
53
|
/** Whether the caller may REVOKE a link. Defaults to `canManage`. */
|
|
50
54
|
canRevoke?: boolean;
|
|
55
|
+
/**
|
|
56
|
+
* Whether to render the public-link section. Defaults to `true`; pass `false`
|
|
57
|
+
* when the caller may not even LIST links (the host gates the list above
|
|
58
|
+
* them) but the dialog still has host `children` to show.
|
|
59
|
+
*/
|
|
60
|
+
showLinks?: boolean;
|
|
61
|
+
/** Changing this value re-fetches the link list (e.g. another client changed it). */
|
|
62
|
+
refreshSignal?: number;
|
|
63
|
+
/** Host sections rendered below the links, inside the dialog. */
|
|
64
|
+
children?: ReactNode;
|
|
51
65
|
onClose: () => void;
|
|
52
66
|
onCreated?: (result: ShareLinkResult) => void;
|
|
53
67
|
}): JSX.Element;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ShareModal.d.ts","sourceRoot":"","sources":["../../src/components/ShareModal.tsx"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"ShareModal.d.ts","sourceRoot":"","sources":["../../src/components/ShareModal.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAM3C,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AAI3E;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,EACzB,SAAS,EACT,WAAgC,EAChC,KAA4B,EAC5B,SAAgB,EAChB,SAAqB,EACrB,SAAqB,EACrB,SAAgB,EAChB,aAAa,EACb,QAAQ,EACR,OAAO,EACP,SAAS,GACV,EAAE;IACD,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,SAAS,CAAA;IACvB;;;;OAIG;IACH,KAAK,CAAC,EAAE,SAAS,SAAS,EAAE,CAAA;IAC5B;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,qEAAqE;IACrE,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,qEAAqE;IACrE,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,qFAAqF;IACrF,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,iEAAiE;IACjE,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,CAAA;CAC9C,GAAG,GAAG,CAAC,OAAO,CAoGd"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { useEffect } from 'react';
|
|
3
3
|
import { t } from '@molecule/app-i18n';
|
|
4
4
|
import { getClassMap } from '@molecule/app-ui';
|
|
@@ -11,7 +11,7 @@ import { ShareLinkManager } from './ShareLinkManager.js';
|
|
|
11
11
|
* @param props - Component props.
|
|
12
12
|
* @returns The rendered share modal.
|
|
13
13
|
*/
|
|
14
|
-
export function ShareModal({ projectId, initialRole = DEFAULT_SHARE_ROLE, roles = [DEFAULT_SHARE_ROLE], canManage = true, canCreate = canManage, canRevoke = canManage, onClose, onCreated, }) {
|
|
14
|
+
export function ShareModal({ projectId, initialRole = DEFAULT_SHARE_ROLE, roles = [DEFAULT_SHARE_ROLE], canManage = true, canCreate = canManage, canRevoke = canManage, showLinks = true, refreshSignal, children, onClose, onCreated, }) {
|
|
15
15
|
const cm = getClassMap();
|
|
16
16
|
// Escape closes the modal.
|
|
17
17
|
useEffect(() => {
|
|
@@ -42,12 +42,12 @@ export function ShareModal({ projectId, initialRole = DEFAULT_SHARE_ROLE, roles
|
|
|
42
42
|
borderRadius: 8,
|
|
43
43
|
padding: 16,
|
|
44
44
|
boxShadow: '0 10px 40px rgba(0,0,0,0.35)',
|
|
45
|
-
}, children: [_jsx("div", { className: cm.cn(cm.fontWeight('medium'), cm.textSize('lg')), style: { marginBottom: 4 }, children: t('ide.chat.share.heading', undefined, { defaultValue: 'Share project' }) }), _jsx("div", { className: cm.textMuted, style: { marginBottom: 12, lineHeight: 1.4 }, children: offeredRoles.length > 1
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
45
|
+
}, children: [_jsx("div", { className: cm.cn(cm.fontWeight('medium'), cm.textSize('lg')), style: { marginBottom: 4 }, children: t('ide.chat.share.heading', undefined, { defaultValue: 'Share project' }) }), showLinks && (_jsxs(_Fragment, { children: [_jsx("div", { className: cm.textMuted, style: { marginBottom: 12, lineHeight: 1.4 }, children: offeredRoles.length > 1
|
|
46
|
+
? t('ide.chat.share.subheading', undefined, {
|
|
47
|
+
defaultValue: 'Create a public link. Anyone with the link gets the role you choose — a viewer link is read-only.',
|
|
48
|
+
})
|
|
49
|
+
: t(`ide.chat.share.subheading.${offeredRoles[0]}`, { role: offeredRoles[0] }, {
|
|
50
|
+
defaultValue: 'Create a public link. Anyone with the link can act as {{role}}.',
|
|
51
|
+
}) }), _jsx(ShareLinkManager, { projectId: projectId, roles: offeredRoles, initialRole: initialRole, canManage: canManage, canCreate: canCreate, canRevoke: canRevoke, onCreated: onCreated, refreshSignal: refreshSignal })] })), children, _jsx("div", { style: { display: 'flex', justifyContent: 'flex-end', gap: 8, marginTop: 16 }, children: _jsx("button", { type: "button", "data-mol-id": "share-close", onClick: onClose, className: cm.cn(cm.button({ variant: 'ghost', size: 'sm' }), cm.touchTargetCompact), children: t('common.done', undefined, { defaultValue: 'Done' }) }) })] }) }));
|
|
52
52
|
}
|
|
53
53
|
//# sourceMappingURL=ShareModal.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ShareModal.js","sourceRoot":"","sources":["../../src/components/ShareModal.tsx"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"ShareModal.js","sourceRoot":"","sources":["../../src/components/ShareModal.tsx"],"names":[],"mappings":"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"}
|
|
@@ -33,6 +33,14 @@ import type { TestsRunState } from './tests-card-utilities.js';
|
|
|
33
33
|
* @returns The label.
|
|
34
34
|
*/
|
|
35
35
|
export declare function testsBarLabel(summary: TestsBarSummary): string;
|
|
36
|
+
/**
|
|
37
|
+
* The short label the tray chip wears: one figure, not the sentence — the counts
|
|
38
|
+
* and the running file are in the opened detail.
|
|
39
|
+
*
|
|
40
|
+
* @param summary - The derived run summary.
|
|
41
|
+
* @returns The label.
|
|
42
|
+
*/
|
|
43
|
+
export declare function testsChipLabel(summary: TestsBarSummary): string;
|
|
36
44
|
/** What the bar needs from its host. */
|
|
37
45
|
export interface TestStatusBarProps {
|
|
38
46
|
/** The live run state. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TestStatusBar.d.ts","sourceRoot":"","sources":["../../src/components/TestStatusBar.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAA;AAKhC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAE3C,OAAO,KAAK,EAAE,eAAe,EAAgB,MAAM,0BAA0B,CAAA;AAE7E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAY9D;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CA0C9D;AAED,wCAAwC;AACxC,MAAM,WAAW,kBAAkB;IACjC,0BAA0B;IAC1B,GAAG,EAAE,aAAa,CAAA;IAClB,iEAAiE;IACjE,KAAK,EAAE,QAAQ,EAAE,CAAA;IACjB,sCAAsC;IACtC,QAAQ,EAAE,OAAO,CAAA;IACjB,4BAA4B;IAC5B,QAAQ,EAAE,MAAM,IAAI,CAAA;IACpB,8EAA8E;IAC9E,MAAM,EAAE,MAAM,IAAI,CAAA;IAClB,mDAAmD;IACnD,MAAM,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAA;CAClC;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,EAC5B,GAAG,EACH,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,MAAM,GACP,EAAE,kBAAkB,GAAG,GAAG,CAAC,OAAO,
|
|
1
|
+
{"version":3,"file":"TestStatusBar.d.ts","sourceRoot":"","sources":["../../src/components/TestStatusBar.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAA;AAKhC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAE3C,OAAO,KAAK,EAAE,eAAe,EAAgB,MAAM,0BAA0B,CAAA;AAE7E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAY9D;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CA0C9D;AAYD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CAS/D;AAED,wCAAwC;AACxC,MAAM,WAAW,kBAAkB;IACjC,0BAA0B;IAC1B,GAAG,EAAE,aAAa,CAAA;IAClB,iEAAiE;IACjE,KAAK,EAAE,QAAQ,EAAE,CAAA;IACjB,sCAAsC;IACtC,QAAQ,EAAE,OAAO,CAAA;IACjB,4BAA4B;IAC5B,QAAQ,EAAE,MAAM,IAAI,CAAA;IACpB,8EAA8E;IAC9E,MAAM,EAAE,MAAM,IAAI,CAAA;IAClB,mDAAmD;IACnD,MAAM,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAA;CAClC;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,EAC5B,GAAG,EACH,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,MAAM,GACP,EAAE,kBAAkB,GAAG,GAAG,CAAC,OAAO,CAsGlC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { t } from '@molecule/app-i18n';
|
|
3
3
|
import { getClassMap } from '@molecule/app-ui';
|
|
4
|
-
import { DockStrip } from './DockStrip.js';
|
|
4
|
+
import { DockStrip, StatusMark } from './DockStrip.js';
|
|
5
5
|
import { summariseTestsBar } from './tests-bar-utilities.js';
|
|
6
6
|
/** The theme token each tone paints its dot and figures with. */
|
|
7
7
|
const TONE_COLOR = {
|
|
@@ -45,6 +45,32 @@ export function testsBarLabel(summary) {
|
|
|
45
45
|
defaultValue: count === 1 ? '{{count}} test not run yet' : '{{count}} tests not run yet',
|
|
46
46
|
});
|
|
47
47
|
}
|
|
48
|
+
/** The shared status mark each tone wears on the chip. */
|
|
49
|
+
const TONE_MARK = {
|
|
50
|
+
idle: 'todo',
|
|
51
|
+
running: 'active',
|
|
52
|
+
passing: 'done',
|
|
53
|
+
failing: 'failed',
|
|
54
|
+
stopped: 'stopped',
|
|
55
|
+
error: 'failed',
|
|
56
|
+
};
|
|
57
|
+
/**
|
|
58
|
+
* The short label the tray chip wears: one figure, not the sentence — the counts
|
|
59
|
+
* and the running file are in the opened detail.
|
|
60
|
+
*
|
|
61
|
+
* @param summary - The derived run summary.
|
|
62
|
+
* @returns The label.
|
|
63
|
+
*/
|
|
64
|
+
export function testsChipLabel(summary) {
|
|
65
|
+
const { tone, passed, failed } = summary;
|
|
66
|
+
if (tone === 'running')
|
|
67
|
+
return t('ide.testsBar.runningLast', undefined, { defaultValue: 'Running tests' });
|
|
68
|
+
if (tone === 'failing')
|
|
69
|
+
return `${failed} ${t('ide.testsBar.failedLabel', undefined, { defaultValue: 'failing' })}`;
|
|
70
|
+
if (tone === 'passing')
|
|
71
|
+
return `${passed} ${t('ide.testsBar.passedLabel', undefined, { defaultValue: 'passing' })}`;
|
|
72
|
+
return testsBarLabel(summary);
|
|
73
|
+
}
|
|
48
74
|
/**
|
|
49
75
|
* Renders the tests status strip.
|
|
50
76
|
*
|
|
@@ -54,15 +80,14 @@ export function testsBarLabel(summary) {
|
|
|
54
80
|
export function TestStatusBar({ run, tests, expanded, onToggle, onOpen, onStop, }) {
|
|
55
81
|
const cm = getClassMap();
|
|
56
82
|
const summary = summariseTestsBar(run, tests);
|
|
57
|
-
const hasResults = summary.passed + summary.failed + summary.skipped > 0;
|
|
58
83
|
const label = testsBarLabel(summary);
|
|
59
|
-
return (_jsx(DockStrip, { molId: "tests-bar", toggleMolId: "tests-bar-toggle", rootProps: { 'data-tests-tone': summary.tone }, expanded: expanded, onToggle: onToggle, label: _jsx("span", { "data-mol-id": "tests-bar-label", children: label }), hint: summary.tone === 'running' && (summary.currentTest ?? summary.currentFile) ? (_jsx("span", { "data-mol-id": "tests-bar-current", children: `· ${summary.currentTest ?? summary.currentFile}` })) : undefined, actions:
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
84
|
+
return (_jsx(DockStrip, { molId: "tests-bar", toggleMolId: "tests-bar-toggle", rootProps: { 'data-tests-tone': summary.tone }, expanded: expanded, onToggle: onToggle, label: _jsx("span", { "data-mol-id": "tests-bar-label", children: label }), hint: summary.tone === 'running' && (summary.currentTest ?? summary.currentFile) ? (_jsx("span", { "data-mol-id": "tests-bar-current", children: `· ${summary.currentTest ?? summary.currentFile}` })) : undefined, actions: run.running && onStop ? (_jsx("button", { type: "button", "data-mol-id": "tests-bar-stop", className: cm.cn(cm.button({ variant: 'solid', color: 'error', size: 'xs' }), cm.touchTargetCompact), onClick: (e) => {
|
|
85
|
+
e.stopPropagation();
|
|
86
|
+
onStop();
|
|
87
|
+
}, children: t('ide.testsBar.stop', undefined, { defaultValue: 'Stop' }) })) : undefined, detailActions: run.running && onStop ? undefined : (_jsx("button", { type: "button", "data-mol-id": "tests-bar-open", className: cm.cn(cm.button({ variant: 'solid', color: 'primary', size: 'xs' }), cm.touchTargetCompact), onClick: (e) => {
|
|
88
|
+
e.stopPropagation();
|
|
89
|
+
onOpen();
|
|
90
|
+
}, children: t('ide.testsBar.open', undefined, { defaultValue: 'Tests' }) })), icon: _jsx(StatusMark, { state: TONE_MARK[summary.tone], size: 14 }), chipLabel: testsChipLabel(summary), children: _jsxs("div", { "data-mol-id": "tests-bar-detail", className: cm.cn(cm.textMuted, cm.textSize('xs')), style: {
|
|
66
91
|
display: 'flex',
|
|
67
92
|
flexDirection: 'column',
|
|
68
93
|
gap: 2,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TestStatusBar.js","sourceRoot":"","sources":["../../src/components/TestStatusBar.tsx"],"names":[],"mappings":";AA2BA,OAAO,EAAE,CAAC,EAAE,MAAM,oBAAoB,CAAA;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAG9C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"TestStatusBar.js","sourceRoot":"","sources":["../../src/components/TestStatusBar.tsx"],"names":[],"mappings":"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"}
|
|
@@ -8,12 +8,15 @@
|
|
|
8
8
|
* commit-message generator) and `compactModel` (conversation compaction), which
|
|
9
9
|
* fall back to the server's own fast default (never `chatModel`) when unset.
|
|
10
10
|
* These helpers parse the mode flag, map a mode to its settings field, resolve
|
|
11
|
-
* the effective model for a mode, and compute the free-tier clamp
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
11
|
+
* the effective model for a mode, and compute the free-tier clamp.
|
|
12
|
+
*
|
|
13
|
+
* The clamp is entirely SERVER-DRIVEN — no model id is ever named here. A
|
|
14
|
+
* free/anon user may use, in any mode, a model the catalog flags `freeTier`,
|
|
15
|
+
* plus the server-sent per-mode default for that mode (`GET /ai/models`
|
|
16
|
+
* `defaults`, which the server resolves from its own free-tier policy). Two
|
|
17
|
+
* earlier generations of this file hardcoded the clamp ids (first a Sonnet
|
|
18
|
+
* planner, then `deepseek-v4-pro`); each went stale the moment the server's
|
|
19
|
+
* policy moved and the picker advertised a model the server would not use.
|
|
17
20
|
*
|
|
18
21
|
* Everything here is deterministic and side-effect free so it can be unit tested
|
|
19
22
|
* without rendering or a backend. The component owns persistence (`PATCH
|
|
@@ -21,9 +24,15 @@
|
|
|
21
24
|
*
|
|
22
25
|
* @module
|
|
23
26
|
*/
|
|
24
|
-
import type { AppModelDefinition } from '@molecule/app-ai-models';
|
|
27
|
+
import type { AppModelDefinition, AppModeModelDefaults } from '@molecule/app-ai-models';
|
|
25
28
|
/** A conversation mode or auxiliary job that can have its own model. */
|
|
26
29
|
export type ModelMode = 'plan' | 'execute' | 'commit' | 'compact';
|
|
30
|
+
/**
|
|
31
|
+
* The server-sent per-mode defaults (`GET /ai/models` `defaults`) — the
|
|
32
|
+
* server's own resolution of what each mode uses for this requester's tier.
|
|
33
|
+
* Partial/absent while the catalog is loading or on servers that don't send it.
|
|
34
|
+
*/
|
|
35
|
+
export type ServerModeDefaults = Partial<AppModeModelDefaults> | undefined;
|
|
27
36
|
/** The subset of project settings this module reads for model resolution. */
|
|
28
37
|
export interface PerModeModelSettings {
|
|
29
38
|
/** Model id used in plan mode (falls back to {@link PerModeModelSettings.chatModel}). */
|
|
@@ -71,20 +80,18 @@ export declare function modeSettingKey(mode: ModelMode): 'planModel' | 'executeM
|
|
|
71
80
|
*/
|
|
72
81
|
export declare function resolveModeModel(settings: PerModeModelSettings, mode: ModelMode): string | undefined;
|
|
73
82
|
/**
|
|
74
|
-
*
|
|
75
|
-
*
|
|
76
|
-
*
|
|
77
|
-
*
|
|
78
|
-
* Matching is catalog-driven (by id/provider) so it survives id churn; when no
|
|
79
|
-
* specific match exists it falls back to the supplied `fallback` (the
|
|
80
|
-
* catalog's free-tier model id).
|
|
83
|
+
* The model a free/anon user gets in a mode when nothing else applies: the
|
|
84
|
+
* server-sent default for that mode, else the catalog's `freeTier`-flagged
|
|
85
|
+
* model, else the supplied `fallback`. Never names a model id — the server's
|
|
86
|
+
* free-tier policy (and the catalog flag it publishes) is the only source.
|
|
81
87
|
*
|
|
82
88
|
* @param models - The available models from the catalog.
|
|
83
89
|
* @param mode - The conversation mode or auxiliary job.
|
|
84
|
-
* @param fallback - The free-tier model id to use when
|
|
85
|
-
* @
|
|
90
|
+
* @param fallback - The free-tier model id to use when neither source has one.
|
|
91
|
+
* @param serverDefaults - Server-sent per-mode defaults (`GET /ai/models`).
|
|
92
|
+
* @returns The free-tier model id for the mode.
|
|
86
93
|
*/
|
|
87
|
-
export declare function freeTierModeModelId(models: readonly AppModelDefinition[], mode: ModelMode, fallback: string): string;
|
|
94
|
+
export declare function freeTierModeModelId(models: readonly AppModelDefinition[], mode: ModelMode, fallback: string, serverDefaults?: ServerModeDefaults): string;
|
|
88
95
|
/**
|
|
89
96
|
* The model id that will ACTUALLY serve a conversation mode, for display.
|
|
90
97
|
*
|
|
@@ -92,81 +99,71 @@ export declare function freeTierModeModelId(models: readonly AppModelDefinition[
|
|
|
92
99
|
* per-request override, which the UI never has): the project's per-mode model,
|
|
93
100
|
* then the project's SAVED legacy `chatModel`, each skipped when the free-tier
|
|
94
101
|
* clamp would reject it — then the server-sent per-mode default (which already
|
|
95
|
-
* folds in the owner's account-level settings and tier), then the catalog
|
|
96
|
-
*
|
|
102
|
+
* folds in the owner's account-level settings and tier), then the catalog's
|
|
103
|
+
* free-tier model as the last resort.
|
|
97
104
|
*
|
|
98
105
|
* `settings.chatModel` must be the PERSISTED value only — never a UI-seeded
|
|
99
|
-
* default. Seeding the catalog's
|
|
100
|
-
*
|
|
101
|
-
*
|
|
102
|
-
* with its own plan default (observed on prod 2026-08-13 — the UI said
|
|
103
|
-
* "DeepSeek V4 Flash" for a plan turn that DeepSeek V4 Pro served).
|
|
106
|
+
* default. Seeding the catalog's free-tier model as "current" once made every
|
|
107
|
+
* plan-mode surface label the wrong model while the server planned with its
|
|
108
|
+
* own plan default.
|
|
104
109
|
*
|
|
105
110
|
* @param mode - The conversation mode to resolve.
|
|
106
111
|
* @param settings - Persisted per-mode + legacy model settings (saved only).
|
|
107
112
|
* @param serverDefaults - Server-sent per-mode defaults (`GET /ai/models`).
|
|
108
113
|
* @param isFreeTier - Whether the current user is on the free/anon tier.
|
|
109
114
|
* @param models - The available models from the catalog.
|
|
110
|
-
* @param fallback - The free-tier model id to use when no
|
|
115
|
+
* @param fallback - The free-tier model id to use when no other source exists.
|
|
111
116
|
* @returns The model id the mode resolves to.
|
|
112
117
|
*/
|
|
113
|
-
export declare function effectiveModeModelId(mode: 'plan' | 'execute', settings: PerModeModelSettings, serverDefaults:
|
|
114
|
-
plan?: string;
|
|
115
|
-
execute?: string;
|
|
116
|
-
} | undefined, isFreeTier: boolean, models: readonly AppModelDefinition[], fallback: string): string;
|
|
118
|
+
export declare function effectiveModeModelId(mode: 'plan' | 'execute', settings: PerModeModelSettings, serverDefaults: ServerModeDefaults, isFreeTier: boolean, models: readonly AppModelDefinition[], fallback: string): string;
|
|
117
119
|
/**
|
|
118
120
|
* Why a model is locked for a free-tier user in a given mode — `'paid'` for a
|
|
119
121
|
* genuinely paid model, `'mode'` for a model the free tier CAN use, just in a
|
|
120
|
-
* different mode (e.g.
|
|
122
|
+
* different mode (e.g. another mode's server default shown in this picker).
|
|
121
123
|
*/
|
|
122
124
|
export type FreeTierLockReason = 'paid' | 'mode';
|
|
123
125
|
/**
|
|
124
126
|
* The lock reason for a model in a mode under the free-tier clamp, or `null`
|
|
125
127
|
* when it is selectable. Pro users and `provider: 'custom'` (bring-your-own
|
|
126
|
-
* AI) models are never locked; a free/anon user may pick
|
|
127
|
-
*
|
|
128
|
-
* commit/compact jobs, mirroring the server's aux-model selection, which
|
|
129
|
-
* ignores a non-free platform pick anyway).
|
|
128
|
+
* AI) models are never locked; a free/anon user may pick a `freeTier`-flagged
|
|
129
|
+
* model in any mode, or the server-sent default for the scoped mode.
|
|
130
130
|
*
|
|
131
131
|
* A locked model splits into two very different cases the UI must not
|
|
132
132
|
* conflate: `'paid'` (upgrade actually unlocks it) versus `'mode'` (the model
|
|
133
|
-
* is free-tier-usable in ANOTHER mode
|
|
134
|
-
* free-tier-flagged and thus selectable for commit/compact — so a "Pro" badge
|
|
135
|
-
* would be flatly wrong).
|
|
133
|
+
* is free-tier-usable in ANOTHER mode, so a "Pro" badge would be flatly wrong).
|
|
136
134
|
*
|
|
137
135
|
* @param modelId - The candidate model id.
|
|
138
136
|
* @param mode - The conversation mode the picker is scoped to.
|
|
139
137
|
* @param isFreeTier - Whether the current user is on the free/anon tier.
|
|
140
138
|
* @param models - The available models from the catalog.
|
|
141
|
-
* @param
|
|
139
|
+
* @param serverDefaults - Server-sent per-mode defaults (`GET /ai/models`).
|
|
142
140
|
* @returns `'paid'` / `'mode'` when locked, `null` when selectable.
|
|
143
141
|
*/
|
|
144
|
-
export declare function freeTierLockReason(modelId: string, mode: ModelMode, isFreeTier: boolean, models: readonly AppModelDefinition[],
|
|
142
|
+
export declare function freeTierLockReason(modelId: string, mode: ModelMode, isFreeTier: boolean, models: readonly AppModelDefinition[], serverDefaults?: ServerModeDefaults): FreeTierLockReason | null;
|
|
145
143
|
/**
|
|
146
144
|
* The mode a free-tier user can actually use this model in — `'plan'` /
|
|
147
|
-
* `'execute'` when
|
|
148
|
-
* auxiliary jobs) when
|
|
145
|
+
* `'execute'` when the free tier allows it there, `'commit'` (standing for
|
|
146
|
+
* both auxiliary jobs) when only an aux job allows it, `null` when the free
|
|
149
147
|
* tier can't use it anywhere. Drives the "free in <mode>" labeling next to a
|
|
150
148
|
* `'mode'`-locked row.
|
|
151
149
|
*
|
|
152
150
|
* @param modelId - The candidate model id.
|
|
153
151
|
* @param models - The available models from the catalog.
|
|
154
|
-
* @param
|
|
152
|
+
* @param serverDefaults - Server-sent per-mode defaults (`GET /ai/models`).
|
|
155
153
|
* @returns The mode the model is free-tier-usable in, or `null`.
|
|
156
154
|
*/
|
|
157
|
-
export declare function freeTierUsableMode(modelId: string, models: readonly AppModelDefinition[],
|
|
155
|
+
export declare function freeTierUsableMode(modelId: string, models: readonly AppModelDefinition[], serverDefaults?: ServerModeDefaults): ModelMode | null;
|
|
158
156
|
/**
|
|
159
157
|
* Whether a model is locked (not selectable) for the given mode under the
|
|
160
158
|
* free-tier clamp — the boolean view of {@link freeTierLockReason} (which see
|
|
161
|
-
* for the rules
|
|
162
|
-
* one model; commit/compact accept any free-tier-flagged model).
|
|
159
|
+
* for the rules).
|
|
163
160
|
*
|
|
164
161
|
* @param modelId - The candidate model id.
|
|
165
162
|
* @param mode - The conversation mode the picker is scoped to.
|
|
166
163
|
* @param isFreeTier - Whether the current user is on the free/anon tier.
|
|
167
164
|
* @param models - The available models from the catalog.
|
|
168
|
-
* @param
|
|
165
|
+
* @param serverDefaults - Server-sent per-mode defaults (`GET /ai/models`).
|
|
169
166
|
* @returns `true` when the model is locked for this user and mode.
|
|
170
167
|
*/
|
|
171
|
-
export declare function isModeModelLocked(modelId: string, mode: ModelMode, isFreeTier: boolean, models: readonly AppModelDefinition[],
|
|
168
|
+
export declare function isModeModelLocked(modelId: string, mode: ModelMode, isFreeTier: boolean, models: readonly AppModelDefinition[], serverDefaults?: ServerModeDefaults): boolean;
|
|
172
169
|
//# sourceMappingURL=chat-model-mode-utilities.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-model-mode-utilities.d.ts","sourceRoot":"","sources":["../../src/components/chat-model-mode-utilities.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"chat-model-mode-utilities.d.ts","sourceRoot":"","sources":["../../src/components/chat-model-mode-utilities.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAEvF,wEAAwE;AACxE,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAA;AAEjE;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,GAAG,OAAO,CAAC,oBAAoB,CAAC,GAAG,SAAS,CAAA;AAE1E,6EAA6E;AAC7E,MAAM,WAAW,oBAAoB;IACnC,yFAAyF;IACzF,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,4FAA4F;IAC5F,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,iFAAiF;IACjF,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,+EAA+E;IAC/E,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,yEAAyE;IACzE,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAI9F;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,SAAS,GACd,WAAW,GAAG,cAAc,GAAG,aAAa,GAAG,cAAc,CAW/D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,oBAAoB,EAC9B,IAAI,EAAE,SAAS,GACd,MAAM,GAAG,SAAS,CAWpB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,SAAS,kBAAkB,EAAE,EACrC,IAAI,EAAE,SAAS,EACf,QAAQ,EAAE,MAAM,EAChB,cAAc,CAAC,EAAE,kBAAkB,GAClC,MAAM,CAER;AAuBD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,QAAQ,EAAE,oBAAoB,EAC9B,cAAc,EAAE,kBAAkB,EAClC,UAAU,EAAE,OAAO,EACnB,MAAM,EAAE,SAAS,kBAAkB,EAAE,EACrC,QAAQ,EAAE,MAAM,GACf,MAAM,CAcR;AAED;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,MAAM,CAAA;AAKhD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,SAAS,EACf,UAAU,EAAE,OAAO,EACnB,MAAM,EAAE,SAAS,kBAAkB,EAAE,EACrC,cAAc,CAAC,EAAE,kBAAkB,GAClC,kBAAkB,GAAG,IAAI,CAS3B;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,SAAS,kBAAkB,EAAE,EACrC,cAAc,CAAC,EAAE,kBAAkB,GAClC,SAAS,GAAG,IAAI,CAWlB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,SAAS,EACf,UAAU,EAAE,OAAO,EACnB,MAAM,EAAE,SAAS,kBAAkB,EAAE,EACrC,cAAc,CAAC,EAAE,kBAAkB,GAClC,OAAO,CAET"}
|