@opentiny/vue-docs 3.17.3 → 3.17.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (216) hide show
  1. package/demos/apis/action-sheet.js +1 -1
  2. package/demos/apis/autocomplete.js +2 -2
  3. package/demos/apis/button-group.js +3 -0
  4. package/demos/apis/cascader.js +1 -1
  5. package/demos/apis/chart-attributes-demo.js +397 -291
  6. package/demos/apis/chart-autonavi-map.js +394 -296
  7. package/demos/apis/chart-baidu-map.js +394 -296
  8. package/demos/apis/chart-bar.js +394 -296
  9. package/demos/apis/chart-boxplot.js +394 -297
  10. package/demos/apis/chart-candle.js +394 -296
  11. package/demos/apis/chart-demo.js +397 -291
  12. package/demos/apis/chart-docs.js +403 -0
  13. package/demos/apis/chart-events.js +397 -291
  14. package/demos/apis/chart-funnel.js +394 -296
  15. package/demos/apis/chart-gauge.js +394 -296
  16. package/demos/apis/chart-graph.js +394 -296
  17. package/demos/apis/chart-heatmap.js +394 -296
  18. package/demos/apis/chart-histogram.js +394 -296
  19. package/demos/apis/chart-line.js +394 -296
  20. package/demos/apis/chart-liquidfill.js +394 -296
  21. package/demos/apis/chart-map.js +394 -296
  22. package/demos/apis/chart-pie.js +395 -297
  23. package/demos/apis/chart-process.js +28 -28
  24. package/demos/apis/chart-question.js +397 -291
  25. package/demos/apis/chart-radar.js +394 -296
  26. package/demos/apis/chart-ring.js +394 -296
  27. package/demos/apis/chart-sankey.js +394 -296
  28. package/demos/apis/chart-scatter.js +394 -296
  29. package/demos/apis/chart-sunburst.js +394 -296
  30. package/demos/apis/chart-tree.js +394 -296
  31. package/demos/apis/chart-waterfall.js +394 -296
  32. package/demos/apis/chart-wordcloud.js +394 -296
  33. package/demos/apis/chart.js +199 -81
  34. package/demos/apis/dialog-box.js +1 -1
  35. package/demos/apis/dialog-select.js +14 -0
  36. package/demos/apis/dropdown.js +16 -0
  37. package/demos/apis/file-upload.js +2 -1
  38. package/demos/apis/fluent-editor.js +110 -0
  39. package/demos/apis/form.js +1 -1
  40. package/demos/apis/grid.js +24 -0
  41. package/demos/apis/guide.js +1 -1
  42. package/demos/apis/input.js +15 -0
  43. package/demos/apis/numeric.js +6 -6
  44. package/demos/apis/search.js +11 -0
  45. package/demos/apis/switch.js +24 -0
  46. package/demos/apis/tabs.js +3 -5
  47. package/demos/apis/tree-menu.js +2 -13
  48. package/demos/apis/tree-select.js +192 -15
  49. package/demos/apis/tree.js +11 -0
  50. package/demos/mobile-first/app/file-upload/file-size-array.vue +19 -0
  51. package/demos/mobile-first/app/file-upload/file-size.vue +76 -0
  52. package/demos/mobile-first/app/file-upload/webdoc/file-upload.js +24 -0
  53. package/demos/mobile-first/app/grid/basic-usage.vue +5 -1
  54. package/demos/pc/app/cascader-panel/multiple-composition-api.vue +226 -0
  55. package/demos/pc/app/cascader-panel/multiple.spec.ts +15 -0
  56. package/demos/pc/app/cascader-panel/multiple.vue +234 -0
  57. package/demos/pc/app/cascader-panel/webdoc/cascader-panel.js +12 -0
  58. package/demos/pc/app/chart/webdoc/chart-docs.cn.md +126 -0
  59. package/demos/pc/app/chart/webdoc/chart-docs.en.md +127 -0
  60. package/demos/pc/app/chart/webdoc/chart-docs.js +6 -0
  61. package/demos/pc/app/chart/webdoc/chart-docs.json.cn.md +126 -0
  62. package/demos/pc/app/chart/webdoc/chart-docs.json.en.md +127 -0
  63. package/demos/pc/app/chart/webdoc/chart.cn.md +1 -1
  64. package/demos/pc/app/chart/webdoc/chart.en.md +1 -1
  65. package/demos/pc/app/color-picker/base.vue +1 -0
  66. package/demos/pc/app/dialog-box/webdoc/dialog-box.js +4 -2
  67. package/demos/pc/app/directives/highlight-query/avoid-composition-api.vue +52 -0
  68. package/demos/pc/app/directives/highlight-query/avoid.spec.js +15 -0
  69. package/demos/pc/app/directives/highlight-query/avoid.vue +65 -0
  70. package/demos/pc/app/directives/highlight-query/basic-usage-composition-api.vue +31 -0
  71. package/demos/pc/app/directives/highlight-query/basic-usage.spec.js +12 -0
  72. package/demos/pc/app/directives/highlight-query/basic-usage.vue +40 -0
  73. package/demos/pc/app/directives/webdoc/directives-highlight-query.cn.md +7 -0
  74. package/demos/pc/app/directives/webdoc/directives-highlight-query.en.md +7 -0
  75. package/demos/pc/app/directives/webdoc/directives-highlight-query.js +39 -0
  76. package/demos/pc/app/dropdown/lazy-show-popper-composition-api.vue +43 -0
  77. package/demos/pc/app/dropdown/lazy-show-popper.spec.ts +20 -0
  78. package/demos/pc/app/dropdown/lazy-show-popper.vue +47 -0
  79. package/demos/pc/app/dropdown/webdoc/dropdown.js +13 -0
  80. package/demos/pc/app/file-upload/file-size-array.vue +85 -0
  81. package/demos/pc/app/file-upload/file-size.vue +78 -0
  82. package/demos/pc/app/file-upload/webdoc/file-upload.js +24 -0
  83. package/demos/pc/app/form/message-type-composition-api.vue +1 -1
  84. package/demos/pc/app/form/message-type.vue +1 -1
  85. package/demos/pc/app/form/webdoc/form.js +2 -2
  86. package/demos/pc/app/grid/dynamically-columns/column-switching-scroll-composition-api.vue +81 -0
  87. package/demos/pc/app/grid/dynamically-columns/column-switching-scroll.spec.js +14 -0
  88. package/demos/pc/app/grid/dynamically-columns/column-switching-scroll.vue +89 -0
  89. package/demos/pc/app/grid/webdoc/grid-dynamically-columns.js +12 -0
  90. package/demos/pc/app/grid/webdoc/grid-pager.js +1 -1
  91. package/demos/pc/app/icon/iconGroups.js +278 -157
  92. package/demos/pc/app/input/basic-usage.spec.ts +1 -1
  93. package/demos/pc/app/input/show-tooltip-composition-api.vue +27 -0
  94. package/demos/pc/app/input/show-tooltip.spec.ts +10 -0
  95. package/demos/pc/app/input/show-tooltip.vue +34 -0
  96. package/demos/pc/app/input/webdoc/input.js +13 -0
  97. package/demos/pc/app/numeric/numeric-size-composition-api.vue +2 -0
  98. package/demos/pc/app/numeric/numeric-size.vue +2 -0
  99. package/demos/pc/app/numeric/webdoc/numeric.js +2 -2
  100. package/demos/pc/app/rich-text-editor/basic-usage.vue +2 -0
  101. package/demos/pc/app/search/slot-prefix-composition-api.vue +10 -2
  102. package/demos/pc/app/search/slot-prefix.spec.ts +1 -1
  103. package/demos/pc/app/search/slot-prefix.vue +16 -5
  104. package/demos/pc/app/search/webdoc/search.js +5 -4
  105. package/demos/pc/app/select/popup-style-position-composition-api.vue +1 -2
  106. package/demos/pc/app/select/popup-style-position.vue +1 -2
  107. package/demos/pc/app/slider/about-step-composition-api.vue +6 -0
  108. package/demos/pc/app/slider/about-step.vue +6 -0
  109. package/demos/pc/app/slider/basic-usage-composition-api.vue +6 -0
  110. package/demos/pc/app/slider/basic-usage.vue +6 -0
  111. package/demos/pc/app/slider/dynamic-disable-composition-api.vue +6 -0
  112. package/demos/pc/app/slider/dynamic-disable.vue +6 -0
  113. package/demos/pc/app/slider/format-tooltip-composition-api.vue +6 -0
  114. package/demos/pc/app/slider/format-tooltip.vue +6 -0
  115. package/demos/pc/app/slider/marks-composition-api.vue +7 -5
  116. package/demos/pc/app/slider/marks.vue +7 -5
  117. package/demos/pc/app/slider/max-min-composition-api.vue +6 -0
  118. package/demos/pc/app/slider/max-min.vue +6 -0
  119. package/demos/pc/app/slider/range-select-composition-api.vue +6 -0
  120. package/demos/pc/app/slider/range-select.vue +6 -0
  121. package/demos/pc/app/slider/shortcut-operation-composition-api.vue +6 -0
  122. package/demos/pc/app/slider/shortcut-operation.vue +6 -0
  123. package/demos/pc/app/slider/show-input-composition-api.vue +6 -0
  124. package/demos/pc/app/slider/show-input.vue +6 -0
  125. package/demos/pc/app/slider/show-tip-composition-api.vue +6 -0
  126. package/demos/pc/app/slider/show-tip.vue +6 -0
  127. package/demos/pc/app/slider/slider-event-composition-api.vue +6 -0
  128. package/demos/pc/app/slider/slider-event.vue +6 -0
  129. package/demos/pc/app/slider/slider-slot-composition-api.vue +6 -0
  130. package/demos/pc/app/slider/slider-slot.vue +6 -0
  131. package/demos/pc/app/slider/vertical-mode-composition-api.vue +6 -0
  132. package/demos/pc/app/slider/vertical-mode.vue +6 -0
  133. package/demos/pc/app/switch/custom-open-close-icon-composition-api.vue +20 -0
  134. package/demos/pc/app/switch/custom-open-close-icon.spec.ts +15 -0
  135. package/demos/pc/app/switch/custom-open-close-icon.vue +23 -0
  136. package/demos/pc/app/switch/webdoc/switch.js +13 -0
  137. package/demos/pc/app/tabs/basic-usage-composition-api.vue +1 -1
  138. package/demos/pc/app/tabs/basic-usage.vue +1 -1
  139. package/demos/pc/app/tabs/size-composition-api.vue +31 -0
  140. package/demos/pc/app/tabs/size.spec.ts +15 -0
  141. package/demos/pc/app/tabs/size.vue +41 -0
  142. package/demos/pc/app/tabs/tabs-second-layer-composition-api.vue +0 -1
  143. package/demos/pc/app/tabs/tabs-second-layer.vue +0 -1
  144. package/demos/pc/app/tabs/tabs-separator-composition-api.vue +3 -1
  145. package/demos/pc/app/tabs/tabs-separator.vue +3 -1
  146. package/demos/pc/app/tabs/webdoc/tabs.js +12 -0
  147. package/demos/pc/app/time-picker/default-value.spec.ts +1 -1
  148. package/demos/pc/app/time-picker/picker-options.spec.ts +4 -3
  149. package/demos/pc/app/tree/filter-view-composition-api.vue +9 -0
  150. package/demos/pc/app/tree/filter-view.spec.ts +8 -0
  151. package/demos/pc/app/tree/filter-view.vue +9 -0
  152. package/demos/pc/app/tree/webdoc/tree.js +2 -0
  153. package/demos/pc/app/tree-menu/custom-icon-composition-api.vue +1 -1
  154. package/demos/pc/app/tree-menu/custom-icon.vue +1 -1
  155. package/demos/pc/app/tree-menu/webdoc/tree-menu.js +2 -2
  156. package/demos/pc/app/tree-select/basic-usage-composition-api.vue +55 -0
  157. package/demos/pc/app/tree-select/basic-usage.spec.ts +20 -0
  158. package/demos/pc/app/tree-select/basic-usage.vue +62 -0
  159. package/demos/pc/app/tree-select/collapse-tags-composition-api.vue +71 -0
  160. package/demos/pc/app/tree-select/collapse-tags.vue +78 -0
  161. package/demos/pc/app/tree-select/copy-composition-api.vue +70 -0
  162. package/demos/pc/app/tree-select/copy.vue +78 -0
  163. package/demos/pc/app/tree-select/disabled-composition-api.vue +69 -0
  164. package/demos/pc/app/tree-select/disabled.vue +76 -0
  165. package/demos/pc/app/tree-select/map-field-composition-api.vue +55 -0
  166. package/demos/pc/app/tree-select/map-field.vue +62 -0
  167. package/demos/pc/app/tree-select/multiple-composition-api.vue +55 -0
  168. package/demos/pc/app/tree-select/multiple.vue +62 -0
  169. package/demos/pc/app/tree-select/native-properties-composition-api.vue +61 -0
  170. package/demos/pc/app/tree-select/native-properties.vue +68 -0
  171. package/demos/pc/app/tree-select/panel-style-composition-api.vue +73 -0
  172. package/demos/pc/app/tree-select/panel-style.vue +80 -0
  173. package/demos/pc/app/tree-select/reference-style-composition-api.vue +76 -0
  174. package/demos/pc/app/tree-select/reference-style.vue +83 -0
  175. package/demos/pc/app/tree-select/size-composition-api.vue +69 -0
  176. package/demos/pc/app/tree-select/size.vue +76 -0
  177. package/demos/pc/app/tree-select/webdoc/tree-select.cn.md +7 -0
  178. package/demos/pc/app/tree-select/webdoc/tree-select.en.md +7 -0
  179. package/demos/pc/app/tree-select/webdoc/tree-select.js +142 -0
  180. package/demos/pc/menus.js +12 -2
  181. package/demos/pc/overviewimage/chart-docs.svg +44 -0
  182. package/package.json +7 -7
  183. package/playground/App.vue +1 -0
  184. package/src/assets/images/Infinitely-icon.png +0 -0
  185. package/src/assets/images/Infinitely.png +0 -0
  186. package/src/assets/images/glaciers-icon.png +0 -0
  187. package/src/assets/images/glaciers.png +0 -0
  188. package/src/assets/images/oceanic-icon.png +0 -0
  189. package/src/assets/images/oceanic.png +0 -0
  190. package/src/assets/images/starry-sky-icon.png +0 -0
  191. package/src/assets/images/starry-sky.png +0 -0
  192. package/src/i18n/en.json +4 -2
  193. package/src/i18n/zh.json +4 -2
  194. package/src/style.css +10 -2
  195. package/src/tools/appData.js +7 -10
  196. package/src/tools/useApiMode.js +5 -0
  197. package/src/tools/useStyleSettings.js +16 -0
  198. package/src/tools/useTheme.js +39 -4
  199. package/src/views/components/components.vue +14 -6
  200. package/src/views/components/demo.vue +4 -4
  201. package/src/views/components/float-settings.vue +124 -98
  202. package/src/views/layout/layout.vue +1 -1
  203. package/vite.config.ts +2 -1
  204. package/demos/mobile-first/app/time-line-new/auto-slot.vue +0 -50
  205. package/demos/mobile-first/app/time-line-new/basic-usage.vue +0 -23
  206. package/demos/mobile-first/app/time-line-new/fold-time.vue +0 -29
  207. package/demos/mobile-first/app/time-line-new/limited-nodes.vue +0 -29
  208. package/demos/mobile-first/app/time-line-new/many-status.vue +0 -24
  209. package/demos/mobile-first/app/time-line-new/node-max.vue +0 -26
  210. package/demos/mobile-first/app/time-line-new/node-toset.vue +0 -32
  211. package/demos/mobile-first/app/time-line-new/single-status.vue +0 -40
  212. package/demos/mobile-first/app/time-line-new/sub-field.vue +0 -23
  213. package/demos/mobile-first/app/time-line-new/webdoc/time-line-new.cn.md +0 -9
  214. package/demos/mobile-first/app/time-line-new/webdoc/time-line-new.en.md +0 -9
  215. package/demos/mobile-first/app/time-line-new/webdoc/time-line-new.js +0 -120
  216. /package/demos/pc/app/slider/{show-iput.spec.ts → show-input.spec.ts} +0 -0
