@esri/calcite-components
Version:
Web Components for Esri's Calcite Design System.
5 lines (4 loc) • 6.36 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 M}from"./FN45KTPK.js";import{c as x,e as S,f as A,h as D}from"./ZAT242GT.js";import{c as C,d as k}from"./JSDTVKI3.js";import{a as w,b as I}from"./BVJFCLMH.js";import"./5RDOSP2E.js";import{e as v,v as y}from"./3ADX47DD.js";import{d as b}from"./HPN2C7M6.js";import"./JOSABGK6.js";import"./NNVH7JUI.js";import{E as p,F as f,J as u,R as g,c as h,d as c,q as m}from"./BJZTU5BQ.js";var $={itemWrapper:"item-wrapper"},E={validationMessage:"segmentedControlValidationMessage"},z=h`: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;flex-direction:column}.item-wrapper{display:flex;background-color:var(--calcite-color-foreground-1);inline-size:fit-content;outline:1px solid var(--calcite-segmented-control-border-color, var(--calcite-color-border-input));outline-offset:-1px}:host([appearance=outline])>.item-wrapper{background-color:transparent}:host([disabled]) ::slotted([calcite-hydrated][disabled]),:host([disabled]) [calcite-hydrated][disabled]{opacity:1}.interaction-container{display:contents}:host([layout=vertical])>.item-wrapper{flex-direction:column;align-items:flex-start;align-self:flex-start}:host([width=full])>.item-wrapper{inline-size:100%;min-inline-size:fit-content}:host([width=full])>.item-wrapper ::slotted(calcite-segmented-control-item){flex:1 1 auto}:host([width=full][layout=vertical])>.item-wrapper ::slotted(calcite-segmented-control-item){justify-content:flex-start}.validation-container{display:flex;flex-direction:column;align-items:flex-start;align-self:stretch}:host([scale=m]) .validation-container,:host([scale=l]) .validation-container{padding-block-start:.5rem}:host([scale=s]) .validation-container{padding-block-start:.25rem}::slotted(input[slot=hidden-form-input]){margin:0!important;opacity:0!important;outline:none!important;padding:0!important;position:absolute!important;inset:0!important;transform:none!important;-webkit-appearance:none!important;z-index:-1!important}:host([hidden]){display:none}[hidden]{display:none}`,d=class extends p{constructor(){super(),this.items=[],this.appearance="solid",this.disabled=!1,this.layout="horizontal",this.required=!1,this.scale="m",this.status="idle",this.validity={valid:!1,badInput:!1,customError:!1,patternMismatch:!1,rangeOverflow:!1,rangeUnderflow:!1,stepMismatch:!1,tooLong:!1,tooShort:!1,typeMismatch:!1,valueMissing:!1},this.value=null,this.width="auto",this.calciteSegmentedControlChange=m({cancelable:!1}),this.listen("calciteInternalSegmentedControlItemChange",this.handleSelected),this.listen("keydown",this.handleKeyDown),this.listen("click",this.handleClick)}static{this.properties={appearance:[3,{},{reflect:!0}],disabled:[7,{},{reflect:!0,type:Boolean}],form:[3,{},{reflect:!0}],layout:[3,{},{reflect:!0}],name:[3,{},{reflect:!0}],required:[7,{},{reflect:!0,type:Boolean}],scale:[3,{},{reflect:!0}],selectedItem:[0,{},{attribute:!1}],status:[3,{},{reflect:!0}],validationIcon:[3,{converter:u},{reflect:!0}],validationMessage:1,validity:[0,{},{attribute:!1}],value:1,width:[3,{},{reflect:!0}]}}static{this.styles=z}async setFocus(){await b(this),(this.selectedItem||this.items[0])?.focus()}connectedCallback(){super.connectedCallback(),C(this),x(this)}willUpdate(e){(e.has("appearance")&&(this.hasUpdated||this.appearance!=="solid")||e.has("layout")&&(this.hasUpdated||this.layout!=="horizontal")||e.has("scale")&&(this.hasUpdated||this.scale!=="m"))&&this.handleItemPropChange(),e.has("value")&&(this.hasUpdated||this.value!==null)&&this.valueHandler(this.value),e.has("selectedItem")&&this.handleSelectedItemChange(this.selectedItem,e.get("selectedItem"))}updated(){w(this)}loaded(){A(this,this.value)}disconnectedCallback(){super.disconnectedCallback(),k(this),S(this)}valueHandler(e){let{items:t}=this;t.forEach(a=>a.checked=a.value===e)}handleSelectedItemChange(e,t){if(this.value=e?.value,e===t)return;let{items:a}=this,s=a.filter(i=>i===e).pop();s?this.selectItem(s):a[0]&&(a[0].tabIndex=0)}handleClick(e){this.disabled||e.target.localName==="calcite-segmented-control-item"&&this.selectItem(e.target,!0)}handleSelected(e){e.preventDefault();let t=e.target;t.checked&&this.selectItem(t),e.stopPropagation()}handleKeyDown(e){let t=["ArrowLeft","ArrowUp","ArrowRight","ArrowDown"," "],{key:a}=e,{el:s,selectedItem:i}=this;if(t.indexOf(a)===-1)return;let l=a;v(s)==="rtl"&&(a==="ArrowRight"&&(l="ArrowLeft"),a==="ArrowLeft"&&(l="ArrowRight"));let{items:o}=this,n=-1;switch(o.forEach((r,L)=>{r===i&&(n=L)}),l){case"ArrowLeft":case"ArrowUp":{e.preventDefault();let r=n<1?o[o.length-1]:o[n-1];this.selectItem(r,!0);return}case"ArrowRight":case"ArrowDown":{e.preventDefault();let r=n===-1?o[1]:o[n+1]||o[0];this.selectItem(r,!0);return}case" ":e.preventDefault(),this.selectItem(e.target,!0);return;default:return}}handleItemPropChange(){let{items:e}=this;e.forEach(t=>{t.appearance=this.appearance,t.layout=this.layout,t.scale=this.scale})}handleSelectedItem(){let{items:e}=this,t=e.filter(a=>a.checked).pop();t?this.selectItem(t):e[0]&&(e[0].tabIndex=0)}async handleDefaultSlotChange(e){let t=y(e).filter(a=>a.matches("calcite-segmented-control-item"));await Promise.all(t.map(a=>a.componentOnReady())),this.items=t,this.handleSelectedItem(),this.handleItemPropChange()}onLabelClick(){this.setFocus()}async selectItem(e,t=!1){if(e===this.selectedItem)return;let{items:a}=this,s=null;a.forEach(i=>{let l=i===e;(l&&!i.checked||!l&&i.checked)&&(i.checked=l),i.tabIndex=l?0:-1,l&&(s=i)}),this.selectedItem=s,s&&t&&(await this.updateComplete,this.calciteSegmentedControlChange.emit()),!!1&&s&&s.focus()}render(){return this.el.role="radiogroup",c`<div aria-errormessage=${E.validationMessage} .ariaInvalid=${this.status==="invalid"} class=${f($.itemWrapper)}>${I({disabled:this.disabled,children:c`<slot =${this.handleDefaultSlotChange}></slot>${D({component:this})}`})}</div>${this.validationMessage&&this.status==="invalid"?M({icon:this.validationIcon,id:E.validationMessage,message:this.validationMessage,scale:this.scale,status:this.status}):null}`}};g("calcite-segmented-control",d);export{d as SegmentedControl};