@molecule/app-ide-react 1.21.2 → 1.22.1

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.
@@ -0,0 +1,11 @@
1
+ import { type JSX } from 'react';
2
+ import type { ContextCompaction, ContextUsage } from '@molecule/app-ai-chat';
3
+ /** Merge final usage into its pre-dispatch sample without counting one request twice. */
4
+ export declare function mergeContextHistory(history: ContextUsage[], incoming: ContextUsage[]): ContextUsage[];
5
+ /** A context indicator with measured request composition and a bounded usage history. */
6
+ export declare function ContextUsageIndicator({ usage, history, compactions, }: {
7
+ usage: ContextUsage;
8
+ history?: ContextUsage[];
9
+ compactions?: ContextCompaction[];
10
+ }): JSX.Element;
11
+ //# sourceMappingURL=ContextUsageIndicator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContextUsageIndicator.d.ts","sourceRoot":"","sources":["../../src/components/ContextUsageIndicator.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,GAAG,EAAY,MAAM,OAAO,CAAA;AAE1C,OAAO,KAAK,EAAqB,iBAAiB,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAM/F,yFAAyF;AACzF,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,YAAY,EAAE,EACvB,QAAQ,EAAE,YAAY,EAAE,GACvB,YAAY,EAAE,CAiBhB;AAiBD,yFAAyF;AACzF,wBAAgB,qBAAqB,CAAC,EACpC,KAAK,EACL,OAAY,EACZ,WAAgB,GACjB,EAAE;IACD,KAAK,EAAE,YAAY,CAAA;IACnB,OAAO,CAAC,EAAE,YAAY,EAAE,CAAA;IACxB,WAAW,CAAC,EAAE,iBAAiB,EAAE,CAAA;CAClC,GAAG,GAAG,CAAC,OAAO,CAyOd"}
@@ -0,0 +1,101 @@
1
+ import { jsxs as _jsxs, jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useState } from 'react';
3
+ import { formatTokenCount } from '@molecule/app-ai-models';
4
+ import { t } from '@molecule/app-i18n';
5
+ import { getClassMap } from '@molecule/app-ui';
6
+ import { Modal } from '@molecule/app-ui-react';
7
+ /** Merge final usage into its pre-dispatch sample without counting one request twice. */
8
+ export function mergeContextHistory(history, incoming) {
9
+ const samples = new Map();
10
+ for (const usage of [...history, ...incoming]) {
11
+ if (!usage.requestId && !usage.at)
12
+ continue;
13
+ const key = usage.requestId ?? usage.at;
14
+ const previous = samples.get(key);
15
+ // A slow history response must not replace provider-reported usage with an estimate.
16
+ if (previous?.composition?.actualInputTokens != null &&
17
+ usage.composition?.actualInputTokens == null)
18
+ continue;
19
+ samples.set(key, usage);
20
+ }
21
+ const result = [...samples.values()].sort((a, b) => (a.at ?? '').localeCompare(b.at ?? ''));
22
+ // Keep the first sample so the chart's origin survives long conversations.
23
+ return result.length > 128 ? [result[0], ...result.slice(-127)] : result;
24
+ }
25
+ const categoryNames = {
26
+ system: 'System instructions',
27
+ summary: 'Previous summary',
28
+ toolDefinitions: 'Tool definitions',
29
+ serverTools: 'Provider tools',
30
+ userText: 'User messages',
31
+ assistantText: 'Assistant messages',
32
+ reasoning: 'Reasoning',
33
+ toolCalls: 'Tool arguments',
34
+ toolResults: 'Tool results',
35
+ images: 'Images',
36
+ attachments: 'Attachments',
37
+ structuralOverhead: 'Request structure',
38
+ };
39
+ /** A context indicator with measured request composition and a bounded usage history. */
40
+ export function ContextUsageIndicator({ usage, history = [], compactions = [], }) {
41
+ const cm = getClassMap();
42
+ const [open, setOpen] = useState(false);
43
+ const target = usage.backgroundCompactAtTokens ?? usage.compactAtTokens;
44
+ const limit = Math.max(1, target ?? usage.contextWindow);
45
+ const ratio = Math.max(0, usage.inputTokens / limit);
46
+ const percent = Math.round(ratio * 100);
47
+ const title = t('ide.chat.context.title', undefined, { defaultValue: 'Context usage' });
48
+ const targetLabel = target
49
+ ? t('ide.chat.context.target', undefined, { defaultValue: 'Compaction target' })
50
+ : t('ide.chat.context.window', undefined, { defaultValue: 'Context window' });
51
+ const composition = usage.composition;
52
+ const label = t('ide.chat.context.indicator', {
53
+ tokens: formatTokenCount(usage.inputTokens),
54
+ limit: formatTokenCount(limit),
55
+ target: targetLabel,
56
+ percent,
57
+ }, { defaultValue: '{{tokens}} / {{limit}} tokens · {{target}} ({{percent}}%)' });
58
+ const samples = mergeContextHistory(history, [usage]);
59
+ const maxTokens = Math.max(limit, ...samples.map((sample) => sample.inputTokens), 1);
60
+ const start = Date.parse(samples[0]?.at ?? '') || 0;
61
+ const end = Date.parse(samples.at(-1)?.at ?? '') || start;
62
+ const points = samples
63
+ .map((sample, i) => {
64
+ const x = end > start
65
+ ? 8 + 304 * ((Date.parse(sample.at ?? '') - start) / (end - start))
66
+ : 8 + 304 * (i / Math.max(1, samples.length - 1));
67
+ return `${x},${88 - (80 * sample.inputTokens) / maxTokens}`;
68
+ })
69
+ .join(' ');
70
+ return (_jsxs(_Fragment, { children: [_jsxs("button", { type: "button", className: cm.cn(cm.button({ variant: 'ghost', size: 'xs' }), cm.touchTargetCompact), style: { marginLeft: 'auto', display: 'inline-flex', gap: 4 }, "data-mol-id": "chat-context-usage", title: label, "aria-label": `${title}: ${label}`, "aria-haspopup": "dialog", onClick: () => setOpen(true), children: [_jsxs("span", { children: [percent, "%"] }), _jsxs("svg", { width: "18", height: "18", viewBox: "0 0 18 18", "aria-hidden": "true", children: [_jsx("circle", { cx: "9", cy: "9", r: "8", fill: "none", stroke: "currentColor", strokeWidth: "2", opacity: ".15" }), _jsx("circle", { cx: "9", cy: "9", r: "8", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeDasharray: `${16 * Math.PI}`, strokeDashoffset: `${16 * Math.PI * (1 - Math.min(ratio, 1))}`, transform: "rotate(-90 9 9)" })] })] }), _jsxs(Modal, { open: open, onClose: () => setOpen(false), title: title, size: "lg", children: [_jsx("p", { children: label }), target != null && (_jsx("p", { className: cm.textMuted, children: t('ide.chat.context.targetHelp', undefined, {
71
+ defaultValue: 'Compaction is scheduled around this target; progress can continue while the summary is prepared.',
72
+ }) })), composition && (_jsxs(_Fragment, { children: [_jsx("p", { children: composition.actualInputTokens != null
73
+ ? t('ide.chat.context.actual', { tokens: composition.actualInputTokens.toLocaleString() }, {
74
+ defaultValue: 'Provider-reported input: {{tokens}} tokens (including cached input).',
75
+ })
76
+ : t('ide.chat.context.pending', undefined, {
77
+ defaultValue: 'Provider usage is pending; current token counts are estimates.',
78
+ }) }), _jsx("p", { className: cm.textMuted, children: t('ide.chat.context.estimate', {
79
+ tokens: composition.estimatedTokens.toLocaleString(),
80
+ bytes: composition.totalBytes.toLocaleString(),
81
+ chars: composition.totalChars.toLocaleString(),
82
+ }, {
83
+ defaultValue: 'Known text estimate: {{tokens}} tokens. Request: {{chars}} characters / {{bytes}} bytes. Shares describe estimated tokens, not billed allocation.',
84
+ }) }), (composition.unknownTokenItems > 0 || composition.serializationFailures > 0) && (_jsx("p", { className: cm.textMuted, children: t('ide.chat.context.unknown', undefined, {
85
+ defaultValue: 'Some image, attachment, or unmeasurable content has an unknown token cost and is excluded from estimated shares.',
86
+ }) })), _jsx("div", { style: { overflowX: 'auto' }, children: _jsxs("table", { style: { width: '100%', textAlign: 'left' }, children: [_jsx("caption", { className: cm.srOnly, children: t('ide.chat.context.breakdown', undefined, {
87
+ defaultValue: 'Request composition',
88
+ }) }), _jsx("thead", { children: _jsxs("tr", { children: [_jsx("th", { children: t('ide.chat.context.category', undefined, { defaultValue: 'Category' }) }), _jsx("th", { children: t('ide.chat.context.tokens', undefined, { defaultValue: 'Est. tokens' }) }), _jsx("th", { children: t('ide.chat.context.share', undefined, { defaultValue: 'Share' }) }), _jsx("th", { children: t('ide.chat.context.bytes', undefined, { defaultValue: 'Bytes' }) })] }) }), _jsx("tbody", { children: composition.categories
89
+ .filter((category) => category.bytes > 0 || category.unknownItems > 0)
90
+ .map((category) => (_jsxs("tr", { children: [_jsx("th", { scope: "row", children: t(`ide.chat.context.category.${category.id}`, undefined, {
91
+ defaultValue: categoryNames[category.id],
92
+ }) }), _jsxs("td", { children: [category.estimatedTokens?.toLocaleString() ?? '—', category.unknownItems > 0 ? ' + ?' : ''] }), _jsx("td", { children: category.percent == null ? '—' : `${category.percent}%` }), _jsx("td", { children: category.bytes.toLocaleString() })] }, category.id))) })] }) })] })), samples.length > 1 && (_jsxs("figure", { style: { margin: '16px 0' }, children: [_jsx("figcaption", { children: t('ide.chat.context.history', { count: samples.length }, { defaultValue: 'Context over time · {{count}} requests' }) }), _jsxs("svg", { viewBox: "0 0 320 96", role: "img", "aria-label": t('ide.chat.context.chart', undefined, {
93
+ defaultValue: 'Input tokens over time; dashed line marks the current target',
94
+ }), style: { width: '100%', height: 120 }, children: [_jsx("line", { x1: "8", x2: "312", y1: 88 - (80 * limit) / maxTokens, y2: 88 - (80 * limit) / maxTokens, stroke: "currentColor", opacity: ".4", strokeDasharray: "4 4" }), _jsx("polyline", { points: points, fill: "none", stroke: "currentColor", strokeWidth: "2" })] }), _jsxs("div", { className: cm.textMuted, style: { display: 'flex', justifyContent: 'space-between' }, children: [_jsx("span", { children: start ? new Date(start).toLocaleTimeString() : '' }), _jsxs("span", { children: [formatTokenCount(maxTokens), ' ', t('ide.chat.context.tokenUnit', undefined, { defaultValue: 'tokens' })] }), _jsx("span", { children: end ? new Date(end).toLocaleTimeString() : '' })] })] })), compactions.length > 0 && (_jsxs("div", { children: [_jsx("p", { children: t('ide.chat.context.compactions', { count: compactions.length }, { defaultValue: 'Completed compactions: {{count}}' }) }), _jsx("ul", { children: compactions.slice(-5).map((event, index) => (_jsx("li", { children: t('ide.chat.context.compaction', {
95
+ at: new Date(event.at).toLocaleTimeString(),
96
+ before: event.beforeChars.toLocaleString(),
97
+ after: event.afterChars.toLocaleString(),
98
+ seconds: Math.round(event.elapsedMs / 1000),
99
+ }, { defaultValue: '{{at}} · {{before}} → {{after}} characters · {{seconds}}s' }) }, `${event.at}-${index}`))) })] }))] })] }));
100
+ }
101
+ //# sourceMappingURL=ContextUsageIndicator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContextUsageIndicator.js","sourceRoot":"","sources":["../../src/components/ContextUsageIndicator.tsx"],"names":[],"mappings":"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"}
@@ -93,9 +93,10 @@ export declare function modelsSupportingEffort(models: readonly AppModelDefiniti
93
93
  /**
94
94
  * The effort levels the `/effort` command offers and accepts for a *specific*
95
95
  * model — the model's own native values, ascending (e.g.
96
- * `['low', 'high', 'xhigh', 'max']`). Empty for a fixed-reasoning model
97
- * (`grok-code-fast-1`, the DeepSeek executors) or an unknown model, which
98
- * expose no effort choice.
96
+ * `['low', 'high', 'xhigh', 'max']`, or `['off', 'low', 'high', 'max']` on an
97
+ * opt-in reasoning model where `off` is the local toggle). Empty for a
98
+ * fixed-reasoning model (`grok-code-fast-1`, DeepSeek V4 Pro/V4 Flash) or an
99
+ * unknown model, which expose no effort choice.
99
100
  *
100
101
  * @param model - The active model to read levels from, or `undefined`.
101
102
  * @returns The model's effort levels in ascending order (empty when it has none).
@@ -1 +1 @@
1
- {"version":3,"file":"chat-effort-utilities.d.ts","sourceRoot":"","sources":["../../src/components/chat-effort-utilities.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAE5F,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,CAAA;AACzC,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,gBAAgB,GACjB,MAAM,yBAAyB,CAAA;AAEhC;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,SAAS,CAAA;AAE3C;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,UAAU,CAAA;CAAE,GAC/C;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,UAAU,CAAA;CAAE,GACnC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,UAAU,CAAA;CAAE,GACpC;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAA;AAEpC;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAiBtE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,SAAS,YAAY,EAAE,GAC/B,WAAW,GAAG,IAAI,CAGpB;AAED;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,SAAS,kBAAkB,EAAE,GACpC,kBAAkB,EAAE,CAEtB;AAED;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,kBAAkB,GAAG,SAAS,GAAG,SAAS,MAAM,EAAE,CAE7F"}
1
+ {"version":3,"file":"chat-effort-utilities.d.ts","sourceRoot":"","sources":["../../src/components/chat-effort-utilities.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAE5F,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,CAAA;AACzC,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,gBAAgB,GACjB,MAAM,yBAAyB,CAAA;AAEhC;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,SAAS,CAAA;AAE3C;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,UAAU,CAAA;CAAE,GAC/C;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,UAAU,CAAA;CAAE,GACnC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,UAAU,CAAA;CAAE,GACpC;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAA;AAEpC;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAiBtE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,SAAS,YAAY,EAAE,GAC/B,WAAW,GAAG,IAAI,CAGpB;AAED;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,SAAS,kBAAkB,EAAE,GACpC,kBAAkB,EAAE,CAEtB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,kBAAkB,GAAG,SAAS,GAAG,SAAS,MAAM,EAAE,CAE7F"}
@@ -86,9 +86,10 @@ export function modelsSupportingEffort(models) {
86
86
  /**
87
87
  * The effort levels the `/effort` command offers and accepts for a *specific*
88
88
  * model — the model's own native values, ascending (e.g.
89
- * `['low', 'high', 'xhigh', 'max']`). Empty for a fixed-reasoning model
90
- * (`grok-code-fast-1`, the DeepSeek executors) or an unknown model, which
91
- * expose no effort choice.
89
+ * `['low', 'high', 'xhigh', 'max']`, or `['off', 'low', 'high', 'max']` on an
90
+ * opt-in reasoning model where `off` is the local toggle). Empty for a
91
+ * fixed-reasoning model (`grok-code-fast-1`, DeepSeek V4 Pro/V4 Flash) or an
92
+ * unknown model, which expose no effort choice.
92
93
  *
93
94
  * @param model - The active model to read levels from, or `undefined`.
94
95
  * @returns The model's effort levels in ascending order (empty when it has none).
@@ -1 +1 @@
1
- {"version":3,"file":"chat-effort-utilities.js","sourceRoot":"","sources":["../../src/components/chat-effort-utilities.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAKH,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,gBAAgB,GACjB,MAAM,yBAAyB,CAAA;AA6BhC;;;;;;;GAOG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAC9C,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAA;IAC3D,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAA;IACvB,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IACnE,IAAI,IAA4B,CAAA;IAChC,MAAM,IAAI,GAAa,EAAE,CAAA;IACzB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAA;QACjC,IAAI,KAAK,KAAK,QAAQ;YAAE,IAAI,GAAG,MAAM,CAAA;aAChC,IAAI,KAAK,KAAK,WAAW;YAAE,IAAI,GAAG,SAAS,CAAA;;YAC3C,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACvB,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;IACpD,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAA;IACpE,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;IACnB,IAAI,GAAG,KAAK,GAAG;QAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;IAC/C,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,CAAA;AACnC,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,gBAAgB,CAC9B,GAAW,EACX,OAAgC;IAEhC,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,EAAE,CAAA;IAC/B,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,EAAE,KAAK,IAAI,IAAI,CAAA;AAC5E,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,sBAAsB,CACpC,MAAqC;IAErC,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,gBAAgB,IAAI,CAAC,CAAC,oBAAoB,CAAC,CAAA;AAC3E,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAqC;IACxE,OAAO,KAAK,EAAE,qBAAqB,IAAI,EAAE,CAAA;AAC3C,CAAC"}
1
+ {"version":3,"file":"chat-effort-utilities.js","sourceRoot":"","sources":["../../src/components/chat-effort-utilities.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAKH,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,gBAAgB,GACjB,MAAM,yBAAyB,CAAA;AA6BhC;;;;;;;GAOG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAC9C,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAA;IAC3D,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAA;IACvB,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IACnE,IAAI,IAA4B,CAAA;IAChC,MAAM,IAAI,GAAa,EAAE,CAAA;IACzB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAA;QACjC,IAAI,KAAK,KAAK,QAAQ;YAAE,IAAI,GAAG,MAAM,CAAA;aAChC,IAAI,KAAK,KAAK,WAAW;YAAE,IAAI,GAAG,SAAS,CAAA;;YAC3C,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACvB,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;IACpD,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAA;IACpE,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;IACnB,IAAI,GAAG,KAAK,GAAG;QAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;IAC/C,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,CAAA;AACnC,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,gBAAgB,CAC9B,GAAW,EACX,OAAgC;IAEhC,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,EAAE,CAAA;IAC/B,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,EAAE,KAAK,IAAI,IAAI,CAAA;AAC5E,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,sBAAsB,CACpC,MAAqC;IAErC,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,gBAAgB,IAAI,CAAC,CAAC,oBAAoB,CAAC,CAAA;AAC3E,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAqC;IACxE,OAAO,KAAK,EAAE,qBAAqB,IAAI,EAAE,CAAA;AAC3C,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@molecule/app-ide-react",
3
- "version": "1.21.2",
3
+ "version": "1.22.1",
4
4
  "description": "React IDE components for molecule.dev workspace",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -56,18 +56,18 @@
56
56
  "material-file-icons": "2.4.0"
57
57
  },
58
58
  "devDependencies": {
59
- "@molecule/app-ai-models": "1.4.0",
59
+ "@molecule/app-ai-models": "1.4.1",
60
60
  "@molecule/app-ai-voice": "1.0.2",
61
61
  "@molecule/app-country-flags": "1.0.2",
62
62
  "@molecule/app-i18n": "1.0.3",
63
63
  "@molecule/app-icons": "1.0.2",
64
64
  "@molecule/app-live-preview": "1.0.2",
65
- "@molecule/app-locales-ide": "1.10.9",
65
+ "@molecule/app-locales-ide": "1.10.10",
66
66
  "@molecule/app-logger": "1.0.2",
67
- "@molecule/app-react": "1.6.5",
67
+ "@molecule/app-react": "1.7.1",
68
68
  "@molecule/app-storage": "1.0.2",
69
- "@molecule/app-ui": "1.3.6",
70
- "@molecule/app-ui-react": "1.3.4",
69
+ "@molecule/app-ui": "1.3.7",
70
+ "@molecule/app-ui-react": "1.3.5",
71
71
  "@molecule/app-ui-tailwind": "1.2.6",
72
72
  "@testing-library/react": "16.3.2",
73
73
  "@types/node": "26.1.2",
@@ -76,7 +76,7 @@
76
76
  "react": "19.2.8",
77
77
  "react-dom": "19.2.8",
78
78
  "typescript": "6.0.3",
79
- "vitest": "4.1.11"
79
+ "vitest": "4.1.12"
80
80
  },
81
81
  "repository": {
82
82
  "type": "git",