@opentiny/vue-docs 3.18.4 → 3.18.7
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/demos/apis/button-group.js +2 -2
- package/demos/apis/dialog-select.js +2 -2
- package/demos/apis/dropdown.js +1 -1
- package/demos/apis/grid.js +4 -4
- package/demos/apis/input.js +2 -2
- package/demos/apis/pager.js +2 -2
- package/demos/apis/pop-upload.js +2 -2
- package/demos/pc/app/modal/footer-slot-composition-api.vue +1 -1
- package/demos/pc/app/modal/footer-slot.vue +1 -1
- package/package.json +5 -5
- package/src/views/components/VersionTip.vue +55 -53
- package/src/views/components/components.vue +120 -55
package/demos/apis/dropdown.js
CHANGED
package/demos/apis/grid.js
CHANGED
|
@@ -147,8 +147,8 @@ export default {
|
|
|
147
147
|
name: 'custom-column-names',
|
|
148
148
|
type: 'string[]',
|
|
149
149
|
defaultValue: "['TinyGridColumn']",
|
|
150
|
-
|
|
151
|
-
|
|
150
|
+
meta: {
|
|
151
|
+
stable: '3.17.0'
|
|
152
152
|
},
|
|
153
153
|
desc: {
|
|
154
154
|
'zh-CN': '封装 grid-column 时需要配置此字段,提供给表格收集配置',
|
|
@@ -1467,8 +1467,8 @@ export default {
|
|
|
1467
1467
|
name: 'toggle-group-change',
|
|
1468
1468
|
type: '(row: IRow) => void',
|
|
1469
1469
|
defaultValue: '',
|
|
1470
|
-
|
|
1471
|
-
|
|
1470
|
+
meta: {
|
|
1471
|
+
stable: '3.17.0'
|
|
1472
1472
|
},
|
|
1473
1473
|
desc: {
|
|
1474
1474
|
'zh-CN': '当分组的展开和收起时会触发该事件',
|
package/demos/apis/input.js
CHANGED
package/demos/apis/pager.js
CHANGED
package/demos/apis/pop-upload.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div class="content">
|
|
3
3
|
<tiny-button @click="visible = !visible" :reset-time="0">自定义底部</tiny-button>
|
|
4
|
-
<tiny-modal v-model="visible" show-footer>
|
|
4
|
+
<tiny-modal v-model="visible" footer-dragable show-footer>
|
|
5
5
|
<template #footer>
|
|
6
6
|
<tiny-button>自定义底部信息</tiny-button>
|
|
7
7
|
</template>
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div class="content">
|
|
3
3
|
<tiny-button @click="visible = !visible" :reset-time="0">自定义底部</tiny-button>
|
|
4
|
-
<tiny-modal v-model="visible" show-footer>
|
|
4
|
+
<tiny-modal v-model="visible" footer-dragable show-footer>
|
|
5
5
|
<template #footer>
|
|
6
6
|
<tiny-button>自定义底部信息</tiny-button>
|
|
7
7
|
</template>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@opentiny/vue-docs",
|
|
3
|
-
"version": "3.18.
|
|
3
|
+
"version": "3.18.7",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"dependencies": {
|
|
6
6
|
"@opentiny/vue-repl": "^1.1.2",
|
|
@@ -16,17 +16,17 @@
|
|
|
16
16
|
"vue": "^3.4.31",
|
|
17
17
|
"vue-i18n": "^9.1.10",
|
|
18
18
|
"vue-router": "4.1.5",
|
|
19
|
+
"@opentiny/vue-design-aurora": "~3.18.0",
|
|
19
20
|
"@opentiny/vue": "~3.18.0",
|
|
21
|
+
"@opentiny/vue-icon-saas": "~3.18.0",
|
|
20
22
|
"@opentiny/vue-design-saas": "~3.18.0",
|
|
21
23
|
"@opentiny/vue-common": "~3.18.0",
|
|
22
24
|
"@opentiny/vue-directive": "~3.18.0",
|
|
23
25
|
"@opentiny/vue-icon": "~3.18.0",
|
|
24
|
-
"@opentiny/vue-
|
|
25
|
-
"@opentiny/vue-icon-saas": "~3.18.0",
|
|
26
|
+
"@opentiny/vue-theme": "~3.18.4",
|
|
26
27
|
"@opentiny/vue-design-smb": "~3.18.0",
|
|
27
|
-
"@opentiny/vue-theme-mobile": "~3.18.0",
|
|
28
|
-
"@opentiny/vue-theme": "~3.18.1",
|
|
29
28
|
"@opentiny/vue-theme-saas": "~3.18.0",
|
|
29
|
+
"@opentiny/vue-theme-mobile": "~3.18.0",
|
|
30
30
|
"@opentiny/vue-vite-import": "~1.2.0"
|
|
31
31
|
},
|
|
32
32
|
"devDependencies": {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<span v-if="currentStageComputed" class="version-tip">
|
|
3
3
|
<div v-if="renderType === 'alert'">
|
|
4
|
-
<tiny-alert :type="alertTypeComputed" :closable="false">
|
|
4
|
+
<tiny-alert :type="alertTypeComputed" v-if="!isStableComputed" :closable="false">
|
|
5
5
|
<template #description>
|
|
6
6
|
<span>{{ tipComputed }}</span>
|
|
7
7
|
</template>
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
:content="tipComputed"
|
|
16
16
|
:disabled="!tipComputed"
|
|
17
17
|
>
|
|
18
|
-
<tiny-tag size="
|
|
18
|
+
<tiny-tag size="small" effect="dark" :type="tagTypeComputed">{{ tagContentComputed }}</tiny-tag>
|
|
19
19
|
</tiny-tooltip>
|
|
20
20
|
</span>
|
|
21
21
|
</span>
|
|
@@ -28,11 +28,14 @@ import { Tag as TinyTag, Alert as TinyAlert, Tooltip as TinyTooltip } from '@ope
|
|
|
28
28
|
import { getWord } from '../../i18n/index'
|
|
29
29
|
|
|
30
30
|
enum STAGE {
|
|
31
|
+
// 实验性阶段(api属性不具备此阶段)
|
|
31
32
|
experimental = 'experimental',
|
|
33
|
+
// 稳定阶段
|
|
32
34
|
stable = 'stable',
|
|
35
|
+
// 弃用阶段
|
|
33
36
|
deprecated = 'deprecated',
|
|
34
|
-
|
|
35
|
-
|
|
37
|
+
// 将要被移除阶段
|
|
38
|
+
toBeRemoved = 'toBeRemoved'
|
|
36
39
|
}
|
|
37
40
|
|
|
38
41
|
interface IStageVersionMetaData {
|
|
@@ -43,7 +46,7 @@ interface IVersionMetaData {
|
|
|
43
46
|
[STAGE.experimental]?: IStageVersionMetaData | string
|
|
44
47
|
[STAGE.stable]?: IStageVersionMetaData | string
|
|
45
48
|
[STAGE.deprecated]?: IStageVersionMetaData | string
|
|
46
|
-
[STAGE.
|
|
49
|
+
[STAGE.toBeRemoved]?: IStageVersionMetaData | string
|
|
47
50
|
}
|
|
48
51
|
|
|
49
52
|
interface Ii18nString {
|
|
@@ -51,38 +54,38 @@ interface Ii18nString {
|
|
|
51
54
|
'en-US': string
|
|
52
55
|
}
|
|
53
56
|
|
|
57
|
+
// 生命周期的顺序 实验 --> 稳定 --> 弃用 --> 移除
|
|
58
|
+
const lifeCycleOrder = [STAGE.experimental, STAGE.stable, STAGE.deprecated, STAGE.toBeRemoved]
|
|
59
|
+
|
|
54
60
|
const alertTypeMap = {
|
|
55
|
-
[STAGE.
|
|
61
|
+
[STAGE.toBeRemoved]: 'error',
|
|
56
62
|
[STAGE.deprecated]: 'error',
|
|
57
63
|
[STAGE.experimental]: 'warning',
|
|
58
|
-
[STAGE.stable]: '
|
|
64
|
+
[STAGE.stable]: 'success'
|
|
59
65
|
}
|
|
60
66
|
|
|
61
67
|
const tagTypeMap = {
|
|
62
|
-
[STAGE.
|
|
68
|
+
[STAGE.toBeRemoved]: 'danger',
|
|
63
69
|
[STAGE.deprecated]: 'danger',
|
|
64
70
|
[STAGE.experimental]: 'warning',
|
|
65
|
-
[STAGE.stable]: '
|
|
66
|
-
[STAGE.new]: 'primary'
|
|
71
|
+
[STAGE.stable]: 'success'
|
|
67
72
|
}
|
|
68
73
|
|
|
69
74
|
const cnDesMap = {
|
|
70
75
|
[STAGE.experimental]: '处于测试阶段',
|
|
71
76
|
[STAGE.stable]: '自 v{version} 起稳定提供',
|
|
72
77
|
[STAGE.deprecated]: '从 v{version} 开始被废弃',
|
|
73
|
-
[STAGE.
|
|
74
|
-
[STAGE.new]: '于 v{version} 新增'
|
|
78
|
+
[STAGE.toBeRemoved]: '于 v{version} 移除'
|
|
75
79
|
}
|
|
76
80
|
|
|
77
81
|
const enDesMap = {
|
|
78
82
|
[STAGE.experimental]: 'in beta',
|
|
79
83
|
[STAGE.stable]: 'stable since v{version}',
|
|
80
84
|
[STAGE.deprecated]: 'deprecated since v{version}',
|
|
81
|
-
[STAGE.
|
|
82
|
-
[STAGE.new]: 'add in v{version}'
|
|
85
|
+
[STAGE.toBeRemoved]: 'toBeRemoved in v{version}'
|
|
83
86
|
}
|
|
84
87
|
|
|
85
|
-
// 默认的,只需要显示deprecated,experimental
|
|
88
|
+
// 默认的,只需要显示deprecated,experimental状态时的提示
|
|
86
89
|
export default defineComponent({
|
|
87
90
|
components: {
|
|
88
91
|
TinyTag,
|
|
@@ -90,7 +93,7 @@ export default defineComponent({
|
|
|
90
93
|
TinyTooltip
|
|
91
94
|
},
|
|
92
95
|
props: {
|
|
93
|
-
|
|
96
|
+
meta: {
|
|
94
97
|
type: Object as PropType<IVersionMetaData>,
|
|
95
98
|
default: () => ({})
|
|
96
99
|
},
|
|
@@ -102,76 +105,73 @@ export default defineComponent({
|
|
|
102
105
|
type: String as PropType<'component' | 'api'>,
|
|
103
106
|
default: 'component'
|
|
104
107
|
},
|
|
105
|
-
stages: {
|
|
106
|
-
type: Array as PropType<STAGE[]>,
|
|
107
|
-
default: () => [STAGE.experimental, STAGE.deprecated, STAGE.removed, STAGE.new]
|
|
108
|
-
},
|
|
109
108
|
alertType: {
|
|
110
109
|
type: String
|
|
111
110
|
},
|
|
112
111
|
tagType: {
|
|
113
112
|
type: String
|
|
114
113
|
},
|
|
115
|
-
briefStage: {
|
|
116
|
-
type: Object as PropType<STAGE>
|
|
117
|
-
},
|
|
118
114
|
tip: {
|
|
119
115
|
type: Object as PropType<Ii18nString>
|
|
120
116
|
},
|
|
121
117
|
extendTip: {
|
|
122
118
|
type: Object as PropType<Ii18nString>
|
|
119
|
+
},
|
|
120
|
+
isFromMenu: {
|
|
121
|
+
type: Boolean,
|
|
122
|
+
default: false
|
|
123
123
|
}
|
|
124
124
|
},
|
|
125
125
|
setup(props) {
|
|
126
|
-
const isInStage = (stage: STAGE) => Boolean(props.metaData[stage]) && props.stages.includes(stage)
|
|
127
|
-
|
|
128
126
|
const getVersion = (stage: STAGE) => {
|
|
129
|
-
if (!props.
|
|
127
|
+
if (!props.meta[stage]) return ''
|
|
130
128
|
|
|
131
|
-
if (typeof props.
|
|
132
|
-
return props.
|
|
129
|
+
if (typeof props.meta[stage] === 'string') {
|
|
130
|
+
return props.meta[stage] as string
|
|
133
131
|
} else {
|
|
134
|
-
return (props.
|
|
132
|
+
return (props.meta[stage] as IStageVersionMetaData).version
|
|
135
133
|
}
|
|
136
134
|
}
|
|
137
135
|
|
|
138
|
-
const currentStageComputed = computed(() =>
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
136
|
+
const currentStageComputed = computed(() =>
|
|
137
|
+
lifeCycleOrder
|
|
138
|
+
.slice(0, -1)
|
|
139
|
+
.toReversed()
|
|
140
|
+
.find((stage) => Boolean(props.meta[stage]))
|
|
141
|
+
)
|
|
142
142
|
|
|
143
|
-
|
|
144
|
-
|
|
143
|
+
// 是否为稳定阶段
|
|
144
|
+
const isStableComputed = computed(() => currentStageComputed.value === STAGE.stable)
|
|
145
145
|
|
|
146
146
|
const generateDes = (desMap: typeof cnDesMap) => {
|
|
147
|
-
|
|
148
|
-
const
|
|
149
|
-
currentStageComputed.value as STAGE
|
|
150
|
-
)
|
|
151
|
-
// 当前deprecated之后,不显示stable的描述
|
|
152
|
-
const isFilterStable = [STAGE.removed, STAGE.deprecated].includes(currentStageComputed.value as STAGE)
|
|
147
|
+
const currentStage = currentStageComputed.value
|
|
148
|
+
const deprecatedList = lifeCycleOrder.slice(2)
|
|
153
149
|
|
|
154
150
|
const goingStages = Object.entries(desMap).filter(([stage]) => {
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
151
|
+
if (deprecatedList.includes(currentStage)) {
|
|
152
|
+
return deprecatedList.includes(stage)
|
|
153
|
+
} else {
|
|
154
|
+
return stage === currentStage
|
|
159
155
|
}
|
|
160
|
-
|
|
161
|
-
if (stage === STAGE.stable) {
|
|
162
|
-
isPicked = isPicked && !isFilterStable
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
return isPicked
|
|
166
156
|
})
|
|
167
157
|
|
|
168
158
|
return goingStages.map(([stage, des]) => des.replace('{version}', getVersion(stage as STAGE))).join(',')
|
|
169
159
|
}
|
|
170
160
|
|
|
161
|
+
const tagContentComputed = computed(() => {
|
|
162
|
+
const result = isStableComputed.value ? props.meta[currentStageComputed.value] : currentStageComputed.value
|
|
163
|
+
// 菜单上需要显示Beta标识,防止占用过多文字空间
|
|
164
|
+
if (props.isFromMenu && result === STAGE.experimental) {
|
|
165
|
+
return 'Beta'
|
|
166
|
+
} else {
|
|
167
|
+
return result
|
|
168
|
+
}
|
|
169
|
+
})
|
|
170
|
+
|
|
171
171
|
const tipComputed = computed(() => {
|
|
172
172
|
if (props.tip) return getWord(props.tip['zh-CN'], props.tip['en-US']) as string
|
|
173
173
|
|
|
174
|
-
if (!props.
|
|
174
|
+
if (!props.meta) return ''
|
|
175
175
|
|
|
176
176
|
const vertionDesZnCn = generateDes(cnDesMap)
|
|
177
177
|
const znChTip = `该${props.tipSubject === 'component' ? '组件' : '特性'}${vertionDesZnCn}。${
|
|
@@ -202,7 +202,9 @@ export default defineComponent({
|
|
|
202
202
|
tipComputed,
|
|
203
203
|
currentStageComputed,
|
|
204
204
|
alertTypeComputed,
|
|
205
|
-
tagTypeComputed
|
|
205
|
+
tagTypeComputed,
|
|
206
|
+
tagContentComputed,
|
|
207
|
+
isStableComputed
|
|
206
208
|
}
|
|
207
209
|
}
|
|
208
210
|
})
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<div v-if="templateModeState.isSaas" class="ti-pt20 ti-pl48 ti-mb-36">
|
|
3
|
-
<span class="cmp-mode-title">文档类型: </span>
|
|
4
|
-
<tiny-button-group :data="optionsList" v-model="templateModeState.mode"></tiny-button-group>
|
|
5
|
-
</div>
|
|
6
2
|
<!-- 一个组件的文档: 描述md + demos + apis -->
|
|
7
|
-
<header class="flex-horizontal docs-header">
|
|
3
|
+
<header :class="['flex-horizontal', 'docs-header', cmpId === 'loading' && 'docs-header-highlight']">
|
|
8
4
|
<div class="docs-title-wrap">
|
|
9
5
|
<div class="markdown-body markdown-top-body" size="medium" v-html="cmpTopMd"></div>
|
|
10
6
|
<version-tip
|
|
11
|
-
v-if="currJson.
|
|
12
|
-
:meta
|
|
7
|
+
v-if="currJson.meta || currJson.versionTipOption"
|
|
8
|
+
:meta="currJson.meta"
|
|
13
9
|
v-bind="currJson.versionTipOption"
|
|
14
10
|
>
|
|
15
11
|
</version-tip>
|
|
16
12
|
</div>
|
|
13
|
+
<div v-if="templateModeState.isSaas" class="ti-pt20 ti-pl48 ti-mb-36">
|
|
14
|
+
<span class="cmp-mode-title">文档类型: </span>
|
|
15
|
+
<tiny-button-group :data="optionsList" v-model="templateModeState.mode"></tiny-button-group>
|
|
16
|
+
</div>
|
|
17
17
|
<span class="docs-header-spacer"></span>
|
|
18
18
|
</header>
|
|
19
19
|
<div class="docs-content">
|
|
@@ -54,8 +54,8 @@
|
|
|
54
54
|
<span v-else>{{ row.name }}</span>
|
|
55
55
|
</span>
|
|
56
56
|
<version-tip
|
|
57
|
-
v-if="row.
|
|
58
|
-
:meta
|
|
57
|
+
v-if="row.meta || row.versionTipOption"
|
|
58
|
+
:meta="row.meta"
|
|
59
59
|
v-bind="row.versionTipOption"
|
|
60
60
|
render-type="tag"
|
|
61
61
|
tip-subject="api"
|
|
@@ -84,14 +84,24 @@
|
|
|
84
84
|
:title="i18nByKey('defValue')"
|
|
85
85
|
:width="columnWidth[key][2]"
|
|
86
86
|
></tiny-grid-column>
|
|
87
|
-
<tiny-grid-column field="desc" :title="i18nByKey('desc')"
|
|
87
|
+
<tiny-grid-column field="desc" :title="i18nByKey('desc')">
|
|
88
|
+
<template #default="data">
|
|
89
|
+
<span v-html="data.row.desc"></span>
|
|
90
|
+
</template>
|
|
91
|
+
</tiny-grid-column>
|
|
88
92
|
</tiny-grid>
|
|
89
93
|
</template>
|
|
90
94
|
</div>
|
|
91
95
|
</div>
|
|
92
96
|
</div>
|
|
93
97
|
</div>
|
|
94
|
-
<tiny-tabs
|
|
98
|
+
<tiny-tabs
|
|
99
|
+
v-else
|
|
100
|
+
v-model="activeTab"
|
|
101
|
+
ref="demoTabs"
|
|
102
|
+
:class="['docs-content-tabs', cmpId === 'loading' && 'docs-content-tabs-highlight']"
|
|
103
|
+
@click="onTabsClick"
|
|
104
|
+
>
|
|
95
105
|
<tiny-tab-item :title="i18nByKey('demos')" name="demos">
|
|
96
106
|
<!-- demos列表 -->
|
|
97
107
|
<template v-if="currJson?.demos?.length">
|
|
@@ -103,6 +113,7 @@
|
|
|
103
113
|
:demo="demo"
|
|
104
114
|
:curr-demo-id="currDemoId"
|
|
105
115
|
class="mb32"
|
|
116
|
+
@mounted="demoMounted"
|
|
106
117
|
/>
|
|
107
118
|
</div>
|
|
108
119
|
<div v-else>
|
|
@@ -126,7 +137,7 @@
|
|
|
126
137
|
</template>
|
|
127
138
|
</div>
|
|
128
139
|
</tiny-tab-item>
|
|
129
|
-
<tiny-tab-item v-if="showApiTab && !isRunningTest" title="API" name="api">
|
|
140
|
+
<tiny-tab-item v-if="showApiTab && !isRunningTest && currJson.apis?.length" title="API" name="api">
|
|
130
141
|
<!-- api文档 -->
|
|
131
142
|
<div id="API" class="all-api-container">
|
|
132
143
|
<div class="ti-f-c ti-f-wrap api-list">
|
|
@@ -154,7 +165,11 @@
|
|
|
154
165
|
>
|
|
155
166
|
<tiny-grid-column class-name="api-table-expand-col" type="expand" width="32">
|
|
156
167
|
<template #default="{ row }">
|
|
157
|
-
<async-highlight
|
|
168
|
+
<async-highlight
|
|
169
|
+
v-if="row.code"
|
|
170
|
+
:code="row.code.trim()"
|
|
171
|
+
:types="chartCode ? 'html' : 'ts'"
|
|
172
|
+
></async-highlight>
|
|
158
173
|
<div v-if="row.depTypes">
|
|
159
174
|
<async-highlight
|
|
160
175
|
v-for="(k, i) in row.depTypes"
|
|
@@ -172,8 +187,8 @@
|
|
|
172
187
|
<span v-else>{{ row.name }}</span>
|
|
173
188
|
</span>
|
|
174
189
|
<version-tip
|
|
175
|
-
v-if="row.
|
|
176
|
-
:meta
|
|
190
|
+
v-if="row.meta || row.versionTipOption"
|
|
191
|
+
:meta="row.meta"
|
|
177
192
|
v-bind="row.versionTipOption"
|
|
178
193
|
render-type="tag"
|
|
179
194
|
tip-subject="api"
|
|
@@ -197,12 +212,16 @@
|
|
|
197
212
|
</template>
|
|
198
213
|
</tiny-grid-column>
|
|
199
214
|
<tiny-grid-column
|
|
200
|
-
v-if="key === 'props'"
|
|
215
|
+
v-if="key === 'props' || key === 'options'"
|
|
201
216
|
field="defaultValue"
|
|
202
217
|
:title="i18nByKey('defValue')"
|
|
203
218
|
:width="columnWidth[key][2]"
|
|
204
219
|
></tiny-grid-column>
|
|
205
|
-
<tiny-grid-column field="desc" :title="i18nByKey('desc')"
|
|
220
|
+
<tiny-grid-column field="desc" :title="i18nByKey('desc')">
|
|
221
|
+
<template #default="data">
|
|
222
|
+
<span v-html="data.row.desc"></span>
|
|
223
|
+
</template>
|
|
224
|
+
</tiny-grid-column>
|
|
206
225
|
</tiny-grid>
|
|
207
226
|
</template>
|
|
208
227
|
</div>
|
|
@@ -240,6 +259,7 @@
|
|
|
240
259
|
|
|
241
260
|
<script lang="jsx">
|
|
242
261
|
import { defineComponent, reactive, computed, toRefs, watch, onMounted, ref, onUnmounted, nextTick } from 'vue'
|
|
262
|
+
import { useRoute } from 'vue-router'
|
|
243
263
|
import { marked } from 'marked'
|
|
244
264
|
import hljs from 'highlight.js'
|
|
245
265
|
import { Anchor, ButtonGroup, Grid, GridColumn, Tabs, TabItem, Tooltip } from '@opentiny/vue'
|
|
@@ -271,6 +291,8 @@ export default defineComponent({
|
|
|
271
291
|
const isRunningTest = localStorage.getItem('tiny-e2e-test') === 'true'
|
|
272
292
|
const anchorRefreshKey = ref(0)
|
|
273
293
|
const apiTableRef = ref()
|
|
294
|
+
const route = useRoute()
|
|
295
|
+
|
|
274
296
|
const state = reactive({
|
|
275
297
|
webDocPath: computed(() => ''),
|
|
276
298
|
langKey: getWord('zh-CN', 'en-US'),
|
|
@@ -302,12 +324,13 @@ export default defineComponent({
|
|
|
302
324
|
currAnchorLinks: computed(() => (state.activeTab === 'demos' ? state.demoAnchorLinks : state.apiAnchorLinks)),
|
|
303
325
|
// 单demo显示时
|
|
304
326
|
singleDemo: null,
|
|
305
|
-
activeTab: 'demos',
|
|
327
|
+
activeTab: route.hash === '#api' ? 'api' : 'demos',
|
|
306
328
|
tableData: {},
|
|
307
329
|
currApiTypes: [],
|
|
308
330
|
showApiTab: computed(() => state.currApiTypes.length),
|
|
309
331
|
columnWidth: {
|
|
310
332
|
props: ['15%', '20%', '15%'],
|
|
333
|
+
options: ['15%', '20%', '15%'],
|
|
311
334
|
events: ['15%', '25%', 0],
|
|
312
335
|
methods: ['15%', '20%', 0],
|
|
313
336
|
slots: ['15%', 0, 0],
|
|
@@ -321,12 +344,33 @@ export default defineComponent({
|
|
|
321
344
|
activeMethod: (row) => row.typeAnchorName,
|
|
322
345
|
showIcon: true // 配置是否显示展开图标
|
|
323
346
|
},
|
|
324
|
-
contributors: [] // 贡献者
|
|
347
|
+
contributors: [], // 贡献者
|
|
348
|
+
chartCode: false
|
|
325
349
|
})
|
|
326
350
|
|
|
327
351
|
const { apiModeState } = useApiMode()
|
|
328
352
|
const { templateModeState, staticPath, optionsList } = useTemplateMode()
|
|
329
353
|
|
|
354
|
+
let finishNum = 0
|
|
355
|
+
let isAllMounted = false
|
|
356
|
+
let demoMountedResolve
|
|
357
|
+
const demoMounted = () => {
|
|
358
|
+
finishNum++
|
|
359
|
+
if (finishNum === state.currJson.demos.length) {
|
|
360
|
+
isAllMounted = true
|
|
361
|
+
demoMountedResolve(true)
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
const allDemoMounted = async () => {
|
|
366
|
+
if (isAllMounted) {
|
|
367
|
+
return isAllMounted
|
|
368
|
+
}
|
|
369
|
+
return new Promise((resolve) => {
|
|
370
|
+
demoMountedResolve = resolve
|
|
371
|
+
})
|
|
372
|
+
}
|
|
373
|
+
|
|
330
374
|
const getApiAnchorLinks = () => {
|
|
331
375
|
if (!state.currJson.apis?.length) {
|
|
332
376
|
return []
|
|
@@ -368,14 +412,14 @@ export default defineComponent({
|
|
|
368
412
|
for (const apiType of Object.keys(apiGroup)) {
|
|
369
413
|
if (Array.isArray(apiGroup[apiType]) && apiGroup[apiType].length) {
|
|
370
414
|
const apiArr = apiGroup[apiType].map((i) => {
|
|
371
|
-
const { name, type, defaultValue, desc, demoId, typeAnchorName, linkTo,
|
|
415
|
+
const { name, type, defaultValue, desc, demoId, typeAnchorName, linkTo, meta, versionTipOption } = i
|
|
372
416
|
const item = {
|
|
373
417
|
name,
|
|
374
418
|
type,
|
|
375
419
|
defaultValue: defaultValue || '--',
|
|
376
420
|
desc: desc[state.langKey],
|
|
377
421
|
demoId,
|
|
378
|
-
|
|
422
|
+
meta,
|
|
379
423
|
versionTipOption,
|
|
380
424
|
typeAnchorName: '',
|
|
381
425
|
linkTo
|
|
@@ -439,10 +483,7 @@ export default defineComponent({
|
|
|
439
483
|
try {
|
|
440
484
|
// 用户打开官网有时候会带一些特殊字符的hash,try catch一下防止js报错
|
|
441
485
|
scrollTarget = document.querySelector(`#${hash}`)
|
|
442
|
-
} catch (err) {
|
|
443
|
-
// eslint-disable-next-line no-console
|
|
444
|
-
console.log('querySelector has special character:', err)
|
|
445
|
-
}
|
|
486
|
+
} catch (err) {}
|
|
446
487
|
if (scrollTarget && !isRunningTest) {
|
|
447
488
|
document.getElementById('doc-layout').scrollTo({
|
|
448
489
|
top: scrollTarget.offsetTop,
|
|
@@ -481,6 +522,9 @@ export default defineComponent({
|
|
|
481
522
|
`@demos/apis/${getWebdocPath(state.cmpId) === 'chart' ? state.cmpId : getWebdocPath(state.cmpId)}.js`
|
|
482
523
|
)
|
|
483
524
|
]
|
|
525
|
+
|
|
526
|
+
state.chartCode = getWebdocPath(state.cmpId) === 'chart'
|
|
527
|
+
|
|
484
528
|
// 兼容ts文档
|
|
485
529
|
if (['interfaces', 'types', 'classes'].includes(state.cmpId)) {
|
|
486
530
|
state.activeTab = 'apis'
|
|
@@ -557,7 +601,10 @@ export default defineComponent({
|
|
|
557
601
|
}
|
|
558
602
|
|
|
559
603
|
// F5刷新加载时,跳到当前示例
|
|
560
|
-
|
|
604
|
+
// 应当在所有demo渲染完毕后在滚动,否则滚动完位置后,demo渲染会使滚动位置错位
|
|
605
|
+
return allDemoMounted().then(() => {
|
|
606
|
+
scrollByHash(hash)
|
|
607
|
+
})
|
|
561
608
|
})
|
|
562
609
|
.finally(() => {
|
|
563
610
|
// 获取组件贡献者
|
|
@@ -600,10 +647,12 @@ export default defineComponent({
|
|
|
600
647
|
}
|
|
601
648
|
|
|
602
649
|
const fn = {
|
|
650
|
+
demoMounted,
|
|
603
651
|
copyText: (text) => {
|
|
604
652
|
navigator.clipboard.writeText(text)
|
|
605
653
|
},
|
|
606
|
-
onTabsClick: () => {
|
|
654
|
+
onTabsClick: (data) => {
|
|
655
|
+
router.push(`#${data.name}`)
|
|
607
656
|
scrollToLayoutTop()
|
|
608
657
|
},
|
|
609
658
|
// 点击 api区域的 name列时
|
|
@@ -645,11 +694,12 @@ export default defineComponent({
|
|
|
645
694
|
router.push(data.link)
|
|
646
695
|
} else if (apiModeState.demoMode === 'default' && data.link.startsWith('#')) {
|
|
647
696
|
// 多示例模式,自动会切到相应的位置。只需要记录singleDemo就好了
|
|
697
|
+
e.preventDefault()
|
|
648
698
|
const hash = data.link.slice(1)
|
|
649
699
|
state.currDemoId = hash
|
|
650
700
|
state.singleDemo = state.currJson.demos.find((d) => d.demoId === hash)
|
|
651
|
-
|
|
652
|
-
|
|
701
|
+
router.push(data.link)
|
|
702
|
+
scrollByHash(hash)
|
|
653
703
|
}
|
|
654
704
|
}
|
|
655
705
|
}
|
|
@@ -661,6 +711,8 @@ export default defineComponent({
|
|
|
661
711
|
state.currJson = {}
|
|
662
712
|
} else {
|
|
663
713
|
loadPage()
|
|
714
|
+
// 切换组件时tabs激活页变成demos
|
|
715
|
+
state.activeTab = 'demos'
|
|
664
716
|
// 每次切换组件都需要让锚点组件重新刷新
|
|
665
717
|
anchorRefreshKey.value++
|
|
666
718
|
}
|
|
@@ -717,9 +769,13 @@ export default defineComponent({
|
|
|
717
769
|
position: sticky;
|
|
718
770
|
top: 0;
|
|
719
771
|
z-index: var(--docs-header-zindex);
|
|
720
|
-
padding:
|
|
772
|
+
padding: 16px 40px;
|
|
721
773
|
background-color: #fff;
|
|
722
|
-
box-shadow:
|
|
774
|
+
box-shadow: 12px 0 20px 6px rgba(0, 0, 0, 0.06);
|
|
775
|
+
|
|
776
|
+
&.docs-header-highlight {
|
|
777
|
+
z-index: var(--docs-header-zindex-highlight);
|
|
778
|
+
}
|
|
723
779
|
|
|
724
780
|
.docs-title-wrap {
|
|
725
781
|
flex: 1;
|
|
@@ -730,13 +786,13 @@ export default defineComponent({
|
|
|
730
786
|
|
|
731
787
|
.markdown-top-body {
|
|
732
788
|
z-index: var(--docs-markdown-top-body-zindex);
|
|
733
|
-
font-size:
|
|
789
|
+
font-size: 14px;
|
|
734
790
|
transition: all ease-in-out 0.3s;
|
|
735
791
|
|
|
736
792
|
:deep(h1) {
|
|
737
793
|
margin: 0;
|
|
738
794
|
padding: 0;
|
|
739
|
-
font-size:
|
|
795
|
+
font-size: 24px;
|
|
740
796
|
line-height: 40px;
|
|
741
797
|
}
|
|
742
798
|
}
|
|
@@ -752,7 +808,7 @@ export default defineComponent({
|
|
|
752
808
|
}
|
|
753
809
|
|
|
754
810
|
.docs-content {
|
|
755
|
-
margin:
|
|
811
|
+
margin: 16px 0 120px;
|
|
756
812
|
transition: all ease-in-out 0.3s;
|
|
757
813
|
|
|
758
814
|
.docs-tabs-wrap {
|
|
@@ -760,14 +816,18 @@ export default defineComponent({
|
|
|
760
816
|
display: flex;
|
|
761
817
|
justify-content: center;
|
|
762
818
|
min-width: 680px;
|
|
763
|
-
padding: 0
|
|
819
|
+
padding: 0 40px;
|
|
764
820
|
}
|
|
765
821
|
|
|
766
822
|
.docs-content-tabs {
|
|
767
|
-
--
|
|
768
|
-
--
|
|
769
|
-
--
|
|
770
|
-
--
|
|
823
|
+
--tv-Tabs-heigh: 48px;
|
|
824
|
+
--tv-Tabs-item-font-size: 18px;
|
|
825
|
+
--tv-Tabs-header-font-active-text-color: #2f5bea;
|
|
826
|
+
--tv-Tabs-item-active-border-color: #2f5bea;
|
|
827
|
+
|
|
828
|
+
&.docs-content-tabs-highlight :deep(.tiny-tabs__header) {
|
|
829
|
+
z-index: var(--docs-layout-sider-zindex-highlight);
|
|
830
|
+
}
|
|
771
831
|
|
|
772
832
|
flex: 1;
|
|
773
833
|
transition: all ease-in-out 0.3s;
|
|
@@ -787,7 +847,7 @@ export default defineComponent({
|
|
|
787
847
|
left: 0;
|
|
788
848
|
display: block;
|
|
789
849
|
width: 100%;
|
|
790
|
-
height:
|
|
850
|
+
height: 16px;
|
|
791
851
|
background: linear-gradient(to bottom, #fff, transparent);
|
|
792
852
|
transform: translateY(100%);
|
|
793
853
|
}
|
|
@@ -806,9 +866,6 @@ export default defineComponent({
|
|
|
806
866
|
}
|
|
807
867
|
|
|
808
868
|
.api-table {
|
|
809
|
-
--ti-grid-font-size: var(--ti-common-font-size-1);
|
|
810
|
-
--ti-grid-default-header-column-height: var(--ti-common-size-10x);
|
|
811
|
-
|
|
812
869
|
width: 100%;
|
|
813
870
|
table-layout: fixed;
|
|
814
871
|
border-collapse: collapse;
|
|
@@ -831,11 +888,20 @@ export default defineComponent({
|
|
|
831
888
|
}
|
|
832
889
|
|
|
833
890
|
:deep(.api-table-expand-col) {
|
|
834
|
-
padding-left:
|
|
891
|
+
padding-left: 16px;
|
|
835
892
|
}
|
|
836
893
|
|
|
837
894
|
:deep(.tiny-grid-body__expanded-cell) {
|
|
838
|
-
background-color:
|
|
895
|
+
background-color: #fafafa;
|
|
896
|
+
}
|
|
897
|
+
|
|
898
|
+
:deep(code) {
|
|
899
|
+
color: #476582;
|
|
900
|
+
padding: 4px 8px;
|
|
901
|
+
margin: 0 4px;
|
|
902
|
+
font-size: 0.85em;
|
|
903
|
+
background-color: rgba(27, 31, 35, 0.05);
|
|
904
|
+
border-radius: 3px;
|
|
839
905
|
}
|
|
840
906
|
}
|
|
841
907
|
|
|
@@ -849,7 +915,7 @@ export default defineComponent({
|
|
|
849
915
|
flex: none;
|
|
850
916
|
width: 200px;
|
|
851
917
|
height: calc(100vh - 280px);
|
|
852
|
-
padding-top:
|
|
918
|
+
padding-top: 16px;
|
|
853
919
|
|
|
854
920
|
.tiny-anchor__dot {
|
|
855
921
|
max-height: calc(100vh - 300px);
|
|
@@ -892,19 +958,19 @@ export default defineComponent({
|
|
|
892
958
|
.all-demos-container,
|
|
893
959
|
.all-api-container {
|
|
894
960
|
flex: 1;
|
|
895
|
-
padding-top:
|
|
961
|
+
padding-top: 32px;
|
|
896
962
|
scroll-behavior: smooth;
|
|
897
963
|
}
|
|
898
964
|
|
|
899
965
|
.all-api-container {
|
|
900
|
-
padding-top:
|
|
966
|
+
padding-top: 12px;
|
|
901
967
|
}
|
|
902
968
|
|
|
903
969
|
.flex-horizontal {
|
|
904
970
|
display: flex;
|
|
905
971
|
justify-content: space-between;
|
|
906
972
|
align-items: flex-start;
|
|
907
|
-
column-gap:
|
|
973
|
+
column-gap: 16px;
|
|
908
974
|
}
|
|
909
975
|
|
|
910
976
|
.cmp-container {
|
|
@@ -923,7 +989,6 @@ export default defineComponent({
|
|
|
923
989
|
}
|
|
924
990
|
|
|
925
991
|
:deep(.tiny-anchor-link) {
|
|
926
|
-
margin-bottom: 10px;
|
|
927
992
|
font-size: 12px;
|
|
928
993
|
|
|
929
994
|
a {
|
|
@@ -939,8 +1004,8 @@ export default defineComponent({
|
|
|
939
1004
|
margin-top: 48px;
|
|
940
1005
|
|
|
941
1006
|
.cmp-contributor-title {
|
|
942
|
-
margin-bottom:
|
|
943
|
-
font-size:
|
|
1007
|
+
margin-bottom: 32px;
|
|
1008
|
+
font-size: 20px;
|
|
944
1009
|
font-weight: Semibold;
|
|
945
1010
|
color: #191919;
|
|
946
1011
|
}
|
|
@@ -948,8 +1013,8 @@ export default defineComponent({
|
|
|
948
1013
|
.cmp-contributor-item {
|
|
949
1014
|
width: 42px;
|
|
950
1015
|
height: 42px;
|
|
951
|
-
margin-right:
|
|
952
|
-
margin-bottom:
|
|
1016
|
+
margin-right: 12px;
|
|
1017
|
+
margin-bottom: 20px;
|
|
953
1018
|
display: inline-block;
|
|
954
1019
|
border-radius: 50%;
|
|
955
1020
|
overflow: hidden;
|
|
@@ -966,7 +1031,7 @@ export default defineComponent({
|
|
|
966
1031
|
}
|
|
967
1032
|
|
|
968
1033
|
.cmp-contributor-tip {
|
|
969
|
-
font-size:
|
|
1034
|
+
font-size: 14px;
|
|
970
1035
|
color: #191919;
|
|
971
1036
|
}
|
|
972
1037
|
}
|