PageSourceSearch

https://widget.banks.kg/banks-widget.js

js banks.kg collected 2026-10-02 17:59:09 UTC 80,694 bytes, 419 lines download raw bytes

1(function(x,f){typeof exports=="object"&&typeof module<"u"?module.exports=f():typeof define=="function"&&define.amd?define(f):(x=typeof globalThis<"u"?globalThis:x||self,x.BanksWidget=f())})(this,(function(){"use strict";var se=Object.defineProperty;var ne=(x,f,_)=>f in x?se(x,f,{enumerable:!0,configurable:!0,writable:!0,value:_}):x[f]=_;var c=(x,f,_)=>ne(x,typeof f!="symbol"?f+"":f,_);const x=`.bkwg-card{background:var(--bkwg-bg-primary);border:1px solid var(--bkwg-border);border-radius:8px;position:relative;transition:box-shadow .3s,border-color .2s}.bkwg-card:hover{box-shadow:0 4px 6px -1px #0000001a}.bkwg-card--highlighted{border-color:var(--bkwg-top)!important}.bkwg-card--highlighted:hover{border-color:color-mix(in srgb,var(--bkwg-top),#000 12%)!important}.bkwg-card__top{align-items:center;background:var(--bkwg-top);border-bottom-left-radius:16px;border-top-right-radius:8px;color:var(--bkwg-top-text);display:flex;font-size:12px;font-weight:700;gap:4px;padding:6px 8px 6px 12px;position:absolute;right:-1px;top:-1px;transition:background .2s}.bkwg-card--highlighted:hover .bkwg-card__top{background:color-mix(in srgb,var(--bkwg-top),#000 12%)}.bkwg-card__top-icon{height:12px;width:12px}.bkwg-card__inner{padding:16px}.bkwg-card__content,.bkwg-card__inner{display:flex;flex-direction:column;gap:16px}.bkwg-card__title{color:var(--bkwg-text);font-size:16px;font-weight:600;margin:0}.bkwg-card__grid{display:flex;flex-direction:column;gap:12px}@media(min-width:640px){.bkwg-card__grid{align-items:start;display:grid;gap:16px;grid-template-columns:1fr 1fr}}.bkwg-card__main-content{align-items:center;background-color:var(--bkwg-bg-secondary);border-radius:8px;display:flex;gap:8px;padding:16px}.bkwg-card__main-info{display:flex;flex:1;flex-direction:column}.bkwg-card__card-main-content{align-items:center;display:flex;gap:12px}.bkwg-card__card-main-info{display:flex;flex:1;flex-direction:column}.bkwg-card__title-link{color:var(--bkwg-text);font-size:16px;font-weight:700;text-decoration:none}.bkwg-card__title-link:hover{text-decoration:underline}.bkwg-card__subtitle{color:var(--bkwg-text-secondary);font-size:14px;margin:0}.bkwg-card__bank-name{color:var(--bkwg-link);font-size:14px;font-weight:600;text-decoration:none}.bkwg-card__card-bank-name{color:var(--bkwg-text);font-weight:400}.bkwg-card__bank-name:hover,a.bkwg-card__title:hover{text-decoration:underline}.bkwg-card__details{align-items:start;display:grid;gap:12px;grid-template-columns:repeat(2,1fr)}@media(min-width:640px){.bkwg-card__details{grid-template-columns:repeat(3,1fr)}}.bkwg-card__badges{display:flex;flex-wrap:wrap;gap:4px;margin-top:8px}.bkwg-card__card-details{align-items:start;display:grid;gap:12px;grid-template-columns:repeat(3,1fr)}.bkwg-card__logo-link{align-items:center;background:var(--bkwg-bg-primary);border:1px solid var(--bkwg-border);border-radius:8px;display:flex;flex-shrink:0;height:54px;justify-content:center;padding:6px;width:54px}.bkwg-card__logo{height:40px;-o-object-fit:contain;object-fit:contain;width:40px}.bkwg-card__card-logo-link{align-items:center;border-radius:6px;display:flex;flex-shrink:0;justify-content:center;overflow:hidden}.bkwg-card__card-logo{width:112px}.bkwg-card__footer{display:flex;flex-wrap:wrap;gap:8px}.bkwg-card__detail-col{display:flex;flex-direction:column}.bkwg-card__detail-col--badges{align-items:center;flex-direction:row;flex-wrap:wrap;gap:6px;grid-column:1/-1}.bkwg-card__detail-label{color:var(--bkwg-text-secondary);font-size:14px;margin-bottom:4px}.bkwg-card__detail-value{color:var(--bkwg-text);font-size:14px;font-weight:600}.bkwg-card__actions{display:flex;flex-direction:column;gap:16px}@media(min-width:640px){.bkwg-card__actions{align-items:center;flex-direction:row}}.bkwg-card__form-container{opacity:0;padding-left:16px;padding-right:16px;position:absolute}.bkwg-card__form-container--visible{opacity:1;position:static}.bkwg-custom-select{font-family:inherit;position:relative;width:100%}.bkwg-cs-trigger{align-items:center;background:var(--bkwg-bg-primary);border:1px solid var(--bkwg-border);border-radius:6px;box-sizing:border-box;color:var(--bkwg-text);cursor:pointer;display:flex;font-size:14px;height:36px;justify-content:space-between;padding:8px 12px;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:100%}.bkwg-custom-select.open .bkwg-cs-trigger{box-shadow:#fff 0 0 0 2px,var(--bkwg-accent) 0 0 0 4px}.bkwg-cs-value-wrapper{align-items:center;display:flex;gap:8px;overflow:hidden}.bkwg-cs-trigger-icon{flex-shrink:0;height:20px;-o-object-fit:contain;object-fit:contain;width:20px}.bkwg-cs-arrow{align-items:center;color:var(--bkwg-text-secondary);display:flex;flex-shrink:0}.bkwg-cs-dropdown{background:var(--bkwg-bg-primary);border:1px solid var(--bkwg-border);border-radius:6px;box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a;box-sizing:border-box;overflow-y:auto;z-index:2147483647}.bkwg-cs-option{align-items:center;color:var(--bkwg-text);cursor:pointer;display:flex;font-size:14px;gap:8px;padding:6px 8px 6px 12px;transition:background-color .1s;white-space:nowrap}.bkwg-cs-option-flag{flex-shrink:0}.bkwg-cs-option.focused,.bkwg-cs-option:hover{background-color:var(--bkwg-bg-secondary);color:var(--bkwg-text);outline:none}.bkwg-cs-option.selected{background-color:var(--bkwg-bg-secondary);color:var(--bkwg-text);font-weight:400}.bkwg-form{border-top:1px solid var(--bkwg-border);max-height:0;overflow:hidden;transition:max-height .3s ease-out,padding .3s ease-out}.bkwg-form--open{max-height:2000px;overflow:visible;padding:8px 0 16px}.bkwg-form__header{align-items:flex-start;display:flex;justify-content:space-between;margin-bottom:20px}.bkwg-form__intro{color:var(--bkwg-text-soft);font-size:14px;line-height:1.4;margin-right:20px}.bkwg-form__close{align-items:center;background:none;border:none;color:var(--bkwg-text-soft);cursor:pointer;display:flex;justify-content:center;padding:4px}.bkwg-form__close:hover{color:var(--bkwg-text)}.bkwg-form__grid{display:grid;gap:16px;grid-template-columns:1fr}@media(min-width:640px){.bkwg-form__grid{grid-template-columns:1fr 1fr}}@media(min-width:1024px){.bkwg-form__grid{grid-template-columns:1fr 1fr 1fr}}.bkwg-form__footer{display:flex;justify-content:flex-start;margin-top:24px}.bkwg-form-item{display:flex;flex-direction:column;gap:6px}.bkwg-form-label{color:var(--bkwg-text);font-size:13px;font-weight:500}.bkwg-form-input,.bkwg-form-select,.bkwg-form-textarea{background:var(--bkwg-bg-primary);border:1px solid var(--bkwg-border);border-radius:6px;box-sizing:border-box;color:var(--bkwg-text);font-size:14px;height:36px;padding:0 12px;width:100%}.bkwg-form-textarea{height:80px;padding:8px 12px;resize:vertical}.bkwg-form-input:focus,.bkwg-form-textarea:focus{box-shadow:#fff 0 0 0 2px,var(--bkwg-accent) 0 0 0 4px;outline:2px solid transparent;outline-offset:2px}.bkwg-form-error{color:var(--bkwg-error);font-size:12px;margin-top:4px}.bkwg-form-input--error{border-color:var(--bkwg-error)}.bkwg-amount-group{border:1px solid var(--bkwg-border,#d1d5db);border-radius:8px;display:flex;gap:0;height:36px;overflow:hidden}.bkwg-amount-group:focus-within{box-shadow:#fff 0 0 0 2px,var(--bkwg-accent) 0 0 0 4px}.bkwg-amount-group .bkwg-form-input{border:none;border-radius:0;box-sizing:border-box;flex:1;height:36px}.bkwg-amount-group .bkwg-form-select{background-position:right 8px center;border:none;border-left:1px solid var(--bkwg-border);border-radius:0;box-sizing:border-box;height:36px;width:100px}.bkwg-amount-group .bkwg-custom-select{flex-shrink:0;width:100px}.bkwg-amount-group .bkwg-cs-trigger{border:none;border-left:1px solid var(--bkwg-border,#d1d5db);border-radius:0;box-sizing:border-box;height:36px;padding:8px 12px}.bkwg-amount-group .bkwg-cs-trigger:focus{box-shadow:none;outline:none}.bkwg-amount-group .bkwg-custom-select.open .bkwg-cs-trigger{border-color:transparent;border-left-color:var(--bkwg-border,#d1d5db);box-shadow:none}.bkwg-agreement{align-items:flex-start;cursor:pointer;display:flex;gap:8px;margin-top:8px}.bkwg-agreement input[type=checkbox]{-moz-appearance:none;appearance:none;-webkit-appearance:none;background:var(--bkwg-bg-primary);border:1px solid var(--bkwg-border);border-radius:4px;cursor:pointer;flex-shrink:0;height:18px;margin-top:2px;transition:all .15s;width:18px}.bkwg-agreement input[type=checkbox]:checked{background:var(--bkwg-accent);background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' viewBox='0 0 12 12'%3E%3Cpath stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 6 2.5 2.5L10 3'/%3E%3C/svg%3E");background-position:50%;background-repeat:no-repeat;border-color:var(--bkwg-accent)}.bkwg-agreement span{color:var(--bkwg-text-soft);font-size:13px}.bkwg-agreement a{color:var(--bkwg-link);text-decoration:underline}.bkwg-alert{border-radius:6px;font-size:14px;padding:16px}.bkwg-alert--success{background:var(--bkwg-alert-success-bg);border:1px solid var(--bkwg-alert-success);color:var(--bkwg-alert-success-text)}.bkwg-alert--error{background:var(--bkwg-alert-error-bg);border:1px solid var(--bkwg-alert-error);color:var(--bkwg-alert-error-text)}.bkwg-phone-input-wrapper{align-items:center;background:var(--bkwg-bg-primary);border:1px solid var(--bkwg-border);border-radius:6px;display:flex;height:36px;padding:0 12px}.bkwg-phone-input-wrapper:focus-within{box-shadow:#fff 0 0 0 2px,var(--bkwg-accent) 0 0 0 4px}.bkwg-phone-flag{flex-shrink:0;margin-right:8px}.bkwg-phone-prefix{color:var(--bkwg-text-soft);font-size:14px;line-height:14px;margin-right:4px}.bkwg-phone-input{background:none;border:none;color:var(--bkwg-text);flex:1;font-size:14px;outline:none;padding:0}.bkwg-root a.bkwg-button,.bkwg-root button.bkwg-button{font-weight:var(--bkwg-btn-weight)}.bkwg-button{align-items:center;border:1px solid transparent;border-radius:var(--bkwg-btn-radius);box-sizing:border-box;
1cursor:pointer;display:inline-flex;font-size:14px;height:40px;justify-content:center;padding:0 16px;text-decoration:none;transition:background-color .2s,color .2s}.bkwg-button--primary{background-color:var(--bkwg-btn-primary);color:var(--bkwg-btn-primary-text)}.bkwg-button--primary:hover{background-color:var(--bkwg-btn-primary-hover)}.bkwg-loader{align-items:center;display:flex;justify-content:center;padding:48px 16px}.bkwg-loader__spinner{animation:bkwg-spin .8s linear infinite;border:3px solid var(--bkwg-border);border-radius:50%;border-top-color:var(--bkwg-accent,#2563eb);height:40px;width:40px}@keyframes bkwg-spin{to{transform:rotate(1turn)}}.bkwg-empty-state{align-items:center;background:var(--bkwg-bg-primary);border:1px solid var(--bkwg-border);border-radius:8px;display:flex;gap:16px;padding:24px}.bkwg-empty-state__icon-wrapper{align-items:center;background:color-mix(in srgb,var(--bkwg-link),#fff 90%);border-radius:50%;color:var(--bkwg-link);display:flex;flex-shrink:0;height:48px;justify-content:center;width:48px}.bkwg-empty-state__icon{height:24px;width:24px}.bkwg-empty-state__content{display:flex;flex-direction:column;gap:4px}.bkwg-empty-state__title{color:var(--bkwg-text);font-size:16px;font-weight:600;margin:0}.bkwg-empty-state__text{color:var(--bkwg-text-secondary);font-size:14px;margin:0}@media(max-width:480px){.bkwg-empty-state,.bkwg-error-state{flex-direction:column;text-align:center}}.bkwg-error-state{align-items:center;background:var(--bkwg-bg-primary);border:1px solid var(--bkwg-border);border-radius:8px;display:flex;gap:16px;padding:24px}.bkwg-error-state__icon-wrapper{align-items:center;background:color-mix(in srgb,var(--bkwg-error),#fff 90%);border-radius:50%;color:var(--bkwg-error);display:flex;flex-shrink:0;height:48px;justify-content:center;width:48px}.bkwg-error-state__icon{height:24px;width:24px}.bkwg-error-state__content{display:flex;flex-direction:column;gap:4px}.bkwg-error-state__title{color:var(--bkwg-text);font-size:16px;font-weight:600;margin:0}.bkwg-error-state__text{color:var(--bkwg-text-secondary);font-size:14px;margin:0}.bkwg-error-state__link{align-items:center;color:var(--bkwg-link);display:inline-flex;font-size:14px;gap:4px;margin:0;text-decoration:none;transition:opacity .2s}.bkwg-error-state__link:hover{opacity:.8;text-decoration:underline}.bkwg-footer{align-items:center;background:var(--bkwg-bg-primary);border-radius:6px;display:flex;justify-content:space-between;margin-top:8px;padding:8px 16px}.bkwg-footer__divider{border:none;border-top:1px solid var(--bkwg-border);display:none;margin:0;width:100%}@media(max-width:480px){.bkwg-footer{align-items:center;flex-direction:column;gap:12px}.bkwg-footer__divider{display:block}}.bkwg-footer__toggle{background:none;border:none;color:var(--bkwg-link);cursor:pointer;font-size:14px;font-weight:500;padding:0;text-decoration:none;transition:color .2s ease}.bkwg-footer__toggle:hover{text-decoration:underline}.bkwg-footer__link{align-items:center;color:var(--bkwg-link);display:flex;gap:12px;text-decoration:none;transition:opacity .2s ease}.bkwg-footer__link:hover{text-decoration:underline}.bkwg-footer .bkwg-footer__logo{display:block;height:28px;width:auto}.bkwg-footer__text{font-size:14px;font-weight:500;margin-bottom:5px}.bkwg-badge{background-color:var(--bkwg-bg-secondary);border-radius:12px;color:var(--bkwg-text);display:inline-block;font-size:12px;font-weight:700;padding:3px 8px;white-space:nowrap}:host{contain:content;display:block}.bkwg-root{all:initial;display:block;position:relative;width:100%;--bkwg-accent:#2563eb;--bkwg-bg-primary:#fff;--bkwg-bg-secondary:#f3f4f6;--bkwg-text:#2d2d2d;--bkwg-text-secondary:#374151;--bkwg-border:#e5e7eb;--bkwg-link:#2563eb;--bkwg-top:#ea580c;--bkwg-top-text:#fff;--bkwg-error:#ef4444;--bkwg-alert-success:#10b981;--bkwg-alert-success-bg:color-mix(in srgb,var(--bkwg-alert-success),#fff 92%);--bkwg-alert-success-text:color-mix(in srgb,var(--bkwg-alert-success),#000 45%);--bkwg-alert-error:#ef4444;--bkwg-alert-error-bg:color-mix(in srgb,var(--bkwg-alert-error),#fff 92%);--bkwg-alert-error-text:color-mix(in srgb,var(--bkwg-alert-error),#000 45%);--bkwg-btn-primary:#2563eb;--bkwg-btn-primary-hover:color-mix(in srgb,var(--bkwg-btn-primary),#000 10%);--bkwg-btn-primary-text:#fff;--bkwg-btn-page-inactive:#fff;--bkwg-btn-page-inactive-text:#374151;--bkwg-btn-weight:500;--bkwg-btn-radius:6px;color:var(--bkwg-text);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif;font-size:16px;font-style:normal;font-weight:400;line-height:1.5;text-align:left;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.bkwg-root,.bkwg-root *,.bkwg-root :after,.bkwg-root :before{box-sizing:border-box}.bkwg-root ol,.bkwg-root ul{list-style:none;margin:0;padding:0}.bkwg-root a{text-decoration:none}.bkwg-root img{display:block;height:auto;max-width:100%}
1.bkwg-root button{cursor:pointer;font:inherit}.bkwg-products{display:flex;flex-direction:column}.bkwg-products__content{border-radius:8px}.bkwg-products__more,.bkwg-products__results{display:flex;flex-direction:column}.bkwg-products__more{gap:12px}.bkwg-products__more--visible{max-height:none;opacity:1}.bkwg-filters-section{background:var(--bkwg-bg-secondary);border:1px solid var(--bkwg-border);border-radius:10px;margin-bottom:16px;padding:12px 16px 14px}.bkwg-filters-section__header{align-items:center;color:var(--bkwg-text-secondary);display:flex;gap:5px;margin-bottom:10px}.bkwg-filters-section__icon{flex-shrink:0;opacity:.6}.bkwg-filters-section__title{flex:1;font-size:11px;font-weight:600;letter-spacing:.06em;text-transform:uppercase}.bkwg-filters-reset{color:var(--bkwg-text-secondary);cursor:pointer;display:none;font-size:11px;font-weight:500;text-decoration:underline;text-decoration-color:transparent;transition:color .15s,text-decoration-color .15s;white-space:nowrap}.bkwg-filters-reset:hover{color:var(--bkwg-error);text-decoration-color:var(--bkwg-error)}.bkwg-filters-section--active .bkwg-filters-reset{display:flex}.bkwg-filters-row{display:flex;flex-wrap:wrap;gap:10px}.bkwg-filter{display:flex;flex:1 1 200px;flex-direction:column;gap:5px;max-width:320px;min-width:0}.bkwg-filter__label{color:var(--bkwg-text-secondary);font-size:12px;font-weight:500;line-height:1.2}@media(max-width:768px){.bkwg-filter{flex:1 1 100%;max-width:100%}}.bkwg-pagination-bar{align-items:center;display:flex;flex-wrap:wrap;gap:8px;justify-content:space-between;margin-top:16px}.bkwg-pagination__counter{align-items:center;background:var(--bkwg-bg-primary);border:1px solid var(--bkwg-border);border-radius:8px;color:var(--bkwg-text-secondary);display:inline-flex;font-size:13px;height:36px;margin:0;padding:0 12px;white-space:nowrap}.bkwg-pagination{align-items:center;display:flex;gap:4px;justify-content:center;margin-left:auto}button.bkwg-pagination__btn{align-items:center;background:var(--bkwg-btn-page-inactive);border:1px solid var(--bkwg-border);border-radius:8px;color:var(--bkwg-btn-page-inactive-text);cursor:pointer;display:inline-flex;font-size:14px;font-variant-numeric:tabular-nums;font-weight:500;height:36px;justify-content:center;min-width:36px;padding:0 8px;transition:background-color .15s ease,border-color .15s ease,color .15s ease}button.bkwg-pagination__btn:disabled{border-color:color-mix(in srgb,var(--bkwg-border),transparent 50%);color:color-mix(in srgb,var(--bkwg-btn-page-inactive-text),transparent 60%);cursor:default}button.bkwg-pagination__btn:hover:not(:disabled):not(.bkwg-pagination__btn--active){background:var(--bkwg-btn-primary-hover);border-color:var(--bkwg-btn-primary-hover);color:var(--bkwg-btn-primary-text)}.bkwg-pagination__icon{display:block;height:18px;width:18px}.bkwg-pagination__btn:focus-visible{outline:2px solid var(--bkwg-accent);outline-offset:2px}button.bkwg-pagination__btn--active{background:var(--bkwg-btn-primary);border-color:var(--bkwg-btn-primary);color:var(--bkwg-btn-primary-text)!important}button.bkwg-pagination__ellipsis{align-items:flex-end;border-color:transparent;color:color-mix(in srgb,var(--bkwg-btn-page-inactive-text),transparent 40%);min-width:28px;padding:0 0 8px;-webkit-user-select:none;-moz-user-select:none;user-select:none}button.bkwg-pagination__ellipsis:hover:not(:disabled){background:var(--bkwg-btn-primary-hover);border-color:var(--bkwg-btn-primary-hover);color:var(--bkwg-btn-primary-text)}@media(max-width:480px){.bkwg-pagination__btn--sibling{display:none}.bkwg-pagination-bar{justify-content:center}.bkwg-pagination{margin-left:0}}`;class f{constructor(e){this.value=e}}function _(g){return new f(g)}function d(g,...e){let t="",r=0;const i=new Map;for(let o=0;o<g.length;o++)if(t+=g[o],o<e.length){const l=e[o];if(typeof l=="string")t+=q(l);else if(l instanceof f)t+=l.value;else if(l instanceof HTMLElement){const a=`__ELEMENT_${r}__`;t+=a,i.set(r,l),r++}}const s=document.createElement("template");s.innerHTML=t.trim();const n=s.content.firstChild;if(n){const o=[],l=a=>
1{a.nodeType===Node.TEXT_NODE?o.push(a):a.childNodes.forEach(l)};l(n),o.forEach(a=>{const p=a.textContent||"",b=[...p.matchAll(/__ELEMENT_(\d+)__/g)];if(b.length>0){const h=document.createDocumentFragment();let w=0;b.forEach(u=>{u.index>w&&h.appendChild(document.createTextNode(p.slice(w,u.index)));const k=parseInt(u[1]),m=i.get(k);m&&h.appendChild(m),w=u.index+u[0].length}),w<p.length&&h.appendChild(document.createTextNode(p.slice(w))),a.parentNode?.replaceChild(h,a)}})}return n||document.createElement("div")}function q(g){const e=document.createElement("div");return e.textContent=g,e.innerHTML}class E{constructor(e=!1){this.isNotFound=e}render(){const e=this.isNotFound?d`<p class="bkwg-error-state__text">
2          Виджет с таким ID не найден, пожалуйста
3          <a href="https://banks.kg/contacts" target="_blank" class="bkwg-error-state__link"
4            >напишите нам</a
5          >
6        </p>`:d`<p class="bkwg-error-state__text">Ошибка загрузки</p>`;return d`
7      <div class="bkwg-error-state">
8        <div class="bkwg-error-state__icon-wrapper">
9          <svg
10            class="bkwg-error-state__icon"
11            xmlns="http://www.w3.org/2000/svg"
12            width="24"
13            height="24"
14            viewBox="0 0 24 24"
15            fill="none"
16            stroke="currentColor"
17            stroke-width="2"
18            stroke-linecap="round"
19            stroke-linejoin="round"
20          >
21            <path d="M18 6 6 18" />
22            <path d="m6 6 12 12" />
23          </svg>
24        </div>
25        <div class="bkwg-error-state__content">
26          <p class="bkwg-error-state__title">Произошла ошибка</p>
27          ${e}
28        </div>
29      </div>
30    `}}class B{render(){return d`
31      <div class="bkwg-loader">
32        <div class="bkwg-loader__spinner"></div>
33      </div>
34    `}}class F{constructor(e){this.config=e}async fetchProducts(){let t=`${this.config.widgetBaseUrl.replace(/\/+$/,"")}/${this.config.widgetId.replace(/^\/+/,"")}`;if(this.config.filters){const i=new URLSearchParams;this.config.filters.organization_id&&i.append("filter[organization_id]",String(this.config.filters.organization_id)),this.config.filters.organization_type&&i.append("filter[organization_type]",this.config.filters.organization_type),i.toString()&&(t+="?"+i.toString())}return await(await fetch(t,{method:"GET",headers:{"Content-Type":"application/json"}})).json()}}const $={accent:{cssVar:"--bkwg-accent",default:"#2563eb"},backgroundPrimary:{cssVar:"--bkwg-bg-primary",default:"#ffffff"},backgroundSecondary:{cssVar:"--bkwg-bg-secondary",default:"#f3f4f6"},border:{cssVar:"--bkwg-border",default:"#e5e7eb"},link:{cssVar:"--bkwg-link",default:"#2563eb"},top:{cssVar:"--bkwg-top",default:"#ea580c"},topText:{cssVar:"--bkwg-top-text",default:"#ffffff"},error:{cssVar:"--bkwg-error",default:"#ef4444"},alertSuccess:{cssVar:"--bkwg-alert-success",default:"#10b981"},alertSuccessBg:{cssVar:"--bkwg-alert-success-bg",default:null},alertSuccessText:{cssVar:"--bkwg-alert-success-text",default:null},alertError:{cssVar:"--bkwg-alert-error",default:null,fallback:"error"},alertErrorBg:{cssVar:"--bkwg-alert-error-bg",default:null},alertErrorText:{cssVar:"--bkwg-alert-error-text",default:null},btnPrimary:{cssVar:"--bkwg-btn-primary",default:"#2563eb"},btnPrimaryHover:{cssVar:"--bkwg-btn-primary-hover",default:null},btnPrimaryText:{cssVar:"--bkwg-btn-primary-text",default:"#ffffff"},btnPageInactive:{cssVar:"--bkwg-btn-page-inactive",default:"#ffffff"},btnPageInactiveText:{cssVar:"--bkwg-btn-page-inactive-text",default:"#374151"},btnWeight:{cssVar:"--bkwg-btn-weight",default:"500"},btnRadius:{cssVar:"--bkwg-btn-radius",default:"6px"}},T=Object.keys($),H=[...T.map(g=>$[g].cssVar),"--bkwg-text","--bkwg-text-secondary"];function R(g={}){const e={};for(const t of T){const r=$[t],i=g[t]??(r.fallback?e[r.fallback]:void 0)??r.default;i&&(e[t]=i)}return e}class W{constructor(){c(this,"instances",new Map);c(this,"nextId",0)}init(e){const t=this.nextId++,r=this.resolveContainer(e.container),i=this.createShadowRoot(r),s=this.resolveConfig(e,i);return this.mountWidget(s,i,t),{update:n=>this.update(t,n),destroy:()=>this.destroy(t)}}scan(){typeof document>"u"||document.querySelectorAll(".banks-widget").forEach(e=>{if(!(e instanceof HTMLElement)||e.dataset.bkwgInitialized)return;const t=e.dataset.id;if(!t)return;const r=e.dataset.filterOrganizationId,i=e.dataset.filterOrganizationType,s=this.findFooterLink(e);if(!this.validateFooterLink(s)){this.showError(e,"Пожалуйста вставьте ссылку"),e.dataset.bkwgInitialized="true";return}s?.remove(),this.init({container:e,widgetId:t,colors:this.readColorAttributes(e),filters:{...r?{organization_id:parseInt(r)}:{},...i?{organization_type:i}:{}}}),e.dataset.bkwgInitialized="success"})}async mountWidget(e,t,r){const i=document.createElement("div");i.className="bkwg-loader-wrapper";const s=new B;i.appendChild(s.render()),t.appendChild(i);try{const o=await new F(e).fetchProducts();if(i.remove(),!o.success||!o.data){const k=new E(!o.success);t.appendChild(k.render());return}o.data.length>0&&(o.data[0].isTop=!0);const l=o.type||"credit",a=this.resolveConfig(e,t,l),p=await(l==="card"?Promise.resolve().then(()=>J):Promise.resolve().then(()=>ie)),b=l==="card"?p.mountCardWidget:p.mountCreditWidget,h={data:o.data,options:o.options,success:o.success},w=b(a,t,h),u=t.parentElement;this.instances.set(r,{widget:w,el:u,config:a,productType:l})}catch(n){i.remove(),console.error("Failed to load product module:",n);const o=new E(!1);throw t.appendChild(o.render()),n}}update(e,t){const r=this.instances.get(e);if(!r)return;const i=r.el.shadowRoot?.querySelector(".bkwg-root");
34if(!i)return;const s=this.resolveConfig({...r.config,...t},i,r.productType);r.widget.update(s)}destroy(e){const t=this.instances.get(e);t&&(t.widget.destroy(),t.el.remove(),this.instances.delete(e))}resolveContainer(e){if(typeof e=="string"){const t=document.querySelector(e);if(!t)throw new Error(`Container not found: ${e}`);if(!(t instanceof HTMLElement))throw new Error(`Container is not HTMLElement: ${e}`);return t}return e}resolveConfig(e,t,r="credit"){const i=r==="card"?"Оформить карту":"Оформить кредит",s={widgetBaseUrl:"https://api.banks.kg/api/widget",publicBaseUrl:e.publicBaseUrl??"https://banks.kg",widgetId:e.widgetId,texts:{error:"Ошибка загрузки",empty:"Нет предложений",showAll:"Смотреть другие варианты",collapse:"Свернуть",...e.texts,apply:i},colors:R(e.colors),container:t,filters:e.filters};return this.applyColorVars(t,s.colors),s}readColorAttributes(e){const t={};for(const r of T){const i=e.dataset[r];i&&(t[r]=i)}return t}applyColorVars(e,t){for(const r of T){const i=t[r],{cssVar:s}=$[r];i?e.style.setProperty(s,i):e.style.removeProperty(s)}}findFooterLink(e){let t=e.nextElementSibling;for(;t;){if(t instanceof HTMLAnchorElement&&t.classList.contains("bkwg-link"))return t;t=t.nextElementSibling}return null}validateFooterLink(e){if(!e||!["https://banks.kg/"].includes(e.href))return!1;const r=["сравните предложения"],i=e.textContent?.trim();return!(!i||!r.includes(i))}createShadowRoot(e){const t=document.createElement("div");t.className="bkwg-host",e.appendChild(t);const r=t.attachShadow({mode:"open"}),i=document.createElement("style");i.textContent=x,r.appendChild(i);const s=document.createElement("div");return s.className="bkwg-root",r.appendChild(s),s}showError(e,t){const r=this.createShadowRoot(e),i=new E(!1);r.appendChild(i.render());const s=r.querySelector(".bkwg-error-state__text");s&&(s.textContent=t)}}const C=new W;if(typeof window<"u"){window.BanksWidget=C;const g=window.BanksWidgetQueue||[];window.BanksWidgetQueue=void 0,g.forEach(t=>{C.init(t)});const e=()=>{C.scan(),typeof MutationObserver<"u"&&document.body&&new MutationObserver(r=>{r.forEach(i=>{i.addedNodes.forEach(s=>{if(s instanceof HTMLElement&&s.classList.contains("bkwg-link")){const n=s.previousElementSibling;n instanceof HTMLElement&&n.classList.contains("banks-widget")&&n.dataset.bkwgInitialized==="success"&&s.remove()}})})}).observe(document.body,{childList:!0,subtree:!0}),typeof MutationObserver<"u"&&document.body&&new MutationObserver(r=>{let i=!1;r.forEach(s=>{s.type==="childList"&&s.addedNodes.forEach(n=>{n instanceof HTMLElement&&(n.classList.contains("banks-widget")||n.querySelector(".banks-widget"))&&(i=!0)})}),i&&C.scan()}).observe(document.body,{childList:!0,subtree:!0})};document.readyState==="loading"?document.addEventListener("DOMContentLoaded",e):document.body?e():window.addEventListener("load",e)}class G{constructor(){c(this,"state",{status:"loading",products:null,options:null,error:null,apiSuccess:null});c(this,"listeners",[])}get(){return{...this.state}}setLoading(e){this.state.status=e?"loading":this.state.products?"success":"error",this.notify()}setProducts(e,t=null,r=!0){this.state.products=e,this.state.options=t,this.state.apiSuccess=r,this.state.status=r?"success":"error",this.state.error=null,this.notify()}setError(e){this.state.error=e,this.state.status="error",this.notify()}subscribe(e){return this.listeners.push(e),()=>{this.listeners=this.listeners.filter(t=>t!==e)}}notify(){const e=this.get();this.listeners.forEach(t=>t(e))}}class K{render(){return d`
35      <div class="bkwg-empty-state">
36        <div class="bkwg-empty-state__icon-wrapper">
37          <svg
38            class="bkwg-empty-state__icon"
39            xmlns="http://www.w3.org/2000/svg"
40            width="24"
41            height="24"
42            viewBox="0 0 24 24"
43            fill="none"
44            stroke="currentColor"
45            stroke-width="2"
46            stroke-linecap="round"
47            stroke-linejoin="round"
48          >
49            <path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4" />
50            <polyline points="17 8 12 3 7 8" />
51            <line x1="12" x2="12" y1="3" y2="15" />
52          </svg>
53        </div>
54        <div class="bkwg-empty-state__content">
55          <p class="bkwg-empty-state__title">Ничего не найдено</p>
56          <p class="bkwg-empty-state__text">По вашим параметрам нет предложений</p>
57        </div>
58      </div>
59    `}}class Y{constructor(e,t="credit",r={}){c(this,"text");c(this,"link");c(this,"element",null);c(this,"hasMore");c(this,"isMoreVisible");c(this,"onToggle");this.config=e,this.text=t==="card"?"сравните карты":"сравните кредиты",this.link=t==="card"?"/cards":"/credits",this.hasMore=r.hasMore??!1,this.isMoreVisible=r.isMoreVisible??!1,this.onToggle=r.onToggle??null}render(){const e=d`
60      <footer class="bkwg-footer">
61        ${this.hasMore?d`<button class="bkwg-footer__toggle">${this.getToggleText()}</button>`:""}
62        ${this.hasMore?d`<hr class="bkwg-footer__divider" />`:""}
63        <a
64          href="${this.config.publicBaseUrl}${this.link}"
65          target="_blank"
66          rel="noopener noreferrer"
67          class="bkwg-footer__link"
68        >
69          <img
70            src="${this.config.publicBaseUrl}/images/logos/banks-logo.svg"
71            alt="Banks.kg"
72            class="bkwg-footer__logo"
73          />
74          <span class="bkwg-footer__text">${this.text}</span>
75        </a>
76      </footer>
77    `;return this.hasMore&&this.onToggle&&e.querySelector(".bkwg-footer__toggle")?.addEventListener("click",()=>{this.onToggle?.()}),this.element=e,e}updateState(e){this.isMoreVisible=e;const t=this.element?.querySelector(".bkwg-footer__toggle");t&&(t.textContent=this.getToggleText())}getToggleText(){return this.isMoreVisible?this.config.texts.collapse:this.config.texts.showAll}}const v=class v{constructor(e,t={}){c(this,"container");c(this,"trigger");c(this,"dropdown",null);c(this,"options",[]);c(this,"isOpen",!1);c(this,"value","");c(this,"documentClickListener",null);c(this,"focusedIndex",-1);c(this,"handleDropdownKeydown",e=>{if(!this.dropdown)return;if(e.key==="Escape"){this.close(),this.trigger.focus();return}const t=this.dropdown.querySelectorAll(".bkwg-cs-option");if(t.length!==0){if(e.key==="ArrowDown")e.preventDefault(),this.focusOption(Math.min(this.focusedIndex+1,t.length-1));else if(e.key==="ArrowUp")e.preventDefault(),this.focusOption(Math.max(this.focusedIndex-1,0));else if(e.key==="Enter"&&this.focusedIndex>=0){e.preventDefault();const r=t[this.focusedIndex];this.select(r.dataset.value)}}});this.originalSelect=e,this.settings=t,this.originalSelect.style.display="none",this.options=Array.from(this.originalSelect.options).map(r=>({text:r.text,value:r.value,selected:r.selected,flagCode:r.dataset.flagCode,imgUrl:r.dataset.imgUrl})),this.value=this.originalSelect.value,this.render(),this.bindEvents(),this.originalSelect.parentNode?.insertBefore(this.container,this.originalSelect.nextSibling)}render(){this.container=document.createElement("div"),this.container.className="bkwg-custom-select";const e=this.options.find(t=>t.value===this.value);this.trigger=document.createElement("div"),this.trigger.className="bkwg-cs-trigger",this.trigger.tabIndex=0,this.trigger.innerHTML=`
78      <span class="bkwg-cs-value-wrapper">
79        ${e?.imgUrl?`<img src="${e.imgUrl}" alt="${e.text}" class="bkwg-cs-trigger-icon" />`:""}
80        <span class="bkwg-cs-value">${e?e.text:this.settings.placeholder||""}</span>
81      </span>
82      <div class="bkwg-cs-arrow">
83        <svg width="12" height="12" viewBox="0 0 12 12" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">
84          <path d="m3 5 3 3 3-3"/>
85        </svg>
86      </div>
87    `,this.container.appendChild(this.trigger)}inheritThemeVars(e){const t=this.container.closest(".bkwg-root");
87if(!t)return;const r=getComputedStyle(t);for(const i of H){const s=r.getPropertyValue(i).trim();s&&e.style.setProperty(i,s)}}createDropdown(){const e=document.createElement("div");e.className="bkwg-cs-dropdown",e.style.all="initial",this.inheritThemeVars(e),e.style.background="var(--bkwg-bg-primary, #fff)",e.style.border="1px solid var(--bkwg-border, #e5e7eb)",e.style.borderRadius="6px",e.style.boxShadow="0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1)",e.style.zIndex="2147483647",e.style.overflowY="auto",e.style.boxSizing="border-box",e.style.display="block";const t=window.getComputedStyle(this.trigger);return e.style.fontFamily=t.fontFamily,e.style.fontSize=t.fontSize,e.style.lineHeight=t.lineHeight,this.options.forEach(r=>{const i=document.createElement("div");i.className=`bkwg-cs-option ${r.value===this.value?"selected":""}`,i.dataset.value=r.value,i.style.all="initial",i.style.padding="6px 12px 6px 32px",i.style.cursor="pointer",i.style.color="var(--bkwg-text, #030712)",i.style.display="flex",i.style.alignItems="center",i.style.gap="8px",i.style.whiteSpace="nowrap",i.style.boxSizing="border-box",i.style.fontFamily="inherit",i.style.fontSize="inherit",i.style.lineHeight="inherit",i.style.position="relative";const s=()=>{i.style.backgroundColor="var(--bkwg-bg-secondary, #f3f4f6)"},n=()=>{i.style.backgroundColor="transparent"};if(i.addEventListener("mouseenter",s),i.addEventListener("mouseleave",n),r.value===this.value){const a=document.createElement("div");a.innerHTML=`
88          <svg width="16" height="16" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
89            <polyline points="4 8 6.5 10.5 12 5"></polyline>
90          </svg>
91        `,a.style.all="initial",a.style.position="absolute",a.style.left="8px",a.style.top="50%",a.style.transform="translateY(-50%)",a.style.color="var(--bkwg-text-secondary, #6b7280)",a.style.flexShrink="0",a.style.display="flex",a.style.alignItems="center",a.style.zIndex="1",i.appendChild(a)}const o=r.imgUrl||(r.flagCode&&this.settings.flagBaseUrl?`${this.settings.flagBaseUrl}
91/${r.flagCode.toLowerCase()}.png`:null);if(o){const a=document.createElement("img");a.src=o,a.alt=r.text,a.className="bkwg-cs-option-flag",a.style.all="initial",a.style.cursor="pointer",a.style.width="20px",a.style.height="20px",a.style.objectFit="contain",a.style.flexShrink="0",a.style.display="block",i.appendChild(a)}const l=document.createElement("span");l.textContent=r.text,l.style.all="initial",l.style.fontFamily="inherit",l.style.fontSize="inherit",l.style.lineHeight="inherit",l.style.cursor="pointer",i.appendChild(l),i.tabIndex=0,i.addEventListener("click",a=>{a.stopPropagation(),this.select(r.value)}),e.appendChild(i)}),e}bindEvents(){this.trigger.addEventListener("click",e=>{e.stopPropagation(),this.toggle()}),this.documentClickListener=e=>{const t=e.composedPath(),r=t.includes(this.container)||this.dropdown&&t.includes(this.dropdown);this.isOpen&&!r&&this.close()},document.addEventListener("click",this.documentClickListener),this.trigger.addEventListener("keydown",this.handleTriggerKeydown.bind(this))}handleTriggerKeydown(e){(e.key==="Enter"||e.key===" ")&&(e.preventDefault(),this.toggle()),e.key==="ArrowDown"&&!this.isOpen&&(e.preventDefault(),this.open(),this.focusOption(0))}focusOption(e){if(!this.dropdown)return;const t=this.dropdown.querySelectorAll(".bkwg-cs-option");t.forEach((r,i)=>r.classList.toggle("focused",i===e)),e>=0&&e<t.length&&(t[e].focus(),this.focusedIndex=e)}toggle(){this.isOpen?this.close():this.open()}open(){if(this.isOpen||this.dropdown)return;v.openDropdown&&v.openDropdown!==this&&v.openDropdown.close(),v.openDropdown=this,this.isOpen=!0,this.container.classList.add("open"),this.dropdown=this.createDropdown();const e=this.trigger.getBoundingClientRect(),t=window.scrollX,r=window.scrollY;this.dropdown.style.position="absolute",this.dropdown.style.left=`${e.left+t}px`,this.dropdown.style.width=`${e.width}px`;const i=36,n=i*10,o=window.innerHeight-e.bottom,l=e.top;let a,p;o>=i*2?(a=e.bottom+r,p=Math.min(o-8,n)):(p=Math.min(l-8,n),a=e.top+r-p),this.dropdown.style.top=`${a+6}px`,this.dropdown.style.maxHeight=`${p-6}px`,document.body.appendChild(this.dropdown),this.dropdown.addEventListener("keydown",this.handleDropdownKeydown)}close(){this.dropdown&&(v.openDropdown===this&&(v.openDropdown=null),this.isOpen=!1,this.container.classList.remove("open"),this.focusedIndex=-1,this.dropdown.removeEventListener("keydown",this.handleDropdownKeydown),this.dropdown.remove(),this.dropdown=null)}select(e){this.value=e,this.originalSelect.value=e,this.originalSelect.dispatchEvent(new Event("change"));const t=this.options.find(r=>r.value===e);if(t){const r=this.trigger.querySelector(".bkwg-cs-value-wrapper");r&&(r.innerHTML=`
92          ${t.imgUrl?`<img src="${t.imgUrl}" alt="${t.text}" class="bkwg-cs-trigger-icon" />`:""}
93          <span class="bkwg-cs-value">${t.text}</span>
94        `)}this.close(),this.settings.onChange&&this.settings.onChange(e)}destroy(){this.close(),this.documentClickListener&&document.removeEventListener("click",this.documentClickListener),this.container.remove(),this.originalSelect.style.display=""}setValue(e){this.options.some(r=>r.value===e)&&this.select(e)}};c(v,"openDropdown",null);let y=v;const O={option_loyalty_program:"Программа лояльности",option_bonuses:"Бонусы",option_cashback:"Кэшбэк",option_online_payments:"Онлайн платежи",option_wireless_payments:"Бесконтактная оплата",option_sms_notifications:"СМС уведомления",option_salary_project:"Зарплатный проект",option_online_banking:"Мобильный банкинг",option_overdraft:"Овердрафт"};class j{render(e,t){return d`<span class="bkwg-badge">${t}</span>`}renderBadgesFromOptions(e){const t=[];for(const[r,i]of Object.entries(e))i&&O[r]&&t.push(this.render(r,O[r]));return t}}class N{constructor(e,t){c(this,"formContainer",null);c(this,"isFormOpen",!1);this.product=e,this.config=t}mountForm(e){const t=this.config.form;t&&(this.formContainer=document.createElement("div"),this.formContainer.className="bkwg-card__form-container",e.appendChild(this.formContainer),this.formContainer.appendChild(t.render()))}closeForm(){this.isFormOpen&&this.toggleForm(this.getFormInstance())}toggleForm(e){!e||!this.formContainer||(this.isFormOpen=!this.isFormOpen,e.toggle(this.isFormOpen),this.isFormOpen?this.formContainer.classList.add("bkwg-card__form-container--visible"):this.formContainer.classList.remove("bkwg-card__form-container--visible"))}getFormInstance(){return this.config.form??null}renderTopMarker(){return d`
95      <span class="bkwg-card__top">
96        <svg
97          class="bkwg-card__top-icon"
98          xmlns="http://www.w3.org/2000/svg"
99          width="12"
100          height="12"
101          viewBox="0 0 24 24"
102          fill="#fff"
103          stroke="currentColor"
104          stroke-width="2"
105          stroke-linecap="round"
106          stroke-linejoin="round"
107        >
108          <path
109            d="M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z"
110          />
111        </svg>
112        ТОП
113      </span>
114    `}renderActions(e){return d`
115      <div class="bkwg-card__actions">
116        ${e?d`
117              <button class="bkwg-button bkwg-button--primary bkwg-apply-trigger">
118                ${this.config.texts.apply}
119              </button>
120            `:d`
121              <a
122                href="${this.config.widgetConfig.publicBaseUrl}${this.product.url}"
123                class="bkwg-button bkwg-button--primary"
124                >${this.config.texts.apply}</a
125              >
126            `}
127      </div>
128    `}attachEventListeners(e,t){if(t){const r=this.getFormInstance();e.querySelector(".bkwg-apply-trigger")?.addEventListener("click",()=>this.toggleForm(r))}}}class V extends N{constructor(t,r){super(t,r);c(this,"badge",new j)}render(){const t=this.getFormEnabled(),r=d`
129      <article class="${this.config.showTitle?"bkwg-card bkwg-card--highlighted":"bkwg-card"}">
130        ${this.config.showTitle?this.renderTopMarker():""}
131        <div class="bkwg-card__inner">
132          <div class="bkwg-card__content">
133            ${this.config.showTitle?d`<div class="bkwg-card__title">Лучшее предложение</div>`:""}
134            ${this.renderBankInfo()} ${this.renderDetails()}
135          </div>
136          ${this.renderActions(t)}
137        </div>
138      </article>
139    `;return this.mountForm(r),this.attachEventListeners(r,t),r}renderBankInfo(){return d`
140      <div class="bkwg-card__main-content">
141        <a
142          href="${this.config.widgetConfig.publicBaseUrl}${this.product.organization.url}"
143          class="bkwg-card__logo-link"
144        >
145          <img
146            src="${this.product.organization.logo}"
147            alt="${this.product.organization.title}"
148            class="bkwg-card__logo"
149          />
150        </a>
151        <div class="bkwg-card__main-info">
152          <a
153            href="${this.config.widgetConfig.publicBaseUrl}${this.product.organization.url}"
154            class="bkwg-card__bank-name bkwg-card__card-bank-name"
155            >${this.product.organization.title}</a
156          >
157          <a
158            href="${this.config.widgetConfig.publicBaseUrl}${this.product.url}"
159            class="bkwg-card__title"
160            >${this.product.title}</a
161          >
162        </div>
163      </div>
164    `}renderDetails(){const t=this.product.currencies?.map(i=>i.code).join(", ")||"—",r=document.createElement("div");return this.product.types?.length&&(r.className="bkwg-card__badges",this.product.types.forEach(i=>r.appendChild(this.badge.render("",i.title)))),d`
165      <div>
166        <div class="bkwg-card__details">
167          <div class="bkwg-card__detail-col">
168            <div class="bkwg-card__detail-label">Ставка в год</div>
169            <div class="bkwg-card__detail-value">${this.product.min_rate}</div>
170          </div>
171          <div class="bkwg-card__detail-col">
172            <div class="bkwg-card__detail-label">Срок</div>
173            <div class="bkwg-card__detail-value">${this.product.max_period||"—"}</div>
174          </div>
175          <div class="bkwg-card__detail-col">
176            <div class="bkwg-card__detail-label">Валюта</div>
177            <div class="bkwg-card__detail-value">${t}</div>
178          </div>
179        </div>
180        ${this.product.types?.length?r:""}
181      </div>
182    `}getFormEnabled(){return!!this.config.options?.enable_credit_form}}class D extends N{constructor(t,r){super(t,r);c(this,"badge",new j)}render(){const t=this.getFormEnabled(),r=d`
183      <article class="${this.config.showTitle?"bkwg-card bkwg-card--highlighted":"bkwg-card"}">
184        ${this.config.showTitle?this.renderTopMarker():""}
185        <div class="bkwg-card__inner">
186          ${this.config.showTitle?d`<div class="bkwg-card__title">Лучшее предложение</div>`:""}
187          <div class="bkwg-card__grid">
188            <div class="bkwg-card__main">${this.renderBankInfo()}</div>
189            <div class="bkwg-card__details-wrapper">${this.renderDetails()}</div>
190          </div>
191          ${this.renderBadges()||""} ${this.renderActions(t)}
192        </div>
193      </article>
194    `;return this.mountForm(r),this.attachEventListeners(r,t),r}renderBadges(){if(!this.config.showTitle||!this.product.options)return null;const t=this.badge.renderBadgesFromOptions(this.product.options);if(t.length===0)return null;const r=document.createElement("footer");return r.className="bkwg-card__footer",t.forEach(i=>
194r.appendChild(i)),r}renderBankInfo(){const t=d`
195      <a
196        href="${this.config.widgetConfig.publicBaseUrl}${this.product.url}"
197        class="bkwg-card__card-logo-link"
198      >
199        <img src="${this.product.logo}" alt="${this.product.title}" class="bkwg-card__card-logo" />
200      </a>
201    `,r=d`
202      <a
203        href="${this.config.widgetConfig.publicBaseUrl}${this.product.url}"
204        class="bkwg-card__title-link"
205      >
206        ${this.product.title}
207      </a>
208    `,i=d`
209      <a
210        href="${this.config.widgetConfig.publicBaseUrl}${this.product.organization.url}"
211        class="bkwg-card__bank-name"
212      >
213        ${this.product.organization.title}
214      </a>
215    `,s=[];this.product.currency_type==="multi"?s.push("Мультивалютная"):this.product.currency_type==="single"&&s.push("Моновалютная");const n=typeof this.product.card_system_name=="string"?this.product.card_system_name:this.product.card_system_name?.title;return n&&s.push(n),d`
216      <div class="bkwg-card__card-main-content">
217        ${t}
218        <div class="bkwg-card__card-main-info">
219          ${r}
220          ${s.length?d`<p class="bkwg-card__subtitle">${s.join(" — ")}</p>`:""}
221          ${i}
222        </div>
223      </div>
224    `}renderDetails(){const t=this.product.service_fee===0?"Бесплатно":`${this.product.service_fee}.00 ⊆`,r=[];this.product.type?.debit&&r.push("Дебетовая"),this.product.type?.credit&&r.push("Кредитная");const i=this.product.currencies?this.product.currencies.map(s=>s.code).join(", "):"";return d`
225      <div class="bkwg-card__card-details">
226        <div class="bkwg-card__detail-col">
227          <div class="bkwg-card__detail-label">Ежегодная плата</div>
228          <div class="bkwg-card__detail-value">${t}</div>
229        </div>
230        ${r.length?d`
231              <div class="bkwg-card__detail-col">
232                <div class="bkwg-card__detail-label">Тип</div>
233                <div class="bkwg-card__detail-value">${r.join(", ")}</div>
234              </div>
235            `:""}
236        ${i?d`
237              <div class="bkwg-card__detail-col">
238                <div class="bkwg-card__detail-label">Валюта</div>
239                <div class="bkwg-card__detail-value">${i}</div>
240              </div>
241            `:""}
242      </div>
243    `}getFormEnabled(){return!!this.config.options?.enable_card_form}}const I=10,L="…";function X(g,e){if(e<=7)return Array.from({length:e},(b,h)=>h+1);const i=Math.max(g-1,1),s=Math.min(g+1,e),n=i>2,o=s<e-1,l=[1];n&&l.push(L);const a=n?i:2,p=o?s:e-1;for(let b=a;b<=p;b++)l.push(b);return o&&l.push(L),l.push(e),l}
243class A{constructor(e,t,r,i){c(this,"api");c(this,"state");c(this,"resultsContainer",null);c(this,"container",null);c(this,"unsubscribe",null);c(this,"initialData",null);c(this,"productType");c(this,"formFactory",null);c(this,"currentPage",1);c(this,"isMoreVisible",!1);c(this,"selectedOrgId",null);c(this,"selectedTypeId",null);c(this,"selectedPurposeId",null);c(this,"selectedCardType",null);c(this,"footer",null);c(this,"orgSelect",null);c(this,"typeSelect",null);c(this,"purposeSelect",null);c(this,"cardTypeSelect",null);this.config=e,this.api=new F(e),this.state=new G,this.productType=t,this.initialData=r||null,this.formFactory=i??null}mount(){return this.render()}getSelectedPurposeId(){return this.selectedPurposeId}update(e){this.config=e,this.api=new F(e),this.fetchData()}destroy(){this.unsubscribe?.(),this.orgSelect?.destroy(),this.orgSelect=null,this.typeSelect?.destroy(),this.typeSelect=null,this.purposeSelect?.destroy(),this.purposeSelect=null,this.cardTypeSelect?.destroy(),this.cardTypeSelect=null}render(){const e=d`
244      <div class="bkwg-products">
245        <div class="bkwg-products__content">
246          <div class="bkwg-products__results" id="results"></div>
247        </div>
248      </div>
249    `;return this.resultsContainer=e.querySelector("#results"),this.container=e,this.unsubscribe=this.state.subscribe(t=>this.renderResults(t)),this.initialData?(this.state.setProducts(this.initialData.data,this.initialData.options,this.initialData.success),this.initialData=null):this.fetchData(),e}async fetchData(){this.isMoreVisible=!1,this.currentPage=1,this.selectedOrgId=null,this.selectedTypeId=null,this.selectedPurposeId=null,this.selectedCardType=null;try{this.state.setLoading(!0);const e=await this.api.fetchProducts();this.state.setProducts(e.data??null,e.options??null,e.success)}catch(e){this.state.setError(e instanceof Error?e:new Error("Unknown error"))}finally{this.state.setLoading(!1)}}removeExistingFooter(){this.container?.querySelector(".bkwg-footer")?.remove()}renderEmptyState(){const t=new K().render(),r=t.querySelector(".bkwg-empty-state__text");return r&&(r.textContent=this.config.texts.empty),t}renderProductList(e,t){if(this.resultsContainer){if(e.length===0){this.resultsContainer.appendChild(this.renderEmptyState());return}if(this.isMoreVisible)this.renderMore(e,t);else{const r=this.createEntity(e[0],{showTitle:!!e[0].isTop,texts:{apply:this.config.texts.apply},widgetConfig:this.config,options:t}).render();r.classList.add("bkwg-first-card"),this.resultsContainer.appendChild(r)}}}renderResults(e){if(!this.resultsContainer||!this.container)return;for(this.orgSelect?.destroy(),this.orgSelect=null,this.typeSelect?.destroy(),this.typeSelect=null,this.purposeSelect?.destroy(),this.purposeSelect=null,this.cardTypeSelect?.destroy(),this.cardTypeSelect=null;this.resultsContainer.lastChild;)this.resultsContainer.removeChild(this.resultsContainer.lastChild);if(e.status==="loading"){this.resultsContainer.appendChild(new B().render()),this.removeExistingFooter();return}if(e.status==="error"||!e.products){const w=e.apiSuccess===!1,k=new E(w).render();if(e.apiSuccess!==!1){const m=k.querySelector(".bkwg-error-state__text");m&&(m.textContent=this.config.texts.error)}this.resultsContainer.appendChild(k),this.removeExistingFooter();return}if(e.products.length===0){this.resultsContainer.appendChild(this.renderEmptyState()),this.removeExistingFooter();return}const t=e.products.filter(w=>this.productType==="credit"?this.isCreditProduct(w):this.isCardProduct(w));if(t.length===0){this.resultsContainer.appendChild(this.renderEmptyState());return}const r=this.getOrganizations(t),i=r.length>1,s=this.getTypes(t),n=s.length>1,o=this.getPurposes(t),l=o.length>1,a=this.getCardTypes(t),p=a.length>1;(i||n||l||p)&&this.resultsContainer.appendChild(this.renderFiltersSection(r,s,o,a,t,e.options,{hasOrgFilter:i,hasTypeFilter:n,hasPurposeFilter:l,hasCardTypeFilter:p}));const b=this.applyFilters(t,{hasOrgFilter:i,hasTypeFilter:n,hasPurposeFilter:l,hasCardTypeFilter:p});this.renderProductList(b,e.options),this.removeExistingFooter();const h=b.length>1;this.footer=new Y(this.config,this.productType,{hasMore:h,isMoreVisible:this.isMoreVisible,onToggle:h?()=>{if(this.isMoreVisible=!this.isMoreVisible,this.currentPage=1,this.isMoreVisible)this.renderMore(b,e.options);else{this.renderResults(this.state.get());return}this.footer?.updateState(this.isMoreVisible)}:void 0}),this.container.appendChild(this.footer.render())}applyFilters(e,t){let r=t.hasOrgFilter&&this.selectedOrgId!==null?e.filter(i=>i.organization_id===this.selectedOrgId):e;return t.hasTypeFilter&&this.selectedTypeId!==null&&(r=r.filter(i=>this.isCreditProduct(i)&&i.types?.some(s=>s.id===this.selectedTypeId))),t.hasPurposeFilter&&this.selectedPurposeId!==null&&(r=r.filter(i=>this.isCreditProduct(i)&&i.purposes?.some(s=>s.id===this.selectedPurposeId))),t.hasCardTypeFilter&&this.selectedCardType!==null&&(r=r.filter(i=>this.isCardProduct(i)&&i.type[this.selectedCardType])),r}isCreditProduct(e){return"min_rate"in e&&"currencies"in e}isCardProduct(e){return"logo"in e&&"card_system_name"in e}createEntity(e,t){let r=null;if(this.formFactory&&t.options&&(this.productType==="card"?!!t.options.enable_card_form:!!t.options.enable_credit_form)){const n={fn:()=>{}};r=this.formFactory(e,()=>n.fn());const o={...t,form:r};let l;if(this.productType==="card"&&this.isCardProduct(e))l=new D(e,o);else if(this.productType==="credit"&&this.isCreditProduct(e))l=new V(e,o);else throw new Error(`Invalid product type for ${this.productType} widget`);return n.fn=()=>l.closeForm(),l}const i={...t,form:r};if(this.productType==="card"&&this.isCardProduct(e))return new D(e,i);if(this.productType==="credit"&&this.isCreditProduct(e))return new V(e,i);throw new Error(`Invalid product type for ${this.productType} widget`)}renderFiltersSection(e,t,r,i,s,n,o){const l=d`
250      <div class="bkwg-filters-section">
251        <div class="bkwg-filters-section__header">
252          <svg
253            class="bkwg-filters-section__icon"
254            width="13"
255            height="13"
256            viewBox="0 0 24 24"
257            fill="none"
258            stroke="currentColor"
259            stroke-width="2.5"
260            stroke-linecap="round"
261            stroke-linejoin="round"
262            aria-hidden="true"
263          >
264            <line x1="4" y1="6" x2="20" y2="6"></line>
265            <line x1="8" y1="12" x2="16" y2="12"></line>
266            <line x1="11" y1="18" x2="13" y2="18"></line>
267          </svg>
268          <span class="bkwg-filters-section__title">Фильтры</span>
269          <a class="bkwg-filters-reset" role="button" aria-label="Сбросить фильтры">Сбросить</a>
270        </div>
271        <div class="bkwg-filters-row"></div>
272      </div>
273    `,a=l.querySelector(".bkwg-filters-row");return o.hasOrgFilter&&a.appendChild(this.renderOrgFilter(e,s,n)),o.hasTypeFilter&&a.appendChild(this.renderTypeFilter(t,s,n)),o.hasPurposeFilter&&a.appendChild(this.renderPurposeFilter(r,s,n)),o.hasCardTypeFilter&&a.appendChild(this.renderCardTypeFilter(i,s,n)),l.querySelector(".bkwg-filters-reset")?.addEventListener("click",()=>{this.selectedOrgId=null,this.selectedTypeId=null,this.selectedPurposeId=null,this.selectedCardType=null,this.currentPage=1,this.renderResults(this.state.get())}),l}toggleResetButton(){const e=this.resultsContainer?.querySelector(".bkwg-filters-section");if(!e)return;const t=this.selectedOrgId!==null||this.selectedTypeId!==null||this.selectedPurposeId!==null||this.selectedCardType!==null;e.classList.toggle("bkwg-filters-section--active",t)}getOrganizations(e){const t=new Set,r=[];for(const i of e)t.has(i.organization_id)||(t.add(i.organization_id),r.push({id:i.organization_id,title:i.organization.title,logo:i.organization.logo}));return r}renderOrgFilter(e,t,r){const i=d`<div class="bkwg-filter">
274      <div class="bkwg-filter__label">Организация</div>
275    </div>`,s=this.buildNativeSelect("Все организации");return e.forEach(n=>{const o=document.createElement("option");o.value=String(n.id),o.textContent=n.title,o.dataset.imgUrl=n.logo,this.selectedOrgId===n.id&&(o.selected=!0),s.appendChild(o)}),i.appendChild(s),this.orgSelect=new y(s,{placeholder:"Все организации",onChange:n=>{this.selectedOrgId=n?Number(n):null,this.currentPage=1,this.toggleResetButton(),this.rerenderProducts(t,r)}}),i}getCreditProductAttributes(e,t){const r=new Set,i=[];for(const s of e)if(this.isCreditProduct(s)&&s[t])for(const n of s[t])r.has(n.id)||(r.add(n.id),i.push({id:n.id,title:n.title}));return i}getTypes(e){return this.getCreditProductAttributes(e,"types")}renderCreditAttrFilter(e,t,r,i,s,n,o,l){const a=d`<div class="bkwg-filter">
276      <div class="bkwg-filter__label">${t}</div>
277    </div>`,p=this.buildNativeSelect(r);return e.forEach(b=>{const h=document.createElement("option");h.value=String(b.id),h.textContent=b.title,i()===b.id&&(h.selected=!0),p.appendChild(h)}),a.appendChild(p),n(new y(p,{placeholder:r,onChange:b=>{s(b?Number(b):null),this.currentPage=1,this.toggleResetButton(),this.rerenderProducts(o,l)}})),a}renderTypeFilter(e,t,r){return this.renderCreditAttrFilter(e,"Тип кредита","Все типы",()=>this.selectedTypeId,i=>this.selectedTypeId=i,i=>
277this.typeSelect=i,t,r)}getPurposes(e){return this.getCreditProductAttributes(e,"purposes")}renderPurposeFilter(e,t,r){return this.renderCreditAttrFilter(e,"Цель кредита","Все цели",()=>this.selectedPurposeId,i=>this.selectedPurposeId=i,i=>this.purposeSelect=i,t,r)}getCardTypes(e){const t=new Set;for(const i of e)this.isCardProduct(i)&&(i.type.debit&&t.add("debit"),i.type.credit&&t.add("credit"));const r=[];return t.has("debit")&&r.push({id:"debit",title:"Дебетовая"}),t.has("credit")&&r.push({id:"credit",title:"Кредитная"}),r}renderCardTypeFilter(e,t,r){const i=d`<div class="bkwg-filter">
278      <div class="bkwg-filter__label">Тип карты</div>
279    </div>`,s=this.buildNativeSelect("Все типы");return e.forEach(n=>{const o=document.createElement("option");o.value=n.id,o.textContent=n.title,this.selectedCardType===n.id&&(o.selected=!0),s.appendChild(o)}),i.appendChild(s),this.cardTypeSelect=new y(s,{placeholder:"Все типы",onChange:n=>{this.selectedCardType=n||null,this.currentPage=1,this.toggleResetButton(),this.rerenderProducts(t,r)}}),i}buildNativeSelect(e){const t=document.createElement("select");t.style.display="none";const r=document.createElement("option");return r.value="",r.textContent=e,t.appendChild(r),t}rerenderProducts(e,t){if(!this.resultsContainer)return;const r=this.applyFilters(e,{hasOrgFilter:!0,hasTypeFilter:!0,hasPurposeFilter:!0,hasCardTypeFilter:!0});Array.from(this.resultsContainer.children).forEach(i=>{i.classList.contains("bkwg-filters-section")||i.remove()}),this.renderProductList(r,t)}renderMore(e,t){if(!this.resultsContainer||e.length===0)return;this.resultsContainer.querySelector(".bkwg-products__more")?.remove(),this.resultsContainer.querySelector(".bkwg-first-card")?.remove();const r=this.currentPage===1,i=e.slice(1),s=Math.ceil((i.length+1)/I),n=r?0:(this.currentPage-1)*I-1,o=i.slice(n,n+(r?I-1:I)),l=d`<div class="bkwg-products__more bkwg-products__more--visible"></div>`;if(r){const a=this.createEntity(e[0],{showTitle:!!e[0].isTop,texts:{apply:this.config.texts.apply},widgetConfig:this.config,options:t}).render();a.classList.add("bkwg-first-card"),l.appendChild(a)}if(o.forEach(a=>{l.appendChild(this.createEntity(a,{showTitle:!1,texts:{apply:this.config.texts.apply},widgetConfig:this.config,options:t}).render())}),s>1){const a=o.length+(r?1:0),p=r?1:n+2;l.appendChild(this.renderPagination(s,e,t,p,p+a-1))}this.resultsContainer.appendChild(l)}renderPagination(e,t,r,i,s){const n=d`<div class="bkwg-pagination-bar"></div>`,o=d`<nav class="bkwg-pagination" aria-label="Страницы"></nav>`,l="bkwg-pagination__btn--sibling",a=u=>{this.currentPage=Math.min(Math.max(u,1),e),this.renderMore(t,r),this.resultsContainer?.scrollIntoView({behavior:"smooth",block:"start"})},p=(u,k,m,z=!1,S="")=>{const M=d`<button
280        class="bkwg-pagination__btn ${z?"bkwg-pagination__btn--active":""} ${S}"
281        aria-label="Страница ${u}"
282      >
283        ${u}
284      </button>`;return z&&M.setAttribute("aria-current","page"),M.addEventListener("click",()=>a(k)),M},b=(u,k,m)=>{const S=d`<button
285        class="bkwg-pagination__btn bkwg-pagination__btn--arrow"
286        aria-label="${u==="prev"?"Предыдущая страница":"Следующая страница"}"
287      >
288        ${_(`<svg class="bkwg-pagination__icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="${u==="prev"?"M15 18l-6-6 6-6":"M9 18l6-6-6-6"}"/></svg>`)}
289      </button>`;return m?S.setAttribute("disabled",""):S.addEventListener("click",()=>a(k)),S},h=(u,k)=>{const m=d`<button
290        class="bkwg-pagination__btn bkwg-pagination__ellipsis bkwg-pagination__btn--sibling"
291        aria-label="${k==="prev"?"Назад на 5 страниц":"Вперёд на 5 страниц"}"
292      >
293        …
294      </button>`;return m.addEventListener("click",()=>a(u)),m};o.appendChild(b("prev",this.currentPage-1,this.currentPage===1)),X(this.currentPage,e).forEach(u=>{if(u===L){const m=o.querySelectorAll(".bkwg-pagination__btn--active").length===0;o.appendChild(m?h(Math.max(this.currentPage-5,1),"prev"):h(Math.min(this.currentPage+5,e),"next"));return}const k=u===1||u===e||u===this.currentPage;o.appendChild(p(String(u),u,!1,u===this.currentPage,k?"":l))}),o.appendChild(b("next",this.currentPage+1,this.currentPage===e));const w=d`<p class="bkwg-pagination__counter">
295      Показано ${`${i}–${s}`} из ${String(t.length)}
296    </p>`;return n.appendChild(w),n.appendChild(o),n}}const P=[{id:1,slug:"bishkek",url:null,title:"г. Бишкек",location_id:2},{id:9,slug:"osh",url:null,title:"г. Ош",location_id:7},{id:2,slug:"chuiskaya-oblast",url:null,title:"Чуйская область",location_id:null},{id:3,slug:"issykkulskaya-oblast",url:null,title:"Иссык-Кульская область",location_id:null},{id:4,slug:"narynskaya-oblast",url:null,title:"Нарынская область",location_id:null},{id:5,slug:"talasskaya-oblast",url:null,title:"Таласская область",location_id:null},{id:6,slug:"jalalabadskaya-oblast",url:null,title:"Джалал-Абадская область",location_id:null},{id:7,slug:"oshskaya-oblast",url:null,title:"Ошская область",location_id:null},{id:8,slug:"batkenskaya-oblast",url:null,title:"Баткенская область",location_id:null},{id:10,slug:"talas",url:null,title:"г. Талас",location_id:5},{id:11,slug:"naryn",url:null,title:"г. Нарын",location_id:4},{id:12,slug:"cholpon-ata",url:null,title:"г. Чолпон-Ата",location_id:3},{id:13,slug:"balykchy",url:null,title:"г. Балыкчи",location_id:3},{id:14,slug:"karakol",url:null,title:"г. Каракол",location_id:3},{id:15,slug:"jalal-abad",url:null,title:"г. Манас",location_id:6},{id:16,slug:"batken",url:null,title:"г. Баткен",location_id:8},{id:17,slug:"tokmok",url:null,title:"г. Токмок",location_id:2},{id:18,slug:"kara-balta",url:null,title:"г. Кара-Балта",location_id:2},{id:19,slug:"kant",url:null,title:"г. Кант",location_id:2},{id:20,slug:"uzgen",url:null,title:"г. Узген",location_id:7},{id:21,slug:"kara-suu",url:null,title:"г. Кара-Суу",location_id:7},{id:22,slug:"kerben",url:null,title:"г. Кербен",location_id:6},{id:23,slug:"mailuu-suu",url:null,title:"г. Майлуу-Суу",location_id:6},{id:24,slug:"tash-kumyr",url:null,title:"г. Таш-Кумыр",location_id:6},{id:25,slug:"kyzyl-kia",url:null,title:"г. Кызыл-Кия",location_id:8},{id:26,slug:"sulukta",url:null,title:"г. Сулюкта",location_id:8},{id:27,slug:"kochkor-ata",url:null,title:"г. Кочкор-Ата",location_id:6},{id:28,slug:"nookat",url:null,title:"г. Ноокат",location_id:7},{id:29,slug:"kadamjai",url:null,title:"г. Кадамжай",location_id:8},{id:30,slug:"kemin",url:null,title:"г. Кемин",location_id:2},{id:31,slug:"kara-kul",url:null,title:"г. Кара-Куль",location_id:6},{id:32,slug:"razzakov",url:null,title:"г. Раззаков",location_id:8}];class U{constructor(e,t){c(this,"element");c(this,"isSubmitted",!1);c(this,"requestId","");c(this,"errors",{});c(this,"selectInstances",[]);c(this,"values",{last_name:"",first_name:"",phone:"",email:"",location_id:P[0]?.id||"",agreement:!1});this.config=e,this.onClose=t,this.element=d`<div class="bkwg-form"></div>`}render(){return this.updateContent(),this.element}toggle(e){this.element.classList.toggle("bkwg-form--open",e)}
296updateContent(){for(this.selectInstances.forEach(i=>i.destroy()),this.selectInstances=[];this.element.lastChild;)this.element.removeChild(this.element.lastChild);if(this.isSubmitted){this.element.appendChild(this.renderSuccess());return}const e=d`
297      <div>
298        <div class="bkwg-form__header">
299          <div class="bkwg-form__intro">${this.introText}</div>
300          <button class="bkwg-form__close" type="button" aria-label="Закрыть">
301            <svg
302              width="20"
303              height="20"
304              viewBox="0 0 24 24"
305              fill="none"
306              stroke="currentColor"
307              stroke-width="2"
308              stroke-linecap="round"
309              stroke-linejoin="round"
310            >
311              <line x1="18" y1="6" x2="6" y2="18"></line>
312              <line x1="6" y1="6" x2="18" y2="18"></line>
313            </svg>
314          </button>
315        </div>
316
317        <form class="bkwg-form__body">
318          <div class="bkwg-form__grid" data-slot="grid"></div>
319          <div data-slot="extra"></div>
320
321          <label class="bkwg-agreement">
322            <input
323              type="checkbox"
324              data-name="agreement"
325              ${this.values.agreement?"checked":""}
326            />
327            <span>
328              Я согласен с
329              <a href="${this.config.publicBaseUrl}/privacy-policy" target="_blank"
330                >политикой конфиденциальности</a
331              >
332            </span>
333          </label>
334          ${this.errors.agreement?d`<div class="bkwg-form-error">${this.errors.agreement}</div>`:""}
335
336          <div class="bkwg-form__footer">
337            <button class="bkwg-button bkwg-button--primary" type="submit">Отправить заявку</button>
338          </div>
339        </form>
340      </div>
341    `,t=e.querySelector('[data-slot="grid"]');this.renderGridFields().forEach(i=>t.appendChild(i));const r=e.querySelector('[data-slot="extra"]');this.renderExtraFields().forEach(i=>r.appendChild(i)),e.querySelector(".bkwg-form__close")?.addEventListener("click",()=>this.onClose()),e.querySelector("form")?.addEventListener("submit",i=>{i.preventDefault(),this.handleSubmit()}),e.querySelectorAll("input, select, textarea").forEach(i=>{if(i.getAttribute("data-name")==="agreement"){const s=()=>{delete this.errors.agreement;const o=i.closest(".bkwg-agreement")?.nextElementSibling;o?.classList.contains("bkwg-form-error")&&o.remove()};i.addEventListener("change",s),i.addEventListener("click",s)}i.addEventListener("change",s=>{const n=s.target,o=n.dataset.name;o&&(this.values[o]=n.type==="checkbox"?n.checked:n.value)}),i.addEventListener("input",s=>{const n=s.target,o=n.dataset.name;if(!o||!this.errors[o])return;this.values[o]=n.value,delete this.errors[o];const l=i.closest(".bkwg-phone-input-wrapper, .bkwg-amount-group");l?l.classList.remove("bkwg-form-input--error"):i.classList.remove("bkwg-form-input--error"),i.closest(".bkwg-form-item")?.querySelector(".bkwg-form-error")?.remove()})}),this.element.appendChild(e),this.initSelects()}initSelects(){this.element.querySelectorAll("select").forEach(e=>{const t=e.dataset.currencySelect==="true",r=new y(e,{onChange:i=>{const s=e.dataset.name;s&&(this.values[s]=i)},flagBaseUrl:t?`${this.config.publicBaseUrl}/images/flags/country/2x`:void 0});this.selectInstances.push(r)})}renderInput(e,t,r,i){const s=this.errors[e];return d`
342      <div class="bkwg-form-item">
343        <label class="bkwg-form-label">${t}</label>
344        <input
345          type="${r}"
346          class="bkwg-form-input ${s?"bkwg-form-input--error":""}"
347          placeholder="${i}"
348          data-name="${e}"
349          value="${String(this.values[e]||"")}"
350        />
351        ${s?d`<div class="bkwg-form-error">${s}</div>`:""}
352      </div>
353    `}renderPhoneInput(){const e=this.errors.phone,t=`${this.config.publicBaseUrl}/images/flags/country/2x/kgs.png`;return d`
354      <div class="bkwg-form-item">
355        <label class="bkwg-form-label">Телефон*</label>
356        <div class="bkwg-phone-input-wrapper ${e?"bkwg-form-input--error":""}">
357          <img src="${t}" alt="KG" class="bkwg-phone-flag" width="20" height="15" />
358          <span class="bkwg-phone-prefix">+996</span>
359          <input
360            type="text"
361            class="bkwg-phone-input"
362            placeholder="777 123 456"
363            data-name="phone"
364            value="${String(this.values.phone||"")}"
365            maxlength="9"
366          />
367        </div>
368        ${e?d`<div class="bkwg-form-error">${e}</div>`:""}
369      </div>
370    `}renderSelect(e,t,r){const i=this.errors[e],s=r.map(n=>`<option value="${n.id}" ${this.values[e]==n.id?"selected":""}>${n.title}</option>`).join("");return d`
371      <div class="bkwg-form-item">
372        <label class="bkwg-form-label">${t}</label>
373        <select
374          class="bkwg-form-select ${i?"bkwg-form-input--error":""}"
375          data-name="${e}"
376        >
377          ${_(s)}
378        </select>
379        ${i?d`<div class="bkwg-form-error">${i}</div>`:""}
380      </div>
381    `}renderSuccess(){return d`
382      <div class="bkwg-alert bkwg-alert--success">
383        <strong>Заявка успешно отправлена!</strong><br />
384        Ваш запрос моментально отправился оператору банка. Специалист свяжется с вами в кратчайшие
385        сроки.<br />
386        Номер заявки: #${this.requestId}
387      </div>
388    `}renderNetworkError(e){this.element.querySelector(".bkwg-form__network-error")?.remove();const r=d`<div class="bkwg-alert bkwg-alert--error bkwg-form__network-error">
389      ${e||"Произошла ошибка при отправке формы. Попробуйте позже."}
390    </div>`,i=this.element.querySelector(".bkwg-form__footer");i?.parentElement?.insertBefore(r,i)}validate(){this.errors={},this.values.last_name||(this.errors.last_name="Поле Фамилия обязательно для заполнения."),this.values.first_name||(this.errors.first_name="Поле Имя обязательно для заполнения.");const e=String(this.values.phone||"");e?/^\d{9}$/.test(e)?/^0/.test(e)&&(this.errors.phone="Введите корректный номер телефона (код оператора не может начинаться с 0)."):this.errors.phone="Введите 9 цифр номера":this.errors.phone="Поле Телефон обязательно для заполнения.",this.values.agreement||(this.errors.agreement="Вы должны дать согласие на обработку данных");const t=String(this.values.email||"");return t&&!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(t)&&(this.errors.email="Некорректный email"),this.validateExtra(),this.updateContent(),Object.keys(this.errors).length===0}getFingerprint(){try{let e=localStorage.getItem("bkwg_fingerprint");return e||(e=Math.random().toString(36).substring(2)+Date.now().toString(36),localStorage.setItem("bkwg_fingerprint",e)),e}catch{return Math.random().toString(36).substring(2)+Date.now().toString(36)}}async handleSubmit(){if(this.validate())try{const e=`${this.config.widgetBaseUrl.replace(/\/+$/,"")}/${this.config.widgetId}`,t=await fetch(e,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify(this.buildSubmitData())});if(!t.ok){const i=await t.json();if(i.errors){Object.keys(i.errors).forEach(s=>{this.errors[s]=i.errors[s][0]}),this.updateContent();return}throw new Error(i.message||"Server error")}const r=await t.json();this.isSubmitted=!0,this.requestId=String(r.data?.id||""),this.updateContent()}catch(e){console.error("Submit error:",e);const t=e instanceof Error?e.message:void 0;this.renderNetworkError(t==="Server error"?void 0:t)}}renderExtraFields(){return[]}validateExtra(){}}class Q extends U{constructor(e,t,r){super(t,r),this.product=e}get introText(){return"Заполните заявку онлайн, чтобы ваш запрос моментально отправился оператору банка. В кратчайшие сроки специалист свяжется с вами."}renderGridFields(){return[this.renderInput("last_name","Фамилия*","text","Введите фамилию"),this.renderInput("first_name","Имя*","text","Введите имя"),this.renderPhoneInput(),this.renderInput("email","Email","email","[email protected]"),this.renderSelect("location_id","Город*",P)]}buildSubmitData(){return{leadable_type:"card",leadable_id:this.product.id,last_name:String(this.values.last_name),first_name:String(this.values.first_name),phone:`+996${String(this.values.phone)}`,email:String(this.values.email||""),location_id:Number(this.values.location_id)}}}function Z(g,e,t){const r=(s,n)=>new Q(s,g,n),i=new A(g,"card",t,r);return e.appendChild(i.mount()),i}const J=Object.freeze(Object.defineProperty({__proto__:null,mountCardWidget:Z},Symbol.toStringTag,{value:"Module"})),ee={currencies:[{id:1,url:null,title:"Кыргызский сом",description:"<div>Сом — национальная валюта Кыргызстана. Один сом равен ста тыйынам.</div>
390",is_freely_convertible:1,code:"KGS",symbol:"⊆",quantity:1,formatting_dec_point:".",formatting_thousands_sep:" ",formatting_decimals:2,formatting_decimals_nb:2,formatting_space:"after"},{id:2,url:null,title:"Доллар США",description:"<div><strong>Доллар США</strong> (United States dollar) — денежная единица США, одна из основных общепризнанных в мире валют, которая накапливается центральными банками в валютных резервах. Правом денежной эмиссии обладает Федеральная резервная система, выполняющая в США функции центрального банка.<br>Доллар США также имеет статус государственной валюты в некоторых других странах (например, Маршалловы острова, Сальвадор).</div>",is_freely_convertible:1,code:"USD",symbol:"$",quantity:1,formatting_dec_point:".",formatting_thousands_sep:" ",formatting_decimals:2,formatting_decimals_nb:2,formatting_space:"before"},{id:3,url:null,title:"Евро",description:"<div>Е́вро — официальная валюта 17 стран: Австрии, Бельгии, Германии, Греции, Ирландии, Испании, Италии, Кипра, Люксембурга, Мальты, Нидерландов, Португалии, Словакии, Словении, Финляндии, Франции, Эстонии. Также валюта используется ещё в 9 государствах, 7 из которых — европейские.</div>",is_freely_convertible:1,code:"EUR",symbol:"€",quantity:1,formatting_dec_point:".",formatting_thousands_sep:" ",formatting_decimals:2,formatting_decimals_nb:2,formatting_space:"after"},{id:4,url:null,title:"Российский рубль",description:"<div>Рубль — валюта Российской Федерации, также используемая на территории Республики Абхазия и Республики Южная Осетия.</div>",is_freely_convertible:1,code:"RUB",symbol:"₽",quantity:1,formatting_dec_point:".",formatting_thousands_sep:" ",formatting_decimals:3,formatting_decimals_nb:3,formatting_space:"after"},{id:5,url:null,title:"Казахский тенге",description:"<div>Казахста́нский тенге́ — национальная валюта Казахстана.</div>",is_freely_convertible:1,code:"KZT",symbol:"₸",quantity:1,formatting_dec_point:".",formatting_thousands_sep:" ",formatting_decimals:3,formatting_decimals_nb:3,formatting_space:"after"},{id:13,url:null,title:"Китайский юань",description:"<div>Юа́нь (кит. трад. 圓, упр. 元, пиньинь Yuán) — современная денежная единица Китайской Народной Республики, в которой измеряется стоимость жэньминьби (кит. упр. 人民币, пиньинь Rénmínbì, буквально: «народные деньги», сокращённо RMB). Входит в «корзину» специальных прав заимствования МВФ. Международное обозначение валюты в стандарте ISO 4217 — CNY.</div>",is_freely_convertible:1,code:"CNY",symbol:"¥",quantity:1,formatting_dec_point:".",formatting_thousands_sep:null,formatting_decimals:2,formatting_decimals_nb:3,formatting_space:"nospace"}]};
390class te extends U{constructor(e,t,r,i){super(t,r),this.product=e;const s=i!=null&&e.purposes?.some(n=>n.id===i)?i:e.purposes?.[0]?.id??"";Object.assign(this.values,{middle_name:"",period:"12",credit_purpose_id:s,amount:"",comments:"",currency_id:e.currencies?.[0]?.id||""})}get introText(){return"Заполните заявку онлайн, чтобы ваш запрос моментально отправился оператору банка. В кратчайшие сроки специалист свяжется с вами для того, чтобы сделать выгодное предложение."}renderGridFields(){return[this.renderInput("last_name","Фамилия*","text","Введите фамилию"),this.renderInput("first_name","Имя*","text","Введите имя"),this.renderInput("middle_name","Отчество","text","Введите отчество"),this.renderPhoneInput(),this.renderInput("email","Email","email","[email protected]"),this.renderSelect("location_id","Город*",P),this.renderSelect("period","Срок*",[{id:"3",title:"3 месяца"},{id:"6",title:"6 месяцев"},{id:"12",title:"12 месяцев"},{id:"18",title:"18 месяцев"},{id:"24",title:"24 месяца"},{id:"36",title:"36 месяцев"},{id:"48",title:"48 месяцев"},{id:"60",title:"60 месяцев"}]),this.renderSelect("credit_purpose_id","Цель кредита*",this.product.purposes),this.renderAmountGroup()]}renderExtraFields(){return[d`
391        <div class="bkwg-form-item" style="margin-top: 16px;">
392          <label class="bkwg-form-label">Комментарии</label>
393          <textarea
394            class="bkwg-form-textarea"
395            placeholder="Дополнительная информация"
396            data-name="comments"
397          >
398${String(this.values.comments||"")}</textarea
399          >
400        </div>
401      `]}validateExtra(){const e=Number(this.values.amount||0);(!this.values.amount||e<=0)&&(this.errors.amount="Введите сумму кредита.")}buildSubmitData(){return{leadable_type:"credit",leadable_id:this.product.id,currency_id:Number(this.values.currency_id),last_name:String(this.values.last_name),first_name:String(this.values.first_name),middle_name:String(this.values.middle_name||""),phone:`+996${String(this.values.phone)}`,email:String(this.values.email||""),amount:Number(this.values.amount),period:Number(this.values.period),location_id:Number(this.values.location_id),credit_purpose_id:Number(this.values.credit_purpose_id),comments:String(this.values.comments||""),fingerprint_id:this.getFingerprint()}}renderAmountGroup(){const e=this.errors.amount||this.errors.currency_id,t=this.product.currencies.map(s=>s.code.toUpperCase()),i=ee.currencies.filter(s=>t.includes(s.code.toUpperCase())).map(s=>`<option value="${s.id}" data-flag-code="${s.code}" ${this.values.currency_id==s.id?"selected":""}>${s.code}</option>`).join("");return d`
402      <div class="bkwg-form-item">
403        <label class="bkwg-form-label">Сумма*</label>
404        <div class="bkwg-amount-group ${e?"bkwg-form-input--error":""}">
405          <input
406            type="number"
407            class="bkwg-form-input"
408            placeholder="Сумма"
409            data-name="amount"
410            value="${String(this.values.amount||"")}"
411            min="1"
412          />
413          <select class="bkwg-form-select" data-name="currency_id" data-currency-select="true">
414            ${_(i)}
415          </select>
416        </div>
417        ${e?d`<div class="bkwg-form-error">${e}</div>`:""}
418      </div>
419    `}}function re(g,e,t){let r;const i=(s,n)=>new te(s,g,n,r.getSelectedPurposeId());return r=new A(g,"credit",t,i),e.appendChild(r.mount()),r}const ie=Object.freeze(Object.defineProperty({__proto__:null,mountCreditWidget:re},Symbol.toStringTag,{value:"Module"}));return C}));

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.