hy-app 0.2.14 → 0.2.16
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/components/hy-action-sheet/hy-action-sheet.vue +81 -13
- package/components/hy-action-sheet/typing.d.ts +1 -3
- package/components/hy-address-picker/hy-address-picker.vue +109 -8
- package/components/hy-address-picker/index.scss +2 -2
- package/components/hy-address-picker/typing.d.ts +39 -30
- package/components/hy-avatar/hy-avatar.vue +78 -4
- package/components/hy-avatar/typing.d.ts +21 -16
- package/components/hy-back-top/hy-back-top.vue +86 -28
- package/components/hy-back-top/typing.d.ts +17 -12
- package/components/hy-badge/hy-badge.vue +114 -43
- package/components/hy-badge/typing.d.ts +20 -15
- package/components/hy-button/hy-button.vue +22 -40
- package/components/hy-calendar/hy-calendar.vue +290 -143
- package/components/hy-calendar/typing.d.ts +38 -31
- package/components/hy-card/hy-card.vue +139 -36
- package/components/hy-card/typing.d.ts +39 -28
- package/components/hy-cell/hy-cell.vue +131 -67
- package/components/hy-cell/typing.d.ts +6 -1
- package/components/hy-check-button/hy-check-button.vue +101 -32
- package/components/hy-check-button/typing.d.ts +26 -19
- package/components/hy-checkbox/hy-checkbox.vue +167 -78
- package/components/hy-checkbox/typing.d.ts +26 -19
- package/components/hy-code-input/hy-code-input.vue +101 -5
- package/components/hy-code-input/typing.d.ts +9 -0
- package/components/hy-config-provider/hy-config-provider.vue +44 -24
- package/components/hy-config-provider/typing.d.ts +0 -4
- package/components/hy-count-down/hy-count-down.vue +99 -62
- package/components/hy-count-down/typing.d.ts +18 -5
- package/components/hy-count-to/hy-count-to.vue +165 -113
- package/components/hy-count-to/typing.d.ts +15 -11
- package/components/hy-datetime-picker/hy-datetime-picker.vue +338 -232
- package/components/hy-datetime-picker/typing.d.ts +49 -39
- package/components/hy-divider/hy-divider.vue +128 -64
- package/components/hy-divider/typing.d.ts +16 -16
- package/components/hy-dropdown/hy-dropdown.vue +57 -19
- package/components/hy-dropdown/typing.d.ts +14 -14
- package/components/hy-dropdown-item/hy-dropdown-item.vue +34 -5
- package/components/hy-dropdown-item/typing.d.ts +13 -6
- package/components/hy-empty/hy-empty.vue +64 -6
- package/components/hy-empty/typing.d.ts +5 -0
- package/components/hy-float-button/hy-float-button.vue +117 -5
- package/components/hy-float-button/typing.d.ts +7 -0
- package/components/hy-folding-panel/hy-folding-panel.vue +87 -25
- package/components/hy-folding-panel/typing.d.ts +24 -15
- package/components/hy-grid/hy-grid.vue +95 -35
- package/components/hy-grid/typing.d.ts +24 -19
- package/components/hy-icon/hy-icon.vue +84 -6
- package/components/hy-icon/typing.d.ts +5 -0
- package/components/hy-image/hy-image.vue +105 -6
- package/components/hy-image/typing.d.ts +9 -0
- package/components/hy-input/hy-input.vue +277 -130
- package/components/hy-input/props.ts +13 -14
- package/components/hy-input/typing.d.ts +59 -38
- package/components/hy-line/hy-line.vue +65 -25
- package/components/hy-line-progress/hy-line-progress.vue +68 -35
- package/components/hy-list/hy-list.vue +127 -61
- package/components/hy-list/typing.d.ts +19 -12
- package/components/hy-loading/hy-loading.vue +79 -25
- package/components/hy-menu/hy-menu.vue +69 -45
- package/components/hy-menu/typing.d.ts +22 -15
- package/components/hy-modal/hy-modal.vue +91 -4
- package/components/hy-modal/typing.d.ts +11 -0
- package/components/hy-navbar/hy-navbar.vue +105 -25
- package/components/hy-navbar/typing.d.ts +25 -20
- package/components/hy-notice-bar/hy-notice-bar.vue +97 -19
- package/components/hy-notice-bar/typing.d.ts +22 -17
- package/components/hy-notify/hy-notify.vue +106 -54
- package/components/hy-number-step/hy-number-step.vue +211 -120
- package/components/hy-number-step/typing.d.ts +45 -28
- package/components/hy-overlay/hy-overlay.vue +60 -16
- package/components/hy-overlay/typing.d.ts +11 -6
- package/components/hy-pagination/hy-pagination.vue +94 -37
- package/components/hy-pagination/typing.d.ts +20 -11
- package/components/hy-picker/hy-picker.vue +225 -160
- package/components/hy-picker/typing.d.ts +51 -28
- package/components/hy-popover/hy-popover.vue +55 -7
- package/components/hy-popover/typing.d.ts +21 -1
- package/components/hy-popup/hy-popup.vue +164 -99
- package/components/hy-popup/typing.d.ts +11 -0
- package/components/hy-price/hy-price.vue +77 -30
- package/components/hy-price/typing.d.ts +10 -10
- package/components/hy-qrcode/hy-qrcode.vue +75 -5
- package/components/hy-qrcode/typing.d.ts +25 -16
- package/components/hy-radio/hy-radio.vue +169 -88
- package/components/hy-radio/typing.d.ts +29 -22
- package/components/hy-rate/hy-rate.vue +155 -104
- package/components/hy-rate/typing.d.ts +23 -16
- package/components/hy-read-more/hy-read-more.vue +83 -56
- package/components/hy-read-more/typing.d.ts +18 -11
- package/components/hy-scroll-list/hy-scroll-list.vue +69 -58
- package/components/hy-scroll-list/typing.d.ts +14 -7
- package/components/hy-search/hy-search.vue +168 -62
- package/components/hy-search/typing.d.ts +47 -26
- package/components/hy-signature/hy-signature.vue +354 -272
- package/components/hy-signature/typing.d.ts +65 -52
- package/components/hy-slider/hy-slider.vue +208 -160
- package/components/hy-slider/typing.d.ts +28 -17
- package/components/hy-steps/hy-steps.vue +125 -99
- package/components/hy-steps/typing.d.ts +21 -14
- package/components/hy-submit-bar/hy-submit-bar.vue +129 -48
- package/components/hy-submit-bar/typing.d.ts +30 -23
- package/components/hy-subsection/hy-subsection.vue +139 -96
- package/components/hy-subsection/typing.d.ts +23 -16
- package/components/hy-swipe-action/hy-swipe-action.vue +161 -135
- package/components/hy-swipe-action/typing.d.ts +26 -17
- package/components/hy-swiper/hy-swiper.vue +178 -73
- package/components/hy-swiper/typing.d.ts +37 -28
- package/components/hy-switch/hy-switch.vue +107 -60
- package/components/hy-switch/typing.d.ts +25 -18
- package/components/hy-tabs/hy-tabs.vue +170 -160
- package/components/hy-tabs/typing.d.ts +36 -22
- package/components/hy-tag/hy-tag.vue +133 -58
- package/components/hy-tag/typing.d.ts +26 -18
- package/components/hy-text/hy-text.vue +106 -6
- package/components/hy-text/typing.d.ts +31 -26
- package/components/hy-textarea/hy-textarea.vue +183 -89
- package/components/hy-textarea/typing.d.ts +41 -24
- package/components/hy-tooltip/hy-tooltip.vue +145 -101
- package/components/hy-tooltip/typing.d.ts +18 -13
- package/components/hy-transition/hy-transition.vue +48 -13
- package/components/hy-transition/typing.d.ts +17 -0
- package/components/hy-upload/hy-upload.vue +113 -148
- package/components/hy-upload/typing.d.ts +71 -71
- package/components/hy-warn/hy-warn.vue +79 -36
- package/components/hy-warn/typing.d.ts +18 -11
- package/components/hy-waterfall/hy-waterfall.vue +90 -77
- package/components/hy-watermark/hy-watermark.vue +82 -5
- package/components/hy-watermark/typing.d.ts +20 -20
- package/global.d.ts +39 -59
- package/package.json +4 -19
- package/utils/inspect.ts +3 -1
- package/web-types.json +1 -1
- package/compiler.ts +0 -108
- package/component-helper.ts +0 -179
- package/components.json +0 -3287
- package/docgen.config.js +0 -13
- package/web-types.config.js +0 -7
package/compiler.ts
DELETED
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
import fs from 'fs'
|
|
2
|
-
import path from 'path'
|
|
3
|
-
import { parse } from '@vue/compiler-sfc'
|
|
4
|
-
import ts from 'typescript'
|
|
5
|
-
|
|
6
|
-
// 读取组件文件
|
|
7
|
-
const componentPath = path.resolve(__dirname, './components/hy-button/hy-button.vue')
|
|
8
|
-
const content = fs.readFileSync(componentPath, 'utf-8')
|
|
9
|
-
const { descriptor } = parse(content)
|
|
10
|
-
|
|
11
|
-
if (!descriptor.scriptSetup) {
|
|
12
|
-
console.error('未找到script setup部分')
|
|
13
|
-
process.exit(1)
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
// 解析TypeScript类型
|
|
17
|
-
const sourceCode = descriptor.scriptSetup.content
|
|
18
|
-
const sourceFile = ts.createSourceFile('temp.ts', sourceCode, ts.ScriptTarget.Latest, true)
|
|
19
|
-
|
|
20
|
-
// 存储解析结果
|
|
21
|
-
const propsInfo: Record<
|
|
22
|
-
string,
|
|
23
|
-
{
|
|
24
|
-
type: string
|
|
25
|
-
default?: string
|
|
26
|
-
values?: string[]
|
|
27
|
-
description?: string
|
|
28
|
-
}
|
|
29
|
-
> = {}
|
|
30
|
-
|
|
31
|
-
// 遍历AST查找interface定义
|
|
32
|
-
function traverseNode(node: ts.Node) {
|
|
33
|
-
if (ts.isInterfaceDeclaration(node) && node.name.text === 'buttonProps') {
|
|
34
|
-
node.members.forEach((member) => {
|
|
35
|
-
if (ts.isPropertySignature(member) && member.name) {
|
|
36
|
-
const propName = member.name.getText()
|
|
37
|
-
const type = member.type?.getText() || 'any'
|
|
38
|
-
|
|
39
|
-
// 提取JSDoc注释中的信息
|
|
40
|
-
const jsDoc = ts.getJSDocCommentsAndTags(member)
|
|
41
|
-
const description = jsDoc
|
|
42
|
-
.filter((tag) => ts.isJSDocText(tag))
|
|
43
|
-
.map((tag) => (tag as ts.JSDocText).comment)
|
|
44
|
-
.join('\n')
|
|
45
|
-
.trim()
|
|
46
|
-
|
|
47
|
-
const valuesTag = jsDoc.find(
|
|
48
|
-
(tag) => ts.isJSDocTag(tag) && tag.tagName.text === 'values',
|
|
49
|
-
) as ts.JSDocTag | undefined
|
|
50
|
-
const values = valuesTag?.comment ? valuesTag.comment.split('|').map((v) => v.trim()) : []
|
|
51
|
-
|
|
52
|
-
propsInfo[propName] = {
|
|
53
|
-
type,
|
|
54
|
-
description: description || undefined,
|
|
55
|
-
values: values.length ? values : undefined,
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
})
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
ts.forEachChild(node, traverseNode)
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
traverseNode(sourceFile)
|
|
65
|
-
|
|
66
|
-
// 解析默认值
|
|
67
|
-
const defaultsMatch = sourceCode.match(/withDefaults\(.*?,\s*({[\s\S]*?})\s*\)/)
|
|
68
|
-
if (defaultsMatch) {
|
|
69
|
-
const defaultsCode = defaultsMatch[1]
|
|
70
|
-
const defaultsSource = ts.createSourceFile(
|
|
71
|
-
'defaults.ts',
|
|
72
|
-
`const defaults = ${defaultsCode};`,
|
|
73
|
-
ts.ScriptTarget.Latest,
|
|
74
|
-
true,
|
|
75
|
-
)
|
|
76
|
-
|
|
77
|
-
ts.forEachChild(defaultsSource, (node) => {
|
|
78
|
-
if (ts.isVariableDeclaration(node) && node.name.getText() === 'defaults') {
|
|
79
|
-
const initializer = node.initializer
|
|
80
|
-
if (ts.isObjectLiteralExpression(initializer)) {
|
|
81
|
-
initializer.properties.forEach((prop) => {
|
|
82
|
-
if (ts.isPropertyAssignment(prop)) {
|
|
83
|
-
const propName = prop.name.getText()
|
|
84
|
-
const defaultValue = prop.initializer.getText()
|
|
85
|
-
if (propsInfo[propName]) {
|
|
86
|
-
propsInfo[propName].default = defaultValue
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
})
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
})
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
// 生成Markdown文档
|
|
96
|
-
let md = '## Props\n\n'
|
|
97
|
-
md += '| 属性名 | 类型 | 默认值 | 可选值 | 说明 |\n'
|
|
98
|
-
md += '|--------|------|--------|--------|------|\n'
|
|
99
|
-
|
|
100
|
-
Object.entries(propsInfo).forEach(([name, info]) => {
|
|
101
|
-
md += `| ${name} | ${info.type} | ${info.default || '-'} | ${
|
|
102
|
-
info.values ? info.values.join('、') : '-'
|
|
103
|
-
} | ${info.description || '-'} |\n`
|
|
104
|
-
})
|
|
105
|
-
|
|
106
|
-
// 写入文档文件
|
|
107
|
-
fs.writeFileSync(path.join(__dirname, 'docs/button-props.md'), md)
|
|
108
|
-
console.log('Props文档生成成功,包含可选值信息!')
|
package/component-helper.ts
DELETED
|
@@ -1,179 +0,0 @@
|
|
|
1
|
-
import fg from 'fast-glob'
|
|
2
|
-
import { read, parse, vetur, webTypes, write, isString } from 'components-helper'
|
|
3
|
-
import type {
|
|
4
|
-
Config,
|
|
5
|
-
InstallOptions,
|
|
6
|
-
NormalizeData,
|
|
7
|
-
Options,
|
|
8
|
-
ParseData,
|
|
9
|
-
ParseTable,
|
|
10
|
-
} from 'components-helper'
|
|
11
|
-
|
|
12
|
-
const config: Config = {
|
|
13
|
-
tags: 'tags.json',
|
|
14
|
-
attributes: 'attributes.json',
|
|
15
|
-
webTypes: 'web-types.json',
|
|
16
|
-
titleRegExp: /#+\s+(.*)\n+([^(#|\n)]*)/g,
|
|
17
|
-
tableRegExp: /#+\s+(.*)\n+(\|?.+\|.+)\n\|?\s*:?-+:?\s*\|.+((\n\|?.+\|.+)+)/g,
|
|
18
|
-
fileNameRegExp: /\/((\w|-)+)\.\w+$/,
|
|
19
|
-
separator: ',', // values截取
|
|
20
|
-
props: 'Props',
|
|
21
|
-
propsName: 'Prop name',
|
|
22
|
-
propsType: 'Type',
|
|
23
|
-
propsDescription: 'Description',
|
|
24
|
-
propsOptions: 'Values',
|
|
25
|
-
propsDefault: 'Default',
|
|
26
|
-
events: 'events',
|
|
27
|
-
eventsName: 'Event name',
|
|
28
|
-
eventsDescription: 'Description',
|
|
29
|
-
slots: 'slots',
|
|
30
|
-
slotsName: 'Name',
|
|
31
|
-
slotsDescription: 'Description',
|
|
32
|
-
slotsType: 'Type',
|
|
33
|
-
slotsSubtags: 'Subtags',
|
|
34
|
-
directives: 'directives',
|
|
35
|
-
directivesName: 'Name',
|
|
36
|
-
directivesType: 'Type',
|
|
37
|
-
directivesDescription: 'Description',
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
function normalize(options: Options, data: ParseData, path: string): NormalizeData {
|
|
41
|
-
const { fileNameRegExp, props, events, slots, directives } = options
|
|
42
|
-
const _fileNameRegExp = isString(fileNameRegExp) ? new RegExp(fileNameRegExp) : fileNameRegExp
|
|
43
|
-
const _path = path.match(_fileNameRegExp)
|
|
44
|
-
const fileName = _path ? _path[1] : ''
|
|
45
|
-
const _data: NormalizeData = Object.assign(data, { path, fileName })
|
|
46
|
-
const _props = new RegExp(props, 'i')
|
|
47
|
-
const _events = new RegExp(events, 'i')
|
|
48
|
-
const _slots = new RegExp(slots, 'i')
|
|
49
|
-
const _directives = new RegExp(directives, 'i')
|
|
50
|
-
|
|
51
|
-
if (!_data.table || !_data.table.length) return _data
|
|
52
|
-
|
|
53
|
-
for (let i = 0; i < _data.table.length; i++) {
|
|
54
|
-
const item = _data.table[i]
|
|
55
|
-
const title = item.title
|
|
56
|
-
if (!title) continue
|
|
57
|
-
|
|
58
|
-
if (_props.test(title)) {
|
|
59
|
-
setData({
|
|
60
|
-
data: _data,
|
|
61
|
-
item,
|
|
62
|
-
path,
|
|
63
|
-
fileName,
|
|
64
|
-
title,
|
|
65
|
-
key: 'props',
|
|
66
|
-
regExp: _props,
|
|
67
|
-
})
|
|
68
|
-
} else if (_events.test(title)) {
|
|
69
|
-
setData({
|
|
70
|
-
data: _data,
|
|
71
|
-
item,
|
|
72
|
-
path,
|
|
73
|
-
fileName,
|
|
74
|
-
title,
|
|
75
|
-
key: 'events',
|
|
76
|
-
regExp: _events,
|
|
77
|
-
})
|
|
78
|
-
} else if (_slots.test(title)) {
|
|
79
|
-
setData({
|
|
80
|
-
data: _data,
|
|
81
|
-
item,
|
|
82
|
-
path,
|
|
83
|
-
fileName,
|
|
84
|
-
title,
|
|
85
|
-
key: 'slots',
|
|
86
|
-
regExp: _slots,
|
|
87
|
-
})
|
|
88
|
-
} else if (_directives.test(title)) {
|
|
89
|
-
setData({
|
|
90
|
-
data: _data,
|
|
91
|
-
item,
|
|
92
|
-
path,
|
|
93
|
-
fileName,
|
|
94
|
-
title,
|
|
95
|
-
key: 'directives',
|
|
96
|
-
regExp: _directives,
|
|
97
|
-
})
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
return _data
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
function setData({
|
|
104
|
-
data,
|
|
105
|
-
key,
|
|
106
|
-
item,
|
|
107
|
-
title,
|
|
108
|
-
path,
|
|
109
|
-
fileName,
|
|
110
|
-
regExp,
|
|
111
|
-
}: {
|
|
112
|
-
data: NormalizeData
|
|
113
|
-
key: 'props' | 'events' | 'slots' | 'directives'
|
|
114
|
-
item: ParseTable
|
|
115
|
-
title: string
|
|
116
|
-
path: string
|
|
117
|
-
fileName: string
|
|
118
|
-
regExp: RegExp
|
|
119
|
-
}) {
|
|
120
|
-
const childTitle = title.replace(regExp, '').trim()
|
|
121
|
-
|
|
122
|
-
if (childTitle) {
|
|
123
|
-
const childHeader = data.headers?.find((item) => item.title === childTitle)
|
|
124
|
-
const childItem = {
|
|
125
|
-
path,
|
|
126
|
-
fileName,
|
|
127
|
-
title: childTitle,
|
|
128
|
-
description: childHeader?.description || data.description,
|
|
129
|
-
[key]: item,
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
if (!data.children) {
|
|
133
|
-
data.children = [childItem]
|
|
134
|
-
} else {
|
|
135
|
-
const child = data.children.find((item) => item.title === childTitle)
|
|
136
|
-
|
|
137
|
-
if (child) {
|
|
138
|
-
child[key] = item
|
|
139
|
-
} else {
|
|
140
|
-
data.children.push(childItem)
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
} else {
|
|
144
|
-
data[key] = item
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
export function generateWebTypes(options = {} as InstallOptions) {
|
|
149
|
-
if (!options.entry) throw new Error('entry must be a string (non empty) or an array of strings')
|
|
150
|
-
if (!options.outDir) throw new Error('outDir must be a string (non empty)')
|
|
151
|
-
if (!options.name) console.warn('missing property "name"')
|
|
152
|
-
if (!options.version) console.warn('missing property "version"')
|
|
153
|
-
|
|
154
|
-
const _options: Options = Object.assign(config, options)
|
|
155
|
-
const files: string[] = fg.sync(_options.entry, _options.fastGlobConfig)
|
|
156
|
-
const data = files.map((path) => {
|
|
157
|
-
const fileContent = read(path)
|
|
158
|
-
const parseContent = parse(_options, fileContent)
|
|
159
|
-
const content = normalize(_options, parseContent, path)
|
|
160
|
-
content.props.content = content.props.content.map((item) => {
|
|
161
|
-
item.Values = item.Values.replace(/`|-/g, '')
|
|
162
|
-
return item
|
|
163
|
-
})
|
|
164
|
-
return content
|
|
165
|
-
})
|
|
166
|
-
const { tags, attributes } = vetur(_options, data)
|
|
167
|
-
const webTypesData = webTypes(_options, data)
|
|
168
|
-
|
|
169
|
-
write(_options, 'tags', tags)
|
|
170
|
-
write(_options, 'attributes', attributes)
|
|
171
|
-
write(_options, 'webTypes', webTypesData)
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
generateWebTypes({
|
|
175
|
-
entry: './dist/docs/components/hy-button/hy-button.md', // 你的组件路径
|
|
176
|
-
outDir: 'dist', // 输出目录
|
|
177
|
-
name: 'hy-app', // 组件库名字
|
|
178
|
-
version: '0.2.14', // 版本号
|
|
179
|
-
})
|