@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.
@@ -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'
@@ -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.4",
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-design-aurora": "~3.18.0",
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="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,
@@ -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
- scrollByHash(hash)
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
- e.preventDefault()
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: var(--ti-common-space-4x) var(--ti-common-space-10x);
772
+ padding: 16px 40px;
721
773
  background-color: #fff;
722
- 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
+ }
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: var(--ti-common-font-size-1);
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: var(--ti-common-font-size-5);
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: var(--ti-common-space-4x) 0 120px;
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 var(--ti-common-space-10x);
819
+ padding: 0 40px;
764
820
  }
765
821
 
766
822
  .docs-content-tabs {
767
- --ti-tabs-heigh: 48px;
768
- --ti-tabs-item-font-size: var(--ti-common-font-size-3);
769
- --ti-tabs-header-font-active-text-color: #2f5bea;
770
- --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
+ }
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: var(--ti-common-size-4x);
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: var(--ti-common-space-4x);
891
+ padding-left: 16px;
835
892
  }
836
893
 
837
894
  :deep(.tiny-grid-body__expanded-cell) {
838
- 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;
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: var(--ti-common-space-4x);
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: var(--ti-common-space-8x);
961
+ padding-top: 32px;
896
962
  scroll-behavior: smooth;
897
963
  }
898
964
 
899
965
  .all-api-container {
900
- padding-top: var(--ti-common-space-3x);
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: var(--ti-common-space-4x);
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: var(--ti-common-size-8x);
943
- font-size: var(--ti-common-font-size-4);
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: var(--ti-common-space-3x);
952
- margin-bottom: var(--ti-common-space-5x);
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: var(--ti-common-font-size-1);
1034
+ font-size: 14px;
970
1035
  color: #191919;
971
1036
  }
972
1037
  }