@esri/calcite-components
Version:
Web Components for Esri's Calcite Design System.
3 lines (2 loc) • 17.9 kB
JavaScript
/* COPYRIGHT Esri - https://js.arcgis.com/5.0/LICENSE.txt */
import{a as q}from"./MONAHAME.js";import{j as c}from"./4PBM4ZLG.js";import{a as j}from"./VO26MCLG.js";import{a as F}from"./MN4PER7E.js";import{c as R,d as W,e as B}from"./LCVNP3EO.js";import{c as O,e as A,h as H}from"./GTD2HZYS.js";import{a as T}from"./77EQHO2G.js";import{a as M}from"./LF4YWM37.js";import{c as I}from"./M6OXKYRM.js";import"./K7LRDT5O.js";import{a as k,b as L}from"./WAA77FNZ.js";import{a as E}from"./SQ6RHDDF.js";import{a as C}from"./3XLPUKLV.js";import"./3YEM2IPT.js";import{c as $}from"./QUTTHRH3.js";import"./MNIRD7Q7.js";import{t as u}from"./ZQBZ5QPB.js";import{a as S}from"./CIYXQ5G6.js";import{B as x,C as b,D as m,E as y,F as r,H as l,J as z,Q as w,g as v,h as s,p as g}from"./G7AHLVJ5.js";var t={assistiveText:"assistive-text",characterLimit:"character-limit",content:"content",container:"container",footer:"footer",characterOverLimit:"character--over-limit",readOnly:"readonly",textAreaInvalid:"text-area--invalid",footerSlotted:"footer--slotted",hide:"hide",footerEndSlotOnly:"footer--end-only",textArea:"text-area",textAreaOnly:"text-area--only",wrapper:"wrapper",loaderContainer:"loader-container",loader:"loader"},N={validationMessage:"textAreaValidationMessage"},V={footerStart:"footer-start",footerEnd:"footer-end"},P=100,p=Object.freeze({height:0,width:0}),U=v`: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{position:relative;box-sizing:border-box;display:inline-block;block-size:100%;inline-size:100%;--calcite-internal-text-area-border-color: var(--calcite-text-area-border-color, var(--calcite-color-border-input));--calcite-internal-text-area-footer-border-color: var( --calcite-text-area-footer-border-color, var(--calcite-internal-text-area-border-color) );--calcite-internal-text-area-corner-radius: var( --calcite-text-area-corner-radius, var(--calcite-corner-radius-default) );--calcite-internal-text-area-shadow: var(--calcite-text-area-shadow, var(--calcite-shadow-none));--calcite-internal-text-area-footer-background-color: var( --calcite-text-area-footer-background-color, var(--calcite-text-area-background-color, var(--calcite-color-foreground-1)) );min-block-size:var(--calcite-text-area-min-height, calc(2 * var(--calcite-internal-text-area-padding-block) + 2 * var(--calcite-border-width-sm)));min-inline-size:var(--calcite-text-area-min-width, 12rem)}.wrapper{box-sizing:border-box;block-size:100%;inline-size:100%;box-shadow:var(--calcite-internal-text-area-shadow);border-radius:var(--calcite-internal-text-area-corner-radius)}.text-area,.footer{font-size:var(--calcite-text-area-font-size, var(--calcite-font-size--1));padding-block:var(--calcite-internal-text-area-padding-block);padding-inline:var(--calcite-internal-text-area-padding-inline)}.footer{background-color:var(--calcite-internal-text-area-footer-background-color);border-radius:0 0 var(--calcite-internal-text-area-corner-radius) var(--calcite-internal-text-area-corner-radius)}.text-area{position:relative;margin:0;box-sizing:border-box;display:block;inline-size:100%;--calcite-internal-text-area-border-block-end-color: var(--calcite-internal-text-area-border-color);border:var(--calcite-border-width-sm) solid var(--calcite-internal-text-area-border-color);border-block-end-color:var(--calcite-internal-text-area-border-block-end-color);color:var(--calcite-text-area-text-color, var(--calcite-color-text-1));font-family:inherit;max-block-size:var(--calcite-text-area-max-height);min-block-size:calc(var(--calcite-text-area-min-height, 0px) - var(--calcite-internal-text-area-footer-min-height, 0px));max-inline-size:var(--calcite-text-area-max-width);min-inline-size:var(--calcite-text-area-min-width, 12rem);background-color:var(--calcite-text-area-background-color, var(--calcite-color-foreground-1));border-radius:var(--calcite-internal-text-area-corner-radius) var(--calcite-internal-text-area-corner-radius) 0 0}.text-area::placeholder{font-weight:var(--calcite-font-weight-normal)} screen and (max-width:480px){.text-area{resize:none}}.text-area: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))))}.text-area.text-area--invalid{--calcite-internal-text-area-border-color: var(--calcite-color-status-danger)}.text-area.text-area--invalid:focus{outline:var(--calcite-border-width-md) solid var(--calcite-color-status-danger);outline-offset:calc(calc(-1 * var(--calcite-spacing-base)) * calc(1 - (2*clamp(0,var(--calcite-offset-invert-focus),1))))}.text-area.footer--slotted{min-inline-size:18rem}.text-area.text-area--only{border-radius:var(--calcite-internal-text-area-corner-radius)}.text-area:not(.text-area--only,.text-area--invalid){--calcite-internal-text-area-border-block-end-color: var( --calcite-text-area-divider-color, var(--calcite-color-border-3) )}.loader-container{position:relative;block-size:inherit}.loader{position:absolute;inset-block-start:0;inset-block-start:var(--calcite-spacing-px);inset-inline:var(--calcite-spacing-px)}.footer{box-sizing:border-box;display:flex;align-items:center;border:var(--calcite-border-width-sm) solid var(--calcite-internal-text-area-footer-border-color);border-block-start:var(--calcite-border-width-none);min-block-size:var(--calcite-internal-text-area-footer-min-height)}.character-limit{display:flex;align-items:center;justify-content:flex-end;white-space:nowrap;font-size:var(--calcite-text-area-font-size, var(--calcite-font-size--1));font-weight:var(--calcite-font-weight-regular);color:var(--calcite-text-area-character-limit-text-color, var(--calcite-color-text-2));padding-inline-start:var(--calcite-spacing-md)}.character--over-limit{font-weight:var(--calcite-font-weight-bold);color:var(--calcite-color-status-danger)}.readonly{background-color:var(--calcite-text-area-background-color, var(--calcite-color-background));font-weight:var(--calcite-font-weight-medium)}.footer.readonly{background-color:var(--calcite-internal-text-area-footer-background-color, var(--calcite-color-background))}.content,.hide{display:none}.container{display:flex;inline-size:100%;justify-content:space-between}.footer--end-only{justify-content:flex-end}.assistive-text{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}.text-area.text-area--only{block-size:100%;min-block-size:var(--calcite-text-area-min-height, 0)}:host([resize=none]) .text-area{resize:none}:host([resize=horizontal]) .text-area{resize:horizontal}:host([resize=vertical]) .text-area{resize:vertical}:host([scale=s]){--calcite-internal-text-area-padding-block: var(--calcite-spacing-xxs);--calcite-internal-text-area-padding-inline: var(--calcite-spacing-sm);--calcite-internal-text-area-footer-min-height: 1.75rem}:host([scale=s]) .text-area,:host([scale=s]) .footer,:host([scale=s]) .character-limit{font-size:var(--calcite-text-area-font-size, var(--calcite-font-size--2))}:host([scale=s]) .character-limit{padding-inline-start:var(--calcite-spacing-sm)}:host([scale=m]){--calcite-internal-text-area-padding-block: var(--calcite-spacing-sm);--calcite-internal-text-area-padding-inline: var(--calcite-spacing-md);--calcite-internal-text-area-footer-min-height: 2.25rem}:host([scale=l]){--calcite-internal-text-area-padding-block: var(--calcite-spacing-md);--calcite-internal-text-area-padding-inline: var(--calcite-spacing-lg);--calcite-internal-text-area-footer-min-height: 2.75rem}:host([scale=l]) .text-area,:host([scale=l]) .footer,:host([scale=l]) .character-limit{font-size:var(--calcite-text-area-font-size, var(--calcite-font-size-0))}:host([scale=l]) .character-limit{padding-inline-start:var(--calcite-spacing-lg)}:host([status=invalid]){--calcite-internal-text-area-border-color: var(--calcite-color-status-danger)}:host([status=invalid]) .text-area:focus{outline:var(--calcite-border-width-md) solid var(--calcite-color-status-danger);outline-offset:calc(calc(-1 * var(--calcite-spacing-base)) * calc(1 - (2*clamp(0,var(--calcite-offset-invert-focus),1))))}:host([disabled]) .text-area,:host([disabled]) .footer{opacity:var(--calcite-opacity-half)}.internal-label-alignment--center{align-items:center}.internal-label-alignment--end{align-items:end}.internal-label--container{display:flex;justify-content:space-between;color:var(--calcite-color-text-1)}.internal-label-required--indicator{font-weight:var(--calcite-font-weight-medium);color:var(--calcite-color-status-danger);padding-inline:var(--calcite-spacing-base)}.internal-label-required--indicator:hover{cursor:help}.internal-label--text{line-height:1}:host([scale=s]) .internal-label-spacing--bottom{margin-block-end:var(--calcite-spacing-xxs)}:host([scale=s]) .internal-label-spacing-inline--end{margin-inline-end:var(--calcite-spacing-sm)}:host([scale=s]) .internal-label-spacing-inline--start{margin-inline-start:var(--calcite-spacing-sm)}:host([scale=s]) .internal-label--text{font-size:var(--calcite-font-size--2)}:host([scale=m]) .internal-label-spacing--bottom{margin-block-end:var(--calcite-spacing-sm)}:host([scale=m]) .internal-label-spacing-inline--end{margin-inline-end:var(--calcite-spacing-sm)}:host([scale=m]) .internal-label-spacing-inline--start{margin-inline-start:var(--calcite-spacing-sm)}:host([scale=m]) .internal-label--text{font-size:var(--calcite-font-size--1)}:host([scale=l]) .internal-label-spacing--bottom{margin-block-end:var(--calcite-spacing-sm)}:host([scale=l]) .internal-label-spacing-inline--end{margin-inline-end:var(--calcite-spacing-md)}:host([scale=l]) .internal-label-spacing-inline--start{margin-inline-start:var(--calcite-spacing-md)}:host([scale=l]) .internal-label--text{font-size:var(--calcite-font-size-0)}.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([disabled]) ::slotted([calcite-hydrated][disabled]),:host([disabled]) [calcite-hydrated][disabled]{opacity:1}.interaction-container{display:contents}:host([hidden]){display:none}[hidden]{display:none}::placeholder{font-weight:var(--calcite-font-weight-normal);color:var(--calcite-input-placeholder-text-color, var(--calcite-color-text-3))}`,f=class extends y{constructor(){super(...arguments),this.attributeWatch=$(["autofocus","spellcheck"],this.handleGlobalAttributesChanged),this.footerRef=b(),this.guid=S(),this.resizeObserver=k("resize",async()=>{await this.componentOnReady();let{textAreaHeight:e,textAreaWidth:a,elHeight:i,elWidth:n,footerHeight:d,footerWidth:o,validationMessageHeight:h}=this.getHeightAndWidthOfElements();if(o>0&&o!==a&&(this.footerRef.value.style.width=`${a}px`),this.resize==="none")return;let{width:D,height:G}=getComputedStyle(this.el);n!==a&&D!=="auto"&&this.updateSizeToAuto("width"),i!==e+d+h&&G!=="auto"&&this.updateSizeToAuto("height")}),this.cancelable=M()(this),this.updateSizeToAuto=I(e=>{this.el.style[e]="auto"},P,{edges:["trailing"]}),this.messages=E({blocking:!0}),this.focusSetter=C()(this),this.interactiveContainer=T(this),this.disabled=!1,this.groupSeparator=!1,this.limitText=!1,this.loading=!1,this.readOnly=!1,this.required=!1,this.resize="both",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="",this.wrap="soft",this.calciteTextAreaChange=g(),this.calciteTextAreaInput=g()}static{this.properties={endSlotHasElements:[16,{},{state:!0}],startSlotHasElements:[16,{},{state:!0}],columns:[11,{},{reflect:!0,type:Number}],disabled:[7,{},{reflect:!0,type:Boolean}],form:[3,{},{reflect:!0}],groupSeparator:[7,{},{reflect:!0,type:Boolean}],label:1,labelText:1,limitText:[7,{},{reflect:!0,type:Boolean}],loading:[7,{},{reflect:!0,type:Boolean}],maxLength:[11,{},{reflect:!0,type:Number}],messageOverrides:[0,{},{attribute:!1}],minLength:[11,{},{reflect:!0,type:Number}],name:[3,{},{reflect:!0}],numberingSystem:1,placeholder:1,readOnly:[7,{},{reflect:!0,type:Boolean}],required:[7,{},{reflect:!0,type:Boolean}],resize:[3,{},{reflect:!0}],rows:[11,{},{reflect:!0,type:Number}],scale:[3,{},{reflect:!0}],status:[3,{},{reflect:!0}],validationIcon:[3,{converter:z,type:String},{reflect:!0}],validationMessage:1,validity:[0,{},{attribute:!1}],value:1,wrap:[3,{},{reflect:!0}]}}static{this.styles=U}async selectText(){await this.componentOnReady(),this.textAreaEl?.select()}async setFocus(e){return this.focusSetter(()=>this.textAreaEl,e)}connectedCallback(){super.connectedCallback(),R(this),O(this),this.cancelable.add(this.updateSizeToAuto)}updated(){this.setTextAreaHeight()}disconnectedCallback(){super.disconnectedCallback(),W(this),A(this),this.resizeObserver?.disconnect()}handleGlobalAttributesChanged(){this.requestUpdate()}onLabelClick(){this.setFocus()}handleInput(e){this.value=e.target.value,this.calciteTextAreaInput.emit()}handleChange(){this.calciteTextAreaChange.emit()}contentSlotChangeHandler(){this.value||this.el.childNodes.forEach(a=>{a.nodeName==="#text"&&(this.value=a.nodeValue.trim())})}getLocalizedCharacterLength(){let e=this.value?this.value.length.toString():"0",a=this.maxLength.toString();return this.numberingSystem==="latn"?{currentLength:e,maxLength:a}:(c.numberFormatOptions={locale:this.messages._lang,numberingSystem:this.numberingSystem,signDisplay:"never",useGrouping:this.groupSeparator},{currentLength:c.localize(e),maxLength:c.localize(a)})}syncHiddenFormInput(e){e.setCustomValidity(""),this.isCharacterLimitExceeded()&&e.setCustomValidity(this.replacePlaceholdersInMessages()),q("textarea",this,e)}setTextAreaEl(e){L(this.resizeObserver,this.textAreaEl,e),this.textAreaEl=e}setTextAreaHeight(){let{textAreaHeight:e,elHeight:a,footerHeight:i,validationMessageHeight:n}=this.getHeightAndWidthOfElements();i>0&&e+i+n!=a&&(this.textAreaEl.style.height=`${a-i}px`)}getHeightAndWidthOfElements(){let{height:e,width:a}=this.textAreaEl?this.textAreaEl.getBoundingClientRect():p,{height:i,width:n}=this.el.getBoundingClientRect(),{height:d,width:o}=this.footerRef.value?this.footerRef.value.getBoundingClientRect():p,{height:h}=this.validationMessageEl?this.validationMessageEl.getBoundingClientRect():p;return{textAreaHeight:e,textAreaWidth:a,elHeight:i,elWidth:n,footerHeight:d,footerWidth:o,validationMessageHeight:h}}replacePlaceholdersInMessages(){return this.messages.tooLong.replace("{maxLength}",this.localizedCharacterLengthObj.maxLength).replace("{currentLength}",this.localizedCharacterLengthObj.currentLength)}isCharacterLimitExceeded(){return this.value?.length>this.maxLength}setValidationRef(e){e&&(this.validationMessageEl=e)}render(){let e=this.startSlotHasElements||this.endSlotHasElements||!!this.maxLength,a=s`<div class=${r(t.loader)}><calcite-progress .label=${this.messages.loading} type=indeterminate></calcite-progress></div>`;return this.interactiveContainer({disabled:this.disabled,children:s`<div class=${r(t.wrapper)}>${this.labelText&&F({labelText:this.labelText,onClick:this.onLabelClick,required:this.required,tooltipText:this.messages.required})||""}<div class=${r(t.loaderContainer)}>${this.loading?a:null}<textarea aria-describedby=${this.guid??l} aria-errormessage=${N.validationMessage} .ariaInvalid=${this.status==="invalid"||this.isCharacterLimitExceeded()} .ariaLabel=${B(this)} .autofocus=${this.el.autofocus} class=${r({[t.textArea]:!0,[t.readOnly]:this.readOnly,[t.textAreaInvalid]:this.isCharacterLimitExceeded(),[t.footerSlotted]:this.endSlotHasElements&&this.startSlotHasElements,[t.textAreaOnly]:!e})} .cols=${this.columns} .disabled=${this.disabled} maxlength=${(this.limitText?this.maxLength:void 0)??l} name=${this.name??l} =${this.handleChange} =${this.handleInput} placeholder=${this.placeholder??l} .readOnly=${this.readOnly} .required=${this.required} .rows=${this.rows} spellcheck=${this.el.spellcheck??l} .value=${x(this.value??"")} wrap=${this.wrap??l} ${m(this.setTextAreaEl)}></textarea><span class=${r({[t.content]:!0})}><slot =${this.contentSlotChangeHandler}></slot></span><footer class=${r({[t.footer]:!0,[t.readOnly]:this.readOnly,[t.hide]:!e})} ${m(this.footerRef)}><div class=${r({[t.container]:!0,[t.footerEndSlotOnly]:!this.startSlotHasElements&&this.endSlotHasElements})}><slot name=${V.footerStart} =${i=>this.startSlotHasElements=u(i)}></slot><slot name=${V.footerEnd} =${i=>this.endSlotHasElements=u(i)}></slot></div>${this.renderCharacterLimit()}</footer>${H({component:this})}${this.isCharacterLimitExceeded()&&s`<span aria-live=polite class=${r(t.assistiveText)} id=${this.guid??l}>${this.replacePlaceholdersInMessages()}</span>`||""}</div>${this.validationMessage&&this.status==="invalid"?j({icon:this.validationIcon,id:N.validationMessage,message:this.validationMessage,ref:this.setValidationRef,scale:this.scale,status:this.status}):null}</div>`})}renderCharacterLimit(){return this.maxLength?(this.localizedCharacterLengthObj=this.getLocalizedCharacterLength(),s`<span class=${r(t.characterLimit)}><span class=${r({[t.characterOverLimit]:this.isCharacterLimitExceeded()})}>${this.localizedCharacterLengthObj.currentLength}</span>/${this.localizedCharacterLengthObj.maxLength}</span>`):null}};w("calcite-text-area",f);export{f as TextArea};