@veltra/mobile 1.0.0 → 1.1.0

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 (245) hide show
  1. package/package.json +32 -6
  2. package/src/components/_internal/bottom-sheet/bottom-sheet.vue +81 -0
  3. package/src/components/_internal/bottom-sheet/index.ts +1 -0
  4. package/src/components/_internal/bottom-sheet/style.scss +116 -0
  5. package/src/components/_internal/bottom-sheet/style.ts +1 -0
  6. package/src/components/_internal/overlay-container.ts +34 -0
  7. package/src/components/avatar/avatar.vue +44 -0
  8. package/src/components/avatar/index.ts +1 -0
  9. package/src/components/avatar/style.scss +53 -0
  10. package/src/components/avatar/style.ts +1 -0
  11. package/src/components/badge/badge.vue +59 -0
  12. package/src/components/badge/index.ts +1 -0
  13. package/src/components/badge/style.scss +62 -0
  14. package/src/components/badge/style.ts +1 -0
  15. package/src/components/button/button.vue +76 -0
  16. package/src/components/button/index.ts +1 -0
  17. package/src/components/button/style.scss +207 -0
  18. package/src/components/button/style.ts +1 -0
  19. package/src/components/card/card.vue +24 -0
  20. package/src/components/card/index.ts +1 -0
  21. package/src/components/card/style.scss +35 -0
  22. package/src/components/card/style.ts +1 -0
  23. package/src/components/cascade/cascade.vue +595 -0
  24. package/src/components/cascade/index.ts +1 -0
  25. package/src/components/cascade/node.ts +29 -0
  26. package/src/components/cascade/style.scss +424 -0
  27. package/src/components/cascade/style.ts +2 -0
  28. package/src/components/check-tag/check-tag.vue +35 -0
  29. package/src/components/check-tag/index.ts +1 -0
  30. package/src/components/check-tag/style.scss +46 -0
  31. package/src/components/check-tag/style.ts +1 -0
  32. package/src/components/checkbox/checkbox.vue +67 -0
  33. package/src/components/checkbox/index.ts +1 -0
  34. package/src/components/checkbox/style.scss +132 -0
  35. package/src/components/checkbox/style.ts +2 -0
  36. package/src/components/checkbox-group/checkbox-group.vue +94 -0
  37. package/src/components/checkbox-group/index.ts +1 -0
  38. package/src/components/checkbox-group/style.scss +57 -0
  39. package/src/components/checkbox-group/style.ts +2 -0
  40. package/src/components/collapse/collapse-item.vue +134 -0
  41. package/src/components/collapse/collapse.vue +117 -0
  42. package/src/components/collapse/di.ts +18 -0
  43. package/src/components/collapse/index.ts +3 -0
  44. package/src/components/collapse/style.scss +157 -0
  45. package/src/components/collapse/style.ts +1 -0
  46. package/src/components/date-picker/date-picker.vue +326 -0
  47. package/src/components/date-picker/index.ts +1 -0
  48. package/src/components/date-picker/style.scss +236 -0
  49. package/src/components/date-picker/style.ts +2 -0
  50. package/src/components/descriptions/descriptions-item.vue +12 -0
  51. package/src/components/descriptions/descriptions.vue +50 -0
  52. package/src/components/descriptions/index.ts +2 -0
  53. package/src/components/descriptions/style.scss +120 -0
  54. package/src/components/descriptions/style.ts +1 -0
  55. package/src/components/dialog/dialog.vue +143 -0
  56. package/src/components/dialog/index.ts +1 -0
  57. package/src/components/dialog/style.scss +163 -0
  58. package/src/components/dialog/style.ts +4 -0
  59. package/src/components/divider/divider.vue +29 -0
  60. package/src/components/divider/index.ts +1 -0
  61. package/src/components/divider/style.scss +91 -0
  62. package/src/components/divider/style.ts +1 -0
  63. package/src/components/drawer/drawer.vue +168 -0
  64. package/src/components/drawer/index.ts +1 -0
  65. package/src/components/drawer/style.scss +240 -0
  66. package/src/components/drawer/style.ts +2 -0
  67. package/src/components/empty/empty.vue +22 -0
  68. package/src/components/empty/index.ts +1 -0
  69. package/src/components/empty/style.scss +36 -0
  70. package/src/components/empty/style.ts +1 -0
  71. package/src/components/form/form.vue +119 -0
  72. package/src/components/form/index.ts +1 -0
  73. package/src/components/form/is-field-modified.ts +16 -0
  74. package/src/components/form/style.scss +58 -0
  75. package/src/components/form/style.ts +2 -0
  76. package/src/components/form/use-form-fields.ts +115 -0
  77. package/src/components/form/use-node-interceptor.ts +101 -0
  78. package/src/components/form-item/form-item.vue +171 -0
  79. package/src/components/form-item/helper.ts +9 -0
  80. package/src/components/form-item/index.ts +1 -0
  81. package/src/components/form-item/style.scss +121 -0
  82. package/src/components/form-item/style.ts +1 -0
  83. package/src/components/form-item/validate.ts +131 -0
  84. package/src/components/icon/icon.vue +23 -0
  85. package/src/components/icon/index.ts +1 -0
  86. package/src/components/icon/style.scss +37 -0
  87. package/src/components/icon/style.ts +1 -0
  88. package/src/components/input/index.ts +1 -0
  89. package/src/components/input/input.vue +187 -0
  90. package/src/components/input/style.scss +121 -0
  91. package/src/components/input/style.ts +1 -0
  92. package/src/components/list/index.ts +3 -0
  93. package/src/components/list/list-item.vue +20 -0
  94. package/src/components/list/list.vue +20 -0
  95. package/src/components/list/style.scss +50 -0
  96. package/src/components/list/style.ts +1 -0
  97. package/src/components/loading/directive.ts +34 -0
  98. package/src/components/loading/index.ts +3 -0
  99. package/src/components/loading/loading.vue +25 -0
  100. package/src/components/loading/style.scss +179 -0
  101. package/src/components/loading/style.ts +2 -0
  102. package/src/components/message/helper.ts +28 -0
  103. package/src/components/message/index.ts +3 -0
  104. package/src/components/message/message-box.vue +31 -0
  105. package/src/components/message/message.ts +122 -0
  106. package/src/components/message/message.vue +54 -0
  107. package/src/components/message/style.scss +130 -0
  108. package/src/components/message/style.ts +1 -0
  109. package/src/components/message-confirm/index.ts +3 -0
  110. package/src/components/message-confirm/message-confirm-box.vue +36 -0
  111. package/src/components/message-confirm/message-confirm.ts +139 -0
  112. package/src/components/message-confirm/message-confirm.vue +53 -0
  113. package/src/components/message-confirm/style.scss +138 -0
  114. package/src/components/message-confirm/style.ts +1 -0
  115. package/src/components/multi-select/index.ts +1 -0
  116. package/src/components/multi-select/multi-select.vue +410 -0
  117. package/src/components/multi-select/style.scss +376 -0
  118. package/src/components/multi-select/style.ts +2 -0
  119. package/src/components/number-input/index.ts +1 -0
  120. package/src/components/number-input/number-input.vue +407 -0
  121. package/src/components/number-input/style.scss +118 -0
  122. package/src/components/number-input/style.ts +2 -0
  123. package/src/components/password-input/index.ts +1 -0
  124. package/src/components/password-input/password-input.vue +134 -0
  125. package/src/components/password-input/style.scss +40 -0
  126. package/src/components/password-input/style.ts +2 -0
  127. package/src/components/progress/index.ts +1 -0
  128. package/src/components/progress/progress.vue +90 -0
  129. package/src/components/progress/style.scss +73 -0
  130. package/src/components/progress/style.ts +1 -0
  131. package/src/components/radio/index.ts +1 -0
  132. package/src/components/radio/radio.vue +57 -0
  133. package/src/components/radio/style.scss +113 -0
  134. package/src/components/radio/style.ts +1 -0
  135. package/src/components/radio-group/index.ts +1 -0
  136. package/src/components/radio-group/radio-group.vue +60 -0
  137. package/src/components/radio-group/style.scss +29 -0
  138. package/src/components/radio-group/style.ts +2 -0
  139. package/src/components/segment/index.ts +1 -0
  140. package/src/components/segment/segment.vue +121 -0
  141. package/src/components/segment/style.scss +118 -0
  142. package/src/components/segment/style.ts +1 -0
  143. package/src/components/select/index.ts +1 -0
  144. package/src/components/select/select.vue +278 -0
  145. package/src/components/select/style.scss +237 -0
  146. package/src/components/select/style.ts +2 -0
  147. package/src/components/select/use-options.ts +195 -0
  148. package/src/components/skeleton/index.ts +1 -0
  149. package/src/components/skeleton/skeleton.vue +37 -0
  150. package/src/components/skeleton/style.scss +95 -0
  151. package/src/components/skeleton/style.ts +1 -0
  152. package/src/components/space/index.ts +1 -0
  153. package/src/components/space/space.vue +45 -0
  154. package/src/components/space/style.scss +41 -0
  155. package/src/components/space/style.ts +1 -0
  156. package/src/components/steps/index.ts +1 -0
  157. package/src/components/steps/steps.vue +114 -0
  158. package/src/components/steps/style.scss +231 -0
  159. package/src/components/steps/style.ts +1 -0
  160. package/src/components/switch/index.ts +1 -0
  161. package/src/components/switch/style.scss +137 -0
  162. package/src/components/switch/style.ts +1 -0
  163. package/src/components/switch/switch.vue +63 -0
  164. package/src/components/tabs/index.ts +1 -0
  165. package/src/components/tabs/style.scss +285 -0
  166. package/src/components/tabs/style.ts +1 -0
  167. package/src/components/tabs/tabs.vue +127 -0
  168. package/src/components/tag/index.ts +1 -0
  169. package/src/components/tag/style.scss +114 -0
  170. package/src/components/tag/style.ts +1 -0
  171. package/src/components/tag/tag.vue +49 -0
  172. package/src/components/text/index.ts +1 -0
  173. package/src/components/text/style.scss +63 -0
  174. package/src/components/text/style.ts +1 -0
  175. package/src/components/text/text.vue +63 -0
  176. package/src/components/textarea/index.ts +1 -0
  177. package/src/components/textarea/style.scss +124 -0
  178. package/src/components/textarea/style.ts +1 -0
  179. package/src/components/textarea/textarea.vue +121 -0
  180. package/src/components/textarea/utils.ts +11 -0
  181. package/src/components/time-picker/index.ts +1 -0
  182. package/src/components/time-picker/style.scss +216 -0
  183. package/src/components/time-picker/style.ts +2 -0
  184. package/src/components/time-picker/time-picker.vue +263 -0
  185. package/src/components/timeline/index.ts +2 -0
  186. package/src/components/timeline/style.scss +107 -0
  187. package/src/components/timeline/style.ts +1 -0
  188. package/src/components/timeline/timeline-item.vue +43 -0
  189. package/src/components/timeline/timeline.vue +16 -0
  190. package/src/components/uploader/index.ts +1 -0
  191. package/src/components/uploader/style.scss +220 -0
  192. package/src/components/uploader/style.ts +1 -0
  193. package/src/components/uploader/uploader.vue +306 -0
  194. package/src/env.d.ts +7 -0
  195. package/src/index.ts +99 -1
  196. package/src/shared/bem.ts +12 -0
  197. package/src/shared/use-scroll-lock.ts +111 -0
  198. package/src/shared/use-touch-gesture.ts +150 -0
  199. package/src/styles/_tokens.scss +129 -0
  200. package/src/types/avatar.ts +31 -0
  201. package/src/types/badge.ts +28 -0
  202. package/src/types/button.ts +48 -0
  203. package/src/types/card.ts +16 -0
  204. package/src/types/cascade.ts +87 -0
  205. package/src/types/check-tag.ts +24 -0
  206. package/src/types/checkbox-group.ts +20 -0
  207. package/src/types/checkbox.ts +15 -0
  208. package/src/types/collapse.ts +79 -0
  209. package/src/types/date-picker.ts +39 -0
  210. package/src/types/descriptions.ts +22 -0
  211. package/src/types/dialog.ts +54 -0
  212. package/src/types/divider.ts +14 -0
  213. package/src/types/drawer.ts +38 -0
  214. package/src/types/empty.ts +19 -0
  215. package/src/types/form-item.ts +22 -0
  216. package/src/types/form.ts +54 -0
  217. package/src/types/icon.ts +10 -0
  218. package/src/types/input.ts +51 -0
  219. package/src/types/list.ts +13 -0
  220. package/src/types/loading.ts +20 -0
  221. package/src/types/message-confirm.ts +72 -0
  222. package/src/types/message.ts +71 -0
  223. package/src/types/multi-select.ts +38 -0
  224. package/src/types/number-input.ts +32 -0
  225. package/src/types/password-input.ts +19 -0
  226. package/src/types/progress.ts +22 -0
  227. package/src/types/radio-group.ts +33 -0
  228. package/src/types/radio.ts +18 -0
  229. package/src/types/segment.ts +42 -0
  230. package/src/types/select.ts +63 -0
  231. package/src/types/skeleton.ts +29 -0
  232. package/src/types/space.ts +22 -0
  233. package/src/types/steps.ts +67 -0
  234. package/src/types/switch.ts +17 -0
  235. package/src/types/tabs.ts +63 -0
  236. package/src/types/tag.ts +19 -0
  237. package/src/types/text.ts +28 -0
  238. package/src/types/textarea.ts +76 -0
  239. package/src/types/time-picker.ts +40 -0
  240. package/src/types/timeline.ts +15 -0
  241. package/src/types/uploader.ts +50 -0
  242. package/.turbo/turbo-build.log +0 -2
  243. package/.turbo/turbo-check-types.log +0 -1
  244. package/tsconfig.json +0 -12
  245. package/tsconfig.tsbuildinfo +0 -1
