@opentiny/vue-docs 3.18.5 → 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.
@@ -181,8 +181,8 @@ export default {
181
181
  'zh-CN': '自定义数据为空时展示内容',
182
182
  'en-US': 'customize content when data is empty'
183
183
  },
184
- metaData: {
185
- new: '3.17.0'
184
+ meta: {
185
+ stable: '3.17.0'
186
186
  },
187
187
  mode: ['pc'],
188
188
  pcDemo: 'slot-empty'
@@ -442,8 +442,8 @@ export default {
442
442
  'zh-CN': '自定义弹窗底部按钮',
443
443
  'en-US': 'Custom Pop Up Bottom buttons'
444
444
  },
445
- metaData: {
446
- new: '3.18.0'
445
+ meta: {
446
+ stable: '3.18.0'
447
447
  },
448
448
  mode: ['pc'],
449
449
  pcDemo: ''
@@ -241,7 +241,7 @@ export default {
241
241
  mode: ['pc', 'mobile-first'],
242
242
  pcDemo: 'lazy-show-popper',
243
243
  mfDemo: '',
244
- metaData: {
244
+ meta: {
245
245
  experimental: '3.18.0'
246
246
  }
247
247
  }
@@ -147,8 +147,8 @@ export default {
147
147
  name: 'custom-column-names',
148
148
  type: 'string[]',
149
149
  defaultValue: "['TinyGridColumn']",
150
- metaData: {
151
- new: '3.17.0'
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
- metaData: {
1471
- new: '3.17.0'
1470
+ meta: {
1471
+ stable: '3.17.0'
1472
1472
  },
1473
1473
  desc: {
1474
1474
  'zh-CN': '当分组的展开和收起时会触发该事件',
@@ -400,8 +400,8 @@ export default {
400
400
  name: 'show-tooltip',
401
401
  type: 'boolean',
402
402
  defaultValue: 'true',
403
- metaData: {
404
- new: '3.18.0'
403
+ meta: {
404
+ stable: '3.18.0'
405
405
  },
406
406
  desc: {
407
407
  'zh-CN': '只读状态下,文本超出是否悬浮提示',
@@ -247,8 +247,8 @@ export default {
247
247
  name: 'total-fixed-left',
248
248
  type: 'boolean',
249
249
  defaultValue: 'false',
250
- metaData: {
251
- new: '3.18.0'
250
+ meta: {
251
+ stable: '3.18.0'
252
252
  },
253
253
  desc: {
254
254
  'zh-CN': '总条目数是否固定在左侧,Aurora、SMB主题默认值为 true',
@@ -297,8 +297,8 @@ export default {
297
297
  'zh-CN': '自定义上传提示内容',
298
298
  'en-US': 'Customize upload prompt content'
299
299
  },
300
- metaData: {
301
- new: '3.18.0'
300
+ meta: {
301
+ stable: '3.18.0'
302
302
  },
303
303
  mode: ['pc'],
304
304
  pcDemo: 'upload-tip'
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opentiny/vue-docs",
3
- "version": "3.18.5",
3
+ "version": "3.18.7",
4
4
  "license": "MIT",
5
5
  "dependencies": {
6
6
  "@opentiny/vue-repl": "^1.1.2",
@@ -16,18 +16,18 @@
16
16
  "vue": "^3.4.31",
17
17
  "vue-i18n": "^9.1.10",
18
18
  "vue-router": "4.1.5",
19
- "@opentiny/vue": "~3.18.0",
20
19
  "@opentiny/vue-design-aurora": "~3.18.0",
21
- "@opentiny/vue-directive": "~3.18.0",
22
- "@opentiny/vue-design-smb": "~3.18.0",
23
- "@opentiny/vue-common": "~3.18.0",
20
+ "@opentiny/vue": "~3.18.0",
21
+ "@opentiny/vue-icon-saas": "~3.18.0",
24
22
  "@opentiny/vue-design-saas": "~3.18.0",
23
+ "@opentiny/vue-common": "~3.18.0",
24
+ "@opentiny/vue-directive": "~3.18.0",
25
25
  "@opentiny/vue-icon": "~3.18.0",
26
- "@opentiny/vue-theme": "~3.18.1",
27
- "@opentiny/vue-icon-saas": "~3.18.0",
28
- "@opentiny/vue-vite-import": "~1.2.0",
26
+ "@opentiny/vue-theme": "~3.18.4",
27
+ "@opentiny/vue-design-smb": "~3.18.0",
28
+ "@opentiny/vue-theme-saas": "~3.18.0",
29
29
  "@opentiny/vue-theme-mobile": "~3.18.0",
30
- "@opentiny/vue-theme-saas": "~3.18.0"
30
+ "@opentiny/vue-vite-import": "~1.2.0"
31
31
  },
32
32
  "devDependencies": {
33
33
  "@playwright/test": "~1.42.0",
@@ -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="mini" effect="dark" :type="tagTypeComputed">{{ currentStageComputed }}</tiny-tag>
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
- removed = 'removed',
35
- new = 'new'
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.removed]?: IStageVersionMetaData | string
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.removed]: 'error',
61
+ [STAGE.toBeRemoved]: 'error',
56
62
  [STAGE.deprecated]: 'error',
57
63
  [STAGE.experimental]: 'warning',
58
- [STAGE.stable]: 'info'
64
+ [STAGE.stable]: 'success'
59
65
  }
60
66
 
61
67
  const tagTypeMap = {
62
- [STAGE.removed]: 'danger',
68
+ [STAGE.toBeRemoved]: 'danger',
63
69
  [STAGE.deprecated]: 'danger',
64
70
  [STAGE.experimental]: 'warning',
65
- [STAGE.stable]: 'info',
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.removed]: '于 v{version} 移除',
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.removed]: 'removed in v{version}',
82
- [STAGE.new]: 'add in v{version}'
85
+ [STAGE.toBeRemoved]: 'toBeRemoved in v{version}'
83
86
  }
84
87
 
85
- // 默认的,只需要显示deprecated,experimental状态时的提示,除非声明了briefStage
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
- metaData: {
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.metaData[stage]) return ''
127
+ if (!props.meta[stage]) return ''
130
128
 
131
- if (typeof props.metaData[stage] === 'string') {
132
- return props.metaData[stage] as string
129
+ if (typeof props.meta[stage] === 'string') {
130
+ return props.meta[stage] as string
133
131
  } else {
134
- return (props.metaData[stage] as IStageVersionMetaData).version
132
+ return (props.meta[stage] as IStageVersionMetaData).version
135
133
  }
136
134
  }
137
135
 
138
- const currentStageComputed = computed(() => {
139
- if (props.briefStage) {
140
- return props.briefStage
141
- }
136
+ const currentStageComputed = computed(() =>
137
+ lifeCycleOrder
138
+ .slice(0, -1)
139
+ .toReversed()
140
+ .find((stage) => Boolean(props.meta[stage]))
141
+ )
142
142
 
143
- return [STAGE.removed, STAGE.deprecated, STAGE.stable, STAGE.experimental, STAGE.new].find(isInStage)
144
- })
143
+ // 是否为稳定阶段
144
+ const isStableComputed = computed(() => currentStageComputed.value === STAGE.stable)
145
145
 
146
146
  const generateDes = (desMap: typeof cnDesMap) => {
147
- // 当前stable之后,不显示experimental的描述
148
- const isFilterExperimental = [STAGE.removed, STAGE.deprecated, STAGE.stable].includes(
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
- let isPicked = isInStage(stage as STAGE)
156
-
157
- if (stage === STAGE.experimental) {
158
- isPicked = isPicked && !isFilterExperimental
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.metaData) return ''
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.metaData || currJson.versionTipOption"
12
- :meta-data="currJson.metaData"
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.metaData || row.versionTipOption"
58
- :meta-data="row.metaData"
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')"></tiny-grid-column>
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 v-else v-model="activeTab" ref="demoTabs" class="docs-content-tabs" @click="onTabsClick">
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 v-if="row.code" :code="row.code.trim()" types="ts"></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.metaData || row.versionTipOption"
176
- :meta-data="row.metaData"
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')"></tiny-grid-column>
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, metaData, versionTipOption } = i
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
- metaData,
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,
@@ -451,7 +492,7 @@ export default defineComponent({
451
492
  })
452
493
  }
453
494
  }
454
- }, 0)
495
+ }, 600)
455
496
  }
456
497
 
457
498
  // 在singleDemo情况时,才需要滚动示例区域到顶
@@ -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'
@@ -558,11 +602,9 @@ export default defineComponent({
558
602
 
559
603
  // F5刷新加载时,跳到当前示例
560
604
  // 应当在所有demo渲染完毕后在滚动,否则滚动完位置后,demo渲染会使滚动位置错位
561
- setTimeout(() => {
562
- nextTick(() => {
563
- scrollByHash(hash)
564
- })
565
- }, 0)
605
+ return allDemoMounted().then(() => {
606
+ scrollByHash(hash)
607
+ })
566
608
  })
567
609
  .finally(() => {
568
610
  // 获取组件贡献者
@@ -605,10 +647,12 @@ export default defineComponent({
605
647
  }
606
648
 
607
649
  const fn = {
650
+ demoMounted,
608
651
  copyText: (text) => {
609
652
  navigator.clipboard.writeText(text)
610
653
  },
611
- onTabsClick: () => {
654
+ onTabsClick: (data) => {
655
+ router.push(`#${data.name}`)
612
656
  scrollToLayoutTop()
613
657
  },
614
658
  // 点击 api区域的 name列时
@@ -667,6 +711,8 @@ export default defineComponent({
667
711
  state.currJson = {}
668
712
  } else {
669
713
  loadPage()
714
+ // 切换组件时tabs激活页变成demos
715
+ state.activeTab = 'demos'
670
716
  // 每次切换组件都需要让锚点组件重新刷新
671
717
  anchorRefreshKey.value++
672
718
  }
@@ -723,9 +769,13 @@ export default defineComponent({
723
769
  position: sticky;
724
770
  top: 0;
725
771
  z-index: var(--docs-header-zindex);
726
- padding: var(--ti-common-space-4x) var(--ti-common-space-10x);
772
+ padding: 16px 40px;
727
773
  background-color: #fff;
728
- box-shadow: var(--ti-common-space-3x) 0 var(--ti-common-space-5x) var(--ti-common-space-6) rgba(0, 0, 0, 0.06);
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
+ }
729
779
 
730
780
  .docs-title-wrap {
731
781
  flex: 1;
@@ -736,13 +786,13 @@ export default defineComponent({
736
786
 
737
787
  .markdown-top-body {
738
788
  z-index: var(--docs-markdown-top-body-zindex);
739
- font-size: var(--ti-common-font-size-1);
789
+ font-size: 14px;
740
790
  transition: all ease-in-out 0.3s;
741
791
 
742
792
  :deep(h1) {
743
793
  margin: 0;
744
794
  padding: 0;
745
- font-size: var(--ti-common-font-size-5);
795
+ font-size: 24px;
746
796
  line-height: 40px;
747
797
  }
748
798
  }
@@ -758,7 +808,7 @@ export default defineComponent({
758
808
  }
759
809
 
760
810
  .docs-content {
761
- margin: var(--ti-common-space-4x) 0 120px;
811
+ margin: 16px 0 120px;
762
812
  transition: all ease-in-out 0.3s;
763
813
 
764
814
  .docs-tabs-wrap {
@@ -766,14 +816,18 @@ export default defineComponent({
766
816
  display: flex;
767
817
  justify-content: center;
768
818
  min-width: 680px;
769
- padding: 0 var(--ti-common-space-10x);
819
+ padding: 0 40px;
770
820
  }
771
821
 
772
822
  .docs-content-tabs {
773
- --ti-tabs-heigh: 48px;
774
- --ti-tabs-item-font-size: var(--ti-common-font-size-3);
775
- --ti-tabs-header-font-active-text-color: #2f5bea;
776
- --ti-tabs-item-active-border-color: #2f5bea;
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
+ }
777
831
 
778
832
  flex: 1;
779
833
  transition: all ease-in-out 0.3s;
@@ -793,7 +847,7 @@ export default defineComponent({
793
847
  left: 0;
794
848
  display: block;
795
849
  width: 100%;
796
- height: var(--ti-common-size-4x);
850
+ height: 16px;
797
851
  background: linear-gradient(to bottom, #fff, transparent);
798
852
  transform: translateY(100%);
799
853
  }
@@ -812,9 +866,6 @@ export default defineComponent({
812
866
  }
813
867
 
814
868
  .api-table {
815
- --ti-grid-font-size: var(--ti-common-font-size-1);
816
- --ti-grid-default-header-column-height: var(--ti-common-size-10x);
817
-
818
869
  width: 100%;
819
870
  table-layout: fixed;
820
871
  border-collapse: collapse;
@@ -837,11 +888,20 @@ export default defineComponent({
837
888
  }
838
889
 
839
890
  :deep(.api-table-expand-col) {
840
- padding-left: var(--ti-common-space-4x);
891
+ padding-left: 16px;
841
892
  }
842
893
 
843
894
  :deep(.tiny-grid-body__expanded-cell) {
844
- background-color: var(--ti-common-color-bg-gray);
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;
845
905
  }
846
906
  }
847
907
 
@@ -855,7 +915,7 @@ export default defineComponent({
855
915
  flex: none;
856
916
  width: 200px;
857
917
  height: calc(100vh - 280px);
858
- padding-top: var(--ti-common-space-4x);
918
+ padding-top: 16px;
859
919
 
860
920
  .tiny-anchor__dot {
861
921
  max-height: calc(100vh - 300px);
@@ -898,19 +958,19 @@ export default defineComponent({
898
958
  .all-demos-container,
899
959
  .all-api-container {
900
960
  flex: 1;
901
- padding-top: var(--ti-common-space-8x);
961
+ padding-top: 32px;
902
962
  scroll-behavior: smooth;
903
963
  }
904
964
 
905
965
  .all-api-container {
906
- padding-top: var(--ti-common-space-3x);
966
+ padding-top: 12px;
907
967
  }
908
968
 
909
969
  .flex-horizontal {
910
970
  display: flex;
911
971
  justify-content: space-between;
912
972
  align-items: flex-start;
913
- column-gap: var(--ti-common-space-4x);
973
+ column-gap: 16px;
914
974
  }
915
975
 
916
976
  .cmp-container {
@@ -929,7 +989,6 @@ export default defineComponent({
929
989
  }
930
990
 
931
991
  :deep(.tiny-anchor-link) {
932
- margin-bottom: 10px;
933
992
  font-size: 12px;
934
993
 
935
994
  a {
@@ -945,8 +1004,8 @@ export default defineComponent({
945
1004
  margin-top: 48px;
946
1005
 
947
1006
  .cmp-contributor-title {
948
- margin-bottom: var(--ti-common-size-8x);
949
- font-size: var(--ti-common-font-size-4);
1007
+ margin-bottom: 32px;
1008
+ font-size: 20px;
950
1009
  font-weight: Semibold;
951
1010
  color: #191919;
952
1011
  }
@@ -954,8 +1013,8 @@ export default defineComponent({
954
1013
  .cmp-contributor-item {
955
1014
  width: 42px;
956
1015
  height: 42px;
957
- margin-right: var(--ti-common-space-3x);
958
- margin-bottom: var(--ti-common-space-5x);
1016
+ margin-right: 12px;
1017
+ margin-bottom: 20px;
959
1018
  display: inline-block;
960
1019
  border-radius: 50%;
961
1020
  overflow: hidden;
@@ -972,7 +1031,7 @@ export default defineComponent({
972
1031
  }
973
1032
 
974
1033
  .cmp-contributor-tip {
975
- font-size: var(--ti-common-font-size-1);
1034
+ font-size: 14px;
976
1035
  color: #191919;
977
1036
  }
978
1037
  }