Skip to content

Commit f4e3af4

Browse files
Made Theme readonly
1 parent 802a605 commit f4e3af4

File tree

8 files changed

+125
-102
lines changed

8 files changed

+125
-102
lines changed

src/theme/Color.mjs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
const Color = {
1+
const Color = Object.freeze({
22
black: "black",
33
red: "red",
44
green: "green",
@@ -21,6 +21,6 @@ const Color = {
2121
// alternate spellings
2222
grey: "grey",
2323
lightgrey: "lightgrey",
24-
};
24+
});
2525

2626
export default Color;

src/theme/DefaultTheme.mjs

Lines changed: 28 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -3,66 +3,63 @@ import Color from "./Color.mjs";
33
/**
44
* @type {import("./Theme").ThemeType}
55
*/
6-
const DefaultTheme = {
7-
popup: {
8-
regular: {
6+
const DefaultTheme = Object.freeze({
7+
popup: Object.freeze({
8+
regular: Object.freeze({
99
bold: false,
1010
bg: Color.white,
1111
fg: Color.black,
12-
focus: {
13-
// @ts-ignore
12+
focus: Object.freeze({
1413
bold: false,
1514
bg: Color.cyan,
1615
fg: Color.black,
17-
},
18-
},
19-
error: {
16+
}),
17+
}),
18+
error: Object.freeze({
2019
bold: true,
2120
bg: Color.red,
2221
fg: Color.white,
23-
focus: {
24-
// @ts-ignore
22+
focus: Object.freeze({
2523
bold: false,
2624
bg: Color.white,
2725
fg: Color.black,
28-
},
29-
},
30-
menu: {
26+
}),
27+
}),
28+
menu: Object.freeze({
3129
bold: true,
3230
bg: Color.cyan,
3331
fg: Color.white,
34-
focus: {
35-
// @ts-ignore
32+
focus: Object.freeze({
3633
bold: true,
3734
bg: Color.black,
3835
fg: Color.white,
39-
},
40-
},
41-
},
36+
}),
37+
}),
38+
}),
4239

43-
menu: {
44-
key: {
40+
menu: Object.freeze({
41+
key: Object.freeze({
4542
bg: Color.black,
4643
fg: Color.white,
47-
},
48-
item: {
44+
}),
45+
item: Object.freeze({
4946
bg: Color.cyan,
5047
fg: Color.black,
51-
},
52-
},
48+
}),
49+
}),
5350

54-
textBox: {
55-
regular: {
51+
textBox: Object.freeze({
52+
regular: Object.freeze({
5653
bold: false,
5754
bg: Color.cyan,
5855
fg: Color.black,
59-
},
60-
selected: {
56+
}),
57+
selected: Object.freeze({
6158
bold: false,
6259
bg: Color.blue,
6360
fg: Color.white,
64-
},
65-
},
66-
};
61+
}),
62+
}),
63+
});
6764

6865
export default DefaultTheme;

src/theme/Theme.d.ts

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,31 @@
1-
import { Widgets } from "blessed";
1+
export interface ThemeStyle {
2+
readonly bold?: boolean;
3+
readonly bg: string;
4+
readonly fg: string;
5+
}
26

3-
type BlessedStyle = Widgets.Types.TStyle;
7+
export interface ThemeEffects extends ThemeStyle {
8+
readonly focus?: ThemeStyle;
9+
}
410

5-
interface ThemePopup {
6-
regular: BlessedStyle;
7-
error: BlessedStyle;
8-
menu: BlessedStyle;
11+
export interface ThemePopup {
12+
readonly regular: ThemeEffects;
13+
readonly error: ThemeEffects;
14+
readonly menu: ThemeEffects;
915
}
1016

11-
interface ThemeMenu {
12-
key: BlessedStyle;
13-
item: BlessedStyle;
17+
export interface ThemeMenu {
18+
readonly key: ThemeStyle;
19+
readonly item: ThemeStyle;
1420
}
1521

16-
interface ThemeTextBox {
17-
regular: BlessedStyle;
18-
selected: BlessedStyle;
22+
export interface ThemeTextBox {
23+
readonly regular: ThemeEffects;
24+
readonly selected: ThemeEffects;
1925
}
2026

2127
export interface ThemeType {
22-
popup: ThemePopup;
23-
menu: ThemeMenu;
24-
textBox: ThemeTextBox;
28+
readonly popup: ThemePopup;
29+
readonly menu: ThemeMenu;
30+
readonly textBox: ThemeTextBox;
2531
}

src/theme/XTerm256Theme.mjs

Lines changed: 28 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -3,68 +3,65 @@ import Color from "./Color.mjs";
33
/**
44
* @type {import("./Theme").ThemeType}
55
*/
6-
const XTerm256Theme = {
7-
popup: {
8-
regular: {
6+
const XTerm256Theme = Object.freeze({
7+
popup: Object.freeze({
8+
regular: Object.freeze({
99
bold: true,
1010
bg: Color.white,
1111
fg: "#111",
12-
focus: {
13-
// @ts-ignore
12+
focus: Object.freeze({
1413
bold: true,
1514
bg: "#088",
1615
fg: "#111",
17-
},
18-
},
19-
error: {
16+
}),
17+
}),
18+
error: Object.freeze({
2019
bold: true,
2120
bg: Color.red,
2221
fg: Color.white,
23-
focus: {
24-
// @ts-ignore
22+
focus: Object.freeze({
2523
bold: true,
2624
bg: Color.white,
2725
fg: "#111",
28-
},
29-
},
30-
menu: {
26+
}),
27+
}),
28+
menu: Object.freeze({
3129
bold: true,
3230
bg: "#088",
3331
fg: Color.white,
34-
focus: {
35-
// @ts-ignore
32+
focus: Object.freeze({
3633
bold: true,
3734
bg: Color.black,
3835
fg: Color.white,
39-
},
40-
},
41-
},
36+
}),
37+
}),
38+
}),
4239

43-
menu: {
44-
key: {
40+
menu: Object.freeze({
41+
key: Object.freeze({
4542
bold: true,
4643
bg: Color.black,
4744
fg: "#aaa",
48-
},
49-
item: {
45+
}),
46+
item: Object.freeze({
5047
bold: true,
5148
bg: "#088",
5249
fg: "#111",
53-
},
54-
},
50+
}),
51+
}),
5552

56-
textBox: {
57-
regular: {
53+
textBox: Object.freeze({
54+
regular: Object.freeze({
5855
bold: true,
5956
bg: "#088",
6057
fg: "#111",
61-
},
62-
selected: {
58+
}),
59+
selected: Object.freeze({
6360
bold: true,
6461
bg: Color.blue,
6562
fg: Color.white,
66-
},
67-
},
68-
};
63+
}),
64+
}),
65+
});
6966

7067
export default XTerm256Theme;

src/tool/DevTool.mjs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,42 @@
11
/**
2-
* @typedef {"Hidden" | "Logs" | "Inputs" | "Colors"} DevToolValue
2+
* @typedef {"Hidden" | "Logs" | "Inputs" | "Colors"} DevToolType
33
*/
44

55
/**
6-
* @type {DevToolValue}
6+
* @type {DevToolType}
77
*/
88
const Hidden = "Hidden";
99
/**
10-
* @type {DevToolValue}
10+
* @type {DevToolType}
1111
*/
1212
const Logs = "Logs";
1313
/**
14-
* @type {DevToolValue}
14+
* @type {DevToolType}
1515
*/
1616
const Inputs = "Inputs";
1717
/**
18-
* @type {DevToolValue}
18+
* @type {DevToolType}
1919
*/
2020
const Colors = "Colors";
2121

22-
const DevTool = {
22+
const DevTool = Object.freeze({
2323
Hidden,
2424
Logs,
2525
Inputs,
2626
Colors,
2727

2828
/**
29-
* @param {DevToolValue} from
30-
* @param {DevToolValue} to
29+
* @param {DevToolType} from
30+
* @param {DevToolType} to
3131
* @returns {boolean}
3232
*/
3333
shouldResize: (from, to) => {
3434
return from === Hidden || to === Hidden;
3535
},
3636

3737
/**
38-
* @param {DevToolValue} from
39-
* @returns {DevToolValue}
38+
* @param {DevToolType} from
39+
* @returns {DevToolType}
4040
*/
4141
getNext: (from) => {
4242
switch (from) {
@@ -50,6 +50,6 @@ const DevTool = {
5050
return Hidden;
5151
}
5252
},
53-
};
53+
});
5454

5555
export default DevTool;

src/tool/DevToolPanel.d.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
import { DevToolValue } from "./DevTool.mjs";
1+
import { DevToolType } from "./DevTool.mjs";
22

33
export interface DevToolPanelProps {
4-
devTool: DevToolValue;
4+
devTool: DevToolType;
55
logContent: string;
6-
onActivate(devTool: DevToolValue): void;
6+
onActivate(devTool: DevToolType): void;
77
}

src/tool/DevToolPanel.mjs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/**
22
* @typedef {import("./DevToolPanel").DevToolPanelProps} DevToolPanelProps
3-
* @typedef {import("./DevTool.mjs").DevToolValue} DevToolValue
3+
* @typedef {import("./DevTool.mjs").DevToolType} DevToolType
44
*/
55
import React from "react";
66
import LogPanel from "./LogPanel.mjs";
@@ -13,7 +13,7 @@ import * as UI from "../UI.mjs";
1313
const h = React.createElement;
1414

1515
/**
16-
* @type {Array<{tool: DevToolValue, name: string}>}
16+
* @type {Array<{tool: DevToolType, name: string}>}
1717
*/
1818
const tools = [
1919
{

0 commit comments

Comments
 (0)