griffincss-ui 0.16.0 → 0.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,3 +1,3 @@
1
1
  /*! Griffincss UI | MIT | https://gitverse.ru/BarneyScott/GriffinCSS */
2
- !function(){"use strict";var t=function(){var t="data-gr-dismiss",e=["top-start","top-end","bottom-start","bottom-end"],r=["info","success","warning","danger"],n="data-gr-tabs",o=!1,i=null;function a(t){i=t.target}function u(e){var r,o=s(e.target,"["+t+"]");if(o)!function(e){var r=e.getAttribute(t),n=r?"function"==typeof document.querySelector?document.querySelector(r):null:s(e,".gr-toast,.gr-alert,.gr-tag");n?d(n):l("крестику нечего закрывать: ни цели в data-gr-dismiss, ни сообщения вокруг")}(o);else if(!function(t){var e=s(t.target,".gr-tab");if(!e)return!1;var r=s(e,"["+n+"]");if(!r)return!1;if(q(e))return"function"==typeof t.preventDefault&&t.preventDefault(),!0;var o=r.querySelectorAll(".gr-tab"),i=N(o,e);return-1!==i&&("function"==typeof t.preventDefault&&t.preventDefault(),x(o,i,!1),!0)}(e)){var a=e.target;(r=a)&&"DIALOG"===r.tagName&&"function"==typeof r.close&&a.hasAttribute("data-gr-overlay-close")&&(null!==i&&i!==a||function(t,e){if("function"!=typeof t.getBoundingClientRect)return!1;var r=t.getBoundingClientRect();return!(!r||!r.width&&!r.height||"number"!=typeof e.clientX||"number"!=typeof e.clientY||0===e.clientX&&0===e.clientY||!(e.clientX<r.left||e.clientX>r.right||e.clientY<r.top||e.clientY>r.bottom))}(a,e)&&a.close("overlay"))}}function s(t,e){if(!t)return null;if("function"==typeof t.closest)return t.closest(e);for(var r=t;r;){if("function"==typeof r.matches&&r.matches(e))return r;r=r.parentNode}return null}function c(t,e){for(var r=e;r;){if(r===t)return!0;r=r.parentNode}return!1}function l(t){"undefined"!=typeof console&&console&&"function"==typeof console.warn&&console.warn("Griffincss UI: "+t)}function f(t,e){var r=document.createElement(t);if(e)for(var n=e.split(" "),o=0;o<n.length;o++)r.classList.add(n[o]);return r}function d(t){return!!t&&(t.classList&&t.classList.contains("gr-toast")?(y(t),!0):("function"==typeof t.remove&&t.remove(),!0))}function g(t,e){for(var r=0;r<t.length;r++)if(t[r]===e)return r;return-1}function v(t,e){t.grToastRest=e,t.grToastFrom=b(),t.grToastTimer=setTimeout(function(){y(t)},e)}function m(t){t.grToastTimer&&(clearTimeout(t.grToastTimer),t.grToastTimer=null)}function b(){return"undefined"!=typeof Date&&Date.now?Date.now():0}function p(t){t&&!t.grToastLeaving&&t.grToastTimer&&(m(t),t.grToastRest=Math.max(0,t.grToastRest-(b()-t.grToastFrom)))}function A(t){!t||t.grToastLeaving||t.grToastTimer||t.grToastRest&&v(t,t.grToastRest)}function y(t){t.grToastLeaving||(t.grToastLeaving=!0,m(t),t.classList&&t.classList.add("gr-toast-leaving"),setTimeout(function(){"function"==typeof t.remove&&t.remove()},300))}function h(t){p(s(t.target,".gr-toast"))}function L(t){var e=s(t.target,".gr-toast");e&&!c(e,t.relatedTarget)&&A(e)}function T(t){p(s(t.target,".gr-toast"))}function w(t){var e=s(t.target,".gr-toast");e&&!c(e,t.relatedTarget)&&A(e)}var E=0;function C(t){for(var e=(t||document).querySelectorAll("["+n+"]"),r=0;r<e.length;r++)S(e[r]);return Y}function S(t){var e=t.querySelectorAll(".gr-tab");if(e.length){var r=t.querySelectorAll(".gr-tablist");r.length&&r[0].setAttribute("role","tablist");for(var n=0,o=0;o<e.length;o++){var i=e[o],a=D(i);i.setAttribute("role","tab"),i.getAttribute("id")||i.setAttribute("id","gr-tab-"+ ++E),a&&(i.setAttribute("aria-controls",a.getAttribute("id")),a.setAttribute("role","tabpanel"),a.setAttribute("aria-labelledby",i.getAttribute("id")),a.setAttribute("tabindex","0")),(i.hasAttribute("aria-current")||"true"===i.getAttribute("aria-selected"))&&(n=o)}x(e,n,!1)}}function D(t){var e=t.getAttribute("href"),r=t.getAttribute("aria-controls");return!r&&e&&"#"===e.charAt(0)&&(r=e.slice(1)),r?document.getElementById(r):null}function x(t,e,r){for(var n=0;n<t.length;n++){var o=t[n],i=n===e,a=D(o);o.setAttribute("aria-selected",i?"true":"false"),o.setAttribute("tabindex",i?"0":"-1"),o.removeAttribute("aria-current"),a&&(i?a.removeAttribute("hidden"):a.setAttribute("hidden",""))}r&&"function"==typeof t[e].focus&&t[e].focus()}function q(t){return"true"===t.getAttribute("aria-disabled")||t.hasAttribute("disabled")}function R(t,e,r){for(var n=e,o=0;o<t.length;o++)if(!q(t[n=(n+r+t.length)%t.length]))return n;return e}function k(t,e){return R(t,e>0?-1:t.length,e)}function G(t){var e=s(t.target,".gr-tab");if(e){var r=s(e,"["+n+"]");if(r){var o=r.querySelectorAll(".gr-tab"),i=N(o,e);if(-1!==i){var a=i,u=t.key;if("ArrowRight"===u||"ArrowDown"===u)a=R(o,i,1);else if("ArrowLeft"===u||"ArrowUp"===u)a=R(o,i,-1);else if("Home"===u)a=k(o,1);else{if("End"!==u)return;a=k(o,-1)}"function"==typeof t.preventDefault&&t.preventDefault(),x(o,a,!0)}}}}function N(t,e){for(var r=0;r<t.length;r++)if(t[r]===e)return r;return-1}function X(){return o||(o=!0,document.addEventListener("pointerdown",a,!0),document.addEventListener("click",u),document.addEventListener("keydown",G),document.addEventListener("pointerover",h),document.addEventListener("pointerout",L),document.addEventListener("focusin",T),document.addEventListener("focusout",w)),Y}var Y={start:X,destroy:function(){return o?(o=!1,i=null,document.removeEventListener("pointerdown",a,!0),document.removeEventListener("click",u),document.removeEventListener("keydown",G),document.removeEventListener("pointerover",h),document.removeEventListener("pointerout",L),document.removeEventListener("focusin",T),document.removeEventListener("focusout",w),Y):Y},toast:function(n,o){var i=-1===g(r,(o=o||{}).status)?"":o.status,a=-1===g(e,o.position)?"bottom-end":o.position,u=void 0===o.assertive?"danger"===i:!!o.assertive;i&&!o.title&&l('тост со статусом "'+i+'" без title: статус остался одним цветом, а он не переживает чёрно-белую печать и дальтонизм');var s=function(e,r,n){var o=f("div",n?"gr-toast gr-toast-"+n:"gr-toast");if(r.icon){var i=f("span","gr-toast-icon");i.setAttribute("aria-hidden","true"),i.textContent=r.icon,o.appendChild(i)}var a=f("div","gr-toast-body");if(r.title){var u=f("strong","gr-toast-title");u.textContent=r.title,a.appendChild(u)}var s=f("span");if(s.textContent=null==e?"":String(e),a.appendChild(s),o.appendChild(a),!1!==r.dismissible){var c=f("button","gr-btn gr-btn-icon gr-btn-ghost gr-btn-sm");c.setAttribute("type","button"),c.setAttribute(t,""),c.setAttribute("aria-label",r.closeLabel||"Закрыть"),c.textContent="×",o.appendChild(c)}return o}(n,o,i);(function(t,e){for(var r=e?"assertive":"polite",n="gr-toast-region-"+t,o=document.querySelectorAll(".gr-toast-region"),i=0;i<o.length;i++){var a=o[i];if(a.classList.contains(n)&&a.getAttribute("aria-live")===r)return a}var u=f("div","gr-toast-region "+n);return u.setAttribute("aria-live",r),u.setAttribute("role",e?"alert":"status"),document.body.appendChild(u),u})(a,u).appendChild(s);var c=void 0===o.timeout?5e3:Number(o.timeout);return c>0&&v(s,c),s},dismiss:d,tabs:C,version:"0.16.0",_autoStart:function(){try{var t=document.currentScript;if(t&&"false"===t.getAttribute("data-auto"))return}catch(t){}"loading"!==document.readyState?(X(),C()):document.addEventListener("DOMContentLoaded",function(){X(),C()})}};return Y}();"object"==typeof module&&module.exports&&(module.exports=t),"undefined"!=typeof window&&"undefined"!=typeof document&&(window.Griffincss||(window.Griffincss={}),window.Griffincss.ui=t,t._autoStart())}();
2
+ (()=>{"use strict";var t=(()=>{var t="data-gr-dismiss",e=["top-start","top-end","bottom-start","bottom-end"],r=["info","success","warning","danger"],n="data-gr-tabs",o=!1,i=null;function a(t){i=t.target}var u={};function s(t,e,r){u[t]||(u[t]=[]),u[t].push({selector:e,handler:r})}function l(t){for(var e=u[t.type]||[],r=0;r<e.length;r++){var n=c(t.target,e[r].selector);if(n&&!0===e[r].handler(t,n))return}}function c(t,e){if(!t)return null;if("function"==typeof t.closest)return t.closest(e);for(var r=t;r;){if("function"==typeof r.matches&&r.matches(e))return r;r=r.parentNode}return null}function f(t){"undefined"!=typeof console&&console.warn&&console.warn("Griffincss UI: "+t)}function d(t,e){var r=document.createElement(t);return e&&e.split(" ").forEach(t=>{r.classList.add(t)}),r}function g(t,e,r){return-1===t.indexOf(e)?r:e}function v(t,e,r){try{(e&&"function"==typeof e.dispatchEvent?e:document).dispatchEvent(new CustomEvent(t,{detail:r,bubbles:!0}))}catch(t){}}function b(t){return!!t&&(t.classList&&t.classList.contains("gr-toast")?(h(t),!0):("function"==typeof t.remove&&t.remove(),!0))}function p(t,e){t.grToastRest=e,t.grToastFrom=y(),t.grToastTimer=setTimeout(()=>{h(t)},e)}function m(t){t.grToastTimer&&(clearTimeout(t.grToastTimer),t.grToastTimer=null)}function y(){return"undefined"!=typeof Date&&Date.now?Date.now():0}function h(t){t.grToastLeaving||(t.grToastLeaving=!0,m(t),t.classList&&t.classList.add("gr-toast-leaving"),setTimeout(()=>{"function"==typeof t.remove&&t.remove()},300))}function A(t,e){(t=>{t&&!t.grToastLeaving&&t.grToastTimer&&(m(t),t.grToastRest=Math.max(0,t.grToastRest-(y()-t.grToastFrom)))})(e)}function T(t,e){((t,e)=>{for(var r=e;r;){if(r===t)return!0;r=r.parentNode}return!1})(e,t.relatedTarget)||(t=>{!t||t.grToastLeaving||t.grToastTimer||t.grToastRest&&p(t,t.grToastRest)})(e)}var w=0;function L(t){for(var e=(t||document).querySelectorAll("["+n+"]"),r=0;r<e.length;r++)C(e[r]);return G}function C(t){var e=t.querySelectorAll(".gr-tab");if(e.length){var r=t.querySelectorAll(".gr-tablist");r.length&&r[0].setAttribute("role","tablist");for(var n=0,o=0;o<e.length;o++){var i=e[o],a=S(i);i.setAttribute("role","tab"),i.getAttribute("id")||i.setAttribute("id","gr-tab-"+ ++w),a&&(i.setAttribute("aria-controls",a.getAttribute("id")),a.setAttribute("role","tabpanel"),a.setAttribute("aria-labelledby",i.getAttribute("id")),a.setAttribute("tabindex","0")),(i.hasAttribute("aria-current")||"true"===i.getAttribute("aria-selected"))&&(n=o)}x(e,n,!1,!0)}}function S(t){var e=t.getAttribute("href"),r=t.getAttribute("aria-controls");return!r&&e&&"#"===e.charAt(0)&&(r=e.slice(1)),r?document.getElementById(r):null}function x(t,e,r,n){for(var o=0;o<t.length;o++){var i=t[o],a=o===e,u=S(i);i.setAttribute("aria-selected",a?"true":"false"),i.setAttribute("tabindex",a?"0":"-1"),i.removeAttribute("aria-current"),u&&(a?u.removeAttribute("hidden"):u.setAttribute("hidden",""))}r&&"function"==typeof t[e].focus&&t[e].focus(),n||v("griffincss:tabchange",t[e],{index:e,tab:t[e],panel:S(t[e])})}function D(t){return"true"===t.getAttribute("aria-disabled")||t.hasAttribute("disabled")}function E(t,e,r){for(var n=e,o=0;o<t.length;o++)if(!D(t[n=(n+r+t.length)%t.length]))return n;return e}function q(t,e){return E(t,e>0?-1:t.length,e)}function R(t,e){return Array.prototype.indexOf.call(t,e)}function k(){return o||(o=!0,O("addEventListener")),G}function O(t){for(var e in document[t]("pointerdown",a,!0),u)Object.prototype.hasOwnProperty.call(u,e)&&document[t](e,l)}s("click","["+t+"]",(e,r)=>{var n=r.getAttribute(t),o=n?"function"==typeof document.querySelector?document.querySelector(n):null:c(r,".gr-toast,.gr-alert,.gr-tag");return o?(b(o),!0):(f("крестику нечего закрывать: ни цели в data-gr-dismiss, ни сообщения вокруг"),!0)}),s("click",".gr-tab",(t,e)=>{var r=c(e,"["+n+"]");if(!r)return!1;if(D(e))return"function"==typeof t.preventDefault&&t.preventDefault(),!0;var o=r.querySelectorAll(".gr-tab"),i=R(o,e);return-1!==i&&("function"==typeof t.preventDefault&&t.preventDefault(),x(o,i,!1),!0)}),s("click","dialog[data-gr-overlay-close]",(t,e)=>!(t.target!==e||"function"!=typeof e.close||null!==i&&i!==e||!((t,e)=>{if("function"!=typeof t.getBoundingClientRect)return!1;var r=t.getBoundingClientRect();return!(!r||!r.width&&!r.height||"number"!=typeof e.clientX||"number"!=typeof e.clientY||0===e.clientX&&0===e.clientY||!(e.clientX<r.left||e.clientX>r.right||e.clientY<r.top||e.clientY>r.bottom))})(e,t)||(e.close("overlay"),0))),s("keydown",".gr-tab",(t,e)=>{var r=c(e,"["+n+"]");if(!r)return!1;var o=r.querySelectorAll(".gr-tab"),i=R(o,e);if(-1===i)return!1;var a=i,u=t.key;if("ArrowRight"===u||"ArrowDown"===u)a=E(o,i,1);else if("ArrowLeft"===u||"ArrowUp"===u)a=E(o,i,-1);else if("Home"===u)a=q(o,1);else{if("End"!==u)return!1;a=q(o,-1)}return"function"==typeof t.preventDefault&&t.preventDefault(),x(o,a,!0),!0}),s("pointerover",".gr-toast",A),s("focusin",".gr-toast",A),s("pointerout",".gr-toast",T),s("focusout",".gr-toast",T);var G={start:k,destroy:()=>o?(o=!1,i=null,O("removeEventListener"),G):G,toast:(n,o)=>{var i=g(r,(o=o||{}).status,""),a=g(e,o.position,"bottom-end"),u=void 0===o.assertive?"danger"===i:!!o.assertive;i&&!o.title&&f('тост со статусом "'+i+'" без title: статус остался одним цветом, а он не переживает чёрно-белую печать и дальтонизм');var s=((e,r,n)=>{var o=d("div",n?"gr-toast gr-toast-"+n:"gr-toast");if(r.icon){var i=d("span","gr-toast-icon");i.setAttribute("aria-hidden","true"),i.textContent=r.icon,o.appendChild(i)}var a=d("div","gr-toast-body");if(r.title){var u=d("strong","gr-toast-title");u.textContent=r.title,a.appendChild(u)}var s=d("span");if(s.textContent=null==e?"":String(e),a.appendChild(s),o.appendChild(a),!1!==r.dismissible){var l=d("button","gr-btn gr-btn-icon gr-btn-ghost gr-btn-sm");l.setAttribute("type","button"),l.setAttribute(t,""),l.setAttribute("aria-label",r.closeLabel||"Закрыть"),l.textContent="×",o.appendChild(l)}return o})(n,o,i);((t,e)=>{for(var r=e?"assertive":"polite",n="gr-toast-region-"+t,o=document.querySelectorAll(".gr-toast-region"),i=0;i<o.length;i++){var a=o[i];if(a.classList.contains(n)&&a.getAttribute("aria-live")===r)return a}var u=d("div","gr-toast-region "+n);return u.setAttribute("aria-live",r),u.setAttribute("role",e?"alert":"status"),document.body.appendChild(u),u})(a,u).appendChild(s);var l=void 0===o.timeout?5e3:Number(o.timeout);return l>0&&p(s,l),v("griffincss:toast",s,{node:s,status:i||null,position:a}),s},dismiss:b,tabs:L,version:"0.19.0",_autoStart:()=>{try{var t=document.currentScript;if(t&&"false"===t.getAttribute("data-auto"))return}catch(t){}"loading"!==document.readyState?(k(),L()):document.addEventListener("DOMContentLoaded",()=>{k(),L()})}};return G})();"object"==typeof module&&module.exports&&(module.exports=t),"undefined"!=typeof window&&"undefined"!=typeof document&&(window.Griffincss||(window.Griffincss={}),window.Griffincss.ui=t,t._autoStart())})();
3
3
  //# sourceMappingURL=griffincss-ui.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["api","DISMISS_ATTR","TOAST_POSITIONS","TOAST_STATUSES","TABS_ATTR","started","pressed","onPointerDown","event","target","onClick","node","trigger","closest","selector","getAttribute","document","querySelector","dismiss","warn","dismissFrom","tab","group","disabled","preventDefault","tabs","querySelectorAll","index","indexOfNode","select","onTabClick","dialog","tagName","close","hasAttribute","getBoundingClientRect","rect","width","height","clientX","clientY","left","right","top","bottom","outsideBox","current","matches","parentNode","contains","root","message","console","element","tag","className","createElement","names","split","i","length","classList","add","leave","remove","indexOf","list","value","startTimer","rest","grToastRest","grToastFrom","now","grToastTimer","setTimeout","stopTimer","clearTimeout","Date","pauseToast","grToastLeaving","Math","max","resumeToast","onPointerOver","onPointerOut","relatedTarget","onFocusIn","onFocusOut","tabsSeq","initTabs","groups","initGroup","publicApi","lists","setAttribute","selected","panel","panelOf","href","id","charAt","slice","getElementById","focus","on","removeAttribute","step","from","delta","edge","onKeyDown","next","key","start","addEventListener","destroy","removeEventListener","toast","text","options","status","position","urgent","undefined","assertive","title","icon","textContent","appendChild","body","line","String","dismissible","closeLabel","buildToast","live","wanted","existing","region","created","ensureRegion","timeout","Number","version","_autoStart","script","currentScript","e","readyState","factory","module","exports","window","Griffincss","ui"],"sources":["src/griffincss-ui.js"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["api","DISMISS_ATTR","TOAST_POSITIONS","TOAST_STATUSES","TABS_ATTR","started","pressed","onPointerDown","event","target","registry","register","type","selector","handler","push","dispatch","entries","i","length","node","closest","current","matches","parentNode","warn","message","console","element","tag","className","document","createElement","split","forEach","name","classList","add","oneOf","list","value","fallback","indexOf","emitEvent","detail","dispatchEvent","CustomEvent","bubbles","e","dismiss","contains","leave","remove","startTimer","rest","grToastRest","grToastFrom","now","grToastTimer","setTimeout","stopTimer","clearTimeout","Date","grToastLeaving","onToastEnter","Math","max","pauseToast","onToastLeave","root","relatedTarget","resumeToast","tabsSeq","initTabs","groups","querySelectorAll","initGroup","publicApi","group","tabs","lists","setAttribute","selected","tab","panel","panelOf","getAttribute","hasAttribute","select","href","id","charAt","slice","getElementById","index","focus","silent","on","removeAttribute","disabled","step","from","delta","edge","indexOfNode","Array","prototype","call","start","listen","method","Object","hasOwnProperty","trigger","querySelector","preventDefault","dialog","close","getBoundingClientRect","rect","width","height","clientX","clientY","left","right","top","bottom","outsideBox","next","key","destroy","toast","text","options","status","position","urgent","undefined","assertive","title","icon","textContent","appendChild","body","line","String","dismissible","closeLabel","buildToast","live","wanted","existing","region","created","ensureRegion","timeout","Number","version","_autoStart","script","currentScript","readyState","addEventListener","factory","module","exports","window","Griffincss","ui"],"sources":["src/griffincss-ui.js"],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "griffincss-ui",