@@ -0,0 +1,19 @@
1
+ import type { DeconstructValue } from '@veltra/utils'
2
+
3
+ import type { InputProps } from './input'
4
+
5
+ /** 密码输入组件属性(API 与 @veltra/desktop UPasswordInput 对齐;明文切换按钮 44px 触控热区为移动端形态) */
6
+ export interface PasswordInputProps extends InputProps {
7
+ modelValue?: string
8
+ }
9
+
10
+ /** 密码输入组件定义的事件 */
11
+ export interface PasswordInputEmits {
12
+ (e: 'update:modelValue', value: string): void
13
+ }
14
+
15
+ /** 密码输入暴露的属性和方法(组件内部使用) */
16
+ export interface _PasswordInputExposed {}
17
+
18
+ /** 密码输入暴露的属性和方法(组件外部使用, 引用的值会被自动解构) */
19
+ export type PasswordInputExposed = DeconstructValue<_PasswordInputExposed>
@@ -0,0 +1,22 @@
1
+ import type { ColorType, DeconstructValue } from '@veltra/utils'
2
+
3
+ /** progress组件属性 */
4
+ export interface ProgressProps {
5
+ /** 类型 */
6
+ type: ColorType | ((percentage: number) => ColorType)
7
+ /** 圆形进度条尺寸 */
8
+ size?: number | string
9
+ /** 进度百分比 */
10
+ percentage?: number
11
+ /** 是否圆形进度条 */
12
+ circle?: boolean
13
+ }
14
+
15
+ /** progress组件定义的事件 */
16
+ export interface ProgressEmits {}
17
+
18
+ /** progress组件暴露的属性和方法(组件内部使用) */
19
+ export interface _ProgressExposed {}
20
+
21
+ /** progress组件暴露的属性和方法(组件外部使用, 引用的值会被自动解构) */
22
+ export type ProgressExposed = DeconstructValue<_ProgressExposed>
@@ -0,0 +1,33 @@
1
+ import type { FormComponentProps } from '@veltra/utils'
2
+
3
+ /** 单选框组组件属性(移动端列表行式:选项纵向排列占满整行,选中标记在行右侧) */
4
+ export interface RadioGroupProps extends FormComponentProps {
5
+ /** 值 */
6
+ modelValue?: any
7
+ /** 单选框项 */
8
+ items: Record<string, any>[]
9
+ /**
10
+ * 选项值key
11
+ * @default 'value'
12
+ */
13
+ valueKey?: string
14
+ /**
15
+ * 标签文本key
16
+ * @default 'label'
17
+ */
18
+ labelKey?: string
19
+ /** 禁用 */
20
+ disabled?: boolean
21
+ /** 禁用的选项 */
22
+ disabledItem?: (item: Record<string, any>) => boolean
23
+ /** 选项行间细分隔线。默认 false */
24
+ divider?: boolean
25
+ }
26
+
27
+ /** 单选框组组件定义的事件 */
28
+ export interface RadioGroupEmits {
29
+ /** 值更新 */
30
+ (e: 'update:modelValue', modelValue: any): void
31
+ /** 选项更新事件 */
32
+ (e: 'change', item: Record<string, any>): void
33
+ }
@@ -0,0 +1,18 @@
1
+ import type { FormComponentProps } from '@veltra/utils'
2
+
3
+ /** 单选框组件属性(与 @veltra/desktop URadio 同名;呈移动端列表行式选项形态,选中标记在行右侧) */
4
+ export interface RadioProps extends FormComponentProps {
5
+ /** 单选框值 */
6
+ value?: any
7
+ /** 文本 */
8
+ label?: string
9
+ /**全部禁用 */
10
+ disabled?: boolean
11
+ /** 绑定值 */
12
+ modelValue?: any
13
+ }
14
+
15
+ /** 单选框组件定义的事件 */
16
+ export interface RadioEmits {
17
+ (e: 'update:modelValue', value: any): void
18
+ }
@@ -0,0 +1,42 @@
1
+ import type { DeconstructValue, FormComponentProps } from '@veltra/utils'
2
+
3
+ /** 分段单选选项 */
4
+ export type SegmentItem = Record<string, any>
5
+
6
+ /** 分段单选组件属性 */
7
+ export interface SegmentProps extends FormComponentProps {
8
+ /** 绑定值 */
9
+ modelValue?: any
10
+ /** 选项列表 */
11
+ items: SegmentItem[]
12
+ /**
13
+ * 选项值 key
14
+ * @default 'value'
15
+ */
16
+ valueKey?: string
17
+ /**
18
+ * 选项标签 key
19
+ * @default 'label'
20
+ */
21
+ labelKey?: string
22
+ /** 是否禁用整组 */
23
+ disabled?: boolean
24
+ /** 禁用的选项判断函数 */
25
+ disabledItem?: (item: SegmentItem) => boolean
26
+ /** 是否撑满容器宽度 */
27
+ block?: boolean
28
+ }
29
+
30
+ /** 分段单选组件事件 */
31
+ export interface SegmentEmits {
32
+ /** 绑定值更新 */
33
+ (e: 'update:modelValue', modelValue: any): void
34
+ /** 选中项切换事件 */
35
+ (e: 'change', item: SegmentItem): void
36
+ }
37
+
38
+ /** 分段单选组件暴露的属性和方法(组件内部使用) */
39
+ export interface _SegmentExposed {}
40
+
41
+ /** 分段单选组件暴露的属性和方法(组件外部使用, 引用的值会被自动解构) */
42
+ export type SegmentExposed = DeconstructValue<_SegmentExposed>
@@ -0,0 +1,63 @@
1
+ import type { FormComponentProps } from '@veltra/utils'
2
+ import type { CSSProperties } from 'vue'
3
+
4
+ /** 选择器组件属性(移动端形态:面板走 BottomSheet) */
5
+ export interface SelectProps extends FormComponentProps {
6
+ /** 绑定值 */
7
+ modelValue?: any
8
+ /**
9
+ * 列表选项
10
+ * @description 如果传入一个函数,那么filterable会被强制启用
11
+ */
12
+ options?:
13
+ | Record<string, any>[]
14
+ | ((qs: string) => Promise<Record<string, any>[]> | Record<string, any>[])
15
+ /** 值字段 */
16
+ valueKey?: string
17
+ /** 标签字段 */
18
+ labelKey?: string
19
+ /**
20
+ * 兜底展示文案
21
+ * @description modelValue 未命中选项时展示 text(如回显数据已不在选项中),命中时展示选项 label
22
+ */
23
+ text?: string
24
+ /** 是否可清除 */
25
+ clearable?: boolean
26
+ /** 占位符 */
27
+ placeholder?: string
28
+ /** 是否启用搜索功能 */
29
+ filterable?: boolean
30
+ /** 底部面板内容容器样式 */
31
+ contentStyle?: CSSProperties | string
32
+ /** 底部面板内容容器类名 */
33
+ contentClass?: unknown
34
+ /** 是否允许创建新的选项 */
35
+ creatable?: boolean
36
+
37
+ /**
38
+ * 配置网格布局
39
+ *
40
+ * - 开启网格布局将会导致虚拟滚动失效,因此网格布局不适合大量数据
41
+ * @example
42
+ * ```ts
43
+ * const grid = true
44
+ * // 或者
45
+ * const grid = {
46
+ * cols: 12,
47
+ * gap: 10
48
+ * }
49
+ * ```
50
+ */
51
+ grid?: { cols: number; gap?: number }
52
+ }
53
+
54
+ export interface SelectEmits {
55
+ /**
56
+ * 选中项文案变化(用于同步父级冗余字段)
57
+ * @description 命中选项时发出 label,清空时发出 undefined;未命中选项时,
58
+ * 传了 text 兜底则不发出(父级文案已是事实来源),未传 text 时发出 undefined;readonly 下不发出
59
+ */
60
+ (e: 'update:text', text?: string): void
61
+ (e: 'update:modelValue', modelValue?: any): void
62
+ (e: 'change', option?: Record<string, any>): void
63
+ }
@@ -0,0 +1,29 @@
1
+ /** 骨架屏组件属性 */
2
+ export interface SkeletonProps {
3
+ /** 是否处于加载态;false 时渲染默认插槽的实际内容,默认 true */
4
+ loading?: boolean
5
+
6
+ /** 是否显示头像占位块,默认 false */
7
+ avatar?: boolean
8
+
9
+ /** 是否显示标题占位块,默认 true */
10
+ title?: boolean
11
+
12
+ /** 是否显示段落占位块,默认 true */
13
+ paragraph?: boolean
14
+
15
+ /** 段落占位块行数,默认 3 */
16
+ rows?: number
17
+
18
+ /** 是否显示按钮形态占位块,默认 false */
19
+ button?: boolean
20
+
21
+ /** 是否使用胶囊圆角,作用于标题 / 段落 / 按钮占位块,默认 false */
22
+ round?: boolean
23
+
24
+ /** 是否开启呼吸动画,默认 false */
25
+ animated?: boolean
26
+ }
27
+
28
+ /** 骨架屏组件定义的事件 */
29
+ export interface SkeletonEmits {}
@@ -0,0 +1,22 @@
1
+ import type { ComponentSize } from '@veltra/utils'
2
+
3
+ /** 间距容器组件属性 */
4
+ export interface SpaceProps {
5
+ /**
6
+ * 间距:档位走 `--um-*` 间距刻度 token(small 8px / default 12px / large 16px);
7
+ * 数字为固定间距(px);二元组为 [水平间距, 垂直间距](px)。默认 'default'
8
+ */
9
+ size?: ComponentSize | number | [number, number]
10
+
11
+ /** 排列方向,默认 'horizontal' */
12
+ direction?: 'horizontal' | 'vertical'
13
+
14
+ /** 交叉轴对齐方式,默认 'center' */
15
+ align?: 'start' | 'center' | 'end' | 'baseline'
16
+
17
+ /** 是否自动换行,仅水平方向生效,默认 false */
18
+ wrap?: boolean
19
+ }
20
+
21
+ /** 间距容器组件定义的事件 */
22
+ export interface SpaceEmits {}
@@ -0,0 +1,67 @@
1
+ import type { ColorType, ComponentSize, DeconstructValue } from '@veltra/utils'
2
+
3
+ /** 步骤组件组件属性 */
4
+ export interface StepsProps {
5
+ /**
6
+ * 当前步骤项,默认为步骤的索引
7
+ */
8
+ current?: string | number
9
+ /**
10
+ * 尺寸
11
+ */
12
+ size?: ComponentSize
13
+ /**
14
+ * 步骤项
15
+ */
16
+ items: Record<string, any>[]
17
+ /** 步骤项标签键 */
18
+ labelKey?: string
19
+ /**
20
+ * 当前步骤项键
21
+ * @description
22
+ * 如果指定,则current的值会作为items中的键值来获取当前步骤项
23
+ */
24
+ currentKey?: string
25
+ /**
26
+ * 方向
27
+ * @default 'horizontal'
28
+ */
29
+ direction?: 'horizontal' | 'vertical'
30
+
31
+ /** 居中对齐 */
32
+ alignCenter?: boolean
33
+
34
+ /**
35
+ * 当前步骤项颜色类型
36
+ */
37
+ currentStepType?: ColorType
38
+ /**
39
+ * 已完成项步骤颜色类型
40
+ * @default 'success'
41
+ */
42
+ finishedStepType?: ColorType
43
+ }
44
+
45
+ /** 步骤项插槽作用域 */
46
+ export interface StepsSlotScope {
47
+ item: Record<string, any>
48
+ index: number
49
+ }
50
+
51
+ /** 步骤组件组件定义的事件 */
52
+ export interface StepsEmits {
53
+ /**
54
+ * 当前步骤项变更
55
+ */
56
+ (e: 'update:current', value?: string | number): void
57
+ /**
58
+ * 步骤项点击事件
59
+ */
60
+ (e: 'item-click', item: Record<string, any>, index: number): void
61
+ }
62
+
63
+ /** 步骤组件组件暴露的属性和方法(组件内部使用) */
64
+ export interface _StepsExposed {}
65
+
66
+ /** 步骤组件组件暴露的属性和方法(组件外部使用, 引用的值会被自动解构) */
67
+ export type StepsExposed = DeconstructValue<_StepsExposed>
@@ -0,0 +1,17 @@
1
+ import type { FormComponentProps } from '@veltra/utils'
2
+
3
+ /** 开关组件属性(与 @veltra/desktop USwitch 同名;轨道/手柄尺寸走 `--um-*` 移动档) */
4
+ export interface SwitchProps extends FormComponentProps {
5
+ /** 开关状态 */
6
+ modelValue?: boolean
7
+ /** 打开时显示的文字 */
8
+ activeText?: string
9
+ /** 关闭时显示的文字 */
10
+ inactiveText?: string
11
+ }
12
+
13
+ /** 开关组件定义的事件 */
14
+ export interface SwitchEmits {
15
+ (e: 'update:modelValue', value: boolean): void
16
+ (e: 'change', value: boolean): void
17
+ }
@@ -0,0 +1,63 @@
1
+ import type { ComponentProps } from '@veltra/utils'
2
+
3
+ export type TabItem = {
4
+ /**
5
+ * 标题名称
6
+ * @description 如果不传则以 key 为名称
7
+ */
8
+ name?: string
9
+ /** 标签页唯一标识 */
10
+ key: string
11
+ /** 是否禁用 */
12
+ disabled?: boolean
13
+ /**
14
+ * 单个标签是否可关闭
15
+ * @description 未显式设置时,沿用组件级 `closable` 属性
16
+ */
17
+ closable?: boolean
18
+ }
19
+
20
+ /** 标签页组件属性 */
21
+ export interface TabsProps extends ComponentProps {
22
+ /** 当前激活的标签 key */
23
+ modelValue?: string
24
+ /** 标签项 */
25
+ items: TabItem[]
26
+ /**
27
+ * 是否可关闭
28
+ * @description 作为所有 TabItem 未显式 `closable` 时的默认值;禁用项不显示关闭按钮
29
+ * @default false
30
+ */
31
+ closable?: boolean
32
+ /**
33
+ * 是否填充父容器宽度(仅在 position=top/bottom 时生效)
34
+ * @description 开启时 header 容器占满父容器宽度,背景完整铺开;tab-item 自身宽度保持不变
35
+ * @default false
36
+ */
37
+ block?: boolean
38
+ /**
39
+ * 是否开启圆角胶囊风格
40
+ * @default false
41
+ */
42
+ rounded?: boolean
43
+ /** 显示位置 */
44
+ position?: 'left' | 'right' | 'top' | 'bottom'
45
+ /**
46
+ * 是否保活
47
+ * @default false
48
+ */
49
+ keepAlive?: boolean
50
+ }
51
+
52
+ /** 标签页组件定义的事件 */
53
+ export interface TabsEmits {
54
+ (e: 'update:modelValue', value: string): void
55
+ (e: 'click', item: TabItem, index: number): void
56
+ (e: 'close', item: TabItem, index: number): void
57
+ }
58
+
59
+ /** 标签页组件暴露的属性和方法(组件内部使用) */
60
+ export interface _TabsExposed {}
61
+
62
+ /** 标签页组件暴露的属性和方法(组件外部使用,引用的值会被自动解构) */
63
+ export interface TabsExposed {}
@@ -0,0 +1,19 @@
1
+ import type { ColorType, ComponentSize } from '@veltra/utils'
2
+
3
+ /** 标签组件属性 */
4
+ export interface TagProps {
5
+ type?: ColorType
6
+ /** 是否可移除 */
7
+ closable?: boolean
8
+ /** 尺寸大小 */
9
+ size?: ComponentSize
10
+ /** 是否为圆角 */
11
+ round?: boolean
12
+ /** 深色 */
13
+ dark?: boolean
14
+ }
15
+
16
+ export interface TagEmits {
17
+ (e: 'close'): void
18
+ }
19
+ export interface TagExposed {}
@@ -0,0 +1,28 @@
1
+ /** 文本组件属性 */
2
+ export interface TextProps {
3
+ /** 使用预设文本类型, 默认content正文 */
4
+ as?: 'main-title' | 'title' | 'sub-title' | 'content' | 'additional'
5
+ /** 文本大小, 与as同时指定时会覆盖as */
6
+ fontSize?: string | number
7
+ /** 是否删除 */
8
+ deleted?: boolean
9
+ /** 下划线 */
10
+ underline?: boolean
11
+ /** 粗体, 与as同时指定时会覆盖as中的字体粗细 */
12
+ bold?: boolean
13
+ /** 斜体 */
14
+ italic?: boolean
15
+ /** 高亮 */
16
+ highlight?: string | string[]
17
+ }
18
+
19
+ /** 文本组件定义的事件 */
20
+ export interface TextEmits {
21
+ (e: 'update:modelValue', value: string): void
22
+ }
23
+
24
+ /** 文本组件暴露的属性和方法(组件内部使用) */
25
+ export interface _TextExposed {}
26
+
27
+ /** 文本组件暴露的属性和方法(组件外部使用) */
28
+ export type TextExposed = {}
@@ -0,0 +1,76 @@
1
+ import type { DeconstructValue, FormComponentProps } from '@veltra/utils'
2
+
3
+ /** 文本域组件属性(API 与 @veltra/desktop UTextarea 对齐;字号 16px、行高与内边距走移动端 token) */
4
+ export interface TextareaProps extends FormComponentProps {
5
+ /**
6
+ * 文本域的值
7
+ */
8
+ modelValue?: string
9
+ /**
10
+ * 文本域的高度
11
+ */
12
+ height?: string
13
+ /**
14
+ * 文本域的占位符
15
+ */
16
+ placeholder?: string
17
+ /**
18
+ * 文本域是否禁用
19
+ */
20
+ disabled?: boolean
21
+ /**
22
+ * 文本域是否只读
23
+ */
24
+ readonly?: boolean
25
+
26
+ /**
27
+ * 是否能被缩放
28
+ */
29
+ resize?: boolean
30
+ /**
31
+ * 文本域的行数
32
+ */
33
+ rows?: number
34
+ /**
35
+ * 文本域的列数
36
+ */
37
+ cols?: number
38
+ /**
39
+ * 文本域的最大字数
40
+ */
41
+ maxlength?: number
42
+ /**
43
+ * 是否显示字符数统计(当前字数/最大字数,展示在文本域右下角)
44
+ */
45
+ showCount?: boolean
46
+ /**
47
+ * 清空
48
+ */
49
+ clearable?: boolean
50
+
51
+ /** 原生只读 */
52
+ nativeReadonly?: boolean
53
+
54
+ /** 是否自适应大小 */
55
+ autosize?: boolean
56
+ }
57
+
58
+ /** 文本域组件定义的事件 */
59
+ export interface TextareaEmits {
60
+ /** modelValue值改变时触发 */
61
+ (e: 'update:modelValue', value: string): void
62
+ /** 当 modelValue 改变时,并且文本框失去焦点或用户按Enter时触发 */
63
+ (e: 'change', value: string): void
64
+ /** 文本框获取焦点时触发 */
65
+ (e: 'focus'): void
66
+ /** 文本框失去焦点时触发 */
67
+ (e: 'blur'): void
68
+ /** 清空按钮时触发 */
69
+ (e: 'clear'): void
70
+ }
71
+
72
+ /** 文本域暴露的属性和方法(组件内部使用) */
73
+ export interface _TextareaExposed {}
74
+
75
+ /** 文本域暴露的属性和方法(组件外部使用, 引用的值会被自动解构) */
76
+ export type TextareaExposed = DeconstructValue<_TextareaExposed>
@@ -0,0 +1,40 @@
1
+ import type { DeconstructValue, FormComponentProps } from '@veltra/utils'
2
+
3
+ /** 绑定值类型 */
4
+ export type TimePickerDataType = 'date' | 'timestamp' | 'string'
5
+
6
+ /** time-picker组件属性(与 @veltra/desktop UTimePicker 对齐) */
7
+ export interface TimePickerProps extends FormComponentProps {
8
+ modelValue?: string | number | Date
9
+ /** 占位 */
10
+ placeholder?: string
11
+ /** 时间格式化 */
12
+ format?: string
13
+ /** 时间值格式化, 当没有指定时默认使用format属性,仅当值和显示的内容不一致时才需要使用到该属性 */
14
+ valueFormat?: string
15
+ /**
16
+ * 绑定值的类型,默认为字符串。
17
+ * 当 dataType 没有指定为字符串时,valueFormat 属性不生效
18
+ */
19
+ dataType?: TimePickerDataType
20
+ /** 禁用的小时 */
21
+ disabledHours?: () => number[]
22
+ /** 禁用的分钟 */
23
+ disabledMinutes?: (hour: number) => number[]
24
+ /** 禁用的秒 */
25
+ disabledSeconds?: (hour: number, minute: number) => number[]
26
+ /** 是否显示清除按钮 */
27
+ clearable?: boolean
28
+ }
29
+
30
+ /** time-picker组件定义的事件 */
31
+ export interface TimePickerEmits {
32
+ (e: 'update:modelValue', value?: string | number | Date): void
33
+ (e: 'change', time?: Date): void
34
+ }
35
+
36
+ /** time-picker组件暴露的属性和方法(组件内部使用) */
37
+ export interface _TimePickerExposed {}
38
+
39
+ /** time-picker组件暴露的属性和方法(组件外部使用, 引用的值会被自动解构) */
40
+ export type TimePickerExposed = DeconstructValue<_TimePickerExposed>
@@ -0,0 +1,15 @@
1
+ /** 时间线节点圆点颜色语义 */
2
+ export type TimelineItemColor = 'default' | 'primary' | 'success' | 'warning' | 'danger'
3
+
4
+ /** 时间线容器组件属性 */
5
+ export interface TimelineProps {}
6
+
7
+ /** 时间线节点属性 */
8
+ export interface TimelineItemProps {
9
+ /** 节点圆点颜色语义,默认 'default'(中性色圆点) */
10
+ color?: TimelineItemColor
11
+ /** 节点时间戳文本 */
12
+ timestamp?: string
13
+ /** 时间戳位置:top 内容上方 / bottom 内容下方,默认 'bottom' */
14
+ timestampPlacement?: 'top' | 'bottom'
15
+ }
@@ -0,0 +1,50 @@
1
+ import type { FormComponentProps } from '@veltra/utils'
2
+
3
+ /** 上传文件项(url 可为本地 blob 地址或已上传地址) */
4
+ export interface UploaderFileItem {
5
+ /** 文件访问地址(本地预览为 blob: 地址;上传失败时为空) */
6
+ url: string
7
+ /** 文件名(用于类型识别与展示,回显历史数据时建议必传) */
8
+ name?: string
9
+ /** 文件大小(字节) */
10
+ size?: number
11
+ /** 上传状态:传入 upload 时未完成前为 uploading,失败为 failed */
12
+ status?: 'uploading' | 'done' | 'failed'
13
+ }
14
+
15
+ /** 上传组件属性(报销填报场景:图片 / word / excel / pdf) */
16
+ export interface UploaderProps extends FormComponentProps {
17
+ /** 文件列表(v-model) */
18
+ modelValue?: UploaderFileItem[]
19
+ /** 接受的文件类型,透传原生 input accept */
20
+ accept?: string
21
+ /** 是否多选 */
22
+ multiple?: boolean
23
+ /** 最大文件数量,超出后隐藏上传入口 */
24
+ maxCount?: number
25
+ /** 单文件大小上限(字节),超出触发 oversize 并丢弃 */
26
+ maxSize?: number
27
+ /**
28
+ * 是否显示删除按钮;传函数可按文件控制(返回 false 隐藏该文件的删除按钮,如补传模式仅允许删补传附件)。
29
+ * 注意联合类型须函数成员在前,否则 defineProps 宏推导运行时类型时会丢失 Function
30
+ */
31
+ deletable?: ((file: UploaderFileItem, index: number) => boolean) | boolean
32
+ /** 点击图片是否打开内置大图预览;文档类型始终只派发 click-file */
33
+ preview?: boolean
34
+ /** 自定义上传,返回文件地址;不传则本地 blob 地址直显 */
35
+ upload?: (file: File) => Promise<string>
36
+ /** 读取文件前校验,返回 false(或 resolve false)阻止添加 */
37
+ beforeRead?: (file: File) => boolean | Promise<boolean>
38
+ }
39
+
40
+ /** 上传组件定义的事件 */
41
+ export interface UploaderEmits {
42
+ (e: 'update:modelValue', files: UploaderFileItem[]): void
43
+ (e: 'change', files: UploaderFileItem[]): void
44
+ (e: 'oversize', files: File[]): void
45
+ (e: 'delete', file: UploaderFileItem, index: number): void
46
+ (e: 'click-file', file: UploaderFileItem, index: number): void
47
+ }
48
+
49
+ /** 上传组件暴露的对象 */
50
+ export interface UploaderExposed {}
@@ -1,2 +0,0 @@
1
-
2
- $ bun -e 'void 0'
@@ -1 +0,0 @@
1
- $ tsc -p tsconfig.json --noEmit
package/tsconfig.json DELETED
@@ -1,12 +0,0 @@
1
- {
2
- "extends": "@cat-kit/tsconfig/tsconfig.web.json",
3
- "compilerOptions": {
4
- "composite": true,
5
- "declaration": true,
6
- "rootDir": "./src",
7
- "outDir": "./dist",
8
- "skipDefaultLibCheck": true
9
- },
10
- "include": ["src/**/*.ts"],
11
- "exclude": ["node_modules"]
12
- }