griffincss-ui 0.23.1 → 0.24.0-dev

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/dist/griffinjs.js CHANGED
@@ -1,3 +1,3 @@
1
1
  /*! GriffinJS | MIT | https://gitverse.ru/BarneyScott/GriffinCSS */
2
- (()=>{"use strict";var e=(()=>{var e={},t={},r={},n=[],o=[],i=!1;function a(e,t){return t&&(r[e]=t),r[e]||[]}function l(e,t,r,n,o){if("function"==typeof n&&(o=n,n=null),"string"!=typeof r||!r)throw new Error("GriffinJS: "+t+" без имени");if("function"!=typeof o)throw new Error("GriffinJS: "+t+" «"+r+"» — не функция");if(e[r])throw new Error("GriffinJS: "+t+" «"+r+"» уже зарегистрирован");return n&&n.needs&&a(r,n.needs),e[r]=o,o}function u(e){"undefined"!=typeof console&&console.warn&&console.warn("GriffinJS: "+e)}function f(e,t){for(var r=0;r<o.length;r++)if(o[r].el===e&&o[r].name===t)return o[r];return null}function s(e,r,n){if(!e||!t[r])return u("виджет «"+r+"» не зарегистрирован"),null;var i=f(e,r);if(i)return i.instance;void 0===n&&(n=v.options?v.options.read(e,r):{});var a={el:e,name:r,instance:null};o.push(a);try{a.instance=t[r](e,n,v)||{}}catch(e){return o.splice(o.indexOf(a),1),u("виджет «"+r+"» не поднялся: "+(e&&e.message)),null}return a.instance}function c(e,t){for(var r=o.length-1;r>=0;r--){var n=o[r];n.el===e&&(t&&n.name!==t||(o.splice(r,1),n.instance&&"function"==typeof n.instance.destroy&&n.instance.destroy()))}}function d(e){for(var r in e=e||document,t)if(Object.prototype.hasOwnProperty.call(t,r)){var n="[data-gr-"+r+"]",o=[];"function"==typeof e.matches&&e.matches(n)&&o.push(e);for(var i=e.querySelectorAll?e.querySelectorAll(n):[],a=0;a<i.length;a++)o.push(i[a]);for(var l=0;l<o.length;l++)s(o[l],r)}return v}function p(e){for(var t=e;t;){if(t===document||t===document.documentElement)return!0;t=t.parentNode}return!1}function g(){if(i)return v;i=!0,(()=>{for(var n=Object.keys(r),o=0;o<n.length;o++)for(var i=r[n[o]],a=0;a<i.length;a++){var l=i[a];v[l]||t[l]||e[l]||u("«"+n[o]+"» не работает без griffinjs-"+l+".js")}})();for(var o=0;o<n.length;o++)"function"==typeof n[o].start&&n[o].start(v);return d(document),v}var v={version:"0.23.1",engines:e,widgets:t,defineEngine:(t,r,n)=>l(e,"движок",t,r,n),defineWidget:(e,r,n)=>l(t,"виджет",e,r,n),needs:a,use:e=>(n.push(e),i&&"function"==typeof e.start&&e.start(v),v),mount:s,unmount:c,instance:(e,t)=>{var r=f(e,t);return r?r.instance:null},init:d,start:g,destroy:()=>{if(!i)return v;for(i=!1;o.length;)c(o[o.length-1].el);for(var e=n.length-1;e>=0;e--)"function"==typeof n[e].destroy&&n[e].destroy(v);return v},warn:u,recorder:()=>{var e=[];return{set:(t,r,n)=>{var o=t.getAttribute(r);if(o!==n){for(var i=!1,a=0;a<e.length;a++)if(e[a].el===t&&e[a].attr===r){i=!0;break}i||e.push({el:t,attr:r,before:o}),null===n?t.removeAttribute(r):t.setAttribute(r,n)}},restore:()=>{for(var t=e.length-1;t>=0;t--){var r=e[t];null===r.before?r.el.removeAttribute(r.attr):r.el.setAttribute(r.attr,r.before)}e=[]}}},listeners:()=>{var e=[];return{add:(t,r,n,o)=>{t.addEventListener(r,n,o),e.push([t,r,n,o])},removeAll:()=>{for(var t=0;t<e.length;t++)e[t][0].removeEventListener(e[t][1],e[t][2],e[t][3]);e=[]}}},merge:(e,t)=>{var r,n={};for(r in e)Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);for(r in t||{})Object.prototype.hasOwnProperty.call(t,r)&&(n[r]=t[r]);return n},_mounted:()=>o.slice(),_prune:()=>{for(var e=o.length-1;e>=0;e--){var t=o[e].el;("boolean"==typeof t.isConnected?!t.isConnected:!p(t))&&c(t,o[e].name)}},_started:()=>i,_autoStart:()=>{try{var e=document.currentScript;if(e&&"false"===e.getAttribute("data-auto"))return}catch(e){}"loading"!==document.readyState?g():document.addEventListener("DOMContentLoaded",()=>{g()})}};return v})();"object"==typeof module&&module.exports&&(module.exports=e),"undefined"!=typeof window&&"undefined"!=typeof document&&(window.GriffinJS=e,e._autoStart())})(),(e=>{"use strict";function t(e){return""===e||"true"===e||"false"!==e&&("null"===e?null:/^-?\d+(\.\d+)?$/.test(e)?Number(e):e)}function r(e){return e.replace(/-([a-z])/g,(e,t)=>t.toUpperCase())}function n(n){var o={};if("string"!=typeof n)return o;if(!(n=n.trim()))return o;if("{"===n.charAt(0))try{return JSON.parse(n)}catch(t){return e.warn("параметры не разобраны как JSON: "+n),o}for(var i=n.split(";"),a=0;a<i.length;a++){var l=i[a].trim();if(l){var u=l.indexOf(":"),f=-1===u?l:l.slice(0,u),s=-1===u?"":l.slice(u+1);o[r(f.trim())]=t(s.trim())}}return o}e.options={parse:n,read:(e,t,r)=>{var o,i={};for(o in r||{})Object.prototype.hasOwnProperty.call(r,o)&&(i[o]=r[o]);var a=n(e&&e.getAttribute?e.getAttribute("data-gr-"+t):null);for(o in a)Object.prototype.hasOwnProperty.call(a,o)&&(i[o]=a[o]);return i}}})("undefined"!=typeof window&&window.GriffinJS?window.GriffinJS:require("./griffinjs-core.js")),(e=>{"use strict";var t={},r=!1;function n(e,t){if(!e)return null;if("function"==typeof e.closest)return e.closest(t);for(var r=e;r;){if("function"==typeof r.matches&&r.matches(t))return r;r=r.parentNode}return null}function o(e){for(var r=t[e.type]||[],o=0;o<r.length;o++){var i=n(e.target,r[o].selector);if(i&&!0===r[o].handler(e,i))return}}function i(e){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&document[e](r,o)}e.on=(n,i,a)=>(t[n]||(t[n]=[],r&&document.addEventListener(n,o)),t[n].push({selector:i,handler:a}),e),e.off=(r,n,o)=>{for(var i=t[r]||[],a=i.length-1;a>=0;a--)i[a].selector!==n||o&&i[a].handler!==o||i.splice(a,1);return e},e.emit=(e,t,r)=>{try{(t&&"function"==typeof t.dispatchEvent?t:document).dispatchEvent(new CustomEvent(e,{detail:r,bubbles:!0}))}catch(e){}},e.closest=n,e.use({start:()=>{r=!0,i("addEventListener")},destroy:()=>{r=!1,i("removeEventListener")}})})("undefined"!=typeof window&&window.GriffinJS?window.GriffinJS:require("./griffinjs-core.js")),(e=>{"use strict";var t=null,r=null,n=[];function o(){r=null;var t=n;n=[],e._prune();for(var o=0;o<t.length;o++)e.init(t[o])}function i(e){for(var t=!1,i=0;i<e.length;i++){for(var a=e[i].addedNodes,l=0;l<a.length;l++)1===a[l].nodeType&&(n.push(a[l]),t=!0);e[i].removedNodes.length&&(t=!0)}t&&!r&&(r=setTimeout(o,0))}function a(){t||"undefined"==typeof MutationObserver||(t=new MutationObserver(i)).observe(document.documentElement,{childList:!0,subtree:!0})}function l(){r&&(clearTimeout(r),r=null),n=[],t&&(t.disconnect(),t=null)}e.scanner={start:a,stop:l,_flush:o},e.use({start:a,destroy:l})})("undefined"!=typeof window&&window.GriffinJS?window.GriffinJS:require("./griffinjs-core.js")),(e=>{"use strict";e.defineEngine("scroll",(t,r,n)=>{var o=!(!n||!n.loop),i=[],a=[],l=0,u=[],f=null,s=null,c=!1,d=null,p=!1,g=null,v=0,h=e.listeners(),m=h.add,y="undefined"!=typeof window&&"onscrollend"in window;function b(){return t.count}function w(e){return l+e}function A(e){var t=e.cloneNode(!0);return t.setAttribute("data-gr-clone",""),t.setAttribute("aria-hidden","true"),t.setAttribute("inert",""),t.removeAttribute("aria-current"),t.removeAttribute("id"),t}function x(){for(var e=0;e<u.length;e++)u[e].remove();u=[],l=0}function S(){var e=r.children,t=r.scrollLeft,n=r.getBoundingClientRect().left;i=[],a=[];for(var o=0;o<e.length;o++){var l=e[o].getBoundingClientRect();i.push(t+l.left-n),a.push(l.width)}}function E(){for(var e=0,t=r.clientWidth,n=w(0),o=n;o<i.length;o++){var l=Math.abs(i[o]-i[n])+a[o];if(!(a[o]>0&&l<=t+1))break;e+=1}return Math.max(1,e)}function C(){var e=r.scrollLeft,t=i.length;if(t<2)return 0;for(var n=0;n<t-1;n++){var o=i[n],a=i[n+1],u=Math.min(o,a),f=Math.max(o,a);if(e>=u&&e<=f&&f!==u)return n+(e-o)/(a-o)-l}return(Math.abs(e-i[0])<=Math.abs(e-i[t-1])?0:t-1)-l}function k(e,t){var n=i[e];"number"==typeof n&&("function"==typeof r.scrollTo?r.scrollTo({left:n,behavior:t?"auto":"smooth"}):r.scrollLeft=n,p=!t&&Math.abs(r.scrollLeft-n)>=1,g=p?n:null,v=0)}function T(e){if(!o)return w(e);for(var t=C()+l,r=b(),n=w(e),a=[w(e)-r,w(e),w(e)+r],u=0;u<a.length;u++){var f=a[u];f<0||f>=i.length||Math.abs(f-t)<Math.abs(n-t)&&(n=f)}return n}function M(){if(s=null,p&&null!==g&&Math.abs(r.scrollLeft-g)>=1&&v<5)return v+=1,void(s=setTimeout(M,120));p=!1,g=null,c=!1;var e=Math.round(C()),n=b();if(o&&n&&(e<0||e>=n)&&k(w(e=(e%n+n)%n),!0),d){var i=d;return d=null,void k(T(i.physical),i.instant)}t._settle(e)}return m(r,"scroll",()=>{if(null===f){var e=()=>{f=null,t._report(C())};"function"==typeof requestAnimationFrame?f=requestAnimationFrame(e):e()}y||(s&&clearTimeout(s),s=setTimeout(M,120))},{passive:!0}),y&&m(r,"scrollend",()=>{s&&(clearTimeout(s),s=null),M()}),m(r,"touchstart",()=>{c=!0},{passive:!0}),{loop:o,live:!0,goTo:(e,t)=>c?(d={physical:e,instant:t},!0):!(p&&!t||(k(T(e),t),0)),layout:()=>{S();var e=o?Math.min(E(),b()):0;(e!==l||o&&u.length!==2*e)&&((e=>{var n=t.slides,i=n.length;if(x(),o&&!(i<2)){for(var a=Math.min(e,i),f=i-a;f<i;f++){var s=A(n[f]);r.insertBefore(s,n[0]),u.push(s)}for(var c=0;c<a;c++){var d=A(n[c]);r.appendChild(d),u.push(d)}l=a}})(e),S())},visible:()=>{for(var e=r.scrollLeft,n=e+r.clientWidth,u=b(),f=[],s=0;s<i.length;s++){var c=Math.min(i[s],i[s]+a[s]),d=Math.max(i[s],i[s]+a[s]),p=Math.min(d,n)-Math.max(c,e);if(a[s]>0&&p>=a[s]/2){var g=s-l;o&&u&&(g=(g%u+u)%u),g>=0&&g<u&&-1===f.indexOf(g)&&f.push(g)}}return f.length?f:[t.physical(Math.round(C()))]},perView:E,position:C,moving:()=>p,queued:()=>!!d,destroy:()=>{h.removeAll(),x(),s&&clearTimeout(s),null!==f&&"function"==typeof cancelAnimationFrame&&cancelAnimationFrame(f)},_offsets:()=>i.slice(),_clones:()=>u.slice()}})})("undefined"!=typeof window&&window.GriffinJS?window.GriffinJS:require("../core/griffinjs-core.js")),(e=>{"use strict";e.defineEngine("fade",{needs:["gesture"]},(t,r)=>{var n=e.recorder(),o=null;function i(){return t.physical(t.index)}return"function"==typeof e.gesture&&(o=e.gesture(r,{onStart:()=>{n.set(r,"data-gr-state","dragging")},onMove:e=>{var r=t.count,n=i()-e.progress;t.loop||(n=Math.max(0,Math.min(r-1,n))),t._report(n)},onEnd:e=>{n.set(r,"data-gr-state","ready"),e.swipe<0&&t.next()||e.swipe>0&&t.prev()||t._report(i())},onCancel:()=>{n.set(r,"data-gr-state","ready"),t._report(i())}})),n.set(r,"data-gr-state","ready"),{loop:!0,goTo:e=>{t._report(e),t._settle(e)},layout:()=>{},visible:()=>[i()],perView:()=>1,destroy:()=>{o&&o.destroy(),n.restore()}}})})("undefined"!=typeof window&&window.GriffinJS?window.GriffinJS:require("../core/griffinjs-core.js")),(e=>{"use strict";var t=["top","left","right","bottom"];function r(e,t){return"left"===e?t?"end":"start":"right"===e?t?"start":"end":e}var n={top:"bottom",bottom:"top",left:"right",right:"left"};function o(e,t,r,n){return"bottom"===e?n.h-t.bottom:"top"===e?t.top:"right"===e?n.w-t.right:t.left}e.anchor={place:(e,t,i)=>{var a,l,u,f=(i=i||{}).gap||0,s=i.margin||0,c=i.align||"start",d=(e=>{try{return"rtl"===getComputedStyle(e).direction||"rtl"===document.documentElement.getAttribute("dir")}catch(e){return"rtl"===document.documentElement.getAttribute("dir")}})(t),p=((e,t)=>"start"===e?t?"right":"left":"end"===e?t?"left":"right":e)(i.side||"bottom",d),g=t.getBoundingClientRect(),v=e.getBoundingClientRect(),h={w:(a=document.documentElement).clientWidth||("number"==typeof innerWidth?innerWidth:0),h:a.clientHeight||("number"==typeof innerHeight?innerHeight:0)},m="top"===p||"bottom"===p,y=(m?v.height:v.width)+f;if(o(p,g,0,h)<y&&o(n[p],g,0,h)>=y&&(p=n[p]),m){l="bottom"===p?g.bottom+f:g.top-f-v.height;var b=d?"end"===c:"start"===c;u="center"===c?g.left+(g.width-v.width)/2:b?g.left:g.right-v.width}else u="right"===p?g.right+f:g.left-f-v.width,l=g.top+(g.height-v.height)/2;return h.w&&(u=Math.min(Math.max(u,s),Math.max(s,h.w-s-v.width))),h.h&&(l=Math.min(Math.max(l,s),Math.max(s,h.h-s-v.height))),e.style.setProperty("top",Math.round(l)+"px"),e.style.setProperty("left",Math.round(u)+"px"),e.style.setProperty("right","auto"),e.style.setProperty("bottom","auto"),{side:r(p,d),top:l,left:u}},clear:e=>{if(e&&e.style)for(var r=0;r<t.length;r++)e.style.removeProperty(t[r])}}})("undefined"!=typeof window&&window.GriffinJS?window.GriffinJS:require("./griffinjs-core.js")),(e=>{"use strict";var t=null;function r(e){if(t&&Object.prototype.hasOwnProperty.call(t,e))return t[e];t||(t={});var r=null;try{r=getComputedStyle(document.documentElement).getPropertyValue("--gr-bp-"+e).trim()||null}catch(e){}return t[e]=r,r}function n(e){var t=r(e);return t?"(width >= "+t+")":null}function o(){t=null}e.media={value:r,query:n,matches:e=>{var t=n(e);return!(!t||"function"!=typeof matchMedia)&&matchMedia(t).matches},on:(e,t)=>{var r=n(e);if(!r||"function"!=typeof matchMedia)return t(!1),()=>{};var o=matchMedia(r),i=e=>{t(e.matches)};return t(o.matches),"function"==typeof o.addEventListener?o.addEventListener("change",i):o.addListener(i),()=>{"function"==typeof o.removeEventListener?o.removeEventListener("change",i):o.removeListener(i)}},reset:o},e.use({start:o})})("undefined"!=typeof window&&window.GriffinJS?window.GriffinJS:require("./griffinjs-core.js")),(e=>{"use strict";var t="--gr-progress";function r(e,t,r){return e<t?t:e>r?r:e}function n(e,n){e&&e.style&&e.style.setProperty(t,String(Math.round(1e3*r(n,0,1))/1e3))}function o(e){e&&e.style&&e.style.removeProperty(t)}function i(e,t){var n=t+e.height;return n<=0?0:r((t-e.top)/n,0,1)}e.motion={PROP:t,set:n,clear:o,clamp:r,time:e=>{var t=e.duration||1e3,r=!!e.loop,o=e.now||("undefined"!=typeof performance&&performance.now?()=>performance.now():Date.now),i=e.schedule||("function"==typeof requestAnimationFrame?e=>requestAnimationFrame(e):e=>setTimeout(e,16)),a=e.cancel||("function"==typeof cancelAnimationFrame?e=>{cancelAnimationFrame(e)}:e=>{clearTimeout(e)}),l=0,u=0,f=null,s=!1;function c(t){e.el&&n(e.el,t),e.onProgress&&e.onProgress(t)}function d(){if(f=null,s){var n=(u+(o()-l))/t;if(n>=1)return c(1),e.onEnd&&e.onEnd(),void(r&&s?(u=0,l=o(),c(0),f=i(d)):s=!1);c(n),f=i(d)}}function p(){return s||(s=!0,l=o(),f=i(d)),h}function g(){return s?(s=!1,u+=o()-l,null!==f&&(a(f),f=null),h):h}function v(){return g(),u=0,c(0),h}var h={start:p,pause:g,resume:p,stop:v,restart:()=>(v(),p()),running:()=>s};return h},viewport:(e,t)=>{t=t||{};var r=!1,a=null,l=null;function u(){a=null;var r="undefined"!=typeof window?window.innerHeight:0,o=i(e.getBoundingClientRect(),r);n(e,o),t.onProgress&&t.onProgress(o)}function f(){null===a&&"function"==typeof requestAnimationFrame?a=requestAnimationFrame(u):null===a&&u()}function s(e){if(e!==r){r=e;var t=e?"addEventListener":"removeEventListener";document[t]("scroll",f,{capture:!0,passive:!0}),window[t]("resize",f),e&&f()}}return"function"==typeof IntersectionObserver?(l=new IntersectionObserver(e=>{s(e[e.length-1].isIntersecting)})).observe(e):s(!0),{update:f,destroy:()=>{s(!1),l&&l.disconnect(),null!==a&&"function"==typeof cancelAnimationFrame&&cancelAnimationFrame(a),o(e)}}},viewportProgress:i}})("undefined"!=typeof window&&window.GriffinJS?window.GriffinJS:require("./griffinjs-core.js")),(e=>{"use strict";var t={axis:"x",threshold:8,velocity:.4,distance:.35,pointers:null,onStart:null,onMove:null,onEnd:null,onCancel:null};e.gesture=(r,n)=>{var o=e.merge(t,n),i="y"!==o.axis,a=null,l=[];function u(){var e=r.getBoundingClientRect?r.getBoundingClientRect():null;return(e?i?e.width:e.height:0)||1}function f(e){return"number"==typeof e.timeStamp?e.timeStamp:Date.now()}function s(e){if(!a&&(e=>!o.pointers||-1!==o.pointers.indexOf(e.pointerType))(e)&&("number"!=typeof e.button||0===e.button)&&(a={id:e.pointerId,pointerType:e.pointerType,startX:e.clientX,startY:e.clientY,dx:0,dy:0,progress:0,active:!1,locked:!1,swipe:0},l=[[f(e),i?e.clientX:e.clientY]],r.setPointerCapture))try{r.setPointerCapture(e.pointerId)}catch(e){}}function c(e){if(a&&e.pointerId===a.id&&!a.locked){a.dx=e.clientX-a.startX,a.dy=e.clientY-a.startY;var t=i?a.dx:a.dy,r=i?a.dy:a.dx;if(!a.active){if(Math.abs(t)<o.threshold&&Math.abs(r)<o.threshold)return;if(Math.abs(r)>Math.abs(t))return void(a.locked=!0);a.active=!0,o.onStart&&o.onStart(a)}l.push([f(e),i?e.clientX:e.clientY]),l.length>5&&l.shift(),a.progress=t/u(),e.cancelable&&e.preventDefault&&e.preventDefault(),o.onMove&&o.onMove(a)}}function d(e){if(a&&e.pointerId===a.id){var t=a,r=i?t.dx:t.dy,n=(()=>{if(l.length<2)return 0;var e=l[0],t=l[l.length-1],r=t[0]-e[0];return r>0?(t[1]-e[1])/r:0})();if(a=null,t.active){var f=Math.abs(r)/u()>=o.distance,s=Math.abs(n)>=o.velocity&&n>0==r>0;t.swipe=f||s?r>0?1:-1:0,t.velocity=n,o.onEnd&&o.onEnd(t)}else t.locked&&o.onCancel&&o.onCancel(t)}}function p(e){if(a&&e.pointerId===a.id){var t=a;a=null,o.onCancel&&o.onCancel(t)}}return r.addEventListener("pointerdown",s),r.addEventListener("pointermove",c),r.addEventListener("pointerup",d),r.addEventListener("pointercancel",p),{destroy:()=>{r.removeEventListener("pointerdown",s),r.removeEventListener("pointermove",c),r.removeEventListener("pointerup",d),r.removeEventListener("pointercancel",p),a=null},_state:()=>a}}})("undefined"!=typeof window&&window.GriffinJS?window.GriffinJS:require("./griffinjs-core.js")),(e=>{"use strict";var t="griffin:change",r="griffin:layout",n={engine:"scroll",loop:!1,rewind:!1,step:1,index:0,keyboard:!0,inert:!0,label:"Слайд {i} из {n}"};function o(e,t){return(e%t+t)%t}function i(i,a){var l=e.merge(n,a),u=[],f=0,s=1,c=null,d=!1,p=!!l.rewind,g=e.recorder(),v=e.listeners(),h=[],m=null,y=!1,b=!1,w=g.set;function A(){for(var e=l.slides?i.querySelectorAll(l.slides):i.children,t=[],r=0;r<e.length;r++)void 0!==e[r].nodeType&&1!==e[r].nodeType||e[r].hasAttribute&&e[r].hasAttribute("data-gr-clone")||t.push(e[r]);return t}function x(){return u.length}function S(){return Math.max(0,x()-s)}function E(e){var t=x();if(0===t)return 0;if(d)return o(e,t);var r=S();return e<0?0:e>r?r:e}function C(){if("page"===l.step)return Math.max(1,s);var e=Number(l.step);return e>=1?Math.floor(e):1}function k(){var e=x();return 0===e?0:d?Math.ceil(e/C()):Math.ceil(S()/C())+1}function T(e){var t=e*C();return d?t:Math.min(t,S())}function M(e){var t=E(e),r=k();return!d&&t>=S()?r-1:Math.min(r-1,Math.round(t/C()))}function O(e){var t=x();if(!d||0===t)return e;var r=o(e-E(f),t);return r>t/2&&(r-=t),f+r}function j(e){return l.label.replace("{i}",e+1).replace("{n}",x())}function q(){for(var e=0;e<u.length;e++){var t=u[e];t.getAttribute("role")||w(t,"role","group"),t.getAttribute("aria-roledescription")||w(t,"aria-roledescription","slide"),t.getAttribute("aria-label")||t.getAttribute("aria-labelledby")||w(t,"aria-label",j(e))}}function P(){for(var e=E(f),t=c&&"function"==typeof c.visible?c.visible():[e],r=0;r<u.length;r++)w(u[r],"aria-current",r===e?"true":null),l.inert&&w(u[r],"inert",-1===t.indexOf(r)?"":null)}function L(r,n){var o=f;f=r,P(),n&&n.silent||(r=>{var n={index:f,physical:E(f),previous:r,track:B};"function"==typeof e.emit?e.emit(t,i,n):"function"==typeof i.dispatchEvent&&"function"==typeof CustomEvent&&i.dispatchEvent(new CustomEvent(t,{detail:n,bubbles:!0}))})(o)}function G(){return!d&&C()>1}function J(e,t){if(b||0===x())return!1;if(!d&&(e<0||e>S()))return!1;var r=d?e:E(e);return G()&&(r=T(M(r))),!(c&&!1===c.goTo(E(r),!(!t||!t.instant))||(r===f||L(r,t),0))}function N(e){if(d)return J(f+C(),e);var t=M(f);return t<k()-1?J(T(t+1),e):!!p&&J(0,e)}function D(e){if(d)return J(f-C(),e);var t=M(f);return t>0?J(T(t-1),e):!!p&&J(T(k()-1),e)}function R(){try{return"rtl"===getComputedStyle(i).direction}catch(e){return"rtl"===(i.getAttribute("dir")||document.documentElement&&document.documentElement.getAttribute("dir"))}}function _(){var t=s+":"+x();c&&(c.layout(),s="function"==typeof c.perView?Math.max(1,c.perView()):1),d||(f=E(f)),(()=>{for(var e=C(),t=x(),r=S(),n=e>1&&!d,o=0;o<t;o++){var i=u[o].style;i&&(n?i.setProperty("--gr-snap",o===t-1?"end":o%e===0&&(o<r||!o)?"start":"none"):i.removeProperty("--gr-snap"))}})(),c&&c.goTo(E(f),!0),t!==s+":"+x()&&"function"==typeof e.emit&&e.emit(r,i,{perView:s,count:x(),pages:k(),track:B})}function H(){return b||(u=A(),q(),_(),P()),B}var B={el:i,goTo:J,goToPage:(e,t)=>J(T(Math.max(0,Math.min(e,k()-1))),t),next:N,prev:D,physical:E,pageOf:M,pageStart:T,sync:e=>{function r(t){if(!y&&t.detail&&t.detail.track===B){y=!0;try{e.index!==t.detail.index&&e.goTo(t.detail.index)}finally{y=!1}}}function n(t){if(!y&&t.detail&&t.detail.track===e){y=!0;try{f!==t.detail.index&&J(t.detail.index)}finally{y=!1}}}return v.add(i,t,r),v.add(e.el,t,n),()=>{i.removeEventListener(t,r),e.el.removeEventListener(t,n)}},refresh:H,destroy:()=>{if(!b){b=!0,c&&"function"==typeof c.destroy&&c.destroy(),c=null,v.removeAll();for(var t=0;t<h.length;t++)h[t].disconnect();h=[];for(var r=0;r<u.length;r++)e.motion&&e.motion.clear(u[r]),u[r].style&&u[r].style.removeProperty("--gr-snap");e.motion&&e.motion.clear(i),g.restore()}},_report:t=>{var r=x();if(e.motion){for(var n=0;n<r;n++){var a=Math.abs(t-n);d&&r&&(a=Math.min(a,r-a)),e.motion.set(u[n],a>=1?0:1-a)}e.motion.set(i,r>1?t/(r-1):1)}(e=>{var t=x();if(t&&c&&c.live&&!("function"==typeof c.moving&&c.moving()||"function"==typeof c.queued&&c.queued())){var r=O(d?o(Math.round(e),t):G()?(e=>{for(var t=0,r=k(),n=0;n<r;n++)Math.abs(e-T(n))<Math.abs(e-T(t))&&(t=n);return T(t)})(e):E(Math.round(e)));r!==f&&L(r)}})(t)},_settle:e=>{if(!b){var t=O(e);t!==f?L(t):P()}},_engine:()=>c};Object.defineProperty(B,"index",{get:()=>f}),Object.defineProperty(B,"count",{get:x}),Object.defineProperty(B,"perView",{get:()=>s}),Object.defineProperty(B,"last",{get:S}),Object.defineProperty(B,"pages",{get:k}),Object.defineProperty(B,"step",{get:C}),Object.defineProperty(B,"slides",{get:()=>u.slice()}),Object.defineProperty(B,"loop",{get:()=>!!d}),Object.defineProperty(B,"moving",{get:()=>!(!c||"function"!=typeof c.moving||!c.moving())}),Object.defineProperty(B,"rewind",{get:()=>p}),u=A(),f=l.index||0;var W=e.engines[l.engine];return W?c=W(B,i,l)||null:e.warn("движок «"+l.engine+"» не зарегистрирован — дорожка без движения"),d=!!(l.loop&&c&&c.loop),l.loop&&!d&&(p=!0),q(),_(),P(),l.keyboard&&v.add(i,"keydown",e=>{var t=e.key,r=R()?"ArrowRight":"ArrowLeft",n=!1;t===(R()?"ArrowLeft":"ArrowRight")?n=N():t===r?n=D():"Home"===t?n=J(d?f-E(f):0):"End"===t&&(n=J(d?f-E(f)+x()-1:S())),n&&e.preventDefault&&e.preventDefault()}),(()=>{if("function"==typeof MutationObserver&&((m=new MutationObserver(()=>{H()})).observe(i,{childList:!0}),h.push(m)),"function"==typeof ResizeObserver){var e=new ResizeObserver(()=>{_(),P()});e.observe(i),h.push(e)}})(),B}e.track=i,e.track.CHANGE=t,e.track.LAYOUT=r,e.defineWidget("track",{needs:["motion"]},(e,t)=>i(e,t))})("undefined"!=typeof window&&window.GriffinJS?window.GriffinJS:require("./griffinjs-core.js")),(e=>{"use strict";var t={autoplay:0,loop:!1,rewind:!1,step:1,pauseOnHover:!0,dots:!0,engine:"scroll",dotLabel:"Страница {i}",pauseLabel:"Пауза"};e.defineWidget("slider",{needs:["track","motion"]},(r,n)=>{var o=e.merge(t,n),i=r.querySelector(".gr-track")||r.firstElementChild;if(!i)throw new Error("у слайдера нет дорожки");var a=e.track(i,{loop:o.loop,rewind:o.rewind,step:o.step,engine:o.engine,index:o.index||0}),l=e.recorder(),u=e.listeners(),f=l.set,s=u.add,c=[],d=[],p=r.querySelector("[data-gr-prev]"),g=r.querySelector("[data-gr-next]"),v=r.querySelector("[data-gr-dots]"),h=r.querySelector("[data-gr-pause]"),m=null,y=!1,b=0;function w(e,t){var r=document.createElement("button");return r.setAttribute("type","button"),r.setAttribute("class",e),r.setAttribute("aria-label",t),c.push(r),r}function A(){for(var e=a.pageOf(a.index),t=a.physical(a.index),r=0;r<d.length;r++)f(d[r],"aria-current",r===e?"true":null);a.loop||a.rewind||(p&&f(p,"aria-disabled",t<=0?"true":null),g&&f(g,"aria-disabled",t>=a.last?"true":null))}function x(){if(v&&o.dots){for(var e=0;e<d.length;e++)d[e].remove(),c.splice(c.indexOf(d[e]),1);d=[];for(var t=0;t<a.pages;t++){var r=w("gr-slider-dot",o.dotLabel.replace("{i}",t+1));r.setAttribute("data-gr-page",String(t)),v.appendChild(r),d.push(r)}}}function S(){return!!m&&m.running()}function E(){return!m||y||b>0||(m.start(),f(r,"data-gr-state","playing")),q}function C(){return m?(m.pause(),f(r,"data-gr-state","paused"),q):q}function k(){m&&S()&&m.restart()}function T(){b+=1,C()}function M(){b=Math.max(0,b-1),E()}function O(){return k(),a.next()}function j(){return k(),a.prev()}var q={el:r,track:a,goTo:(e,t)=>a.goTo(e,t),next:O,prev:j,play:E,pause:C,playing:S,destroy:()=>{m&&m.stop(),m=null,u.removeAll();for(var e=0;e<c.length;e++)c[e].remove();c=[],d=[],a.destroy(),l.restore()}};return r.getAttribute("role")||f(r,"role","region"),f(r,"aria-roledescription","carousel"),f(i,"aria-live",o.autoplay?"off":"polite"),f(r,"data-gr-state","ready"),x(),p&&s(p,"click",()=>{j()}),g&&s(g,"click",()=>{O()}),v&&s(v,"click",t=>{var r=e.closest(t.target,".gr-slider-dot");if(r&&v){var n=Number(r.getAttribute("data-gr-page"));isNaN(n)||(a.goToPage(n),k())}}),s(i,e.track.CHANGE,()=>{A()}),s(i,e.track.LAYOUT,()=>{x(),A()}),A(),!o.autoplay||(()=>{try{return"function"==typeof matchMedia&&matchMedia("(prefers-reduced-motion: reduce)").matches}catch(e){return!1}})()||a.count<2||(h||((h=w("gr-slider-pause",o.pauseLabel)).setAttribute("data-gr-pause",""),h.textContent="❚❚",r.appendChild(h)),f(h,"aria-pressed","false"),m=e.motion.time({duration:o.autoplay,loop:!0,el:h,onEnd:()=>{a.moving||a.next()||a.goTo(0)}}),s(h,"click",()=>{y=!y,h&&f(h,"aria-pressed",y?"true":"false"),y?C():E()}),o.pauseOnHover&&(s(r,"pointerenter",T),s(r,"pointerleave",M)),s(r,"focusin",T),s(r,"focusout",M),s(document,"visibilitychange",()=>{document.hidden?T():M()}),E()),q})})("undefined"!=typeof window&&window.GriffinJS?window.GriffinJS:require("../core/griffinjs-core.js")),(e=>{"use strict";function t(e,t){if("function"==typeof e.getBoundingClientRect&&"function"==typeof t.getBoundingClientRect){var r=e.getBoundingClientRect(),n=t.getBoundingClientRect(),o=e.scrollLeft||0,i=o;n.left<r.left?i=o-(r.left-n.left):n.right>r.right&&(i=o+(n.right-r.right)),i!==o&&("function"==typeof e.scrollTo?e.scrollTo({left:i,behavior:"smooth"}):e.scrollLeft=i)}}e.defineWidget("gallery",{needs:["track","slider"]},(r,n)=>{var o=r.querySelector(".gr-gallery-thumbs"),i=e.widgets.slider(r,n,e),a=i.track,l=[],u=e.recorder(),f=e.listeners(),s=u.set,c=f.add;function d(){for(var e=a.physical(a.index),r=0;r<l.length;r++){var n=r===e;s(l[r],"aria-current",n?"true":null),n&&t(o,l[r])}}if(o){for(var p=o.children,g=0;g<p.length;g++)l.push(p[g]),s(p[g],"aria-label",p[g].getAttribute("aria-label")||"Слайд "+(g+1));c(o,"click",e=>{for(var t=0;t<l.length;t++)if(l[t]===e.target||"function"==typeof l[t].contains&&l[t].contains(e.target))return void i.goTo(t)}),c(a.el,e.track.CHANGE,d),d()}return{el:r,slider:i,track:a,goTo:i.goTo,next:i.next,prev:i.prev,destroy:()=>{f.removeAll(),i.destroy(),u.restore()}}})})("undefined"!=typeof window&&window.GriffinJS?window.GriffinJS:require("../core/griffinjs-core.js")),(e=>{"use strict";var t="data-gr-lightbox",r=/\.(mp4|webm|ogv|mov)(\?|#|$)/i,n=/youtube\.com|youtu\.be|vimeo\.com/i,o=null,i=null,a=null,l=e.listeners(),u=l.add;function f(e,t){return e&&e.getAttribute&&e.getAttribute("data-gr-type")||(r.test(t)?"video":n.test(t)?"iframe":"image")}function s(e){var t=e.getAttribute("href")||e.getAttribute("data-gr-src")||"",r=e.querySelector?e.querySelector("img"):null;return{src:t,type:f(e,t),caption:e.getAttribute("data-gr-caption")||"",alt:e.getAttribute("data-gr-alt")||r&&r.getAttribute("alt")||""}}function c(e,t,r){var n=document.createElement(e);for(var o in t&&n.setAttribute("class",t),r||{})Object.prototype.hasOwnProperty.call(r,o)&&n.setAttribute(o,r[o]);return n}function d(e){return"video"===e.type?c("video",null,{src:e.src,controls:"",playsinline:""}):"iframe"===e.type?c("iframe",null,{src:e.src,allow:"autoplay; fullscreen; picture-in-picture",allowfullscreen:"",title:e.caption||e.alt||"Видео"}):c("img",null,{src:e.src,alt:e.alt})}function p(e,t){return e+1+" / "+t}function g(t,r,n){m(),n=n||{},r=r||0;var a=t.length;if(0===a)return null;o=c("dialog","gr-modal gr-lightbox",{"aria-label":n.label||"Просмотр"});for(var l=c("div","gr-track gr-lightbox-track",{tabindex:"0"}),f=0;f<a;f++){var s=c("figure","gr-slide gr-lightbox-item");if(s.appendChild(d(t[f])),t[f].caption){var g=c("figcaption","gr-lightbox-caption");g.textContent=t[f].caption,s.appendChild(g)}l.appendChild(s)}o.appendChild(l);var v=c("button","gr-lightbox-close",{type:"button","aria-label":"Закрыть"});v.textContent="×",o.appendChild(v),u(v,"click",m);var b=null;if(a>1){var w=c("button","gr-lightbox-prev",{type:"button","aria-label":"Назад"}),A=c("button","gr-lightbox-next",{type:"button","aria-label":"Вперёд"});w.textContent="‹",A.textContent="›",(b=c("div","gr-lightbox-counter",{"aria-live":"polite"})).textContent=p(r,a),o.appendChild(w),o.appendChild(A),o.appendChild(b),u(w,"click",()=>{i&&i.prev()}),u(A,"click",()=>{i&&i.next()})}return u(o,"click",t=>{t.target!==o&&t.target!==l&&e.closest(t.target,".gr-lightbox-item")!==t.target||m()}),u(o,"keydown",e=>{i&&e.target!==l&&("ArrowRight"===e.key?(i.next(),e.preventDefault()):"ArrowLeft"===e.key&&(i.prev(),e.preventDefault()))}),u(o,"close",h),document.body.appendChild(o),a>1&&(i=e.track(l,{loop:!0,index:r}),u(l,e.track.CHANGE,e=>{b&&(b.textContent=p(e.detail.physical,a))})),"function"==typeof o.showModal?o.showModal():o.setAttribute("open",""),y}function v(e){a=e;for(var r=(e=>{var r=e.getAttribute(t);if(!r)return[e];for(var n=document.querySelectorAll("["+t+'="'+r+'"]'),o=[],i=0;i<n.length;i++)o.push(n[i]);return o})(e),n=[],o=0,i=0;i<r.length;i++)r[i]===e&&(o=i),n.push(s(r[i]));return g(n,o)}function h(){o&&((()=>{if(o){for(var e=o.querySelectorAll("video"),t=o.querySelectorAll("iframe"),r=0;r<e.length;r++)"function"==typeof e[r].pause&&e[r].pause();for(var n=0;n<t.length;n++)t[n].setAttribute("src","about:blank")}})(),i&&i.destroy(),i=null,l.removeAll(),o.remove(),o=null,a&&"function"==typeof a.focus&&a.focus(),a=null)}function m(){o&&("function"==typeof o.close&&o.hasAttribute("open")?o.close():h())}var y={open:g,openFrom:v,close:m,_dialog:()=>o,_track:()=>i};e.lightbox=y,e.needs("lightbox",["track"]),e.on("click","["+t+"]",(e,t)=>!(e.metaKey||e.ctrlKey||e.shiftKey||e.button||(e.preventDefault&&e.preventDefault(),v(t),0))),e.use({destroy:h})})("undefined"!=typeof window&&window.GriffinJS?window.GriffinJS:require("../core/griffinjs-core.js")),(e=>{"use strict";e.defineWidget("parallax",{needs:["motion"]},t=>{var r=e.motion.viewport(t);return{el:t,update:r.update,destroy:r.destroy}})})("undefined"!=typeof window&&window.GriffinJS?window.GriffinJS:require("../core/griffinjs-core.js")),(e=>{"use strict";var t={hover:!0,delay:120,hide:250,bp:"md"},r=0;function n(e){return!!e&&"SUMMARY"===e.tagName}function o(e){return!!e&&"DETAILS"===e.tagName}function i(e){return!e.pointerType||"mouse"===e.pointerType||"pen"===e.pointerType}function a(e,t){for(var r=t;r;){if(r===e)return!0;r=r.parentNode}return!1}function l(e){return!!e&&!e.hasAttribute("disabled")&&"-1"!==e.getAttribute("tabindex")&&"true"!==e.getAttribute("aria-hidden")}function u(e){return!(!e||"function"!=typeof e.focus)&&(e.focus(),document.activeElement===e)}e.defineWidget("megamenu",{needs:["media"]},(f,s)=>{var c=e.merge(t,s),d=e.recorder(),p=e.listeners(),g=d.set,v=p.add,h=[],m=!1,y=null,b=null,w=null,A=null,x=null;function S(e){for(var t=e;t&&t!==f;){for(var r=0;r<h.length;r++)if(h[r].el===t)return h[r];t=t.parentNode}return null}function E(){for(var e=0;e<h.length;e++)if(h[e].el.open)return h[e];return null}function C(t){t.panel.getAttribute("id")||g(t.panel,"id","gr-megamenu-"+ ++r),g(t.summary,"aria-controls",t.panel.getAttribute("id")),g(t.summary,"aria-expanded",t.el.open?"true":"false"),v(t.el,"toggle",()=>{(t=>{var r=!!t.el.open;if(g(t.summary,"aria-expanded",r?"true":"false"),r){for(var n=0;n<h.length;n++)h[n]!==t&&h[n].el.open&&(h[n].el.open=!1);(t=>{var r=t.el.getAttribute("data-gr-src");r&&!t.loaded&&(t.loaded=!0,"function"!=typeof fetch?(e.warn("мегаменю: fetch недоступен, панель "+r+" не загружена"),g(t.el,"data-gr-state","error")):(g(t.el,"data-gr-state","loading"),fetch(r).then(e=>{if(!e.ok)throw new Error("HTTP "+e.status);return e.text()}).then(e=>{t.panel.innerHTML=e,g(t.el,"data-gr-state","ready")},n=>{e.warn("мегаменю: панель "+r+" не загружена: "+(n&&n.message)),g(t.el,"data-gr-state","error")})))})(t)}})(t)})}function k(e){O(),e&&!e.el.open&&(e.el.open=!0)}function T(e){e&&e.el.open&&(e.el.open=!1)}function M(){O();for(var e=0;e<h.length;e++)T(h[e])}function O(){y&&clearTimeout(y),b&&clearTimeout(b),y=b=null,w=null}function j(e){b&&clearTimeout(b),b=null,w!==e&&(y&&clearTimeout(y),w=e,y=setTimeout(()=>{y=null,w=null,k(e)},c.delay))}function q(e){for(var t=[],r=e.panel.querySelectorAll("a[href], button, input, select, textarea, summary, [tabindex]"),n=0;n<r.length;n++)l(r[n])&&t.push(r[n]);return t}function P(e,t,r){var n=null===t?r>0?-1:e.length:e.indexOf(t);if(-1===n&&null!==t)return!1;for(var o=0;o<e.length;o++)if(u(e[n=(n+r+e.length)%e.length]))return!0;return!1}(()=>{for(var e=f.querySelectorAll("details"),t=0;t<e.length;t++){for(var r=e[t],i=!1,a=r.parentNode;a&&a!==f;){if(o(a)){i=!0;break}a=a.parentNode}if(!i){for(var l=null,u=null,s=0;s<r.children.length;s++)!l&&n(r.children[s])?l=r.children[s]:l&&!u&&(u=r.children[s]);l&&u&&h.push({el:r,summary:l,panel:u,loaded:!1})}}})();for(var L=0;L<h.length;L++)C(h[L]);return x=e.media.on(c.bp,e=>{m=e,O()}),v(f,"pointerover",e=>{if(m&&c.hover&&i(e)){var t=S(e.target),r=E();if(t)return t===r||t===w?(b&&clearTimeout(b),void(b=null)):void j(t)}}),v(f,"pointerout",e=>{if(m&&c.hover&&i(e)){var t=e.relatedTarget;t&&a(f,t)&&S(t)||(y&&clearTimeout(y),y=null,w=null,b||(b=setTimeout(()=>{b=null,M()},c.hide)))}}),v(f,"pointermove",e=>{if(m&&c.hover&&i(e)){var t={x:e.clientX,y:e.clientY};if(w&&((e,t)=>{if(!A||!t||"function"!=typeof t.panel.getBoundingClientRect)return!1;var r=t.panel.getBoundingClientRect();if(!r.width||e.y<=A.y||e.y>=r.top)return!1;var n=r.left-A.x,o=r.top-A.y,i=r.right-A.x,a=r.top-A.y,l=e.x-A.x,u=e.y-A.y;return(n*u-o*l)*(i*u-a*l)<=0})(t,E())){var r=w;w=null,j(r)}A=t}}),v(f,"keydown",e=>{var t=e.key,r=e.target,i=S(r),s=i&&!n(r);if("Escape"===t){var c=i&&i.el.open?i:E();if(!c)return;return T(c),u(c.summary),void e.preventDefault()}if(s){if(!m)return;var d=q(i);if("ArrowDown"===t)P(d,r,1);else{if("ArrowUp"!==t)return;P(d,r,-1)}e.preventDefault()}else if(m){var p=(()=>{for(var e=[],t=(()=>{if(!h.length)return f;for(var e=h[0].el.parentNode;e&&e!==f;){for(var t=!0,r=0;r<h.length;r++)if(!a(e,h[r].el)){t=!1;break}if(t)return e;e=e.parentNode}return f})().querySelectorAll("a[href], button, summary"),r=0;r<t.length;r++){for(var i=t[r],u=null,s=i.parentNode;s&&s!==f;){if(o(s)){u=s;break}s=s.parentNode}(!u||n(i)&&i.parentNode===u&&S(u))&&l(i)&&e.push(i)}return e})();if(-1!==p.indexOf(r)){if("ArrowRight"===t)P(p,r,1);else if("ArrowLeft"===t)P(p,r,-1);else if("Home"===t)P(p,null,1);else if("End"===t)P(p,null,-1);else{if("ArrowDown"!==t||!i)return;k(i),u(q(i)[0])}e.preventDefault()}}}),v(f,"focusout",e=>{if(m){var t=e.relatedTarget;t&&a(f,t)||M()}}),v(document,"pointerdown",e=>{a(f,e.target)||M()},!0),g(f,"data-gr-state","ready"),{el:f,items:h,open:k,close:T,closeAll:M,current:E,destroy:()=>{O(),x&&x(),p.removeAll(),d.restore()}}})})("undefined"!=typeof window&&window.GriffinJS?window.GriffinJS:require("../core/griffinjs-core.js")),(e=>{"use strict";var t={role:"menu",hover:!1,delay:100,hide:300,side:"bottom",align:"start",gap:4},r=0;function n(e){return!e.pointerType||"mouse"===e.pointerType||"pen"===e.pointerType}function o(e,t){for(var r=t;r;){if(r===e)return!0;r=r.parentNode}return!1}function i(e){return!!e&&!e.hasAttribute("disabled")&&"true"!==e.getAttribute("aria-disabled")}function a(e){return!(!e||"function"!=typeof e.focus)&&(e.focus(),document.activeElement===e)}e.defineWidget("dropdown",{needs:["anchor"]},(l,u)=>{var f=e.merge(t,u),s=e.recorder(),c=e.listeners(),d=s.set,p=c.add,g=l.firstElementChild,v=g&&g.nextElementSibling;if(!g||!v)throw new Error("у дропдауна нет кнопки и панели");var h="DETAILS"===l.tagName?"details":v.hasAttribute("popover")?"popover":"css",m=!1,y=!1,b=null;function w(){return"details"===h?!!l.open:m}function A(){for(var e=[],t=v.querySelectorAll('a[href], button, [role="menuitem"], [role="menuitemcheckbox"], [role="menuitemradio"]'),r=0;r<t.length;r++)i(t[r])&&e.push(t[r]);return e}function x(){"popover"===h&&e.anchor&&e.anchor.place(v,g,{side:f.side,align:f.align,gap:f.gap})}function S(e){"details"!==h&&(m=e),d(g,"aria-expanded",e?"true":"false"),d(l,"data-gr-state",e?"open":"ready"),e&&x(),e&&y&&a(A()[0]),y=!1}function E(){"popover"===h&&w()&&x()}function C(){if(O(),!w())if("details"===h)l.open=!0;else if("popover"===h)try{v.showPopover()}catch(e){S(!0)}else S(!0)}function k(){if(O(),w())if("details"===h)l.open=!1;else if("popover"===h)try{v.hidePopover()}catch(e){S(!1)}else S(!1)}function T(){w()?k():C()}function M(e,t,r){var n=null===t?r>0?-1:e.length:e.indexOf(t);if(-1===n&&null!==t)return!1;for(var o=0;o<e.length;o++)if(a(e[n=(n+r+e.length)%e.length]))return!0;return!1}function O(){b&&clearTimeout(b),b=null}return v.getAttribute("id")||d(v,"id","gr-dropdown-"+ ++r),d(g,"aria-controls",v.getAttribute("id")),(()=>{if("menu"===f.role){var e=v.querySelector("ul, ol")||v;d(g,"aria-haspopup","menu"),d(e,"role","menu");for(var t=e.querySelectorAll("li"),r=0;r<t.length;r++)d(t[r],"role","none");for(var n=e.querySelectorAll("hr"),o=0;o<n.length;o++)d(n[o],"role","separator");for(var i=e.querySelectorAll("a[href], button"),a=0;a<i.length;a++)i[a].getAttribute("role")||d(i[a],"role",i[a].hasAttribute("aria-checked")?"menuitemcheckbox":"menuitem")}})(),"details"===h?p(l,"toggle",()=>{S(!!l.open)}):"popover"===h?(p(v,"beforetoggle",e=>{"open"===e.newState&&x()}),p(v,"toggle",e=>{S("open"===e.newState)}),p(document,"scroll",E,!0),"undefined"!=typeof window&&p(window,"resize",E)):p(g,"click",()=>{T()}),p(l,"keydown",e=>{var t=e.key,r=e.target;if("Escape"===t){if(!w())return;return k(),a(g),void e.preventDefault()}if(r!==g){if(o(v,r)&&w()){var n=A();if("ArrowDown"===t)M(n,r,1);else if("ArrowUp"===t)M(n,r,-1);else if("Home"===t)M(n,null,1);else if("End"===t)M(n,null,-1);else{if(1!==t.length||e.ctrlKey||e.metaKey||e.altKey||" "===t)return;((e,t,r)=>{for(var n=e.indexOf(t),o=1;o<=e.length;o++){var i=e[(n+o)%e.length];if((i.textContent||"").trim().toLowerCase().charAt(0)===r.toLowerCase()&&a(i))return!0}})(n,r,t)}e.preventDefault()}}else"ArrowDown"===t||"ArrowUp"===t?(y=!0,w()?a("ArrowDown"===t?A()[0]:A()[A().length-1]):C(),e.preventDefault()):"Enter"!==t&&" "!==t||(y=!w())}),p(l,"pointerover",e=>{f.hover&&n(e)&&(O(),w()||(b=setTimeout(()=>{b=null,C()},f.delay)))}),p(l,"pointerout",e=>{f.hover&&n(e)&&(e.relatedTarget&&o(l,e.relatedTarget)||(O(),b=setTimeout(()=>{b=null,k()},f.hide)))}),p(l,"focusout",e=>{e.relatedTarget&&o(l,e.relatedTarget)||k()}),p(document,"pointerdown",e=>{o(l,e.target)||k()},!0),S(w()),{el:l,trigger:g,panel:v,kind:h,open:C,close:k,toggle:T,isOpen:w,destroy:()=>{O(),c.removeAll(),"popover"===h&&e.anchor&&e.anchor.clear(v),s.restore()}}})})("undefined"!=typeof window&&window.GriffinJS?window.GriffinJS:require("../core/griffinjs-core.js")),(e=>{"use strict";var t={delay:150,side:"top",align:"center",gap:6};function r(e){return!e.pointerType||"mouse"===e.pointerType||"pen"===e.pointerType}function n(e,t){for(var r=t;r;){if(r===e)return!0;r=r.parentNode}return!1}e.defineWidget("tooltip",{needs:["anchor"]},(o,i)=>{var a=e.merge(t,i),l=e.recorder(),u=e.listeners(),f=l.set,s=u.add,c=o.firstElementChild,d=o.querySelector('[role="tooltip"]')||o.lastElementChild;if(!c||!d||d===c)throw new Error("у подсказки нет якоря и текста");var p=!1,g=null;function v(){g&&clearTimeout(g),g=null}function h(){if(v(),!p){p=!0;try{d.showPopover()}catch(e){}f(o,"data-gr-state","open"),e.anchor&&e.anchor.place(d,c,{side:a.side,align:a.align,gap:a.gap})}}function m(){if(v(),p){p=!1;try{d.hidePopover()}catch(e){}e.anchor&&e.anchor.clear(d),f(o,"data-gr-state","ready")}}function y(){p&&e.anchor&&e.anchor.place(d,c,{side:a.side,align:a.align,gap:a.gap})}return d.hasAttribute("popover")||f(d,"popover","manual"),s(o,"pointerover",e=>{r(e)&&(v(),p||(a.delay>0?g=setTimeout(()=>{g=null,h()},a.delay):h()))}),s(o,"pointerout",e=>{r(e)&&(e.relatedTarget&&n(o,e.relatedTarget)||m())}),s(o,"focusin",()=>{h()}),s(o,"focusout",e=>{e.relatedTarget&&n(o,e.relatedTarget)||m()}),s(d,"toggle",e=>{"closed"===e.newState&&p&&m()}),s(document,"keydown",e=>{"Escape"===e.key&&p&&m()},!0),s(document,"scroll",y,!0),"undefined"!=typeof window&&s(window,"resize",y),f(o,"data-gr-state","ready"),{el:o,tip:d,show:h,hide:m,destroy:()=>{m(),u.removeAll(),l.restore()}}})})("undefined"!=typeof window&&window.GriffinJS?window.GriffinJS:require("../core/griffinjs-core.js")),(e=>{"use strict";var t={hash:!1,media:!0,lock:!0},r="data-gr-open",n=[],o=e.recorder(),i=e.listeners(),a=0;function l(e){var t=n[n.length-1];t&&(((e,t)=>{for(var r=e;r&&r!==t;){try{var n=getComputedStyle(r);if(("auto"===n.overflowY||"scroll"===n.overflowY)&&r.scrollHeight>r.clientHeight)return!0}catch(e){}r=r.parentNode}return!1})(e.target,t.el)||"function"==typeof e.preventDefault&&e.preventDefault())}function u(){for(var e=0,t=0;t<n.length;t++)n[t].o.lock&&(e+=1);e&&!a?(o.set(document.documentElement,"data-gr-state","locked"),i.add(document,"touchmove",l,{passive:!1})):!e&&a&&(o.restore(),i.removeAll()),a=e}function f(t){var r="string"==typeof t?document.getElementById((t||"").replace(/^#/,"")):t;return r?e.instance(r,"dialog")||e.mount(r,"dialog"):null}function s(t){var r=f(t);return r?r.open():(e.warn("окно не найдено: "+t),null)}function c(){for(var t=e._mounted(),r=0;r<t.length;r++)"dialog"===t[r].name&&t[r].instance&&t[r].instance.onPopState()}e.defineWidget("dialog",(r,o)=>{var i=e.merge(t,o),a=e.recorder(),l=e.listeners(),f=a.set,s=l.add,c=!1,d=[],p=!1,g={el:r,o:i};function v(){return r.getAttribute("id")||""}function h(){return r.hasAttribute("open")}function m(){for(var e=0;e<d.length;e++)d[e].el.setAttribute("src",d[e].src);d=[]}function y(){return"undefined"!=typeof location&&location.hash==="#"+v()}function b(){return h()||(m(),"function"==typeof r.showModal?r.showModal():r.setAttribute("open",""),n.push(g),u(),f(r,"data-gr-state","open"),(()=>{var t=r.getAttribute("data-gr-src");if(t&&!c){if(c=!0,"function"!=typeof fetch)return e.warn("окно: fetch недоступен, "+t+" не загружен"),void f(r,"data-gr-state","error");var n=r.querySelector("[data-gr-content]")||r;f(r,"data-gr-state","loading"),fetch(t).then(e=>{if(!e.ok)throw new Error("HTTP "+e.status);return e.text()}).then(e=>{n.innerHTML=e,f(r,"data-gr-state",h()?"open":"ready")},n=>{e.warn("окно: "+t+" не загружен: "+(n&&n.message)),f(r,"data-gr-state","error")})}})(),(()=>{if(i.hash&&v()&&"undefined"!=typeof history&&!y())try{history.pushState(null,"","#"+v())}catch(e){}})(),e.emit("griffin:open",r,{dialog:r})),x}function w(){return h()?("function"==typeof r.close?r.close():(r.removeAttribute("open"),A()),x):x}function A(){var t=n.indexOf(g);-1!==t&&n.splice(t,1),u(),(()=>{if(i.media){for(var e=r.querySelectorAll("video, audio"),t=r.querySelectorAll("iframe"),n=0;n<e.length;n++)"function"==typeof e[n].pause&&e[n].pause();for(var o=0;o<t.length;o++){var a=t[o].getAttribute("src");a&&"about:blank"!==a&&(d.push({el:t[o],src:a}),t[o].setAttribute("src","about:blank"))}}})(),(()=>{if(i.hash&&!p&&"undefined"!=typeof history&&y())try{history.back()}catch(e){}})(),p=!1,"loading"!==r.getAttribute("data-gr-state")&&f(r,"data-gr-state","ready"),e.emit("griffin:close",r,{dialog:r})}var x={el:r,open:b,close:w,isOpen:h,onPopState:()=>{i.hash&&h()&&!y()&&(p=!0,w())},destroy:()=>{var e=n.indexOf(g);-1!==e&&n.splice(e,1),u(),m(),l.removeAll(),a.restore()}};return s(r,"close",A),f(r,"data-gr-state",h()?"open":"ready"),h()&&(n.push(g),u()),i.hash&&y()&&!h()&&b(),x}),e.dialog={open:s,close:e=>{var t=f(e);return t?t.close():null},closeAll:()=>{for(;n.length;){var t=e.instance(n[n.length-1].el,"dialog");t?t.close():n.pop()}u()},top:()=>n.length?n[n.length-1].el:null,stack:()=>{for(var e=[],t=0;t<n.length;t++)e.push(n[t].el);return e},_popstate:c},e.on("click","["+r+"]",(e,t)=>!(e.metaKey||e.ctrlKey||e.shiftKey||e.button||(e.preventDefault&&e.preventDefault(),s(t.getAttribute(r)),0))),e.use({start:()=>{"undefined"!=typeof window&&window.addEventListener("popstate",c)},destroy:()=>{"undefined"!=typeof window&&window.removeEventListener("popstate",c),n=[],a=0,o.restore(),i.removeAll()}})})("undefined"!=typeof window&&window.GriffinJS?window.GriffinJS:require("../core/griffinjs-core.js")),(e=>{"use strict";var t={src:"",source:null,render:null,min:1,delay:200,empty:"",navigate:!1,highlight:!0,cache:!0,multiple:!1,remove:"Убрать {label}"},r=0;function n(e,t,r){var n=document.createElement(e);for(var o in t&&n.setAttribute("class",t),r||{})Object.prototype.hasOwnProperty.call(r,o)&&n.setAttribute(o,r[o]);return n}e.defineWidget("combobox",(o,i)=>{var a=e.merge(t,i),l=e.recorder(),u=e.listeners(),f=l.set,s=u.add,c=o.querySelector("input");if(!c)throw new Error("у комбобокса нет поля ввода");var d=a.multiple?o.querySelector("select[multiple]"):null;if(a.multiple&&!d)throw new Error("для multiple нужен <select multiple> внутри");var p=o.querySelector('[role="listbox"]'),g=!1;p||(p=n("ul","gr-combobox-list"),o.appendChild(p),g=!0);var v=++r,h=[],m=[],y=-1,b=null,w=null,A=null,x={},S=!1,E=null,C=[];function k(){S||(S=!0,f(o,"data-gr-state","open"),f(c,"aria-expanded","true"))}function T(){M(),S&&(S=!1,R(-1),f(o,"data-gr-state","ready"),f(c,"aria-expanded","false"))}function M(){w&&clearTimeout(w),w=null}function O(){for(;p.firstElementChild;)p.firstElementChild.remove();m=[],y=-1,c.removeAttribute("aria-activedescendant")}function j(e,t,r){var o=a.render?a.render(e,t):null,i=o||n("li","gr-combobox-option");return o||((e,t,r,n)=>{var o=n&&r?t.toLowerCase().indexOf(r.toLowerCase()):-1;if(-1!==o){var i=document.createElement("mark");i.textContent=t.slice(o,o+r.length),o>0&&e.appendChild(document.createTextNode(t.slice(0,o))),e.appendChild(i),o+r.length<t.length&&e.appendChild(document.createTextNode(t.slice(o+r.length)))}else e.textContent=t})(i,e.label,t,a.highlight),i.setAttribute("role","option"),i.setAttribute("aria-selected","false"),i.setAttribute("id","gr-combobox-"+v+"-"+r),i}function q(e,t){if(O(),h=t,b=e,!t.length){if(!a.empty)return void T();var r=n("li","gr-combobox-empty",{role:"status"});return r.textContent=a.empty,p.appendChild(r),void k()}for(var o=null,i=0;i<t.length;i++){if(t[i].group&&t[i].group!==o){o=t[i].group;var l=n("li","gr-combobox-group",{role:"presentation"});l.textContent=o,p.appendChild(l)}var u=j(t[i],e,i);m.push(u),p.appendChild(u)}k()}function P(t){if(a.cache&&Object.prototype.hasOwnProperty.call(x,t))q(t,x[t]);else{A&&A.abort&&A.abort();var r,n=(A="function"==typeof AbortController?new AbortController:null)?A.signal:void 0;if("function"==typeof a.source)r=Promise.resolve(a.source(t,n));else{if(!a.src||"function"!=typeof fetch)return void e.warn("комбобокс: нет источника (src или source)");r=fetch(a.src.replace("{q}",encodeURIComponent(t)),{signal:n}).then(e=>{if(!e.ok)throw new Error("HTTP "+e.status);return e.json()})}var o=A;r.then(e=>{if(o===A){var r=(e=>{var t=e&&e.items?e.items:e,r=[];if(!t||!t.length)return r;for(var n=0;n<t.length;n++){var o=t[n];"string"==typeof o?r.push({value:o,label:o}):o&&"object"==typeof o&&r.push({value:void 0!==o.value?String(o.value):String(o.label||""),label:void 0!==o.label?String(o.label):String(o.value||""),href:o.href||null,group:o.group||null,data:o})}return r})(e);a.cache&&(x[t]=r),q(t,r)}},t=>{t&&"AbortError"===t.name||e.warn("комбобокс: запрос не удался: "+(t&&t.message))})}}function L(e){return M(),(e=(void 0===e?c.value:e).trim()).length<a.min?(T(),O(),h=[],b=null,B):(a.delay>0?w=setTimeout(()=>{w=null,P(e)},a.delay):P(e),B)}function G(e){for(var t=d.options,r=0;r<t.length;r++)if(t[r].value===e)return t[r];return null}function J(){for(;E.firstElementChild;)E.firstElementChild.remove();for(var e=d.options,t=0;t<e.length;t++)if(e[t].selected){var r=n("li","gr-combobox-tag"),o=n("span"),i=n("button","gr-combobox-tag-remove",{type:"button","data-gr-value":e[t].value,"aria-label":String(a.remove).replace("{label}",e[t].textContent)});o.textContent=e[t].textContent,i.textContent="×",r.appendChild(o),r.appendChild(i),E.appendChild(r)}}function N(){try{d.dispatchEvent(new Event("change",{bubbles:!0}))}catch(e){}}function D(e){var t=G(e);if(t){t.selected=!1;var r=C.indexOf(t);-1!==r&&(C.splice(r,1),t.remove()),J(),N()}}function R(e,t){y>=0&&m[y]&&m[y].setAttribute("aria-selected","false"),y=e,e<0||!m[e]?c.removeAttribute("aria-activedescendant"):(m[e].setAttribute("aria-selected","true"),c.setAttribute("aria-activedescendant",m[e].getAttribute("id")),t&&((e,t)=>{if("function"==typeof e.getBoundingClientRect&&"function"==typeof t.getBoundingClientRect){var r=e.getBoundingClientRect(),n=t.getBoundingClientRect(),o=e.scrollTop||0,i=o;n.top<r.top?i=o-(r.top-n.top):n.bottom>r.bottom&&(i=o+(n.bottom-r.bottom)),i!==o&&(e.scrollTop=i)}})(p,m[e]))}function _(t){var r,o,i,l=h[t];return l?(d?(r=l.value,o=l.label,(i=G(r))||((i=n("option","",{value:r})).textContent=o,d.appendChild(i),C.push(i)),i.selected||(i.selected=!0,J(),N()),c.value=""):c.value=l.value,T(),e.emit("griffin:select",c,{item:l,index:t,input:c}),a.navigate&&l.href&&"undefined"!=typeof location&&(location.href=l.href),B):B}function H(t){var r=e.closest(t,'[role="option"]');return r?m.indexOf(r):-1}var B={el:o,input:c,list:p,open:k,close:T,query:L,select:_,items:()=>h.slice(),values:()=>{var e=[];if(d)for(var t=0;t<d.options.length;t++)d.options[t].selected&&e.push(d.options[t].value);return e},destroy:()=>{M(),A&&A.abort&&A.abort(),u.removeAll(),O(),g&&p.remove(),E&&E.remove(),l.restore()}};return p.getAttribute("id")||f(p,"id","gr-combobox-list-"+v),f(p,"role","listbox"),f(c,"role","combobox"),f(c,"aria-autocomplete","list"),f(c,"aria-expanded","false"),f(c,"aria-controls",p.getAttribute("id")),f(c,"autocomplete","off"),f(o,"data-gr-state","ready"),d&&(E=n("ul","gr-combobox-tags",{role:"list"}),o.insertBefore(E,c),J(),s(E,"click",t=>{var r=e.closest(t.target,".gr-combobox-tag-remove");r&&(D(r.getAttribute("data-gr-value")),c.focus())})),s(c,"input",()=>{L()}),s(c,"keydown",e=>{var t=e.key;if("ArrowDown"===t||"ArrowUp"===t){if(!h.length)return;(e=>{if(h.length){if(!S)return k(),void R(e>0?0:h.length-1,!0);var t=y+e;t<0&&(t=h.length-1),t>=h.length&&(t=0),R(t,!0)}})("ArrowDown"===t?1:-1),e.preventDefault()}else if("Home"===t||"End"===t){if(!S||!h.length)return;R("Home"===t?0:h.length-1,!0),e.preventDefault()}else if("Enter"===t){if(!S||y<0)return;_(y),e.preventDefault()}else if("Escape"===t){if(!S)return;T(),e.preventDefault()}else if("Tab"===t)T();else if("Backspace"===t&&d&&!c.value){for(var r=null,n=0;n<d.options.length;n++)d.options[n].selected&&(r=d.options[n]);r&&(D(r.value),e.preventDefault())}}),s(c,"focus",()=>{!S&&h.length&&c.value.trim()===b&&k()}),s(p,"click",e=>{var t=H(e.target);-1!==t&&(_(t),e.preventDefault())}),s(p,"pointerover",e=>{var t=H(e.target);-1!==t&&t!==y&&R(t,!1)}),s(p,"pointerdown",e=>{e.preventDefault&&e.preventDefault()}),s(document,"pointerdown",e=>{for(var t=e.target;t;){if(t===o)return;t=t.parentNode}T()},!0),B})})("undefined"!=typeof window&&window.GriffinJS?window.GriffinJS:require("../core/griffinjs-core.js")),(e=>{"use strict";var t="--gr-progress",r="--gr-range-from",n="--gr-range-to";function o(e,t){var r=parseFloat(e);return isNaN(r)?t:r}function i(e){return o(void 0===e.value||""===e.value?e.getAttribute("value"):e.value,o(e.getAttribute("min"),0))}e.defineWidget("range",a=>{var l="INPUT"===a.tagName?[a]:[].slice.call(a.querySelectorAll('input[type="range"]')),u=e.listeners();if(!l.length)throw new Error('внутри нет ни одного <input type="range">');function f(e){var t,r=o(e.getAttribute("min"),0),n=o(e.getAttribute("max"),100)-r;return t=n>0?(i(e)-r)/n:0,Math.round(1e4*Math.max(0,Math.min(1,t)))/1e4}function s(o){(e=>{if(!(l.length<2)){var t=l[0],r=l[1];i(t)<=i(r)||(e===r?t.value=r.value:r.value=t.value)}})(o&&o.target),l.length>1?(a.style.setProperty(r,f(l[0])),a.style.setProperty(n,f(l[1]))):l[0].style.setProperty(t,f(l[0])),o&&(()=>{for(var t=[],r=0;r<l.length;r++)t.push(i(l[r]));e.emit("griffin:change",a,{values:t,from:t[0],to:t[t.length-1]})})()}return u.add(a,"input",s),s(),{el:a,inputs:l,update:s,destroy:()=>{u.removeAll(),a.style.removeProperty(r),a.style.removeProperty(n);for(var e=0;e<l.length;e++)l[e].style.removeProperty(t)}}})})("undefined"!=typeof window&&window.GriffinJS?window.GriffinJS:require("../core/griffinjs-core.js")),(e=>{"use strict";var t={none:"ascending",ascending:"descending",descending:"none"},r=/^\d{4}-\d{2}-\d{2}/;function n(e){return r.test(e)?Date.parse(e):Number(e)}function o(e){for(var t=[],r=0;r<e.children.length;r++)"TR"===e.children[r].tagName&&t.push(e.children[r]);return t}e.defineWidget("sortable",r=>{var i=r.querySelector("thead"),a=i?i.querySelectorAll("th[aria-sort]"):[];function l(){return r.querySelector("tbody")}if(!l()||!a.length)throw new Error("нужны tbody и заголовки с aria-sort");var u,f=e.recorder(),s=e.listeners();try{u=new Intl.Collator(document.documentElement.getAttribute("lang")||void 0,{numeric:!0})}catch(e){u=new Intl.Collator(void 0,{numeric:!0})}for(var c=o(l()),d=null,p=0;p<a.length;p++)a[p].querySelector("button")||f.set(a[p],"tabindex","0");function g(e){for(var t=l(),r=0;r<e.length;r++)t.appendChild(e[r])}function v(){var e,t=o(l()),r=[];for(e=0;e<c.length;e++)-1!==t.indexOf(c[e])&&r.push(c[e]);for(e=0;e<t.length;e++)-1===r.indexOf(t[e])&&r.push(t[e]);g(r)}function h(e,t){var r=e.children[t];if(!r)return"";var n=r.getAttribute("data-gr-sort-value");return String(null===n?r.textContent:n).trim()}function m(e,t){var r;for(r=0;r<a.length;r++)f.set(a[r],"aria-sort",a[r]===e?t:"none");if(d="none"===t?null:e,"none"===t)return v();var i=[].indexOf.call(e.parentNode.children,e),s=o(l()),c=!0,p=[];for(r=0;r<s.length;r++)p.push(h(s[r],i)),""!==p[r]&&isNaN(n(p[r]))&&(c=!1);var m=s.map((e,t)=>({row:e,key:p[t],num:c?n(p[t]):0})),y="descending"===t?-1:1;m.sort((e,t)=>""===e.key?""===t.key?0:1:""===t.key?-1:y*(c?e.num-t.num:u.compare(e.key,t.key))),g(m.map(e=>e.row))}function y(t){var r=e.closest(t,"th");return r&&-1!==[].indexOf.call(a,r)?r:null}function b(e){var r=y(e.target);if(r){var n=r.getAttribute("aria-sort");m(r,d===r?t[n]||"ascending":"ascending"===n?"descending":"ascending")}}return f.set(r,"data-gr-state","ready"),s.add(r,"click",b),s.add(r,"keydown",e=>{"Enter"!==e.key&&" "!==e.key||y(e.target)===e.target&&(e.preventDefault(),b(e))}),{el:r,sort:m,destroy:()=>{s.removeAll(),f.restore(),v()}}})})("undefined"!=typeof window&&window.GriffinJS?window.GriffinJS:require("../core/griffinjs-core.js"));
2
+ (()=>{"use strict";var e=(()=>{var e={},t={},r={},n=[],o=[],i=!1;function a(e,t){return t&&(r[e]=t),r[e]||[]}function l(e,t,r,n,o){if("function"==typeof n&&(o=n,n=null),"string"!=typeof r||!r)throw new Error("GriffinJS: "+t+" без имени");if("function"!=typeof o)throw new Error("GriffinJS: "+t+" «"+r+"» — не функция");if(e[r])throw new Error("GriffinJS: "+t+" «"+r+"» уже зарегистрирован");return n&&n.needs&&a(r,n.needs),e[r]=o,o}function u(e){"undefined"!=typeof console&&console.warn&&console.warn("GriffinJS: "+e)}function f(e,t){for(var r=0;r<o.length;r++)if(o[r].el===e&&o[r].name===t)return o[r];return null}function s(e,r,n){if(!e||!t[r])return u("виджет «"+r+"» не зарегистрирован"),null;var i=f(e,r);if(i)return i.instance;void 0===n&&(n=v.options?v.options.read(e,r):{});var a={el:e,name:r,instance:null};o.push(a);try{a.instance=t[r](e,n,v)||{}}catch(e){return o.splice(o.indexOf(a),1),u("виджет «"+r+"» не поднялся: "+(e&&e.message)),null}return a.instance}function c(e,t){for(var r=o.length-1;r>=0;r--){var n=o[r];n.el===e&&(t&&n.name!==t||(o.splice(r,1),n.instance&&"function"==typeof n.instance.destroy&&n.instance.destroy()))}}function d(e){for(var r in e=e||document,t)if(Object.prototype.hasOwnProperty.call(t,r)){var n="[data-gr-"+r+"]",o=[];"function"==typeof e.matches&&e.matches(n)&&o.push(e);for(var i=e.querySelectorAll?e.querySelectorAll(n):[],a=0;a<i.length;a++)o.push(i[a]);for(var l=0;l<o.length;l++)s(o[l],r)}return v}function p(e){for(var t=e;t;){if(t===document||t===document.documentElement)return!0;t=t.parentNode}return!1}function g(){if(i)return v;i=!0,(()=>{for(var n=Object.keys(r),o=0;o<n.length;o++)for(var i=r[n[o]],a=0;a<i.length;a++){var l=i[a];v[l]||t[l]||e[l]||u("«"+n[o]+"» не работает без griffinjs-"+l+".js")}})();for(var o=0;o<n.length;o++)"function"==typeof n[o].start&&n[o].start(v);return d(document),v}var v={version:"0.24.0-dev",engines:e,widgets:t,defineEngine:(t,r,n)=>l(e,"движок",t,r,n),defineWidget:(e,r,n)=>l(t,"виджет",e,r,n),needs:a,use:e=>(n.push(e),i&&"function"==typeof e.start&&e.start(v),v),mount:s,unmount:c,instance:(e,t)=>{var r=f(e,t);return r?r.instance:null},init:d,start:g,destroy:()=>{if(!i)return v;for(i=!1;o.length;)c(o[o.length-1].el);for(var e=n.length-1;e>=0;e--)"function"==typeof n[e].destroy&&n[e].destroy(v);return v},warn:u,recorder:()=>{var e=[];return{set:(t,r,n)=>{var o=t.getAttribute(r);if(o!==n){for(var i=!1,a=0;a<e.length;a++)if(e[a].el===t&&e[a].attr===r){i=!0;break}i||e.push({el:t,attr:r,before:o}),null===n?t.removeAttribute(r):t.setAttribute(r,n)}},restore:()=>{for(var t=e.length-1;t>=0;t--){var r=e[t];null===r.before?r.el.removeAttribute(r.attr):r.el.setAttribute(r.attr,r.before)}e=[]}}},listeners:()=>{var e=[];return{add:(t,r,n,o)=>{t.addEventListener(r,n,o),e.push([t,r,n,o])},removeAll:()=>{for(var t=0;t<e.length;t++)e[t][0].removeEventListener(e[t][1],e[t][2],e[t][3]);e=[]}}},merge:(e,t)=>{var r,n={};for(r in e)Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);for(r in t||{})Object.prototype.hasOwnProperty.call(t,r)&&(n[r]=t[r]);return n},_mounted:()=>o.slice(),_prune:()=>{for(var e=o.length-1;e>=0;e--){var t=o[e].el;("boolean"==typeof t.isConnected?!t.isConnected:!p(t))&&c(t,o[e].name)}},_started:()=>i,_autoStart:()=>{try{var e=document.currentScript;if(e&&"false"===e.getAttribute("data-auto"))return}catch(e){}"loading"!==document.readyState?g():document.addEventListener("DOMContentLoaded",()=>{g()})}};return v})();"object"==typeof module&&module.exports&&(module.exports=e),"undefined"!=typeof window&&"undefined"!=typeof document&&(window.GriffinJS=e,e._autoStart())})(),(e=>{"use strict";function t(e){return""===e||"true"===e||"false"!==e&&("null"===e?null:/^-?\d+(\.\d+)?$/.test(e)?Number(e):e)}function r(e){return e.replace(/-([a-z])/g,(e,t)=>t.toUpperCase())}function n(n){var o={};if("string"!=typeof n)return o;if(!(n=n.trim()))return o;if("{"===n.charAt(0))try{return JSON.parse(n)}catch(t){return e.warn("параметры не разобраны как JSON: "+n),o}for(var i=n.split(";"),a=0;a<i.length;a++){var l=i[a].trim();if(l){var u=l.indexOf(":"),f=-1===u?l:l.slice(0,u),s=-1===u?"":l.slice(u+1);o[r(f.trim())]=t(s.trim())}}return o}e.options={parse:n,read:(e,t,r)=>{var o,i={};for(o in r||{})Object.prototype.hasOwnProperty.call(r,o)&&(i[o]=r[o]);var a=n(e&&e.getAttribute?e.getAttribute("data-gr-"+t):null);for(o in a)Object.prototype.hasOwnProperty.call(a,o)&&(i[o]=a[o]);return i}}})("undefined"!=typeof window&&window.GriffinJS?window.GriffinJS:require("./griffinjs-core.js")),(e=>{"use strict";var t={},r=!1;function n(e,t){if(!e)return null;if("function"==typeof e.closest)return e.closest(t);for(var r=e;r;){if("function"==typeof r.matches&&r.matches(t))return r;r=r.parentNode}return null}function o(e){for(var r=t[e.type]||[],o=0;o<r.length;o++){var i=n(e.target,r[o].selector);if(i&&!0===r[o].handler(e,i))return}}function i(e){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&document[e](r,o)}e.on=(n,i,a)=>(t[n]||(t[n]=[],r&&document.addEventListener(n,o)),t[n].push({selector:i,handler:a}),e),e.off=(r,n,o)=>{for(var i=t[r]||[],a=i.length-1;a>=0;a--)i[a].selector!==n||o&&i[a].handler!==o||i.splice(a,1);return e},e.emit=(e,t,r)=>{try{(t&&"function"==typeof t.dispatchEvent?t:document).dispatchEvent(new CustomEvent(e,{detail:r,bubbles:!0}))}catch(e){}},e.closest=n,e.use({start:()=>{r=!0,i("addEventListener")},destroy:()=>{r=!1,i("removeEventListener")}})})("undefined"!=typeof window&&window.GriffinJS?window.GriffinJS:require("./griffinjs-core.js")),(e=>{"use strict";var t=null,r=null,n=[];function o(){r=null;var t=n;n=[],e._prune();for(var o=0;o<t.length;o++)e.init(t[o])}function i(e){for(var t=!1,i=0;i<e.length;i++){for(var a=e[i].addedNodes,l=0;l<a.length;l++)1===a[l].nodeType&&(n.push(a[l]),t=!0);e[i].removedNodes.length&&(t=!0)}t&&!r&&(r=setTimeout(o,0))}function a(){t||"undefined"==typeof MutationObserver||(t=new MutationObserver(i)).observe(document.documentElement,{childList:!0,subtree:!0})}function l(){r&&(clearTimeout(r),r=null),n=[],t&&(t.disconnect(),t=null)}e.scanner={start:a,stop:l,_flush:o},e.use({start:a,destroy:l})})("undefined"!=typeof window&&window.GriffinJS?window.GriffinJS:require("./griffinjs-core.js")),(e=>{"use strict";e.defineEngine("scroll",(t,r,n)=>{var o=!(!n||!n.loop),i=[],a=[],l=0,u=[],f=null,s=null,c=!1,d=null,p=!1,g=null,v=0,h=e.listeners(),m=h.add,y="undefined"!=typeof window&&"onscrollend"in window;function b(){return t.count}function w(e){return l+e}function A(e){var t=e.cloneNode(!0);return t.setAttribute("data-gr-clone",""),t.setAttribute("aria-hidden","true"),t.setAttribute("inert",""),t.removeAttribute("aria-current"),t.removeAttribute("id"),t}function x(){for(var e=0;e<u.length;e++)u[e].remove();u=[],l=0}function S(){var e=r.children,t=r.scrollLeft,n=r.getBoundingClientRect().left;i=[],a=[];for(var o=0;o<e.length;o++){var l=e[o].getBoundingClientRect();i.push(t+l.left-n),a.push(l.width)}}function E(){for(var e=0,t=r.clientWidth,n=w(0),o=n;o<i.length;o++){var l=Math.abs(i[o]-i[n])+a[o];if(!(a[o]>0&&l<=t+1))break;e+=1}return Math.max(1,e)}function C(){var e=r.scrollLeft,t=i.length;if(t<2)return 0;for(var n=0;n<t-1;n++){var o=i[n],a=i[n+1],u=Math.min(o,a),f=Math.max(o,a);if(e>=u&&e<=f&&f!==u)return n+(e-o)/(a-o)-l}return(Math.abs(e-i[0])<=Math.abs(e-i[t-1])?0:t-1)-l}function k(e,t){var n=i[e];"number"==typeof n&&("function"==typeof r.scrollTo?r.scrollTo({left:n,behavior:t?"auto":"smooth"}):r.scrollLeft=n,p=!t&&Math.abs(r.scrollLeft-n)>=1,g=p?n:null,v=0)}function T(e){if(!o)return w(e);for(var t=C()+l,r=b(),n=w(e),a=[w(e)-r,w(e),w(e)+r],u=0;u<a.length;u++){var f=a[u];f<0||f>=i.length||Math.abs(f-t)<Math.abs(n-t)&&(n=f)}return n}function M(){if(s=null,p&&null!==g&&Math.abs(r.scrollLeft-g)>=1&&v<5)return v+=1,void(s=setTimeout(M,120));p=!1,g=null,c=!1;var e=Math.round(C()),n=b();if(o&&n&&(e<0||e>=n)&&k(w(e=(e%n+n)%n),!0),d){var i=d;return d=null,void k(T(i.physical),i.instant)}t._settle(e)}return m(r,"scroll",()=>{if(null===f){var e=()=>{f=null,t._report(C())};"function"==typeof requestAnimationFrame?f=requestAnimationFrame(e):e()}y||(s&&clearTimeout(s),s=setTimeout(M,120))},{passive:!0}),y&&m(r,"scrollend",()=>{s&&(clearTimeout(s),s=null),M()}),m(r,"touchstart",()=>{c=!0},{passive:!0}),{loop:o,live:!0,goTo:(e,t)=>c?(d={physical:e,instant:t},!0):!(p&&!t||(k(T(e),t),0)),layout:()=>{S();var e=o?Math.min(E(),b()):0;(e!==l||o&&u.length!==2*e)&&((e=>{var n=t.slides,i=n.length;if(x(),o&&!(i<2)){for(var a=Math.min(e,i),f=i-a;f<i;f++){var s=A(n[f]);r.insertBefore(s,n[0]),u.push(s)}for(var c=0;c<a;c++){var d=A(n[c]);r.appendChild(d),u.push(d)}l=a}})(e),S())},visible:()=>{for(var e=r.scrollLeft,n=e+r.clientWidth,u=b(),f=[],s=0;s<i.length;s++){var c=Math.min(i[s],i[s]+a[s]),d=Math.max(i[s],i[s]+a[s]),p=Math.min(d,n)-Math.max(c,e);if(a[s]>0&&p>=a[s]/2){var g=s-l;o&&u&&(g=(g%u+u)%u),g>=0&&g<u&&-1===f.indexOf(g)&&f.push(g)}}return f.length?f:[t.physical(Math.round(C()))]},perView:E,position:C,moving:()=>p,queued:()=>!!d,destroy:()=>{h.removeAll(),x(),s&&clearTimeout(s),null!==f&&"function"==typeof cancelAnimationFrame&&cancelAnimationFrame(f)},_offsets:()=>i.slice(),_clones:()=>u.slice()}})})("undefined"!=typeof window&&window.GriffinJS?window.GriffinJS:require("../core/griffinjs-core.js")),(e=>{"use strict";e.defineEngine("fade",{needs:["gesture"]},(t,r)=>{var n=e.recorder(),o=null;function i(){return t.physical(t.index)}return"function"==typeof e.gesture&&(o=e.gesture(r,{onStart:()=>{n.set(r,"data-gr-state","dragging")},onMove:e=>{var r=t.count,n=i()-e.progress;t.loop||(n=Math.max(0,Math.min(r-1,n))),t._report(n)},onEnd:e=>{n.set(r,"data-gr-state","ready"),e.swipe<0&&t.next()||e.swipe>0&&t.prev()||t._report(i())},onCancel:()=>{n.set(r,"data-gr-state","ready"),t._report(i())}})),n.set(r,"data-gr-state","ready"),{loop:!0,goTo:e=>{t._report(e),t._settle(e)},layout:()=>{},visible:()=>[i()],perView:()=>1,destroy:()=>{o&&o.destroy(),n.restore()}}})})("undefined"!=typeof window&&window.GriffinJS?window.GriffinJS:require("../core/griffinjs-core.js")),(e=>{"use strict";var t=["top","left","right","bottom"];function r(e,t){return"left"===e?t?"end":"start":"right"===e?t?"start":"end":e}var n={top:"bottom",bottom:"top",left:"right",right:"left"};function o(e,t,r,n){return"bottom"===e?n.h-t.bottom:"top"===e?t.top:"right"===e?n.w-t.right:t.left}e.anchor={place:(e,t,i)=>{var a,l,u,f=(i=i||{}).gap||0,s=i.margin||0,c=i.align||"start",d=(e=>{try{return"rtl"===getComputedStyle(e).direction||"rtl"===document.documentElement.getAttribute("dir")}catch(e){return"rtl"===document.documentElement.getAttribute("dir")}})(t),p=((e,t)=>"start"===e?t?"right":"left":"end"===e?t?"left":"right":e)(i.side||"bottom",d),g=t.getBoundingClientRect(),v=e.getBoundingClientRect(),h={w:(a=document.documentElement).clientWidth||("number"==typeof innerWidth?innerWidth:0),h:a.clientHeight||("number"==typeof innerHeight?innerHeight:0)},m="top"===p||"bottom"===p,y=(m?v.height:v.width)+f;if(o(p,g,0,h)<y&&o(n[p],g,0,h)>=y&&(p=n[p]),m){l="bottom"===p?g.bottom+f:g.top-f-v.height;var b=d?"end"===c:"start"===c;u="center"===c?g.left+(g.width-v.width)/2:b?g.left:g.right-v.width}else u="right"===p?g.right+f:g.left-f-v.width,l=g.top+(g.height-v.height)/2;return h.w&&(u=Math.min(Math.max(u,s),Math.max(s,h.w-s-v.width))),h.h&&(l=Math.min(Math.max(l,s),Math.max(s,h.h-s-v.height))),e.style.setProperty("top",Math.round(l)+"px"),e.style.setProperty("left",Math.round(u)+"px"),e.style.setProperty("right","auto"),e.style.setProperty("bottom","auto"),{side:r(p,d),top:l,left:u}},clear:e=>{if(e&&e.style)for(var r=0;r<t.length;r++)e.style.removeProperty(t[r])}}})("undefined"!=typeof window&&window.GriffinJS?window.GriffinJS:require("./griffinjs-core.js")),(e=>{"use strict";var t=null;function r(e){if(t&&Object.prototype.hasOwnProperty.call(t,e))return t[e];t||(t={});var r=null;try{r=getComputedStyle(document.documentElement).getPropertyValue("--gr-bp-"+e).trim()||null}catch(e){}return t[e]=r,r}function n(e){var t=r(e);return t?"(width >= "+t+")":null}function o(){t=null}e.media={value:r,query:n,matches:e=>{var t=n(e);return!(!t||"function"!=typeof matchMedia)&&matchMedia(t).matches},on:(e,t)=>{var r=n(e);if(!r||"function"!=typeof matchMedia)return t(!1),()=>{};var o=matchMedia(r),i=e=>{t(e.matches)};return t(o.matches),"function"==typeof o.addEventListener?o.addEventListener("change",i):o.addListener(i),()=>{"function"==typeof o.removeEventListener?o.removeEventListener("change",i):o.removeListener(i)}},reset:o},e.use({start:o})})("undefined"!=typeof window&&window.GriffinJS?window.GriffinJS:require("./griffinjs-core.js")),(e=>{"use strict";var t="--gr-progress";function r(e,t,r){return e<t?t:e>r?r:e}function n(e,n){e&&e.style&&e.style.setProperty(t,String(Math.round(1e3*r(n,0,1))/1e3))}function o(e){e&&e.style&&e.style.removeProperty(t)}function i(e,t){var n=t+e.height;return n<=0?0:r((t-e.top)/n,0,1)}e.motion={PROP:t,set:n,clear:o,clamp:r,time:e=>{var t=e.duration||1e3,r=!!e.loop,o=e.now||("undefined"!=typeof performance&&performance.now?()=>performance.now():Date.now),i=e.schedule||("function"==typeof requestAnimationFrame?e=>requestAnimationFrame(e):e=>setTimeout(e,16)),a=e.cancel||("function"==typeof cancelAnimationFrame?e=>{cancelAnimationFrame(e)}:e=>{clearTimeout(e)}),l=0,u=0,f=null,s=!1;function c(t){e.el&&n(e.el,t),e.onProgress&&e.onProgress(t)}function d(){if(f=null,s){var n=(u+(o()-l))/t;if(n>=1)return c(1),e.onEnd&&e.onEnd(),void(r&&s?(u=0,l=o(),c(0),f=i(d)):s=!1);c(n),f=i(d)}}function p(){return s||(s=!0,l=o(),f=i(d)),h}function g(){return s?(s=!1,u+=o()-l,null!==f&&(a(f),f=null),h):h}function v(){return g(),u=0,c(0),h}var h={start:p,pause:g,resume:p,stop:v,restart:()=>(v(),p()),running:()=>s};return h},viewport:(e,t)=>{t=t||{};var r=!1,a=null,l=null;function u(){a=null;var r="undefined"!=typeof window?window.innerHeight:0,o=i(e.getBoundingClientRect(),r);n(e,o),t.onProgress&&t.onProgress(o)}function f(){null===a&&"function"==typeof requestAnimationFrame?a=requestAnimationFrame(u):null===a&&u()}function s(e){if(e!==r){r=e;var t=e?"addEventListener":"removeEventListener";document[t]("scroll",f,{capture:!0,passive:!0}),window[t]("resize",f),e&&f()}}return"function"==typeof IntersectionObserver?(l=new IntersectionObserver(e=>{s(e[e.length-1].isIntersecting)})).observe(e):s(!0),{update:f,destroy:()=>{s(!1),l&&l.disconnect(),null!==a&&"function"==typeof cancelAnimationFrame&&cancelAnimationFrame(a),o(e)}}},viewportProgress:i}})("undefined"!=typeof window&&window.GriffinJS?window.GriffinJS:require("./griffinjs-core.js")),(e=>{"use strict";var t={axis:"x",threshold:8,velocity:.4,distance:.35,pointers:null,onStart:null,onMove:null,onEnd:null,onCancel:null};e.gesture=(r,n)=>{var o=e.merge(t,n),i="y"!==o.axis,a=null,l=[];function u(){var e=r.getBoundingClientRect?r.getBoundingClientRect():null;return(e?i?e.width:e.height:0)||1}function f(e){return"number"==typeof e.timeStamp?e.timeStamp:Date.now()}function s(e){if(!a&&(e=>!o.pointers||-1!==o.pointers.indexOf(e.pointerType))(e)&&("number"!=typeof e.button||0===e.button)&&(a={id:e.pointerId,pointerType:e.pointerType,startX:e.clientX,startY:e.clientY,dx:0,dy:0,progress:0,active:!1,locked:!1,swipe:0},l=[[f(e),i?e.clientX:e.clientY]],r.setPointerCapture))try{r.setPointerCapture(e.pointerId)}catch(e){}}function c(e){if(a&&e.pointerId===a.id&&!a.locked){a.dx=e.clientX-a.startX,a.dy=e.clientY-a.startY;var t=i?a.dx:a.dy,r=i?a.dy:a.dx;if(!a.active){if(Math.abs(t)<o.threshold&&Math.abs(r)<o.threshold)return;if(Math.abs(r)>Math.abs(t))return void(a.locked=!0);a.active=!0,o.onStart&&o.onStart(a)}l.push([f(e),i?e.clientX:e.clientY]),l.length>5&&l.shift(),a.progress=t/u(),e.cancelable&&e.preventDefault&&e.preventDefault(),o.onMove&&o.onMove(a)}}function d(e){if(a&&e.pointerId===a.id){var t=a,r=i?t.dx:t.dy,n=(()=>{if(l.length<2)return 0;var e=l[0],t=l[l.length-1],r=t[0]-e[0];return r>0?(t[1]-e[1])/r:0})();if(a=null,t.active){var f=Math.abs(r)/u()>=o.distance,s=Math.abs(n)>=o.velocity&&n>0==r>0;t.swipe=f||s?r>0?1:-1:0,t.velocity=n,o.onEnd&&o.onEnd(t)}else t.locked&&o.onCancel&&o.onCancel(t)}}function p(e){if(a&&e.pointerId===a.id){var t=a;a=null,o.onCancel&&o.onCancel(t)}}return r.addEventListener("pointerdown",s),r.addEventListener("pointermove",c),r.addEventListener("pointerup",d),r.addEventListener("pointercancel",p),{destroy:()=>{r.removeEventListener("pointerdown",s),r.removeEventListener("pointermove",c),r.removeEventListener("pointerup",d),r.removeEventListener("pointercancel",p),a=null},_state:()=>a}}})("undefined"!=typeof window&&window.GriffinJS?window.GriffinJS:require("./griffinjs-core.js")),(e=>{"use strict";var t="griffin:change",r="griffin:layout",n={engine:"scroll",loop:!1,rewind:!1,step:1,index:0,keyboard:!0,inert:!0,label:"Слайд {i} из {n}"};function o(e,t){return(e%t+t)%t}function i(i,a){var l=e.merge(n,a),u=[],f=0,s=1,c=null,d=!1,p=!!l.rewind,g=e.recorder(),v=e.listeners(),h=[],m=null,y=!1,b=!1,w=g.set;function A(){for(var e=l.slides?i.querySelectorAll(l.slides):i.children,t=[],r=0;r<e.length;r++)void 0!==e[r].nodeType&&1!==e[r].nodeType||e[r].hasAttribute&&e[r].hasAttribute("data-gr-clone")||t.push(e[r]);return t}function x(){return u.length}function S(){return Math.max(0,x()-s)}function E(e){var t=x();if(0===t)return 0;if(d)return o(e,t);var r=S();return e<0?0:e>r?r:e}function C(){if("page"===l.step)return Math.max(1,s);var e=Number(l.step);return e>=1?Math.floor(e):1}function k(){var e=x();return 0===e?0:d?Math.ceil(e/C()):Math.ceil(S()/C())+1}function T(e){var t=e*C();return d?t:Math.min(t,S())}function M(e){var t=E(e),r=k();return!d&&t>=S()?r-1:Math.min(r-1,Math.round(t/C()))}function O(e){var t=x();if(!d||0===t)return e;var r=o(e-E(f),t);return r>t/2&&(r-=t),f+r}function j(e){return l.label.replace("{i}",e+1).replace("{n}",x())}function q(){for(var e=0;e<u.length;e++){var t=u[e];t.getAttribute("role")||w(t,"role","group"),t.getAttribute("aria-roledescription")||w(t,"aria-roledescription","slide"),t.getAttribute("aria-label")||t.getAttribute("aria-labelledby")||w(t,"aria-label",j(e))}}function P(){for(var e=E(f),t=c&&"function"==typeof c.visible?c.visible():[e],r=0;r<u.length;r++)w(u[r],"aria-current",r===e?"true":null),l.inert&&w(u[r],"inert",-1===t.indexOf(r)?"":null)}function L(r,n){var o=f;f=r,P(),n&&n.silent||(r=>{var n={index:f,physical:E(f),previous:r,track:B};"function"==typeof e.emit?e.emit(t,i,n):"function"==typeof i.dispatchEvent&&"function"==typeof CustomEvent&&i.dispatchEvent(new CustomEvent(t,{detail:n,bubbles:!0}))})(o)}function G(){return!d&&C()>1}function J(e,t){if(b||0===x())return!1;if(!d&&(e<0||e>S()))return!1;var r=d?e:E(e);return G()&&(r=T(M(r))),!(c&&!1===c.goTo(E(r),!(!t||!t.instant))||(r===f||L(r,t),0))}function N(e){if(d)return J(f+C(),e);var t=M(f);return t<k()-1?J(T(t+1),e):!!p&&J(0,e)}function D(e){if(d)return J(f-C(),e);var t=M(f);return t>0?J(T(t-1),e):!!p&&J(T(k()-1),e)}function R(){try{return"rtl"===getComputedStyle(i).direction}catch(e){return"rtl"===(i.getAttribute("dir")||document.documentElement&&document.documentElement.getAttribute("dir"))}}function _(){var t=s+":"+x();c&&(c.layout(),s="function"==typeof c.perView?Math.max(1,c.perView()):1),d||(f=E(f)),(()=>{for(var e=C(),t=x(),r=S(),n=e>1&&!d,o=0;o<t;o++){var i=u[o].style;i&&(n?i.setProperty("--gr-snap",o===t-1?"end":o%e===0&&(o<r||!o)?"start":"none"):i.removeProperty("--gr-snap"))}})(),c&&c.goTo(E(f),!0),t!==s+":"+x()&&"function"==typeof e.emit&&e.emit(r,i,{perView:s,count:x(),pages:k(),track:B})}function H(){return b||(u=A(),q(),_(),P()),B}var B={el:i,goTo:J,goToPage:(e,t)=>J(T(Math.max(0,Math.min(e,k()-1))),t),next:N,prev:D,physical:E,pageOf:M,pageStart:T,sync:e=>{function r(t){if(!y&&t.detail&&t.detail.track===B){y=!0;try{e.index!==t.detail.index&&e.goTo(t.detail.index)}finally{y=!1}}}function n(t){if(!y&&t.detail&&t.detail.track===e){y=!0;try{f!==t.detail.index&&J(t.detail.index)}finally{y=!1}}}return v.add(i,t,r),v.add(e.el,t,n),()=>{i.removeEventListener(t,r),e.el.removeEventListener(t,n)}},refresh:H,destroy:()=>{if(!b){b=!0,c&&"function"==typeof c.destroy&&c.destroy(),c=null,v.removeAll();for(var t=0;t<h.length;t++)h[t].disconnect();h=[];for(var r=0;r<u.length;r++)e.motion&&e.motion.clear(u[r]),u[r].style&&u[r].style.removeProperty("--gr-snap");e.motion&&e.motion.clear(i),g.restore()}},_report:t=>{var r=x();if(e.motion){for(var n=0;n<r;n++){var a=Math.abs(t-n);d&&r&&(a=Math.min(a,r-a)),e.motion.set(u[n],a>=1?0:1-a)}e.motion.set(i,r>1?t/(r-1):1)}(e=>{var t=x();if(t&&c&&c.live&&!("function"==typeof c.moving&&c.moving()||"function"==typeof c.queued&&c.queued())){var r=O(d?o(Math.round(e),t):G()?(e=>{for(var t=0,r=k(),n=0;n<r;n++)Math.abs(e-T(n))<Math.abs(e-T(t))&&(t=n);return T(t)})(e):E(Math.round(e)));r!==f&&L(r)}})(t)},_settle:e=>{if(!b){var t=O(e);t!==f?L(t):P()}},_engine:()=>c};Object.defineProperty(B,"index",{get:()=>f}),Object.defineProperty(B,"count",{get:x}),Object.defineProperty(B,"perView",{get:()=>s}),Object.defineProperty(B,"last",{get:S}),Object.defineProperty(B,"pages",{get:k}),Object.defineProperty(B,"step",{get:C}),Object.defineProperty(B,"slides",{get:()=>u.slice()}),Object.defineProperty(B,"loop",{get:()=>!!d}),Object.defineProperty(B,"moving",{get:()=>!(!c||"function"!=typeof c.moving||!c.moving())}),Object.defineProperty(B,"rewind",{get:()=>p}),u=A(),f=l.index||0;var W=e.engines[l.engine];return W?c=W(B,i,l)||null:e.warn("движок «"+l.engine+"» не зарегистрирован — дорожка без движения"),d=!!(l.loop&&c&&c.loop),l.loop&&!d&&(p=!0),q(),_(),P(),l.keyboard&&v.add(i,"keydown",e=>{var t=e.key,r=R()?"ArrowRight":"ArrowLeft",n=!1;t===(R()?"ArrowLeft":"ArrowRight")?n=N():t===r?n=D():"Home"===t?n=J(d?f-E(f):0):"End"===t&&(n=J(d?f-E(f)+x()-1:S())),n&&e.preventDefault&&e.preventDefault()}),(()=>{if("function"==typeof MutationObserver&&((m=new MutationObserver(()=>{H()})).observe(i,{childList:!0}),h.push(m)),"function"==typeof ResizeObserver){var e=new ResizeObserver(()=>{_(),P()});e.observe(i),h.push(e)}})(),B}e.track=i,e.track.CHANGE=t,e.track.LAYOUT=r,e.defineWidget("track",{needs:["motion"]},(e,t)=>i(e,t))})("undefined"!=typeof window&&window.GriffinJS?window.GriffinJS:require("./griffinjs-core.js")),(e=>{"use strict";var t={autoplay:0,loop:!1,rewind:!1,step:1,pauseOnHover:!0,dots:!0,engine:"scroll",dotLabel:"Страница {i}",pauseLabel:"Пауза"};e.defineWidget("slider",{needs:["track","motion"]},(r,n)=>{var o=e.merge(t,n),i=r.querySelector(".gr-track")||r.firstElementChild;if(!i)throw new Error("у слайдера нет дорожки");var a=e.track(i,{loop:o.loop,rewind:o.rewind,step:o.step,engine:o.engine,index:o.index||0}),l=e.recorder(),u=e.listeners(),f=l.set,s=u.add,c=[],d=[],p=r.querySelector("[data-gr-prev]"),g=r.querySelector("[data-gr-next]"),v=r.querySelector("[data-gr-dots]"),h=r.querySelector("[data-gr-pause]"),m=null,y=!1,b=0;function w(e,t){var r=document.createElement("button");return r.setAttribute("type","button"),r.setAttribute("class",e),r.setAttribute("aria-label",t),c.push(r),r}function A(){for(var e=a.pageOf(a.index),t=a.physical(a.index),r=0;r<d.length;r++)f(d[r],"aria-current",r===e?"true":null);a.loop||a.rewind||(p&&f(p,"aria-disabled",t<=0?"true":null),g&&f(g,"aria-disabled",t>=a.last?"true":null))}function x(){if(v&&o.dots){for(var e=0;e<d.length;e++)d[e].remove(),c.splice(c.indexOf(d[e]),1);d=[];for(var t=0;t<a.pages;t++){var r=w("gr-slider-dot",o.dotLabel.replace("{i}",t+1));r.setAttribute("data-gr-page",String(t)),v.appendChild(r),d.push(r)}}}function S(){return!!m&&m.running()}function E(){return!m||y||b>0||(m.start(),f(r,"data-gr-state","playing")),q}function C(){return m?(m.pause(),f(r,"data-gr-state","paused"),q):q}function k(){m&&S()&&m.restart()}function T(){b+=1,C()}function M(){b=Math.max(0,b-1),E()}function O(){return k(),a.next()}function j(){return k(),a.prev()}var q={el:r,track:a,goTo:(e,t)=>a.goTo(e,t),next:O,prev:j,play:E,pause:C,playing:S,destroy:()=>{m&&m.stop(),m=null,u.removeAll();for(var e=0;e<c.length;e++)c[e].remove();c=[],d=[],a.destroy(),l.restore()}};return r.getAttribute("role")||f(r,"role","region"),f(r,"aria-roledescription","carousel"),f(i,"aria-live",o.autoplay?"off":"polite"),f(r,"data-gr-state","ready"),x(),p&&s(p,"click",()=>{j()}),g&&s(g,"click",()=>{O()}),v&&s(v,"click",t=>{var r=e.closest(t.target,".gr-slider-dot");if(r&&v){var n=Number(r.getAttribute("data-gr-page"));isNaN(n)||(a.goToPage(n),k())}}),s(i,e.track.CHANGE,()=>{A()}),s(i,e.track.LAYOUT,()=>{x(),A()}),A(),!o.autoplay||(()=>{try{return"function"==typeof matchMedia&&matchMedia("(prefers-reduced-motion: reduce)").matches}catch(e){return!1}})()||a.count<2||(h||((h=w("gr-slider-pause",o.pauseLabel)).setAttribute("data-gr-pause",""),h.textContent="❚❚",r.appendChild(h)),f(h,"aria-pressed","false"),m=e.motion.time({duration:o.autoplay,loop:!0,el:h,onEnd:()=>{a.moving||a.next()||a.goTo(0)}}),s(h,"click",()=>{y=!y,h&&f(h,"aria-pressed",y?"true":"false"),y?C():E()}),o.pauseOnHover&&(s(r,"pointerenter",T),s(r,"pointerleave",M)),s(r,"focusin",T),s(r,"focusout",M),s(document,"visibilitychange",()=>{document.hidden?T():M()}),E()),q})})("undefined"!=typeof window&&window.GriffinJS?window.GriffinJS:require("../core/griffinjs-core.js")),(e=>{"use strict";function t(e,t){if("function"==typeof e.getBoundingClientRect&&"function"==typeof t.getBoundingClientRect){var r=e.getBoundingClientRect(),n=t.getBoundingClientRect(),o=e.scrollLeft||0,i=o;n.left<r.left?i=o-(r.left-n.left):n.right>r.right&&(i=o+(n.right-r.right)),i!==o&&("function"==typeof e.scrollTo?e.scrollTo({left:i,behavior:"smooth"}):e.scrollLeft=i)}}e.defineWidget("gallery",{needs:["track","slider"]},(r,n)=>{var o=r.querySelector(".gr-gallery-thumbs"),i=e.widgets.slider(r,n,e),a=i.track,l=[],u=e.recorder(),f=e.listeners(),s=u.set,c=f.add;function d(){for(var e=a.physical(a.index),r=0;r<l.length;r++){var n=r===e;s(l[r],"aria-current",n?"true":null),n&&t(o,l[r])}}if(o){for(var p=o.children,g=0;g<p.length;g++)l.push(p[g]),s(p[g],"aria-label",p[g].getAttribute("aria-label")||"Слайд "+(g+1));c(o,"click",e=>{for(var t=0;t<l.length;t++)if(l[t]===e.target||"function"==typeof l[t].contains&&l[t].contains(e.target))return void i.goTo(t)}),c(a.el,e.track.CHANGE,d),d()}return{el:r,slider:i,track:a,goTo:i.goTo,next:i.next,prev:i.prev,destroy:()=>{f.removeAll(),i.destroy(),u.restore()}}})})("undefined"!=typeof window&&window.GriffinJS?window.GriffinJS:require("../core/griffinjs-core.js")),(e=>{"use strict";var t="data-gr-lightbox",r=/\.(mp4|webm|ogv|mov)(\?|#|$)/i,n=/youtube\.com|youtu\.be|vimeo\.com/i,o=null,i=null,a=null,l=e.listeners(),u=l.add;function f(e,t){return e&&e.getAttribute&&e.getAttribute("data-gr-type")||(r.test(t)?"video":n.test(t)?"iframe":"image")}function s(e){var t=e.getAttribute("href")||e.getAttribute("data-gr-src")||"",r=e.querySelector?e.querySelector("img"):null;return{src:t,type:f(e,t),caption:e.getAttribute("data-gr-caption")||"",alt:e.getAttribute("data-gr-alt")||r&&r.getAttribute("alt")||""}}function c(e,t,r){var n=document.createElement(e);for(var o in t&&n.setAttribute("class",t),r||{})Object.prototype.hasOwnProperty.call(r,o)&&n.setAttribute(o,r[o]);return n}function d(e){return"video"===e.type?c("video",null,{src:e.src,controls:"",playsinline:""}):"iframe"===e.type?c("iframe",null,{src:e.src,allow:"autoplay; fullscreen; picture-in-picture",allowfullscreen:"",title:e.caption||e.alt||"Видео"}):c("img",null,{src:e.src,alt:e.alt})}function p(e,t){return e+1+" / "+t}function g(t,r,n){m(),n=n||{},r=r||0;var a=t.length;if(0===a)return null;o=c("dialog","gr-modal gr-lightbox",{"aria-label":n.label||"Просмотр"});for(var l=c("div","gr-track gr-lightbox-track",{tabindex:"0"}),f=0;f<a;f++){var s=c("figure","gr-slide gr-lightbox-item");if(s.appendChild(d(t[f])),t[f].caption){var g=c("figcaption","gr-lightbox-caption");g.textContent=t[f].caption,s.appendChild(g)}l.appendChild(s)}o.appendChild(l);var v=c("button","gr-lightbox-close",{type:"button","aria-label":"Закрыть"});v.textContent="×",o.appendChild(v),u(v,"click",m);var b=null;if(a>1){var w=c("button","gr-lightbox-prev",{type:"button","aria-label":"Назад"}),A=c("button","gr-lightbox-next",{type:"button","aria-label":"Вперёд"});w.textContent="‹",A.textContent="›",(b=c("div","gr-lightbox-counter",{"aria-live":"polite"})).textContent=p(r,a),o.appendChild(w),o.appendChild(A),o.appendChild(b),u(w,"click",()=>{i&&i.prev()}),u(A,"click",()=>{i&&i.next()})}return u(o,"click",t=>{t.target!==o&&t.target!==l&&e.closest(t.target,".gr-lightbox-item")!==t.target||m()}),u(o,"keydown",e=>{i&&e.target!==l&&("ArrowRight"===e.key?(i.next(),e.preventDefault()):"ArrowLeft"===e.key&&(i.prev(),e.preventDefault()))}),u(o,"close",h),document.body.appendChild(o),a>1&&(i=e.track(l,{loop:!0,index:r}),u(l,e.track.CHANGE,e=>{b&&(b.textContent=p(e.detail.physical,a))})),"function"==typeof o.showModal?o.showModal():o.setAttribute("open",""),y}function v(e){a=e;for(var r=(e=>{var r=e.getAttribute(t);if(!r)return[e];for(var n=document.querySelectorAll("["+t+'="'+r+'"]'),o=[],i=0;i<n.length;i++)o.push(n[i]);return o})(e),n=[],o=0,i=0;i<r.length;i++)r[i]===e&&(o=i),n.push(s(r[i]));return g(n,o)}function h(){o&&((()=>{if(o){for(var e=o.querySelectorAll("video"),t=o.querySelectorAll("iframe"),r=0;r<e.length;r++)"function"==typeof e[r].pause&&e[r].pause();for(var n=0;n<t.length;n++)t[n].setAttribute("src","about:blank")}})(),i&&i.destroy(),i=null,l.removeAll(),o.remove(),o=null,a&&"function"==typeof a.focus&&a.focus(),a=null)}function m(){o&&("function"==typeof o.close&&o.hasAttribute("open")?o.close():h())}var y={open:g,openFrom:v,close:m,_dialog:()=>o,_track:()=>i};e.lightbox=y,e.needs("lightbox",["track"]),e.on("click","["+t+"]",(e,t)=>!(e.metaKey||e.ctrlKey||e.shiftKey||e.button||(e.preventDefault&&e.preventDefault(),v(t),0))),e.use({destroy:h})})("undefined"!=typeof window&&window.GriffinJS?window.GriffinJS:require("../core/griffinjs-core.js")),(e=>{"use strict";e.defineWidget("parallax",{needs:["motion"]},t=>{var r=e.motion.viewport(t);return{el:t,update:r.update,destroy:r.destroy}})})("undefined"!=typeof window&&window.GriffinJS?window.GriffinJS:require("../core/griffinjs-core.js")),(e=>{"use strict";var t={hover:!0,delay:120,hide:250,bp:"md"},r=0;function n(e){return!!e&&"SUMMARY"===e.tagName}function o(e){return!!e&&"DETAILS"===e.tagName}function i(e){return!e.pointerType||"mouse"===e.pointerType||"pen"===e.pointerType}function a(e,t){for(var r=t;r;){if(r===e)return!0;r=r.parentNode}return!1}function l(e){return!!e&&!e.hasAttribute("disabled")&&"-1"!==e.getAttribute("tabindex")&&"true"!==e.getAttribute("aria-hidden")}function u(e){return!(!e||"function"!=typeof e.focus)&&(e.focus(),document.activeElement===e)}e.defineWidget("megamenu",{needs:["media"]},(f,s)=>{var c=e.merge(t,s),d=e.recorder(),p=e.listeners(),g=d.set,v=p.add,h=[],m=!1,y=null,b=null,w=null,A=null,x=null;function S(e){for(var t=e;t&&t!==f;){for(var r=0;r<h.length;r++)if(h[r].el===t)return h[r];t=t.parentNode}return null}function E(){for(var e=0;e<h.length;e++)if(h[e].el.open)return h[e];return null}function C(t){t.panel.getAttribute("id")||g(t.panel,"id","gr-megamenu-"+ ++r),g(t.summary,"aria-controls",t.panel.getAttribute("id")),g(t.summary,"aria-expanded",t.el.open?"true":"false"),v(t.el,"toggle",()=>{(t=>{var r=!!t.el.open;if(g(t.summary,"aria-expanded",r?"true":"false"),r){for(var n=0;n<h.length;n++)h[n]!==t&&h[n].el.open&&(h[n].el.open=!1);(t=>{var r=t.el.getAttribute("data-gr-src");r&&!t.loaded&&(t.loaded=!0,"function"!=typeof fetch?(e.warn("мегаменю: fetch недоступен, панель "+r+" не загружена"),g(t.el,"data-gr-state","error")):(g(t.el,"data-gr-state","loading"),fetch(r).then(e=>{if(!e.ok)throw new Error("HTTP "+e.status);return e.text()}).then(e=>{t.panel.innerHTML=e,g(t.el,"data-gr-state","ready")},n=>{e.warn("мегаменю: панель "+r+" не загружена: "+(n&&n.message)),g(t.el,"data-gr-state","error")})))})(t)}})(t)})}function k(e){O(),e&&!e.el.open&&(e.el.open=!0)}function T(e){e&&e.el.open&&(e.el.open=!1)}function M(){O();for(var e=0;e<h.length;e++)T(h[e])}function O(){y&&clearTimeout(y),b&&clearTimeout(b),y=b=null,w=null}function j(e){b&&clearTimeout(b),b=null,w!==e&&(y&&clearTimeout(y),w=e,y=setTimeout(()=>{y=null,w=null,k(e)},c.delay))}function q(e){for(var t=[],r=e.panel.querySelectorAll("a[href], button, input, select, textarea, summary, [tabindex]"),n=0;n<r.length;n++)l(r[n])&&t.push(r[n]);return t}function P(e,t,r){var n=null===t?r>0?-1:e.length:e.indexOf(t);if(-1===n&&null!==t)return!1;for(var o=0;o<e.length;o++)if(u(e[n=(n+r+e.length)%e.length]))return!0;return!1}(()=>{for(var e=f.querySelectorAll("details"),t=0;t<e.length;t++){for(var r=e[t],i=!1,a=r.parentNode;a&&a!==f;){if(o(a)){i=!0;break}a=a.parentNode}if(!i){for(var l=null,u=null,s=0;s<r.children.length;s++)!l&&n(r.children[s])?l=r.children[s]:l&&!u&&(u=r.children[s]);l&&u&&h.push({el:r,summary:l,panel:u,loaded:!1})}}})();for(var L=0;L<h.length;L++)C(h[L]);return x=e.media.on(c.bp,e=>{m=e,O()}),v(f,"pointerover",e=>{if(m&&c.hover&&i(e)){var t=S(e.target),r=E();if(t)return t===r||t===w?(b&&clearTimeout(b),void(b=null)):void j(t)}}),v(f,"pointerout",e=>{if(m&&c.hover&&i(e)){var t=e.relatedTarget;t&&a(f,t)&&S(t)||(y&&clearTimeout(y),y=null,w=null,b||(b=setTimeout(()=>{b=null,M()},c.hide)))}}),v(f,"pointermove",e=>{if(m&&c.hover&&i(e)){var t={x:e.clientX,y:e.clientY};if(w&&((e,t)=>{if(!A||!t||"function"!=typeof t.panel.getBoundingClientRect)return!1;var r=t.panel.getBoundingClientRect();if(!r.width||e.y<=A.y||e.y>=r.top)return!1;var n=r.left-A.x,o=r.top-A.y,i=r.right-A.x,a=r.top-A.y,l=e.x-A.x,u=e.y-A.y;return(n*u-o*l)*(i*u-a*l)<=0})(t,E())){var r=w;w=null,j(r)}A=t}}),v(f,"keydown",e=>{var t=e.key,r=e.target,i=S(r),s=i&&!n(r);if("Escape"===t){var c=i&&i.el.open?i:E();if(!c)return;return T(c),u(c.summary),void e.preventDefault()}if(s){if(!m)return;var d=q(i);if("ArrowDown"===t)P(d,r,1);else{if("ArrowUp"!==t)return;P(d,r,-1)}e.preventDefault()}else if(m){var p=(()=>{for(var e=[],t=(()=>{if(!h.length)return f;for(var e=h[0].el.parentNode;e&&e!==f;){for(var t=!0,r=0;r<h.length;r++)if(!a(e,h[r].el)){t=!1;break}if(t)return e;e=e.parentNode}return f})().querySelectorAll("a[href], button, summary"),r=0;r<t.length;r++){for(var i=t[r],u=null,s=i.parentNode;s&&s!==f;){if(o(s)){u=s;break}s=s.parentNode}(!u||n(i)&&i.parentNode===u&&S(u))&&l(i)&&e.push(i)}return e})();if(-1!==p.indexOf(r)){if("ArrowRight"===t)P(p,r,1);else if("ArrowLeft"===t)P(p,r,-1);else if("Home"===t)P(p,null,1);else if("End"===t)P(p,null,-1);else{if("ArrowDown"!==t||!i)return;k(i),u(q(i)[0])}e.preventDefault()}}}),v(f,"focusout",e=>{if(m){var t=e.relatedTarget;t&&a(f,t)||M()}}),v(document,"pointerdown",e=>{a(f,e.target)||M()},!0),g(f,"data-gr-state","ready"),{el:f,items:h,open:k,close:T,closeAll:M,current:E,destroy:()=>{O(),x&&x(),p.removeAll(),d.restore()}}})})("undefined"!=typeof window&&window.GriffinJS?window.GriffinJS:require("../core/griffinjs-core.js")),(e=>{"use strict";var t={role:"menu",hover:!1,delay:100,hide:300,side:"bottom",align:"start",gap:4},r=0;function n(e){return!e.pointerType||"mouse"===e.pointerType||"pen"===e.pointerType}function o(e,t){for(var r=t;r;){if(r===e)return!0;r=r.parentNode}return!1}function i(e){return!!e&&!e.hasAttribute("disabled")&&"true"!==e.getAttribute("aria-disabled")}function a(e){return!(!e||"function"!=typeof e.focus)&&(e.focus(),document.activeElement===e)}e.defineWidget("dropdown",{needs:["anchor"]},(l,u)=>{var f=e.merge(t,u),s=e.recorder(),c=e.listeners(),d=s.set,p=c.add,g=l.firstElementChild,v=g&&g.nextElementSibling;if(!g||!v)throw new Error("у дропдауна нет кнопки и панели");var h="DETAILS"===l.tagName?"details":v.hasAttribute("popover")?"popover":"css",m=!1,y=!1,b=null;function w(){return"details"===h?!!l.open:m}function A(){for(var e=[],t=v.querySelectorAll('a[href], button, [role="menuitem"], [role="menuitemcheckbox"], [role="menuitemradio"]'),r=0;r<t.length;r++)i(t[r])&&e.push(t[r]);return e}function x(){"popover"===h&&e.anchor&&e.anchor.place(v,g,{side:f.side,align:f.align,gap:f.gap})}function S(e){"details"!==h&&(m=e),d(g,"aria-expanded",e?"true":"false"),d(l,"data-gr-state",e?"open":"ready"),e&&x(),e&&y&&a(A()[0]),y=!1}function E(){"popover"===h&&w()&&x()}function C(){if(O(),!w())if("details"===h)l.open=!0;else if("popover"===h)try{v.showPopover()}catch(e){S(!0)}else S(!0)}function k(){if(O(),w())if("details"===h)l.open=!1;else if("popover"===h)try{v.hidePopover()}catch(e){S(!1)}else S(!1)}function T(){w()?k():C()}function M(e,t,r){var n=null===t?r>0?-1:e.length:e.indexOf(t);if(-1===n&&null!==t)return!1;for(var o=0;o<e.length;o++)if(a(e[n=(n+r+e.length)%e.length]))return!0;return!1}function O(){b&&clearTimeout(b),b=null}return v.getAttribute("id")||d(v,"id","gr-dropdown-"+ ++r),d(g,"aria-controls",v.getAttribute("id")),(()=>{if("menu"===f.role){var e=v.querySelector("ul, ol")||v;d(g,"aria-haspopup","menu"),d(e,"role","menu");for(var t=e.querySelectorAll("li"),r=0;r<t.length;r++)d(t[r],"role","none");for(var n=e.querySelectorAll("hr"),o=0;o<n.length;o++)d(n[o],"role","separator");for(var i=e.querySelectorAll("a[href], button"),a=0;a<i.length;a++)i[a].getAttribute("role")||d(i[a],"role",i[a].hasAttribute("aria-checked")?"menuitemcheckbox":"menuitem")}})(),"details"===h?p(l,"toggle",()=>{S(!!l.open)}):"popover"===h?(p(v,"beforetoggle",e=>{"open"===e.newState&&x()}),p(v,"toggle",e=>{S("open"===e.newState)}),p(document,"scroll",E,!0),"undefined"!=typeof window&&p(window,"resize",E)):p(g,"click",()=>{T()}),p(l,"keydown",e=>{var t=e.key,r=e.target;if("Escape"===t){if(!w())return;return k(),a(g),void e.preventDefault()}if(r!==g){if(o(v,r)&&w()){var n=A();if("ArrowDown"===t)M(n,r,1);else if("ArrowUp"===t)M(n,r,-1);else if("Home"===t)M(n,null,1);else if("End"===t)M(n,null,-1);else{if(1!==t.length||e.ctrlKey||e.metaKey||e.altKey||" "===t)return;((e,t,r)=>{for(var n=e.indexOf(t),o=1;o<=e.length;o++){var i=e[(n+o)%e.length];if((i.textContent||"").trim().toLowerCase().charAt(0)===r.toLowerCase()&&a(i))return!0}})(n,r,t)}e.preventDefault()}}else"ArrowDown"===t||"ArrowUp"===t?(y=!0,w()?a("ArrowDown"===t?A()[0]:A()[A().length-1]):C(),e.preventDefault()):"Enter"!==t&&" "!==t||(y=!w())}),p(l,"pointerover",e=>{f.hover&&n(e)&&(O(),w()||(b=setTimeout(()=>{b=null,C()},f.delay)))}),p(l,"pointerout",e=>{f.hover&&n(e)&&(e.relatedTarget&&o(l,e.relatedTarget)||(O(),b=setTimeout(()=>{b=null,k()},f.hide)))}),p(l,"focusout",e=>{e.relatedTarget&&o(l,e.relatedTarget)||k()}),p(document,"pointerdown",e=>{o(l,e.target)||k()},!0),S(w()),{el:l,trigger:g,panel:v,kind:h,open:C,close:k,toggle:T,isOpen:w,destroy:()=>{O(),c.removeAll(),"popover"===h&&e.anchor&&e.anchor.clear(v),s.restore()}}})})("undefined"!=typeof window&&window.GriffinJS?window.GriffinJS:require("../core/griffinjs-core.js")),(e=>{"use strict";var t={delay:150,side:"top",align:"center",gap:6};function r(e){return!e.pointerType||"mouse"===e.pointerType||"pen"===e.pointerType}function n(e,t){for(var r=t;r;){if(r===e)return!0;r=r.parentNode}return!1}e.defineWidget("tooltip",{needs:["anchor"]},(o,i)=>{var a=e.merge(t,i),l=e.recorder(),u=e.listeners(),f=l.set,s=u.add,c=o.firstElementChild,d=o.querySelector('[role="tooltip"]')||o.lastElementChild;if(!c||!d||d===c)throw new Error("у подсказки нет якоря и текста");var p=!1,g=null;function v(){g&&clearTimeout(g),g=null}function h(){if(v(),!p){p=!0;try{d.showPopover()}catch(e){}f(o,"data-gr-state","open"),e.anchor&&e.anchor.place(d,c,{side:a.side,align:a.align,gap:a.gap})}}function m(){if(v(),p){p=!1;try{d.hidePopover()}catch(e){}e.anchor&&e.anchor.clear(d),f(o,"data-gr-state","ready")}}function y(){p&&e.anchor&&e.anchor.place(d,c,{side:a.side,align:a.align,gap:a.gap})}return d.hasAttribute("popover")||f(d,"popover","manual"),s(o,"pointerover",e=>{r(e)&&(v(),p||(a.delay>0?g=setTimeout(()=>{g=null,h()},a.delay):h()))}),s(o,"pointerout",e=>{r(e)&&(e.relatedTarget&&n(o,e.relatedTarget)||m())}),s(o,"focusin",()=>{h()}),s(o,"focusout",e=>{e.relatedTarget&&n(o,e.relatedTarget)||m()}),s(d,"toggle",e=>{"closed"===e.newState&&p&&m()}),s(document,"keydown",e=>{"Escape"===e.key&&p&&m()},!0),s(document,"scroll",y,!0),"undefined"!=typeof window&&s(window,"resize",y),f(o,"data-gr-state","ready"),{el:o,tip:d,show:h,hide:m,destroy:()=>{m(),u.removeAll(),l.restore()}}})})("undefined"!=typeof window&&window.GriffinJS?window.GriffinJS:require("../core/griffinjs-core.js")),(e=>{"use strict";var t={hash:!1,media:!0,lock:!0},r="data-gr-open",n=[],o=e.recorder(),i=e.listeners(),a=0;function l(e){var t=n[n.length-1];t&&(((e,t)=>{for(var r=e;r&&r!==t;){try{var n=getComputedStyle(r);if(("auto"===n.overflowY||"scroll"===n.overflowY)&&r.scrollHeight>r.clientHeight)return!0}catch(e){}r=r.parentNode}return!1})(e.target,t.el)||"function"==typeof e.preventDefault&&e.preventDefault())}function u(){for(var e=0,t=0;t<n.length;t++)n[t].o.lock&&(e+=1);e&&!a?(o.set(document.documentElement,"data-gr-state","locked"),i.add(document,"touchmove",l,{passive:!1})):!e&&a&&(o.restore(),i.removeAll()),a=e}function f(t){var r="string"==typeof t?document.getElementById((t||"").replace(/^#/,"")):t;return r?e.instance(r,"dialog")||e.mount(r,"dialog"):null}function s(t){var r=f(t);return r?r.open():(e.warn("окно не найдено: "+t),null)}function c(){for(var t=e._mounted(),r=0;r<t.length;r++)"dialog"===t[r].name&&t[r].instance&&t[r].instance.onPopState()}e.defineWidget("dialog",(r,o)=>{var i=e.merge(t,o),a=e.recorder(),l=e.listeners(),f=a.set,s=l.add,c=!1,d=[],p=!1,g={el:r,o:i};function v(){return r.getAttribute("id")||""}function h(){return r.hasAttribute("open")}function m(){for(var e=0;e<d.length;e++)d[e].el.setAttribute("src",d[e].src);d=[]}function y(){return"undefined"!=typeof location&&location.hash==="#"+v()}function b(){return h()||(m(),"function"==typeof r.showModal?r.showModal():r.setAttribute("open",""),n.push(g),u(),f(r,"data-gr-state","open"),(()=>{var t=r.getAttribute("data-gr-src");if(t&&!c){if(c=!0,"function"!=typeof fetch)return e.warn("окно: fetch недоступен, "+t+" не загружен"),void f(r,"data-gr-state","error");var n=r.querySelector("[data-gr-content]")||r;f(r,"data-gr-state","loading"),fetch(t).then(e=>{if(!e.ok)throw new Error("HTTP "+e.status);return e.text()}).then(e=>{n.innerHTML=e,f(r,"data-gr-state",h()?"open":"ready")},n=>{e.warn("окно: "+t+" не загружен: "+(n&&n.message)),f(r,"data-gr-state","error")})}})(),(()=>{if(i.hash&&v()&&"undefined"!=typeof history&&!y())try{history.pushState(null,"","#"+v())}catch(e){}})(),e.emit("griffin:open",r,{dialog:r})),x}function w(){return h()?("function"==typeof r.close?r.close():(r.removeAttribute("open"),A()),x):x}function A(){var t=n.indexOf(g);-1!==t&&n.splice(t,1),u(),(()=>{if(i.media){for(var e=r.querySelectorAll("video, audio"),t=r.querySelectorAll("iframe"),n=0;n<e.length;n++)"function"==typeof e[n].pause&&e[n].pause();for(var o=0;o<t.length;o++){var a=t[o].getAttribute("src");a&&"about:blank"!==a&&(d.push({el:t[o],src:a}),t[o].setAttribute("src","about:blank"))}}})(),(()=>{if(i.hash&&!p&&"undefined"!=typeof history&&y())try{history.back()}catch(e){}})(),p=!1,"loading"!==r.getAttribute("data-gr-state")&&f(r,"data-gr-state","ready"),e.emit("griffin:close",r,{dialog:r})}var x={el:r,open:b,close:w,isOpen:h,onPopState:()=>{i.hash&&h()&&!y()&&(p=!0,w())},destroy:()=>{var e=n.indexOf(g);-1!==e&&n.splice(e,1),u(),m(),l.removeAll(),a.restore()}};return s(r,"close",A),f(r,"data-gr-state",h()?"open":"ready"),h()&&(n.push(g),u()),i.hash&&y()&&!h()&&b(),x}),e.dialog={open:s,close:e=>{var t=f(e);return t?t.close():null},closeAll:()=>{for(;n.length;){var t=e.instance(n[n.length-1].el,"dialog");t?t.close():n.pop()}u()},top:()=>n.length?n[n.length-1].el:null,stack:()=>{for(var e=[],t=0;t<n.length;t++)e.push(n[t].el);return e},_popstate:c},e.on("click","["+r+"]",(e,t)=>!(e.metaKey||e.ctrlKey||e.shiftKey||e.button||(e.preventDefault&&e.preventDefault(),s(t.getAttribute(r)),0))),e.use({start:()=>{"undefined"!=typeof window&&window.addEventListener("popstate",c)},destroy:()=>{"undefined"!=typeof window&&window.removeEventListener("popstate",c),n=[],a=0,o.restore(),i.removeAll()}})})("undefined"!=typeof window&&window.GriffinJS?window.GriffinJS:require("../core/griffinjs-core.js")),(e=>{"use strict";var t={src:"",source:null,render:null,min:1,delay:200,empty:"",navigate:!1,highlight:!0,cache:!0,multiple:!1,remove:"Убрать {label}"},r=0;function n(e,t,r){var n=document.createElement(e);for(var o in t&&n.setAttribute("class",t),r||{})Object.prototype.hasOwnProperty.call(r,o)&&n.setAttribute(o,r[o]);return n}e.defineWidget("combobox",(o,i)=>{var a=e.merge(t,i),l=e.recorder(),u=e.listeners(),f=l.set,s=u.add,c=o.querySelector("input");if(!c)throw new Error("у комбобокса нет поля ввода");var d=a.multiple?o.querySelector("select[multiple]"):null;if(a.multiple&&!d)throw new Error("для multiple нужен <select multiple> внутри");var p=o.querySelector('[role="listbox"]'),g=!1;p||(p=n("ul","gr-combobox-list"),o.appendChild(p),g=!0);var v=++r,h=[],m=[],y=-1,b=null,w=null,A=null,x={},S=!1,E=null,C=[];function k(){S||(S=!0,f(o,"data-gr-state","open"),f(c,"aria-expanded","true"))}function T(){M(),S&&(S=!1,R(-1),f(o,"data-gr-state","ready"),f(c,"aria-expanded","false"))}function M(){w&&clearTimeout(w),w=null}function O(){for(;p.firstElementChild;)p.firstElementChild.remove();m=[],y=-1,c.removeAttribute("aria-activedescendant")}function j(e,t,r){var o=a.render?a.render(e,t):null,i=o||n("li","gr-combobox-option");return o||((e,t,r,n)=>{var o=n&&r?t.toLowerCase().indexOf(r.toLowerCase()):-1;if(-1!==o){var i=document.createElement("mark");i.textContent=t.slice(o,o+r.length),o>0&&e.appendChild(document.createTextNode(t.slice(0,o))),e.appendChild(i),o+r.length<t.length&&e.appendChild(document.createTextNode(t.slice(o+r.length)))}else e.textContent=t})(i,e.label,t,a.highlight),i.setAttribute("role","option"),i.setAttribute("aria-selected","false"),i.setAttribute("id","gr-combobox-"+v+"-"+r),i}function q(e,t){if(O(),h=t,b=e,!t.length){if(!a.empty)return void T();var r=n("li","gr-combobox-empty",{role:"status"});return r.textContent=a.empty,p.appendChild(r),void k()}for(var o=null,i=0;i<t.length;i++){if(t[i].group&&t[i].group!==o){o=t[i].group;var l=n("li","gr-combobox-group",{role:"presentation"});l.textContent=o,p.appendChild(l)}var u=j(t[i],e,i);m.push(u),p.appendChild(u)}k()}function P(t){if(a.cache&&Object.prototype.hasOwnProperty.call(x,t))q(t,x[t]);else{A&&A.abort&&A.abort();var r,n=(A="function"==typeof AbortController?new AbortController:null)?A.signal:void 0;if("function"==typeof a.source)r=Promise.resolve(a.source(t,n));else{if(!a.src||"function"!=typeof fetch)return void e.warn("комбобокс: нет источника (src или source)");r=fetch(a.src.replace("{q}",encodeURIComponent(t)),{signal:n}).then(e=>{if(!e.ok)throw new Error("HTTP "+e.status);return e.json()})}var o=A;r.then(e=>{if(o===A){var r=(e=>{var t=e&&e.items?e.items:e,r=[];if(!t||!t.length)return r;for(var n=0;n<t.length;n++){var o=t[n];"string"==typeof o?r.push({value:o,label:o}):o&&"object"==typeof o&&r.push({value:void 0!==o.value?String(o.value):String(o.label||""),label:void 0!==o.label?String(o.label):String(o.value||""),href:o.href||null,group:o.group||null,data:o})}return r})(e);a.cache&&(x[t]=r),q(t,r)}},t=>{t&&"AbortError"===t.name||e.warn("комбобокс: запрос не удался: "+(t&&t.message))})}}function L(e){return M(),(e=(void 0===e?c.value:e).trim()).length<a.min?(T(),O(),h=[],b=null,B):(a.delay>0?w=setTimeout(()=>{w=null,P(e)},a.delay):P(e),B)}function G(e){for(var t=d.options,r=0;r<t.length;r++)if(t[r].value===e)return t[r];return null}function J(){for(;E.firstElementChild;)E.firstElementChild.remove();for(var e=d.options,t=0;t<e.length;t++)if(e[t].selected){var r=n("li","gr-combobox-tag"),o=n("span"),i=n("button","gr-combobox-tag-remove",{type:"button","data-gr-value":e[t].value,"aria-label":String(a.remove).replace("{label}",e[t].textContent)});o.textContent=e[t].textContent,i.textContent="×",r.appendChild(o),r.appendChild(i),E.appendChild(r)}}function N(){try{d.dispatchEvent(new Event("change",{bubbles:!0}))}catch(e){}}function D(e){var t=G(e);if(t){t.selected=!1;var r=C.indexOf(t);-1!==r&&(C.splice(r,1),t.remove()),J(),N()}}function R(e,t){y>=0&&m[y]&&m[y].setAttribute("aria-selected","false"),y=e,e<0||!m[e]?c.removeAttribute("aria-activedescendant"):(m[e].setAttribute("aria-selected","true"),c.setAttribute("aria-activedescendant",m[e].getAttribute("id")),t&&((e,t)=>{if("function"==typeof e.getBoundingClientRect&&"function"==typeof t.getBoundingClientRect){var r=e.getBoundingClientRect(),n=t.getBoundingClientRect(),o=e.scrollTop||0,i=o;n.top<r.top?i=o-(r.top-n.top):n.bottom>r.bottom&&(i=o+(n.bottom-r.bottom)),i!==o&&(e.scrollTop=i)}})(p,m[e]))}function _(t){var r,o,i,l=h[t];return l?(d?(r=l.value,o=l.label,(i=G(r))||((i=n("option","",{value:r})).textContent=o,d.appendChild(i),C.push(i)),i.selected||(i.selected=!0,J(),N()),c.value=""):c.value=l.value,T(),e.emit("griffin:select",c,{item:l,index:t,input:c}),a.navigate&&l.href&&"undefined"!=typeof location&&(location.href=l.href),B):B}function H(t){var r=e.closest(t,'[role="option"]');return r?m.indexOf(r):-1}var B={el:o,input:c,list:p,open:k,close:T,query:L,select:_,items:()=>h.slice(),values:()=>{var e=[];if(d)for(var t=0;t<d.options.length;t++)d.options[t].selected&&e.push(d.options[t].value);return e},destroy:()=>{M(),A&&A.abort&&A.abort(),u.removeAll(),O(),g&&p.remove(),E&&E.remove(),l.restore()}};return p.getAttribute("id")||f(p,"id","gr-combobox-list-"+v),f(p,"role","listbox"),f(c,"role","combobox"),f(c,"aria-autocomplete","list"),f(c,"aria-expanded","false"),f(c,"aria-controls",p.getAttribute("id")),f(c,"autocomplete","off"),f(o,"data-gr-state","ready"),d&&(E=n("ul","gr-combobox-tags",{role:"list"}),o.insertBefore(E,c),J(),s(E,"click",t=>{var r=e.closest(t.target,".gr-combobox-tag-remove");r&&(D(r.getAttribute("data-gr-value")),c.focus())})),s(c,"input",()=>{L()}),s(c,"keydown",e=>{var t=e.key;if("ArrowDown"===t||"ArrowUp"===t){if(!h.length)return;(e=>{if(h.length){if(!S)return k(),void R(e>0?0:h.length-1,!0);var t=y+e;t<0&&(t=h.length-1),t>=h.length&&(t=0),R(t,!0)}})("ArrowDown"===t?1:-1),e.preventDefault()}else if("Home"===t||"End"===t){if(!S||!h.length)return;R("Home"===t?0:h.length-1,!0),e.preventDefault()}else if("Enter"===t){if(!S||y<0)return;_(y),e.preventDefault()}else if("Escape"===t){if(!S)return;T(),e.preventDefault()}else if("Tab"===t)T();else if("Backspace"===t&&d&&!c.value){for(var r=null,n=0;n<d.options.length;n++)d.options[n].selected&&(r=d.options[n]);r&&(D(r.value),e.preventDefault())}}),s(c,"focus",()=>{!S&&h.length&&c.value.trim()===b&&k()}),s(p,"click",e=>{var t=H(e.target);-1!==t&&(_(t),e.preventDefault())}),s(p,"pointerover",e=>{var t=H(e.target);-1!==t&&t!==y&&R(t,!1)}),s(p,"pointerdown",e=>{e.preventDefault&&e.preventDefault()}),s(document,"pointerdown",e=>{for(var t=e.target;t;){if(t===o)return;t=t.parentNode}T()},!0),B})})("undefined"!=typeof window&&window.GriffinJS?window.GriffinJS:require("../core/griffinjs-core.js")),(e=>{"use strict";var t="--gr-progress",r="--gr-range-from",n="--gr-range-to";function o(e,t){var r=parseFloat(e);return isNaN(r)?t:r}function i(e){return o(void 0===e.value||""===e.value?e.getAttribute("value"):e.value,o(e.getAttribute("min"),0))}e.defineWidget("range",a=>{var l="INPUT"===a.tagName?[a]:[].slice.call(a.querySelectorAll('input[type="range"]')),u=e.listeners();if(!l.length)throw new Error('внутри нет ни одного <input type="range">');function f(e){var t,r=o(e.getAttribute("min"),0),n=o(e.getAttribute("max"),100)-r;return t=n>0?(i(e)-r)/n:0,Math.round(1e4*Math.max(0,Math.min(1,t)))/1e4}function s(o){(e=>{if(!(l.length<2)){var t=l[0],r=l[1];i(t)<=i(r)||(e===r?t.value=r.value:r.value=t.value)}})(o&&o.target),l.length>1?(a.style.setProperty(r,f(l[0])),a.style.setProperty(n,f(l[1]))):l[0].style.setProperty(t,f(l[0])),o&&(()=>{for(var t=[],r=0;r<l.length;r++)t.push(i(l[r]));e.emit("griffin:change",a,{values:t,from:t[0],to:t[t.length-1]})})()}return u.add(a,"input",s),s(),{el:a,inputs:l,update:s,destroy:()=>{u.removeAll(),a.style.removeProperty(r),a.style.removeProperty(n);for(var e=0;e<l.length;e++)l[e].style.removeProperty(t)}}})})("undefined"!=typeof window&&window.GriffinJS?window.GriffinJS:require("../core/griffinjs-core.js")),(e=>{"use strict";var t={none:"ascending",ascending:"descending",descending:"none"},r=/^\d{4}-\d{2}-\d{2}/;function n(e){return r.test(e)?Date.parse(e):Number(e)}function o(e){for(var t=[],r=0;r<e.children.length;r++)"TR"===e.children[r].tagName&&t.push(e.children[r]);return t}e.defineWidget("sortable",r=>{var i=r.querySelector("thead"),a=i?i.querySelectorAll("th[aria-sort]"):[];function l(){return r.querySelector("tbody")}if(!l()||!a.length)throw new Error("нужны tbody и заголовки с aria-sort");var u,f=e.recorder(),s=e.listeners();try{u=new Intl.Collator(document.documentElement.getAttribute("lang")||void 0,{numeric:!0})}catch(e){u=new Intl.Collator(void 0,{numeric:!0})}for(var c=o(l()),d=null,p=0;p<a.length;p++)a[p].querySelector("button")||f.set(a[p],"tabindex","0");function g(e){for(var t=l(),r=0;r<e.length;r++)t.appendChild(e[r])}function v(){var e,t=o(l()),r=[];for(e=0;e<c.length;e++)-1!==t.indexOf(c[e])&&r.push(c[e]);for(e=0;e<t.length;e++)-1===r.indexOf(t[e])&&r.push(t[e]);g(r)}function h(e,t){var r=e.children[t];if(!r)return"";var n=r.getAttribute("data-gr-sort-value");return String(null===n?r.textContent:n).trim()}function m(e,t){var r;for(r=0;r<a.length;r++)f.set(a[r],"aria-sort",a[r]===e?t:"none");if(d="none"===t?null:e,"none"===t)return v();var i=[].indexOf.call(e.parentNode.children,e),s=o(l()),c=!0,p=[];for(r=0;r<s.length;r++)p.push(h(s[r],i)),""!==p[r]&&isNaN(n(p[r]))&&(c=!1);var m=s.map((e,t)=>({row:e,key:p[t],num:c?n(p[t]):0})),y="descending"===t?-1:1;m.sort((e,t)=>""===e.key?""===t.key?0:1:""===t.key?-1:y*(c?e.num-t.num:u.compare(e.key,t.key))),g(m.map(e=>e.row))}function y(t){var r=e.closest(t,"th");return r&&-1!==[].indexOf.call(a,r)?r:null}function b(e){var r=y(e.target);if(r){var n=r.getAttribute("aria-sort");m(r,d===r?t[n]||"ascending":"ascending"===n?"descending":"ascending")}}return f.set(r,"data-gr-state","ready"),s.add(r,"click",b),s.add(r,"keydown",e=>{"Enter"!==e.key&&" "!==e.key||y(e.target)===e.target&&(e.preventDefault(),b(e))}),{el:r,sort:m,destroy:()=>{s.removeAll(),f.restore(),v()}}})})("undefined"!=typeof window&&window.GriffinJS?window.GriffinJS:require("../core/griffinjs-core.js"));
3
3
  //# sourceMappingURL=griffinjs.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "griffincss-ui",
3
- "version": "0.23.1",
3
+ "version": "0.24.0-dev",
4
4
  "description": "Griffincss UI — компоненты интерфейса: кнопки, поля, карточки, таблицы, статусы; на токенах ядра, с обеими темами и режимом для слабовидящих. Плюс GriffinJS — опциональный слой виджетов: слайдер, галерея, лайтбокс, параллакс, мегаменю, дропдаун, подсказка, окна, комбобокс",
5
5
  "homepage": "https://gitverse.ru/BarneyScott/GriffinCSS",
6
6
  "repository": {
@@ -36,7 +36,7 @@
36
36
  "src/"
37
37
  ],
38
38
  "peerDependencies": {
39
- "griffincss-core": "^0.23.1"
39
+ "griffincss-core": "^0.24.0-dev"
40
40
  },
41
41
  "keywords": [
42
42
  "css",
@@ -59,7 +59,7 @@
59
59
  "build": "npm run build:css && npm run build:scoped && npm run build:js && npm run build:griffinjs",
60
60
  "build:css": "sass scss/griffincss-ui.scss dist/griffincss-ui.css --load-path=../../node_modules --style=compressed --no-source-map",
61
61
  "build:scoped": "sass scss/griffincss-ui-scoped.scss dist/griffincss-ui-scoped.css --load-path=../../node_modules --style=compressed --no-source-map",
62
- "build:js": "terser src/griffincss-ui.js -c passes=3,ecma=2020,unsafe_arrows=true -m --ecma 2020 --comments false --format \"preamble='/*! Griffincss UI | MIT | https://gitverse.ru/BarneyScott/GriffinCSS */'\" --source-map \"url='griffincss-ui.js.map'\" -o dist/griffincss-ui.js",
62
+ "build:js": "node ../../scripts/build-js.mjs",
63
63
  "build:griffinjs": "node ../../scripts/build-griffinjs.mjs"
64
64
  }
65
65
  }
package/scss/_button.scss CHANGED
@@ -88,6 +88,27 @@
88
88
  cursor: progress;
89
89
  }
90
90
 
91
+ // Щит кнопки на <a> от правила режима для слабовидящих. Блок темы лежит
92
+ // в этом же слое и содержит [data-gr-a11y="low-vision"] a[href] { color;
93
+ // text-decoration } с весом (0,1,1): он обязан побеждать варианты ссылки
94
+ // .gr-link-quiet и .gr-link-inherit (0,1,0), но заодно побеждал и .gr-btn —
95
+ // цвет ссылки ложился поверх заливки, а в режиме ссылка и заливка это один
96
+ // и тот же accent-max: 1,0 : 1 (полевой отчёт по 0.23.1, Этап 40).
97
+ //
98
+ // Кнопка отвечает за себя сама, без селектора по атрибуту режима — такой
99
+ // селектор не совпал бы в scoped-сборке, где атрибут стоит снаружи области.
100
+ // Веса :not() хватает и без порядка, а порядок здесь тоже на её стороне:
101
+ // блок темы загружается раньше модулей.
102
+ //
103
+ // Вариант «как ссылка» из-под щита выведен: это ссылка по виду, и в режиме
104
+ // ей положены и цвет ссылки, и подчёркивание. Линия снимается длинным
105
+ // свойством, а не сокращённым text-decoration: сокращённое сбросило бы
106
+ // text-decoration-thickness — см. .gr-btn-link ниже.
107
+ a.gr-btn:not(.gr-btn-link) {
108
+ color: var(--gr-btn-fg);
109
+ text-decoration-line: none;
110
+ }
111
+
91
112
  // --- Варианты ---------------------------------------------------------------
92
113
 
93
114
  // Заливка. Парами: цвет заливки и чернила НА ней. Общего токена чернил
package/scss/_steps.scss CHANGED
@@ -96,8 +96,12 @@
96
96
  flex: none;
97
97
  align-items: center;
98
98
  justify-content: center;
99
- inline-size: var(--gr-step-marker-size);
100
- block-size: var(--gr-step-marker-size);
99
+
100
+ // Запасное значение — для маркера вне списка: номер в заголовке карточки,
101
+ // счётчик в шапке. Переменная объявлена на .gr-steps, и без запасного
102
+ // значения одиночный маркер схлопывался в ноль.
103
+ inline-size: var(--gr-step-marker-size, 2rem);
104
+ block-size: var(--gr-step-marker-size, 2rem);
101
105
  border: var(--gr-border-width) solid currentcolor;
102
106
  border-radius: var(--gr-radius-pill);
103
107
  background-color: var(--gr-step-marker-bg);
@@ -32,8 +32,10 @@
32
32
  @include meta.load-css('griffincss-core/scss/tokens');
33
33
 
34
34
  // Тема — тоже вне области: атрибут data-gr-theme стоит на <html>,
35
- // то есть заведомо снаружи области .griffin.
36
- @include meta.load-css('griffincss-core/scss/theme');
35
+ // то есть заведомо снаружи области .griffin. Оба файла, как в обычной
36
+ // сборке: правила режима обязаны лежать в одном слое с вариантами ссылки.
37
+ @include meta.load-css('griffincss-core/scss/theme-tokens');
38
+ @include meta.load-css('griffincss-core/scss/theme-rules');
37
39
 
38
40
  // @keyframes — вне области: имя анимации ищется глобально, префикс
39
41
  // области к нему неприменим.
@@ -23,11 +23,18 @@
23
23
  @layer griffincss.ui {
24
24
  @include meta.load-css('griffincss-core/scss/tokens');
25
25
 
26
- // Тема подключается и здесь, как в utils: слой griffincss.ui старше
26
+ // Тема подключается и здесь, а не только в ядре: слой griffincss.ui старше
27
27
  // griffincss.core, поэтому переопределения темы, приехавшие только
28
28
  // с griffincss-core.css, проиграли бы базовому :root из этой сборки —
29
29
  // независимо от специфичности селектора.
30
- @include meta.load-css('griffincss-core/scss/theme');
30
+ //
31
+ // Правила режима со свойствами тоже здесь — в отличие от utils. Правило
32
+ // [data-gr-a11y="low-vision"] a[href] (0,1,1) обязано побеждать варианты
33
+ // ссылки .gr-link-quiet и .gr-link-inherit (0,1,0), а для этого лежать
34
+ // с ними в одном слое: из ядра оно бы им проиграло. Компонент с заливкой
35
+ // защищается от него сам — a.gr-btn в _button.scss стоит позже по порядку.
36
+ @include meta.load-css('griffincss-core/scss/theme-tokens');
37
+ @include meta.load-css('griffincss-core/scss/theme-rules');
31
38
 
32
39
  // @keyframes живут отдельным файлом ради scoped-сборки — см. _keyframes.scss.
33
40
  @include meta.load-css('keyframes');
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Griffincss UI — Runtime v0.23.1
2
+ * Griffincss UI — Runtime v0.24.0-dev
3
3
  * Опциональный рантайм пакета компонентов. Делает ровно то, чего платформа
4
4
  * не даёт вовсе; всё, что умеют <details>, <dialog> и Popover API, остаётся
5
5
  * за ними. Без этого файла компоненты работают — просто без перечисленного.
@@ -50,7 +50,7 @@
50
50
  })(function () {
51
51
  'use strict';
52
52
 
53
- var VERSION = '0.23.1';
53
+ var VERSION = '0.24.0-dev';
54
54
 
55
55
  var OVERLAY_ATTR = 'data-gr-overlay-close';
56
56
 
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * GriffinJS — Core v0.23.1
2
+ * GriffinJS — Core v0.24.0-dev
3
3
  * Опциональный слой виджетов с состоянием поверх Griffincss: слайдер,
4
4
  * галерея, лайтбокс, параллакс, мегаменю. Подключается одной строкой
5
5
  * и одним файлом; страница без него — законное и рабочее состояние.
@@ -38,7 +38,7 @@
38
38
  })(function () {
39
39
  'use strict';
40
40
 
41
- var VERSION = '0.23.1';
41
+ var VERSION = '0.24.0-dev';
42
42
 
43
43
  // Реестры. Модуль зовёт defineEngine/defineWidget; ядро — единственное
44
44
  // место, которое знает, как их применить.
@@ -19,9 +19,19 @@
19
19
  * fill — знак свободного слота в ней, «_» по умолчанию.
20
20
  *
21
21
  * База без скрипта: pattern и inputmode на элементе — платформа проверяет
22
- * сама, скрипт лишь помогает вводить и ни pattern, ни проверку не трогает.
23
- * Из маски он берёт только два удобства: подсказку и inputmode="numeric"
24
- * для маски из одних цифр — и то, если автор не задал своих.
22
+ * сама. Авторский pattern маска не трогает и не заменяет; из маски она берёт
23
+ * два удобства подсказку и inputmode="numeric" для маски из одних цифр,
24
+ * и то, если автор не задал своих.
25
+ *
26
+ * Недобор. Непустое значение с незаполненными обязательными слотами — своя
27
+ * ошибка проверки: setCustomValidity(incomplete) ставится сразу, поэтому
28
+ * checkValidity() даёт false и форма не уходит с половиной номера. На полном
29
+ * значении custom-error пуст, и единственным судьёй снова становится pattern.
30
+ * Пустое поле маска не трогает: пустое — это required платформы, и поле
31
+ * без required обязательным не становится. Красным (aria-invalid) поле
32
+ * помечается ТОЛЬКО по уходу фокуса и светлеет, как только значение стало
33
+ * полным: ругаться на человека, пока он печатает, — не проверка. Там, где
34
+ * недобор законен, выход не требует нового API — токен ? в формате.
25
35
  *
26
36
  * Каретка. Правки перехватываются в beforeinput: новое значение считается
27
37
  * здесь, пишется целиком, и каретка встаёт за только что введённый знак —
@@ -31,16 +41,17 @@
31
41
  * браузер делает своё, а маска потом приводит значение к формату по input
32
42
  * или compositionend. Это единственный случай, когда каретка уходит в конец.
33
43
  *
34
- * Маска пишет value контрола — первый такой виджет в слое. Расширение
35
- * инварианта 7 объявлено в docs/griffinjs-architecture.html («Инварианты»)
36
- * и в правилах правки слоя. После каждой своей записи она шлёт input
44
+ * Маска пишет value контрола и его валидность — первый такой виджет в слое.
45
+ * Расширение инварианта 7 объявлено в docs/griffinjs-architecture.html
46
+ * («Инварианты») и в правилах правки слоя: пишешь value пиши и валидность,
47
+ * и возвращай её в destroy(). После каждой своей записи она шлёт input
37
48
  * (а по уходу фокуса — change), поэтому фреймворк узнаёт о значении
38
49
  * так же, как о набранном руками.
39
50
  */
40
51
  (function (G) {
41
52
  'use strict';
42
53
 
43
- var DEFAULTS = { format: '', hint: true, fill: '_' };
54
+ var DEFAULTS = { format: '', hint: true, fill: '_', incomplete: 'Значение набрано не полностью' };
44
55
 
45
56
  // Что принимает слот. Буква — любая по Юникоду: маска номерного знака
46
57
  // на кириллице не хуже латинской.
@@ -157,6 +168,7 @@
157
168
  var tokens;
158
169
  var last = null; // последнее записанное значение
159
170
  var focused = null; // значение на момент фокуса — для change
171
+ var short = false; // набрано, но не до конца
160
172
  var ownHint = o.hint && !el.getAttribute('placeholder');
161
173
  var ownMode = !el.getAttribute('inputmode');
162
174
 
@@ -170,6 +182,12 @@
170
182
 
171
183
  attrs.set(el, 'data-gr-state', !result.raw ? 'empty' : result.complete ? 'complete' : 'partial');
172
184
 
185
+ // Недобор — своя ошибка; пустое поле остаётся заботой required.
186
+ short = !!result.raw && !result.complete;
187
+
188
+ if (typeof el.setCustomValidity === 'function') el.setCustomValidity(short ? o.incomplete : '');
189
+ if (!short) attrs.set(el, 'aria-invalid', null);
190
+
173
191
  if (k !== undefined && typeof el.setSelectionRange === 'function') {
174
192
  var at = caret(result, k);
175
193
 
@@ -264,6 +282,7 @@
264
282
  // правку он не видел. Событие шлётся здесь по тому же правилу —
265
283
  // значение по уходу фокуса отличается от значения на входе.
266
284
  function onBlur() {
285
+ if (short) attrs.set(el, 'aria-invalid', 'true');
267
286
  if (focused !== null && el.value !== focused) fire(el, 'change');
268
287
  focused = null;
269
288
  }
@@ -298,6 +317,8 @@
298
317
  destroy: function () {
299
318
  events.removeAll();
300
319
  attrs.restore();
320
+
321
+ if (typeof el.setCustomValidity === 'function') el.setCustomValidity('');
301
322
  }
302
323
  };
303
324
  });
@@ -15,8 +15,10 @@
15
15
  * зовётся иначе, чем виджет: data-gr-mask на позиции списка ядро приняло бы
16
16
  * за виджет и попыталось бы надеть маску на <option>. Пустой <select> заполняется
17
17
  * из таблицы griffinjs-countries.js, если она подключена; без неё виджет
18
- * предупреждает и работает как поле без маски. Данные со своим темпом
19
- * обновления библиотека вместе с кодом не сопровождает.
18
+ * предупреждает и работает как поле без маски. Начальная страна списка
19
+ * из таблицы параметр country; без него первой стоит первая по алфавиту
20
+ * языка страницы, и виджет предупреждает об этом в консоли. Данные
21
+ * со своим темпом обновления библиотека вместе с кодом не сопровождает.
20
22
  *
21
23
  * Имя страны и флаг — у платформы: Intl.DisplayNames в языке страницы
22
24
  * (lang документа) и пара региональных индикаторов из двух букв ISO.
@@ -34,6 +36,13 @@
34
36
  * два поля: код и национальный номер; целиком он в value() и в событии
35
37
  * griffin:change.
36
38
  *
39
+ * Проверка приходит от маски и вместе со страной: недобранный номер
40
+ * не проходит checkValidity(), и смена кода пересчитывает полноту —
41
+ * девяти знаков хватает Беларуси и мало России. Проверяется ДЛИНА номера
42
+ * по маске выбранной страны, а не тип номера и не диапазон оператора:
43
+ * libphonenumber в замену не входит. value() при этом отражает набранное,
44
+ * даже неполное, — полнота отдаётся признаком complete в griffin:change.
45
+ *
37
46
  * База без скрипта: type="tel" и <select> кодов в .gr-input-group —
38
47
  * обе части платформенные.
39
48
  */
@@ -129,6 +138,11 @@
129
138
  select.appendChild(option);
130
139
  created.push(option);
131
140
  }
141
+
142
+ // Без country первой стоит первая по алфавиту языка страницы —
143
+ // на русской это Австралия, +61. Угадывать страну за автора виджет
144
+ // не берётся: ошибся бы тише, чем сейчас. Но и молчать не должен.
145
+ if (!o.country) G.warn('телефон: страна не задана — выбрана первая по алфавиту; укажите country');
132
146
  }
133
147
 
134
148
  if (!options().length) {
@@ -184,7 +198,7 @@
184
198
  function emit() {
185
199
  var c = info(current());
186
200
 
187
- G.emit('griffin:change', el, { iso: c.iso, code: c.code, value: value() });
201
+ G.emit('griffin:change', el, { iso: c.iso, code: c.code, value: value(), complete: mask ? mask.complete() : true });
188
202
  }
189
203
 
190
204
  // Полный номер с плюсом: страна — по самому длинному коду, который