vexip-ui
Version:
A Vue 3 UI library, Highly customizability, full TypeScript, performance pretty good
1 lines • 33 kB
Source Map (JSON)
{"version":3,"file":"input.cjs","sources":["../../../components/input/input.tsx"],"sourcesContent":["import { Icon } from '@/components/icon'\nimport { useFieldStore } from '@/components/form'\nimport { Renderer } from '@/components/renderer'\n\nimport { Transition, computed, defineComponent, nextTick, ref, renderSlot, toRef, watch } from 'vue'\n\nimport { useHover } from '@vexip-ui/hooks'\nimport {\n createIconProp,\n createSizeProp,\n createStateProp,\n emitEvent,\n useIcons,\n useLocale,\n useNameHelper,\n useProps,\n} from '@vexip-ui/config'\nimport { debounce, isNull, noop, throttle, toNumber } from '@vexip-ui/utils'\nimport { inputProps } from './props'\n\nimport type { ChangeEvent, InputType } from './symbol'\n\ntype InputEventType = 'input' | 'change'\n\nconst inputTypes = Object.freeze<InputType[]>(['text', 'password', 'date', 'datetime', 'time'])\n\nfunction toNotNullString(value: any) {\n return isNull(value) ? '' : String(value)\n}\n\nexport default defineComponent({\n name: 'Input',\n props: inputProps,\n emits: ['update:value'],\n setup(_props, { slots, emit, expose }) {\n const {\n idFor,\n labelId,\n state,\n disabled,\n loading,\n size,\n validateField,\n clearField,\n getFieldValue,\n setFieldValue,\n } = useFieldStore<string | number>(() => inputControl.value?.focus())\n\n const props = useProps('input', _props, {\n size: createSizeProp(size),\n state: createStateProp(state),\n locale: null,\n type: {\n default: 'text',\n validator: value => inputTypes.includes(value),\n },\n prefix: createIconProp(),\n prefixColor: '',\n suffix: createIconProp(),\n suffixColor: '',\n formatter: {\n default: null,\n isFunc: true,\n },\n value: {\n default: () => getFieldValue(),\n static: true,\n },\n placeholder: null,\n autofocus: false,\n spellcheck: false,\n autocomplete: false,\n readonly: false,\n disabled: () => disabled.value,\n controlClass: null,\n debounce: false,\n delay: null,\n maxLength: 0,\n hideCount: false,\n before: '',\n after: '',\n plainPassword: false,\n clearable: false,\n loading: () => loading.value,\n loadingIcon: createIconProp(),\n loadingLock: false,\n loadingEffect: null,\n transparent: false,\n sync: false,\n controlAttrs: null,\n name: {\n default: '',\n static: true,\n },\n slots: () => ({}),\n })\n\n const initValue = toNotNullString(props.value)\n\n const nh = useNameHelper('input')\n const icons = useIcons()\n const focused = ref(false)\n const currentValue = ref(initValue)\n const showPassword = ref(false)\n const currentLength = ref(initValue.length)\n const beforeHover = ref(false)\n const afterHover = ref(false)\n const composing = ref(false)\n\n const inputControl = ref<HTMLInputElement>()\n\n const { wrapper: control, isHover } = useHover()\n const locale = useLocale('input', toRef(props, 'locale'))\n\n let lastValue = props.value\n\n const hasBefore = computed(() => {\n return !!(\n slots.before ||\n slots.beforeAction ||\n slots['before-action'] ||\n props.before ||\n props.slots.before ||\n props.slots.beforeAction\n )\n })\n const hasAfter = computed(() => {\n return !!(\n slots.after ||\n slots.afterAction ||\n slots['after-action'] ||\n props.after ||\n props.slots.after ||\n props.slots.afterAction\n )\n })\n const basisClass = computed(() => {\n return {\n [nh.bs('wrapper')]: true,\n [nh.bs('vars')]: true,\n [nh.bm('inherit')]: props.inherit,\n [nh.bm(props.size)]: props.size !== 'default',\n }\n })\n const readonly = computed(() => (props.loading && props.loadingLock) || props.readonly)\n const className = computed(() => {\n return [\n nh.b(),\n nh.bm(props.type),\n !hasBefore.value && !hasAfter.value && basisClass.value,\n {\n [nh.bm('focused')]: focused.value,\n [nh.bm('disabled')]: props.disabled,\n [nh.bm('readonly')]: readonly.value,\n [nh.bm('loading')]: props.loading,\n [nh.bm(props.state)]: props.state !== 'default',\n [nh.bm('before')]: slots.beforeAction || slots['before-action'] || props.slots.before,\n [nh.bm('after')]: slots.afterAction || slots['after-action'] || props.slots.after,\n [nh.bm('transparent')]: props.transparent,\n [nh.bm('plain-password')]: props.plainPassword,\n },\n ]\n })\n const wrapperClass = computed(() => {\n return {\n ...basisClass.value,\n [nh.bm(`wrapper--${props.size}`)]: props.size !== 'default',\n [nh.bs('wrapper--before-only')]: hasBefore.value && !hasAfter.value,\n [nh.bs('wrapper--after-only')]: !hasBefore.value && hasAfter.value,\n [nh.bm('transparent')]: props.transparent,\n }\n })\n const hasPrefix = computed(() => !!(slots.prefix || props.prefix || props.slots.prefix))\n const hasSuffix = computed(() => !!(slots.suffix || props.suffix || props.slots.suffix))\n const inputType = computed(() => {\n const type = props.type\n\n if (type === 'password') {\n return showPassword.value ? 'text' : 'password'\n }\n\n if (type === 'datetime') {\n return 'datetime-local'\n }\n\n return type\n })\n const formattedValue = computed(() => {\n return typeof props.formatter === 'function'\n ? toNotNullString(props.formatter(currentValue.value))\n : currentValue.value\n })\n const passwordIcon = computed(() =>\n showPassword.value ? icons.value.plainText : icons.value.cipherText,\n )\n const hasValue = computed(() => {\n return !(isNull(currentValue.value) || currentValue.value === '')\n })\n const showClear = computed(() => {\n return (\n !props.disabled && !readonly.value && props.clearable && hasValue.value && isHover.value\n )\n })\n const autoComplete = computed(() => {\n return typeof props.autocomplete === 'boolean'\n ? props.autocomplete\n ? 'on'\n : 'off'\n : props.autocomplete\n })\n\n watch(\n () => props.value,\n value => {\n currentValue.value = toNotNullString(value)\n lastValue = currentValue.value\n limitValueLength()\n },\n )\n watch(\n [formattedValue, inputControl],\n () => {\n if (inputControl.value) {\n inputControl.value.value = formattedValue.value\n }\n },\n { immediate: true, flush: 'post' },\n )\n\n // Expose api methods.\n // Need to define some same name methods in 'methods' option to support infer types.\n expose({\n idFor,\n labelId,\n focused,\n currentValue,\n showPassword,\n currentLength,\n composing,\n input: inputControl,\n copyValue,\n focus: (options?: FocusOptions) => {\n inputControl.value?.focus(options)\n },\n blur: () => {\n inputControl.value?.blur()\n },\n })\n\n function getLatestValue() {\n return typeof props.value === 'number' ? parseFloat(currentValue.value) : currentValue.value\n }\n\n function handleFocus(event: FocusEvent) {\n if (!focused.value) {\n focused.value = true\n emitEvent(props.onFocus, event)\n }\n }\n\n function handleBlur(event: FocusEvent) {\n if (focused.value) {\n focused.value = false\n\n setTimeout(() => {\n if (!focused.value) {\n emitEvent(props.onBlur, event)\n lastValue !== getLatestValue() && emitChangeEvent('change')\n }\n }, 120)\n }\n }\n\n function handleChange(event: Event) {\n const type = event.type as InputEventType\n\n if (composing.value) {\n if (type === 'input') return\n\n composing.value = false\n }\n\n currentValue.value = (event.target as HTMLInputElement).value\n limitValueLength()\n\n const value = currentValue.value\n\n setValue(value, type)\n }\n\n function setValue(value: string, type: InputEventType, sync = props.sync) {\n currentValue.value = value\n emitChangeEvent(type, sync)\n }\n\n function emitChangeEvent(type: InputEventType, sync = props.sync) {\n type = type === 'input' ? 'input' : 'change'\n\n const value = getLatestValue()\n\n if (type === 'change') {\n lastValue = value\n\n if (!sync) {\n emit('update:value', value)\n setFieldValue(value)\n }\n\n emitEvent(props.onChange as ChangeEvent, value)\n\n if (!sync) {\n validateField()\n }\n } else {\n if (sync) {\n emit('update:value', value)\n setFieldValue(value)\n }\n\n emitEvent(props.onInput as ChangeEvent, value)\n\n if (sync) {\n validateField()\n }\n }\n }\n\n function limitValueLength() {\n let value = currentValue.value\n\n if (isNull(value)) {\n currentLength.value = 0\n\n return\n }\n\n const maxLength = props.maxLength\n\n if (maxLength && value.length > maxLength) {\n value = value.slice(0, maxLength)\n }\n\n currentLength.value = value.length\n currentValue.value = value\n }\n\n function toggleShowPassword() {\n if (props.disabled) {\n return\n }\n\n showPassword.value = !showPassword.value\n nextTick(() => {\n inputControl.value?.focus()\n })\n }\n\n function handleClear(event: MouseEvent) {\n if (props.disabled || readonly.value) return\n\n event.stopPropagation()\n setValue('', 'change', false)\n emitEvent(props.onClear)\n nextTick(() => clearField(''))\n currentLength.value = 0\n inputControl.value?.focus()\n }\n\n function handleEnter() {\n emitEvent(props.onEnter)\n }\n\n function handlePrefixClick(event: MouseEvent) {\n emitEvent(props.onPrefixClick, event)\n }\n\n function handleSuffixClick(event: MouseEvent) {\n emitEvent(props.onSuffixClick, event)\n }\n\n function handleKeyDown(event: KeyboardEvent) {\n emitEvent(props.onKeyDown, event)\n }\n\n function handleKeyPress(event: KeyboardEvent) {\n emitEvent(props.onKeyPress, event)\n }\n\n function handleKeyUp(event: KeyboardEvent) {\n if (event.key === 'Enter') {\n handleEnter()\n }\n\n emitEvent(props.onKeyUp, event)\n }\n\n function handleCompositionStart(event: CompositionEvent) {\n composing.value = true\n emitEvent(props.onCompositionStart, event)\n }\n\n function handleCompositionEnd(event: CompositionEvent) {\n if (composing.value) {\n composing.value = false\n\n if (inputControl.value) {\n inputControl.value.dispatchEvent(new Event('input'))\n }\n }\n\n emitEvent(props.onCompositionEnd, event)\n }\n\n function copyValue() {\n const input = document.createElement('input')\n\n input.style.height = '0'\n input.setAttribute('readonly', 'readonly')\n input.value = currentValue.value\n document.body.appendChild(input)\n input.select()\n\n const isSuccess = document.execCommand('copy')\n\n document.body.removeChild(input)\n\n return isSuccess\n }\n\n function preventDefault(event: Event) {\n event.preventDefault()\n }\n\n const delay = toNumber(props.delay)\n const handleInput = props.debounce\n ? debounce(handleChange, delay || 100)\n : throttle(handleChange, delay || 16)\n\n function renderPrefix() {\n return (\n <div\n class={[nh.be('icon'), nh.be('prefix')]}\n style={{ color: props.prefixColor }}\n onClick={handlePrefixClick}\n >\n {renderSlot(slots, 'prefix', undefined, () => [\n <Renderer renderer={props.slots.prefix}>\n <Icon icon={props.prefix}></Icon>\n </Renderer>,\n ])}\n </div>\n )\n }\n\n function renderCustomSuffix() {\n if (hasSuffix.value) {\n return (\n <div\n key={'suffix'}\n class={[nh.be('icon'), nh.be('suffix')]}\n style={{\n color: props.suffixColor,\n opacity: showClear.value || props.loading ? '0%' : '',\n }}\n onClick={handleSuffixClick}\n >\n {renderSlot(slots, 'suffix', undefined, () => [\n <Renderer renderer={props.slots.suffix}>\n <Icon icon={props.suffix}></Icon>\n </Renderer>,\n ])}\n </div>\n )\n }\n\n if (props.clearable || props.loading) {\n return (\n <div key={'placeholder'} class={[nh.be('icon'), nh.bem('icon', 'placeholder')]}></div>\n )\n }\n\n return null\n }\n\n function renderSuffixAction() {\n if (showClear.value) {\n return (\n <button\n key={'clear'}\n class={[nh.be('icon'), nh.be('clear')]}\n type={'button'}\n tabindex={-1}\n aria-label={locale.value.ariaLabel.clear}\n onClick={handleClear}\n >\n <Icon {...icons.value.clear} label={'clear'}></Icon>\n </button>\n )\n }\n\n if (props.loading) {\n return (\n <div key={'loading'} class={[nh.be('icon'), nh.be('loading')]}>\n <Icon\n {...icons.value.loading}\n effect={props.loadingEffect || icons.value.loading.effect}\n icon={props.loadingIcon || icons.value.loading.icon}\n label={'loading'}\n ></Icon>\n </div>\n )\n }\n\n return null\n }\n\n function renderSuffix() {\n return (\n <div class={nh.be('suffix-wrapper')}>\n {renderCustomSuffix()}\n <Transition name={nh.ns('fade')} appear>\n {renderSuffixAction()}\n </Transition>\n </div>\n )\n }\n\n function renderCount() {\n return (\n <div class={nh.be('count')}>\n {renderSlot(slots, 'count', { value: currentValue.value }, () => [\n <Renderer renderer={props.slots.count} data={{ value: currentValue.value }}>\n {props.maxLength === Infinity\n ? currentLength.value\n : `${currentLength.value}/${props.maxLength}`}\n </Renderer>,\n ])}\n </div>\n )\n }\n\n function renderPlainPassword() {\n if (props.type === 'password' && props.plainPassword) {\n return (\n <div\n key={'password'}\n class={[nh.be('icon'), nh.be('password')]}\n style={{\n color: props.suffixColor,\n }}\n onClick={toggleShowPassword}\n >\n {renderSlot(slots, 'password', { plain: showPassword.value }, () => [\n <Renderer renderer={props.slots.password} data={{ plain: showPassword.value }}>\n <Icon {...passwordIcon.value}></Icon>\n </Renderer>,\n ])}\n </div>\n )\n }\n\n return null\n }\n\n function renderControl() {\n return (\n <div\n id={idFor.value}\n ref={control}\n class={className.value}\n onClick={() => inputControl.value?.focus()}\n >\n {hasPrefix.value && renderPrefix()}\n <input\n {...props.controlAttrs}\n ref={inputControl}\n class={[nh.be('control'), props.controlAttrs?.class, props.controlClass]}\n type={inputType.value}\n autofocus={props.autofocus}\n autocomplete={autoComplete.value}\n spellcheck={props.spellcheck}\n disabled={props.disabled}\n readonly={readonly.value || undefined}\n placeholder={props.placeholder ?? locale.value.placeholder}\n maxlength={props.maxLength > 0 ? props.maxLength : undefined}\n name={props.name || props.controlAttrs?.name}\n aria-labelledby={labelId.value}\n onBlur={handleBlur}\n onFocus={handleFocus}\n onInput={handleInput}\n onChange={handleChange}\n onKeypress={handleKeyPress}\n onKeydown={handleKeyDown}\n onKeyup={handleKeyUp}\n onSubmit={preventDefault}\n onCompositionstart={handleCompositionStart}\n onCompositionend={handleCompositionEnd}\n />\n {renderSuffix()}\n {props.maxLength > 0 && !props.hideCount ? renderCount() : null}\n {renderPlainPassword()}\n </div>\n )\n }\n\n function renderAside(type: 'before' | 'after') {\n const buttonSlot =\n slots[`${type}Action`] || slots[`${type}-action`] || props.slots[`${type}Action`]\n\n if (buttonSlot) {\n return (\n <div\n class={[nh.be(type), nh.bem(type, 'action')]}\n onMouseenter={() => ((type === 'before' ? beforeHover : afterHover).value = true)}\n onMouseleave={() => ((type === 'before' ? beforeHover : afterHover).value = false)}\n >\n {buttonSlot()}\n </div>\n )\n }\n\n return (\n <div class={nh.be(type)}>\n {slots[type] ? (\n slots[type]!()\n ) : (\n <Renderer renderer={props.slots[type]}>{props[type]}</Renderer>\n )}\n </div>\n )\n }\n\n return () => {\n if (hasBefore.value || hasAfter.value) {\n return (\n <div class={wrapperClass.value}>\n {hasBefore.value && renderAside('before')}\n {renderControl()}\n {hasAfter.value && renderAside('after')}\n </div>\n )\n }\n\n return renderControl()\n }\n },\n methods: {\n focus: noop as (options?: FocusOptions) => void,\n blur: noop as () => void,\n },\n})\n"],"names":["_isSlot","s","Object","prototype","toString","call","_isVNode","inputTypes","freeze","toNotNullString","value","isNull","String","defineComponent","name","props","inputProps","emits","setup","_props","slots","emit","expose","idFor","labelId","state","disabled","loading","size","validateField","clearField","getFieldValue","setFieldValue","useFieldStore","inputControl","focus","useProps","createSizeProp","createStateProp","locale","type","default","validator","includes","prefix","createIconProp","prefixColor","suffix","suffixColor","formatter","isFunc","static","placeholder","autofocus","spellcheck","autocomplete","readonly","controlClass","debounce","delay","maxLength","hideCount","before","after","plainPassword","clearable","loadingIcon","loadingLock","loadingEffect","transparent","sync","controlAttrs","initValue","nh","useNameHelper","icons","useIcons","focused","ref","currentValue","showPassword","currentLength","length","beforeHover","afterHover","composing","wrapper","control","isHover","useHover","useLocale","toRef","lastValue","hasBefore","computed","beforeAction","hasAfter","afterAction","basisClass","bs","bm","inherit","className","b","wrapperClass","hasPrefix","hasSuffix","inputType","formattedValue","passwordIcon","plainText","cipherText","hasValue","showClear","autoComplete","watch","limitValueLength","immediate","flush","input","copyValue","options","blur","getLatestValue","parseFloat","handleFocus","event","emitEvent","onFocus","handleBlur","setTimeout","onBlur","emitChangeEvent","handleChange","target","setValue","onChange","onInput","slice","toggleShowPassword","nextTick","handleClear","stopPropagation","onClear","handleEnter","onEnter","handlePrefixClick","onPrefixClick","handleSuffixClick","onSuffixClick","handleKeyDown","onKeyDown","handleKeyPress","onKeyPress","handleKeyUp","key","onKeyUp","handleCompositionStart","onCompositionStart","handleCompositionEnd","dispatchEvent","Event","onCompositionEnd","document","createElement","style","height","setAttribute","body","appendChild","select","isSuccess","execCommand","removeChild","preventDefault","toNumber","handleInput","throttle","renderPrefix","_createVNode","be","color","renderSlot","undefined","Renderer","Icon","renderCustomSuffix","opacity","bem","renderSuffixAction","ariaLabel","clear","_mergeProps","effect","icon","renderSuffix","_slot","Transition","ns","renderCount","count","Infinity","renderPlainPassword","plain","password","renderControl","onClick","class","renderAside","buttonSlot","onMouseenter","onMouseleave","methods","noop"],"mappings":"6VAkBoC,SAAAA,GAAAC,EAAA,CAAA,OAAA,OAAAA,GAAA,YAAAC,OAAAC,UAAAC,SAAAC,KAAAJ,CAAA,IAAAK,mBAAAA,CAAAA,EAAAA,QAAAL,CAAA,CAAA,CAMpC,MAAMM,GAAaL,OAAOM,OAAoB,CAAC,OAAQ,WAAY,OAAQ,WAAY,MAAM,CAAC,EAE9F,SAASC,EAAgBC,EAAY,CACnC,OAAOC,EAAM,OAACD,CAAK,EAAI,GAAKE,OAAOF,CAAK,CAC1C,CAEA,MAAeG,qBAAgB,CAC7BC,KAAM,QACNC,MAAOC,GAAU,WACjBC,MAAO,CAAC,cAAc,EACtBC,MAAMC,EAAQ,CAAEC,MAAAA,EAAOC,KAAAA,EAAMC,OAAAA,CAAO,EAAG,CACrC,KAAM,CACJC,MAAAA,EACAC,QAAAA,EACAC,MAAAA,EACAC,SAAAA,EACAC,QAAAA,EACAC,KAAAA,EACAC,cAAAA,EACAC,WAAAA,EACAC,cAAAA,EACAC,cAAAA,CACD,EAAGC,GAAa,cAAkB,IAAMC,OAAAA,OAAAA,EAAAA,EAAaxB,QAAbwB,YAAAA,EAAoBC,QAAO,EAE9DpB,EAAQqB,EAAAA,SAAS,QAASjB,EAAQ,CACtCS,KAAMS,EAAc,eAACT,CAAI,EACzBH,MAAOa,EAAe,gBAACb,CAAK,EAC5Bc,OAAQ,KACRC,KAAM,CACJC,QAAS,OACTC,UAAWhC,GAASH,GAAWoC,SAASjC,CAAK,CAC9C,EACDkC,OAAQC,EAAAA,eAAgB,EACxBC,YAAa,GACbC,OAAQF,EAAAA,eAAgB,EACxBG,YAAa,GACbC,UAAW,CACTR,QAAS,KACTS,OAAQ,EACT,EACDxC,MAAO,CACL+B,QAASA,IAAMV,EAAe,EAC9BoB,OAAQ,EACT,EACDC,YAAa,KACbC,UAAW,GACXC,WAAY,GACZC,aAAc,GACdC,SAAU,GACV9B,SAAUA,IAAMA,EAAShB,MACzB+C,aAAc,KACdC,SAAU,GACVC,MAAO,KACPC,UAAW,EACXC,UAAW,GACXC,OAAQ,GACRC,MAAO,GACPC,cAAe,GACfC,UAAW,GACXtC,QAASA,IAAMA,EAAQjB,MACvBwD,YAAarB,EAAAA,eAAgB,EAC7BsB,YAAa,GACbC,cAAe,KACfC,YAAa,GACbC,KAAM,GACNC,aAAc,KACdzD,KAAM,CACJ2B,QAAS,GACTU,OAAQ,EACT,EACD/B,MAAOA,KAAO,CAAE,EAClB,CAAC,EAEKoD,EAAY/D,EAAgBM,EAAML,KAAK,EAEvC+D,EAAKC,EAAa,cAAC,OAAO,EAC1BC,EAAQC,EAAAA,SAAU,EAClBC,EAAUC,EAAG,IAAC,EAAK,EACnBC,EAAeD,EAAG,IAACN,CAAS,EAC5BQ,EAAeF,EAAG,IAAC,EAAK,EACxBG,EAAgBH,EAAAA,IAAIN,EAAUU,MAAM,EACpCC,EAAcL,EAAG,IAAC,EAAK,EACvBM,EAAaN,EAAG,IAAC,EAAK,EACtBO,EAAYP,EAAG,IAAC,EAAK,EAErB5C,EAAe4C,EAAAA,IAAuB,EAEtC,CAAEQ,QAASC,EAASC,QAAAA,CAAS,EAAGC,YAAU,EAC1ClD,EAASmD,EAAAA,UAAU,QAASC,EAAAA,MAAM5E,EAAO,QAAQ,CAAC,EAExD,IAAI6E,EAAY7E,EAAML,MAEtB,MAAMmF,EAAYC,EAAAA,SAAS,IAClB,CAAC,EACN1E,EAAM0C,QACN1C,EAAM2E,cACN3E,EAAM,eAAe,GACrBL,EAAM+C,QACN/C,EAAMK,MAAM0C,QACZ/C,EAAMK,MAAM2E,aAEf,EACKC,EAAWF,EAAAA,SAAS,IACjB,CAAC,EACN1E,EAAM2C,OACN3C,EAAM6E,aACN7E,EAAM,cAAc,GACpBL,EAAMgD,OACNhD,EAAMK,MAAM2C,OACZhD,EAAMK,MAAM6E,YAEf,EACKC,EAAaJ,EAAAA,SAAS,KACnB,CACL,CAACrB,EAAG0B,GAAG,SAAS,CAAC,EAAG,GACpB,CAAC1B,EAAG0B,GAAG,MAAM,CAAC,EAAG,GACjB,CAAC1B,EAAG2B,GAAG,SAAS,CAAC,EAAGrF,EAAMsF,QAC1B,CAAC5B,EAAG2B,GAAGrF,EAAMa,IAAI,CAAC,EAAGb,EAAMa,OAAS,SACrC,EACF,EACK4B,EAAWsC,EAAQ,SAAC,IAAO/E,EAAMY,SAAWZ,EAAMoD,aAAgBpD,EAAMyC,QAAQ,EAChF8C,EAAYR,EAAAA,SAAS,IAClB,CACLrB,EAAG8B,EAAC,EACJ9B,EAAG2B,GAAGrF,EAAMyB,IAAI,EAChB,CAACqD,EAAUnF,OAAS,CAACsF,EAAStF,OAASwF,EAAWxF,MAClD,CACE,CAAC+D,EAAG2B,GAAG,SAAS,CAAC,EAAGvB,EAAQnE,MAC5B,CAAC+D,EAAG2B,GAAG,UAAU,CAAC,EAAGrF,EAAMW,SAC3B,CAAC+C,EAAG2B,GAAG,UAAU,CAAC,EAAG5C,EAAS9C,MAC9B,CAAC+D,EAAG2B,GAAG,SAAS,CAAC,EAAGrF,EAAMY,QAC1B,CAAC8C,EAAG2B,GAAGrF,EAAMU,KAAK,CAAC,EAAGV,EAAMU,QAAU,UACtC,CAACgD,EAAG2B,GAAG,QAAQ,CAAC,EAAGhF,EAAM2E,cAAgB3E,EAAM,eAAe,GAAKL,EAAMK,MAAM0C,OAC/E,CAACW,EAAG2B,GAAG,OAAO,CAAC,EAAGhF,EAAM6E,aAAe7E,EAAM,cAAc,GAAKL,EAAMK,MAAM2C,MAC5E,CAACU,EAAG2B,GAAG,aAAa,CAAC,EAAGrF,EAAMsD,YAC9B,CAACI,EAAG2B,GAAG,gBAAgB,CAAC,EAAGrF,EAAMiD,aACnC,CAAC,CAEJ,EACKwC,GAAeV,EAAAA,SAAS,KACrB,CACL,GAAGI,EAAWxF,MACd,CAAC+D,EAAG2B,GAAG,YAAYrF,EAAMa,IAAI,EAAE,CAAC,EAAGb,EAAMa,OAAS,UAClD,CAAC6C,EAAG0B,GAAG,sBAAsB,CAAC,EAAGN,EAAUnF,OAAS,CAACsF,EAAStF,MAC9D,CAAC+D,EAAG0B,GAAG,qBAAqB,CAAC,EAAG,CAACN,EAAUnF,OAASsF,EAAStF,MAC7D,CAAC+D,EAAG2B,GAAG,aAAa,CAAC,EAAGrF,EAAMsD,WAC/B,EACF,EACKoC,GAAYX,EAAAA,SAAS,IAAM,CAAC,EAAE1E,EAAMwB,QAAU7B,EAAM6B,QAAU7B,EAAMK,MAAMwB,OAAO,EACjF8D,GAAYZ,EAAAA,SAAS,IAAM,CAAC,EAAE1E,EAAM2B,QAAUhC,EAAMgC,QAAUhC,EAAMK,MAAM2B,OAAO,EACjF4D,GAAYb,EAAAA,SAAS,IAAM,CAC/B,MAAMtD,EAAOzB,EAAMyB,KAEnB,OAAIA,IAAS,WACJwC,EAAatE,MAAQ,OAAS,WAGnC8B,IAAS,WACJ,iBAGFA,CACT,CAAC,EACKoE,EAAiBd,EAAAA,SAAS,IACvB,OAAO/E,EAAMkC,WAAc,WAC9BxC,EAAgBM,EAAMkC,UAAU8B,EAAarE,KAAK,CAAC,EACnDqE,EAAarE,KAClB,EACKmG,GAAef,EAAAA,SAAS,IAC5Bd,EAAatE,MAAQiE,EAAMjE,MAAMoG,UAAYnC,EAAMjE,MAAMqG,UAC3D,EACMC,GAAWlB,EAAAA,SAAS,IACjB,EAAEnF,EAAM,OAACoE,EAAarE,KAAK,GAAKqE,EAAarE,QAAU,GAC/D,EACKuG,EAAYnB,EAAAA,SAAS,IAEvB,CAAC/E,EAAMW,UAAY,CAAC8B,EAAS9C,OAASK,EAAMkD,WAAa+C,GAAStG,OAAS8E,EAAQ9E,KAEtF,EACKwG,GAAepB,EAAAA,SAAS,IACrB,OAAO/E,EAAMwC,cAAiB,UACjCxC,EAAMwC,aACJ,KACA,MACFxC,EAAMwC,YACX,EAED4D,EAAAA,MACE,IAAMpG,EAAML,MACZA,GAAS,CACPqE,EAAarE,MAAQD,EAAgBC,CAAK,EAC1CkF,EAAYb,EAAarE,MACzB0G,EAAkB,CACpB,CACF,EACAD,EAAAA,MACE,CAACP,EAAgB1E,CAAY,EAC7B,IAAM,CACAA,EAAaxB,QACfwB,EAAaxB,MAAMA,MAAQkG,EAAelG,MAE9C,EACA,CAAE2G,UAAW,GAAMC,MAAO,MAAO,CACnC,EAIAhG,EAAO,CACLC,MAAAA,EACAC,QAAAA,EACAqD,QAAAA,EACAE,aAAAA,EACAC,aAAAA,EACAC,cAAAA,EACAI,UAAAA,EACAkC,MAAOrF,EACPsF,UAAAA,GACArF,MAAQsF,GAA2B,QACjCvF,EAAAA,EAAaxB,QAAbwB,MAAAA,EAAoBC,MAAMsF,EAC3B,EACDC,KAAMA,IAAM,QACVxF,EAAAA,EAAaxB,QAAbwB,MAAAA,EAAoBwF,MACtB,CACF,CAAC,EAED,SAASC,GAAiB,CACxB,OAAO,OAAO5G,EAAML,OAAU,SAAWkH,WAAW7C,EAAarE,KAAK,EAAIqE,EAAarE,KACzF,CAEA,SAASmH,GAAYC,EAAmB,CACjCjD,EAAQnE,QACXmE,EAAQnE,MAAQ,GAChBqH,YAAUhH,EAAMiH,QAASF,CAAK,EAElC,CAEA,SAASG,GAAWH,EAAmB,CACjCjD,EAAQnE,QACVmE,EAAQnE,MAAQ,GAEhBwH,WAAW,IAAM,CACVrD,EAAQnE,QACXqH,YAAUhH,EAAMoH,OAAQL,CAAK,EAC7BlC,IAAc+B,EAAc,GAAMS,EAAgB,QAAQ,EAE7D,EAAE,GAAG,EAEV,CAEA,SAASC,EAAaP,EAAc,CAClC,MAAMtF,EAAOsF,EAAMtF,KAEnB,GAAI6C,EAAU3E,MAAO,CACnB,GAAI8B,IAAS,QAAS,OAEtB6C,EAAU3E,MAAQ,EACpB,CAEAqE,EAAarE,MAASoH,EAAMQ,OAA4B5H,MACxD0G,EAAkB,EAElB,MAAM1G,EAAQqE,EAAarE,MAE3B6H,EAAS7H,EAAO8B,CAAI,CACtB,CAEA,SAAS+F,EAAS7H,EAAe8B,EAAsB8B,EAAOvD,EAAMuD,KAAM,CACxES,EAAarE,MAAQA,EACrB0H,EAAgB5F,EAAM8B,CAAI,CAC5B,CAEA,SAAS8D,EAAgB5F,EAAsB8B,EAAOvD,EAAMuD,KAAM,CAChE9B,EAAOA,IAAS,QAAU,QAAU,SAEpC,MAAM9B,EAAQiH,EAAgB,EAE1BnF,IAAS,UACXoD,EAAYlF,EAEP4D,IACHjD,EAAK,eAAgBX,CAAK,EAC1BsB,EAActB,CAAK,GAGrBqH,YAAUhH,EAAMyH,SAAyB9H,CAAK,EAEzC4D,GACHzC,EAAe,IAGbyC,IACFjD,EAAK,eAAgBX,CAAK,EAC1BsB,EAActB,CAAK,GAGrBqH,YAAUhH,EAAM0H,QAAwB/H,CAAK,EAEzC4D,GACFzC,EAAe,EAGrB,CAEA,SAASuF,GAAmB,CAC1B,IAAI1G,EAAQqE,EAAarE,MAEzB,GAAIC,EAAAA,OAAOD,CAAK,EAAG,CACjBuE,EAAcvE,MAAQ,EAEtB,MACF,CAEA,MAAMkD,EAAY7C,EAAM6C,UAEpBA,GAAalD,EAAMwE,OAAStB,IAC9BlD,EAAQA,EAAMgI,MAAM,EAAG9E,CAAS,GAGlCqB,EAAcvE,MAAQA,EAAMwE,OAC5BH,EAAarE,MAAQA,CACvB,CAEA,SAASiI,IAAqB,CACxB5H,EAAMW,WAIVsD,EAAatE,MAAQ,CAACsE,EAAatE,MACnCkI,EAAAA,SAAS,IAAM,QACb1G,EAAAA,EAAaxB,QAAbwB,MAAAA,EAAoBC,OACtB,CAAC,EACH,CAEA,SAAS0G,GAAYf,EAAmB,OAClC/G,EAAMW,UAAY8B,EAAS9C,QAE/BoH,EAAMgB,gBAAiB,EACvBP,EAAS,GAAI,SAAU,EAAK,EAC5BR,EAAS,UAAChH,EAAMgI,OAAO,EACvBH,WAAS,IAAM9G,EAAW,EAAE,CAAC,EAC7BmD,EAAcvE,MAAQ,GACtBwB,EAAAA,EAAaxB,QAAbwB,MAAAA,EAAoBC,QACtB,CAEA,SAAS6G,IAAc,CACrBjB,EAAS,UAAChH,EAAMkI,OAAO,CACzB,CAEA,SAASC,GAAkBpB,EAAmB,CAC5CC,YAAUhH,EAAMoI,cAAerB,CAAK,CACtC,CAEA,SAASsB,GAAkBtB,EAAmB,CAC5CC,YAAUhH,EAAMsI,cAAevB,CAAK,CACtC,CAEA,SAASwB,GAAcxB,EAAsB,CAC3CC,YAAUhH,EAAMwI,UAAWzB,CAAK,CAClC,CAEA,SAAS0B,GAAe1B,EAAsB,CAC5CC,YAAUhH,EAAM0I,WAAY3B,CAAK,CACnC,CAEA,SAAS4B,GAAY5B,EAAsB,CACrCA,EAAM6B,MAAQ,SAChBX,GAAa,EAGfjB,YAAUhH,EAAM6I,QAAS9B,CAAK,CAChC,CAEA,SAAS+B,GAAuB/B,EAAyB,CACvDzC,EAAU3E,MAAQ,GAClBqH,YAAUhH,EAAM+I,mBAAoBhC,CAAK,CAC3C,CAEA,SAASiC,GAAqBjC,EAAyB,CACjDzC,EAAU3E,QACZ2E,EAAU3E,MAAQ,GAEdwB,EAAaxB,OACfwB,EAAaxB,MAAMsJ,cAAc,IAAIC,MAAM,OAAO,CAAC,GAIvDlC,YAAUhH,EAAMmJ,iBAAkBpC,CAAK,CACzC,CAEA,SAASN,IAAY,CACnB,MAAMD,EAAQ4C,SAASC,cAAc,OAAO,EAE5C7C,EAAM8C,MAAMC,OAAS,IACrB/C,EAAMgD,aAAa,WAAY,UAAU,EACzChD,EAAM7G,MAAQqE,EAAarE,MAC3ByJ,SAASK,KAAKC,YAAYlD,CAAK,EAC/BA,EAAMmD,OAAQ,EAEd,MAAMC,EAAYR,SAASS,YAAY,MAAM,EAE7CT,gBAASK,KAAKK,YAAYtD,CAAK,EAExBoD,CACT,CAEA,SAASG,GAAehD,EAAc,CACpCA,EAAMgD,eAAgB,CACxB,CAEA,MAAMnH,EAAQoH,EAAAA,SAAShK,EAAM4C,KAAK,EAC5BqH,GAAcjK,EAAM2C,SACtBA,EAAQ,SAAC2E,EAAc1E,GAAS,GAAG,EACnCsH,EAAQ,SAAC5C,EAAc1E,GAAS,EAAE,EAEtC,SAASuH,IAAe,CACtB,OAAAC,EAAAA,YAAA,MAAA,CAAA,MAEW,CAAC1G,EAAG2G,GAAG,MAAM,EAAG3G,EAAG2G,GAAG,QAAQ,CAAC,EAAC,MAChC,CAAEC,MAAOtK,EAAM+B,WAAa,EAAA,QAC1BoG,EAAiB,EAAA,CAEzBoC,EAAU,WAAClK,EAAO,SAAUmK,OAAW,IAAM,CAAAJ,EAAA,YAAAK,EAAA,CAAA,SACxBzK,EAAMK,MAAMwB,MAAM,EAAA,CAAAH,QAAAA,IAAA0I,CAAAA,EAAA,YAAAM,EAAA,CAAA,KACxB1K,EAAM6B,MAAM,EAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAE3B,CAAC,CAAA,CAGR,CAEA,SAAS8I,IAAqB,CAC5B,OAAIhF,GAAUhG,MACZyK,EAAAA,YAAA,MAAA,CAAA,IAES,SAAQ,MACN,CAAC1G,EAAG2G,GAAG,MAAM,EAAG3G,EAAG2G,GAAG,QAAQ,CAAC,EAAC,MAChC,CACLC,MAAOtK,EAAMiC,YACb2I,QAAS1E,EAAUvG,OAASK,EAAMY,QAAU,KAAO,EACpD,EAAA,QACQyH,EAAiB,EAAA,CAEzBkC,EAAU,WAAClK,EAAO,SAAUmK,OAAW,IAAM,CAAAJ,EAAA,YAAAK,EAAA,CAAA,SACxBzK,EAAMK,MAAM2B,MAAM,EAAA,CAAAN,QAAAA,IAAA0I,CAAAA,EAAA,YAAAM,EAAA,CAAA,KACxB1K,EAAMgC,MAAM,EAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAE3B,CAAC,CAAA,EAKJhC,EAAMkD,WAAalD,EAAMY,QAC3BwJ,EAAAA,YAAA,MAAA,CAAA,IACY,cAAa,MAAS,CAAC1G,EAAG2G,GAAG,MAAM,EAAG3G,EAAGmH,IAAI,OAAQ,aAAa,CAAC,CAAC,EAAA,IAAA,EAI3E,IACT,CAEA,SAASC,IAAqB,CAC5B,OAAI5E,EAAUvG,MACZyK,EAAAA,YAAA,SAAA,CAAA,IAES,QAAO,MACL,CAAC1G,EAAG2G,GAAG,MAAM,EAAG3G,EAAG2G,GAAG,OAAO,CAAC,EAAC,KAChC,SAAQ,SACJ,GAAE,aACA7I,EAAO7B,MAAMoL,UAAUC,MAAK,QAC/BlD,IAAWsC,CAAAA,EAAA,YAAAM,EAAAO,EAAA,WAEVrH,EAAMjE,MAAMqL,MAAK,CAAA,MAAS,OAAO,CAAA,EAAA,IAAA,CAAA,CAAA,EAK7ChL,EAAMY,QACRwJ,EAAAA,YAAA,MAAA,CAAA,IACY,UAAS,MAAS,CAAC1G,EAAG2G,GAAG,MAAM,EAAG3G,EAAG2G,GAAG,SAAS,CAAC,GAACD,CAAAA,EAAA,YAAAM,EAAAO,EAAA,WAErDrH,EAAMjE,MAAMiB,QAAO,CAAA,OACfZ,EAAMqD,eAAiBO,EAAMjE,MAAMiB,QAAQsK,OAAM,KACnDlL,EAAMmD,aAAeS,EAAMjE,MAAMiB,QAAQuK,KAAI,MAC5C,SAAS,CAAA,EAAA,IAAA,CAAA,CAAA,EAMjB,IACT,CAEA,SAASC,IAAe,CAAA,IAAAC,EACtB,OAAAjB,EAAAA,YAAA,MAAA,CAAA,MACc1G,EAAG2G,GAAG,gBAAgB,CAAC,EAAA,CAChCM,GAAkB,EAAEP,EAAA,YAAAkB,aAAA,CAAA,KACH5H,EAAG6H,GAAG,MAAM,EAAC,OAAA,EAAAtM,EAAAA,GAAAoM,EAC5BP,GAAoB,CAAA,EAAAO,EAAA,CAAA3J,QAAAA,IAAA,CAAA2J,CAAA,CAAA,CAAA,CAAA,CAAA,CAI7B,CAEA,SAASG,IAAc,CACrB,OAAApB,EAAAA,YAAA,MAAA,CAAA,MACc1G,EAAG2G,GAAG,OAAO,CAAC,EAAA,CACvBE,EAAAA,WAAWlK,EAAO,QAAS,CAAEV,MAAOqE,EAAarE,KAAM,EAAG,IAAM,CAAAyK,EAAA,YAAAK,EAAA,CAAA,SAC3CzK,EAAMK,MAAMoL,MAAK,KAAQ,CAAE9L,MAAOqE,EAAarE,KAAM,CAAC,EAAA,CAAA+B,QAAAA,IACvE1B,CAAAA,EAAM6C,YAAc6I,IACjBxH,EAAcvE,MACd,GAAGuE,EAAcvE,KAAK,IAAIK,EAAM6C,SAAS,EAAE,CAAA,CAAA,CAAA,CAElD,CAAC,CAAA,CAGR,CAEA,SAAS8I,IAAsB,CAC7B,OAAI3L,EAAMyB,OAAS,YAAczB,EAAMiD,cACrCmH,EAAAA,YAAA,MAAA,CAAA,IAES,WAAU,MACR,CAAC1G,EAAG2G,GAAG,MAAM,EAAG3G,EAAG2G,GAAG,UAAU,CAAC,EAAC,MAClC,CACLC,MAAOtK,EAAMiC,WACd,EAAA,QACQ2F,EAAkB,EAAA,CAE1B2C,EAAAA,WAAWlK,EAAO,WAAY,CAAEuL,MAAO3H,EAAatE,KAAM,EAAG,IAAM,CAAAyK,EAAA,YAAAK,EAAA,CAAA,SAC9CzK,EAAMK,MAAMwL,SAAQ,KAAQ,CAAED,MAAO3H,EAAatE,KAAM,CAAC,EAAA,CAAA+B,QAAAA,IAAA0I,CAAAA,EAAA,YAAAM,EACjE5E,GAAanG,MAAK,IAAA,CAAA,CAAA,CAAA,CAAA,CAE/B,CAAC,CAAA,EAKD,IACT,CAEA,SAASmM,GAAgB,SACvB,OAAA1B,EAAAA,YAAA,MAAA,CAAA,GAEQ5J,EAAMb,MAAK,IACV6E,EAAO,MACLe,EAAU5F,MAAK,QACboM,IAAAA,OAAM5K,OAAAA,EAAAA,EAAaxB,QAAbwB,YAAAA,EAAoBC,QAAO,EAAA,CAEzCsE,GAAU/F,OAASwK,GAAc,EAAAC,EAAA,YAAAa,QAAAA,EAAAA,WAE5BjL,EAAMwD,aAAY,CAAA,IACjBrC,EAAY,MACV,CAACuC,EAAG2G,GAAG,SAAS,GAAGrK,EAAAA,EAAMwD,eAANxD,YAAAA,EAAoBgM,MAAOhM,EAAM0C,YAAY,EAAC,KAClEkD,GAAUjG,MAAK,UACVK,EAAMsC,UAAS,aACZ6D,GAAaxG,MAAK,WACpBK,EAAMuC,WAAU,SAClBvC,EAAMW,SAAQ,SACd8B,EAAS9C,OAAS6K,OAAS,YACxBxK,EAAMqC,aAAeb,EAAO7B,MAAM0C,YAAW,UAC/CrC,EAAM6C,UAAY,EAAI7C,EAAM6C,UAAY2H,OAAS,KACtDxK,EAAMD,QAAQC,EAAAA,EAAMwD,eAANxD,YAAAA,EAAoBD,MAAI,kBAC3BU,EAAQd,MAAK,OACtBuH,GAAU,QACTJ,GAAW,QACXmD,GAAW,SACV3C,EAAY,WACVmB,GAAc,UACfF,GAAa,QACfI,GAAW,SACVoB,GAAc,mBACJjB,GAAsB,iBACxBE,EAEnBoC,CAAAA,EAAAA,IAAAA,EAAAA,GAAY,EACZpL,EAAM6C,UAAY,GAAK,CAAC7C,EAAM8C,UAAY0I,GAAW,EAAK,KAC1DG,GAAqB,CAAA,CAAA,CAG5B,CAEA,SAASM,EAAYxK,EAA0B,CAC7C,MAAMyK,EACJ7L,EAAM,GAAGoB,CAAI,QAAQ,GAAKpB,EAAM,GAAGoB,CAAI,SAAS,GAAKzB,EAAMK,MAAM,GAAGoB,CAAI,QAAQ,EAElF,OAAIyK,EACF9B,EAAAA,YAAA,MAAA,CAAA,MAEW,CAAC1G,EAAG2G,GAAG5I,CAAI,EAAGiC,EAAGmH,IAAIpJ,EAAM,QAAQ,CAAC,EAAC,aAC9B0K,KAAQ1K,IAAS,SAAW2C,EAAcC,GAAY1E,MAAQ,GAAK,aACnEyM,KAAQ3K,IAAS,SAAW2C,EAAcC,GAAY1E,MAAQ,IAE3EuM,CAAAA,EAAU,CAAE,CAAA,EAKnB9B,EAAAA,YAAA,MAAA,CAAA,MACc1G,EAAG2G,GAAG5I,CAAI,CAAC,EAAA,CACpBpB,EAAMoB,CAAI,EACTpB,EAAMoB,CAAI,EAAI,EAAA2I,EAAA,YAAAK,EAAA,CAAA,SAEMzK,EAAMK,MAAMoB,CAAI,CAAC,EAAA,CAAAC,QAAAA,IAAA,CAAG1B,EAAMyB,CAAI,CAAC,CACpD,CAAA,CAAA,CAAA,CAGP,CAEA,MAAO,IACDqD,EAAUnF,OAASsF,EAAStF,MAC9ByK,EAAAA,YAAA,MAAA,CAAA,MACc3E,GAAa9F,KACtBmF,EAAAA,CAAAA,EAAUnF,OAASsM,EAAY,QAAQ,EACvCH,EAAe,EACf7G,EAAStF,OAASsM,EAAY,OAAO,CAAC,CAAA,EAKtCH,EAAe,CAEzB,EACDO,QAAS,CACPjL,MAAOkL,EAAwC,KAC/C3F,KAAM2F,EAAAA,IACR,CACF,CAAC"}