{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "card-slide-7",
  "type": "registry:block",
  "title": "Card Slide 7",
  "author": "Kenney <https://kenney.nl>",
  "description": "A slightly extended, gentle sliding sound for a virtual card, suggesting a deliberate but unforced movement.",
  "files": [
    {
      "path": "registry/soundcn/sounds/card-slide-7/card-slide-7.ts",
      "content": "import type { SoundAsset } from \"@/lib/sound-types\";\n\nexport const cardSlide7Sound: SoundAsset = {\n  name: \"card-slide-7\",\n  dataUri: \"data:audio/mpeg;base64,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bHtMvOMnSLOaajGXfp5sjylChjDvEgUB5gSY4TDXm0GGMQpdJUbFqmz1v/GtdVjnDQFKiQ1L1CJ0ytiVABDnKxwRJoRi4LsND6aazIyYMKkM1ECjBpb3VB6LIpmvcmyzhGGed5RuFSwgesqeeUjnTji9R8c5F7TAu+dvvumg02h7iq3nYghhgXTYL6L/+1LEqoAKUE9NhhhsgVMN6bz0jOgjq5WBK4loEHDWhycGasKEGmqBxmQR3KMtIXxNOgYmJL5BRspm+fzjB2v35vNW0z0bWcpRy1q3yb/mzcYsHn//7ytfG/eW+bgnF0QscPv4Pzl/6rtVyaxoQskAhARymBpmWjz3em8CAiAysLohwSnUGtNPoMFVlqOCD0gsbBVhc4KHHX2JcMStp2ZEeSIcePc4KoemhK44VcXYww63+ymlzOIoDRE3YWUmjbscYKUgEeJg9crtz2YTDlW4lP/7UsS0gAr8nUmHsGOBU43ocPSM4LIGosYjD0ARCqMAgYlIdRjryKDOSZxt/g5mUoP53hu9Jr5cXmCqnlrAOaQeecsiqqVs6yoqhW9YAfi3Wtdo9QbLBySwTSVDzk/v2+v1tttusskkkYA9c+YSsh/DThGOSXSARSi6AZpIZWzrNoyPr6BDFKhK8pTpBVqwesnAtBkuNrwUq+WWJgbWhhYoza5Kd20MKO0ol9HwldGtZeVmn8aAccti/qmBCg11Wu5ca1HtdkSSPbp7f+uN1hwc//tSxLwACoAxQQewwMlTDCh09IzgxY99QdR6WX74mrExa2a4/xWNf1hwt5t6WtE0Czj+sRVAJIVh2gBgAEguFUEQIiKpaMjI+5pc9teaXIGjxItEUqdEt4KgUNfg0o9UeEX5U6SwVWd/EU9nv6w2JXSsFZY9/Ue/lTqMS0xBTUUzLjEwMFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/+1LExYALTKFBlZGAAmSjqzcy8AJVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVf/7UsSpg8g8Jwb8wIAAAAA0gAAABFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV\",\n  duration: 0.636,\n  format: \"mp3\",\n  license: \"CC0\",\n  author: \"Kenney\",\n};\n",
      "type": "registry:lib"
    },
    {
      "path": "registry/soundcn/lib/sound-types.ts",
      "content": "export interface SoundAsset {\r\n  /** Unique identifier for the sound */\r\n  name: string;\r\n  /** Base64-encoded data URI (data:audio/mpeg;base64,...) */\r\n  dataUri: string;\r\n  /** Duration in seconds */\r\n  duration: number;\r\n  /** Audio format */\r\n  format: \"mp3\" | \"wav\" | \"ogg\";\r\n  /** License identifier */\r\n  license: \"CC0\" | \"OGA-BY\" | \"MIT\";\r\n  /** Original author/creator */\r\n  author: string;\r\n}\r\n\r\nexport interface UseSoundOptions {\r\n  /** Volume level from 0 to 1. Default: 1 */\r\n  volume?: number;\r\n  /** Playback speed multiplier. Default: 1 */\r\n  playbackRate?: number;\r\n  /** If true, calling play() stops current playback first. Default: false */\r\n  interrupt?: boolean;\r\n  /** If false, play() does nothing. Useful for user preferences. Default: true */\r\n  soundEnabled?: boolean;\r\n  /** Called when playback starts */\r\n  onPlay?: () => void;\r\n  /** Called when playback ends naturally */\r\n  onEnd?: () => void;\r\n  /** Called when pause() is called */\r\n  onPause?: () => void;\r\n  /** Called when stop() is called */\r\n  onStop?: () => void;\r\n}\r\n\r\nexport type PlayFunction = (overrides?: {\r\n  volume?: number;\r\n  playbackRate?: number;\r\n}) => void;\r\n\r\nexport interface SoundControls {\r\n  stop: () => void;\r\n  pause: () => void;\r\n  isPlaying: boolean;\r\n  duration: number | null;\r\n  sound: SoundAsset;\r\n}\r\n\r\nexport type UseSoundReturn = readonly [PlayFunction, SoundControls];\r\n",
      "type": "registry:lib"
    },
    {
      "path": "registry/soundcn/lib/sound-engine.ts",
      "content": "let audioContext: AudioContext | null = null;\nconst bufferCache = new Map<string, AudioBuffer>();\n\nexport function getAudioContext(): AudioContext {\n  if (!audioContext) {\n    audioContext = new AudioContext();\n  }\n  return audioContext;\n}\n\nexport async function decodeAudioData(dataUri: string): Promise<AudioBuffer> {\n  const cached = bufferCache.get(dataUri);\n  if (cached) return cached;\n\n  const ctx = getAudioContext();\n  const base64 = dataUri.split(\",\")[1];\n  const binaryString = atob(base64);\n  const bytes = new Uint8Array(binaryString.length);\n  for (let i = 0; i < binaryString.length; i++) {\n    bytes[i] = binaryString.charCodeAt(i);\n  }\n\n  const audioBuffer = await ctx.decodeAudioData(bytes.buffer.slice(0));\n  bufferCache.set(dataUri, audioBuffer);\n  return audioBuffer;\n}\n\nexport interface PlaySoundOptions {\n  volume?: number;\n  playbackRate?: number;\n  onEnd?: () => void;\n}\n\nexport interface SoundPlayback {\n  stop: () => void;\n}\n\nexport async function playSound(\n  dataUri: string,\n  options: PlaySoundOptions = {}\n): Promise<SoundPlayback> {\n  const { volume = 1, playbackRate = 1, onEnd } = options;\n  const ctx = getAudioContext();\n  if (ctx.state === \"suspended\") {\n    await ctx.resume();\n  }\n\n  const buffer = await decodeAudioData(dataUri);\n  const source = ctx.createBufferSource();\n  const gain = ctx.createGain();\n\n  source.buffer = buffer;\n  source.playbackRate.value = playbackRate;\n  gain.gain.value = volume;\n\n  source.connect(gain);\n  gain.connect(ctx.destination);\n\n  source.onended = () => {\n    onEnd?.();\n  };\n\n  source.start(0);\n\n  return {\n    stop: () => {\n      try {\n        source.stop();\n      } catch {\n        // No-op if already stopped.\n      }\n    },\n  };\n}\n",
      "type": "registry:lib"
    }
  ],
  "meta": {
    "duration": 0.636,
    "format": "mp3",
    "sizeKb": 6,
    "license": "CC0",
    "tags": [
      "card",
      "slide",
      "7"
    ],
    "keywords": [
      "card",
      "slide",
      "move",
      "drag",
      "reposition",
      "game",
      "ui",
      "extended",
      "gentle",
      "deliberate",
      "paper",
      "interaction",
      "feedback",
      "adjust",
      "shift",
      "fluid",
      "soft",
      "smooth",
      "transition",
      "unforced",
      "relaxed"
    ]
  },
  "categories": [
    "card"
  ]
}