3
- "version": "0.16.0",
3
+ "version": "0.19.0",
4
4
  "description": "Griffincss UI — компоненты интерфейса: кнопки, поля, карточки, таблицы, статусы; на токенах ядра, с обеими темами и режимом для слабовидящих",
5
5
  "homepage": "https://gitverse.ru/BarneyScott/GriffinCSS",
6
6
  "repository": {
@@ -31,7 +31,7 @@
31
31
  "src/"
32
32
  ],
33
33
  "peerDependencies": {
34
- "griffincss-core": "^0.16.0"
34
+ "griffincss-core": "^0.19.0"
35
35
  },
36
36
  "keywords": [
37
37
  "css",
@@ -48,6 +48,6 @@
48
48
  "build": "npm run build:css && npm run build:scoped && npm run build:js",
49
49
  "build:css": "sass scss/griffincss-ui.scss dist/griffincss-ui.css --load-path=../../node_modules --style=compressed --no-source-map",
50
50
  "build:scoped": "sass scss/griffincss-ui-scoped.scss dist/griffincss-ui-scoped.css --load-path=../../node_modules --style=compressed --no-source-map",
51
- "build:js": "terser src/griffincss-ui.js -c passes=3 -m --comments false --format \"preamble='/*! Griffincss UI | MIT | https://gitverse.ru/BarneyScott/GriffinCSS */'\" --source-map \"url='griffincss-ui.js.map'\" -o dist/griffincss-ui.js"
51
+ "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"
52
52
  }
