{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "chips-handle-6",
  "type": "registry:block",
  "title": "Chips Handle 6",
  "author": "Kenney <https://kenney.nl>",
  "description": "A distinct, medium-length sound of chips being handled, good for a game action involving the manipulation of several game pieces or a substantial inventory update.",
  "files": [
    {
      "path": "registry/soundcn/sounds/chips-handle-6/chips-handle-6.ts",
      "content": "import type { SoundAsset } from \"@/lib/sound-types\";\n\nexport const chipsHandle6Sound: SoundAsset = {\n  name: \"chips-handle-6\",\n  dataUri: \"data:audio/mpeg;base64,SUQzBAAAAAAAIlRTU0UAAAAOAAADTGF2ZjYyLjMuMTAwAAAAAAAAAAAAAAD/+1DAAAAAAAAAAAAAAAAAAAAAAABJbmZvAAAADwAAABMAABBSABkZGRkZJiYmJiYzMzMzMz8/Pz8/P0xMTExMWVlZWVlmZmZmZnNzc3Nzc39/f39/jIyMjIyZmZmZmaampqamprOzs7Ozv7+/v7/MzMzMzNnZ2dnZ2ebm5ubm8/Pz8/P//////wAAAABMYXZjNjIuMTEAAAAAAAAAAAAAAAAkBAMAAAAAAAAQUiTe/2sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//tQxAAACJQVJEeMYgFzGiWthgx4FAKg6FyaaFi3d3EOJggoHwfB8H4gUGA+TnCkQOJ3A+8//g+DkTvl38QDZPL6xxyXlFOJzgfyGD4gdieH1nzmUW8gUBBwjmciIoArcuVyWBEAmgoLQXFNYERkDYRCZGpfZehel85wQdUaFORY5RnvQWj67c5/F6f5/a7rSvDLqSufPlDoZAAxQTfNChV5A0XU4ywrJlFj8K8WISqm9pxkVdIKBhjrhEAE0HuPTQV61RKnCxQJmEsCPSiHM//7UsQMgAw4dytsPGHJYg3mMYYYIKramJmRcQYYtA4JVkH+ERk3VLWFM4Heq6OoAn44Ek7fKQnEhEeXZlWTAF4R+tI9gQINeb8rfL+5wu5+Tvm4GH93P//3Ln91/FxNLpY1coDDRICE9DLAvXsHYeMDtpxQAFAxNVSp19FWvjpM65xlRF786M1Ca6TeKBUFI5bwgUD5oVqxQygstGh8kNWLi8aEHwO1W+zGMKscS2tZCJbISuTk6gnba2TAIeFaZJ6jveJ8+HJaUaMR6XPKKsOh//tSxA0AC3xzLXT0AAGsounDNNAAwTnCFTC7LkrNnVUo0XCfvcLNdNY3JlHoCVykg3c4IlmtNMYICCgRkwAYGEjb1NvhJxQz3kOJC1FbeFQDkooD59MnLmcAgcYU6IJScUgaYYcGj6W5Zfd6/DzVcSmwI8FtKiYbjzcOgkgc8vmRfmjMJwX0BxslMUOgSw2DBlppVTbvplpZLqS6kv+xo6DOg6n2b/nzA0Nzi6ZvstFVaP/1m4vHw+VWSUz+UBkUz+4DAABICjPC8R3X4UBIXwH/+1LEB4IMFVlK/aKACWYaZ0WmDaCzl+HGWs4rcKd/YjNQLFgocJgcTnLOYoccosIsypiRWMZykOxlKVnLdUd2I5SOSR1Zy0U7Gf/cjnIbtRLN9Hbrshvz6ZUddHVlbt+vbqjiSWyyRKLABCaXoAgLK3rcR525LFibysiYktYEhCEIlGSx1OVV7x2Rzt09PoIlzK+jCxzQLweFboe3ATkbupHN/7980X8//5/GOUYMGhlQad8VO3vPBvSl/dZRHpVVAAMIAAAoQvIwwXO0dQ4Ri//7UsQIAAx42TWNsGXBYJpmpaYMuLEwlLYwLiMearjkcSbEctpSw2sHGAmvr17QFWoAFYZtsccyBLVourciIqrHxG6CLnqINY3Mv39eM4PWqWg2RBXRgqRcVUyJTgliJqUkLa2GWv6/oBZ6AApYSpQ5HhILegB0yIUSuBkJ1ZNLLDJmXzurzHPJaurmGajniUHGlzfbsHyaRVzXL8zi4qzI/nFrm+Xgkh/+tXOBmhvhfTKUBIVyzRQeMF5wTaoz/9IgNXiYhlqlbKjejcGIyIg4//tSxAgAC/zVT+ewZaGGGqdismAAAQUHBXHSNPAIBw4/A+fruWLNhLFOmTebu7maIWXc3cOYQIIRD8+/7u7vfafOv8REoGLMOBizQQIOAg4uf1vGA+D4sMygIQxD5NGL4gDC39AGCAIGyhYwgvCFWp3Ze0p0n9kNLNQ1D0alUqAISRkqqJHGmvt/zH1/GpUXXaqrXObe1kUZicyfh2vT53d37/WrWo7O2/MY4jzjiVkQCs6diHNrrETxDxWBn4NHuoRL8rWp9Y3/7bddZpNJmxH/+1LEBQALyPNxuMQAEWwtqr+YIADqxYAC4bLPQjxwtCKPRXCtillpwJaIUWIYeCkCge3Yfi4ODrYxUahDJBwQ+qLZN6sOTHISYSL/frd0LJH//6P1WnMSsSrpf/pdV/5Jxhjf9Fe8mUqNGh3eGQCkgA7jgDQYHpiU1pNOYI8cSJD9OsHCFc4StVz7ozqiS07e8s+1Dv/W6qu3/bei1ucpAgwh/3/keYvQoYOpQE5gA0TDBX7CjADn8GabZ37rV94Z9TuI1UI6V0RELkAHch1D5f/7UsQGAAuREU3HmK1BgJqqfPYc+KVhLF+PxzWFWh7WtxlKIlhaW6ZCM5filQft7Ew1vrHZXq5XeeMGj3d8uNZyPKojb5e2VxAaJMzh2BI4xv3/m/zlKHlBLYWzFPLWPjLkJdV5ZyanZ3dFziRD3L8TU3nKKoR3AZSIOI6tFoqk4tkkiFMMAPMuQa6lEFMq1tjA9EJadPuVU6hI0c83NHC4ZHn91Q59k0OP+36lFzuYTDJL/wQIG3v9GxRHRL3ocoaos+rVQod/tUAIAPkmShd4//tSxAWAC+UFQ5TygAF0Heq3GIAAxd2eqSV6NNJ6rjIOOIrHAoYHQMU4gcplM6boYshyqIFmcttBjiYsGuGiCtxFisVUdUdG/L+rG+ICIAFEW//Se1BBRMhcU+VoaoKTQmip1zKxu+nK5KXbbZbPYanQthoQAAuAzcGwE3T/C946E+Ji2H77EESLnqzE+4dg3IOeZVbcXe9aEENty8C4vZ5Y5/54f1Hx/tX1/98+YmKVsLV9f8//4UFwPljJT/KB8Hy7f//1VbL/9vr7c3JJdkD/+1LEBQALzU91uJOAGWka6PewUAAkpJQBTaujGjRKSx3iIijGCAaiM8fKiMIo6PMaeaQHjUHulcajwqEQMcoJaNQPHl1HRpY9ZtKI1Vmm//4nB4/2NOb+rfjo1Eqh2docWN/1v/+cOnTQbbf1FoggBRwCUqdcbM50rm8ft0IeisXqPpII0/FoBR4YBXKdmRHeQgmykRziioNEDjGE/zjhYv9fUrFYVKZkut6v8U6C4YYIgYo//fhexP8aNf8TgSkMaaNaABVodjIoEBxRmGCYpP/7UsQGgAs02T/U9AABkTEwPxhyAxMkkseZSoSnnGGeK4fOSisblF0ySzUSLTKyje9S0MLHf+NHOMj/+Zqtpr+Lc3ulmeY1i8pl6QoLjBYOg+/2iJbVGCLPAkyocHcrQTEpsjQiuiQjMbOeq0IgAIpEV4gvX49FkP0tN9fWLGiWEYlCQiKeToSGiO5kuNCxAcHCCu6q44QYwcMZj2Y/t2zFPNH/9kYs89jz1PP///IN8z///vPRnMZDKGf/+2x//kBoxAgeAdvdpdLYK3HJJAQC//tSxAWAC4TxibjFgBF8qbI3EnACSAkFihchCtKrcfxztg3r3hXq8wYf/l9qQ9L52VfFuNiJuaUAVp9juBpA2Nk3Gxoa1yXG7/TR/n21tjh//+hf/9ko7f/085fkRkKf/LCoiiH1/7////7XWttyEAoOCgFUSjZaB2efxEpNrOrgFBCaw6YIgsEo7PsNQIhAK3se5xpzmoKgj6Cjx4eHjyBpIXVZTTEoj/mf/44b/EYl/NP/lnb0qjzU1NX/+VHyA3cdJvrVqqCqqqqYdmY0BFT/+1LEBYAL1WN9+IKAAXOebLcMgADbYIlu1BugS0bfyqXMC5kms4OHC1VFYTecqT3Ixc3jazt45XmKHaMdX+XpcRIjHO4cShWVAoR/iwk/4i/9xYuSbW7Z7kMhlXftJU86r/UguBz1H0wmr+XlchAAGEAAAAAIAQVqJeBv8ST6N6mjo8TY1RVEW94qoeXp0l/xgF3WoJDqowBwhIKGXLxa+jolr01sWan6SH/CJepgg3Ef4hgdH/0QWIlaX35BEcom//5cTJW6vd2rurh4hmemNP/7UsQFgAvFBX34woABTxptf5hQAAgAmS6Aa7sxjxGvJes6sqX4m5sIhriJ6hwPiA54uYgxh5nY8hHch3DnVSbBgo6kOqpqX9Dq51P9A9/FFb8IiRfyP/ckXYJyjQFaoiVMG+QHBj6m1XdN7LmkRJATjINhcRRaDURT1ll45hLT50uaYwkJGMalzGFjItdWKvqUv9BEqURDGfWbMrFZ/K9PlMVDoEhMqB0gz+1U0VcJVpLLUq+w9Os53tw0h+/svYRmkSAnS0JIDXQeA0CTIioL//tSxAqAClDVYeYYTsFKmas8wJaQJ65YnF8mtsDDi/VOpHDqqq+zczX75V+XEqnrd6rK5Ha/m2/OEFqLAgNmYG7+Ug0i4VW5FxIJ5bVzqvfWzqdszuzHZsUEApg+HwXWCpUPRufjiHKw+bO21zdLR/Scaepn1tjsKxKKGTGlV4ixbfLMjpQzuj+tPs9kURAFBUFGt/xKjBlzc8NK6kNEjbogI90NVZru7b3JfdtoXgu65HDDilvN5VIS8pN3UrKo2JMoHIscU7xn3I+XOk6TljL/+1LEFYAKaM1Z55hPAUmnanzzCdG6O9zj8os7P7TSmmdtF9KF0tZD6iSo1jPyShgCe0SPoiNwe1CYcoaBIvM3Oy3fVpIzgBryYSmXM6zHN1csOEujWRURexwrXRa+ZWlyUcj2oVkrm3EvQJFTT/XZt7EPtaj9MiOzgbFRW9P/53k23TZ/o5xDfcSVBt3R9+Jau3rLtosaREwPOpxqIok8uCNcPkTQGhyYnWMkIWJNIJEFDh6tJtGOLdv+ox9AYhtFL5nueUvcvLvv/Dz4xVnUQ//7UsQggApM003npGVBRhoofMGJ+P/EwQWZjgF4kLE5USg0bdexaPEREUzIyQgHAA94Oi2OxV0dDkfKrzt0psksskOIRQFhAu2tmVmyl8Kwr/rj8YUwMpfN+gkG1inHCN1X+iiZAYICcSIFf1oI7VXaxS+xcWeP2VeYiJqGaRFAygikwYdExUClYdmRVQz+Vh+qiMXU6zLhxRjb1bNt6hnVZGPLz/KChRFx85woVKTln/5f555naQseAMc79YwyE2MJM6ySNZam0os1Z2h4d1aC//tSxCyACkDRQ+wwYcFGmee8wYpoAEgA8FYFjyMzOkFLigeGGlhHMTNaZvUgO33RJYJtOMZUzd+f/COlAbiR0eqZ9XtyzLVFfWv+Q8VCOCM+zzpVESkmuzCbVmZKlbDSBZLTgWSB0A4/EkKVi766YqWl3qjBgI12Zm6TM3xS/6q0ozMBNWciEwDAIK2t/7znltfGrmnV+x2//9yKLErolYBCSJEFVuxDljwdiUFfWAsyAEGEiBZBNBPZp2eLz/92dv//tZZY6PkZNZZDI1aygwT/+1LEOIAJ1NUrZgzNgQOaWEhgDlDoassDAwjkyhlChgoIGEBwPmQkLCwqRMiwuK/izfFaTEFNRTMuMTAwqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqg==\",\n  duration: 0.460,\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.46,
    "format": "mp3",
    "sizeKb": 4,
    "license": "CC0",
    "tags": [
      "chips",
      "handle",
      "6"
    ],
    "keywords": [
      "game action",
      "item manipulation",
      "inventory update",
      "ui interaction",
      "game ui",
      "handling",
      "tactile",
      "game",
      "tokens",
      "pieces",
      "distinct",
      "moderate",
      "organize",
      "movement",
      "clear",
      "specific",
      "manage",
      "select",
      "responsive"
    ]
  },
  "categories": [
    "chips"
  ]
}