@rsltda/components 1.0.22 → 1.0.25
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.
- package/README.md +5 -7
- package/custom-elements.json +8 -16
- package/dist/components/rs-whatsapp.d.ts +8 -2
- package/dist/rs-components.es.js +543 -484
- package/dist/rs-components.es.js.map +1 -1
- package/dist/rs-components.iife.js +34 -12
- package/dist/rs-components.iife.js.map +1 -1
- package/package.json +1 -1
|
@@ -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,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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 hqv: '#2b3d60',\n ktm: '#ff6600'\n};\nconst BRAND_ALIASES: Record<string, string> = {\n gas: 'gasgas',\n gasgas: 'gasgas',\n rsltda: 'rs',\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 DEFAULT_REFRESH_INTERVAL_MS = 0;\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 refreshIntervalMs = DEFAULT_REFRESH_INTERVAL_MS;\n private refreshIntervalId: number | null = null;\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 refreshQueuedForce = 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 'refresh-interval',\n 'refresh-token',\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: var(--rs-map-accent);\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 display: inline-flex;\n align-items: center;\n gap: 8px;\n color: var(--rs-map-accent);\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 filter: brightness(0.92);\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.applyRefreshInterval(this.getAttribute('refresh-interval'));\n document.addEventListener('visibilitychange', this.handleVisibilityChange);\n this.syncAttributesToState();\n }\n\n disconnectedCallback() {\n this.pointsController?.abort();\n this.clearRefreshTimer();\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 document.removeEventListener('visibilitychange', this.handleVisibilityChange);\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 === 'refresh-interval') {\n this.applyRefreshInterval(newValue);\n } else if (name === 'refresh-token') {\n if (this.isConnected && newValue !== _oldValue) {\n this.queueRefreshPoints(true);\n }\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 applyRefreshInterval(value: string | null) {\n const normalized = (value ?? '').trim();\n const intervalMs = this.parseRefreshInterval(normalized);\n this.refreshIntervalMs = intervalMs;\n this.clearRefreshTimer();\n if (this.isConnected && this.refreshIntervalMs > 0) {\n this.refreshIntervalId = window.setInterval(() => {\n if (!document.hidden) {\n this.forceRefresh();\n }\n }, this.refreshIntervalMs);\n }\n }\n\n private parseRefreshInterval(value: string) {\n if (!value) {\n return DEFAULT_REFRESH_INTERVAL_MS;\n }\n\n const numeric = Number(value);\n if (!Number.isFinite(numeric) || numeric <= 0) {\n return DEFAULT_REFRESH_INTERVAL_MS;\n }\n\n return Math.round(numeric * 60 * 1000);\n }\n\n private clearRefreshTimer() {\n if (this.refreshIntervalId !== null) {\n window.clearInterval(this.refreshIntervalId);\n this.refreshIntervalId = null;\n }\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(force = false) {\n if (force) {\n this.refreshQueuedForce = true;\n }\n\n if (this.refreshQueued) {\n return;\n }\n this.refreshQueued = true;\n queueMicrotask(() => {\n this.refreshQueued = false;\n const shouldForce = this.refreshQueuedForce;\n this.refreshQueuedForce = false;\n void this.refreshPoints({ force: shouldForce });\n });\n }\n\n forceRefresh() {\n this.queueRefreshPoints(true);\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(options: { force?: boolean } = {}) {\n const force = options.force ?? false;\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 = force ? null : await this.readPointsCache(cacheKey);\n const hasFreshCache = cachedPayload && Date.now() - cachedPayload.timestamp < this.pointsCacheTtlMs;\n const localFallbackPayload = !force && !cachedPayload ? await this.getLocalPointsFallback(marcaRequestValue, this.tipoCode) : null;\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 if (!force || this.points.length === 0) {\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 if (force && this.points.length > 0) {\n console.warn('No se pudo forzar la actualizacion de puntos, se conservan los datos actuales', 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', true, 'fa-solid fa-globe'));\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, 'fa-solid fa-envelope'));\n }\n\n return actions;\n }\n\n private createPointModalLink(href: string, text: string, external = true, iconClass?: string) {\n const link = document.createElement('a');\n link.href = href;\n link.className = 'point-modal__link';\n if (iconClass) {\n link.appendChild(this.createIconElement(iconClass));\n }\n link.appendChild(document.createTextNode(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 handleVisibilityChange = () => {\n if (!document.hidden && this.isConnected && this.refreshIntervalMs > 0) {\n this.forceRefresh();\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 DEFAULT_TIME_ZONE = 'America/Santiago';\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: '#2b3d60',\n ktm: '#ff6600',\n rs: '#000000',\n voge: '#000000'\n};\nconst BRAND_ALIASES: Record<string, string> = {\n gas: 'gasgas',\n gasgas: 'gasgas',\n rsltda: 'rs',\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 hostAttributeObserver?: MutationObserver;\n private childrenObserver?: MutationObserver;\n private appliedCssVariableNames = new Set<string>();\n\n static get observedAttributes() {\n return [\n 'telefono',\n 'mensaje',\n 'label',\n 'menu-label',\n 'aria-label',\n 'position',\n 'offset-x',\n 'offset-y',\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: calc(var(--rs-whatsapp-right, 24px) + var(--rs-whatsapp-offset-x, 0px));\n bottom: calc(var(--rs-whatsapp-bottom, 24px) + var(--rs-whatsapp-offset-y, 0px));\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 transform: none;\n }\n :host([position=\"bottom-left\"]) {\n right: auto;\n left: calc(var(--rs-whatsapp-left, 24px) + var(--rs-whatsapp-offset-x, 0px));\n bottom: calc(var(--rs-whatsapp-bottom, 24px) + var(--rs-whatsapp-offset-y, 0px));\n top: auto;\n transform: none;\n }\n :host([position=\"bottom-center\"]) {\n right: auto;\n left: calc(50% + var(--rs-whatsapp-offset-x, 0px));\n bottom: calc(var(--rs-whatsapp-bottom, 24px) + var(--rs-whatsapp-offset-y, 0px));\n top: auto;\n transform: translateX(-50%);\n }\n :host([position=\"top-right\"]) {\n right: calc(var(--rs-whatsapp-right, 24px) + var(--rs-whatsapp-offset-x, 0px));\n left: auto;\n bottom: auto;\n top: calc(var(--rs-whatsapp-top, 24px) + var(--rs-whatsapp-offset-y, 0px));\n transform: none;\n }\n :host([position=\"top-left\"]) {\n right: auto;\n left: calc(var(--rs-whatsapp-left, 24px) + var(--rs-whatsapp-offset-x, 0px));\n bottom: auto;\n top: calc(var(--rs-whatsapp-top, 24px) + var(--rs-whatsapp-offset-y, 0px));\n transform: none;\n }\n :host([position=\"top-center\"]) {\n right: auto;\n left: calc(50% + var(--rs-whatsapp-offset-x, 0px));\n bottom: auto;\n top: calc(var(--rs-whatsapp-top, 24px) + var(--rs-whatsapp-offset-y, 0px));\n transform: translateX(-50%);\n }\n :host([position=\"center-left\"]) {\n right: auto;\n left: calc(var(--rs-whatsapp-left, 24px) + var(--rs-whatsapp-offset-x, 0px));\n bottom: auto;\n top: calc(50% + var(--rs-whatsapp-offset-y, 0px));\n transform: translateY(-50%);\n }\n :host([position=\"center\"]) {\n right: auto;\n left: calc(50% + var(--rs-whatsapp-offset-x, 0px));\n bottom: auto;\n top: calc(50% + var(--rs-whatsapp-offset-y, 0px));\n transform: translate(-50%, -50%);\n }\n :host([position=\"center-right\"]) {\n right: calc(var(--rs-whatsapp-right, 24px) + var(--rs-whatsapp-offset-x, 0px));\n left: auto;\n bottom: auto;\n top: calc(50% + var(--rs-whatsapp-offset-y, 0px));\n transform: translateY(-50%);\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=\"bottom-center\"]) .menu {\n right: auto;\n left: 50%;\n bottom: calc(var(--rs-whatsapp-size, 60px) + 12px);\n top: auto;\n transform: translateX(-50%);\n transform-origin: bottom center;\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 :host([position=\"top-center\"]) .menu {\n top: calc(var(--rs-whatsapp-size, 60px) + 12px);\n right: auto;\n bottom: auto;\n left: 50%;\n transform: translateX(-50%);\n transform-origin: top center;\n }\n :host([position=\"center-left\"]) .menu {\n left: calc(var(--rs-whatsapp-size, 60px) + 12px);\n right: auto;\n top: 50%;\n bottom: auto;\n transform: translateY(-50%);\n transform-origin: left center;\n }\n :host([position=\"center\"]) .menu {\n left: 50%;\n right: auto;\n top: auto;\n bottom: calc(var(--rs-whatsapp-size, 60px) + 12px);\n transform: translateX(-50%);\n transform-origin: bottom center;\n }\n :host([position=\"center-right\"]) .menu {\n right: calc(var(--rs-whatsapp-size, 60px) + 12px);\n left: auto;\n top: 50%;\n bottom: auto;\n transform: translateY(-50%);\n transform-origin: right center;\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: calc(var(--rs-whatsapp-mobile-right, 16px) + var(--rs-whatsapp-offset-x, 0px));\n bottom: calc(var(--rs-whatsapp-mobile-bottom, 16px) + var(--rs-whatsapp-offset-y, 0px));\n transform: none;\n }\n :host([position=\"bottom-left\"]) {\n right: auto;\n left: calc(var(--rs-whatsapp-mobile-left, 16px) + var(--rs-whatsapp-offset-x, 0px));\n bottom: calc(var(--rs-whatsapp-mobile-bottom, 16px) + var(--rs-whatsapp-offset-y, 0px));\n top: auto;\n transform: none;\n }\n :host([position=\"bottom-center\"]) {\n right: auto;\n left: calc(50% + var(--rs-whatsapp-offset-x, 0px));\n bottom: calc(var(--rs-whatsapp-mobile-bottom, 16px) + var(--rs-whatsapp-offset-y, 0px));\n top: auto;\n transform: translateX(-50%);\n }\n :host([position=\"top-right\"]) {\n right: calc(var(--rs-whatsapp-mobile-right, 16px) + var(--rs-whatsapp-offset-x, 0px));\n left: auto;\n bottom: auto;\n top: calc(var(--rs-whatsapp-mobile-top, 16px) + var(--rs-whatsapp-offset-y, 0px));\n transform: none;\n }\n :host([position=\"top-left\"]) {\n right: auto;\n left: calc(var(--rs-whatsapp-mobile-left, 16px) + var(--rs-whatsapp-offset-x, 0px));\n bottom: auto;\n top: calc(var(--rs-whatsapp-mobile-top, 16px) + var(--rs-whatsapp-offset-y, 0px));\n transform: none;\n }\n :host([position=\"top-center\"]) {\n right: auto;\n left: calc(50% + var(--rs-whatsapp-offset-x, 0px));\n bottom: auto;\n top: calc(var(--rs-whatsapp-mobile-top, 16px) + var(--rs-whatsapp-offset-y, 0px));\n transform: translateX(-50%);\n }\n :host([position=\"center-left\"]) {\n right: auto;\n left: calc(var(--rs-whatsapp-mobile-left, 16px) + var(--rs-whatsapp-offset-x, 0px));\n bottom: auto;\n top: calc(50% + var(--rs-whatsapp-offset-y, 0px));\n transform: translateY(-50%);\n }\n :host([position=\"center\"]) {\n right: auto;\n left: calc(50% + var(--rs-whatsapp-offset-x, 0px));\n bottom: auto;\n top: calc(50% + var(--rs-whatsapp-offset-y, 0px));\n transform: translate(-50%, -50%);\n }\n :host([position=\"center-right\"]) {\n right: calc(var(--rs-whatsapp-mobile-right, 16px) + var(--rs-whatsapp-offset-x, 0px));\n left: auto;\n bottom: auto;\n top: calc(50% + var(--rs-whatsapp-offset-y, 0px));\n transform: translateY(-50%);\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 this.cacheShadowElements();\n }\n\n connectedCallback() {\n this.cacheShadowElements();\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.hostAttributeObserver = new MutationObserver(this.handleHostAttributesMutation);\n this.hostAttributeObserver.observe(this, {\n attributes: true,\n attributeOldValue: true\n });\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 private cacheShadowElements() {\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 }\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.hostAttributeObserver?.disconnect();\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 this.syncPositionOffsets();\n this.syncCssVariablesFromAttributes();\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 syncCssVariablesFromAttributes() {\n const nextVariables = new Set<string>();\n\n for (const attribute of Array.from(this.attributes)) {\n if (!attribute.name.startsWith('--')) {\n continue;\n }\n\n const value = attribute.value.trim();\n\n if (!value) {\n continue;\n }\n\n nextVariables.add(attribute.name);\n this.style.setProperty(attribute.name, value);\n }\n\n for (const variableName of this.appliedCssVariableNames) {\n if (!nextVariables.has(variableName)) {\n this.style.removeProperty(variableName);\n }\n }\n\n this.appliedCssVariableNames = nextVariables;\n }\n\n private syncPositionOffsets() {\n const offsetX = this.normalizeCssLength(this.getAttribute('offset-x'));\n const offsetY = this.normalizeCssLength(this.getAttribute('offset-y'));\n\n if (offsetX) {\n this.style.setProperty('--rs-whatsapp-offset-x', offsetX);\n } else {\n this.style.removeProperty('--rs-whatsapp-offset-x');\n }\n\n if (offsetY) {\n this.style.setProperty('--rs-whatsapp-offset-y', offsetY);\n } else {\n this.style.removeProperty('--rs-whatsapp-offset-y');\n }\n }\n\n private normalizeCssLength(value: string | null) {\n const normalized = (value ?? '').trim();\n\n if (!normalized) {\n return '';\n }\n\n if (/^-?\\d+(?:\\.\\d+)?$/.test(normalized)) {\n return `${normalized}px`;\n }\n\n return normalized;\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() || DEFAULT_TIME_ZONE;\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 handleHostAttributesMutation = (mutations: MutationRecord[]) => {\n if (mutations.some((mutation) => mutation.attributeName?.startsWith('--'))) {\n this.syncAttributesToState();\n }\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","DEFAULT_REFRESH_INTERVAL_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","intervalMs","numeric","force","shouldForce","label","normalizedCode","color","options","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","DEFAULT_TIME_ZONE","WHATSAPP_BASE_URL","OPTION_ICON_SVGS","DAY_ALIASES","WEEKDAY_SHORT_BY_ENGLISH","OPTION_ICON_SVGS_BY_KEY","svg","normalizeToken","normalizeIconSvg","isIconUrl","RsWhatsapp","node","mutations","mutation","_d","_e","menuLabel","ariaLabel","target","isClosed","telefonoValue","mensajeValue","telefono","mensaje","query","nextVariables","attribute","variableName","offsetX","offsetY","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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AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA0lB9C;AAAA,EArnBA,WAAW,qBAAqB;AAC9B,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ;AAAA,EA0mBA,oBAAoB;AAClB,SAAK,QAAQ,KAAK,KAAK,cAA8B,MAAM,GAC3D,KAAK,eAAe,KAAK,KAAK,cAA2B,oBAAoB,GAC7E,KAAK,iBAAiB,KAAK,KAAK,cAA2B,uBAAuB,GAClF,KAAK,qBAAqB,KAAK,KAAK,cAA2B,0BAA0B,GACzF,KAAK,cAAc,KAAK,KAAK,cAA2B,mBAAmB,GAC3E,KAAK,sBAAsB,KAAK,KAAK,cAA2B,4BAA4B,GAC5F,KAAK,oBAAoB,KAAK,KAAK,cAA2B,0BAA0B,GACxF,KAAK,mBAAmB,KAAK,KAAK,cAA2B,yBAAyB,GACtF,KAAK,wBAAwB,KAAK,KAAK,cAAiC,0BAA0B,GAClG,KAAK,cAAc,MAAM,KAAK,KAAK,KAAK,iBAAoC,aAAa,CAAC,GAC1F,KAAK,gBAAgB,KAAK,KAAK,cAAiC,yBAAyB,GACzF,KAAK,YAAY,QAAQ,CAACyB,MAAQA,EAAI,iBAAiB,SAAS,KAAK,qBAAqB,CAAC,GACvF,KAAK,iBACP,KAAK,cAAc,iBAAiB,SAAS,KAAK,kBAAkB,GAEtE,KAAK,oBAAoB,iBAAiB,SAAS,KAAK,4BAA4B,GACpF,KAAK,sBAAsB,iBAAiB,SAAS,KAAK,eAAe,GACzE,OAAO,iBAAiB,WAAW,KAAK,uBAAuB,GAC/D,KAAK,kBAAA,GACL,KAAK,aAAa,KAAK,aAAa,QAAQ,CAAC,GAC7C,KAAK,kBAAkB,SAAS,GAChC,KAAK,qBAAqB,KAAK,aAAa,kBAAkB,CAAC,GAC/D,SAAS,iBAAiB,oBAAoB,KAAK,sBAAsB,GACzE,KAAK,sBAAA;AAAA,EACP;AAAA,EAEA,uBAAuB;AX/0BlB,QAAAR,GAAAS,GAAAC;AWg1BH,KAAAV,IAAA,KAAK,qBAAL,QAAAA,EAAuB,SACvB,KAAK,kBAAA,GACL,KAAK,YAAY,QAAQ,CAACQ,MAAQA,EAAI,oBAAoB,SAAS,KAAK,qBAAqB,CAAC,GAC1F,KAAK,iBACP,KAAK,cAAc,oBAAoB,SAAS,KAAK,kBAAkB,IAEzEC,IAAA,KAAK,wBAAL,QAAAA,EAA0B,oBAAoB,SAAS,KAAK,gCAC5DC,IAAA,KAAK,0BAAL,QAAAA,EAA4B,oBAAoB,SAAS,KAAK,kBAC9D,OAAO,oBAAoB,WAAW,KAAK,uBAAuB,GAClE,SAAS,oBAAoB,oBAAoB,KAAK,sBAAsB;AAAA,EAC9E;AAAA,EAEA,yBAAyBC,GAAcC,GAA0BC,GAAyB;AACxF,IAAIF,MAAS,UACX,KAAK,SAASE,KAAA,OAAAA,IAAY,EAAE,IACnBF,MAAS,SAClB,KAAK,QAAQE,KAAA,OAAAA,IAAY,EAAE,IAClBF,MAAS,WAClB,KAAK,aAAaE,CAAQ,IACjBF,MAAS,oBAClB,KAAK,iBAAiBE,CAAQ,IACrBF,MAAS,mBAClB,KAAK,gBAAgBE,CAAQ,IACpBF,MAAS,eAClB,KAAK,aAAaE,CAAQ,IACjBF,MAAS,qBAClB,KAAK,qBAAqBE,CAAQ,IACzBF,MAAS,kBACd,KAAK,eAAeE,MAAaD,KACnC,KAAK,mBAAmB,EAAI,IAErBD,MAAS,qBAClB,KAAK,kBAAkBE,CAAQ,IACtBF,MAAS,yBAClB,KAAK,qBAAqBE,CAAQ;AAAA,EAEtC;AAAA,EAEQ,iBAAiB;AACvB,WAAK,OAAe,sBACX,QAAQ,UAAU,KAAK,MAAM;AAClC,WAAK,QAAA;AAAA,IACP,CAAC,IAGE,KAAK,oBAKLf,EAAM,4BACTA,EAAM,0BAA0B,IAAI,QAAc,CAACgB,GAASC,MAAW;AACrE,YAAMC,IAAiB,SAAS,cAAiC,oCAAoC;AACrG,UAAIA,GAAgB;AAClB,QAAAA,EAAe,iBAAiB,QAAQ,MAAMF,EAAA,GAAW,EAAE,MAAM,IAAM,GACvEE,EAAe;AAAA,UACb;AAAA,UACA,MAAMD,EAAO,IAAI,MAAM,uCAAuC,CAAC;AAAA,UAC/D,EAAE,MAAM,GAAA;AAAA,QAAK;AAEf;AAAA,MACF;AAEA,YAAME,IAAS,SAAS,cAAc,QAAQ,GACxCC,IAAS,IAAI,gBAAgB;AAAA,QACjC,KAAK,KAAK;AAAA,QACV,GAAG;AAAA,MAAA,CACJ;AACD,MAAAD,EAAO,MAAM,2CAA2CC,EAAO,SAAA,CAAU,IACzED,EAAO,QAAQ,IACfA,EAAO,QAAQ,IACfA,EAAO,QAAQ,eAAe,QAE9BA,EAAO,SAAS,MAAM;AACnB,eAAe,sBAAsB,IACtCH,EAAA;AAAA,MACF,GAEAG,EAAO,UAAU,MAAM;AACrB,QAAAnB,EAAM,0BAA0B,MAChCiB,EAAO,IAAI,MAAM,uCAAuC,CAAC;AAAA,MAC3D,GAEA,SAAS,KAAK,YAAYE,CAAM;AAAA,IAClC,CAAC,IAGInB,EAAM,wBACV,KAAK,MAAM;AACT,aAAe,sBAAsB,IACtC,KAAK,QAAA;AAAA,IACP,CAAC,EACA,MAAM,CAACqB,MAAU;AAChB,cAAQ,MAAMA,aAAiB,QAAQA,EAAM,UAAU,uCAAuC;AAAA,IAChG,CAAC,MAhDD,QAAQ,MAAM,kFAAkF,GACzF,QAAQ,QAAA;AAAA,EAgDnB;AAAA,EAEQ,UAAU;AAChB,UAAMC,IAAK,OAAe;AAC1B,QAAI,CAACA,GAAG;AACN,cAAQ,MAAM,qCAAqC;AACnD;AAAA,IACF;AAEA,UAAMC,IAAgB,KAAK,iBAAA;AAC3B,SAAK,MAAM,IAAID,EAAE,KAAK,IAAI,KAAK,OAAO;AAAA,MACpC,QAAQC;AAAA,MACR,MAAM;AAAA,MACN,WAAW;AAAA,IAAA,CACZ,GACG,KAAK,OAAO,UACd,KAAK,cAAc,KAAK,MAAM;AAAA,EAElC;AAAA,EAEQ,mBAAmB;AACzB,UAAMC,IAAa,KAAK,mBAAA;AACxB,WAAIA,KAGG,EAAE,KAAK,UAAU,KAAK,SAAA;AAAA,EAC/B;AAAA,EAEQ,qBAAyC;AAC/C,eAAWC,KAAS,KAAK,QAAQ;AAC/B,YAAMC,IAAW,KAAK,iBAAiBD,CAAK;AAC5C,UAAIC;AACF,eAAOA;AAAA,IAEX;AACA,WAAO;AAAA,EACT;AAAA,EAEQ,wBAAwB;AXr9B3B,QAAAxB,GAAAS;AWs9BH,SAAK,6BAA6B,IAClC,KAAK,UAAST,IAAA,KAAK,aAAa,OAAO,MAAzB,OAAAA,IAA8B,EAAE,GAC9C,KAAK,SAAQS,IAAA,KAAK,aAAa,MAAM,MAAxB,OAAAA,IAA6B,EAAE,GAC5C,KAAK,iBAAiB,KAAK,aAAa,iBAAiB,CAAC,GAC1D,KAAK,gBAAgB,KAAK,aAAa,gBAAgB,CAAC,GACxD,KAAK,aAAa,KAAK,aAAa,YAAY,CAAC,GACjD,KAAK,kBAAkB,KAAK,aAAa,kBAAkB,CAAC,GAC5D,KAAK,qBAAqB,KAAK,aAAa,qBAAqB,CAAC,GAClE,KAAK,6BAA6B,IAClC,KAAK,mBAAA;AAAA,EACP;AAAA,EAEQ,aAAagB,GAAsB;AACzC,UAAMC,KAAcD,KAAA,OAAAA,IAAS,IAAI,KAAA;AACjC,QAAI,CAACC,GAAY;AACf,WAAK,YAAY,IACjB,KAAK,MAAM,eAAe,cAAc;AACxC;AAAA,IACF;AACA,SAAK,YAAYA,GACjB,KAAK,MAAM,YAAY,gBAAgBA,CAAU;AAAA,EACnD;AAAA,EAEQ,iBAAiBD,GAAsB;AAC7C,SAAK,oBAAoBA,KAAA,OAAAA,IAAS,IAAI,KAAA,GAClC,KAAK,oBAAoB,KAAK,eAC3B,KAAK,eAAA;AAAA,EAEd;AAAA,EAEQ,gBAAgBA,GAAsB;AAC5C,UAAMC,KAAcD,KAAA,OAAAA,IAAS,IAAI,KAAA;AACjC,SAAK,eAAeC,KAAczC,GAC9B,KAAK,gBAAgB,KAAK,eAAe,CAAC,KAAK,8BACjD,KAAK,mBAAA;AAAA,EAET;AAAA,EAEQ,aAAawC,GAAsB;AACzC,UAAMC,KAAcD,KAAA,OAAAA,IAAS,IAAI,KAAA;AACjC,QAAI,CAACC,GAAY;AACf,WAAK,mBAAmBjC;AACxB;AAAA,IACF;AAEA,UAAMkC,IAAO,OAAOD,CAAU;AAC9B,QAAI,CAAC,OAAO,SAASC,CAAI,KAAKA,IAAO,GAAG;AACtC,WAAK,mBAAmBlC;AACxB;AAAA,IACF;AAEA,SAAK,mBAAmBkC,IAAO,KAAK,KAAK,KAAK;AAAA,EAChD;AAAA,EAEQ,qBAAqBF,GAAsB;AACjD,UAAMC,KAAcD,KAAA,OAAAA,IAAS,IAAI,KAAA,GAC3BG,IAAa,KAAK,qBAAqBF,CAAU;AACvD,SAAK,oBAAoBE,GACzB,KAAK,kBAAA,GACD,KAAK,eAAe,KAAK,oBAAoB,MAC/C,KAAK,oBAAoB,OAAO,YAAY,MAAM;AAChD,MAAK,SAAS,UACZ,KAAK,aAAA;AAAA,IAET,GAAG,KAAK,iBAAiB;AAAA,EAE7B;AAAA,EAEQ,qBAAqBH,GAAe;AAC1C,QAAI,CAACA;AACH,aAAO/B;AAGT,UAAMmC,IAAU,OAAOJ,CAAK;AAC5B,WAAI,CAAC,OAAO,SAASI,CAAO,KAAKA,KAAW,IACnCnC,IAGF,KAAK,MAAMmC,IAAU,KAAK,GAAI;AAAA,EACvC;AAAA,EAEQ,oBAAoB;AAC1B,IAAI,KAAK,sBAAsB,SAC7B,OAAO,cAAc,KAAK,iBAAiB,GAC3C,KAAK,oBAAoB;AAAA,EAE7B;AAAA,EAEQ,kBAAkBJ,GAAsB;AAC9C,UAAMC,KAAcD,KAAA,OAAAA,IAAS,IAAI,KAAA;AACjC,QAAI,CAACC,GAAY;AACf,WAAK,oBAAoB;AACzB;AAAA,IACF;AACA,SAAK,oBAAoBA,EAAW,SAAS,GAAG,IAAIA,IAAa,GAAGA,CAAU;AAAA,EAChF;AAAA,EAEQ,qBAAqBD,GAAsB;AACjD,SAAK,wBAAwBA,KAAA,OAAAA,IAAS,IAAI,KAAA;AAAA,EAC5C;AAAA,EAEQ,SAASA,GAAe;AAC9B,SAAK,QAAQA,EAAM,KAAA,GACnB,KAAK,WAAW,KAAK,kBAAkB,KAAK,KAAK,GACjD,KAAK,gBAAA,GACA,KAAK,8BACR,KAAK,mBAAA;AAAA,EAET;AAAA,EAEQ,QAAQA,GAAe;AAC7B,SAAK,OAAOA,EAAM,KAAA,GAClB,KAAK,WAAW,KAAK,cAAc,KAAK,IAAI,GAC5C,KAAK,iBAAA,GACA,KAAK,8BACR,KAAK,mBAAA;AAAA,EAET;AAAA,EAEQ,mBAAmBK,IAAQ,IAAO;AAKxC,IAJIA,MACF,KAAK,qBAAqB,KAGxB,MAAK,kBAGT,KAAK,gBAAgB,IACrB,eAAe,MAAM;AACnB,WAAK,gBAAgB;AACrB,YAAMC,IAAc,KAAK;AACzB,WAAK,qBAAqB,IACrB,KAAK,cAAc,EAAE,OAAOA,GAAa;AAAA,IAChD,CAAC;AAAA,EACH;AAAA,EAEA,eAAe;AACb,SAAK,mBAAmB,EAAI;AAAA,EAC9B;AAAA,EAEA,IAAI,cAAc;AAChB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,aAAa;AACf,WAAO,KAAK;AAAA,EACd;AAAA,EAEQ,mBAAmB;AACzB,QAAI,CAAC,KAAK;AACR;AAEF,UAAMC,IAAQ,KAAK,aAAA;AACnB,SAAK,aAAa,cAAcA,KAAA,OAAAA,IAAS;AAAA,EAC3C;AAAA,EAEQ,eAAe;AACrB,QAAI,KAAK,aAAa,QAAQ,KAAK,YAAYzC;AAC7C,aAAOA,EAAY,KAAK,QAAQ;AAElC,UAAMmC,IAAa,KAAK,KAAK,KAAA,EAAO,YAAA,GAC9BO,IAAiBP,KAAcA,KAActC,IAAaA,EAAWsC,CAAU,IAAI;AACzF,WAAIO,MAAmB,QAAQA,KAAkB1C,IACxCA,EAAY0C,CAAc,IAE5B;AAAA,EACT;AAAA,EAEQ,kBAAkB;AX9nCrB,QAAAjC;AW+nCH,UAAMkC,KAAQhD,IAAAA,GAAa,KAAK,QAAQ,MAA1BA,OAAAA,IAA+BH;AAC7C,SAAK,MAAM,YAAY,mBAAmBmD,CAAK;AAAA,EACjD;AAAA,EAEQ,cAAcT,GAA8B;AAClD,QAAI,CAACA;AACH,aAAO;AAET,UAAMC,IAAaD,EAAM,KAAA,EAAO,YAAA;AAChC,QAAIC,KAActC;AAChB,aAAOA,EAAWsC,CAAU;AAE9B,UAAMG,IAAU,OAAOH,CAAU;AACjC,WAAI,OAAO,SAASG,CAAO,MAAMA,MAAY,KAAKA,MAAY,KACrDA,IAEF;AAAA,EACT;AAAA,EAEA,MAAc,cAAcM,IAA+B,IAAI;AXlpC1D,QAAAnC,GAAAS;AWmpCH,UAAMqB,KAAQ9B,IAAAmC,EAAQ,UAAR,OAAAnC,IAAiB;AAC/B,QAAI,CAAC,KAAK,eAAe,CAAC,KAAK,SAAS,KAAK,aAAa;AACxD;AAGF,QAAI,CAAC,KAAK,cAAc;AACtB,cAAQ,MAAM,oFAAoF,GAClG,KAAK,kBAAkB,OAAO;AAC9B;AAAA,IACF;AAEA,KAAAS,IAAA,KAAK,qBAAL,QAAAA,EAAuB;AACvB,UAAM2B,IAAa,IAAI,gBAAA;AACvB,SAAK,mBAAmBA;AAExB,UAAMC,IAAoB,KAAK,qBAAA,GACzBnB,IAAS,IAAI,gBAAgB;AAAA,MACjC,OAAOmB;AAAA,MACP,MAAM,OAAO,KAAK,QAAQ;AAAA,IAAA,CAC3B,GAEKC,IAAW,KAAK,aAAa,SAAS,GAAG,GACzCC,IAAWD,KAAY,CAAC,QAAQ,KAAK,KAAK,YAAY,GACtDE,IAAYF,IAAYC,IAAW,MAAM,KAAM,KAC/CE,IAAa,GAAG,KAAK,YAAY,GAAGD,CAAS,GAAGtB,EAAO,SAAA,CAAU,IACjEwB,IAAW,KAAK,kBAAkBD,CAAU,GAC5CE,IAAgBb,IAAQ,OAAO,MAAM,KAAK,gBAAgBY,CAAQ,GAClEE,IAAgBD,KAAiB,KAAK,QAAQA,EAAc,YAAY,KAAK,kBAC7EE,IAAuB,CAACf,KAAS,CAACa,IAAgB,MAAM,KAAK,uBAAuBN,GAAmB,KAAK,QAAQ,IAAI;AAE9H,QAAIM;AAGF,UAFA,KAAK,mBAAmBA,EAAc,IAAI,GAC1C,KAAK,kBAAkB,OAAO,GAC1BC;AACF;AAAA,WAEOC,KACT,KAAK,mBAAmBA,CAAoB,GAC5C,KAAK,kBAAkB,OAAO,MACrB,CAACf,KAAS,KAAK,OAAO,WAAW,MAC1C,KAAK,kBAAkB,SAAS;AAGlC,QAAI;AACF,YAAMgB,IAAW,MAAM,MAAML,GAAY;AAAA,QACvC,QAAQL,EAAW;AAAA,MAAA,CACpB;AAED,UAAI,CAACU,EAAS;AACZ,cAAM,IAAI,MAAM,aAAaA,EAAS,MAAM,EAAE;AAGhD,YAAMC,IAAU,MAAMD,EAAS,KAAA;AAC/B,UAAI,CAAC,MAAM,QAAQC,CAAO;AACxB,cAAM,IAAI,MAAM,sCAAsC;AAExD,YAAMC,IAAeD;AACrB,YAAM,KAAK,iBAAiBL,GAAUM,CAAY,GAClD,KAAK,mBAAmBA,CAAY,GACpC,KAAK,kBAAkB,OAAO;AAAA,IAChC,SAAS7B,GAAO;AACd,UAAIA,aAAiB,gBAAgBA,EAAM,SAAS;AAClD;AAEF,UAAIwB,KAAiBE,GAAsB;AACzC,gBAAQ,KAAK,8DAA8D1B,CAAK;AAChF;AAAA,MACF;AACA,UAAIW,KAAS,KAAK,OAAO,SAAS,GAAG;AACnC,gBAAQ,KAAK,iFAAiFX,CAAK;AACnG;AAAA,MACF;AACA,cAAQ,MAAM,6CAA6CA,CAAK,GAChE,KAAK,kBAAkB,OAAO;AAAA,IAChC;AAAA,EACF;AAAA,EAEQ,mBAAmB4B,GAAwB;AACjD,SAAK,SAAS,KAAK,gBAAgBA,CAAO,GAC1C,KAAK,uBAAuB,KAAK,MAAM,GACvC,KAAK,aAAa,KAAK,MAAM,GAC7B,KAAK,qBAAqB,IAC1B,KAAK,cAAc,KAAK,MAAM;AAAA,EAChC;AAAA,EAEQ,uBAAuBE,GAAoB;AACjD,UAAMC,IAAmBD,EACtB,OAAO,CAAC1B,MAAU,CAAC,KAAK,iBAAiBA,CAAK,CAAC,EAC/C,IAAI,CAACA,OAAW;AAAA,MACf,IAAIA,EAAM;AAAA,MACV,QAAQA,EAAM;AAAA,MACd,WAAWA,EAAM;AAAA,MACjB,KAAKA,EAAM;AAAA,MACX,KAAKA,EAAM;AAAA,IAAA,EACX;AAEJ,IAAI2B,EAAiB,UACnB,QAAQ,KAAK,mFAAmFA,CAAgB;AAAA,EAEpH;AAAA,EAEQ,kBAAkBT,GAAoB;AAC5C,WAAO,iBAAiBA,CAAU;AAAA,EACpC;AAAA,EAEA,MAAc,uBAAuBU,GAAeC,GAAiD;AAEnG,UAAMC,IAAO,uBADW,KAAK,kBAAkBF,CAAK,CACD,IAAIC,CAAQ,SACzDE,IAAkB,KAAK,oBAAoB,IAAID,CAAI;AACzD,QAAIC;AACF,aAAOA;AAGT,UAAMC,IAAS3E,GAAqByE,CAAI;AACxC,QAAI,CAACE;AACH,aAAO;AAGT,UAAMC,IAAUD,EAAA,EACb,KAAK,CAACR,MAAY;AACjB,YAAMU,IAAgB,KAAK,wBAAwBV,CAAO;AAC1D,aAAOU,KAAA,QAAAA,EAAe,SAASA,IAAgB;AAAA,IACjD,CAAC,EACA,MAAM,MAAM,IAAI;AAEnB,gBAAK,oBAAoB,IAAIJ,GAAMG,CAAO,GACnCA;AAAA,EACT;AAAA,EAEQ,wBAAwB/B,GAAsC;AACpE,WAAK,MAAM,QAAQA,CAAK,IAIjBA,IAHE;AAAA,EAIX;AAAA,EAEA,MAAc,gBAAgBiB,GAAoD;AAChF,UAAMgB,IAAU,MAAM,KAAK,6BAA6BhB,CAAQ;AAChE,QAAIgB;AACF,aAAOA;AAGT,QAAI;AACF,YAAMC,IAAM,OAAO,aAAa,QAAQjB,CAAQ;AAChD,UAAI,CAACiB;AACH,eAAO;AAET,YAAMC,IAAS,KAAK,MAAMD,CAAG;AAC7B,aAAI,CAACC,KAAU,CAAC,MAAM,QAAQA,EAAO,IAAI,KAAK,CAAC,OAAO,SAASA,EAAO,SAAS,KAC7E,OAAO,aAAa,WAAWlB,CAAQ,GAChC,QAEFkB;AAAA,IACT,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAc,iBAAiBlB,GAAkBK,GAAwB;AACvE,UAAMc,IAA0B;AAAA,MAC9B,WAAW,KAAK,IAAA;AAAA,MAChB,MAAMd;AAAA,IAAA;AAGR,UAAM,KAAK,4BAA4BL,GAAUmB,CAAK;AAEtD,QAAI;AACF,aAAO,aAAa,QAAQnB,GAAU,KAAK,UAAUmB,CAAK,CAAC;AAAA,IAC7D,QAAQ;AAAA,IAER;AAAA,EACF;AAAA,EAEA,MAAc,6BAA6BnB,GAAoD;AAC7F,UAAMoB,IAAK,MAAMhE,EAAM,kBAAA;AACvB,WAAKgE,IAIE,IAAI,QAAQ,CAAChD,MAAY;AAG9B,YAAM0C,IAFcM,EAAG,YAAYlE,GAAyB,UAAU,EAC5C,YAAYA,CAAuB,EACvC,IAAI8C,CAAQ;AAElC,MAAAc,EAAQ,YAAY,MAAM;AACxB,cAAMO,IAASP,EAAQ;AACvB,YAAI,CAACO,KAAU,CAAC,MAAM,QAAQA,EAAO,IAAI,KAAK,CAAC,OAAO,SAASA,EAAO,SAAS,GAAG;AAChF,UAAAjD,EAAQ,IAAI;AACZ;AAAA,QACF;AACA,QAAAA,EAAQ;AAAA,UACN,WAAWiD,EAAO;AAAA,UAClB,MAAMA,EAAO;AAAA,QAAA,CACd;AAAA,MACH,GAEAP,EAAQ,UAAU,MAAM1C,EAAQ,IAAI;AAAA,IACtC,CAAC,IArBQ;AAAA,EAsBX;AAAA,EAEA,MAAc,4BAA4B4B,GAAkBmB,GAAyB;AACnF,UAAMC,IAAK,MAAMhE,EAAM,kBAAA;AACvB,IAAKgE,KAIL,MAAM,IAAI,QAAc,CAAChD,MAAY;AAGnC,YAAM0C,IAFcM,EAAG,YAAYlE,GAAyB,WAAW,EAC7C,YAAYA,CAAuB,EACvC,IAAI;AAAA,QACxB,KAAK8C;AAAA,QACL,WAAWmB,EAAM;AAAA,QACjB,MAAMA,EAAM;AAAA,MAAA,CACe;AAE7B,MAAAL,EAAQ,YAAY,MAAM1C,EAAA,GAC1B0C,EAAQ,UAAU,MAAM1C,EAAA;AAAA,IAC1B,CAAC;AAAA,EACH;AAAA,EAEA,OAAe,oBAAiD;AAC9D,WAAI,OAAO,UAAW,eAAe,EAAE,eAAe,UAC7C,QAAQ,QAAQ,IAAI,KAGxBhB,EAAM,yBACTA,EAAM,uBAAuB,IAAI,QAAQ,CAACgB,MAAY;AACpD,YAAM0C,IAAU,OAAO,UAAU,KAAK7D,IAAsB,CAAC;AAE7D,MAAA6D,EAAQ,kBAAkB,MAAM;AAC9B,cAAMM,IAAKN,EAAQ;AACnB,QAAKM,EAAG,iBAAiB,SAASlE,CAAuB,KACvDkE,EAAG,kBAAkBlE,GAAyB,EAAE,SAAS,OAAO;AAAA,MAEpE,GAEA4D,EAAQ,YAAY,MAAM1C,EAAQ0C,EAAQ,MAAM,GAChDA,EAAQ,UAAU,MAAM1C,EAAQ,IAAI;AAAA,IACtC,CAAC,IAGIhB,EAAM;AAAA,EACf;AAAA,EAEQ,gBAAgBiD,GAAoC;AAC1D,WAAOA,EAAQ,IAAI,CAACxB,OAAW;AAAA,MAC7B,GAAGA;AAAA,MACH,MAAM,KAAK,gBAAgBA,CAAK;AAAA,IAAA,EAChC;AAAA,EACJ;AAAA,EAEQ,aAAa0B,GAAoB;AACvC,QAAI,CAAC,KAAK;AACR;AAGF,UAAMe,IAAU,KAAK,YAAYf,CAAM;AACvC,SAAK,eAAee,GACpB,KAAK,uBAAA;AAEL,UAAMC,IAAW,SAAS,uBAAA;AAE1B,IAAA5E,GAAW,QAAQ,CAAC6E,MAAY;AAC9B,YAAMC,IAAU,SAAS,cAAc,SAAS;AAChD,MAAAA,EAAQ,YAAY,gBACpBA,EAAQ,QAAQ,cAAcD;AAE9B,YAAME,IAAS,SAAS,cAAc,KAAK;AAC3C,MAAAA,EAAO,YAAY;AACnB,YAAMC,IAAQ,SAAS,cAAc,MAAM;AAK3C,UAJAA,EAAM,cAAc/E,GAAY4E,CAAO,GACvCE,EAAO,YAAYC,CAAK,GACxBF,EAAQ,YAAYC,CAAM,GAEtBJ,EAAQE,CAAO,EAAE,WAAW,GAAG;AACjC,cAAMI,IAAQ,SAAS,cAAc,GAAG;AACxC,QAAAA,EAAM,YAAY,uBAClBA,EAAM,cAAc,4BACpBH,EAAQ,YAAYG,CAAK;AAAA,MAC3B,OAAO;AACL,cAAMC,IAAO,SAAS,cAAc,KAAK;AACzC,QAAAA,EAAK,YAAY,sBACjBP,EAAQE,CAAO,EAAE,QAAQ,CAAC3C,MAAU;AAClC,UAAAgD,EAAK,YAAY,KAAK,gBAAgBhD,CAAK,CAAC;AAAA,QAC9C,CAAC,GACD4C,EAAQ,YAAYI,CAAI;AAAA,MAC1B;AAEA,MAAAN,EAAS,YAAYE,CAAO;AAAA,IAC9B,CAAC,GAED,KAAK,eAAe,gBAAgBF,CAAQ,GAC5C,KAAK,qBAAA;AAAA,EACP;AAAA,EAEQ,YAAYhB,GAAiD;AACnE,UAAMe,IAAuC;AAAA,MAC3C,OAAO,CAAA;AAAA,MACP,IAAI,CAAA;AAAA,MACJ,QAAQ,CAAA;AAAA,MACR,KAAK,CAAA;AAAA,IAAC;AAER,WAAAf,EAAO,QAAQ,CAAC1B,MAAU;AACxB,MAAAyC,EAAQzC,EAAM,IAAI,EAAE,KAAKA,CAAK;AAAA,IAChC,CAAC,GACMyC;AAAA,EACT;AAAA,EAEQ,gBAAgBzC,GAAiB;AXx8CpC,QAAAvB;AWy8CH,UAAMwE,IAAO,SAAS,cAAc,SAAS;AAC7C,IAAAA,EAAK,YAAY,cACjBA,EAAK,QAAQ,UAAU,OAAOjD,EAAM,EAAE;AACtC,UAAMkD,IAAoB,KAAK,0BAA0BlD,CAAK,GAExD8C,IAAQ,SAAS,cAAc,IAAI;AACzC,IAAAA,EAAM,YAAY,qBAClBA,EAAM,cAAc9C,EAAM,UAAU,cACpCiD,EAAK,YAAYH,CAAK;AAEtB,UAAMK,IAAe,SAAS,cAAc,KAAK;AACjD,IAAAA,EAAa,YAAY;AAEzB,UAAMC,IAAU,SAAS,cAAc,GAAG;AAK1C,QAJAA,EAAQ,YAAY,uBACpBA,EAAQ,cAAcpD,EAAM,aAAa,iBACzCmD,EAAa,YAAYC,CAAO,GAE5BpD,EAAM,aAAa;AACrB,YAAMqD,IAAS,SAAS,cAAc,GAAG;AACzC,MAAAA,EAAO,YAAY,oBACnBA,EAAO,cAAcrD,EAAM,aAC3BmD,EAAa,YAAYE,CAAM;AAAA,IACjC;AAEA,QAAIrD,EAAM,gBAAgB;AACxB,YAAMsD,IAAY,SAAS,cAAc,GAAG;AAC5C,MAAAA,EAAU,YAAY,oBACtBA,EAAU,cAActD,EAAM,gBAC9BmD,EAAa,YAAYG,CAAS;AAAA,IACpC;AAEA,QAAItD,EAAM,aAAa;AACrB,YAAMuD,IAAa,SAAS,cAAc,GAAG;AAC7C,MAAAA,EAAW,YAAY,oBACvBA,EAAW,cAAcvD,EAAM,aAC/BmD,EAAa,YAAYI,CAAU;AAAA,IACrC;AAEA,IAAAN,EAAK,YAAYE,CAAY;AAE7B,QAAIK,IAAyC;AAC7C,UAAMvD,IAAW,KAAK,iBAAiBD,CAAK;AAC5C,QAAIC,GAAU;AACZ,YAAMwD,IAAa,SAAS,cAAc,KAAK;AAC/C,MAAAA,EAAW,YAAY;AAEvB,YAAMC,IAAc,SAAS,cAAc,QAAQ;AACnD,MAAAA,EAAY,OAAO,UACnBA,EAAY,YAAY;AACxB,YAAMC,IAAO,KAAK,kBAAkB,iCAAiC;AACrE,MAAAD,EAAY,YAAYC,CAAI,GAC5BD,EAAY,YAAY,SAAS,eAAe,iBAAiB,CAAC,GAClEA,EAAY,iBAAiB,SAAS,MAAM;AAC1C,QAAK,KAAK,mBAAmBzD,EAAS,KAAKA,EAAS,GAAG,GACvD,KAAK,kBAAkBD,EAAM,EAAE;AAAA,MACjC,CAAC,GACDyD,EAAW,YAAYC,CAAW,GAClCD,EAAW,YAAY,KAAK,8BAA8BxD,CAAQ,CAAC,GACnEuD,IAAqBC;AAAA,IACvB,WAAWP,GAAmB;AAC5B,YAAMU,IAAU,SAAS,cAAc,KAAK;AAC5C,MAAAA,EAAQ,YAAY;AACpB,YAAMD,IAAO,KAAK,kBAAkB,yBAAyB;AAC7D,MAAAC,EAAQ,YAAYD,CAAI;AACxB,YAAME,IAAO,SAAS,cAAc,MAAM;AAC1C,MAAAA,EAAK,cAAcX,GACnBU,EAAQ,YAAYC,CAAI,GACxBL,IAAqBI;AAAA,IACvB;AAEA,UAAME,IAAU,SAAS,cAAc,KAAK;AAC5C,IAAAA,EAAQ,YAAY,uBACpBA,EAAQ,SAAS;AACjB,QAAIC,IAAa;AAEjB,UAAMC,IAAU,SAAS,cAAc,KAAK;AAC5C,IAAAA,EAAQ,YAAY;AACpB,QAAIC,IAA2C;AAE/C,QAAIjE,EAAM,OAAOA,EAAM,QAAQ,KAAK;AAClC,YAAMkE,IAAW,SAAS,cAAc,GAAG;AAC3C,MAAAA,EAAS,OAAOlE,EAAM,KACtBkE,EAAS,SAAS,UAClBA,EAAS,MAAM,uBACfA,EAAS,YAAY;AACrB,YAAMP,IAAO,KAAK,kBAAkB,mBAAmB;AACvD,MAAAO,EAAS,YAAYP,CAAI,GACzBO,EAAS,YAAY,SAAS,eAAe,WAAW,CAAC,GACzDF,EAAQ,YAAYE,CAAQ;AAAA,IAC9B;AAEA,QAAIlE,EAAM,OAAO;AACf,YAAMmE,IAAY,SAAS,cAAc,GAAG;AAC5C,MAAAA,EAAU,OAAO,UAAUnE,EAAM,KAAK,IACtCmE,EAAU,SAAS,UACnBA,EAAU,MAAM,uBAChBA,EAAU,YAAY;AACtB,YAAMR,IAAO,KAAK,kBAAkB,sBAAsB;AAC1D,MAAAQ,EAAU,YAAYR,CAAI,GAC1BQ,EAAU,YAAY,SAAS,eAAenE,EAAM,KAAK,CAAC,GAC1DgE,EAAQ,YAAYG,CAAS;AAAA,IAC/B;AAOA,QALIH,EAAQ,sBACVF,EAAQ,YAAYE,CAAO,GAC3BD,IAAa,MAGXtF,IAAAuB,EAAM,cAAN,QAAAvB,EAAiB,QAAQ;AAC3B,YAAM2F,IAAiB,SAAS,cAAc,KAAK;AACnD,MAAAA,EAAe,YAAY;AAC3B,YAAMC,IAAe,SAAS,cAAc,KAAK;AACjD,MAAAA,EAAa,YAAY;AACzB,YAAMV,IAAO,KAAK,kBAAkB,mBAAmB;AACvD,MAAAU,EAAa,YAAYV,CAAI,GAC7BU,EAAa,YAAY,SAAS,eAAe,WAAW,CAAC,GAC7DD,EAAe,YAAYC,CAAY;AAEvC,YAAMC,IAAY,SAAS,cAAc,IAAI;AAC7C,MAAAA,EAAU,YAAY,0BAEtBtE,EAAM,UACH,MAAA,EACA,KAAK,CAACuE,GAAGC,MAAMD,EAAE,QAAQC,EAAE,KAAK,EAChC,QAAQ,CAACC,MAAU;AAClB,cAAMC,IAAO,SAAS,cAAc,IAAI;AACxC,QAAAA,EAAK,YAAY;AAEjB,cAAMC,IAAc,SAAS,cAAc,MAAM;AACjD,QAAAA,EAAY,YAAY;AACxB,cAAMC,IAAc,KAAK,gBAAgBH,CAAK;AAC9C,YAAIG,GAAa;AACf,gBAAMC,IAAe,KAAK,kBAAkB,uBAAuB;AACnE,UAAAF,EAAY,YAAYE,CAAY;AAAA,QACtC;AACE,UAAAF,EAAY,cAAc;AAE5B,QAAAD,EAAK,YAAYC,CAAW;AAE5B,cAAMG,IAAU,SAAS,cAAc,KAAK;AAC5C,QAAAA,EAAQ,YAAY;AAEpB,cAAM1F,IAAO,SAAS,cAAc,MAAM;AAC1C,QAAAA,EAAK,YAAY,0BACjBA,EAAK,cAAcqF,EAAM,QACzBK,EAAQ,YAAY1F,CAAI;AAExB,cAAM2F,IAAWH,IAAc,SAAS,cAAc,GAAG,IAAI,SAAS,cAAc,MAAM;AAE1F,YADAG,EAAS,YAAY,4BACjBH,GAAa;AACf,gBAAMI,IAAO,KAAK,gBAAgBP,EAAM,QAAQ;AAChD,UAAIO,MACDD,EAA+B,OAAOC,GACtCD,EAA+B,SAAS,UACxCA,EAA+B,MAAM,uBACtCA,EAAS,UAAU,IAAI,gCAAgC;AAAA,QAE3D;AACA,QAAAA,EAAS,cAAcN,EAAM,UAC7BK,EAAQ,YAAYC,CAAQ,GAE5BL,EAAK,YAAYI,CAAO,GACxBR,EAAU,YAAYI,CAAI;AAAA,MAC5B,CAAC,GAEHN,EAAe,YAAYE,CAAS,GACpCR,EAAQ,YAAYM,CAAc,GAClCL,IAAa;AAAA,IACf;AAEA,QAAI/D,EAAM,WAAW;AACnB,YAAMiF,IAAQ,SAAS,cAAc,GAAG;AACxC,MAAAA,EAAM,YAAY,qBAClBA,EAAM,YAAYjF,EAAM,WACxBiF,EAAM,iBAAiB,GAAG,EAAE,QAAQ,CAACD,MAAS;AAC5C,QAAAA,EAAK,UAAU,IAAI,wBAAwB;AAC3C,cAAMrB,IAAO,KAAK,kBAAkB,wCAAwC;AAC5E,QAAAA,EAAK,UAAU,IAAI,wBAAwB,GAC3CqB,EAAK,YAAYrB,CAAI;AAAA,MACvB,CAAC,GACDG,EAAQ,YAAYmB,CAAK,GACzBlB,IAAa;AAAA,IACf;AAEA,QAAI/D,EAAM,YAAY;AACpB,MAAAiE,IAAiB,SAAS,cAAc,GAAG,GAC3CA,EAAe,OAAOjE,EAAM,YAC5BiE,EAAe,SAAS,UACxBA,EAAe,MAAM,uBACrBA,EAAe,YAAY;AAC3B,YAAMN,IAAO,KAAK,kBAAkB,8BAA8B;AAClE,MAAAM,EAAe,YAAYN,CAAI,GAC/BM,EAAe,YAAY,SAAS,eAAe,aAAa,CAAC;AAAA,IACnE;AAEA,QAAIA,GAAgB;AAClB,YAAMiB,IAAa,SAAS,cAAc,KAAK;AAC/C,MAAAA,EAAW,YAAY,uBACvBA,EAAW,YAAYjB,CAAc,GACrCH,EAAQ,YAAYoB,CAAU,GAC9BnB,IAAa;AAAA,IACf;AAEA,QAAIA,GAAY;AACd,YAAMoB,IAAS,SAAS,cAAc,QAAQ;AAC9C,MAAAA,EAAO,OAAO,UACdA,EAAO,YAAY;AACnB,YAAMC,IAAa,KAAK,kBAAkB,yBAAyB,GAC7DC,IAAa,SAAS,cAAc,MAAM;AAChD,MAAAA,EAAW,cAAc,mBACzBF,EAAO,YAAYC,CAAU,GAC7BD,EAAO,YAAYE,CAAU,GAC7BF,EAAO,iBAAiB,SAAS,MAAM;AACrC,cAAMG,IAAWxB,EAAQ;AACzB,QAAAA,EAAQ,SAAS,CAACwB,GAClBD,EAAW,cAAcC,IAAW,wBAAwB,mBAC5DF,EAAW,YAAYE,IAAW,6BAA6B;AAAA,MACjE,CAAC,GACDrC,EAAK,YAAYkC,CAAM,GACvBlC,EAAK,YAAYa,CAAO;AAAA,IAC1B;AAEA,WAAIN,KACFP,EAAK,YAAYO,CAAkB,GAG9BP;AAAA,EACT;AAAA,EAEQ,8BAA8BhD,GAAuB;AAC3D,UAAM+D,IAAU,SAAS,cAAc,KAAK;AAC5C,WAAAA,EAAQ,YAAY,iCACpBA,EAAQ;AAAA,MACN,KAAK;AAAA,QACH,sDAAsD/D,EAAS,GAAG,IAAIA,EAAS,GAAG;AAAA,QAClF;AAAA,QACA;AAAA,MAAA;AAAA,IACF,GAEF+D,EAAQ;AAAA,MACN,KAAK;AAAA,QACH,0BAA0B/D,EAAS,GAAG,IAAIA,EAAS,GAAG;AAAA,QACtD;AAAA,QACA;AAAA,MAAA;AAAA,IACF,GAEK+D;AAAA,EACT;AAAA,EAEQ,2BAA2BuB,GAAa9E,GAAe+E,GAAmB;AAChF,UAAMR,IAAO,SAAS,cAAc,GAAG;AACvC,WAAAA,EAAK,OAAOO,GACZP,EAAK,SAAS,UACdA,EAAK,MAAM,uBACXA,EAAK,YAAY,+BACjBA,EAAK,YAAY,KAAK,kBAAkBQ,CAAS,CAAC,GAClDR,EAAK,YAAY,SAAS,eAAevE,CAAK,CAAC,GACxCuE;AAAA,EACT;AAAA,EAEQ,gBAAgBhF,GAA6B;AACnD,UAAMyF,IAAmB,KAAK,oBAAoBzF,EAAM,eAAe,EAAE;AACzE,WAAIyF,KAAoBA,KAAoBnH,IACnCA,EAAgBmH,CAAgB,IAErCA,EAAiB,SAAS,eAAe,IACpC,OAGPA,EAAiB,SAAS,WAAW,KACrCA,EAAiB,SAAS,MAAM,KAChCA,EAAiB,SAAS,OAAO,KACjCA,EAAiB,SAAS,OAAO,KACjCA,EAAiB,SAAS,YAAY,IAE/B,QAGPA,EAAiB,SAAS,OAAO,KACjCA,EAAiB,SAAS,UAAU,KACpCA,EAAiB,SAAS,aAAa,KACvCA,EAAiB,SAAS,SAAS,KACnCA,EAAiB,SAAS,UAAU,IAE7B,UAEF;AAAA,EACT;AAAA,EAEQ,oBAAoBC,GAAe;AACzC,WAAOA,EACJ,YAAA,EACA,UAAU,KAAK,EACf,QAAQ,oBAAoB,EAAE,EAC9B,KAAA;AAAA,EACL;AAAA,EAEQ,uBAAuB;AXnvD1B,QAAAjH;AWovDH,UAAM0B,IAAa,KAAK,oBAAoB,KAAK,KAAK;AACtD,YAAOvC,IAAAA,EAAcuC,CAAU,MAAxBvC,OAAAA,IAA6B,KAAK;AAAA,EAC3C;AAAA,EAEQ,kBAAkBsC,GAAe;AXxvDpC,QAAAzB;AWyvDH,UAAM0B,IAAa,KAAK,oBAAoBD,CAAK;AACjD,WAAKC,KAGEvC,IAAAA,EAAcuC,CAAU,MAAxBvC,OAAAA,IAA6BuC,IAF3B;AAAA,EAGX;AAAA,EAEQ,oBAAoBD,GAAe;AAMzC,WALmBA,EAChB,YAAA,EACA,UAAU,KAAK,EACf,QAAQ,oBAAoB,EAAE,EAC9B,QAAQ,eAAe,EAAE;AAAA,EAE9B;AAAA,EAEQ,cAAcF,GAAmC;AACvD,UAAM2F,IAAM,KAAK,YAAY,WACvBC,IAAe,KAAK,sBAAsBD,GAAK3F,CAAK;AAC1D,WAAI4F,MAGA,KAAK,oBACA,GAAG,KAAK,iBAAiB,GAAGD,CAAG,SAEpC,KAAK,uBACA,KAAK,uBAEP;AAAA,EACT;AAAA,EAEQ,sBAAsBA,GAAa3F,GAAmC;AXxxDzE,QAAAvB;AWyxDH,UAAMoH,IAAgB7F,IAAQ,OAAOA,EAAM,IAAI,IAAI,KAE7C8F,KADW,OAAO,SAASD,CAAa,IAAIA,IAAgB,KAAK,cACzC,IAAI,GAAGF,CAAG,sBAAsB,GAAGA,CAAG;AACpE,YAAOlH,IAAAlB,GAAuB,UAAUuI,CAAQ,EAAE,MAA3C,OAAArH,IAAgD;AAAA,EACzD;AAAA,EAEQ,0BAA0BuB,GAAyC;AACzE,QAAI,KAAK,iBAAiBA,CAAK;AAC7B,aAAO;AAGT,UAAM+F,IAAM,OAAO/F,EAAM,GAAG,GACtBgG,IAAM,OAAOhG,EAAM,GAAG,GACtBiG,IAAiB,OAAOjG,EAAM,OAAO,UAAU,SAASA,EAAM,OAAO,UAAU;AACrF,WAAI,CAAC,OAAO,SAAS+F,CAAG,KAAK,CAAC,OAAO,SAASC,CAAG,IACxC,0BAA0BC,CAAc,MAE1C,0BAA0BA,CAAc;AAAA,EACjD;AAAA,EAEQ,iBAAiBjG,GAA6D;AACpF,UAAM+F,IAAM,OAAO/F,EAAM,GAAG,GACtBgG,IAAM,OAAOhG,EAAM,GAAG;AAC5B,WAAK,KAAK,qBAAqB+F,GAAKC,CAAG,IAGhC,EAAE,KAAAD,GAAK,KAAAC,EAAA,IAFL;AAAA,EAGX;AAAA,EAEQ,qBAAqBD,GAAaC,GAAa;AACrD,WACE,OAAO,SAASD,CAAG,KACnB,OAAO,SAASC,CAAG,KACnBD,KAAO9H,EAAyB,UAChC8H,KAAO9H,EAAyB,UAChC+H,KAAO/H,EAAyB,UAChC+H,KAAO/H,EAAyB;AAAA,EAEpC;AAAA,EAEQ,cAAcyD,GAAoB;AACxC,UAAM7B,IAAK,OAAe;AAC1B,QAAI,CAACA,KAAK,CAAC,KAAK;AACd;AAEF,SAAK,QAAQ,QAAQ,CAACqG,MAAWA,EAAO,OAAO,IAAI,CAAC,GACpD,KAAK,UAAU,CAAA;AAEf,UAAMC,IAAiE,CAAA;AAQvE,QAPAzE,EAAO,QAAQ,CAAC1B,MAAU;AACxB,YAAMC,IAAW,KAAK,iBAAiBD,CAAK;AAC5C,MAAIC,KACFkG,EAAY,KAAK,EAAE,OAAAnG,GAAO,UAAAC,EAAA,CAAU;AAAA,IAExC,CAAC,GAEG,CAACkG,EAAY;AACf;AAGF,UAAMC,IAAS,IAAIvG,EAAE,KAAK,aAAA;AA8B1B,QA5BAsG,EAAY,QAAQ,CAAC,EAAE,OAAAnG,GAAO,UAAAC,QAAe;AAC3C,YAAM,EAAE,KAAA8F,GAAK,KAAAC,EAAA,IAAQ/F,GACfoG,IAAU,KAAK,cAAcrG,CAAK,GAClC2D,IACJ0C,KAAW,KAAK,MACZ;AAAA,QACE,KAAKA;AAAA,QACL,YAAY,IAAIxG,EAAE,KAAK,KAAK,IAAI,EAAE;AAAA,QAClC,QAAQ,IAAIA,EAAE,KAAK,MAAM,IAAI,EAAE;AAAA,MAAA,IAEjC,QACAqG,IAAS,IAAIrG,EAAE,KAAK,OAAO;AAAA,QAC/B,KAAK,KAAK;AAAA,QACV,UAAU,EAAE,KAAAkG,GAAK,KAAAC,EAAA;AAAA,QACjB,OAAOhG,EAAM;AAAA,QACb,MAAA2D;AAAA,MAAA,CACD;AACD,MAAAuC,EAAO,YAAY,SAAS,MAAM;AAChC,aAAK,eAAelG,CAAK,GACzB,KAAK,kBAAkBA,EAAM,EAAE;AAAA,MACjC,CAAC,GACD,KAAK,QAAQ,KAAKkG,CAAM;AACxB,YAAMI,IAAiBJ,EAAO,YAAA;AAC9B,MAAII,KACFF,EAAO,OAAOE,CAAc;AAAA,IAEhC,CAAC,GAEG,CAAC,KAAK,sBAAsB,KAAK,QAAQ,QAAQ;AACnD,YAAMrG,IAAW,KAAK,QAAQ,CAAC,EAAE,YAAA;AACjC,UAAIA,GAAU;AACZ,aAAK,IAAI,UAAUA,CAAQ,GAC3B,KAAK,IAAI,QAAQ,EAAE,GACnB,KAAK,qBAAqB;AAC1B;AAAA,MACF;AAAA,IACF;AAEA,QAAI,KAAK,QAAQ,WAAW,GAAG;AAC7B,YAAMA,IAAW,KAAK,QAAQ,CAAC,EAAE,YAAA;AACjC,MAAIA,KACF,KAAK,IAAI,UAAUA,CAAQ,GAE7B,KAAK,IAAI,QAAQ,EAAE;AAAA,IACrB;AACE,WAAK,IAAI,UAAUmG,CAAM;AAAA,EAE7B;AAAA,EAEQ,eAAepG,GAAiB;AXx4DnC,QAAAvB;AWy4DH,IAAI,CAAC,KAAK,uBAAuB,CAAC,KAAK,qBAAqB,CAAC,KAAK,qBAGlE,KAAK,kBAAkB,cAAcuB,EAAM,UAAU,cACrD,KAAK,iBAAiB,gBAAgB,KAAK,wBAAwBA,CAAK,CAAC,GACzE,KAAK,oBAAoB,gBAAgB,QAAQ,IACjDvB,IAAA,KAAK,0BAAL,QAAAA,EAA4B;AAAA,EAC9B;AAAA,EAsBQ,wBAAwBuB,GAAiB;AXt6D5C,QAAAvB;AWu6DH,UAAMiE,IAAW,SAAS,uBAAA;AAE1B,QAAI1C,EAAM,SAAS;AACjB,YAAMuG,IAAQ,SAAS,cAAc,KAAK;AAC1C,MAAAA,EAAM,YAAY,sBAClBA,EAAM,MAAMvG,EAAM,SAClBuG,EAAM,MAAMvG,EAAM,UAAU,oBAC5BuG,EAAM,UAAU,QAChBA,EAAM,iBAAiB,SAAS,MAAMA,EAAM,UAAU,EAAE,MAAM,IAAM,GACpE7D,EAAS,YAAY6D,CAAK;AAAA,IAC5B;AAEA,UAAMC,IAAkB,KAAK,wBAAA;AAC7B,SAAK,qBAAqBA,GAAiB,aAAaxG,EAAM,SAAS,GACvE,KAAK,qBAAqBwG,GAAiB,UAAUxG,EAAM,WAAW,GACtE,KAAK,qBAAqBwG,GAAiB,aAAaxG,EAAM,cAAc,GAC5E,KAAK,qBAAqBwG,GAAiB,UAAUxG,EAAM,WAAW,GACtE,KAAK,qBAAqBwG,GAAiB,OAAOxG,EAAM,GAAG,GACvDwG,EAAgB,qBAClB9D,EAAS,YAAY8D,CAAe;AAGtC,UAAMpC,IAAiB,KAAK,wBAAA;AAE5B,QADA,KAAK,qBAAqBA,GAAgB,UAAUpE,EAAM,KAAK,IAC3DvB,IAAAuB,EAAM,cAAN,QAAAvB,EAAiB,QAAQ;AAC3B,YAAMgC,IAAQ,SAAS,cAAc,GAAG;AACxC,MAAAA,EAAM,YAAY;AAClB,YAAMgG,IAAS,SAAS,cAAc,MAAM;AAC5C,MAAAA,EAAO,YAAY,sBACnBA,EAAO,cAAc,cACrBhG,EAAM,YAAYgG,CAAM,GACxBrC,EAAe,YAAY3D,CAAK;AAEhC,YAAM6D,IAAY,SAAS,cAAc,IAAI;AAC7C,MAAAA,EAAU,YAAY,2BACtBtE,EAAM,UACH,MAAA,EACA,KAAK,CAACuE,GAAGC,MAAMD,EAAE,QAAQC,EAAE,KAAK,EAChC,QAAQ,CAACC,MAAU;AAClB,QAAAH,EAAU,YAAY,KAAK,0BAA0BG,CAAK,CAAC;AAAA,MAC7D,CAAC,GACHL,EAAe,YAAYE,CAAS;AAAA,IACtC;AAKA,QAJIF,EAAe,qBACjB1B,EAAS,YAAY0B,CAAc,GAGjCpE,EAAM,WAAW;AACnB,YAAM0G,IAAe,KAAK,wBAAA,GACpBzB,IAAQ,SAAS,cAAc,KAAK;AAC1C,MAAAA,EAAM,YAAY,sBAClBA,EAAM,YAAYjF,EAAM,WACxBiF,EAAM,iBAAiB,GAAG,EAAE,QAAQ,CAACD,MAAS;AAC5C,QAAAA,EAAK,SAAS,UACdA,EAAK,MAAM;AAAA,MACb,CAAC,GACD0B,EAAa,YAAYzB,CAAK,GAC9BvC,EAAS,YAAYgE,CAAY;AAAA,IACnC;AAEA,UAAM1C,IAAU,KAAK,wBAAwBhE,CAAK;AAClD,WAAIgE,EAAQ,qBACVtB,EAAS,YAAYsB,CAAO,GAGvBtB;AAAA,EACT;AAAA,EAEQ,0BAA0B;AAChC,UAAME,IAAU,SAAS,cAAc,KAAK;AAC5C,WAAAA,EAAQ,YAAY,wBACbA;AAAA,EACT;AAAA,EAEQ,qBAAqBA,GAAsBnC,GAAeP,GAAe;AAC/E,UAAMC,KAAcD,KAAA,OAAAA,IAAS,IAAI,KAAA;AACjC,QAAI,CAACC,KAAcA,MAAe;AAChC;AAEF,UAAMwG,IAAO,SAAS,cAAc,GAAG;AACvC,IAAAA,EAAK,YAAY;AACjB,UAAMF,IAAS,SAAS,cAAc,MAAM;AAC5C,IAAAA,EAAO,YAAY,sBACnBA,EAAO,cAAc,GAAGhG,CAAK,MAC7BkG,EAAK,YAAYF,CAAM,GACvBE,EAAK,YAAY,SAAS,eAAexG,CAAU,CAAC,GACpDyC,EAAQ,YAAY+D,CAAI;AAAA,EAC1B;AAAA,EAEQ,0BAA0BlC,GAAsB;AXhgEnD,QAAAhG;AWigEH,UAAMiG,IAAO,SAAS,cAAc,IAAI;AACxC,IAAAA,EAAK,YAAY;AAEjB,UAAMjE,IAAQ,SAAS,cAAc,MAAM;AAC3C,IAAAA,EAAM,YAAY,sBAClBA,EAAM,cAAc,GAAGgE,EAAM,UAAU,UAAU,MACjDC,EAAK,YAAYjE,CAAK;AAEtB,UAAMmG,MAAenI,IAAAgG,EAAM,aAAN,OAAAhG,IAAkB,IAAI,KAAA,GACrCoI,IAAe,KAAK,gBAAgBpC,CAAK,IAAI,KAAK,gBAAgBmC,CAAW,IAAI;AACvF,QAAIC,GAAc;AAChB,YAAM7B,IAAO,SAAS,cAAc,GAAG;AACvC,MAAAA,EAAK,OAAO6B,GACZ7B,EAAK,SAAS,UACdA,EAAK,MAAM,uBACXA,EAAK,YAAY,qBACjBA,EAAK,cAAc4B,GACnBlC,EAAK,YAAYM,CAAI;AAAA,IACvB;AACE,MAAAN,EAAK,YAAY,SAAS,eAAekC,CAAW,CAAC;AAGvD,WAAOlC;AAAA,EACT;AAAA,EAEQ,wBAAwB1E,GAAiB;AAC/C,UAAMgE,IAAU,SAAS,cAAc,KAAK;AAC5C,WAAAA,EAAQ,YAAY,6CAEhBhE,EAAM,OAAOA,EAAM,QAAQ,OAC7BgE,EAAQ,YAAY,KAAK,qBAAqBhE,EAAM,KAAK,aAAa,IAAM,mBAAmB,CAAC,GAE9FA,EAAM,cACRgE,EAAQ,YAAY,KAAK,qBAAqBhE,EAAM,YAAY,aAAa,CAAC,GAE5EA,EAAM,SACRgE,EAAQ,YAAY,KAAK,qBAAqB,UAAUhE,EAAM,KAAK,IAAI,iBAAiB,IAAO,sBAAsB,CAAC,GAGjHgE;AAAA,EACT;AAAA,EAEQ,qBAAqB8C,GAAcjD,GAAckD,IAAW,IAAMvB,GAAoB;AAC5F,UAAMR,IAAO,SAAS,cAAc,GAAG;AACvC,WAAAA,EAAK,OAAO8B,GACZ9B,EAAK,YAAY,qBACbQ,KACFR,EAAK,YAAY,KAAK,kBAAkBQ,CAAS,CAAC,GAEpDR,EAAK,YAAY,SAAS,eAAenB,CAAI,CAAC,GAC1CkD,MACF/B,EAAK,SAAS,UACdA,EAAK,MAAM,wBAENA;AAAA,EACT;AAAA,EAYQ,cAAcgC,GAAmB;AAAA,EAAC;AAAA,EAElC,oBAAoBrI,GAAe;AACzC,QAAI,CAAC,KAAK;AACR;AAEF,UAAMiE,IAAU,KAAK,eAAe,cAA2B,uBAAuBjE,CAAI,IAAI;AAC9F,IAAKiE,KAGLA,EAAQ,eAAe,EAAE,UAAU,UAAU,OAAO,SAAS;AAAA,EAC/D;AAAA,EAEQ,oBAAoB;AAC1B,SAAK,YAAY,QAAQ,CAAC3D,MAAQ;AAChC,YAAMN,IAAOM,EAAI,QAAQ,MACnBgI,IAAW,KAAK,eAAetI;AACrC,MAAAM,EAAI,UAAU,OAAO,aAAagI,CAAQ,GAC1ChI,EAAI,aAAa,gBAAgB,OAAOgI,CAAQ,CAAC;AAAA,IACnD,CAAC;AAAA,EACH;AAAA,EAEQ,yBAAyB;AAC/B,SAAK,YAAY,QAAQ,CAAChI,MAAQ;AACnB,MAAAA,EAAI,QAAQ;AACzB,YAAMiI,IAAYjI,EAAI,QAAQ,SAASA,EAAI,eAAe;AAC1D,MAAAA,EAAI,cAAciI;AAAA,IACpB,CAAC;AAAA,EACH;AAAA,EAEQ,uBAAuB;AAC7B,QAAI,CAAC,KAAK;AACR;AAGF,IADiB,KAAK,eAAe,iBAA8B,qBAAqB,EAC/E,QAAQ,CAACtE,MAAY;AAC5B,MAAAA,EAAQ,gBAAgB,QAAQ;AAAA,IAClC,CAAC;AAAA,EACH;AAAA,EAiCQ,iBAAiBmD,GAAaC,GAA8B;AAClE,QAAI,CAAC,KAAK,OAAO;AACf,aAAO;AAET,QAAIjH,IAA2B,MAC3BoI,IAAe;AACnB,gBAAK,OAAO,QAAQ,CAACnH,MAAU;AAC7B,YAAMC,IAAW,KAAK,iBAAiBD,CAAK;AAC5C,UAAI,CAACC;AACH;AAEF,YAAMmH,IAAW,KAAK,UAAUrB,GAAKC,GAAK/F,EAAS,KAAKA,EAAS,GAAG;AACpE,MAAImH,IAAWD,MACbA,IAAeC,GACfrI,IAAUiB;AAAA,IAEd,CAAC,GACMjB;AAAA,EACT;AAAA,EAEQ,UAAUsI,GAAcC,GAAcC,GAAcC,GAAc;AACxE,UAAMC,IAAQ,CAACC,MAAiBA,IAAM,KAAK,KAAM,KAE3CC,IAAOF,EAAMF,IAAOF,CAAI,GACxBO,IAAOH,EAAMD,IAAOF,CAAI,GACxB/C,IACJ,KAAK,IAAIoD,IAAO,CAAC,IAAI,KAAK,IAAIA,IAAO,CAAC,IACtC,KAAK,IAAIF,EAAMJ,CAAI,CAAC,IAAI,KAAK,IAAII,EAAMF,CAAI,CAAC,IAAI,KAAK,IAAIK,IAAO,CAAC,IAAI,KAAK,IAAIA,IAAO,CAAC;AAExF,WAAO,UADG,IAAI,KAAK,MAAM,KAAK,KAAKrD,CAAC,GAAG,KAAK,KAAK,IAAIA,CAAC,CAAC;AAAA,EAEzD;AAAA,EAEQ,kBAAkBsD,GAAiB;AACzC,QAAI,CAAC,KAAK;AACR;AAEF,UAAM5E,IAAO,KAAK,eAAe,cAA2B,mBAAmB4E,CAAO,IAAI;AAC1F,IAAK5E,MAGLA,EAAK,eAAe,EAAE,UAAU,UAAU,OAAO,UAAU,GAC3D,KAAK,mBAAmBA,CAAI;AAAA,EAC9B;AAAA,EAEQ,mBAAmBA,GAAmB;AXvrEzC,QAAAxE;AWwrEH,IAAI,KAAK,qBAAqB,SAC5B,aAAa,KAAK,gBAAgB,GAClC,KAAK,mBAAmB,QAE1BA,IAAA,KAAK,mBAAL,QAAAA,EAAqB,iBAAiB,0BAA0B,QAAQ,CAACqJ,MAAO;AAC9E,MAAAA,EAAG,UAAU,OAAO,uBAAuB;AAAA,IAC7C,IACA7E,EAAK,UAAU,IAAI,uBAAuB,GAC1C,KAAK,mBAAmB,OAAO,WAAW,MAAM;AAC9C,MAAAA,EAAK,UAAU,OAAO,uBAAuB,GAC7C,KAAK,mBAAmB;AAAA,IAC1B,GAAG,IAAI;AAAA,EACT;AAAA,EAEQ,kBAAkB8E,GAAsC;AAC9D,QAAI,GAAC,KAAK,sBAAsB,CAAC,KAAK;AAGtC,UAAIA,MAAU;AACZ,aAAK,mBAAmB,aAAa,UAAU,EAAE,GACjD,KAAK,YAAY,gBAAgB,QAAQ;AAAA,WACpC;AACL,cAAMlE,IAAOkE,MAAU,YAAY,uBAAuB;AAC1D,aAAK,mBAAmB,cAAclE,GACtC,KAAK,mBAAmB,gBAAgB,QAAQ,GAChD,KAAK,YAAY,aAAa,UAAU,EAAE;AAAA,MAC5C;AAAA,EACF;AAAA,EAEQ,iBAAiBkC,GAAaC,GAAagC,IAAa,IAAI;AAElE,QAAI,CADO,OAAe,UAChB,CAAC,KAAK,OAAO,CAAC,OAAO,SAASjC,CAAG,KAAK,CAAC,OAAO,SAASC,CAAG;AAClE;AAEF,UAAMiC,IAAc,OAAO,KAAK,IAAI,WAAY,aAAa,KAAK,IAAI,QAAA,IAAY,MAC5EC,IAAY,CAACD,KAAeA,IAAcD;AAChD,SAAK,cAAcjC,GAAKC,GAAK,MAAM;AACjC,MAAIkC,KACF,KAAK,IAAI,QAAQF,CAAU;AAAA,IAE/B,CAAC;AAAA,EACH;AAAA,EAEA,MAAc,mBAAmBjC,GAAaC,GAAa;AAEzD,IAAI,CADO,OAAe,UAChB,CAAC,KAAK,OAAO,CAAC,OAAO,SAASD,CAAG,KAAK,CAAC,OAAO,SAASC,CAAG,MAIpE,MAAM,KAAK,cAAc,GAAG,GAAG,GAC/B,MAAM,KAAK,KAAK,GAAG,GACnB,MAAM,IAAI,QAAc,CAACzG,MAAY;AACnC,WAAK,cAAcwG,GAAKC,GAAKzG,CAAO;AAAA,IACtC,CAAC,GACD,MAAM,KAAK,KAAK,GAAG,GACnB,MAAM,KAAK,cAAc,IAAI,GAAG;AAAA,EAClC;AAAA,EAEQ,KAAK4I,GAAY;AACvB,WAAO,IAAI,QAAc,CAAC5I,MAAY;AACpC,aAAO,WAAWA,GAAS4I,CAAE;AAAA,IAC/B,CAAC;AAAA,EACH;AAAA,EAEA,MAAc,cAAcH,GAAoBI,IAAW,KAAK;AAE9D,QACE,CAFS,OAAe,UAGxB,CAAC,KAAK,OACN,OAAO,KAAK,IAAI,WAAY,cAC5B,OAAO,KAAK,IAAI,WAAY;AAE5B;AAEF,UAAMC,IAAY,KAAK,IAAI,QAAA;AAC3B,QAAI,CAAC,OAAO,SAASA,CAAS,GAAG;AAC/B,WAAK,IAAI,QAAQL,CAAU;AAC3B;AAAA,IACF;AACA,UAAMM,IAAQN,IAAaK;AAC3B,QAAI,KAAK,IAAIC,CAAK,IAAI,MAAM;AAC1B,WAAK,IAAI,QAAQN,CAAU;AAC3B;AAAA,IACF;AAEA,UAAM,IAAI,QAAc,CAACzI,MAAY;AACnC,YAAMgJ,IAAY,YAAY,IAAA,GACxBC,IAAO,CAACC,MAAc,IAAI,KAAK,IAAI,IAAIA,GAAG,CAAC,GAE3CC,IAAO,CAACC,MAAgB;AAC5B,cAAMC,IAAUD,IAAMJ,GAChBM,IAAW,KAAK,IAAID,IAAUR,GAAU,CAAC,GACzCU,IAAQN,EAAKK,CAAQ,GACrBE,IAAWV,IAAYC,IAAQQ;AACrC,aAAK,IAAI,QAAQ,KAAK,MAAMC,IAAW,GAAG,IAAI,GAAG,GAC7CF,IAAW,IACb,sBAAsBH,CAAI,KAE1B,KAAK,IAAI,QAAQV,CAAU,GAC3BzI,EAAA;AAAA,MAEJ;AAEA,4BAAsBmJ,CAAI;AAAA,IAC5B,CAAC;AAAA,EACH;AAAA,EAEQ,cAAcM,GAAmBC,GAAmBC,GAAyB;AAEnF,QAAI,CADO,OAAe,UAChB,CAAC,KAAK;AACd;AAEF,IAAI,KAAK,sBAAsB,SAC7B,qBAAqB,KAAK,iBAAiB,GAC3C,KAAK,oBAAoB;AAE3B,UAAMC,IAAc,KAAK,IAAI,UAAA;AAC7B,QAAI,CAACA,GAAa;AAChB,WAAK,IAAI,UAAU,EAAE,KAAKH,GAAW,KAAKC,GAAW,GACrDC,KAAA,QAAAA;AACA;AAAA,IACF;AACA,UAAME,IAAWD,EAAY,IAAA,GACvBE,IAAWF,EAAY,IAAA,GACvBG,IAAWN,IAAYI,GACvBG,IAAWN,IAAYI,GACvBjB,IAAW,KACXG,IAAY,YAAY,IAAA,GAExBC,IAAO,CAACC,MAAc,IAAI,KAAK,IAAI,IAAIA,GAAG,CAAC,GAE3CC,IAAO,CAACC,MAAgB;AAC5B,YAAMC,IAAUD,IAAMJ,GAChBM,IAAW,KAAK,IAAID,IAAUR,GAAU,CAAC,GACzCU,IAAQN,EAAKK,CAAQ,GACrBW,IAAUJ,IAAWE,IAAWR,GAChCW,IAAUJ,IAAWE,IAAWT;AACtC,WAAK,IAAI,UAAU,EAAE,KAAKU,GAAS,KAAKC,GAAS,GAC7CZ,IAAW,IACb,KAAK,oBAAoB,sBAAsBH,CAAI,KAEnD,KAAK,oBAAoB,MACzBQ,KAAA,QAAAA;AAAA,IAEJ;AAEA,SAAK,oBAAoB,sBAAsBR,CAAI;AAAA,EACrD;AAAA,EAEA,OAAe,oBAAoB;AACjC,QAAInK,EAAM;AACR;AAGF,QADiB,SAAS,cAAc,cAAcd,CAAuB,IAAI,GACnE;AACZ,MAAAc,EAAM,sBAAsB;AAC5B;AAAA,IACF;AACA,UAAMyG,IAAO,SAAS,cAAc,MAAM;AAC1C,IAAAA,EAAK,MAAM,cACXA,EAAK,OAAOvH,GACZuH,EAAK,cAAc,aACnBA,EAAK,iBAAiB,eACtBA,EAAK,iBAAiB,QAAQ,MAAM;AAClC,MAAAzG,EAAM,sBAAsB;AAAA,IAC9B,CAAC,GACD,SAAS,KAAK,YAAYyG,CAAI;AAAA,EAChC;AAAA,EAEQ,kBAAkB0E,GAAmB;AAC3C,UAAM/F,IAAO,SAAS,cAAc,GAAG;AACvC,WAAAA,EAAK,YAAY+F,GACjB/F,EAAK,aAAa,eAAe,MAAM,GAChCA;AAAA,EACT;AAAA,EAEQ,gBAAgBc,GAAsB;AAC5C,WAAO,GAAQA,EAAM,YAAYA,EAAM;AAAA,EACzC;AAAA,EAEQ,gBAAgBA,GAAe;AACrC,UAAMkF,IAASlF,EAAM,QAAQ,QAAQ,EAAE;AACvC,WAAKkF,IAGE,iBAAiBA,CAAM,KAFrB;AAAA,EAGX;AACF;AAruEEnL,EADWD,GACJ,OAAM,WACbC,EAFWD,GAEI,2BAAgD,OAC/DC,EAHWD,GAGI,wBAA2D,OAqC1EC,EAxCWD,GAwCI,uBAAsB;AAxChC,IAAMqL,IAANrL;AC9IP,MAAAsL,KAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SCAfC,KAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SCATC,KAAgB,YAChBC,KAAqB,0BACrBC,KAAqB,mBACrBC,KAAyB,0HACzBC,IAAyB,WACzB3M,KAAsB,WACtB4M,IAAsB,cACtBC,KAAoB,oBACpBC,KAAoB,kBACpBC,KAAmB,uBAAA,OAAA;AAAA,EAAA,kBAAAV;AAAA,EAAA,wBAAAC;AAAA,CAAA,GAKnBnM,KAAuC;AAAA,EAC3C,QAAQ;AAAA,EACR,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,MAAM;AACR,GACMC,KAAwC;AAAA,EAC5C,KAAK;AAAA,EACL,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,WAAW;AACb,GACM4M,KAAsC;AAAA,EAC1C,GAAK;AAAA,EACL,GAAK;AAAA,EACL,KAAK;AAAA,EACL,SAAS;AAAA,EACT,KAAK;AAAA,EACL,QAAQ;AAAA,EACR,GAAK;AAAA,EACL,KAAK;AAAA,EACL,OAAO;AAAA,EACP,KAAK;AAAA,EACL,QAAQ;AAAA,EACR,GAAK;AAAA,EACL,KAAK;AAAA,EACL,QAAQ;AAAA,EACR,KAAK;AAAA,EACL,SAAS;AAAA,EACT,GAAK;AAAA,EACL,KAAK;AAAA,EACL,WAAW;AAAA,EACX,KAAK;AAAA,EACL,WAAW;AAAA,EACX,GAAK;AAAA,EACL,KAAK;AAAA,EACL,QAAQ;AAAA,EACR,KAAK;AAAA,EACL,UAAU;AAAA,EACV,GAAK;AAAA,EACL,KAAK;AAAA,EACL,SAAS;AAAA,EACT,KAAK;AAAA,EACL,QAAQ;AAAA,EACR,GAAK;AAAA,EACL,KAAK;AAAA,EACL,QAAQ;AAAA,EACR,KAAK;AAAA,EACL,UAAU;AACZ,GACMC,KAAmD;AAAA,EACvD,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AACP,GACMC,KAA0B,OAAO;AAAA,EACrC,OAAO,QAAQH,EAAgB,EAAE,IAAI,CAAC,CAACzI,GAAM6I,CAAG,MAAM;Ad1EjD,QAAAlM,GAAAS;Ac2EH,UAAME,KAAOF,KAAAT,IAAAqD,EAAK,MAAM,GAAG,EAAE,UAAhB,gBAAArD,EAAuB,QAAQ,WAAW,QAA1C,OAAAS,IAAiD;AAC9D,WAAO,CAAC0L,EAAexL,CAAI,GAAGyL,GAAiBF,CAAG,CAAC;AAAA,EACrD,CAAC;AACH;AAUA,SAASE,GAAiBF,GAAa;AACrC,SAAOA,EACJ,QAAQ,yBAAyB,EAAE,EACnC,QAAQ,0BAA0B,EAAE,EACpC,QAAQ,sCAAsC,EAAE,EAChD,QAAQ,WAAW,kEAAkE,EACrF,QAAQ,8BAA8B,6BAA6B;AACxE;AAEA,SAASC,EAAe1K,GAAe;AACrC,SAAOA,EACJ,UAAU,KAAK,EACf,QAAQ,oBAAoB,EAAE,EAC9B,KAAA,EACA,YAAA,EACA,QAAQ,eAAe,EAAE;AAC9B;AAEA,SAAS4K,GAAU5K,GAAe;AAChC,SAAO,yDAAyD,KAAKA,EAAM,KAAA,CAAM;AACnF;AAEO,MAAM6K,UAAmB,YAAY;AAAA,EAoC1C,cAAc;AACZ,UAAA;AAlCM,IAAAvM,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA,qDAA8B,IAAA;AAm5B9B,IAAAA,EAAA,2BAAoB,MAAM;AAChC,MAAI,KAAK,OAAO,UACd,KAAK,sBAAA,GAGP,KAAK,YAAY,KAAK,OAAO,MAAM;AAAA,IACrC;AAEQ,IAAAA,EAAA,yBAAkB,CAACE,MAAsB;AAC/C,YAAMoD,IAAOpD,EAAM,aAAA;AAKnB,UAJqBoD,EAAK,KAAK,CAACkJ,MACvBA,aAAgB,qBAAqBA,EAAK,aAAa,eAAe,MAAM,MACpF,GAEiB;AAChB,QAAAtM,EAAM,eAAA;AACN;AAAA,MACF;AAMA,MAJ2BoD,EAAK,KAAK,CAACkJ,MAC7BA,aAAgB,qBAAqBA,aAAgB,iBAC7D,KAGC,KAAK,YAAY,EAAK;AAAA,IAE1B;AAEQ,IAAAxM,EAAA,oCAA6B,MAAM;AACzC,WAAK,sBAAA;AAAA,IACP;AAEQ,IAAAA,EAAA,sCAA+B,CAACyM,MAAgC;AACtE,MAAIA,EAAU,KAAK,CAACC,MAAA;Ad/iCjB,YAAAzM;Ac+iC8B,gBAAAA,IAAAyM,EAAS,kBAAT,gBAAAzM,EAAwB,WAAW;AAAA,OAAK,KACvE,KAAK,sBAAA;AAAA,IAET;AAEQ,IAAAD,EAAA,gCAAyB,MAAM;AACrC,WAAK,sBAAA;AAAA,IACP;AAEQ,IAAAA,EAAA,6BAAsB,CAACE,MAAsB;AACnD,MAAI,KAAK,OAAO,UAAUA,EAAM,eAAe,SAAS,IAAI,KAI5D,KAAK,YAAY,EAAK;AAAA,IACxB;AAEQ,IAAAF,EAAA,+BAAwB,CAACE,MAAyB;AACxD,MAAI,KAAK,OAAO,UAAUA,EAAM,QAAQ,aAIxC,KAAK,YAAY,EAAK,GACtB,KAAK,SAAS,MAAA;AAAA,IAChB;AAn7BE,SAAK,OAAO,KAAK,aAAa,EAAE,MAAM,QAAQ,GAC9C,KAAK,KAAK,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uCAQayL,CAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8CAuEfA,CAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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 hqv: '#2b3d60',\n ktm: '#ff6600'\n};\nconst BRAND_ALIASES: Record<string, string> = {\n gas: 'gasgas',\n gasgas: 'gasgas',\n rsltda: 'rs',\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 DEFAULT_REFRESH_INTERVAL_MS = 0;\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 refreshIntervalMs = DEFAULT_REFRESH_INTERVAL_MS;\n private refreshIntervalId: number | null = null;\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 refreshQueuedForce = 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 'refresh-interval',\n 'refresh-token',\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: var(--rs-map-accent);\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 display: inline-flex;\n align-items: center;\n gap: 8px;\n color: var(--rs-map-accent);\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 filter: brightness(0.92);\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.applyRefreshInterval(this.getAttribute('refresh-interval'));\n document.addEventListener('visibilitychange', this.handleVisibilityChange);\n this.syncAttributesToState();\n }\n\n disconnectedCallback() {\n this.pointsController?.abort();\n this.clearRefreshTimer();\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 document.removeEventListener('visibilitychange', this.handleVisibilityChange);\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 === 'refresh-interval') {\n this.applyRefreshInterval(newValue);\n } else if (name === 'refresh-token') {\n if (this.isConnected && newValue !== _oldValue) {\n this.queueRefreshPoints(true);\n }\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 applyRefreshInterval(value: string | null) {\n const normalized = (value ?? '').trim();\n const intervalMs = this.parseRefreshInterval(normalized);\n this.refreshIntervalMs = intervalMs;\n this.clearRefreshTimer();\n if (this.isConnected && this.refreshIntervalMs > 0) {\n this.refreshIntervalId = window.setInterval(() => {\n if (!document.hidden) {\n this.forceRefresh();\n }\n }, this.refreshIntervalMs);\n }\n }\n\n private parseRefreshInterval(value: string) {\n if (!value) {\n return DEFAULT_REFRESH_INTERVAL_MS;\n }\n\n const numeric = Number(value);\n if (!Number.isFinite(numeric) || numeric <= 0) {\n return DEFAULT_REFRESH_INTERVAL_MS;\n }\n\n return Math.round(numeric * 60 * 1000);\n }\n\n private clearRefreshTimer() {\n if (this.refreshIntervalId !== null) {\n window.clearInterval(this.refreshIntervalId);\n this.refreshIntervalId = null;\n }\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(force = false) {\n if (force) {\n this.refreshQueuedForce = true;\n }\n\n if (this.refreshQueued) {\n return;\n }\n this.refreshQueued = true;\n queueMicrotask(() => {\n this.refreshQueued = false;\n const shouldForce = this.refreshQueuedForce;\n this.refreshQueuedForce = false;\n void this.refreshPoints({ force: shouldForce });\n });\n }\n\n forceRefresh() {\n this.queueRefreshPoints(true);\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(options: { force?: boolean } = {}) {\n const force = options.force ?? false;\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 = force ? null : await this.readPointsCache(cacheKey);\n const hasFreshCache = cachedPayload && Date.now() - cachedPayload.timestamp < this.pointsCacheTtlMs;\n const localFallbackPayload = !force && !cachedPayload ? await this.getLocalPointsFallback(marcaRequestValue, this.tipoCode) : null;\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 if (!force || this.points.length === 0) {\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 if (force && this.points.length > 0) {\n console.warn('No se pudo forzar la actualizacion de puntos, se conservan los datos actuales', 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', true, 'fa-solid fa-globe'));\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, 'fa-solid fa-envelope'));\n }\n\n return actions;\n }\n\n private createPointModalLink(href: string, text: string, external = true, iconClass?: string) {\n const link = document.createElement('a');\n link.href = href;\n link.className = 'point-modal__link';\n if (iconClass) {\n link.appendChild(this.createIconElement(iconClass));\n }\n link.appendChild(document.createTextNode(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 handleVisibilityChange = () => {\n if (!document.hidden && this.isConnected && this.refreshIntervalMs > 0) {\n this.forceRefresh();\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_BRAND_LABEL = 'RS-SHOP';\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 DEFAULT_TIME_ZONE = 'America/Santiago';\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: '#2b3d60',\n ktm: '#ff6600',\n rs: '#000000',\n voge: '#000000'\n};\nconst BRAND_ALIASES: Record<string, string> = {\n gas: 'gasgas',\n gasgas: 'gasgas',\n rsltda: 'rs',\n husqvarna: 'hqv'\n};\nconst BRAND_LABELS: Record<string, string> = {\n gasgas: 'GASGAS',\n hqv: 'HQV',\n ktm: 'KTM',\n rs: 'RS-SHOP',\n voge: 'VOGE'\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 sublabel: 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 menuHeadingEl!: HTMLElement;\n private hostAttributeObserver?: MutationObserver;\n private childrenObserver?: MutationObserver;\n private appliedCssVariableNames = new Set<string>();\n\n static get observedAttributes() {\n return [\n 'label',\n 'menu-label',\n 'menu-message',\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 get menuMessage() {\n return this.getAttribute('menu-message') ?? '';\n }\n\n set menuMessage(value: string) {\n const normalized = (value ?? '').trim();\n\n if (!normalized) {\n this.removeAttribute('menu-message');\n return;\n }\n\n this.setAttribute('menu-message', normalized);\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: calc(var(--rs-whatsapp-right, 24px) + var(--rs-whatsapp-offset-x, 0px));\n bottom: calc(var(--rs-whatsapp-bottom, 24px) + var(--rs-whatsapp-offset-y, 0px));\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 transform: none;\n }\n :host([position=\"bottom-left\"]) {\n right: auto;\n left: calc(var(--rs-whatsapp-left, 24px) + var(--rs-whatsapp-offset-x, 0px));\n bottom: calc(var(--rs-whatsapp-bottom, 24px) + var(--rs-whatsapp-offset-y, 0px));\n top: auto;\n transform: none;\n }\n :host([position=\"bottom-center\"]) {\n right: auto;\n left: calc(50% + var(--rs-whatsapp-offset-x, 0px));\n bottom: calc(var(--rs-whatsapp-bottom, 24px) + var(--rs-whatsapp-offset-y, 0px));\n top: auto;\n transform: translateX(-50%);\n }\n :host([position=\"top-right\"]) {\n right: calc(var(--rs-whatsapp-right, 24px) + var(--rs-whatsapp-offset-x, 0px));\n left: auto;\n bottom: auto;\n top: calc(var(--rs-whatsapp-top, 24px) + var(--rs-whatsapp-offset-y, 0px));\n transform: none;\n }\n :host([position=\"top-left\"]) {\n right: auto;\n left: calc(var(--rs-whatsapp-left, 24px) + var(--rs-whatsapp-offset-x, 0px));\n bottom: auto;\n top: calc(var(--rs-whatsapp-top, 24px) + var(--rs-whatsapp-offset-y, 0px));\n transform: none;\n }\n :host([position=\"top-center\"]) {\n right: auto;\n left: calc(50% + var(--rs-whatsapp-offset-x, 0px));\n bottom: auto;\n top: calc(var(--rs-whatsapp-top, 24px) + var(--rs-whatsapp-offset-y, 0px));\n transform: translateX(-50%);\n }\n :host([position=\"center-left\"]) {\n right: auto;\n left: calc(var(--rs-whatsapp-left, 24px) + var(--rs-whatsapp-offset-x, 0px));\n bottom: auto;\n top: calc(50% + var(--rs-whatsapp-offset-y, 0px));\n transform: translateY(-50%);\n }\n :host([position=\"center\"]) {\n right: auto;\n left: calc(50% + var(--rs-whatsapp-offset-x, 0px));\n bottom: auto;\n top: calc(50% + var(--rs-whatsapp-offset-y, 0px));\n transform: translate(-50%, -50%);\n }\n :host([position=\"center-right\"]) {\n right: calc(var(--rs-whatsapp-right, 24px) + var(--rs-whatsapp-offset-x, 0px));\n left: auto;\n bottom: auto;\n top: calc(50% + var(--rs-whatsapp-offset-y, 0px));\n transform: translateY(-50%);\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=\"bottom-center\"]) .menu {\n right: auto;\n left: 50%;\n bottom: calc(var(--rs-whatsapp-size, 60px) + 12px);\n top: auto;\n transform: translateX(-50%);\n transform-origin: bottom center;\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 :host([position=\"top-center\"]) .menu {\n top: calc(var(--rs-whatsapp-size, 60px) + 12px);\n right: auto;\n bottom: auto;\n left: 50%;\n transform: translateX(-50%);\n transform-origin: top center;\n }\n :host([position=\"center-left\"]) .menu {\n left: calc(var(--rs-whatsapp-size, 60px) + 12px);\n right: auto;\n top: 50%;\n bottom: auto;\n transform: translateY(-50%);\n transform-origin: left center;\n }\n :host([position=\"center\"]) .menu {\n left: 50%;\n right: auto;\n top: auto;\n bottom: calc(var(--rs-whatsapp-size, 60px) + 12px);\n transform: translateX(-50%);\n transform-origin: bottom center;\n }\n :host([position=\"center-right\"]) .menu {\n right: calc(var(--rs-whatsapp-size, 60px) + 12px);\n left: auto;\n top: 50%;\n bottom: auto;\n transform: translateY(-50%);\n transform-origin: right center;\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-body {\n flex: 1 1 auto;\n min-width: 0;\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n gap: 2px;\n }\n .menu-link-label,\n .menu-link-sublabel {\n width: 100%;\n display: block;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n .menu-link-label {\n font-weight: 700;\n line-height: 1.2;\n }\n .menu-link-sublabel {\n font-size: 0.85rem;\n font-weight: 500;\n line-height: 1.25;\n color: var(--rs-whatsapp-menu-muted, #4b5563);\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: calc(var(--rs-whatsapp-mobile-right, 16px) + var(--rs-whatsapp-offset-x, 0px));\n bottom: calc(var(--rs-whatsapp-mobile-bottom, 16px) + var(--rs-whatsapp-offset-y, 0px));\n transform: none;\n }\n :host([position=\"bottom-left\"]) {\n right: auto;\n left: calc(var(--rs-whatsapp-mobile-left, 16px) + var(--rs-whatsapp-offset-x, 0px));\n bottom: calc(var(--rs-whatsapp-mobile-bottom, 16px) + var(--rs-whatsapp-offset-y, 0px));\n top: auto;\n transform: none;\n }\n :host([position=\"bottom-center\"]) {\n right: auto;\n left: calc(50% + var(--rs-whatsapp-offset-x, 0px));\n bottom: calc(var(--rs-whatsapp-mobile-bottom, 16px) + var(--rs-whatsapp-offset-y, 0px));\n top: auto;\n transform: translateX(-50%);\n }\n :host([position=\"top-right\"]) {\n right: calc(var(--rs-whatsapp-mobile-right, 16px) + var(--rs-whatsapp-offset-x, 0px));\n left: auto;\n bottom: auto;\n top: calc(var(--rs-whatsapp-mobile-top, 16px) + var(--rs-whatsapp-offset-y, 0px));\n transform: none;\n }\n :host([position=\"top-left\"]) {\n right: auto;\n left: calc(var(--rs-whatsapp-mobile-left, 16px) + var(--rs-whatsapp-offset-x, 0px));\n bottom: auto;\n top: calc(var(--rs-whatsapp-mobile-top, 16px) + var(--rs-whatsapp-offset-y, 0px));\n transform: none;\n }\n :host([position=\"top-center\"]) {\n right: auto;\n left: calc(50% + var(--rs-whatsapp-offset-x, 0px));\n bottom: auto;\n top: calc(var(--rs-whatsapp-mobile-top, 16px) + var(--rs-whatsapp-offset-y, 0px));\n transform: translateX(-50%);\n }\n :host([position=\"center-left\"]) {\n right: auto;\n left: calc(var(--rs-whatsapp-mobile-left, 16px) + var(--rs-whatsapp-offset-x, 0px));\n bottom: auto;\n top: calc(50% + var(--rs-whatsapp-offset-y, 0px));\n transform: translateY(-50%);\n }\n :host([position=\"center\"]) {\n right: auto;\n left: calc(50% + var(--rs-whatsapp-offset-x, 0px));\n bottom: auto;\n top: calc(50% + var(--rs-whatsapp-offset-y, 0px));\n transform: translate(-50%, -50%);\n }\n :host([position=\"center-right\"]) {\n right: calc(var(--rs-whatsapp-mobile-right, 16px) + var(--rs-whatsapp-offset-x, 0px));\n left: auto;\n bottom: auto;\n top: calc(50% + var(--rs-whatsapp-offset-y, 0px));\n transform: translateY(-50%);\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\" data-menu-heading></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 this.cacheShadowElements();\n }\n\n connectedCallback() {\n this.cacheShadowElements();\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.hostAttributeObserver = new MutationObserver(this.handleHostAttributesMutation);\n this.hostAttributeObserver.observe(this, {\n attributes: true,\n attributeOldValue: true\n });\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', 'sublabel', 'telefono', 'mensaje', 'target', 'icon', 'dias', 'desde', 'hasta']\n });\n this.syncAttributesToState();\n }\n\n private cacheShadowElements() {\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.menuHeadingEl = this.root.querySelector<HTMLElement>('[data-menu-heading]')!;\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.hostAttributeObserver?.disconnect();\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 menuMessage = this.getMenuMessage();\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 this.renderMenuHeading(menuMessage);\n this.syncCssVariablesFromAttributes();\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 syncCssVariablesFromAttributes() {\n const nextVariables = new Set<string>();\n\n for (const attribute of Array.from(this.attributes)) {\n if (!attribute.name.startsWith('--')) {\n continue;\n }\n\n const value = attribute.value.trim();\n\n if (!value) {\n continue;\n }\n\n nextVariables.add(attribute.name);\n this.style.setProperty(attribute.name, value);\n }\n\n for (const variableName of this.appliedCssVariableNames) {\n if (!nextVariables.has(variableName)) {\n this.style.removeProperty(variableName);\n }\n }\n\n this.appliedCssVariableNames = nextVariables;\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 getMenuMessage() {\n const customMessage = (this.getAttribute('menu-message') ?? '').trim();\n\n if (customMessage) {\n return customMessage;\n }\n\n return `<span class=\"menu-welcome\">Bienvenido a</span><span class=\"menu-brand\">${this.getBrandLabel()}</span><span class=\"menu-question\">¿En que te podemos ayudar?</span>`;\n }\n\n private renderMenuHeading(html: string) {\n this.menuHeadingEl.innerHTML = html;\n }\n\n private getBrandLabel() {\n const marca = (this.getAttribute('marca') ?? '').trim();\n\n if (!marca) {\n return DEFAULT_BRAND_LABEL;\n }\n\n const brandKey = this.normalizeBrandKey(marca);\n\n if (BRAND_LABELS[brandKey]) {\n return BRAND_LABELS[brandKey];\n }\n\n return marca.toUpperCase();\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\n if (!options.length) {\n this.generatedOptionsEl.hidden = true;\n this.generatedOptionsEl.replaceChildren();\n return;\n }\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 sublabel: (optionEl.getAttribute('sublabel') ?? '').trim(),\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\n private createMenuLink(option: WhatsappMenuOption) {\n const linkEl = document.createElement('a');\n const bodyEl = document.createElement('span');\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 bodyEl.className = 'menu-link-body';\n labelEl.className = 'menu-link-label';\n labelEl.textContent = option.label;\n const sublabelText = option.sublabel.trim();\n const iconEl = this.createOptionIcon(option.icon);\n\n if (iconEl) {\n linkEl.append(iconEl);\n }\n\n bodyEl.append(labelEl);\n\n if (sublabelText) {\n const sublabelEl = document.createElement('span');\n sublabelEl.className = 'menu-link-sublabel';\n sublabelEl.textContent = sublabelText;\n bodyEl.append(sublabelEl);\n }\n\n linkEl.append(bodyEl);\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() || DEFAULT_TIME_ZONE;\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 handleHostAttributesMutation = (mutations: MutationRecord[]) => {\n if (mutations.some((mutation) => mutation.attributeName?.startsWith('--'))) {\n this.syncAttributesToState();\n }\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 get sublabel() {\n return this.getAttribute('sublabel') ?? '';\n }\n\n set sublabel(value: string) {\n const normalized = (value ?? '').trim();\n\n if (!normalized) {\n this.removeAttribute('sublabel');\n return;\n }\n\n this.setAttribute('sublabel', normalized);\n }\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","DEFAULT_REFRESH_INTERVAL_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","intervalMs","numeric","force","shouldForce","label","normalizedCode","color","options","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_BRAND_LABEL","DEFAULT_CLOSED_MESSAGE","DEFAULT_WHATSAPP_COLOR","DEFAULT_OPTION_ICON","DEFAULT_TIME_ZONE","WHATSAPP_BASE_URL","OPTION_ICON_SVGS","BRAND_LABELS","DAY_ALIASES","WEEKDAY_SHORT_BY_ENGLISH","OPTION_ICON_SVGS_BY_KEY","svg","normalizeToken","normalizeIconSvg","isIconUrl","RsWhatsapp","node","mutations","mutation","_d","_e","menuLabel","menuMessage","ariaLabel","target","isClosed","telefonoValue","mensajeValue","telefono","mensaje","query","nextVariables","attribute","variableName","brandKey","customMessage","html","fallbackLabel","fallbackTarget","fallbackIcon","option","links","optionElements","RsWhatsappOption","optionEl","_f","_g","linkEl","bodyEl","labelEl","sublabelText","iconEl","sublabelEl","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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AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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AsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8CAuEfA,CAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA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"}
|