@@ -11,17 +11,14 @@ const appData = reactive({
11
11
  bpState: useMediaQuery([640, 1024, 1280]).matches // 3点4区间, bp0,bp1,bp2,bp3
12
12
  })
13
13
  const isZhCn = computed(() => appData.lang === ZH_CN_LANG)
14
- let appFn = {
15
- toggleLang() {
16
- let url = location.href
17
- if (appData.lang === ZH_CN_LANG) {
18
- url = location.href.replace(zhPath, enPath)
19
- } else {
20
- url = location.href.replace(enPath, zhPath)
14
+ const appFn = {
15
+ toggleLang(name) {
16
+ if (name !== appData.lang) {
17
+ let url = location.href
18
+ url = location.href.replace(LANG_PATH_MAP[appData.lang], LANG_PATH_MAP[name])
19
+ appData.lang = name
20
+ location.replace(url)
21
21
  }
22
- appData.lang = appData.lang === ZH_CN_LANG ? EN_US_LANG : ZH_CN_LANG
23
- // router.push(url)
24
- location.replace(url)
25
22
  },
26
23
  toggleTheme() {
27
24
  appData.theme = appData.theme === 'light' ? 'dark' : 'light'
@@ -1,9 +1,11 @@
1
1
  import { reactive } from 'vue'
2
2
  import { $local } from './storage'
3
+ import { appFn } from './appData'
3
4
 
4
5
  const _modeKey = 'tiny-vue-api-mode'
5
6
  const _demoModeKey = 'tiny-vue-demo-mode'
6
7
  const apiModeState = reactive({
8
+ localeMode: location.href.includes('en-US') ? 'enUS' : 'zhCN',
7
9
  apiMode: $local[_modeKey] || 'Composition', // 示例风格: Options: 组合式; Composition: 选项式
8
10
  demoMode: $local[_demoModeKey] || 'default' // 示例展示: default:多示例, single:单示例
9
11
  })
@@ -12,6 +14,9 @@ const apiModeFn = {
12
14
  getDemoName: (name) => {
13
15
  return name.replace(/\.vue$/, `${apiModeState.apiMode === 'Options' ? '' : '-composition-api'}.vue`)
14
16
  },
17
+ changeLocaleMode: (name) => {
18
+ appFn.toggleLang(name)
19
+ },
15
20
  changeApiMode: (name) => {
16
21
  $local[_modeKey] = name
17
22
  },
@@ -1,6 +1,22 @@
1
1
  /** 文档显示风格设置 */
2
2
  const getStyleSettings = (i18nByKey) => {
3
3
  const styleSettings = [
4
+ {
5
+ // 语言选择
6
+ name: 'localeMode',
7
+ defaultValue: 'zhCN',
8
+ title: i18nByKey('localeType'),
9
+ options: [
10
+ {
11
+ value: 'zhCN',
12
+ text: i18nByKey('zh-cn')
13
+ },
14
+ {
15
+ value: 'enUS',
16
+ text: i18nByKey('en-us')
17
+ }
18
+ ]
19
+ },
4
20
  {
5
21
  // 示例代码风格
6
22
  name: 'apiMode',
@@ -16,6 +16,17 @@ import {
16
16
  INFINITY_THEME,
17
17
  getKeyByValue
18
18
  } from '../const'
19
+ import glaciers from '@/assets/images/glaciers.png'
20
+ import glaciersIcon from '@/assets/images/glaciers-icon.png'
21
+
22
+ import infinitely from '@/assets/images/Infinitely.png'
23
+ import infinitelyIcon from '@/assets/images/Infinitely-icon.png'
24
+
25
+ import oceanic from '@/assets/images/oceanic.png'
26
+ import oceanicIcon from '@/assets/images/oceanic-icon.png'
27
+
28
+ import starrySky from '@/assets/images/starry-sky.png'
29
+ import starrySkyIcon from '@/assets/images/starry-sky-icon.png'
19
30
 
20
31
  const themeMap = {
21
32
  [DEFAULT_THEME]: null,
@@ -27,10 +38,34 @@ const themeMap = {
27
38
  const isEn = appData.lang === 'enUS'
28
39
 
29
40
  const themeData = [
30
- { value: [DEFAULT_THEME], label: isEn ? 'Default Theme' : '默认主题' },
31
- { value: [INFINITY_THEME], label: isEn ? 'Infinity Theme' : '无限主题' },
32
- { value: [AURORA_THEME], label: isEn ? 'Aurora Theme' : 'Aurora 主题' },
33
- { value: [SMB_THEME], label: isEn ? 'SMB Theme' : 'SMB 主题' }
41
+ {
42
+ value: [DEFAULT_THEME],
43
+ label: isEn ? 'Default Theme' : '冰川主题',
44
+ tips: isEn ? 'Accurate, Efficient, Distinct' : '精准、高效、清晰',
45
+ icon: glaciersIcon,
46
+ bgImage: glaciers
47
+ },
48
+ {
49
+ value: [SMB_THEME],
50
+ label: isEn ? 'Star Theme' : '星空主题',
51
+ tips: isEn ? 'Leading, Innovative, Reliable' : '领先、创新、信赖',
52
+ icon: starrySkyIcon,
53
+ bgImage: starrySky
54
+ },
55
+ {
56
+ value: [AURORA_THEME],
57
+ label: isEn ? 'Ocean Theme' : '海洋主题',
58
+ tips: isEn ? 'Simple, Agile, Delightful' : '简约、敏捷、愉悦',
59
+ icon: oceanicIcon,
60
+ bgImage: oceanic
61
+ },
62
+ {
63
+ value: [INFINITY_THEME],
64
+ label: isEn ? 'Infinity Theme' : '无限主题',
65
+ tips: isEn ? 'Creative, Scientific, Efficient' : '创造、科学、高效',
66
+ icon: infinitelyIcon,
67
+ bgImage: infinitely
68
+ }
34
69
  ]
35
70
 
36
71
  const designConfigMap = {
@@ -150,7 +150,6 @@
150
150
  class="api-table"
151
151
  :data="tableData[oneGroup.name][key]"
152
152
  :expand-config="apiExpandConf"
153
- :row-class-name="setCurrRowClass"
154
153
  row-id="name"
155
154
  >
156
155
  <tiny-grid-column class-name="api-table-expand-col" type="expand" width="32">
@@ -242,6 +241,7 @@
242
241
  <script lang="jsx">
243
242
  import { defineComponent, reactive, computed, toRefs, watch, onMounted, ref, onUnmounted, nextTick } from 'vue'
244
243
  import { marked } from 'marked'
244
+ import hljs from 'highlight.js'
245
245
  import { Anchor, ButtonGroup, Grid, GridColumn, Tabs, TabItem, Tooltip } from '@opentiny/vue'
246
246
  import { iconOuterLink } from '@opentiny/vue-icon'
247
247
  import debounce from '@opentiny/vue-renderless/common/deps/debounce'
@@ -497,7 +497,13 @@ export default defineComponent({
497
497
  Promise.all(promiseArr)
498
498
  .then(([mdData, jsData, apiData, faqData]) => {
499
499
  // 1、加载顶部md
500
- state.cmpTopMd = marked(mdData)
500
+ state.cmpTopMd = marked(mdData, {
501
+ gfm: true,
502
+ highlight(code, language) {
503
+ const validLanguage = hljs.getLanguage(language) ? language : 'plaintext'
504
+ return hljs.highlight(code, { language: validLanguage }).value
505
+ }
506
+ })
501
507
 
502
508
  // 2、加载faq.md
503
509
  if (faqData) {
@@ -710,7 +716,7 @@ export default defineComponent({
710
716
  .docs-header {
711
717
  position: sticky;
712
718
  top: 0;
713
- z-index: 200;
719
+ z-index: var(--docs-header-zindex);
714
720
  padding: var(--ti-common-space-4x) var(--ti-common-space-10x);
715
721
  background-color: #fff;
716
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);
@@ -723,7 +729,7 @@ export default defineComponent({
723
729
  }
724
730
 
725
731
  .markdown-top-body {
726
- z-index: 99;
732
+ z-index: var(--docs-markdown-top-body-zindex);
727
733
  font-size: var(--ti-common-font-size-1);
728
734
  transition: all ease-in-out 0.3s;
729
735
 
@@ -771,7 +777,7 @@ export default defineComponent({
771
777
  :deep(> .tiny-tabs__header) {
772
778
  position: sticky;
773
779
  top: 90px;
774
- z-index: 100;
780
+ z-index: var(--docs-tabs-header-zindex);
775
781
  background-color: #fff;
776
782
 
777
783
  &::after {
@@ -791,7 +797,8 @@ export default defineComponent({
791
797
  }
792
798
  }
793
799
 
794
- :deep(.tiny-tabs__content) {
800
+ & > :deep(.tiny-tabs__content) {
801
+ // 不能影响到tabs组件的样式
795
802
  margin: 0;
796
803
  overflow: visible;
797
804
  }
@@ -818,6 +825,7 @@ export default defineComponent({
818
825
  fill: #5e7ce0;
819
826
  }
820
827
  }
828
+
821
829
  &-name:has(+ .version-tip) {
822
830
  margin-right: 4px;
823
831
  }
@@ -43,7 +43,7 @@
43
43
  </tiny-tooltip>
44
44
  </div>
45
45
  </div>
46
- <component :is="getDescMd(demo)" class="demo-desc" />
46
+ <component :is="getDescMd(demo)" class="demo-desc markdown-body" />
47
47
 
48
48
  <div v-if="isMobileFirst" class="pc-demo-container">
49
49
  <tiny-button @click="openPlayground(demo, false)">多端预览</tiny-button>
@@ -192,9 +192,9 @@ export default defineComponent({
192
192
  const tinyTheme = templateModeState.isSaas ? 'saas' : currentThemeKey.value.split('-')[1]
193
193
  const openModeQuery = open ? '' : '&openMode=preview'
194
194
  // TODO: 目前mf只有Options写法,后续再放开compositon
195
- const url = `${import.meta.env.VITE_PLAYGROUND_URL}?cmpId=${cmpId}&fileName=${
196
- demo.codeFiles[0]
197
- }&apiMode=Options&mode=${templateModeState.mode}&theme=${tinyTheme}${openModeQuery}`
195
+ const url = `${import.meta.env.VITE_PLAYGROUND_URL}?cmpId=${cmpId}&fileName=${demo.codeFiles[0]}&apiMode=${
196
+ isMobileFirst.value ? 'Options' : apiModeState.apiMode
197
+ }&mode=${templateModeState.mode}&theme=${tinyTheme}${openModeQuery}`
198
198
 
199
199
  if (open) {
200
200
  window.open(url)
@@ -5,69 +5,70 @@
5
5
  :style="settingsStyle"
6
6
  >
7
7
  <!-- 切换主题样式 -->
8
- <tiny-dropdown trigger="click" :show-icon="false" @visible-change="(visible) => toggleMenuShow(visible, 'theme')">
9
- <tiny-tooltip
10
- :content="i18nByKey('changeTheme')"
11
- :placement="isSettingsAside ? 'left' : 'right'"
12
- popper-class="docs-tooltip"
13
- effect="light"
14
- >
8
+ <tiny-popover
9
+ width="404"
10
+ placement="left-end"
11
+ trigger="click"
12
+ :visible-arrow="false"
13
+ popper-class="theme-settings-popover"
14
+ >
15
+ <div class="theme-settings-menu">
16
+ <div class="theme-settings-title">{{ i18nByKey('changeTheme') }}</div>
17
+ <div
18
+ v-for="(item, index) in themeData"
19
+ :key="item.text + index"
20
+ :class="['theme-option-list', { 'is-active-popover': item.value === currentThemeKey }]"
21
+ :style="{ backgroundImage: 'url(' + item.bgImage + ')' }"
22
+ @click="themeItemClick(item)"
23
+ >
24
+ <div class="theme-option-list-icon" :style="{ backgroundImage: 'url(' + item.icon + ')' }"></div>
25
+ <div>
26
+ <div class="theme-option-list-text">
27
+ {{ item.text }}
28
+ </div>
29
+ <div class="theme-option-list-tips">
30
+ {{ item.tips }}
31
+ </div>
32
+ </div>
33
+ </div>
34
+ </div>
35
+ <template #reference>
15
36
  <div class="settings-btn theme-change-button">
16
- <theme-settings-icon
17
- :class="['settings-icon theme-settings-icon', { 'is-active': showThemeMenu }]"
18
- ></theme-settings-icon>
37
+ <theme-settings-icon class="settings-icon theme-settings-icon"></theme-settings-icon>
19
38
  </div>
20
- </tiny-tooltip>
21
- <template #dropdown>
22
- <tiny-dropdown-menu popper-class="opt-menu theme-settings-menu">
23
- <div v-for="(item, index) in themeData" :key="index" class="theme-option-list">
24
- <tiny-button
25
- ghost
26
- :class="['theme-option', { 'is-active': item.value === currentThemeKey }]"
27
- @click="themeItemClick(item)"
28
- >{{ item.text }}</tiny-button
29
- >
30
- </div>
31
- </tiny-dropdown-menu>
32
39
  </template>
33
- </tiny-dropdown>
40
+ </tiny-popover>
34
41
 
35
42
  <!-- demo风格设置 -->
36
- <tiny-dropdown
43
+ <tiny-popover
37
44
  v-if="!templateModeState.isSaas"
38
- trigger="click"
39
- :show-icon="false"
40
- @visible-change="(visible) => toggleMenuShow(visible, 'style')"
45
+ width="180"
46
+ placement="left-end"
47
+ trigger="manual"
48
+ :visible-arrow="false"
49
+ v-model="demoStyleVisible"
50
+ popper-class="opt-menu style-settings-menu theme-settings-popover"
41
51
  >
42
- <tiny-tooltip
43
- :content="i18nByKey('changeApiType')"
44
- :placement="isSettingsAside ? 'left' : 'right'"
45
- popper-class="docs-tooltip"
46
- effect="light"
47
- >
48
- <div class="settings-btn style-settings-btn">
49
- <style-settings-icon
50
- :class="['settings-icon style-settings-icon', { 'is-active': showStyleMenu }]"
51
- ></style-settings-icon>
52
+ <div v-for="(item, index) in styleSettings" :key="index" class="style-settings-item">
53
+ <p class="style-settings-title">{{ item.title }}</p>
54
+ <tiny-radio-group
55
+ v-model="apiModeState[item.name]"
56
+ class="style-settings-options-group"
57
+ @change="onSettingsChange(item.name)"
58
+ >
59
+ <tiny-radio v-for="option in item.options" :key="option" :label="option.value">{{ option.text }}</tiny-radio>
60
+ </tiny-radio-group>
61
+ </div>
62
+ <template #reference>
63
+ <div
64
+ class="settings-btn style-settings-btn"
65
+ @click="demoStyleVisible = !demoStyleVisible"
66
+ @blur="demoStyleVisible = false"
67
+ >
68
+ <style-settings-icon class="settings-icon style-settings-icon"></style-settings-icon>
52
69
  </div>
53
- </tiny-tooltip>
54
- <template #dropdown>
55
- <tiny-dropdown-menu popper-class="opt-menu style-settings-menu">
56
- <div v-for="(item, index) in styleSettings" :key="index" class="style-settings-item">
57
- <p class="style-settings-title">{{ item.title }}</p>
58
- <tiny-radio-group
59
- v-model="apiModeState[item.name]"
60
- class="style-settings-options-group"
61
- @change="onSettingsChange(item.name)"
62
- >
63
- <tiny-radio v-for="option in item.options" :key="option" :label="option.value">{{
64
- option.text
65
- }}</tiny-radio>
66
- </tiny-radio-group>
67
- </div>
68
- </tiny-dropdown-menu>
69
70
  </template>
70
- </tiny-dropdown>
71
+ </tiny-popover>
71
72
 
72
73
  <!-- 返回顶部 -->
73
74
  <div v-show="showBackTop" @click="onBackTop">
@@ -87,7 +88,7 @@
87
88
 
88
89
  <script>
89
90
  import { defineComponent, reactive, toRefs, onMounted, onUnmounted, watch, nextTick, ref } from 'vue'
90
- import { Dropdown, DropdownMenu, Tooltip, Radio, RadioGroup, Button } from '@opentiny/vue'
91
+ import { Tooltip, Radio, RadioGroup, Popover } from '@opentiny/vue'
91
92
  import { iconUpWard } from '@opentiny/vue-icon'
92
93
  import debounce from '@opentiny/vue-renderless/common/deps/debounce'
93
94
  import { i18nByKey, useApiMode, useTemplateMode } from '@/tools'
@@ -100,13 +101,11 @@ import StyleSettingsIcon from '@/assets/images/style-settings.svg'
100
101
  export default defineComponent({
101
102
  name: 'FloatSettings',
102
103
  components: {
103
- TinyDropdown: Dropdown,
104
- TinyDropdownMenu: DropdownMenu,
105
104
  TinyTooltip: Tooltip,
106
105
  TinyRadio: Radio,
107
106
  TinyRadioGroup: RadioGroup,
108
- TinyButton: Button,
109
107
  IconUpWard: iconUpWard(),
108
+ TinyPopover: Popover,
110
109
  ThemeSettingsIcon,
111
110
  StyleSettingsIcon
112
111
  },
@@ -120,9 +119,8 @@ export default defineComponent({
120
119
  const isPlus = import.meta.env.VITE_APP_MODE === 'plus'
121
120
 
122
121
  const state = reactive({
122
+ demoStyleVisible: false,
123
123
  themeData: [],
124
- showThemeMenu: false,
125
- showStyleMenu: false,
126
124
  styleSettings: getStyleSettings(i18nByKey),
127
125
  settingsStyle: {
128
126
  bottom: DEFAULT_BOTTOM_VAL
@@ -133,7 +131,7 @@ export default defineComponent({
133
131
  })
134
132
 
135
133
  if (isPlus) {
136
- state.styleSettings = state.styleSettings.filter((item) => item.defaultValue === 'default')
134
+ state.styleSettings = state.styleSettings.filter((item) => item.name !== 'apiMode')
137
135
  apiModeState.apiMode = 'Options'
138
136
  }
139
137
 
@@ -147,6 +145,10 @@ export default defineComponent({
147
145
  },
148
146
  onSettingsChange(modeType) {
149
147
  switch (modeType) {
148
+ case 'localeMode': {
149
+ apiModeFn.changeLocaleMode(apiModeState[modeType])
150
+ break
151
+ }
150
152
  case 'apiMode': {
151
153
  apiModeFn.changeApiMode(apiModeState[modeType])
152
154
  break
@@ -162,21 +164,16 @@ export default defineComponent({
162
164
  themeItemClick(node) {
163
165
  const val = node?.value || 'tiny-smb-theme'
164
166
  changeTheme(val)
165
- },
166
-
167
- toggleMenuShow(visible, type) {
168
- if (type === 'theme') {
169
- state.showThemeMenu = visible
170
- } else if (type === 'style') {
171
- state.showStyleMenu = visible
172
- }
173
167
  }
174
168
  }
175
169
 
176
170
  const getThemeOptions = () => {
177
171
  const themeData = getThemeData().map((item) => ({
178
172
  value: item.value[0],
179
- text: item.label
173
+ text: item.label,
174
+ tips: item.tips,
175
+ icon: item.icon,
176
+ bgImage: item.bgImage
180
177
  }))
181
178
  state.themeData = themeData
182
179
  }
@@ -261,7 +258,7 @@ export default defineComponent({
261
258
  display: flex;
262
259
  flex-direction: column;
263
260
  column-gap: var(--ti-common-space-3x);
264
- z-index: 999;
261
+ z-index: var(--docs-float-settings-zindex);
265
262
  transition: all 0.3s linear;
266
263
 
267
264
  &.float-settings--aside {
@@ -306,10 +303,6 @@ export default defineComponent({
306
303
  width: var(--ti-common-size-4x);
307
304
  height: var(--ti-common-size-4x);
308
305
  color: #595959;
309
-
310
- &.is-active {
311
- color: var(--ti-common-color-primary-normal);
312
- }
313
306
  }
314
307
  }
315
308
  }
@@ -320,13 +313,6 @@ export default defineComponent({
320
313
  border-radius: var(--ti-common-space-3x);
321
314
  box-shadow: 0px 4px 20px 0px rgba(0, 0, 0, 0.15);
322
315
 
323
- &.theme-settings-menu {
324
- display: flex;
325
- flex-direction: column;
326
- justify-content: center;
327
- align-items: center;
328
- }
329
-
330
316
  &.style-settings-menu {
331
317
  padding: 14px;
332
318
 
@@ -338,6 +324,7 @@ export default defineComponent({
338
324
  font-size: var(--ti-common-font-size-base);
339
325
  line-height: var(--ti-common-line-height-6);
340
326
  font-weight: 600;
327
+ color: #000000;
341
328
  }
342
329
 
343
330
  .style-settings-options-group {
@@ -357,25 +344,64 @@ export default defineComponent({
357
344
  }
358
345
  }
359
346
  }
347
+ }
348
+ .tiny-popover.tiny-popper.theme-settings-popover {
349
+ border-radius: 12px;
350
+ background-color: #ffffff;
351
+ }
360
352
 
361
- .theme-option-list {
362
- display: flex;
363
- flex-direction: column;
364
- align-items: center;
365
- width: 154px;
366
-
367
- .theme-option {
368
- display: inline-block;
369
- width: 126px;
370
- border: none;
371
- border-radius: var(--ti-common-space-2x);
372
-
373
- &.is-active {
374
- background-color: rgba(0, 0, 0, 0.05);
375
- }
376
- }
353
+ .theme-settings-menu {
354
+ width: 404px;
355
+ display: flex;
356
+ padding: 15px 32px;
357
+ flex-direction: column;
358
+ margin: 0;
359
+ .theme-settings-title {
360
+ height: 20px;
361
+ line-height: 20px;
362
+ color: #000000;
363
+ font-weight: 700;
364
+ }
365
+ }
366
+ .theme-option-list {
367
+ display: flex;
368
+ align-items: center;
369
+ justify-content: start;
370
+ background-color: aliceblue;
371
+ cursor: pointer;
372
+ margin-top: 20px;
373
+ width: 308px;
374
+ height: 64px;
375
+ border: 1px solid #ffffff;
376
+ border-radius: 8px;
377
+ background-repeat: no-repeat;
378
+ .theme-option-list-icon {
379
+ width: 32px;
380
+ height: 32px;
381
+ margin: 16px 24px;
382
+ }
383
+ .theme-option-list-text {
384
+ height: 22px;
385
+ line-height: 22px;
386
+ font-size: 14px;
387
+ color: #202e54;
388
+ font-weight: 700;
389
+ }
390
+ .theme-option-list-tips {
391
+ height: 20px;
392
+ line-height: 20px;
393
+ font-size: 14px;
394
+ color: #808080;
395
+ font-weight: 500;
377
396
  }
378
397
  }
398
+ .theme-option-list:hover {
399
+ border-color: rgba(0, 0, 0, 0.05);
400
+ box-shadow: 0px 4px 20px 0px rgba(0, 0, 0, 0.15);
401
+ }
402
+ .is-active-popover {
403
+ border-color: #1476ff;
404
+ }
379
405
 
380
406
  @media (max-width: 1279px) {
381
407
  .float-settings {
@@ -386,7 +386,7 @@ export default defineComponent({
386
386
  }
387
387
  #layoutSider.showMenu {
388
388
  display: block !important;
389
- z-index: 9;
389
+ z-index: var(--docs-layout-sider-zindex);
390
390
  }
391
391
  }
392
392
  </style>
package/vite.config.ts CHANGED
@@ -111,7 +111,8 @@ export default defineConfig((config) => {
111
111
  __VUE_I18N_LEGACY_API__: true,
112
112
  __INTLIFY_PROD_DEVTOOLS__: false,
113
113
  __INTLIFY_JIT_COMPILATION__: false,
114
- __INTLIFY_DROP_MESSAGE_COMPILER__: false
114
+ __INTLIFY_DROP_MESSAGE_COMPILER__: false,
115
+ __VUE_PROD_HYDRATION_MISMATCH_DETAILS__: false
115
116
  }
116
117
  }
117
118
 
@@ -1,50 +0,0 @@
1
- <template>
2
- <div class="flex justify-between">
3
- <tiny-time-line :data="data">
4
- <template #left="data">
5
- <div class="ml-1.5 -mt-1.5">
6
- <tiny-user-head type="image" round v-model="imgUrl" :size="32"></tiny-user-head>
7
- </div>
8
- <span class="ml-2 inline-block text-xs leading-5 mb-6">
9
- {{ data.slotScope.title }}
10
- </span>
11
- </template>
12
- </tiny-time-line>
13
-
14
- <tiny-time-line :data="data1">
15
- <template #left="data1">
16
- <div class="ml-1.5 -mt-1.5">
17
- <tiny-user-head type="image" round v-model="imgUrl" :size="32"></tiny-user-head>
18
- </div>
19
- <span class="ml-2 inline-block text-xs leading-5 mb-6">
20
- {{ data1.slotScope.title }}
21
- </span>
22
- </template>
23
- </tiny-time-line>
24
- </div>
25
- </template>
26
-
27
- <script>
28
- import { TimeLineNew, UserHead } from '@opentiny/vue'
29
- import { IconLoading } from '@opentiny/vue-icon'
30
-
31
- export default {
32
- components: {
33
- TinyTimeLine: TimeLineNew,
34
- TinyUserHead: UserHead
35
- },
36
- data() {
37
- return {
38
- imgUrl: `${import.meta.env.VITE_APP_BUILD_BASE_URL}static/images/1.jpg`,
39
- data: [{ title: '节点标题1' }, { title: '节点标题2' }, { title: '节点标题3' }, { title: '节点标题4' }],
40
- data1: [
41
- { title: '节点标题1' },
42
- { title: '节点标题2' },
43
- { title: '节点标题3' },
44
- { title: '节点标题4' },
45
- { title: '节点标题5', autoColor: IconLoading() }
46
- ]
47
- }
48
- }
49
- }
50
- </script>
@@ -1,23 +0,0 @@
1
- <template>
2
- <tiny-time-line :data="data"></tiny-time-line>
3
- </template>
4
-
5
- <script>
6
- import { TimeLineNew } from '@opentiny/vue'
7
-
8
- export default {
9
- components: {
10
- TinyTimeLine: TimeLineNew
11
- },
12
- data() {
13
- return {
14
- data: [
15
- { name: '节点标题', time: '2022-11-11 00:01:30' },
16
- { name: '节点标题', time: '2022-11-12 14:20:15' },
17
- { name: '节点标题', time: '2022-11-14 20:45:50' },
18
- { name: '节点标题', time: '2022-11-14 20:45:50' }
19
- ]
20
- }
21
- }
22
- }
23
- </script>
@@ -1,29 +0,0 @@
1
- <template>
2
- <tiny-time-line :data="data" vertical></tiny-time-line>
3
- </template>
4
-
5
- <script>
6
- import { TimeLineNew } from '@opentiny/vue'
7
-
8
- export default {
9
- components: {
10
- TinyTimeLine: TimeLineNew
11
- },
12
- data() {
13
- return {
14
- active: 1,
15
- data: [
16
- { name: '节点标题', time: '2019-11-11 00:01:30' },
17
- { name: '节点标题', time: '2019-11-12 14:20:15' },
18
- { name: '节点标题', time: '2019-11-14 20:45:50' },
19
- { name: '节点标题', time: '2019-11-11 00:01:30' },
20
- { name: '节点标题', time: '2019-11-12 14:20:15' },
21
- { name: '节点标题', time: '2019-11-14 20:45:50' },
22
- { name: '节点标题', time: '2019-11-11 00:01:30' },
23
- { name: '节点标题', time: '2019-11-12 14:20:15' },
24
- { name: '节点标题', time: '2019-11-14 20:45:50' }
25
- ]
26
- }
27
- }
28
- }
29
- </script>