UNPKG

@esri/calcite-components

Version:

Web Components for Esri's Calcite Design System.

3 lines (2 loc) • 21.4 kB
/* COPYRIGHT Esri - https://js.arcgis.com/5.0/LICENSE.txt */ import{a as I}from"./UFDI6CPN.js";import{j as y}from"./4PBM4ZLG.js";import{a as K}from"./J6AHDM43.js";import"./YYZ7J5RO.js";import{a as N}from"./77EQHO2G.js";import{a as x}from"./LG254OZM.js";import"./K7LRDT5O.js";import{a as H}from"./WAA77FNZ.js";import{a as W}from"./SQ6RHDDF.js";import{a as U}from"./3XLPUKLV.js";import"./3YEM2IPT.js";import"./QUTTHRH3.js";import"./MNIRD7Q7.js";import{A as B,e as M,u as L,y as m}from"./ZQBZ5QPB.js";import{a as F}from"./CIYXQ5G6.js";import{C as f,D as b,E as A,F as r,Q as E,g as O,h as l,l as c,p}from"./G7AHLVJ5.js";var _=6e3,i={container:"container",containerOverlaid:"container--overlaid",containerEdged:"container--edged",itemContainer:"item-container",itemContainerForward:"item-container--forward",itemContainerBackward:"item-container--backward",pagination:"pagination",paginationAriaLive:"pagination-aria-live",paginationItems:"pagination-items",paginationItem:"pagination-item",paginationItemIndividual:"pagination-item--individual",paginationItemVisible:"pagination-item--visible",paginationItemOutOfRange:"pagination-item--out-of-range",paginationItemSelected:"pagination-item--selected",paginationItemRangeEdge:"pagination-item--range-edge",pageNext:"page-next",pagePrevious:"page-previous",autoplayControl:"autoplay-control",autoplayProgress:"autoplay-progress"},h={chevronLeft:"chevron-left",chevronRight:"chevron-right",inactive:"bullet-point",active:"bullet-point-large",pause:"pause-f",play:"play-f"},v={medium:7,small:5,xsmall:3,xxsmall:1},Y="calcite-carousel-container",J={host:D=>`${Y}-${D}`},Q=O`: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:flex;inline-size:100%;--calcite-internal-carousel-pagination-space: 1.5rem;--calcite-internal-carousel-pagination-space-wide: 3.5rem;--calcite-internal-carousel-pagination-background-color: var( --calcite-carousel-pagination-background-color, transparent );--calcite-internal-carousel-pagination-background-color-hover: var( --calcite-carousel-pagination-background-color-hover, transparent );--calcite-internal-carousel-pagination-background-color-press: var( --calcite-carousel-pagination-background-color-press, transparent );--calcite-internal-carousel-pagination-background-color-selected: var( --calcite-carousel-pagination-background-color-selected, transparent );--calcite-internal-carousel-pagination-overlay-background-color: var( --calcite-carousel-pagination-background-color, var(--calcite-color-foreground-1) );--calcite-internal-carousel-pagination-overlay-background-color-hover: var( --calcite-carousel-pagination-background-color-hover, var(--calcite-color-foreground-2) );--calcite-internal-carousel-pagination-overlay-background-color-active: var( --calcite-carousel-pagination-background-color-press, var(--calcite-color-foreground-2) );--calcite-internal-carousel-pagination-overlay-background-color-selected: var( --calcite-carousel-pagination-background-color-selected, var(--calcite-color-foreground-1) );--calcite-internal-carousel-pagination-icon-color-hover: var( --calcite-carousel-pagination-icon-color-hover, var(--calcite-color-text-1) );--calcite-internal-carousel-pagination-icon-color: var( --calcite-carousel-pagination-icon-color, var(--calcite-color-border-1) );--calcite-internal-carousel-pagination-icon-color-selected: var( --calcite-carousel-pagination-icon-color-selected, var(--calcite-color-brand) );--calcite-internal-carousel-control-icon-color-hover: var( --calcite-carousel-control-icon-color-hover, var(--calcite-internal-carousel-pagination-icon-color-hover) );--calcite-internal-carousel-control-icon-color: var( --calcite-carousel-control-icon-color, var(--calcite-carousel-pagination-icon-color, var(--calcite-color-text-3)) );--calcite-internal-carousel-autoplay-progress-background-color: var( --calcite-carousel-autoplay-progress-background-color, var(--calcite-color-border-3) );--calcite-internal-carousel-autoplay-progress-fill-color: var( --calcite-carousel-autoplay-progress-fill-color, var(--calcite-color-brand) );--calcite-internal-carousel-autoplay-control-color: var( --calcite-carousel-pagination-icon-color, var(--calcite-color-text-3) )}.container{position:relative;display:flex;inline-size:100%;flex-direction:column;overflow:hidden;font-size:var(--calcite-font-size-relative-base);line-height:var(--calcite-font-line-height-base);color:var(--calcite-color-text-2);outline-color:transparent}.container:focus{outline:var(--calcite-border-width-md) solid var(--calcite-color-focus, var(--calcite-ui-focus-color, var(--calcite-color-brand)));outline-offset:calc(calc(-1 * var(--calcite-spacing-base)) * calc(1 - (2*clamp(0,var(--calcite-offset-invert-focus),1))))}.container--edged:not(.container--overlaid){padding-inline:var(--calcite-internal-carousel-pagination-space-wide);inline-size:calc(100% - var(--calcite-internal-carousel-pagination-space-wide) * 2)}.item-container{display:flex;flex:1 1 auto;align-items:flex-start;justify-content:center;overflow:auto;padding:.25rem;animation-name:none;animation-duration:var(--calcite-animation-timing)}.container--overlaid .item-container{padding:0}.item-container--forward{animation-name:item-forward}.item-container--backward{animation-name:item-backward}calcite-carousel-item:not([selected]){opacity:0}.pagination-aria-live{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}.pagination{margin:.75rem;display:flex;flex-direction:row;align-items:center;justify-content:center;inline-size:auto}.pagination-items{display:flex;flex-direction:row;align-items:center}.container--overlaid .pagination{position:absolute}.pagination-item.page-next,.pagination-item.page-previous{color:var(--calcite-internal-carousel-control-icon-color);--calcite-icon-color: var(--calcite-internal-carousel-control-icon-color)}.pagination-item.page-next:hover,.pagination-item.page-previous:hover{color:var(--calcite-internal-carousel-control-icon-color-hover);--calcite-icon-color: var(--calcite-internal-carousel-control-icon-color-hover)}.container--edged .page-next,.container--edged .page-previous{block-size:3rem;inline-size:3rem;position:absolute;inset-block-start:50%;transform:translateY(-50%)}.container--edged .page-next{inset-inline-end:0}.container--edged .page-previous{inset-inline-start:0}.container--overlaid .pagination{inset-block-start:unset;inset-block-end:0;inset-inline:0}.pagination-item.autoplay-control{position:relative;color:var(--calcite-internal-carousel-autoplay-control-color);--calcite-progress-fill-color: var(--calcite-internal-carousel-autoplay-progress-fill-color);--calcite-progress-background-color: var(--calcite-internal-carousel-autoplay-progress-background-color)}.autoplay-control:focus .autoplay-progress{inset-block-end:4px;inset-inline:2px;inline-size:calc(100% - 4px)}.autoplay-progress{position:absolute;inset-block-end:2px;inset-inline:0;inline-size:100%}.pagination-item{margin:0;block-size:2rem;inline-size:2rem;cursor:pointer;align-items:center;border-style:none;background-color:transparent;outline-color:transparent;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;-webkit-appearance:none;display:flex;align-content:center;justify-content:center;background-color:var(--calcite-internal-carousel-pagination-background-color);color:var(--calcite-internal-carousel-pagination-icon-color)}.pagination-item:hover{background-color:var(--calcite-internal-carousel-pagination-background-color-hover);color:var(--calcite-internal-carousel-pagination-icon-color-hover)}.pagination-item:focus{background-color:var(--calcite-internal-carousel-pagination-background-color-press);outline:var(--calcite-border-width-md) solid var(--calcite-color-focus, var(--calcite-ui-focus-color, var(--calcite-color-brand)));outline-offset:calc(calc(-1 * var(--calcite-spacing-base)) * calc(1 - (2*clamp(0,var(--calcite-offset-invert-focus),1))))}.pagination-item:active{background-color:var(--calcite-internal-carousel-pagination-background-color-press);color:var(--calcite-internal-carousel-pagination-icon-color-hover)}.pagination-item calcite-icon{color:inherit;pointer-events:none}.pagination-item.pagination-item--selected{background-color:var(--calcite-internal-carousel-pagination-background-color-selected);color:var(--calcite-internal-carousel-pagination-icon-color-selected)}.pagination-item--individual{pointer-events:none;inline-size:0px;padding:0;opacity:0;visibility:hidden;transition:var(--calcite-animation-timing) ease-in-out inline-size,var(--calcite-animation-timing) ease-in-out padding,var(--calcite-animation-timing) ease-in-out opacity}.pagination-item--individual.pagination-item--visible{pointer-events:auto;inline-size:2rem;opacity:1;visibility:visible}.pagination-item--range-edge calcite-icon{scale:.75;transition:var(--calcite-animation-timing) ease-in-out scale}.container--overlaid .pagination-item{background-color:var(--calcite-internal-carousel-pagination-overlay-background-color)}.container--overlaid .pagination-item:hover{background-color:var(--calcite-internal-carousel-pagination-overlay-background-color-hover)}.container--overlaid .pagination-item:focus{background-color:var(--calcite-internal-carousel-pagination-overlay-background-color-active)}.container--overlaid .pagination-item:active{background-color:var(--calcite-internal-carousel-pagination-overlay-background-color-active)}.container--overlaid .pagination-item.pagination-item--selected{background-color:var(--calcite-internal-carousel-pagination-overlay-background-color-selected);color:var(--calcite-internal-carousel-pagination-icon-color-selected)}@keyframes item-forward{0%{transform:translate3d(100px,0,0)}to{transform:translateZ(0)}}@keyframes item-backward{0%{transform:translate3d(-100px,0,0)}to{transform:translateZ(0)}}:host([disabled]) ::slotted([calcite-hydrated][disabled]),:host([disabled]) [calcite-hydrated][disabled]{opacity:1}.interaction-container{display:contents}:host([hidden]){display:none}[hidden]{display:none}`,w=class extends A{constructor(){super(...arguments),this.autoplayHandler=()=>{this.clearIntervals(),this.slideDurationInterval=setInterval(this.timer,this.autoplayDuration/100)},this.containerRef=f(),this.containerId=J.host(F()),this.itemContainerRef=f(),this.resizeHandler=({contentRect:{width:e}})=>{this.setMaxItemsToBreakpoint(e)},this.resizeObserver=H("resize",e=>e.forEach(this.resizeHandler)),this.slideDurationInterval=null,this.slideInterval=null,this.tabListRef=f(),this.timer=()=>{let e=this.slideDurationRemaining;(!this.suspendedDueToFocus&&!this.suspendedDueToHover||this.userPreventsSuspend)&&(e<=.01?(e=1,this.direction="forward",this.nextItem(!1)):e=e-.01),e>0&&(this.slideDurationRemaining=e)},this.messages=W(),this.focusSetter=U()(this),this.interactiveContainer=N(this),this.direction="standby",this.hasMultiple=!1,this.items=[],this.maxItems=v.xxsmall,this.playing=!1,this.slideDurationRemaining=1,this.suspendedDueToFocus=!1,this.suspendedDueToHover=!1,this.suspendedSlideDurationRemaining=1,this.userPreventsSuspend=!1,this.arrowType="inline",this.autoplay=!1,this.autoplayDuration=_,this.controlOverlay=!1,this.disabled=!1,this.paginationDisabled=!1,this.calciteCarouselChange=p({cancelable:!1}),this.calciteCarouselPause=p({cancelable:!1}),this.calciteCarouselPlay=p({cancelable:!1}),this.calciteCarouselResume=p({cancelable:!1}),this.calciteCarouselStop=p({cancelable:!1})}static{this.properties={direction:[16,{},{state:!0}],hasMultiple:[16,{},{state:!0}],items:[16,{},{state:!0}],maxItems:[16,{},{state:!0}],playing:[16,{},{state:!0}],selectedIndex:[16,{},{state:!0}],slideDurationRemaining:[16,{},{state:!0}],suspendedDueToFocus:[16,{},{state:!0}],suspendedDueToHover:[16,{},{state:!0}],suspendedSlideDurationRemaining:[16,{},{state:!0}],userPreventsSuspend:[16,{},{state:!0}],arrowType:[3,{},{reflect:!0}],autoplay:[3,{},{reflect:!0}],autoplayDuration:[11,{},{type:Number,reflect:!0}],controlOverlay:[7,{},{reflect:!0,type:Boolean}],disabled:[7,{},{reflect:!0,type:Boolean}],label:1,messageOverrides:[0,{},{attribute:!1}],paginationDisabled:[5,{},{type:Boolean}],paused:[5,{},{type:Boolean}],selectedItem:[0,{},{attribute:!1}]}}static{this.styles=Q}async play(){this.playing||!this.hasMultiple||this.autoplay!==""&&!this.autoplay&&this.autoplay!=="paused"||this.handlePlay(!0)}async setFocus(e){return this.focusSetter(()=>this.containerRef.value,e)}async stop(){this.playing&&this.handlePause(!0)}connectedCallback(){super.connectedCallback(),this.resizeObserver?.observe(this.el)}async load(){(this.autoplay===""||this.autoplay)&&this.autoplay!=="paused"?this.handlePlay(!1):this.autoplay==="paused"&&(this.paused=!0)}willUpdate(e){this.hasUpdated&&!this.hasMultiple&&this.handlePause(!1),e.has("autoplay")&&this.hasUpdated&&this.autoplayWatcher(this.autoplay),e.has("direction")&&(this.hasUpdated||this.direction!=="standby")&&this.directionWatcher(this.direction),e.has("playing")&&(this.hasUpdated||this.playing!==!1)&&(this.paused=!this.playing),(e.has("suspendedDueToFocus")&&(this.hasUpdated||this.suspendedDueToFocus!==!1)||e.has("suspendedDueToHover")&&(this.hasUpdated||this.suspendedDueToHover!==!1))&&this.suspendWatcher()}disconnectedCallback(){super.disconnectedCallback(),this.clearIntervals(),this.resizeObserver?.disconnect()}autoplayWatcher(e){e||this.handlePause(!1)}async directionWatcher(e){e==="standby"||!this.itemContainerRef.value||(await B(this.itemContainerRef.value,e==="forward"?"item-forward":"item-backward"),this.direction="standby")}suspendWatcher(){!this.suspendedDueToFocus&&!this.suspendedDueToHover?this.suspendEnd():this.suspendStart()}setMaxItemsToBreakpoint(e){if(e){if(e>=I.width.small){this.maxItems=v.medium;return}if(e>=I.width.xsmall){this.maxItems=v.small;return}if(e>=I.width.xxsmall){this.maxItems=v.xsmall;return}this.maxItems=v.xxsmall}}clearIntervals(){clearInterval(this.slideDurationInterval),clearInterval(this.slideInterval)}nextItem(e){this.playing&&e&&(this.playing=!1);let t=x(this.selectedIndex+1,this.items.length);this.setSelectedItem(t,e)}previousItem(){this.playing=!1;let e=x(Math.max(this.selectedIndex-1,-1),this.items.length);this.setSelectedItem(e,!0)}handlePlay(e){this.playing=!0,this.autoplayHandler(),this.slideInterval=setInterval(this.autoplayHandler,this.autoplayDuration),e&&this.calciteCarouselPlay.emit()}handlePause(e){this.playing=!1,this.clearIntervals(),this.slideDurationRemaining=1,this.suspendedSlideDurationRemaining=1,e&&this.calciteCarouselStop.emit()}suspendStart(){this.suspendedSlideDurationRemaining=this.slideDurationRemaining}suspendEnd(){this.slideDurationRemaining=this.suspendedSlideDurationRemaining}handleSlotChange(e){let t=L(e);if(t.length<1)return;let a=t.findIndex(u=>u.selected),n=a>-1?a:0;this.items=t,this.hasMultiple=t.length>1,this.setSelectedItem(n,!1)}setSelectedItem(e,t){let a=this.selectedIndex;this.items.forEach((n,u)=>{let s=e===u;n.selected=s,s&&(this.selectedItem=n,this.selectedIndex=u)}),t&&(this.playing=!1,a!==this.selectedIndex&&this.calciteCarouselChange.emit())}handleArrowClick(e){let t=e.target.dataset.direction;this.playing&&this.handlePause(!0),t==="next"?(this.direction="forward",this.nextItem(!0)):t==="previous"&&(this.direction="backward",this.previousItem())}handleItemSelection(e){let t=e.target,a=parseInt(t.dataset.index);a!==this.selectedIndex&&(this.playing&&this.handlePause(!0),this.direction=a>this.selectedIndex?"forward":"backward",this.setSelectedItem(a,!0))}toggleRotation(){this.userPreventsSuspend=!0,this.playing?this.handlePause(!0):this.handlePlay(!0)}handleFocusIn(){let e=this.playing;e&&(this.suspendedDueToFocus=!0),(!this.suspendedDueToFocus||!this.suspendedDueToHover)&&e&&this.calciteCarouselPause.emit()}handleMouseIn(){let e=this.playing;e&&(this.suspendedDueToHover=!0),(!this.suspendedDueToFocus||!this.suspendedDueToHover)&&e&&this.calciteCarouselPause.emit()}handleMouseOut(e){let t=!this.el.contains(e.relatedTarget),a=this.playing;t&&a&&(this.suspendedDueToHover=!1),t&&a&&!this.suspendedDueToFocus&&(this.userPreventsSuspend=!1,this.calciteCarouselResume.emit())}handleFocusOut(e){let t=!e.composedPath().includes(e.relatedTarget),a=this.playing;t&&a&&(this.suspendedDueToFocus=!1),t&&a&&!this.suspendedDueToHover&&(this.userPreventsSuspend=!1,this.calciteCarouselResume.emit())}containerKeyDownHandler(e){if(e.target!==this.containerRef.value)return;let t=this.items.length-1;switch(e.key){case" ":case"Enter":e.preventDefault(),(this.autoplay===""||this.autoplay||this.autoplay==="paused")&&this.toggleRotation();break;case"ArrowRight":if(e.preventDefault(),!this.hasMultiple)return;this.direction="forward",this.nextItem(!0);break;case"ArrowLeft":if(e.preventDefault(),!this.hasMultiple)return;this.direction="backward",this.previousItem();break;case"Home":if(e.preventDefault(),this.selectedIndex===0)return;this.direction="backward",this.setSelectedItem(0,!0);break;case"End":if(e.preventDefault(),this.selectedIndex===t)return;this.direction="forward",this.setSelectedItem(t,!0);break}}tabListKeyDownHandler(e){let t=Array(...this.tabListRef.value.querySelectorAll(`button:not(.${i.paginationItemOutOfRange})`)),a=e.target;switch(e.key){case"ArrowRight":m(t,a,"next");break;case"ArrowLeft":m(t,a,"previous");break;case"Home":e.preventDefault(),m(t,a,"first");break;case"End":e.preventDefault(),m(t,a,"last");break}}renderRotationControl(){let e=this.playing?this.messages.pause:this.messages.play,t=this.slideDurationRemaining*100;return l`<button .ariaLabel=${e} class=${r({[i.paginationItem]:!0,[i.autoplayControl]:!0})} @click=${this.toggleRotation} title=${e??c}><calcite-icon .icon=${this.playing?h.pause:h.play} scale=s></calcite-icon>${this.playing&&l`<calcite-progress class=${r(i.autoplayProgress)} .label=${this.messages.carouselItemProgress} .value=${t}></calcite-progress>`||""}</button>`}renderPaginationArea(){return l`<div class=${r({[i.pagination]:!0,[i.containerOverlaid]:this.controlOverlay})} @keydown=${this.tabListKeyDownHandler} ${b(this.tabListRef)}>${(this.playing||this.autoplay===""||this.autoplay||this.autoplay==="paused")&&this.hasMultiple&&this.renderRotationControl()||""}${this.arrowType==="inline"&&this.hasMultiple&&this.renderArrow("previous")||""}${this.paginationDisabled?this.renderPaginationAriaLive():this.renderPaginationItems()}${this.arrowType==="inline"&&this.hasMultiple&&this.renderArrow("next")||""}</div>`}renderPaginationItems(){let{selectedIndex:e,maxItems:t,items:a,label:n,handleItemSelection:u}=this;return l`<div .ariaLabel=${n} class=${r(i.paginationItems)} role=tablist>${K(a,s=>s.id,(s,o)=>{let g=a.length,d=o===e,j=o===0,q=o===g-1,$=g-t-1,k=e<t,R=e>=$,S=k?0:e-Math.floor(t/2),V=R?g:S+t,C=k?0:R?$:S,P=k?t+1:V,G=!j&&!q&&!d&&(o===C-1||o===P),T=d||o<=P&&o>=C-1,z=g-1<=t,Z=d?h.active:h.inactive;return l`<button aria-controls=${(d?void 0:s.id)??c} .ariaSelected=${d} class=${r({[i.paginationItem]:!0,[i.paginationItemIndividual]:!0,[i.paginationItemSelected]:d,[i.paginationItemRangeEdge]:g-1>t&&G,[i.paginationItemOutOfRange]:!(z||T),[i.paginationItemVisible]:z||T})} data-index=${o??c} @click=${u} role=tab title=${s.label??c}><calcite-icon .icon=${Z} scale=l></calcite-icon></button>`})}</div>`}renderPaginationAriaLive(){let{messages:e,messages:{_lang:t},selectedIndex:a,items:n}=this;if(!e._loading)return y.numberFormatOptions={locale:t},l`<div aria-live=off class=${r(i.paginationAriaLive)} role=status>${e.paginationStatus.replace("{current}",y.localize(`${a+1}`)).replace("{total}",y.localize(`${n.length}`))}</div>`}renderArrow(e){let t=e==="previous",a=M(this.el),n=this.arrowType==="edge"?"m":"s",u=t?i.pagePrevious:i.pageNext,s=t?this.messages.previous:this.messages.next,o=t?h.chevronLeft:h.chevronRight;return l`<button aria-controls=${this.containerId??c} class=${r({[i.paginationItem]:!0,[u]:!0})} data-direction=${e??c} @click=${this.handleArrowClick} title=${s??c}><calcite-icon .flipRtl=${a==="rtl"} .icon=${o} .scale=${n}></calcite-icon></button>`}render(){let{direction:e}=this;return this.interactiveContainer({disabled:this.disabled,children:l`<div .ariaLabel=${this.label} .ariaLive=${this.playing?"off":"polite"} .ariaRoleDescription=${this.messages.carousel} class=${r({[i.container]:!0,[i.containerOverlaid]:this.controlOverlay,[i.containerEdged]:this.arrowType==="edge"})} @focusin=${this.handleFocusIn} @focusout=${this.handleFocusOut} @keydown=${this.containerKeyDownHandler} @mouseenter=${this.handleMouseIn} @mouseleave=${this.handleMouseOut} role=group tabindex=0 ${b(this.containerRef)}><section class=${r({[i.itemContainer]:!0,[i.itemContainerForward]:e==="forward",[i.itemContainerBackward]:e==="backward"})} id=${this.containerId??c} ${b(this.itemContainerRef)}><slot @slotchange=${this.handleSlotChange}></slot></section>${this.renderPaginationArea()}${this.arrowType==="edge"&&this.hasMultiple&&this.renderArrow("previous")||""}${this.arrowType==="edge"&&this.hasMultiple&&this.renderArrow("next")||""}</div>`})}};E("calcite-carousel",w);export{w as Carousel};