@shohojdhara/atomix 0.3.12 → 0.3.13

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/index.esm.js CHANGED
@@ -1825,7 +1825,13 @@ const {CONSTANTS: CONSTANTS$1} = ATOMIX_GLASS, calculateDistance = (pos1, pos2)
1825
1825
  */ GlassFilterComponent.displayName = "GlassFilter";
1826
1826
 
1827
1827
  // Memoize component to prevent unnecessary re-renders
1828
- const GlassFilter = memo(GlassFilterComponent, ((prevProps, nextProps) => prevProps.id === nextProps.id && prevProps.displacementScale === nextProps.displacementScale && prevProps.aberrationIntensity === nextProps.aberrationIntensity && prevProps.mode === nextProps.mode && prevProps.shaderMapUrl === nextProps.shaderMapUrl && prevProps.blurAmount === nextProps.blurAmount)), sharedShaderCache = new Map, AtomixGlassContainer = forwardRef((({children: children, className: className = "", style: style, displacementScale: displacementScale = 25, blurAmount: blurAmount = .0625, saturation: saturation = 180, aberrationIntensity: aberrationIntensity = 2, mouseOffset: mouseOffset = {
1828
+ const GlassFilter = memo(GlassFilterComponent, ((prevProps, nextProps) => prevProps.id === nextProps.id && prevProps.displacementScale === nextProps.displacementScale && prevProps.aberrationIntensity === nextProps.aberrationIntensity && prevProps.mode === nextProps.mode && prevProps.shaderMapUrl === nextProps.shaderMapUrl && prevProps.blurAmount === nextProps.blurAmount));
1829
+
1830
+ // Module-level counter for deterministic ID generation
1831
+ let idCounter = 0;
1832
+
1833
+ // Module-level shared shader cache with LRU eviction
1834
+ const sharedShaderCache = new Map, AtomixGlassContainer = forwardRef((({children: children, className: className = "", style: style, displacementScale: displacementScale = 25, blurAmount: blurAmount = .0625, saturation: saturation = 180, aberrationIntensity: aberrationIntensity = 2, mouseOffset: mouseOffset = {
1829
1835
  x: 0,
1830
1836
  y: 0
1831
1837
  }, globalMousePosition: globalMousePosition = {
@@ -1836,10 +1842,8 @@ const GlassFilter = memo(GlassFilterComponent, ((prevProps, nextProps) => prevP
1836
1842
  height: 0
1837
1843
  }, onClick: onClick, mode: mode = "standard", effectiveDisableEffects: effectiveDisableEffects = !1, effectiveReducedMotion: effectiveReducedMotion = !1, shaderVariant: shaderVariant = "liquidGlass", enableLiquidBlur: enableLiquidBlur = !1, elasticity: elasticity = 0, contentRef: contentRef}, ref) => {
1838
1844
  // Generate a stable, deterministic ID for SSR compatibility
1839
- // Use a counter-based approach to avoid hydration mismatches
1840
- const [filterId] = useState((() =>
1841
- // Use a simple counter for deterministic IDs
1842
- "undefined" == typeof window ? `atomix-glass-filter-ssr-${Math.random().toString(36).substring(2, 11)}` : `atomix-glass-filter-${Date.now()}-${Math.random().toString(36).substring(2, 11)}`)), [shaderMapUrl, setShaderMapUrl] = useState(""), shaderGeneratorRef = useRef(null), shaderUtilsRef = useRef(null), shaderDebounceTimeoutRef = useRef(null);
1845
+ // Use a module-level counter that's consistent across server and client
1846
+ const filterId = useMemo((() => "atomix-glass-filter-" + ++idCounter), []), [shaderMapUrl, setShaderMapUrl] = useState(""), shaderGeneratorRef = useRef(null), shaderUtilsRef = useRef(null), shaderDebounceTimeoutRef = useRef(null);
1843
1847
  // Lazy load shader utilities only when shader mode is needed
1844
1848
  useEffect((() => {
1845
1849
  "shader" === mode ?
@@ -1880,9 +1884,9 @@ const GlassFilter = memo(GlassFilterComponent, ((prevProps, nextProps) => prevP
1880
1884
  width: glassSize.width,
1881
1885
  height: glassSize.height,
1882
1886
  fragment: selectedShader
1883
- });
1884
- // Use requestIdleCallback if available for non-blocking generation
1885
- const generate = () => {
1887
+ }),
1888
+ // Defer shader generation with longer delay to avoid blocking
1889
+ setTimeout((() => {
1886
1890
  const url = shaderGeneratorRef.current?.updateShader() || "";
1887
1891
  ((key, url) => {
1888
1892
  // Evict oldest entries if at capacity
@@ -1901,20 +1905,15 @@ const GlassFilter = memo(GlassFilterComponent, ((prevProps, nextProps) => prevP
1901
1905
  // Development mode: log cache size
1902
1906
  "undefined" != typeof process && "production" === process.env?.NODE_ENV || sharedShaderCache.size;
1903
1907
  })(cacheKey, url), setShaderMapUrl(url);
1904
- };
1905
- "undefined" != typeof requestIdleCallback ? requestIdleCallback(generate, {
1906
- timeout: 1e3
1907
- }) :
1908
- // Fallback to setTimeout for browsers without requestIdleCallback
1909
- setTimeout(generate, 0);
1908
+ }), 100);
1910
1909
  } catch (error) {
1911
1910
  console.warn("AtomixGlassContainer: Error generating shader map", error), setShaderMapUrl("");
1912
1911
  } else
1913
1912
  // Shader utils not loaded yet, retry after a short delay
1914
1913
  shaderDebounceTimeoutRef.current = setTimeout(generateShader, 100);
1915
1914
  };
1916
- // Debounce with 300ms delay
1917
- shaderDebounceTimeoutRef.current = setTimeout(generateShader, 300);
1915
+ // Debounce with 500ms delay to reduce frequency
1916
+ shaderDebounceTimeoutRef.current = setTimeout(generateShader, 500);
1918
1917
  } else
1919
1918
  // Not in shader mode, clear URL
1920
1919
  setShaderMapUrl("");
@@ -1981,7 +1980,7 @@ const GlassFilter = memo(GlassFilterComponent, ((prevProps, nextProps) => prevP
1981
1980
  backdropFilter: `blur(${blurAmount}px) saturate(${saturation}%) contrast(1.05) brightness(1.05)`
1982
1981
  };
1983
1982
  }
1984
- }), [ filterId, liquidBlur, saturation, blurAmount, rectCache, effectiveReducedMotion, effectiveDisableEffects, enableLiquidBlur ]), containerVars = useMemo((() => {
1983
+ }), [ liquidBlur, saturation, blurAmount, rectCache, effectiveReducedMotion, effectiveDisableEffects, enableLiquidBlur ]), containerVars = useMemo((() => {
1985
1984
  try {
1986
1985
  // Safe extraction of mouse offset values
1987
1986
  const mx = mouseOffset && "number" == typeof mouseOffset.x && !isNaN(mouseOffset.x) ? mouseOffset.x : 0, my = mouseOffset && "number" == typeof mouseOffset.y && !isNaN(mouseOffset.y) ? mouseOffset.y : 0;
@@ -2070,7 +2069,6 @@ const GlassFilter = memo(GlassFilterComponent, ((prevProps, nextProps) => prevP
2070
2069
  });
2071
2070
  }));
2072
2071
 
2073
- // Module-level shared shader cache with LRU eviction
2074
2072
  AtomixGlassContainer.displayName = "AtomixGlassContainer";
2075
2073
 
2076
2074
  // Singleton instance