@esri/calcite-components
Version:
Web Components for Esri's Calcite Design System.
3 lines (2 loc) • 12.2 kB
JavaScript
/* COPYRIGHT Esri - https://js.arcgis.com/5.1/LICENSE.txt */
import{a as F}from"./WPHKI6II.js";import{a as q}from"./AP2LDRUV.js";import{a as M,b as R,c as W,d as N}from"./GAR2IMZ3.js";import{a as w}from"./ENDXE7YY.js";import"./DNYAPW4C.js";import{a as I}from"./LHBACKJ5.js";import"./RRXOB3GM.js";import{c as U}from"./G52BPUIA.js";import{a as L}from"./D7Q3AXKP.js";import"./RH6ZIP65.js";import{e as B}from"./YJF4NBEX.js";import"./TQRVWHPS.js";import{D as l,t as E,u as P,y as f}from"./KDWR7M23.js";import"./OAOQ5BXS.js";import{E as k,F as G,G as O,H as y,N as $,S as H,g as D,h as v,l as T,p as m}from"./C4ZX7VYR.js";var J=({bufferSize:b=0,containerSize:t,itemSizes:e})=>{let a=t-b,i=e.length,o=0;for(let[r,n]of e.entries())if(o=o+n,o>a){i=r;break}else continue;return i},X=({bufferSize:b=0,containerSize:t,itemSizes:e})=>Math.max(e.length-J({bufferSize:b,itemSizes:e,containerSize:t}),0),S={container:"container",actionGroupEnd:"action-group--end",actionGroupStart:"action-group--start"},z={actionsEnd:"actions-end",actionsStart:"actions-start",expandTooltip:"expand-tooltip"},Y=D`:host{box-sizing:border-box;background-color:var(--calcite-color-foreground-1);color:var(--calcite-color-text-2);font-size:var(--calcite-font-size--1)}:host *{box-sizing:border-box}:host([scale=s]){--calcite-internal-action-bar-gap: var(--calcite-action-bar-items-space, var(--calcite-spacing-xxs));--calcite-internal-action-bar-padding: var(--calcite-spacing-xxs)}:host([scale=m]){--calcite-internal-action-bar-gap: var(--calcite-action-bar-items-space, var(--calcite-spacing-sm));--calcite-internal-action-bar-padding: var(--calcite-spacing-sm)}:host([scale=l]){--calcite-internal-action-bar-gap: var(--calcite-action-bar-items-space, var(--calcite-space-sm-plus));--calcite-internal-action-bar-padding: var(--calcite-spacing-sm-plus)}:host{display:inline-flex;align-self:stretch;background:transparent;--calcite-internal-action-group-dividing-border-margin: calc(var(--calcite-spacing-base) + 1px)}.container{display:inline-flex;flex:1 1 auto;flex-direction:column;background-color:var(--calcite-action-bar-background-color, var(--calcite-color-foreground-1));gap:var(--calcite-internal-action-bar-gap);padding:var(--calcite-internal-action-bar-padding)} in{0%{opacity:0}to{opacity:1}}:host([floating]) .container{animation:in var(--calcite-internal-animation-timing-slow) ease-in-out;overflow:hidden;border-radius:var(--calcite-action-bar-corner-radius, var(--calcite-corner-radius-round));--tw-shadow: 0 6px 20px -4px rgba(0, 0, 0, .1), 0 4px 12px -2px rgba(0, 0, 0, .08);--tw-shadow-colored: 0 6px 20px -4px var(--tw-shadow-color), 0 4px 12px -2px var(--tw-shadow-color);box-shadow:var(--calcite-action-bar-shadow, var(--tw-ring-offset-shadow, 0 0 rgba(0, 0, 0, 0)), var(--tw-ring-shadow, 0 0 rgba(0, 0, 0, 0)), var(--tw-shadow))}:host([layout=vertical]){flex-direction:column}:host([layout=vertical]):host([overflow-actions-disabled]) .container{overflow-y:auto}:host([layout=vertical]):host([expanded]) .container{max-inline-size:var(--calcite-action-bar-expanded-max-width, auto)}:host([layout=vertical]) .action-group--end{margin-block-start:auto}:host([layout=vertical]) ::slotted(calcite-action-group:not(:last-of-type)){border-block-end-width:var(--calcite-border-width-sm);border-image:linear-gradient(to right,transparent var(--calcite-internal-action-group-dividing-border-margin),var(--calcite-action-group-border-color, var(--calcite-color-border-3)) var(--calcite-internal-action-group-dividing-border-margin),var(--calcite-action-group-border-color, var(--calcite-color-border-3)) calc(100% - var(--calcite-internal-action-group-dividing-border-margin)),transparent var(--calcite-internal-action-group-dividing-border-margin));border-image-slice:1;padding-block-end:var(--calcite-internal-action-bar-padding)}:host([layout=horizontal]){flex-direction:row}:host([layout=horizontal]) .container{flex-direction:row}:host([layout=horizontal]):host([overflow-actions-disabled]) .container{overflow-x:auto}:host([layout=horizontal]) .action-group--end{margin-inline-start:auto}:host([layout=horizontal]) ::slotted(calcite-action-group:not(:last-of-type)){border-image:linear-gradient(transparent var(--calcite-internal-action-group-dividing-border-margin),var(--calcite-action-group-border-color, var(--calcite-color-border-3)) var(--calcite-internal-action-group-dividing-border-margin),var(--calcite-action-group-border-color, var(--calcite-color-border-3)) calc(100% - var(--calcite-internal-action-group-dividing-border-margin)),transparent var(--calcite-internal-action-group-dividing-border-margin));border-image-slice:1;border-inline-end-width:var(--calcite-border-width-sm);padding-inline-end:var(--calcite-internal-action-bar-padding)}.action-group--end{justify-content:flex-end}:host([hidden]){display:none}[hidden]{display:none}`,C=class extends O{constructor(){super(),this.actions=[],this.containerRef=k(),this.direction=B(),this.actionGroups=[],this.mutationObserver=w("mutation",()=>this.mutationObserverHandler()),this.cancelable=F()(this),this.resize=q(({width:t,height:e})=>{let{expanded:a,expandDisabled:i,layout:o,overflowActionsDisabled:r,expandPosition:n}=this;if(r||o==="vertical"&&!e||o==="horizontal"&&!t||!this.containerRef.value)return;this.updateGroups();let d=this.getItemSizes(),{actionGroups:c}=this,x=this.hasActionsEnd||!i&&n==="end"?1:0,A=this.hasActionsStart||!i&&n==="start"?1:0,h=c.length+x+A,s=h,p=getComputedStyle(this.containerRef.value);if(s+=l(o==="horizontal"?p.paddingInlineStart:p.paddingBlockStart)+l(o==="horizontal"?p.paddingInlineEnd:p.paddingBlockEnd),c.length>0&&c.forEach((u,j)=>{let g=getComputedStyle(u),Q=l(g.gap),V=u.childElementCount-1;s+=Q*V,j<c.length-1&&(s+=l(o==="horizontal"?g.paddingInlineEnd:g.paddingBlockEnd),s+=l(o==="horizontal"?g.borderInlineEndWidth:g.borderBlockEndWidth))}),h>0)for(let u=1;u<h;u++)s+=l(p.gap);let K=X({bufferSize:s,containerSize:o==="horizontal"?t:e,itemSizes:d});R({actionGroups:c,expanded:a,overflowCount:K})},$.resize),this.resizeHandler=t=>{let{width:e,height:a}=t.contentRect;this.resize({width:e,height:a})},this.resizeObserver=w("resize",t=>this.resizeHandlerEntries(t)),this.toggleExpand=()=>{this.expanded=!this.expanded,this.calciteActionBarToggle.emit()},this.messages=I({blocking:!0}),this.focusSetter=L()(this),this.setExpandToggleEl=t=>{this.expandToggleEl=t},this.hasActionsEnd=!1,this.hasActionsStart=!1,this.floating=!1,this.expandDisabled=!1,this.expanded=!1,this.expandPosition="end",this.layout="vertical",this.overflowActionsDisabled=!1,this.overlayPositioning="absolute",this.scale="m",this.selectionAppearance="neutral",this.calciteActionBarCollapse=m({cancelable:!1}),this.calciteActionBarExpand=m({cancelable:!1}),this.calciteActionBarToggle=m({cancelable:!1}),this.listen("calciteActionMenuOpen",this.actionMenuOpenHandler),this.listen("keydown",this.handleKeyDown)}static{this.properties={expandTooltip:[16,{},{state:!0}],hasActionsEnd:[16,{},{state:!0}],hasActionsStart:[16,{},{state:!0}],actionsEndGroupLabel:1,actionsStartGroupLabel:1,floating:[7,{},{reflect:!0,type:Boolean}],expandDisabled:[7,{},{reflect:!0,type:Boolean}],expanded:[7,{},{reflect:!0,type:Boolean}],expandPosition:[3,{},{reflect:!0}],layout:[3,{},{reflect:!0}],messageOverrides:[0,{},{attribute:!1}],overflowActionsDisabled:[7,{},{reflect:!0,type:Boolean}],overlayPositioning:[3,{},{reflect:!0}],position:[3,{},{reflect:!0}],scale:[3,{},{reflect:!0}],selectionAppearance:[3,{},{reflect:!0}]}}static{this.styles=Y}async overflowActions(){this.resize({width:this.el.clientWidth,height:this.el.clientHeight})}async setFocus(t){return this.focusSetter(()=>this.el,t)}connectedCallback(){super.connectedCallback(),this.updateGroups(),this.overflowActions(),this.updateActions(),this.mutationObserver?.observe(this.el,{childList:!0,subtree:!0}),this.overflowActionsDisabledHandler(this.overflowActionsDisabled),this.cancelable.add(this.resize)}willUpdate(t){(t.has("expandDisabled")&&(this.hasUpdated||this.expandDisabled!==!1)||t.has("expandPosition")&&(this.hasUpdated||this.expandPosition!=="end"))&&this.overflowActions(),t.has("layout")&&(this.hasUpdated||this.layout!=="vertical")&&this.updateGroups(),t.has("overflowActionsDisabled")&&(this.hasUpdated||this.overflowActionsDisabled!==!1)&&this.overflowActionsDisabledHandler(this.overflowActionsDisabled),t.has("expanded")&&this.hasUpdated&&(this.expandedHandler(),this.expanded?this.calciteActionBarExpand.emit():this.calciteActionBarCollapse.emit()),t.has("selectionAppearance")&&(this.hasUpdated||this.selectionAppearance!=="neutral")&&this.updateActions()}loaded(){this.overflowActions()}disconnectedCallback(){super.disconnectedCallback(),this.mutationObserver?.disconnect(),this.resizeObserver?.disconnect()}getItemSizes(){let{el:t,layout:e,expandToggleEl:a}=this,i=M(t);a&&i.push(a);let o=e==="horizontal"?"clientWidth":"clientHeight",r=Math.max(...i.map(n=>n[o]||0));return i.map(n=>n[o]||r)}expandedHandler(){let{el:t,expanded:e}=this;W({el:t,expanded:e}),this.overflowActions()}overflowActionsDisabledHandler(t){if(t){this.resizeObserver?.disconnect();return}this.resizeObserver?.observe(this.el),this.overflowActions()}actionMenuOpenHandler(t){if(t.target.menuOpen){let e=t.composedPath();this.actionGroups?.forEach(a=>{e.includes(a)||(a.menuOpen=!1)})}}mutationObserverHandler(){this.updateGroups(),this.overflowActions(),this.queryAndStoreActions(),this.updateActions()}resizeHandlerEntries(t){t.forEach(this.resizeHandler)}updateGroups(){let t=Array.from(this.el.querySelectorAll("calcite-action-group"));this.actionGroups=t,t.forEach(e=>{e.layout=this.layout,e.scale=this.scale})}handleDefaultSlotChange(){this.updateGroups(),this.queryAndStoreActions(),this.updateActions()}handleActionsEndSlotChange(t){this.hasActionsEnd=E(t),this.overflowActions()}handleActionsStartSlotChange(t){this.hasActionsStart=E(t),this.overflowActions()}handleTooltipSlotChange(t){let e=P(t).filter(a=>a?.matches("calcite-tooltip"));this.expandTooltip=e[0]}updateActions(){this.actions.forEach(t=>{t.selectionAppearance=this.selectionAppearance})}queryAndStoreActions(){this.actions=Array.from(this.el.querySelectorAll("calcite-action"))}handleKeyDown(t){this.queryAndStoreActions();let e=this.actions.filter(i=>!i.disabled),a=document.activeElement;if(U(a))switch(t.key){case"ArrowRight":case"ArrowDown":f(e,a,"next",!0),t.preventDefault();break;case"ArrowLeft":case"ArrowUp":f(e,a,"previous",!0),t.preventDefault();break;case"Home":f(e,a,"first",!0),t.preventDefault();break;case"End":f(e,a,"last",!0),t.preventDefault();break;case"Tab":this.setActionTabIndexes(a);break}}setActionTabIndexes(t){this.actions.forEach(e=>{e.tabIndex=!e.disabled&&e===t?0:-1})}renderExpandTooltipSlot(){return v`<slot name=${z.expandTooltip} =${this.handleTooltipSlotChange}></slot>`}renderExpandToggle(){let{el:t,expanded:e,toggleExpand:a,messages:i,position:o,scale:r}=this;return N({collapseLabel:i.collapseLabel,collapseText:i.collapse,direction:this.direction,el:t,expandLabel:i.expandLabel,expandText:i.expand,expanded:e,position:o,ref:this.setExpandToggleEl,scale:r,toggle:a,tooltip:this.expandTooltip})}renderActionsGroup(t){let{expandDisabled:e,scale:a,layout:i,overlayPositioning:o,expandPosition:r}=this,n=t==="start",d=!e&&r===t,c=n?z.actionsStart:z.actionsEnd,x=n?this.handleActionsStartSlotChange:this.handleActionsEndSlotChange,A=n?this.actionsStartGroupLabel:this.actionsEndGroupLabel,h=!d&&!(n?this.hasActionsStart:this.hasActionsEnd),s=n?S.actionGroupStart:S.actionGroupEnd;return v`<calcite-action-group class=${y(s)} .hidden=${h} .label=${A} .layout=${i} .overlayPositioning=${o} .scale=${a}>${n&&d?this.renderExpandToggle():null}<slot name=${c??T} =${x}></slot>${d?this.renderExpandTooltipSlot():null}${!n&&d?this.renderExpandToggle():null}</calcite-action-group>`}render(){return v`<div .ariaOrientation=${this.layout==="horizontal"?"horizontal":"vertical"} class=${y(S.container)} role=toolbar ${G(this.containerRef)}>${this.renderActionsGroup("start")}<slot =${this.handleDefaultSlotChange}></slot>${this.renderActionsGroup("end")}</div>`}};H("calcite-action-bar",C);export{C as ActionBar};