@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.
Files changed (61) hide show
  1. package/README.md +112 -2
  2. package/dist/MarkdownUI.vue.d.ts +15 -0
  3. package/dist/favicon.ico +0 -0
  4. package/dist/index.css +1 -0
  5. package/dist/index.d.ts +23 -0
  6. package/dist/index.js +10843 -0
  7. package/dist/index.umd.cjs +53 -0
  8. package/dist/widgets/Button.vue.d.ts +19 -0
  9. package/dist/widgets/ButtonGroup.vue.d.ts +13 -0
  10. package/dist/widgets/Cascader.vue.d.ts +48 -0
  11. package/dist/widgets/Chart.vue.d.ts +24 -0
  12. package/dist/widgets/DatePicker.vue.d.ts +42 -0
  13. package/dist/widgets/Form.vue.d.ts +59 -0
  14. package/dist/widgets/Incomplete.vue.d.ts +2 -0
  15. package/dist/widgets/MultipleChoiceQuestion.vue.d.ts +20 -0
  16. package/dist/widgets/NumberInput.vue.d.ts +37 -0
  17. package/dist/widgets/Quiz.vue.d.ts +39 -0
  18. package/dist/widgets/RadioGroup.vue.d.ts +43 -0
  19. package/dist/widgets/Select.vue.d.ts +27 -0
  20. package/dist/widgets/SelectMulti.vue.d.ts +38 -0
  21. package/dist/widgets/ShortAnswerQuestion.vue.d.ts +22 -0
  22. package/dist/widgets/Slider.vue.d.ts +21 -0
  23. package/dist/widgets/Switch.vue.d.ts +28 -0
  24. package/dist/widgets/Text.vue.d.ts +22 -0
  25. package/dist/widgets/TextInput.vue.d.ts +32 -0
  26. package/dist/widgets/TreeSelect.vue.d.ts +109 -0
  27. package/dist/widgets/Widget.vue.d.ts +8 -0
  28. package/dist/widgets/chartRemoteData.d.ts +17 -0
  29. package/dist/widgets/index.d.ts +20 -0
  30. package/dist/widgets/remoteChoices.d.ts +22 -0
  31. package/dist/widgets/treeSelectTypes.d.ts +43 -0
  32. package/package.json +46 -4
  33. package/src/App.vue +11 -0
  34. package/src/lib/MarkdownUI.vue +105 -0
  35. package/src/lib/index.ts +28 -0
  36. package/src/lib/widgets/Button.vue +47 -0
  37. package/src/lib/widgets/ButtonGroup.vue +43 -0
  38. package/src/lib/widgets/Cascader.vue +475 -0
  39. package/src/lib/widgets/Chart.vue +287 -0
  40. package/src/lib/widgets/DatePicker.vue +659 -0
  41. package/src/lib/widgets/Form.vue +479 -0
  42. package/src/lib/widgets/Incomplete.vue +56 -0
  43. package/src/lib/widgets/MultipleChoiceQuestion.vue +73 -0
  44. package/src/lib/widgets/NumberInput.vue +179 -0
  45. package/src/lib/widgets/Quiz.vue +205 -0
  46. package/src/lib/widgets/RadioGroup.vue +237 -0
  47. package/src/lib/widgets/Select.vue +279 -0
  48. package/src/lib/widgets/SelectMulti.vue +145 -0
  49. package/src/lib/widgets/ShortAnswerQuestion.vue +79 -0
  50. package/src/lib/widgets/Slider.vue +61 -0
  51. package/src/lib/widgets/Switch.vue +68 -0
  52. package/src/lib/widgets/Text.vue +59 -0
  53. package/src/lib/widgets/TextInput.vue +83 -0
  54. package/src/lib/widgets/TreeSelect.vue +872 -0
  55. package/src/lib/widgets/Widget.vue +185 -0
  56. package/src/lib/widgets/chartRemoteData.ts +84 -0
  57. package/src/lib/widgets/index.ts +20 -0
  58. package/src/lib/widgets/remoteChoices.ts +64 -0
  59. package/src/lib/widgets/treeSelectTypes.ts +49 -0
  60. package/src/lib/widgets.css +1754 -0
  61. 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>