{"version":3,"sources":["jsdelivr-header.js","/npm/wake-me@1.4.3/dist/wake-me.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,ACNA,aACA,IAAI,UAAY,OAAO,eACnB,iBAAmB,OAAO,yBAC1B,kBAAoB,OAAO,oBAC3B,aAAe,OAAO,UAAU,eAChC,SAAW,CAAC,EAAQ,KACtB,IAAK,IAAI,KAAQ,EACf,UAAU,EAAQ,EAAM,CAAE,IAAK,EAAI,GAAO,YAAY,GAAO,EAE7D,YAAc,CAAC,EAAI,EAAM,EAAQ,KACnC,GAAI,GAAwB,iBAAT,GAAqC,mBAAT,EAC7C,IAAK,IAAI,KAAO,kBAAkB,GAC3B,aAAa,KAAK,EAAI,IAAQ,IAAQ,GACzC,UAAU,EAAI,EAAK,CAAE,IAAK,IAAM,EAAK,GAAM,aAAc,EAAO,iBAAiB,EAAM,KAAS,EAAK,aAE3G,OAAO,CAAE,EAEP,aAAgB,GAAQ,YAAY,UAAU,CAAC,EAAG,aAAc,CAAE,OAAO,IAAS,GAClF,QAAU,CAAC,EAAQ,EAAa,IAC3B,IAAI,SAAQ,CAAC,EAAS,KAC3B,IAAI,EAAa,IACf,IACE,EAAK,EAAU,KAAK,GACtB,CAAE,MAAO,GACP,EAAO,EACT,GAEE,EAAY,IACd,IACE,EAAK,EAAU,MAAM,GACvB,CAAE,MAAO,GACP,EAAO,EACT,GAEE,EAAQ,GAAM,EAAE,KAAO,EAAQ,EAAE,OAAS,QAAQ,QAAQ,EAAE,OAAO,KAAK,EAAW,GACvF,GAAM,EAAY,EAAU,MAAM,EAAQ,IAAc,OAAO,IAK/D,gBAAkB,CAAC,EACvB,SAAS,gBAAiB,CACxB,OAAQ,IAAM,OACd,QAAS,IAAM,kBAEjB,OAAO,QAAU,aAAa,iBAC9B,IAAI,aAAe,QAAQ,SACvB,OAAS,EACX,SACA,UACA,cAAc,+DACd,0BAA0B,8FAC1B,eAAe,2DACf,gBAAgB,QAEhB,MAAM,GAAa,EAAI,aAAa,QAAQ,MACtC,EAAc,GACX,IAAI,SAAQ,CAAC,EAAS,KAC3B,MAAM,EAAS,SAAS,cAAc,UACtC,EAAO,IAAM,EACb,EAAO,OAAQ,EACf,EAAO,OAAS,IAAM,IACtB,EAAO,QAAU,IAAM,EAAO,IAAI,MAAM,0BAA0B,MAClE,SAAS,KAAK,YAAY,EAAO,IAG/B,EAAa,IAAM,aAAQ,EAAQ,MAAM,YAC7C,MAAM,EAAM,EAAa,SAAS,KAAO,EAAe,EAAe,IAevE,MAAM,QAdN,WACE,OAAO,QAAQ,KAAM,MAAM,YACzB,MAAM,EAAgB,EAAM,aACtB,EAAc,EAAM,gBACpB,EAAc,OAAO,eAAe,OACxC,mBACA,EACA,EACA,GAGF,aADM,EAAY,oBACX,CACT,GACF,CACyB,GACnB,EAAc,EAAW,aACzB,EAAiB,EAAY,QAAQ,QACrC,EAAuB,EAAY,QAAQ,cAqBjD,OApBA,EAAW,QACR,IACC,MAAM,EAAS,EAAO,OAChB,EAAY,EAAO,GACnB,EAAkB,EAAO,GAC3B,GAAa,GAAiB,GAAmB,EACzC,MAAV,GAA0B,IACZ,MAAX,GAA2B,EAAQ,EAAU,GAEpD,CACE,oBAAoB,EAEpB,qBAAsB,IAEtB,iCAAiC,EAEjC,cAAe,KAIZ,IAAM,EAAW,eAC1B,IAmBA,OAlBA,EAAI,aAAa,YAAW,KACP,aAAQ,EAAQ,MAAM,YACvC,UACQ,EAAW,SACX,EAAW,GACjB,MAAM,QAAgB,IACtB,EAAW,QAAU,CACvB,CAAE,MAAO,GACP,QAAQ,MAAM,+BAAgC,EAChD,CACF,IAEO,KACL,IAAI,EACyB,OAA5B,EAAK,EAAW,UAA4B,EAAG,KAAK,GACrD,EAAW,QAAU,IAAI,IAE1B,CAAC,EAAa,EAAyB,IACnC,IAAI,EAET,gBAAkB","file":"/npm/wake-me@1.4.3/dist/wake-me.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.37.0.\n * Original file: /npm/wake-me@1.4.3/dist/wake-me.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","\"use strict\";\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n  for (var name in all)\n    __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n  if (from && typeof from === \"object\" || typeof from === \"function\") {\n    for (let key of __getOwnPropNames(from))\n      if (!__hasOwnProp.call(to, key) && key !== except)\n        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n  }\n  return to;\n};\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\nvar __async = (__this, __arguments, generator) => {\n  return new Promise((resolve, reject) => {\n    var fulfilled = (value) => {\n      try {\n        step(generator.next(value));\n      } catch (e) {\n        reject(e);\n      }\n    };\n    var rejected = (value) => {\n      try {\n        step(generator.throw(value));\n      } catch (e) {\n        reject(e);\n      }\n    };\n    var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);\n    step((generator = generator.apply(__this, __arguments)).next());\n  });\n};\n\n// src/wake-me.tsx\nvar wake_me_exports = {};\n__export(wake_me_exports, {\n  WakeMe: () => WakeMe,\n  default: () => wake_me_default\n});\nmodule.exports = __toCommonJS(wake_me_exports);\nvar import_react = require(\"react\");\nvar WakeMe = ({\n  onSnap,\n  onNoise,\n  tfScriptUrl = \"https://cdn.jsdelivr.net/npm/@tensorflow/tfjs/dist/tf.min.js\",\n  speechCommandsScriptUrl = \"https://cdn.jsdelivr.net/npm/@tensorflow-models/speech-commands/dist/speech-commands.min.js\",\n  modelBaseUrl = \"https://cdn.jsdelivr.net/npm/wake-me@latest/public/snap/\",\n  snapThreshold = 0.95\n}) => {\n  const cleanupRef = (0, import_react.useRef)(null);\n  const loadScript = (src) => {\n    return new Promise((resolve, reject) => {\n      const script = document.createElement(\"script\");\n      script.src = src;\n      script.async = true;\n      script.onload = () => resolve();\n      script.onerror = () => reject(new Error(`Failed to load script: ${src}`));\n      document.body.appendChild(script);\n    });\n  };\n  const detectSnap = () => __async(void 0, null, function* () {\n    const url = modelBaseUrl.endsWith(\"/\") ? modelBaseUrl : modelBaseUrl + \"/\";\n    function createModel() {\n      return __async(this, null, function* () {\n        const checkpointURL = url + \"model.json\";\n        const metadataURL = url + \"metadata.json\";\n        const recognizer2 = window.speechCommands.create(\n          \"BROWSER_FFT\",\n          void 0,\n          checkpointURL,\n          metadataURL\n        );\n        yield recognizer2.ensureModelLoaded();\n        return recognizer2;\n      });\n    }\n    const recognizer = yield createModel();\n    const classLabels = recognizer.wordLabels();\n    const snapLabelIndex = classLabels.indexOf(\"Snap\");\n    const fingerSnapLabelIndex = classLabels.indexOf(\"FingerSnap\");\n    recognizer.listen(\n      (result) => {\n        const scores = result.scores;\n        const snapScore = scores[snapLabelIndex];\n        const fingerSnapScore = scores[fingerSnapLabelIndex];\n        if (snapScore >= snapThreshold || fingerSnapScore >= snapThreshold)\n          onSnap == null ? void 0 : onSnap();\n        else onNoise == null ? void 0 : onNoise(snapScore);\n      },\n      {\n        includeSpectrogram: true,\n        // Include audio spectrogram in analysis\n        probabilityThreshold: 0.75,\n        // Minimum confidence threshold\n        invokeCallbackOnNoiseAndUnknown: true,\n        // Trigger callback for non-matching sounds\n        overlapFactor: 0.5\n        // Overlap between audio analysis windows\n      }\n    );\n    return () => recognizer.stopListening();\n  });\n  (0, import_react.useEffect)(() => {\n    const init = () => __async(void 0, null, function* () {\n      try {\n        yield loadScript(tfScriptUrl);\n        yield loadScript(speechCommandsScriptUrl);\n        const cleanup = yield detectSnap();\n        cleanupRef.current = cleanup;\n      } catch (error) {\n        console.error(\"Failed to initialize WakeMe:\", error);\n      }\n    });\n    init();\n    return () => {\n      var _a;\n      (_a = cleanupRef.current) == null ? void 0 : _a.call(cleanupRef);\n      cleanupRef.current = null;\n    };\n  }, [tfScriptUrl, speechCommandsScriptUrl, modelBaseUrl]);\n  return null;\n};\nvar wake_me_default = WakeMe;\n// Annotate the CommonJS export names for ESM import in node:\n0 && (module.exports = {\n  WakeMe\n});\n"]}