yuyeon 0.3.7-beta.7 → 0.3.7
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/style.css +1 -1
- package/dist/yuyeon.js +762 -753
- package/dist/yuyeon.umd.cjs +2 -2
- package/lib/components/dialog/YDialog.scss +0 -1
- package/lib/composables/communication.js +4 -7
- package/lib/composables/communication.js.map +1 -1
- package/lib/composables/validation.js +24 -15
- package/lib/composables/validation.js.map +1 -1
- package/package.json +1 -1
|
@@ -10,16 +10,13 @@ export function useModelDuplex(props) {
|
|
|
10
10
|
const kebabProp = toKebabCase(prop);
|
|
11
11
|
const property = kebabProp === prop ? kebabToCamel(prop) : prop;
|
|
12
12
|
const txValue = ref(props[property] !== undefined ? props[property] : defaultValue);
|
|
13
|
-
function getProp() {
|
|
14
|
-
return props[property];
|
|
15
|
-
}
|
|
16
13
|
const isDefinedProp = computed(() => {
|
|
17
|
-
|
|
14
|
+
props[property];
|
|
18
15
|
const registeredProps = vm.vnode.props;
|
|
19
16
|
return !!registeredProps && (registeredProps.hasOwnProperty(kebabProp) || registeredProps.hasOwnProperty(property)) && (registeredProps.hasOwnProperty(`onUpdate:${kebabProp}`) || registeredProps.hasOwnProperty(`onUpdate:${property}`));
|
|
20
17
|
});
|
|
21
18
|
useToggleScope(() => !isDefinedProp.value, () => {
|
|
22
|
-
watch(() =>
|
|
19
|
+
watch(() => props[property], value => {
|
|
23
20
|
txValue.value = value;
|
|
24
21
|
});
|
|
25
22
|
});
|
|
@@ -29,7 +26,7 @@ export function useModelDuplex(props) {
|
|
|
29
26
|
},
|
|
30
27
|
set(value) {
|
|
31
28
|
const neo = setOut(value);
|
|
32
|
-
const current = toRaw(isDefinedProp.value ?
|
|
29
|
+
const current = toRaw(isDefinedProp.value ? props[property] : txValue.value);
|
|
33
30
|
if (current === neo || getIn(current) === value) {
|
|
34
31
|
return;
|
|
35
32
|
}
|
|
@@ -38,7 +35,7 @@ export function useModelDuplex(props) {
|
|
|
38
35
|
}
|
|
39
36
|
});
|
|
40
37
|
Object.defineProperty(model, 'rxValue', {
|
|
41
|
-
get: () => isDefinedProp.value ?
|
|
38
|
+
get: () => isDefinedProp.value ? props[property] : txValue.value
|
|
42
39
|
});
|
|
43
40
|
return model;
|
|
44
41
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"communication.js","names":["computed","getCurrentInstance","ref","toRaw","watch","kebabToCamel","toKebabCase","useToggleScope","useModelDuplex","props","prop","arguments","length","undefined","defaultValue","getIn","v","setOut","vm","kebabProp","property","txValue","
|
|
1
|
+
{"version":3,"file":"communication.js","names":["computed","getCurrentInstance","ref","toRaw","watch","kebabToCamel","toKebabCase","useToggleScope","useModelDuplex","props","prop","arguments","length","undefined","defaultValue","getIn","v","setOut","vm","kebabProp","property","txValue","isDefinedProp","registeredProps","vnode","hasOwnProperty","value","model","get","set","neo","current","emit","Object","defineProperty","useProvided","provided","internal"],"sources":["../../src/composables/communication.ts"],"sourcesContent":["import { type Ref, computed, getCurrentInstance, ref, toRaw, watch } from 'vue';\n\nimport { kebabToCamel, toKebabCase } from '@/util/string';\n\nimport { useToggleScope } from './scope';\n\nexport function useModelDuplex(\n props: any,\n prop: string = 'modelValue',\n defaultValue?: any,\n getIn: (value?: any) => any = (v: any) => v,\n setOut: (value: any) => any = (v: any) => v,\n) {\n const vm = getCurrentInstance()!;\n const kebabProp = toKebabCase(prop);\n const property = kebabProp === prop ? kebabToCamel(prop) : prop;\n const txValue = ref(\n props[property] !== undefined ? props[property] : defaultValue,\n );\n\n const isDefinedProp = computed(() => {\n props[property];\n const registeredProps = vm.vnode.props;\n return (\n !!registeredProps &&\n (registeredProps.hasOwnProperty(kebabProp) ||\n registeredProps.hasOwnProperty(property)) &&\n (registeredProps.hasOwnProperty(`onUpdate:${kebabProp}`) ||\n registeredProps.hasOwnProperty(`onUpdate:${property}`))\n );\n });\n\n useToggleScope(\n () => !isDefinedProp.value,\n () => {\n watch(\n () => props[property],\n (value) => {\n txValue.value = value;\n },\n );\n },\n );\n\n const model = computed({\n get(): any {\n return getIn(isDefinedProp.value ? props[property] : txValue.value);\n },\n set(value) {\n const neo = setOut(value);\n const current = toRaw(\n isDefinedProp.value ? props[property] : txValue.value,\n );\n if (current === neo || getIn(current) === value) {\n return;\n }\n txValue.value = neo;\n vm?.emit(`update:${property}`, neo);\n },\n }) as any as Ref<any> & { readonly rxValue: any };\n\n Object.defineProperty(model, 'rxValue', {\n get: () => (isDefinedProp.value ? props[property] : txValue.value),\n });\n\n return model;\n}\n\nexport function useProvided<T>(props: any, prop: string, provided: Ref<T>) {\n const internal = useModelDuplex(props, prop, props[prop] ?? provided.value);\n\n watch(provided, (value) => {\n if (props[prop] == null) {\n internal.value = value;\n }\n });\n return internal;\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -25,12 +25,14 @@ export const pressValidationPropsOptions = propsFactory({
|
|
|
25
25
|
}, 'validation');
|
|
26
26
|
export function useValidation(props, name) {
|
|
27
27
|
let uid = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : getUid();
|
|
28
|
-
const cid = computed(() => props.name ?? uid);
|
|
29
28
|
const model = useModelDuplex(props, 'modelValue');
|
|
30
|
-
const validationModel = computed(() => props.validationValue === undefined ? model.value : props.validationValue);
|
|
31
29
|
const vm = getCurrentInstance();
|
|
32
30
|
const form = useForm();
|
|
33
31
|
const validating = ref(false);
|
|
32
|
+
const errorResult = ref();
|
|
33
|
+
const errors = ref([]);
|
|
34
|
+
const cid = computed(() => props.name ?? uid);
|
|
35
|
+
const validationModel = computed(() => props.validationValue === undefined ? model.value : props.validationValue);
|
|
34
36
|
const validateOn = computed(() => {
|
|
35
37
|
let value = props.validateOn || 'input';
|
|
36
38
|
if (value === 'lazy') value = 'input,lazy';
|
|
@@ -42,8 +44,6 @@ export function useValidation(props, name) {
|
|
|
42
44
|
submit: onSet.has('submit')
|
|
43
45
|
};
|
|
44
46
|
});
|
|
45
|
-
const errorResult = ref();
|
|
46
|
-
const errors = ref([]);
|
|
47
47
|
const isReadonly = computed(() => props.readonly || form?.isReadonly.value);
|
|
48
48
|
const isDisabled = computed(() => props.disabled || form?.isDisabled.value);
|
|
49
49
|
const isLoading = computed(() => props.loading || form?.isLoading.value);
|
|
@@ -53,6 +53,15 @@ export function useValidation(props, name) {
|
|
|
53
53
|
const isSuccess = computed(() => {
|
|
54
54
|
return !isError.value && props.status === 'success';
|
|
55
55
|
});
|
|
56
|
+
watch([isError, errors], _ref => {
|
|
57
|
+
let [is, list] = _ref;
|
|
58
|
+
form?.update(cid.value, is, list);
|
|
59
|
+
}, {
|
|
60
|
+
immediate: true
|
|
61
|
+
});
|
|
62
|
+
watch(() => props.validators, () => {
|
|
63
|
+
resetValidation();
|
|
64
|
+
});
|
|
56
65
|
useToggleScope(() => validateOn.value.input, () => {
|
|
57
66
|
watch(validationModel, () => {
|
|
58
67
|
if (validationModel.value != null) {
|
|
@@ -65,6 +74,17 @@ export function useValidation(props, name) {
|
|
|
65
74
|
}
|
|
66
75
|
});
|
|
67
76
|
});
|
|
77
|
+
onBeforeUnmount(() => {
|
|
78
|
+
form?.unregister?.(cid.value);
|
|
79
|
+
});
|
|
80
|
+
onBeforeMount(() => {
|
|
81
|
+
form?.register({
|
|
82
|
+
id: cid.value,
|
|
83
|
+
vnode: vm.vnode,
|
|
84
|
+
resetValidation,
|
|
85
|
+
validate: invokeValidators
|
|
86
|
+
});
|
|
87
|
+
});
|
|
68
88
|
async function invokeValidators() {
|
|
69
89
|
const results = [];
|
|
70
90
|
validating.value = true;
|
|
@@ -101,17 +121,6 @@ export function useValidation(props, name) {
|
|
|
101
121
|
resetError();
|
|
102
122
|
}
|
|
103
123
|
}
|
|
104
|
-
onBeforeUnmount(() => {
|
|
105
|
-
form?.unregister?.(cid.value);
|
|
106
|
-
});
|
|
107
|
-
onBeforeMount(() => {
|
|
108
|
-
form?.register({
|
|
109
|
-
id: cid.value,
|
|
110
|
-
vnode: vm.vnode,
|
|
111
|
-
resetValidation,
|
|
112
|
-
validate: invokeValidators
|
|
113
|
-
});
|
|
114
|
-
});
|
|
115
124
|
return {
|
|
116
125
|
invokeValidators,
|
|
117
126
|
resetError,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.js","names":["computed","getCurrentInstance","onBeforeMount","onBeforeUnmount","ref","watch","getUid","propsFactory","useModelDuplex","useForm","useToggleScope","pressValidationPropsOptions","readonly","Boolean","disabled","status","type","String","validator","value","includes","helperText","validators","Array","validateOn","validationValue","maxErrors","Number","default","useValidation","props","name","uid","arguments","length","undefined","cid","model","validationModel","vm","form","validating","onSet","Set","split","blur","has","input","lazy","submit","errorResult","errors","isReadonly","isDisabled","isLoading","loading","isError","isSuccess","invokeValidators","focused","unwatch","val","results","isArray","handler","result","console","warn","push","resetError","resetValidation","unregister","register","id","vnode","validate"],"sources":["../../src/composables/validation.ts"],"sourcesContent":["import {\r\n type PropType,\r\n computed,\r\n getCurrentInstance,\r\n onBeforeMount,\r\n onBeforeUnmount,\r\n ref,\r\n watch,\r\n} from 'vue';\r\n\r\nimport { getUid, propsFactory } from '@/util/component';\r\n\r\nimport { useModelDuplex } from './communication';\r\nimport { useForm } from './form';\r\nimport { useToggleScope } from './scope';\r\n\r\nexport interface ValidationProps {\r\n validateOn: 'input' | 'blur' | 'lazy' | 'submit' | string;\r\n}\r\n\r\nexport const pressValidationPropsOptions = propsFactory(\r\n {\r\n readonly: Boolean as PropType<boolean>,\r\n disabled: Boolean as PropType<boolean>,\r\n status: {\r\n type: String as PropType<'success' | 'warning' | 'error' | undefined>,\r\n validator(value: string) {\r\n return ['success', 'warning', 'error'].includes(value);\r\n },\r\n },\r\n helperText: String,\r\n validators: Array as PropType<((v: any) => boolean | string)[] | string[]>,\r\n validateOn: {\r\n type: String as PropType<ValidationProps['validateOn']>,\r\n },\r\n validationValue: null,\r\n maxErrors: {\r\n type: [Number, String] as PropType<number | string>,\r\n default: 1,\r\n },\r\n },\r\n 'validation',\r\n);\r\n\r\nexport function useValidation(props: any, name: string, uid = getUid()) {\r\n const cid = computed(() => props.name ?? uid);\r\n const model = useModelDuplex(props, 'modelValue');\r\n const validationModel = computed(() =>\r\n props.validationValue === undefined ? model.value : props.validationValue,\r\n );\r\n const vm = getCurrentInstance()!;\r\n const form = useForm();\r\n const validating = ref(false);\r\n const validateOn = computed(() => {\r\n let value = props.validateOn || 'input';\r\n if (value === 'lazy') value = 'input,lazy';\r\n const onSet = new Set(value?.split(',') ?? []);\r\n\r\n return {\r\n blur: onSet.has('blur') || onSet.has('input'),\r\n input: onSet.has('input'),\r\n lazy: onSet.has('lazy'),\r\n submit: onSet.has('submit'),\r\n };\r\n });\r\n\r\n const errorResult = ref();\r\n const errors = ref<any[]>([]);\r\n\r\n const isReadonly = computed(() => props.readonly || form?.isReadonly.value);\r\n\r\n const isDisabled = computed(() => props.disabled || form?.isDisabled.value);\r\n\r\n const isLoading = computed(() => props.loading || form?.isLoading.value);\r\n\r\n const isError = computed(() => {\r\n return props.status === 'error' || errors.value.length > 0;\r\n });\r\n\r\n const isSuccess = computed(() => {\r\n return !isError.value && props.status === 'success';\r\n });\r\n\r\n useToggleScope(\r\n () => validateOn.value.input,\r\n () => {\r\n watch(validationModel, () => {\r\n if (validationModel.value != null) {\r\n invokeValidators();\r\n } else if (props.focused) {\r\n const unwatch = watch(\r\n () => props.focused,\r\n (val) => {\r\n if (!val) invokeValidators();\r\n\r\n unwatch();\r\n },\r\n );\r\n }\r\n });\r\n },\r\n );\r\n\r\n async function invokeValidators() {\r\n const results: any[] = [];\r\n validating.value = true;\r\n\r\n if (Array.isArray(props.validators)) {\r\n for (const validator of props.validators) {\r\n if (results.length >= +(props.maxErrors ?? 1)) {\r\n break;\r\n }\r\n\r\n const handler =\r\n typeof validator === 'function' ? validator : () => validator;\r\n const result = await handler(validationModel.value);\r\n\r\n if (result === true) {\r\n continue;\r\n }\r\n\r\n if (result !== false && typeof result !== 'string') {\r\n console.warn('Wrong validator return type');\r\n continue;\r\n }\r\n results.push(result || '');\r\n }\r\n }\r\n validating.value = false;\r\n errors.value = results;\r\n errorResult.value = results?.[0];\r\n\r\n return results;\r\n }\r\n\r\n function resetError() {\r\n errors.value = [];\r\n errorResult.value = undefined;\r\n }\r\n\r\n async function resetValidation() {\r\n if (!validateOn.value.lazy) {\r\n await invokeValidators();\r\n } else {\r\n resetError();\r\n }\r\n }\r\n\r\n onBeforeUnmount(() => {\r\n form?.unregister?.(cid.value);\r\n });\r\n\r\n onBeforeMount(() => {\r\n form?.register({\r\n id: cid.value,\r\n vnode: vm.vnode,\r\n resetValidation,\r\n validate: invokeValidators,\r\n });\r\n });\r\n\r\n return {\r\n invokeValidators,\r\n resetError,\r\n validating,\r\n validateOn,\r\n errorResult,\r\n errors,\r\n isReadonly,\r\n isDisabled,\r\n isLoading,\r\n isError,\r\n isSuccess,\r\n };\r\n}\r\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"validation.js","names":["computed","getCurrentInstance","onBeforeMount","onBeforeUnmount","ref","watch","getUid","propsFactory","useModelDuplex","useForm","useToggleScope","pressValidationPropsOptions","readonly","Boolean","disabled","status","type","String","validator","value","includes","helperText","validators","Array","validateOn","validationValue","maxErrors","Number","default","useValidation","props","name","uid","arguments","length","undefined","model","vm","form","validating","errorResult","errors","cid","validationModel","onSet","Set","split","blur","has","input","lazy","submit","isReadonly","isDisabled","isLoading","loading","isError","isSuccess","_ref","is","list","update","immediate","resetValidation","invokeValidators","focused","unwatch","val","unregister","register","id","vnode","validate","results","isArray","handler","result","console","warn","push","resetError"],"sources":["../../src/composables/validation.ts"],"sourcesContent":["import {\n type PropType,\n computed,\n getCurrentInstance,\n onBeforeMount,\n onBeforeUnmount,\n ref,\n watch,\n} from 'vue';\n\nimport { getUid, propsFactory } from '@/util/component';\n\nimport { useModelDuplex } from './communication';\nimport { useForm } from './form';\nimport { useToggleScope } from './scope';\n\nexport interface ValidationProps {\n validateOn: 'input' | 'blur' | 'lazy' | 'submit' | string;\n}\n\nexport const pressValidationPropsOptions = propsFactory(\n {\n readonly: Boolean as PropType<boolean>,\n disabled: Boolean as PropType<boolean>,\n status: {\n type: String as PropType<'success' | 'warning' | 'error' | undefined>,\n validator(value: string) {\n return ['success', 'warning', 'error'].includes(value);\n },\n },\n helperText: String,\n validators: Array as PropType<((v: any) => boolean | string)[] | string[]>,\n validateOn: {\n type: String as PropType<ValidationProps['validateOn']>,\n },\n validationValue: null,\n maxErrors: {\n type: [Number, String] as PropType<number | string>,\n default: 1,\n },\n },\n 'validation',\n);\n\nexport function useValidation(props: any, name: string, uid = getUid()) {\n const model = useModelDuplex(props, 'modelValue');\n const vm = getCurrentInstance()!;\n const form = useForm();\n const validating = ref(false);\n const errorResult = ref();\n const errors = ref<any[]>([]);\n\n const cid = computed(() => props.name ?? uid);\n\n const validationModel = computed(() =>\n props.validationValue === undefined ? model.value : props.validationValue,\n );\n\n const validateOn = computed(() => {\n let value = props.validateOn || 'input';\n if (value === 'lazy') value = 'input,lazy';\n const onSet = new Set(value?.split(',') ?? []);\n\n return {\n blur: onSet.has('blur') || onSet.has('input'),\n input: onSet.has('input'),\n lazy: onSet.has('lazy'),\n submit: onSet.has('submit'),\n };\n });\n\n const isReadonly = computed(() => props.readonly || form?.isReadonly.value);\n\n const isDisabled = computed(() => props.disabled || form?.isDisabled.value);\n\n const isLoading = computed(() => props.loading || form?.isLoading.value);\n\n const isError = computed(() => {\n return props.status === 'error' || errors.value.length > 0;\n });\n\n const isSuccess = computed(() => {\n return !isError.value && props.status === 'success';\n });\n\n watch(\n [isError, errors],\n ([is, list]) => {\n form?.update(cid.value, is, list);\n },\n { immediate: true },\n );\n\n watch(\n () => props.validators,\n () => {\n resetValidation();\n },\n );\n\n useToggleScope(\n () => validateOn.value.input,\n () => {\n watch(validationModel, () => {\n if (validationModel.value != null) {\n invokeValidators();\n } else if (props.focused) {\n const unwatch = watch(\n () => props.focused,\n (val) => {\n if (!val) invokeValidators();\n\n unwatch();\n },\n );\n }\n });\n },\n );\n\n onBeforeUnmount(() => {\n form?.unregister?.(cid.value);\n });\n\n onBeforeMount(() => {\n form?.register({\n id: cid.value,\n vnode: vm.vnode,\n resetValidation,\n validate: invokeValidators,\n });\n });\n\n async function invokeValidators() {\n const results: any[] = [];\n validating.value = true;\n\n if (Array.isArray(props.validators)) {\n for (const validator of props.validators) {\n if (results.length >= +(props.maxErrors ?? 1)) {\n break;\n }\n\n const handler =\n typeof validator === 'function' ? validator : () => validator;\n const result = await handler(validationModel.value);\n\n if (result === true) {\n continue;\n }\n\n if (result !== false && typeof result !== 'string') {\n console.warn('Wrong validator return type');\n continue;\n }\n results.push(result || '');\n }\n }\n validating.value = false;\n errors.value = results;\n errorResult.value = results?.[0];\n\n return results;\n }\n\n function resetError() {\n errors.value = [];\n errorResult.value = undefined;\n }\n\n async function resetValidation() {\n if (!validateOn.value.lazy) {\n await invokeValidators();\n } else {\n resetError();\n }\n }\n\n return {\n invokeValidators,\n resetError,\n validating,\n validateOn,\n errorResult,\n errors,\n isReadonly,\n isDisabled,\n isLoading,\n isError,\n isSuccess,\n };\n}\n"],"mappings":"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","ignoreList":[]}
|