@xviewer.js/debug 1.0.4-alpha.0 → 1.0.4-alpha.2
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 +101 -1
- package/dist/assets/index-DeOiC-Xv.css +545 -0
- package/dist/main.cjs +613 -102
- package/dist/main.cjs.map +1 -1
- package/dist/module.js +597 -104
- package/dist/module.js.map +1 -1
- package/package.json +5 -2
- package/types/Inspector.d.ts +7 -6
- package/types/Stats.d.ts +2 -2
- package/types/gui/GUI.d.ts +16 -3
- package/types/gui/controllers/SceneTreeController.d.ts +67 -0
- package/types/gui/controllers/SceneTreeController.example.d.ts +12 -0
- package/types/gui/utils/getColorFormat.d.ts +2 -2
- package/types/helpers/BoxProjectionHelper.d.ts +10 -0
- package/types/helpers/ViewerHelper.d.ts +30 -0
- package/types/index.d.ts +0 -1
package/README.md
CHANGED
|
@@ -1 +1,101 @@
|
|
|
1
|
-
|
|
1
|
+
# @xviewer.js/debug
|
|
2
|
+
|
|
3
|
+
Debug package for xviewer.js with GUI components and debugging tools.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- GUI components for debugging and inspection
|
|
8
|
+
- **Scene Tree Controller** - Interactive Three.js scene hierarchy viewer
|
|
9
|
+
- Curve editor for animation curves
|
|
10
|
+
- Various controller types (number, string, boolean, color, etc.)
|
|
11
|
+
- Touch-friendly interface with responsive design
|
|
12
|
+
- Modern CSS styling (converted from SCSS for better maintainability)
|
|
13
|
+
|
|
14
|
+
## Usage
|
|
15
|
+
|
|
16
|
+
```typescript
|
|
17
|
+
import { GUI } from '@xviewer.js/debug';
|
|
18
|
+
|
|
19
|
+
const gui = new GUI();
|
|
20
|
+
gui.add(controller, 'property', min, max);
|
|
21
|
+
|
|
22
|
+
// Add a scene tree controller
|
|
23
|
+
const sceneTree = gui.addSceneTree(threeScene);
|
|
24
|
+
sceneTree.onObjectSelect((object) => {
|
|
25
|
+
console.log('Selected:', object);
|
|
26
|
+
});
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Styling
|
|
30
|
+
|
|
31
|
+
The package uses modern CSS with CSS custom properties (variables) for theming. Styles are organized in a modular structure for better maintainability:
|
|
32
|
+
|
|
33
|
+
- `base.css` - CSS variables and base layout
|
|
34
|
+
- `controllers.css` - Controller-specific styles
|
|
35
|
+
- `hierarchy.css` - Folder and title styles
|
|
36
|
+
- `inputs.css` - Form input styles
|
|
37
|
+
- `curve-editor.css` - Curve editor styles
|
|
38
|
+
- `scene-tree.css` - Scene tree controller styles
|
|
39
|
+
|
|
40
|
+
All styles are imported through `index.css` and automatically bundled by Rollup.
|
|
41
|
+
|
|
42
|
+
## Scene Tree Controller
|
|
43
|
+
|
|
44
|
+
The Scene Tree Controller provides an interactive view of your Three.js scene hierarchy, allowing you to:
|
|
45
|
+
|
|
46
|
+
- **Navigate** through the scene graph with expandable/collapsible nodes
|
|
47
|
+
- **Select** objects by clicking on them in the tree
|
|
48
|
+
- **Toggle visibility** of objects using the eye icon
|
|
49
|
+
- **Refresh** the tree when the scene changes
|
|
50
|
+
- **Expand/Collapse** all nodes at once
|
|
51
|
+
|
|
52
|
+
### Features
|
|
53
|
+
|
|
54
|
+
- **Hierarchical Display**: Shows the complete scene structure with proper indentation
|
|
55
|
+
- **Object Selection**: Click any node to select the corresponding Three.js object
|
|
56
|
+
- **Visibility Control**: Toggle object visibility directly from the tree
|
|
57
|
+
- **Real-time Updates**: Automatically reflects changes in the scene
|
|
58
|
+
- **Dynamic Object Detection**: Automatically detects newly added/removed objects
|
|
59
|
+
- **Performance Optimized**: Lightweight change detection with configurable update intervals
|
|
60
|
+
- **Responsive Design**: Adapts to different screen sizes and touch devices
|
|
61
|
+
|
|
62
|
+
### Example Integration
|
|
63
|
+
|
|
64
|
+
```typescript
|
|
65
|
+
import { GUI } from '@xviewer.js/debug';
|
|
66
|
+
|
|
67
|
+
// Create GUI and add scene tree
|
|
68
|
+
const gui = new GUI({ title: "Scene Inspector" });
|
|
69
|
+
const sceneTree = gui.addSceneTree(threeScene);
|
|
70
|
+
|
|
71
|
+
// Handle object selection
|
|
72
|
+
sceneTree.onObjectSelect((object) => {
|
|
73
|
+
console.log('Selected:', object.name, object.type);
|
|
74
|
+
// Add your selection logic here
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
// Utility methods
|
|
78
|
+
sceneTree.expandAll(); // Expand all nodes
|
|
79
|
+
sceneTree.collapseAll(); // Collapse all nodes
|
|
80
|
+
sceneTree.refresh(); // Rebuild the tree
|
|
81
|
+
sceneTree.update(); // Update visibility states and check for changes
|
|
82
|
+
sceneTree.setAutoUpdate(true); // Enable automatic structure change detection
|
|
83
|
+
sceneTree.setUpdateInterval(2000); // Check for changes every 2 seconds (default: 1 second)
|
|
84
|
+
sceneTree.forceUpdate(); // Force immediate tree rebuild
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
**Note**: The scene tree controller automatically takes the full width of its container, doesn't display a name label, and automatically detects scene changes when update() is called each frame. Performance is optimized by using lightweight change detection and configurable update intervals to avoid rebuilding the entire tree unnecessarily.
|
|
88
|
+
|
|
89
|
+
### CSS Variables
|
|
90
|
+
|
|
91
|
+
- `--background-color`: Main background color
|
|
92
|
+
- `--text-color`: Primary text color
|
|
93
|
+
- `--widget-color`: Widget background color
|
|
94
|
+
- `--hover-color`: Hover state color
|
|
95
|
+
- `--focus-color`: Focus state color
|
|
96
|
+
- `--number-color`: Number input color
|
|
97
|
+
- `--string-color`: String input color
|
|
98
|
+
|
|
99
|
+
## Build
|
|
100
|
+
|
|
101
|
+
The package is built using Rollup with CSS processing support. CSS files are automatically bundled and optimized during the build process.
|
|
@@ -0,0 +1,545 @@
|
|
|
1
|
+
@charset "UTF-8";
|
|
2
|
+
.lil-gui {
|
|
3
|
+
font-family: var(--font-family);
|
|
4
|
+
font-size: var(--font-size);
|
|
5
|
+
line-height: 1;
|
|
6
|
+
font-weight: normal;
|
|
7
|
+
font-style: normal;
|
|
8
|
+
text-align: left;
|
|
9
|
+
background-color: var(--background-color);
|
|
10
|
+
color: var(--text-color);
|
|
11
|
+
user-select: none;
|
|
12
|
+
-webkit-user-select: none;
|
|
13
|
+
touch-action: manipulation;
|
|
14
|
+
--background-color: #1f1f1f;
|
|
15
|
+
--text-color: #ebebeb;
|
|
16
|
+
--title-background-color: #111111;
|
|
17
|
+
--title-text-color: #ebebeb;
|
|
18
|
+
--widget-color: #424242;
|
|
19
|
+
--hover-color: #4f4f4f;
|
|
20
|
+
--focus-color: #595959;
|
|
21
|
+
--number-color: #2cc9ff;
|
|
22
|
+
--string-color: #a2db3c;
|
|
23
|
+
--font-size: 11px;
|
|
24
|
+
--input-font-size: 11px;
|
|
25
|
+
--font-family: -apple-system,
|
|
26
|
+
BlinkMacSystemFont,
|
|
27
|
+
"Segoe UI",
|
|
28
|
+
Roboto,
|
|
29
|
+
Arial,
|
|
30
|
+
sans-serif;
|
|
31
|
+
--font-family-mono: Menlo,
|
|
32
|
+
Monaco,
|
|
33
|
+
Consolas,
|
|
34
|
+
"Droid Sans Mono",
|
|
35
|
+
monospace;
|
|
36
|
+
--padding: 4px;
|
|
37
|
+
--spacing: 4px;
|
|
38
|
+
--widget-height: 20px;
|
|
39
|
+
--title-height: calc(var(--widget-height) + var(--spacing) * 1.25);
|
|
40
|
+
--name-width: 40%;
|
|
41
|
+
--slider-knob-width: 2px;
|
|
42
|
+
--slider-input-width: 27%;
|
|
43
|
+
--color-input-width: 27%;
|
|
44
|
+
--slider-input-min-width: 45px;
|
|
45
|
+
--color-input-min-width: 45px;
|
|
46
|
+
--folder-indent: 7px;
|
|
47
|
+
--widget-padding: 0 0 0 3px;
|
|
48
|
+
--widget-border-radius: 2px;
|
|
49
|
+
--checkbox-size: calc(0.75 * var(--widget-height));
|
|
50
|
+
--scrollbar-width: 5px;
|
|
51
|
+
}
|
|
52
|
+
.lil-gui, .lil-gui * {
|
|
53
|
+
box-sizing: border-box;
|
|
54
|
+
margin: 0;
|
|
55
|
+
padding: 0;
|
|
56
|
+
}
|
|
57
|
+
.lil-gui.root {
|
|
58
|
+
width: var(--width, 245px);
|
|
59
|
+
display: flex;
|
|
60
|
+
flex-direction: column;
|
|
61
|
+
}
|
|
62
|
+
.lil-gui.root > .title {
|
|
63
|
+
background: var(--title-background-color);
|
|
64
|
+
color: var(--title-text-color);
|
|
65
|
+
}
|
|
66
|
+
.lil-gui.root > .children {
|
|
67
|
+
overflow-x: hidden;
|
|
68
|
+
overflow-y: auto;
|
|
69
|
+
}
|
|
70
|
+
.lil-gui.root > .children::-webkit-scrollbar {
|
|
71
|
+
width: var(--scrollbar-width);
|
|
72
|
+
height: var(--scrollbar-width);
|
|
73
|
+
background: var(--background-color);
|
|
74
|
+
}
|
|
75
|
+
.lil-gui.root > .children::-webkit-scrollbar-thumb {
|
|
76
|
+
border-radius: var(--scrollbar-width);
|
|
77
|
+
background: var(--focus-color);
|
|
78
|
+
}
|
|
79
|
+
@media (pointer: coarse) {
|
|
80
|
+
.lil-gui.allow-touch-styles, .lil-gui.allow-touch-styles .lil-gui {
|
|
81
|
+
--widget-height: 28px;
|
|
82
|
+
--padding: 6px;
|
|
83
|
+
--spacing: 6px;
|
|
84
|
+
--font-size: 13px;
|
|
85
|
+
--input-font-size: 16px;
|
|
86
|
+
--folder-indent: 10px;
|
|
87
|
+
--scrollbar-width: 7px;
|
|
88
|
+
--slider-input-min-width: 50px;
|
|
89
|
+
--color-input-min-width: 65px;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
.lil-gui.force-touch-styles, .lil-gui.force-touch-styles .lil-gui {
|
|
93
|
+
--widget-height: 28px;
|
|
94
|
+
--padding: 6px;
|
|
95
|
+
--spacing: 6px;
|
|
96
|
+
--font-size: 13px;
|
|
97
|
+
--input-font-size: 16px;
|
|
98
|
+
--folder-indent: 10px;
|
|
99
|
+
--scrollbar-width: 7px;
|
|
100
|
+
--slider-input-min-width: 50px;
|
|
101
|
+
--color-input-min-width: 65px;
|
|
102
|
+
}
|
|
103
|
+
.lil-gui.autoPlace {
|
|
104
|
+
max-height: 100%;
|
|
105
|
+
position: fixed;
|
|
106
|
+
top: 0;
|
|
107
|
+
right: 15px;
|
|
108
|
+
z-index: 1001;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
.lil-gui .controller {
|
|
112
|
+
display: flex;
|
|
113
|
+
align-items: center;
|
|
114
|
+
padding: 0 var(--padding);
|
|
115
|
+
margin: var(--spacing) 0;
|
|
116
|
+
}
|
|
117
|
+
.lil-gui .controller.disabled {
|
|
118
|
+
opacity: 0.5;
|
|
119
|
+
}
|
|
120
|
+
.lil-gui .controller.disabled, .lil-gui .controller.disabled * {
|
|
121
|
+
pointer-events: none !important;
|
|
122
|
+
}
|
|
123
|
+
.lil-gui .controller > .name {
|
|
124
|
+
min-width: var(--name-width);
|
|
125
|
+
flex-shrink: 0;
|
|
126
|
+
white-space: pre;
|
|
127
|
+
padding-right: var(--spacing);
|
|
128
|
+
line-height: var(--widget-height);
|
|
129
|
+
}
|
|
130
|
+
.lil-gui .controller .widget {
|
|
131
|
+
position: relative;
|
|
132
|
+
display: flex;
|
|
133
|
+
align-items: center;
|
|
134
|
+
width: 100%;
|
|
135
|
+
min-height: var(--widget-height);
|
|
136
|
+
}
|
|
137
|
+
.lil-gui .controller.string input {
|
|
138
|
+
color: var(--string-color);
|
|
139
|
+
}
|
|
140
|
+
.lil-gui .controller.boolean .widget {
|
|
141
|
+
cursor: pointer;
|
|
142
|
+
}
|
|
143
|
+
.lil-gui .controller.color .display {
|
|
144
|
+
width: 100%;
|
|
145
|
+
height: var(--widget-height);
|
|
146
|
+
border-radius: var(--widget-border-radius);
|
|
147
|
+
position: relative;
|
|
148
|
+
}
|
|
149
|
+
@media (hover: hover) {
|
|
150
|
+
.lil-gui .controller.color .display:hover:before {
|
|
151
|
+
content: " ";
|
|
152
|
+
display: block;
|
|
153
|
+
position: absolute;
|
|
154
|
+
border-radius: var(--widget-border-radius);
|
|
155
|
+
border: 1px solid rgba(255, 255, 255, 0.6);
|
|
156
|
+
top: 0;
|
|
157
|
+
right: 0;
|
|
158
|
+
bottom: 0;
|
|
159
|
+
left: 0;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
.lil-gui .controller.color input[type=color] {
|
|
163
|
+
opacity: 0;
|
|
164
|
+
width: 100%;
|
|
165
|
+
height: 100%;
|
|
166
|
+
cursor: pointer;
|
|
167
|
+
}
|
|
168
|
+
.lil-gui .controller.color input[type=text] {
|
|
169
|
+
margin-left: var(--spacing);
|
|
170
|
+
font-family: var(--font-family-mono);
|
|
171
|
+
min-width: var(--color-input-min-width);
|
|
172
|
+
width: var(--color-input-width);
|
|
173
|
+
flex-shrink: 0;
|
|
174
|
+
}
|
|
175
|
+
.lil-gui .controller.option select {
|
|
176
|
+
opacity: 0;
|
|
177
|
+
position: absolute;
|
|
178
|
+
width: 100%;
|
|
179
|
+
max-width: 100%;
|
|
180
|
+
}
|
|
181
|
+
.lil-gui .controller.option .display {
|
|
182
|
+
position: relative;
|
|
183
|
+
pointer-events: none;
|
|
184
|
+
border-radius: var(--widget-border-radius);
|
|
185
|
+
height: var(--widget-height);
|
|
186
|
+
line-height: var(--widget-height);
|
|
187
|
+
max-width: 100%;
|
|
188
|
+
overflow: hidden;
|
|
189
|
+
word-break: break-all;
|
|
190
|
+
padding-left: 0.55em;
|
|
191
|
+
padding-right: 1.75em;
|
|
192
|
+
background: var(--widget-color);
|
|
193
|
+
}
|
|
194
|
+
@media (hover: hover) {
|
|
195
|
+
.lil-gui .controller.option .display.focus {
|
|
196
|
+
background: var(--focus-color);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
.lil-gui .controller.option .display.active {
|
|
200
|
+
background: var(--focus-color);
|
|
201
|
+
}
|
|
202
|
+
.lil-gui .controller.option .display:after {
|
|
203
|
+
font-family: "lil-gui";
|
|
204
|
+
content: "↕";
|
|
205
|
+
position: absolute;
|
|
206
|
+
top: 0;
|
|
207
|
+
right: 0;
|
|
208
|
+
bottom: 0;
|
|
209
|
+
padding-right: 0.375em;
|
|
210
|
+
}
|
|
211
|
+
.lil-gui .controller.option .widget,
|
|
212
|
+
.lil-gui .controller.option select {
|
|
213
|
+
cursor: pointer;
|
|
214
|
+
}
|
|
215
|
+
@media (hover: hover) {
|
|
216
|
+
.lil-gui .controller.option .widget:hover .display {
|
|
217
|
+
background: var(--hover-color);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
.lil-gui .controller.number input {
|
|
221
|
+
color: var(--number-color);
|
|
222
|
+
}
|
|
223
|
+
.lil-gui .controller.number.hasSlider input {
|
|
224
|
+
margin-left: var(--spacing);
|
|
225
|
+
width: var(--slider-input-width);
|
|
226
|
+
min-width: var(--slider-input-min-width);
|
|
227
|
+
flex-shrink: 0;
|
|
228
|
+
}
|
|
229
|
+
.lil-gui .controller.number .slider {
|
|
230
|
+
width: 100%;
|
|
231
|
+
height: var(--widget-height);
|
|
232
|
+
background-color: var(--widget-color);
|
|
233
|
+
border-radius: var(--widget-border-radius);
|
|
234
|
+
padding-right: var(--slider-knob-width);
|
|
235
|
+
overflow: hidden;
|
|
236
|
+
cursor: ew-resize;
|
|
237
|
+
touch-action: pan-y;
|
|
238
|
+
}
|
|
239
|
+
@media (hover: hover) {
|
|
240
|
+
.lil-gui .controller.number .slider:hover {
|
|
241
|
+
background-color: var(--hover-color);
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
.lil-gui .controller.number .slider.active {
|
|
245
|
+
background-color: var(--focus-color);
|
|
246
|
+
}
|
|
247
|
+
.lil-gui .controller.number .slider.active .fill {
|
|
248
|
+
opacity: 0.95;
|
|
249
|
+
}
|
|
250
|
+
.lil-gui .controller.number .fill {
|
|
251
|
+
height: 100%;
|
|
252
|
+
border-right: var(--slider-knob-width) solid var(--number-color);
|
|
253
|
+
box-sizing: content-box;
|
|
254
|
+
}
|
|
255
|
+
.lil-gui .controller.texture canvas {
|
|
256
|
+
width: 100%;
|
|
257
|
+
border-radius: var(--widget-border-radius);
|
|
258
|
+
}
|
|
259
|
+
.lil-gui .controller.texture .group {
|
|
260
|
+
display: flex;
|
|
261
|
+
position: relative;
|
|
262
|
+
width: 100%;
|
|
263
|
+
}
|
|
264
|
+
.lil-gui .controller.texture .info {
|
|
265
|
+
position: absolute;
|
|
266
|
+
display: flex;
|
|
267
|
+
gap: 11px;
|
|
268
|
+
}
|
|
269
|
+
.lil-gui .controller.texture .label {
|
|
270
|
+
position: absolute;
|
|
271
|
+
background-color: rgba(0, 0, 0, 0.6745098039);
|
|
272
|
+
display: "flex";
|
|
273
|
+
padding: 2px;
|
|
274
|
+
border-radius: var(--widget-border-radius);
|
|
275
|
+
}
|
|
276
|
+
.lil-gui .controller.texture .block {
|
|
277
|
+
position: absolute;
|
|
278
|
+
left: 50%;
|
|
279
|
+
transform: translateX(-50%);
|
|
280
|
+
margin-top: 2px;
|
|
281
|
+
width: var(--font-size);
|
|
282
|
+
height: var(--font-size);
|
|
283
|
+
border-radius: var(--font-size);
|
|
284
|
+
background-color: white;
|
|
285
|
+
cursor: pointer;
|
|
286
|
+
}
|
|
287
|
+
.lil-gui .controller.texture .block.select {
|
|
288
|
+
background-color: var(--string-color);
|
|
289
|
+
}
|
|
290
|
+
.lil-gui .controller.image img {
|
|
291
|
+
width: 100%;
|
|
292
|
+
}
|
|
293
|
+
.lil-gui .controller.image canvas {
|
|
294
|
+
width: 100%;
|
|
295
|
+
}
|
|
296
|
+
.lil-gui .controller.vector input {
|
|
297
|
+
color: var(--number-color);
|
|
298
|
+
}
|
|
299
|
+
.lil-gui .controller.vector .fill {
|
|
300
|
+
height: 100%;
|
|
301
|
+
margin-left: var(--spacing);
|
|
302
|
+
box-sizing: content-box;
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
.lil-gui-dragging .lil-gui {
|
|
306
|
+
--hover-color: var(--widget-color);
|
|
307
|
+
}
|
|
308
|
+
.lil-gui-dragging * {
|
|
309
|
+
cursor: ew-resize !important;
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
.lil-gui-dragging.lil-gui-vertical * {
|
|
313
|
+
cursor: ns-resize !important;
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
.lil-gui .title {
|
|
317
|
+
height: var(--title-height);
|
|
318
|
+
line-height: calc(var(--title-height) - 4px);
|
|
319
|
+
font-weight: 600;
|
|
320
|
+
padding: 0 var(--padding);
|
|
321
|
+
-webkit-tap-highlight-color: transparent;
|
|
322
|
+
cursor: pointer;
|
|
323
|
+
outline: none;
|
|
324
|
+
text-decoration-skip: objects;
|
|
325
|
+
}
|
|
326
|
+
.lil-gui .title:before {
|
|
327
|
+
font-family: "lil-gui";
|
|
328
|
+
content: "▾";
|
|
329
|
+
padding-right: 2px;
|
|
330
|
+
display: inline-block;
|
|
331
|
+
}
|
|
332
|
+
.lil-gui .title:active {
|
|
333
|
+
background: var(--title-background-color);
|
|
334
|
+
opacity: 0.75;
|
|
335
|
+
}
|
|
336
|
+
@media (hover: hover) {
|
|
337
|
+
body:not(.lil-gui-dragging) .lil-gui .title:hover {
|
|
338
|
+
background: var(--title-background-color);
|
|
339
|
+
opacity: 0.85;
|
|
340
|
+
}
|
|
341
|
+
.lil-gui .title:focus {
|
|
342
|
+
text-decoration: underline var(--focus-color);
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
.lil-gui.root > .title:focus {
|
|
346
|
+
text-decoration: none !important;
|
|
347
|
+
}
|
|
348
|
+
.lil-gui.closed > .title:before {
|
|
349
|
+
content: "▸";
|
|
350
|
+
}
|
|
351
|
+
.lil-gui.closed > .children {
|
|
352
|
+
transform: translateY(-7px);
|
|
353
|
+
opacity: 0;
|
|
354
|
+
}
|
|
355
|
+
.lil-gui.closed:not(.transition) > .children {
|
|
356
|
+
display: none;
|
|
357
|
+
}
|
|
358
|
+
.lil-gui.transition > .children {
|
|
359
|
+
transition-duration: 300ms;
|
|
360
|
+
transition-property: height, opacity, transform;
|
|
361
|
+
transition-timing-function: cubic-bezier(0.2, 0.6, 0.35, 1);
|
|
362
|
+
overflow: hidden;
|
|
363
|
+
pointer-events: none;
|
|
364
|
+
}
|
|
365
|
+
.lil-gui .children:empty:before {
|
|
366
|
+
content: "Empty";
|
|
367
|
+
padding: 0 var(--padding);
|
|
368
|
+
margin: var(--spacing) 0;
|
|
369
|
+
display: block;
|
|
370
|
+
height: var(--widget-height);
|
|
371
|
+
font-style: italic;
|
|
372
|
+
line-height: var(--widget-height);
|
|
373
|
+
opacity: 0.5;
|
|
374
|
+
}
|
|
375
|
+
.lil-gui.root > .children > .lil-gui > .title {
|
|
376
|
+
border: 0 solid var(--widget-color);
|
|
377
|
+
border-width: 1px 0;
|
|
378
|
+
transition: border-color 300ms;
|
|
379
|
+
}
|
|
380
|
+
.lil-gui.root > .children > .lil-gui.closed > .title {
|
|
381
|
+
border-bottom-color: transparent;
|
|
382
|
+
}
|
|
383
|
+
.lil-gui + .controller {
|
|
384
|
+
border-top: 1px solid var(--widget-color);
|
|
385
|
+
margin-top: 0;
|
|
386
|
+
padding-top: var(--spacing);
|
|
387
|
+
}
|
|
388
|
+
.lil-gui .lil-gui .lil-gui > .title {
|
|
389
|
+
border: none;
|
|
390
|
+
}
|
|
391
|
+
.lil-gui .lil-gui .lil-gui > .children {
|
|
392
|
+
border: none;
|
|
393
|
+
margin-left: var(--folder-indent);
|
|
394
|
+
border-left: 2px solid var(--widget-color);
|
|
395
|
+
}
|
|
396
|
+
.lil-gui .lil-gui .controller {
|
|
397
|
+
border: none;
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
.lil-gui input {
|
|
401
|
+
-webkit-tap-highlight-color: transparent;
|
|
402
|
+
border: 0;
|
|
403
|
+
outline: none;
|
|
404
|
+
font-family: var(--font-family);
|
|
405
|
+
font-size: var(--input-font-size);
|
|
406
|
+
border-radius: var(--widget-border-radius);
|
|
407
|
+
height: var(--widget-height);
|
|
408
|
+
background: var(--widget-color);
|
|
409
|
+
color: var(--text-color);
|
|
410
|
+
width: 100%;
|
|
411
|
+
}
|
|
412
|
+
@media (hover: hover) {
|
|
413
|
+
.lil-gui input:hover {
|
|
414
|
+
background: var(--hover-color);
|
|
415
|
+
}
|
|
416
|
+
.lil-gui input:active {
|
|
417
|
+
background: var(--focus-color);
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
.lil-gui input:disabled {
|
|
421
|
+
opacity: 1;
|
|
422
|
+
}
|
|
423
|
+
.lil-gui input[type=text],
|
|
424
|
+
.lil-gui input[type=number] {
|
|
425
|
+
padding: var(--widget-padding);
|
|
426
|
+
}
|
|
427
|
+
.lil-gui input[type=text]:focus,
|
|
428
|
+
.lil-gui input[type=number]:focus {
|
|
429
|
+
background: var(--focus-color);
|
|
430
|
+
}
|
|
431
|
+
.lil-gui input::-webkit-outer-spin-button,
|
|
432
|
+
.lil-gui input::-webkit-inner-spin-button {
|
|
433
|
+
-webkit-appearance: none;
|
|
434
|
+
margin: 0;
|
|
435
|
+
}
|
|
436
|
+
.lil-gui input[type=number] {
|
|
437
|
+
-moz-appearance: textfield;
|
|
438
|
+
}
|
|
439
|
+
.lil-gui input[type=checkbox] {
|
|
440
|
+
appearance: none;
|
|
441
|
+
-webkit-appearance: none;
|
|
442
|
+
height: var(--checkbox-size);
|
|
443
|
+
width: var(--checkbox-size);
|
|
444
|
+
border-radius: var(--widget-border-radius);
|
|
445
|
+
text-align: center;
|
|
446
|
+
cursor: pointer;
|
|
447
|
+
}
|
|
448
|
+
.lil-gui input[type=checkbox]:checked:before {
|
|
449
|
+
font-family: "lil-gui";
|
|
450
|
+
content: "✓";
|
|
451
|
+
font-size: var(--checkbox-size);
|
|
452
|
+
line-height: var(--checkbox-size);
|
|
453
|
+
}
|
|
454
|
+
@media (hover: hover) {
|
|
455
|
+
.lil-gui input[type=checkbox]:focus {
|
|
456
|
+
box-shadow: inset 0 0 0 1px var(--focus-color);
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
.lil-gui button {
|
|
460
|
+
-webkit-tap-highlight-color: transparent;
|
|
461
|
+
outline: none;
|
|
462
|
+
cursor: pointer;
|
|
463
|
+
font-family: var(--font-family);
|
|
464
|
+
font-size: var(--font-size);
|
|
465
|
+
color: var(--text-color);
|
|
466
|
+
width: 100%;
|
|
467
|
+
height: var(--widget-height);
|
|
468
|
+
text-transform: none;
|
|
469
|
+
background: var(--widget-color);
|
|
470
|
+
border-radius: var(--widget-border-radius);
|
|
471
|
+
border: 1px solid var(--widget-color);
|
|
472
|
+
text-align: center;
|
|
473
|
+
line-height: calc(var(--widget-height) - 4px);
|
|
474
|
+
}
|
|
475
|
+
@media (hover: hover) {
|
|
476
|
+
.lil-gui button:hover {
|
|
477
|
+
background: var(--hover-color);
|
|
478
|
+
border-color: var(--hover-color);
|
|
479
|
+
}
|
|
480
|
+
.lil-gui button:focus {
|
|
481
|
+
border-color: var(--focus-color);
|
|
482
|
+
}
|
|
483
|
+
}
|
|
484
|
+
.lil-gui button:active {
|
|
485
|
+
background: var(--focus-color);
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
@font-face {
|
|
489
|
+
font-family: "lil-gui";
|
|
490
|
+
src: url("data:application/font-woff;charset=utf-8;base64,d09GRgABAAAAAAUsAAsAAAAACJwAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABCAAAAH4AAADAImwmYE9TLzIAAAGIAAAAPwAAAGBKqH5SY21hcAAAAcgAAAD0AAACrukyyJBnbHlmAAACvAAAAF8AAACEIZpWH2hlYWQAAAMcAAAAJwAAADZfcj2zaGhlYQAAA0QAAAAYAAAAJAC5AHhobXR4AAADXAAAABAAAABMAZAAAGxvY2EAAANsAAAAFAAAACgCEgIybWF4cAAAA4AAAAAeAAAAIAEfABJuYW1lAAADoAAAASIAAAIK9SUU/XBvc3QAAATEAAAAZgAAAJCTcMc2eJxVjbEOgjAURU+hFRBK1dGRL+ALnAiToyMLEzFpnPz/eAshwSa97517c/MwwJmeB9kwPl+0cf5+uGPZXsqPu4nvZabcSZldZ6kfyWnomFY/eScKqZNWupKJO6kXN3K9uCVoL7iInPr1X5baXs3tjuMqCtzEuagm/AAlzQgPAAB4nGNgYRBlnMDAysDAYM/gBiT5oLQBAwuDJAMDEwMrMwNWEJDmmsJwgCFeXZghBcjlZMgFCzOiKOIFAB71Bb8AeJy1kjFuwkAQRZ+DwRAwBtNQRUGKQ8OdKCAWUhAgKLhIuAsVSpWz5Bbkj3dEgYiUIszqWdpZe+Z7/wB1oCYmIoboiwiLT2WjKl/jscrHfGg/pKdMkyklC5Zs2LEfHYpjcRoPzme9MWWmk3dWbK9ObkWkikOetJ554fWyoEsmdSlt+uR0pCJR34b6t/TVg1SY3sYvdf8vuiKrpyaDXDISiegp17p7579Gp3p++y7HPAiY9pmTibljrr85qSidtlg4+l25GLCaS8e6rRxNBmsnERunKbaOObRz7N72ju5vdAjYpBXHgJylOAVsMseDAPEP8LYoUHicY2BiAAEfhiAGJgZWBgZ7RnFRdnVJELCQlBSRlATJMoLV2DK4glSYs6ubq5vbKrJLSbGrgEmovDuDJVhe3VzcXFwNLCOILB/C4IuQ1xTn5FPilBTj5FPmBAB4WwoqAHicY2BkYGAA4sk1sR/j+W2+MnAzpDBgAyEMQUCSg4EJxAEAwUgFHgB4nGNgZGBgSGFggJMhDIwMqEAYAByHATJ4nGNgAIIUNEwmAABl3AGReJxjYAACIQYlBiMGJ3wQAEcQBEV4nGNgZGBgEGZgY2BiAAEQyQWEDAz/wXwGAAsPATIAAHicXdBNSsNAHAXwl35iA0UQXYnMShfS9GPZA7T7LgIu03SSpkwzYTIt1BN4Ak/gKTyAeCxfw39jZkjymzcvAwmAW/wgwHUEGDb36+jQQ3GXGot79L24jxCP4gHzF/EIr4jEIe7wxhOC3g2TMYy4Q7+Lu/SHuEd/ivt4wJd4wPxbPEKMX3GI5+DJFGaSn4qNzk8mcbKSR6xdXdhSzaOZJGtdapd4vVPbi6rP+cL7TGXOHtXKll4bY1Xl7EGnPtp7Xy2n00zyKLVHfkHBa4IcJ2oD3cgggWvt/V/FbDrUlEUJhTn/0azVWbNTNr0Ens8de1tceK9xZmfB1CPjOmPH4kitmvOubcNpmVTN3oFJyjzCvnmrwhJTzqzVj9jiSX911FjeAAB4nG3HMRKCMBBA0f0giiKi4DU8k0V2GWbIZDOh4PoWWvq6J5V8If9NVNQcaDhyouXMhY4rPTcG7jwYmXhKq8Wz+p762aNaeYXom2n3m2dLTVgsrCgFJ7OTmIkYbwIbC6vIB7WmFfAAAA==") format("woff");
|
|
491
|
+
}
|
|
492
|
+
.curve-editor {
|
|
493
|
+
display: flex;
|
|
494
|
+
flex-direction: column;
|
|
495
|
+
gap: 5px;
|
|
496
|
+
background-color: #303030;
|
|
497
|
+
outline: 1px solid #000000;
|
|
498
|
+
padding: 5px;
|
|
499
|
+
width: 100%;
|
|
500
|
+
}
|
|
501
|
+
.curve-editor .button-medium {
|
|
502
|
+
background-color: #545454;
|
|
503
|
+
min-width: var(--widget-height);
|
|
504
|
+
min-height: var(--widget-height);
|
|
505
|
+
height: 100%;
|
|
506
|
+
outline: 1px solid #3c3c3c;
|
|
507
|
+
display: flex;
|
|
508
|
+
justify-content: center;
|
|
509
|
+
align-items: center;
|
|
510
|
+
color: #fff;
|
|
511
|
+
font-size: var(--input-font-size, 11px);
|
|
512
|
+
}
|
|
513
|
+
.curve-editor .button-medium.selected {
|
|
514
|
+
background-color: #4772b3;
|
|
515
|
+
pointer-events: none;
|
|
516
|
+
}
|
|
517
|
+
.curve-editor .button-medium:hover {
|
|
518
|
+
background-color: #656565;
|
|
519
|
+
cursor: default;
|
|
520
|
+
}
|
|
521
|
+
.curve-editor .curve-top {
|
|
522
|
+
display: flex;
|
|
523
|
+
width: 100%;
|
|
524
|
+
}
|
|
525
|
+
.curve-editor .curve-panel {
|
|
526
|
+
width: 100%;
|
|
527
|
+
height: 90px;
|
|
528
|
+
outline: 1px solid #646464;
|
|
529
|
+
}
|
|
530
|
+
.curve-editor .curve-point-panel {
|
|
531
|
+
display: flex;
|
|
532
|
+
align-items: center;
|
|
533
|
+
width: 100%;
|
|
534
|
+
height: var(--widget-height);
|
|
535
|
+
}
|
|
536
|
+
.curve-editor .curve-point-panel input {
|
|
537
|
+
background-color: #545454;
|
|
538
|
+
height: 100%;
|
|
539
|
+
width: 100%;
|
|
540
|
+
color: #fff;
|
|
541
|
+
border: 0;
|
|
542
|
+
outline: 1px solid #3c3c3c;
|
|
543
|
+
text-align: center;
|
|
544
|
+
font-size: var(--input-font-size, 11px);
|
|
545
|
+
}
|