53
53
  }
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Griffincss UI — Runtime v0.16.0
2
+ * Griffincss UI — Runtime v0.19.0
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.16.0';
53
+ var VERSION = '0.19.0';
54
54
 
55
55
  var OVERLAY_ATTR = 'data-gr-overlay-close';
56
56
 
@@ -84,10 +84,6 @@
84
84
  // начатое в окне и законченное за его краем, щелчком по подложке не является.
85
85
  var pressed = null;
86
86
 
87
- function isDialog(node) {
88
- return !!node && node.tagName === 'DIALOG' && typeof node.close === 'function';
89
- }
90
-
91
87
  // Щелчок по подложке приходит на сам <dialog>: подложка — его псевдоэлемент,
92
88
  // собственной цели у неё нет. Отличить её от полей окна можно только
93
89
  // по координатам.
@@ -118,27 +114,46 @@
118
114
  pressed = event.target;
119
115
  }
120
116
 
121
- function onClick(event) {
122
- // Три разных щелчка приходят одним событием, и порядок разбора значим:
123
- // крестик внутри окна не должен считаться щелчком по подложке,
124
- // а вкладка-ссылка не должна уводить страницу к якорю.
125
- var trigger = closest(event.target, '[' + DISMISS_ATTR + ']');
117
+ // Щелчок по подложке: обе половины щелчка пришлись на сам <dialog>
118
+ // и легли вне его прямоугольника. closest здесь недостаточен щелчок
119
+ // по содержимому окна тоже нашёл бы диалог, поэтому цель события
120
+ // сверяется с найденным узлом напрямую. Что это <dialog>, гарантирует
121
+ // селектор регистрации; проверить остаётся только наличие close().
122
+ function onOverlayClick(event, dialog) {
123
+ if (event.target !== dialog) return false;
124
+ if (typeof dialog.close !== 'function') return false;
125
+ if (pressed !== null && pressed !== dialog) return false;
126
+ if (!outsideBox(dialog, event)) return false;
126
127
 
127
- if (trigger) {
128
- dismissFrom(trigger);
129
- return;
130
- }
128
+ dialog.close(OVERLAY_REASON);
131
129
 
132
- if (onTabClick(event)) return;
130
+ return true;
131
+ }
133
132
 
134
- var dialog = event.target;
133
+ // --- Реестр делегирования ---------------------------------------------------
135
134
 
136
- if (!isDialog(dialog)) return;
137
- if (!dialog.hasAttribute(OVERLAY_ATTR)) return;
138
- if (pressed !== null && pressed !== dialog) return;
139
- if (!outsideBox(dialog, event)) return;
135
+ // Компонент объявляет {событие, селектор, обработчик}; диспетчер один
136
+ // на тип события. Обработчик получает (event, node) — node найден
137
+ // closest по селектору и возвращает true, когда событие обработано
138
+ // и очередь дальше не идёт. Порядок регистрации значим: крестик внутри
139
+ // окна не должен считаться щелчком по подложке, а вкладка-ссылка
140
+ // не должна уводить страницу к якорю.
141
+ var registry = {}; // тип события → [{selector, handler}]
140
142
 
141
- dialog.close(OVERLAY_REASON);
143
+ function register(type, selector, handler) {
144
+ if (!registry[type]) registry[type] = [];
145
+
146
+ registry[type].push({ selector: selector, handler: handler });
147
+ }
148
+
149
+ function dispatch(event) {
150
+ var entries = registry[event.type] || [];
151
+
152
+ for (var i = 0; i < entries.length; i++) {
153
+ var node = closest(event.target, entries[i].selector);
154
+
155
+ if (node && entries[i].handler(event, node) === true) return;
156
+ }
142
157
  }
143
158
 
144
159
  // --- Общее ------------------------------------------------------------------
@@ -172,23 +187,36 @@
172
187
  }
