UNPKG

3.39 kBJavaScriptView Raw
1!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t(((e="undefined"!=typeof globalThis?globalThis:e||self).htwoo=e.htwoo||{},e.htwoo.select={}))}(this,(function(e){"use strict";e.ariaSelect=e=>{const t=e;console.log("csSelector",t);const o=t.querySelector("input"),i=t.querySelector("ul"),n=i.querySelectorAll("li");t.querySelectorAll("svg");const a=document.querySelector("#custom-select-status"),s=Array.from(n);let c="initial";function r(e){"Open"===e?(i.classList.remove("hidden-all"),t.setAttribute("aria-expanded","true")):(i.classList.add("hidden-all"),t.setAttribute("aria-expanded","false"))}function l(){return document.activeElement}function d(e,t){const i=s.filter((function(e){if(""===e.style.display)return!0}));if(0!==i.length)switch("input"===t&&o.focus(),e){case o:"forward"===t?i[0].focus():"back"===t&&i[i.length-1].focus();break;case n[0]:"forward"===t?i[1].focus():"back"===t&&o.focus();break;case n[n.length-1]:"forward"===t?i[0].focus():"back"===t&&i[i.length-2].focus();break;default:const e=l(),a=i.indexOf(e);if("forward"===t){i[a+1].focus()}else if("back"===t&&a>0){i[a-1].focus()}else o.focus()}}function u(){const e=o.value,t=s.filter((function(t){if(t.innerText.toUpperCase().startsWith(e.toUpperCase()))return!0}));var i;n.forEach((e=>e.style.display="none")),t.forEach((function(e){e.style.display=""})),p("filtered"),i=t.length,a.textContent=i+" options available."}function f(e){const t=e.dataset.value;o.value=t,d(document.activeElement,"input")}function p(e){switch(e){case"initial":c="initial";break;case"opened":c="opened";break;case"filtered":c="filtered";break;case"closed":c="closed"}}t.setAttribute("role","combobox"),t.setAttribute("aria-haspopup","listbox"),t.setAttribute("aria-owns","custom-select-list"),o.setAttribute("aria-autocomplete","both"),o.setAttribute("aria-controls","custom-select-list"),i.setAttribute("role","listbox"),n.forEach((e=>{e.setAttribute("role","option"),e.setAttribute("tabindex","-1")})),a.textContent=n.length+" options available. Arrow down to browse or start typing to filter.",t.addEventListener("click",(function(e){const t=l();switch(c){case"initial":r("Open"),p("opened");break;case"opened":t===o?(r("Shut"),p("initial")):"LI"===t.tagName&&(f(t),r("Shut"),p("closed"));break;case"filtered":"LI"===t.tagName&&(f(t),r("Shut"),p("closed"));break;case"closed":r("Open"),p("filtered")}})),t.addEventListener("keyup",(function(e){!function(e){const t=l();switch(e){case"Enter":"initial"===c?(r("Open"),p("opened")):"opened"===c&&"LI"===t.tagName?(f(t),r("Shut"),p("closed")):"opened"===c&&t===o?(r("Shut"),p("closed")):"filtered"===c&&"LI"===t.tagName?(f(t),r("Shut"),p("closed")):"filtered"===c&&t===o?(r("Open"),p("opened")):(r("Open"),p("filtered"));break;case"Escape":"opened"!==c&&"filtered"!==c||(r("Shut"),p("initial"));break;case"ArrowDown":"initial"===c||"closed"===c?(r("Open"),d(o,"forward"),p("opened")):(r("Open"),d(t,"forward"));break;case"ArrowUp":"initial"===c||"closed"===c?(r("Open"),d(o,"back"),p("opened")):d(t,"back");break;default:"initial"===c?(r("Open"),u(),p("filtered")):"opened"===c||"closed"===c?(u(),p("filtered")):u()}}(e.key)})),document.addEventListener("click",(function(e){e.target.closest(".hoo-select")||(r("Shut"),p("initial"))}))},Object.defineProperty(e,"__esModule",{value:!0})}));