muigui 0.0.5 → 0.0.6
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/package.json +1 -1
- package/src/controllers/create-controller.js +2 -0
- package/src/libs/conversions.js +8 -0
- package/src/libs/utils.js +20 -1
- package/src/muigui.js +14 -1
- package/src/styles/muigui.css.js +52 -21
- package/src/views/CheckboxView.js +2 -2
package/package.json
CHANGED
|
@@ -43,6 +43,8 @@ export function createController(object, property, ...args) {
|
|
|
43
43
|
return new Button(object, property, ...args);
|
|
44
44
|
case 'string':
|
|
45
45
|
return new Text(object, property, ...args);
|
|
46
|
+
case 'undefined':
|
|
47
|
+
throw new Error(`no property named ${property}`);
|
|
46
48
|
default:
|
|
47
49
|
throw new Error(`unhandled type ${t} for property ${property}`);
|
|
48
50
|
}
|
package/src/libs/conversions.js
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
import {
|
|
2
|
+
makeRangeConverters,
|
|
3
|
+
} from './utils.js';
|
|
4
|
+
|
|
1
5
|
export const identity = {
|
|
2
6
|
to: v => v,
|
|
3
7
|
from: v => [true, v],
|
|
@@ -12,3 +16,7 @@ export const strToNumber = {
|
|
|
12
16
|
return [!Number.isNaN(newV), newV];
|
|
13
17
|
},
|
|
14
18
|
};
|
|
19
|
+
|
|
20
|
+
export const converters = {
|
|
21
|
+
radToDeg: makeRangeConverters({to: [0, 180], from: [0, Math.PI]}),
|
|
22
|
+
};
|
package/src/libs/utils.js
CHANGED
|
@@ -52,4 +52,23 @@ export function copyExistingProperties(dst, src) {
|
|
|
52
52
|
}
|
|
53
53
|
}
|
|
54
54
|
return dst;
|
|
55
|
-
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export const mapRange = (v, inMin, inMax, outMin, outMax) => (v - inMin) * (outMax - outMin) / (inMax - inMin) + outMin;
|
|
58
|
+
|
|
59
|
+
export const makeRangeConverters = ({from, to}) => {
|
|
60
|
+
return {
|
|
61
|
+
to: v => mapRange(v, ...from, ...to),
|
|
62
|
+
from: v => [true, mapRange(v, ...to, ...from)],
|
|
63
|
+
};
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
export const makeRangeOptions = ({from, to, step}) => {
|
|
67
|
+
return {
|
|
68
|
+
min: to[0],
|
|
69
|
+
max: to[1],
|
|
70
|
+
...(step && {step}),
|
|
71
|
+
converters: makeRangeConverters({from, to}),
|
|
72
|
+
};
|
|
73
|
+
};
|
|
74
|
+
|
package/src/muigui.js
CHANGED
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
import css from './styles/muigui.css.js';
|
|
2
2
|
import {createElem} from './libs/elem.js';
|
|
3
3
|
import {createController} from './controllers/create-controller.js';
|
|
4
|
+
import {
|
|
5
|
+
mapRange,
|
|
6
|
+
makeRangeConverters,
|
|
7
|
+
makeRangeOptions,
|
|
8
|
+
} from './libs/utils.js';
|
|
9
|
+
import {
|
|
10
|
+
converters
|
|
11
|
+
} from './libs/conversions.js';
|
|
4
12
|
import Canvas from './controllers/Canvas.js';
|
|
5
13
|
import Color from './controllers/Color.js';
|
|
6
14
|
import Divider from './controllers/Divider.js';
|
|
@@ -48,6 +56,11 @@ export class GUIFolder extends Folder {
|
|
|
48
56
|
}
|
|
49
57
|
|
|
50
58
|
export class GUI extends GUIFolder {
|
|
59
|
+
static converters = converters;
|
|
60
|
+
static mapRange = mapRange;
|
|
61
|
+
static makeRangeConverters = makeRangeConverters;
|
|
62
|
+
static makeRangeOptions = makeRangeOptions;
|
|
63
|
+
|
|
51
64
|
constructor(options = {}) {
|
|
52
65
|
super('Controls', 'muigui-root');
|
|
53
66
|
if (options instanceof HTMLElement) {
|
|
@@ -80,7 +93,7 @@ export class GUI extends GUIFolder {
|
|
|
80
93
|
if (title) {
|
|
81
94
|
this.title(title);
|
|
82
95
|
}
|
|
83
|
-
this.domElement.classList.add('muigui');
|
|
96
|
+
this.domElement.classList.add('muigui', 'muigui-colors');
|
|
84
97
|
}
|
|
85
98
|
}
|
|
86
99
|
|
package/src/styles/muigui.css.js
CHANGED
|
@@ -1,41 +1,73 @@
|
|
|
1
|
-
|
|
1
|
+
export default `
|
|
2
|
+
.muigui-colors {
|
|
3
|
+
--bg-color: #ddd;
|
|
4
|
+
--color: #222;
|
|
5
|
+
--value-color: #145 ;
|
|
6
|
+
--value-bg-color: #eeee;
|
|
7
|
+
--disabled-color: #999;
|
|
8
|
+
--menu-bg-color: #f8f8f8;
|
|
9
|
+
--menu-sep-color: #bbb;
|
|
10
|
+
--hover-bg-color: #999;
|
|
11
|
+
--focus-color: #68C;
|
|
12
|
+
--range-color: #888888;
|
|
13
|
+
--invalid-color: #FF0000;
|
|
14
|
+
--selected-color: rgb(255, 255, 255, 0.9);
|
|
15
|
+
|
|
16
|
+
--button-bg-color: var(--value-bg-color);
|
|
17
|
+
|
|
18
|
+
--range-left-color: var(--value-color);
|
|
19
|
+
--range-right-color: var(--value-bg-color);
|
|
20
|
+
--range-right-hover-color: var(--hover-bg-color);
|
|
21
|
+
|
|
22
|
+
color: var(--color);
|
|
23
|
+
background-color: var(--bg-color);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
@media (prefers-color-scheme: dark) {
|
|
27
|
+
.muigui-colors {
|
|
28
|
+
--bg-color: #222222;
|
|
29
|
+
--color: #dddddd;
|
|
30
|
+
--value-color: #43e5f7;
|
|
31
|
+
--value-bg-color: #444444;
|
|
32
|
+
--disabled-color: #666666;
|
|
33
|
+
--menu-bg-color: #080808;
|
|
34
|
+
--menu-sep-color: #444444;
|
|
35
|
+
--hover-bg-color: #666666;
|
|
36
|
+
--focus-color: #88AAFF;
|
|
37
|
+
--range-color: #888888;
|
|
38
|
+
--invalid-color: #FF6666;
|
|
39
|
+
--selected-color: rgba(255, 255, 255, 0.3);
|
|
40
|
+
|
|
41
|
+
--button-bg-color: var(--value-bg-color);
|
|
42
|
+
|
|
43
|
+
--range-left-color: var(--value-color);
|
|
44
|
+
--range-right-color: var(--value-bg-color);
|
|
45
|
+
--range-right-hover-color: var(--hover-bg-color);
|
|
46
|
+
|
|
47
|
+
color: var(--color);
|
|
48
|
+
background-color: var(--bg-color);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
2
52
|
.muigui {
|
|
3
53
|
--width: 250px;
|
|
4
54
|
--label-width: 45%;
|
|
5
55
|
--number-width: 40%;
|
|
6
56
|
|
|
7
|
-
--bg-color: #222222;
|
|
8
|
-
--color: #dddddd;
|
|
9
|
-
--value-color: #43e5f7;
|
|
10
|
-
--value-bg-color: #444444;
|
|
11
|
-
--disabled-color: #666666;
|
|
12
|
-
--menu-bg-color: #000000;
|
|
13
|
-
--menu-sep-color: #444444;
|
|
14
|
-
--hover-bg-color: #666666;
|
|
15
|
-
--focus-color: #88AAFF;
|
|
16
|
-
--range-color: #888888;
|
|
17
|
-
--invalid-color: #FF6666;
|
|
18
|
-
--selected-color: rgba(255, 255, 255, 0.3);
|
|
19
|
-
|
|
20
|
-
--button-bg-color: var(--value-bg-color);
|
|
21
57
|
|
|
22
58
|
--font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Arial, sans-serif;
|
|
23
59
|
--font-size: 11px;
|
|
24
60
|
--font-family-mono: Menlo, Monaco, Consolas, "Droid Sans Mono", monospace;
|
|
25
61
|
--font-size-mono: 11px;
|
|
26
62
|
|
|
27
|
-
--range-left-color: var(--value-color);
|
|
28
|
-
--range-right-color: var(--value-bg-color);
|
|
29
|
-
--range-right-hover-color: var(--hover-bg-color);
|
|
30
63
|
--line-height: 1.7em;
|
|
31
64
|
--border-radius: 0px;
|
|
32
65
|
|
|
33
66
|
width: var(--width);
|
|
34
|
-
color: var(--color);
|
|
35
|
-
background-color: var(--bg-color);
|
|
36
67
|
font-family: var(--font-family);
|
|
37
68
|
font-size: var(--font-size);
|
|
38
69
|
box-sizing: border-box;
|
|
70
|
+
line-height: 100%;
|
|
39
71
|
}
|
|
40
72
|
.muigui * {
|
|
41
73
|
box-sizing: inherit;
|
|
@@ -647,5 +679,4 @@ const css = `
|
|
|
647
679
|
}
|
|
648
680
|
|
|
649
681
|
`;
|
|
650
|
-
export default css;
|
|
651
682
|
|
|
@@ -7,10 +7,10 @@ export default class CheckboxView extends EditView {
|
|
|
7
7
|
type: 'checkbox',
|
|
8
8
|
id,
|
|
9
9
|
onInput: () => {
|
|
10
|
-
setter.setValue(
|
|
10
|
+
setter.setValue(checkboxElem.checked);
|
|
11
11
|
},
|
|
12
12
|
onChange: () => {
|
|
13
|
-
setter.setFinalValue(
|
|
13
|
+
setter.setFinalValue(checkboxElem.checked);
|
|
14
14
|
},
|
|
15
15
|
});
|
|
16
16
|
super(createElem('label', {}, [checkboxElem]));
|