173
188
 
174
189
  function warn(message) {
175
- if (typeof console !== 'undefined' && console && typeof console.warn === 'function') {
176
- console.warn('Griffincss UI: ' + message);
177
- }
190
+ if (typeof console !== 'undefined' && console.warn) console.warn('Griffincss UI: ' + message);
178
191
  }
179
192
 
180
193
  function element(tag, className) {
181
194
  var node = document.createElement(tag);
182
195
 
183
196
  if (className) {
184
- var names = className.split(' ');
185
-
186
- for (var i = 0; i < names.length; i++) node.classList.add(names[i]);
197
+ className.split(' ').forEach(function (name) { node.classList.add(name); });
187
198
  }
188
199
 
189
200
  return node;
190
201
  }
191
202
 
203
+ // Значение из закрытого списка или дефолт: чужое значение не должно
204
+ // уехать в имя класса.
205
+ function oneOf(list, value, fallback) {
206
+ return list.indexOf(value) === -1 ? fallback : value;
207
+ }
208
+
209
+ // Событие компонента — по образцу griffincss:themechange у рантайма
210
+ // темы. Диспетчеризуется на самом узле со всплытием; если окружение
211
+ // не даёт dispatchEvent на узле, уходит с документа.
212
+ function emitEvent(name, node, detail) {
213
+ try {
214
+ var target = node && typeof node.dispatchEvent === 'function' ? node : document;
215
+
216
+ target.dispatchEvent(new CustomEvent(name, { detail: detail, bubbles: true }));
217
+ } catch (e) { /* окружение без CustomEvent */ }
218
+ }
219
+
192
220
  // --- Закрытие крестиком -----------------------------------------------------
