UNPKG

@esri/calcite-components

Version:

Web Components for Esri's Calcite Design System.

1 lines 5.42 kB
import{h,H as Host}from"./index-8fd57462.js";import{f as focusElement,c as getSlotted,g as getElementDir,a as getElementTheme}from"./dom-d9ba1da4.js";import{d as debounce}from"./debounce-4dee3b1c.js";import{g as getRoundRobinIndex}from"./array-af19adb2.js";import{C as CSS}from"./resources-e06851d2.js";function mutationObserverCallback(){this.setUpItems();this.setUpFilter()}var SUPPORTED_ARROW_KEYS=["ArrowUp","ArrowDown"];function initialize(){this.setUpItems();this.setUpFilter();this.emitCalciteListChange=debounce(internalCalciteListChangeEvent.bind(this),0)}function initializeObserver(){this.observer.observe(this.el,{childList:true,subtree:true})}function cleanUpObserver(){this.observer.disconnect()}function calciteListItemChangeHandler(e){var t=this.selectedValues;var i=e.detail,a=i.item,l=i.value,n=i.selected,r=i.shiftPressed;if(n){if(!this.multiple){this.deselectSiblingItems(a)}if(this.multiple&&r){this.selectSiblings(a)}t.set(l,a)}else{t.delete(l);if(this.multiple&&r){this.selectSiblings(a,true)}}if(!this.multiple){toggleSingleSelectItemTabbing(a,n)}this.lastSelectedItem=a;this.emitCalciteListChange()}function calciteListItemValueChangeHandler(e){e.stopPropagation();var t=e.detail.oldValue;var i=this.selectedValues;if(i.has(t)){var a=i.get(t);i.delete(t);i.set(e.detail.newValue,a)}}function isValidNavigationKey(e){return!!SUPPORTED_ARROW_KEYS.find((function(t){return t===e}))}function keyDownHandler(e){var t=e.key,i=e.target;if(!isValidNavigationKey(t)){return}var a=this,l=a.items,n=a.multiple;var r=l.length;var s=l.indexOf(i);if(!r||s===-1){return}e.preventDefault();var o=getRoundRobinIndex(s+(t==="ArrowUp"?-1:1),r);var u=l[o];toggleSingleSelectItemTabbing(u,true);focusElement(u);if(!n){u.selected=true}}function internalCalciteListChangeEvent(){this.calciteListChange.emit(this.selectedValues)}function removeItem(e){if(e.defaultPrevented){return}var t=e.target;var i=this.selectedValues;if(t.parentElement.tagName==="CALCITE-PICK-LIST-GROUP"){t.parentElement.remove();Array.from(t.parentElement.children).forEach((function(e){return i.delete(e.value)}))}else{t.remove();i.delete(t.value)}this.emitCalciteListChange()}function toggleSingleSelectItemTabbing(e,t){if(t){e.removeAttribute("tabindex")}else{e.setAttribute("tabindex","-1")}}function setFocus(){var e=this,t=e.multiple,i=e.items;if(i.length===0){return}if(t){return i[0].setFocus()}var a=i.find((function(e){return e.selected}));return(a?a:i[0]).setFocus()}function setUpItems(e){var t=this;this.items=Array.from(this.el.querySelectorAll(e));var i=false;var a=this.items;a.forEach((function(e){e.icon=t.getIconType();if(!t.multiple){e.disableDeselect=true;toggleSingleSelectItemTabbing(e,false)}if(e.selected){i=true;toggleSingleSelectItemTabbing(e,true);t.selectedValues.set(e.value,e)}}));var l=a[0];if(!i&&l){toggleSingleSelectItemTabbing(l,true)}}function deselectSiblingItems(e){var t=this;this.items.forEach((function(i){if(i.value!==e.value){i.toggleSelected(false);if(t.selectedValues.has(i.value)){t.selectedValues.delete(i.value)}}}))}function selectSiblings(e,t){var i=this;if(t===void 0){t=false}if(!this.lastSelectedItem){return}var a=this.items;var l=a.findIndex((function(e){return e.value===i.lastSelectedItem.value}));var n=a.findIndex((function(t){return t.value===e.value}));a.slice(Math.min(l,n),Math.max(l,n)).forEach((function(e){e.toggleSelected(!t);if(!t){i.selectedValues.set(e.value,e)}else{i.selectedValues.delete(e.value)}}))}var groups;function handleFilter(e){var t=e.detail;var i=t.map((function(e){return e.value}));if(!groups){groups=new Set}var a=this.items.filter((function(e){var t=e.parentElement;var a=t.matches("calcite-pick-list-group");if(a){groups.add(t)}var l=i.includes(e.value);e.hidden=!l;return l}));groups.forEach((function(e){var t=a.some((function(t){return e.contains(t)}));e.hidden=!t;if(!t){return}var i=getSlotted(e,"parent-item");if(i){i.hidden=false;if(a.includes(i)){Array.from(e.children).forEach((function(e){return e.hidden=false}))}}}));groups.clear()}function getItemData(){return this.items.map((function(e){return{label:e.label,description:e.description,metadata:e.metadata,value:e.value}}))}var __rest=undefined&&undefined.__rest||function(e,t){var i={};for(var a in e)if(Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0)i[a]=e[a];if(e!=null&&typeof Object.getOwnPropertySymbols==="function")for(var l=0,a=Object.getOwnPropertySymbols(e);l<a.length;l++){if(t.indexOf(a[l])<0&&Object.prototype.propertyIsEnumerable.call(e,a[l]))i[a[l]]=e[a[l]]}return i};var List=function(e){var t;var i=e.props,a=i.disabled,l=i.loading,n=i.filterEnabled,r=i.dataForFilter,s=i.handleFilter,o=i.filterPlaceholder,u=i.el,c=__rest(e,["props"]);var d=h("slot",null);return h(Host,Object.assign({"aria-busy":l.toString(),"aria-disabled":a.toString(),role:"menu"},c),h("section",null,h("header",{class:(t={},t[CSS.sticky]=true,t)},n?h("calcite-filter",{"aria-label":o,data:r,dir:getElementDir(u),onCalciteFilterChange:s,placeholder:o}):null,h("slot",{name:"menu-actions"})),l||a?h("calcite-scrim",{loading:l,theme:getElementTheme(u)},d):d))};export{List as L,initializeObserver as a,calciteListItemChangeHandler as b,cleanUpObserver as c,deselectSiblingItems as d,calciteListItemValueChangeHandler as e,setUpItems as f,getItemData as g,handleFilter as h,initialize as i,setFocus as j,keyDownHandler as k,mutationObserverCallback as m,removeItem as r,selectSiblings as s};