@stevejtrettel/shader-sandbox 0.1.3 → 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.
Files changed (113) hide show
  1. package/README.md +220 -23
  2. package/bin/cli.js +106 -14
  3. package/dist-lib/app/App.d.ts +143 -15
  4. package/dist-lib/app/App.d.ts.map +1 -1
  5. package/dist-lib/app/App.js +1343 -108
  6. package/dist-lib/app/app.css +349 -24
  7. package/dist-lib/app/types.d.ts +48 -5
  8. package/dist-lib/app/types.d.ts.map +1 -1
  9. package/dist-lib/editor/EditorPanel.d.ts +2 -2
  10. package/dist-lib/editor/EditorPanel.d.ts.map +1 -1
  11. package/dist-lib/editor/EditorPanel.js +1 -1
  12. package/dist-lib/editor/editor-panel.css +55 -32
  13. package/dist-lib/editor/prism-editor.css +16 -16
  14. package/dist-lib/embed.js +1 -1
  15. package/dist-lib/engine/{ShadertoyEngine.d.ts → ShaderEngine.d.ts} +134 -10
  16. package/dist-lib/engine/ShaderEngine.d.ts.map +1 -0
  17. package/dist-lib/engine/ShaderEngine.js +1523 -0
  18. package/dist-lib/engine/glHelpers.d.ts +24 -0
  19. package/dist-lib/engine/glHelpers.d.ts.map +1 -1
  20. package/dist-lib/engine/glHelpers.js +88 -0
  21. package/dist-lib/engine/std140.d.ts +47 -0
  22. package/dist-lib/engine/std140.d.ts.map +1 -0
  23. package/dist-lib/engine/std140.js +119 -0
  24. package/dist-lib/engine/types.d.ts +55 -5
  25. package/dist-lib/engine/types.d.ts.map +1 -1
  26. package/dist-lib/engine/types.js +1 -1
  27. package/dist-lib/index.d.ts +4 -3
  28. package/dist-lib/index.d.ts.map +1 -1
  29. package/dist-lib/index.js +2 -1
  30. package/dist-lib/layouts/SplitLayout.d.ts +2 -1
  31. package/dist-lib/layouts/SplitLayout.d.ts.map +1 -1
  32. package/dist-lib/layouts/SplitLayout.js +3 -0
  33. package/dist-lib/layouts/TabbedLayout.d.ts.map +1 -1
  34. package/dist-lib/layouts/UILayout.d.ts +55 -0
  35. package/dist-lib/layouts/UILayout.d.ts.map +1 -0
  36. package/dist-lib/layouts/UILayout.js +147 -0
  37. package/dist-lib/layouts/default.css +2 -2
  38. package/dist-lib/layouts/index.d.ts +11 -1
  39. package/dist-lib/layouts/index.d.ts.map +1 -1
  40. package/dist-lib/layouts/index.js +17 -1
  41. package/dist-lib/layouts/split.css +33 -31
  42. package/dist-lib/layouts/tabbed.css +127 -74
  43. package/dist-lib/layouts/types.d.ts +14 -3
  44. package/dist-lib/layouts/types.d.ts.map +1 -1
  45. package/dist-lib/main.js +33 -0
  46. package/dist-lib/project/configHelpers.d.ts +45 -0
  47. package/dist-lib/project/configHelpers.d.ts.map +1 -0
  48. package/dist-lib/project/configHelpers.js +196 -0
  49. package/dist-lib/project/generatedLoader.d.ts +2 -2
  50. package/dist-lib/project/generatedLoader.d.ts.map +1 -1
  51. package/dist-lib/project/generatedLoader.js +23 -5
  52. package/dist-lib/project/loadProject.d.ts +6 -6
  53. package/dist-lib/project/loadProject.d.ts.map +1 -1
  54. package/dist-lib/project/loadProject.js +396 -144
  55. package/dist-lib/project/loaderHelper.d.ts +4 -4
  56. package/dist-lib/project/loaderHelper.d.ts.map +1 -1
  57. package/dist-lib/project/loaderHelper.js +278 -116
  58. package/dist-lib/project/types.d.ts +292 -13
  59. package/dist-lib/project/types.d.ts.map +1 -1
  60. package/dist-lib/project/types.js +13 -1
  61. package/dist-lib/styles/base.css +5 -1
  62. package/dist-lib/uniforms/UniformControls.d.ts +60 -0
  63. package/dist-lib/uniforms/UniformControls.d.ts.map +1 -0
  64. package/dist-lib/uniforms/UniformControls.js +518 -0
  65. package/dist-lib/uniforms/UniformStore.d.ts +74 -0
  66. package/dist-lib/uniforms/UniformStore.d.ts.map +1 -0
  67. package/dist-lib/uniforms/UniformStore.js +145 -0
  68. package/dist-lib/uniforms/UniformsPanel.d.ts +53 -0
  69. package/dist-lib/uniforms/UniformsPanel.d.ts.map +1 -0
  70. package/dist-lib/uniforms/UniformsPanel.js +124 -0
  71. package/dist-lib/uniforms/index.d.ts +11 -0
  72. package/dist-lib/uniforms/index.d.ts.map +1 -0
  73. package/dist-lib/uniforms/index.js +8 -0
  74. package/package.json +1 -1
  75. package/src/app/App.ts +1469 -126
  76. package/src/app/app.css +349 -24
  77. package/src/app/types.ts +53 -5
  78. package/src/editor/EditorPanel.ts +5 -5
  79. package/src/editor/editor-panel.css +55 -32
  80. package/src/editor/prism-editor.css +16 -16
  81. package/src/embed.ts +1 -1
  82. package/src/engine/ShaderEngine.ts +1934 -0
  83. package/src/engine/glHelpers.ts +117 -0
  84. package/src/engine/std140.ts +136 -0
  85. package/src/engine/types.ts +69 -5
  86. package/src/index.ts +4 -3
  87. package/src/layouts/SplitLayout.ts +8 -3
  88. package/src/layouts/TabbedLayout.ts +3 -3
  89. package/src/layouts/UILayout.ts +185 -0
  90. package/src/layouts/default.css +2 -2
  91. package/src/layouts/index.ts +20 -1
  92. package/src/layouts/split.css +33 -31
  93. package/src/layouts/tabbed.css +127 -74
  94. package/src/layouts/types.ts +19 -3
  95. package/src/layouts/ui.css +289 -0
  96. package/src/main.ts +39 -1
  97. package/src/project/configHelpers.ts +225 -0
  98. package/src/project/generatedLoader.ts +27 -6
  99. package/src/project/loadProject.ts +459 -173
  100. package/src/project/loaderHelper.ts +377 -130
  101. package/src/project/types.ts +360 -14
  102. package/src/styles/base.css +5 -1
  103. package/src/styles/theme.css +292 -0
  104. package/src/uniforms/UniformControls.ts +660 -0
  105. package/src/uniforms/UniformStore.ts +166 -0
  106. package/src/uniforms/UniformsPanel.ts +163 -0
  107. package/src/uniforms/index.ts +13 -0
  108. package/src/uniforms/uniform-controls.css +342 -0
  109. package/src/uniforms/uniforms-panel.css +277 -0
  110. package/templates/shaders/example-buffer/config.json +1 -0
  111. package/dist-lib/engine/ShadertoyEngine.d.ts.map +0 -1
  112. package/dist-lib/engine/ShadertoyEngine.js +0 -704
  113. 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: #f8f8f8;