193
221
 
194
222
  // Цель задаётся значением атрибута, если она не предок кнопки:
@@ -196,8 +224,10 @@
196
224
  // <button data-gr-dismiss="#banner">×</button>
197
225
  //
198
226
  // Пустое значение — обычный случай: убрать ближайшее сообщение,
199
- // внутри которого стоит сам крестик.
200
- function dismissFrom(trigger) {
227
+ // внутри которого стоит сам крестик. Сигнатура — как у обработчика
228
+ // реестра: регистрируется напрямую, и щелчок по крестику обработан
229
+ // всегда, даже когда закрывать оказалось нечего.
230
+ function dismissFrom(event, trigger) {
201
231
  var selector = trigger.getAttribute(DISMISS_ATTR);
202
232
  var target = selector
203
233
  ? (typeof document.querySelector === 'function' ? document.querySelector(selector) : null)
@@ -205,10 +235,12 @@
205
235
 
206
236
  if (!target) {
207
237
  warn('крестику нечего закрывать: ни цели в data-gr-dismiss, ни сообщения вокруг');
208
- return;
238
+ return true;
209
239
  }
210
240
 
211
241
  dismiss(target);
242
+
243
+ return true;
212
244
  }
213
245
 
214
246
  // Тост уходит движением — у него для этого есть класс и переход;
@@ -303,8 +335,8 @@
303
335
  function toast(text, options) {
304
336
  options = options || {};
305
337
 
306
- var status = indexOf(TOAST_STATUSES, options.status) === -1 ? '' : options.status;
307
- var position = indexOf(TOAST_POSITIONS, options.position) === -1 ? 'bottom-end' : options.position;
338
+ var status = oneOf(TOAST_STATUSES, options.status, '');
339
+ var position = oneOf(TOAST_POSITIONS, options.position, 'bottom-end');
308
340
 
309
341
  // Срочность по умолчанию выводится из статуса: ошибка перебивает
310
342
  // текущее чтение, остальное ждёт своей очереди.
@@ -323,15 +355,9 @@
323
355
 
324
356
  if (timeout > 0) startTimer(node, timeout);
325
357
 
326
- return node;
327
- }
328
-
329
- function indexOf(list, value) {
330
- for (var i = 0; i < list.length; i++) {
331
- if (list[i] === value) return i;
332
- }
358
+ emitEvent('griffincss:toast', node, { node: node, status: status || null, position: position });
333
359
 
334
- return -1;
360
+ return node;
335
361
  }
336
362
 
337
363
  // Таймер живёт на самом узле: тостов на экране бывает несколько,
@@ -384,31 +410,17 @@
384
410
  }, TOAST_LEAVE);
