@c2-markdown-ui/vue 0.0.0-stage → 0.4.3
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/README.md +112 -2
- package/dist/MarkdownUI.vue.d.ts +15 -0
- package/dist/favicon.ico +0 -0
- package/dist/index.css +1 -0
- package/dist/index.d.ts +23 -0
- package/dist/index.js +10843 -0
- package/dist/index.umd.cjs +53 -0
- package/dist/widgets/Button.vue.d.ts +19 -0
- package/dist/widgets/ButtonGroup.vue.d.ts +13 -0
- package/dist/widgets/Cascader.vue.d.ts +48 -0
- package/dist/widgets/Chart.vue.d.ts +24 -0
- package/dist/widgets/DatePicker.vue.d.ts +42 -0
- package/dist/widgets/Form.vue.d.ts +59 -0
- package/dist/widgets/Incomplete.vue.d.ts +2 -0
- package/dist/widgets/MultipleChoiceQuestion.vue.d.ts +20 -0
- package/dist/widgets/NumberInput.vue.d.ts +37 -0
- package/dist/widgets/Quiz.vue.d.ts +39 -0
- package/dist/widgets/RadioGroup.vue.d.ts +43 -0
- package/dist/widgets/Select.vue.d.ts +27 -0
- package/dist/widgets/SelectMulti.vue.d.ts +38 -0
- package/dist/widgets/ShortAnswerQuestion.vue.d.ts +22 -0
- package/dist/widgets/Slider.vue.d.ts +21 -0
- package/dist/widgets/Switch.vue.d.ts +28 -0
- package/dist/widgets/Text.vue.d.ts +22 -0
- package/dist/widgets/TextInput.vue.d.ts +32 -0
- package/dist/widgets/TreeSelect.vue.d.ts +109 -0
- package/dist/widgets/Widget.vue.d.ts +8 -0
- package/dist/widgets/chartRemoteData.d.ts +17 -0
- package/dist/widgets/index.d.ts +20 -0
- package/dist/widgets/remoteChoices.d.ts +22 -0
- package/dist/widgets/treeSelectTypes.d.ts +43 -0
- package/package.json +46 -4
- package/src/App.vue +11 -0
- package/src/lib/MarkdownUI.vue +105 -0
- package/src/lib/index.ts +28 -0
- package/src/lib/widgets/Button.vue +47 -0
- package/src/lib/widgets/ButtonGroup.vue +43 -0
- package/src/lib/widgets/Cascader.vue +475 -0
- package/src/lib/widgets/Chart.vue +287 -0
- package/src/lib/widgets/DatePicker.vue +659 -0
- package/src/lib/widgets/Form.vue +479 -0
- package/src/lib/widgets/Incomplete.vue +56 -0
- package/src/lib/widgets/MultipleChoiceQuestion.vue +73 -0
- package/src/lib/widgets/NumberInput.vue +179 -0
- package/src/lib/widgets/Quiz.vue +205 -0
- package/src/lib/widgets/RadioGroup.vue +237 -0
- package/src/lib/widgets/Select.vue +279 -0
- package/src/lib/widgets/SelectMulti.vue +145 -0
- package/src/lib/widgets/ShortAnswerQuestion.vue +79 -0
- package/src/lib/widgets/Slider.vue +61 -0
- package/src/lib/widgets/Switch.vue +68 -0
- package/src/lib/widgets/Text.vue +59 -0
- package/src/lib/widgets/TextInput.vue +83 -0
- package/src/lib/widgets/TreeSelect.vue +872 -0
- package/src/lib/widgets/Widget.vue +185 -0
- package/src/lib/widgets/chartRemoteData.ts +84 -0
- package/src/lib/widgets/index.ts +20 -0
- package/src/lib/widgets/remoteChoices.ts +64 -0
- package/src/lib/widgets/treeSelectTypes.ts +49 -0
- package/src/lib/widgets.css +1754 -0
- package/src/main.ts +4 -0
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="widget-text-input" :class="{ 'widget-field-error': !!shownError }">
|
|
3
|
+
<div v-if="label || hint || required" class="widget-label-row">
|
|
4
|
+
<span v-if="required" class="widget-required-mark" aria-hidden="true">*</span>
|
|
5
|
+
<label v-if="label">{{ label }}</label>
|
|
6
|
+
<span v-if="hint" class="widget-hint" :data-hint="hint">ⓘ</span>
|
|
7
|
+
</div>
|
|
8
|
+
<div class="widget-field-content">
|
|
9
|
+
<input
|
|
10
|
+
type="text"
|
|
11
|
+
v-model="value"
|
|
12
|
+
:class="{ 'widget-input-error': !!shownError }"
|
|
13
|
+
:placeholder="placeholder"
|
|
14
|
+
:disabled="disabled"
|
|
15
|
+
@blur="commit"
|
|
16
|
+
@input="onInput"
|
|
17
|
+
/>
|
|
18
|
+
<div v-if="shownError" class="widget-error-text" role="alert">{{ shownError }}</div>
|
|
19
|
+
</div>
|
|
20
|
+
</div>
|
|
21
|
+
</template>
|
|
22
|
+
|
|
23
|
+
<script setup lang="ts">
|
|
24
|
+
import { ref, computed, defineProps, defineEmits } from 'vue'
|
|
25
|
+
|
|
26
|
+
interface TextInputProps {
|
|
27
|
+
placeholder?: string
|
|
28
|
+
label?: string
|
|
29
|
+
default?: string
|
|
30
|
+
hint?: string
|
|
31
|
+
/** 是否必填 */
|
|
32
|
+
required?: boolean
|
|
33
|
+
/** 正则校验规则(JS 正则源字符串) */
|
|
34
|
+
pattern?: string
|
|
35
|
+
/** 校验失败提示文案 */
|
|
36
|
+
message?: string
|
|
37
|
+
/** 外部(form 提交时)传入的错误信息,优先于组件内部即时校验 */
|
|
38
|
+
error?: string
|
|
39
|
+
/** 是否禁用 */
|
|
40
|
+
disabled?: boolean
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
interface TextInputEvents {
|
|
44
|
+
change: [value: string]
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
const props = withDefaults(defineProps<TextInputProps>(), {
|
|
48
|
+
placeholder: '',
|
|
49
|
+
label: '',
|
|
50
|
+
default: '',
|
|
51
|
+
hint: '',
|
|
52
|
+
required: false,
|
|
53
|
+
pattern: '',
|
|
54
|
+
message: '',
|
|
55
|
+
error: '',
|
|
56
|
+
disabled: false
|
|
57
|
+
})
|
|
58
|
+
|
|
59
|
+
const emit = defineEmits<TextInputEvents>()
|
|
60
|
+
|
|
61
|
+
const value = ref(props.default)
|
|
62
|
+
const localError = ref('')
|
|
63
|
+
|
|
64
|
+
/** 校验当前值:返回错误文案或空串 */
|
|
65
|
+
function validate(v: string): string {
|
|
66
|
+
if (props.required && !v.trim()) return props.message || (props.label ? `请填写${props.label}` : '该项为必填项')
|
|
67
|
+
if (props.pattern && v && !new RegExp(props.pattern).test(v)) return props.message || (props.label ? `${props.label}格式不正确` : '格式不正确')
|
|
68
|
+
return ''
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/** 提交:失焦时校验并对外发值 */
|
|
72
|
+
function commit() {
|
|
73
|
+
localError.value = validate(value.value)
|
|
74
|
+
emit('change', value.value)
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/** 输入中:错误已出现时实时重校验(对齐 React 版 onChange 行为) */
|
|
78
|
+
function onInput() {
|
|
79
|
+
if (localError.value) localError.value = validate(value.value)
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
const shownError = computed(() => props.error || localError.value)
|
|
83
|
+
</script>
|