@coral-viz/viz 0.2.3 → 0.2.4
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 +4 -0
- package/dist/compatibility/CompatibilityEdge.d.ts +9 -11
- package/dist/compatibility/CompatibilityEdge.d.ts.map +1 -1
- package/dist/compatibility/CompatibilityEdge.js +136 -27
- package/dist/compatibility/CompatibilityEdge.js.map +1 -1
- package/dist/components/DiagramFontFaces.d.ts +8 -0
- package/dist/components/DiagramFontFaces.d.ts.map +1 -0
- package/dist/components/DiagramFontFaces.js +18 -0
- package/dist/components/DiagramFontFaces.js.map +1 -0
- package/dist/components/SymbolNode.d.ts.map +1 -1
- package/dist/components/SymbolNode.js +46 -11
- package/dist/components/SymbolNode.js.map +1 -1
- package/dist/components/index.d.ts +1 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +1 -0
- package/dist/components/index.js.map +1 -1
- package/dist/editor/CoralEditor.js +1 -1
- package/dist/editor/CoralEditor.js.map +1 -1
- package/dist/editor/converter.d.ts +1 -1
- package/dist/editor/converter.d.ts.map +1 -1
- package/dist/editor/converter.js +40 -19
- package/dist/editor/converter.js.map +1 -1
- package/dist/editor/dimensions.d.ts +7 -0
- package/dist/editor/dimensions.d.ts.map +1 -0
- package/dist/editor/dimensions.js +26 -0
- package/dist/editor/dimensions.js.map +1 -0
- package/dist/file/deserialize.d.ts.map +1 -1
- package/dist/file/deserialize.js +8 -13
- package/dist/file/deserialize.js.map +1 -1
- package/dist/file/index.d.ts +2 -1
- package/dist/file/index.d.ts.map +1 -1
- package/dist/file/index.js +2 -1
- package/dist/file/index.js.map +1 -1
- package/dist/file/layoutProfile.d.ts +11 -0
- package/dist/file/layoutProfile.d.ts.map +1 -0
- package/dist/file/layoutProfile.js +89 -0
- package/dist/file/layoutProfile.js.map +1 -0
- package/dist/file/schema.d.ts +27 -0
- package/dist/file/schema.d.ts.map +1 -1
- package/dist/file/schema.js +70 -0
- package/dist/file/schema.js.map +1 -1
- package/dist/file/serialize.d.ts.map +1 -1
- package/dist/file/serialize.js +23 -10
- package/dist/file/serialize.js.map +1 -1
- package/dist/index.d.ts +6 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -3
- package/dist/index.js.map +1 -1
- package/dist/layout/elk.d.ts +2 -51
- package/dist/layout/elk.d.ts.map +1 -1
- package/dist/layout/elk.js +125 -329
- package/dist/layout/elk.js.map +1 -1
- package/dist/layout/nodeSizing.d.ts +4 -61
- package/dist/layout/nodeSizing.d.ts.map +1 -1
- package/dist/layout/nodeSizing.js +4 -315
- package/dist/layout/nodeSizing.js.map +1 -1
- package/dist/layout/positionStability.d.ts.map +1 -1
- package/dist/layout/positionStability.js +21 -26
- package/dist/layout/positionStability.js.map +1 -1
- package/dist/layout/useAxisConstrain.d.ts.map +1 -1
- package/dist/layout/useAxisConstrain.js +20 -20
- package/dist/layout/useAxisConstrain.js.map +1 -1
- package/dist/layout/useDiagramState.d.ts +2 -1
- package/dist/layout/useDiagramState.d.ts.map +1 -1
- package/dist/layout/useLayoutHistory.d.ts.map +1 -1
- package/dist/layout/useLayoutHistory.js +67 -100
- package/dist/layout/useLayoutHistory.js.map +1 -1
- package/dist/settings/FontSettingsForm.d.ts.map +1 -1
- package/dist/settings/FontSettingsForm.js +9 -4
- package/dist/settings/FontSettingsForm.js.map +1 -1
- package/dist/settings/LayoutSettingsForm.d.ts +3 -1
- package/dist/settings/LayoutSettingsForm.d.ts.map +1 -1
- package/dist/settings/LayoutSettingsForm.js +43 -20
- package/dist/settings/LayoutSettingsForm.js.map +1 -1
- package/dist/settings/SettingsPanel.d.ts +10 -2
- package/dist/settings/SettingsPanel.d.ts.map +1 -1
- package/dist/settings/SettingsPanel.js +45 -3
- package/dist/settings/SettingsPanel.js.map +1 -1
- package/dist/settings/useSettings.d.ts +8 -2
- package/dist/settings/useSettings.d.ts.map +1 -1
- package/dist/settings/useSettings.js +20 -5
- package/dist/settings/useSettings.js.map +1 -1
- package/dist/text-editor/SplitEditor.d.ts +5 -1
- package/dist/text-editor/SplitEditor.d.ts.map +1 -1
- package/dist/text-editor/SplitEditor.js +5 -12
- package/dist/text-editor/SplitEditor.js.map +1 -1
- package/dist/text-editor/TextEditor.d.ts +44 -33
- package/dist/text-editor/TextEditor.d.ts.map +1 -1
- package/dist/text-editor/TextEditor.js +174 -168
- package/dist/text-editor/TextEditor.js.map +1 -1
- package/dist/text-editor/hooks/useBidirectionalSync.d.ts +15 -0
- package/dist/text-editor/hooks/useBidirectionalSync.d.ts.map +1 -1
- package/dist/text-editor/hooks/useBidirectionalSync.js +9 -22
- package/dist/text-editor/hooks/useBidirectionalSync.js.map +1 -1
- package/dist/text-editor/index.d.ts +2 -2
- package/dist/text-editor/index.d.ts.map +1 -1
- package/dist/text-editor/index.js +1 -1
- package/dist/text-editor/index.js.map +1 -1
- package/dist/types.d.ts +22 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +4 -1
- package/dist/types.js.map +1 -1
- package/dist/viewMetadata.d.ts +4 -0
- package/dist/viewMetadata.d.ts.map +1 -0
- package/dist/viewMetadata.js +63 -0
- package/dist/viewMetadata.js.map +1 -0
- package/dist/waypoints/useWaypointManager.d.ts.map +1 -1
- package/dist/waypoints/useWaypointManager.js +60 -84
- package/dist/waypoints/useWaypointManager.js.map +1 -1
- package/package.json +4 -3
|
@@ -10,8 +10,10 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
10
10
|
* Accepts an optional theme prop for dark-mode embedding.
|
|
11
11
|
* User preferences have moved to PreferencesDialog in diagram-editor.
|
|
12
12
|
*/
|
|
13
|
-
import { useCallback } from 'react';
|
|
13
|
+
import { useCallback, useEffect, useState } from 'react';
|
|
14
|
+
import { normalizeDiagramFontSettings, } from '../file/schema.js';
|
|
14
15
|
import { LayoutSettingsForm } from './LayoutSettingsForm.js';
|
|
16
|
+
import { FontSettingsForm } from './FontSettingsForm.js';
|
|
15
17
|
const lightTheme = {
|
|
16
18
|
bg: '#fff',
|
|
17
19
|
text: '#333',
|
|
@@ -26,8 +28,15 @@ const lightTheme = {
|
|
|
26
28
|
/**
|
|
27
29
|
* SettingsPanel component — document settings only
|
|
28
30
|
*/
|
|
29
|
-
export function SettingsPanel({ documentSettings, selectedPreset, notations, onDocumentSettingsChange, onPresetChange, onApplyLayout, disabled = false, width = 320, theme: themeProp, }) {
|
|
31
|
+
export function SettingsPanel({ documentSettings, selectedPreset, notations, onDocumentSettingsChange, onPresetChange, onApplyLayout, fontDraft: controlledFontDraft, onFontDraftChange, onApplyFont, documentKey, disabled = false, width = 320, theme: themeProp, }) {
|
|
30
32
|
const t = { ...lightTheme, ...themeProp };
|
|
33
|
+
const [localFontDraft, setLocalFontDraft] = useState(() => normalizeDiagramFontSettings(documentSettings.font));
|
|
34
|
+
const usesControlledFontDraft = controlledFontDraft !== undefined
|
|
35
|
+
&& onFontDraftChange !== undefined;
|
|
36
|
+
const fontDraft = usesControlledFontDraft ? controlledFontDraft : localFontDraft;
|
|
37
|
+
useEffect(() => {
|
|
38
|
+
setLocalFontDraft(normalizeDiagramFontSettings(documentSettings.font));
|
|
39
|
+
}, [documentKey, documentSettings.font]);
|
|
31
40
|
const labelStyles = {
|
|
32
41
|
fontSize: '12px',
|
|
33
42
|
fontWeight: 500,
|
|
@@ -68,12 +77,42 @@ export function SettingsPanel({ documentSettings, selectedPreset, notations, onD
|
|
|
68
77
|
layout,
|
|
69
78
|
});
|
|
70
79
|
}, [documentSettings, onDocumentSettingsChange]);
|
|
80
|
+
const handleFontDraftChange = useCallback((settings) => {
|
|
81
|
+
if (usesControlledFontDraft) {
|
|
82
|
+
onFontDraftChange(settings);
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
setLocalFontDraft(settings);
|
|
86
|
+
}
|
|
87
|
+
}, [onFontDraftChange, usesControlledFontDraft]);
|
|
88
|
+
const handleApplyFont = useCallback(() => {
|
|
89
|
+
const rawFont = isRecord(documentSettings.font)
|
|
90
|
+
? documentSettings.font
|
|
91
|
+
: {};
|
|
92
|
+
const rawDefault = isRecord(rawFont.default) ? rawFont.default : {};
|
|
93
|
+
const committedRecord = {
|
|
94
|
+
...rawFont,
|
|
95
|
+
default: {
|
|
96
|
+
...rawDefault,
|
|
97
|
+
...fontDraft.default,
|
|
98
|
+
},
|
|
99
|
+
};
|
|
100
|
+
if (Object.prototype.hasOwnProperty.call(rawFont, 'symbolOverrides')) {
|
|
101
|
+
committedRecord.symbolOverrides = rawFont.symbolOverrides;
|
|
102
|
+
}
|
|
103
|
+
else if (fontDraft.symbolOverrides !== undefined) {
|
|
104
|
+
committedRecord.symbolOverrides = fontDraft.symbolOverrides;
|
|
105
|
+
}
|
|
106
|
+
const committedFont = committedRecord;
|
|
107
|
+
onDocumentSettingsChange({ ...documentSettings, font: committedFont });
|
|
108
|
+
onApplyFont?.(committedFont);
|
|
109
|
+
}, [documentSettings, fontDraft, onApplyFont, onDocumentSettingsChange]);
|
|
71
110
|
return (_jsx("div", { style: {
|
|
72
111
|
width,
|
|
73
112
|
backgroundColor: t.bg,
|
|
74
113
|
color: t.text,
|
|
75
114
|
overflow: 'hidden',
|
|
76
|
-
}, children: _jsx("div", { style: { overflowY: 'auto' }, children: _jsxs("div", { style: { padding: '12px' }, children: [_jsxs("div", { style: formGroupStyles, children: [_jsx("label", { style: labelStyles, children: "Notation" }), _jsx("select", { value: documentSettings.notation, onChange: handleNotationChange, disabled: disabled, style: inputStyles, children: notations.map((n) => (_jsx("option", { value: n.id, children: n.name }, n.id))) })] }), _jsxs("div", { style: { marginTop: '16px', borderTop: `1px solid ${t.divider}`, paddingTop: '12px' }, children: [_jsx("div", { style: { ...labelStyles, fontSize: '13px', marginBottom: '12px' }, children: "Layout Settings" }), _jsx(LayoutSettingsForm, { settings: documentSettings.layout, selectedPreset: selectedPreset, onChange: handleLayoutChange, onPresetChange: onPresetChange, onApply: onApplyLayout, disabled: disabled })] }), _jsxs("div", { style: { marginTop: '16px', borderTop: `1px solid ${t.divider}`, paddingTop: '12px' }, children: [_jsx("div", { style: { ...labelStyles, fontSize: '13px', marginBottom: '8px' }, children: "Annotations" }), _jsxs("label", { style: checkboxGroupStyles, children: [_jsx("input", { type: "checkbox", checked: documentSettings.suppressErrorAnnotations ?? false, onChange: (e) => onDocumentSettingsChange({
|
|
115
|
+
}, children: _jsx("div", { style: { overflowY: 'auto' }, children: _jsxs("div", { style: { padding: '12px' }, children: [_jsxs("div", { style: formGroupStyles, children: [_jsx("label", { style: labelStyles, children: "Notation" }), _jsx("select", { value: documentSettings.notation, onChange: handleNotationChange, disabled: disabled, style: inputStyles, children: notations.map((n) => (_jsx("option", { value: n.id, children: n.name }, n.id))) })] }), _jsxs("div", { style: { marginTop: '16px', borderTop: `1px solid ${t.divider}`, paddingTop: '12px' }, children: [_jsx("div", { style: { ...labelStyles, fontSize: '13px', marginBottom: '12px' }, children: "Layout Settings" }), _jsx(LayoutSettingsForm, { settings: documentSettings.layout, notation: documentSettings.notation, selectedPreset: selectedPreset, onChange: handleLayoutChange, onPresetChange: onPresetChange, onApply: onApplyLayout, disabled: disabled })] }), _jsxs("div", { style: { marginTop: '16px', borderTop: `1px solid ${t.divider}`, paddingTop: '12px' }, children: [_jsx("div", { style: { ...labelStyles, fontSize: '13px', marginBottom: '12px' }, children: "Font Settings" }), _jsx(FontSettingsForm, { settings: fontDraft, onChange: handleFontDraftChange, onApply: handleApplyFont, disabled: disabled })] }), _jsxs("div", { style: { marginTop: '16px', borderTop: `1px solid ${t.divider}`, paddingTop: '12px' }, children: [_jsx("div", { style: { ...labelStyles, fontSize: '13px', marginBottom: '8px' }, children: "Annotations" }), _jsxs("label", { style: checkboxGroupStyles, children: [_jsx("input", { type: "checkbox", checked: documentSettings.suppressErrorAnnotations ?? false, onChange: (e) => onDocumentSettingsChange({
|
|
77
116
|
...documentSettings,
|
|
78
117
|
suppressErrorAnnotations: e.target.checked,
|
|
79
118
|
}), disabled: disabled }), _jsx("span", { style: { fontSize: '13px', color: t.text }, children: "Suppress error annotations" })] }), _jsxs("label", { style: checkboxGroupStyles, children: [_jsx("input", { type: "checkbox", checked: documentSettings.suppressWarningAnnotations ?? false, onChange: (e) => onDocumentSettingsChange({
|
|
@@ -81,4 +120,7 @@ export function SettingsPanel({ documentSettings, selectedPreset, notations, onD
|
|
|
81
120
|
suppressWarningAnnotations: e.target.checked,
|
|
82
121
|
}), disabled: disabled }), _jsx("span", { style: { fontSize: '13px', color: t.text }, children: "Suppress warning annotations" })] }), _jsx("div", { style: { fontSize: '11px', color: t.mutedText, marginTop: '4px' }, children: "When suppressed, edges render normally but issues still appear in the diagnostics log." })] })] }) }) }));
|
|
83
122
|
}
|
|
123
|
+
function isRecord(value) {
|
|
124
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
125
|
+
}
|
|
84
126
|
//# sourceMappingURL=SettingsPanel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SettingsPanel.js","sourceRoot":"","sources":["../../src/settings/SettingsPanel.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;AAEH,OAAc,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"SettingsPanel.js","sourceRoot":"","sources":["../../src/settings/SettingsPanel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* - Document Settings: Saved with the diagram file
|
|
6
6
|
* - User Preferences: Saved to localStorage
|
|
7
7
|
*/
|
|
8
|
-
import { type UserPreferences, type DocumentSettings, type LayoutSettings, type LayoutPresetId, type SettingsPanelState } from '../file/schema.js';
|
|
8
|
+
import { type UserPreferences, type DocumentSettings, type LayoutSettings, type LayoutPresetId, type SettingsPanelState, type DiagramFontSettings } from '../file/schema.js';
|
|
9
9
|
/**
|
|
10
10
|
* Options for useSettings hook
|
|
11
11
|
*/
|
|
@@ -18,6 +18,8 @@ export interface UseSettingsOptions {
|
|
|
18
18
|
onDocumentSettingsChange?: (settings: DocumentSettings) => void;
|
|
19
19
|
/** Callback when layout settings change (for triggering reflow) */
|
|
20
20
|
onLayoutChange?: (layout: LayoutSettings) => void;
|
|
21
|
+
/** Identity of the loaded document, including same-value document changes */
|
|
22
|
+
documentKey?: string | number;
|
|
21
23
|
}
|
|
22
24
|
/**
|
|
23
25
|
* Result returned by useSettings hook
|
|
@@ -27,6 +29,8 @@ export interface UseSettingsResult {
|
|
|
27
29
|
userPreferences: UserPreferences;
|
|
28
30
|
/** Current document settings */
|
|
29
31
|
documentSettings: DocumentSettings;
|
|
32
|
+
/** Staged, safe requested font settings for the reference editor */
|
|
33
|
+
fontDraft?: DiagramFontSettings;
|
|
30
34
|
/** Currently selected/detected preset */
|
|
31
35
|
selectedPreset: LayoutPresetId;
|
|
32
36
|
/** Update user preferences (merged with existing) */
|
|
@@ -35,6 +39,8 @@ export interface UseSettingsResult {
|
|
|
35
39
|
resetUserPreferences: () => void;
|
|
36
40
|
/** Update document settings */
|
|
37
41
|
updateDocumentSettings: (settings: DocumentSettings) => void;
|
|
42
|
+
/** Update the staged font without committing document settings */
|
|
43
|
+
updateFontDraft?: (settings: DiagramFontSettings) => void;
|
|
38
44
|
/** Apply a layout preset */
|
|
39
45
|
applyLayoutPreset: (presetId: LayoutPresetId) => void;
|
|
40
46
|
/** Add a file to recent files list */
|
|
@@ -47,5 +53,5 @@ export interface UseSettingsResult {
|
|
|
47
53
|
/**
|
|
48
54
|
* Hook for managing settings with localStorage persistence for user preferences
|
|
49
55
|
*/
|
|
50
|
-
export declare function useSettings(options?: UseSettingsOptions): UseSettingsResult
|
|
56
|
+
export declare function useSettings(options?: UseSettingsOptions): UseSettingsResult & Required<Pick<UseSettingsResult, 'fontDraft' | 'updateFontDraft'>>;
|
|
51
57
|
//# sourceMappingURL=useSettings.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSettings.d.ts","sourceRoot":"","sources":["../../src/settings/useSettings.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,kBAAkB,
|
|
1
|
+
{"version":3,"file":"useSettings.d.ts","sourceRoot":"","sources":["../../src/settings/useSettings.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EAQzB,MAAM,mBAAmB,CAAC;AAI3B;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,mDAAmD;IACnD,uBAAuB,CAAC,EAAE,gBAAgB,CAAC;IAC3C,wDAAwD;IACxD,sBAAsB,CAAC,EAAE,eAAe,CAAC;IACzC,6CAA6C;IAC7C,wBAAwB,CAAC,EAAE,CAAC,QAAQ,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAChE,mEAAmE;IACnE,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,IAAI,CAAC;IAClD,6EAA6E;IAC7E,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,+BAA+B;IAC/B,eAAe,EAAE,eAAe,CAAC;IACjC,gCAAgC;IAChC,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,oEAAoE;IACpE,SAAS,CAAC,EAAE,mBAAmB,CAAC;IAChC,yCAAyC;IACzC,cAAc,EAAE,cAAc,CAAC;IAE/B,qDAAqD;IACrD,qBAAqB,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,eAAe,CAAC,KAAK,IAAI,CAAC;IACnE,yCAAyC;IACzC,oBAAoB,EAAE,MAAM,IAAI,CAAC;IAEjC,+BAA+B;IAC/B,sBAAsB,EAAE,CAAC,QAAQ,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAC7D,kEAAkE;IAClE,eAAe,CAAC,EAAE,CAAC,QAAQ,EAAE,mBAAmB,KAAK,IAAI,CAAC;IAE1D,4BAA4B;IAC5B,iBAAiB,EAAE,CAAC,QAAQ,EAAE,cAAc,KAAK,IAAI,CAAC;IAEtD,sCAAsC;IACtC,aAAa,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,8BAA8B;IAC9B,gBAAgB,EAAE,MAAM,IAAI,CAAC;IAE7B,wCAAwC;IACxC,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;CACjD;AAiED;;GAEG;AACH,wBAAgB,WAAW,CACzB,OAAO,GAAE,kBAAuB,GAC/B,iBAAiB,GAAG,QAAQ,CAAC,IAAI,CAAC,iBAAiB,EAAE,WAAW,GAAG,iBAAiB,CAAC,CAAC,CAkIxF"}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* - User Preferences: Saved to localStorage
|
|
7
7
|
*/
|
|
8
8
|
import { useState, useCallback, useEffect, useMemo } from 'react';
|
|
9
|
-
import { DEFAULT_USER_PREFERENCES, DEFAULT_LAYOUT_SETTINGS, LAYOUT_PRESETS, getLayoutPreset, } from '../file/schema.js';
|
|
9
|
+
import { DEFAULT_USER_PREFERENCES, DEFAULT_LAYOUT_SETTINGS, DEFAULT_DIAGRAM_FONT_SETTINGS, LAYOUT_PRESETS, getLayoutPreset, normalizeDiagramFontSettings, normalizeLlmMaxRetries, } from '../file/schema.js';
|
|
10
10
|
const STORAGE_KEY = 'coral:user-preferences';
|
|
11
11
|
/**
|
|
12
12
|
* Load user preferences from localStorage
|
|
@@ -22,7 +22,9 @@ function loadUserPreferences() {
|
|
|
22
22
|
}
|
|
23
23
|
const parsed = JSON.parse(stored);
|
|
24
24
|
// Merge with defaults to handle missing fields
|
|
25
|
-
return { ...DEFAULT_USER_PREFERENCES, ...parsed
|
|
25
|
+
return { ...DEFAULT_USER_PREFERENCES, ...parsed,
|
|
26
|
+
editorEntityHighlighting: parsed?.editorEntityHighlighting === true,
|
|
27
|
+
llmMaxRetries: normalizeLlmMaxRetries(parsed?.llmMaxRetries) };
|
|
26
28
|
}
|
|
27
29
|
catch {
|
|
28
30
|
// Invalid JSON or other error - use defaults
|
|
@@ -47,6 +49,8 @@ function saveUserPreferences(prefs) {
|
|
|
47
49
|
* Detect which preset matches the current layout settings
|
|
48
50
|
*/
|
|
49
51
|
function detectPreset(layout) {
|
|
52
|
+
if (layout.profile !== undefined)
|
|
53
|
+
return 'custom';
|
|
50
54
|
// Check each preset (except custom) to see if settings match
|
|
51
55
|
for (const preset of LAYOUT_PRESETS) {
|
|
52
56
|
if (preset.id === 'custom')
|
|
@@ -64,11 +68,13 @@ function detectPreset(layout) {
|
|
|
64
68
|
* Hook for managing settings with localStorage persistence for user preferences
|
|
65
69
|
*/
|
|
66
70
|
export function useSettings(options = {}) {
|
|
67
|
-
const { initialDocumentSettings, initialUserPreferences, onDocumentSettingsChange, onLayoutChange, } = options;
|
|
71
|
+
const { initialDocumentSettings, initialUserPreferences, onDocumentSettingsChange, onLayoutChange, documentKey, } = options;
|
|
68
72
|
// User preferences state (persisted to localStorage)
|
|
69
73
|
const [userPreferences, setUserPreferences] = useState(() => {
|
|
70
74
|
if (initialUserPreferences) {
|
|
71
|
-
return { ...DEFAULT_USER_PREFERENCES, ...initialUserPreferences
|
|
75
|
+
return { ...DEFAULT_USER_PREFERENCES, ...initialUserPreferences,
|
|
76
|
+
editorEntityHighlighting: initialUserPreferences.editorEntityHighlighting === true,
|
|
77
|
+
llmMaxRetries: normalizeLlmMaxRetries(initialUserPreferences.llmMaxRetries) };
|
|
72
78
|
}
|
|
73
79
|
return loadUserPreferences();
|
|
74
80
|
});
|
|
@@ -80,8 +86,13 @@ export function useSettings(options = {}) {
|
|
|
80
86
|
return {
|
|
81
87
|
notation: userPreferences.defaultNotation,
|
|
82
88
|
layout: DEFAULT_LAYOUT_SETTINGS,
|
|
89
|
+
font: { default: { ...DEFAULT_DIAGRAM_FONT_SETTINGS.default } },
|
|
83
90
|
};
|
|
84
91
|
});
|
|
92
|
+
const [fontDraft, setFontDraft] = useState(() => normalizeDiagramFontSettings(initialDocumentSettings?.font));
|
|
93
|
+
useEffect(() => {
|
|
94
|
+
setFontDraft(normalizeDiagramFontSettings(documentSettings.font));
|
|
95
|
+
}, [documentKey, documentSettings.font]);
|
|
85
96
|
// Detect current preset based on layout settings
|
|
86
97
|
const selectedPreset = useMemo(() => detectPreset(documentSettings.layout), [documentSettings.layout]);
|
|
87
98
|
// Persist user preferences to localStorage when they change
|
|
@@ -90,7 +101,9 @@ export function useSettings(options = {}) {
|
|
|
90
101
|
}, [userPreferences]);
|
|
91
102
|
// Update user preferences
|
|
92
103
|
const updateUserPreferences = useCallback((updates) => {
|
|
93
|
-
setUserPreferences((prev) => ({ ...prev, ...updates
|
|
104
|
+
setUserPreferences((prev) => ({ ...prev, ...updates,
|
|
105
|
+
...(Object.prototype.hasOwnProperty.call(updates, 'llmMaxRetries')
|
|
106
|
+
? { llmMaxRetries: normalizeLlmMaxRetries(updates.llmMaxRetries) } : {}) }));
|
|
94
107
|
}, []);
|
|
95
108
|
// Reset user preferences to defaults
|
|
96
109
|
const resetUserPreferences = useCallback(() => {
|
|
@@ -141,10 +154,12 @@ export function useSettings(options = {}) {
|
|
|
141
154
|
return {
|
|
142
155
|
userPreferences,
|
|
143
156
|
documentSettings,
|
|
157
|
+
fontDraft,
|
|
144
158
|
selectedPreset,
|
|
145
159
|
updateUserPreferences,
|
|
146
160
|
resetUserPreferences,
|
|
147
161
|
updateDocumentSettings,
|
|
162
|
+
updateFontDraft: setFontDraft,
|
|
148
163
|
applyLayoutPreset,
|
|
149
164
|
addRecentFile,
|
|
150
165
|
clearRecentFiles,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSettings.js","sourceRoot":"","sources":["../../src/settings/useSettings.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAClE,OAAO,
|
|
1
|
+
{"version":3,"file":"useSettings.js","sourceRoot":"","sources":["../../src/settings/useSettings.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import React from 'react';
|
|
8
8
|
import { type SyntaxLanguage } from './TextEditor.js';
|
|
9
|
-
import { type ParseFunction, type PrintFunction, type ParseError } from './hooks/useBidirectionalSync.js';
|
|
9
|
+
import { type ParseFunction, type PrintFunction, type DiagnosticPrintFunction, type SyncPrintDiagnostic, type ParseError } from './hooks/useBidirectionalSync.js';
|
|
10
10
|
import type { GraphIR, EditorConfig } from '../types.js';
|
|
11
11
|
/**
|
|
12
12
|
* Layout orientation for the split view
|
|
@@ -28,6 +28,8 @@ export interface SplitEditorProps {
|
|
|
28
28
|
parse: ParseFunction;
|
|
29
29
|
/** Printer function (Graph-IR → text) */
|
|
30
30
|
print: PrintFunction;
|
|
31
|
+
/** Optional loss-reporting printer used for visual → text synchronization. */
|
|
32
|
+
printWithDiagnostics?: DiagnosticPrintFunction;
|
|
31
33
|
/** Syntax language for text editor */
|
|
32
34
|
language?: SyntaxLanguage;
|
|
33
35
|
/** Layout orientation */
|
|
@@ -48,6 +50,8 @@ export interface SplitEditorProps {
|
|
|
48
50
|
onTextChange?: (text: string) => void;
|
|
49
51
|
/** Callback when errors change */
|
|
50
52
|
onErrorsChange?: (errors: ParseError[]) => void;
|
|
53
|
+
/** Callback when visual → text printing reports losses. */
|
|
54
|
+
onPrintDiagnosticsChange?: (diagnostics: SyncPrintDiagnostic[]) => void;
|
|
51
55
|
/** CSS class name */
|
|
52
56
|
className?: string;
|
|
53
57
|
/** Inline styles */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SplitEditor.d.ts","sourceRoot":"","sources":["../../src/text-editor/SplitEditor.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAyC,MAAM,OAAO,CAAC;AAE9D,OAAO,EAAc,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,EAEL,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,UAAU,EAChB,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAE,OAAO,
|
|
1
|
+
{"version":3,"file":"SplitEditor.d.ts","sourceRoot":"","sources":["../../src/text-editor/SplitEditor.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAyC,MAAM,OAAO,CAAC;AAE9D,OAAO,EAAc,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,EAEL,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,uBAAuB,EAC5B,KAAK,mBAAmB,EACxB,KAAK,UAAU,EAChB,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAE,OAAO,EAAa,YAAY,EAAmB,MAAM,aAAa,CAAC;AAGrF;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,YAAY,GAAG,UAAU,CAAC;AAEpD;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,QAAQ,CAAC;AAE5C;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,2BAA2B;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iEAAiE;IACjE,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,wCAAwC;IACxC,KAAK,EAAE,aAAa,CAAC;IACrB,yCAAyC;IACzC,KAAK,EAAE,aAAa,CAAC;IACrB,8EAA8E;IAC9E,oBAAoB,CAAC,EAAE,uBAAuB,CAAC;IAC/C,sCAAsC;IACtC,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,yBAAyB;IACzB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,uCAAuC;IACvC,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,oDAAoD;IACpD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uCAAuC;IACvC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,kCAAkC;IAClC,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,mCAAmC;IACnC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kCAAkC;IAClC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,KAAK,IAAI,CAAC;IAChD,iCAAiC;IACjC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,kCAAkC;IAClC,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,IAAI,CAAC;IAChD,2DAA2D;IAC3D,wBAAwB,CAAC,EAAE,CAAC,WAAW,EAAE,mBAAmB,EAAE,KAAK,IAAI,CAAC;IACxE,qBAAqB;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oBAAoB;IACpB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,6BAA6B;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAgCD;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CA+MlD,CAAC;AAEF,eAAe,WAAW,CAAC"}
|
|
@@ -9,6 +9,7 @@ import React, { useCallback, useMemo, useState } from 'react';
|
|
|
9
9
|
import { CoralEditor } from '../editor/CoralEditor.js';
|
|
10
10
|
import { TextEditor } from './TextEditor.js';
|
|
11
11
|
import { useBidirectionalSync, } from './hooks/useBidirectionalSync.js';
|
|
12
|
+
import { convertFlowToGraphNodes } from '../editor/converter.js';
|
|
12
13
|
/**
|
|
13
14
|
* Container styles for split layout
|
|
14
15
|
*/
|
|
@@ -48,7 +49,7 @@ const resizeHandleStyles = {
|
|
|
48
49
|
* - Resizable panes
|
|
49
50
|
* - Parse error display
|
|
50
51
|
*/
|
|
51
|
-
export const SplitEditor = ({ initialText = '', initialGraph, parse, print, language = 'coral', layout = 'horizontal', primaryPane = 'text', splitRatio: initialSplitRatio = 0.5, resizable = true, editorConfig, debounceMs = 100, onGraphChange, onTextChange, onErrorsChange, className, style, minPaneSize = 200, }) => {
|
|
52
|
+
export const SplitEditor = ({ initialText = '', initialGraph, parse, print, printWithDiagnostics, language = 'coral', layout = 'horizontal', primaryPane = 'text', splitRatio: initialSplitRatio = 0.5, resizable = true, editorConfig, debounceMs = 100, onGraphChange, onTextChange, onErrorsChange, onPrintDiagnosticsChange, className, style, minPaneSize = 200, }) => {
|
|
52
53
|
// Split ratio state for resizing
|
|
53
54
|
const [splitRatio, setSplitRatio] = useState(initialSplitRatio);
|
|
54
55
|
const [isResizing, setIsResizing] = useState(false);
|
|
@@ -58,10 +59,12 @@ export const SplitEditor = ({ initialText = '', initialGraph, parse, print, lang
|
|
|
58
59
|
initialGraph,
|
|
59
60
|
parse,
|
|
60
61
|
print,
|
|
62
|
+
printWithDiagnostics,
|
|
61
63
|
debounceMs,
|
|
62
64
|
onGraphChange,
|
|
63
65
|
onTextChange,
|
|
64
66
|
onErrorsChange,
|
|
67
|
+
onPrintDiagnosticsChange,
|
|
65
68
|
});
|
|
66
69
|
// Handle text editor changes
|
|
67
70
|
const handleTextChange = useCallback((newText) => {
|
|
@@ -74,17 +77,7 @@ export const SplitEditor = ({ initialText = '', initialGraph, parse, print, lang
|
|
|
74
77
|
// For now, just update nodes - full implementation would track edges too
|
|
75
78
|
const updatedGraph = {
|
|
76
79
|
...syncState.graph,
|
|
77
|
-
nodes: nodes.
|
|
78
|
-
id: node.id,
|
|
79
|
-
type: node.data.nodeType,
|
|
80
|
-
label: node.data.label,
|
|
81
|
-
description: node.data.description,
|
|
82
|
-
properties: node.data.properties,
|
|
83
|
-
position: node.position,
|
|
84
|
-
dimensions: node.measured
|
|
85
|
-
? { width: node.measured.width ?? 0, height: node.measured.height ?? 0 }
|
|
86
|
-
: undefined,
|
|
87
|
-
})),
|
|
80
|
+
nodes: convertFlowToGraphNodes(nodes, syncState.graph.nodes),
|
|
88
81
|
};
|
|
89
82
|
syncActions.setGraph(updatedGraph);
|
|
90
83
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SplitEditor.js","sourceRoot":"","sources":["../../src/text-editor/SplitEditor.tsx"],"names":[],"mappings":";AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,UAAU,EAAuB,MAAM,iBAAiB,CAAC;AAClE,OAAO,EACL,oBAAoB,
|
|
1
|
+
{"version":3,"file":"SplitEditor.js","sourceRoot":"","sources":["../../src/text-editor/SplitEditor.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,53 +1,64 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* TextEditor - DSL text editor component
|
|
3
|
-
*
|
|
4
|
-
* A code editor for Coral DSL, Mermaid, and DOT syntax with
|
|
5
|
-
* inline error display and syntax highlighting.
|
|
6
|
-
*/
|
|
7
1
|
import React from 'react';
|
|
8
2
|
import type { ParseError } from './hooks/useBidirectionalSync.js';
|
|
9
|
-
/**
|
|
10
|
-
* Supported syntax languages
|
|
11
|
-
*/
|
|
12
3
|
export type SyntaxLanguage = 'coral' | 'mermaid' | 'dot' | 'plain';
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
4
|
+
export type EditorTheme = 'light' | 'dark';
|
|
5
|
+
export interface EditorSourcePosition {
|
|
6
|
+
line: number;
|
|
7
|
+
column: number;
|
|
8
|
+
offset: number;
|
|
9
|
+
}
|
|
10
|
+
export interface EditorSourceRange {
|
|
11
|
+
start: EditorSourcePosition;
|
|
12
|
+
end: EditorSourcePosition;
|
|
13
|
+
}
|
|
14
|
+
export interface EditorDiagnostic {
|
|
15
|
+
message: string;
|
|
16
|
+
code?: string;
|
|
17
|
+
severity?: 'error' | 'warning' | 'info';
|
|
18
|
+
/** One-based logical line when no exact position is available. */
|
|
19
|
+
line?: number;
|
|
20
|
+
position?: EditorSourcePosition;
|
|
21
|
+
range?: EditorSourceRange;
|
|
22
|
+
}
|
|
23
|
+
export interface EditorDecoration {
|
|
24
|
+
start: number;
|
|
25
|
+
end: number;
|
|
26
|
+
entityId: string;
|
|
27
|
+
}
|
|
28
|
+
export interface EditorAnalysisOwner {
|
|
29
|
+
source: string;
|
|
30
|
+
language: SyntaxLanguage;
|
|
31
|
+
entityHighlighting?: boolean;
|
|
32
|
+
}
|
|
16
33
|
export interface TextEditorProps {
|
|
17
|
-
/** Current text content */
|
|
18
34
|
value: string;
|
|
19
|
-
/** Callback when text changes */
|
|
20
35
|
onChange: (value: string) => void;
|
|
21
|
-
/** Syntax language for highlighting */
|
|
22
36
|
language?: SyntaxLanguage;
|
|
23
|
-
/**
|
|
37
|
+
/** Legacy locations use one-based columns. */
|
|
24
38
|
errors?: ParseError[];
|
|
25
|
-
|
|
39
|
+
diagnostics?: EditorDiagnostic[];
|
|
40
|
+
decorations?: EditorDecoration[];
|
|
41
|
+
analysisOwner?: EditorAnalysisOwner;
|
|
42
|
+
/** Current preference; explicit decorations remain enabled by default for public callers. */
|
|
43
|
+
entityHighlightingEnabled?: boolean;
|
|
44
|
+
editorTheme?: EditorTheme;
|
|
45
|
+
wrap?: 'soft' | 'off';
|
|
26
46
|
placeholder?: string;
|
|
27
|
-
/** Read-only mode */
|
|
28
47
|
readOnly?: boolean;
|
|
29
|
-
/** CSS class name */
|
|
30
48
|
className?: string;
|
|
31
|
-
/** Inline styles */
|
|
32
49
|
style?: React.CSSProperties;
|
|
33
|
-
/** Line numbers */
|
|
34
50
|
showLineNumbers?: boolean;
|
|
35
|
-
/** Auto-focus on mount */
|
|
36
51
|
autoFocus?: boolean;
|
|
37
|
-
/** Tab size */
|
|
38
52
|
tabSize?: number;
|
|
39
|
-
/** Minimum height */
|
|
40
53
|
minHeight?: string;
|
|
54
|
+
'aria-label'?: string;
|
|
41
55
|
}
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
* - Optional line numbers
|
|
49
|
-
* - Keyboard shortcuts (Tab indentation)
|
|
50
|
-
*/
|
|
56
|
+
export declare function getEntityColor(entityId: string, theme: EditorTheme): {
|
|
57
|
+
slot: number;
|
|
58
|
+
background: "#38bdf8" | "#a78bfa" | "#fb7185" | "#eab308" | "#4ade80" | "#164e63" | "#4c1d95" | "#881337" | "#713f12" | "#14532d";
|
|
59
|
+
edge: "#38bdf8" | "#a78bfa" | "#fb7185" | "#4ade80" | "#0369a1" | "#6d28d9" | "#be123c" | "#a16207" | "#15803d" | "#facc15";
|
|
60
|
+
};
|
|
61
|
+
export declare function getDiagnosticColor(theme: EditorTheme): "#ff8a80" | "#7f1d1d";
|
|
51
62
|
export declare const TextEditor: React.FC<TextEditorProps>;
|
|
52
63
|
export default TextEditor;
|
|
53
64
|
//# sourceMappingURL=TextEditor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TextEditor.d.ts","sourceRoot":"","sources":["../../src/text-editor/TextEditor.tsx"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"TextEditor.d.ts","sourceRoot":"","sources":["../../src/text-editor/TextEditor.tsx"],"names":[],"mappings":"AAAA,OAAO,KASN,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAElE,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,SAAS,GAAG,KAAK,GAAG,OAAO,CAAC;AACnE,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,MAAM,CAAC;AAE3C,MAAM,WAAW,oBAAoB;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE;AACtF,MAAM,WAAW,iBAAiB;IAAG,KAAK,EAAE,oBAAoB,CAAC;IAAC,GAAG,EAAE,oBAAoB,CAAA;CAAE;AAC7F,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;IACxC,kEAAkE;IAClE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,oBAAoB,CAAC;IAChC,KAAK,CAAC,EAAE,iBAAiB,CAAC;CAC3B;AACD,MAAM,WAAW,gBAAgB;IAAG,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE;AAClF,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,cAAc,CAAC;IACzB,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,8CAA8C;IAC9C,MAAM,CAAC,EAAE,UAAU,EAAE,CAAC;IACtB,WAAW,CAAC,EAAE,gBAAgB,EAAE,CAAC;IACjC,WAAW,CAAC,EAAE,gBAAgB,EAAE,CAAC;IACjC,aAAa,CAAC,EAAE,mBAAmB,CAAC;IACpC,6FAA6F;IAC7F,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAQD,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW;;;;EAYlE;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,WAAW,yBAEpD;AAwHD,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CAwHhD,CAAC;AAEF,eAAe,UAAU,CAAC"}
|