{"version":3,"sources":["../../../../src/static/js/binder/register.js"],"sourcesContent":["import { pascalToKebab } from \"./util.js\";\n\n/**\n * Register a controller (or multiple controllers)\n *\n * Example\n * ```js\n * registerControllers(MyController, MyOtherController, MyOtherController.withTag(\"some-custom-tag\"));\n * ```\n *\n * @param {...any} controllers\n */\nconst registerControllers = async (...controllers) => {\n // First find all undefined elements and assume they are custom elements\n // We can then add the `data-controller` attribute to them\n // This makes it easy for us to find which controller a given DOM element belongs to\n // We also set the `data-controller` attr during the `connectedCallback` so any elements defined later will still work\n const allUndefinedElements = [...document.querySelectorAll(\":not(:defined)\")];\n allUndefinedElements.forEach(el => el.setAttribute(\"data-controller\", el.localName));\n\n const registerController = async controller => {\n const controllerName = controller.name;\n const controllerTag = controller.tag || pascalToKebab(controllerName);\n\n if (window.customElements.get(controllerTag)) {\n console.warn(`Controller \"${controllerTag}\" is already registered, skipping...`);\n return;\n }\n\n // All custom elements required a hyphenated tag name\n if (!controllerTag.includes(\"-\")) {\n console.error(`[${controllerName}] Controller tag name must contain a hyphen but got <${controllerTag}>`);\n }\n\n // Create an anonymous class here to avoid name clashes when using the bare controller with a custom name\n window.customElements.define(controllerTag, class extends controller {}, {});\n };\n\n // Register our controllers in parallel\n await Promise.allSettled(controllers.map(controller => registerController(controller)));\n};\n\nexport { registerControllers };\n"],"names":["pascalToKebab","registerControllers","controllers","allUndefinedElements","document","querySelectorAll","forEach","el","setAttribute","localName","registerController","controller","controllerName","name","controllerTag","tag","window","customElements","get","console","warn","includes","error","define","Promise","allSettled","map"],"mappings":"4jBAAA,OAASA,aAAa,KAAQ,WAAY,CAY1C,MAAMC,wCAAsB,oBAAA,UAAO,GAAGC,aAKlC,MAAMC,qBAAuB,IAAIC,SAASC,gBAAgB,CAAC,kBAAkB,CAC7EF,qBAAqBG,OAAO,CAACC,IAAMA,GAAGC,YAAY,CAAC,kBAAmBD,GAAGE,SAAS,GAElF,MAAMC,uCAAqB,oBAAA,UAAMC,YAC7B,MAAMC,eAAiBD,WAAWE,IAAI,CACtC,MAAMC,cAAgBH,WAAWI,GAAG,EAAIf,cAAcY,gBAEtD,GAAII,OAAOC,cAAc,CAACC,GAAG,CAACJ,eAAgB,CAC1CK,QAAQC,IAAI,CAAC,CAAC,YAAY,EAAEN,cAAc,oCAAoC,CAAC,EAC/E,MACJ,CAGA,GAAI,CAACA,cAAcO,QAAQ,CAAC,KAAM,CAC9BF,QAAQG,KAAK,CAAC,CAAC,CAAC,EAAEV,eAAe,qDAAqD,EAAEE,cAAc,CAAC,CAAC,CAC5G,CAGAE,OAAOC,cAAc,CAACM,MAAM,CAACT,cAAe,cAAcH,WAAY,EAAG,CAAC,EAC9E,mBAhBMD,mBAA2BC,iDAmBjC,OAAMa,QAAQC,UAAU,CAACvB,YAAYwB,GAAG,CAACf,YAAcD,mBAAmBC,aAC9E,mBA5BMV,2DA8BN,QAASA,mBAAmB,CAAG"}