Skip to content

Releases: rexa-developer/tiks

v0.3.0

11 Jun 19:57

Choose a tag to compare

What's new

Features

  • Hover throttlinghover() is rate-limited in the engine (default 80 ms, init({ hoverThrottleMs }), 0 disables)
  • Declarative bindingbindTiks() wires <button data-tiks="click"> (and toggle/toggle-on/toggle-off) via one delegated listener — ideal for the CDN/no-build setup
  • Two new themesarcade (chunky 8-bit square-wave) and glass (airy, resonant) alongside soft and crisp
  • Svelte & Solid adapters@rexa-developer/tiks/svelte and …/solid, plus a framework-free createTiks() factory for multi-instance use (zero new dependencies)

Fixes

  • respectReducedMotion: false is now honored regardless of init order (was a permanent no-op after any default init())
  • init({ muted: false }) can now unmute — the muted option is last-explicit-wins like volume
  • iOS: gesture unlock no longer dead-ends when resume() resolves while the context is interrupted

Internals

  • 137-test suite incl. characterization tests pinning every generator's envelopes and frequencies
  • Biome lint + format gating CI
  • Fully automated releases: npm version syncs the demo's CDN pin; the tag publishes to npm with provenance

Size: core ~3.5 KB gzip (everything included — tree-shakes smaller in bundler builds)

v0.2.0

18 May 08:21

Choose a tag to compare

Changed

  • Default output is ~3× louder. Per-sound envelopes were boosted so the default volume: 0.3 is actually audible (~−10 dBFS for click()) — the relative balance between sounds is unchanged. Apps that relied on the previous quieter level can lower volume.
  • prefers-reduced-motion is now respected by default and reacts to runtime preference changes. Pass respectReducedMotion: false to opt out.

Added

  • Transparent master limiter (DynamicsCompressorNode) — prevents hard clipping when sounds overlap during rapid interaction; inactive at normal single-sound levels.

Fixed

  • Crisper click() — duration ~30ms → ~13ms and tighter band (filterQ 0.7→2.0 soft, 1.2→3.0 crisp).
  • First sound after a tab-visibility restore is no longer dropped (played after async resume() instead of discarded).
  • React: useTiks no longer re-runs init() every render when passed a custom theme object.
  • Vue: useTiks initializes once on mount (removed a no-op watchEffect).

Full Changelog: v0.1.9...v0.2.0

v0.1.9

30 Apr 08:07

Choose a tag to compare

Fix

  • Defer AudioContext creation to first user gesture — eliminates the Chrome "AudioContext was not allowed to start" warning, and ensures the first sound after a user gesture plays reliably (closes #2).

Full Changelog: v0.1.8...v0.1.9