UNPKG

@esri/calcite-components

Version:

Web Components for Esri's Calcite Design System.

5 lines (4 loc) 4.44 kB
/*! All material copyright ESRI, All Rights Reserved, unless otherwise specified. See https://github.com/Esri/calcite-design-system/blob/dev/LICENSE.md for details. v3.2.1 */ import{a as m,b as u}from"./BVJFCLMH.js";import{a as h}from"./M7EAHGE3.js";import{b as p}from"./5RDOSP2E.js";import{z as i}from"./3ADX47DD.js";import"./NNVH7JUI.js";import{E as r,F as n,R as d,c as l,d as c,q as o}from"./BJZTU5BQ.js";var f={container:"container"},b=l`: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{box-sizing:border-box;display:inline-block}:host ::slotted(calcite-tile){margin-block-end:var(--calcite-spacing-px);margin-inline-end:var(--calcite-spacing-px)}.container{display:grid;grid-auto-rows:minmax(auto,1fr)}:host([scale=s]) .container{grid-template-columns:repeat(auto-fit,minmax(100px,1fr))}:host([scale=m]) .container{grid-template-columns:repeat(auto-fit,minmax(140px,1fr))}:host([scale=l]) .container{grid-template-columns:repeat(auto-fit,minmax(160px,1fr))}:host([layout=vertical]) .container{display:flex;flex-direction:column}:host([disabled]) ::slotted([calcite-hydrated][disabled]),:host([disabled]) [calcite-hydrated][disabled]{opacity:1}.interaction-container{display:contents}:host([hidden]){display:none}[hidden]{display:none}`,a=class extends r{constructor(){super(),this.items=[],this.mutationObserver=h("mutation",()=>this.updateTiles()),this.alignment="start",this.disabled=!1,this.layout="horizontal",this.scale="m",this.selectedItems=[],this.selectionAppearance="icon",this.selectionMode="none",this.calciteTileGroupSelect=o({cancelable:!1}),this.listen("calciteInternalTileKeyEvent",this.calciteInternalTileKeyEventListener),this.listen("calciteTileSelect",this.calciteTileSelectHandler)}static{this.properties={alignment:[3,{},{reflect:!0}],disabled:[7,{},{reflect:!0,type:Boolean}],label:1,layout:[3,{},{reflect:!0}],scale:[3,{},{reflect:!0}],selectedItems:[0,{},{attribute:!1}],selectionAppearance:[3,{},{reflect:!0}],selectionMode:[3,{},{reflect:!0}]}}static{this.styles=b}connectedCallback(){super.connectedCallback(),this.mutationObserver?.observe(this.el,{childList:!0}),this.updateTiles()}willUpdate(e){(e.has("scale")&&(this.hasUpdated||this.scale!=="m")||e.has("selectionMode")&&(this.hasUpdated||this.selectionMode!=="none")||e.has("selectionAppearance")&&(this.hasUpdated||this.selectionAppearance!=="icon"))&&this.updateTiles()}updated(){m(this)}loaded(){this.updateSelectedItems()}disconnectedCallback(){super.disconnectedCallback(),this.mutationObserver?.disconnect()}getSlottedTiles(){return this.slotEl?.assignedElements({flatten:!0}).filter(e=>e?.matches("calcite-tile"))}selectItem(e){e&&(this.items?.forEach(t=>{let s=e===t;switch(this.selectionMode){case"multiple":s&&(t.selected=!t.selected);break;case"single":t.selected=s&&!t.selected;break;case"single-persist":t.selected=!!s;break}}),this.updateSelectedItems(),this.calciteTileGroupSelect.emit())}setSlotEl(e){this.slotEl=e}updateSelectedItems(){let e=this.items?.filter(t=>t.selected);(this.selectionMode==="single"||this.selectionMode==="single-persist")&&e?.length>1?(this.selectedItems=[e.pop()],this.items?.forEach(t=>{this.selectedItems.indexOf(t)===-1&&(t.selected=!1)})):this.selectedItems=e??[]}updateTiles(){this.items=this.getSlottedTiles(),this.items?.forEach(e=>{e.alignment=this.alignment,e.interactive=!0,e.layout=this.layout,e.scale=this.scale,e.selectionAppearance=this.selectionAppearance,e.selectionMode=this.selectionMode}),this.updateSelectedItems()}calciteInternalTileKeyEventListener(e){if(e.composedPath().includes(this.el)){e.preventDefault(),e.stopPropagation();let t=this.items?.filter(s=>!s.disabled);switch(e.detail.key){case"ArrowDown":case"ArrowRight":i(t,e.detail.target,"next");break;case"ArrowUp":case"ArrowLeft":i(t,e.detail.target,"previous");break;case"Home":i(t,e.detail.target,"first");break;case"End":i(t,e.detail.target,"last");break}}}calciteTileSelectHandler(e){e.composedPath().includes(this.el)&&this.selectItem(e.target)}render(){let e=this.selectionMode==="none"||this.selectionMode==="multiple"?"group":"radiogroup";return u({disabled:this.disabled,children:c`<div .ariaLabel=${this.label} class=${n(f.container)} .role=${e}><slot @slotchange=${this.updateTiles} ${p(this.setSlotEl)}></slot></div>`})}};d("calcite-tile-group",a);export{a as TileGroup};