385
411
  }
386
412
 
387
- // pointerover / pointerout, а не enter / leave: эти всплывают, и хватает
388
- // одного слушателя на документ. Переход между частями одного тоста
389
- // не уход: relatedTarget внутри того же узла.
390
- function onPointerOver(event) {
391
- pauseToast(closest(event.target, '.gr-toast'));
392
- }
393
-
394
- function onPointerOut(event) {
395
- var node = closest(event.target, '.gr-toast');
396
-
397
- if (!node || contains(node, event.relatedTarget)) return;
398
-
399
- resumeToast(node);
413
+ // pointerover / pointerout и focusin / focusout, а не enter / leave и
414
+ // focus / blur: эти всплывают, и хватает одного слушателя на документ.
415
+ // Пара обработчиков одна на указатель и фокус — реестр вешает её на оба
416
+ // типа события. Переход между частями одного тоста — не уход:
417
+ // relatedTarget внутри того же узла.
418
+ function onToastEnter(event, node) {
419
+ pauseToast(node);
400
420
  }
401
421
 
402
- function onFocusIn(event) {
403
- pauseToast(closest(event.target, '.gr-toast'));
404
- }
405
-
406
- function onFocusOut(event) {
407
- var node = closest(event.target, '.gr-toast');
408
-
409
- if (!node || contains(node, event.relatedTarget)) return;
410
-
411
- resumeToast(node);
422
+ function onToastLeave(event, node) {
423
+ if (!contains(node, event.relatedTarget)) resumeToast(node);
412
424
  }
413
425
 
414
426
  // --- Вкладки ----------------------------------------------------------------
@@ -465,7 +477,9 @@
465
477
  }
466
478
  }
