shaders 2.4.78 → 2.5.80
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/dist/core/index.d.ts +1 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +57 -51
- package/dist/core/presetRenderer.d.ts.map +1 -1
- package/dist/core/renderer.d.ts +5 -1
- package/dist/core/renderer.d.ts.map +1 -1
- package/dist/js/codegen.d.ts +1 -0
- package/dist/js/codegen.js +1 -0
- package/dist/js/createPreview.d.ts +19 -0
- package/dist/js/createPreview.d.ts.map +1 -0
- package/dist/js/createPreview.js +64 -0
- package/dist/js/createShader.d.ts +24 -0
- package/dist/js/createShader.d.ts.map +1 -0
- package/dist/js/createShader.js +132 -0
- package/dist/js/decode.d.ts +7 -0
- package/dist/js/decode.d.ts.map +1 -0
- package/dist/js/decode.js +22 -0
- package/dist/js/index.d.ts +6 -0
- package/dist/js/index.d.ts.map +1 -0
- package/dist/js/index.js +4 -0
- package/dist/js/types.d.ts +23 -0
- package/dist/js/types.d.ts.map +1 -0
- package/dist/js/utils/generatePresetCode.d.ts +13 -0
- package/dist/js/utils/generatePresetCode.d.ts.map +1 -0
- package/dist/js/utils/generatePresetCode.js +1248 -0
- package/dist/js/utils/generatePresetCode.template.d.ts +13 -0
- package/dist/js/utils/generatePresetCode.template.d.ts.map +1 -0
- package/dist/react/Shader.js +1 -1
- package/dist/react/utils/generatePresetCode.d.ts.map +1 -1
- package/dist/react/utils/generatePresetCode.js +42 -6
- package/dist/react/utils/generatePresetCode.template.d.ts.map +1 -1
- package/dist/solid/engine/Shader.js +1 -1
- package/dist/solid/utils/generatePresetCode.d.ts.map +1 -1
- package/dist/solid/utils/generatePresetCode.js +48 -4
- package/dist/solid/utils/generatePresetCode.template.d.ts.map +1 -1
- package/dist/svelte/engine/Preview.svelte.d.ts +11 -25
- package/dist/svelte/engine/PreviewRenderComponent.svelte.d.ts +5 -19
- package/dist/svelte/{generatePresetCode-Bpe8YcaW.js → generatePresetCode-BN1puRG_.js} +31 -4
- package/dist/svelte/index.js +41 -67
- package/dist/svelte/source/engine/Preview.svelte +49 -35
- package/dist/svelte/source/engine/PreviewRenderComponent.svelte +9 -5
- package/dist/svelte/utils/generatePresetCode.js +1 -1
- package/dist/vue/Shader.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/vue/utils/generatePresetCode.d.ts.map +1 -1
- package/dist/vue/utils/generatePresetCode.js +45 -8
- package/dist/vue/utils/generatePresetCode.template.d.ts.map +1 -1
- package/package.json +15 -1
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
2
|
import { onMount } from 'svelte'
|
|
3
|
+
import type { Snippet } from 'svelte'
|
|
3
4
|
|
|
4
5
|
import Shader from './Shader.svelte'
|
|
6
|
+
import RenderComponent from './PreviewRenderComponent.svelte'
|
|
5
7
|
// <<< SHADERS_PREVIEW_MAP:START >>>
|
|
6
8
|
import AngularBlur from '../components/AngularBlur.svelte'
|
|
7
9
|
import Ascii from '../components/Ascii.svelte'
|
|
@@ -258,39 +260,56 @@ function fetchAndDecode(url: string, key: string): Promise<ShaderDefinition | nu
|
|
|
258
260
|
|
|
259
261
|
// --- Props ---
|
|
260
262
|
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
263
|
+
interface Props {
|
|
264
|
+
shader?: string
|
|
265
|
+
presetId?: string
|
|
266
|
+
apiBaseUrl?: string
|
|
267
|
+
obfuscationKey?: string
|
|
268
|
+
watermarkText?: string
|
|
269
|
+
watermarkLink?: string
|
|
270
|
+
style?: string
|
|
271
|
+
[key: string]: any
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
const {
|
|
275
|
+
shader = undefined,
|
|
276
|
+
presetId = undefined,
|
|
277
|
+
apiBaseUrl = 'https://shaders.com',
|
|
278
|
+
obfuscationKey = 'shaders-preview-key',
|
|
279
|
+
watermarkText = 'Unlock your Shaders Pro license',
|
|
280
|
+
watermarkLink = 'https://shaders.com/dashboard?pricing=true',
|
|
281
|
+
style = undefined,
|
|
282
|
+
...restProps
|
|
283
|
+
}: Props = $props()
|
|
268
284
|
|
|
269
285
|
// --- Decode & Resolve ---
|
|
270
286
|
|
|
271
|
-
let
|
|
272
|
-
let
|
|
273
|
-
|
|
287
|
+
let fetchedDefinition: ShaderDefinition | null = $state(null)
|
|
288
|
+
let watermarkHovered = $state(false)
|
|
289
|
+
|
|
290
|
+
let resolvedDefinition: ShaderDefinition | null = $derived(fetchedDefinition ?? null)
|
|
274
291
|
|
|
275
292
|
// Fetch shader by token
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
293
|
+
$effect(() => {
|
|
294
|
+
if (shader) {
|
|
295
|
+
fetchedDefinition = null
|
|
296
|
+
fetchAndDecode(`${apiBaseUrl}/api/preview/shader/${shader}`, obfuscationKey)
|
|
297
|
+
.then(def => { fetchedDefinition = def })
|
|
298
|
+
} else if (!presetId) {
|
|
299
|
+
fetchedDefinition = null
|
|
300
|
+
}
|
|
301
|
+
})
|
|
283
302
|
|
|
284
303
|
// Fetch preset by ID
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
304
|
+
$effect(() => {
|
|
305
|
+
if (presetId) {
|
|
306
|
+
fetchedDefinition = null
|
|
307
|
+
fetchAndDecode(`${apiBaseUrl}/api/preview/preset/${presetId}`, obfuscationKey)
|
|
308
|
+
.then(def => { fetchedDefinition = def })
|
|
309
|
+
} else if (!shader) {
|
|
310
|
+
fetchedDefinition = null
|
|
311
|
+
}
|
|
312
|
+
})
|
|
294
313
|
|
|
295
314
|
// --- Licensing Warning ---
|
|
296
315
|
|
|
@@ -303,15 +322,10 @@ onMount(() => {
|
|
|
303
322
|
|
|
304
323
|
</script>
|
|
305
324
|
|
|
306
|
-
<script lang="ts" context="module">
|
|
307
|
-
// Recursive component for rendering nested shader components
|
|
308
|
-
import { default as RenderComponent } from './PreviewRenderComponent.svelte'
|
|
309
|
-
</script>
|
|
310
|
-
|
|
311
325
|
{#if resolvedDefinition}
|
|
312
|
-
<div class="shaders-preview" style="position: relative; width: 100%; height: 100%;{style ? ' ' + style : ''}" {
|
|
326
|
+
<div class="shaders-preview" style="position: relative; width: 100%; height: 100%;{style ? ' ' + style : ''}" {...restProps}>
|
|
313
327
|
<Shader
|
|
314
|
-
colorSpace={resolvedDefinition.colorSpace || 'p3-linear'}
|
|
328
|
+
colorSpace={resolvedDefinition.colorSpace || 'p3-linear'}
|
|
315
329
|
isPreview={true}
|
|
316
330
|
enablePerformanceTracking={true}
|
|
317
331
|
style="width: 100%; height: 100%;"
|
|
@@ -342,8 +356,8 @@ colorSpace={resolvedDefinition.colorSpace || 'p3-linear'}
|
|
|
342
356
|
text-shadow: 0 1px 3px rgba(0, 0, 0, 0.4);
|
|
343
357
|
transition: color 0.2s ease;
|
|
344
358
|
"
|
|
345
|
-
|
|
346
|
-
|
|
359
|
+
onmouseenter={() => watermarkHovered = true}
|
|
360
|
+
onmouseleave={() => watermarkHovered = false}
|
|
347
361
|
>
|
|
348
362
|
{watermarkText}
|
|
349
363
|
</a>
|
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
interface Props {
|
|
3
|
+
config: any
|
|
4
|
+
componentMap: Record<string, any>
|
|
5
|
+
structureVersion?: number
|
|
6
|
+
}
|
|
5
7
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
+
const { config, componentMap, structureVersion = undefined }: Props = $props()
|
|
9
|
+
|
|
10
|
+
const Component = $derived(componentMap[config.type])
|
|
11
|
+
const componentProps = $derived(config.props ? { ...config.props } : {})
|
|
8
12
|
</script>
|
|
9
13
|
|
|
10
14
|
{#if Component}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as generatePresetCode, t as availableComponents } from "../generatePresetCode-
|
|
1
|
+
import { n as generatePresetCode, t as availableComponents } from "../generatePresetCode-BN1puRG_.js";
|
|
2
2
|
export { availableComponents, generatePresetCode };
|
|
@@ -57,7 +57,7 @@ var Shader_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineC
|
|
|
57
57
|
const startTelemetryWhenReady = () => {
|
|
58
58
|
const checkRendering = () => {
|
|
59
59
|
if (rendererInstance.value.getPerformanceStats().fps > 0) {
|
|
60
|
-
telemetryCollector = startTelemetry(rendererInstance.value, "2.
|
|
60
|
+
telemetryCollector = startTelemetry(rendererInstance.value, "2.5.80", props.disableTelemetry, props.isPreview);
|
|
61
61
|
if (telemetryCollector) telemetryCollector.start();
|
|
62
62
|
telemetryStartTimeout = null;
|
|
63
63
|
} else telemetryStartTimeout = setTimeout(checkRendering, 500);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generatePresetCode.d.ts","sourceRoot":"","sources":["../../src/utils/generatePresetCode.ts"],"names":[],"mappings":"AAAA,UAAU,eAAe;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC3B,QAAQ,CAAC,EAAE,eAAe,EAAE,CAAA;CAC7B;AAED,UAAU,YAAY;IACpB,UAAU,EAAE,eAAe,EAAE,CAAA;CAC9B;
|
|
1
|
+
{"version":3,"file":"generatePresetCode.d.ts","sourceRoot":"","sources":["../../src/utils/generatePresetCode.ts"],"names":[],"mappings":"AAAA,UAAU,eAAe;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC3B,QAAQ,CAAC,EAAE,eAAe,EAAE,CAAA;CAC7B;AAED,UAAU,YAAY;IACpB,UAAU,EAAE,eAAe,EAAE,CAAA;CAC9B;AAotCD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,YAAY,EAAE,UAAU,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,MAAM,CAiFlG;AAGD,eAAO,MAAM,mBAAmB,UA4F/B,CAAA"}
|
|
@@ -1082,7 +1082,7 @@ function isPropMapValue(value) {
|
|
|
1082
1082
|
function generatePropString(props, componentType, indent = " ") {
|
|
1083
1083
|
return Object.entries(props).sort(([a], [b]) => a.localeCompare(b)).filter(([key, value]) => {
|
|
1084
1084
|
if (key === "maskType" && value === "alpha") return false;
|
|
1085
|
-
if (
|
|
1085
|
+
if (key === "shape" && props.shapeSdfUrl) return false;
|
|
1086
1086
|
if (key === "transform" && typeof value === "object") {
|
|
1087
1087
|
if (Object.keys(DEFAULT_TRANSFORM).every((k) => value[k] === DEFAULT_TRANSFORM[k])) return false;
|
|
1088
1088
|
}
|
|
@@ -1101,23 +1101,38 @@ function generatePropString(props, componentType, indent = " ") {
|
|
|
1101
1101
|
const nonDefaultKeys = {};
|
|
1102
1102
|
for (const k in value) if (value[k] !== DEFAULT_TRANSFORM[k]) nonDefaultKeys[k] = value[k];
|
|
1103
1103
|
const keys = Object.keys(nonDefaultKeys).sort();
|
|
1104
|
-
if (keys.length > 1) return `:${kebabKey}="{\n${indent} ${keys.map((k) =>
|
|
1104
|
+
if (keys.length > 1) return `:${kebabKey}="{\n${indent} ${keys.map((k) => `${k}: ${typeof nonDefaultKeys[k] === "string" ? `'${nonDefaultKeys[k]}'` : nonDefaultKeys[k]}`).join(`,\n${indent} `)}\n${indent} }"`;
|
|
1105
1105
|
else if (keys.length === 1) {
|
|
1106
1106
|
const k = keys[0];
|
|
1107
1107
|
const v = nonDefaultKeys[k];
|
|
1108
|
-
return `:${kebabKey}="{
|
|
1108
|
+
return `:${kebabKey}="{ ${k}: ${typeof v === "string" ? `'${v}'` : v} }"`;
|
|
1109
1109
|
}
|
|
1110
1110
|
}
|
|
1111
1111
|
if (isPropMapValue(value)) return `:${kebabKey}="{\n${indent} ${Object.keys(value).map((k) => {
|
|
1112
1112
|
const v = value[k];
|
|
1113
1113
|
return `${k}: ${typeof v === "string" ? `'${v}'` : v}`;
|
|
1114
1114
|
}).join(`,\n${indent} `)}\n${indent} }"`;
|
|
1115
|
-
if (typeof value === "string")
|
|
1116
|
-
|
|
1115
|
+
if (typeof value === "string") {
|
|
1116
|
+
if (value.startsWith("{") && value.endsWith("}")) try {
|
|
1117
|
+
const parsed = JSON.parse(value);
|
|
1118
|
+
if (typeof parsed === "object" && parsed !== null) {
|
|
1119
|
+
const keys = Object.keys(parsed);
|
|
1120
|
+
if (keys.length === 0) return `:${kebabKey}="{}"`;
|
|
1121
|
+
if (keys.length > 1) return `:${kebabKey}="{\n${indent} ${keys.map((k) => `${k}: ${typeof parsed[k] === "string" ? `'${parsed[k]}'` : parsed[k]}`).join(`,\n${indent} `)}\n${indent} }"`;
|
|
1122
|
+
const [pk] = keys;
|
|
1123
|
+
return `:${kebabKey}="{ ${pk}: ${typeof parsed[pk] === "string" ? `'${parsed[pk]}'` : parsed[pk]} }"`;
|
|
1124
|
+
}
|
|
1125
|
+
} catch {}
|
|
1126
|
+
return `${kebabKey}="${value}"`;
|
|
1127
|
+
} else if (value !== null && typeof value === "object") {
|
|
1117
1128
|
const roundedValue = { ...value };
|
|
1118
1129
|
if ("x" in roundedValue && typeof roundedValue.x === "number") roundedValue.x = Math.round(roundedValue.x * 100) / 100;
|
|
1119
1130
|
if ("y" in roundedValue && typeof roundedValue.y === "number") roundedValue.y = Math.round(roundedValue.y * 100) / 100;
|
|
1120
|
-
|
|
1131
|
+
const keys = Object.keys(roundedValue);
|
|
1132
|
+
if (keys.length === 0) return `:${kebabKey}="{}"`;
|
|
1133
|
+
if (keys.length > 1) return `:${kebabKey}="{\n${indent} ${keys.map((k) => `${k}: ${typeof roundedValue[k] === "string" ? `'${roundedValue[k]}'` : roundedValue[k]}`).join(`,\n${indent} `)}\n${indent} }"`;
|
|
1134
|
+
const [rk] = keys;
|
|
1135
|
+
return `:${kebabKey}="{ ${rk}: ${typeof roundedValue[rk] === "string" ? `'${roundedValue[rk]}'` : roundedValue[rk]} }"`;
|
|
1121
1136
|
} else return `:${kebabKey}="${value}"`;
|
|
1122
1137
|
}).join("\n" + indent + " ");
|
|
1123
1138
|
}
|
|
@@ -1139,7 +1154,15 @@ function isIdReferenced(id, allComponents) {
|
|
|
1139
1154
|
});
|
|
1140
1155
|
}
|
|
1141
1156
|
function generatePresetCode(preset, colorSpace) {
|
|
1142
|
-
const
|
|
1157
|
+
const componentTypes = /* @__PURE__ */ new Set();
|
|
1158
|
+
function collectTypes(components) {
|
|
1159
|
+
for (const config of components) {
|
|
1160
|
+
componentTypes.add(config.type);
|
|
1161
|
+
if (config.children) collectTypes(config.children);
|
|
1162
|
+
}
|
|
1163
|
+
}
|
|
1164
|
+
collectTypes(preset.components);
|
|
1165
|
+
const generateComponentString = (config, indent = " ") => {
|
|
1143
1166
|
const propString = config.props ? generatePropString(config.props, config.type, indent) : "";
|
|
1144
1167
|
let idString = "";
|
|
1145
1168
|
if (config.id) {
|
|
@@ -1154,7 +1177,21 @@ function generatePresetCode(preset, colorSpace) {
|
|
|
1154
1177
|
else return `${indent}<${config.type}/>`;
|
|
1155
1178
|
};
|
|
1156
1179
|
const componentStrings = preset.components.map((config) => generateComponentString(config)).join("\n");
|
|
1157
|
-
|
|
1180
|
+
const shaderProps = colorSpace && colorSpace !== "p3-linear" ? ` color-space="${colorSpace}"` : "";
|
|
1181
|
+
const allImports = ["Shader", ...Array.from(componentTypes).sort()];
|
|
1182
|
+
const uniqueImports = [...new Set(allImports)];
|
|
1183
|
+
const imports = uniqueImports.length > 3 ? uniqueImports.join(",\n ") : uniqueImports.join(", ");
|
|
1184
|
+
return [
|
|
1185
|
+
"<script setup lang=\"ts\">",
|
|
1186
|
+
uniqueImports.length > 3 ? `import {\n ${imports}\n} from 'shaders/vue'` : `import { ${imports} } from 'shaders/vue'`,
|
|
1187
|
+
"<\/script>",
|
|
1188
|
+
"",
|
|
1189
|
+
"<template>",
|
|
1190
|
+
` <Shader${shaderProps}>`,
|
|
1191
|
+
componentStrings,
|
|
1192
|
+
" </Shader>",
|
|
1193
|
+
"</template>"
|
|
1194
|
+
].join("\n");
|
|
1158
1195
|
}
|
|
1159
1196
|
const availableComponents = [
|
|
1160
1197
|
"AngularBlur",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generatePresetCode.template.d.ts","sourceRoot":"","sources":["../../src/utils/generatePresetCode.template.ts"],"names":[],"mappings":"AAAA,UAAU,eAAe;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC3B,QAAQ,CAAC,EAAE,eAAe,EAAE,CAAA;CAC7B;AAED,UAAU,YAAY;IACpB,UAAU,EAAE,eAAe,EAAE,CAAA;CAC9B;
|
|
1
|
+
{"version":3,"file":"generatePresetCode.template.d.ts","sourceRoot":"","sources":["../../src/utils/generatePresetCode.template.ts"],"names":[],"mappings":"AAAA,UAAU,eAAe;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC3B,QAAQ,CAAC,EAAE,eAAe,EAAE,CAAA;CAC7B;AAED,UAAU,YAAY;IACpB,UAAU,EAAE,eAAe,EAAE,CAAA;CAC9B;AA2KD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,YAAY,EAAE,UAAU,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,MAAM,CAiFlG;AAGD,eAAO,MAAM,mBAAmB,OAG/B,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "shaders",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.5.80",
|
|
4
4
|
"description": "Shader magic for modern frontends",
|
|
5
5
|
"author": "Shader Effects Inc.",
|
|
6
6
|
"homepage": "https://shaders.com/",
|
|
@@ -55,6 +55,14 @@
|
|
|
55
55
|
"types": "./dist/pixi/index.d.ts",
|
|
56
56
|
"import": "./dist/pixi/index.js"
|
|
57
57
|
},
|
|
58
|
+
"./js": {
|
|
59
|
+
"types": "./dist/js/index.d.ts",
|
|
60
|
+
"import": "./dist/js/index.js"
|
|
61
|
+
},
|
|
62
|
+
"./js/codegen": {
|
|
63
|
+
"types": "./dist/js/codegen.d.ts",
|
|
64
|
+
"import": "./dist/js/codegen.js"
|
|
65
|
+
},
|
|
58
66
|
"./core": {
|
|
59
67
|
"types": "./dist/core/index.d.ts",
|
|
60
68
|
"import": "./dist/core/index.js",
|
|
@@ -570,6 +578,12 @@
|
|
|
570
578
|
"pixi": [
|
|
571
579
|
"./dist/pixi/index.d.ts"
|
|
572
580
|
],
|
|
581
|
+
"js": [
|
|
582
|
+
"./dist/js/index.d.ts"
|
|
583
|
+
],
|
|
584
|
+
"js/codegen": [
|
|
585
|
+
"./dist/js/codegen.d.ts"
|
|
586
|
+
],
|
|
573
587
|
"core": [
|
|
574
588
|
"./dist/core/index.d.ts"
|
|
575
589
|
],
|