@tsparticles/confetti 4.3.1 → 4.4.0
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/browser/confetti.js +2 -2
- package/browser/confetti.lazy.js +2 -2
- package/cjs/confetti.js +2 -2
- package/cjs/confetti.lazy.js +2 -2
- package/esm/confetti.js +2 -2
- package/esm/confetti.lazy.js +2 -2
- package/package.json +17 -17
- package/report.html +1 -1
- package/tsparticles.confetti.bundle.js +290 -82
- package/tsparticles.confetti.bundle.min.js +1 -1
- package/tsparticles.confetti.js +3 -3
- package/tsparticles.confetti.min.js +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
(function(g){g.__tsParticlesInternals=g.__tsParticlesInternals||{};g.__tsParticlesInternals.bundles=g.__tsParticlesInternals.bundles||{};g.__tsParticlesInternals.effects=g.__tsParticlesInternals.effects||{};g.__tsParticlesInternals.engine=g.__tsParticlesInternals.engine||{};g.__tsParticlesInternals.interactions=g.__tsParticlesInternals.interactions||{};g.__tsParticlesInternals.palettes=g.__tsParticlesInternals.palettes||{};g.__tsParticlesInternals.paths=g.__tsParticlesInternals.paths||{};g.__tsParticlesInternals.plugins=g.__tsParticlesInternals.plugins||{};g.__tsParticlesInternals.plugins=g.__tsParticlesInternals.plugins||{};g.__tsParticlesInternals.plugins.emittersShapes=g.__tsParticlesInternals.plugins.emittersShapes||{};g.__tsParticlesInternals.presets=g.__tsParticlesInternals.presets||{};g.__tsParticlesInternals.shapes=g.__tsParticlesInternals.shapes||{};g.__tsParticlesInternals.updaters=g.__tsParticlesInternals.updaters||{};g.__tsParticlesInternals.utils=g.__tsParticlesInternals.utils||{};g.__tsParticlesInternals.canvas=g.__tsParticlesInternals.canvas||{};g.__tsParticlesInternals.canvas=g.__tsParticlesInternals.canvas||{};g.__tsParticlesInternals.canvas.utils=g.__tsParticlesInternals.canvas.utils||{};g.__tsParticlesInternals.path=g.__tsParticlesInternals.path||{};g.__tsParticlesInternals.path=g.__tsParticlesInternals.path||{};g.__tsParticlesInternals.path.utils=g.__tsParticlesInternals.path.utils||{};var __tsProxyFactory=typeof Proxy!=="undefined"?function(obj){return new Proxy(obj,{get:function(target,key){if(!(key in target)){target[key]={};}return target[key];}});}:function(obj){return obj;};g.__tsParticlesInternals.bundles=__tsProxyFactory(g.__tsParticlesInternals.bundles);g.__tsParticlesInternals.effects=__tsProxyFactory(g.__tsParticlesInternals.effects);g.__tsParticlesInternals.interactions=__tsProxyFactory(g.__tsParticlesInternals.interactions);g.__tsParticlesInternals.palettes=__tsProxyFactory(g.__tsParticlesInternals.palettes);g.__tsParticlesInternals.paths=__tsProxyFactory(g.__tsParticlesInternals.paths);g.__tsParticlesInternals.plugins=__tsProxyFactory(g.__tsParticlesInternals.plugins);g.__tsParticlesInternals.plugins.emittersShapes=__tsProxyFactory(g.__tsParticlesInternals.plugins.emittersShapes);g.__tsParticlesInternals.presets=__tsProxyFactory(g.__tsParticlesInternals.presets);g.__tsParticlesInternals.shapes=__tsProxyFactory(g.__tsParticlesInternals.shapes);g.__tsParticlesInternals.updaters=__tsProxyFactory(g.__tsParticlesInternals.updaters);g.__tsParticlesInternals.utils=__tsProxyFactory(g.__tsParticlesInternals.utils);g.__tsParticlesInternals.canvas=__tsProxyFactory(g.__tsParticlesInternals.canvas);g.__tsParticlesInternals.path=__tsProxyFactory(g.__tsParticlesInternals.path);g.tsparticlesInternalExports=g.tsparticlesInternalExports||{};})(typeof globalThis!=="undefined"?globalThis:typeof window!=="undefined"?window:this);
|
|
2
|
-
/* tsParticles v4.
|
|
2
|
+
/* tsParticles v4.4.0 */
|
|
3
3
|
(function (global, factory) {
|
|
4
4
|
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
|
|
5
5
|
typeof define === 'function' && define.amd ? define(['exports'], factory) :
|
|
@@ -332,6 +332,9 @@
|
|
|
332
332
|
})(exports.PixelMode || (exports.PixelMode = {}));
|
|
333
333
|
|
|
334
334
|
const minRadius = 0;
|
|
335
|
+
function isForbiddenKey(key) {
|
|
336
|
+
return key === "__proto__" || key === "constructor" || key === "prototype";
|
|
337
|
+
}
|
|
335
338
|
function hasMatchMedia() {
|
|
336
339
|
return typeof matchMedia !== "undefined";
|
|
337
340
|
}
|
|
@@ -407,7 +410,7 @@
|
|
|
407
410
|
if (!hasNested) {
|
|
408
411
|
const sourceDict = source, destDict = destination;
|
|
409
412
|
for (const key of sourceKeys) {
|
|
410
|
-
if (key
|
|
413
|
+
if (isForbiddenKey(key)) {
|
|
411
414
|
continue;
|
|
412
415
|
}
|
|
413
416
|
const v = sourceDict[key];
|
|
@@ -418,7 +421,7 @@
|
|
|
418
421
|
continue;
|
|
419
422
|
}
|
|
420
423
|
for (const key of sourceKeys) {
|
|
421
|
-
if (key
|
|
424
|
+
if (isForbiddenKey(key)) {
|
|
422
425
|
continue;
|
|
423
426
|
}
|
|
424
427
|
const sourceDict = source, destDict = destination, value = sourceDict[key];
|
|
@@ -877,7 +880,7 @@
|
|
|
877
880
|
return this.#domArray;
|
|
878
881
|
}
|
|
879
882
|
get version() {
|
|
880
|
-
return "4.
|
|
883
|
+
return "4.4.0";
|
|
881
884
|
}
|
|
882
885
|
addEventListener(type, listener) {
|
|
883
886
|
this.#eventDispatcher.addEventListener(type, listener);
|
|
@@ -958,6 +961,10 @@
|
|
|
958
961
|
}
|
|
959
962
|
|
|
960
963
|
function initEngine() {
|
|
964
|
+
const existing = globalThis.tsParticles;
|
|
965
|
+
if (existing?.pluginManager) {
|
|
966
|
+
return existing;
|
|
967
|
+
}
|
|
961
968
|
return new Engine();
|
|
962
969
|
}
|
|
963
970
|
|
|
@@ -1055,6 +1062,15 @@
|
|
|
1055
1062
|
AnimationMode["random"] = "random";
|
|
1056
1063
|
})(exports.AnimationMode || (exports.AnimationMode = {}));
|
|
1057
1064
|
|
|
1065
|
+
exports.HdrMode = void 0;
|
|
1066
|
+
(function (HdrMode) {
|
|
1067
|
+
HdrMode["standard"] = "standard";
|
|
1068
|
+
HdrMode["natural"] = "natural";
|
|
1069
|
+
HdrMode["vivid"] = "vivid";
|
|
1070
|
+
HdrMode["cinematic"] = "cinematic";
|
|
1071
|
+
HdrMode["dynamic"] = "dynamic";
|
|
1072
|
+
})(exports.HdrMode || (exports.HdrMode = {}));
|
|
1073
|
+
|
|
1058
1074
|
exports.LimitMode = void 0;
|
|
1059
1075
|
(function (LimitMode) {
|
|
1060
1076
|
LimitMode["delete"] = "delete";
|
|
@@ -1160,7 +1176,12 @@
|
|
|
1160
1176
|
}
|
|
1161
1177
|
function loadExtendProperty(obj, key, value) {
|
|
1162
1178
|
if (value !== undefined) {
|
|
1163
|
-
|
|
1179
|
+
const keyStr = key;
|
|
1180
|
+
if (keyStr === "__proto__" || keyStr === "constructor" || keyStr === "prototype") {
|
|
1181
|
+
return;
|
|
1182
|
+
}
|
|
1183
|
+
const objRecord = obj, currentValue = Object.prototype.hasOwnProperty.call(objRecord, keyStr) ? objRecord[keyStr] : {};
|
|
1184
|
+
objRecord[keyStr] = deepExtend(currentValue, value);
|
|
1164
1185
|
}
|
|
1165
1186
|
}
|
|
1166
1187
|
function loadOptionProperty(obj, key, optionClass, ...sources) {
|
|
@@ -1315,6 +1336,29 @@
|
|
|
1315
1336
|
}
|
|
1316
1337
|
}
|
|
1317
1338
|
|
|
1339
|
+
const defaultPeakNits = 400, minPeakNits = 0, toStringValue = (value) => String(value);
|
|
1340
|
+
class HDROptions extends OptionLoader {
|
|
1341
|
+
enable = true;
|
|
1342
|
+
mode = exports.HdrMode.standard;
|
|
1343
|
+
peakNits = defaultPeakNits;
|
|
1344
|
+
doLoad(data) {
|
|
1345
|
+
if (data.enable !== undefined && !isBoolean(data.enable)) {
|
|
1346
|
+
throw new Error(`Invalid HDR "enable" value: expected a boolean, got "${String(data.enable)}"`);
|
|
1347
|
+
}
|
|
1348
|
+
if (data.mode !== undefined &&
|
|
1349
|
+
(typeof data.mode !== "string" || !Object.values(exports.HdrMode).includes(data.mode))) {
|
|
1350
|
+
throw new Error(`Invalid HDR "mode" value: expected one of ${Object.values(exports.HdrMode).join(", ")}, got "${toStringValue(data.mode)}"`);
|
|
1351
|
+
}
|
|
1352
|
+
if (data.peakNits !== undefined &&
|
|
1353
|
+
(!isNumber(data.peakNits) || !Number.isFinite(data.peakNits) || data.peakNits <= minPeakNits)) {
|
|
1354
|
+
throw new Error(`Invalid HDR "peakNits" value: expected a positive number, got "${String(data.peakNits)}"`);
|
|
1355
|
+
}
|
|
1356
|
+
loadProperty(this, "enable", data.enable);
|
|
1357
|
+
loadProperty(this, "mode", data.mode);
|
|
1358
|
+
loadProperty(this, "peakNits", data.peakNits);
|
|
1359
|
+
}
|
|
1360
|
+
}
|
|
1361
|
+
|
|
1318
1362
|
class ResizeEvent extends OptionLoader {
|
|
1319
1363
|
delay = 0.5;
|
|
1320
1364
|
enable = true;
|
|
@@ -1758,7 +1802,7 @@
|
|
|
1758
1802
|
duration = 0;
|
|
1759
1803
|
fpsLimit = 120;
|
|
1760
1804
|
fullScreen;
|
|
1761
|
-
hdr
|
|
1805
|
+
hdr;
|
|
1762
1806
|
key;
|
|
1763
1807
|
name;
|
|
1764
1808
|
palette;
|
|
@@ -1778,6 +1822,7 @@
|
|
|
1778
1822
|
this.#container = container;
|
|
1779
1823
|
this.background = new Background();
|
|
1780
1824
|
this.fullScreen = new FullScreen();
|
|
1825
|
+
this.hdr = new HDROptions();
|
|
1781
1826
|
this.particles = loadParticlesOptions(this.#pluginManager, this.#container);
|
|
1782
1827
|
this.resize = new ResizeEvent();
|
|
1783
1828
|
}
|
|
@@ -1800,7 +1845,15 @@
|
|
|
1800
1845
|
loadProperty(this, "detectRetina", data.detectRetina);
|
|
1801
1846
|
loadRangeProperty(this, "duration", data.duration);
|
|
1802
1847
|
loadProperty(this, "fpsLimit", data.fpsLimit);
|
|
1803
|
-
|
|
1848
|
+
const hdrData = data.hdr;
|
|
1849
|
+
if (isBoolean(hdrData)) {
|
|
1850
|
+
this.hdr.enable = hdrData;
|
|
1851
|
+
this.hdr.mode = exports.HdrMode.standard;
|
|
1852
|
+
this.hdr.peakNits = 400;
|
|
1853
|
+
}
|
|
1854
|
+
else {
|
|
1855
|
+
this.hdr.load(hdrData);
|
|
1856
|
+
}
|
|
1804
1857
|
loadProperty(this, "pauseOnBlur", data.pauseOnBlur);
|
|
1805
1858
|
loadProperty(this, "pauseOnOutsideViewport", data.pauseOnOutsideViewport);
|
|
1806
1859
|
loadProperty(this, "zLayers", data.zLayers);
|
|
@@ -1843,7 +1896,7 @@
|
|
|
1843
1896
|
}
|
|
1844
1897
|
}
|
|
1845
1898
|
|
|
1846
|
-
const styleCache = new Map(), maxStyleCacheSize = 2000, rgbFixedPrecision = 2, hslFixedPrecision = 2, hdrRgbFixedPrecision = 4, hdrHslFixedPrecision = 4, sdrReferenceWhiteNits = 203,
|
|
1899
|
+
const styleCache = new Map(), maxStyleCacheSize = 2000, rgbFixedPrecision = 2, hslFixedPrecision = 2, hdrRgbFixedPrecision = 4, hdrHslFixedPrecision = 4, sdrReferenceWhiteNits = 203, acesA = 2.51, acesB = 0.03, acesC = 2.43, acesD = 0.59, acesE = 0.14, saturationBoost = 1.15, lightnessBoost = 1.05, temperatureR = 1.05, temperatureB = 0.95, contrastFactor = 1.1, luminanceR = 0.2126, luminanceG = 0.7152, luminanceB = 0.0722, dynamicLuminanceFactor = 2, channelCount = 3, srgbThreshold = 0.04045, srgbDivisor = 12.92, srgbOffset = 0.055, srgbScale = 1.055, srgbExponent = 2.4, linearThreshold = 0.0031308, linearScale = 12.92;
|
|
1847
1900
|
function getCachedStyle(key, generator) {
|
|
1848
1901
|
let cached = styleCache.get(key);
|
|
1849
1902
|
if (!cached) {
|
|
@@ -1855,6 +1908,48 @@
|
|
|
1855
1908
|
}
|
|
1856
1909
|
return cached;
|
|
1857
1910
|
}
|
|
1911
|
+
function acesFilmic(x) {
|
|
1912
|
+
return clamp((x * (acesA * x + acesB)) / (x * (acesC * x + acesD) + acesE), none, one);
|
|
1913
|
+
}
|
|
1914
|
+
function srgbToLinear(c) {
|
|
1915
|
+
return c <= srgbThreshold ? c / srgbDivisor : Math.pow((c + srgbOffset) / srgbScale, srgbExponent);
|
|
1916
|
+
}
|
|
1917
|
+
function linearToSrgb(c) {
|
|
1918
|
+
return c <= linearThreshold ? c * linearScale : srgbScale * Math.pow(c, one / srgbExponent) - srgbOffset;
|
|
1919
|
+
}
|
|
1920
|
+
function applyHdrModeAdjustments(r, g, b, mode, maxChannel) {
|
|
1921
|
+
switch (mode) {
|
|
1922
|
+
case exports.HdrMode.vivid: {
|
|
1923
|
+
const avg = (r + g + b) / channelCount;
|
|
1924
|
+
return {
|
|
1925
|
+
b: clamp(clamp(avg + (b - avg) * saturationBoost, none, maxChannel) * lightnessBoost, none, maxChannel),
|
|
1926
|
+
g: clamp(clamp(avg + (g - avg) * saturationBoost, none, maxChannel) * lightnessBoost, none, maxChannel),
|
|
1927
|
+
r: clamp(clamp(avg + (r - avg) * saturationBoost, none, maxChannel) * lightnessBoost, none, maxChannel),
|
|
1928
|
+
};
|
|
1929
|
+
}
|
|
1930
|
+
case exports.HdrMode.cinematic: {
|
|
1931
|
+
const tempR = r * temperatureR, tempB = b * temperatureB, avg = (tempR + g + tempB) / channelCount;
|
|
1932
|
+
return {
|
|
1933
|
+
b: clamp(avg + (tempB - avg) * contrastFactor, none, maxChannel),
|
|
1934
|
+
g: clamp(avg + (g - avg) * contrastFactor, none, maxChannel),
|
|
1935
|
+
r: clamp(avg + (tempR - avg) * contrastFactor, none, maxChannel),
|
|
1936
|
+
};
|
|
1937
|
+
}
|
|
1938
|
+
case exports.HdrMode.dynamic: {
|
|
1939
|
+
const luminance = luminanceR * r + luminanceG * g + luminanceB * b, vividWeight = Math.min(one, luminance * dynamicLuminanceFactor), naturalWeight = one - vividWeight, avg = (r + g + b) / channelCount, vividR = clamp(avg + (r - avg) * saturationBoost, none, maxChannel) * lightnessBoost, vividG = clamp(avg + (g - avg) * saturationBoost, none, maxChannel) * lightnessBoost, vividB = clamp(avg + (b - avg) * saturationBoost, none, maxChannel) * lightnessBoost;
|
|
1940
|
+
return {
|
|
1941
|
+
b: clamp(b * naturalWeight + vividB * vividWeight, none, maxChannel),
|
|
1942
|
+
g: clamp(g * naturalWeight + vividG * vividWeight, none, maxChannel),
|
|
1943
|
+
r: clamp(r * naturalWeight + vividR * vividWeight, none, maxChannel),
|
|
1944
|
+
};
|
|
1945
|
+
}
|
|
1946
|
+
case exports.HdrMode.standard:
|
|
1947
|
+
return { b, g, r };
|
|
1948
|
+
case exports.HdrMode.natural:
|
|
1949
|
+
default:
|
|
1950
|
+
return { b, g, r };
|
|
1951
|
+
}
|
|
1952
|
+
}
|
|
1858
1953
|
function stringToRgba(pluginManager, input) {
|
|
1859
1954
|
if (!input) {
|
|
1860
1955
|
return;
|
|
@@ -2022,30 +2117,65 @@
|
|
|
2022
2117
|
r: getRgbInRangeValue(),
|
|
2023
2118
|
};
|
|
2024
2119
|
}
|
|
2025
|
-
function getStyleFromRgb(color, hdr, opacity) {
|
|
2026
|
-
const rgbPrecision = hdr ? hdrRgbFixedPrecision : rgbFixedPrecision, op = opacity ?? defaultOpacity$2, key =
|
|
2027
|
-
|
|
2120
|
+
function getStyleFromRgb(color, hdr, opacity, peakNits, mode) {
|
|
2121
|
+
const rgbPrecision = hdr ? hdrRgbFixedPrecision : rgbFixedPrecision, op = opacity ?? defaultOpacity$2, key = hdr
|
|
2122
|
+
? `rgb-${color.r.toFixed(rgbPrecision)}-${color.g.toFixed(rgbPrecision)}-${color.b.toFixed(rgbPrecision)}-hdr-${op.toString()}-${(peakNits ?? maxNits).toString()}-${mode ?? exports.HdrMode.standard}`
|
|
2123
|
+
: `rgb-${color.r.toFixed(rgbPrecision)}-${color.g.toFixed(rgbPrecision)}-${color.b.toFixed(rgbPrecision)}-sdr-${op.toString()}`;
|
|
2124
|
+
return getCachedStyle(key, () => hdr ? getHdrStyleFromRgb(color, opacity, peakNits, mode) : getSdrStyleFromRgb(color, opacity));
|
|
2028
2125
|
}
|
|
2029
|
-
function getHdrStyleFromRgb(color, opacity, peakNits = maxNits) {
|
|
2030
|
-
const headroom = peakNits / sdrReferenceWhiteNits;
|
|
2031
|
-
return `color(display-p3 ${
|
|
2126
|
+
function getHdrStyleFromRgb(color, opacity, peakNits = maxNits, mode = exports.HdrMode.standard) {
|
|
2127
|
+
const headroom = peakNits / sdrReferenceWhiteNits, middleGray = 0.18, mapped = hdrToneMapColor(color, headroom, middleGray, mode);
|
|
2128
|
+
return `color(display-p3 ${mapped.r.toString()} ${mapped.g.toString()} ${mapped.b.toString()} / ${(opacity ?? defaultOpacity$2).toString()})`;
|
|
2129
|
+
}
|
|
2130
|
+
function hdrToneMapColor(color, headroom, middleGray, mode) {
|
|
2131
|
+
const rNorm = color.r / rgbMax, gNorm = color.g / rgbMax, bNorm = color.b / rgbMax;
|
|
2132
|
+
if (mode !== exports.HdrMode.natural && mode !== exports.HdrMode.vivid && mode !== exports.HdrMode.cinematic && mode !== exports.HdrMode.dynamic) {
|
|
2133
|
+
return { b: bNorm, g: gNorm, r: rNorm };
|
|
2134
|
+
}
|
|
2135
|
+
const maxChannel = Math.max(one, headroom), luminance = luminanceR * rNorm + luminanceG * gNorm + luminanceB * bNorm, mappedLuminance = hdrToneMap(luminance, headroom, middleGray), scale = luminance > none ? mappedLuminance / luminance : one;
|
|
2136
|
+
return applyHdrModeAdjustments(clamp(rNorm * scale, none, maxChannel), clamp(gNorm * scale, none, maxChannel), clamp(bNorm * scale, none, maxChannel), mode, maxChannel);
|
|
2137
|
+
}
|
|
2138
|
+
function hdrToneMap(normalized, headroom, middleGray) {
|
|
2139
|
+
if (normalized <= middleGray) {
|
|
2140
|
+
return acesFilmic(normalized);
|
|
2141
|
+
}
|
|
2142
|
+
const expanded = normalized + (normalized - middleGray) * (headroom - one);
|
|
2143
|
+
return acesFilmic(expanded);
|
|
2032
2144
|
}
|
|
2033
2145
|
function getSdrStyleFromRgb(color, opacity) {
|
|
2034
2146
|
return `rgba(${color.r.toString()}, ${color.g.toString()}, ${color.b.toString()}, ${(opacity ?? defaultOpacity$2).toString()})`;
|
|
2035
2147
|
}
|
|
2036
|
-
function getStyleFromHsl(color, hdr, opacity) {
|
|
2037
|
-
const hslPrecision = hdr ? hdrHslFixedPrecision : hslFixedPrecision, op = opacity ?? defaultOpacity$2, key =
|
|
2148
|
+
function getStyleFromHsl(color, hdr, opacity, peakNits, mode) {
|
|
2149
|
+
const hslPrecision = hdr ? hdrHslFixedPrecision : hslFixedPrecision, op = opacity ?? defaultOpacity$2, key = hdr
|
|
2150
|
+
? `hsl-${color.h.toFixed(hslPrecision)}-${color.s.toFixed(hslPrecision)}-${color.l.toFixed(hslPrecision)}-hdr-${op.toString()}-${(peakNits ?? maxNits).toString()}-${mode ?? exports.HdrMode.standard}`
|
|
2151
|
+
: `hsl-${color.h.toFixed(hslPrecision)}-${color.s.toFixed(hslPrecision)}-${color.l.toFixed(hslPrecision)}-sdr-${op.toString()}`;
|
|
2038
2152
|
return getCachedStyle(key, () => hdr
|
|
2039
|
-
? getStyleFromRgb(hslToRgbFloat(color), true, opacity)
|
|
2153
|
+
? getStyleFromRgb(hslToRgbFloat(color), true, opacity, peakNits, mode)
|
|
2040
2154
|
: `hsla(${color.h.toString()}, ${color.s.toString()}%, ${color.l.toString()}%, ${op.toString()})`);
|
|
2041
2155
|
}
|
|
2042
|
-
function colorMix(color1, color2, size1, size2) {
|
|
2156
|
+
function colorMix(color1, color2, size1, size2, hdr) {
|
|
2043
2157
|
let rgb1 = color1, rgb2 = color2;
|
|
2044
2158
|
if (!("r" in rgb1)) {
|
|
2045
|
-
rgb1 = hslToRgb(color1);
|
|
2159
|
+
rgb1 = hdr ? hslToRgbFloat(color1) : hslToRgb(color1);
|
|
2046
2160
|
}
|
|
2047
2161
|
if (!("r" in rgb2)) {
|
|
2048
|
-
rgb2 = hslToRgb(color2);
|
|
2162
|
+
rgb2 = hdr ? hslToRgbFloat(color2) : hslToRgb(color2);
|
|
2163
|
+
}
|
|
2164
|
+
if (hdr) {
|
|
2165
|
+
const lin1 = {
|
|
2166
|
+
b: srgbToLinear(rgb1.b / rgbMax),
|
|
2167
|
+
g: srgbToLinear(rgb1.g / rgbMax),
|
|
2168
|
+
r: srgbToLinear(rgb1.r / rgbMax),
|
|
2169
|
+
}, lin2 = {
|
|
2170
|
+
b: srgbToLinear(rgb2.b / rgbMax),
|
|
2171
|
+
g: srgbToLinear(rgb2.g / rgbMax),
|
|
2172
|
+
r: srgbToLinear(rgb2.r / rgbMax),
|
|
2173
|
+
}, totalWeight = size1 + size2;
|
|
2174
|
+
return {
|
|
2175
|
+
b: linearToSrgb((lin1.b * size1 + lin2.b * size2) / totalWeight) * rgbMax,
|
|
2176
|
+
g: linearToSrgb((lin1.g * size1 + lin2.g * size2) / totalWeight) * rgbMax,
|
|
2177
|
+
r: linearToSrgb((lin1.r * size1 + lin2.r * size2) / totalWeight) * rgbMax,
|
|
2178
|
+
};
|
|
2049
2179
|
}
|
|
2050
2180
|
return {
|
|
2051
2181
|
b: mix(rgb1.b, rgb2.b, size1, size2),
|
|
@@ -2053,14 +2183,14 @@
|
|
|
2053
2183
|
r: mix(rgb1.r, rgb2.r, size1, size2),
|
|
2054
2184
|
};
|
|
2055
2185
|
}
|
|
2056
|
-
function getLinkColor(p1, p2, linkColor) {
|
|
2186
|
+
function getLinkColor(p1, p2, linkColor, hdr) {
|
|
2057
2187
|
if (linkColor === randomColorValue) {
|
|
2058
2188
|
return getRandomRgbColor();
|
|
2059
2189
|
}
|
|
2060
2190
|
else if (linkColor === midColorValue) {
|
|
2061
2191
|
const sourceColor = p1.getFillColor() ?? p1.getStrokeColor(), destColor = p2?.getFillColor() ?? p2?.getStrokeColor();
|
|
2062
2192
|
if (sourceColor && destColor && p2) {
|
|
2063
|
-
return colorMix(sourceColor, destColor, p1.getRadius(), p2.getRadius());
|
|
2193
|
+
return colorMix(sourceColor, destColor, p1.getRadius(), p2.getRadius(), hdr);
|
|
2064
2194
|
}
|
|
2065
2195
|
else {
|
|
2066
2196
|
const hslColor = sourceColor ?? destColor;
|
|
@@ -2156,7 +2286,7 @@
|
|
|
2156
2286
|
colorValue.velocity = defaultVelocity;
|
|
2157
2287
|
}
|
|
2158
2288
|
}
|
|
2159
|
-
function updateColorValue(data, decrease, delta,
|
|
2289
|
+
function updateColorValue(data, decrease, delta, _hdr) {
|
|
2160
2290
|
const minLoops = 0, minDelay = 0, identity = 1, minVelocity = 0, minOffset = 0, velocityFactor = 3.6;
|
|
2161
2291
|
if (!data.enable ||
|
|
2162
2292
|
((data.maxLoops ?? minLoops) > minLoops && (data.loops ?? minLoops) > (data.maxLoops ?? minLoops))) {
|
|
@@ -2169,7 +2299,7 @@
|
|
|
2169
2299
|
if ((data.delayTime ?? minDelay) > minDelay && data.time < (data.delayTime ?? minDelay)) {
|
|
2170
2300
|
return;
|
|
2171
2301
|
}
|
|
2172
|
-
const offset = data.offset ? randomInRangeValue(data.offset) : minOffset, velocity = (
|
|
2302
|
+
const offset = data.offset ? randomInRangeValue(data.offset) : minOffset, velocity = (data.velocity ?? minVelocity) * delta.factor + offset * velocityFactor, decay = data.decay ?? identity, max = data.max, min = data.min;
|
|
2173
2303
|
if (!decrease || data.status === exports.AnimationStatus.increasing) {
|
|
2174
2304
|
data.value += velocity;
|
|
2175
2305
|
if (data.value > max) {
|
|
@@ -2201,9 +2331,9 @@
|
|
|
2201
2331
|
return;
|
|
2202
2332
|
}
|
|
2203
2333
|
const { h, s, l } = color;
|
|
2204
|
-
updateColorValue(h, false, delta
|
|
2205
|
-
updateColorValue(s, true, delta
|
|
2206
|
-
updateColorValue(l, true, delta
|
|
2334
|
+
updateColorValue(h, false, delta);
|
|
2335
|
+
updateColorValue(s, true, delta);
|
|
2336
|
+
updateColorValue(l, true, delta);
|
|
2207
2337
|
}
|
|
2208
2338
|
function alterHsl(color, type, value) {
|
|
2209
2339
|
return {
|
|
@@ -2253,7 +2383,7 @@
|
|
|
2253
2383
|
}
|
|
2254
2384
|
|
|
2255
2385
|
async function loadBlendPlugin(engine) {
|
|
2256
|
-
engine.checkVersion("4.
|
|
2386
|
+
engine.checkVersion("4.4.0");
|
|
2257
2387
|
await engine.pluginManager.register(e => {
|
|
2258
2388
|
e.pluginManager.addPlugin(new BlendPlugin());
|
|
2259
2389
|
});
|
|
@@ -2290,7 +2420,7 @@
|
|
|
2290
2420
|
}
|
|
2291
2421
|
|
|
2292
2422
|
async function loadCircleShape(engine) {
|
|
2293
|
-
engine.checkVersion("4.
|
|
2423
|
+
engine.checkVersion("4.4.0");
|
|
2294
2424
|
await engine.pluginManager.register(e => {
|
|
2295
2425
|
e.pluginManager.addShape(["circle"], () => {
|
|
2296
2426
|
return Promise.resolve(new CircleDrawer());
|
|
@@ -2338,7 +2468,7 @@
|
|
|
2338
2468
|
}
|
|
2339
2469
|
|
|
2340
2470
|
async function loadHexColorPlugin(engine) {
|
|
2341
|
-
engine.checkVersion("4.
|
|
2471
|
+
engine.checkVersion("4.4.0");
|
|
2342
2472
|
await engine.pluginManager.register(e => {
|
|
2343
2473
|
e.pluginManager.addColorManager("hex", new HexColorManager());
|
|
2344
2474
|
});
|
|
@@ -2391,7 +2521,7 @@
|
|
|
2391
2521
|
}
|
|
2392
2522
|
|
|
2393
2523
|
async function loadHslColorPlugin(engine) {
|
|
2394
|
-
engine.checkVersion("4.
|
|
2524
|
+
engine.checkVersion("4.4.0");
|
|
2395
2525
|
await engine.pluginManager.register(e => {
|
|
2396
2526
|
e.pluginManager.addColorManager("hsl", new HslColorManager());
|
|
2397
2527
|
});
|
|
@@ -2415,7 +2545,7 @@
|
|
|
2415
2545
|
}
|
|
2416
2546
|
|
|
2417
2547
|
async function loadMovePlugin(engine) {
|
|
2418
|
-
engine.checkVersion("4.
|
|
2548
|
+
engine.checkVersion("4.4.0");
|
|
2419
2549
|
await engine.pluginManager.register(e => {
|
|
2420
2550
|
const moveEngine = e, movePluginManager = moveEngine.pluginManager;
|
|
2421
2551
|
movePluginManager.initializers.pathGenerators ??= new Map();
|
|
@@ -2631,7 +2761,7 @@
|
|
|
2631
2761
|
}
|
|
2632
2762
|
|
|
2633
2763
|
async function loadOpacityUpdater(engine) {
|
|
2634
|
-
engine.checkVersion("4.
|
|
2764
|
+
engine.checkVersion("4.4.0");
|
|
2635
2765
|
await engine.pluginManager.register(e => {
|
|
2636
2766
|
e.pluginManager.addParticleUpdater("opacity", container => {
|
|
2637
2767
|
return Promise.resolve(new OpacityUpdater(container));
|
|
@@ -2976,7 +3106,7 @@
|
|
|
2976
3106
|
}
|
|
2977
3107
|
|
|
2978
3108
|
async function loadOutModesUpdater(engine) {
|
|
2979
|
-
engine.checkVersion("4.
|
|
3109
|
+
engine.checkVersion("4.4.0");
|
|
2980
3110
|
await engine.pluginManager.register(e => {
|
|
2981
3111
|
e.pluginManager.addParticleUpdater("outModes", container => {
|
|
2982
3112
|
return Promise.resolve(new OutOfCanvasUpdater(container));
|
|
@@ -3047,7 +3177,7 @@
|
|
|
3047
3177
|
}
|
|
3048
3178
|
|
|
3049
3179
|
async function loadPaintUpdater(engine) {
|
|
3050
|
-
engine.checkVersion("4.
|
|
3180
|
+
engine.checkVersion("4.4.0");
|
|
3051
3181
|
await engine.pluginManager.register(e => {
|
|
3052
3182
|
e.pluginManager.addParticleUpdater("paint", container => {
|
|
3053
3183
|
return Promise.resolve(new PaintUpdater(e.pluginManager, container));
|
|
@@ -3102,7 +3232,7 @@
|
|
|
3102
3232
|
}
|
|
3103
3233
|
|
|
3104
3234
|
async function loadRgbColorPlugin(engine) {
|
|
3105
|
-
engine.checkVersion("4.
|
|
3235
|
+
engine.checkVersion("4.4.0");
|
|
3106
3236
|
await engine.pluginManager.register(e => {
|
|
3107
3237
|
e.pluginManager.addColorManager("rgb", new RgbColorManager());
|
|
3108
3238
|
});
|
|
@@ -3187,7 +3317,7 @@
|
|
|
3187
3317
|
}
|
|
3188
3318
|
|
|
3189
3319
|
async function loadSizeUpdater(engine) {
|
|
3190
|
-
engine.checkVersion("4.
|
|
3320
|
+
engine.checkVersion("4.4.0");
|
|
3191
3321
|
await engine.pluginManager.register(e => {
|
|
3192
3322
|
e.pluginManager.addParticleUpdater("size", container => {
|
|
3193
3323
|
return Promise.resolve(new SizeUpdater(container));
|
|
@@ -3196,7 +3326,7 @@
|
|
|
3196
3326
|
}
|
|
3197
3327
|
|
|
3198
3328
|
async function loadBasic(engine) {
|
|
3199
|
-
engine.checkVersion("4.
|
|
3329
|
+
engine.checkVersion("4.4.0");
|
|
3200
3330
|
await engine.pluginManager.register(async (e) => {
|
|
3201
3331
|
await Promise.all([
|
|
3202
3332
|
loadBlendPlugin(e),
|
|
@@ -3496,7 +3626,7 @@
|
|
|
3496
3626
|
}
|
|
3497
3627
|
|
|
3498
3628
|
async function loadClubsSuitShape(engine) {
|
|
3499
|
-
engine.checkVersion("4.
|
|
3629
|
+
engine.checkVersion("4.4.0");
|
|
3500
3630
|
await engine.pluginManager.register(e => {
|
|
3501
3631
|
e.pluginManager.addShape(["club", "clubs"], () => Promise.resolve(new ClubDrawer()));
|
|
3502
3632
|
});
|
|
@@ -3510,7 +3640,7 @@
|
|
|
3510
3640
|
}
|
|
3511
3641
|
|
|
3512
3642
|
async function loadDiamondsSuitShape(engine) {
|
|
3513
|
-
engine.checkVersion("4.
|
|
3643
|
+
engine.checkVersion("4.4.0");
|
|
3514
3644
|
await engine.pluginManager.register(e => {
|
|
3515
3645
|
e.pluginManager.addShape(["diamond", "diamonds"], () => Promise.resolve(new DiamondDrawer()));
|
|
3516
3646
|
});
|
|
@@ -3524,7 +3654,7 @@
|
|
|
3524
3654
|
};
|
|
3525
3655
|
|
|
3526
3656
|
async function loadHeartsSuitShape(engine) {
|
|
3527
|
-
engine.checkVersion("4.
|
|
3657
|
+
engine.checkVersion("4.4.0");
|
|
3528
3658
|
await engine.pluginManager.register(e => {
|
|
3529
3659
|
e.pluginManager.addShape(["heart", "hearts"], () => Promise.resolve(new HeartDrawer$1()));
|
|
3530
3660
|
});
|
|
@@ -3538,14 +3668,14 @@
|
|
|
3538
3668
|
}
|
|
3539
3669
|
|
|
3540
3670
|
async function loadSpadesSuitShape(engine) {
|
|
3541
|
-
engine.checkVersion("4.
|
|
3671
|
+
engine.checkVersion("4.4.0");
|
|
3542
3672
|
await engine.pluginManager.register(e => {
|
|
3543
3673
|
e.pluginManager.addShape(["spade", "spades"], () => Promise.resolve(new SpadeDrawer()));
|
|
3544
3674
|
});
|
|
3545
3675
|
}
|
|
3546
3676
|
|
|
3547
3677
|
async function loadCardSuitsShape(engine) {
|
|
3548
|
-
engine.checkVersion("4.
|
|
3678
|
+
engine.checkVersion("4.4.0");
|
|
3549
3679
|
await Promise.all([
|
|
3550
3680
|
loadClubsSuitShape(engine),
|
|
3551
3681
|
loadDiamondsSuitShape(engine),
|
|
@@ -3760,7 +3890,7 @@
|
|
|
3760
3890
|
})(EmitterClickMode || (EmitterClickMode = {}));
|
|
3761
3891
|
|
|
3762
3892
|
async function loadEmittersPluginSimple(engine) {
|
|
3763
|
-
engine.checkVersion("4.
|
|
3893
|
+
engine.checkVersion("4.4.0");
|
|
3764
3894
|
await engine.pluginManager.register(async (e) => {
|
|
3765
3895
|
const instancesManager = await getEmittersInstancesManager(e);
|
|
3766
3896
|
await addEmittersShapesManager(e);
|
|
@@ -3862,7 +3992,7 @@
|
|
|
3862
3992
|
}
|
|
3863
3993
|
|
|
3864
3994
|
async function loadEmojiShape(engine) {
|
|
3865
|
-
engine.checkVersion("4.
|
|
3995
|
+
engine.checkVersion("4.4.0");
|
|
3866
3996
|
await engine.pluginManager.register(e => {
|
|
3867
3997
|
e.pluginManager.addShape(validTypes, () => Promise.resolve(new EmojiDrawer()));
|
|
3868
3998
|
});
|
|
@@ -3888,7 +4018,7 @@
|
|
|
3888
4018
|
}
|
|
3889
4019
|
|
|
3890
4020
|
async function loadHeartShape(engine) {
|
|
3891
|
-
engine.checkVersion("4.
|
|
4021
|
+
engine.checkVersion("4.4.0");
|
|
3892
4022
|
await engine.pluginManager.register(e => {
|
|
3893
4023
|
e.pluginManager.addShape(["heart"], () => Promise.resolve(new HeartDrawer()));
|
|
3894
4024
|
});
|
|
@@ -3897,12 +4027,12 @@
|
|
|
3897
4027
|
const shapeTypes = ["image", "images"];
|
|
3898
4028
|
const stringStart = 0, defaultOpacity = 1;
|
|
3899
4029
|
const currentColorRegex = /(#(?:[0-9a-f]{2}){2,4}|(#[0-9a-f]{3})|(rgb|hsl)a?\((-?\d+%?[,\s]+){2,3}\s*[\d.]+%?\))|currentcolor/gi;
|
|
3900
|
-
function replaceColorSvg(imageShape, color, opacity, hdr = false) {
|
|
4030
|
+
function replaceColorSvg(imageShape, color, opacity, hdr = false, peakNits, mode) {
|
|
3901
4031
|
const { svgData } = imageShape;
|
|
3902
4032
|
if (!svgData) {
|
|
3903
4033
|
return "";
|
|
3904
4034
|
}
|
|
3905
|
-
const colorStyle = getStyleFromHsl(color, hdr, opacity);
|
|
4035
|
+
const colorStyle = getStyleFromHsl(color, hdr, opacity, peakNits, mode);
|
|
3906
4036
|
if (svgData.includes("fill")) {
|
|
3907
4037
|
return svgData.replaceAll(currentColorRegex, () => colorStyle);
|
|
3908
4038
|
}
|
|
@@ -3944,8 +4074,8 @@
|
|
|
3944
4074
|
}
|
|
3945
4075
|
image.loading = false;
|
|
3946
4076
|
}
|
|
3947
|
-
function replaceImageColor(image, imageData, color, particle, hdr = false) {
|
|
3948
|
-
const svgColoredData = replaceColorSvg(image, color, particle.opacity?.value ?? defaultOpacity, hdr), imageRes = {
|
|
4077
|
+
function replaceImageColor(image, imageData, color, particle, hdr = false, peakNits, mode) {
|
|
4078
|
+
const svgColoredData = replaceColorSvg(image, color, particle.opacity?.value ?? defaultOpacity, hdr, peakNits, mode), imageRes = {
|
|
3949
4079
|
color,
|
|
3950
4080
|
data: {
|
|
3951
4081
|
...image,
|
|
@@ -4057,7 +4187,7 @@
|
|
|
4057
4187
|
void (async () => {
|
|
4058
4188
|
let imageRes;
|
|
4059
4189
|
if (image.svgData && color) {
|
|
4060
|
-
imageRes = await replaceImageColor(image, imageData, color, particle, container.hdr);
|
|
4190
|
+
imageRes = await replaceImageColor(image, imageData, color, particle, container.hdr, container.peakNits, container.hdrMode);
|
|
4061
4191
|
}
|
|
4062
4192
|
else {
|
|
4063
4193
|
imageRes = {
|
|
@@ -4194,7 +4324,7 @@
|
|
|
4194
4324
|
};
|
|
4195
4325
|
}
|
|
4196
4326
|
async function loadImageShape(engine) {
|
|
4197
|
-
engine.checkVersion("4.
|
|
4327
|
+
engine.checkVersion("4.4.0");
|
|
4198
4328
|
await engine.pluginManager.register(e => {
|
|
4199
4329
|
addLoadImageToEngine(e);
|
|
4200
4330
|
e.pluginManager.addPlugin(new ImagePreloaderPlugin(e));
|
|
@@ -4339,7 +4469,7 @@
|
|
|
4339
4469
|
}
|
|
4340
4470
|
|
|
4341
4471
|
async function loadLifeUpdater(engine) {
|
|
4342
|
-
engine.checkVersion("4.
|
|
4472
|
+
engine.checkVersion("4.4.0");
|
|
4343
4473
|
await engine.pluginManager.register(e => {
|
|
4344
4474
|
e.pluginManager.addParticleUpdater("life", container => {
|
|
4345
4475
|
return Promise.resolve(new LifeUpdater(container));
|
|
@@ -4393,7 +4523,7 @@
|
|
|
4393
4523
|
}
|
|
4394
4524
|
|
|
4395
4525
|
async function loadMotionPlugin(engine) {
|
|
4396
|
-
engine.checkVersion("4.
|
|
4526
|
+
engine.checkVersion("4.4.0");
|
|
4397
4527
|
await engine.pluginManager.register(e => {
|
|
4398
4528
|
e.pluginManager.addPlugin(new MotionPlugin());
|
|
4399
4529
|
});
|
|
@@ -4478,19 +4608,19 @@
|
|
|
4478
4608
|
}
|
|
4479
4609
|
|
|
4480
4610
|
async function loadGenericPolygonShape(engine) {
|
|
4481
|
-
engine.checkVersion("4.
|
|
4611
|
+
engine.checkVersion("4.4.0");
|
|
4482
4612
|
await engine.pluginManager.register(e => {
|
|
4483
4613
|
e.pluginManager.addShape(["polygon"], () => Promise.resolve(new PolygonDrawer()));
|
|
4484
4614
|
});
|
|
4485
4615
|
}
|
|
4486
4616
|
async function loadTriangleShape(engine) {
|
|
4487
|
-
engine.checkVersion("4.
|
|
4617
|
+
engine.checkVersion("4.4.0");
|
|
4488
4618
|
await engine.pluginManager.register(e => {
|
|
4489
4619
|
e.pluginManager.addShape(["triangle"], () => Promise.resolve(new TriangleDrawer()));
|
|
4490
4620
|
});
|
|
4491
4621
|
}
|
|
4492
4622
|
async function loadPolygonShape(engine) {
|
|
4493
|
-
engine.checkVersion("4.
|
|
4623
|
+
engine.checkVersion("4.4.0");
|
|
4494
4624
|
await Promise.all([
|
|
4495
4625
|
loadGenericPolygonShape(engine),
|
|
4496
4626
|
loadTriangleShape(engine),
|
|
@@ -4624,7 +4754,7 @@
|
|
|
4624
4754
|
}
|
|
4625
4755
|
|
|
4626
4756
|
async function loadRollUpdater(engine) {
|
|
4627
|
-
engine.checkVersion("4.
|
|
4757
|
+
engine.checkVersion("4.4.0");
|
|
4628
4758
|
await engine.pluginManager.register(e => {
|
|
4629
4759
|
e.pluginManager.addParticleUpdater("roll", () => {
|
|
4630
4760
|
return Promise.resolve(new RollUpdater(e.pluginManager));
|
|
@@ -4730,7 +4860,7 @@
|
|
|
4730
4860
|
}
|
|
4731
4861
|
|
|
4732
4862
|
async function loadRotateUpdater(engine) {
|
|
4733
|
-
engine.checkVersion("4.
|
|
4863
|
+
engine.checkVersion("4.4.0");
|
|
4734
4864
|
await engine.pluginManager.register(e => {
|
|
4735
4865
|
e.pluginManager.addParticleUpdater("rotate", container => {
|
|
4736
4866
|
return Promise.resolve(new RotateUpdater(container));
|
|
@@ -4754,7 +4884,7 @@
|
|
|
4754
4884
|
}
|
|
4755
4885
|
|
|
4756
4886
|
async function loadSquareShape(engine) {
|
|
4757
|
-
engine.checkVersion("4.
|
|
4887
|
+
engine.checkVersion("4.4.0");
|
|
4758
4888
|
await engine.pluginManager.register(e => {
|
|
4759
4889
|
e.pluginManager.addShape(["edge", "square"], () => Promise.resolve(new SquareDrawer()));
|
|
4760
4890
|
});
|
|
@@ -4788,7 +4918,7 @@
|
|
|
4788
4918
|
}
|
|
4789
4919
|
|
|
4790
4920
|
async function loadStarShape(engine) {
|
|
4791
|
-
engine.checkVersion("4.
|
|
4921
|
+
engine.checkVersion("4.4.0");
|
|
4792
4922
|
await engine.pluginManager.register(e => {
|
|
4793
4923
|
e.pluginManager.addShape(["star"], () => Promise.resolve(new StarDrawer()));
|
|
4794
4924
|
});
|
|
@@ -4897,7 +5027,7 @@
|
|
|
4897
5027
|
}
|
|
4898
5028
|
|
|
4899
5029
|
async function loadTiltUpdater(engine) {
|
|
4900
|
-
engine.checkVersion("4.
|
|
5030
|
+
engine.checkVersion("4.4.0");
|
|
4901
5031
|
await engine.pluginManager.register(e => {
|
|
4902
5032
|
e.pluginManager.addParticleUpdater("tilt", container => {
|
|
4903
5033
|
return Promise.resolve(new TiltUpdater(container));
|
|
@@ -4999,7 +5129,7 @@
|
|
|
4999
5129
|
}
|
|
5000
5130
|
|
|
5001
5131
|
async function loadWobbleUpdater(engine) {
|
|
5002
|
-
engine.checkVersion("4.
|
|
5132
|
+
engine.checkVersion("4.4.0");
|
|
5003
5133
|
await engine.pluginManager.register(e => {
|
|
5004
5134
|
e.pluginManager.addParticleUpdater("wobble", container => {
|
|
5005
5135
|
return Promise.resolve(new WobbleUpdater(container));
|
|
@@ -5404,7 +5534,7 @@
|
|
|
5404
5534
|
|
|
5405
5535
|
let initPromise = null;
|
|
5406
5536
|
async function doInitPlugins(engine) {
|
|
5407
|
-
engine.checkVersion("4.
|
|
5537
|
+
engine.checkVersion("4.4.0");
|
|
5408
5538
|
await engine.pluginManager.register(async (e) => {
|
|
5409
5539
|
await Promise.all([
|
|
5410
5540
|
loadBasic(e),
|
|
@@ -5477,7 +5607,7 @@
|
|
|
5477
5607
|
confetti.init = async () => {
|
|
5478
5608
|
await initPlugins(tsParticles);
|
|
5479
5609
|
};
|
|
5480
|
-
confetti.version = "4.
|
|
5610
|
+
confetti.version = "4.4.0";
|
|
5481
5611
|
globalThis.confetti = confetti;
|
|
5482
5612
|
|
|
5483
5613
|
const globalObject = globalThis;
|
|
@@ -5602,7 +5732,11 @@
|
|
|
5602
5732
|
if (!fColor && !sColor) {
|
|
5603
5733
|
return;
|
|
5604
5734
|
}
|
|
5605
|
-
const container = this.#container, zIndexOptions = particle.options.zIndex, zIndexFactor = zIndexFactorOffset - particle.zIndexFactor, { fillOpacity, opacity, strokeOpacity } = particle.getOpacity(), transform = this.#reusableTransform, colorStyles = this.#reusableColorStyles, fill = fColor
|
|
5735
|
+
const container = this.#container, zIndexOptions = particle.options.zIndex, zIndexFactor = zIndexFactorOffset - particle.zIndexFactor, { fillOpacity, opacity, strokeOpacity } = particle.getOpacity(), transform = this.#reusableTransform, colorStyles = this.#reusableColorStyles, fill = fColor
|
|
5736
|
+
? getStyleFromHsl(fColor, container.hdr, fillOpacity * opacity, container.peakNits, container.hdrMode)
|
|
5737
|
+
: undefined, stroke = sColor
|
|
5738
|
+
? getStyleFromHsl(sColor, container.hdr, strokeOpacity * opacity, container.peakNits, container.hdrMode)
|
|
5739
|
+
: fill;
|
|
5606
5740
|
transform.a = transform.b = transform.c = transform.d = undefined;
|
|
5607
5741
|
colorStyles.fill = fill;
|
|
5608
5742
|
colorStyles.stroke = stroke;
|
|
@@ -5936,7 +6070,9 @@
|
|
|
5936
6070
|
if (typeof background.element === "string") {
|
|
5937
6071
|
if (typeof document !== "undefined") {
|
|
5938
6072
|
const node = document.querySelector(background.element);
|
|
5939
|
-
if (
|
|
6073
|
+
if ((typeof HTMLCanvasElement !== "undefined" && node instanceof HTMLCanvasElement) ||
|
|
6074
|
+
(typeof HTMLVideoElement !== "undefined" && node instanceof HTMLVideoElement) ||
|
|
6075
|
+
(typeof HTMLImageElement !== "undefined" && node instanceof HTMLImageElement)) {
|
|
5940
6076
|
this.#backgroundElement = node;
|
|
5941
6077
|
}
|
|
5942
6078
|
else if (node) {
|
|
@@ -5947,10 +6083,10 @@
|
|
|
5947
6083
|
}
|
|
5948
6084
|
}
|
|
5949
6085
|
}
|
|
5950
|
-
else if (background.element instanceof HTMLCanvasElement ||
|
|
5951
|
-
background.element instanceof OffscreenCanvas ||
|
|
5952
|
-
background.element instanceof HTMLVideoElement ||
|
|
5953
|
-
background.element instanceof HTMLImageElement) {
|
|
6086
|
+
else if ((typeof HTMLCanvasElement !== "undefined" && background.element instanceof HTMLCanvasElement) ||
|
|
6087
|
+
(typeof OffscreenCanvas !== "undefined" && background.element instanceof OffscreenCanvas) ||
|
|
6088
|
+
(typeof HTMLVideoElement !== "undefined" && background.element instanceof HTMLVideoElement) ||
|
|
6089
|
+
(typeof HTMLImageElement !== "undefined" && background.element instanceof HTMLImageElement)) {
|
|
5954
6090
|
this.#backgroundElement = background.element;
|
|
5955
6091
|
}
|
|
5956
6092
|
}
|
|
@@ -6018,6 +6154,7 @@
|
|
|
6018
6154
|
zoom = defaultZoom;
|
|
6019
6155
|
#container;
|
|
6020
6156
|
#generated;
|
|
6157
|
+
#hdrMediaListeners;
|
|
6021
6158
|
#mutationObserver;
|
|
6022
6159
|
#originalStyle;
|
|
6023
6160
|
#pluginManager;
|
|
@@ -6082,7 +6219,6 @@
|
|
|
6082
6219
|
});
|
|
6083
6220
|
this.resize();
|
|
6084
6221
|
this.#initStyle();
|
|
6085
|
-
this.initBackground();
|
|
6086
6222
|
this.#safeMutationObserver(obs => {
|
|
6087
6223
|
const element = this.domElement;
|
|
6088
6224
|
if (!element || !(element instanceof Node)) {
|
|
@@ -6092,6 +6228,8 @@
|
|
|
6092
6228
|
});
|
|
6093
6229
|
this.initPlugins();
|
|
6094
6230
|
this.#initContext();
|
|
6231
|
+
this.initBackground();
|
|
6232
|
+
this.#initHdrListeners();
|
|
6095
6233
|
this.render.init();
|
|
6096
6234
|
}
|
|
6097
6235
|
initBackground() {
|
|
@@ -6101,7 +6239,8 @@
|
|
|
6101
6239
|
}
|
|
6102
6240
|
const elementStyle = element.style, color = rangeColorToRgb(this.#pluginManager, background.color);
|
|
6103
6241
|
if (color) {
|
|
6104
|
-
|
|
6242
|
+
const hdrOptions = container.actualOptions.hdr;
|
|
6243
|
+
elementStyle.backgroundColor = getStyleFromRgb(color, container.hdr, background.opacity, hdrOptions.peakNits, hdrOptions.mode);
|
|
6105
6244
|
}
|
|
6106
6245
|
else {
|
|
6107
6246
|
elementStyle.backgroundColor = "";
|
|
@@ -6198,6 +6337,7 @@
|
|
|
6198
6337
|
obs.disconnect();
|
|
6199
6338
|
});
|
|
6200
6339
|
this.#mutationObserver = undefined;
|
|
6340
|
+
this.#removeHdrListeners();
|
|
6201
6341
|
this.render.stop();
|
|
6202
6342
|
}
|
|
6203
6343
|
async windowResize() {
|
|
@@ -6217,9 +6357,16 @@
|
|
|
6217
6357
|
}
|
|
6218
6358
|
}
|
|
6219
6359
|
#initContext() {
|
|
6220
|
-
const container = this.#container, canSupportHdr = container.actualOptions.hdr &&
|
|
6360
|
+
const container = this.#container, canSupportHdr = container.actualOptions.hdr.enable &&
|
|
6221
6361
|
safeMatchMedia("(color-gamut: p3)")?.matches &&
|
|
6222
6362
|
safeMatchMedia("(dynamic-range: high)")?.matches;
|
|
6363
|
+
container.hdr = canSupportHdr ?? false;
|
|
6364
|
+
container.hdrMode = container.actualOptions.hdr.mode;
|
|
6365
|
+
container.peakNits = container.actualOptions.hdr.peakNits;
|
|
6366
|
+
const renderCanvas = this.renderCanvas;
|
|
6367
|
+
if (!renderCanvas) {
|
|
6368
|
+
return;
|
|
6369
|
+
}
|
|
6223
6370
|
this.render.setContextSettings({
|
|
6224
6371
|
alpha: true,
|
|
6225
6372
|
desynchronized: true,
|
|
@@ -6228,11 +6375,47 @@
|
|
|
6228
6375
|
? { colorSpace: "display-p3", colorType: "float16" }
|
|
6229
6376
|
: { colorSpace: "srgb" }),
|
|
6230
6377
|
});
|
|
6231
|
-
|
|
6232
|
-
|
|
6233
|
-
|
|
6378
|
+
let context;
|
|
6379
|
+
try {
|
|
6380
|
+
context = renderCanvas.getContext("2d", this.render.settings);
|
|
6234
6381
|
}
|
|
6235
|
-
|
|
6382
|
+
catch {
|
|
6383
|
+
context = null;
|
|
6384
|
+
}
|
|
6385
|
+
if (canSupportHdr && !context) {
|
|
6386
|
+
container.hdr = false;
|
|
6387
|
+
const sdrSettings = {
|
|
6388
|
+
alpha: true,
|
|
6389
|
+
desynchronized: true,
|
|
6390
|
+
willReadFrequently: false,
|
|
6391
|
+
colorSpace: "srgb",
|
|
6392
|
+
};
|
|
6393
|
+
this.render.setContextSettings(sdrSettings);
|
|
6394
|
+
try {
|
|
6395
|
+
context = renderCanvas.getContext("2d", sdrSettings);
|
|
6396
|
+
}
|
|
6397
|
+
catch {
|
|
6398
|
+
context = null;
|
|
6399
|
+
}
|
|
6400
|
+
}
|
|
6401
|
+
this.render.setContext(context);
|
|
6402
|
+
}
|
|
6403
|
+
#initHdrListeners() {
|
|
6404
|
+
this.#removeHdrListeners();
|
|
6405
|
+
const p3Query = safeMatchMedia("(color-gamut: p3)"), hdrQuery = safeMatchMedia("(dynamic-range: high)"), handleChange = () => {
|
|
6406
|
+
this.#recreateRenderCanvas();
|
|
6407
|
+
this.#initContext();
|
|
6408
|
+
this.initBackground();
|
|
6409
|
+
}, listeners = [];
|
|
6410
|
+
if (p3Query) {
|
|
6411
|
+
p3Query.addEventListener("change", handleChange);
|
|
6412
|
+
listeners.push({ handler: handleChange, mql: p3Query });
|
|
6413
|
+
}
|
|
6414
|
+
if (hdrQuery) {
|
|
6415
|
+
hdrQuery.addEventListener("change", handleChange);
|
|
6416
|
+
listeners.push({ handler: handleChange, mql: hdrQuery });
|
|
6417
|
+
}
|
|
6418
|
+
this.#hdrMediaListeners = listeners;
|
|
6236
6419
|
}
|
|
6237
6420
|
#initStyle() {
|
|
6238
6421
|
const element = this.domElement, options = this.#container.actualOptions;
|
|
@@ -6256,6 +6439,25 @@
|
|
|
6256
6439
|
element.style.setProperty(key, value, "important");
|
|
6257
6440
|
}
|
|
6258
6441
|
}
|
|
6442
|
+
#recreateRenderCanvas() {
|
|
6443
|
+
const renderCanvas = this.renderCanvas;
|
|
6444
|
+
if (!renderCanvas) {
|
|
6445
|
+
return;
|
|
6446
|
+
}
|
|
6447
|
+
if (this.domElement) {
|
|
6448
|
+
return;
|
|
6449
|
+
}
|
|
6450
|
+
this.renderCanvas = new OffscreenCanvas(renderCanvas.width, renderCanvas.height);
|
|
6451
|
+
}
|
|
6452
|
+
#removeHdrListeners() {
|
|
6453
|
+
if (!this.#hdrMediaListeners) {
|
|
6454
|
+
return;
|
|
6455
|
+
}
|
|
6456
|
+
for (const { handler, mql } of this.#hdrMediaListeners) {
|
|
6457
|
+
mql.removeEventListener("change", handler);
|
|
6458
|
+
}
|
|
6459
|
+
this.#hdrMediaListeners = undefined;
|
|
6460
|
+
}
|
|
6259
6461
|
#repairStyle() {
|
|
6260
6462
|
const element = this.domElement;
|
|
6261
6463
|
if (!element) {
|
|
@@ -6640,9 +6842,9 @@
|
|
|
6640
6842
|
}
|
|
6641
6843
|
getOpacity() {
|
|
6642
6844
|
const zIndexOptions = this.options.zIndex, zIndexFactor = zIndexFactorOffset - this.zIndexFactor, zOpacityFactor = zIndexFactor ** zIndexOptions.opacityRate, baseOpacity = getRangeValue(this.opacity?.value ?? defaultOpacity$2), modifierOpacity = this.#applyModifiers(undefined, m => m.opacity), opacity = modifierOpacity ?? baseOpacity, fillOpacity = this.fillOpacity ?? defaultOpacity$2, strokeOpacity = this.strokeOpacity ?? defaultOpacity$2;
|
|
6643
|
-
this.#cachedOpacityData.fillOpacity =
|
|
6845
|
+
this.#cachedOpacityData.fillOpacity = fillOpacity;
|
|
6644
6846
|
this.#cachedOpacityData.opacity = opacity * zOpacityFactor;
|
|
6645
|
-
this.#cachedOpacityData.strokeOpacity =
|
|
6847
|
+
this.#cachedOpacityData.strokeOpacity = strokeOpacity;
|
|
6646
6848
|
return this.#cachedOpacityData;
|
|
6647
6849
|
}
|
|
6648
6850
|
getPosition() {
|
|
@@ -7497,6 +7699,7 @@
|
|
|
7497
7699
|
effectDrawers;
|
|
7498
7700
|
fpsLimit;
|
|
7499
7701
|
hdr;
|
|
7702
|
+
hdrMode;
|
|
7500
7703
|
id;
|
|
7501
7704
|
pageHidden;
|
|
7502
7705
|
particleCreatedPlugins;
|
|
@@ -7504,6 +7707,7 @@
|
|
|
7504
7707
|
particlePositionPlugins;
|
|
7505
7708
|
particleUpdaters;
|
|
7506
7709
|
particles;
|
|
7710
|
+
peakNits;
|
|
7507
7711
|
plugins;
|
|
7508
7712
|
retina;
|
|
7509
7713
|
shapeDrawers;
|
|
@@ -7534,6 +7738,8 @@
|
|
|
7534
7738
|
this.id = Symbol(id);
|
|
7535
7739
|
this.fpsLimit = 120;
|
|
7536
7740
|
this.hdr = false;
|
|
7741
|
+
this.hdrMode = exports.HdrMode.standard;
|
|
7742
|
+
this.peakNits = 400;
|
|
7537
7743
|
this.#smooth = false;
|
|
7538
7744
|
this.#delay = 0;
|
|
7539
7745
|
this.#duration = 0;
|
|
@@ -7673,8 +7879,9 @@
|
|
|
7673
7879
|
this.updateActualOptions();
|
|
7674
7880
|
this.canvas.initBackground();
|
|
7675
7881
|
this.canvas.resize();
|
|
7676
|
-
const { delay, duration, fpsLimit,
|
|
7677
|
-
this.
|
|
7882
|
+
const { delay, duration, fpsLimit, smooth, zLayers } = this.actualOptions, hdrOptions = this.actualOptions.hdr;
|
|
7883
|
+
this.hdrMode = hdrOptions.mode;
|
|
7884
|
+
this.peakNits = hdrOptions.peakNits;
|
|
7678
7885
|
this.zLayers = zLayers;
|
|
7679
7886
|
this.#duration = getRangeValue(duration) * millisecondsToSeconds;
|
|
7680
7887
|
this.#delay = getRangeValue(delay) * millisecondsToSeconds;
|
|
@@ -8688,6 +8895,7 @@
|
|
|
8688
8895
|
exports.ColorAnimation = ColorAnimation;
|
|
8689
8896
|
exports.Fill = Fill;
|
|
8690
8897
|
exports.FullScreen = FullScreen;
|
|
8898
|
+
exports.HDROptions = HDROptions;
|
|
8691
8899
|
exports.HslAnimation = HslAnimation;
|
|
8692
8900
|
exports.Move = Move;
|
|
8693
8901
|
exports.MoveAngle = MoveAngle;
|