@tsparticles/preset-confetti-falling 4.3.2 → 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.
|
@@ -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
|
-
/* Preset v4.
|
|
2
|
+
/* Preset 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) :
|
|
@@ -797,7 +797,7 @@
|
|
|
797
797
|
return this.#domArray;
|
|
798
798
|
}
|
|
799
799
|
get version() {
|
|
800
|
-
return "4.
|
|
800
|
+
return "4.4.0";
|
|
801
801
|
}
|
|
802
802
|
addEventListener(type, listener) {
|
|
803
803
|
this.#eventDispatcher.addEventListener(type, listener);
|
|
@@ -878,6 +878,10 @@
|
|
|
878
878
|
}
|
|
879
879
|
|
|
880
880
|
function initEngine() {
|
|
881
|
+
const existing = globalThis.tsParticles;
|
|
882
|
+
if (existing?.pluginManager) {
|
|
883
|
+
return existing;
|
|
884
|
+
}
|
|
881
885
|
return new Engine();
|
|
882
886
|
}
|
|
883
887
|
|
|
@@ -975,6 +979,15 @@
|
|
|
975
979
|
AnimationMode["random"] = "random";
|
|
976
980
|
})(AnimationMode || (AnimationMode = {}));
|
|
977
981
|
|
|
982
|
+
var HdrMode;
|
|
983
|
+
(function (HdrMode) {
|
|
984
|
+
HdrMode["standard"] = "standard";
|
|
985
|
+
HdrMode["natural"] = "natural";
|
|
986
|
+
HdrMode["vivid"] = "vivid";
|
|
987
|
+
HdrMode["cinematic"] = "cinematic";
|
|
988
|
+
HdrMode["dynamic"] = "dynamic";
|
|
989
|
+
})(HdrMode || (HdrMode = {}));
|
|
990
|
+
|
|
978
991
|
var LimitMode;
|
|
979
992
|
(function (LimitMode) {
|
|
980
993
|
LimitMode["delete"] = "delete";
|
|
@@ -1230,6 +1243,29 @@
|
|
|
1230
1243
|
}
|
|
1231
1244
|
}
|
|
1232
1245
|
|
|
1246
|
+
const defaultPeakNits = 400, minPeakNits = 0, toStringValue = (value) => String(value);
|
|
1247
|
+
class HDROptions extends OptionLoader {
|
|
1248
|
+
enable = true;
|
|
1249
|
+
mode = HdrMode.standard;
|
|
1250
|
+
peakNits = defaultPeakNits;
|
|
1251
|
+
doLoad(data) {
|
|
1252
|
+
if (data.enable !== undefined && !isBoolean(data.enable)) {
|
|
1253
|
+
throw new Error(`Invalid HDR "enable" value: expected a boolean, got "${String(data.enable)}"`);
|
|
1254
|
+
}
|
|
1255
|
+
if (data.mode !== undefined &&
|
|
1256
|
+
(typeof data.mode !== "string" || !Object.values(HdrMode).includes(data.mode))) {
|
|
1257
|
+
throw new Error(`Invalid HDR "mode" value: expected one of ${Object.values(HdrMode).join(", ")}, got "${toStringValue(data.mode)}"`);
|
|
1258
|
+
}
|
|
1259
|
+
if (data.peakNits !== undefined &&
|
|
1260
|
+
(!isNumber(data.peakNits) || !Number.isFinite(data.peakNits) || data.peakNits <= minPeakNits)) {
|
|
1261
|
+
throw new Error(`Invalid HDR "peakNits" value: expected a positive number, got "${String(data.peakNits)}"`);
|
|
1262
|
+
}
|
|
1263
|
+
loadProperty(this, "enable", data.enable);
|
|
1264
|
+
loadProperty(this, "mode", data.mode);
|
|
1265
|
+
loadProperty(this, "peakNits", data.peakNits);
|
|
1266
|
+
}
|
|
1267
|
+
}
|
|
1268
|
+
|
|
1233
1269
|
class ResizeEvent extends OptionLoader {
|
|
1234
1270
|
delay = 0.5;
|
|
1235
1271
|
enable = true;
|
|
@@ -1673,7 +1709,7 @@
|
|
|
1673
1709
|
duration = 0;
|
|
1674
1710
|
fpsLimit = 120;
|
|
1675
1711
|
fullScreen;
|
|
1676
|
-
hdr
|
|
1712
|
+
hdr;
|
|
1677
1713
|
key;
|
|
1678
1714
|
name;
|
|
1679
1715
|
palette;
|
|
@@ -1693,6 +1729,7 @@
|
|
|
1693
1729
|
this.#container = container;
|
|
1694
1730
|
this.background = new Background();
|
|
1695
1731
|
this.fullScreen = new FullScreen();
|
|
1732
|
+
this.hdr = new HDROptions();
|
|
1696
1733
|
this.particles = loadParticlesOptions(this.#pluginManager, this.#container);
|
|
1697
1734
|
this.resize = new ResizeEvent();
|
|
1698
1735
|
}
|
|
@@ -1715,7 +1752,15 @@
|
|
|
1715
1752
|
loadProperty(this, "detectRetina", data.detectRetina);
|
|
1716
1753
|
loadRangeProperty(this, "duration", data.duration);
|
|
1717
1754
|
loadProperty(this, "fpsLimit", data.fpsLimit);
|
|
1718
|
-
|
|
1755
|
+
const hdrData = data.hdr;
|
|
1756
|
+
if (isBoolean(hdrData)) {
|
|
1757
|
+
this.hdr.enable = hdrData;
|
|
1758
|
+
this.hdr.mode = HdrMode.standard;
|
|
1759
|
+
this.hdr.peakNits = 400;
|
|
1760
|
+
}
|
|
1761
|
+
else {
|
|
1762
|
+
this.hdr.load(hdrData);
|
|
1763
|
+
}
|
|
1719
1764
|
loadProperty(this, "pauseOnBlur", data.pauseOnBlur);
|
|
1720
1765
|
loadProperty(this, "pauseOnOutsideViewport", data.pauseOnOutsideViewport);
|
|
1721
1766
|
loadProperty(this, "zLayers", data.zLayers);
|
|
@@ -1758,7 +1803,7 @@
|
|
|
1758
1803
|
}
|
|
1759
1804
|
}
|
|
1760
1805
|
|
|
1761
|
-
const styleCache = new Map(), maxStyleCacheSize = 2000, rgbFixedPrecision = 2, hslFixedPrecision = 2, hdrRgbFixedPrecision = 4, hdrHslFixedPrecision = 4, sdrReferenceWhiteNits = 203,
|
|
1806
|
+
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;
|
|
1762
1807
|
function getCachedStyle(key, generator) {
|
|
1763
1808
|
let cached = styleCache.get(key);
|
|
1764
1809
|
if (!cached) {
|
|
@@ -1770,6 +1815,42 @@
|
|
|
1770
1815
|
}
|
|
1771
1816
|
return cached;
|
|
1772
1817
|
}
|
|
1818
|
+
function acesFilmic(x) {
|
|
1819
|
+
return clamp((x * (acesA * x + acesB)) / (x * (acesC * x + acesD) + acesE), none, one);
|
|
1820
|
+
}
|
|
1821
|
+
function applyHdrModeAdjustments(r, g, b, mode, maxChannel) {
|
|
1822
|
+
switch (mode) {
|
|
1823
|
+
case HdrMode.vivid: {
|
|
1824
|
+
const avg = (r + g + b) / channelCount;
|
|
1825
|
+
return {
|
|
1826
|
+
b: clamp(clamp(avg + (b - avg) * saturationBoost, none, maxChannel) * lightnessBoost, none, maxChannel),
|
|
1827
|
+
g: clamp(clamp(avg + (g - avg) * saturationBoost, none, maxChannel) * lightnessBoost, none, maxChannel),
|
|
1828
|
+
r: clamp(clamp(avg + (r - avg) * saturationBoost, none, maxChannel) * lightnessBoost, none, maxChannel),
|
|
1829
|
+
};
|
|
1830
|
+
}
|
|
1831
|
+
case HdrMode.cinematic: {
|
|
1832
|
+
const tempR = r * temperatureR, tempB = b * temperatureB, avg = (tempR + g + tempB) / channelCount;
|
|
1833
|
+
return {
|
|
1834
|
+
b: clamp(avg + (tempB - avg) * contrastFactor, none, maxChannel),
|
|
1835
|
+
g: clamp(avg + (g - avg) * contrastFactor, none, maxChannel),
|
|
1836
|
+
r: clamp(avg + (tempR - avg) * contrastFactor, none, maxChannel),
|
|
1837
|
+
};
|
|
1838
|
+
}
|
|
1839
|
+
case HdrMode.dynamic: {
|
|
1840
|
+
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;
|
|
1841
|
+
return {
|
|
1842
|
+
b: clamp(b * naturalWeight + vividB * vividWeight, none, maxChannel),
|
|
1843
|
+
g: clamp(g * naturalWeight + vividG * vividWeight, none, maxChannel),
|
|
1844
|
+
r: clamp(r * naturalWeight + vividR * vividWeight, none, maxChannel),
|
|
1845
|
+
};
|
|
1846
|
+
}
|
|
1847
|
+
case HdrMode.standard:
|
|
1848
|
+
return { b, g, r };
|
|
1849
|
+
case HdrMode.natural:
|
|
1850
|
+
default:
|
|
1851
|
+
return { b, g, r };
|
|
1852
|
+
}
|
|
1853
|
+
}
|
|
1773
1854
|
function stringToRgba(pluginManager, input) {
|
|
1774
1855
|
if (!input) {
|
|
1775
1856
|
return;
|
|
@@ -1927,21 +2008,40 @@
|
|
|
1927
2008
|
r: getRgbInRangeValue(),
|
|
1928
2009
|
};
|
|
1929
2010
|
}
|
|
1930
|
-
function getStyleFromRgb(color, hdr, opacity) {
|
|
1931
|
-
const rgbPrecision = hdr ? hdrRgbFixedPrecision : rgbFixedPrecision, op = opacity ?? defaultOpacity$1, key =
|
|
1932
|
-
|
|
2011
|
+
function getStyleFromRgb(color, hdr, opacity, peakNits, mode) {
|
|
2012
|
+
const rgbPrecision = hdr ? hdrRgbFixedPrecision : rgbFixedPrecision, op = opacity ?? defaultOpacity$1, key = hdr
|
|
2013
|
+
? `rgb-${color.r.toFixed(rgbPrecision)}-${color.g.toFixed(rgbPrecision)}-${color.b.toFixed(rgbPrecision)}-hdr-${op.toString()}-${(peakNits ?? maxNits).toString()}-${mode ?? HdrMode.standard}`
|
|
2014
|
+
: `rgb-${color.r.toFixed(rgbPrecision)}-${color.g.toFixed(rgbPrecision)}-${color.b.toFixed(rgbPrecision)}-sdr-${op.toString()}`;
|
|
2015
|
+
return getCachedStyle(key, () => hdr ? getHdrStyleFromRgb(color, opacity, peakNits, mode) : getSdrStyleFromRgb(color, opacity));
|
|
2016
|
+
}
|
|
2017
|
+
function getHdrStyleFromRgb(color, opacity, peakNits = maxNits, mode = HdrMode.standard) {
|
|
2018
|
+
const headroom = peakNits / sdrReferenceWhiteNits, middleGray = 0.18, mapped = hdrToneMapColor(color, headroom, middleGray, mode);
|
|
2019
|
+
return `color(display-p3 ${mapped.r.toString()} ${mapped.g.toString()} ${mapped.b.toString()} / ${(opacity ?? defaultOpacity$1).toString()})`;
|
|
1933
2020
|
}
|
|
1934
|
-
function
|
|
1935
|
-
const
|
|
1936
|
-
|
|
2021
|
+
function hdrToneMapColor(color, headroom, middleGray, mode) {
|
|
2022
|
+
const rNorm = color.r / rgbMax, gNorm = color.g / rgbMax, bNorm = color.b / rgbMax;
|
|
2023
|
+
if (mode !== HdrMode.natural && mode !== HdrMode.vivid && mode !== HdrMode.cinematic && mode !== HdrMode.dynamic) {
|
|
2024
|
+
return { b: bNorm, g: gNorm, r: rNorm };
|
|
2025
|
+
}
|
|
2026
|
+
const maxChannel = Math.max(one, headroom), luminance = luminanceR * rNorm + luminanceG * gNorm + luminanceB * bNorm, mappedLuminance = hdrToneMap(luminance, headroom, middleGray), scale = luminance > none ? mappedLuminance / luminance : one;
|
|
2027
|
+
return applyHdrModeAdjustments(clamp(rNorm * scale, none, maxChannel), clamp(gNorm * scale, none, maxChannel), clamp(bNorm * scale, none, maxChannel), mode, maxChannel);
|
|
2028
|
+
}
|
|
2029
|
+
function hdrToneMap(normalized, headroom, middleGray) {
|
|
2030
|
+
if (normalized <= middleGray) {
|
|
2031
|
+
return acesFilmic(normalized);
|
|
2032
|
+
}
|
|
2033
|
+
const expanded = normalized + (normalized - middleGray) * (headroom - one);
|
|
2034
|
+
return acesFilmic(expanded);
|
|
1937
2035
|
}
|
|
1938
2036
|
function getSdrStyleFromRgb(color, opacity) {
|
|
1939
2037
|
return `rgba(${color.r.toString()}, ${color.g.toString()}, ${color.b.toString()}, ${(opacity ?? defaultOpacity$1).toString()})`;
|
|
1940
2038
|
}
|
|
1941
|
-
function getStyleFromHsl(color, hdr, opacity) {
|
|
1942
|
-
const hslPrecision = hdr ? hdrHslFixedPrecision : hslFixedPrecision, op = opacity ?? defaultOpacity$1, key =
|
|
2039
|
+
function getStyleFromHsl(color, hdr, opacity, peakNits, mode) {
|
|
2040
|
+
const hslPrecision = hdr ? hdrHslFixedPrecision : hslFixedPrecision, op = opacity ?? defaultOpacity$1, key = hdr
|
|
2041
|
+
? `hsl-${color.h.toFixed(hslPrecision)}-${color.s.toFixed(hslPrecision)}-${color.l.toFixed(hslPrecision)}-hdr-${op.toString()}-${(peakNits ?? maxNits).toString()}-${mode ?? HdrMode.standard}`
|
|
2042
|
+
: `hsl-${color.h.toFixed(hslPrecision)}-${color.s.toFixed(hslPrecision)}-${color.l.toFixed(hslPrecision)}-sdr-${op.toString()}`;
|
|
1943
2043
|
return getCachedStyle(key, () => hdr
|
|
1944
|
-
? getStyleFromRgb(hslToRgbFloat(color), true, opacity)
|
|
2044
|
+
? getStyleFromRgb(hslToRgbFloat(color), true, opacity, peakNits, mode)
|
|
1945
2045
|
: `hsla(${color.h.toString()}, ${color.s.toString()}%, ${color.l.toString()}%, ${op.toString()})`);
|
|
1946
2046
|
}
|
|
1947
2047
|
function getHslFromAnimation(animation) {
|
|
@@ -2004,7 +2104,7 @@
|
|
|
2004
2104
|
colorValue.velocity = defaultVelocity;
|
|
2005
2105
|
}
|
|
2006
2106
|
}
|
|
2007
|
-
function updateColorValue(data, decrease, delta,
|
|
2107
|
+
function updateColorValue(data, decrease, delta, _hdr) {
|
|
2008
2108
|
const minLoops = 0, minDelay = 0, identity = 1, minVelocity = 0, minOffset = 0, velocityFactor = 3.6;
|
|
2009
2109
|
if (!data.enable ||
|
|
2010
2110
|
((data.maxLoops ?? minLoops) > minLoops && (data.loops ?? minLoops) > (data.maxLoops ?? minLoops))) {
|
|
@@ -2017,7 +2117,7 @@
|
|
|
2017
2117
|
if ((data.delayTime ?? minDelay) > minDelay && data.time < (data.delayTime ?? minDelay)) {
|
|
2018
2118
|
return;
|
|
2019
2119
|
}
|
|
2020
|
-
const offset = data.offset ? randomInRangeValue(data.offset) : minOffset, velocity = (
|
|
2120
|
+
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;
|
|
2021
2121
|
if (!decrease || data.status === AnimationStatus.increasing) {
|
|
2022
2122
|
data.value += velocity;
|
|
2023
2123
|
if (data.value > max) {
|
|
@@ -2049,9 +2149,9 @@
|
|
|
2049
2149
|
return;
|
|
2050
2150
|
}
|
|
2051
2151
|
const { h, s, l } = color;
|
|
2052
|
-
updateColorValue(h, false, delta
|
|
2053
|
-
updateColorValue(s, true, delta
|
|
2054
|
-
updateColorValue(l, true, delta
|
|
2152
|
+
updateColorValue(h, false, delta);
|
|
2153
|
+
updateColorValue(s, true, delta);
|
|
2154
|
+
updateColorValue(l, true, delta);
|
|
2055
2155
|
}
|
|
2056
2156
|
function alterHsl(color, type, value) {
|
|
2057
2157
|
return {
|
|
@@ -2101,7 +2201,7 @@
|
|
|
2101
2201
|
}
|
|
2102
2202
|
|
|
2103
2203
|
async function loadBlendPlugin(engine) {
|
|
2104
|
-
engine.checkVersion("4.
|
|
2204
|
+
engine.checkVersion("4.4.0");
|
|
2105
2205
|
await engine.pluginManager.register(e => {
|
|
2106
2206
|
e.pluginManager.addPlugin(new BlendPlugin());
|
|
2107
2207
|
});
|
|
@@ -2138,7 +2238,7 @@
|
|
|
2138
2238
|
}
|
|
2139
2239
|
|
|
2140
2240
|
async function loadCircleShape(engine) {
|
|
2141
|
-
engine.checkVersion("4.
|
|
2241
|
+
engine.checkVersion("4.4.0");
|
|
2142
2242
|
await engine.pluginManager.register(e => {
|
|
2143
2243
|
e.pluginManager.addShape(["circle"], () => {
|
|
2144
2244
|
return Promise.resolve(new CircleDrawer());
|
|
@@ -2186,7 +2286,7 @@
|
|
|
2186
2286
|
}
|
|
2187
2287
|
|
|
2188
2288
|
async function loadHexColorPlugin(engine) {
|
|
2189
|
-
engine.checkVersion("4.
|
|
2289
|
+
engine.checkVersion("4.4.0");
|
|
2190
2290
|
await engine.pluginManager.register(e => {
|
|
2191
2291
|
e.pluginManager.addColorManager("hex", new HexColorManager());
|
|
2192
2292
|
});
|
|
@@ -2239,7 +2339,7 @@
|
|
|
2239
2339
|
}
|
|
2240
2340
|
|
|
2241
2341
|
async function loadHslColorPlugin(engine) {
|
|
2242
|
-
engine.checkVersion("4.
|
|
2342
|
+
engine.checkVersion("4.4.0");
|
|
2243
2343
|
await engine.pluginManager.register(e => {
|
|
2244
2344
|
e.pluginManager.addColorManager("hsl", new HslColorManager());
|
|
2245
2345
|
});
|
|
@@ -2263,7 +2363,7 @@
|
|
|
2263
2363
|
}
|
|
2264
2364
|
|
|
2265
2365
|
async function loadMovePlugin(engine) {
|
|
2266
|
-
engine.checkVersion("4.
|
|
2366
|
+
engine.checkVersion("4.4.0");
|
|
2267
2367
|
await engine.pluginManager.register(e => {
|
|
2268
2368
|
const moveEngine = e, movePluginManager = moveEngine.pluginManager;
|
|
2269
2369
|
movePluginManager.initializers.pathGenerators ??= new Map();
|
|
@@ -2479,7 +2579,7 @@
|
|
|
2479
2579
|
}
|
|
2480
2580
|
|
|
2481
2581
|
async function loadOpacityUpdater(engine) {
|
|
2482
|
-
engine.checkVersion("4.
|
|
2582
|
+
engine.checkVersion("4.4.0");
|
|
2483
2583
|
await engine.pluginManager.register(e => {
|
|
2484
2584
|
e.pluginManager.addParticleUpdater("opacity", container => {
|
|
2485
2585
|
return Promise.resolve(new OpacityUpdater(container));
|
|
@@ -2824,7 +2924,7 @@
|
|
|
2824
2924
|
}
|
|
2825
2925
|
|
|
2826
2926
|
async function loadOutModesUpdater(engine) {
|
|
2827
|
-
engine.checkVersion("4.
|
|
2927
|
+
engine.checkVersion("4.4.0");
|
|
2828
2928
|
await engine.pluginManager.register(e => {
|
|
2829
2929
|
e.pluginManager.addParticleUpdater("outModes", container => {
|
|
2830
2930
|
return Promise.resolve(new OutOfCanvasUpdater(container));
|
|
@@ -2895,7 +2995,7 @@
|
|
|
2895
2995
|
}
|
|
2896
2996
|
|
|
2897
2997
|
async function loadPaintUpdater(engine) {
|
|
2898
|
-
engine.checkVersion("4.
|
|
2998
|
+
engine.checkVersion("4.4.0");
|
|
2899
2999
|
await engine.pluginManager.register(e => {
|
|
2900
3000
|
e.pluginManager.addParticleUpdater("paint", container => {
|
|
2901
3001
|
return Promise.resolve(new PaintUpdater(e.pluginManager, container));
|
|
@@ -2950,7 +3050,7 @@
|
|
|
2950
3050
|
}
|
|
2951
3051
|
|
|
2952
3052
|
async function loadRgbColorPlugin(engine) {
|
|
2953
|
-
engine.checkVersion("4.
|
|
3053
|
+
engine.checkVersion("4.4.0");
|
|
2954
3054
|
await engine.pluginManager.register(e => {
|
|
2955
3055
|
e.pluginManager.addColorManager("rgb", new RgbColorManager());
|
|
2956
3056
|
});
|
|
@@ -3035,7 +3135,7 @@
|
|
|
3035
3135
|
}
|
|
3036
3136
|
|
|
3037
3137
|
async function loadSizeUpdater(engine) {
|
|
3038
|
-
engine.checkVersion("4.
|
|
3138
|
+
engine.checkVersion("4.4.0");
|
|
3039
3139
|
await engine.pluginManager.register(e => {
|
|
3040
3140
|
e.pluginManager.addParticleUpdater("size", container => {
|
|
3041
3141
|
return Promise.resolve(new SizeUpdater(container));
|
|
@@ -3044,7 +3144,7 @@
|
|
|
3044
3144
|
}
|
|
3045
3145
|
|
|
3046
3146
|
async function loadBasic(engine) {
|
|
3047
|
-
engine.checkVersion("4.
|
|
3147
|
+
engine.checkVersion("4.4.0");
|
|
3048
3148
|
await engine.pluginManager.register(async (e) => {
|
|
3049
3149
|
await Promise.all([
|
|
3050
3150
|
loadBlendPlugin(e),
|
|
@@ -3137,7 +3237,7 @@
|
|
|
3137
3237
|
}
|
|
3138
3238
|
|
|
3139
3239
|
async function loadMotionPlugin(engine) {
|
|
3140
|
-
engine.checkVersion("4.
|
|
3240
|
+
engine.checkVersion("4.4.0");
|
|
3141
3241
|
await engine.pluginManager.register(e => {
|
|
3142
3242
|
e.pluginManager.addPlugin(new MotionPlugin());
|
|
3143
3243
|
});
|
|
@@ -3270,7 +3370,7 @@
|
|
|
3270
3370
|
}
|
|
3271
3371
|
|
|
3272
3372
|
async function loadRollUpdater(engine) {
|
|
3273
|
-
engine.checkVersion("4.
|
|
3373
|
+
engine.checkVersion("4.4.0");
|
|
3274
3374
|
await engine.pluginManager.register(e => {
|
|
3275
3375
|
e.pluginManager.addParticleUpdater("roll", () => {
|
|
3276
3376
|
return Promise.resolve(new RollUpdater(e.pluginManager));
|
|
@@ -3376,7 +3476,7 @@
|
|
|
3376
3476
|
}
|
|
3377
3477
|
|
|
3378
3478
|
async function loadRotateUpdater(engine) {
|
|
3379
|
-
engine.checkVersion("4.
|
|
3479
|
+
engine.checkVersion("4.4.0");
|
|
3380
3480
|
await engine.pluginManager.register(e => {
|
|
3381
3481
|
e.pluginManager.addParticleUpdater("rotate", container => {
|
|
3382
3482
|
return Promise.resolve(new RotateUpdater(container));
|
|
@@ -3400,7 +3500,7 @@
|
|
|
3400
3500
|
}
|
|
3401
3501
|
|
|
3402
3502
|
async function loadSquareShape(engine) {
|
|
3403
|
-
engine.checkVersion("4.
|
|
3503
|
+
engine.checkVersion("4.4.0");
|
|
3404
3504
|
await engine.pluginManager.register(e => {
|
|
3405
3505
|
e.pluginManager.addShape(["edge", "square"], () => Promise.resolve(new SquareDrawer()));
|
|
3406
3506
|
});
|
|
@@ -3509,7 +3609,7 @@
|
|
|
3509
3609
|
}
|
|
3510
3610
|
|
|
3511
3611
|
async function loadTiltUpdater(engine) {
|
|
3512
|
-
engine.checkVersion("4.
|
|
3612
|
+
engine.checkVersion("4.4.0");
|
|
3513
3613
|
await engine.pluginManager.register(e => {
|
|
3514
3614
|
e.pluginManager.addParticleUpdater("tilt", container => {
|
|
3515
3615
|
return Promise.resolve(new TiltUpdater(container));
|
|
@@ -3611,7 +3711,7 @@
|
|
|
3611
3711
|
}
|
|
3612
3712
|
|
|
3613
3713
|
async function loadWobbleUpdater(engine) {
|
|
3614
|
-
engine.checkVersion("4.
|
|
3714
|
+
engine.checkVersion("4.4.0");
|
|
3615
3715
|
await engine.pluginManager.register(e => {
|
|
3616
3716
|
e.pluginManager.addParticleUpdater("wobble", container => {
|
|
3617
3717
|
return Promise.resolve(new WobbleUpdater(container));
|
|
@@ -3848,7 +3948,11 @@
|
|
|
3848
3948
|
if (!fColor && !sColor) {
|
|
3849
3949
|
return;
|
|
3850
3950
|
}
|
|
3851
|
-
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
|
|
3951
|
+
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
|
|
3952
|
+
? getStyleFromHsl(fColor, container.hdr, fillOpacity * opacity, container.peakNits, container.hdrMode)
|
|
3953
|
+
: undefined, stroke = sColor
|
|
3954
|
+
? getStyleFromHsl(sColor, container.hdr, strokeOpacity * opacity, container.peakNits, container.hdrMode)
|
|
3955
|
+
: fill;
|
|
3852
3956
|
transform.a = transform.b = transform.c = transform.d = undefined;
|
|
3853
3957
|
colorStyles.fill = fill;
|
|
3854
3958
|
colorStyles.stroke = stroke;
|
|
@@ -4182,7 +4286,9 @@
|
|
|
4182
4286
|
if (typeof background.element === "string") {
|
|
4183
4287
|
if (typeof document !== "undefined") {
|
|
4184
4288
|
const node = document.querySelector(background.element);
|
|
4185
|
-
if (
|
|
4289
|
+
if ((typeof HTMLCanvasElement !== "undefined" && node instanceof HTMLCanvasElement) ||
|
|
4290
|
+
(typeof HTMLVideoElement !== "undefined" && node instanceof HTMLVideoElement) ||
|
|
4291
|
+
(typeof HTMLImageElement !== "undefined" && node instanceof HTMLImageElement)) {
|
|
4186
4292
|
this.#backgroundElement = node;
|
|
4187
4293
|
}
|
|
4188
4294
|
else if (node) {
|
|
@@ -4193,10 +4299,10 @@
|
|
|
4193
4299
|
}
|
|
4194
4300
|
}
|
|
4195
4301
|
}
|
|
4196
|
-
else if (background.element instanceof HTMLCanvasElement ||
|
|
4197
|
-
background.element instanceof OffscreenCanvas ||
|
|
4198
|
-
background.element instanceof HTMLVideoElement ||
|
|
4199
|
-
background.element instanceof HTMLImageElement) {
|
|
4302
|
+
else if ((typeof HTMLCanvasElement !== "undefined" && background.element instanceof HTMLCanvasElement) ||
|
|
4303
|
+
(typeof OffscreenCanvas !== "undefined" && background.element instanceof OffscreenCanvas) ||
|
|
4304
|
+
(typeof HTMLVideoElement !== "undefined" && background.element instanceof HTMLVideoElement) ||
|
|
4305
|
+
(typeof HTMLImageElement !== "undefined" && background.element instanceof HTMLImageElement)) {
|
|
4200
4306
|
this.#backgroundElement = background.element;
|
|
4201
4307
|
}
|
|
4202
4308
|
}
|
|
@@ -4264,6 +4370,7 @@
|
|
|
4264
4370
|
zoom = defaultZoom;
|
|
4265
4371
|
#container;
|
|
4266
4372
|
#generated;
|
|
4373
|
+
#hdrMediaListeners;
|
|
4267
4374
|
#mutationObserver;
|
|
4268
4375
|
#originalStyle;
|
|
4269
4376
|
#pluginManager;
|
|
@@ -4328,7 +4435,6 @@
|
|
|
4328
4435
|
});
|
|
4329
4436
|
this.resize();
|
|
4330
4437
|
this.#initStyle();
|
|
4331
|
-
this.initBackground();
|
|
4332
4438
|
this.#safeMutationObserver(obs => {
|
|
4333
4439
|
const element = this.domElement;
|
|
4334
4440
|
if (!element || !(element instanceof Node)) {
|
|
@@ -4338,6 +4444,8 @@
|
|
|
4338
4444
|
});
|
|
4339
4445
|
this.initPlugins();
|
|
4340
4446
|
this.#initContext();
|
|
4447
|
+
this.initBackground();
|
|
4448
|
+
this.#initHdrListeners();
|
|
4341
4449
|
this.render.init();
|
|
4342
4450
|
}
|
|
4343
4451
|
initBackground() {
|
|
@@ -4347,7 +4455,8 @@
|
|
|
4347
4455
|
}
|
|
4348
4456
|
const elementStyle = element.style, color = rangeColorToRgb(this.#pluginManager, background.color);
|
|
4349
4457
|
if (color) {
|
|
4350
|
-
|
|
4458
|
+
const hdrOptions = container.actualOptions.hdr;
|
|
4459
|
+
elementStyle.backgroundColor = getStyleFromRgb(color, container.hdr, background.opacity, hdrOptions.peakNits, hdrOptions.mode);
|
|
4351
4460
|
}
|
|
4352
4461
|
else {
|
|
4353
4462
|
elementStyle.backgroundColor = "";
|
|
@@ -4444,6 +4553,7 @@
|
|
|
4444
4553
|
obs.disconnect();
|
|
4445
4554
|
});
|
|
4446
4555
|
this.#mutationObserver = undefined;
|
|
4556
|
+
this.#removeHdrListeners();
|
|
4447
4557
|
this.render.stop();
|
|
4448
4558
|
}
|
|
4449
4559
|
async windowResize() {
|
|
@@ -4463,9 +4573,16 @@
|
|
|
4463
4573
|
}
|
|
4464
4574
|
}
|
|
4465
4575
|
#initContext() {
|
|
4466
|
-
const container = this.#container, canSupportHdr = container.actualOptions.hdr &&
|
|
4576
|
+
const container = this.#container, canSupportHdr = container.actualOptions.hdr.enable &&
|
|
4467
4577
|
safeMatchMedia("(color-gamut: p3)")?.matches &&
|
|
4468
4578
|
safeMatchMedia("(dynamic-range: high)")?.matches;
|
|
4579
|
+
container.hdr = canSupportHdr ?? false;
|
|
4580
|
+
container.hdrMode = container.actualOptions.hdr.mode;
|
|
4581
|
+
container.peakNits = container.actualOptions.hdr.peakNits;
|
|
4582
|
+
const renderCanvas = this.renderCanvas;
|
|
4583
|
+
if (!renderCanvas) {
|
|
4584
|
+
return;
|
|
4585
|
+
}
|
|
4469
4586
|
this.render.setContextSettings({
|
|
4470
4587
|
alpha: true,
|
|
4471
4588
|
desynchronized: true,
|
|
@@ -4474,11 +4591,47 @@
|
|
|
4474
4591
|
? { colorSpace: "display-p3", colorType: "float16" }
|
|
4475
4592
|
: { colorSpace: "srgb" }),
|
|
4476
4593
|
});
|
|
4477
|
-
|
|
4478
|
-
|
|
4479
|
-
|
|
4594
|
+
let context;
|
|
4595
|
+
try {
|
|
4596
|
+
context = renderCanvas.getContext("2d", this.render.settings);
|
|
4597
|
+
}
|
|
4598
|
+
catch {
|
|
4599
|
+
context = null;
|
|
4600
|
+
}
|
|
4601
|
+
if (canSupportHdr && !context) {
|
|
4602
|
+
container.hdr = false;
|
|
4603
|
+
const sdrSettings = {
|
|
4604
|
+
alpha: true,
|
|
4605
|
+
desynchronized: true,
|
|
4606
|
+
willReadFrequently: false,
|
|
4607
|
+
colorSpace: "srgb",
|
|
4608
|
+
};
|
|
4609
|
+
this.render.setContextSettings(sdrSettings);
|
|
4610
|
+
try {
|
|
4611
|
+
context = renderCanvas.getContext("2d", sdrSettings);
|
|
4612
|
+
}
|
|
4613
|
+
catch {
|
|
4614
|
+
context = null;
|
|
4615
|
+
}
|
|
4616
|
+
}
|
|
4617
|
+
this.render.setContext(context);
|
|
4618
|
+
}
|
|
4619
|
+
#initHdrListeners() {
|
|
4620
|
+
this.#removeHdrListeners();
|
|
4621
|
+
const p3Query = safeMatchMedia("(color-gamut: p3)"), hdrQuery = safeMatchMedia("(dynamic-range: high)"), handleChange = () => {
|
|
4622
|
+
this.#recreateRenderCanvas();
|
|
4623
|
+
this.#initContext();
|
|
4624
|
+
this.initBackground();
|
|
4625
|
+
}, listeners = [];
|
|
4626
|
+
if (p3Query) {
|
|
4627
|
+
p3Query.addEventListener("change", handleChange);
|
|
4628
|
+
listeners.push({ handler: handleChange, mql: p3Query });
|
|
4629
|
+
}
|
|
4630
|
+
if (hdrQuery) {
|
|
4631
|
+
hdrQuery.addEventListener("change", handleChange);
|
|
4632
|
+
listeners.push({ handler: handleChange, mql: hdrQuery });
|
|
4480
4633
|
}
|
|
4481
|
-
this
|
|
4634
|
+
this.#hdrMediaListeners = listeners;
|
|
4482
4635
|
}
|
|
4483
4636
|
#initStyle() {
|
|
4484
4637
|
const element = this.domElement, options = this.#container.actualOptions;
|
|
@@ -4502,6 +4655,25 @@
|
|
|
4502
4655
|
element.style.setProperty(key, value, "important");
|
|
4503
4656
|
}
|
|
4504
4657
|
}
|
|
4658
|
+
#recreateRenderCanvas() {
|
|
4659
|
+
const renderCanvas = this.renderCanvas;
|
|
4660
|
+
if (!renderCanvas) {
|
|
4661
|
+
return;
|
|
4662
|
+
}
|
|
4663
|
+
if (this.domElement) {
|
|
4664
|
+
return;
|
|
4665
|
+
}
|
|
4666
|
+
this.renderCanvas = new OffscreenCanvas(renderCanvas.width, renderCanvas.height);
|
|
4667
|
+
}
|
|
4668
|
+
#removeHdrListeners() {
|
|
4669
|
+
if (!this.#hdrMediaListeners) {
|
|
4670
|
+
return;
|
|
4671
|
+
}
|
|
4672
|
+
for (const { handler, mql } of this.#hdrMediaListeners) {
|
|
4673
|
+
mql.removeEventListener("change", handler);
|
|
4674
|
+
}
|
|
4675
|
+
this.#hdrMediaListeners = undefined;
|
|
4676
|
+
}
|
|
4505
4677
|
#repairStyle() {
|
|
4506
4678
|
const element = this.domElement;
|
|
4507
4679
|
if (!element) {
|
|
@@ -4886,9 +5058,9 @@
|
|
|
4886
5058
|
}
|
|
4887
5059
|
getOpacity() {
|
|
4888
5060
|
const zIndexOptions = this.options.zIndex, zIndexFactor = zIndexFactorOffset - this.zIndexFactor, zOpacityFactor = zIndexFactor ** zIndexOptions.opacityRate, baseOpacity = getRangeValue(this.opacity?.value ?? defaultOpacity$1), modifierOpacity = this.#applyModifiers(undefined, m => m.opacity), opacity = modifierOpacity ?? baseOpacity, fillOpacity = this.fillOpacity ?? defaultOpacity$1, strokeOpacity = this.strokeOpacity ?? defaultOpacity$1;
|
|
4889
|
-
this.#cachedOpacityData.fillOpacity =
|
|
5061
|
+
this.#cachedOpacityData.fillOpacity = fillOpacity;
|
|
4890
5062
|
this.#cachedOpacityData.opacity = opacity * zOpacityFactor;
|
|
4891
|
-
this.#cachedOpacityData.strokeOpacity =
|
|
5063
|
+
this.#cachedOpacityData.strokeOpacity = strokeOpacity;
|
|
4892
5064
|
return this.#cachedOpacityData;
|
|
4893
5065
|
}
|
|
4894
5066
|
getPosition() {
|
|
@@ -5743,6 +5915,7 @@
|
|
|
5743
5915
|
effectDrawers;
|
|
5744
5916
|
fpsLimit;
|
|
5745
5917
|
hdr;
|
|
5918
|
+
hdrMode;
|
|
5746
5919
|
id;
|
|
5747
5920
|
pageHidden;
|
|
5748
5921
|
particleCreatedPlugins;
|
|
@@ -5750,6 +5923,7 @@
|
|
|
5750
5923
|
particlePositionPlugins;
|
|
5751
5924
|
particleUpdaters;
|
|
5752
5925
|
particles;
|
|
5926
|
+
peakNits;
|
|
5753
5927
|
plugins;
|
|
5754
5928
|
retina;
|
|
5755
5929
|
shapeDrawers;
|
|
@@ -5780,6 +5954,8 @@
|
|
|
5780
5954
|
this.id = Symbol(id);
|
|
5781
5955
|
this.fpsLimit = 120;
|
|
5782
5956
|
this.hdr = false;
|
|
5957
|
+
this.hdrMode = HdrMode.standard;
|
|
5958
|
+
this.peakNits = 400;
|
|
5783
5959
|
this.#smooth = false;
|
|
5784
5960
|
this.#delay = 0;
|
|
5785
5961
|
this.#duration = 0;
|
|
@@ -5919,8 +6095,9 @@
|
|
|
5919
6095
|
this.updateActualOptions();
|
|
5920
6096
|
this.canvas.initBackground();
|
|
5921
6097
|
this.canvas.resize();
|
|
5922
|
-
const { delay, duration, fpsLimit,
|
|
5923
|
-
this.
|
|
6098
|
+
const { delay, duration, fpsLimit, smooth, zLayers } = this.actualOptions, hdrOptions = this.actualOptions.hdr;
|
|
6099
|
+
this.hdrMode = hdrOptions.mode;
|
|
6100
|
+
this.peakNits = hdrOptions.peakNits;
|
|
5924
6101
|
this.zLayers = zLayers;
|
|
5925
6102
|
this.#duration = getRangeValue(duration) * millisecondsToSeconds;
|
|
5926
6103
|
this.#delay = getRangeValue(delay) * millisecondsToSeconds;
|