@hbdlzy/ui-core 0.1.7 → 0.1.8

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 (67) hide show
  1. package/README.md +30 -2
  2. package/components.manifest.json +15 -1
  3. package/dist/index.cjs +5 -5
  4. package/dist/index.d.ts +50 -13
  5. package/dist/index.js +229 -17
  6. package/dist/ripple/index.cjs +42 -0
  7. package/dist/ripple/index.d.ts +8 -1
  8. package/dist/ripple/index.js +171 -0
  9. package/dist/style.css +1 -1
  10. package/package.json +17 -2
  11. package/src/components/BaseCard/BaseCard.types.d.ts +36 -0
  12. package/src/components/BaseCard/BaseCard.vue.d.ts +122 -0
  13. package/src/components/BaseCard/README.md +33 -0
  14. package/src/components/BaseCard/index.d.ts +3 -0
  15. package/src/components/BaseEChart/BaseEChart.types.d.ts +26 -0
  16. package/src/components/BaseEChart/BaseEChart.vue.d.ts +66 -0
  17. package/src/components/BaseEChart/README.md +33 -0
  18. package/src/components/BaseEChart/index.d.ts +3 -0
  19. package/src/components/BaseExportButton/BaseExportButton.types.d.ts +21 -0
  20. package/src/components/BaseExportButton/BaseExportButton.utils.d.ts +4 -0
  21. package/src/components/BaseExportButton/BaseExportButton.vue.d.ts +128 -0
  22. package/src/components/BaseExportButton/README.md +34 -0
  23. package/src/components/BaseExportButton/index.d.ts +5 -0
  24. package/src/components/BaseTable/BaseTable.types.d.ts +178 -0
  25. package/src/components/BaseTable/BaseTable.vue +16 -13
  26. package/src/components/BaseTable/BaseTable.vue.d.ts +157 -0
  27. package/src/components/BaseTable/README.md +45 -0
  28. package/src/components/BaseTable/index.d.ts +3 -0
  29. package/src/components/OutlinedCascader/OutlinedCascader.types.d.ts +28 -0
  30. package/src/components/OutlinedCascader/OutlinedCascader.vue.d.ts +94 -0
  31. package/src/components/OutlinedCascader/README.md +34 -0
  32. package/src/components/OutlinedCascader/index.d.ts +3 -0
  33. package/src/components/OutlinedDatePicker/OutlinedDatePicker.types.d.ts +30 -0
  34. package/src/components/OutlinedDatePicker/OutlinedDatePicker.vue.d.ts +97 -0
  35. package/src/components/OutlinedDatePicker/README.md +34 -0
  36. package/src/components/OutlinedDatePicker/index.d.ts +3 -0
  37. package/src/components/OutlinedDateTimePicker/OutlinedDateTimePicker.types.d.ts +29 -0
  38. package/src/components/OutlinedDateTimePicker/OutlinedDateTimePicker.vue.d.ts +106 -0
  39. package/src/components/OutlinedDateTimePicker/README.md +33 -0
  40. package/src/components/OutlinedDateTimePicker/index.d.ts +3 -0
  41. package/src/components/OutlinedInput/OutlinedInput.types.d.ts +32 -0
  42. package/src/components/OutlinedInput/OutlinedInput.vue.d.ts +106 -0
  43. package/src/components/OutlinedInput/README.md +34 -0
  44. package/src/components/OutlinedInput/index.d.ts +3 -0
  45. package/src/components/OutlinedSelect/OutlinedSelect.types.d.ts +41 -0
  46. package/src/components/OutlinedSelect/OutlinedSelect.vue.d.ts +125 -0
  47. package/src/components/OutlinedSelect/README.md +34 -0
  48. package/src/components/OutlinedSelect/index.d.ts +3 -0
  49. package/src/components/OutlinedTimePicker/OutlinedTimePicker.types.d.ts +31 -0
  50. package/src/components/OutlinedTimePicker/OutlinedTimePicker.vue.d.ts +103 -0
  51. package/src/components/OutlinedTimePicker/README.md +33 -0
  52. package/src/components/OutlinedTimePicker/index.d.ts +3 -0
  53. package/src/components/OutlinedTreeSelect/OutlinedTreeSelect.types.d.ts +49 -0
  54. package/src/components/OutlinedTreeSelect/OutlinedTreeSelect.vue.d.ts +146 -0
  55. package/src/components/OutlinedTreeSelect/README.md +34 -0
  56. package/src/components/OutlinedTreeSelect/index.d.ts +3 -0
  57. package/src/components/SvgIcon/README.md +33 -0
  58. package/src/components/SvgIcon/SvgIcon.types.d.ts +6 -0
  59. package/src/components/SvgIcon/SvgIcon.vue.d.ts +32 -0
  60. package/src/components/SvgIcon/index.d.ts +3 -0
  61. package/src/echarts/index.d.ts +9 -0
  62. package/src/excel/exportExcel.d.ts +18 -0
  63. package/src/index.d.ts +30 -0
  64. package/src/index.ts +78 -13
  65. package/src/ripple/README.md +160 -0
  66. package/src/ripple/index.d.ts +9 -0
  67. package/src/ripple/index.ts +15 -1
