UNPKG

@esri/calcite-components

Version:

Web Components for Esri's Calcite Design System.

3 lines (2 loc) • 19 kB
/* COPYRIGHT Esri - https://js.arcgis.com/5.0/LICENSE.txt */ import{b as A}from"./65RZWCUP.js";import{a as E,b as L,c as I,d as D,f as K,h as b}from"./LUZE3BNW.js";import{j as F}from"./4PBM4ZLG.js";import{a as q,b as W}from"./LWJAXF3D.js";import{a as G}from"./77EQHO2G.js";import{a as g}from"./HXIMHC6U.js";import{a as B}from"./LF4YWM37.js";import{a as z}from"./M6OXKYRM.js";import"./K7LRDT5O.js";import{a as T}from"./WAA77FNZ.js";import{a as N}from"./SQ6RHDDF.js";import{a as U}from"./3XLPUKLV.js";import"./3YEM2IPT.js";import"./QUTTHRH3.js";import"./MNIRD7Q7.js";import{g as R,t as v}from"./ZQBZ5QPB.js";import{a as H}from"./CIYXQ5G6.js";import{D as C,E as M,F as h,L as O,Q as k,g as w,h as d,p}from"./G7AHLVJ5.js";var f={container:"container",table:"table",scrim:"scrim",stack:"stack",tableContainer:"table-container",sticky:"sticky-pos",assistiveText:"assistive-text",containerHeight:"container-height"},y={filterNoResults:"filter-no-results",filterActionsStart:"filter-actions-start",filterActionsEnd:"filter-actions-end"},_=w`:host([disabled]){cursor:default;-webkit-user-select:none;user-select:none;opacity:var(--calcite-opacity-disabled)}:host([disabled]) *,:host([disabled]) ::slotted(*){pointer-events:none}:host{display:block}:host([scale=s]){--calcite-internal-list-action-spacing: var(--calcite-spacing-xxs)}:host([scale=m]){--calcite-internal-list-action-spacing: var(--calcite-spacing-xxs)}:host([scale=l]){--calcite-internal-list-action-spacing: var(--calcite-spacing-xs)}:host([disabled]) ::slotted([calcite-hydrated][disabled]),:host([disabled]) [calcite-hydrated][disabled]{opacity:1}.interaction-container{display:contents}.container{position:relative;background-color:var(--calcite-list-background-color, var(--calcite-color-foreground-1))}.container-height{block-size:100%}.table-container{box-sizing:border-box;display:flex;inline-size:100%;flex-direction:column;background-color:transparent}.table-container *{box-sizing:border-box}.table{inline-size:100%}.stack{--calcite-stack-padding-inline: 0;--calcite-stack-padding-block: 0}.sticky-pos{position:sticky;inset-block-start:0px;z-index:var(--calcite-z-index-sticky);background-color:var(--calcite-list-background-color, var(--calcite-color-foreground-1))}.assistive-text{position:absolute;inline-size:1px;block-size:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}::slotted(:is(calcite-action[slot=filter-actions-start],calcite-action[slot=filter-actions-end])){gap:var(--calcite-internal-list-action-spacing);align-self:center}::slotted(calcite-action[slot=filter-actions-start]){margin-inline-start:var(--calcite-internal-list-action-spacing)}::slotted(calcite-action[slot=filter-actions-end]){margin-inline-end:var(--calcite-internal-list-action-spacing)}:host([hidden]){display:none}[hidden]{display:none}`,j=`${L}, ${I}`,P=class extends M{constructor(){super(),this.dragSelector=I,this.focusableItems=[],this.handleSelector="calcite-sort-handle",this.listItems=[],this.listItemGroups=[],this.mutationObserver=T("mutation",()=>{this.willPerformFilter=!0,this.updateListItemsDebounced()}),this.cancelable=B()(this),this.updateListItemsDebounced=z(this.updateListItems,O.nextTick),this.visibleItems=[],this.willFilterEmit=!1,this.willPerformFilter=!1,this.messages=N({blocking:!0}),this.focusSetter=U()(this),this.interactiveContainer=G(this),this.dataForFilter=[],this.hasFilterActionsEnd=!1,this.hasFilterActionsStart=!1,this.hasFilterNoResults=!1,this.sortHandleMenuItems=[],this.disabled=!1,this.dragEnabled=!1,this.filterEnabled=!1,this.filterText="",this.filteredData=[],this.filteredItems=[],this.interactionMode="interactive",this.loading=!1,this.displayMode="flat",this.scale="m",this.selectedItems=[],this.selectionAppearance="icon",this.selectionMode="none",this.sortDisabled=!1,this.calciteInternalListDefaultSlotChange=p({cancelable:!1}),this.calciteListChange=p({cancelable:!1}),this.calciteListDragEnd=p({cancelable:!1}),this.calciteListDragStart=p({cancelable:!1}),this.calciteListFilter=p({cancelable:!1}),this.calciteListMoveHalt=p({cancelable:!1}),this.calciteListOrderChange=p({cancelable:!1}),this.listen("calciteInternalListItemToggle",this.handleCalciteListItemToggle),this.listen("calciteInternalFocusPreviousItem",this.handleCalciteInternalFocusPreviousItem),this.listen("calciteInternalListItemActive",this.handleCalciteInternalListItemActive),this.listen("calciteListItemSelect",this.handleCalciteListItemSelect),this.listen("calciteInternalAssistiveTextChange",this.handleCalciteInternalAssistiveTextChange),this.listen("calciteListItemSortHandleBeforeOpen",this.updateListItemsDebounced),this.listen("calciteSortHandleReorder",this.handleSortReorder),this.listen("calciteSortHandleMove",this.handleSortMove),this.listen("calciteSortHandleAdd",this.handleSortAdd),this.listen("calciteInternalListItemSelect",this.handleCalciteInternalListItemSelect),this.listen("calciteInternalListItemSelectMultiple",this.handleCalciteInternalListItemSelectMultiple),this.listen("calciteInternalListItemChange",this.handleCalciteInternalListItemChange),this.listen("calciteInternalListItemGroupDefaultSlotChange",this.handleCalciteInternalListItemGroupDefaultSlotChange)}static{this.properties={assistiveText:[16,{},{state:!0}],dataForFilter:[16,{},{state:!0}],hasFilterActionsEnd:[16,{},{state:!0}],hasFilterActionsStart:[16,{},{state:!0}],hasFilterNoResults:[16,{},{state:!0}],sortHandleMenuItems:[16,{},{state:!0}],canPull:[0,{},{attribute:!1}],canPut:[0,{},{attribute:!1}],disabled:[7,{},{reflect:!0,type:Boolean}],dragEnabled:[7,{},{reflect:!0,type:Boolean}],filterEnabled:[7,{},{reflect:!0,type:Boolean}],filterPredicate:[0,{},{attribute:!1}],filterLabel:[3,{},{reflect:!0}],filterPlaceholder:[3,{},{reflect:!0}],filterProps:[0,{},{attribute:!1}],filterText:[3,{},{reflect:!0}],filteredData:[0,{},{attribute:!1}],filteredItems:[0,{},{attribute:!1}],group:[3,{},{reflect:!0}],interactionMode:[3,{},{reflect:!0}],label:1,loading:[7,{},{reflect:!0,type:Boolean}],messageOverrides:[0,{},{attribute:!1}],displayMode:[3,{},{reflect:!0}],numberingSystem:1,scale:[3,{},{reflect:!0}],selectedItems:[0,{},{attribute:!1}],selectionAppearance:[3,{},{reflect:!0}],selectionMode:[3,{},{reflect:!0}],sortDisabled:[7,{},{reflect:!0,type:Boolean}]}}static{this.styles=_}get hasActiveFilter(){return this.filterEnabled&&this.filterText&&this.filteredItems.length!==this.visibleItems.length}get showNoResultsContainer(){return this.filterEnabled&&this.filterText&&this.hasFilterNoResults&&this.visibleItems.length&&!this.filteredItems.length}get effectiveFilterProps(){return this.filterProps?this.filterProps.filter(t=>t!=="el"):["description","label","metadata","heading"]}emitOrderChangeEvent(t){this.calciteListOrderChange.emit(t)}async setFocus(t){return this.focusSetter(()=>this.filterEnabled?this.filterEl:this.focusableItems.find(e=>e.active),t)}connectedCallback(){super.connectedCallback(),this.connectObserver(),this.willPerformFilter=!0,this.updateListItemsDebounced(),this.setUpSorting(),this.setParentList(),this.setListItemGroups(),this.cancelable.add(this.updateListItemsDebounced)}async load(){this.handleInteractionModeWarning()}willUpdate(t){(t.has("filterText")||t.has("filterProps")||t.has("filterPredicate"))&&this.performFilter(),(t.has("filterEnabled")&&(this.hasUpdated||this.filterEnabled!==!1)||t.has("group")||t.has("sortDisabled")&&(this.hasUpdated||this.sortDisabled!==!1)||t.has("dragEnabled")&&(this.hasUpdated||this.dragEnabled!==!1)||t.has("selectionMode")&&(this.hasUpdated||this.selectionMode!=="none")||t.has("selectionAppearance")&&(this.hasUpdated||this.selectionAppearance!=="icon")||t.has("displayMode")&&this.hasUpdated||t.has("scale")&&this.hasUpdated||t.has("canPull")&&this.hasUpdated||t.has("canPut")&&this.hasUpdated||t.has("filterPredicate")&&this.hasUpdated)&&this.handleListItemChange()}disconnectedCallback(){super.disconnectedCallback(),this.disconnectObserver(),W(this)}updateListItems(){this.updateGroupItems();let{selectionAppearance:t,selectionMode:e,interactionMode:i,dragEnabled:a,el:s,filterEl:n,displayMode:l,scale:r,sortDisabled:c,sortHandleMenuItems:u}=this,m=Array.from(this.el.querySelectorAll(I)),S=s,$=Array.from(S.children).filter(b);if(m.forEach(o=>{o.scale=r,o.selectionAppearance=t,o.selectionMode=e,o.interactionMode=i,o.closest(E)===s&&(o.moveToItems=u.filter(x=>this.validateSortMenuItem({type:"move",fromEl:S,toEl:x.element,dragEl:o,newIndex:0,oldIndex:$.indexOf(o)})),o.addToItems=this.sortHandleMenuItems.filter(x=>this.validateSortMenuItem({type:"add",fromEl:S,toEl:x.element,dragEl:o,newIndex:0,oldIndex:$.indexOf(o)})),o.dragHandle=a,o.displayMode=l,o.sortDisabled=c)}),this.parentListEl){this.setUpSorting();return}this.listItems=m,this.filterEnabled&&this.willPerformFilter&&(this.willPerformFilter=!1,this.dataForFilter=this.getItemData(),n&&(n.items=this.dataForFilter,this.filterAndUpdateData())),this.visibleItems=this.listItems.filter(o=>!o.closed&&!o.hidden),this.updateFilteredItems(),this.borderItems(),this.focusableItems=this.filteredItems.filter(o=>!o.disabled),this.setActiveListItem(),this.updateSelectedItems(),this.setUpSorting()}handleListItemChange(){this.willPerformFilter=!0,this.updateListItemsDebounced()}handleCalciteListItemToggle(t){this.parentListEl||(t.stopPropagation(),this.borderItems())}handleCalciteInternalFocusPreviousItem(t){if(this.parentListEl)return;t.stopPropagation();let{focusableItems:e}=this,a=e.findIndex(s=>s.active)-1;e[a]&&this.focusRow(e[a])}handleCalciteInternalListItemActive(t){if(this.parentListEl)return;t.stopPropagation();let e=t.target,{listItems:i}=this;i.forEach(a=>{a.active=a===e})}handleCalciteListItemSelect(){this.parentListEl||this.updateSelectedItems(!0)}handleCalciteInternalAssistiveTextChange(t){this.assistiveText=t.detail.message,t.stopPropagation()}handleSortReorder(t){this.parentListEl||t.defaultPrevented||(t.preventDefault(),this.handleReorder(t))}handleSortAdd(t){this.parentListEl||t.defaultPrevented||(t.preventDefault(),this.handleAdd(t))}handleSortMove(t){this.parentListEl||t.defaultPrevented||(t.preventDefault(),this.handleMove(t))}handleCalciteInternalListItemSelect(t){if(this.parentListEl)return;t.stopPropagation();let e=t.target,{listItems:i,selectionMode:a}=this;e.selected&&(a==="single"||a==="single-persist")&&i.forEach(s=>s.selected=s===e),this.updateSelectedItems()}handleCalciteInternalListItemSelectMultiple(t){if(this.parentListEl)return;t.stopPropagation();let{target:e,detail:i}=t,{focusableItems:a,lastSelectedInfo:s}=this,n=e;if(i.selectMultiple&&s){let l=a.indexOf(n),r=a.indexOf(s.selectedItem),c=Math.min(r,l),u=Math.max(r,l);a.slice(c,u+1).forEach(m=>m.selected=s.selected)}else this.lastSelectedInfo={selectedItem:n,selected:n.selected}}handleCalciteInternalListItemChange(t){this.parentListEl||(t.stopPropagation(),this.updateListItemsDebounced())}handleCalciteInternalListItemGroupDefaultSlotChange(t){t.stopPropagation()}connectObserver(){this.mutationObserver?.observe(this.el,{childList:!0,subtree:!0})}disconnectObserver(){this.mutationObserver?.disconnect()}setUpSorting(){let{dragEnabled:t,defaultSlotEl:e}=this;t&&(e&&K(e),q(this))}onGlobalDragStart(){this.disconnectObserver()}onGlobalDragEnd(){this.connectObserver()}onDragEnd(t){this.calciteListDragEnd.emit(t)}onDragStart(t){t.dragEl.sortHandleOpen=!1,this.calciteListDragStart.emit(t)}onDragSort(t){this.setParentList(),this.updateListItemsDebounced(),this.calciteListOrderChange.emit(t)}setParentList(){this.parentListEl=this.el.parentElement?.closest(E)}handleDefaultSlotChange(){this.parentListEl&&this.calciteInternalListDefaultSlotChange.emit()}setListItemGroups(){this.listItemGroups=Array.from(this.el.querySelectorAll(L))}handleFilterActionsStartSlotChange(t){this.hasFilterActionsStart=v(t)}handleFilterActionsEndSlotChange(t){this.hasFilterActionsEnd=v(t)}handleFilterNoResultsSlotChange(t){this.hasFilterNoResults=v(t)}setActiveListItem(){let{focusableItems:t}=this;t.some(e=>e.active)||t[0]&&(t[0].active=!0)}async updateSelectedItems(t=!1){await this.updateComplete,this.selectedItems=this.visibleItems.filter(e=>e.selected),t&&this.calciteListChange.emit()}filterElements({el:t,filteredItems:e,visibleParents:i}){let a=!i.has(t)&&!e.includes(t);t.filterHidden=a;let s=t.parentElement.closest(j);s&&(a||i.add(s),this.filterElements({el:s,filteredItems:e,visibleParents:i}))}allParentListItemsExpanded(t){let e=t.parentElement?.closest(I);if(e){if(!e.expanded)return!1}else return!0;return this.allParentListItemsExpanded(e)}borderItems(){let t=this.visibleItems.filter(e=>!e.filterHidden&&this.allParentListItemsExpanded(e));t.forEach(e=>e.bordered=e!==t[t.length-1])}updateFilteredItems(){let{visibleItems:t,filteredData:e,filterText:i,filterPredicate:a}=this,s=t?.filter(r=>t.every(c=>c===r||!r.contains(c))),n=a?t.filter(a):i?e.map(r=>r.el):t||[],l=new WeakSet;s.forEach(r=>this.filterElements({el:r,filteredItems:n,visibleParents:l})),this.filteredItems=n,this.willFilterEmit&&(this.willFilterEmit=!1,this.calciteListFilter.emit())}updateFilteredData(){let{filterEl:t}=this;t&&(t.filteredItems&&(this.filteredData=t.filteredItems),this.updateListItemsDebounced())}async filterAndUpdateData(){await this.filterEl?.filter(this.filterText),this.updateFilteredData()}performFilter(){let{filterEl:t,filterText:e,effectiveFilterProps:i}=this;t&&(t.value=e,t.filterProps=i,this.filterAndUpdateData())}setDefaultSlotEl(t){this.defaultSlotEl=t}setFilterEl(t){this.filterEl=t,this.performFilter()}handleFilterChange(t){t.stopPropagation();let{value:e}=t.currentTarget;this.filterText=e,this.willFilterEmit=!0,this.updateFilteredData()}getItemData(){return this.listItems.map(t=>({label:t.label,description:t.description,metadata:t.metadata,heading:this.getGroupHeading(t),el:t}))}getGroupHeading(t){return this.listItemGroups.filter(i=>i.contains(t)).map(i=>i.heading)}updateGroupItems(){let{el:t,group:e,scale:i}=this,a=R(t),s=e?Array.from(a.querySelectorAll(`${E}[group="${e}"]`)).filter(l=>!l.disabled&&l.dragEnabled):[];this.sortHandleMenuItems=s.map(l=>({element:l,label:l.label??l.id,id:H()})),Array.from(this.el.querySelectorAll(L)).forEach(l=>{l.scale=i})}focusRow(t){let{focusableItems:e}=this;t&&(e.forEach(i=>i.active=i===t),t.setFocus())}isNavigable(t){let e=t.parentElement?.closest(I);return e?e.expanded&&this.isNavigable(e):!0}handleListKeydown(t){if(t.defaultPrevented||this.parentListEl)return;let{key:e}=t,i=this.focusableItems.filter(s=>this.isNavigable(s)),a=i.findIndex(s=>s.active);if(e==="ArrowDown"){t.preventDefault();let s=t.target===this.filterEl?0:a+1;i[s]&&this.focusRow(i[s])}else if(e==="ArrowUp"){if(t.preventDefault(),a===0&&this.filterEnabled){this.filterEl.setFocus();return}let s=a-1;i[s]&&this.focusRow(i[s])}else if(e==="Home"){t.preventDefault();let s=i[0];s&&this.focusRow(s)}else if(e==="End"){t.preventDefault();let s=i[i.length-1];s&&this.focusRow(s)}}handleInteractionModeWarning(){this.interactionMode==="static"&&this.selectionMode!=="none"&&this.selectionAppearance==="border"&&console.warn('selection-appearance="border" requires interaction-mode="interactive"')}validateSortMenuItem({fromEl:t,toEl:e,dragEl:i,newIndex:a,oldIndex:s,type:n}){if(!t||!e||e===t||i.contains(e))return!1;let l=t.canPull?.({toEl:e,fromEl:t,dragEl:i,newIndex:a,oldIndex:s})??!0,r=e.canPut?.({toEl:e,fromEl:t,dragEl:i,newIndex:a,oldIndex:s})??!0;return(n==="add"?l==="clone":l===!0)&&r}handleAdd(t){let{addTo:e}=t.detail,i=t.target,a=i?.parentElement,s=e.element,l=Array.from(a.children).filter(b).indexOf(i),r=0;if(!this.validateSortMenuItem({type:"add",fromEl:a,toEl:s,dragEl:i,newIndex:r,oldIndex:l}))return;i.sortHandleOpen=!1,this.disconnectObserver();let c=i.cloneNode();s.prepend(c),D(i),this.updateListItemsDebounced(),this.connectObserver();let u={dragEl:i,fromEl:a,toEl:s,newIndex:r,oldIndex:l};this.calciteListOrderChange.emit(u),s.emitOrderChangeEvent(u)}handleMove(t){let{moveTo:e}=t.detail,i=t.target,a=i?.parentElement,s=e.element,l=Array.from(a.children).filter(b).indexOf(i),r=0;if(!this.validateSortMenuItem({type:"move",fromEl:a,toEl:s,dragEl:i,newIndex:r,oldIndex:l}))return;i.sortHandleOpen=!1,this.disconnectObserver(),s.prepend(i),D(i),this.updateListItemsDebounced(),this.connectObserver();let c={dragEl:i,fromEl:a,toEl:s,newIndex:r,oldIndex:l};this.calciteListOrderChange.emit(c),s.emitOrderChangeEvent(c)}handleReorder(t){let{reorder:e}=t.detail,i=t.target,a=i?.parentElement;if(!a)return;i.sortHandleOpen=!1;let s=Array.from(a.children).filter(b),n=s.length-1,l=s.indexOf(i),r=l;switch(e){case"top":r=0;break;case"bottom":r=n;break;case"up":r=l===0?0:l-1;break;case"down":r=l===n?n:l+1;break}this.disconnectObserver();let c=e==="up"||e==="top"?s[r]:s[r].nextSibling;a.insertBefore(i,c),this.updateListItemsDebounced(),this.connectObserver(),this.calciteListOrderChange.emit({dragEl:i,fromEl:a,toEl:a,newIndex:r,oldIndex:l})}render(){let{loading:t,label:e,disabled:i,dataForFilter:a,filterEnabled:s,filterPlaceholder:n,filterText:l,filterLabel:r,hasFilterActionsStart:c,hasFilterActionsEnd:u,effectiveFilterProps:m}=this;return this.interactiveContainer({disabled:this.disabled,children:d`<div class=${h({[f.container]:!0,[f.containerHeight]:this.listItems.length<1&&t})}>${this.dragEnabled?d`<span aria-live=assertive class=${h(f.assistiveText)}>${this.assistiveText}</span>`:null}${this.renderItemAriaLive()}${t?d`<calcite-scrim class=${h(f.scrim)} .loading=${t}></calcite-scrim>`:null}<div .ariaBusy=${t} .ariaLabel=${e||""} class=${h(f.table)} @keydown=${this.handleListKeydown} role=treegrid>${s||c||u?d`<div class=${h(f.sticky)} role=rowgroup><div role=row><div role=columnheader><calcite-stack class=${h(f.stack)}><slot name=${y.filterActionsStart} @slotchange=${this.handleFilterActionsStartSlotChange} slot=${A.actionsStart}></slot><calcite-filter .ariaLabel=${n} .disabled=${i} .filterProps=${m} .items=${a} .label=${r} @calciteFilterChange=${this.handleFilterChange} .placeholder=${n} .scale=${this.scale} .value=${l} ${C(this.setFilterEl)}></calcite-filter><slot name=${y.filterActionsEnd} @slotchange=${this.handleFilterActionsEndSlotChange} slot=${A.actionsEnd}></slot></calcite-stack></div></div></div>`:null}<div class=${h(f.tableContainer)} role=rowgroup><slot @slotchange=${this.handleDefaultSlotChange} ${C(this.setDefaultSlotEl)}></slot></div></div><div aria-live=polite .hidden=${!this.showNoResultsContainer}><slot name=${y.filterNoResults} @slotchange=${this.handleFilterNoResultsSlotChange}></slot></div></div>`})}renderItemAriaLive(){let{messages:t,filteredItems:e,parentListEl:i,messages:{_lang:a},numberingSystem:s}=this;return F.numberFormatOptions={locale:a,numberingSystem:s},i?null:d`<div aria-live=polite class=${h(f.assistiveText)}>${this.hasActiveFilter?g("aria-filter-enabled",d`<div>${t.filterEnabled}</div>`):null}${g("aria-item-count",d`<div>${t.total.replace("{count}",F.localize(e.length.toString()))}</div>`)}${e.length?g("aria-item-list",d`<ol>${e.map(n=>d`<li>${n.label}</li>`)}</ol>`):null}</div>`}};k("calcite-list",P);export{P as List};