@esri/calcite-components
Version:
Web Components for Esri's Calcite Design System.
5 lines (4 loc) • 14.3 kB
JavaScript
/*! 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 P,b as q}from"./BVJFCLMH.js";import{a as m}from"./YXZ62PQO.js";import{a as $,b as M}from"./5RDOSP2E.js";import{e as A,o as z,r as p,u as w,v as T}from"./3ADX47DD.js";import{a as s}from"./HPN2C7M6.js";import"./JOSABGK6.js";import"./NNVH7JUI.js";import{E as S,F as i,I,K as r,R as E,c as x,d as l,h as C,q as y}from"./BJZTU5BQ.js";var n={actionsEnd:"actions-end",bulletPointIcon:"bullet-point",checkbox:"checkbox",checkboxContainer:"checkbox-container",checkboxLabel:"checkbox-label",checkmarkIcon:"checkmark",chevron:"chevron",childrenContainer:"children-container",iconStart:"icon-start",itemExpanded:"item--expanded",nodeAndActionsContainer:"node-actions-container",nodeContainer:"node-container"},L={actionsEnd:"actions-end",children:"children"},c={blank:"blank",bulletPoint:"bullet-point",checkmark:"check",checkSquareF:"check-square-f",chevronRight:"chevron-right",minusSquareF:"minus-square-f",square:"square"},U=x`: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([scale=s]){--calcite-internal-tree-item-spacing-unit: .25rem;--calcite-internal-tree-item-padding-block: .25rem;--calcite-internal-tree-item-children-container-padding: 1.25rem;--calcite-internal-tree-item-line-left-position: .75rem;font-size:var(--calcite-font-size--2);line-height:1rem}:host([scale=m]){--calcite-internal-tree-item-spacing-unit: .5rem;--calcite-internal-tree-item-padding-block: .5rem;--calcite-internal-tree-item-children-container-padding: 1.5rem;--calcite-internal-tree-item-line-left-position: 1rem;font-size:var(--calcite-font-size--1);line-height:1rem}:host([scale=l]){--calcite-internal-tree-item-spacing-unit: .75rem;--calcite-internal-tree-item-padding-block: .625rem;--calcite-internal-tree-item-children-container-padding: 2.25rem;--calcite-internal-tree-item-line-left-position: 1.5rem;font-size:var(--calcite-font-size-0);line-height:1.25rem}:host{display:block;max-inline-size:100%;cursor:pointer}:host .children-container ::slotted(*){padding-inline-start:var(--calcite-internal-tree-item-children-container-padding)}.node-actions-container{display:flex;color:var(--calcite-tree-text-color, var(--calcite-color-text-3))}.node-actions-container .node-container,.node-actions-container .checkbox-container{gap:var(--calcite-internal-tree-item-spacing-unit)}.node-actions-container .node-container{padding-inline:var(--calcite-internal-tree-item-spacing-unit);padding-block:var(--calcite-internal-tree-item-padding-block)}:host([calcite-hydrated-hidden]){visibility:hidden!important;pointer-events:none}:host([disabled]) ::slotted([calcite-hydrated][disabled]),:host([disabled]) [calcite-hydrated][disabled]{opacity:1}.interaction-container{display:contents}:host([lines]) .children-container:after{position:absolute;inset-block-start:0px;z-index:var(--calcite-z-index);inline-size:1px;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s;transition-property:background-color,block-size,border-color,box-shadow,color,inset-block-end,inset-block-start,inset-inline-end,inset-inline-start,inset-size,opacity,outline-color,transform;transition-duration:var(--calcite-animation-timing);transition-timing-function:ease-in-out;block-size:100%;inset-inline-start:var(--calcite-internal-tree-item-line-left-position);content:"";background-color:var(--calcite-color-border-2)}:host(:not([lines])) .node-container:after{display:none}::slotted(*){min-inline-size:0px;max-inline-size:100%;overflow-wrap:break-word;color:inherit;text-decoration:none!important}::slotted(*):hover{text-decoration:none!important}::slotted(a){inline-size:100%;text-decoration-line:none}:host{outline:2px solid transparent;outline-offset:2px}:host .node-container{outline-color:transparent}:host:focus .node-container,:host:active .node-container{outline:2px solid var(--calcite-color-focus, var(--calcite-ui-focus-color, var(--calcite-color-brand)));outline-offset:calc(-2px*(1 - (2*clamp(0,var(--calcite-offset-invert-focus),1))))}:host(:focus:not([disabled])) .node-container{outline:2px solid transparent;outline-offset:2px;outline:2px solid var(--calcite-color-focus, var(--calcite-ui-focus-color, var(--calcite-color-brand)));outline-offset:calc(-2px*(1 - (2*clamp(0,var(--calcite-offset-invert-focus),1))))}:host(:focus:not([disabled])) .checkbox{outline:2px solid transparent;outline-offset:2px}.actions-end{display:flex;flex-direction:row;align-items:center;align-self:stretch}.checkbox-container{display:flex;align-items:center}.checkbox{line-height:0;color:var(--calcite-tree-selected-icon-color, var(--calcite-color-border-input))}.checkbox-label{pointer-events:none;display:flex;align-items:center}.children-container{position:relative;block-size:0px;transform-origin:top;overflow:hidden;opacity:0;transform:scaleY(0);transition:var(--calcite-animation-timing) cubic-bezier(.215,.44,.42,.88),opacity var(--calcite-animation-timing) cubic-bezier(.215,.44,.42,.88),all var(--calcite-animation-timing) ease-in-out}.item--expanded>.children-container{overflow:visible;opacity:1;transform:none;block-size:auto}.node-container{position:relative;display:flex;min-inline-size:0px;flex-grow:1;align-items:center}.node-container .checkmark,.node-container .bullet-point{opacity:0;transition-property:background-color,block-size,border-color,box-shadow,color,inset-block-end,inset-block-start,inset-inline-end,inset-inline-start,inset-size,opacity,outline-color,transform;transition-duration:var(--calcite-animation-timing);transition-timing-function:ease-in-out;color:var(--calcite-color-border-1)}.node-container:hover .checkmark,.node-container:hover .bullet-point,:host([selected]) .node-container:hover .checkmark,:host([selected]) .node-container:hover .bullet-point,:host(:focus:not([disabled])) .node-container .checkmark,:host(:focus:not([disabled])) .node-container .bullet-point{opacity:1}:host([selected]) .node-container,:host([selected]) .node-container:hover{font-weight:var(--calcite-font-weight-medium);color:var(--calcite-tree-text-color-selected, var(--calcite-color-text-1))}:host([selected]) .node-container .bullet-point,:host([selected]) .node-container .checkmark,:host([selected]) .node-container:hover .bullet-point,:host([selected]) .node-container:hover .checkmark{opacity:1;color:var(--calcite-tree-selected-icon-color, var(--calcite-color-brand))}:host([has-children]) .node-container .bullet-point,:host([has-children]) .node-container .checkmark{display:none}.chevron{position:relative;align-self:center;color:var(--calcite-color-text-3);transition-property:background-color,block-size,border-color,box-shadow,color,inset-block-end,inset-block-start,inset-inline-end,inset-inline-start,inset-size,opacity,outline-color,transform;transition-duration:var(--calcite-animation-timing);transition-timing-function:ease-in-out;flex:0 0 auto;transform:rotate(0)}.calcite--rtl .chevron{transform:rotate(180deg)}.item--expanded .node-container>.chevron{transform:rotate(90deg)}:host([selected]) .checkmark,:host([selected]) .bullet-point{color:var(--calcite-tree-selected-icon-color, var(--calcite-color-brand))}:host([selected]) .checkbox{color:var(--calcite-tree-selected-icon-color, var(--calcite-color-brand))}:host([has-children][indeterminate]) .checkbox{color:var(--calcite-tree-selected-icon-color, var(--calcite-color-brand))}:host([hidden]){display:none}[hidden]{display:none}`,f=class extends S{constructor(){super(),this.actionSlotWrapper=$(),this.userChangedValue=!1,this.hasEndActions=!1,this.updateAfterInitialRender=!1,this.depth=-1,this.disabled=!1,this.expanded=!1,this.indeterminate=!1,this.parentExpanded=!1,this.selected=!1,this.calciteInternalTreeItemSelect=y({cancelable:!1}),this.listen("click",this.onClick),this.listen("keydown",this.keyDownHandler)}static{this.properties={hasEndActions:[16,{},{state:!0}],updateAfterInitialRender:[16,{},{state:!0}],depth:[11,{},{reflect:!0,type:Number}],disabled:[7,{},{reflect:!0,type:Boolean}],expanded:[7,{},{reflect:!0,type:Boolean}],hasChildren:[39,{},{reflect:!0,readOnly:!0,type:Boolean}],iconFlipRtl:[3,{},{reflect:!0}],iconStart:[3,{},{reflect:!0}],indeterminate:[7,{},{reflect:!0,type:Boolean}],label:1,lines:[7,{},{reflect:!0,type:Boolean}],parentExpanded:[5,{},{type:Boolean}],scale:[3,{},{reflect:!0}],selected:[7,{},{reflect:!0,type:Boolean}],selectionMode:[3,{},{reflect:!0}]}}static{this.styles=U}get hasChildren(){return!!this.childTree}connectedCallback(){super.connectedCallback(),this.parentTreeItem=this.el.parentElement?.closest("calcite-tree-item")}load(){requestAnimationFrame(()=>this.updateAfterInitialRender=!0)}willUpdate(e){this.preWillUpdate(),e.has("expanded")&&(this.hasUpdated||this.expanded!==!1)&&this.updateChildTree(),e.has("selected")&&(this.hasUpdated||this.selected!==!1)&&this.handleSelectedChange(this.selected),e.has("selectionMode")&&this.getSelectionMode()}updated(){P(this)}loaded(){this.updateAncestorTree()}handleSelectedChange(e){this.selectionMode==="ancestors"&&!this.userChangedValue&&(e&&(this.indeterminate=!1),this.calciteInternalTreeItemSelect.emit({modifyCurrentSelection:!0,updateItem:!1}))}getSelectionMode(){this.isSelectionMultiLike=this.selectionMode==="multiple"||this.selectionMode==="multichildren"}onClick(e){if(this.disabled||this.isActionEndEvent(e))return;let[t]=z(this.el,"a");if(t&&e.composedPath()[0].tagName.toLowerCase()!=="a"){let o=t.target===""?"_self":t.target;window.open(t.href,o)}this.calciteInternalTreeItemSelect.emit({modifyCurrentSelection:this.selectionMode==="ancestors"||this.isSelectionMultiLike,updateItem:!0}),this.userChangedValue=!0}iconClickHandler(e){e.stopPropagation(),this.expanded=!this.expanded}childrenClickHandler(e){e.stopPropagation()}keyDownHandler(e){if(!(this.isActionEndEvent(e)||e.defaultPrevented))switch(e.key){case" ":this.userChangedValue=!0,this.calciteInternalTreeItemSelect.emit({modifyCurrentSelection:this.isSelectionMultiLike,updateItem:!0}),e.preventDefault();break;case"Enter":{let t=Array.from(this.el.children).find(o=>o.matches("a"));this.userChangedValue=!0,t?(t.click(),this.selected=!0):this.calciteInternalTreeItemSelect.emit({modifyCurrentSelection:this.isSelectionMultiLike,updateItem:!0}),e.preventDefault()}}}updateChildTree(){let{childTree:e}=this;e&&(e.parentExpanded=this.expanded)}handleChildrenSlotChange(e){let t=T(e).filter(o=>o.matches("calcite-tree"))[0];this.childTree=t,this.requestUpdate("hasChildren"),this.updateChildTree()}isActionEndEvent(e){return e.composedPath().includes(this.actionSlotWrapper.value)}updateAncestorTree(){let e=this.parentTreeItem;if(!(this.selectionMode!=="ancestors"||!e)){if(this.selected){let t=this.el.parentElement,o=Array.from(t?.children),d=o.filter(a=>a.selected);o.length===d.length?(e.selected=!0,e.indeterminate=!1):d.length>0&&(e.indeterminate=!0),Array.from(this.el.querySelectorAll("calcite-tree-item:not([disabled])")).forEach(a=>{a.selected=!0,a.indeterminate=!1})}else if(this.indeterminate){let t=this.parentTreeItem;t.indeterminate=!0}}}actionsEndSlotChangeHandler(e){this.hasEndActions=w(e)}preWillUpdate(){this.depth=0;let e=this.el.closest("calcite-tree");if(!e)return;this.selectionMode=e.selectionMode,this.scale=e.scale||"m",this.lines=e.lines;let t;for(;e&&(t=e.parentElement?.closest("calcite-tree"),t!==e);)e=t,this.depth=this.depth+1}render(){let e=A(this.el)==="rtl",t=this.selectionMode==="single"||this.selectionMode==="children"||this.selectionMode==="single-persist",o=this.selectionMode==="multiple"||this.selectionMode==="multichildren",d=this.selectionMode==="none"&&!this.hasChildren,b=this.hasChildren&&this.indeterminate,a=this.hasChildren||this.selectionMode==="ancestors"?l`<calcite-icon class=${i({[n.chevron]:!0,[r.rtl]:e})} data-test-id=icon .icon=${this.hasChildren?c.chevronRight:c.blank} =${this.iconClickHandler} .scale=${s(this.scale)}></calcite-icon>`:null,k=m("default-slot",l`<slot></slot>`),u=this.selectionMode==="ancestors"?l`<div class=${i(n.checkboxContainer)}><calcite-icon class=${i(n.checkbox)} .icon=${this.selected?c.checkSquareF:b?c.minusSquareF:c.square} .scale=${s(this.scale)}></calcite-icon></div>`:null,h=t?c.bulletPoint:o?c.checkmark:d?c.blank:null,R=h?l`<calcite-icon class=${i({[n.bulletPointIcon]:h===c.bulletPoint,[n.checkmarkIcon]:h===c.checkmark,[r.rtl]:e})} .icon=${h} .scale=${s(this.scale)}></calcite-icon>`:null,v=!(this.parentExpanded||this.depth===1),g=this.updateAfterInitialRender&&this.expanded,{hasEndActions:B}=this,H=m("actionsEndSlot",l`<slot name=${L.actionsEnd} =${this.actionsEndSlotChangeHandler}></slot>`),F=l`<calcite-icon class=${i(n.iconStart)} .flipRtl=${this.iconFlipRtl==="start"||this.iconFlipRtl==="both"} .icon=${this.iconStart} .scale=${s(this.scale)}></calcite-icon>`;return this.el.ariaChecked=this.selectionMode==="multiple"||this.selectionMode==="multichildren"||this.selectionMode==="ancestors"?p(this.selected):void 0,this.el.ariaExpanded=this.hasChildren?p(g):void 0,this.el.inert=v,this.el.ariaLive="polite",this.el.ariaSelected=this.selectionMode==="single"||this.selectionMode==="children"||this.selectionMode==="single-persist"?p(this.selected):void 0,this.el.toggleAttribute("calcite-hydrated-hidden",v),this.el.role="treeitem",I(this.el,"tabIndex",this.disabled?-1:0),q({disabled:this.disabled,children:l`<div class=${i({[n.itemExpanded]:g})}><div class=${i(n.nodeAndActionsContainer)}><div class=${i({[n.nodeContainer]:!0,[r.rtl]:e})} data-selection-mode=${this.selectionMode??C}>${a}${R}${u||null}${this.iconStart?F:null}${u?l`<label class=${i(n.checkboxLabel)}>${k}</label>`:k}</div><div class=${i(n.actionsEnd)} .hidden=${!B} ${M(this.actionSlotWrapper)}>${H}</div></div><div class=${i({[n.childrenContainer]:!0,[r.rtl]:e})} data-test-id=calcite-tree-children =${this.childrenClickHandler} .role=${this.hasChildren?"group":void 0}><slot name=${L.children} =${this.handleChildrenSlotChange}></slot></div></div>`})}};E("calcite-tree-item",f);export{f as TreeItem};