@@ -0,0 +1,97 @@
1
+ import type { OutlinedDatePickerCssValue, OutlinedDatePickerDisabledDate, OutlinedDatePickerProps, OutlinedDatePickerValue } from './OutlinedDatePicker.types';
2
+ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<OutlinedDatePickerProps>, {
3
+ value: string;
4
+ placeholder: string;
5
+ label: string;
6
+ disabled: boolean;
7
+ timeValue: boolean;
8
+ typeDate: string;
9
+ format: string;
10
+ valueFormat: string;
11
+ showPassword: boolean;
12
+ multiple: boolean;
13
+ inputHeight: number;
14
+ isBorder: boolean;
15
+ disabledDate: undefined;
16
+ marginBottom: number;
17
+ paddingTop: number;
18
+ required: boolean;
19
+ error: boolean;
20
+ errorMessage: string;
21
+ }>>, {
22
+ focus: () => void;
23
+ blur: () => void;
24
+ handleOpen: () => void;
25
+ handleClose: () => void;
26
+ getPickerRef: () => unknown;
27
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
28
+ input: (value: OutlinedDatePickerValue) => void;
29
+ "update:value": (value: OutlinedDatePickerValue) => void;
30
+ change: (value: OutlinedDatePickerValue) => void;
31
+ focus: (value: FocusEvent) => void;
32
+ blur: (value: FocusEvent) => void;
33
+ "visible-change": (value: boolean) => void;
34
+ }, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<OutlinedDatePickerProps>, {
35
+ value: string;
36
+ placeholder: string;
37
+ label: string;
38
+ disabled: boolean;
39
+ timeValue: boolean;
40
+ typeDate: string;
41
+ format: string;
42
+ valueFormat: string;
43
+ showPassword: boolean;
44
+ multiple: boolean;
45
+ inputHeight: number;
46
+ isBorder: boolean;
47
+ disabledDate: undefined;
48
+ marginBottom: number;
49
+ paddingTop: number;
50
+ required: boolean;
51
+ error: boolean;
52
+ errorMessage: string;
53
+ }>>> & Readonly<{
54
+ onBlur?: ((value: FocusEvent) => any) | undefined;
55
+ onChange?: ((value: OutlinedDatePickerValue) => any) | undefined;
56
+ onFocus?: ((value: FocusEvent) => any) | undefined;
57
+ onInput?: ((value: OutlinedDatePickerValue) => any) | undefined;
58
+ "onUpdate:value"?: ((value: OutlinedDatePickerValue) => any) | undefined;
59
+ "onVisible-change"?: ((value: boolean) => any) | undefined;
60
+ }>, {
61
+ error: boolean;
62
+ label: string;
63
+ disabled: boolean;
64
+ required: boolean;
65
+ value: OutlinedDatePickerValue;
66
+ placeholder: string;
67
+ errorMessage: string;
68
+ showPassword: boolean;
69
+ inputHeight: number;
70
+ isBorder: boolean;
71
+ marginBottom: OutlinedDatePickerCssValue;
72
+ paddingTop: OutlinedDatePickerCssValue;
73
+ multiple: boolean;
74
+ timeValue: boolean;
75
+ typeDate: string;
76
+ format: string;
77
+ valueFormat: string;
78
+ disabledDate: OutlinedDatePickerDisabledDate;
79
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
80
+ export default _default;
81
+ type __VLS_NonUndefinedable<T> = T extends undefined ? never : T;
82
+ type __VLS_TypePropsToRuntimeProps<T> = {
83
+ [K in keyof T]-?: {} extends Pick<T, K> ? {
84
+ type: import('vue').PropType<__VLS_NonUndefinedable<T[K]>>;
85
+ } : {
86
+ type: import('vue').PropType<T[K]>;
87
+ required: true;
88
+ };
89
+ };
90
+ type __VLS_WithDefaults<P, D> = {
91
+ [K in keyof Pick<P, keyof P>]: K extends keyof D ? __VLS_Prettify<P[K] & {
92
+ default: D[K];
93
+ }> : P[K];
94
+ };
95
+ type __VLS_Prettify<T> = {
96
+ [K in keyof T]: T[K];
97
+ } & {};
@@ -138,3 +138,37 @@ const form = reactive({
138
138
  - 普通日期和日期时间选择器优先使用 `OutlinedDatePicker`
139
139
  - 默认通过 `typeDate + format` 收敛常见场景
140
140
  - 自定义日期禁用规则优先使用 `disabledDate`,不要在页面层重复封装相同逻辑
141
+
142
+ ## AI 使用指引
143
+
144
+ AI 在生成日期选择项时,如果页面需要浮动标签、统一高度、日期禁用规则或兼容旧项目 `v-model:value`,应优先使用 `OutlinedDatePicker`。
145
+
146
+ 推荐优先从统一入口导入:
147
+
148
+ ```ts
149
+ import { OutlinedDatePicker, type OutlinedDatePickerExpose } from '@hbdlzy/ui'
150
+ ```
151
+
152
+ 如果当前只安装了核心包,也可以从 `@hbdlzy/ui-core` 导入。
153
+
154
+ AI 生成代码时按下面顺序判断:
155
+
156
+ 1. 普通日期使用 `type-date="date"` 和默认 `YYYY-MM-DD`
157
+ 2. 日期时间使用 `type-date="datetime"`,同步设置 `format` 和必要的 `valueFormat`
158
+ 3. 日期范围继续透传 Element Plus 原生 `type` 能力时,要确认 `value` 类型为数组
159
+ 4. 禁止选择今天之前的日期时,优先使用 `:disabled-date="'nowDate'"`
160
+ 5. 更复杂禁用规则传函数,不要在页面里包一层重复组件
161
+ 6. 需要手动打开或关闭面板时,使用 `ref<OutlinedDatePickerExpose>`
162
+
163
+ AI 不应该做这些事:
164
+
165
+ - 不要重新封装基础 `el-date-picker` 只为实现浮动标签
166
+ - 不要在多个页面复制相同的禁用日期判断
167
+ - 不要混用 `format` 和 `valueFormat` 导致展示值、提交值不一致
168
+ - 不要把业务接口逻辑塞进日期组件
169
+
170
+ 生成代码前建议同时读取:
171
+
172
+ - `packages/ui-core/components.manifest.json`
173
+ - `packages/ui-core/src/components/OutlinedDatePicker/OutlinedDatePicker.types.ts`
174
+ - 本 README 的 `Props / Events / Expose / 透传规则` 部分
@@ -0,0 +1,3 @@
1
+ import OutlinedDatePicker from './OutlinedDatePicker.vue';
2
+ export default OutlinedDatePicker;
3
+ export type { OutlinedDatePickerCssValue, OutlinedDatePickerDisabledDate, OutlinedDatePickerExpose, OutlinedDatePickerProps, OutlinedDatePickerValue } from './OutlinedDatePicker.types';
@@ -0,0 +1,29 @@
1
+ export type OutlinedDateTimePickerCssValue = string | number;
2
+ export type OutlinedDateTimePickerValue = string;
3
+ export type OutlinedDateTimePickerDisabledDate = string | number | Date | ((date: Date) => boolean);
4
+ export interface OutlinedDateTimePickerProps {
5
+ value?: OutlinedDateTimePickerValue;
6
+ placeholder?: string;
7
+ label?: string;
8
+ inputHeight?: number;
9
+ isBorder?: boolean;
10
+ disabledDate?: OutlinedDateTimePickerDisabledDate;
11
+ separatorText?: string;
12
+ timePlaceholder?: string;
13
+ clearable?: boolean;
14
+ marginBottom?: OutlinedDateTimePickerCssValue;
15
+ paddingTop?: OutlinedDateTimePickerCssValue;
16
+ required?: boolean;
17
+ error?: boolean;
18
+ errorMessage?: string;
19
+ }
20
+ export interface OutlinedDateTimePickerExpose {
21
+ focusDate: () => void;
22
+ focusTime: () => void;
23
+ blurDate: () => void;
24
+ blurTime: () => void;
25
+ openDatePanel: () => void;
26
+ openTimePanel: () => void;
27
+ getDatePickerRef: () => unknown | null;
28
+ getTimePickerRef: () => unknown | null;
29
+ }
@@ -0,0 +1,106 @@
1
+ import type { OutlinedDateTimePickerCssValue, OutlinedDateTimePickerDisabledDate, OutlinedDateTimePickerProps } from './OutlinedDateTimePicker.types';
2
+ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<OutlinedDateTimePickerProps>, {
3
+ value: string;
4
+ placeholder: string;
5
+ label: string;
6
+ inputHeight: number;
7
+ isBorder: boolean;
8
+ disabledDate: undefined;
9
+ separatorText: string;
10
+ timePlaceholder: string;
11
+ clearable: boolean;
12
+ marginBottom: number;
13
+ paddingTop: number;
14
+ required: boolean;
15
+ error: boolean;
16
+ errorMessage: string;
17
+ }>>, {
18
+ focusDate: () => void;
19
+ focusTime: () => void;
20
+ blurDate: () => void;
21
+ blurTime: () => void;
22
+ openDatePanel: () => void;
23
+ openTimePanel: () => void;
24
+ getDatePickerRef: () => unknown;
25
+ getTimePickerRef: () => unknown;
26
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
27
+ input: (value: string) => void;
28
+ "update:value": (value: string) => void;
29
+ change: (value: string) => void;
30
+ focus: (payload: {
31
+ field: "time" | "date";
32
+ event: FocusEvent;
33
+ }) => void;
34
+ blur: (payload: {
35
+ field: "time" | "date";
36
+ event: FocusEvent;
37
+ }) => void;
38
+ "visible-change": (payload: {
39
+ field: "time" | "date";
40
+ visible: boolean;
41
+ }) => void;
42
+ }, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<OutlinedDateTimePickerProps>, {
43
+ value: string;
44
+ placeholder: string;
45
+ label: string;
46
+ inputHeight: number;
47
+ isBorder: boolean;
48
+ disabledDate: undefined;
49
+ separatorText: string;
50
+ timePlaceholder: string;
51
+ clearable: boolean;
52
+ marginBottom: number;
53
+ paddingTop: number;
54
+ required: boolean;
55
+ error: boolean;
56
+ errorMessage: string;
57
+ }>>> & Readonly<{
58
+ onBlur?: ((payload: {
59
+ field: "time" | "date";
60
+ event: FocusEvent;
61
+ }) => any) | undefined;
62
+ onChange?: ((value: string) => any) | undefined;
63
+ onFocus?: ((payload: {
64
+ field: "time" | "date";
65
+ event: FocusEvent;
66
+ }) => any) | undefined;
67
+ onInput?: ((value: string) => any) | undefined;
68
+ "onUpdate:value"?: ((value: string) => any) | undefined;
69
+ "onVisible-change"?: ((payload: {
70
+ field: "time" | "date";
71
+ visible: boolean;
72
+ }) => any) | undefined;
73
+ }>, {
74
+ error: boolean;
75
+ label: string;
76
+ required: boolean;
77
+ value: string;
78
+ placeholder: string;
79
+ errorMessage: string;
80
+ inputHeight: number;
81
+ isBorder: boolean;
82
+ clearable: boolean;
83
+ marginBottom: OutlinedDateTimePickerCssValue;
84
+ paddingTop: OutlinedDateTimePickerCssValue;
85
+ disabledDate: OutlinedDateTimePickerDisabledDate;
86
+ separatorText: string;
87
+ timePlaceholder: string;
88
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
89
+ export default _default;
90
+ type __VLS_NonUndefinedable<T> = T extends undefined ? never : T;
91
+ type __VLS_TypePropsToRuntimeProps<T> = {
92
+ [K in keyof T]-?: {} extends Pick<T, K> ? {
93
+ type: import('vue').PropType<__VLS_NonUndefinedable<T[K]>>;
94
+ } : {
95
+ type: import('vue').PropType<T[K]>;
96
+ required: true;
97
+ };
98
+ };
99
+ type __VLS_WithDefaults<P, D> = {
100
+ [K in keyof Pick<P, keyof P>]: K extends keyof D ? __VLS_Prettify<P[K] & {
101
+ default: D[K];
102
+ }> : P[K];
103
+ };
104
+ type __VLS_Prettify<T> = {
105
+ [K in keyof T]: T[K];
106
+ } & {};
@@ -89,3 +89,36 @@ const openDatePanel = () => {
89
89
  - 组件内部只处理输入壳子、标签浮层、日期禁用和时间联动,不直接耦合接口、表单校验器或业务规则
90
90
  - 如果只选了日期但没有选时间,组件会在日期确认时自动补一个当前 `HH:mm`
91
91
  - 页面层如果需要更复杂的日期时间协议,建议继续在外层包业务组件,不要把业务判断塞回 `ui-core`
92
+
93
+ ## AI 使用指引
94
+
95
+ AI 在生成“日期 + 时间”组合输入时,应优先使用 `OutlinedDateTimePicker`,不要在页面里重复拼两个控件、同步两个值和处理面板状态。
96
+
97
+ 推荐优先从统一入口导入:
98
+
99
+ ```ts
100
+ import { OutlinedDateTimePicker, type OutlinedDateTimePickerExpose } from '@hbdlzy/ui'
101
+ ```
102
+
103
+ 如果当前只安装了核心包,也可以从 `@hbdlzy/ui-core` 导入。
104
+
105
+ AI 生成代码时按下面顺序判断:
106
+
107
+ 1. 需要一个字符串值 `YYYY-MM-DD HH:mm` 时使用本组件
108
+ 2. 日期文案用 `placeholder`,时间文案用 `timePlaceholder`
109
+ 3. 需要限制今天之前不可选时,使用 `:disabled-date="'nowDate'"`
110
+ 4. 需要清空时传 `clearable`
111
+ 5. 需要手动打开日期或时间面板时,使用 `ref<OutlinedDateTimePickerExpose>`
112
+
113
+ AI 不应该做这些事:
114
+
115
+ - 不要在页面里手写两个独立控件再拼接字符串
116
+ - 不要重复实现“选日期后自动补当前时间”的逻辑
117
+ - 不要把复杂业务日期协议塞进基础组件,必要时在业务包再封一层
118
+ - 不要用它替代纯日期或纯时间控件,纯日期用 `OutlinedDatePicker`,纯时间用 `OutlinedTimePicker`
119
+
120
+ 生成代码前建议同时读取:
121
+
122
+ - `packages/ui-core/components.manifest.json`
123
+ - `packages/ui-core/src/components/OutlinedDateTimePicker/OutlinedDateTimePicker.types.ts`
124
+ - 本 README 的 `Props / Emits / Expose` 部分
@@ -0,0 +1,3 @@
1
+ import OutlinedDateTimePicker from './OutlinedDateTimePicker.vue';
2
+ export default OutlinedDateTimePicker;
3
+ export type { OutlinedDateTimePickerCssValue, OutlinedDateTimePickerDisabledDate, OutlinedDateTimePickerExpose, OutlinedDateTimePickerProps, OutlinedDateTimePickerValue } from './OutlinedDateTimePicker.types';
@@ -0,0 +1,32 @@
1
+ export type OutlinedInputValue = string | number;
2
+ export type OutlinedInputCssValue = string | number;
3
+ export interface OutlinedInputProps {
4
+ value?: OutlinedInputValue;
5
+ disabled?: boolean;
6
+ regex?: RegExp;
7
+ placeholder?: string;
8
+ label?: string;
9
+ maxlength?: string | number;
10
+ max?: string | number;
11
+ min?: string | number;
12
+ typeInput?: string;
13
+ showPassword?: boolean;
14
+ isNumber?: boolean;
15
+ inputHeight?: number;
16
+ isBorder?: boolean;
17
+ suffixText?: string;
18
+ clearable?: boolean;
19
+ showWordLimit?: boolean;
20
+ marginBottom?: OutlinedInputCssValue;
21
+ paddingTop?: OutlinedInputCssValue;
22
+ required?: boolean;
23
+ error?: boolean;
24
+ errorMessage?: string;
25
+ }
26
+ export interface OutlinedInputExpose {
27
+ focus: () => void;
28
+ blur: () => void;
29
+ clear: () => void;
30
+ select: () => void;
31
+ getInputRef: () => unknown | null;
32
+ }
@@ -0,0 +1,106 @@
1
+ import type { OutlinedInputCssValue, OutlinedInputProps, OutlinedInputValue } from './OutlinedInput.types';
2
+ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<import("vue").ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<OutlinedInputProps>, {
3
+ value: string;
4
+ disabled: boolean;
5
+ placeholder: string;
6
+ label: string;
7
+ typeInput: string;
8
+ showPassword: boolean;
9
+ isNumber: boolean;
10
+ inputHeight: number;
11
+ isBorder: boolean;
12
+ suffixText: string;
13
+ clearable: boolean;
14
+ showWordLimit: boolean;
15
+ marginBottom: number;
16
+ paddingTop: number;
17
+ required: boolean;
18
+ error: boolean;
19
+ errorMessage: string;
20
+ }>>, {
21
+ focus: () => void;
22
+ blur: () => void;
23
+ clear: () => void;
24
+ select: () => void;
25
+ getInputRef: () => unknown;
26
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
27
+ input: (value: OutlinedInputValue) => void;
28
+ "update:value": (value: OutlinedInputValue) => void;
29
+ warning: (value: string) => void;
30
+ focus: (value: FocusEvent) => void;
31
+ blur: (value: FocusEvent) => void;
32
+ change: (value: OutlinedInputValue) => void;
33
+ clear: () => void;
34
+ }, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<OutlinedInputProps>, {
35
+ value: string;
36
+ disabled: boolean;
37
+ placeholder: string;
38
+ label: string;
39
+ typeInput: string;
40
+ showPassword: boolean;
41
+ isNumber: boolean;
42
+ inputHeight: number;
43
+ isBorder: boolean;
44
+ suffixText: string;
45
+ clearable: boolean;
46
+ showWordLimit: boolean;
47
+ marginBottom: number;
48
+ paddingTop: number;
49
+ required: boolean;
50
+ error: boolean;
51
+ errorMessage: string;
52
+ }>>> & Readonly<{
53
+ onBlur?: ((value: FocusEvent) => any) | undefined;
54
+ onChange?: ((value: OutlinedInputValue) => any) | undefined;
55
+ onFocus?: ((value: FocusEvent) => any) | undefined;
56
+ onInput?: ((value: OutlinedInputValue) => any) | undefined;
57
+ onWarning?: ((value: string) => any) | undefined;
58
+ onClear?: (() => any) | undefined;
59
+ "onUpdate:value"?: ((value: OutlinedInputValue) => any) | undefined;
60
+ }>, {
61
+ error: boolean;
62
+ label: string;
63
+ disabled: boolean;
64
+ required: boolean;
65
+ value: OutlinedInputValue;
66
+ placeholder: string;
67
+ errorMessage: string;
68
+ typeInput: string;
69
+ showPassword: boolean;
70
+ isNumber: boolean;
71
+ inputHeight: number;
72
+ isBorder: boolean;
73
+ suffixText: string;
74
+ clearable: boolean;
75
+ showWordLimit: boolean;
76
+ marginBottom: OutlinedInputCssValue;
77
+ paddingTop: OutlinedInputCssValue;
78
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>, {
79
+ prefix?(_: {}): any;
80
+ prepend?(_: {}): any;
81
+ append?(_: {}): any;
82
+ suffix?(_: {}): any;
83
+ }>;
84
+ export default _default;
85
+ type __VLS_NonUndefinedable<T> = T extends undefined ? never : T;
86
+ type __VLS_TypePropsToRuntimeProps<T> = {
87
+ [K in keyof T]-?: {} extends Pick<T, K> ? {
88
+ type: import('vue').PropType<__VLS_NonUndefinedable<T[K]>>;
89
+ } : {
90
+ type: import('vue').PropType<T[K]>;
91
+ required: true;
92
+ };
93
+ };
94
+ type __VLS_WithDefaults<P, D> = {
95
+ [K in keyof Pick<P, keyof P>]: K extends keyof D ? __VLS_Prettify<P[K] & {
96
+ default: D[K];
97
+ }> : P[K];
98
+ };
99
+ type __VLS_Prettify<T> = {
100
+ [K in keyof T]: T[K];
101
+ } & {};
102
+ type __VLS_WithTemplateSlots<T, S> = T & {
103
+ new (): {
104
+ $slots: S;
105
+ };
106
+ };
@@ -155,3 +155,37 @@ const remark = ref('')
155
155
  - 新页面优先使用 `v-model:value`
156
156
  - 需要浮动标签输入框时优先复用 `OutlinedInput`
157
157
  - 数值输入优先使用 `isNumber + regex` 收敛基础校验,不要在页面层重复写相同逻辑
158
+
159
+ ## AI 使用指引
160
+
161
+ AI 在生成表单输入项时,如果页面需要浮动标签、统一高度、下边框风格或兼容旧项目 `v-model:value`,应优先使用 `OutlinedInput`。
162
+
163
+ 推荐优先从统一入口导入:
164
+
165
+ ```ts
166
+ import { OutlinedInput, type OutlinedInputExpose } from '@hbdlzy/ui'
167
+ ```
168
+
169
+ 如果当前只安装了核心包,也可以从 `@hbdlzy/ui-core` 导入。
170
+
171
+ AI 生成代码时按下面顺序判断:
172
+
173
+ 1. 普通文本输入使用 `v-model:value + placeholder`
174
+ 2. 需要浮动标签和占位文案不同,额外传 `label`
175
+ 3. 需要下边框风格,传 `:is-border="true"`
176
+ 4. 数值输入优先使用 `isNumber + regex + @warning`
177
+ 5. textarea 场景传 `type-input="textarea"`,并透传 `autosize`、`resize`、`rows`
178
+ 6. 需要手动聚焦、清空、选中文本时,使用 `ref<OutlinedInputExpose>`
179
+
180
+ AI 不应该做这些事:
181
+
182
+ - 不要重复手写浮动标签 DOM 和样式
183
+ - 不要在多个页面复制相同的数值正则校验逻辑
184
+ - 不要直接操作内部 `el-input` DOM,优先使用暴露方法
185
+ - 不要为了 `prefix`、`suffix`、`append`、`prepend` 重新封装输入框,优先使用插槽
186
+
187
+ 生成代码前建议同时读取:
188
+
189
+ - `packages/ui-core/components.manifest.json`
190
+ - `packages/ui-core/src/components/OutlinedInput/OutlinedInput.types.ts`
191
+ - 本 README 的 `Props / Events / Slots / Expose` 部分
@@ -0,0 +1,3 @@
1
+ import OutlinedInput from './OutlinedInput.vue';
2
+ export default OutlinedInput;
3
+ export type { OutlinedInputCssValue, OutlinedInputExpose, OutlinedInputProps, OutlinedInputValue } from './OutlinedInput.types';
@@ -0,0 +1,41 @@
1
+ export type OutlinedSelectCssValue = string | number;
2
+ export type OutlinedSelectOptionValue = string | number | boolean | Record<string, unknown> | null;
3
+ export type OutlinedSelectValue = OutlinedSelectOptionValue | OutlinedSelectOptionValue[];
4
+ export interface OutlinedSelectOption {
5
+ label?: string;
6
+ value?: OutlinedSelectOptionValue;
7
+ disabled?: boolean;
8
+ [key: string]: unknown;
9
+ }
10
+ export interface OutlinedSelectProps {
11
+ value?: OutlinedSelectValue;
12
+ options?: OutlinedSelectOption[];
13
+ placeholder?: string;
14
+ label?: string;
15
+ disabled?: boolean;
16
+ typeInput?: string;
17
+ showPassword?: boolean;
18
+ collapseTags?: boolean;
19
+ collapseTagsTooltip?: boolean;
20
+ filterable?: boolean;
21
+ clearable?: boolean;
22
+ multiple?: boolean;
23
+ inputHeight?: number;
24
+ isBorder?: boolean;
25
+ keyValue?: string;
26
+ labelValue?: string;
27
+ noCheck?: boolean;
28
+ maxCollapseTags?: number;
29
+ marginBottom?: OutlinedSelectCssValue;
30
+ paddingTop?: OutlinedSelectCssValue;
31
+ required?: boolean;
32
+ error?: boolean;
33
+ errorMessage?: string;
34
+ }
35
+ export interface OutlinedSelectExpose {
36
+ focus: () => void;
37
+ blur: () => void;
38
+ clear: () => void;
39
+ toggleMenu: () => void;
40
+ getSelectRef: () => unknown | null;
41
+ }
@@ -0,0 +1,125 @@
1
+ import type { OutlinedSelectCssValue, OutlinedSelectOption, OutlinedSelectProps, OutlinedSelectValue } from './OutlinedSelect.types';
2
+ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<import("vue").ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<OutlinedSelectProps>, {
3
+ value: undefined;
4
+ options: () => never[];
5
+ placeholder: string;
6
+ label: string;
7
+ disabled: boolean;
8
+ typeInput: string;
9
+ showPassword: boolean;
10
+ collapseTags: boolean;
11
+ collapseTagsTooltip: boolean;
12
+ filterable: boolean;
13
+ clearable: boolean;
14
+ multiple: boolean;
15
+ inputHeight: number;
16
+ isBorder: boolean;
17
+ keyValue: string;
18
+ labelValue: string;
19
+ noCheck: boolean;
20
+ maxCollapseTags: number;
21
+ marginBottom: number;
22
+ paddingTop: number;
23
+ required: boolean;
24
+ error: boolean;
25
+ errorMessage: string;
26
+ }>>, {
27
+ focus: () => void;
28
+ blur: () => void;
29
+ clear: () => void;
30
+ toggleMenu: () => void;
31
+ getSelectRef: () => unknown;
32
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
33
+ input: (value: OutlinedSelectValue) => void;
34
+ "update:value": (value: OutlinedSelectValue) => void;
35
+ change: (value: OutlinedSelectValue) => void;
36
+ focus: (value: FocusEvent) => void;
37
+ blur: (value: FocusEvent) => void;
38
+ "visible-change": (value: boolean) => void;
39
+ clear: () => void;
40
+ }, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<OutlinedSelectProps>, {
41
+ value: undefined;
42
+ options: () => never[];
43
+ placeholder: string;
44
+ label: string;
45
+ disabled: boolean;
46
+ typeInput: string;
47
+ showPassword: boolean;
48
+ collapseTags: boolean;
49
+ collapseTagsTooltip: boolean;
50
+ filterable: boolean;
51
+ clearable: boolean;
52
+ multiple: boolean;
53
+ inputHeight: number;
54
+ isBorder: boolean;
55
+ keyValue: string;
56
+ labelValue: string;
57
+ noCheck: boolean;
58
+ maxCollapseTags: number;
59
+ marginBottom: number;
60
+ paddingTop: number;
61
+ required: boolean;
62
+ error: boolean;
63
+ errorMessage: string;
64
+ }>>> & Readonly<{
65
+ onBlur?: ((value: FocusEvent) => any) | undefined;
66
+ onChange?: ((value: OutlinedSelectValue) => any) | undefined;
67
+ onFocus?: ((value: FocusEvent) => any) | undefined;
68
+ onInput?: ((value: OutlinedSelectValue) => any) | undefined;
69
+ onClear?: (() => any) | undefined;
70
+ "onUpdate:value"?: ((value: OutlinedSelectValue) => any) | undefined;
71
+ "onVisible-change"?: ((value: boolean) => any) | undefined;
72
+ }>, {
73
+ error: boolean;
74
+ label: string;
75
+ disabled: boolean;
76
+ required: boolean;
77
+ value: OutlinedSelectValue;
78
+ placeholder: string;
79
+ options: OutlinedSelectOption[];
80
+ errorMessage: string;
81
+ typeInput: string;
82
+ showPassword: boolean;
83
+ inputHeight: number;
84
+ isBorder: boolean;
85
+ clearable: boolean;
86
+ marginBottom: OutlinedSelectCssValue;
87
+ paddingTop: OutlinedSelectCssValue;
88
+ multiple: boolean;
89
+ collapseTags: boolean;
90
+ collapseTagsTooltip: boolean;
91
+ filterable: boolean;
92
+ keyValue: string;
93
+ labelValue: string;
94
+ noCheck: boolean;
95
+ maxCollapseTags: number;
96
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>, {
97
+ default?(_: {}): any;
98
+ empty?(_: {}): any;
99
+ header?(_: {}): any;
100
+ footer?(_: {}): any;
101
+ tag?(_: any): any;
102
+ }>;
103
+ export default _default;
104
+ type __VLS_NonUndefinedable<T> = T extends undefined ? never : T;
105
+ type __VLS_TypePropsToRuntimeProps<T> = {
106
+ [K in keyof T]-?: {} extends Pick<T, K> ? {
107
+ type: import('vue').PropType<__VLS_NonUndefinedable<T[K]>>;
108
+ } : {
109
+ type: import('vue').PropType<T[K]>;
110
+ required: true;
111
+ };
112
+ };
113
+ type __VLS_WithDefaults<P, D> = {
114
+ [K in keyof Pick<P, keyof P>]: K extends keyof D ? __VLS_Prettify<P[K] & {
115
+ default: D[K];
116
+ }> : P[K];
117
+ };
118
+ type __VLS_Prettify<T> = {
119
+ [K in keyof T]: T[K];
120
+ } & {};
121
+ type __VLS_WithTemplateSlots<T, S> = T & {
122
+ new (): {
123
+ $slots: S;
124
+ };
125
+ };