{"version":3,"file":"index.cjs","sources":["../src/ui.js","../src/storage.js","../src/index.js"],"sourcesContent":["export function createUI(steps, saveSteps) {\r\n    let panel = document.createElement(\"div\");\r\n    panel.id = \"guide-panel\";\r\n    panel.innerHTML = `\r\n      <div id=\"guide-header\">Guide Builder</div>\r\n      <ul id=\"steps-list\"></ul>\r\n      <div class=\"actions\">\r\n        <button class=\"ui-btn full-width\" id=\"export-guide\">Export Guide</button>\r\n        <button class=\"ui-btn full-width\" id=\"clear-guide\">Clear</button>\r\n      </div>\r\n    `;\r\n  \r\n    document.body.appendChild(panel);\r\n    updateUI(steps, saveSteps);\r\n  \r\n    // document.getElementById(\"export-guide\").addEventListener(\"click\", () => {\r\n    //   console.log(\"Guide Steps:\", JSON.stringify(steps, null, 2));\r\n    //   alert(\"Check the console for exported guide steps!\");\r\n    // });\r\n  \r\n    document.getElementById(\"clear-guide\").addEventListener(\"click\", () => {\r\n      steps.length = 0;\r\n      saveSteps(steps);\r\n      updateUI(steps, saveSteps);\r\n    });\r\n\r\n    document.addEventListener('mousedown', function (event) {\r\n        let target = event.target\r\n        if (target.closest('#guide-panel')) return\r\n    \r\n        let selector = getBestSelector(target)\r\n    \r\n        steps.push({\r\n          selector: selector,\r\n          title: 'Title',\r\n          description: '',\r\n        })\r\n        saveSteps(steps)\r\n        updateUI(steps, saveSteps)\r\n        event.preventDefault()\r\n      });\r\n  }\r\n\r\n  function createStepTemplate(step, index) {\r\n    return `\r\n      <div class=\"step-container\" data-index=\"${index}\">\r\n          <strong>${index} ${step.selector}</strong>\r\n          <input type=\"text\" class=\"step-title\" value=\"${step.title}\" data-index=\"${index}\" placeholder=\"Step Title\">\r\n          <textarea class=\"step-description\" data-index=\"${index}\" placeholder=\"Step Description\">${step.description}</textarea>\r\n          <div class=\"actions\">\r\n              <button class=\"delete-step ui-btn\" data-index=\"${index}\">🗑️</button>\r\n          </div>\r\n      </div>\r\n    `\r\n  }\r\n\r\n  function getBestSelector(target) {\r\n    let current = target\r\n\r\n    for (let i = 0; i < 5 && current; i++) {\r\n      if (current.className && typeof current.className === 'string') {\r\n        return `.${current.className.trim().split(/\\s+/).join('.')}`\r\n      }\r\n      current = current.parentElement\r\n    }\r\n\r\n    if (target.id) return `#${target.id}`\r\n    let closestWithID = target.closest('[id]')\r\n    if (closestWithID) return `#${closestWithID.id}`\r\n    return target.tagName.toLowerCase()\r\n  }\r\n  \r\n  /**\r\n   * Updates the UI with the latest steps.\r\n   */\r\n  function updateUI(steps, saveSteps) {\r\n    let stepsList = document.getElementById('steps-list')\r\n    stepsList.innerHTML = steps.map((step, index) => createStepTemplate(step, index)).join('')\r\n    attachEventListeners(steps, saveSteps)\r\n  }\r\n\r\n  function attachEventListeners(steps, saveSteps) {\r\n    document.querySelectorAll('.step-title').forEach((input) => {\r\n      input.addEventListener('input', function () {\r\n        let index = this.dataset.index\r\n        steps[index].title = this.value\r\n        saveSteps(steps)\r\n      })\r\n    })\r\n\r\n    document.querySelectorAll('.step-description').forEach((textarea) => {\r\n      textarea.addEventListener('input', function () {\r\n        let index = this.dataset.index\r\n        steps[index].description = this.value\r\n        saveSteps(steps)\r\n      })\r\n    })\r\n\r\n    document.querySelectorAll('.delete-step').forEach((button) => {\r\n      button.addEventListener('click', function () {\r\n        let index = this.dataset.index\r\n        steps.splice(index, 1)\r\n        saveSteps(steps)\r\n        updateUI(steps, saveSteps)\r\n      })\r\n    })\r\n  }\r\n  ","export function saveSteps(steps) {\r\n    localStorage.setItem(\"guide-steps\", JSON.stringify(steps));\r\n  }\r\n  \r\n  export function loadSteps() {\r\n    return JSON.parse(localStorage.getItem(\"guide-steps\")) || [];\r\n  }\r\n  ","import { createUI } from \"./ui.js\";\r\nimport { saveSteps, loadSteps } from \"./storage.js\";\r\n\r\nlet exportCallback = null; // Store user-provided callback\r\n\r\nfunction startGuideOverlay(callback) {\r\n  if (window.GuideOverlayLoaded) return;\r\n  window.GuideOverlayLoaded = true;\r\n\r\n  let steps = loadSteps();\r\n  \r\n  exportCallback = callback; // Store callback function\r\n\r\n  function init() {\r\n    createUI(steps, saveSteps);\r\n    setupExportButton(exportCallback);\r\n  }\r\n\r\n  init();\r\n}\r\n\r\nfunction setupExportButton(exportCallback) {\r\n  document.getElementById(\"export-guide\").addEventListener(\"click\", () => {\r\n    let steps = loadSteps();\r\n\r\n    if (exportCallback && typeof exportCallback === \"function\") {\r\n      exportCallback(steps); \r\n    } else {\r\n      console.log(\"Guide Steps:\", JSON.stringify(steps, null, 2));\r\n      alert(\"Check the console for exported guide steps!\");\r\n    }\r\n  });\r\n}\r\n\r\n// Attach to `window` for CDN usage\r\nif (typeof window !== \"undefined\") {\r\n  window.startGuideOverlay = startGuideOverlay;\r\n}\r\n\r\nexport { startGuideOverlay };\r\n"],"names":["updateUI","steps","saveSteps","document","getElementById","innerHTML","map","step","index","selector","title","description","createStepTemplate","join","querySelectorAll","forEach","input","addEventListener","this","dataset","value","textarea","button","splice","attachEventListeners","localStorage","setItem","JSON","stringify","loadSteps","parse","getItem","exportCallback","startGuideOverlay","callback","window","GuideOverlayLoaded","panel","createElement","id","body","appendChild","length","event","target","closest","current","i","className","trim","split","parentElement","closestWithID","tagName","toLowerCase","getBestSelector","push","preventDefault","createUI","console","log","alert","setupExportButton"],"mappings":"aA2EE,SAASA,EAASC,EAAOC,GACPC,SAASC,eAAe,cAC9BC,UAAYJ,EAAMK,KAAI,CAACC,EAAMC,IAlCzC,SAA4BD,EAAMC,GAChC,MAAO,mDACqCA,0BAC5BA,KAASD,EAAKE,6EACuBF,EAAKG,sBAAsBF,0FACzBA,qCAAyCD,EAAKI,yHAE1CH,uDAI5D,CAuBkDI,CAAmBL,EAAMC,KAAQK,KAAK,IAIzF,SAA8BZ,EAAOC,GACnCC,SAASW,iBAAiB,eAAeC,SAASC,IAChDA,EAAMC,iBAAiB,SAAS,WAC9B,IAAIT,EAAQU,KAAKC,QAAQX,MACzBP,EAAMO,GAAOE,MAAQQ,KAAKE,MAC1BlB,EAAUD,EAClB,GAAQ,IAGJE,SAASW,iBAAiB,qBAAqBC,SAASM,IACtDA,EAASJ,iBAAiB,SAAS,WACjC,IAAIT,EAAQU,KAAKC,QAAQX,MACzBP,EAAMO,GAAOG,YAAcO,KAAKE,MAChClB,EAAUD,EAClB,GAAQ,IAGJE,SAASW,iBAAiB,gBAAgBC,SAASO,IACjDA,EAAOL,iBAAiB,SAAS,WAC/B,IAAIT,EAAQU,KAAKC,QAAQX,MACzBP,EAAMsB,OAAOf,EAAO,GACpBN,EAAUD,GACVD,EAASC,EAAOC,EACxB,GAAQ,GAER,CA5BIsB,CAAqBvB,EAAOC,EAC7B,CC/EI,SAASA,EAAUD,GACtBwB,aAAaC,QAAQ,cAAeC,KAAKC,UAAU3B,GACpD,CAEM,SAAS4B,IACd,OAAOF,KAAKG,MAAML,aAAaM,QAAQ,iBAAmB,EAC9D,wDCHA,IAAIC,EAAiB,KAErB,SAASC,EAAkBC,GACzB,GAAIC,OAAOC,mBAAoB,OAC/BD,OAAOC,oBAAqB,EAE5B,IAAInC,EAAQ4B,IAEZG,EAAiBE,EFXZ,SAAkBjC,EAAOC,GAC5B,IAAImC,EAAQlC,SAASmC,cAAc,OACnCD,EAAME,GAAK,cACXF,EAAMhC,UAAY,qSASlBF,SAASqC,KAAKC,YAAYJ,GAC1BrC,EAASC,EAAOC,GAOhBC,SAASC,eAAe,eAAea,iBAAiB,SAAS,KAC/DhB,EAAMyC,OAAS,EACfxC,EAAUD,GACVD,EAASC,EAAOC,EAAU,IAG5BC,SAASc,iBAAiB,aAAa,SAAU0B,GAC7C,IAAIC,EAASD,EAAMC,OACnB,GAAIA,EAAOC,QAAQ,gBAAiB,OAEpC,IAAIpC,EA0BV,SAAyBmC,GACvB,IAAIE,EAAUF,EAEd,IAAK,IAAIG,EAAI,EAAGA,EAAI,GAAKD,EAASC,IAAK,CACrC,GAAID,EAAQE,WAA0C,iBAAtBF,EAAQE,UACtC,MAAO,IAAIF,EAAQE,UAAUC,OAAOC,MAAM,OAAOrC,KAAK,OAExDiC,EAAUA,EAAQK,aACnB,CAED,GAAIP,EAAOL,GAAI,MAAO,IAAIK,EAAOL,KACjC,IAAIa,EAAgBR,EAAOC,QAAQ,QACnC,OAAIO,EAAsB,IAAIA,EAAcb,KACrCK,EAAOS,QAAQC,aACvB,CAxCoBC,CAAgBX,GAE/B3C,EAAMuD,KAAK,CACT/C,SAAUA,EACVC,MAAO,QACPC,YAAa,KAEfT,EAAUD,GACVD,EAASC,EAAOC,GAChByC,EAAMc,gBACd,GACG,CE3BCC,CAASzD,EAAOC,GAOpB,SAA2B8B,GACzB7B,SAASC,eAAe,gBAAgBa,iBAAiB,SAAS,KAChE,IAAIhB,EAAQ4B,IAERG,GAA4C,mBAAnBA,EAC3BA,EAAe/B,IAEf0D,QAAQC,IAAI,eAAgBjC,KAAKC,UAAU3B,EAAO,KAAM,IACxD4D,MAAM,+CACP,GAEL,CAjBIC,CAAkB9B,EAItB,CAgBsB,oBAAXG,SACTA,OAAOF,kBAAoBA"}