Skip to content

Commit a957b38

Browse files
committed
improved styles
1 parent 055792a commit a957b38

File tree

2 files changed

+89
-24
lines changed

2 files changed

+89
-24
lines changed

src/Frontend/src/components/MaximizableCodeEditor.vue

Lines changed: 76 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,22 @@ withDefaults(
2929
3030
// Component state for maximize functionality
3131
const showMaximizeModal = ref(false);
32+
const showMaximizeButton = ref(false);
3233
3334
// Handle maximize functionality
3435
const toggleMaximizeModal = () => {
3536
showMaximizeModal.value = !showMaximizeModal.value;
3637
};
3738
39+
// Handle mouse enter/leave for showing maximize button
40+
const onEditorMouseEnter = () => {
41+
showMaximizeButton.value = true;
42+
};
43+
44+
const onEditorMouseLeave = () => {
45+
showMaximizeButton.value = false;
46+
};
47+
3848
// Handle ESC key to close modal
3949
const handleKeyDown = (event: KeyboardEvent) => {
4050
if (event.key === "Escape" && showMaximizeModal.value) {
@@ -54,24 +64,41 @@ onBeforeUnmount(() => {
5464
</script>
5565

5666
<template>
57-
<div class="code-editor-wrapper">
58-
<!-- Regular CodeEditor with maximize button in toolbarRight -->
59-
<CodeEditor class="maximazable-code-editor--inline-instance" v-model="modelValue" :language="language" :read-only="readOnly" :show-gutter="showGutter" :show-copy-to-clipboard="showCopyToClipboard" :aria-label="ariaLabel" :extensions="extensions">
60-
<template #toolbarLeft>
61-
<slot name="toolbarLeft"></slot>
62-
</template>
63-
<template #toolbarRight>
64-
<slot name="toolbarRight"></slot>
65-
<img class="maximize-icon-inline" :src="DiffMaximizeIcon" alt="Maximize" @click="toggleMaximizeModal" title="Maximize view" />
66-
</template>
67-
</CodeEditor>
67+
<div class="code-editor-wrapper" @mouseenter="onEditorMouseEnter" @mouseleave="onEditorMouseLeave">
68+
<!-- Regular CodeEditor -->
69+
<div class="editor-container">
70+
<!-- Maximize Button (shown on hover) -->
71+
<button v-if="showMaximizeButton" @click="toggleMaximizeModal" class="maximize-button" title="Maximize view">
72+
<img :src="DiffMaximizeIcon" alt="Maximize" width="14" height="14" />
73+
</button>
74+
75+
<CodeEditor
76+
class="maximazable-code-editor--inline-instance"
77+
v-model="modelValue"
78+
:language="language"
79+
:read-only="readOnly"
80+
:show-gutter="showGutter"
81+
:show-copy-to-clipboard="showCopyToClipboard"
82+
:aria-label="ariaLabel"
83+
:extensions="extensions"
84+
>
85+
<template #toolbarLeft>
86+
<slot name="toolbarLeft"></slot>
87+
</template>
88+
<template #toolbarRight>
89+
<slot name="toolbarRight"></slot>
90+
</template>
91+
</CodeEditor>
92+
</div>
6893

6994
<!-- Maximize modal for CodeEditor -->
7095
<div v-if="showMaximizeModal" class="maximize-modal">
7196
<div class="maximize-modal-content">
7297
<div class="maximize-modal-toolbar">
7398
<span class="maximize-modal-title">{{ modalTitle }}</span>
74-
<img class="maximize-modal-close" :src="DiffCloseIcon" alt="Close" @click="toggleMaximizeModal" title="Close" />
99+
<button @click="toggleMaximizeModal" class="maximize-modal-close" title="Close">
100+
<img :src="DiffCloseIcon" alt="Close" width="16" height="16" />
101+
</button>
75102
</div>
76103
<div class="maximize-modal-body">
77104
<CodeEditor class="maximazable-code-editor--pop-up-instance" v-model="modelValue" :language="language" :read-only="readOnly" :show-copy-to-clipboard="true" :show-gutter="true" :aria-label="ariaLabel" :extensions="[]" />
@@ -87,20 +114,43 @@ onBeforeUnmount(() => {
87114
width: 100%;
88115
}
89116
90-
/* Maximize icon styles */
91-
.maximize-icon-inline {
92-
width: 14px;
93-
height: 14px;
117+
.maximize-button {
118+
position: absolute;
119+
right: 6px;
120+
top: 6px;
121+
z-index: 10;
122+
background-color: rgba(255, 255, 255, 0.7);
123+
border: 1px solid #ddd;
124+
border-radius: 3px;
125+
padding: 4px;
94126
cursor: pointer;
95-
opacity: 0.7;
127+
opacity: 0.6;
96128
transition: opacity 0.2s ease;
97-
margin-left: 8px;
98129
}
99130
100-
.maximize-icon-inline:hover {
131+
.maximize-button:hover {
101132
opacity: 1;
102133
}
103134
135+
:deep(.wrapper.maximazable-code-editor--inline-instance) {
136+
border: none;
137+
border-radius: 0;
138+
margin-top: 0;
139+
}
140+
141+
:deep(.wrapper.maximazable-code-editor--inline-instance .toolbar) {
142+
border: none;
143+
border-radius: 0;
144+
background-color: transparent;
145+
padding: 0;
146+
margin-bottom: 0;
147+
}
148+
149+
:deep(.wrapper.maximazable-code-editor--inline-instance .cm-editor) {
150+
/* Override any borders from the default theme */
151+
border: none;
152+
}
153+
104154
/* Modal styles copied from DiffViewer */
105155
.maximize-modal {
106156
position: fixed;
@@ -144,19 +194,22 @@ onBeforeUnmount(() => {
144194
background: none;
145195
border: none;
146196
cursor: pointer;
147-
width: 16px;
148-
height: 16px;
197+
padding: 5px;
198+
display: flex;
199+
align-items: center;
200+
justify-content: center;
149201
}
150202
151203
.maximize-modal-body {
152204
flex: 1;
153205
overflow: auto;
154-
padding: 15px;
206+
padding: 0;
155207
}
156208
157209
/* Ensure the CodeEditor wrapper fills the modal body */
158210
.maximize-modal-body :deep(.wrapper) {
159-
height: calc(100% - 20px);
211+
height: 100%;
212+
border-radius: 0;
160213
}
161214
162215
.maximize-modal-body :deep(.cm-editor),

src/Frontend/src/components/messages2/SagaDiagram/MessageDataBox.vue

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,18 @@ import MaximizableCodeEditor from "@/components/MaximizableCodeEditor.vue";
66
import { computed } from "vue";
77
import { CodeLanguage } from "@/components/codeEditorTypes";
88
import { parse, stringify } from "lossless-json";
9+
import { EditorView } from "@codemirror/view";
10+
11+
const messageDataBoxTheme = EditorView.baseTheme({
12+
".maximazable-code-editor--inline-instance .cm-editor": {
13+
fontFamily: "monospace",
14+
fontSize: "0.75rem",
15+
backgroundColor: "#ffffff",
16+
},
17+
".maximazable-code-editor--inline-instance .cm-scroller": {
18+
backgroundColor: "#ffffff",
19+
},
20+
});
921
1022
const props = defineProps<{
1123
messageData: SagaMessageData;
@@ -45,7 +57,7 @@ const editorLanguage = computed<CodeLanguage>(() => {
4557
<span class="message-data-box-text--empty">Empty</span>
4658
</div>
4759
<div v-else class="message-data-box message-data-box-content">
48-
<MaximizableCodeEditor :model-value="formattedData || ''" :language="editorLanguage" :read-only="true" :show-gutter="false" modalTitle="Message Data" />
60+
<MaximizableCodeEditor :model-value="formattedData || ''" :language="editorLanguage" :read-only="true" :show-gutter="false" modalTitle="Message Data" :extensions="[messageDataBoxTheme]" />
4961
</div>
5062
</template>
5163

0 commit comments

Comments
 (0)