@rsltda/components 1.0.17 → 1.0.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rs-components.es.js","sources":["../src/utils/define.ts","../src/pin/gasgas.png?url","../src/pin/gasgas_distribuidor.png?url","../src/pin/hqv.png?url","../src/pin/hqv_distribuidor.png?url","../src/pin/ktm.png?url","../src/pin/ktm_distribuidor.png?url","../src/pin/rs.png?url","../src/pin/rs_distribuidor.png?url","../src/pin/voge.png?url","../src/pin/voge_distribuidor.png?url","../src/components/rs-map.ts","../src/ws/gear.svg?raw","../src/ws/motorcycle.svg?raw","../src/components/rs-whatsapp.ts","../src/index.ts"],"sourcesContent":["// Registro seguro para evitar DOMException por doble definición\r\nexport function safeDefine(tag: string, Ctor: CustomElementConstructor) {\r\n if (!customElements.get(tag)) customElements.define(tag, Ctor);\r\n}\r\n","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABXFJREFUeNrUW0tsE0cY/u0aBC3YRtCSQBCO6COkUkuqAlEuJCggwQEw5EClKsR9obZAidQeWoRIyoGqqtQEEIgL4SWBxCuckJIUzAUoqIp7SVukCkuJUah4ODYvJelj/vHs4KSJ45mdmV3/0mjt9fze+b/5/sfM7nrAkFz1vx4kh0WkVZMWYJ+z5Qo7RkmLVaVuJU2My6PZ6BA5rCNt0xgGTyQIxFHS2nWC4dFo+C7SGhT8HRrfTlqjDiA8GmiOhm/XgCsa30pAaHIlAMR4pPh50kKa3TZGWpgAEVfxZ15FxiPVLxswHlgs6WaAO88AZnwbmBd0iRrChJhjADhovDIQPDZ9vhucFwShQjYmeCWNDzKfd4MEWfA1GgTb2IXdIovIpPxoxAXIhaplZ39q+TyY/+VWmFwyJ2+d/sPH4K9THfl2LxV1BZ+EHbtkjH9l40pYcGifsF6ovEwEAGRmjTYGyM7+pNkBqPjlJ3hh+nT6faDzEtw7cx6GBtJ56T+8eE3kckIsEGXAFzKzP2vtCm58/94DcHtnq854gAyNKGcAi/wPZUZUfuYgBFYsh7/TabhR8i49V3b4e5ixYe2Eutk6+aZFwoAZOhhQLWM80h+NR0l1XOLB0DL+6W9/wD+p1MjU5PfD1IVvjNARSYvoqgSEqGoAlsnS35K7pzPpuui99c9XNpVr/qfzautODsCDji6Zy1az/QSlAEgtPgKVS+hxqO8OD2Yz16/j9H6r4wT9PJxKQ0/dp5kprF3OfxfIANnytg4XkALAvzJjTLLrOZW9gUxAxMD40tLF9HP8qx2Z/lVvwiRWJ0jQn2dPHQBIVX5jBbBcQW3OR5v4Z0n6C02WDzQKBrtsf5+w/8IyHjDRZSTpLyQ+3Rco2vaZsA76/q2PtxhZRGgF4GlPL/y5eSsUfVCft84TkhYTh45QXRMiUgj9CwUkpA7wqGZAcrxAOJav9+0/Qo8lWxroEctfjPAzV9XyPsMDKeg/fo734SvAk+dg+H4qp651PsdYlbtAbLxqsPTbb2Ba5WJ4dP0m+PyZFOcjRrzWsoenOTQq1PQ1TCGru2c9v3O6L9izg6bKbN37F7vostmqFpNXb0Dxh/U0QD7++SY9N0iC5ARjVQ5APFep27f7Oyje/jnN7RjE5m5uoMZjqYtV3azVtbTYsYy3gEFAHpy9QIsfK//jTKPxlm6wagkMJu5w41Enj8lSviP061gnp71TTo+zI/XUODQe5eWG90fU+fi7NcPZNT8ChsYPJhJcFzOHpYvnsHJ8kZXG3H1SaeGx2g2C426CFn9SB1PmzeV+bUnvD238d+4aAT89PutNwL0LnXStMFoX+2AMGbo7wP8b+2f3w9iBv9vdExDdELkNZm5+2BG8s1yhwwVQ2gsgAx4V6ezV+ecOSbs2ANgdmJibjRfdFZa5L9DqYgCExyZ1a8ylwTBOZr9UVEn2zpAbY0Gz1sXQKAYEWU0QKuTZl2YAe1an2UWzH5FVtPt8QDdI7hUqlCiZkBpZZbuPyDS6YPZtjcEWAOzmg5PVYYvdR2S8imYg6YDxSuKQbQBY5eVEQIyoeHBS5XOCl0Hy/qHpwKfaBUwHxKSdtKcNABaMTLhCs6qnRJW6gKHaQBn1dbiAbldQSn1tALDaoMXt1NfJAGtlFldMfR2g6gGA5eeIQuqHdUVUXQxQ6QqRgntlRmFWwD2+sM7xeUG/RGxQP6J7cNoBYAWSTGoMm3h1zgQDgEXwqGDKi5oYmxEArBnNc9kcVf1mmCsAYHQO5+H3YYOTYpQBVmrMtWCqMfXKrCMAMBCaxokHjXa3twoCgKx4EB+V71ucGIgjAIyKB3ET+d6Vgu8dqnoDVFb+E2AAEkYQxr2UiokAAAAASUVORK5CYII=\"","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABalJREFUeNrkW02MFEUUfjPqEnfNMovKGjVhdvEvYaMDLHLw4C4s3EycYMSbzAW4GNmEBDExu3sRiAfxhKDJyg1ZjZN48S8wJl6I6IyJHsSwiwloMMYdCLKIRn0fVe3OTFfPdHVXVTfxJZXudE131/fqfe+9etWTIUfyz1bK8aHAbYTbUnneKJ/LY4VbLfMu1V2MK2MZdJ4PT3N7XgG4k0ARR7mVbSojYxH4BLdtBh4H8GVu4zYUkbFg5gC+y4JeAf4NVsJkKhXA4GHiH3DLW6ZtjVuRFXHOxMOyhsDD1E86AE/Sl1SlwpO3AAl+mtwLKDHKllBLTAEJgjemhExMzlcpeYESVkf1CdmI4HOS82mQnHS+Tp3gtHxxWqTAk/K6Ewrwi0ZSNPutMqBLhSgWMEHplWmrFpDy2Y9kBboW8CKlXyasWID0/PM6D//xEt/wp0FPd1e4sMgW0Bf2mbdqvH9Ed8BrThD9dt0M+GGG9OXmcGERVGUlVEwr4EmdAV/+nWjvQ+q+s9z35pz/+s4BopU96nvG+rX0NSLrCUYVELj4eJkT0a9aVuqb7ibavUrQYHtDvriWidTX5X/GMr526HFx/j67sCMtbmygR1LgL6LnTvmpNbOOqHdReY/ZoEAhaKb3fe+/fmBIAAF4jwZb7yd6la/f+aH/98/etwj+mVP+/j0PCmUG0aq32XJCr0p1ooAy8zuiCDgr7yA6fl4A8Qa792GiY08wwPNqADsGg8F38imb+8NbaxwLUMq+M/5r89ebreK99URb8u0VdvZKe/AbvwjuA90SKYhgxlQzEuT5QZdPLqr72oHvGG1yCSlg/5lwv4MfAH/3/xAQFa7Es8IN/QkooPYr0WlFWgRHp7IImPDhuXDxXqcP9IlDZB0FNAW6w7NqZ3RsvXqgmOVOSRF8xXCAOSNHOLAqNP/rNhRQa+SyKpHZnhezASDLuvRmwnOUp+vqPuQIXyv61ubaj9VkFPjPf/cuIapuDM7VVyzlwW4Ivw7ou03cA3lrTXAfFNyaERYcKuCbxrs6LUww6BWGFzxIdgo9mmM1qIAKGRJQCDK74J/Ny3/4rw/e7sv0jI1VtyAyRxE3P5AzIGyCz8joBnua/QQiyqblRJ/+4u+D6W8J/1bsLK+2lQlik1Jr38/L37EAeonz+fxHRK8NiRXh2PJFYKoFlecDhvu0xnjUZklMay/AAw8AAIIQ+cDHInQdYme37oSYacw+QiSsA32NFECGuDMvVpaJl8TkDkxNBzyAIf2FWQMw8gGEUJwjrgM8jp7JY63w2cXFNq9XUCnrVoWjlMW3UYjq69vM95mfxMyjzV6V5izDFuI9wqQXx8d45mcuSOfIvx3sFv1oWFqHLIeNhq0ERU6F+QXvNOYEgWmjzAE8kLAEWAEKG4jlXo4A4McviCQH1SCAB2Ac8RtQYs+34fIUXfCQW6J49MmhG0XHtjXCn68KcNf+ZhAMuJtVvcDnLzxCdA/Pbrfn5LqE+b/yqLjnxr0LQhnoe+peoh2cUCzpnFmOT32nv0kaaXNUVoir5OZ7gLCzP+BsNSi/1Zmi9Egp6o1xvw+oEpn5UiOGVHhCRhMpiIB3KZj9WGOIpQDpdcsJgj8Y9xOZrCH+1RMAb8QPxVZAgg6xZOLDSZPfCZ6kCPuHSTg+0xRw7RDrccKeNQVIZ+SCClOmvhI1SgFHuYEx07dBAdtUMGr61hQgc4ODaTd9axSwtFgybvo2KeDlBiWDpl+05VGzth5skAqlm+4vMwajAmp8RZvjy5J9KcUw/ZLtwVlXgEyQooTGoou/zrmwACgBvqCiGfIqTsbmaukmQyO21jp90GIt5CVmAQ2hsRiC90VyKFmXL5Nm3W7BNOrqL7OJKEAqYTLAH4zHLW/dFArwPDw17y6VpaOk/4UCWvzBORfxPpWCjVZT/wCNKv8KMAB6oMgDp2x66QAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABG5JREFUeNrkW01ME0EUfm0UDxgoqOGgCa1EPWBiBZSDBwsoZxuNeNNe0JuSmBi8ABeBk3BS8EC44V9s4s2D1sQLEW09ikFqwsXESDV4QRN8L51Kf2bbnd2Z2dn4kkmbne523jff996b2d0AaLKtAQjhRxRbDFsj+15sr9lnClsm8BByOsYVUOx0GD/OYbvMcbiWERDz2JIqwQgodHwE2xUJlyPnk9iGVAARUEBzcvyGAlzJ+WkEYdRIANB5ovgzbGHFss1giyMQWRkXC0pynqj+SoPzwGJJmgHuPQOY83Og30gSPciEjGcAeOi8NBACLjWfBu+NQDjuNCYEHTofYpo3wUIs+GoNgnPsj02xKE7KXS0SwD+KGTT75RYRlYITBoyAuTanlAGGz74jFogy4DqYbyNKGMAi/7rIxb/8wBN+S4x0e+2lRWRAk91r7hD4/5jogDteAnzflON8F7r0tt9eWiSpIggp2QCcFhnwz18Aw4f5fSvYd3+18vi1CEBbPf+cMy1CeMXYfoJUACwXH7exEH1XtlI/uw/gZnteBoNF9WInCqmprvIazXjs3sn896cYwmbLwliknkngD8ClxUppPT4B0LAN3jEVEohazfT4x8rjk0fzjpDzBRkMHAC4g8f3PK/8/cX9285fWKzsv3UoD6aVrBpKmWN7VSqSBbiV3ywn4bTtBni0lnekMNjhIwALp9DBNb4DVw9aO18rpvS32GerGwZwbXy58tj6ZikrnnQDnA9XB2xlo7rzfW+s+0hunmyI0IzxZsQq8pNcXnzl91Vzvma2CXkEwMSyvd9RHCD9TnyyyAob7ljY2+IBAJlvAEucsogCHY8RROGZVXv5XqSP5ONGyCIAlCS6mc/8YLTQzR8ozXKtoohiRZcFnalGmGy3rf+cCgAyxVrmFTKD4fxskCPNdWIzUQiUSzl+H9UI7zl9naHqY5WZBf7F74ZdAOk+61q9tREH22t/HdC0M38O2YMO6z4CuLwijGoE4EPxWbUWJjToVskLHip2ovWCY5UogRT4x1LSAWBbz1kfOJ9RuSGS9AEA8yrrgHkfAJBUBgCTQcZk53XsCk8bDIDw2BzdGtsagFXQcydYxLI4+xFdawETY8GYk5OcMoDqr7RBLHA0+44ZwJ7VGTNo9hNOT3T7fACxIOqx8ymckB5PNkTQhgyYfVdjcAUAu/ngZXU45fYRmaAk/eU8cF5KHHINgIcBMSHjwUmZzwnSbfOYHwKfbAnoDog5N2lPGQAsGOmQwpisp0SlSkBTbSCN+iokoFoKUqmvDABWG0yZTn1lElC0WJJOfZUSKNQGCYnUj6uKqEFVF5YohYTvXpmRmBVojy+ucnxBUG8JF9RPqB6ccgBYgeQkNcZ1vDqngwEEAsWClGDKS2kZm66lG0uNtJtc64EWZSnPMwYUpca4Dd3HQaMFdf4Zo3W1BVOPrldmPQGAgTBqEQ+G3G5v+QKAQoSH0lvtSRYo4b8AoCweZHXkeyON3juU9QaoU/srwAB77Uga7jO8tAAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3hJREFUeNrkWv91sjAUTXv6v+0EuoFsIJ2gdgM2KE4gTsBxAusE6ATRCdAJaCdAJ+DLTX2U9tNWKCSB3HPeIUgE7s19+QHcMHW4F+GIcEX0TuUitqftRsROxIF1AAMRvohYRFYyuAjvJFwriS8qkD4X6elcrRACNxnWRPycEIHJ5JHTSUPkixGfHGYUvFMLZYoiPdOJaiWfaQgjRNBF3ggRHM3kiyIMdPT2qSECUMeoFJFB5ClCVeRdA8lTKEkFbrAA3ObWV+KCqAUCLMoQuqnQ85cbLu4/1jCHw8fq1nEc9vb2JrfngGMI13VlnMNms5FxAbjQQxOtP67SIlEUZYvFQpYFoQzAfhzH2SWMx+PsJwRB8Nt13SYEKLXKA0kiikA5SRJJLk3TzPO8//4ThmFOEMB+xTQItPb+IEtAq4s0kKQBYX0ZJMJgMJB1EHALOYDqX3LIL/cQNSFAei15EAE5AATpdzgA5LFPIvi+/4Us5zw/FwlDQalRrKNyZngVedgdhBAgXHQEEaU+gVoa5KhPOJcaFHDSlQJkygUAKSJebE2y9Xfgd+Q6iEMoOAVbcsUfO8GsiWHw4knFzTMhwOfj3e2W9Xq9fKjDsPb+/p4f7/f78j/AbreTQ+V6vZb1ptMp2+/3X+rgfLSP+vP5XNatg9tdHdagcXs2m7HRaJSP+SCGMsitVqvP3pTz/NhyuWQiFSQ57GP7/Pws64AsiQABUT4ej0y4hj081DPU39WZIyBPQpAIaLmnpye5j2Ovr6+yBeEO1Ad5YDgcSlFo4gRMJhN5vDhpgrN+mAQ1KsDhp0fTuKnHx0cm8lOSQGuBIAAHFGdvLy8vOSlKATgEZRCk3+ECAIKhDpwGAa+8V6tWgZVXhbdlUr1FL2Z2TQiwb5EAjdyr06IUaOyZQNIC8qWmwbclBVi1wP5LG94FaH0wGhtMPlJhMc9gAVxVeWZiZ5hUIXJrYkdTETOVF7s3zAWJDsU9G3PfxBGB68w7E16Vaf9KROfrstCE3lfXxxIpM+jbQV+DAGPTxmFuS8ene6Gk5aOoaxEoEMA3fT0e22Z9VXMDo63/HaGN1m9yscRZC+GyDk54dKTCmLUcfxkVItYBODZav461gss6hjJrhYB1ENcumznrMFyb8r7KgslhloC3fapb91Q5YhaC5geJDXl/CZ7uvP8nwAAeipVa4iJE4AAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABIlJREFUeNrkWs11ozAQlnf3bm8H7iD4treQCuKtIKSCcM0p5LgnXiqwOyCpAPu2NzsV4A5wKmD1sR4iE4k/I4HN9948jBlAM5o/jRgxc5hwsjjZnMaH3yLWh+OK05bTnl0AppxcThtOSU0KOTkHxZ2l4IsGQssoPjzrLBSBQfotCS5ThNf2gEctPgs+HRxmX81kWWw6naZHEdvtlu12u/RYAjD85rTr08w7hxmSzt58Pk8Wi0USx3FSBvCA17btMmuw+iS8dKCO4yRRFCVNgXuhvD4rQSo8N/EkDMOkLeBZeGbflGCpZr2KqdcFnqlwi7gs7uiK9rFMeN3AOyRK2JhWQNCF8CVK8E0Jb+dfDtM0CbgDT6MyJRhxhVB86WQyOSnSN8Vms1GVz2Zn3/f9pCt4nmfcCoJ8uusScAVYYE4BC12lMEX+DLxiYzwgFd603/9f1fKBZiUvSmFVyYtroNVqxdbrtZTn+vqa8biT/n5+fmbcEo5eyemnjtmf582tSr5HJUcZAgUNZQxFEEspCILChRFMX6wWJTy2DgX4+fq+LFWRoCD8hstAOJgt6v08XNfNBMQR51UgUaanPfoXBT8xT2PWRV9F9AaREjCD4AFR3U9KKrKQkmAY6FDAUeWnqvUhPK3+wEcpkiwAwlMag5BQpCisWFOQYojINfJ1h8RltFSGpf5PJg+BQJQlyCJIUIoJNNMQjsxY5hpi1JcpgGJLjvQqQCY8CS7Opmo5i/9huhAcioKl4EhWUTUIEpoqYFRTAZ8nyecpOjn39/ef1RJPUUh/lOootYn8IOoQgff29jblQVrDfyIPnkfnuPbw8HD0vFSQ0aiRbD9a6YAe8jbyMY7j8TirAZD/IRyf8Yz/5uYmu3Z3d8fe3t5S4XCOI3eNlIcUQe8gntlsxrg7fKk1mqCxAjCY/CxAeNDT01NW+IAPAuIchQ0Exgy+v7+nvLgG4Pzj4+NIGO4K7PX1Nb0mCktFkNhPNKGAvdiazisAg+LBKDVhDBLXISAAC8B1GvjLy0s26Kurq8wFyB3INWAFABSG/6E8WeUpsYC99jpAFoi6AhVQTVaF3+pYfVtm1zbI0nKt89bhNlkL6IZiLeDosIAval4ul53PPuJJlbG2hegM+gG1yuDvDTY9f4nRFwVIPi2ZwuPjo8z//3D6a2wvoGc9QSON0S97/ajnTQZEvEuxUxSYsDxHtSNkCgXdJGO+GHWhBMx8wWZpZDL+eKqlKpbAOtwBcaaoj1gn97e1NxipBoPAmG9bnQI0SYpaZKZnv/S7ANEaTtkmx70lH0oY9/3SjCAjmC66PFXSJdIbeBVRvvXtsFO/EbLrDgB9ASx16UgLK+ogNWhuzHQtfhpvlRskn/UA0o8lDFDMevTtoNuBAuasZwgNCh+yHsIyaPpT1lN4BhTgsp5jMzTTl9UGgzP9PPwhmn7lxdKlmr4uV+hVwdOFK8zZmeOUrBCwC4A1RNNvY61gswtDnbWCxy4QVZfNIbtg2EPy+yYLJosNBOG5l7ptl8oBGyCoPoiG4PcqOF37/T8BBgCThigH5VpvfwAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABJZJREFUeNrsW79PE1Ec/9ZWfoWDm4yLeOwidZaEDg4mLDiqgx1hsk7oRJmECV10BBZ0McUB49aSYOJgUrAOJg4t8Ae0iAFKgPN966Fce+/uvbt77+6on+RLmvbufd/3+76/7wBoc8Qk8VEJpQiNEkoapDZdUyO0YdAaoYLxXaSBQucI6S4pZ6wRScGLHgRvpnxUFKF6PHEWi1DDGgOSxgY1R/MY6QG1/xIkb/5hv/FVh9ruKRTW91n4VAjdM2JFaJAmVKWdnNqf0DOTffrGepeu18CW8Bq8Fu+xsYSqwTM0wlMFX3ytOApNI7zXQRGBKyFJO/n0A0WvbsddC39GuAauZWMJySADXtlqY15O3c4abJSgBqGAnCzhGZSQCyLPSxWeQQlS64S8lc+LFv6MKDGhLKsOSBkK+BcM+hNQLumg9p1AZacDtrYTtgtcHzgG7dqRa+3Xfsbh1kgCKtv15p+wPliR7vvnTX9+VnGs6DC1lUsdIlwhJyPym5hqA50taQu/c1ICqQY9uwKFD1dGSLgwf3MV9LCD/P1niugG+dU4cYMe24UeP9Uhxpm8ss8UmJ7aM/HOPm9xg3FCi6IsYL5Z4yzlrRWhCzhUeY5ug7wtrp0XaQHJ5uA3fOOQevH7D72wUYrZBsM0Nkaq7sx4SCeB85fpO+SNe6jtHlP36De4/JhyQiYaH+v1FAdwDxbrMiPOqYCsydnGuuHunTr14qtXjiEWU0ibS095338cEQtQoF5PwNbO5RbaJSkP16Fhs9QNn7+07GFGlAuYUwKD6WLQmp6i/772qQdSY3v0oDOr2LoZyx7scCnodnL09n5DSCsQ94DMxJ5Q/glZgmJAfPHqlPLrCZCcbqTUc6lych/CBk/FzPBQt21AXFnulR4EeV2gYBrObZ9w3byyfNJIW9TR0uQhLL1RGv0EKyz2UBCpgIqZeZ1rs9gAVbeOgZxcC5HavpHPM08PiJLYFIu8LRqiikgFrLWc6mqnL7716P4eZCb7iCK6GuU0k0VZ814TGQM0p2bISxnMO1OgNEOa6EBY9GMS1Nw2o0J4hqiUdrgoIxNk/LCC5gjOmwEop5+RoQDNKoWRVtW1K+CDEJ77kBcllWogCXm/8jjvZAh5AP0BqrRSeImWxze/dfGZE8dsENdGHjx7EokqbXDhxhJYTt5mgFJ2K0TcgwK6rUZkh/VTePvuqNEGp0aOfNH0zJwCE09+Ndam4CVvBShkQGqVHQqr7oefeC/DgDWwR2OIBZZ5HjZBmPdZAh5egzneqXE6R1kvAnh9QULj9T8iGAwOxP++HHEGfEmiTBqbzdIB1zMSQoMQ8MtUCyDulRihpy+0MJJAvvh+3AcF1AxXSklW/Byhj2GZFKlg846QACoHGfmZmySBlIaQoixB+DyEGCkJCkhCyCHyTdF5iAA0QQGxGsbAR0O2nQIf8+zwogY+GpI+mr4GEYUfrpCBiKPYbqbvlytE2vT9cIUMXDAU28303RZIkSp4eJFmUMA4XHAsRL3W92N4YhUPitBGaP5fowuV8tzEg8D8PhGgAhYJDRufV+A/gsFvAQYAGFubR/xBobMAAAAASUVORK5CYII=\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA9xJREFUeNrsWz124jAQHjY5gEtK7wkwJ1hKSvYGvkGcE4Qtt+JxAucGpkxn6NKZdOnMDUyZzqvhmd2gSLJk/dmw33vzSBxjSaOZb37kANw4Ro7GCYjMiPwgEjUSUPcciewb2RHZNtcGDVx0RqTuKFnzjEEuvNBYOC35UBQRaO64jEUEfeWAqJlg2GoesxkEQQBRFJ1+3+/3cDweYbvdyoxzIPKz4YreICZS8XaOLLZOkqQuiqJuA96D9+J3BJZQNWP2ZvHchadpWncFfrdFEd6VEPF2Po7juqqqWhf4DHyWwBIin4RXsiams+siaxAoIfChgMzV4iWUkPmI804XL6EEp3lCzvJ5V+BwQukqD5g1CvhHBiSml2V5+jwcDicRIQzDk3QF5gzT6ZQ1DuYHG+e+/9n0V6tVa0aHoY0ozIYrZC6Y/2JQspNfwhZea1MCyQa1XYEzjlJEuO9g/pdZUHyZi6Ab5Hne6gaPj48wGql54HK5hKenp4ux8RqFBZFnWxawojUuk96ygC7QkuW1ug2Ozbh3ZdMCInq3zwUNC5vNBt7e3oRkeC6M2jCZTL4QJ46N30VS5M3RNJT8mLNDF7JYLLR4AOfAeK407hQVcOFwZPIwn8+5N4/H45Ofi8rc9/f30y5+fHz8DaGfBXcXn8MDWtjr6yt9+ZcTCyAEpM3khDCFFoJhVQScg44FfPPeOyMcQBbJ/BtaWJIkVse/d7VQJMT1ei0kRDqkPjw89K7np5XMENYWmnuWZc5JUKsIorNA3dh/7iCppMmMbDC3qYCUnrRuTk/n9qgE2U4Sjs1QZGqTBHcs3zbSWCT+j4RHFCGVGAnG3tm0gLCtGNJxBdWeAqcYCm0TYWGiE0SXzSqmLyiHCxeRIDFhBTSDq0YAzu4nLhQQshi8S1Z4dgU8CFEBJ/tzYv7cnmDXOK4aRXAM4B+g+j0Nwt3s2h+QAT5bkEc4PyWqeEroYgkyOy9YfAkesBSltSYqRQmfP8vS19GYcGLI1Fju6pTKEg1Wb0djzNSYJVgEYdyXITy8B2N8W+FkavdHBkKikv9hHw9LX7qXiC9JYAcIP1XOSIh8B88vU6Vg75WYXvq+VGLkQIz4/p0BBRwbV5o5VvxvIi996RQFIHhHyIKUPplfukiyKDH0FKWDxefQY8wcKCCCnsPmm6IrGABCS4RY9ZH4OhVK10Z80r3DayU+btpv0PRDGChMuEICA0dxa6ZvyhUGbfomXCGBK0Nxa6bfNUEaVMKjilhCAQu4cqRDz/VNNE9YfFDADYH+X6OrCnld+MCb3997VMAzkUnz8wb+ww/+CDAA4q4zpysTtacAAAAASUVORK5CYII=\"","type ZoneKey = 'norte' | 'rm' | 'centro' | 'sur';\ntype ZoneFilter = ZoneKey | 'all';\n\nconst LOCAL_POINTS_LOADERS = import.meta.glob('../json/PuntosMapas_*.json', {\n import: 'default'\n}) as Record<string, () => Promise<unknown>>;\n\nconst LOCAL_MARKER_ICON_URLS = import.meta.glob('../pin/*.png', {\n eager: true,\n import: 'default',\n query: '?url'\n}) as Record<string, string>;\n\ninterface MapPointPhone {\n id: number;\n dist: number;\n telefono: string;\n nombre: string;\n whatsapp: number;\n watshapp?: number;\n orden: number;\n}\n\ninterface MapPointApi {\n id: number;\n titulo: string;\n rut: string;\n direccion: string;\n comuna: number;\n tipo: number;\n lat: string;\n lng: string;\n url: string;\n email: string;\n adicional: string;\n portada: string;\n googlelink: string;\n activo: number;\n marca: number;\n comuna_name: string;\n provincia_name: string;\n region_name: string;\n telefonos: MapPointPhone[];\n}\n\ninterface MapPoint extends MapPointApi {\n zone: ZoneKey;\n}\n\ninterface MapPosition {\n lat: number;\n lng: number;\n}\n\ninterface PointsCacheEntry {\n timestamp: number;\n data: MapPointApi[];\n}\n\ninterface PointsCacheRecord extends PointsCacheEntry {\n key: string;\n}\n\nconst DEFAULT_BRAND_COLOR = '#000000';\nconst FONT_AWESOME_LOCAL_PATH = '/assets/fontawesome/css/all.min.css';\nconst DEFAULT_POINTS_API_URL = 'https://ap2.rs-shop.cl/web/PuntosMapas';\nconst BRAND_COLORS: Record<string, string> = {\n gasgas: '#cb0d25',\n ktm: '#ff6600'\n};\nconst BRAND_ALIASES: Record<string, string> = {\n gas: 'gasgas',\n gasgas: 'gasgas',\n husqvarna: 'hqv'\n};\nconst TYPE_CODES: Record<string, number> = {\n sucursal: 0,\n distribuidor: 1\n};\nconst ZONE_ORDER: ZoneKey[] = ['norte', 'rm', 'centro', 'sur'];\nconst ZONE_LABELS: Record<ZoneKey, string> = {\n norte: 'Zona Norte',\n rm: 'RM',\n centro: 'Zona Centro',\n sur: 'Zona Sur'\n};\nconst TYPE_LABELS: Record<number, string> = {\n 0: 'Sucursales',\n 1: 'Distribuidores'\n};\nconst CONTINENTAL_CHILE_BOUNDS = {\n minLat: -56.5,\n maxLat: -17,\n minLng: -76,\n maxLng: -66\n};\nconst DEFAULT_POINTS_CACHE_TTL_MS = 30 * 24 * 60 * 60 * 1000;\nconst POINTS_CACHE_DB_NAME = 'rs-map-cache';\nconst POINTS_CACHE_STORE_NAME = 'points';\nconst REGION_ZONE_MAP: Record<string, ZoneKey> = {\n 'region de arica y parinacota': 'norte',\n 'arica y parinacota': 'norte',\n 'region de tarapaca': 'norte',\n tarapaca: 'norte',\n 'region de antofagasta': 'norte',\n antofagasta: 'norte',\n 'region de atacama': 'norte',\n atacama: 'norte',\n 'region de coquimbo': 'norte',\n coquimbo: 'norte',\n 'region de valparaiso': 'centro',\n valparaiso: 'centro',\n 'region del libertador general bernardo o higgins': 'centro',\n \"region del libertador general bernardo o'higgins\": 'centro',\n \"libertador bernardo o'higgins\": 'centro',\n ohiggins: 'centro',\n 'region del maule': 'centro',\n maule: 'centro',\n 'region de nuble': 'centro',\n nuble: 'centro',\n 'region del biobio': 'centro',\n biobio: 'centro',\n 'region metropolitana de santiago': 'rm',\n 'region metropolitana': 'rm',\n 'rm': 'rm',\n santiago: 'rm',\n 'region de la araucania': 'sur',\n araucania: 'sur',\n 'region de los rios': 'sur',\n 'los rios': 'sur',\n 'region de los lagos': 'sur',\n 'los lagos': 'sur',\n 'region de aysen del general carlos ibanez del campo': 'sur',\n 'region de aysen': 'sur',\n aysen: 'sur',\n 'region de magallanes y la antartica chilena': 'sur',\n magallanes: 'sur'\n};\n\nexport class RsMap extends HTMLElement {\n static tag = 'rs-map';\n private static googleMapsLoaderPromise: Promise<void> | null = null;\n private static pointsCacheDbPromise: Promise<IDBDatabase | null> | null = null;\n private root: ShadowRoot;\n private mapEl!: HTMLDivElement;\n private map: any;\n private pointModalOverlayEl!: HTMLElement;\n private pointModalTitleEl!: HTMLElement;\n private pointModalBodyEl!: HTMLElement;\n private pointModalCloseButton!: HTMLButtonElement;\n private markers: any[] = [];\n private marca = '';\n private marcaKey = 'default';\n private tipo = '';\n private tipoCode: number | null = null;\n private pointsController?: AbortController;\n private points: MapPoint[] = [];\n private pointsByZone: Record<ZoneKey, MapPoint[]> = {\n norte: [],\n rm: [],\n centro: [],\n sur: []\n };\n private initialViewApplied = false;\n private zonesContainer!: HTMLElement;\n private componentMessageEl!: HTMLElement;\n private mapLayoutEl!: HTMLElement;\n private zoneButtons: HTMLButtonElement[] = [];\n private nearestButton!: HTMLButtonElement;\n private panelTitleEl!: HTMLElement;\n private activeZone: ZoneFilter = 'all';\n private mapHeight = '';\n private googleMapsApiKey = '';\n private pointsApiUrl = DEFAULT_POINTS_API_URL;\n private markerIconBaseUrl = '';\n private defaultMarkerIconUrl = '';\n private pointsCacheTtlMs = DEFAULT_POINTS_CACHE_TTL_MS;\n private static fontAwesomeAttached = false;\n private panAnimationFrame: number | null = null;\n private highlightTimeout: number | null = null;\n private isSyncingInitialAttributes = false;\n private refreshQueued = false;\n private localPointsRequests = new Map<string, Promise<MapPointApi[] | null>>();\n\n static get observedAttributes() {\n return [\n 'marca',\n 'tipo',\n 'height',\n 'google-maps-key',\n 'points-api-url',\n 'cache-days',\n 'marker-icon-base',\n 'marker-icon-default'\n ];\n }\n\n constructor() {\n super();\n RsMap.ensureFontAwesome();\n this.root = this.attachShadow({ mode: 'open' });\n this.root.innerHTML = `\n <link rel=\"stylesheet\" href=\"${FONT_AWESOME_LOCAL_PATH}\" />\n <style>\n :host {\n display: block;\n position: relative;\n width: 100%;\n height: var(--map-height, 520px);\n --rs-map-accent: ${DEFAULT_BRAND_COLOR};\n }\n .map-layout {\n display: grid;\n grid-template-columns: minmax(0, 2.5fr) minmax(220px, 1fr);\n gap: 16px;\n width: 100%;\n height: 100%;\n }\n .map-panel,\n #map {\n width: 100%;\n height: 100%;\n animation: mapSlide 90s infinite;\n animation-timing-function: ease-in-out; \n }\n .map-panel {\n border-radius: 8px;\n overflow: hidden;\n border: 2px solid var(--rs-map-accent);\n }\n #map {\n background: #f5f5f5;\n }\n .component-shell {\n display: flex;\n flex-direction: column;\n height: 100%;\n }\n .component-message {\n margin: 0;\n font-size: 1rem;\n color: #555;\n text-align: center;\n padding: 24px 12px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex: 1;\n }\n .component-message[hidden] {\n display: none;\n }\n .map-layout[hidden] {\n display: none;\n }\n .points-panel {\n border: 1px solid #e0e0e0;\n border-radius: 8px;\n border-top: 4px solid var(--rs-map-accent);\n padding: 16px;\n font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;\n background: #fff;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n }\n .panel-message {\n margin: 0;\n font-size: 0.95rem;\n color: #555;\n text-align: center;\n padding: 32px 12px;\n }\n .panel-content[hidden] {\n display: none;\n }\n .points-panel h2 {\n margin: 0 0 8px;\n font-size: 1rem;\n color: var(--rs-map-accent);\n }\n .zone-filters {\n display: flex;\n gap: 8px;\n margin-bottom: 12px;\n overflow-x: auto;\n padding-bottom: 8px;\n flex-wrap: nowrap;\n }\n .zone-button {\n border: 1px solid var(--rs-map-accent);\n border-radius: 999px;\n padding: 6px 12px;\n font-size: 0.85rem;\n background: transparent;\n color: var(--rs-map-accent);\n cursor: pointer;\n transition: background 0.2s ease, color 0.2s ease;\n text-align: center;\n white-space: nowrap;\n }\n .zone-button:hover,\n .zone-button:focus-visible {\n background: var(--rs-map-accent);\n color: #fff;\n }\n .zone-button.is-active {\n background: var(--rs-map-accent);\n color: #fff;\n }\n .zone-button--secondary {\n flex-shrink: 0;\n border-color: #444;\n color: #444;\n }\n .zone-button--secondary i {\n margin-right: 6px;\n }\n .panel-header {\n margin-bottom: 12px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n }\n .panel-header h2[data-panel-title] {\n margin: 0;\n font-size: 1.25rem;\n }\n .zones-container {\n display: flex;\n flex-direction: column;\n gap: 16px;\n flex: 1;\n overflow-y: auto;\n }\n .zone-section {\n border-top: 2px solid #eee;\n padding-top: 12px;\n }\n .zone-section[hidden] {\n display: none;\n }\n .zone-section__header {\n display: flex;\n align-items: baseline;\n justify-content: space-between;\n margin: 0 0 8px;\n font-weight: 600;\n color: #333;\n }\n .zone-section__empty {\n margin: 0;\n font-size: 0.85rem;\n color: #777;\n }\n .zone-section__list {\n display: flex;\n flex-direction: column;\n gap: 10px;\n }\n .point-card {\n border: 1px solid #e6e6e6;\n border-radius: 8px;\n padding: 10px;\n background: #fff;\n display: flex;\n flex-direction: column;\n gap: 6px;\n overflow: hidden;\n transition: border 0.2s ease, box-shadow 0.2s ease;\n }\n .point-card--highlight {\n border: 2px solid var(--rs-map-accent);\n box-shadow: 0 0 0 2px rgba(30, 136, 229, 0.2);\n animation: highlightFade 3s forwards;\n }\n @keyframes highlightFade {\n 0% {\n border-color: var(--rs-map-accent);\n box-shadow: 0 0 0 2px rgba(30, 136, 229, 0.2);\n }\n 80% {\n border-color: #111;\n box-shadow: 0 0 0 2px rgba(17, 17, 17, 0.2);\n }\n 100% {\n border-color: #e6e6e6;\n box-shadow: none;\n }\n }\n .point-card__title {\n margin: -10px -10px 8px;\n padding: 10px;\n font-size: 0.95rem;\n font-weight: 600;\n text-align: center;\n color: #fff;\n background: var(--rs-map-accent);\n }\n .point-card__focus {\n border: 1px solid var(--rs-map-accent);\n border-radius: 999px;\n padding: 4px 12px;\n font-size: 0.8rem;\n background: transparent;\n color: var(--rs-map-accent);\n cursor: pointer;\n }\n .point-card__focus:hover,\n .point-card__focus:focus-visible {\n background: var(--rs-map-accent);\n color: #fff;\n }\n .point-card__map-actions {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: 8px;\n align-self: flex-start;\n margin-top: 8px;\n }\n .point-card__mobile-navigation {\n display: none;\n align-items: center;\n flex-wrap: wrap;\n gap: 8px;\n }\n .point-card__mobile-nav-link {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n border: 1px solid var(--rs-map-accent);\n border-radius: 999px;\n padding: 4px 12px;\n background: var(--rs-map-accent);\n color: #fff;\n font-size: 0.8rem;\n text-decoration: none;\n }\n .point-card__mobile-nav-link:hover,\n .point-card__mobile-nav-link:focus-visible {\n filter: brightness(0.94);\n }\n .point-card__coordinate-warning {\n display: flex;\n align-items: center;\n gap: 6px;\n border: 1px solid #d6dbe3;\n border-radius: 999px;\n padding: 4px 12px;\n background: #f8fafc;\n color: #4b5563;\n font-size: 0.8rem;\n line-height: 1.35;\n align-self: flex-start;\n margin-top: 8px;\n }\n .point-card__coordinate-warning i {\n color: #6b7280;\n }\n @media (max-width: 768px) {\n .map-layout {\n grid-template-columns: 1fr;\n }\n .map-panel {\n display: none;\n }\n .panel-header {\n flex-direction: column;\n align-items: stretch;\n }\n .zone-filters {\n flex-wrap: wrap;\n }\n .point-card__focus {\n display: none;\n }\n .point-card__mobile-navigation {\n display: flex;\n }\n }\n .point-card__address,\n .point-card__meta,\n .point-card__contact {\n margin: 0;\n font-size: 0.85rem;\n color: #555;\n }\n .point-card__contact {\n margin: 0 0 6px;\n font-size: 0.85rem;\n color: #555;\n }\n .point-card__contact-title {\n display: flex;\n align-items: center;\n gap: 6px;\n font-weight: 600;\n color: #333;\n margin-bottom: 4px;\n }\n .point-card__phone-list {\n list-style: none;\n padding: 0;\n margin: 0;\n display: flex;\n flex-direction: column;\n gap: 4px;\n }\n .point-card__phone-item {\n display: flex;\n gap: 8px;\n align-items: flex-start;\n }\n .point-card__phone-icon {\n width: 16px;\n display: inline-flex;\n justify-content: center;\n color: var(--rs-map-accent);\n font-size: 0.85rem;\n }\n .point-card__phone-content {\n display: flex;\n flex-direction: column;\n gap: 2px;\n }\n .point-card__phone-name {\n font-weight: 600;\n color: #333;\n }\n .point-card__phone-number {\n font-family: 'Segoe UI', system-ui, sans-serif;\n font-size: 0.85rem;\n }\n .point-card__phone-number--link {\n color: var(--rs-map-accent);\n text-decoration: none;\n }\n .point-card__phone-number--link:hover,\n .point-card__phone-number--link:focus-visible {\n text-decoration: underline;\n }\n .point-card__address-block {\n display: flex;\n flex-direction: column;\n gap: 2px;\n }\n .point-card__details {\n display: flex;\n flex-direction: column;\n gap: 6px;\n margin-top: 6px;\n }\n .point-card__details[hidden] {\n display: none;\n }\n .point-card__toggle {\n border: 1px solid var(--rs-map-accent);\n border-radius: 16px;\n padding: 4px 10px;\n background: transparent;\n color: var(--rs-map-accent);\n font-size: 0.8rem;\n cursor: pointer;\n align-self: flex-start;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n }\n .point-card__toggle:hover,\n .point-card__toggle:focus-visible {\n background: var(--rs-map-accent);\n color: #fff;\n }\n .point-card__actions {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n gap: 6px;\n margin-top: 8px;\n }\n .point-card__action {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-size: 0.8rem;\n }\n .point-card__actions a.point-card__action {\n color: var(--rs-map-accent);\n text-decoration: none;\n border-bottom: 1px solid transparent;\n }\n .point-card__actions a.point-card__action:hover,\n .point-card__actions a.point-card__action:focus-visible {\n border-color: currentColor;\n }\n .point-card__actions .point-card__action i {\n font-size: 0.85rem;\n }\n .point-card__actions .point-card__action--text {\n color: #444;\n }\n .point-card__extra {\n margin: 0;\n font-size: 0.8rem;\n color: #444;\n }\n .point-card__extra a {\n color: var(--rs-map-accent);\n text-decoration: none;\n display: inline-flex;\n align-items: center;\n gap: 4px;\n }\n .point-card__extra a:hover,\n .point-card__extra a:focus-visible {\n color: #444;\n text-decoration: underline;\n }\n .point-card__extra-icon {\n font-size: 0.75rem;\n }\n .empty-state {\n margin: 0;\n font-size: 0.9rem;\n color: #777;\n text-align: center;\n }\n .points-panel p {\n margin: 0;\n color: #666;\n font-size: 0.9rem;\n }\n .point-modal-overlay {\n position: absolute;\n inset: 0;\n z-index: 30;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 16px;\n background: rgba(0, 0, 0, 0.48);\n font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;\n }\n .point-modal-overlay[hidden] {\n display: none;\n }\n .point-modal {\n width: min(560px, 100%);\n max-height: calc(100% - 16px);\n border-radius: 8px;\n overflow: hidden;\n background: #f7f7fb;\n color: #151515;\n box-shadow: 0 18px 48px rgba(0, 0, 0, 0.32);\n display: flex;\n flex-direction: column;\n }\n .point-modal__header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n padding: 14px 18px;\n background: #000;\n color: #fff;\n }\n .point-modal__title {\n margin: 0;\n font-size: 1.15rem;\n font-weight: 700;\n line-height: 1.2;\n }\n .point-modal__close {\n border: 0;\n width: 34px;\n height: 34px;\n border-radius: 50%;\n background: transparent;\n color: #fff;\n cursor: pointer;\n font-size: 1.1rem;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n }\n .point-modal__close:hover,\n .point-modal__close:focus-visible {\n background: rgba(255, 255, 255, 0.14);\n }\n .point-modal__body {\n padding: 20px 24px 24px;\n overflow-y: auto;\n line-height: 1.45;\n }\n .point-modal__cover {\n width: calc(100% + 48px);\n max-height: 300px;\n object-fit: cover;\n margin: -20px -24px 18px;\n display: block;\n background: #e5e7eb;\n }\n .point-modal__section {\n margin: 0 0 20px;\n display: flex;\n flex-direction: column;\n gap: 6px;\n }\n .point-modal__section:last-child {\n margin-bottom: 0;\n }\n .point-modal__line {\n margin: 0;\n font-size: 0.95rem;\n color: #242424;\n }\n .point-modal__label {\n font-weight: 700;\n }\n .point-modal__phone-list {\n list-style: none;\n padding: 0;\n margin: 4px 0 0;\n display: flex;\n flex-direction: column;\n gap: 3px;\n }\n .point-modal__phone-item {\n font-size: 0.94rem;\n color: #222;\n }\n .point-modal__extra {\n margin: 0;\n font-size: 0.94rem;\n color: #242424;\n }\n .point-modal__extra a,\n .point-modal__link {\n color: #111;\n font-weight: 600;\n text-decoration: none;\n border-bottom: 1px solid currentColor;\n }\n .point-modal__extra a:hover,\n .point-modal__extra a:focus-visible,\n .point-modal__link:hover,\n .point-modal__link:focus-visible {\n color: var(--rs-map-accent);\n }\n .point-modal__actions {\n display: flex;\n flex-wrap: wrap;\n gap: 10px;\n }\n @media (max-width: 768px) {\n .point-modal-overlay {\n position: fixed;\n }\n .point-modal {\n max-height: calc(100dvh - 24px);\n }\n .point-modal__body {\n padding: 16px 18px 20px;\n }\n .point-modal__cover {\n width: calc(100% + 36px);\n margin: -16px -18px 16px;\n }\n }\n </style>\n <div class=\"component-shell\">\n <p class=\"component-message\" data-component-message>Cargando puntos...</p>\n <div class=\"map-layout\" data-map-layout hidden>\n <div class=\"map-panel\">\n <div id=\"map\"></div>\n </div>\n <aside class=\"points-panel\" aria-live=\"polite\">\n <div class=\"zone-filters\" role=\"group\" aria-label=\"Filtrar por zona\">\n <button class=\"zone-button\" type=\"button\" data-zone=\"norte\" data-label=\"Zona Norte\" aria-pressed=\"false\">Zona Norte</button>\n <button class=\"zone-button\" type=\"button\" data-zone=\"rm\" data-label=\"RM\" aria-pressed=\"false\">RM</button>\n <button class=\"zone-button\" type=\"button\" data-zone=\"centro\" data-label=\"Zona Centro\" aria-pressed=\"false\">Zona Centro</button>\n <button class=\"zone-button\" type=\"button\" data-zone=\"sur\" data-label=\"Zona Sur\" aria-pressed=\"false\">Zona Sur</button>\n </div>\n <div class=\"panel-header\">\n <h2 data-panel-title>Puntos del mapa</h2>\n <button class=\"zone-button zone-button--secondary\" type=\"button\" data-action=\"nearest\">\n <i class=\"fa-solid fa-location-dot\" aria-hidden=\"true\"></i>\n Buscar tienda cercana\n </button>\n </div>\n <div class=\"zones-container\" data-zone-container></div>\n </aside>\n </div>\n </div>\n <div class=\"point-modal-overlay\" data-point-modal-overlay hidden>\n <section class=\"point-modal\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"rs-map-point-modal-title\">\n <header class=\"point-modal__header\">\n <h2 class=\"point-modal__title\" id=\"rs-map-point-modal-title\" data-point-modal-title></h2>\n <button class=\"point-modal__close\" type=\"button\" data-point-modal-close aria-label=\"Cerrar\">\n <i class=\"fa-solid fa-xmark\" aria-hidden=\"true\"></i>\n </button>\n </header>\n <div class=\"point-modal__body\" data-point-modal-body></div>\n </section>\n </div>\n `;\n }\n\n connectedCallback() {\n this.mapEl = this.root.querySelector<HTMLDivElement>('#map')!;\n this.panelTitleEl = this.root.querySelector<HTMLElement>('[data-panel-title]')!;\n this.zonesContainer = this.root.querySelector<HTMLElement>('[data-zone-container]')!;\n this.componentMessageEl = this.root.querySelector<HTMLElement>('[data-component-message]')!;\n this.mapLayoutEl = this.root.querySelector<HTMLElement>('[data-map-layout]')!;\n this.pointModalOverlayEl = this.root.querySelector<HTMLElement>('[data-point-modal-overlay]')!;\n this.pointModalTitleEl = this.root.querySelector<HTMLElement>('[data-point-modal-title]')!;\n this.pointModalBodyEl = this.root.querySelector<HTMLElement>('[data-point-modal-body]')!;\n this.pointModalCloseButton = this.root.querySelector<HTMLButtonElement>('[data-point-modal-close]')!;\n this.zoneButtons = Array.from(this.root.querySelectorAll<HTMLButtonElement>('[data-zone]'));\n this.nearestButton = this.root.querySelector<HTMLButtonElement>('[data-action=\"nearest\"]')!;\n this.zoneButtons.forEach((btn) => btn.addEventListener('click', this.handleZoneButtonClick));\n if (this.nearestButton) {\n this.nearestButton.addEventListener('click', this.handleNearestClick);\n }\n this.pointModalOverlayEl.addEventListener('click', this.handlePointModalOverlayClick);\n this.pointModalCloseButton.addEventListener('click', this.closePointModal);\n window.addEventListener('keydown', this.handlePointModalKeydown);\n this.updateZoneButtons();\n this.setMapHeight(this.getAttribute('height'));\n this.setComponentState('loading');\n this.syncAttributesToState();\n }\n\n disconnectedCallback() {\n this.pointsController?.abort();\n this.zoneButtons.forEach((btn) => btn.removeEventListener('click', this.handleZoneButtonClick));\n if (this.nearestButton) {\n this.nearestButton.removeEventListener('click', this.handleNearestClick);\n }\n this.pointModalOverlayEl?.removeEventListener('click', this.handlePointModalOverlayClick);\n this.pointModalCloseButton?.removeEventListener('click', this.closePointModal);\n window.removeEventListener('keydown', this.handlePointModalKeydown);\n }\n\n attributeChangedCallback(name: string, _oldValue: string | null, newValue: string | null) {\n if (name === 'marca') {\n this.setMarca(newValue ?? '');\n } else if (name === 'tipo') {\n this.setTipo(newValue ?? '');\n } else if (name === 'height') {\n this.setMapHeight(newValue);\n } else if (name === 'google-maps-key') {\n this.setGoogleMapsKey(newValue);\n } else if (name === 'points-api-url') {\n this.setPointsApiUrl(newValue);\n } else if (name === 'cache-days') {\n this.setCacheDays(newValue);\n } else if (name === 'marker-icon-base') {\n this.setMarkerIconBase(newValue);\n } else if (name === 'marker-icon-default') {\n this.setDefaultMarkerIcon(newValue);\n }\n }\n\n private loadGoogleMaps() {\n if ((window as any)._rsGoogleMapsLoaded) {\n return Promise.resolve().then(() => {\n this.initMap();\n });\n }\n\n if (!this.googleMapsApiKey) {\n console.error('Falta la clave de Google Maps. Define el atributo \"google-maps-key\" en <rs-map>.');\n return Promise.resolve();\n }\n\n if (!RsMap.googleMapsLoaderPromise) {\n RsMap.googleMapsLoaderPromise = new Promise<void>((resolve, reject) => {\n const existingScript = document.querySelector<HTMLScriptElement>('script[data-rs-google-maps=\"true\"]');\n if (existingScript) {\n existingScript.addEventListener('load', () => resolve(), { once: true });\n existingScript.addEventListener(\n 'error',\n () => reject(new Error('Error al cargar la API de Google Maps')),\n { once: true }\n );\n return;\n }\n\n const script = document.createElement('script');\n const params = new URLSearchParams({\n key: this.googleMapsApiKey,\n v: 'weekly'\n });\n script.src = `https://maps.googleapis.com/maps/api/js?${params.toString()}`;\n script.async = true;\n script.defer = true;\n script.dataset.rsGoogleMaps = 'true';\n\n script.onload = () => {\n (window as any)._rsGoogleMapsLoaded = true;\n resolve();\n };\n\n script.onerror = () => {\n RsMap.googleMapsLoaderPromise = null;\n reject(new Error('Error al cargar la API de Google Maps'));\n };\n\n document.head.appendChild(script);\n });\n }\n\n return RsMap.googleMapsLoaderPromise\n .then(() => {\n (window as any)._rsGoogleMapsLoaded = true;\n this.initMap();\n })\n .catch((error) => {\n console.error(error instanceof Error ? error.message : 'Error al cargar la API de Google Maps');\n });\n }\n\n private initMap() {\n const g = (window as any).google;\n if (!g) {\n console.error('Google Maps aun no esta disponible.');\n return;\n }\n\n const initialCenter = this.getInitialCenter();\n this.map = new g.maps.Map(this.mapEl, {\n center: initialCenter,\n zoom: 14,\n mapTypeId: 'roadmap'\n });\n if (this.points.length) {\n this.updateMarkers(this.points);\n }\n }\n\n private getInitialCenter() {\n const firstPoint = this.getFirstValidPoint();\n if (firstPoint) {\n return firstPoint;\n }\n return { lat: -33.4489, lng: -70.6693 };\n }\n\n private getFirstValidPoint(): MapPosition | null {\n for (const point of this.points) {\n const position = this.getPointPosition(point);\n if (position) {\n return position;\n }\n }\n return null;\n }\n\n private syncAttributesToState() {\n this.isSyncingInitialAttributes = true;\n this.setMarca(this.getAttribute('marca') ?? '');\n this.setTipo(this.getAttribute('tipo') ?? '');\n this.setGoogleMapsKey(this.getAttribute('google-maps-key'));\n this.setPointsApiUrl(this.getAttribute('points-api-url'));\n this.setCacheDays(this.getAttribute('cache-days'));\n this.setMarkerIconBase(this.getAttribute('marker-icon-base'));\n this.setDefaultMarkerIcon(this.getAttribute('marker-icon-default'));\n this.isSyncingInitialAttributes = false;\n this.queueRefreshPoints();\n }\n\n private setMapHeight(value: string | null) {\n const normalized = (value ?? '').trim();\n if (!normalized) {\n this.mapHeight = '';\n this.style.removeProperty('--map-height');\n return;\n }\n this.mapHeight = normalized;\n this.style.setProperty('--map-height', normalized);\n }\n\n private setGoogleMapsKey(value: string | null) {\n this.googleMapsApiKey = (value ?? '').trim();\n if (this.googleMapsApiKey && this.isConnected) {\n void this.loadGoogleMaps();\n }\n }\n\n private setPointsApiUrl(value: string | null) {\n const normalized = (value ?? '').trim();\n this.pointsApiUrl = normalized || DEFAULT_POINTS_API_URL;\n if (this.pointsApiUrl && this.isConnected && !this.isSyncingInitialAttributes) {\n this.queueRefreshPoints();\n }\n }\n\n private setCacheDays(value: string | null) {\n const normalized = (value ?? '').trim();\n if (!normalized) {\n this.pointsCacheTtlMs = DEFAULT_POINTS_CACHE_TTL_MS;\n return;\n }\n\n const days = Number(normalized);\n if (!Number.isFinite(days) || days < 0) {\n this.pointsCacheTtlMs = DEFAULT_POINTS_CACHE_TTL_MS;\n return;\n }\n\n this.pointsCacheTtlMs = days * 24 * 60 * 60 * 1000;\n }\n\n private setMarkerIconBase(value: string | null) {\n const normalized = (value ?? '').trim();\n if (!normalized) {\n this.markerIconBaseUrl = '';\n return;\n }\n this.markerIconBaseUrl = normalized.endsWith('/') ? normalized : `${normalized}/`;\n }\n\n private setDefaultMarkerIcon(value: string | null) {\n this.defaultMarkerIconUrl = (value ?? '').trim();\n }\n\n private setMarca(value: string) {\n this.marca = value.trim();\n this.marcaKey = this.normalizeBrandKey(this.marca);\n this.applyBrandColor();\n if (!this.isSyncingInitialAttributes) {\n this.queueRefreshPoints();\n }\n }\n\n private setTipo(value: string) {\n this.tipo = value.trim();\n this.tipoCode = this.normalizeTipo(this.tipo);\n this.updatePanelTitle();\n if (!this.isSyncingInitialAttributes) {\n this.queueRefreshPoints();\n }\n }\n\n private queueRefreshPoints() {\n if (this.refreshQueued) {\n return;\n }\n this.refreshQueued = true;\n queueMicrotask(() => {\n this.refreshQueued = false;\n void this.refreshPoints();\n });\n }\n\n get marcaFilter() {\n return this.marca;\n }\n\n get tipoFilter() {\n return this.tipo;\n }\n\n private updatePanelTitle() {\n if (!this.panelTitleEl) {\n return;\n }\n const label = this.getTipoLabel();\n this.panelTitleEl.textContent = label ?? 'Puntos del mapa';\n }\n\n private getTipoLabel() {\n if (this.tipoCode !== null && this.tipoCode in TYPE_LABELS) {\n return TYPE_LABELS[this.tipoCode];\n }\n const normalized = this.tipo.trim().toLowerCase();\n const normalizedCode = normalized && normalized in TYPE_CODES ? TYPE_CODES[normalized] : null;\n if (normalizedCode !== null && normalizedCode in TYPE_LABELS) {\n return TYPE_LABELS[normalizedCode];\n }\n return null;\n }\n\n private applyBrandColor() {\n const color = BRAND_COLORS[this.marcaKey] ?? DEFAULT_BRAND_COLOR;\n this.style.setProperty('--rs-map-accent', color);\n }\n\n private normalizeTipo(value: string): number | null {\n if (!value) {\n return null;\n }\n const normalized = value.trim().toLowerCase();\n if (normalized in TYPE_CODES) {\n return TYPE_CODES[normalized];\n }\n const numeric = Number(normalized);\n if (Number.isFinite(numeric) && (numeric === 0 || numeric === 1)) {\n return numeric;\n }\n return null;\n }\n\n private async refreshPoints() {\n if (!this.isConnected || !this.marca || this.tipoCode === null) {\n return;\n }\n\n if (!this.pointsApiUrl) {\n console.error('Falta la URL de la API de puntos. Define el atributo \"points-api-url\" en <rs-map>.');\n this.setComponentState('error');\n return;\n }\n\n this.pointsController?.abort();\n const controller = new AbortController();\n this.pointsController = controller;\n\n const marcaRequestValue = this.getMarcaRequestValue();\n const params = new URLSearchParams({\n marca: marcaRequestValue,\n tipo: String(this.tipoCode)\n });\n\n const hasQuery = this.pointsApiUrl.includes('?');\n const needsAmp = hasQuery && !/[?&]$/.test(this.pointsApiUrl);\n const separator = hasQuery ? (needsAmp ? '&' : '') : '?';\n const requestUrl = `${this.pointsApiUrl}${separator}${params.toString()}`;\n const cacheKey = this.getPointsCacheKey(requestUrl);\n const cachedPayload = await this.readPointsCache(cacheKey);\n const hasFreshCache = cachedPayload && Date.now() - cachedPayload.timestamp < this.pointsCacheTtlMs;\n const localFallbackPayload = cachedPayload ? null : await this.getLocalPointsFallback(marcaRequestValue, this.tipoCode);\n\n if (cachedPayload) {\n this.applyPointsPayload(cachedPayload.data);\n this.setComponentState('ready');\n if (hasFreshCache) {\n return;\n }\n } else if (localFallbackPayload) {\n this.applyPointsPayload(localFallbackPayload);\n this.setComponentState('ready');\n } else {\n this.setComponentState('loading');\n }\n\n try {\n const response = await fetch(requestUrl, {\n signal: controller.signal\n });\n\n if (!response.ok) {\n throw new Error(`Respuesta ${response.status}`);\n }\n\n const payload = await response.json();\n if (!Array.isArray(payload)) {\n throw new Error('La respuesta de puntos no es valida.');\n }\n const typedPayload = payload as MapPointApi[];\n await this.writePointsCache(cacheKey, typedPayload);\n this.applyPointsPayload(typedPayload);\n this.setComponentState('ready');\n } catch (error) {\n if (error instanceof DOMException && error.name === 'AbortError') {\n return;\n }\n if (cachedPayload || localFallbackPayload) {\n console.warn('Se mantienen puntos locales por error al refrescar el mapa', error);\n return;\n }\n console.error('No se pudieron cargar los puntos del mapa', error);\n this.setComponentState('error');\n }\n }\n\n private applyPointsPayload(payload: MapPointApi[]) {\n this.points = this.transformPoints(payload);\n this.reportUnmappablePoints(this.points);\n this.renderPoints(this.points);\n this.initialViewApplied = false;\n this.updateMarkers(this.points);\n }\n\n private reportUnmappablePoints(points: MapPoint[]) {\n const unmappablePoints = points\n .filter((point) => !this.getPointPosition(point))\n .map((point) => ({\n id: point.id,\n titulo: point.titulo,\n direccion: point.direccion,\n lat: point.lat,\n lng: point.lng\n }));\n\n if (unmappablePoints.length) {\n console.warn('Puntos con coordenadas fuera de rango o invalidas; no se muestran como markers.', unmappablePoints);\n }\n }\n\n private getPointsCacheKey(requestUrl: string) {\n return `rs-map:points:${requestUrl}`;\n }\n\n private async getLocalPointsFallback(marca: string, tipoCode: number): Promise<MapPointApi[] | null> {\n const normalizedBrand = this.normalizeBrandKey(marca);\n const path = `../json/PuntosMapas_${normalizedBrand}_${tipoCode}.json`;\n const existingRequest = this.localPointsRequests.get(path);\n if (existingRequest) {\n return existingRequest;\n }\n\n const loader = LOCAL_POINTS_LOADERS[path];\n if (!loader) {\n return null;\n }\n\n const request = loader()\n .then((payload) => {\n const parsedPayload = this.parseLocalPointsPayload(payload);\n return parsedPayload?.length ? parsedPayload : null;\n })\n .catch(() => null);\n\n this.localPointsRequests.set(path, request);\n return request;\n }\n\n private parseLocalPointsPayload(value: unknown): MapPointApi[] | null {\n if (!Array.isArray(value)) {\n return null;\n }\n\n return value as MapPointApi[];\n }\n\n private async readPointsCache(cacheKey: string): Promise<PointsCacheEntry | null> {\n const dbEntry = await this.readPointsCacheFromIndexedDb(cacheKey);\n if (dbEntry) {\n return dbEntry;\n }\n\n try {\n const raw = window.localStorage.getItem(cacheKey);\n if (!raw) {\n return null;\n }\n const parsed = JSON.parse(raw) as PointsCacheEntry;\n if (!parsed || !Array.isArray(parsed.data) || !Number.isFinite(parsed.timestamp)) {\n window.localStorage.removeItem(cacheKey);\n return null;\n }\n return parsed;\n } catch {\n return null;\n }\n }\n\n private async writePointsCache(cacheKey: string, payload: MapPointApi[]) {\n const entry: PointsCacheEntry = {\n timestamp: Date.now(),\n data: payload\n };\n\n await this.writePointsCacheToIndexedDb(cacheKey, entry);\n\n try {\n window.localStorage.setItem(cacheKey, JSON.stringify(entry));\n } catch {\n // Ignore storage errors and keep runtime behavior.\n }\n }\n\n private async readPointsCacheFromIndexedDb(cacheKey: string): Promise<PointsCacheEntry | null> {\n const db = await RsMap.openPointsCacheDb();\n if (!db) {\n return null;\n }\n\n return new Promise((resolve) => {\n const transaction = db.transaction(POINTS_CACHE_STORE_NAME, 'readonly');\n const store = transaction.objectStore(POINTS_CACHE_STORE_NAME);\n const request = store.get(cacheKey);\n\n request.onsuccess = () => {\n const result = request.result as PointsCacheRecord | undefined;\n if (!result || !Array.isArray(result.data) || !Number.isFinite(result.timestamp)) {\n resolve(null);\n return;\n }\n resolve({\n timestamp: result.timestamp,\n data: result.data\n });\n };\n\n request.onerror = () => resolve(null);\n });\n }\n\n private async writePointsCacheToIndexedDb(cacheKey: string, entry: PointsCacheEntry) {\n const db = await RsMap.openPointsCacheDb();\n if (!db) {\n return;\n }\n\n await new Promise<void>((resolve) => {\n const transaction = db.transaction(POINTS_CACHE_STORE_NAME, 'readwrite');\n const store = transaction.objectStore(POINTS_CACHE_STORE_NAME);\n const request = store.put({\n key: cacheKey,\n timestamp: entry.timestamp,\n data: entry.data\n } satisfies PointsCacheRecord);\n\n request.onsuccess = () => resolve();\n request.onerror = () => resolve();\n });\n }\n\n private static openPointsCacheDb(): Promise<IDBDatabase | null> {\n if (typeof window === 'undefined' || !('indexedDB' in window)) {\n return Promise.resolve(null);\n }\n\n if (!RsMap.pointsCacheDbPromise) {\n RsMap.pointsCacheDbPromise = new Promise((resolve) => {\n const request = window.indexedDB.open(POINTS_CACHE_DB_NAME, 1);\n\n request.onupgradeneeded = () => {\n const db = request.result;\n if (!db.objectStoreNames.contains(POINTS_CACHE_STORE_NAME)) {\n db.createObjectStore(POINTS_CACHE_STORE_NAME, { keyPath: 'key' });\n }\n };\n\n request.onsuccess = () => resolve(request.result);\n request.onerror = () => resolve(null);\n });\n }\n\n return RsMap.pointsCacheDbPromise;\n }\n\n private transformPoints(payload: MapPointApi[]): MapPoint[] {\n return payload.map((point) => ({\n ...point,\n zone: this.getZoneForPoint(point)\n }));\n }\n\n private renderPoints(points: MapPoint[]) {\n if (!this.zonesContainer) {\n return;\n }\n\n const grouped = this.groupPoints(points);\n this.pointsByZone = grouped;\n this.updateZoneButtonCounts();\n\n const fragment = document.createDocumentFragment();\n\n ZONE_ORDER.forEach((zoneKey) => {\n const section = document.createElement('section');\n section.className = 'zone-section';\n section.dataset.zoneSection = zoneKey;\n\n const header = document.createElement('div');\n header.className = 'zone-section__header';\n const title = document.createElement('span');\n title.textContent = ZONE_LABELS[zoneKey];\n header.appendChild(title);\n section.appendChild(header);\n\n if (grouped[zoneKey].length === 0) {\n const empty = document.createElement('p');\n empty.className = 'zone-section__empty';\n empty.textContent = 'Sin puntos en esta zona.';\n section.appendChild(empty);\n } else {\n const list = document.createElement('div');\n list.className = 'zone-section__list';\n grouped[zoneKey].forEach((point) => {\n list.appendChild(this.createPointCard(point));\n });\n section.appendChild(list);\n }\n\n fragment.appendChild(section);\n });\n\n this.zonesContainer.replaceChildren(fragment);\n this.updateZoneVisibility();\n }\n\n private groupPoints(points: MapPoint[]): Record<ZoneKey, MapPoint[]> {\n const grouped: Record<ZoneKey, MapPoint[]> = {\n norte: [],\n rm: [],\n centro: [],\n sur: []\n };\n points.forEach((point) => {\n grouped[point.zone].push(point);\n });\n return grouped;\n }\n\n private createPointCard(point: MapPoint) {\n const card = document.createElement('article');\n card.className = 'point-card';\n card.dataset.pointId = String(point.id);\n const coordinateWarning = this.getPointCoordinateWarning(point);\n\n const title = document.createElement('h3');\n title.className = 'point-card__title';\n title.textContent = point.titulo || 'Sin nombre';\n card.appendChild(title);\n\n const addressBlock = document.createElement('div');\n addressBlock.className = 'point-card__address-block';\n\n const address = document.createElement('p');\n address.className = 'point-card__address';\n address.textContent = point.direccion || 'Sin direccion';\n addressBlock.appendChild(address);\n\n if (point.comuna_name) {\n const comuna = document.createElement('p');\n comuna.className = 'point-card__meta';\n comuna.textContent = point.comuna_name;\n addressBlock.appendChild(comuna);\n }\n\n if (point.provincia_name) {\n const provincia = document.createElement('p');\n provincia.className = 'point-card__meta';\n provincia.textContent = point.provincia_name;\n addressBlock.appendChild(provincia);\n }\n\n if (point.region_name) {\n const regionLine = document.createElement('p');\n regionLine.className = 'point-card__meta';\n regionLine.textContent = point.region_name;\n addressBlock.appendChild(regionLine);\n }\n\n card.appendChild(addressBlock);\n\n let mapPositionElement: HTMLElement | null = null;\n const position = this.getPointPosition(point);\n if (position) {\n const mapActions = document.createElement('div');\n mapActions.className = 'point-card__map-actions';\n\n const focusButton = document.createElement('button');\n focusButton.type = 'button';\n focusButton.className = 'point-card__focus';\n const icon = this.createIconElement('fa-solid fa-location-crosshairs');\n focusButton.appendChild(icon);\n focusButton.appendChild(document.createTextNode(' Ver en el mapa'));\n focusButton.addEventListener('click', () => {\n void this.focusPointWithZoom(position.lat, position.lng);\n this.scrollToPointCard(point.id);\n });\n mapActions.appendChild(focusButton);\n mapActions.appendChild(this.createMobileNavigationActions(position));\n mapPositionElement = mapActions;\n } else if (coordinateWarning) {\n const warning = document.createElement('div');\n warning.className = 'point-card__coordinate-warning';\n const icon = this.createIconElement('fa-solid fa-circle-info');\n warning.appendChild(icon);\n const text = document.createElement('span');\n text.textContent = coordinateWarning;\n warning.appendChild(text);\n mapPositionElement = warning;\n }\n\n const details = document.createElement('div');\n details.className = 'point-card__details';\n details.hidden = true;\n let hasDetails = false;\n\n const actions = document.createElement('div');\n actions.className = 'point-card__actions';\n let mapLinkElement: HTMLAnchorElement | null = null;\n\n if (point.url && point.url !== '#') {\n const siteLink = document.createElement('a');\n siteLink.href = point.url;\n siteLink.target = '_blank';\n siteLink.rel = 'noopener noreferrer';\n siteLink.className = 'point-card__action';\n const icon = this.createIconElement('fa-solid fa-globe');\n siteLink.appendChild(icon);\n siteLink.appendChild(document.createTextNode('Sitio web'));\n actions.appendChild(siteLink);\n }\n\n if (point.email) {\n const emailLink = document.createElement('a');\n emailLink.href = `mailto:${point.email}`;\n emailLink.target = '_blank';\n emailLink.rel = 'noopener noreferrer';\n emailLink.className = 'point-card__action point-card__action--text';\n const icon = this.createIconElement('fa-solid fa-envelope');\n emailLink.appendChild(icon);\n emailLink.appendChild(document.createTextNode(point.email));\n actions.appendChild(emailLink);\n }\n\n if (actions.childElementCount) {\n details.appendChild(actions);\n hasDetails = true;\n }\n\n if (point.telefonos?.length) {\n const contactSection = document.createElement('div');\n contactSection.className = 'point-card__contact';\n const contactTitle = document.createElement('div');\n contactTitle.className = 'point-card__contact-title';\n const icon = this.createIconElement('fa-solid fa-phone');\n contactTitle.appendChild(icon);\n contactTitle.appendChild(document.createTextNode('Telefonos'));\n contactSection.appendChild(contactTitle);\n\n const phoneList = document.createElement('ul');\n phoneList.className = 'point-card__phone-list';\n\n point.telefonos\n .slice()\n .sort((a, b) => a.orden - b.orden)\n .forEach((phone) => {\n const item = document.createElement('li');\n item.className = 'point-card__phone-item';\n\n const iconWrapper = document.createElement('span');\n iconWrapper.className = 'point-card__phone-icon';\n const hasWhatsapp = this.isWhatsappPhone(phone);\n if (hasWhatsapp) {\n const whatsappIcon = this.createIconElement('fa-brands fa-whatsapp');\n iconWrapper.appendChild(whatsappIcon);\n } else {\n iconWrapper.textContent = '-';\n }\n item.appendChild(iconWrapper);\n\n const content = document.createElement('div');\n content.className = 'point-card__phone-content';\n\n const name = document.createElement('span');\n name.className = 'point-card__phone-name';\n name.textContent = phone.nombre;\n content.appendChild(name);\n\n const numberEl = hasWhatsapp ? document.createElement('a') : document.createElement('span');\n numberEl.className = 'point-card__phone-number';\n if (hasWhatsapp) {\n const link = this.getWhatsappLink(phone.telefono);\n if (link) {\n (numberEl as HTMLAnchorElement).href = link;\n (numberEl as HTMLAnchorElement).target = '_blank';\n (numberEl as HTMLAnchorElement).rel = 'noopener noreferrer';\n numberEl.classList.add('point-card__phone-number--link');\n }\n }\n numberEl.textContent = phone.telefono;\n content.appendChild(numberEl);\n\n item.appendChild(content);\n phoneList.appendChild(item);\n });\n\n contactSection.appendChild(phoneList);\n details.appendChild(contactSection);\n hasDetails = true;\n }\n\n if (point.adicional) {\n const extra = document.createElement('p');\n extra.className = 'point-card__extra';\n extra.innerHTML = point.adicional;\n extra.querySelectorAll('a').forEach((link) => {\n link.classList.add('point-card__extra-link');\n const icon = this.createIconElement('fa-solid fa-arrow-up-right-from-square');\n icon.classList.add('point-card__extra-icon');\n link.appendChild(icon);\n });\n details.appendChild(extra);\n hasDetails = true;\n }\n\n if (point.googlelink) {\n mapLinkElement = document.createElement('a');\n mapLinkElement.href = point.googlelink;\n mapLinkElement.target = '_blank';\n mapLinkElement.rel = 'noopener noreferrer';\n mapLinkElement.className = 'point-card__action';\n const icon = this.createIconElement('fa-solid fa-map-location-dot');\n mapLinkElement.appendChild(icon);\n mapLinkElement.appendChild(document.createTextNode('Google Maps'));\n }\n\n if (mapLinkElement) {\n const mapWrapper = document.createElement('div');\n mapWrapper.className = 'point-card__actions';\n mapWrapper.appendChild(mapLinkElement);\n details.appendChild(mapWrapper);\n hasDetails = true;\n }\n\n if (hasDetails) {\n const toggle = document.createElement('button');\n toggle.type = 'button';\n toggle.className = 'point-card__toggle';\n const toggleIcon = this.createIconElement('fa-solid fa-circle-info');\n const toggleText = document.createElement('span');\n toggleText.textContent = 'Mas informacion';\n toggle.appendChild(toggleIcon);\n toggle.appendChild(toggleText);\n toggle.addEventListener('click', () => {\n const isHidden = details.hidden;\n details.hidden = !isHidden;\n toggleText.textContent = isHidden ? 'Ocultar informacion' : 'Mas informacion';\n toggleIcon.className = isHidden ? 'fa-solid fa-circle-xmark' : 'fa-solid fa-circle-info';\n });\n card.appendChild(toggle);\n card.appendChild(details);\n }\n\n if (mapPositionElement) {\n card.appendChild(mapPositionElement);\n }\n\n return card;\n }\n\n private createMobileNavigationActions(position: MapPosition) {\n const actions = document.createElement('div');\n actions.className = 'point-card__mobile-navigation';\n actions.appendChild(\n this.createMobileNavigationLink(\n `https://www.google.com/maps/dir/?api=1&destination=${position.lat},${position.lng}&travelmode=driving`,\n 'Ir con Google Maps',\n 'fa-brands fa-google'\n )\n );\n actions.appendChild(\n this.createMobileNavigationLink(\n `https://waze.com/ul?ll=${position.lat},${position.lng}&navigate=yes`,\n 'Ir con Waze',\n 'fa-brands fa-waze'\n )\n );\n return actions;\n }\n\n private createMobileNavigationLink(url: string, label: string, iconClass: string) {\n const link = document.createElement('a');\n link.href = url;\n link.target = '_blank';\n link.rel = 'noopener noreferrer';\n link.className = 'point-card__mobile-nav-link';\n link.appendChild(this.createIconElement(iconClass));\n link.appendChild(document.createTextNode(label));\n return link;\n }\n\n private getZoneForPoint(point: MapPointApi): ZoneKey {\n const normalizedRegion = this.normalizeRegionName(point.region_name || '');\n if (normalizedRegion && normalizedRegion in REGION_ZONE_MAP) {\n return REGION_ZONE_MAP[normalizedRegion];\n }\n if (normalizedRegion.includes('metropolitana')) {\n return 'rm';\n }\n if (\n normalizedRegion.includes('araucania') ||\n normalizedRegion.includes('rios') ||\n normalizedRegion.includes('lagos') ||\n normalizedRegion.includes('aysen') ||\n normalizedRegion.includes('magallanes')\n ) {\n return 'sur';\n }\n if (\n normalizedRegion.includes('arica') ||\n normalizedRegion.includes('tarapaca') ||\n normalizedRegion.includes('antofagasta') ||\n normalizedRegion.includes('atacama') ||\n normalizedRegion.includes('coquimbo')\n ) {\n return 'norte';\n }\n return 'centro';\n }\n\n private normalizeRegionName(input: string) {\n return input\n .toLowerCase()\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '')\n .trim();\n }\n\n private getMarcaRequestValue() {\n const normalized = this.normalizeBrandToken(this.marca);\n return BRAND_ALIASES[normalized] ?? this.marca;\n }\n\n private normalizeBrandKey(value: string) {\n const normalized = this.normalizeBrandToken(value);\n if (!normalized) {\n return 'default';\n }\n return BRAND_ALIASES[normalized] ?? normalized;\n }\n\n private normalizeBrandToken(value: string) {\n const normalized = value\n .toLowerCase()\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '')\n .replace(/[^a-z0-9]+/g, '');\n return normalized;\n }\n\n private getMarkerIcon(point?: Pick<MapPointApi, 'tipo'>) {\n const key = this.marcaKey || 'default';\n const localIconUrl = this.getLocalMarkerIconUrl(key, point);\n if (localIconUrl) {\n return localIconUrl;\n }\n if (this.markerIconBaseUrl) {\n return `${this.markerIconBaseUrl}${key}.png`;\n }\n if (this.defaultMarkerIconUrl) {\n return this.defaultMarkerIconUrl;\n }\n return null;\n }\n\n private getLocalMarkerIconUrl(key: string, point?: Pick<MapPointApi, 'tipo'>) {\n const pointTipoCode = point ? Number(point.tipo) : NaN;\n const tipoCode = Number.isFinite(pointTipoCode) ? pointTipoCode : this.tipoCode;\n const fileName = tipoCode === 1 ? `${key}_distribuidor.png` : `${key}.png`;\n return LOCAL_MARKER_ICON_URLS[`../pin/${fileName}`] ?? null;\n }\n\n private getPointCoordinateWarning(point: Pick<MapPointApi, 'lat' | 'lng'>) {\n if (this.getPointPosition(point)) {\n return null;\n }\n\n const lat = Number(point.lat);\n const lng = Number(point.lng);\n const rawCoordinates = `lat ${point.lat || 'sin dato'}, lng ${point.lng || 'sin dato'}`;\n if (!Number.isFinite(lat) || !Number.isFinite(lng)) {\n return `Ubicacion por revisar: ${rawCoordinates}.`;\n }\n return `Ubicacion por revisar: ${rawCoordinates}.`;\n }\n\n private getPointPosition(point: Pick<MapPointApi, 'lat' | 'lng'>): MapPosition | null {\n const lat = Number(point.lat);\n const lng = Number(point.lng);\n if (!this.isMappableCoordinate(lat, lng)) {\n return null;\n }\n return { lat, lng };\n }\n\n private isMappableCoordinate(lat: number, lng: number) {\n return (\n Number.isFinite(lat) &&\n Number.isFinite(lng) &&\n lat >= CONTINENTAL_CHILE_BOUNDS.minLat &&\n lat <= CONTINENTAL_CHILE_BOUNDS.maxLat &&\n lng >= CONTINENTAL_CHILE_BOUNDS.minLng &&\n lng <= CONTINENTAL_CHILE_BOUNDS.maxLng\n );\n }\n\n private updateMarkers(points: MapPoint[]) {\n const g = (window as any).google;\n if (!g || !this.map) {\n return;\n }\n this.markers.forEach((marker) => marker.setMap(null));\n this.markers = [];\n\n const validPoints: Array<{ point: MapPoint; position: MapPosition }> = [];\n points.forEach((point) => {\n const position = this.getPointPosition(point);\n if (position) {\n validPoints.push({ point, position });\n }\n });\n\n if (!validPoints.length) {\n return;\n }\n\n const bounds = new g.maps.LatLngBounds();\n\n validPoints.forEach(({ point, position }) => {\n const { lat, lng } = position;\n const iconUrl = this.getMarkerIcon(point);\n const icon =\n iconUrl && this.map\n ? {\n url: iconUrl,\n scaledSize: new g.maps.Size(64, 64),\n anchor: new g.maps.Point(32, 64)\n }\n : undefined;\n const marker = new g.maps.Marker({\n map: this.map,\n position: { lat, lng },\n title: point.titulo,\n icon\n });\n marker.addListener('click', () => {\n this.openPointModal(point);\n this.scrollToPointCard(point.id);\n });\n this.markers.push(marker);\n const markerPosition = marker.getPosition();\n if (markerPosition) {\n bounds.extend(markerPosition);\n }\n });\n\n if (!this.initialViewApplied && this.markers.length) {\n const position = this.markers[0].getPosition();\n if (position) {\n this.map.setCenter(position);\n this.map.setZoom(14);\n this.initialViewApplied = true;\n return;\n }\n }\n\n if (this.markers.length === 1) {\n const position = this.markers[0].getPosition();\n if (position) {\n this.map.setCenter(position);\n }\n this.map.setZoom(14);\n } else {\n this.map.fitBounds(bounds);\n }\n }\n\n private openPointModal(point: MapPoint) {\n if (!this.pointModalOverlayEl || !this.pointModalTitleEl || !this.pointModalBodyEl) {\n return;\n }\n this.pointModalTitleEl.textContent = point.titulo || 'Sin nombre';\n this.pointModalBodyEl.replaceChildren(this.createPointModalContent(point));\n this.pointModalOverlayEl.removeAttribute('hidden');\n this.pointModalCloseButton?.focus();\n }\n\n private closePointModal = () => {\n if (!this.pointModalOverlayEl) {\n return;\n }\n this.pointModalOverlayEl.setAttribute('hidden', '');\n this.pointModalBodyEl?.replaceChildren();\n };\n\n private handlePointModalOverlayClick = (event: Event) => {\n if (event.target === this.pointModalOverlayEl) {\n this.closePointModal();\n }\n };\n\n private handlePointModalKeydown = (event: KeyboardEvent) => {\n if (event.key === 'Escape' && this.pointModalOverlayEl && !this.pointModalOverlayEl.hasAttribute('hidden')) {\n this.closePointModal();\n }\n };\n\n private createPointModalContent(point: MapPoint) {\n const fragment = document.createDocumentFragment();\n\n if (point.portada) {\n const cover = document.createElement('img');\n cover.className = 'point-modal__cover';\n cover.src = point.portada;\n cover.alt = point.titulo || 'Imagen del punto';\n cover.loading = 'lazy';\n cover.addEventListener('error', () => cover.remove(), { once: true });\n fragment.appendChild(cover);\n }\n\n const locationSection = this.createPointModalSection();\n this.appendPointModalLine(locationSection, 'Direccion', point.direccion);\n this.appendPointModalLine(locationSection, 'Comuna', point.comuna_name);\n this.appendPointModalLine(locationSection, 'Provincia', point.provincia_name);\n this.appendPointModalLine(locationSection, 'Region', point.region_name);\n this.appendPointModalLine(locationSection, 'RUT', point.rut);\n if (locationSection.childElementCount) {\n fragment.appendChild(locationSection);\n }\n\n const contactSection = this.createPointModalSection();\n this.appendPointModalLine(contactSection, 'Correo', point.email);\n if (point.telefonos?.length) {\n const label = document.createElement('p');\n label.className = 'point-modal__line';\n const strong = document.createElement('span');\n strong.className = 'point-modal__label';\n strong.textContent = 'Telefonos:';\n label.appendChild(strong);\n contactSection.appendChild(label);\n\n const phoneList = document.createElement('ul');\n phoneList.className = 'point-modal__phone-list';\n point.telefonos\n .slice()\n .sort((a, b) => a.orden - b.orden)\n .forEach((phone) => {\n phoneList.appendChild(this.createPointModalPhoneItem(phone));\n });\n contactSection.appendChild(phoneList);\n }\n if (contactSection.childElementCount) {\n fragment.appendChild(contactSection);\n }\n\n if (point.adicional) {\n const extraSection = this.createPointModalSection();\n const extra = document.createElement('div');\n extra.className = 'point-modal__extra';\n extra.innerHTML = point.adicional;\n extra.querySelectorAll('a').forEach((link) => {\n link.target = '_blank';\n link.rel = 'noopener noreferrer';\n });\n extraSection.appendChild(extra);\n fragment.appendChild(extraSection);\n }\n\n const actions = this.createPointModalActions(point);\n if (actions.childElementCount) {\n fragment.appendChild(actions);\n }\n\n return fragment;\n }\n\n private createPointModalSection() {\n const section = document.createElement('div');\n section.className = 'point-modal__section';\n return section;\n }\n\n private appendPointModalLine(section: HTMLElement, label: string, value: string) {\n const normalized = (value ?? '').trim();\n if (!normalized || normalized === '#') {\n return;\n }\n const line = document.createElement('p');\n line.className = 'point-modal__line';\n const strong = document.createElement('span');\n strong.className = 'point-modal__label';\n strong.textContent = `${label}: `;\n line.appendChild(strong);\n line.appendChild(document.createTextNode(normalized));\n section.appendChild(line);\n }\n\n private createPointModalPhoneItem(phone: MapPointPhone) {\n const item = document.createElement('li');\n item.className = 'point-modal__phone-item';\n\n const label = document.createElement('span');\n label.className = 'point-modal__label';\n label.textContent = `${phone.nombre || 'Telefono'}: `;\n item.appendChild(label);\n\n const phoneNumber = (phone.telefono ?? '').trim();\n const whatsappLink = this.isWhatsappPhone(phone) ? this.getWhatsappLink(phoneNumber) : null;\n if (whatsappLink) {\n const link = document.createElement('a');\n link.href = whatsappLink;\n link.target = '_blank';\n link.rel = 'noopener noreferrer';\n link.className = 'point-modal__link';\n link.textContent = phoneNumber;\n item.appendChild(link);\n } else {\n item.appendChild(document.createTextNode(phoneNumber));\n }\n\n return item;\n }\n\n private createPointModalActions(point: MapPoint) {\n const actions = document.createElement('div');\n actions.className = 'point-modal__section point-modal__actions';\n\n if (point.url && point.url !== '#') {\n actions.appendChild(this.createPointModalLink(point.url, 'Sitio web'));\n }\n if (point.googlelink) {\n actions.appendChild(this.createPointModalLink(point.googlelink, 'Google Maps'));\n }\n if (point.email) {\n actions.appendChild(this.createPointModalLink(`mailto:${point.email}`, 'Enviar correo', false));\n }\n\n return actions;\n }\n\n private createPointModalLink(href: string, text: string, external = true) {\n const link = document.createElement('a');\n link.href = href;\n link.className = 'point-modal__link';\n link.textContent = text;\n if (external) {\n link.target = '_blank';\n link.rel = 'noopener noreferrer';\n }\n return link;\n }\n\n private handleZoneButtonClick = (event: Event) => {\n const button = event.currentTarget as HTMLButtonElement;\n const zone = button.dataset.zone as ZoneKey;\n if (!zone) {\n return;\n }\n this.setActiveZone(zone);\n this.scrollToZoneSection(zone);\n };\n\n private setActiveZone(_zone: ZoneFilter) {}\n\n private scrollToZoneSection(zone: ZoneKey) {\n if (!this.zonesContainer) {\n return;\n }\n const section = this.zonesContainer.querySelector<HTMLElement>(`[data-zone-section=\"${zone}\"]`);\n if (!section) {\n return;\n }\n section.scrollIntoView({ behavior: 'smooth', block: 'start' });\n }\n\n private updateZoneButtons() {\n this.zoneButtons.forEach((btn) => {\n const zone = btn.dataset.zone as ZoneKey;\n const isActive = this.activeZone === zone;\n btn.classList.toggle('is-active', isActive);\n btn.setAttribute('aria-pressed', String(isActive));\n });\n }\n\n private updateZoneButtonCounts() {\n this.zoneButtons.forEach((btn) => {\n const zone = btn.dataset.zone as ZoneKey;\n const baseLabel = btn.dataset.label || btn.textContent || '';\n btn.textContent = baseLabel;\n });\n }\n\n private updateZoneVisibility() {\n if (!this.zonesContainer) {\n return;\n }\n const sections = this.zonesContainer.querySelectorAll<HTMLElement>('[data-zone-section]');\n sections.forEach((section) => {\n section.removeAttribute('hidden');\n });\n }\n\n private handleNearestClick = () => {\n if (!navigator.geolocation) {\n alert('La geolocalizacion no esta soportada en este navegador.');\n return;\n }\n navigator.geolocation.getCurrentPosition(\n (pos) => {\n const { latitude, longitude } = pos.coords;\n const nearest = this.findNearestPoint(latitude, longitude);\n if (nearest) {\n const nearestPosition = this.getPointPosition(nearest);\n if (nearestPosition) {\n this.centerMapOnPoint(nearestPosition.lat, nearestPosition.lng);\n }\n this.scrollToPointCard(nearest.id);\n } else {\n alert('No hay puntos disponibles para calcular la tienda cercana.');\n }\n },\n () => {\n alert('No se pudo obtener tu ubicacion.');\n }\n );\n };\n\n private findNearestPoint(lat: number, lng: number): MapPoint | null {\n if (!this.points.length) {\n return null;\n }\n let nearest: MapPoint | null = null;\n let bestDistance = Infinity;\n this.points.forEach((point) => {\n const position = this.getPointPosition(point);\n if (!position) {\n return;\n }\n const distance = this.haversine(lat, lng, position.lat, position.lng);\n if (distance < bestDistance) {\n bestDistance = distance;\n nearest = point;\n }\n });\n return nearest;\n }\n\n private haversine(lat1: number, lon1: number, lat2: number, lon2: number) {\n const toRad = (deg: number) => (deg * Math.PI) / 180;\n const R = 6371e3;\n const dLat = toRad(lat2 - lat1);\n const dLon = toRad(lon2 - lon1);\n const a =\n Math.sin(dLat / 2) * Math.sin(dLat / 2) +\n Math.cos(toRad(lat1)) * Math.cos(toRad(lat2)) * Math.sin(dLon / 2) * Math.sin(dLon / 2);\n const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\n return R * c;\n }\n\n private scrollToPointCard(pointId: number) {\n if (!this.zonesContainer) {\n return;\n }\n const card = this.zonesContainer.querySelector<HTMLElement>(`[data-point-id=\"${pointId}\"]`);\n if (!card) {\n return;\n }\n card.scrollIntoView({ behavior: 'smooth', block: 'center' });\n this.highlightPointCard(card);\n }\n\n private highlightPointCard(card: HTMLElement) {\n if (this.highlightTimeout !== null) {\n clearTimeout(this.highlightTimeout);\n this.highlightTimeout = null;\n }\n this.zonesContainer?.querySelectorAll('.point-card--highlight').forEach((el) => {\n el.classList.remove('point-card--highlight');\n });\n card.classList.add('point-card--highlight');\n this.highlightTimeout = window.setTimeout(() => {\n card.classList.remove('point-card--highlight');\n this.highlightTimeout = null;\n }, 3500);\n }\n\n private setComponentState(state: 'loading' | 'ready' | 'error') {\n if (!this.componentMessageEl || !this.mapLayoutEl) {\n return;\n }\n if (state === 'ready') {\n this.componentMessageEl.setAttribute('hidden', '');\n this.mapLayoutEl.removeAttribute('hidden');\n } else {\n const text = state === 'loading' ? 'Cargando puntos...' : 'Mapa temporalmente no disponible';\n this.componentMessageEl.textContent = text;\n this.componentMessageEl.removeAttribute('hidden');\n this.mapLayoutEl.setAttribute('hidden', '');\n }\n }\n\n private centerMapOnPoint(lat: number, lng: number, targetZoom = 14) {\n const g = (window as any).google;\n if (!g || !this.map || !Number.isFinite(lat) || !Number.isFinite(lng)) {\n return;\n }\n const currentZoom = typeof this.map.getZoom === 'function' ? this.map.getZoom() : null;\n const needsZoom = !currentZoom || currentZoom < targetZoom;\n this.animateMapPan(lat, lng, () => {\n if (needsZoom) {\n this.map.setZoom(targetZoom);\n }\n });\n }\n\n private async focusPointWithZoom(lat: number, lng: number) {\n const g = (window as any).google;\n if (!g || !this.map || !Number.isFinite(lat) || !Number.isFinite(lng)) {\n return;\n }\n\n await this.animateZoomTo(8, 800);\n await this.wait(500);\n await new Promise<void>((resolve) => {\n this.animateMapPan(lat, lng, resolve);\n });\n await this.wait(500);\n await this.animateZoomTo(18, 800);\n }\n\n private wait(ms: number) {\n return new Promise<void>((resolve) => {\n window.setTimeout(resolve, ms);\n });\n }\n\n private async animateZoomTo(targetZoom: number, duration = 600) {\n const g = (window as any).google;\n if (\n !g ||\n !this.map ||\n typeof this.map.getZoom !== 'function' ||\n typeof this.map.setZoom !== 'function'\n ) {\n return;\n }\n const startZoom = this.map.getZoom();\n if (!Number.isFinite(startZoom)) {\n this.map.setZoom(targetZoom);\n return;\n }\n const delta = targetZoom - startZoom;\n if (Math.abs(delta) < 0.01) {\n this.map.setZoom(targetZoom);\n return;\n }\n\n await new Promise<void>((resolve) => {\n const startTime = performance.now();\n const ease = (t: number) => 1 - Math.pow(1 - t, 3);\n\n const step = (now: number) => {\n const elapsed = now - startTime;\n const progress = Math.min(elapsed / duration, 1);\n const eased = ease(progress);\n const nextZoom = startZoom + delta * eased;\n this.map.setZoom(Math.round(nextZoom * 100) / 100);\n if (progress < 1) {\n requestAnimationFrame(step);\n } else {\n this.map.setZoom(targetZoom);\n resolve();\n }\n };\n\n requestAnimationFrame(step);\n });\n }\n\n private animateMapPan(targetLat: number, targetLng: number, onComplete?: () => void) {\n const g = (window as any).google;\n if (!g || !this.map) {\n return;\n }\n if (this.panAnimationFrame !== null) {\n cancelAnimationFrame(this.panAnimationFrame);\n this.panAnimationFrame = null;\n }\n const startCenter = this.map.getCenter();\n if (!startCenter) {\n this.map.setCenter({ lat: targetLat, lng: targetLng });\n onComplete?.();\n return;\n }\n const startLat = startCenter.lat();\n const startLng = startCenter.lng();\n const deltaLat = targetLat - startLat;\n const deltaLng = targetLng - startLng;\n const duration = 600;\n const startTime = performance.now();\n\n const ease = (t: number) => 1 - Math.pow(1 - t, 3);\n\n const step = (now: number) => {\n const elapsed = now - startTime;\n const progress = Math.min(elapsed / duration, 1);\n const eased = ease(progress);\n const nextLat = startLat + deltaLat * eased;\n const nextLng = startLng + deltaLng * eased;\n this.map.setCenter({ lat: nextLat, lng: nextLng });\n if (progress < 1) {\n this.panAnimationFrame = requestAnimationFrame(step);\n } else {\n this.panAnimationFrame = null;\n onComplete?.();\n }\n };\n\n this.panAnimationFrame = requestAnimationFrame(step);\n }\n\n private static ensureFontAwesome() {\n if (RsMap.fontAwesomeAttached) {\n return;\n }\n const existing = document.querySelector(`link[href=\"${FONT_AWESOME_LOCAL_PATH}\"]`);\n if (existing) {\n RsMap.fontAwesomeAttached = true;\n return;\n }\n const link = document.createElement('link');\n link.rel = 'stylesheet';\n link.href = FONT_AWESOME_LOCAL_PATH;\n link.crossOrigin = 'anonymous';\n link.referrerPolicy = 'no-referrer';\n link.addEventListener('load', () => {\n RsMap.fontAwesomeAttached = true;\n });\n document.head.appendChild(link);\n }\n\n private createIconElement(className: string) {\n const icon = document.createElement('i');\n icon.className = className;\n icon.setAttribute('aria-hidden', 'true');\n return icon;\n }\n\n private isWhatsappPhone(phone: MapPointPhone) {\n return Boolean(phone.whatsapp || phone.watshapp);\n }\n\n private getWhatsappLink(phone: string) {\n const digits = phone.replace(/\\D+/g, '');\n if (!digits) {\n return null;\n }\n return `https://wa.me/${digits}`;\n }\n}\n","export default \"<?xml version=\\\"1.0\\\" encoding=\\\"utf-8\\\"?>\\r\\n<!-- Svg Vector Icons : http://www.onlinewebfonts.com/icon -->\\r\\n<!DOCTYPE svg PUBLIC \\\"-//W3C//DTD SVG 1.1//EN\\\" \\\"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\\\">\\r\\n<svg version=\\\"1.1\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\" x=\\\"0px\\\" y=\\\"0px\\\" viewBox=\\\"0 0 1000 1000\\\" enable-background=\\\"new 0 0 1000 1000\\\" xml:space=\\\"preserve\\\" style=\\\"fill: #ffffff;\\\">\\r\\n<metadata> Svg Vector Icons : http://www.onlinewebfonts.com/icon </metadata>\\r\\n<g><path d=\\\"M965.1,437.2c-24.9-8.4-52.2-8.7-78.1-13.5c-41.3-8.3-45.5-55.5-61.6-87c-17.4-27.9-1.8-58.7,17.9-80.2c16.7-22.2,45.4-50.8,21.8-78.9c-22.1-17.9-37.3-48.8-67.4-53.1c-30.2,2.7-50,30-74.7,45.2c-33.8,26.5-71.6-3.8-105.1-14.8c-30.2-6.9-45.2-36.2-45.6-65.2c-5.5-27.6-1.1-66.3-34.8-76.6c-36.1-3.3-99-13.6-104.1,37.7c-7.8,33.8-0.3,78.4-36.1,97.9c-30.8,10.5-59.5,30.1-92.3,31.9c-38.2-5.7-59.8-46-96.2-55.8c-32.6-2.2-48.3,31.8-70.7,49.7c-23.6,20.9-7.6,51.7,9.9,70.3c18.9,24.9,47.2,54.4,28.4,87.8c-16.4,31.3-19.6,75.8-57,89.7c-29.6,7.7-62.6,3.9-89.8,18.5c-25.6,30-28.1,94.8,5.4,120.4c36.3,14.9,84.8,0.8,111.7,35.3c13.3,29.6,28.4,59.5,35.6,91.1c-0.7,43.9-48.4,67.1-58.2,107.8c9.5,38.8,52.5,81.3,96.4,74.3c33.2-16.3,57.3-56.9,98.4-51.3c30.2,11.8,62.2,21.7,89.5,39.2c29.7,30.2,13.4,78.3,33.4,112.9c29.9,25.7,94.7,28.3,120.1-5.4c14.8-36.3,0.9-84.9,35.2-111.8c29.5-13.3,59.5-28.4,91-35.6c42.3,0,64.7,46,103.3,56c32.5,2.2,48.3-31.8,70.7-49.7c24.5-22.1,6.1-53.2-11.6-72.5c-18.9-24-45-53.3-26.7-85.6c16.4-31.3,19.6-75.7,57-89.6c29.6-7.7,62.6-4,89.8-18.5C996.1,527.5,998.6,462.7,965.1,437.2z M577.6,593.4c-21.6,18-49.5,28-77.5,27.9c-79.1,3-142.8-83.6-116.4-158.4c20.6-76,121.1-111.4,184.6-64.9C634.9,439.4,640,545.6,577.6,593.4z\\\"/></g>\\r\\n</svg>\"","export default \"<?xml version=\\\"1.0\\\" encoding=\\\"utf-8\\\"?>\\r\\n<!-- Svg Vector Icons : http://www.onlinewebfonts.com/icon -->\\r\\n<!DOCTYPE svg PUBLIC \\\"-//W3C//DTD SVG 1.1//EN\\\" \\\"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\\\">\\r\\n<svg version=\\\"1.1\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\" x=\\\"0px\\\" y=\\\"0px\\\" viewBox=\\\"0 0 1000 1000\\\" enable-background=\\\"new 0 0 1000 1000\\\" xml:space=\\\"preserve\\\" style=\\\"fill: #ffffff;\\\">\\r\\n<metadata> Svg Vector Icons : http://www.onlinewebfonts.com/icon </metadata>\\r\\n<g><g><g><path d=\\\"M171.2,451.6c-89,0-161.2,72.2-161.2,161.2c0,89,72.2,161.2,161.2,161.2c65,0,120.9-38.6,146.4-94l38.3,29.5c0,0,281.5,2,296.9-6.7c0,0-34.9-95.4,9.4-135.7c4.7-4.2,10.5-9.1,17-14.2c-7.4,18.5-11.6,38.7-11.6,59.9c0,89,72.2,161.2,161.2,161.2c89,0,161.2-72.2,161.2-161.2c0-89.1-72.2-161.2-161.2-161.2c-1.5,0-2.9,0.2-4.3,0.2c11.6-7.6,19.1-12.3,19.1-12.3l-12.1-10.8c0,0,34.9-8,26.9-25.5c-8.1-17.5-92.7-122.3-92.7-122.3s15-32.2-16-55.1l-14.9,32.2c0,0-38-26.2-53.1-21.2c-15.1,5-37.8,7.6-44.8,18.6l-7,6.6c0,0-2,11.6,9.6,28.7c0,0,116.4,35.8,121.9,62c0,0,8.1,16.6-26.7,20.6l-7,9.1l-18.7,1l-33.7-77.1c0,0-32.3,8.6-48.9,21.7l2.5,13.1c0,0-135.5-92.2-263,44.3c0,0-94.2,27.2-160.2-56.4c0,0-1-27.2-160.2-22.2l11.1,11.6c0,0-11.1,1-15.6,8.1c-4.5,7,2.5,14.6,38.8,14.6c0,0,82.1,93.7,145.1,88.2l89.7,43.3l39.8,68c0,0,0.1,5.8,0.5,14.8c-9.2,2-19.6,4.2-30.6,6.5C302.9,497.9,242.5,451.6,171.2,451.6z M828.8,501c61.7,0,111.8,50.2,111.8,111.8c0,61.7-50.2,111.8-111.8,111.8c-61.7,0-111.8-50.2-111.8-111.8C717,551.2,767.1,501,828.8,501z M171.2,724.7c-61.6,0-111.8-50.2-111.8-111.8c0-61.7,50.2-111.8,111.8-111.8c47.4,0,87.9,29.7,104.1,71.4c-59.3,12.6-118.1,25.2-118.1,25.2l7.6,41.8l116.1-5.1C270.9,685.7,225.5,724.7,171.2,724.7z M364.8,630.6c3.3,11.2,7.6,20.1,13.2,23.9l-51.8,2c2.2-7.9,3.9-16.1,4.9-24.5L364.8,630.6z\\\"/></g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g></g>\\r\\n</svg>\"","const DEFAULT_LABEL = 'WhatsApp';\nconst DEFAULT_ARIA_LABEL = 'Contactar por WhatsApp';\nconst DEFAULT_MENU_LABEL = 'compra de motos';\nconst DEFAULT_CLOSED_MESSAGE = 'En este momento no es posible atender su solicitud. Le invitamos a contactarnos dentro de nuestro horario de atencion.';\nconst DEFAULT_WHATSAPP_COLOR = '#25d366';\nconst DEFAULT_BRAND_COLOR = '#000000';\nconst DEFAULT_OPTION_ICON = 'motorcycle';\nconst WHATSAPP_BASE_URL = 'https://wa.me/';\nconst OPTION_ICON_SVGS = import.meta.glob('../ws/*.svg', {\n eager: true,\n import: 'default',\n query: '?raw'\n}) as Record<string, string>;\nconst BRAND_COLORS: Record<string, string> = {\n gasgas: '#cb0d25',\n hqv: '#002550',\n ktm: '#ff6600',\n rs: '#000000',\n voge: '#000000'\n};\nconst BRAND_ALIASES: Record<string, string> = {\n gas: 'gasgas',\n gasgas: 'gasgas',\n husqvarna: 'hqv'\n};\nconst DAY_ALIASES: Record<string, number> = {\n '0': 0,\n '7': 0,\n dom: 0,\n domingo: 0,\n sun: 0,\n sunday: 0,\n '1': 1,\n lun: 1,\n lunes: 1,\n mon: 1,\n monday: 1,\n '2': 2,\n mar: 2,\n martes: 2,\n tue: 2,\n tuesday: 2,\n '3': 3,\n mie: 3,\n miercoles: 3,\n wed: 3,\n wednesday: 3,\n '4': 4,\n jue: 4,\n jueves: 4,\n thu: 4,\n thursday: 4,\n '5': 5,\n vie: 5,\n viernes: 5,\n fri: 5,\n friday: 5,\n '6': 6,\n sab: 6,\n sabado: 6,\n sat: 6,\n saturday: 6\n};\nconst WEEKDAY_SHORT_BY_ENGLISH: Record<string, number> = {\n sun: 0,\n mon: 1,\n tue: 2,\n wed: 3,\n thu: 4,\n fri: 5,\n sat: 6\n};\nconst OPTION_ICON_SVGS_BY_KEY = Object.fromEntries(\n Object.entries(OPTION_ICON_SVGS).map(([path, svg]) => {\n const name = path.split('/').pop()?.replace(/\\.svg$/i, '') ?? '';\n return [normalizeToken(name), normalizeIconSvg(svg)];\n })\n);\n\ninterface WhatsappMenuOption {\n label: string;\n telefono: string;\n mensaje: string;\n target: string;\n icon: string;\n}\n\nfunction normalizeIconSvg(svg: string) {\n return svg\n .replace(/<\\?xml[\\s\\S]*?\\?>\\s*/i, '')\n .replace(/<!DOCTYPE[\\s\\S]*?>\\s*/i, '')\n .replace(/<metadata>[\\s\\S]*?<\\/metadata>\\s*/i, '')\n .replace(/<svg\\b/i, '<svg class=\"menu-link-icon\" aria-hidden=\"true\" focusable=\"false\"')\n .replace(/style=\"fill:\\s*#ffffff;?\"/i, 'style=\"fill: currentColor;\"');\n}\n\nfunction normalizeToken(value: string) {\n return value\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '')\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '');\n}\n\nexport class RsWhatsapp extends HTMLElement {\n static tag = 'rs-whatsapp';\n\n private root: ShadowRoot;\n private buttonEl!: HTMLButtonElement;\n private menuEl!: HTMLElement;\n private generatedOptionsEl!: HTMLElement;\n private customMenuSlotEl!: HTMLSlotElement;\n private closedMessageEl!: HTMLElement;\n private closedMessageTextEl!: HTMLElement;\n private labelEl!: HTMLSpanElement;\n private childrenObserver?: MutationObserver;\n\n static get observedAttributes() {\n return [\n 'telefono',\n 'mensaje',\n 'label',\n 'menu-label',\n 'aria-label',\n 'position',\n 'show-label',\n 'target',\n 'marca',\n 'icon',\n 'horario',\n 'fuera-horario',\n 'mensaje-fuera-horario',\n 'time-zone'\n ];\n }\n\n constructor() {\n super();\n this.root = this.attachShadow({ mode: 'open' });\n this.root.innerHTML = `\n <style>\n :host {\n position: fixed;\n right: var(--rs-whatsapp-right, 24px);\n bottom: var(--rs-whatsapp-bottom, 24px);\n z-index: var(--rs-whatsapp-z-index, 9999);\n display: inline-block;\n --rs-whatsapp-brand-color: ${DEFAULT_WHATSAPP_COLOR};\n font-family: var(--rs-whatsapp-font-family, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif);\n }\n :host([position=\"bottom-left\"]) {\n right: auto;\n left: var(--rs-whatsapp-left, 24px);\n bottom: var(--rs-whatsapp-bottom, 24px);\n top: auto;\n }\n :host([position=\"top-right\"]) {\n right: var(--rs-whatsapp-right, 24px);\n left: auto;\n bottom: auto;\n top: var(--rs-whatsapp-top, 24px);\n }\n :host([position=\"top-left\"]) {\n right: auto;\n left: var(--rs-whatsapp-left, 24px);\n bottom: auto;\n top: var(--rs-whatsapp-top, 24px);\n }\n .button {\n box-sizing: border-box;\n border: 0;\n width: var(--rs-whatsapp-size, 60px);\n min-width: var(--rs-whatsapp-size, 60px);\n height: var(--rs-whatsapp-size, 60px);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 10px;\n border-radius: 999px;\n background: var(--rs-whatsapp-bg, ${DEFAULT_WHATSAPP_COLOR});\n color: var(--rs-whatsapp-color, #ffffff);\n box-shadow: var(--rs-whatsapp-shadow, 0 10px 24px rgb(0 0 0 / 22%));\n cursor: pointer;\n font: inherit;\n transition: transform 0.2s ease, box-shadow 0.2s ease, filter 0.2s ease;\n outline: none;\n }\n .button:hover,\n .button:focus-visible {\n transform: translateY(-2px);\n filter: brightness(1.03);\n box-shadow: var(--rs-whatsapp-shadow-hover, 0 14px 28px rgb(0 0 0 / 26%));\n }\n .button:active {\n transform: translateY(0);\n }\n .icon-stack {\n width: calc(var(--rs-whatsapp-size, 60px) * 0.52);\n height: calc(var(--rs-whatsapp-size, 60px) * 0.52);\n position: relative;\n flex: 0 0 auto;\n display: block;\n }\n .icon-stack svg {\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n display: block;\n transition: opacity 0.18s ease, transform 0.22s ease;\n }\n .whatsapp-icon {\n opacity: 1;\n transform: rotate(0deg) scale(1);\n }\n .close-icon {\n opacity: 0;\n transform: rotate(-90deg) scale(0.72);\n }\n :host([open]) .whatsapp-icon {\n opacity: 0;\n transform: rotate(90deg) scale(0.72);\n }\n :host([open]) .close-icon {\n opacity: 1;\n transform: rotate(0deg) scale(1);\n }\n .label {\n display: none;\n max-width: 180px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-size: 0.95rem;\n font-weight: 700;\n line-height: 1;\n }\n :host([show-label]) .button {\n width: auto;\n min-width: var(--rs-whatsapp-size, 60px);\n padding: 0 20px 0 16px;\n }\n :host([show-label]) .label {\n display: inline;\n }\n .menu {\n box-sizing: border-box;\n position: absolute;\n right: 0;\n bottom: calc(var(--rs-whatsapp-size, 60px) + 12px);\n width: min(var(--rs-whatsapp-menu-width, 280px), calc(100vw - 32px));\n padding: 8px;\n border: 1px solid var(--rs-whatsapp-menu-border, #e5e7eb);\n border-radius: var(--rs-whatsapp-menu-radius, 8px);\n background: var(--rs-whatsapp-menu-bg, #ffffff);\n color: var(--rs-whatsapp-menu-color, #111827);\n box-shadow: var(--rs-whatsapp-menu-shadow, 0 18px 38px rgb(0 0 0 / 18%));\n transform-origin: bottom right;\n }\n .menu[hidden] {\n display: none;\n }\n .menu-heading {\n padding: 10px 12px 12px;\n border-bottom: 1px solid var(--rs-whatsapp-menu-border, #e5e7eb);\n margin-bottom: 6px;\n text-align: center;\n }\n .menu-welcome,\n .menu-question {\n display: block;\n margin: 0;\n font-size: 0.92rem;\n font-weight: 600;\n line-height: 1.35;\n color: var(--rs-whatsapp-menu-muted, #4b5563);\n }\n .menu-brand {\n display: block;\n margin: 2px 0;\n font-size: 1.2rem;\n font-weight: 800;\n line-height: 1.2;\n color: var(--rs-whatsapp-menu-brand, #111827);\n }\n .menu-options {\n display: grid;\n gap: 2px;\n }\n .menu-options[hidden] {\n display: none;\n }\n .closed-message {\n margin: 0;\n padding: 14px 12px;\n border-radius: 6px;\n background: var(--rs-whatsapp-closed-bg, #f3f4f6);\n color: var(--rs-whatsapp-closed-color, #374151);\n font-size: 0.95rem;\n font-weight: 600;\n line-height: 1.35;\n text-align: center;\n white-space: pre-line;\n }\n .closed-message[hidden],\n slot[hidden] {\n display: none;\n }\n :host([position=\"bottom-left\"]) .menu {\n right: auto;\n left: 0;\n transform-origin: bottom left;\n }\n :host([position=\"top-right\"]) .menu {\n top: calc(var(--rs-whatsapp-size, 60px) + 12px);\n bottom: auto;\n transform-origin: top right;\n }\n :host([position=\"top-left\"]) .menu {\n top: calc(var(--rs-whatsapp-size, 60px) + 12px);\n right: auto;\n bottom: auto;\n left: 0;\n transform-origin: top left;\n }\n .menu-link,\n ::slotted(a),\n ::slotted(button) {\n box-sizing: border-box;\n width: 100%;\n min-height: 44px;\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 12px 14px;\n border: 0;\n border-radius: 6px;\n background: transparent;\n color: inherit;\n font: inherit;\n font-size: 0.95rem;\n font-weight: 700;\n line-height: 1.2;\n text-align: left;\n text-decoration: none;\n cursor: pointer;\n }\n .menu-link:hover,\n .menu-link:focus-visible,\n ::slotted(a:hover),\n ::slotted(a:focus-visible),\n ::slotted(button:hover),\n ::slotted(button:focus-visible) {\n background: var(--rs-whatsapp-menu-hover-bg, #f3f4f6);\n outline: none;\n }\n .menu-link[aria-disabled=\"true\"] {\n cursor: not-allowed;\n opacity: 0.62;\n }\n .menu-link-icon {\n width: 44px;\n height: 32px;\n flex: 0 0 auto;\n color: var(--rs-whatsapp-menu-icon-color, var(--rs-whatsapp-brand-color));\n }\n @media (max-width: 640px) {\n :host {\n right: var(--rs-whatsapp-mobile-right, 16px);\n bottom: var(--rs-whatsapp-mobile-bottom, 16px);\n }\n :host([position=\"bottom-left\"]) {\n left: var(--rs-whatsapp-mobile-left, 16px);\n }\n :host([position=\"top-right\"]) {\n top: var(--rs-whatsapp-mobile-top, 16px);\n }\n :host([position=\"top-left\"]) {\n left: var(--rs-whatsapp-mobile-left, 16px);\n top: var(--rs-whatsapp-mobile-top, 16px);\n }\n :host([show-label]) .label {\n max-width: 120px;\n }\n }\n @media (prefers-reduced-motion: reduce) {\n .button,\n .icon-stack svg {\n transition: none;\n }\n }\n </style>\n <div class=\"menu\" role=\"dialog\" aria-labelledby=\"rs-whatsapp-menu-title\" hidden>\n <div class=\"menu-heading\" id=\"rs-whatsapp-menu-title\">\n <span class=\"menu-welcome\">Bienvenido a</span>\n <span class=\"menu-brand\">RS-SHOP</span>\n <span class=\"menu-question\">¿En que te podemos ayudar?</span>\n </div>\n <div class=\"closed-message\" data-closed-message hidden>\n <slot name=\"fuera-horario\">\n <span data-closed-message-text></span>\n </slot>\n </div>\n <div class=\"menu-options\" data-generated-options></div>\n <slot name=\"menu\"></slot>\n </div>\n <button class=\"button\" type=\"button\" aria-haspopup=\"dialog\" aria-expanded=\"false\">\n <span class=\"icon-stack\" aria-hidden=\"true\">\n <svg class=\"whatsapp-icon\" viewBox=\"0 0 448 512\" focusable=\"false\">\n <path fill=\"currentColor\" d=\"M380.9 97.1c-41.9-42-97.7-65.1-157-65.1-122.4 0-222 99.6-222 222 0 39.1 10.2 77.3 29.6 111L0 480l117.7-30.9c32.4 17.7 68.9 27 106.1 27h.1c122.3 0 224.1-99.6 224.1-222 0-59.3-25.2-115-67.1-157zm-157 341.6c-33.2 0-65.7-8.9-94-25.7l-6.7-4-69.8 18.3 18.6-68.1-4.4-7c-18.5-29.4-28.2-63.3-28.2-98.2 0-101.7 82.8-184.5 184.6-184.5 49.3 0 95.6 19.2 130.4 54.1s56.2 81.2 56.1 130.5c0 101.8-84.9 184.6-186.6 184.6zM325.1 300.5c-5.5-2.8-32.8-16.2-37.9-18-5.1-1.9-8.8-2.8-12.5 2.8s-14.3 18-17.6 21.8c-3.2 3.7-6.5 4.2-12 1.4-32.6-16.3-54-29.1-75.5-66-5.7-9.8 5.7-9.1 16.3-30.3 1.8-3.7.9-6.9-.5-9.7s-12.5-30.1-17.1-41.2c-4.5-10.8-9.1-9.3-12.5-9.5-3.2-.2-6.9-.2-10.6-.2s-9.7 1.4-14.8 6.9c-5.1 5.6-19.4 19-19.4 46.3s19.9 53.7 22.6 57.4c2.8 3.7 39.1 59.7 94.8 83.8 35.2 15.2 49 16.5 66.6 13.9 10.7-1.6 32.8-13.4 37.4-26.4s4.6-24.1 3.2-26.4c-1.3-2.5-5-3.9-10.5-6.6z\" />\n </svg>\n <svg class=\"close-icon\" viewBox=\"0 0 24 24\" focusable=\"false\">\n <path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2.6\" d=\"M6 6l12 12M18 6L6 18\" />\n </svg>\n </span>\n <span class=\"label\"></span>\n </button>\n `;\n }\n\n connectedCallback() {\n this.buttonEl = this.root.querySelector<HTMLButtonElement>('button')!;\n this.menuEl = this.root.querySelector<HTMLElement>('.menu')!;\n this.generatedOptionsEl = this.root.querySelector<HTMLElement>('[data-generated-options]')!;\n this.customMenuSlotEl = this.root.querySelector<HTMLSlotElement>('slot[name=\"menu\"]')!;\n this.closedMessageEl = this.root.querySelector<HTMLElement>('[data-closed-message]')!;\n this.closedMessageTextEl = this.root.querySelector<HTMLElement>('[data-closed-message-text]')!;\n this.labelEl = this.root.querySelector<HTMLSpanElement>('.label')!;\n this.buttonEl.addEventListener('click', this.handleButtonClick);\n this.menuEl.addEventListener('click', this.handleMenuClick);\n this.customMenuSlotEl.addEventListener('slotchange', this.handleCustomMenuSlotChange);\n document.addEventListener('click', this.handleDocumentClick);\n document.addEventListener('keydown', this.handleDocumentKeydown);\n this.childrenObserver = new MutationObserver(this.handleChildrenMutation);\n this.childrenObserver.observe(this, {\n childList: true,\n subtree: true,\n characterData: true,\n attributes: true,\n attributeFilter: ['label', 'telefono', 'mensaje', 'target', 'icon', 'dias', 'desde', 'hasta']\n });\n this.syncAttributesToState();\n }\n\n disconnectedCallback() {\n this.buttonEl?.removeEventListener('click', this.handleButtonClick);\n this.menuEl?.removeEventListener('click', this.handleMenuClick);\n this.customMenuSlotEl?.removeEventListener('slotchange', this.handleCustomMenuSlotChange);\n document.removeEventListener('click', this.handleDocumentClick);\n document.removeEventListener('keydown', this.handleDocumentKeydown);\n this.childrenObserver?.disconnect();\n }\n\n attributeChangedCallback() {\n if (this.isConnected) {\n this.syncAttributesToState();\n }\n }\n\n private syncAttributesToState() {\n const label = (this.getAttribute('label') ?? '').trim() || DEFAULT_LABEL;\n const menuLabel = (this.getAttribute('menu-label') ?? '').trim() || DEFAULT_MENU_LABEL;\n const ariaLabel = (this.getAttribute('aria-label') ?? '').trim() || DEFAULT_ARIA_LABEL;\n const target = (this.getAttribute('target') ?? '_blank').trim() || '_blank';\n const icon = (this.getAttribute('icon') ?? DEFAULT_OPTION_ICON).trim() || DEFAULT_OPTION_ICON;\n const isClosed = this.isOutsideBusinessHours();\n\n this.labelEl.textContent = label;\n this.buttonEl.setAttribute('aria-label', ariaLabel);\n this.buttonEl.setAttribute('title', ariaLabel);\n this.syncBrandVariant();\n\n this.closedMessageTextEl.textContent = this.getClosedMessage();\n this.closedMessageEl.hidden = !isClosed;\n this.customMenuSlotEl.hidden = isClosed;\n\n if (isClosed) {\n this.generatedOptionsEl.hidden = true;\n this.generatedOptionsEl.replaceChildren();\n return;\n }\n\n this.renderMenuOptions(menuLabel, target, icon);\n }\n\n private buildWhatsappUrl(telefonoValue: string | null, mensajeValue: string | null) {\n const telefono = this.sanitizePhone(telefonoValue);\n\n if (!telefono) {\n return '';\n }\n\n const mensaje = (mensajeValue ?? '').trim();\n const query = mensaje ? `?text=${encodeURIComponent(mensaje)}` : '';\n\n return `${WHATSAPP_BASE_URL}${telefono}${query}`;\n }\n\n private sanitizePhone(value: string | null) {\n return (value ?? '').replace(/[^\\d]/g, '');\n }\n\n private syncBrandVariant() {\n const marca = (this.getAttribute('marca') ?? '').trim();\n\n if (!marca) {\n this.style.setProperty('--rs-whatsapp-brand-color', DEFAULT_WHATSAPP_COLOR);\n return;\n }\n\n const brandKey = this.normalizeBrandKey(marca);\n const color = BRAND_COLORS[brandKey] ?? DEFAULT_BRAND_COLOR;\n this.style.setProperty('--rs-whatsapp-brand-color', color);\n }\n\n private normalizeBrandKey(value: string) {\n const normalized = normalizeToken(value);\n return BRAND_ALIASES[normalized] ?? normalized;\n }\n\n private renderMenuOptions(fallbackLabel: string, fallbackTarget: string, fallbackIcon: string) {\n const hasCustomMenu = this.customMenuSlotEl.assignedElements({ flatten: true }).length > 0;\n\n if (hasCustomMenu) {\n this.generatedOptionsEl.hidden = true;\n this.generatedOptionsEl.replaceChildren();\n return;\n }\n\n const options = this.getWhatsappOptions(fallbackLabel, fallbackTarget, fallbackIcon).filter((option) => {\n return this.sanitizePhone(option.telefono);\n });\n const links = options.map((option) => this.createMenuLink(option));\n\n this.generatedOptionsEl.replaceChildren(...links);\n this.generatedOptionsEl.hidden = false;\n }\n\n private getWhatsappOptions(fallbackLabel: string, fallbackTarget: string, fallbackIcon: string): WhatsappMenuOption[] {\n const optionElements = Array.from(this.querySelectorAll<RsWhatsappOption>(RsWhatsappOption.tag));\n\n if (optionElements.length) {\n return optionElements.map((optionEl) => ({\n label: (optionEl.getAttribute('label') ?? optionEl.textContent ?? '').trim() || fallbackLabel,\n telefono: (optionEl.getAttribute('telefono') ?? '').trim(),\n mensaje: (optionEl.getAttribute('mensaje') ?? '').trim(),\n target: (optionEl.getAttribute('target') ?? fallbackTarget).trim() || fallbackTarget,\n icon: (optionEl.getAttribute('icon') ?? fallbackIcon).trim() || fallbackIcon\n }));\n }\n\n return [\n {\n label: fallbackLabel,\n telefono: (this.getAttribute('telefono') ?? '').trim(),\n mensaje: (this.getAttribute('mensaje') ?? '').trim(),\n target: fallbackTarget,\n icon: fallbackIcon\n }\n ];\n }\n\n private createMenuLink(option: WhatsappMenuOption) {\n const linkEl = document.createElement('a');\n const labelEl = document.createElement('span');\n const href = this.buildWhatsappUrl(option.telefono, option.mensaje);\n\n linkEl.className = 'menu-link';\n linkEl.rel = 'noopener noreferrer';\n linkEl.target = option.target;\n labelEl.className = 'menu-label';\n labelEl.textContent = option.label;\n const iconEl = this.createOptionIcon(option.icon);\n\n if (iconEl) {\n linkEl.append(iconEl);\n }\n\n linkEl.append(labelEl);\n\n if (href) {\n linkEl.href = href;\n linkEl.tabIndex = 0;\n return linkEl;\n }\n\n linkEl.setAttribute('aria-disabled', 'true');\n linkEl.tabIndex = -1;\n return linkEl;\n }\n\n private createOptionIcon(icon: string) {\n const iconKey = normalizeToken(icon);\n const iconSvg = iconKey === 'none' ? '' : OPTION_ICON_SVGS_BY_KEY[iconKey || DEFAULT_OPTION_ICON];\n\n if (!iconSvg) {\n return null;\n }\n\n const template = document.createElement('template');\n template.innerHTML = iconSvg;\n return template.content.firstElementChild?.cloneNode(true) ?? document.createElement('span');\n }\n\n private getClosedMessage() {\n const message = (this.getAttribute('mensaje-fuera-horario') ?? '').trim() || DEFAULT_CLOSED_MESSAGE;\n const scheduleSummary = this.getScheduleSummary();\n\n return scheduleSummary ? `${message}\\nHorario de atencion:\\n${scheduleSummary}` : message;\n }\n\n private isOutsideBusinessHours() {\n const manualClosedValue = this.getAttribute('fuera-horario');\n\n if (manualClosedValue !== null) {\n const normalized = normalizeToken(manualClosedValue);\n return normalized !== 'false' && normalized !== '0' && normalized !== 'no';\n }\n\n const schedule = this.getScheduleSegments().join(';');\n\n if (!schedule) {\n return false;\n }\n\n return !this.isWithinBusinessHours(schedule);\n }\n\n private getScheduleSegments() {\n const scheduleElements = Array.from(this.querySelectorAll<RsWhatsappSchedule>(RsWhatsappSchedule.tag));\n\n if (scheduleElements.length) {\n return scheduleElements\n .map((scheduleEl) => {\n const days = (scheduleEl.getAttribute('dias') ?? '').trim();\n const start = (scheduleEl.getAttribute('desde') ?? '').trim();\n const end = (scheduleEl.getAttribute('hasta') ?? '').trim();\n\n if (!days || !start || !end) {\n return '';\n }\n\n return `${days} ${start}-${end}`;\n })\n .filter(Boolean);\n }\n\n return (this.getAttribute('horario') ?? '')\n .split(';')\n .map((segment) => segment.trim())\n .filter(Boolean);\n }\n\n private getScheduleSummary() {\n const scheduleElements = Array.from(this.querySelectorAll<RsWhatsappSchedule>(RsWhatsappSchedule.tag));\n\n if (scheduleElements.length) {\n return scheduleElements\n .map((scheduleEl) => {\n const days = (scheduleEl.getAttribute('dias') ?? '').trim();\n const start = (scheduleEl.getAttribute('desde') ?? '').trim();\n const end = (scheduleEl.getAttribute('hasta') ?? '').trim();\n\n if (!days || !start || !end) {\n return '';\n }\n\n return `${days} ${start}-${end}`;\n })\n .filter(Boolean)\n .join('\\n');\n }\n\n return (this.getAttribute('horario') ?? '')\n .split(';')\n .map((segment) => segment.trim())\n .filter(Boolean)\n .join('\\n');\n }\n\n private isWithinBusinessHours(schedule: string) {\n const currentTime = this.getCurrentTimeParts();\n\n return schedule.split(';').some((segment) => {\n return this.isScheduleSegmentActive(segment, currentTime.day, currentTime.minutes);\n });\n }\n\n private getCurrentTimeParts() {\n const timeZone = (this.getAttribute('time-zone') ?? '').trim();\n\n if (!timeZone) {\n const now = new Date();\n return {\n day: now.getDay(),\n minutes: now.getHours() * 60 + now.getMinutes()\n };\n }\n\n try {\n const now = new Date();\n const weekday = new Intl.DateTimeFormat('en-US', {\n timeZone,\n weekday: 'short'\n })\n .format(now)\n .toLowerCase();\n const timeParts = new Intl.DateTimeFormat('en-US', {\n timeZone,\n hour12: false,\n hour: '2-digit',\n minute: '2-digit'\n }).formatToParts(now);\n const hour = Number(timeParts.find((part) => part.type === 'hour')?.value ?? 0) % 24;\n const minute = Number(timeParts.find((part) => part.type === 'minute')?.value ?? 0);\n\n return {\n day: WEEKDAY_SHORT_BY_ENGLISH[weekday] ?? now.getDay(),\n minutes: hour * 60 + minute\n };\n } catch {\n const now = new Date();\n return {\n day: now.getDay(),\n minutes: now.getHours() * 60 + now.getMinutes()\n };\n }\n }\n\n private isScheduleSegmentActive(segment: string, currentDay: number, currentMinutes: number) {\n const match = segment\n .trim()\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '')\n .toLowerCase()\n .match(/^(.+?)\\s+(\\d{1,2}:\\d{2})\\s*-\\s*(\\d{1,2}:\\d{2})$/);\n\n if (!match) {\n return false;\n }\n\n const days = this.parseScheduleDays(match[1]);\n const startMinutes = this.parseScheduleTime(match[2]);\n const endMinutes = this.parseScheduleTime(match[3]);\n\n if (!days.includes(currentDay) || startMinutes === null || endMinutes === null) {\n return false;\n }\n\n if (startMinutes <= endMinutes) {\n return currentMinutes >= startMinutes && currentMinutes <= endMinutes;\n }\n\n return currentMinutes >= startMinutes || currentMinutes <= endMinutes;\n }\n\n private parseScheduleDays(value: string) {\n const normalized = value\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '')\n .toLowerCase()\n .replace(/\\s+/g, '');\n\n if (normalized === '*' || normalized === 'todos' || normalized === 'all') {\n return [0, 1, 2, 3, 4, 5, 6];\n }\n\n return normalized.split(',').flatMap((part) => {\n const [startToken, endToken] = part.split('-');\n const startDay = this.parseScheduleDay(startToken);\n const endDay = endToken ? this.parseScheduleDay(endToken) : startDay;\n\n if (startDay === null || endDay === null) {\n return [];\n }\n\n if (startDay === endDay) {\n return [startDay];\n }\n\n const days: number[] = [];\n let currentDay = startDay;\n\n while (true) {\n days.push(currentDay);\n\n if (currentDay === endDay) {\n return days;\n }\n\n currentDay = (currentDay + 1) % 7;\n }\n });\n }\n\n private parseScheduleDay(value: string | undefined) {\n if (!value) {\n return null;\n }\n\n const key = normalizeToken(value);\n return DAY_ALIASES[key] ?? null;\n }\n\n private parseScheduleTime(value: string) {\n const [hourValue, minuteValue] = value.split(':');\n const hour = Number(hourValue);\n const minute = Number(minuteValue);\n\n if (!Number.isInteger(hour) || !Number.isInteger(minute) || hour < 0 || hour > 23 || minute < 0 || minute > 59) {\n return null;\n }\n\n return hour * 60 + minute;\n }\n\n private setMenuOpen(isOpen: boolean) {\n this.menuEl.hidden = !isOpen;\n this.buttonEl.setAttribute('aria-expanded', String(isOpen));\n this.toggleAttribute('open', isOpen);\n }\n\n private handleButtonClick = () => {\n if (this.menuEl.hidden) {\n this.syncAttributesToState();\n }\n\n this.setMenuOpen(this.menuEl.hidden);\n };\n\n private handleMenuClick = (event: MouseEvent) => {\n const path = event.composedPath();\n const disabledLink = path.find((node) => {\n return node instanceof HTMLAnchorElement && node.getAttribute('aria-disabled') === 'true';\n });\n\n if (disabledLink) {\n event.preventDefault();\n return;\n }\n\n const interactiveElement = path.find((node) => {\n return node instanceof HTMLAnchorElement || node instanceof HTMLButtonElement;\n });\n\n if (interactiveElement) {\n this.setMenuOpen(false);\n }\n };\n\n private handleCustomMenuSlotChange = () => {\n this.syncAttributesToState();\n };\n\n private handleChildrenMutation = () => {\n this.syncAttributesToState();\n };\n\n private handleDocumentClick = (event: MouseEvent) => {\n if (this.menuEl.hidden || event.composedPath().includes(this)) {\n return;\n }\n\n this.setMenuOpen(false);\n };\n\n private handleDocumentKeydown = (event: KeyboardEvent) => {\n if (this.menuEl.hidden || event.key !== 'Escape') {\n return;\n }\n\n this.setMenuOpen(false);\n this.buttonEl.focus();\n };\n}\n\nexport class RsWhatsappOption extends HTMLElement {\n static tag = 'rs-whatsapp-option';\n}\n\nexport class RsWhatsappSchedule extends HTMLElement {\n static tag = 'rs-whatsapp-schedule';\n}\n","import { safeDefine } from './utils/define';\nimport { RsMap } from './components/rs-map';\nimport { RsWhatsapp, RsWhatsappOption, RsWhatsappSchedule } from './components/rs-whatsapp';\n\n\n// En dev, registramos directamente para probar en el navegador\nsafeDefine(RsMap.tag, RsMap);\nsafeDefine(RsWhatsappOption.tag, RsWhatsappOption);\nsafeDefine(RsWhatsappSchedule.tag, RsWhatsappSchedule);\nsafeDefine(RsWhatsapp.tag, RsWhatsapp);\n\nexport { RsMap, RsWhatsapp, RsWhatsappOption, RsWhatsappSchedule, safeDefine };\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'rs-map': RsMap;\n 'rs-whatsapp': RsWhatsapp;\n 'rs-whatsapp-option': RsWhatsappOption;\n 'rs-whatsapp-schedule': RsWhatsappSchedule;\n }\n}\n"],"names":["safeDefine","tag","Ctor","__vite_glob_1_0","__vite_glob_1_1","__vite_glob_1_2","__vite_glob_1_3","__vite_glob_1_4","__vite_glob_1_5","__vite_glob_1_6","__vite_glob_1_7","__vite_glob_1_8","__vite_glob_1_9","LOCAL_POINTS_LOADERS","m","LOCAL_MARKER_ICON_URLS","DEFAULT_BRAND_COLOR","FONT_AWESOME_LOCAL_PATH","DEFAULT_POINTS_API_URL","BRAND_COLORS","BRAND_ALIASES","TYPE_CODES","ZONE_ORDER","ZONE_LABELS","TYPE_LABELS","CONTINENTAL_CHILE_BOUNDS","DEFAULT_POINTS_CACHE_TTL_MS","POINTS_CACHE_DB_NAME","POINTS_CACHE_STORE_NAME","REGION_ZONE_MAP","_RsMap","__publicField","_a","event","zone","pos","latitude","longitude","nearest","nearestPosition","btn","_b","_c","name","_oldValue","newValue","resolve","reject","existingScript","script","params","error","g","initialCenter","firstPoint","point","position","value","normalized","days","label","normalizedCode","color","numeric","controller","marcaRequestValue","hasQuery","needsAmp","separator","requestUrl","cacheKey","cachedPayload","hasFreshCache","localFallbackPayload","response","payload","typedPayload","points","unmappablePoints","marca","tipoCode","path","existingRequest","loader","request","parsedPayload","dbEntry","raw","parsed","entry","db","result","grouped","fragment","zoneKey","section","header","title","empty","list","card","coordinateWarning","addressBlock","address","comuna","provincia","regionLine","mapPositionElement","mapActions","focusButton","icon","warning","text","details","hasDetails","actions","mapLinkElement","siteLink","emailLink","contactSection","contactTitle","phoneList","a","b","phone","item","iconWrapper","hasWhatsapp","whatsappIcon","content","numberEl","link","extra","mapWrapper","toggle","toggleIcon","toggleText","isHidden","url","iconClass","normalizedRegion","input","key","localIconUrl","pointTipoCode","fileName","lat","lng","rawCoordinates","marker","validPoints","bounds","iconUrl","markerPosition","cover","locationSection","strong","extraSection","line","phoneNumber","whatsappLink","href","external","_zone","isActive","baseLabel","bestDistance","distance","lat1","lon1","lat2","lon2","toRad","deg","dLat","dLon","pointId","el","state","targetZoom","currentZoom","needsZoom","ms","duration","startZoom","delta","startTime","ease","t","step","now","elapsed","progress","eased","nextZoom","targetLat","targetLng","onComplete","startCenter","startLat","startLng","deltaLat","deltaLng","nextLat","nextLng","className","digits","RsMap","__vite_glob_0_0","__vite_glob_0_1","DEFAULT_LABEL","DEFAULT_ARIA_LABEL","DEFAULT_MENU_LABEL","DEFAULT_CLOSED_MESSAGE","DEFAULT_WHATSAPP_COLOR","DEFAULT_OPTION_ICON","WHATSAPP_BASE_URL","OPTION_ICON_SVGS","DAY_ALIASES","WEEKDAY_SHORT_BY_ENGLISH","OPTION_ICON_SVGS_BY_KEY","svg","normalizeToken","normalizeIconSvg","RsWhatsapp","node","_d","_e","menuLabel","ariaLabel","target","isClosed","telefonoValue","mensajeValue","telefono","mensaje","query","brandKey","fallbackLabel","fallbackTarget","fallbackIcon","links","option","optionElements","RsWhatsappOption","optionEl","_f","linkEl","labelEl","iconEl","iconKey","iconSvg","template","message","scheduleSummary","manualClosedValue","schedule","scheduleElements","RsWhatsappSchedule","scheduleEl","start","end","segment","currentTime","timeZone","weekday","timeParts","hour","part","minute","currentDay","currentMinutes","match","startMinutes","endMinutes","startToken","endToken","startDay","endDay","hourValue","minuteValue","isOpen"],"mappings":"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A;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAulB9C;AAAA,EAhnBA,WAAW,qBAAqB;AAC9B,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,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"}
|
|
1
|
+
{"version":3,"file":"rs-components.es.js","sources":["../src/utils/define.ts","../src/pin/gasgas.png?url","../src/pin/gasgas_distribuidor.png?url","../src/pin/hqv.png?url","../src/pin/hqv_distribuidor.png?url","../src/pin/ktm.png?url","../src/pin/ktm_distribuidor.png?url","../src/pin/rs.png?url","../src/pin/rs_distribuidor.png?url","../src/pin/voge.png?url","../src/pin/voge_distribuidor.png?url","../src/components/rs-map.ts","../src/ws/gear.svg?raw","../src/ws/motorcycle.svg?raw","../src/components/rs-whatsapp.ts","../src/index.ts"],"sourcesContent":["// Registro seguro para evitar DOMException por doble definición\r\nexport function safeDefine(tag: string, Ctor: CustomElementConstructor) {\r\n if (!customElements.get(tag)) customElements.define(tag, Ctor);\r\n}\r\n","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABXFJREFUeNrUW0tsE0cY/u0aBC3YRtCSQBCO6COkUkuqAlEuJCggwQEw5EClKsR9obZAidQeWoRIyoGqqtQEEIgL4SWBxCuckJIUzAUoqIp7SVukCkuJUah4ODYvJelj/vHs4KSJ45mdmV3/0mjt9fze+b/5/sfM7nrAkFz1vx4kh0WkVZMWYJ+z5Qo7RkmLVaVuJU2My6PZ6BA5rCNt0xgGTyQIxFHS2nWC4dFo+C7SGhT8HRrfTlqjDiA8GmiOhm/XgCsa30pAaHIlAMR4pPh50kKa3TZGWpgAEVfxZ15FxiPVLxswHlgs6WaAO88AZnwbmBd0iRrChJhjADhovDIQPDZ9vhucFwShQjYmeCWNDzKfd4MEWfA1GgTb2IXdIovIpPxoxAXIhaplZ39q+TyY/+VWmFwyJ2+d/sPH4K9THfl2LxV1BZ+EHbtkjH9l40pYcGifsF6ovEwEAGRmjTYGyM7+pNkBqPjlJ3hh+nT6faDzEtw7cx6GBtJ56T+8eE3kckIsEGXAFzKzP2vtCm58/94DcHtnq854gAyNKGcAi/wPZUZUfuYgBFYsh7/TabhR8i49V3b4e5ixYe2Eutk6+aZFwoAZOhhQLWM80h+NR0l1XOLB0DL+6W9/wD+p1MjU5PfD1IVvjNARSYvoqgSEqGoAlsnS35K7pzPpuui99c9XNpVr/qfzautODsCDji6Zy1az/QSlAEgtPgKVS+hxqO8OD2Yz16/j9H6r4wT9PJxKQ0/dp5kprF3OfxfIANnytg4XkALAvzJjTLLrOZW9gUxAxMD40tLF9HP8qx2Z/lVvwiRWJ0jQn2dPHQBIVX5jBbBcQW3OR5v4Z0n6C02WDzQKBrtsf5+w/8IyHjDRZSTpLyQ+3Rco2vaZsA76/q2PtxhZRGgF4GlPL/y5eSsUfVCft84TkhYTh45QXRMiUgj9CwUkpA7wqGZAcrxAOJav9+0/Qo8lWxroEctfjPAzV9XyPsMDKeg/fo734SvAk+dg+H4qp651PsdYlbtAbLxqsPTbb2Ba5WJ4dP0m+PyZFOcjRrzWsoenOTQq1PQ1TCGru2c9v3O6L9izg6bKbN37F7vostmqFpNXb0Dxh/U0QD7++SY9N0iC5ARjVQ5APFep27f7Oyje/jnN7RjE5m5uoMZjqYtV3azVtbTYsYy3gEFAHpy9QIsfK//jTKPxlm6wagkMJu5w41Enj8lSviP061gnp71TTo+zI/XUODQe5eWG90fU+fi7NcPZNT8ChsYPJhJcFzOHpYvnsHJ8kZXG3H1SaeGx2g2C426CFn9SB1PmzeV+bUnvD238d+4aAT89PutNwL0LnXStMFoX+2AMGbo7wP8b+2f3w9iBv9vdExDdELkNZm5+2BG8s1yhwwVQ2gsgAx4V6ezV+ecOSbs2ANgdmJibjRfdFZa5L9DqYgCExyZ1a8ylwTBOZr9UVEn2zpAbY0Gz1sXQKAYEWU0QKuTZl2YAe1an2UWzH5FVtPt8QDdI7hUqlCiZkBpZZbuPyDS6YPZtjcEWAOzmg5PVYYvdR2S8imYg6YDxSuKQbQBY5eVEQIyoeHBS5XOCl0Hy/qHpwKfaBUwHxKSdtKcNABaMTLhCs6qnRJW6gKHaQBn1dbiAbldQSn1tALDaoMXt1NfJAGtlFldMfR2g6gGA5eeIQuqHdUVUXQxQ6QqRgntlRmFWwD2+sM7xeUG/RGxQP6J7cNoBYAWSTGoMm3h1zgQDgEXwqGDKi5oYmxEArBnNc9kcVf1mmCsAYHQO5+H3YYOTYpQBVmrMtWCqMfXKrCMAMBCaxokHjXa3twoCgKx4EB+V71ucGIgjAIyKB3ET+d6Vgu8dqnoDVFb+E2AAEkYQxr2UiokAAAAASUVORK5CYII=\"","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABG5JREFUeNrkW01ME0EUfm0UDxgoqOGgCa1EPWBiBZSDBwsoZxuNeNNe0JuSmBi8ABeBk3BS8EC44V9s4s2D1sQLEW09ikFqwsXESDV4QRN8L51Kf2bbnd2Z2dn4kkmbne523jff996b2d0AaLKtAQjhRxRbDFsj+15sr9lnClsm8BByOsYVUOx0GD/OYbvMcbiWERDz2JIqwQgodHwE2xUJlyPnk9iGVAARUEBzcvyGAlzJ+WkEYdRIANB5ovgzbGHFss1giyMQWRkXC0pynqj+SoPzwGJJmgHuPQOY83Og30gSPciEjGcAeOi8NBACLjWfBu+NQDjuNCYEHTofYpo3wUIs+GoNgnPsj02xKE7KXS0SwD+KGTT75RYRlYITBoyAuTanlAGGz74jFogy4DqYbyNKGMAi/7rIxb/8wBN+S4x0e+2lRWRAk91r7hD4/5jogDteAnzflON8F7r0tt9eWiSpIggp2QCcFhnwz18Aw4f5fSvYd3+18vi1CEBbPf+cMy1CeMXYfoJUACwXH7exEH1XtlI/uw/gZnteBoNF9WInCqmprvIazXjs3sn896cYwmbLwliknkngD8ClxUppPT4B0LAN3jEVEohazfT4x8rjk0fzjpDzBRkMHAC4g8f3PK/8/cX9285fWKzsv3UoD6aVrBpKmWN7VSqSBbiV3ywn4bTtBni0lnekMNjhIwALp9DBNb4DVw9aO18rpvS32GerGwZwbXy58tj6ZikrnnQDnA9XB2xlo7rzfW+s+0hunmyI0IzxZsQq8pNcXnzl91Vzvma2CXkEwMSyvd9RHCD9TnyyyAob7ljY2+IBAJlvAEucsogCHY8RROGZVXv5XqSP5ONGyCIAlCS6mc/8YLTQzR8ozXKtoohiRZcFnalGmGy3rf+cCgAyxVrmFTKD4fxskCPNdWIzUQiUSzl+H9UI7zl9naHqY5WZBf7F74ZdAOk+61q9tREH22t/HdC0M38O2YMO6z4CuLwijGoE4EPxWbUWJjToVskLHip2ovWCY5UogRT4x1LSAWBbz1kfOJ9RuSGS9AEA8yrrgHkfAJBUBgCTQcZk53XsCk8bDIDw2BzdGtsagFXQcydYxLI4+xFdawETY8GYk5OcMoDqr7RBLHA0+44ZwJ7VGTNo9hNOT3T7fACxIOqx8ymckB5PNkTQhgyYfVdjcAUAu/ngZXU45fYRmaAk/eU8cF5KHHINgIcBMSHjwUmZzwnSbfOYHwKfbAnoDog5N2lPGQAsGOmQwpisp0SlSkBTbSCN+iokoFoKUqmvDABWG0yZTn1lElC0WJJOfZUSKNQGCYnUj6uKqEFVF5YohYTvXpmRmBVojy+ucnxBUG8JF9RPqB6ccgBYgeQkNcZ1vDqngwEEAsWClGDKS2kZm66lG0uNtJtc64EWZSnPMwYUpca4Dd3HQaMFdf4Zo3W1BVOPrldmPQGAgTBqEQ+G3G5v+QKAQoSH0lvtSRYo4b8AoCweZHXkeyON3juU9QaoU/srwAB77Uga7jO8tAAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3hJREFUeNrkWv91sjAUTXv6v+0EuoFsIJ2gdgM2KE4gTsBxAusE6ATRCdAJaCdAJ+DLTX2U9tNWKCSB3HPeIUgE7s19+QHcMHW4F+GIcEX0TuUitqftRsROxIF1AAMRvohYRFYyuAjvJFwriS8qkD4X6elcrRACNxnWRPycEIHJ5JHTSUPkixGfHGYUvFMLZYoiPdOJaiWfaQgjRNBF3ggRHM3kiyIMdPT2qSECUMeoFJFB5ClCVeRdA8lTKEkFbrAA3ObWV+KCqAUCLMoQuqnQ85cbLu4/1jCHw8fq1nEc9vb2JrfngGMI13VlnMNms5FxAbjQQxOtP67SIlEUZYvFQpYFoQzAfhzH2SWMx+PsJwRB8Nt13SYEKLXKA0kiikA5SRJJLk3TzPO8//4ThmFOEMB+xTQItPb+IEtAq4s0kKQBYX0ZJMJgMJB1EHALOYDqX3LIL/cQNSFAei15EAE5AATpdzgA5LFPIvi+/4Us5zw/FwlDQalRrKNyZngVedgdhBAgXHQEEaU+gVoa5KhPOJcaFHDSlQJkygUAKSJebE2y9Xfgd+Q6iEMoOAVbcsUfO8GsiWHw4knFzTMhwOfj3e2W9Xq9fKjDsPb+/p4f7/f78j/AbreTQ+V6vZb1ptMp2+/3X+rgfLSP+vP5XNatg9tdHdagcXs2m7HRaJSP+SCGMsitVqvP3pTz/NhyuWQiFSQ57GP7/Pws64AsiQABUT4ej0y4hj081DPU39WZIyBPQpAIaLmnpye5j2Ovr6+yBeEO1Ad5YDgcSlFo4gRMJhN5vDhpgrN+mAQ1KsDhp0fTuKnHx0cm8lOSQGuBIAAHFGdvLy8vOSlKATgEZRCk3+ECAIKhDpwGAa+8V6tWgZVXhbdlUr1FL2Z2TQiwb5EAjdyr06IUaOyZQNIC8qWmwbclBVi1wP5LG94FaH0wGhtMPlJhMc9gAVxVeWZiZ5hUIXJrYkdTETOVF7s3zAWJDsU9G3PfxBGB68w7E16Vaf9KROfrstCE3lfXxxIpM+jbQV+DAGPTxmFuS8ene6Gk5aOoaxEoEMA3fT0e22Z9VXMDo63/HaGN1m9yscRZC+GyDk54dKTCmLUcfxkVItYBODZav461gss6hjJrhYB1ENcumznrMFyb8r7KgslhloC3fapb91Q5YhaC5geJDXl/CZ7uvP8nwAAeipVa4iJE4AAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABIlJREFUeNrkWs11ozAQlnf3bm8H7iD4treQCuKtIKSCcM0p5LgnXiqwOyCpAPu2NzsV4A5wKmD1sR4iE4k/I4HN9948jBlAM5o/jRgxc5hwsjjZnMaH3yLWh+OK05bTnl0AppxcThtOSU0KOTkHxZ2l4IsGQssoPjzrLBSBQfotCS5ThNf2gEctPgs+HRxmX81kWWw6naZHEdvtlu12u/RYAjD85rTr08w7hxmSzt58Pk8Wi0USx3FSBvCA17btMmuw+iS8dKCO4yRRFCVNgXuhvD4rQSo8N/EkDMOkLeBZeGbflGCpZr2KqdcFnqlwi7gs7uiK9rFMeN3AOyRK2JhWQNCF8CVK8E0Jb+dfDtM0CbgDT6MyJRhxhVB86WQyOSnSN8Vms1GVz2Zn3/f9pCt4nmfcCoJ8uusScAVYYE4BC12lMEX+DLxiYzwgFd603/9f1fKBZiUvSmFVyYtroNVqxdbrtZTn+vqa8biT/n5+fmbcEo5eyemnjtmf582tSr5HJUcZAgUNZQxFEEspCILChRFMX6wWJTy2DgX4+fq+LFWRoCD8hstAOJgt6v08XNfNBMQR51UgUaanPfoXBT8xT2PWRV9F9AaREjCD4AFR3U9KKrKQkmAY6FDAUeWnqvUhPK3+wEcpkiwAwlMag5BQpCisWFOQYojINfJ1h8RltFSGpf5PJg+BQJQlyCJIUIoJNNMQjsxY5hpi1JcpgGJLjvQqQCY8CS7Opmo5i/9huhAcioKl4EhWUTUIEpoqYFRTAZ8nyecpOjn39/ef1RJPUUh/lOootYn8IOoQgff29jblQVrDfyIPnkfnuPbw8HD0vFSQ0aiRbD9a6YAe8jbyMY7j8TirAZD/IRyf8Yz/5uYmu3Z3d8fe3t5S4XCOI3eNlIcUQe8gntlsxrg7fKk1mqCxAjCY/CxAeNDT01NW+IAPAuIchQ0Exgy+v7+nvLgG4Pzj4+NIGO4K7PX1Nb0mCktFkNhPNKGAvdiazisAg+LBKDVhDBLXISAAC8B1GvjLy0s26Kurq8wFyB3INWAFABSG/6E8WeUpsYC99jpAFoi6AhVQTVaF3+pYfVtm1zbI0nKt89bhNlkL6IZiLeDosIAval4ul53PPuJJlbG2hegM+gG1yuDvDTY9f4nRFwVIPi2ZwuPjo8z//3D6a2wvoGc9QSON0S97/ajnTQZEvEuxUxSYsDxHtSNkCgXdJGO+GHWhBMx8wWZpZDL+eKqlKpbAOtwBcaaoj1gn97e1NxipBoPAmG9bnQI0SYpaZKZnv/S7ANEaTtkmx70lH0oY9/3SjCAjmC66PFXSJdIbeBVRvvXtsFO/EbLrDgB9ASx16UgLK+ogNWhuzHQtfhpvlRskn/UA0o8lDFDMevTtoNuBAuasZwgNCh+yHsIyaPpT1lN4BhTgsp5jMzTTl9UGgzP9PPwhmn7lxdKlmr4uV+hVwdOFK8zZmeOUrBCwC4A1RNNvY61gswtDnbWCxy4QVZfNIbtg2EPy+yYLJosNBOG5l7ptl8oBGyCoPoiG4PcqOF37/T8BBgCThigH5VpvfwAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABJZJREFUeNrsW79PE1Ec/9ZWfoWDm4yLeOwidZaEDg4mLDiqgx1hsk7oRJmECV10BBZ0McUB49aSYOJgUrAOJg4t8Ae0iAFKgPN966Fce+/uvbt77+6on+RLmvbufd/3+76/7wBoc8Qk8VEJpQiNEkoapDZdUyO0YdAaoYLxXaSBQucI6S4pZ6wRScGLHgRvpnxUFKF6PHEWi1DDGgOSxgY1R/MY6QG1/xIkb/5hv/FVh9ruKRTW91n4VAjdM2JFaJAmVKWdnNqf0DOTffrGepeu18CW8Bq8Fu+xsYSqwTM0wlMFX3ytOApNI7zXQRGBKyFJO/n0A0WvbsddC39GuAauZWMJySADXtlqY15O3c4abJSgBqGAnCzhGZSQCyLPSxWeQQlS64S8lc+LFv6MKDGhLKsOSBkK+BcM+hNQLumg9p1AZacDtrYTtgtcHzgG7dqRa+3Xfsbh1kgCKtv15p+wPliR7vvnTX9+VnGs6DC1lUsdIlwhJyPym5hqA50taQu/c1ICqQY9uwKFD1dGSLgwf3MV9LCD/P1niugG+dU4cYMe24UeP9Uhxpm8ss8UmJ7aM/HOPm9xg3FCi6IsYL5Z4yzlrRWhCzhUeY5ug7wtrp0XaQHJ5uA3fOOQevH7D72wUYrZBsM0Nkaq7sx4SCeB85fpO+SNe6jtHlP36De4/JhyQiYaH+v1FAdwDxbrMiPOqYCsydnGuuHunTr14qtXjiEWU0ibS095338cEQtQoF5PwNbO5RbaJSkP16Fhs9QNn7+07GFGlAuYUwKD6WLQmp6i/772qQdSY3v0oDOr2LoZyx7scCnodnL09n5DSCsQ94DMxJ5Q/glZgmJAfPHqlPLrCZCcbqTUc6lych/CBk/FzPBQt21AXFnulR4EeV2gYBrObZ9w3byyfNJIW9TR0uQhLL1RGv0EKyz2UBCpgIqZeZ1rs9gAVbeOgZxcC5HavpHPM08PiJLYFIu8LRqiikgFrLWc6mqnL7716P4eZCb7iCK6GuU0k0VZ814TGQM0p2bISxnMO1OgNEOa6EBY9GMS1Nw2o0J4hqiUdrgoIxNk/LCC5gjOmwEop5+RoQDNKoWRVtW1K+CDEJ77kBcllWogCXm/8jjvZAh5AP0BqrRSeImWxze/dfGZE8dsENdGHjx7EokqbXDhxhJYTt5mgFJ2K0TcgwK6rUZkh/VTePvuqNEGp0aOfNH0zJwCE09+Ndam4CVvBShkQGqVHQqr7oefeC/DgDWwR2OIBZZ5HjZBmPdZAh5egzneqXE6R1kvAnh9QULj9T8iGAwOxP++HHEGfEmiTBqbzdIB1zMSQoMQ8MtUCyDulRihpy+0MJJAvvh+3AcF1AxXSklW/Byhj2GZFKlg846QACoHGfmZmySBlIaQoixB+DyEGCkJCkhCyCHyTdF5iAA0QQGxGsbAR0O2nQIf8+zwogY+GpI+mr4GEYUfrpCBiKPYbqbvlytE2vT9cIUMXDAU28303RZIkSp4eJFmUMA4XHAsRL3W92N4YhUPitBGaP5fowuV8tzEg8D8PhGgAhYJDRufV+A/gsFvAQYAGFubR/xBobMAAAAASUVORK5CYII=\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA9xJREFUeNrsWz124jAQHjY5gEtK7wkwJ1hKSvYGvkGcE4Qtt+JxAucGpkxn6NKZdOnMDUyZzqvhmd2gSLJk/dmw33vzSBxjSaOZb37kANw4Ro7GCYjMiPwgEjUSUPcciewb2RHZNtcGDVx0RqTuKFnzjEEuvNBYOC35UBQRaO64jEUEfeWAqJlg2GoesxkEQQBRFJ1+3+/3cDweYbvdyoxzIPKz4YreICZS8XaOLLZOkqQuiqJuA96D9+J3BJZQNWP2ZvHchadpWncFfrdFEd6VEPF2Po7juqqqWhf4DHyWwBIin4RXsiams+siaxAoIfChgMzV4iWUkPmI804XL6EEp3lCzvJ5V+BwQukqD5g1CvhHBiSml2V5+jwcDicRIQzDk3QF5gzT6ZQ1DuYHG+e+/9n0V6tVa0aHoY0ozIYrZC6Y/2JQspNfwhZea1MCyQa1XYEzjlJEuO9g/pdZUHyZi6Ab5Hne6gaPj48wGql54HK5hKenp4ux8RqFBZFnWxawojUuk96ygC7QkuW1ug2Ozbh3ZdMCInq3zwUNC5vNBt7e3oRkeC6M2jCZTL4QJ46N30VS5M3RNJT8mLNDF7JYLLR4AOfAeK407hQVcOFwZPIwn8+5N4/H45Ofi8rc9/f30y5+fHz8DaGfBXcXn8MDWtjr6yt9+ZcTCyAEpM3khDCFFoJhVQScg44FfPPeOyMcQBbJ/BtaWJIkVse/d7VQJMT1ei0kRDqkPjw89K7np5XMENYWmnuWZc5JUKsIorNA3dh/7iCppMmMbDC3qYCUnrRuTk/n9qgE2U4Sjs1QZGqTBHcs3zbSWCT+j4RHFCGVGAnG3tm0gLCtGNJxBdWeAqcYCm0TYWGiE0SXzSqmLyiHCxeRIDFhBTSDq0YAzu4nLhQQshi8S1Z4dgU8CFEBJ/tzYv7cnmDXOK4aRXAM4B+g+j0Nwt3s2h+QAT5bkEc4PyWqeEroYgkyOy9YfAkesBSltSYqRQmfP8vS19GYcGLI1Fju6pTKEg1Wb0djzNSYJVgEYdyXITy8B2N8W+FkavdHBkKikv9hHw9LX7qXiC9JYAcIP1XOSIh8B88vU6Vg75WYXvq+VGLkQIz4/p0BBRwbV5o5VvxvIi996RQFIHhHyIKUPplfukiyKDH0FKWDxefQY8wcKCCCnsPmm6IrGABCS4RY9ZH4OhVK10Z80r3DayU+btpv0PRDGChMuEICA0dxa6ZvyhUGbfomXCGBK0Nxa6bfNUEaVMKjilhCAQu4cqRDz/VNNE9YfFDADYH+X6OrCnld+MCb3997VMAzkUnz8wb+ww/+CDAA4q4zpysTtacAAAAASUVORK5CYII=\"","type ZoneKey = 'norte' | 'rm' | 'centro' | 'sur';\ntype ZoneFilter = ZoneKey | 'all';\n\nconst LOCAL_POINTS_LOADERS = import.meta.glob('../json/PuntosMapas_*.json', {\n import: 'default'\n}) as Record<string, () => Promise<unknown>>;\n\nconst LOCAL_MARKER_ICON_URLS = import.meta.glob('../pin/*.png', {\n eager: true,\n import: 'default',\n query: '?url'\n}) as Record<string, string>;\n\ninterface MapPointPhone {\n id: number;\n dist: number;\n telefono: string;\n nombre: string;\n whatsapp: number;\n watshapp?: number;\n orden: number;\n}\n\ninterface MapPointApi {\n id: number;\n titulo: string;\n rut: string;\n direccion: string;\n comuna: number;\n tipo: number;\n lat: string;\n lng: string;\n url: string;\n email: string;\n adicional: string;\n portada: string;\n googlelink: string;\n activo: number;\n marca: number;\n comuna_name: string;\n provincia_name: string;\n region_name: string;\n telefonos: MapPointPhone[];\n}\n\ninterface MapPoint extends MapPointApi {\n zone: ZoneKey;\n}\n\ninterface MapPosition {\n lat: number;\n lng: number;\n}\n\ninterface PointsCacheEntry {\n timestamp: number;\n data: MapPointApi[];\n}\n\ninterface PointsCacheRecord extends PointsCacheEntry {\n key: string;\n}\n\nconst DEFAULT_BRAND_COLOR = '#000000';\nconst FONT_AWESOME_LOCAL_PATH = '/assets/fontawesome/css/all.min.css';\nconst DEFAULT_POINTS_API_URL = 'https://ap2.rs-shop.cl/web/PuntosMapas';\nconst BRAND_COLORS: Record<string, string> = {\n gasgas: '#cb0d25',\n ktm: '#ff6600'\n};\nconst BRAND_ALIASES: Record<string, string> = {\n gas: 'gasgas',\n gasgas: 'gasgas',\n husqvarna: 'hqv'\n};\nconst TYPE_CODES: Record<string, number> = {\n sucursal: 0,\n distribuidor: 1\n};\nconst ZONE_ORDER: ZoneKey[] = ['norte', 'rm', 'centro', 'sur'];\nconst ZONE_LABELS: Record<ZoneKey, string> = {\n norte: 'Zona Norte',\n rm: 'RM',\n centro: 'Zona Centro',\n sur: 'Zona Sur'\n};\nconst TYPE_LABELS: Record<number, string> = {\n 0: 'Sucursales',\n 1: 'Distribuidores'\n};\nconst CONTINENTAL_CHILE_BOUNDS = {\n minLat: -56.5,\n maxLat: -17,\n minLng: -76,\n maxLng: -66\n};\nconst DEFAULT_POINTS_CACHE_TTL_MS = 30 * 24 * 60 * 60 * 1000;\nconst POINTS_CACHE_DB_NAME = 'rs-map-cache';\nconst POINTS_CACHE_STORE_NAME = 'points';\nconst REGION_ZONE_MAP: Record<string, ZoneKey> = {\n 'region de arica y parinacota': 'norte',\n 'arica y parinacota': 'norte',\n 'region de tarapaca': 'norte',\n tarapaca: 'norte',\n 'region de antofagasta': 'norte',\n antofagasta: 'norte',\n 'region de atacama': 'norte',\n atacama: 'norte',\n 'region de coquimbo': 'norte',\n coquimbo: 'norte',\n 'region de valparaiso': 'centro',\n valparaiso: 'centro',\n 'region del libertador general bernardo o higgins': 'centro',\n \"region del libertador general bernardo o'higgins\": 'centro',\n \"libertador bernardo o'higgins\": 'centro',\n ohiggins: 'centro',\n 'region del maule': 'centro',\n maule: 'centro',\n 'region de nuble': 'centro',\n nuble: 'centro',\n 'region del biobio': 'centro',\n biobio: 'centro',\n 'region metropolitana de santiago': 'rm',\n 'region metropolitana': 'rm',\n 'rm': 'rm',\n santiago: 'rm',\n 'region de la araucania': 'sur',\n araucania: 'sur',\n 'region de los rios': 'sur',\n 'los rios': 'sur',\n 'region de los lagos': 'sur',\n 'los lagos': 'sur',\n 'region de aysen del general carlos ibanez del campo': 'sur',\n 'region de aysen': 'sur',\n aysen: 'sur',\n 'region de magallanes y la antartica chilena': 'sur',\n magallanes: 'sur'\n};\n\nexport class RsMap extends HTMLElement {\n static tag = 'rs-map';\n private static googleMapsLoaderPromise: Promise<void> | null = null;\n private static pointsCacheDbPromise: Promise<IDBDatabase | null> | null = null;\n private root: ShadowRoot;\n private mapEl!: HTMLDivElement;\n private map: any;\n private pointModalOverlayEl!: HTMLElement;\n private pointModalTitleEl!: HTMLElement;\n private pointModalBodyEl!: HTMLElement;\n private pointModalCloseButton!: HTMLButtonElement;\n private markers: any[] = [];\n private marca = '';\n private marcaKey = 'default';\n private tipo = '';\n private tipoCode: number | null = null;\n private pointsController?: AbortController;\n private points: MapPoint[] = [];\n private pointsByZone: Record<ZoneKey, MapPoint[]> = {\n norte: [],\n rm: [],\n centro: [],\n sur: []\n };\n private initialViewApplied = false;\n private zonesContainer!: HTMLElement;\n private componentMessageEl!: HTMLElement;\n private mapLayoutEl!: HTMLElement;\n private zoneButtons: HTMLButtonElement[] = [];\n private nearestButton!: HTMLButtonElement;\n private panelTitleEl!: HTMLElement;\n private activeZone: ZoneFilter = 'all';\n private mapHeight = '';\n private googleMapsApiKey = '';\n private pointsApiUrl = DEFAULT_POINTS_API_URL;\n private markerIconBaseUrl = '';\n private defaultMarkerIconUrl = '';\n private pointsCacheTtlMs = DEFAULT_POINTS_CACHE_TTL_MS;\n private static fontAwesomeAttached = false;\n private panAnimationFrame: number | null = null;\n private highlightTimeout: number | null = null;\n private isSyncingInitialAttributes = false;\n private refreshQueued = false;\n private localPointsRequests = new Map<string, Promise<MapPointApi[] | null>>();\n\n static get observedAttributes() {\n return [\n 'marca',\n 'tipo',\n 'height',\n 'google-maps-key',\n 'points-api-url',\n 'cache-days',\n 'marker-icon-base',\n 'marker-icon-default'\n ];\n }\n\n constructor() {\n super();\n RsMap.ensureFontAwesome();\n this.root = this.attachShadow({ mode: 'open' });\n this.root.innerHTML = `\n <link rel=\"stylesheet\" href=\"${FONT_AWESOME_LOCAL_PATH}\" />\n <style>\n :host {\n display: block;\n position: relative;\n width: 100%;\n height: var(--map-height, 520px);\n --rs-map-accent: ${DEFAULT_BRAND_COLOR};\n }\n .map-layout {\n display: grid;\n grid-template-columns: minmax(0, 2.5fr) minmax(220px, 1fr);\n gap: 16px;\n width: 100%;\n height: 100%;\n }\n .map-panel,\n #map {\n width: 100%;\n height: 100%;\n animation: mapSlide 90s infinite;\n animation-timing-function: ease-in-out; \n }\n .map-panel {\n border-radius: 8px;\n overflow: hidden;\n border: 2px solid var(--rs-map-accent);\n }\n #map {\n background: #f5f5f5;\n }\n .component-shell {\n display: flex;\n flex-direction: column;\n height: 100%;\n }\n .component-message {\n margin: 0;\n font-size: 1rem;\n color: #555;\n text-align: center;\n padding: 24px 12px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex: 1;\n }\n .component-message[hidden] {\n display: none;\n }\n .map-layout[hidden] {\n display: none;\n }\n .points-panel {\n border: 1px solid #e0e0e0;\n border-radius: 8px;\n border-top: 4px solid var(--rs-map-accent);\n padding: 16px;\n font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;\n background: #fff;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n }\n .panel-message {\n margin: 0;\n font-size: 0.95rem;\n color: #555;\n text-align: center;\n padding: 32px 12px;\n }\n .panel-content[hidden] {\n display: none;\n }\n .points-panel h2 {\n margin: 0 0 8px;\n font-size: 1rem;\n color: var(--rs-map-accent);\n }\n .zone-filters {\n display: flex;\n gap: 8px;\n margin-bottom: 12px;\n overflow-x: auto;\n padding-bottom: 8px;\n flex-wrap: nowrap;\n }\n .zone-button {\n border: 1px solid var(--rs-map-accent);\n border-radius: 999px;\n padding: 6px 12px;\n font-size: 0.85rem;\n background: transparent;\n color: var(--rs-map-accent);\n cursor: pointer;\n transition: background 0.2s ease, color 0.2s ease;\n text-align: center;\n white-space: nowrap;\n }\n .zone-button:hover,\n .zone-button:focus-visible {\n background: var(--rs-map-accent);\n color: #fff;\n }\n .zone-button.is-active {\n background: var(--rs-map-accent);\n color: #fff;\n }\n .zone-button--secondary {\n flex-shrink: 0;\n border-color: #444;\n color: #444;\n }\n .zone-button--secondary i {\n margin-right: 6px;\n }\n .panel-header {\n margin-bottom: 12px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n }\n .panel-header h2[data-panel-title] {\n margin: 0;\n font-size: 1.25rem;\n }\n .zones-container {\n display: flex;\n flex-direction: column;\n gap: 16px;\n flex: 1;\n overflow-y: auto;\n }\n .zone-section {\n border-top: 2px solid #eee;\n padding-top: 12px;\n }\n .zone-section[hidden] {\n display: none;\n }\n .zone-section__header {\n display: flex;\n align-items: baseline;\n justify-content: space-between;\n margin: 0 0 8px;\n font-weight: 600;\n color: #333;\n }\n .zone-section__empty {\n margin: 0;\n font-size: 0.85rem;\n color: #777;\n }\n .zone-section__list {\n display: flex;\n flex-direction: column;\n gap: 10px;\n }\n .point-card {\n border: 1px solid #e6e6e6;\n border-radius: 8px;\n padding: 10px;\n background: #fff;\n display: flex;\n flex-direction: column;\n gap: 6px;\n overflow: hidden;\n transition: border 0.2s ease, box-shadow 0.2s ease;\n }\n .point-card--highlight {\n border: 2px solid var(--rs-map-accent);\n box-shadow: 0 0 0 2px rgba(30, 136, 229, 0.2);\n animation: highlightFade 3s forwards;\n }\n @keyframes highlightFade {\n 0% {\n border-color: var(--rs-map-accent);\n box-shadow: 0 0 0 2px rgba(30, 136, 229, 0.2);\n }\n 80% {\n border-color: #111;\n box-shadow: 0 0 0 2px rgba(17, 17, 17, 0.2);\n }\n 100% {\n border-color: #e6e6e6;\n box-shadow: none;\n }\n }\n .point-card__title {\n margin: -10px -10px 8px;\n padding: 10px;\n font-size: 0.95rem;\n font-weight: 600;\n text-align: center;\n color: #fff;\n background: var(--rs-map-accent);\n }\n .point-card__focus {\n border: 1px solid var(--rs-map-accent);\n border-radius: 999px;\n padding: 4px 12px;\n font-size: 0.8rem;\n background: transparent;\n color: var(--rs-map-accent);\n cursor: pointer;\n }\n .point-card__focus:hover,\n .point-card__focus:focus-visible {\n background: var(--rs-map-accent);\n color: #fff;\n }\n .point-card__map-actions {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: 8px;\n align-self: flex-start;\n margin-top: 8px;\n }\n .point-card__mobile-navigation {\n display: none;\n align-items: center;\n flex-wrap: wrap;\n gap: 8px;\n }\n .point-card__mobile-nav-link {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n border: 1px solid var(--rs-map-accent);\n border-radius: 999px;\n padding: 4px 12px;\n background: var(--rs-map-accent);\n color: #fff;\n font-size: 0.8rem;\n text-decoration: none;\n }\n .point-card__mobile-nav-link:hover,\n .point-card__mobile-nav-link:focus-visible {\n filter: brightness(0.94);\n }\n .point-card__coordinate-warning {\n display: flex;\n align-items: center;\n gap: 6px;\n border: 1px solid #d6dbe3;\n border-radius: 999px;\n padding: 4px 12px;\n background: #f8fafc;\n color: #4b5563;\n font-size: 0.8rem;\n line-height: 1.35;\n align-self: flex-start;\n margin-top: 8px;\n }\n .point-card__coordinate-warning i {\n color: #6b7280;\n }\n @media (max-width: 768px) {\n .map-layout {\n grid-template-columns: 1fr;\n }\n .map-panel {\n display: none;\n }\n .panel-header {\n flex-direction: column;\n align-items: stretch;\n }\n .zone-filters {\n flex-wrap: wrap;\n }\n .point-card__focus {\n display: none;\n }\n .point-card__mobile-navigation {\n display: flex;\n }\n }\n .point-card__address,\n .point-card__meta,\n .point-card__contact {\n margin: 0;\n font-size: 0.85rem;\n color: #555;\n }\n .point-card__contact {\n margin: 0 0 6px;\n font-size: 0.85rem;\n color: #555;\n }\n .point-card__contact-title {\n display: flex;\n align-items: center;\n gap: 6px;\n font-weight: 600;\n color: #333;\n margin-bottom: 4px;\n }\n .point-card__phone-list {\n list-style: none;\n padding: 0;\n margin: 0;\n display: flex;\n flex-direction: column;\n gap: 4px;\n }\n .point-card__phone-item {\n display: flex;\n gap: 8px;\n align-items: flex-start;\n }\n .point-card__phone-icon {\n width: 16px;\n display: inline-flex;\n justify-content: center;\n color: var(--rs-map-accent);\n font-size: 0.85rem;\n }\n .point-card__phone-content {\n display: flex;\n flex-direction: column;\n gap: 2px;\n }\n .point-card__phone-name {\n font-weight: 600;\n color: #333;\n }\n .point-card__phone-number {\n font-family: 'Segoe UI', system-ui, sans-serif;\n font-size: 0.85rem;\n }\n .point-card__phone-number--link {\n color: var(--rs-map-accent);\n text-decoration: none;\n }\n .point-card__phone-number--link:hover,\n .point-card__phone-number--link:focus-visible {\n text-decoration: underline;\n }\n .point-card__address-block {\n display: flex;\n flex-direction: column;\n gap: 2px;\n }\n .point-card__details {\n display: flex;\n flex-direction: column;\n gap: 6px;\n margin-top: 6px;\n }\n .point-card__details[hidden] {\n display: none;\n }\n .point-card__toggle {\n border: 1px solid var(--rs-map-accent);\n border-radius: 16px;\n padding: 4px 10px;\n background: transparent;\n color: var(--rs-map-accent);\n font-size: 0.8rem;\n cursor: pointer;\n align-self: flex-start;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n }\n .point-card__toggle:hover,\n .point-card__toggle:focus-visible {\n background: var(--rs-map-accent);\n color: #fff;\n }\n .point-card__actions {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n gap: 6px;\n margin-top: 8px;\n }\n .point-card__action {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-size: 0.8rem;\n }\n .point-card__actions a.point-card__action {\n color: var(--rs-map-accent);\n text-decoration: none;\n border-bottom: 1px solid transparent;\n }\n .point-card__actions a.point-card__action:hover,\n .point-card__actions a.point-card__action:focus-visible {\n border-color: currentColor;\n }\n .point-card__actions .point-card__action i {\n font-size: 0.85rem;\n }\n .point-card__actions .point-card__action--text {\n color: #444;\n }\n .point-card__extra {\n margin: 0;\n font-size: 0.8rem;\n color: #444;\n }\n .point-card__extra a {\n color: var(--rs-map-accent);\n text-decoration: none;\n display: inline-flex;\n align-items: center;\n gap: 4px;\n }\n .point-card__extra a:hover,\n .point-card__extra a:focus-visible {\n color: #444;\n text-decoration: underline;\n }\n .point-card__extra-icon {\n font-size: 0.75rem;\n }\n .empty-state {\n margin: 0;\n font-size: 0.9rem;\n color: #777;\n text-align: center;\n }\n .points-panel p {\n margin: 0;\n color: #666;\n font-size: 0.9rem;\n }\n .point-modal-overlay {\n position: absolute;\n inset: 0;\n z-index: 30;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 16px;\n background: rgba(0, 0, 0, 0.48);\n font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;\n }\n .point-modal-overlay[hidden] {\n display: none;\n }\n .point-modal {\n width: min(560px, 100%);\n max-height: calc(100% - 16px);\n border-radius: 8px;\n overflow: hidden;\n background: #f7f7fb;\n color: #151515;\n box-shadow: 0 18px 48px rgba(0, 0, 0, 0.32);\n display: flex;\n flex-direction: column;\n }\n .point-modal__header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n padding: 14px 18px;\n background: #000;\n color: #fff;\n }\n .point-modal__title {\n margin: 0;\n font-size: 1.15rem;\n font-weight: 700;\n line-height: 1.2;\n }\n .point-modal__close {\n border: 0;\n width: 34px;\n height: 34px;\n border-radius: 50%;\n background: transparent;\n color: #fff;\n cursor: pointer;\n font-size: 1.1rem;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n }\n .point-modal__close:hover,\n .point-modal__close:focus-visible {\n background: rgba(255, 255, 255, 0.14);\n }\n .point-modal__body {\n padding: 20px 24px 24px;\n overflow-y: auto;\n line-height: 1.45;\n }\n .point-modal__cover {\n width: calc(100% + 48px);\n max-height: 300px;\n object-fit: cover;\n margin: -20px -24px 18px;\n display: block;\n background: #e5e7eb;\n }\n .point-modal__section {\n margin: 0 0 20px;\n display: flex;\n flex-direction: column;\n gap: 6px;\n }\n .point-modal__section:last-child {\n margin-bottom: 0;\n }\n .point-modal__line {\n margin: 0;\n font-size: 0.95rem;\n color: #242424;\n }\n .point-modal__label {\n font-weight: 700;\n }\n .point-modal__phone-list {\n list-style: none;\n padding: 0;\n margin: 4px 0 0;\n display: flex;\n flex-direction: column;\n gap: 3px;\n }\n .point-modal__phone-item {\n font-size: 0.94rem;\n color: #222;\n }\n .point-modal__extra {\n margin: 0;\n font-size: 0.94rem;\n color: #242424;\n }\n .point-modal__extra a,\n .point-modal__link {\n color: #111;\n font-weight: 600;\n text-decoration: none;\n border-bottom: 1px solid currentColor;\n }\n .point-modal__extra a:hover,\n .point-modal__extra a:focus-visible,\n .point-modal__link:hover,\n .point-modal__link:focus-visible {\n color: var(--rs-map-accent);\n }\n .point-modal__actions {\n display: flex;\n flex-wrap: wrap;\n gap: 10px;\n }\n @media (max-width: 768px) {\n .point-modal-overlay {\n position: fixed;\n }\n .point-modal {\n max-height: calc(100dvh - 24px);\n }\n .point-modal__body {\n padding: 16px 18px 20px;\n }\n .point-modal__cover {\n width: calc(100% + 36px);\n margin: -16px -18px 16px;\n }\n }\n </style>\n <div class=\"component-shell\">\n <p class=\"component-message\" data-component-message>Cargando puntos...</p>\n <div class=\"map-layout\" data-map-layout hidden>\n <div class=\"map-panel\">\n <div id=\"map\"></div>\n </div>\n <aside class=\"points-panel\" aria-live=\"polite\">\n <div class=\"zone-filters\" role=\"group\" aria-label=\"Filtrar por zona\">\n <button class=\"zone-button\" type=\"button\" data-zone=\"norte\" data-label=\"Zona Norte\" aria-pressed=\"false\">Zona Norte</button>\n <button class=\"zone-button\" type=\"button\" data-zone=\"rm\" data-label=\"RM\" aria-pressed=\"false\">RM</button>\n <button class=\"zone-button\" type=\"button\" data-zone=\"centro\" data-label=\"Zona Centro\" aria-pressed=\"false\">Zona Centro</button>\n <button class=\"zone-button\" type=\"button\" data-zone=\"sur\" data-label=\"Zona Sur\" aria-pressed=\"false\">Zona Sur</button>\n </div>\n <div class=\"panel-header\">\n <h2 data-panel-title>Puntos del mapa</h2>\n <button class=\"zone-button zone-button--secondary\" type=\"button\" data-action=\"nearest\">\n <i class=\"fa-solid fa-location-dot\" aria-hidden=\"true\"></i>\n Buscar tienda cercana\n </button>\n </div>\n <div class=\"zones-container\" data-zone-container></div>\n </aside>\n </div>\n </div>\n <div class=\"point-modal-overlay\" data-point-modal-overlay hidden>\n <section class=\"point-modal\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"rs-map-point-modal-title\">\n <header class=\"point-modal__header\">\n <h2 class=\"point-modal__title\" id=\"rs-map-point-modal-title\" data-point-modal-title></h2>\n <button class=\"point-modal__close\" type=\"button\" data-point-modal-close aria-label=\"Cerrar\">\n <i class=\"fa-solid fa-xmark\" aria-hidden=\"true\"></i>\n </button>\n </header>\n <div class=\"point-modal__body\" data-point-modal-body></div>\n </section>\n </div>\n `;\n }\n\n connectedCallback() {\n this.mapEl = this.root.querySelector<HTMLDivElement>('#map')!;\n this.panelTitleEl = this.root.querySelector<HTMLElement>('[data-panel-title]')!;\n this.zonesContainer = this.root.querySelector<HTMLElement>('[data-zone-container]')!;\n this.componentMessageEl = this.root.querySelector<HTMLElement>('[data-component-message]')!;\n this.mapLayoutEl = this.root.querySelector<HTMLElement>('[data-map-layout]')!;\n this.pointModalOverlayEl = this.root.querySelector<HTMLElement>('[data-point-modal-overlay]')!;\n this.pointModalTitleEl = this.root.querySelector<HTMLElement>('[data-point-modal-title]')!;\n this.pointModalBodyEl = this.root.querySelector<HTMLElement>('[data-point-modal-body]')!;\n this.pointModalCloseButton = this.root.querySelector<HTMLButtonElement>('[data-point-modal-close]')!;\n this.zoneButtons = Array.from(this.root.querySelectorAll<HTMLButtonElement>('[data-zone]'));\n this.nearestButton = this.root.querySelector<HTMLButtonElement>('[data-action=\"nearest\"]')!;\n this.zoneButtons.forEach((btn) => btn.addEventListener('click', this.handleZoneButtonClick));\n if (this.nearestButton) {\n this.nearestButton.addEventListener('click', this.handleNearestClick);\n }\n this.pointModalOverlayEl.addEventListener('click', this.handlePointModalOverlayClick);\n this.pointModalCloseButton.addEventListener('click', this.closePointModal);\n window.addEventListener('keydown', this.handlePointModalKeydown);\n this.updateZoneButtons();\n this.setMapHeight(this.getAttribute('height'));\n this.setComponentState('loading');\n this.syncAttributesToState();\n }\n\n disconnectedCallback() {\n this.pointsController?.abort();\n this.zoneButtons.forEach((btn) => btn.removeEventListener('click', this.handleZoneButtonClick));\n if (this.nearestButton) {\n this.nearestButton.removeEventListener('click', this.handleNearestClick);\n }\n this.pointModalOverlayEl?.removeEventListener('click', this.handlePointModalOverlayClick);\n this.pointModalCloseButton?.removeEventListener('click', this.closePointModal);\n window.removeEventListener('keydown', this.handlePointModalKeydown);\n }\n\n attributeChangedCallback(name: string, _oldValue: string | null, newValue: string | null) {\n if (name === 'marca') {\n this.setMarca(newValue ?? '');\n } else if (name === 'tipo') {\n this.setTipo(newValue ?? '');\n } else if (name === 'height') {\n this.setMapHeight(newValue);\n } else if (name === 'google-maps-key') {\n this.setGoogleMapsKey(newValue);\n } else if (name === 'points-api-url') {\n this.setPointsApiUrl(newValue);\n } else if (name === 'cache-days') {\n this.setCacheDays(newValue);\n } else if (name === 'marker-icon-base') {\n this.setMarkerIconBase(newValue);\n } else if (name === 'marker-icon-default') {\n this.setDefaultMarkerIcon(newValue);\n }\n }\n\n private loadGoogleMaps() {\n if ((window as any)._rsGoogleMapsLoaded) {\n return Promise.resolve().then(() => {\n this.initMap();\n });\n }\n\n if (!this.googleMapsApiKey) {\n console.error('Falta la clave de Google Maps. Define el atributo \"google-maps-key\" en <rs-map>.');\n return Promise.resolve();\n }\n\n if (!RsMap.googleMapsLoaderPromise) {\n RsMap.googleMapsLoaderPromise = new Promise<void>((resolve, reject) => {\n const existingScript = document.querySelector<HTMLScriptElement>('script[data-rs-google-maps=\"true\"]');\n if (existingScript) {\n existingScript.addEventListener('load', () => resolve(), { once: true });\n existingScript.addEventListener(\n 'error',\n () => reject(new Error('Error al cargar la API de Google Maps')),\n { once: true }\n );\n return;\n }\n\n const script = document.createElement('script');\n const params = new URLSearchParams({\n key: this.googleMapsApiKey,\n v: 'weekly'\n });\n script.src = `https://maps.googleapis.com/maps/api/js?${params.toString()}`;\n script.async = true;\n script.defer = true;\n script.dataset.rsGoogleMaps = 'true';\n\n script.onload = () => {\n (window as any)._rsGoogleMapsLoaded = true;\n resolve();\n };\n\n script.onerror = () => {\n RsMap.googleMapsLoaderPromise = null;\n reject(new Error('Error al cargar la API de Google Maps'));\n };\n\n document.head.appendChild(script);\n });\n }\n\n return RsMap.googleMapsLoaderPromise\n .then(() => {\n (window as any)._rsGoogleMapsLoaded = true;\n this.initMap();\n })\n .catch((error) => {\n console.error(error instanceof Error ? error.message : 'Error al cargar la API de Google Maps');\n });\n }\n\n private initMap() {\n const g = (window as any).google;\n if (!g) {\n console.error('Google Maps aun no esta disponible.');\n return;\n }\n\n const initialCenter = this.getInitialCenter();\n this.map = new g.maps.Map(this.mapEl, {\n center: initialCenter,\n zoom: 14,\n mapTypeId: 'roadmap'\n });\n if (this.points.length) {\n this.updateMarkers(this.points);\n }\n }\n\n private getInitialCenter() {\n const firstPoint = this.getFirstValidPoint();\n if (firstPoint) {\n return firstPoint;\n }\n return { lat: -33.4489, lng: -70.6693 };\n }\n\n private getFirstValidPoint(): MapPosition | null {\n for (const point of this.points) {\n const position = this.getPointPosition(point);\n if (position) {\n return position;\n }\n }\n return null;\n }\n\n private syncAttributesToState() {\n this.isSyncingInitialAttributes = true;\n this.setMarca(this.getAttribute('marca') ?? '');\n this.setTipo(this.getAttribute('tipo') ?? '');\n this.setGoogleMapsKey(this.getAttribute('google-maps-key'));\n this.setPointsApiUrl(this.getAttribute('points-api-url'));\n this.setCacheDays(this.getAttribute('cache-days'));\n this.setMarkerIconBase(this.getAttribute('marker-icon-base'));\n this.setDefaultMarkerIcon(this.getAttribute('marker-icon-default'));\n this.isSyncingInitialAttributes = false;\n this.queueRefreshPoints();\n }\n\n private setMapHeight(value: string | null) {\n const normalized = (value ?? '').trim();\n if (!normalized) {\n this.mapHeight = '';\n this.style.removeProperty('--map-height');\n return;\n }\n this.mapHeight = normalized;\n this.style.setProperty('--map-height', normalized);\n }\n\n private setGoogleMapsKey(value: string | null) {\n this.googleMapsApiKey = (value ?? '').trim();\n if (this.googleMapsApiKey && this.isConnected) {\n void this.loadGoogleMaps();\n }\n }\n\n private setPointsApiUrl(value: string | null) {\n const normalized = (value ?? '').trim();\n this.pointsApiUrl = normalized || DEFAULT_POINTS_API_URL;\n if (this.pointsApiUrl && this.isConnected && !this.isSyncingInitialAttributes) {\n this.queueRefreshPoints();\n }\n }\n\n private setCacheDays(value: string | null) {\n const normalized = (value ?? '').trim();\n if (!normalized) {\n this.pointsCacheTtlMs = DEFAULT_POINTS_CACHE_TTL_MS;\n return;\n }\n\n const days = Number(normalized);\n if (!Number.isFinite(days) || days < 0) {\n this.pointsCacheTtlMs = DEFAULT_POINTS_CACHE_TTL_MS;\n return;\n }\n\n this.pointsCacheTtlMs = days * 24 * 60 * 60 * 1000;\n }\n\n private setMarkerIconBase(value: string | null) {\n const normalized = (value ?? '').trim();\n if (!normalized) {\n this.markerIconBaseUrl = '';\n return;\n }\n this.markerIconBaseUrl = normalized.endsWith('/') ? normalized : `${normalized}/`;\n }\n\n private setDefaultMarkerIcon(value: string | null) {\n this.defaultMarkerIconUrl = (value ?? '').trim();\n }\n\n private setMarca(value: string) {\n this.marca = value.trim();\n this.marcaKey = this.normalizeBrandKey(this.marca);\n this.applyBrandColor();\n if (!this.isSyncingInitialAttributes) {\n this.queueRefreshPoints();\n }\n }\n\n private setTipo(value: string) {\n this.tipo = value.trim();\n this.tipoCode = this.normalizeTipo(this.tipo);\n this.updatePanelTitle();\n if (!this.isSyncingInitialAttributes) {\n this.queueRefreshPoints();\n }\n }\n\n private queueRefreshPoints() {\n if (this.refreshQueued) {\n return;\n }\n this.refreshQueued = true;\n queueMicrotask(() => {\n this.refreshQueued = false;\n void this.refreshPoints();\n });\n }\n\n get marcaFilter() {\n return this.marca;\n }\n\n get tipoFilter() {\n return this.tipo;\n }\n\n private updatePanelTitle() {\n if (!this.panelTitleEl) {\n return;\n }\n const label = this.getTipoLabel();\n this.panelTitleEl.textContent = label ?? 'Puntos del mapa';\n }\n\n private getTipoLabel() {\n if (this.tipoCode !== null && this.tipoCode in TYPE_LABELS) {\n return TYPE_LABELS[this.tipoCode];\n }\n const normalized = this.tipo.trim().toLowerCase();\n const normalizedCode = normalized && normalized in TYPE_CODES ? TYPE_CODES[normalized] : null;\n if (normalizedCode !== null && normalizedCode in TYPE_LABELS) {\n return TYPE_LABELS[normalizedCode];\n }\n return null;\n }\n\n private applyBrandColor() {\n const color = BRAND_COLORS[this.marcaKey] ?? DEFAULT_BRAND_COLOR;\n this.style.setProperty('--rs-map-accent', color);\n }\n\n private normalizeTipo(value: string): number | null {\n if (!value) {\n return null;\n }\n const normalized = value.trim().toLowerCase();\n if (normalized in TYPE_CODES) {\n return TYPE_CODES[normalized];\n }\n const numeric = Number(normalized);\n if (Number.isFinite(numeric) && (numeric === 0 || numeric === 1)) {\n return numeric;\n }\n return null;\n }\n\n private async refreshPoints() {\n if (!this.isConnected || !this.marca || this.tipoCode === null) {\n return;\n }\n\n if (!this.pointsApiUrl) {\n console.error('Falta la URL de la API de puntos. Define el atributo \"points-api-url\" en <rs-map>.');\n this.setComponentState('error');\n return;\n }\n\n this.pointsController?.abort();\n const controller = new AbortController();\n this.pointsController = controller;\n\n const marcaRequestValue = this.getMarcaRequestValue();\n const params = new URLSearchParams({\n marca: marcaRequestValue,\n tipo: String(this.tipoCode)\n });\n\n const hasQuery = this.pointsApiUrl.includes('?');\n const needsAmp = hasQuery && !/[?&]$/.test(this.pointsApiUrl);\n const separator = hasQuery ? (needsAmp ? '&' : '') : '?';\n const requestUrl = `${this.pointsApiUrl}${separator}${params.toString()}`;\n const cacheKey = this.getPointsCacheKey(requestUrl);\n const cachedPayload = await this.readPointsCache(cacheKey);\n const hasFreshCache = cachedPayload && Date.now() - cachedPayload.timestamp < this.pointsCacheTtlMs;\n const localFallbackPayload = cachedPayload ? null : await this.getLocalPointsFallback(marcaRequestValue, this.tipoCode);\n\n if (cachedPayload) {\n this.applyPointsPayload(cachedPayload.data);\n this.setComponentState('ready');\n if (hasFreshCache) {\n return;\n }\n } else if (localFallbackPayload) {\n this.applyPointsPayload(localFallbackPayload);\n this.setComponentState('ready');\n } else {\n this.setComponentState('loading');\n }\n\n try {\n const response = await fetch(requestUrl, {\n signal: controller.signal\n });\n\n if (!response.ok) {\n throw new Error(`Respuesta ${response.status}`);\n }\n\n const payload = await response.json();\n if (!Array.isArray(payload)) {\n throw new Error('La respuesta de puntos no es valida.');\n }\n const typedPayload = payload as MapPointApi[];\n await this.writePointsCache(cacheKey, typedPayload);\n this.applyPointsPayload(typedPayload);\n this.setComponentState('ready');\n } catch (error) {\n if (error instanceof DOMException && error.name === 'AbortError') {\n return;\n }\n if (cachedPayload || localFallbackPayload) {\n console.warn('Se mantienen puntos locales por error al refrescar el mapa', error);\n return;\n }\n console.error('No se pudieron cargar los puntos del mapa', error);\n this.setComponentState('error');\n }\n }\n\n private applyPointsPayload(payload: MapPointApi[]) {\n this.points = this.transformPoints(payload);\n this.reportUnmappablePoints(this.points);\n this.renderPoints(this.points);\n this.initialViewApplied = false;\n this.updateMarkers(this.points);\n }\n\n private reportUnmappablePoints(points: MapPoint[]) {\n const unmappablePoints = points\n .filter((point) => !this.getPointPosition(point))\n .map((point) => ({\n id: point.id,\n titulo: point.titulo,\n direccion: point.direccion,\n lat: point.lat,\n lng: point.lng\n }));\n\n if (unmappablePoints.length) {\n console.warn('Puntos con coordenadas fuera de rango o invalidas; no se muestran como markers.', unmappablePoints);\n }\n }\n\n private getPointsCacheKey(requestUrl: string) {\n return `rs-map:points:${requestUrl}`;\n }\n\n private async getLocalPointsFallback(marca: string, tipoCode: number): Promise<MapPointApi[] | null> {\n const normalizedBrand = this.normalizeBrandKey(marca);\n const path = `../json/PuntosMapas_${normalizedBrand}_${tipoCode}.json`;\n const existingRequest = this.localPointsRequests.get(path);\n if (existingRequest) {\n return existingRequest;\n }\n\n const loader = LOCAL_POINTS_LOADERS[path];\n if (!loader) {\n return null;\n }\n\n const request = loader()\n .then((payload) => {\n const parsedPayload = this.parseLocalPointsPayload(payload);\n return parsedPayload?.length ? parsedPayload : null;\n })\n .catch(() => null);\n\n this.localPointsRequests.set(path, request);\n return request;\n }\n\n private parseLocalPointsPayload(value: unknown): MapPointApi[] | null {\n if (!Array.isArray(value)) {\n return null;\n }\n\n return value as MapPointApi[];\n }\n\n private async readPointsCache(cacheKey: string): Promise<PointsCacheEntry | null> {\n const dbEntry = await this.readPointsCacheFromIndexedDb(cacheKey);\n if (dbEntry) {\n return dbEntry;\n }\n\n try {\n const raw = window.localStorage.getItem(cacheKey);\n if (!raw) {\n return null;\n }\n const parsed = JSON.parse(raw) as PointsCacheEntry;\n if (!parsed || !Array.isArray(parsed.data) || !Number.isFinite(parsed.timestamp)) {\n window.localStorage.removeItem(cacheKey);\n return null;\n }\n return parsed;\n } catch {\n return null;\n }\n }\n\n private async writePointsCache(cacheKey: string, payload: MapPointApi[]) {\n const entry: PointsCacheEntry = {\n timestamp: Date.now(),\n data: payload\n };\n\n await this.writePointsCacheToIndexedDb(cacheKey, entry);\n\n try {\n window.localStorage.setItem(cacheKey, JSON.stringify(entry));\n } catch {\n // Ignore storage errors and keep runtime behavior.\n }\n }\n\n private async readPointsCacheFromIndexedDb(cacheKey: string): Promise<PointsCacheEntry | null> {\n const db = await RsMap.openPointsCacheDb();\n if (!db) {\n return null;\n }\n\n return new Promise((resolve) => {\n const transaction = db.transaction(POINTS_CACHE_STORE_NAME, 'readonly');\n const store = transaction.objectStore(POINTS_CACHE_STORE_NAME);\n const request = store.get(cacheKey);\n\n request.onsuccess = () => {\n const result = request.result as PointsCacheRecord | undefined;\n if (!result || !Array.isArray(result.data) || !Number.isFinite(result.timestamp)) {\n resolve(null);\n return;\n }\n resolve({\n timestamp: result.timestamp,\n data: result.data\n });\n };\n\n request.onerror = () => resolve(null);\n });\n }\n\n private async writePointsCacheToIndexedDb(cacheKey: string, entry: PointsCacheEntry) {\n const db = await RsMap.openPointsCacheDb();\n if (!db) {\n return;\n }\n\n await new Promise<void>((resolve) => {\n const transaction = db.transaction(POINTS_CACHE_STORE_NAME, 'readwrite');\n const store = transaction.objectStore(POINTS_CACHE_STORE_NAME);\n const request = store.put({\n key: cacheKey,\n timestamp: entry.timestamp,\n data: entry.data\n } satisfies PointsCacheRecord);\n\n request.onsuccess = () => resolve();\n request.onerror = () => resolve();\n });\n }\n\n private static openPointsCacheDb(): Promise<IDBDatabase | null> {\n if (typeof window === 'undefined' || !('indexedDB' in window)) {\n return Promise.resolve(null);\n }\n\n if (!RsMap.pointsCacheDbPromise) {\n RsMap.pointsCacheDbPromise = new Promise((resolve) => {\n const request = window.indexedDB.open(POINTS_CACHE_DB_NAME, 1);\n\n request.onupgradeneeded = () => {\n const db = request.result;\n if (!db.objectStoreNames.contains(POINTS_CACHE_STORE_NAME)) {\n db.createObjectStore(POINTS_CACHE_STORE_NAME, { keyPath: 'key' });\n }\n };\n\n request.onsuccess = () => resolve(request.result);\n request.onerror = () => resolve(null);\n });\n }\n\n return RsMap.pointsCacheDbPromise;\n }\n\n private transformPoints(payload: MapPointApi[]): MapPoint[] {\n return payload.map((point) => ({\n ...point,\n zone: this.getZoneForPoint(point)\n }));\n }\n\n private renderPoints(points: MapPoint[]) {\n if (!this.zonesContainer) {\n return;\n }\n\n const grouped = this.groupPoints(points);\n this.pointsByZone = grouped;\n this.updateZoneButtonCounts();\n\n const fragment = document.createDocumentFragment();\n\n ZONE_ORDER.forEach((zoneKey) => {\n const section = document.createElement('section');\n section.className = 'zone-section';\n section.dataset.zoneSection = zoneKey;\n\n const header = document.createElement('div');\n header.className = 'zone-section__header';\n const title = document.createElement('span');\n title.textContent = ZONE_LABELS[zoneKey];\n header.appendChild(title);\n section.appendChild(header);\n\n if (grouped[zoneKey].length === 0) {\n const empty = document.createElement('p');\n empty.className = 'zone-section__empty';\n empty.textContent = 'Sin puntos en esta zona.';\n section.appendChild(empty);\n } else {\n const list = document.createElement('div');\n list.className = 'zone-section__list';\n grouped[zoneKey].forEach((point) => {\n list.appendChild(this.createPointCard(point));\n });\n section.appendChild(list);\n }\n\n fragment.appendChild(section);\n });\n\n this.zonesContainer.replaceChildren(fragment);\n this.updateZoneVisibility();\n }\n\n private groupPoints(points: MapPoint[]): Record<ZoneKey, MapPoint[]> {\n const grouped: Record<ZoneKey, MapPoint[]> = {\n norte: [],\n rm: [],\n centro: [],\n sur: []\n };\n points.forEach((point) => {\n grouped[point.zone].push(point);\n });\n return grouped;\n }\n\n private createPointCard(point: MapPoint) {\n const card = document.createElement('article');\n card.className = 'point-card';\n card.dataset.pointId = String(point.id);\n const coordinateWarning = this.getPointCoordinateWarning(point);\n\n const title = document.createElement('h3');\n title.className = 'point-card__title';\n title.textContent = point.titulo || 'Sin nombre';\n card.appendChild(title);\n\n const addressBlock = document.createElement('div');\n addressBlock.className = 'point-card__address-block';\n\n const address = document.createElement('p');\n address.className = 'point-card__address';\n address.textContent = point.direccion || 'Sin direccion';\n addressBlock.appendChild(address);\n\n if (point.comuna_name) {\n const comuna = document.createElement('p');\n comuna.className = 'point-card__meta';\n comuna.textContent = point.comuna_name;\n addressBlock.appendChild(comuna);\n }\n\n if (point.provincia_name) {\n const provincia = document.createElement('p');\n provincia.className = 'point-card__meta';\n provincia.textContent = point.provincia_name;\n addressBlock.appendChild(provincia);\n }\n\n if (point.region_name) {\n const regionLine = document.createElement('p');\n regionLine.className = 'point-card__meta';\n regionLine.textContent = point.region_name;\n addressBlock.appendChild(regionLine);\n }\n\n card.appendChild(addressBlock);\n\n let mapPositionElement: HTMLElement | null = null;\n const position = this.getPointPosition(point);\n if (position) {\n const mapActions = document.createElement('div');\n mapActions.className = 'point-card__map-actions';\n\n const focusButton = document.createElement('button');\n focusButton.type = 'button';\n focusButton.className = 'point-card__focus';\n const icon = this.createIconElement('fa-solid fa-location-crosshairs');\n focusButton.appendChild(icon);\n focusButton.appendChild(document.createTextNode(' Ver en el mapa'));\n focusButton.addEventListener('click', () => {\n void this.focusPointWithZoom(position.lat, position.lng);\n this.scrollToPointCard(point.id);\n });\n mapActions.appendChild(focusButton);\n mapActions.appendChild(this.createMobileNavigationActions(position));\n mapPositionElement = mapActions;\n } else if (coordinateWarning) {\n const warning = document.createElement('div');\n warning.className = 'point-card__coordinate-warning';\n const icon = this.createIconElement('fa-solid fa-circle-info');\n warning.appendChild(icon);\n const text = document.createElement('span');\n text.textContent = coordinateWarning;\n warning.appendChild(text);\n mapPositionElement = warning;\n }\n\n const details = document.createElement('div');\n details.className = 'point-card__details';\n details.hidden = true;\n let hasDetails = false;\n\n const actions = document.createElement('div');\n actions.className = 'point-card__actions';\n let mapLinkElement: HTMLAnchorElement | null = null;\n\n if (point.url && point.url !== '#') {\n const siteLink = document.createElement('a');\n siteLink.href = point.url;\n siteLink.target = '_blank';\n siteLink.rel = 'noopener noreferrer';\n siteLink.className = 'point-card__action';\n const icon = this.createIconElement('fa-solid fa-globe');\n siteLink.appendChild(icon);\n siteLink.appendChild(document.createTextNode('Sitio web'));\n actions.appendChild(siteLink);\n }\n\n if (point.email) {\n const emailLink = document.createElement('a');\n emailLink.href = `mailto:${point.email}`;\n emailLink.target = '_blank';\n emailLink.rel = 'noopener noreferrer';\n emailLink.className = 'point-card__action point-card__action--text';\n const icon = this.createIconElement('fa-solid fa-envelope');\n emailLink.appendChild(icon);\n emailLink.appendChild(document.createTextNode(point.email));\n actions.appendChild(emailLink);\n }\n\n if (actions.childElementCount) {\n details.appendChild(actions);\n hasDetails = true;\n }\n\n if (point.telefonos?.length) {\n const contactSection = document.createElement('div');\n contactSection.className = 'point-card__contact';\n const contactTitle = document.createElement('div');\n contactTitle.className = 'point-card__contact-title';\n const icon = this.createIconElement('fa-solid fa-phone');\n contactTitle.appendChild(icon);\n contactTitle.appendChild(document.createTextNode('Telefonos'));\n contactSection.appendChild(contactTitle);\n\n const phoneList = document.createElement('ul');\n phoneList.className = 'point-card__phone-list';\n\n point.telefonos\n .slice()\n .sort((a, b) => a.orden - b.orden)\n .forEach((phone) => {\n const item = document.createElement('li');\n item.className = 'point-card__phone-item';\n\n const iconWrapper = document.createElement('span');\n iconWrapper.className = 'point-card__phone-icon';\n const hasWhatsapp = this.isWhatsappPhone(phone);\n if (hasWhatsapp) {\n const whatsappIcon = this.createIconElement('fa-brands fa-whatsapp');\n iconWrapper.appendChild(whatsappIcon);\n } else {\n iconWrapper.textContent = '-';\n }\n item.appendChild(iconWrapper);\n\n const content = document.createElement('div');\n content.className = 'point-card__phone-content';\n\n const name = document.createElement('span');\n name.className = 'point-card__phone-name';\n name.textContent = phone.nombre;\n content.appendChild(name);\n\n const numberEl = hasWhatsapp ? document.createElement('a') : document.createElement('span');\n numberEl.className = 'point-card__phone-number';\n if (hasWhatsapp) {\n const link = this.getWhatsappLink(phone.telefono);\n if (link) {\n (numberEl as HTMLAnchorElement).href = link;\n (numberEl as HTMLAnchorElement).target = '_blank';\n (numberEl as HTMLAnchorElement).rel = 'noopener noreferrer';\n numberEl.classList.add('point-card__phone-number--link');\n }\n }\n numberEl.textContent = phone.telefono;\n content.appendChild(numberEl);\n\n item.appendChild(content);\n phoneList.appendChild(item);\n });\n\n contactSection.appendChild(phoneList);\n details.appendChild(contactSection);\n hasDetails = true;\n }\n\n if (point.adicional) {\n const extra = document.createElement('p');\n extra.className = 'point-card__extra';\n extra.innerHTML = point.adicional;\n extra.querySelectorAll('a').forEach((link) => {\n link.classList.add('point-card__extra-link');\n const icon = this.createIconElement('fa-solid fa-arrow-up-right-from-square');\n icon.classList.add('point-card__extra-icon');\n link.appendChild(icon);\n });\n details.appendChild(extra);\n hasDetails = true;\n }\n\n if (point.googlelink) {\n mapLinkElement = document.createElement('a');\n mapLinkElement.href = point.googlelink;\n mapLinkElement.target = '_blank';\n mapLinkElement.rel = 'noopener noreferrer';\n mapLinkElement.className = 'point-card__action';\n const icon = this.createIconElement('fa-solid fa-map-location-dot');\n mapLinkElement.appendChild(icon);\n mapLinkElement.appendChild(document.createTextNode('Google Maps'));\n }\n\n if (mapLinkElement) {\n const mapWrapper = document.createElement('div');\n mapWrapper.className = 'point-card__actions';\n mapWrapper.appendChild(mapLinkElement);\n details.appendChild(mapWrapper);\n hasDetails = true;\n }\n\n if (hasDetails) {\n const toggle = document.createElement('button');\n toggle.type = 'button';\n toggle.className = 'point-card__toggle';\n const toggleIcon = this.createIconElement('fa-solid fa-circle-info');\n const toggleText = document.createElement('span');\n toggleText.textContent = 'Mas informacion';\n toggle.appendChild(toggleIcon);\n toggle.appendChild(toggleText);\n toggle.addEventListener('click', () => {\n const isHidden = details.hidden;\n details.hidden = !isHidden;\n toggleText.textContent = isHidden ? 'Ocultar informacion' : 'Mas informacion';\n toggleIcon.className = isHidden ? 'fa-solid fa-circle-xmark' : 'fa-solid fa-circle-info';\n });\n card.appendChild(toggle);\n card.appendChild(details);\n }\n\n if (mapPositionElement) {\n card.appendChild(mapPositionElement);\n }\n\n return card;\n }\n\n private createMobileNavigationActions(position: MapPosition) {\n const actions = document.createElement('div');\n actions.className = 'point-card__mobile-navigation';\n actions.appendChild(\n this.createMobileNavigationLink(\n `https://www.google.com/maps/dir/?api=1&destination=${position.lat},${position.lng}&travelmode=driving`,\n 'Ir con Google Maps',\n 'fa-brands fa-google'\n )\n );\n actions.appendChild(\n this.createMobileNavigationLink(\n `https://waze.com/ul?ll=${position.lat},${position.lng}&navigate=yes`,\n 'Ir con Waze',\n 'fa-brands fa-waze'\n )\n );\n return actions;\n }\n\n private createMobileNavigationLink(url: string, label: string, iconClass: string) {\n const link = document.createElement('a');\n link.href = url;\n link.target = '_blank';\n link.rel = 'noopener noreferrer';\n link.className = 'point-card__mobile-nav-link';\n link.appendChild(this.createIconElement(iconClass));\n link.appendChild(document.createTextNode(label));\n return link;\n }\n\n private getZoneForPoint(point: MapPointApi): ZoneKey {\n const normalizedRegion = this.normalizeRegionName(point.region_name || '');\n if (normalizedRegion && normalizedRegion in REGION_ZONE_MAP) {\n return REGION_ZONE_MAP[normalizedRegion];\n }\n if (normalizedRegion.includes('metropolitana')) {\n return 'rm';\n }\n if (\n normalizedRegion.includes('araucania') ||\n normalizedRegion.includes('rios') ||\n normalizedRegion.includes('lagos') ||\n normalizedRegion.includes('aysen') ||\n normalizedRegion.includes('magallanes')\n ) {\n return 'sur';\n }\n if (\n normalizedRegion.includes('arica') ||\n normalizedRegion.includes('tarapaca') ||\n normalizedRegion.includes('antofagasta') ||\n normalizedRegion.includes('atacama') ||\n normalizedRegion.includes('coquimbo')\n ) {\n return 'norte';\n }\n return 'centro';\n }\n\n private normalizeRegionName(input: string) {\n return input\n .toLowerCase()\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '')\n .trim();\n }\n\n private getMarcaRequestValue() {\n const normalized = this.normalizeBrandToken(this.marca);\n return BRAND_ALIASES[normalized] ?? this.marca;\n }\n\n private normalizeBrandKey(value: string) {\n const normalized = this.normalizeBrandToken(value);\n if (!normalized) {\n return 'default';\n }\n return BRAND_ALIASES[normalized] ?? normalized;\n }\n\n private normalizeBrandToken(value: string) {\n const normalized = value\n .toLowerCase()\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '')\n .replace(/[^a-z0-9]+/g, '');\n return normalized;\n }\n\n private getMarkerIcon(point?: Pick<MapPointApi, 'tipo'>) {\n const key = this.marcaKey || 'default';\n const localIconUrl = this.getLocalMarkerIconUrl(key, point);\n if (localIconUrl) {\n return localIconUrl;\n }\n if (this.markerIconBaseUrl) {\n return `${this.markerIconBaseUrl}${key}.png`;\n }\n if (this.defaultMarkerIconUrl) {\n return this.defaultMarkerIconUrl;\n }\n return null;\n }\n\n private getLocalMarkerIconUrl(key: string, point?: Pick<MapPointApi, 'tipo'>) {\n const pointTipoCode = point ? Number(point.tipo) : NaN;\n const tipoCode = Number.isFinite(pointTipoCode) ? pointTipoCode : this.tipoCode;\n const fileName = tipoCode === 1 ? `${key}_distribuidor.png` : `${key}.png`;\n return LOCAL_MARKER_ICON_URLS[`../pin/${fileName}`] ?? null;\n }\n\n private getPointCoordinateWarning(point: Pick<MapPointApi, 'lat' | 'lng'>) {\n if (this.getPointPosition(point)) {\n return null;\n }\n\n const lat = Number(point.lat);\n const lng = Number(point.lng);\n const rawCoordinates = `lat ${point.lat || 'sin dato'}, lng ${point.lng || 'sin dato'}`;\n if (!Number.isFinite(lat) || !Number.isFinite(lng)) {\n return `Ubicacion por revisar: ${rawCoordinates}.`;\n }\n return `Ubicacion por revisar: ${rawCoordinates}.`;\n }\n\n private getPointPosition(point: Pick<MapPointApi, 'lat' | 'lng'>): MapPosition | null {\n const lat = Number(point.lat);\n const lng = Number(point.lng);\n if (!this.isMappableCoordinate(lat, lng)) {\n return null;\n }\n return { lat, lng };\n }\n\n private isMappableCoordinate(lat: number, lng: number) {\n return (\n Number.isFinite(lat) &&\n Number.isFinite(lng) &&\n lat >= CONTINENTAL_CHILE_BOUNDS.minLat &&\n lat <= CONTINENTAL_CHILE_BOUNDS.maxLat &&\n lng >= CONTINENTAL_CHILE_BOUNDS.minLng &&\n lng <= CONTINENTAL_CHILE_BOUNDS.maxLng\n );\n }\n\n private updateMarkers(points: MapPoint[]) {\n const g = (window as any).google;\n if (!g || !this.map) {\n return;\n }\n this.markers.forEach((marker) => marker.setMap(null));\n this.markers = [];\n\n const validPoints: Array<{ point: MapPoint; position: MapPosition }> = [];\n points.forEach((point) => {\n const position = this.getPointPosition(point);\n if (position) {\n validPoints.push({ point, position });\n }\n });\n\n if (!validPoints.length) {\n return;\n }\n\n const bounds = new g.maps.LatLngBounds();\n\n validPoints.forEach(({ point, position }) => {\n const { lat, lng } = position;\n const iconUrl = this.getMarkerIcon(point);\n const icon =\n iconUrl && this.map\n ? {\n url: iconUrl,\n scaledSize: new g.maps.Size(64, 64),\n anchor: new g.maps.Point(32, 64)\n }\n : undefined;\n const marker = new g.maps.Marker({\n map: this.map,\n position: { lat, lng },\n title: point.titulo,\n icon\n });\n marker.addListener('click', () => {\n this.openPointModal(point);\n this.scrollToPointCard(point.id);\n });\n this.markers.push(marker);\n const markerPosition = marker.getPosition();\n if (markerPosition) {\n bounds.extend(markerPosition);\n }\n });\n\n if (!this.initialViewApplied && this.markers.length) {\n const position = this.markers[0].getPosition();\n if (position) {\n this.map.setCenter(position);\n this.map.setZoom(14);\n this.initialViewApplied = true;\n return;\n }\n }\n\n if (this.markers.length === 1) {\n const position = this.markers[0].getPosition();\n if (position) {\n this.map.setCenter(position);\n }\n this.map.setZoom(14);\n } else {\n this.map.fitBounds(bounds);\n }\n }\n\n private openPointModal(point: MapPoint) {\n if (!this.pointModalOverlayEl || !this.pointModalTitleEl || !this.pointModalBodyEl) {\n return;\n }\n this.pointModalTitleEl.textContent = point.titulo || 'Sin nombre';\n this.pointModalBodyEl.replaceChildren(this.createPointModalContent(point));\n this.pointModalOverlayEl.removeAttribute('hidden');\n this.pointModalCloseButton?.focus();\n }\n\n private closePointModal = () => {\n if (!this.pointModalOverlayEl) {\n return;\n }\n this.pointModalOverlayEl.setAttribute('hidden', '');\n this.pointModalBodyEl?.replaceChildren();\n };\n\n private handlePointModalOverlayClick = (event: Event) => {\n if (event.target === this.pointModalOverlayEl) {\n this.closePointModal();\n }\n };\n\n private handlePointModalKeydown = (event: KeyboardEvent) => {\n if (event.key === 'Escape' && this.pointModalOverlayEl && !this.pointModalOverlayEl.hasAttribute('hidden')) {\n this.closePointModal();\n }\n };\n\n private createPointModalContent(point: MapPoint) {\n const fragment = document.createDocumentFragment();\n\n if (point.portada) {\n const cover = document.createElement('img');\n cover.className = 'point-modal__cover';\n cover.src = point.portada;\n cover.alt = point.titulo || 'Imagen del punto';\n cover.loading = 'lazy';\n cover.addEventListener('error', () => cover.remove(), { once: true });\n fragment.appendChild(cover);\n }\n\n const locationSection = this.createPointModalSection();\n this.appendPointModalLine(locationSection, 'Direccion', point.direccion);\n this.appendPointModalLine(locationSection, 'Comuna', point.comuna_name);\n this.appendPointModalLine(locationSection, 'Provincia', point.provincia_name);\n this.appendPointModalLine(locationSection, 'Region', point.region_name);\n this.appendPointModalLine(locationSection, 'RUT', point.rut);\n if (locationSection.childElementCount) {\n fragment.appendChild(locationSection);\n }\n\n const contactSection = this.createPointModalSection();\n this.appendPointModalLine(contactSection, 'Correo', point.email);\n if (point.telefonos?.length) {\n const label = document.createElement('p');\n label.className = 'point-modal__line';\n const strong = document.createElement('span');\n strong.className = 'point-modal__label';\n strong.textContent = 'Telefonos:';\n label.appendChild(strong);\n contactSection.appendChild(label);\n\n const phoneList = document.createElement('ul');\n phoneList.className = 'point-modal__phone-list';\n point.telefonos\n .slice()\n .sort((a, b) => a.orden - b.orden)\n .forEach((phone) => {\n phoneList.appendChild(this.createPointModalPhoneItem(phone));\n });\n contactSection.appendChild(phoneList);\n }\n if (contactSection.childElementCount) {\n fragment.appendChild(contactSection);\n }\n\n if (point.adicional) {\n const extraSection = this.createPointModalSection();\n const extra = document.createElement('div');\n extra.className = 'point-modal__extra';\n extra.innerHTML = point.adicional;\n extra.querySelectorAll('a').forEach((link) => {\n link.target = '_blank';\n link.rel = 'noopener noreferrer';\n });\n extraSection.appendChild(extra);\n fragment.appendChild(extraSection);\n }\n\n const actions = this.createPointModalActions(point);\n if (actions.childElementCount) {\n fragment.appendChild(actions);\n }\n\n return fragment;\n }\n\n private createPointModalSection() {\n const section = document.createElement('div');\n section.className = 'point-modal__section';\n return section;\n }\n\n private appendPointModalLine(section: HTMLElement, label: string, value: string) {\n const normalized = (value ?? '').trim();\n if (!normalized || normalized === '#') {\n return;\n }\n const line = document.createElement('p');\n line.className = 'point-modal__line';\n const strong = document.createElement('span');\n strong.className = 'point-modal__label';\n strong.textContent = `${label}: `;\n line.appendChild(strong);\n line.appendChild(document.createTextNode(normalized));\n section.appendChild(line);\n }\n\n private createPointModalPhoneItem(phone: MapPointPhone) {\n const item = document.createElement('li');\n item.className = 'point-modal__phone-item';\n\n const label = document.createElement('span');\n label.className = 'point-modal__label';\n label.textContent = `${phone.nombre || 'Telefono'}: `;\n item.appendChild(label);\n\n const phoneNumber = (phone.telefono ?? '').trim();\n const whatsappLink = this.isWhatsappPhone(phone) ? this.getWhatsappLink(phoneNumber) : null;\n if (whatsappLink) {\n const link = document.createElement('a');\n link.href = whatsappLink;\n link.target = '_blank';\n link.rel = 'noopener noreferrer';\n link.className = 'point-modal__link';\n link.textContent = phoneNumber;\n item.appendChild(link);\n } else {\n item.appendChild(document.createTextNode(phoneNumber));\n }\n\n return item;\n }\n\n private createPointModalActions(point: MapPoint) {\n const actions = document.createElement('div');\n actions.className = 'point-modal__section point-modal__actions';\n\n if (point.url && point.url !== '#') {\n actions.appendChild(this.createPointModalLink(point.url, 'Sitio web'));\n }\n if (point.googlelink) {\n actions.appendChild(this.createPointModalLink(point.googlelink, 'Google Maps'));\n }\n if (point.email) {\n actions.appendChild(this.createPointModalLink(`mailto:${point.email}`, 'Enviar correo', false));\n }\n\n return actions;\n }\n\n private createPointModalLink(href: string, text: string, external = true) {\n const link = document.createElement('a');\n link.href = href;\n link.className = 'point-modal__link';\n link.textContent = text;\n if (external) {\n link.target = '_blank';\n link.rel = 'noopener noreferrer';\n }\n return link;\n }\n\n private handleZoneButtonClick = (event: Event) => {\n const button = event.currentTarget as HTMLButtonElement;\n const zone = button.dataset.zone as ZoneKey;\n if (!zone) {\n return;\n }\n this.setActiveZone(zone);\n this.scrollToZoneSection(zone);\n };\n\n private setActiveZone(_zone: ZoneFilter) {}\n\n private scrollToZoneSection(zone: ZoneKey) {\n if (!this.zonesContainer) {\n return;\n }\n const section = this.zonesContainer.querySelector<HTMLElement>(`[data-zone-section=\"${zone}\"]`);\n if (!section) {\n return;\n }\n section.scrollIntoView({ behavior: 'smooth', block: 'start' });\n }\n\n private updateZoneButtons() {\n this.zoneButtons.forEach((btn) => {\n const zone = btn.dataset.zone as ZoneKey;\n const isActive = this.activeZone === zone;\n btn.classList.toggle('is-active', isActive);\n btn.setAttribute('aria-pressed', String(isActive));\n });\n }\n\n private updateZoneButtonCounts() {\n this.zoneButtons.forEach((btn) => {\n const zone = btn.dataset.zone as ZoneKey;\n const baseLabel = btn.dataset.label || btn.textContent || '';\n btn.textContent = baseLabel;\n });\n }\n\n private updateZoneVisibility() {\n if (!this.zonesContainer) {\n return;\n }\n const sections = this.zonesContainer.querySelectorAll<HTMLElement>('[data-zone-section]');\n sections.forEach((section) => {\n section.removeAttribute('hidden');\n });\n }\n\n private handleNearestClick = () => {\n if (!navigator.geolocation) {\n alert('La geolocalizacion no esta soportada en este navegador.');\n return;\n }\n navigator.geolocation.getCurrentPosition(\n (pos) => {\n const { latitude, longitude } = pos.coords;\n const nearest = this.findNearestPoint(latitude, longitude);\n if (nearest) {\n const nearestPosition = this.getPointPosition(nearest);\n if (nearestPosition) {\n this.centerMapOnPoint(nearestPosition.lat, nearestPosition.lng);\n }\n this.scrollToPointCard(nearest.id);\n } else {\n alert('No hay puntos disponibles para calcular la tienda cercana.');\n }\n },\n () => {\n alert('No se pudo obtener tu ubicacion.');\n }\n );\n };\n\n private findNearestPoint(lat: number, lng: number): MapPoint | null {\n if (!this.points.length) {\n return null;\n }\n let nearest: MapPoint | null = null;\n let bestDistance = Infinity;\n this.points.forEach((point) => {\n const position = this.getPointPosition(point);\n if (!position) {\n return;\n }\n const distance = this.haversine(lat, lng, position.lat, position.lng);\n if (distance < bestDistance) {\n bestDistance = distance;\n nearest = point;\n }\n });\n return nearest;\n }\n\n private haversine(lat1: number, lon1: number, lat2: number, lon2: number) {\n const toRad = (deg: number) => (deg * Math.PI) / 180;\n const R = 6371e3;\n const dLat = toRad(lat2 - lat1);\n const dLon = toRad(lon2 - lon1);\n const a =\n Math.sin(dLat / 2) * Math.sin(dLat / 2) +\n Math.cos(toRad(lat1)) * Math.cos(toRad(lat2)) * Math.sin(dLon / 2) * Math.sin(dLon / 2);\n const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\n return R * c;\n }\n\n private scrollToPointCard(pointId: number) {\n if (!this.zonesContainer) {\n return;\n }\n const card = this.zonesContainer.querySelector<HTMLElement>(`[data-point-id=\"${pointId}\"]`);\n if (!card) {\n return;\n }\n card.scrollIntoView({ behavior: 'smooth', block: 'center' });\n this.highlightPointCard(card);\n }\n\n private highlightPointCard(card: HTMLElement) {\n if (this.highlightTimeout !== null) {\n clearTimeout(this.highlightTimeout);\n this.highlightTimeout = null;\n }\n this.zonesContainer?.querySelectorAll('.point-card--highlight').forEach((el) => {\n el.classList.remove('point-card--highlight');\n });\n card.classList.add('point-card--highlight');\n this.highlightTimeout = window.setTimeout(() => {\n card.classList.remove('point-card--highlight');\n this.highlightTimeout = null;\n }, 3500);\n }\n\n private setComponentState(state: 'loading' | 'ready' | 'error') {\n if (!this.componentMessageEl || !this.mapLayoutEl) {\n return;\n }\n if (state === 'ready') {\n this.componentMessageEl.setAttribute('hidden', '');\n this.mapLayoutEl.removeAttribute('hidden');\n } else {\n const text = state === 'loading' ? 'Cargando puntos...' : 'Mapa temporalmente no disponible';\n this.componentMessageEl.textContent = text;\n this.componentMessageEl.removeAttribute('hidden');\n this.mapLayoutEl.setAttribute('hidden', '');\n }\n }\n\n private centerMapOnPoint(lat: number, lng: number, targetZoom = 14) {\n const g = (window as any).google;\n if (!g || !this.map || !Number.isFinite(lat) || !Number.isFinite(lng)) {\n return;\n }\n const currentZoom = typeof this.map.getZoom === 'function' ? this.map.getZoom() : null;\n const needsZoom = !currentZoom || currentZoom < targetZoom;\n this.animateMapPan(lat, lng, () => {\n if (needsZoom) {\n this.map.setZoom(targetZoom);\n }\n });\n }\n\n private async focusPointWithZoom(lat: number, lng: number) {\n const g = (window as any).google;\n if (!g || !this.map || !Number.isFinite(lat) || !Number.isFinite(lng)) {\n return;\n }\n\n await this.animateZoomTo(8, 800);\n await this.wait(500);\n await new Promise<void>((resolve) => {\n this.animateMapPan(lat, lng, resolve);\n });\n await this.wait(500);\n await this.animateZoomTo(18, 800);\n }\n\n private wait(ms: number) {\n return new Promise<void>((resolve) => {\n window.setTimeout(resolve, ms);\n });\n }\n\n private async animateZoomTo(targetZoom: number, duration = 600) {\n const g = (window as any).google;\n if (\n !g ||\n !this.map ||\n typeof this.map.getZoom !== 'function' ||\n typeof this.map.setZoom !== 'function'\n ) {\n return;\n }\n const startZoom = this.map.getZoom();\n if (!Number.isFinite(startZoom)) {\n this.map.setZoom(targetZoom);\n return;\n }\n const delta = targetZoom - startZoom;\n if (Math.abs(delta) < 0.01) {\n this.map.setZoom(targetZoom);\n return;\n }\n\n await new Promise<void>((resolve) => {\n const startTime = performance.now();\n const ease = (t: number) => 1 - Math.pow(1 - t, 3);\n\n const step = (now: number) => {\n const elapsed = now - startTime;\n const progress = Math.min(elapsed / duration, 1);\n const eased = ease(progress);\n const nextZoom = startZoom + delta * eased;\n this.map.setZoom(Math.round(nextZoom * 100) / 100);\n if (progress < 1) {\n requestAnimationFrame(step);\n } else {\n this.map.setZoom(targetZoom);\n resolve();\n }\n };\n\n requestAnimationFrame(step);\n });\n }\n\n private animateMapPan(targetLat: number, targetLng: number, onComplete?: () => void) {\n const g = (window as any).google;\n if (!g || !this.map) {\n return;\n }\n if (this.panAnimationFrame !== null) {\n cancelAnimationFrame(this.panAnimationFrame);\n this.panAnimationFrame = null;\n }\n const startCenter = this.map.getCenter();\n if (!startCenter) {\n this.map.setCenter({ lat: targetLat, lng: targetLng });\n onComplete?.();\n return;\n }\n const startLat = startCenter.lat();\n const startLng = startCenter.lng();\n const deltaLat = targetLat - startLat;\n const deltaLng = targetLng - startLng;\n const duration = 600;\n const startTime = performance.now();\n\n const ease = (t: number) => 1 - Math.pow(1 - t, 3);\n\n const step = (now: number) => {\n const elapsed = now - startTime;\n const progress = Math.min(elapsed / duration, 1);\n const eased = ease(progress);\n const nextLat = startLat + deltaLat * eased;\n const nextLng = startLng + deltaLng * eased;\n this.map.setCenter({ lat: nextLat, lng: nextLng });\n if (progress < 1) {\n this.panAnimationFrame = requestAnimationFrame(step);\n } else {\n this.panAnimationFrame = null;\n onComplete?.();\n }\n };\n\n this.panAnimationFrame = requestAnimationFrame(step);\n }\n\n private static ensureFontAwesome() {\n if (RsMap.fontAwesomeAttached) {\n return;\n }\n const existing = document.querySelector(`link[href=\"${FONT_AWESOME_LOCAL_PATH}\"]`);\n if (existing) {\n RsMap.fontAwesomeAttached = true;\n return;\n }\n const link = document.createElement('link');\n link.rel = 'stylesheet';\n link.href = FONT_AWESOME_LOCAL_PATH;\n link.crossOrigin = 'anonymous';\n link.referrerPolicy = 'no-referrer';\n link.addEventListener('load', () => {\n RsMap.fontAwesomeAttached = true;\n });\n document.head.appendChild(link);\n }\n\n private createIconElement(className: string) {\n const icon = document.createElement('i');\n icon.className = className;\n icon.setAttribute('aria-hidden', 'true');\n return icon;\n }\n\n private isWhatsappPhone(phone: MapPointPhone) {\n return Boolean(phone.whatsapp || phone.watshapp);\n }\n\n private getWhatsappLink(phone: string) {\n const digits = phone.replace(/\\D+/g, '');\n if (!digits) {\n return null;\n }\n return `https://wa.me/${digits}`;\n }\n}\n","export default \"<?xml version=\\\"1.0\\\" encoding=\\\"utf-8\\\"?>\\r\\n<!-- Svg Vector Icons : http://www.onlinewebfonts.com/icon -->\\r\\n<!DOCTYPE svg PUBLIC \\\"-//W3C//DTD SVG 1.1//EN\\\" \\\"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\\\">\\r\\n<svg version=\\\"1.1\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\" x=\\\"0px\\\" y=\\\"0px\\\" viewBox=\\\"0 0 1000 1000\\\" enable-background=\\\"new 0 0 1000 1000\\\" xml:space=\\\"preserve\\\" style=\\\"fill: #ffffff;\\\">\\r\\n<metadata> Svg Vector Icons : http://www.onlinewebfonts.com/icon </metadata>\\r\\n<g><path d=\\\"M965.1,437.2c-24.9-8.4-52.2-8.7-78.1-13.5c-41.3-8.3-45.5-55.5-61.6-87c-17.4-27.9-1.8-58.7,17.9-80.2c16.7-22.2,45.4-50.8,21.8-78.9c-22.1-17.9-37.3-48.8-67.4-53.1c-30.2,2.7-50,30-74.7,45.2c-33.8,26.5-71.6-3.8-105.1-14.8c-30.2-6.9-45.2-36.2-45.6-65.2c-5.5-27.6-1.1-66.3-34.8-76.6c-36.1-3.3-99-13.6-104.1,37.7c-7.8,33.8-0.3,78.4-36.1,97.9c-30.8,10.5-59.5,30.1-92.3,31.9c-38.2-5.7-59.8-46-96.2-55.8c-32.6-2.2-48.3,31.8-70.7,49.7c-23.6,20.9-7.6,51.7,9.9,70.3c18.9,24.9,47.2,54.4,28.4,87.8c-16.4,31.3-19.6,75.8-57,89.7c-29.6,7.7-62.6,3.9-89.8,18.5c-25.6,30-28.1,94.8,5.4,120.4c36.3,14.9,84.8,0.8,111.7,35.3c13.3,29.6,28.4,59.5,35.6,91.1c-0.7,43.9-48.4,67.1-58.2,107.8c9.5,38.8,52.5,81.3,96.4,74.3c33.2-16.3,57.3-56.9,98.4-51.3c30.2,11.8,62.2,21.7,89.5,39.2c29.7,30.2,13.4,78.3,33.4,112.9c29.9,25.7,94.7,28.3,120.1-5.4c14.8-36.3,0.9-84.9,35.2-111.8c29.5-13.3,59.5-28.4,91-35.6c42.3,0,64.7,46,103.3,56c32.5,2.2,48.3-31.8,70.7-49.7c24.5-22.1,6.1-53.2-11.6-72.5c-18.9-24-45-53.3-26.7-85.6c16.4-31.3,19.6-75.7,57-89.6c29.6-7.7,62.6-4,89.8-18.5C996.1,527.5,998.6,462.7,965.1,437.2z M577.6,593.4c-21.6,18-49.5,28-77.5,27.9c-79.1,3-142.8-83.6-116.4-158.4c20.6-76,121.1-111.4,184.6-64.9C634.9,439.4,640,545.6,577.6,593.4z\\\"/></g>\\r\\n</svg>\"","export default \"<?xml version=\\\"1.0\\\" encoding=\\\"utf-8\\\"?>\\r\\n<!-- Svg Vector Icons : http://www.onlinewebfonts.com/icon -->\\r\\n<!DOCTYPE svg PUBLIC \\\"-//W3C//DTD SVG 1.1//EN\\\" \\\"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\\\">\\r\\n<svg version=\\\"1.1\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\" x=\\\"0px\\\" y=\\\"0px\\\" viewBox=\\\"0 0 1000 1000\\\" enable-background=\\\"new 0 0 1000 1000\\\" xml:space=\\\"preserve\\\" style=\\\"fill: #ffffff;\\\">\\r\\n<metadata> Svg Vector Icons : http://www.onlinewebfonts.com/icon </metadata>\\r\\n<g><g><g><path d=\\\"M171.2,451.6c-89,0-161.2,72.2-161.2,161.2c0,89,72.2,161.2,161.2,161.2c65,0,120.9-38.6,146.4-94l38.3,29.5c0,0,281.5,2,296.9-6.7c0,0-34.9-95.4,9.4-135.7c4.7-4.2,10.5-9.1,17-14.2c-7.4,18.5-11.6,38.7-11.6,59.9c0,89,72.2,161.2,161.2,161.2c89,0,161.2-72.2,161.2-161.2c0-89.1-72.2-161.2-161.2-161.2c-1.5,0-2.9,0.2-4.3,0.2c11.6-7.6,19.1-12.3,19.1-12.3l-12.1-10.8c0,0,34.9-8,26.9-25.5c-8.1-17.5-92.7-122.3-92.7-122.3s15-32.2-16-55.1l-14.9,32.2c0,0-38-26.2-53.1-21.2c-15.1,5-37.8,7.6-44.8,18.6l-7,6.6c0,0-2,11.6,9.6,28.7c0,0,116.4,35.8,121.9,62c0,0,8.1,16.6-26.7,20.6l-7,9.1l-18.7,1l-33.7-77.1c0,0-32.3,8.6-48.9,21.7l2.5,13.1c0,0-135.5-92.2-263,44.3c0,0-94.2,27.2-160.2-56.4c0,0-1-27.2-160.2-22.2l11.1,11.6c0,0-11.1,1-15.6,8.1c-4.5,7,2.5,14.6,38.8,14.6c0,0,82.1,93.7,145.1,88.2l89.7,43.3l39.8,68c0,0,0.1,5.8,0.5,14.8c-9.2,2-19.6,4.2-30.6,6.5C302.9,497.9,242.5,451.6,171.2,451.6z M828.8,501c61.7,0,111.8,50.2,111.8,111.8c0,61.7-50.2,111.8-111.8,111.8c-61.7,0-111.8-50.2-111.8-111.8C717,551.2,767.1,501,828.8,501z M171.2,724.7c-61.6,0-111.8-50.2-111.8-111.8c0-61.7,50.2-111.8,111.8-111.8c47.4,0,87.9,29.7,104.1,71.4c-59.3,12.6-118.1,25.2-118.1,25.2l7.6,41.8l116.1-5.1C270.9,685.7,225.5,724.7,171.2,724.7z M364.8,630.6c3.3,11.2,7.6,20.1,13.2,23.9l-51.8,2c2.2-7.9,3.9-16.1,4.9-24.5L364.8,630.6z\\\"/></g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g></g>\\r\\n</svg>\"","const DEFAULT_LABEL = 'WhatsApp';\nconst DEFAULT_ARIA_LABEL = 'Contactar por WhatsApp';\nconst DEFAULT_MENU_LABEL = 'compra de motos';\nconst DEFAULT_CLOSED_MESSAGE = 'En este momento no es posible atender su solicitud. Le invitamos a contactarnos dentro de nuestro horario de atencion.';\nconst DEFAULT_WHATSAPP_COLOR = '#25d366';\nconst DEFAULT_BRAND_COLOR = '#000000';\nconst DEFAULT_OPTION_ICON = 'motorcycle';\nconst WHATSAPP_BASE_URL = 'https://wa.me/';\nconst OPTION_ICON_SVGS = import.meta.glob('../ws/*.svg', {\n eager: true,\n import: 'default',\n query: '?raw'\n}) as Record<string, string>;\nconst BRAND_COLORS: Record<string, string> = {\n gasgas: '#cb0d25',\n hqv: '#002550',\n ktm: '#ff6600',\n rs: '#000000',\n voge: '#000000'\n};\nconst BRAND_ALIASES: Record<string, string> = {\n gas: 'gasgas',\n gasgas: 'gasgas',\n husqvarna: 'hqv'\n};\nconst DAY_ALIASES: Record<string, number> = {\n '0': 0,\n '7': 0,\n dom: 0,\n domingo: 0,\n sun: 0,\n sunday: 0,\n '1': 1,\n lun: 1,\n lunes: 1,\n mon: 1,\n monday: 1,\n '2': 2,\n mar: 2,\n martes: 2,\n tue: 2,\n tuesday: 2,\n '3': 3,\n mie: 3,\n miercoles: 3,\n wed: 3,\n wednesday: 3,\n '4': 4,\n jue: 4,\n jueves: 4,\n thu: 4,\n thursday: 4,\n '5': 5,\n vie: 5,\n viernes: 5,\n fri: 5,\n friday: 5,\n '6': 6,\n sab: 6,\n sabado: 6,\n sat: 6,\n saturday: 6\n};\nconst WEEKDAY_SHORT_BY_ENGLISH: Record<string, number> = {\n sun: 0,\n mon: 1,\n tue: 2,\n wed: 3,\n thu: 4,\n fri: 5,\n sat: 6\n};\nconst OPTION_ICON_SVGS_BY_KEY = Object.fromEntries(\n Object.entries(OPTION_ICON_SVGS).map(([path, svg]) => {\n const name = path.split('/').pop()?.replace(/\\.svg$/i, '') ?? '';\n return [normalizeToken(name), normalizeIconSvg(svg)];\n })\n);\n\ninterface WhatsappMenuOption {\n label: string;\n telefono: string;\n mensaje: string;\n target: string;\n icon: string;\n}\n\nfunction normalizeIconSvg(svg: string) {\n return svg\n .replace(/<\\?xml[\\s\\S]*?\\?>\\s*/i, '')\n .replace(/<!DOCTYPE[\\s\\S]*?>\\s*/i, '')\n .replace(/<metadata>[\\s\\S]*?<\\/metadata>\\s*/i, '')\n .replace(/<svg\\b/i, '<svg class=\"menu-link-icon\" aria-hidden=\"true\" focusable=\"false\"')\n .replace(/style=\"fill:\\s*#ffffff;?\"/i, 'style=\"fill: currentColor;\"');\n}\n\nfunction normalizeToken(value: string) {\n return value\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '')\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '');\n}\n\nfunction isIconUrl(value: string) {\n return /^(https?:\\/\\/|\\/\\/|data:image\\/|blob:|\\/|\\.\\/|\\.\\.\\/)/i.test(value.trim());\n}\n\nexport class RsWhatsapp extends HTMLElement {\n static tag = 'rs-whatsapp';\n\n private root: ShadowRoot;\n private buttonEl!: HTMLButtonElement;\n private menuEl!: HTMLElement;\n private generatedOptionsEl!: HTMLElement;\n private customMenuSlotEl!: HTMLSlotElement;\n private closedMessageEl!: HTMLElement;\n private closedMessageTextEl!: HTMLElement;\n private labelEl!: HTMLSpanElement;\n private childrenObserver?: MutationObserver;\n\n static get observedAttributes() {\n return [\n 'telefono',\n 'mensaje',\n 'label',\n 'menu-label',\n 'aria-label',\n 'position',\n 'show-label',\n 'target',\n 'marca',\n 'icon',\n 'horario',\n 'fuera-horario',\n 'mensaje-fuera-horario',\n 'time-zone'\n ];\n }\n\n constructor() {\n super();\n this.root = this.attachShadow({ mode: 'open' });\n this.root.innerHTML = `\n <style>\n :host {\n position: fixed;\n right: var(--rs-whatsapp-right, 24px);\n bottom: var(--rs-whatsapp-bottom, 24px);\n z-index: var(--rs-whatsapp-z-index, 9999);\n display: inline-block;\n --rs-whatsapp-brand-color: ${DEFAULT_WHATSAPP_COLOR};\n font-family: var(--rs-whatsapp-font-family, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif);\n }\n :host([position=\"bottom-left\"]) {\n right: auto;\n left: var(--rs-whatsapp-left, 24px);\n bottom: var(--rs-whatsapp-bottom, 24px);\n top: auto;\n }\n :host([position=\"top-right\"]) {\n right: var(--rs-whatsapp-right, 24px);\n left: auto;\n bottom: auto;\n top: var(--rs-whatsapp-top, 24px);\n }\n :host([position=\"top-left\"]) {\n right: auto;\n left: var(--rs-whatsapp-left, 24px);\n bottom: auto;\n top: var(--rs-whatsapp-top, 24px);\n }\n .button {\n box-sizing: border-box;\n border: 0;\n width: var(--rs-whatsapp-size, 60px);\n min-width: var(--rs-whatsapp-size, 60px);\n height: var(--rs-whatsapp-size, 60px);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 10px;\n border-radius: 999px;\n background: var(--rs-whatsapp-bg, ${DEFAULT_WHATSAPP_COLOR});\n color: var(--rs-whatsapp-color, #ffffff);\n box-shadow: var(--rs-whatsapp-shadow, 0 10px 24px rgb(0 0 0 / 22%));\n cursor: pointer;\n font: inherit;\n transition: transform 0.2s ease, box-shadow 0.2s ease, filter 0.2s ease;\n outline: none;\n }\n .button:hover,\n .button:focus-visible {\n transform: translateY(-2px);\n filter: brightness(1.03);\n box-shadow: var(--rs-whatsapp-shadow-hover, 0 14px 28px rgb(0 0 0 / 26%));\n }\n .button:active {\n transform: translateY(0);\n }\n .icon-stack {\n width: calc(var(--rs-whatsapp-size, 60px) * 0.52);\n height: calc(var(--rs-whatsapp-size, 60px) * 0.52);\n position: relative;\n flex: 0 0 auto;\n display: block;\n }\n .icon-stack svg {\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n display: block;\n transition: opacity 0.18s ease, transform 0.22s ease;\n }\n .whatsapp-icon {\n opacity: 1;\n transform: rotate(0deg) scale(1);\n }\n .close-icon {\n opacity: 0;\n transform: rotate(-90deg) scale(0.72);\n }\n :host([open]) .whatsapp-icon {\n opacity: 0;\n transform: rotate(90deg) scale(0.72);\n }\n :host([open]) .close-icon {\n opacity: 1;\n transform: rotate(0deg) scale(1);\n }\n .label {\n display: none;\n max-width: 180px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-size: 0.95rem;\n font-weight: 700;\n line-height: 1;\n }\n :host([show-label]) .button {\n width: auto;\n min-width: var(--rs-whatsapp-size, 60px);\n padding: 0 20px 0 16px;\n }\n :host([show-label]) .label {\n display: inline;\n }\n .menu {\n box-sizing: border-box;\n position: absolute;\n right: 0;\n bottom: calc(var(--rs-whatsapp-size, 60px) + 12px);\n width: min(var(--rs-whatsapp-menu-width, 280px), calc(100vw - 32px));\n padding: 8px;\n border: 1px solid var(--rs-whatsapp-menu-border, #e5e7eb);\n border-radius: var(--rs-whatsapp-menu-radius, 8px);\n background: var(--rs-whatsapp-menu-bg, #ffffff);\n color: var(--rs-whatsapp-menu-color, #111827);\n box-shadow: var(--rs-whatsapp-menu-shadow, 0 18px 38px rgb(0 0 0 / 18%));\n transform-origin: bottom right;\n }\n .menu[hidden] {\n display: none;\n }\n .menu-heading {\n padding: 10px 12px 12px;\n border-bottom: 1px solid var(--rs-whatsapp-menu-border, #e5e7eb);\n margin-bottom: 6px;\n text-align: center;\n }\n .menu-welcome,\n .menu-question {\n display: block;\n margin: 0;\n font-size: 0.92rem;\n font-weight: 600;\n line-height: 1.35;\n color: var(--rs-whatsapp-menu-muted, #4b5563);\n }\n .menu-brand {\n display: block;\n margin: 2px 0;\n font-size: 1.2rem;\n font-weight: 800;\n line-height: 1.2;\n color: var(--rs-whatsapp-menu-brand, #111827);\n }\n .menu-options {\n display: grid;\n gap: 2px;\n }\n .menu-options[hidden] {\n display: none;\n }\n .closed-message {\n margin: 0;\n padding: 14px 12px;\n border-radius: 6px;\n background: var(--rs-whatsapp-closed-bg, #f3f4f6);\n color: var(--rs-whatsapp-closed-color, #374151);\n font-size: 0.95rem;\n font-weight: 600;\n line-height: 1.35;\n text-align: center;\n white-space: pre-line;\n }\n .closed-message[hidden],\n slot[hidden] {\n display: none;\n }\n :host([position=\"bottom-left\"]) .menu {\n right: auto;\n left: 0;\n transform-origin: bottom left;\n }\n :host([position=\"top-right\"]) .menu {\n top: calc(var(--rs-whatsapp-size, 60px) + 12px);\n bottom: auto;\n transform-origin: top right;\n }\n :host([position=\"top-left\"]) .menu {\n top: calc(var(--rs-whatsapp-size, 60px) + 12px);\n right: auto;\n bottom: auto;\n left: 0;\n transform-origin: top left;\n }\n .menu-link,\n ::slotted(a),\n ::slotted(button) {\n box-sizing: border-box;\n width: 100%;\n min-height: 44px;\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 12px 14px;\n border: 0;\n border-radius: 6px;\n background: transparent;\n color: inherit;\n font: inherit;\n font-size: 0.95rem;\n font-weight: 700;\n line-height: 1.2;\n text-align: left;\n text-decoration: none;\n cursor: pointer;\n }\n .menu-link:hover,\n .menu-link:focus-visible,\n ::slotted(a:hover),\n ::slotted(a:focus-visible),\n ::slotted(button:hover),\n ::slotted(button:focus-visible) {\n background: var(--rs-whatsapp-menu-hover-bg, #f3f4f6);\n outline: none;\n }\n .menu-link[aria-disabled=\"true\"] {\n cursor: not-allowed;\n opacity: 0.62;\n }\n .menu-link-icon {\n width: 44px;\n height: 32px;\n flex: 0 0 auto;\n color: var(--rs-whatsapp-menu-icon-color, var(--rs-whatsapp-brand-color));\n object-fit: contain;\n }\n @media (max-width: 640px) {\n :host {\n right: var(--rs-whatsapp-mobile-right, 16px);\n bottom: var(--rs-whatsapp-mobile-bottom, 16px);\n }\n :host([position=\"bottom-left\"]) {\n left: var(--rs-whatsapp-mobile-left, 16px);\n }\n :host([position=\"top-right\"]) {\n top: var(--rs-whatsapp-mobile-top, 16px);\n }\n :host([position=\"top-left\"]) {\n left: var(--rs-whatsapp-mobile-left, 16px);\n top: var(--rs-whatsapp-mobile-top, 16px);\n }\n :host([show-label]) .label {\n max-width: 120px;\n }\n }\n @media (prefers-reduced-motion: reduce) {\n .button,\n .icon-stack svg {\n transition: none;\n }\n }\n </style>\n <div class=\"menu\" role=\"dialog\" aria-labelledby=\"rs-whatsapp-menu-title\" hidden>\n <div class=\"menu-heading\" id=\"rs-whatsapp-menu-title\">\n <span class=\"menu-welcome\">Bienvenido a</span>\n <span class=\"menu-brand\">RS-SHOP</span>\n <span class=\"menu-question\">¿En que te podemos ayudar?</span>\n </div>\n <div class=\"closed-message\" data-closed-message hidden>\n <slot name=\"fuera-horario\">\n <span data-closed-message-text></span>\n </slot>\n </div>\n <div class=\"menu-options\" data-generated-options></div>\n <slot name=\"menu\"></slot>\n </div>\n <button class=\"button\" type=\"button\" aria-haspopup=\"dialog\" aria-expanded=\"false\">\n <span class=\"icon-stack\" aria-hidden=\"true\">\n <svg class=\"whatsapp-icon\" viewBox=\"0 0 448 512\" focusable=\"false\">\n <path fill=\"currentColor\" d=\"M380.9 97.1c-41.9-42-97.7-65.1-157-65.1-122.4 0-222 99.6-222 222 0 39.1 10.2 77.3 29.6 111L0 480l117.7-30.9c32.4 17.7 68.9 27 106.1 27h.1c122.3 0 224.1-99.6 224.1-222 0-59.3-25.2-115-67.1-157zm-157 341.6c-33.2 0-65.7-8.9-94-25.7l-6.7-4-69.8 18.3 18.6-68.1-4.4-7c-18.5-29.4-28.2-63.3-28.2-98.2 0-101.7 82.8-184.5 184.6-184.5 49.3 0 95.6 19.2 130.4 54.1s56.2 81.2 56.1 130.5c0 101.8-84.9 184.6-186.6 184.6zM325.1 300.5c-5.5-2.8-32.8-16.2-37.9-18-5.1-1.9-8.8-2.8-12.5 2.8s-14.3 18-17.6 21.8c-3.2 3.7-6.5 4.2-12 1.4-32.6-16.3-54-29.1-75.5-66-5.7-9.8 5.7-9.1 16.3-30.3 1.8-3.7.9-6.9-.5-9.7s-12.5-30.1-17.1-41.2c-4.5-10.8-9.1-9.3-12.5-9.5-3.2-.2-6.9-.2-10.6-.2s-9.7 1.4-14.8 6.9c-5.1 5.6-19.4 19-19.4 46.3s19.9 53.7 22.6 57.4c2.8 3.7 39.1 59.7 94.8 83.8 35.2 15.2 49 16.5 66.6 13.9 10.7-1.6 32.8-13.4 37.4-26.4s4.6-24.1 3.2-26.4c-1.3-2.5-5-3.9-10.5-6.6z\" />\n </svg>\n <svg class=\"close-icon\" viewBox=\"0 0 24 24\" focusable=\"false\">\n <path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2.6\" d=\"M6 6l12 12M18 6L6 18\" />\n </svg>\n </span>\n <span class=\"label\"></span>\n </button>\n `;\n }\n\n connectedCallback() {\n this.buttonEl = this.root.querySelector<HTMLButtonElement>('button')!;\n this.menuEl = this.root.querySelector<HTMLElement>('.menu')!;\n this.generatedOptionsEl = this.root.querySelector<HTMLElement>('[data-generated-options]')!;\n this.customMenuSlotEl = this.root.querySelector<HTMLSlotElement>('slot[name=\"menu\"]')!;\n this.closedMessageEl = this.root.querySelector<HTMLElement>('[data-closed-message]')!;\n this.closedMessageTextEl = this.root.querySelector<HTMLElement>('[data-closed-message-text]')!;\n this.labelEl = this.root.querySelector<HTMLSpanElement>('.label')!;\n this.buttonEl.addEventListener('click', this.handleButtonClick);\n this.menuEl.addEventListener('click', this.handleMenuClick);\n this.customMenuSlotEl.addEventListener('slotchange', this.handleCustomMenuSlotChange);\n document.addEventListener('click', this.handleDocumentClick);\n document.addEventListener('keydown', this.handleDocumentKeydown);\n this.childrenObserver = new MutationObserver(this.handleChildrenMutation);\n this.childrenObserver.observe(this, {\n childList: true,\n subtree: true,\n characterData: true,\n attributes: true,\n attributeFilter: ['label', 'telefono', 'mensaje', 'target', 'icon', 'dias', 'desde', 'hasta']\n });\n this.syncAttributesToState();\n }\n\n disconnectedCallback() {\n this.buttonEl?.removeEventListener('click', this.handleButtonClick);\n this.menuEl?.removeEventListener('click', this.handleMenuClick);\n this.customMenuSlotEl?.removeEventListener('slotchange', this.handleCustomMenuSlotChange);\n document.removeEventListener('click', this.handleDocumentClick);\n document.removeEventListener('keydown', this.handleDocumentKeydown);\n this.childrenObserver?.disconnect();\n }\n\n attributeChangedCallback() {\n if (this.isConnected) {\n this.syncAttributesToState();\n }\n }\n\n private syncAttributesToState() {\n const label = (this.getAttribute('label') ?? '').trim() || DEFAULT_LABEL;\n const menuLabel = (this.getAttribute('menu-label') ?? '').trim() || DEFAULT_MENU_LABEL;\n const ariaLabel = (this.getAttribute('aria-label') ?? '').trim() || DEFAULT_ARIA_LABEL;\n const target = (this.getAttribute('target') ?? '_blank').trim() || '_blank';\n const icon = (this.getAttribute('icon') ?? DEFAULT_OPTION_ICON).trim() || DEFAULT_OPTION_ICON;\n const isClosed = this.isOutsideBusinessHours();\n\n this.labelEl.textContent = label;\n this.buttonEl.setAttribute('aria-label', ariaLabel);\n this.buttonEl.setAttribute('title', ariaLabel);\n this.syncBrandVariant();\n\n this.closedMessageTextEl.textContent = this.getClosedMessage();\n this.closedMessageEl.hidden = !isClosed;\n this.customMenuSlotEl.hidden = isClosed;\n\n if (isClosed) {\n this.generatedOptionsEl.hidden = true;\n this.generatedOptionsEl.replaceChildren();\n return;\n }\n\n this.renderMenuOptions(menuLabel, target, icon);\n }\n\n private buildWhatsappUrl(telefonoValue: string | null, mensajeValue: string | null) {\n const telefono = this.sanitizePhone(telefonoValue);\n\n if (!telefono) {\n return '';\n }\n\n const mensaje = (mensajeValue ?? '').trim();\n const query = mensaje ? `?text=${encodeURIComponent(mensaje)}` : '';\n\n return `${WHATSAPP_BASE_URL}${telefono}${query}`;\n }\n\n private sanitizePhone(value: string | null) {\n return (value ?? '').replace(/[^\\d]/g, '');\n }\n\n private syncBrandVariant() {\n const marca = (this.getAttribute('marca') ?? '').trim();\n\n if (!marca) {\n this.style.setProperty('--rs-whatsapp-brand-color', DEFAULT_WHATSAPP_COLOR);\n return;\n }\n\n const brandKey = this.normalizeBrandKey(marca);\n const color = BRAND_COLORS[brandKey] ?? DEFAULT_BRAND_COLOR;\n this.style.setProperty('--rs-whatsapp-brand-color', color);\n }\n\n private normalizeBrandKey(value: string) {\n const normalized = normalizeToken(value);\n return BRAND_ALIASES[normalized] ?? normalized;\n }\n\n private renderMenuOptions(fallbackLabel: string, fallbackTarget: string, fallbackIcon: string) {\n const hasCustomMenu = this.customMenuSlotEl.assignedElements({ flatten: true }).length > 0;\n\n if (hasCustomMenu) {\n this.generatedOptionsEl.hidden = true;\n this.generatedOptionsEl.replaceChildren();\n return;\n }\n\n const options = this.getWhatsappOptions(fallbackLabel, fallbackTarget, fallbackIcon).filter((option) => {\n return this.sanitizePhone(option.telefono);\n });\n const links = options.map((option) => this.createMenuLink(option));\n\n this.generatedOptionsEl.replaceChildren(...links);\n this.generatedOptionsEl.hidden = false;\n }\n\n private getWhatsappOptions(fallbackLabel: string, fallbackTarget: string, fallbackIcon: string): WhatsappMenuOption[] {\n const optionElements = Array.from(this.querySelectorAll<RsWhatsappOption>(RsWhatsappOption.tag));\n\n if (optionElements.length) {\n return optionElements.map((optionEl) => ({\n label: (optionEl.getAttribute('label') ?? optionEl.textContent ?? '').trim() || fallbackLabel,\n telefono: (optionEl.getAttribute('telefono') ?? '').trim(),\n mensaje: (optionEl.getAttribute('mensaje') ?? '').trim(),\n target: (optionEl.getAttribute('target') ?? fallbackTarget).trim() || fallbackTarget,\n icon: (optionEl.getAttribute('icon') ?? fallbackIcon).trim() || fallbackIcon\n }));\n }\n\n return [\n {\n label: fallbackLabel,\n telefono: (this.getAttribute('telefono') ?? '').trim(),\n mensaje: (this.getAttribute('mensaje') ?? '').trim(),\n target: fallbackTarget,\n icon: fallbackIcon\n }\n ];\n }\n\n private createMenuLink(option: WhatsappMenuOption) {\n const linkEl = document.createElement('a');\n const labelEl = document.createElement('span');\n const href = this.buildWhatsappUrl(option.telefono, option.mensaje);\n\n linkEl.className = 'menu-link';\n linkEl.rel = 'noopener noreferrer';\n linkEl.target = option.target;\n labelEl.className = 'menu-label';\n labelEl.textContent = option.label;\n const iconEl = this.createOptionIcon(option.icon);\n\n if (iconEl) {\n linkEl.append(iconEl);\n }\n\n linkEl.append(labelEl);\n\n if (href) {\n linkEl.href = href;\n linkEl.tabIndex = 0;\n return linkEl;\n }\n\n linkEl.setAttribute('aria-disabled', 'true');\n linkEl.tabIndex = -1;\n return linkEl;\n }\n\n private createOptionIcon(icon: string) {\n const normalizedIcon = icon.trim();\n const iconKey = normalizeToken(normalizedIcon);\n\n if (iconKey === 'none') {\n return null;\n }\n\n if (isIconUrl(normalizedIcon)) {\n const imageEl = document.createElement('img');\n imageEl.className = 'menu-link-icon';\n imageEl.src = normalizedIcon;\n imageEl.alt = '';\n imageEl.setAttribute('aria-hidden', 'true');\n imageEl.decoding = 'async';\n return imageEl;\n }\n\n const iconSvg = OPTION_ICON_SVGS_BY_KEY[iconKey || DEFAULT_OPTION_ICON];\n\n if (!iconSvg) {\n return null;\n }\n\n const template = document.createElement('template');\n template.innerHTML = iconSvg;\n return template.content.firstElementChild?.cloneNode(true) ?? document.createElement('span');\n }\n\n private getClosedMessage() {\n const message = (this.getAttribute('mensaje-fuera-horario') ?? '').trim() || DEFAULT_CLOSED_MESSAGE;\n const scheduleSummary = this.getScheduleSummary();\n\n return scheduleSummary ? `${message}\\nHorario de atencion:\\n${scheduleSummary}` : message;\n }\n\n private isOutsideBusinessHours() {\n const manualClosedValue = this.getAttribute('fuera-horario');\n\n if (manualClosedValue !== null) {\n const normalized = normalizeToken(manualClosedValue);\n return normalized !== 'false' && normalized !== '0' && normalized !== 'no';\n }\n\n const schedule = this.getScheduleSegments().join(';');\n\n if (!schedule) {\n return false;\n }\n\n return !this.isWithinBusinessHours(schedule);\n }\n\n private getScheduleSegments() {\n const scheduleElements = Array.from(this.querySelectorAll<RsWhatsappSchedule>(RsWhatsappSchedule.tag));\n\n if (scheduleElements.length) {\n return scheduleElements\n .map((scheduleEl) => {\n const days = (scheduleEl.getAttribute('dias') ?? '').trim();\n const start = (scheduleEl.getAttribute('desde') ?? '').trim();\n const end = (scheduleEl.getAttribute('hasta') ?? '').trim();\n\n if (!days || !start || !end) {\n return '';\n }\n\n return `${days} ${start}-${end}`;\n })\n .filter(Boolean);\n }\n\n return (this.getAttribute('horario') ?? '')\n .split(';')\n .map((segment) => segment.trim())\n .filter(Boolean);\n }\n\n private getScheduleSummary() {\n const scheduleElements = Array.from(this.querySelectorAll<RsWhatsappSchedule>(RsWhatsappSchedule.tag));\n\n if (scheduleElements.length) {\n return scheduleElements\n .map((scheduleEl) => {\n const days = (scheduleEl.getAttribute('dias') ?? '').trim();\n const start = (scheduleEl.getAttribute('desde') ?? '').trim();\n const end = (scheduleEl.getAttribute('hasta') ?? '').trim();\n\n if (!days || !start || !end) {\n return '';\n }\n\n return `${days} ${start}-${end}`;\n })\n .filter(Boolean)\n .join('\\n');\n }\n\n return (this.getAttribute('horario') ?? '')\n .split(';')\n .map((segment) => segment.trim())\n .filter(Boolean)\n .join('\\n');\n }\n\n private isWithinBusinessHours(schedule: string) {\n const currentTime = this.getCurrentTimeParts();\n\n return schedule.split(';').some((segment) => {\n return this.isScheduleSegmentActive(segment, currentTime.day, currentTime.minutes);\n });\n }\n\n private getCurrentTimeParts() {\n const timeZone = (this.getAttribute('time-zone') ?? '').trim();\n\n if (!timeZone) {\n const now = new Date();\n return {\n day: now.getDay(),\n minutes: now.getHours() * 60 + now.getMinutes()\n };\n }\n\n try {\n const now = new Date();\n const weekday = new Intl.DateTimeFormat('en-US', {\n timeZone,\n weekday: 'short'\n })\n .format(now)\n .toLowerCase();\n const timeParts = new Intl.DateTimeFormat('en-US', {\n timeZone,\n hour12: false,\n hour: '2-digit',\n minute: '2-digit'\n }).formatToParts(now);\n const hour = Number(timeParts.find((part) => part.type === 'hour')?.value ?? 0) % 24;\n const minute = Number(timeParts.find((part) => part.type === 'minute')?.value ?? 0);\n\n return {\n day: WEEKDAY_SHORT_BY_ENGLISH[weekday] ?? now.getDay(),\n minutes: hour * 60 + minute\n };\n } catch {\n const now = new Date();\n return {\n day: now.getDay(),\n minutes: now.getHours() * 60 + now.getMinutes()\n };\n }\n }\n\n private isScheduleSegmentActive(segment: string, currentDay: number, currentMinutes: number) {\n const match = segment\n .trim()\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '')\n .toLowerCase()\n .match(/^(.+?)\\s+(\\d{1,2}:\\d{2})\\s*-\\s*(\\d{1,2}:\\d{2})$/);\n\n if (!match) {\n return false;\n }\n\n const days = this.parseScheduleDays(match[1]);\n const startMinutes = this.parseScheduleTime(match[2]);\n const endMinutes = this.parseScheduleTime(match[3]);\n\n if (!days.includes(currentDay) || startMinutes === null || endMinutes === null) {\n return false;\n }\n\n if (startMinutes <= endMinutes) {\n return currentMinutes >= startMinutes && currentMinutes <= endMinutes;\n }\n\n return currentMinutes >= startMinutes || currentMinutes <= endMinutes;\n }\n\n private parseScheduleDays(value: string) {\n const normalized = value\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '')\n .toLowerCase()\n .replace(/\\s+/g, '');\n\n if (normalized === '*' || normalized === 'todos' || normalized === 'all') {\n return [0, 1, 2, 3, 4, 5, 6];\n }\n\n return normalized.split(',').flatMap((part) => {\n const [startToken, endToken] = part.split('-');\n const startDay = this.parseScheduleDay(startToken);\n const endDay = endToken ? this.parseScheduleDay(endToken) : startDay;\n\n if (startDay === null || endDay === null) {\n return [];\n }\n\n if (startDay === endDay) {\n return [startDay];\n }\n\n const days: number[] = [];\n let currentDay = startDay;\n\n while (true) {\n days.push(currentDay);\n\n if (currentDay === endDay) {\n return days;\n }\n\n currentDay = (currentDay + 1) % 7;\n }\n });\n }\n\n private parseScheduleDay(value: string | undefined) {\n if (!value) {\n return null;\n }\n\n const key = normalizeToken(value);\n return DAY_ALIASES[key] ?? null;\n }\n\n private parseScheduleTime(value: string) {\n const [hourValue, minuteValue] = value.split(':');\n const hour = Number(hourValue);\n const minute = Number(minuteValue);\n\n if (!Number.isInteger(hour) || !Number.isInteger(minute) || hour < 0 || hour > 23 || minute < 0 || minute > 59) {\n return null;\n }\n\n return hour * 60 + minute;\n }\n\n private setMenuOpen(isOpen: boolean) {\n this.menuEl.hidden = !isOpen;\n this.buttonEl.setAttribute('aria-expanded', String(isOpen));\n this.toggleAttribute('open', isOpen);\n }\n\n private handleButtonClick = () => {\n if (this.menuEl.hidden) {\n this.syncAttributesToState();\n }\n\n this.setMenuOpen(this.menuEl.hidden);\n };\n\n private handleMenuClick = (event: MouseEvent) => {\n const path = event.composedPath();\n const disabledLink = path.find((node) => {\n return node instanceof HTMLAnchorElement && node.getAttribute('aria-disabled') === 'true';\n });\n\n if (disabledLink) {\n event.preventDefault();\n return;\n }\n\n const interactiveElement = path.find((node) => {\n return node instanceof HTMLAnchorElement || node instanceof HTMLButtonElement;\n });\n\n if (interactiveElement) {\n this.setMenuOpen(false);\n }\n };\n\n private handleCustomMenuSlotChange = () => {\n this.syncAttributesToState();\n };\n\n private handleChildrenMutation = () => {\n this.syncAttributesToState();\n };\n\n private handleDocumentClick = (event: MouseEvent) => {\n if (this.menuEl.hidden || event.composedPath().includes(this)) {\n return;\n }\n\n this.setMenuOpen(false);\n };\n\n private handleDocumentKeydown = (event: KeyboardEvent) => {\n if (this.menuEl.hidden || event.key !== 'Escape') {\n return;\n }\n\n this.setMenuOpen(false);\n this.buttonEl.focus();\n };\n}\n\nexport class RsWhatsappOption extends HTMLElement {\n static tag = 'rs-whatsapp-option';\n}\n\nexport class RsWhatsappSchedule extends HTMLElement {\n static tag = 'rs-whatsapp-schedule';\n}\n","import { safeDefine } from './utils/define';\nimport { RsMap } from './components/rs-map';\nimport { RsWhatsapp, RsWhatsappOption, RsWhatsappSchedule } from './components/rs-whatsapp';\n\n\n// En dev, registramos directamente para probar en el navegador\nsafeDefine(RsMap.tag, RsMap);\nsafeDefine(RsWhatsappOption.tag, RsWhatsappOption);\nsafeDefine(RsWhatsappSchedule.tag, RsWhatsappSchedule);\nsafeDefine(RsWhatsapp.tag, RsWhatsapp);\n\nexport { RsMap, RsWhatsapp, RsWhatsappOption, RsWhatsappSchedule, safeDefine };\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'rs-map': RsMap;\n 'rs-whatsapp': RsWhatsapp;\n 'rs-whatsapp-option': RsWhatsappOption;\n 'rs-whatsapp-schedule': RsWhatsappSchedule;\n }\n}\n"],"names":["safeDefine","tag","Ctor","__vite_glob_1_0","__vite_glob_1_1","__vite_glob_1_2","__vite_glob_1_3","__vite_glob_1_4","__vite_glob_1_5","__vite_glob_1_6","__vite_glob_1_7","__vite_glob_1_8","__vite_glob_1_9","LOCAL_POINTS_LOADERS","m","LOCAL_MARKER_ICON_URLS","DEFAULT_BRAND_COLOR","FONT_AWESOME_LOCAL_PATH","DEFAULT_POINTS_API_URL","BRAND_COLORS","BRAND_ALIASES","TYPE_CODES","ZONE_ORDER","ZONE_LABELS","TYPE_LABELS","CONTINENTAL_CHILE_BOUNDS","DEFAULT_POINTS_CACHE_TTL_MS","POINTS_CACHE_DB_NAME","POINTS_CACHE_STORE_NAME","REGION_ZONE_MAP","_RsMap","__publicField","_a","event","zone","pos","latitude","longitude","nearest","nearestPosition","btn","_b","_c","name","_oldValue","newValue","resolve","reject","existingScript","script","params","error","g","initialCenter","firstPoint","point","position","value","normalized","days","label","normalizedCode","color","numeric","controller","marcaRequestValue","hasQuery","needsAmp","separator","requestUrl","cacheKey","cachedPayload","hasFreshCache","localFallbackPayload","response","payload","typedPayload","points","unmappablePoints","marca","tipoCode","path","existingRequest","loader","request","parsedPayload","dbEntry","raw","parsed","entry","db","result","grouped","fragment","zoneKey","section","header","title","empty","list","card","coordinateWarning","addressBlock","address","comuna","provincia","regionLine","mapPositionElement","mapActions","focusButton","icon","warning","text","details","hasDetails","actions","mapLinkElement","siteLink","emailLink","contactSection","contactTitle","phoneList","a","b","phone","item","iconWrapper","hasWhatsapp","whatsappIcon","content","numberEl","link","extra","mapWrapper","toggle","toggleIcon","toggleText","isHidden","url","iconClass","normalizedRegion","input","key","localIconUrl","pointTipoCode","fileName","lat","lng","rawCoordinates","marker","validPoints","bounds","iconUrl","markerPosition","cover","locationSection","strong","extraSection","line","phoneNumber","whatsappLink","href","external","_zone","isActive","baseLabel","bestDistance","distance","lat1","lon1","lat2","lon2","toRad","deg","dLat","dLon","pointId","el","state","targetZoom","currentZoom","needsZoom","ms","duration","startZoom","delta","startTime","ease","t","step","now","elapsed","progress","eased","nextZoom","targetLat","targetLng","onComplete","startCenter","startLat","startLng","deltaLat","deltaLng","nextLat","nextLng","className","digits","RsMap","__vite_glob_0_0","__vite_glob_0_1","DEFAULT_LABEL","DEFAULT_ARIA_LABEL","DEFAULT_MENU_LABEL","DEFAULT_CLOSED_MESSAGE","DEFAULT_WHATSAPP_COLOR","DEFAULT_OPTION_ICON","WHATSAPP_BASE_URL","OPTION_ICON_SVGS","DAY_ALIASES","WEEKDAY_SHORT_BY_ENGLISH","OPTION_ICON_SVGS_BY_KEY","svg","normalizeToken","normalizeIconSvg","isIconUrl","RsWhatsapp","node","_d","_e","menuLabel","ariaLabel","target","isClosed","telefonoValue","mensajeValue","telefono","mensaje","query","brandKey","fallbackLabel","fallbackTarget","fallbackIcon","links","option","optionElements","RsWhatsappOption","optionEl","_f","linkEl","labelEl","iconEl","normalizedIcon","iconKey","imageEl","iconSvg","template","message","scheduleSummary","manualClosedValue","schedule","scheduleElements","RsWhatsappSchedule","scheduleEl","start","end","segment","currentTime","timeZone","weekday","timeParts","hour","part","minute","currentDay","currentMinutes","match","startMinutes","endMinutes","startToken","endToken","startDay","endDay","hourValue","minuteValue","isOpen"],"mappings":"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A;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAulB9C;AAAA,EAhnBA,WAAW,qBAAqB;AAC9B,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,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"}
|