@stevejtrettel/shader-sandbox 0.1.2 → 0.1.4
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 +259 -235
- package/bin/cli.js +106 -14
- package/dist-lib/app/App.d.ts +143 -15
- package/dist-lib/app/App.d.ts.map +1 -1
- package/dist-lib/app/App.js +1343 -108
- package/dist-lib/app/app.css +349 -24
- package/dist-lib/app/types.d.ts +48 -5
- package/dist-lib/app/types.d.ts.map +1 -1
- package/dist-lib/editor/EditorPanel.d.ts +2 -2
- package/dist-lib/editor/EditorPanel.d.ts.map +1 -1
- package/dist-lib/editor/EditorPanel.js +1 -1
- package/dist-lib/editor/editor-panel.css +55 -32
- package/dist-lib/editor/prism-editor.css +16 -16
- package/dist-lib/embed.js +1 -1
- package/dist-lib/engine/{ShadertoyEngine.d.ts → ShaderEngine.d.ts} +134 -10
- package/dist-lib/engine/ShaderEngine.d.ts.map +1 -0
- package/dist-lib/engine/ShaderEngine.js +1523 -0
- package/dist-lib/engine/glHelpers.d.ts +24 -0
- package/dist-lib/engine/glHelpers.d.ts.map +1 -1
- package/dist-lib/engine/glHelpers.js +88 -0
- package/dist-lib/engine/std140.d.ts +47 -0
- package/dist-lib/engine/std140.d.ts.map +1 -0
- package/dist-lib/engine/std140.js +119 -0
- package/dist-lib/engine/types.d.ts +55 -5
- package/dist-lib/engine/types.d.ts.map +1 -1
- package/dist-lib/engine/types.js +1 -1
- package/dist-lib/index.d.ts +4 -3
- package/dist-lib/index.d.ts.map +1 -1
- package/dist-lib/index.js +2 -1
- package/dist-lib/layouts/SplitLayout.d.ts +2 -1
- package/dist-lib/layouts/SplitLayout.d.ts.map +1 -1
- package/dist-lib/layouts/SplitLayout.js +3 -0
- package/dist-lib/layouts/TabbedLayout.d.ts.map +1 -1
- package/dist-lib/layouts/UILayout.d.ts +55 -0
- package/dist-lib/layouts/UILayout.d.ts.map +1 -0
- package/dist-lib/layouts/UILayout.js +147 -0
- package/dist-lib/layouts/default.css +2 -2
- package/dist-lib/layouts/index.d.ts +11 -1
- package/dist-lib/layouts/index.d.ts.map +1 -1
- package/dist-lib/layouts/index.js +17 -1
- package/dist-lib/layouts/split.css +33 -31
- package/dist-lib/layouts/tabbed.css +127 -74
- package/dist-lib/layouts/types.d.ts +14 -3
- package/dist-lib/layouts/types.d.ts.map +1 -1
- package/dist-lib/main.js +33 -0
- package/dist-lib/project/configHelpers.d.ts +45 -0
- package/dist-lib/project/configHelpers.d.ts.map +1 -0
- package/dist-lib/project/configHelpers.js +196 -0
- package/dist-lib/project/generatedLoader.d.ts +2 -2
- package/dist-lib/project/generatedLoader.d.ts.map +1 -1
- package/dist-lib/project/generatedLoader.js +23 -5
- package/dist-lib/project/loadProject.d.ts +6 -6
- package/dist-lib/project/loadProject.d.ts.map +1 -1
- package/dist-lib/project/loadProject.js +396 -144
- package/dist-lib/project/loaderHelper.d.ts +4 -4
- package/dist-lib/project/loaderHelper.d.ts.map +1 -1
- package/dist-lib/project/loaderHelper.js +278 -116
- package/dist-lib/project/types.d.ts +292 -13
- package/dist-lib/project/types.d.ts.map +1 -1
- package/dist-lib/project/types.js +13 -1
- package/dist-lib/styles/base.css +5 -1
- package/dist-lib/uniforms/UniformControls.d.ts +60 -0
- package/dist-lib/uniforms/UniformControls.d.ts.map +1 -0
- package/dist-lib/uniforms/UniformControls.js +518 -0
- package/dist-lib/uniforms/UniformStore.d.ts +74 -0
- package/dist-lib/uniforms/UniformStore.d.ts.map +1 -0
- package/dist-lib/uniforms/UniformStore.js +145 -0
- package/dist-lib/uniforms/UniformsPanel.d.ts +53 -0
- package/dist-lib/uniforms/UniformsPanel.d.ts.map +1 -0
- package/dist-lib/uniforms/UniformsPanel.js +124 -0
- package/dist-lib/uniforms/index.d.ts +11 -0
- package/dist-lib/uniforms/index.d.ts.map +1 -0
- package/dist-lib/uniforms/index.js +8 -0
- package/package.json +16 -1
- package/src/app/App.ts +1469 -126
- package/src/app/app.css +349 -24
- package/src/app/types.ts +53 -5
- package/src/editor/EditorPanel.ts +5 -5
- package/src/editor/editor-panel.css +55 -32
- package/src/editor/prism-editor.css +16 -16
- package/src/embed.ts +1 -1
- package/src/engine/ShaderEngine.ts +1934 -0
- package/src/engine/glHelpers.ts +117 -0
- package/src/engine/std140.ts +136 -0
- package/src/engine/types.ts +69 -5
- package/src/index.ts +4 -3
- package/src/layouts/SplitLayout.ts +8 -3
- package/src/layouts/TabbedLayout.ts +3 -3
- package/src/layouts/UILayout.ts +185 -0
- package/src/layouts/default.css +2 -2
- package/src/layouts/index.ts +20 -1
- package/src/layouts/split.css +33 -31
- package/src/layouts/tabbed.css +127 -74
- package/src/layouts/types.ts +19 -3
- package/src/layouts/ui.css +289 -0
- package/src/main.ts +39 -1
- package/src/project/configHelpers.ts +225 -0
- package/src/project/generatedLoader.ts +27 -6
- package/src/project/loadProject.ts +459 -173
- package/src/project/loaderHelper.ts +377 -130
- package/src/project/types.ts +360 -14
- package/src/styles/base.css +5 -1
- package/src/styles/theme.css +292 -0
- package/src/uniforms/UniformControls.ts +660 -0
- package/src/uniforms/UniformStore.ts +166 -0
- package/src/uniforms/UniformsPanel.ts +163 -0
- package/src/uniforms/index.ts +13 -0
- package/src/uniforms/uniform-controls.css +342 -0
- package/src/uniforms/uniforms-panel.css +277 -0
- package/templates/shaders/example-buffer/config.json +1 -0
- package/dist-lib/engine/ShadertoyEngine.d.ts.map +0 -1
- package/dist-lib/engine/ShadertoyEngine.js +0 -704
- package/src/engine/ShadertoyEngine.ts +0 -929
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
.editor-toolbar {
|
|
7
7
|
display: flex;
|
|
8
8
|
align-items: center;
|
|
9
|
-
background:
|
|
10
|
-
border-bottom: 1px solid
|
|
9
|
+
background: var(--tab-bg);
|
|
10
|
+
border-bottom: 1px solid var(--border-primary);
|
|
11
11
|
padding-right: 8px;
|
|
12
12
|
}
|
|
13
13
|
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
.editor-tab-button {
|
|
22
22
|
background: transparent;
|
|
23
23
|
border: none;
|
|
24
|
-
color:
|
|
24
|
+
color: var(--tab-text);
|
|
25
25
|
padding: 10px 16px;
|
|
26
26
|
cursor: pointer;
|
|
27
27
|
font-family: 'Monaco', 'Menlo', 'Courier New', monospace;
|
|
@@ -32,21 +32,37 @@
|
|
|
32
32
|
}
|
|
33
33
|
|
|
34
34
|
.editor-tab-button:hover {
|
|
35
|
-
color:
|
|
35
|
+
color: var(--tab-text-hover);
|
|
36
36
|
}
|
|
37
37
|
|
|
38
38
|
.editor-tab-button.active {
|
|
39
|
-
color:
|
|
40
|
-
border-bottom-color:
|
|
39
|
+
color: var(--tab-text-active);
|
|
40
|
+
border-bottom-color: var(--tab-border-active);
|
|
41
41
|
}
|
|
42
42
|
|
|
43
43
|
.editor-tab-button.image-tab {
|
|
44
|
-
color:
|
|
44
|
+
color: var(--accent-secondary);
|
|
45
45
|
}
|
|
46
46
|
|
|
47
47
|
.editor-tab-button.image-tab.active {
|
|
48
|
-
color:
|
|
49
|
-
border-bottom-color:
|
|
48
|
+
color: var(--accent-secondary);
|
|
49
|
+
border-bottom-color: var(--accent-secondary);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
.editor-tab-button.uniforms-tab {
|
|
53
|
+
color: var(--accent-tertiary, var(--accent-primary));
|
|
54
|
+
padding: 8px 12px;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
.editor-tab-button.uniforms-tab.active {
|
|
58
|
+
color: var(--accent-tertiary, var(--accent-primary));
|
|
59
|
+
border-bottom-color: var(--accent-tertiary, var(--accent-primary));
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
.editor-tab-button .uniforms-icon {
|
|
63
|
+
width: 18px;
|
|
64
|
+
height: 18px;
|
|
65
|
+
display: block;
|
|
50
66
|
}
|
|
51
67
|
|
|
52
68
|
/* Copy button (icon only) */
|
|
@@ -54,9 +70,9 @@
|
|
|
54
70
|
display: flex;
|
|
55
71
|
align-items: center;
|
|
56
72
|
justify-content: center;
|
|
57
|
-
background:
|
|
58
|
-
border: 1px solid
|
|
59
|
-
color:
|
|
73
|
+
background: var(--button-bg);
|
|
74
|
+
border: 1px solid var(--button-border);
|
|
75
|
+
color: var(--button-text);
|
|
60
76
|
width: 32px;
|
|
61
77
|
height: 32px;
|
|
62
78
|
border-radius: 4px;
|
|
@@ -67,19 +83,19 @@
|
|
|
67
83
|
}
|
|
68
84
|
|
|
69
85
|
.editor-copy-button:hover {
|
|
70
|
-
background:
|
|
71
|
-
border-color:
|
|
72
|
-
color:
|
|
86
|
+
background: var(--button-bg-hover);
|
|
87
|
+
border-color: var(--button-border-hover);
|
|
88
|
+
color: var(--button-text-hover);
|
|
73
89
|
}
|
|
74
90
|
|
|
75
91
|
.editor-copy-button:active {
|
|
76
|
-
background:
|
|
92
|
+
background: var(--button-bg-hover);
|
|
77
93
|
}
|
|
78
94
|
|
|
79
95
|
.editor-copy-button.copied {
|
|
80
|
-
background:
|
|
81
|
-
border-color:
|
|
82
|
-
color:
|
|
96
|
+
background: var(--success-bg);
|
|
97
|
+
border-color: var(--success-border);
|
|
98
|
+
color: var(--success-text);
|
|
83
99
|
}
|
|
84
100
|
|
|
85
101
|
.editor-copy-button svg {
|
|
@@ -91,25 +107,25 @@
|
|
|
91
107
|
display: flex;
|
|
92
108
|
align-items: center;
|
|
93
109
|
gap: 6px;
|
|
94
|
-
background:
|
|
110
|
+
background: var(--recompile-bg);
|
|
95
111
|
border: none;
|
|
96
|
-
color:
|
|
112
|
+
color: var(--recompile-text);
|
|
97
113
|
padding: 6px 12px;
|
|
98
114
|
border-radius: 4px;
|
|
99
115
|
cursor: pointer;
|
|
100
116
|
font-family: inherit;
|
|
101
117
|
font-size: 12px;
|
|
102
118
|
font-weight: 500;
|
|
103
|
-
transition: background 0.15s;
|
|
119
|
+
transition: background 0.15s, color 0.15s;
|
|
104
120
|
flex-shrink: 0;
|
|
105
121
|
}
|
|
106
122
|
|
|
107
123
|
.editor-recompile-button:hover {
|
|
108
|
-
background:
|
|
124
|
+
background: var(--recompile-bg-hover);
|
|
109
125
|
}
|
|
110
126
|
|
|
111
127
|
.editor-recompile-button:active {
|
|
112
|
-
background:
|
|
128
|
+
background: var(--recompile-bg-active);
|
|
113
129
|
}
|
|
114
130
|
|
|
115
131
|
.editor-recompile-button svg {
|
|
@@ -121,7 +137,7 @@
|
|
|
121
137
|
flex: 1;
|
|
122
138
|
overflow: hidden;
|
|
123
139
|
position: relative;
|
|
124
|
-
background:
|
|
140
|
+
background: var(--code-bg);
|
|
125
141
|
}
|
|
126
142
|
|
|
127
143
|
.editor-prism-container {
|
|
@@ -133,8 +149,8 @@
|
|
|
133
149
|
.editor-fallback-textarea {
|
|
134
150
|
width: 100%;
|
|
135
151
|
height: 100%;
|
|
136
|
-
background:
|
|
137
|
-
color:
|
|
152
|
+
background: var(--code-bg);
|
|
153
|
+
color: var(--code-text);
|
|
138
154
|
border: none;
|
|
139
155
|
padding: 12px;
|
|
140
156
|
font-family: 'Monaco', 'Menlo', 'Courier New', monospace;
|
|
@@ -149,27 +165,34 @@
|
|
|
149
165
|
align-items: center;
|
|
150
166
|
justify-content: center;
|
|
151
167
|
height: 100%;
|
|
152
|
-
background:
|
|
168
|
+
background: var(--image-viewer-bg);
|
|
153
169
|
padding: 20px;
|
|
154
170
|
}
|
|
155
171
|
|
|
172
|
+
/* Uniforms container */
|
|
173
|
+
.editor-uniforms-container {
|
|
174
|
+
height: 100%;
|
|
175
|
+
overflow-y: auto;
|
|
176
|
+
background: var(--bg-secondary);
|
|
177
|
+
}
|
|
178
|
+
|
|
156
179
|
.editor-image-viewer img {
|
|
157
180
|
max-width: 100%;
|
|
158
181
|
max-height: 100%;
|
|
159
182
|
object-fit: contain;
|
|
160
183
|
border-radius: 4px;
|
|
161
|
-
box-shadow:
|
|
184
|
+
box-shadow: var(--shadow-sm);
|
|
162
185
|
}
|
|
163
186
|
|
|
164
187
|
/* Error display */
|
|
165
188
|
.editor-error-display {
|
|
166
|
-
background:
|
|
167
|
-
color:
|
|
189
|
+
background: var(--error-bg);
|
|
190
|
+
color: var(--error-text);
|
|
168
191
|
padding: 10px 14px;
|
|
169
192
|
font-family: 'Monaco', 'Menlo', 'Courier New', monospace;
|
|
170
193
|
font-size: 12px;
|
|
171
194
|
white-space: pre-wrap;
|
|
172
195
|
overflow: auto;
|
|
173
196
|
max-height: 120px;
|
|
174
|
-
border-top: 1px solid
|
|
197
|
+
border-top: 1px solid var(--error-border);
|
|
175
198
|
}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
.prism-editor-wrapper {
|
|
7
7
|
display: flex;
|
|
8
8
|
height: 100%;
|
|
9
|
-
background:
|
|
9
|
+
background: var(--code-bg);
|
|
10
10
|
font-family: 'Monaco', 'Menlo', 'Courier New', monospace;
|
|
11
11
|
font-size: 13px;
|
|
12
12
|
line-height: 1.6;
|
|
@@ -17,8 +17,8 @@
|
|
|
17
17
|
flex-shrink: 0;
|
|
18
18
|
padding: 16px 12px 16px 16px;
|
|
19
19
|
text-align: right;
|
|
20
|
-
color:
|
|
21
|
-
border-right: 1px solid
|
|
20
|
+
color: var(--code-line-number);
|
|
21
|
+
border-right: 1px solid var(--code-line-border);
|
|
22
22
|
user-select: none;
|
|
23
23
|
overflow: hidden;
|
|
24
24
|
}
|
|
@@ -59,24 +59,24 @@
|
|
|
59
59
|
.prism-editor-textarea {
|
|
60
60
|
background: transparent;
|
|
61
61
|
color: transparent;
|
|
62
|
-
caret-color:
|
|
62
|
+
caret-color: var(--code-text);
|
|
63
63
|
resize: none;
|
|
64
64
|
z-index: 1;
|
|
65
65
|
-webkit-text-fill-color: transparent;
|
|
66
66
|
}
|
|
67
67
|
|
|
68
68
|
.prism-editor-textarea::selection {
|
|
69
|
-
background:
|
|
69
|
+
background: var(--code-selection);
|
|
70
70
|
}
|
|
71
71
|
|
|
72
72
|
.prism-editor-textarea::-moz-selection {
|
|
73
|
-
background:
|
|
73
|
+
background: var(--code-selection);
|
|
74
74
|
}
|
|
75
75
|
|
|
76
76
|
/* Highlighted code overlay */
|
|
77
77
|
.prism-editor-highlight {
|
|
78
|
-
background:
|
|
79
|
-
color:
|
|
78
|
+
background: var(--code-bg);
|
|
79
|
+
color: var(--code-text);
|
|
80
80
|
pointer-events: none;
|
|
81
81
|
z-index: 0;
|
|
82
82
|
}
|
|
@@ -89,11 +89,11 @@
|
|
|
89
89
|
}
|
|
90
90
|
|
|
91
91
|
/* Prism syntax highlighting colors */
|
|
92
|
-
.prism-editor-highlight .token.comment { color:
|
|
93
|
-
.prism-editor-highlight .token.keyword { color:
|
|
94
|
-
.prism-editor-highlight .token.string { color:
|
|
95
|
-
.prism-editor-highlight .token.number { color:
|
|
96
|
-
.prism-editor-highlight .token.operator { color:
|
|
97
|
-
.prism-editor-highlight .token.function { color:
|
|
98
|
-
.prism-editor-highlight .token.class-name { color:
|
|
99
|
-
.prism-editor-highlight .token.punctuation { color:
|
|
92
|
+
.prism-editor-highlight .token.comment { color: var(--syntax-comment); }
|
|
93
|
+
.prism-editor-highlight .token.keyword { color: var(--syntax-keyword); }
|
|
94
|
+
.prism-editor-highlight .token.string { color: var(--syntax-string); }
|
|
95
|
+
.prism-editor-highlight .token.number { color: var(--syntax-number); }
|
|
96
|
+
.prism-editor-highlight .token.operator { color: var(--syntax-operator); }
|
|
97
|
+
.prism-editor-highlight .token.function { color: var(--syntax-function); }
|
|
98
|
+
.prism-editor-highlight .token.class-name { color: var(--syntax-class); }
|
|
99
|
+
.prism-editor-highlight .token.punctuation { color: var(--syntax-punctuation); }
|