yuyeon 0.0.42-rc15 → 0.0.42-rc16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/yuyeon.js +2632 -2678
- package/dist/yuyeon.umd.cjs +6 -6
- package/lib/components/field-input/YFieldInput.mjs +1 -1
- package/lib/components/field-input/YFieldInput.mjs.map +1 -1
- package/lib/components/input/YInput.mjs +170 -311
- package/lib/components/input/YInput.mjs.map +1 -1
- package/lib/components/select/YSelect.mjs +7 -3
- package/lib/components/select/YSelect.mjs.map +1 -1
- package/lib/components/textarea/YTextarea.mjs +1 -1
- package/lib/components/textarea/YTextarea.mjs.map +1 -1
- package/lib/composables/communication.mjs.map +1 -1
- package/lib/composables/icon.mjs +23 -3
- package/lib/composables/icon.mjs.map +1 -1
- package/lib/composables/validation.mjs +100 -0
- package/lib/composables/validation.mjs.map +1 -0
- package/package.json +1 -1
- package/types/components/date-picker/YDateCalendar.d.ts +9 -3
- package/types/components/dialog/YDialog.d.ts +3 -1
- package/types/components/field-input/YFieldInput.d.ts +86 -42
- package/types/components/input/YInput.d.ts +88 -84
- package/types/components/pagination/YPagination.d.ts +3 -1
- package/types/components/select/YSelect.d.ts +87 -43
- package/types/components/snackbar/YSnackbar.d.ts +3 -1
- package/types/components/table/composibles/pagination.d.ts +6 -2
- package/types/components/table/composibles/sorting.d.ts +3 -1
- package/types/components/textarea/YTextarea.d.ts +130 -215
- package/types/composables/communication.d.ts +7 -2
- package/types/composables/focus.d.ts +3 -1
- package/types/composables/icon.d.ts +1 -1
- package/types/composables/validation.d.ts +70 -0
|
@@ -171,7 +171,7 @@ export const YFieldInput = defineComponent({
|
|
|
171
171
|
"class": [`${NAME}__field`],
|
|
172
172
|
"data-id": defaultProps.attrId,
|
|
173
173
|
"ref": 'field'
|
|
174
|
-
}, [props.floating ? yInput$.value
|
|
174
|
+
}, [props.floating ? yInput$.value?.createLabel?.() : undefined, slots.default?.(defaultProps), _createVNode("input", {
|
|
175
175
|
"ref": input$,
|
|
176
176
|
"value": displayValue.value,
|
|
177
177
|
"name": props.name,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"YFieldInput.mjs","names":["computed","defineComponent","getCurrentInstance","nextTick","ref","toRef","watch","useRender","useFocus","chooseProps","propsFactory","YIconClear","YInput","pressYInputPropsOptions","NAME","pressYFieldInputPropsOptions","enableClear","Boolean","inputAlign","String","displayText","Function","whenInputValid","Number","tabindex","type","default","variation","YFieldInput","name","props","emits","slots","Object","setup","_ref","attrs","expose","emit","yInput$","input$","focused","whenFocus","whenBlur","inValue","displayValue","inputType","classes","invokeValidators","onClick","event","onFocus","value","onBlur","changeDisplay","onInput","target","onChange","onKeydown","onKeyup","onClickClear","clear","onKeydownClear","code","focus","select","vm","undefined","text","call","modelValue","neo","immediate","onUpdateModel","_createVNode","_mergeProps","$event","leading","args","leadingChildren","slot","push","defaultProps","attrId","floating","methods","createLabel","readonly","loading","formLoading","placeholder","disabled","autocomplete","maxlength","min","max","style","textAlign","trailing","_Fragment","label","_ref2","error","errorResult"],"sources":["../../../src/components/field-input/YFieldInput.tsx"],"sourcesContent":["import type {PropType, SlotsType} from 'vue';\nimport {\n computed,\n defineComponent,\n getCurrentInstance,\n nextTick,\n ref,\n toRef,\n watch,\n} from 'vue';\n\nimport { useRender } from '../../composables/component';\nimport { useFocus } from '../../composables/focus';\nimport { chooseProps, propsFactory } from '../../util/vue-component';\nimport { YIconClear } from '../icons/YIconClear';\nimport { YInput, pressYInputPropsOptions } from '../input';\n\nimport './YFieldInput.scss';\n\nconst NAME = 'y-field-input';\n\nexport const pressYFieldInputPropsOptions = propsFactory(\n {\n enableClear: Boolean as PropType<boolean>,\n inputAlign: String as PropType<string>,\n displayText: [String, Function] as PropType<\n string | ((value: any) => string)\n >,\n whenInputValid: [Boolean, Number] as PropType<boolean | number>,\n tabindex: {\n type: String as PropType<string>,\n default: '0',\n },\n type: {\n type: String as PropType<string>,\n default: 'text',\n },\n ...pressYInputPropsOptions({\n variation: 'filled',\n }),\n },\n 'YFieldInput',\n);\n\nexport const YFieldInput = defineComponent({\n name: 'YFieldInput',\n props: {\n ...pressYFieldInputPropsOptions(),\n },\n emits: [\n 'update:modelValue',\n 'update:focused',\n 'input',\n 'change',\n 'click',\n 'mousedown',\n 'mouseup',\n 'keydown',\n 'keyup',\n 'focus',\n 'blur',\n 'mousedown:display',\n ],\n slots: Object as SlotsType<{\n prepend: any,\n append: any,\n label: any,\n default: { value: any, formLoading: boolean, attrId: string },\n leading: { error: boolean },\n trailing: any,\n 'helper-text': { error: boolean, errorResult: string | undefined }\n }>,\n setup(props, { attrs, expose, emit, slots }) {\n const yInput$ = ref<YInput>();\n const input$ = ref<HTMLInputElement>();\n const { focused, whenFocus, whenBlur } = useFocus(props, 'y-field-input');\n const inValue = ref<any>('');\n const displayValue = ref('');\n const inputType = toRef(props, 'type');\n\n const classes = computed(() => {\n return {\n [NAME]: true,\n };\n });\n\n const invokeValidators = () => {\n //\n };\n\n function onClick(event: MouseEvent) {\n emit('click', event);\n }\n\n function onFocus(event: FocusEvent) {\n whenFocus();\n displayValue.value = inValue.value as string;\n emit('focus', event);\n }\n\n function onBlur(event: FocusEvent) {\n whenBlur();\n invokeValidators();\n emit('blur', event);\n changeDisplay();\n }\n\n function onInput(event: Event) {\n emit('input', event);\n const target = event.target as HTMLInputElement | null;\n inValue.value = target?.value;\n displayValue.value = target?.value as string;\n if (props.whenInputValid) {\n invokeValidators();\n }\n }\n\n function onChange(event: Event) {\n emit('change', inValue.value);\n }\n\n function onKeydown(event: KeyboardEvent) {\n emit('keydown', event);\n }\n\n function onKeyup(event: KeyboardEvent) {\n emit('keyup', event);\n }\n\n function onClickClear(event: MouseEvent) {\n clear();\n }\n\n function onKeydownClear(event: KeyboardEvent) {\n if (event.code === 'Space' || event.code === 'Enter') {\n clear();\n }\n }\n\n function focus() {\n input$.value?.focus();\n }\n\n function select() {\n input$.value?.select();\n }\n\n function clear() {\n inValue.value = '';\n displayValue.value = '';\n emit('update:modelValue', inValue.value);\n }\n\n function changeDisplay() {\n const vm = getCurrentInstance();\n const { displayText } = props;\n if (displayText !== undefined) {\n let text = inValue.value;\n if (typeof displayText === 'string') {\n text = displayText;\n }\n if (displayText && typeof displayText === 'function') {\n text = (displayText as any).call(vm, text);\n }\n nextTick(() => {\n displayValue.value = text as string;\n });\n }\n }\n\n watch(\n () => props.modelValue,\n (neo: any) => {\n inValue.value = neo;\n displayValue.value = neo;\n },\n {\n immediate: true,\n },\n );\n\n watch(inValue, (neo: string) => {\n if (!focused.value) {\n changeDisplay();\n } else {\n displayValue.value = neo;\n }\n });\n\n expose({\n focus,\n select,\n clear,\n input$,\n });\n\n function onUpdateModel(value: any) {\n emit('update:modelValue', value);\n }\n\n useRender(() => (\n <YInput\n class={classes.value}\n ref={yInput$}\n {...chooseProps(props, YInput.props)}\n modelValue={inValue.value}\n onUpdate:modelValue={onUpdateModel}\n focused={focused.value}\n onClick={onClick}\n onMousedown:display={($event) => emit('mousedown:display', $event)}\n >\n {{\n leading: slots.leading\n ? (args: any) => {\n const leadingChildren = [];\n const slot = slots.leading?.(args);\n if (slot) {\n leadingChildren.push(slot);\n } else {\n return undefined;\n }\n return leadingChildren;\n }\n : undefined,\n default: (defaultProps: any) => (\n <div\n class={[`${NAME}__field`]}\n data-id={defaultProps.attrId}\n ref={'field'}\n >\n {props.floating\n ? yInput$.value &&\n YInput.methods!.createLabel.call(yInput$.value)\n : undefined}\n {slots.default?.(defaultProps)}\n {\n <input\n ref={input$}\n value={displayValue.value}\n name={props.name}\n id={defaultProps.attrId}\n type={inputType.value}\n readonly={\n props.readonly || props.loading || defaultProps.formLoading\n }\n placeholder={props.placeholder}\n disabled={props.disabled}\n tabindex={props.tabindex || '0'}\n autocomplete={attrs.autocomplete as string}\n maxlength={attrs.maxlength as number | string}\n min={attrs.min as number | string}\n max={attrs.max as number | string}\n style={[attrs?.style, { textAlign: props.inputAlign } as any]}\n onInput={onInput}\n onFocus={onFocus}\n onBlur={onBlur}\n onChange={onChange}\n onKeydown={onKeydown}\n onKeyup={onKeyup}\n />\n }\n </div>\n ),\n trailing:\n slots.trailing || (props.enableClear && inValue.value)\n ? () => (\n <>\n {props.enableClear && inValue.value && (\n <div\n class={[\n 'y-input__trailing',\n 'y-input__trailing--clear',\n ]}\n >\n <button\n class={[`${NAME}__clear`]}\n onClick={onClickClear}\n onKeydown={onKeydownClear}\n tabindex={2}\n >\n <YIconClear></YIconClear>\n </button>\n </div>\n )}\n {slots.trailing && (\n <div class={['y-input__trailing']}>\n {slots.trailing()}\n </div>\n )}\n </>\n )\n : undefined,\n label: slots.label ? () => slots.label?.() : undefined,\n 'helper-text': slots['helper-text']\n ? ({ error, errorResult }: any) => slots['helper-text']?.({ error, errorResult })\n : undefined,\n }}\n </YInput>\n ));\n\n return {\n focused,\n inValue,\n };\n },\n});\n\nexport type YFieldInput = InstanceType<typeof YFieldInput>;\n"],"mappings":";AACA,SACEA,QAAQ,EACRC,eAAe,EACfC,kBAAkB,EAClBC,QAAQ,EACRC,GAAG,EACHC,KAAK,EACLC,KAAK,QACA,KAAK;AAAC,SAEJC,SAAS;AAAA,SACTC,QAAQ;AAAA,SACRC,WAAW,EAAEC,YAAY;AAAA,SACzBC,UAAU;AAAA,SACVC,MAAM,EAAEC,uBAAuB;AAExC;AAEA,MAAMC,IAAI,GAAG,eAAe;AAE5B,OAAO,MAAMC,4BAA4B,GAAGL,YAAY,CACtD;EACEM,WAAW,EAAEC,OAA4B;EACzCC,UAAU,EAAEC,MAA0B;EACtCC,WAAW,EAAE,CAACD,MAAM,EAAEE,QAAQ,CAE7B;EACDC,cAAc,EAAE,CAACL,OAAO,EAAEM,MAAM,CAA+B;EAC/DC,QAAQ,EAAE;IACRC,IAAI,EAAEN,MAA0B;IAChCO,OAAO,EAAE;EACX,CAAC;EACDD,IAAI,EAAE;IACJA,IAAI,EAAEN,MAA0B;IAChCO,OAAO,EAAE;EACX,CAAC;EACD,GAAGb,uBAAuB,CAAC;IACzBc,SAAS,EAAE;EACb,CAAC;AACH,CAAC,EACD,aACF,CAAC;AAED,OAAO,MAAMC,WAAW,GAAG3B,eAAe,CAAC;EACzC4B,IAAI,EAAE,aAAa;EACnBC,KAAK,EAAE;IACL,GAAGf,4BAA4B,CAAC;EAClC,CAAC;EACDgB,KAAK,EAAE,CACL,mBAAmB,EACnB,gBAAgB,EAChB,OAAO,EACP,QAAQ,EACR,OAAO,EACP,WAAW,EACX,SAAS,EACT,SAAS,EACT,OAAO,EACP,OAAO,EACP,MAAM,EACN,mBAAmB,CACpB;EACDC,KAAK,EAAEC,MAQL;EACFC,KAAKA,CAACJ,KAAK,EAAAK,IAAA,EAAkC;IAAA,IAAhC;MAAEC,KAAK;MAAEC,MAAM;MAAEC,IAAI;MAAEN;IAAM,CAAC,GAAAG,IAAA;IACzC,MAAMI,OAAO,GAAGnC,GAAG,CAAS,CAAC;IAC7B,MAAMoC,MAAM,GAAGpC,GAAG,CAAmB,CAAC;IACtC,MAAM;MAAEqC,OAAO;MAAEC,SAAS;MAAEC;IAAS,CAAC,GAAGnC,QAAQ,CAACsB,KAAK,EAAE,eAAe,CAAC;IACzE,MAAMc,OAAO,GAAGxC,GAAG,CAAM,EAAE,CAAC;IAC5B,MAAMyC,YAAY,GAAGzC,GAAG,CAAC,EAAE,CAAC;IAC5B,MAAM0C,SAAS,GAAGzC,KAAK,CAACyB,KAAK,EAAE,MAAM,CAAC;IAEtC,MAAMiB,OAAO,GAAG/C,QAAQ,CAAC,MAAM;MAC7B,OAAO;QACL,CAACc,IAAI,GAAG;MACV,CAAC;IACH,CAAC,CAAC;IAEF,MAAMkC,gBAAgB,GAAGA,CAAA,KAAM;MAC7B;IAAA,CACD;IAED,SAASC,OAAOA,CAACC,KAAiB,EAAE;MAClCZ,IAAI,CAAC,OAAO,EAAEY,KAAK,CAAC;IACtB;IAEA,SAASC,OAAOA,CAACD,KAAiB,EAAE;MAClCR,SAAS,CAAC,CAAC;MACXG,YAAY,CAACO,KAAK,GAAGR,OAAO,CAACQ,KAAe;MAC5Cd,IAAI,CAAC,OAAO,EAAEY,KAAK,CAAC;IACtB;IAEA,SAASG,MAAMA,CAACH,KAAiB,EAAE;MACjCP,QAAQ,CAAC,CAAC;MACVK,gBAAgB,CAAC,CAAC;MAClBV,IAAI,CAAC,MAAM,EAAEY,KAAK,CAAC;MACnBI,aAAa,CAAC,CAAC;IACjB;IAEA,SAASC,OAAOA,CAACL,KAAY,EAAE;MAC7BZ,IAAI,CAAC,OAAO,EAAEY,KAAK,CAAC;MACpB,MAAMM,MAAM,GAAGN,KAAK,CAACM,MAAiC;MACtDZ,OAAO,CAACQ,KAAK,GAAGI,MAAM,EAAEJ,KAAK;MAC7BP,YAAY,CAACO,KAAK,GAAGI,MAAM,EAAEJ,KAAe;MAC5C,IAAItB,KAAK,CAACR,cAAc,EAAE;QACxB0B,gBAAgB,CAAC,CAAC;MACpB;IACF;IAEA,SAASS,QAAQA,CAACP,KAAY,EAAE;MAC9BZ,IAAI,CAAC,QAAQ,EAAEM,OAAO,CAACQ,KAAK,CAAC;IAC/B;IAEA,SAASM,SAASA,CAACR,KAAoB,EAAE;MACvCZ,IAAI,CAAC,SAAS,EAAEY,KAAK,CAAC;IACxB;IAEA,SAASS,OAAOA,CAACT,KAAoB,EAAE;MACrCZ,IAAI,CAAC,OAAO,EAAEY,KAAK,CAAC;IACtB;IAEA,SAASU,YAAYA,CAACV,KAAiB,EAAE;MACvCW,KAAK,CAAC,CAAC;IACT;IAEA,SAASC,cAAcA,CAACZ,KAAoB,EAAE;MAC5C,IAAIA,KAAK,CAACa,IAAI,KAAK,OAAO,IAAIb,KAAK,CAACa,IAAI,KAAK,OAAO,EAAE;QACpDF,KAAK,CAAC,CAAC;MACT;IACF;IAEA,SAASG,KAAKA,CAAA,EAAG;MACfxB,MAAM,CAACY,KAAK,EAAEY,KAAK,CAAC,CAAC;IACvB;IAEA,SAASC,MAAMA,CAAA,EAAG;MAChBzB,MAAM,CAACY,KAAK,EAAEa,MAAM,CAAC,CAAC;IACxB;IAEA,SAASJ,KAAKA,CAAA,EAAG;MACfjB,OAAO,CAACQ,KAAK,GAAG,EAAE;MAClBP,YAAY,CAACO,KAAK,GAAG,EAAE;MACvBd,IAAI,CAAC,mBAAmB,EAAEM,OAAO,CAACQ,KAAK,CAAC;IAC1C;IAEA,SAASE,aAAaA,CAAA,EAAG;MACvB,MAAMY,EAAE,GAAGhE,kBAAkB,CAAC,CAAC;MAC/B,MAAM;QAAEkB;MAAY,CAAC,GAAGU,KAAK;MAC7B,IAAIV,WAAW,KAAK+C,SAAS,EAAE;QAC7B,IAAIC,IAAI,GAAGxB,OAAO,CAACQ,KAAK;QACxB,IAAI,OAAOhC,WAAW,KAAK,QAAQ,EAAE;UACnCgD,IAAI,GAAGhD,WAAW;QACpB;QACA,IAAIA,WAAW,IAAI,OAAOA,WAAW,KAAK,UAAU,EAAE;UACpDgD,IAAI,GAAIhD,WAAW,CAASiD,IAAI,CAACH,EAAE,EAAEE,IAAI,CAAC;QAC5C;QACAjE,QAAQ,CAAC,MAAM;UACb0C,YAAY,CAACO,KAAK,GAAGgB,IAAc;QACrC,CAAC,CAAC;MACJ;IACF;IAEA9D,KAAK,CACH,MAAMwB,KAAK,CAACwC,UAAU,EACrBC,GAAQ,IAAK;MACZ3B,OAAO,CAACQ,KAAK,GAAGmB,GAAG;MACnB1B,YAAY,CAACO,KAAK,GAAGmB,GAAG;IAC1B,CAAC,EACD;MACEC,SAAS,EAAE;IACb,CACF,CAAC;IAEDlE,KAAK,CAACsC,OAAO,EAAG2B,GAAW,IAAK;MAC9B,IAAI,CAAC9B,OAAO,CAACW,KAAK,EAAE;QAClBE,aAAa,CAAC,CAAC;MACjB,CAAC,MAAM;QACLT,YAAY,CAACO,KAAK,GAAGmB,GAAG;MAC1B;IACF,CAAC,CAAC;IAEFlC,MAAM,CAAC;MACL2B,KAAK;MACLC,MAAM;MACNJ,KAAK;MACLrB;IACF,CAAC,CAAC;IAEF,SAASiC,aAAaA,CAACrB,KAAU,EAAE;MACjCd,IAAI,CAAC,mBAAmB,EAAEc,KAAK,CAAC;IAClC;IAEA7C,SAAS,CAAC,MAAAmE,YAAA,CAAA9D,MAAA,EAAA+D,WAAA;MAAA,SAEC5B,OAAO,CAACK,KAAK;MAAA,OACfb;IAAO,GACR9B,WAAW,CAACqB,KAAK,EAAElB,MAAM,CAACkB,KAAK,CAAC;MAAA,cACxBc,OAAO,CAACQ,KAAK;MAAA,uBACJqB,aAAa;MAAA,WACzBhC,OAAO,CAACW,KAAK;MAAA,WACbH,OAAO;MAAA,uBACM2B,MAAM,IAAKtC,IAAI,CAAC,mBAAmB,EAAEsC,MAAM;IAAC;MAGhEC,OAAO,EAAE7C,KAAK,CAAC6C,OAAO,GACjBC,IAAS,IAAK;QACb,MAAMC,eAAe,GAAG,EAAE;QAC1B,MAAMC,IAAI,GAAGhD,KAAK,CAAC6C,OAAO,GAAGC,IAAI,CAAC;QAClC,IAAIE,IAAI,EAAE;UACRD,eAAe,CAACE,IAAI,CAACD,IAAI,CAAC;QAC5B,CAAC,MAAM;UACL,OAAOb,SAAS;QAClB;QACA,OAAOY,eAAe;MACxB,CAAC,GACDZ,SAAS;MACbzC,OAAO,EAAGwD,YAAiB,IAAAR,YAAA;QAAA,SAEhB,CAAE,GAAE5D,IAAK,SAAQ,CAAC;QAAA,WAChBoE,YAAY,CAACC,MAAM;QAAA,OACvB;MAAO,IAEXrD,KAAK,CAACsD,QAAQ,GACX7C,OAAO,CAACa,KAAK,IACbxC,MAAM,CAACyE,OAAO,CAAEC,WAAW,CAACjB,IAAI,CAAC9B,OAAO,CAACa,KAAK,CAAC,GAC/Ce,SAAS,EACZnC,KAAK,CAACN,OAAO,GAAGwD,YAAY,CAAC,EAAAR,YAAA;QAAA,OAGrBlC,MAAM;QAAA,SACJK,YAAY,CAACO,KAAK;QAAA,QACnBtB,KAAK,CAACD,IAAI;QAAA,MACZqD,YAAY,CAACC,MAAM;QAAA,QACjBrC,SAAS,CAACM,KAAK;QAAA,YAEnBtB,KAAK,CAACyD,QAAQ,IAAIzD,KAAK,CAAC0D,OAAO,IAAIN,YAAY,CAACO,WAAW;QAAA,eAEhD3D,KAAK,CAAC4D,WAAW;QAAA,YACpB5D,KAAK,CAAC6D,QAAQ;QAAA,YACd7D,KAAK,CAACN,QAAQ,IAAI,GAAG;QAAA,gBACjBY,KAAK,CAACwD,YAAY;QAAA,aACrBxD,KAAK,CAACyD,SAAS;QAAA,OACrBzD,KAAK,CAAC0D,GAAG;QAAA,OACT1D,KAAK,CAAC2D,GAAG;QAAA,SACP,CAAC3D,KAAK,EAAE4D,KAAK,EAAE;UAAEC,SAAS,EAAEnE,KAAK,CAACZ;QAAW,CAAC,CAAQ;QAAA,WACpDqC,OAAO;QAAA,WACPJ,OAAO;QAAA,UACRE,MAAM;QAAA,YACJI,QAAQ;QAAA,aACPC,SAAS;QAAA,WACXC;MAAO,UAIvB;MACDuC,QAAQ,EACNlE,KAAK,CAACkE,QAAQ,IAAKpE,KAAK,CAACd,WAAW,IAAI4B,OAAO,CAACQ,KAAM,GAClD,MAAAsB,YAAA,CAAAyB,SAAA,SAEKrE,KAAK,CAACd,WAAW,IAAI4B,OAAO,CAACQ,KAAK,IAAAsB,YAAA;QAAA,SAExB,CACL,mBAAmB,EACnB,0BAA0B;MAC3B,IAAAA,YAAA;QAAA,SAGQ,CAAE,GAAE5D,IAAK,SAAQ,CAAC;QAAA,WAChB8C,YAAY;QAAA,aACVE,cAAc;QAAA,YACf;MAAC,IAAAY,YAAA,CAAA/D,UAAA,iBAKhB,EACAqB,KAAK,CAACkE,QAAQ,IAAAxB,YAAA;QAAA,SACD,CAAC,mBAAmB;MAAC,IAC9B1C,KAAK,CAACkE,QAAQ,CAAC,CAAC,EAEpB,EAEJ,GACD/B,SAAS;MACfiC,KAAK,EAAEpE,KAAK,CAACoE,KAAK,GAAG,MAAMpE,KAAK,CAACoE,KAAK,GAAG,CAAC,GAAGjC,SAAS;MACtD,aAAa,EAAEnC,KAAK,CAAC,aAAa,CAAC,GAC/BqE,KAAA;QAAA,IAAC;UAAEC,KAAK;UAAEC;QAAiB,CAAC,GAAAF,KAAA;QAAA,OAAKrE,KAAK,CAAC,aAAa,CAAC,GAAG;UAAEsE,KAAK;UAAEC;QAAY,CAAC,CAAC;MAAA,IAC/EpC;IAAS,EAGlB,CAAC;IAEF,OAAO;MACL1B,OAAO;MACPG;IACF,CAAC;EACH;AACF,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"YFieldInput.mjs","names":["computed","defineComponent","getCurrentInstance","nextTick","ref","toRef","watch","useRender","useFocus","chooseProps","propsFactory","YIconClear","YInput","pressYInputPropsOptions","NAME","pressYFieldInputPropsOptions","enableClear","Boolean","inputAlign","String","displayText","Function","whenInputValid","Number","tabindex","type","default","variation","YFieldInput","name","props","emits","slots","Object","setup","_ref","attrs","expose","emit","yInput$","input$","focused","whenFocus","whenBlur","inValue","displayValue","inputType","classes","invokeValidators","onClick","event","onFocus","value","onBlur","changeDisplay","onInput","target","onChange","onKeydown","onKeyup","onClickClear","clear","onKeydownClear","code","focus","select","vm","undefined","text","call","modelValue","neo","immediate","onUpdateModel","_createVNode","_mergeProps","$event","leading","args","leadingChildren","slot","push","defaultProps","attrId","floating","createLabel","readonly","loading","formLoading","placeholder","disabled","autocomplete","maxlength","min","max","style","textAlign","trailing","_Fragment","label","_ref2","error","errorResult"],"sources":["../../../src/components/field-input/YFieldInput.tsx"],"sourcesContent":["import type {PropType, SlotsType} from 'vue';\nimport {\n computed,\n defineComponent,\n getCurrentInstance,\n nextTick,\n ref,\n toRef,\n watch,\n} from 'vue';\n\nimport { useRender } from '../../composables/component';\nimport {pressFocusPropsOptions, useFocus} from '../../composables/focus';\nimport { chooseProps, propsFactory } from '../../util/vue-component';\nimport { YIconClear } from '../icons/YIconClear';\nimport { YInput, pressYInputPropsOptions } from '../input';\n\nimport './YFieldInput.scss';\n\nconst NAME = 'y-field-input';\n\nexport const pressYFieldInputPropsOptions = propsFactory(\n {\n enableClear: Boolean as PropType<boolean>,\n inputAlign: String as PropType<string>,\n displayText: [String, Function] as PropType<\n string | ((value: any) => string)\n >,\n whenInputValid: [Boolean, Number] as PropType<boolean | number>,\n tabindex: {\n type: String as PropType<string>,\n default: '0',\n },\n type: {\n type: String as PropType<string>,\n default: 'text',\n },\n ...pressYInputPropsOptions({\n variation: 'filled',\n }),\n },\n 'YFieldInput',\n);\n\nexport const YFieldInput = defineComponent({\n name: 'YFieldInput',\n props: {\n ...pressYFieldInputPropsOptions(),\n },\n emits: [\n 'update:modelValue',\n 'update:focused',\n 'input',\n 'change',\n 'click',\n 'mousedown',\n 'mouseup',\n 'keydown',\n 'keyup',\n 'focus',\n 'blur',\n 'mousedown:display',\n ],\n slots: Object as SlotsType<{\n prepend: any,\n append: any,\n label: any,\n default: { value: any, formLoading: boolean, attrId: string },\n leading: { error: boolean },\n trailing: any,\n 'helper-text': { error: boolean, errorResult: string | undefined }\n }>,\n setup(props, { attrs, expose, emit, slots }) {\n const yInput$ = ref<YInput>();\n const input$ = ref<HTMLInputElement>();\n const { focused, whenFocus, whenBlur } = useFocus(props, 'y-field-input');\n const inValue = ref<any>('');\n const displayValue = ref('');\n const inputType = toRef(props, 'type');\n\n const classes = computed(() => {\n return {\n [NAME]: true,\n };\n });\n\n const invokeValidators = () => {\n //\n };\n\n function onClick(event: MouseEvent) {\n emit('click', event);\n }\n\n function onFocus(event: FocusEvent) {\n whenFocus();\n displayValue.value = inValue.value as string;\n emit('focus', event);\n }\n\n function onBlur(event: FocusEvent) {\n whenBlur();\n invokeValidators();\n emit('blur', event);\n changeDisplay();\n }\n\n function onInput(event: Event) {\n emit('input', event);\n const target = event.target as HTMLInputElement | null;\n inValue.value = target?.value;\n displayValue.value = target?.value as string;\n if (props.whenInputValid) {\n invokeValidators();\n }\n }\n\n function onChange(event: Event) {\n emit('change', inValue.value);\n }\n\n function onKeydown(event: KeyboardEvent) {\n emit('keydown', event);\n }\n\n function onKeyup(event: KeyboardEvent) {\n emit('keyup', event);\n }\n\n function onClickClear(event: MouseEvent) {\n clear();\n }\n\n function onKeydownClear(event: KeyboardEvent) {\n if (event.code === 'Space' || event.code === 'Enter') {\n clear();\n }\n }\n\n function focus() {\n input$.value?.focus();\n }\n\n function select() {\n input$.value?.select();\n }\n\n function clear() {\n inValue.value = '';\n displayValue.value = '';\n emit('update:modelValue', inValue.value);\n }\n\n function changeDisplay() {\n const vm = getCurrentInstance();\n const { displayText } = props;\n if (displayText !== undefined) {\n let text = inValue.value;\n if (typeof displayText === 'string') {\n text = displayText;\n }\n if (displayText && typeof displayText === 'function') {\n text = (displayText as any).call(vm, text);\n }\n nextTick(() => {\n displayValue.value = text as string;\n });\n }\n }\n\n watch(\n () => props.modelValue,\n (neo: any) => {\n inValue.value = neo;\n displayValue.value = neo;\n },\n {\n immediate: true,\n },\n );\n\n watch(inValue, (neo: string) => {\n if (!focused.value) {\n changeDisplay();\n } else {\n displayValue.value = neo;\n }\n });\n\n expose({\n focus,\n select,\n clear,\n input$,\n });\n\n function onUpdateModel(value: any) {\n emit('update:modelValue', value);\n }\n\n useRender(() => (\n <YInput\n class={classes.value}\n ref={yInput$}\n {...chooseProps(props, YInput.props)}\n modelValue={inValue.value}\n onUpdate:modelValue={onUpdateModel}\n focused={focused.value}\n onClick={onClick}\n onMousedown:display={($event) => emit('mousedown:display', $event)}\n >\n {{\n leading: slots.leading\n ? (args: any) => {\n const leadingChildren = [];\n const slot = slots.leading?.(args);\n if (slot) {\n leadingChildren.push(slot);\n } else {\n return undefined;\n }\n return leadingChildren;\n }\n : undefined,\n default: (defaultProps: any) => (\n <div\n class={[`${NAME}__field`]}\n data-id={defaultProps.attrId}\n ref={'field'}\n >\n {props.floating\n ? yInput$.value?.createLabel?.()\n : undefined}\n {slots.default?.(defaultProps)}\n {\n <input\n ref={input$}\n value={displayValue.value}\n name={props.name}\n id={defaultProps.attrId}\n type={inputType.value}\n readonly={\n props.readonly || props.loading || defaultProps.formLoading\n }\n placeholder={props.placeholder}\n disabled={props.disabled}\n tabindex={props.tabindex || '0'}\n autocomplete={attrs.autocomplete as string}\n maxlength={attrs.maxlength as number | string}\n min={attrs.min as number | string}\n max={attrs.max as number | string}\n style={[attrs?.style, { textAlign: props.inputAlign } as any]}\n onInput={onInput}\n onFocus={onFocus}\n onBlur={onBlur}\n onChange={onChange}\n onKeydown={onKeydown}\n onKeyup={onKeyup}\n />\n }\n </div>\n ),\n trailing:\n slots.trailing || (props.enableClear && inValue.value)\n ? () => (\n <>\n {props.enableClear && inValue.value && (\n <div\n class={[\n 'y-input__trailing',\n 'y-input__trailing--clear',\n ]}\n >\n <button\n class={[`${NAME}__clear`]}\n onClick={onClickClear}\n onKeydown={onKeydownClear}\n tabindex={2}\n >\n <YIconClear></YIconClear>\n </button>\n </div>\n )}\n {slots.trailing && (\n <div class={['y-input__trailing']}>\n {slots.trailing()}\n </div>\n )}\n </>\n )\n : undefined,\n label: slots.label ? () => slots.label?.() : undefined,\n 'helper-text': slots['helper-text']\n ? ({ error, errorResult }: any) => slots['helper-text']?.({ error, errorResult })\n : undefined,\n }}\n </YInput>\n ));\n\n return {\n focused,\n inValue,\n };\n },\n});\n\nexport type YFieldInput = InstanceType<typeof YFieldInput>;\n"],"mappings":"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"}
|
|
@@ -1,7 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { createVNode as _createVNode, createTextVNode as _createTextVNode, Fragment as _Fragment } from "vue";
|
|
2
|
+
import { computed, defineComponent, ref, shallowRef, watch } from 'vue';
|
|
3
|
+
import { useRender } from "../../composables/component.mjs";
|
|
2
4
|
import { pressFocusPropsOptions, useFocus } from "../../composables/focus.mjs";
|
|
3
5
|
import { pressThemePropsOptions, useLocalTheme } from "../../composables/theme/index.mjs";
|
|
4
|
-
import {
|
|
6
|
+
import { pressValidationPropsOptions, useValidation } from "../../composables/validation.mjs";
|
|
7
|
+
import { getUid, toStyleSizeValue } from "../../util/index.mjs";
|
|
8
|
+
import { propsFactory } from "../../util/vue-component.mjs";
|
|
5
9
|
import "./YInput.scss";
|
|
6
10
|
const NAME = 'y-input';
|
|
7
11
|
let uidCounter = 0;
|
|
@@ -40,15 +44,7 @@ export const pressYInputPropsOptions = propsFactory({
|
|
|
40
44
|
filled: Boolean,
|
|
41
45
|
ceramic: Boolean,
|
|
42
46
|
// validate
|
|
43
|
-
|
|
44
|
-
disabled: Boolean,
|
|
45
|
-
status: {
|
|
46
|
-
type: String,
|
|
47
|
-
validator(value) {
|
|
48
|
-
return ['success', 'warning', 'error'].includes(value);
|
|
49
|
-
}
|
|
50
|
-
},
|
|
51
|
-
validators: Array,
|
|
47
|
+
...pressValidationPropsOptions(),
|
|
52
48
|
...pressFocusPropsOptions()
|
|
53
49
|
}, 'YInput');
|
|
54
50
|
export const YInput = defineComponent({
|
|
@@ -59,329 +55,192 @@ export const YInput = defineComponent({
|
|
|
59
55
|
},
|
|
60
56
|
emits: ['error', 'click', 'mousedown', 'mouseup', 'focus', 'blur', 'mousedown:display', 'mouseup:display', 'click:leading', 'update:modelValue', 'update:focused'],
|
|
61
57
|
slots: Object,
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
};
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
58
|
+
setup(props, _ref) {
|
|
59
|
+
let {
|
|
60
|
+
slots,
|
|
61
|
+
attrs,
|
|
62
|
+
expose,
|
|
63
|
+
emit
|
|
64
|
+
} = _ref;
|
|
65
|
+
const UID = getUid();
|
|
66
|
+
const {
|
|
67
|
+
themeClasses
|
|
68
|
+
} = useLocalTheme(props);
|
|
69
|
+
const {
|
|
70
|
+
focused: isFocused,
|
|
71
|
+
focusedClasses,
|
|
72
|
+
whenFocus,
|
|
73
|
+
whenBlur
|
|
74
|
+
} = useFocus(props, 'y-input');
|
|
75
|
+
const {
|
|
76
|
+
invokeValidators,
|
|
77
|
+
isError,
|
|
78
|
+
isSuccess,
|
|
79
|
+
errorResult
|
|
80
|
+
} = useValidation(props, NAME, UID);
|
|
81
|
+
const stack$ = ref();
|
|
82
|
+
const display$ = ref();
|
|
83
|
+
const inValue = ref();
|
|
84
|
+
const lazyValue = ref();
|
|
85
|
+
const hasMouseDown = shallowRef(false);
|
|
86
|
+
const variations = computed(() => {
|
|
87
|
+
if (props.variation) {
|
|
88
|
+
return props.variation.split(',').map(value => {
|
|
89
|
+
return value.trim();
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
return [];
|
|
93
|
+
});
|
|
94
|
+
const isFloatedLabel = computed(() => {
|
|
95
|
+
return props.floated || !!props.placeholder || !props.placeholder && isFocused.value || !!inValue.value;
|
|
96
|
+
});
|
|
97
|
+
const classes = computed(() => {
|
|
76
98
|
return {
|
|
77
|
-
'y-input--ceramic': !!
|
|
78
|
-
'y-input--outlined': !
|
|
79
|
-
'y-input--filled':
|
|
80
|
-
'y-input--focused':
|
|
81
|
-
'y-input--readonly': !!
|
|
82
|
-
'y-input--has-value': !!
|
|
83
|
-
'y-input--disabled': !!
|
|
84
|
-
'y-input--error':
|
|
85
|
-
'y-input--success':
|
|
86
|
-
[
|
|
99
|
+
'y-input--ceramic': !!props.ceramic,
|
|
100
|
+
'y-input--outlined': !props.ceramic && (variations.value.includes('outlined') || !!props.outlined),
|
|
101
|
+
'y-input--filled': variations.value.includes('filled') || !!props.filled,
|
|
102
|
+
'y-input--focused': isFocused.value,
|
|
103
|
+
'y-input--readonly': !!props.readonly,
|
|
104
|
+
'y-input--has-value': !!inValue.value,
|
|
105
|
+
'y-input--disabled': !!props.disabled,
|
|
106
|
+
'y-input--error': isError.value,
|
|
107
|
+
'y-input--success': isSuccess.value,
|
|
108
|
+
[themeClasses.value]: true
|
|
87
109
|
};
|
|
88
|
-
}
|
|
89
|
-
displayStyles() {
|
|
90
|
-
let {
|
|
91
|
-
width
|
|
92
|
-
} = this;
|
|
93
|
-
if (!Number.isNaN(Number(width))) {
|
|
94
|
-
width = `${width}px`;
|
|
95
|
-
}
|
|
110
|
+
});
|
|
111
|
+
const displayStyles = computed(() => {
|
|
96
112
|
return {
|
|
97
|
-
width,
|
|
98
|
-
height:
|
|
113
|
+
width: toStyleSizeValue(props.width),
|
|
114
|
+
height: toStyleSizeValue(props.height)
|
|
99
115
|
};
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
return this.$attrs.id ?? `y-input--${this.iid}`;
|
|
103
|
-
},
|
|
104
|
-
isFloatedLabel() {
|
|
105
|
-
return this.floated || !!this.placeholder || !this.placeholder && this.isFocused || !!this.inValue;
|
|
106
|
-
},
|
|
107
|
-
formLoading() {
|
|
116
|
+
});
|
|
117
|
+
const formLoading = computed(() => {
|
|
108
118
|
// TODO: composable `form` binding
|
|
109
119
|
// const form$ = (this as any)?.form$ as any;
|
|
110
120
|
// if (form$) {
|
|
111
121
|
// return form$.loading;
|
|
112
122
|
// }
|
|
113
123
|
return false;
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
variations() {
|
|
122
|
-
const {
|
|
123
|
-
variation
|
|
124
|
-
} = this;
|
|
125
|
-
if (variation) {
|
|
126
|
-
return variation.split(',').map(value => {
|
|
127
|
-
return value.trim();
|
|
128
|
-
});
|
|
124
|
+
});
|
|
125
|
+
watch(() => props.modelValue, neo => {
|
|
126
|
+
inValue.value = neo;
|
|
127
|
+
});
|
|
128
|
+
watch(() => props.readonly, neo => {
|
|
129
|
+
if (!neo) {
|
|
130
|
+
inValue.value = props.modelValue;
|
|
129
131
|
}
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
createPrepend() {
|
|
135
|
-
const slot = getSlot(this, 'prepend');
|
|
136
|
-
return slot ? h('div', {
|
|
137
|
-
class: `${NAME}__prepend`
|
|
138
|
-
}, slot) : undefined;
|
|
139
|
-
},
|
|
140
|
-
createAppend() {
|
|
141
|
-
const slot = getSlot(this, 'append');
|
|
142
|
-
return slot ? h('div', {
|
|
143
|
-
class: `${NAME}__append`
|
|
144
|
-
}, slot) : undefined;
|
|
145
|
-
},
|
|
146
|
-
createLabelSlot() {
|
|
147
|
-
const slot = getSlot(this, 'label');
|
|
148
|
-
if (!slot) {
|
|
149
|
-
if (this.label) {
|
|
150
|
-
return [this.label, this.required ? h('span', {
|
|
151
|
-
class: 'y-input__required-mark'
|
|
152
|
-
}, '*') : undefined];
|
|
153
|
-
}
|
|
154
|
-
if (this.placeholder && !this.inValue) {
|
|
155
|
-
return [this.placeholder];
|
|
156
|
-
}
|
|
132
|
+
});
|
|
133
|
+
watch(inValue, neo => {
|
|
134
|
+
if (!props.readonly) {
|
|
135
|
+
emit('update:modelValue', neo);
|
|
157
136
|
}
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
137
|
+
});
|
|
138
|
+
watch(isError, neo => {
|
|
139
|
+
emit('error', neo);
|
|
140
|
+
});
|
|
141
|
+
watch(() => props.focused, neo => {
|
|
142
|
+
if (!neo) {
|
|
143
|
+
invokeValidators();
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
function onClick(event) {
|
|
147
|
+
emit('click', event);
|
|
148
|
+
}
|
|
149
|
+
function onMousedown(e) {
|
|
150
|
+
hasMouseDown.value = true;
|
|
151
|
+
emit('mousedown:display', e);
|
|
152
|
+
}
|
|
153
|
+
function onMouseup(e) {
|
|
154
|
+
hasMouseDown.value = false;
|
|
155
|
+
emit('mouseup:display', e);
|
|
156
|
+
}
|
|
157
|
+
function onFocus(event) {
|
|
158
|
+
whenFocus();
|
|
159
|
+
emit('focus', event);
|
|
160
|
+
}
|
|
161
|
+
function onBlur(event) {
|
|
162
|
+
whenBlur();
|
|
163
|
+
invokeValidators();
|
|
164
|
+
emit('blur', event);
|
|
165
|
+
}
|
|
166
|
+
function onClickLeading(event) {
|
|
167
|
+
emit('click:leading', event);
|
|
168
|
+
}
|
|
169
|
+
function onChange(event) {
|
|
170
|
+
invokeValidators();
|
|
171
|
+
}
|
|
172
|
+
function createLabel() {
|
|
173
|
+
const show = !!props.label || !!slots.label;
|
|
162
174
|
if (!show) {
|
|
163
175
|
return undefined;
|
|
164
176
|
}
|
|
165
|
-
return
|
|
166
|
-
class: {
|
|
177
|
+
return _createVNode("label", {
|
|
178
|
+
"class": [{
|
|
167
179
|
[`${NAME}__label`]: true,
|
|
168
|
-
'y-input__floating-label':
|
|
169
|
-
'y-input__floating-label--floated':
|
|
170
|
-
},
|
|
171
|
-
|
|
172
|
-
},
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
const {
|
|
176
|
-
modelValue
|
|
177
|
-
} = this;
|
|
178
|
-
return [this.floating ? this.createLabel() : undefined, modelValue?.toString()];
|
|
179
|
-
},
|
|
180
|
-
createDefault() {
|
|
181
|
-
const {
|
|
182
|
-
modelValue,
|
|
183
|
-
formLoading,
|
|
184
|
-
attrId
|
|
185
|
-
} = this;
|
|
186
|
-
const slotContent = getSlot(this, 'default', {
|
|
187
|
-
value: modelValue,
|
|
188
|
-
formLoading,
|
|
189
|
-
attrId
|
|
190
|
-
});
|
|
191
|
-
return slotContent ?? h('div', {
|
|
192
|
-
[`.${NAME}__value`]: true,
|
|
193
|
-
'.data-id': this.attrId,
|
|
194
|
-
'.tabindex': 0,
|
|
195
|
-
onFocus: this.onFocus,
|
|
196
|
-
onBlur: this.onBlur
|
|
197
|
-
}, this.createDefaultChildren());
|
|
198
|
-
},
|
|
199
|
-
createLeading() {
|
|
200
|
-
const slot = getSlot(this, 'leading', {
|
|
201
|
-
error: this.isError
|
|
202
|
-
});
|
|
203
|
-
return slot ? h('div', {
|
|
204
|
-
class: 'y-input__leading',
|
|
205
|
-
onClick: this.onClickLeading
|
|
206
|
-
}, slot) : undefined;
|
|
207
|
-
},
|
|
208
|
-
createTrailing() {
|
|
209
|
-
return getSlot(this, 'trailing');
|
|
210
|
-
},
|
|
211
|
-
getDisplayHeight() {
|
|
212
|
-
const {
|
|
213
|
-
height
|
|
214
|
-
} = this;
|
|
215
|
-
if (!isNaN(Number(height))) {
|
|
216
|
-
return `${height}px`;
|
|
217
|
-
}
|
|
218
|
-
return height;
|
|
219
|
-
},
|
|
220
|
-
createDisplay() {
|
|
221
|
-
return h('div', {
|
|
222
|
-
class: {
|
|
223
|
-
[`${NAME}__display`]: true
|
|
224
|
-
},
|
|
225
|
-
onClick: this.onClick,
|
|
226
|
-
onMousedown: this.onMousedown,
|
|
227
|
-
onMouseup: this.onMouseup,
|
|
228
|
-
ref: 'display',
|
|
229
|
-
style: {
|
|
230
|
-
...this.displayStyles
|
|
231
|
-
}
|
|
232
|
-
}, [h('div', {
|
|
233
|
-
class: `${NAME}__plate`
|
|
234
|
-
}), this.createLeading(), this.createDefault(), this.createTrailing()]);
|
|
235
|
-
},
|
|
236
|
-
createHelperText() {
|
|
237
|
-
const helperTextSlot = getSlot(this, 'helper-text', {
|
|
238
|
-
error: this.status === 'error' || this.inError,
|
|
239
|
-
errorResult: this.errorResult
|
|
240
|
-
});
|
|
241
|
-
const children = [];
|
|
242
|
-
if (helperTextSlot) {
|
|
243
|
-
children.push(h('span', {}, helperTextSlot));
|
|
244
|
-
} else {
|
|
245
|
-
children.push(this.errorResult);
|
|
246
|
-
}
|
|
247
|
-
return h('div', {
|
|
248
|
-
class: `${NAME}__helper-text`
|
|
249
|
-
}, children);
|
|
250
|
-
},
|
|
251
|
-
createStackChildren() {
|
|
252
|
-
return [!this.floating ? this.createLabel() : undefined, this.createDisplay(), this.createHelperText()];
|
|
253
|
-
},
|
|
254
|
-
createStack() {
|
|
255
|
-
return h('div', {
|
|
256
|
-
class: `${NAME}__stack`,
|
|
257
|
-
ref: 'stack'
|
|
258
|
-
}, this.createStackChildren());
|
|
259
|
-
},
|
|
260
|
-
createContent() {
|
|
261
|
-
return [this.createPrepend(), this.createStack(), this.createAppend()];
|
|
262
|
-
},
|
|
263
|
-
//
|
|
264
|
-
onClick(event) {
|
|
265
|
-
this.$emit('click', event);
|
|
266
|
-
},
|
|
267
|
-
onMousedown(e) {
|
|
268
|
-
this.hasMouseDown = true;
|
|
269
|
-
this.$emit('mousedown:display', e);
|
|
270
|
-
},
|
|
271
|
-
onMouseup(e) {
|
|
272
|
-
this.hasMouseDown = false;
|
|
273
|
-
this.$emit('mouseup:display', e);
|
|
274
|
-
},
|
|
275
|
-
onFocus(event) {
|
|
276
|
-
this.whenFocus();
|
|
277
|
-
this.$emit('focus', event);
|
|
278
|
-
},
|
|
279
|
-
onBlur(event) {
|
|
280
|
-
this.whenBlur();
|
|
281
|
-
this.invokeValidators();
|
|
282
|
-
this.$emit('blur', event);
|
|
283
|
-
},
|
|
284
|
-
onClickLeading(event) {
|
|
285
|
-
this.$emit('click:leading', event);
|
|
286
|
-
},
|
|
287
|
-
onChange(event) {
|
|
288
|
-
this.invokeValidators();
|
|
289
|
-
},
|
|
290
|
-
//
|
|
291
|
-
invokeValidators() {
|
|
292
|
-
const {
|
|
293
|
-
validators,
|
|
294
|
-
inValue,
|
|
295
|
-
$attrs
|
|
296
|
-
} = this;
|
|
297
|
-
const {
|
|
298
|
-
required
|
|
299
|
-
} = $attrs;
|
|
300
|
-
this.resetError();
|
|
301
|
-
let flag = true;
|
|
302
|
-
if (Array.isArray(validators)) {
|
|
303
|
-
validators.some(validator => {
|
|
304
|
-
const result = validator(inValue);
|
|
305
|
-
if (typeof result === 'string') {
|
|
306
|
-
this.inError = true;
|
|
307
|
-
this.errorResult = result;
|
|
308
|
-
flag = false;
|
|
309
|
-
return true;
|
|
310
|
-
}
|
|
311
|
-
if (result === false) {
|
|
312
|
-
this.inError = true;
|
|
313
|
-
this.errorResult = '';
|
|
314
|
-
flag = false;
|
|
315
|
-
return true;
|
|
316
|
-
}
|
|
317
|
-
return false;
|
|
318
|
-
});
|
|
319
|
-
}
|
|
320
|
-
if (flag && required && !inValue) {
|
|
321
|
-
this.inError = true;
|
|
322
|
-
return false;
|
|
323
|
-
}
|
|
324
|
-
return flag;
|
|
325
|
-
},
|
|
326
|
-
resetError() {
|
|
327
|
-
this.inError = false;
|
|
328
|
-
this.errorResult = undefined;
|
|
329
|
-
},
|
|
330
|
-
getClasses() {
|
|
331
|
-
return this.classes;
|
|
180
|
+
'y-input__floating-label': props.floating,
|
|
181
|
+
'y-input__floating-label--floated': props.floating && isFloatedLabel.value
|
|
182
|
+
}],
|
|
183
|
+
"for": `y-input--${UID}`
|
|
184
|
+
}, [slots.label ? slots.label() : props.label ? _createVNode(_Fragment, null, [props.label, props.required && _createVNode("span", {
|
|
185
|
+
"class": 'y-input__required-mark'
|
|
186
|
+
}, [_createTextVNode("*")])]) : props.placeholder && !inValue.value && props.placeholder]);
|
|
332
187
|
}
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
}
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
}
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
188
|
+
expose({
|
|
189
|
+
createLabel
|
|
190
|
+
});
|
|
191
|
+
useRender(() => {
|
|
192
|
+
return _createVNode("div", {
|
|
193
|
+
"class": [`${NAME}`, {
|
|
194
|
+
...classes.value
|
|
195
|
+
}]
|
|
196
|
+
}, [slots.prepend ? () => _createVNode("div", {
|
|
197
|
+
"class": `${NAME}__prepend`
|
|
198
|
+
}, [_createTextVNode("slots.prepend()")]) : undefined, _createVNode("div", {
|
|
199
|
+
"ref": stack$,
|
|
200
|
+
"class": [`${NAME}__stack`]
|
|
201
|
+
}, [!props.floating && createLabel(), _createVNode("div", {
|
|
202
|
+
"ref": display$,
|
|
203
|
+
"class": `${NAME}__display`,
|
|
204
|
+
"style": [{
|
|
205
|
+
...displayStyles.value
|
|
206
|
+
}],
|
|
207
|
+
"onClick": onClick,
|
|
208
|
+
"onMousedown": onMousedown,
|
|
209
|
+
"onMouseup": onMouseup
|
|
210
|
+
}, [_createVNode("div", {
|
|
211
|
+
"class": `${NAME}__plate`
|
|
212
|
+
}, null), slots.leading && _createVNode("div", {
|
|
213
|
+
"class": 'y-input__leading',
|
|
214
|
+
"onClick": onClickLeading
|
|
215
|
+
}, [slots.leading({
|
|
216
|
+
error: isError.value
|
|
217
|
+
})]), slots.default ? slots.default({
|
|
218
|
+
value: props.modelValue,
|
|
219
|
+
formLoading: formLoading.value,
|
|
220
|
+
attrId: `y-input--${UID}`
|
|
221
|
+
}) : _createVNode("div", {
|
|
222
|
+
"class": `${NAME}__value`,
|
|
223
|
+
"data-id": `y-input--${UID}`,
|
|
224
|
+
"tabindex": 0,
|
|
225
|
+
"onFocus": onFocus,
|
|
226
|
+
"onBlur": onBlur
|
|
227
|
+
}, [props.floating && createLabel(), props.modelValue?.toString()]), slots.trailing?.()]), _createVNode("div", {
|
|
228
|
+
"class": `${NAME}__helper-text`
|
|
229
|
+
}, [slots['helper-text'] ? _createVNode("span", null, [slots['helper-text']({
|
|
230
|
+
error: isError.value,
|
|
231
|
+
errorResult: errorResult.value
|
|
232
|
+
})]) : errorResult.value])]), slots.append ? () => _createVNode("div", {
|
|
233
|
+
"class": `${NAME}__append`
|
|
234
|
+
}, [_createTextVNode("slots.append()")]) : undefined]);
|
|
235
|
+
});
|
|
370
236
|
return {
|
|
371
237
|
themeClasses,
|
|
372
238
|
isFocused,
|
|
373
239
|
focusedClasses,
|
|
374
240
|
whenFocus,
|
|
375
|
-
whenBlur
|
|
241
|
+
whenBlur,
|
|
242
|
+
createLabel
|
|
376
243
|
};
|
|
377
|
-
},
|
|
378
|
-
render() {
|
|
379
|
-
return h('div', {
|
|
380
|
-
class: {
|
|
381
|
-
...this.getClasses(),
|
|
382
|
-
[`${NAME}`]: true
|
|
383
|
-
}
|
|
384
|
-
}, this.createContent());
|
|
385
244
|
}
|
|
386
245
|
});
|
|
387
246
|
//# sourceMappingURL=YInput.mjs.map
|