Skip to content

Commit 4733d08

Browse files
committedApr 11, 2024
improve indent input grouping mask display
1 parent 068738a commit 4733d08

File tree

1 file changed

+24
-14
lines changed

1 file changed

+24
-14
lines changed
 

‎src/components/ConfigPanel/Input.tsx

+24-14
Original file line numberDiff line numberDiff line change
@@ -21,24 +21,31 @@ const Input: Component<{
2121
const [show, setShow] = createSignal(true);
2222
let arrowEl!: HTMLDivElement;
2323

24-
let whiteSpaceOnly = true;
25-
2624
const countWhiteSpace = () => {
27-
let count = 0;
2825
const value = props.value;
26+
const group: { char: string; count: number }[] = [];
27+
if (value[0] != null) {
28+
group.push({ char: value[0], count: 0 });
29+
}
2930
value.split("").forEach((item) => {
30-
if (item === " " || item === "\t") {
31-
count++;
31+
const groupItem = group.at(-1)!;
32+
if (groupItem.char === item) {
33+
groupItem.count = groupItem.count + 1;
34+
} else {
35+
group.push({ char: item, count: 1 });
3236
}
3337
});
34-
if (count !== value.length) {
35-
whiteSpaceOnly = false;
36-
return;
37-
}
38-
whiteSpaceOnly = true;
38+
3939
setShow(true);
4040

41-
return `${value.match(/\t/g) ? "\\t" : '" "'}(x${count})`;
41+
return group
42+
.map(({ count, char }) => {
43+
if (char === "\t") char = "\\t";
44+
if (char.match(/\s/)) char = "\\s";
45+
46+
return `${char}${count > 1 ? `(x${count})` : ""}`;
47+
})
48+
.reduce((a, c) => a + " " + c, "");
4249
};
4350

4451
const onClickReplaceTab = () => {
@@ -129,6 +136,9 @@ const Input: Component<{
129136
value = value.replace(props.filter, "");
130137
e.currentTarget.value = value;
131138
}
139+
140+
value = value.replace(/\\s/g, " ");
141+
132142
const result = value.replace(/\\t/g, "\t");
133143
if (result !== value) {
134144
value = result.replace(/[^\t]/g, "");
@@ -139,9 +149,9 @@ const Input: Component<{
139149
}}
140150
ref={setReference}
141151
/>
142-
<Show when={props.maskType && whiteSpaceOnly && show()}>
143-
<div class="absolute inset-0px rounded-8px px-2 py-3px opacity-50 pointer-events-none">
144-
{countWhiteSpace()}
152+
<Show when={props.maskType && show()}>
153+
<div class="absolute inset-0px rounded-8px px-2 py-3px bg-#fff dark:bg-#3B3B3B pointer-events-none">
154+
<span class="opacity-50">{countWhiteSpace()}</span>
145155
</div>
146156
</Show>
147157
</div>

0 commit comments

Comments
 (0)