10
- border-bottom: 1px solid #e0e0e0;
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: #666;
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: #333;
35
+ color: var(--tab-text-hover);
36
36
  }
37
37
 
38
38
  .editor-tab-button.active {
39
- color: #000;
40
- border-bottom-color: #4a9eff;
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: #7c4dff;
44
+ color: var(--accent-secondary);
45
45
  }
46
46
 
47
47
  .editor-tab-button.image-tab.active {
48
- color: #7c4dff;
49
- border-bottom-color: #7c4dff;
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: transparent;
58
- border: 1px solid #ccc;
59
- color: #666;
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: #f0f0f0;
71
- border-color: #999;
72
- color: #333;
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: #e0e0e0;
92
+ background: var(--button-bg-hover);
77
93
  }
78
94
 
79
95
  .editor-copy-button.copied {
80
- background: #e8f5e9;
81
- border-color: #4caf50;
82
- color: #4caf50;
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: #4a9eff;
110
+ background: var(--recompile-bg);
95
111
  border: none;
96
- color: #fff;
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: #3a8eef;
124
+ background: var(--recompile-bg-hover);
109
125
  }
110
126
 
111
127
  .editor-recompile-button:active {
112
- background: #2a7edf;
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: #ffffff;
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: #ffffff;
137
- color: #000;
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: #f5f5f5;
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: 0 2px 8px rgba(0, 0, 0, 0.15);
184
+ box-shadow: var(--shadow-sm);
162
185
  }
163
186
 
164
187
  /* Error display */
165
188
  .editor-error-display {
166
- background: #fff0f0;
167
- color: #c00;
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 #fcc;
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: #ffffff;
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: #999;
21
- border-right: 1px solid #e0e0e0;
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: #000;
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: rgba(173, 214, 255, 0.4);
69
+ background: var(--code-selection);
70
70
  }
71
71
 
72
72
  .prism-editor-textarea::-moz-selection {
73
- background: rgba(173, 214, 255, 0.4);
73
+ background: var(--code-selection);
74
74
  }
75
75
 
76
76
  /* Highlighted code overlay */
77
77
  .prism-editor-highlight {
78
- background: #ffffff;
79
- color: #000;
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: #6a9955; }
93
- .prism-editor-highlight .token.keyword { color: #0000ff; }
94
- .prism-editor-highlight .token.string { color: #a31515; }
95
- .prism-editor-highlight .token.number { color: #098658; }
96
- .prism-editor-highlight .token.operator { color: #000000; }
97
- .prism-editor-highlight .token.function { color: #795e26; }
98
- .prism-editor-highlight .token.class-name { color: #267f99; }
99
- .prism-editor-highlight .token.punctuation { color: #000000; }
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); }
package/src/embed.ts CHANGED
@@ -47,7 +47,7 @@ export async function embed(options: EmbedOptions): Promise<EmbedResult> {
47
47
  return {
48
48
  app,
49
49
  destroy: () => {
50
- app.stop?.();
50
+ app.dispose();
51
51
  },
52
52
  };
53
53
  }