467
479
 
468
- select(tabs, selected, false);
480
+ // Тихий выбор: расстановка ролей при инициализации — не действие
481
+ // пользователя, события о ней не шлются.
482
+ select(tabs, selected, false, true);
469
483
  }
470
484
 
471
485
  // Панель — по href="#id" у ссылки или по aria-controls у кнопки.
@@ -479,7 +493,7 @@
479
493
  return document.getElementById(id);
480
494
  }
481
495
 
482
- function select(tabs, index, focus) {
496
+ function select(tabs, index, focus, silent) {
483
497
  for (var i = 0; i < tabs.length; i++) {
484
498
  var tab = tabs[i];
485
499
  var on = i === index;
@@ -500,6 +514,14 @@
500
514
  }
501
515
 
502
516
  if (focus && typeof tabs[index].focus === 'function') tabs[index].focus();
517
+
518
+ if (!silent) {
519
+ emitEvent('griffincss:tabchange', tabs[index], {
520
+ index: index,
521
+ tab: tabs[index],
522
+ panel: panelOf(tabs[index])
523
+ });
524
+ }
503
525
  }
504
526
 
505
527
  function disabled(tab) {
@@ -526,21 +548,17 @@
526
548
  return step(tabs, index, delta);
527
549
  }
528
550
 
529
- function onKeyDown(event) {
530
- var tab = closest(event.target, '.gr-tab');
531
-
532
- if (!tab) return;
533
-
551
+ function onTabKeyDown(event, tab) {
534
552
  var group = closest(tab, '[' + TABS_ATTR + ']');
535
553
 
536
- if (!group) return;
554
+ if (!group) return false;
537
555
 
538
556
  // Список читается заново: вкладки добавляют и убирают вместе
539
557
  // с разметкой, и запомненный при инициализации массив устарел бы молча.
540
558
  var tabs = group.querySelectorAll('.gr-tab');
541
559
  var current = indexOfNode(tabs, tab);
542
560
 
543
- if (current === -1) return;
561
+ if (current === -1) return false;
544
562
 
545
563
  var next = current;
546
564
  var key = event.key;
@@ -551,20 +569,18 @@
551
569
  else if (key === 'ArrowLeft' || key === 'ArrowUp') next = step(tabs, current, -1);
552
570
  else if (key === 'Home') next = edge(tabs, 1);
553
571
  else if (key === 'End') next = edge(tabs, -1);
554
- else return;
572
+ else return false;
555
573
 
556
574
  if (typeof event.preventDefault === 'function') event.preventDefault();
557
575
 
558
576
  select(tabs, next, true);
577
+
578
+ return true;
559
579
  }
560
580
 
561
581
  // Щелчок по вкладке-ссылке переключает панель, а не уводит страницу
562
582
  // к якорю: прыжок сдвинул бы ряд вкладок за верхний край экрана.
563
- function onTabClick(event) {
564
- var tab = closest(event.target, '.gr-tab');
565
-
566
- if (!tab) return false;
567
-
583
+ function onTabClick(event, tab) {
568
584
  var group = closest(tab, '[' + TABS_ATTR + ']');
569
585
 
570
586
  if (!group) return false;
@@ -584,12 +600,9 @@
584
600
  return true;
585
601
  }
586
602
 
603
+ // NodeList не имеет indexOf, но массивный метод работает по нему.
587
604
  function indexOfNode(list, node) {
588
- for (var i = 0; i < list.length; i++) {
589
- if (list[i] === node) return i;
590
- }
591
-
592
- return -1;
605
+ return Array.prototype.indexOf.call(list, node);
593
606
  }
594
607
 
595
608
  // Один делегированный обработчик на документ, а не по слушателю на окно:
@@ -599,17 +612,7 @@
599
612
  if (started) return publicApi;
600
613
 
601
614
  started = true;
602
- document.addEventListener('pointerdown', onPointerDown, true);
603
- document.addEventListener('click', onClick);
604
- document.addEventListener('keydown', onKeyDown);
605
-
606
- // pointerover / pointerout и focusin / focusout всплывают, в отличие
607
- // от enter / leave и focus / blur: одного слушателя на документ хватает
608
- // на все тосты сразу, включая ещё не созданные.
609
- document.addEventListener('pointerover', onPointerOver);
610
- document.addEventListener('pointerout', onPointerOut);
611
- document.addEventListener('focusin', onFocusIn);
612
- document.addEventListener('focusout', onFocusOut);
615
+ listen('addEventListener');
613
616
 
614
617
  return publicApi;
615
618
  }
@@ -619,17 +622,38 @@
619
622
 
620
623
  started = false;
621
624
  pressed = null;
622
- document.removeEventListener('pointerdown', onPointerDown, true);
623
- document.removeEventListener('click', onClick);
624
- document.removeEventListener('keydown', onKeyDown);
625
- document.removeEventListener('pointerover', onPointerOver);
626
- document.removeEventListener('pointerout', onPointerOut);
627
- document.removeEventListener('focusin', onFocusIn);
628
- document.removeEventListener('focusout', onFocusOut);
625
+ listen('removeEventListener');
629
626
 
630
627
  return publicApi;
631
628
  }
632
629
 
630
+ // Подписка и отписка — один список: диспетчер на каждый тип события
631
+ // из реестра плюс перехват нажатия для щелчка по подложке.
632
+ function listen(method) {
633
+ document[method]('pointerdown', onPointerDown, true);
634
+
635
+ for (var type in registry) {
636
+ if (Object.prototype.hasOwnProperty.call(registry, type)) {
637
+ document[method](type, dispatch);
638
+ }
639
+ }
640
+ }
641
+
642
+ // --- Регистрация компонентов ------------------------------------------------
643
+
644
+ // Порядок значим: крестик внутри окна — не щелчок по подложке,
645
+ // вкладка перехватывает щелчок раньше, чем он дойдёт до окна.
646
+ register('click', '[' + DISMISS_ATTR + ']', dismissFrom);
647
+ register('click', '.gr-tab', onTabClick);
648
+ register('click', 'dialog[' + OVERLAY_ATTR + ']', onOverlayClick);
649
+
650
+ register('keydown', '.gr-tab', onTabKeyDown);
651
+
652
+ register('pointerover', '.gr-toast', onToastEnter);
653
+ register('focusin', '.gr-toast', onToastEnter);
654
+ register('pointerout', '.gr-toast', onToastLeave);
655
+ register('focusout', '.gr-toast', onToastLeave);
656
+
633
657
  // Автостарт: только в браузере и только если его не отключили атрибутом
634
658
  // data-auto="false" на теге <script>.
635
659
  function autoStart() {