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.
Files changed (30) hide show
  1. package/dist/yuyeon.js +2632 -2678
  2. package/dist/yuyeon.umd.cjs +6 -6
  3. package/lib/components/field-input/YFieldInput.mjs +1 -1
  4. package/lib/components/field-input/YFieldInput.mjs.map +1 -1
  5. package/lib/components/input/YInput.mjs +170 -311
  6. package/lib/components/input/YInput.mjs.map +1 -1
  7. package/lib/components/select/YSelect.mjs +7 -3
  8. package/lib/components/select/YSelect.mjs.map +1 -1
  9. package/lib/components/textarea/YTextarea.mjs +1 -1
  10. package/lib/components/textarea/YTextarea.mjs.map +1 -1
  11. package/lib/composables/communication.mjs.map +1 -1
  12. package/lib/composables/icon.mjs +23 -3
  13. package/lib/composables/icon.mjs.map +1 -1
  14. package/lib/composables/validation.mjs +100 -0
  15. package/lib/composables/validation.mjs.map +1 -0
  16. package/package.json +1 -1
  17. package/types/components/date-picker/YDateCalendar.d.ts +9 -3
  18. package/types/components/dialog/YDialog.d.ts +3 -1
  19. package/types/components/field-input/YFieldInput.d.ts +86 -42
  20. package/types/components/input/YInput.d.ts +88 -84
  21. package/types/components/pagination/YPagination.d.ts +3 -1
  22. package/types/components/select/YSelect.d.ts +87 -43
  23. package/types/components/snackbar/YSnackbar.d.ts +3 -1
  24. package/types/components/table/composibles/pagination.d.ts +6 -2
  25. package/types/components/table/composibles/sorting.d.ts +3 -1
  26. package/types/components/textarea/YTextarea.d.ts +130 -215
  27. package/types/composables/communication.d.ts +7 -2
  28. package/types/composables/focus.d.ts +3 -1
  29. package/types/composables/icon.d.ts +1 -1
  30. 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 && YInput.methods.createLabel.call(yInput$.value) : undefined, slots.default?.(defaultProps), _createVNode("input", {
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":"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"}
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 { defineComponent, h } from 'vue';
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 { getSlot, propsFactory } from "../../util/vue-component.mjs";
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
- readonly: Boolean,
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
- data() {
63
- const iid = uidCounter.toString();
64
- uidCounter += 1;
65
- return {
66
- iid,
67
- lazyValue: undefined,
68
- inValue: '',
69
- hasMouseDown: false,
70
- errorResult: undefined,
71
- inError: false
72
- };
73
- },
74
- computed: {
75
- classes() {
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': !!this.ceramic,
78
- 'y-input--outlined': !this.ceramic && (this.variations.includes('outlined') || !!this.outlined),
79
- 'y-input--filled': this.variations.includes('filled') || !!this.filled,
80
- 'y-input--focused': this.isFocused,
81
- 'y-input--readonly': !!this.readonly,
82
- 'y-input--has-value': !!this.inValue,
83
- 'y-input--disabled': !!this.disabled,
84
- 'y-input--error': this.isError,
85
- 'y-input--success': this.isSuccess,
86
- [this.themeClasses]: true
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: this.getDisplayHeight()
113
+ width: toStyleSizeValue(props.width),
114
+ height: toStyleSizeValue(props.height)
99
115
  };
100
- },
101
- attrId() {
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
- isError() {
116
- return this.status === 'error' || this.inError;
117
- },
118
- isSuccess() {
119
- return !this.isError && this.status === 'success';
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
- return [];
131
- }
132
- },
133
- methods: {
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
- return slot ? [slot] : [];
159
- },
160
- createLabel() {
161
- const show = !!this.label || !!getSlot(this, 'label');
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 h('label', {
166
- class: {
177
+ return _createVNode("label", {
178
+ "class": [{
167
179
  [`${NAME}__label`]: true,
168
- 'y-input__floating-label': this.floating,
169
- 'y-input__floating-label--floated': this.floating && this.isFloatedLabel
170
- },
171
- '.for': this.attrId
172
- }, this.createLabelSlot());
173
- },
174
- createDefaultChildren() {
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
- watch: {
335
- modelValue(neo) {
336
- this.inValue = neo;
337
- },
338
- readonly(neo) {
339
- if (!neo) {
340
- this.inValue = this.modelValue;
341
- }
342
- },
343
- inValue(neo) {
344
- if (!this.readonly) {
345
- this.$emit('update:modelValue', neo);
346
- }
347
- },
348
- isError(neo) {
349
- this.$emit('error', neo);
350
- },
351
- focused(neo) {
352
- if (!neo) {
353
- this.invokeValidators();
354
- }
355
- }
356
- },
357
- created() {
358
- this.inValue = this.modelValue;
359
- },
360
- setup(props) {
361
- const {
362
- themeClasses
363
- } = useLocalTheme(props);
364
- const {
365
- focused: isFocused,
366
- focusedClasses,
367
- whenFocus,
368
- whenBlur
369
- } = useFocus(props, 'y-input');
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