diff --git a/examples/sites/demos/pc/app/skeleton/base-composition-api.vue b/examples/sites/demos/pc/app/skeleton/base-composition-api.vue
new file mode 100644
index 000000000..387bb8c06
--- /dev/null
+++ b/examples/sites/demos/pc/app/skeleton/base-composition-api.vue
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
diff --git a/examples/sites/demos/pc/app/skeleton/base.spec.ts b/examples/sites/demos/pc/app/skeleton/base.spec.ts
new file mode 100644
index 000000000..7d0757f6f
--- /dev/null
+++ b/examples/sites/demos/pc/app/skeleton/base.spec.ts
@@ -0,0 +1,14 @@
+import { expect, test } from '@playwright/test'
+
+test('基本用法', async ({ page }) => {
+ page.on('pageerror', (exception) => expect(exception).toBeNull())
+ await page.goto('skeleton#basic')
+
+ const first = page.locator('.tiny-skeleton')
+ const children = page.locator('.tiny-skeleton-item')
+ const active = page.locator('.tiny-skeleton-item--active')
+
+ await expect(first).toHaveCount(1)
+ await expect(children).toHaveCount(4)
+ await expect(active).toHaveCount(4)
+})
diff --git a/examples/sites/demos/pc/app/skeleton/base.vue b/examples/sites/demos/pc/app/skeleton/base.vue
new file mode 100644
index 000000000..0347d8002
--- /dev/null
+++ b/examples/sites/demos/pc/app/skeleton/base.vue
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
diff --git a/examples/sites/demos/pc/app/skeleton/complex-demo-composition-api.vue b/examples/sites/demos/pc/app/skeleton/complex-demo-composition-api.vue
new file mode 100644
index 000000000..973148b79
--- /dev/null
+++ b/examples/sites/demos/pc/app/skeleton/complex-demo-composition-api.vue
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
diff --git a/examples/sites/demos/pc/app/skeleton/complex-demo.spec.ts b/examples/sites/demos/pc/app/skeleton/complex-demo.spec.ts
new file mode 100644
index 000000000..fc4dd25b7
--- /dev/null
+++ b/examples/sites/demos/pc/app/skeleton/complex-demo.spec.ts
@@ -0,0 +1,14 @@
+import { expect, test } from '@playwright/test'
+
+test('段落显示左侧头像', async ({ page }) => {
+ page.on('pageerror', (exception) => expect(exception).toBeNull())
+ await page.goto('skeleton#complex-demo')
+
+ const first = page.locator('.tiny-skeleton')
+ const avatar = page.locator('.tiny-skeleton__avatar')
+ const medium = page.locator('.tiny-skeleton-item--medium')
+
+ await expect(first).toHaveCount(1)
+ await expect(avatar).toHaveCount(1)
+ await expect(medium).toHaveCount(1)
+})
diff --git a/examples/sites/demos/pc/app/skeleton/complex-demo.vue b/examples/sites/demos/pc/app/skeleton/complex-demo.vue
new file mode 100644
index 000000000..dbde5b97f
--- /dev/null
+++ b/examples/sites/demos/pc/app/skeleton/complex-demo.vue
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
diff --git a/examples/sites/demos/pc/app/skeleton/custom-layout-composition-api.vue b/examples/sites/demos/pc/app/skeleton/custom-layout-composition-api.vue
new file mode 100644
index 000000000..141c01be8
--- /dev/null
+++ b/examples/sites/demos/pc/app/skeleton/custom-layout-composition-api.vue
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/examples/sites/demos/pc/app/skeleton/custom-layout.spec.ts b/examples/sites/demos/pc/app/skeleton/custom-layout.spec.ts
new file mode 100644
index 000000000..54fa44a2a
--- /dev/null
+++ b/examples/sites/demos/pc/app/skeleton/custom-layout.spec.ts
@@ -0,0 +1,14 @@
+import { expect, test } from '@playwright/test'
+
+test('自定义排版', async ({ page }) => {
+ page.on('pageerror', (exception) => expect(exception).toBeNull())
+ await page.goto('skeleton#custom-layout')
+
+ const image = page.locator('.tiny-skeleton-item--image')
+ const circle = page.locator('.tiny-skeleton-item--circle')
+
+ await expect(image).toHaveCount(1)
+ await expect(circle).toHaveCount(1)
+ await expect(circle).toHaveClass(/tiny-skeleton-item--small/)
+ await expect(image).toHaveCSS('width', '200px')
+})
diff --git a/examples/sites/demos/pc/app/skeleton/custom-layout.vue b/examples/sites/demos/pc/app/skeleton/custom-layout.vue
new file mode 100644
index 000000000..501d04925
--- /dev/null
+++ b/examples/sites/demos/pc/app/skeleton/custom-layout.vue
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/examples/sites/demos/pc/app/skeleton/custom-paragraph-width-composition-api.vue b/examples/sites/demos/pc/app/skeleton/custom-paragraph-width-composition-api.vue
new file mode 100644
index 000000000..c320afed0
--- /dev/null
+++ b/examples/sites/demos/pc/app/skeleton/custom-paragraph-width-composition-api.vue
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
diff --git a/examples/sites/demos/pc/app/skeleton/custom-paragraph-width.spec.ts b/examples/sites/demos/pc/app/skeleton/custom-paragraph-width.spec.ts
new file mode 100644
index 000000000..4521c942f
--- /dev/null
+++ b/examples/sites/demos/pc/app/skeleton/custom-paragraph-width.spec.ts
@@ -0,0 +1,16 @@
+import { expect, test } from '@playwright/test'
+
+test('自定义段落宽度', async ({ page }) => {
+ page.on('pageerror', (exception) => expect(exception).toBeNull())
+ await page.goto('skeleton#custom-paragraph-width')
+
+ const first = page.locator('.tiny-skeleton')
+ const item1 = page.locator('.tiny-skeleton-item').nth(1)
+ const item2 = page.locator('.tiny-skeleton-item').nth(2)
+ const item3 = page.locator('.tiny-skeleton-item').nth(3)
+
+ await expect(first).toHaveCount(1)
+ await expect(item1).toHaveCSS('width', '200px')
+ await expect(item2).toHaveCSS('width', '100px')
+ await expect(item3).toHaveCSS('width', '50px')
+})
diff --git a/examples/sites/demos/pc/app/skeleton/custom-paragraph-width.vue b/examples/sites/demos/pc/app/skeleton/custom-paragraph-width.vue
new file mode 100644
index 000000000..9751c0095
--- /dev/null
+++ b/examples/sites/demos/pc/app/skeleton/custom-paragraph-width.vue
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
diff --git a/examples/sites/demos/pc/app/skeleton/custom-rows-composition-api.vue b/examples/sites/demos/pc/app/skeleton/custom-rows-composition-api.vue
new file mode 100644
index 000000000..86e1150e2
--- /dev/null
+++ b/examples/sites/demos/pc/app/skeleton/custom-rows-composition-api.vue
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
diff --git a/examples/sites/demos/pc/app/skeleton/custom-rows.spec.ts b/examples/sites/demos/pc/app/skeleton/custom-rows.spec.ts
new file mode 100644
index 000000000..233202ff8
--- /dev/null
+++ b/examples/sites/demos/pc/app/skeleton/custom-rows.spec.ts
@@ -0,0 +1,12 @@
+import { expect, test } from '@playwright/test'
+
+test('自定义段落行数', async ({ page }) => {
+ page.on('pageerror', (exception) => expect(exception).toBeNull())
+ await page.goto('skeleton#custom-rows')
+
+ const first = page.locator('.tiny-skeleton')
+ const item = page.locator('.tiny-skeleton-item')
+
+ await expect(first).toHaveCount(1)
+ await expect(item).toHaveCount(5)
+})
diff --git a/examples/sites/demos/pc/app/skeleton/custom-rows.vue b/examples/sites/demos/pc/app/skeleton/custom-rows.vue
new file mode 100644
index 000000000..3e0a7657f
--- /dev/null
+++ b/examples/sites/demos/pc/app/skeleton/custom-rows.vue
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
diff --git a/examples/sites/demos/pc/app/skeleton/fine-grained-mode-composition-api.vue b/examples/sites/demos/pc/app/skeleton/fine-grained-mode-composition-api.vue
new file mode 100644
index 000000000..b3714751b
--- /dev/null
+++ b/examples/sites/demos/pc/app/skeleton/fine-grained-mode-composition-api.vue
@@ -0,0 +1,34 @@
+
+
+
大小
+
Small
+
Middle
+
Large
+
+
动画
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/examples/sites/demos/pc/app/skeleton/fine-grained-mode.spec.ts b/examples/sites/demos/pc/app/skeleton/fine-grained-mode.spec.ts
new file mode 100644
index 000000000..e9a9d5118
--- /dev/null
+++ b/examples/sites/demos/pc/app/skeleton/fine-grained-mode.spec.ts
@@ -0,0 +1,50 @@
+import { expect, test } from '@playwright/test'
+
+test('细粒度模式', async ({ page }) => {
+ page.on('pageerror', (exception) => expect(exception).toBeNull())
+ await page.goto('skeleton#fine-grained-mode')
+
+ const first = page.locator('.tiny-skeleton')
+ const radio1 = page.locator('.tiny-radio').nth(0)
+ const radio2 = page.locator('.tiny-radio').nth(1)
+ const radio3 = page.locator('.tiny-radio').nth(2)
+ const activeSwitch = page.locator('.pc-demo > div > .tiny-switch')
+ const image = page.locator('.tiny-skeleton-item--image')
+ const circle = page.locator('.tiny-skeleton-item--circle')
+ const square = page.locator('.tiny-skeleton-item--square')
+
+ await expect(first).toHaveCount(1)
+
+ // 测试动画效果
+ await expect(circle).toHaveClass(/tiny-skeleton-item--active/)
+ await expect(square).toHaveClass(/tiny-skeleton-item--active/)
+ await expect(image).toHaveClass(/tiny-skeleton-item--active/)
+
+ await activeSwitch.click()
+ await page.waitForTimeout(500)
+ await expect(image).not.toHaveClass(/tiny-skeleton-item--active/)
+ await expect(circle).not.toHaveClass(/tiny-skeleton-item--active/)
+ await expect(square).not.toHaveClass(/tiny-skeleton-item--active/)
+
+ // 测试大小
+ await radio2.click()
+ await page.waitForTimeout(500)
+ await expect(radio2).toHaveClass(/is-checked/)
+ await expect(circle).toHaveClass(/tiny-skeleton-item--medium/)
+ await expect(image).toHaveClass(/tiny-skeleton-item--medium/)
+ await expect(square).not.toHaveClass(/tiny-skeleton-item--medium/)
+
+ await radio1.click()
+ await page.waitForTimeout(500)
+ await expect(radio1).toHaveClass(/is-checked/)
+ await expect(circle).toHaveClass(/tiny-skeleton-item--small/)
+ await expect(image).toHaveClass(/tiny-skeleton-item--small/)
+ await expect(square).not.toHaveClass(/tiny-skeleton-item--small/)
+
+ await radio3.click()
+ await page.waitForTimeout(500)
+ await expect(radio3).toHaveClass(/is-checked/)
+ await expect(circle).toHaveClass(/tiny-skeleton-item--large/)
+ await expect(image).toHaveClass(/tiny-skeleton-item--large/)
+ await expect(square).not.toHaveClass(/tiny-skeleton-item--large/)
+})
diff --git a/examples/sites/demos/pc/app/skeleton/fine-grained-mode.vue b/examples/sites/demos/pc/app/skeleton/fine-grained-mode.vue
new file mode 100644
index 000000000..a86f40469
--- /dev/null
+++ b/examples/sites/demos/pc/app/skeleton/fine-grained-mode.vue
@@ -0,0 +1,41 @@
+
+
+
大小
+
Small
+
Middle
+
Large
+
+
+
动画
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/examples/sites/demos/pc/app/skeleton/loading-completed-composition-api.vue b/examples/sites/demos/pc/app/skeleton/loading-completed-composition-api.vue
new file mode 100644
index 000000000..8f1da7060
--- /dev/null
+++ b/examples/sites/demos/pc/app/skeleton/loading-completed-composition-api.vue
@@ -0,0 +1,35 @@
+
+
+
显示/隐藏
+
+
+
+
+ 内容比较短的一段文字
+ 一个按钮
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/examples/sites/demos/pc/app/skeleton/loading-completed.spec.ts b/examples/sites/demos/pc/app/skeleton/loading-completed.spec.ts
new file mode 100644
index 000000000..d3a11f116
--- /dev/null
+++ b/examples/sites/demos/pc/app/skeleton/loading-completed.spec.ts
@@ -0,0 +1,26 @@
+import { expect, test } from '@playwright/test'
+
+test('加载完成', async ({ page }) => {
+ page.on('pageerror', (exception) => expect(exception).toBeNull())
+ await page.goto('skeleton#loading-completed')
+
+ const square = page.locator('.tiny-skeleton-item--square')
+ const circle = page.locator('.tiny-skeleton-item--circle')
+ const button = page.getByRole('button', { name: '显示/隐藏' })
+
+ await expect(circle).toHaveCount(1)
+ await expect(square).toHaveCount(2)
+ await expect(circle).toHaveCSS('width', '72px')
+ await expect(circle).toHaveCSS('height', '72px')
+
+ await button.click()
+ await page.waitForTimeout(500)
+ await expect(square).toBeHidden()
+ await expect(circle).toBeHidden()
+ const p = page.locator('.paragraph')
+ await expect(p).toHaveText(/内容比较短的一段文字/)
+ const btn = page.getByRole('button', { name: '一个按钮' })
+ await expect(btn).toBeVisible()
+ const head = page.locator('.tiny-user-head')
+ await expect(head).toBeVisible()
+})
diff --git a/examples/sites/demos/pc/app/skeleton/loading-completed.vue b/examples/sites/demos/pc/app/skeleton/loading-completed.vue
new file mode 100644
index 000000000..8b299ce29
--- /dev/null
+++ b/examples/sites/demos/pc/app/skeleton/loading-completed.vue
@@ -0,0 +1,42 @@
+
+
+
显示/隐藏
+
+
+
+
+ 内容比较短的一段文字
+ 一个按钮
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/examples/sites/demos/pc/app/skeleton/webdoc/skeleton.cn.md b/examples/sites/demos/pc/app/skeleton/webdoc/skeleton.cn.md
new file mode 100644
index 000000000..521767c4f
--- /dev/null
+++ b/examples/sites/demos/pc/app/skeleton/webdoc/skeleton.cn.md
@@ -0,0 +1,7 @@
+---
+title: Skeleton 骨架屏
+---
+
+# Skeleton 骨架屏
+
+用于在内容加载过程中展示一组占位图形。
diff --git a/examples/sites/demos/pc/app/skeleton/webdoc/skeleton.en.md b/examples/sites/demos/pc/app/skeleton/webdoc/skeleton.en.md
new file mode 100644
index 000000000..13d3ad19b
--- /dev/null
+++ b/examples/sites/demos/pc/app/skeleton/webdoc/skeleton.en.md
@@ -0,0 +1,7 @@
+---
+title: Skeleton 骨架屏
+---
+
+# Skeleton 骨架屏
+
+Used to display a set of placeholder graphics while content is loading.
diff --git a/examples/sites/demos/pc/app/skeleton/webdoc/skeleton.js b/examples/sites/demos/pc/app/skeleton/webdoc/skeleton.js
new file mode 100644
index 000000000..d856188fb
--- /dev/null
+++ b/examples/sites/demos/pc/app/skeleton/webdoc/skeleton.js
@@ -0,0 +1,207 @@
+export default {
+ column: '2',
+ owner: '',
+ demos: [
+ {
+ 'demoId': 'base',
+ 'name': { 'zh-CN': '基本用法', 'en-US': 'Basic Usage' },
+ 'desc': {
+ 'zh-CN': '
基础的骨架效果。
\n',
+ 'en-US': 'Basic skeleton effect.
\n'
+ },
+ 'codeFiles': ['base.vue']
+ },
+ {
+ 'demoId': 'complex-demo',
+ 'name': { 'zh-CN': '复杂的组合', 'en-US': 'Complex Demo' },
+ 'desc': {
+ 'zh-CN': '更复杂的组合,通过 avatar
属性控制骨架段落左侧出现头像占位。
\n',
+ 'en-US':
+ 'More complex combinations, use the avatar
attribute to control the appearance of the avatar placeholder on the left side of the skeleton paragraph.
\n'
+ },
+ 'codeFiles': ['complex-demo.vue']
+ },
+ {
+ 'demoId': 'custom-rows',
+ 'name': { 'zh-CN': '自定义段落行数', 'en-US': 'Custom rows' },
+ 'desc': {
+ 'zh-CN':
+ '段落默认渲染 4 行,通过 rows
属性控制段落行数,显示的数量会比传入的数量多 1,首行会被渲染一个长度 40% 的段首,末行会被渲染一个长度 60% 的段尾。
\n',
+ 'en-US':
+ 'By default, paragraphs are rendered in 4 lines. The number of paragraph lines is controlled through the rows
attribute. The number displayed will be 1 more than the number passed in. The first line will render the paragraph header at 40% length, and the last line will render the paragraph trailer at 60% length.
\n'
+ },
+ 'codeFiles': ['custom-rows.vue']
+ },
+ {
+ 'demoId': 'custom-layout',
+ 'name': { 'zh-CN': '自定义排版', 'en-US': 'Custom layout' },
+ 'desc': {
+ 'zh-CN':
+ '当默认排版不满足需求时,可自定义排版结构,通过 class
和 style
可自定义宽高等样式。
\n',
+ 'en-US':
+ 'When the default layout does not meet the needs, the layout structure can be customized, and styles such as width and height can be customized through class
and style
.
\n'
+ },
+ 'codeFiles': ['custom-layout.vue']
+ },
+ {
+ 'demoId': 'loading-completed',
+ 'name': { 'zh-CN': '加载完成', 'en-US': 'Loading completed' },
+ 'desc': {
+ 'zh-CN':
+ '通过 loading
属性的值来表示是否加载完成。 可以通过具名插槽 default
来构建 loading
结束之后需要展示的真实 DOM 元素结构。
\n',
+ 'en-US':
+ 'Whether the loading is completed is indicated by the value of the loading
attribute. You can use the named slot default
to build the real DOM element structure that needs to be displayed after loading
ends.
\n'
+ },
+ 'codeFiles': ['loading-completed.vue']
+ },
+ {
+ 'demoId': 'custom-paragraph-width',
+ 'name': { 'zh-CN': '自定义段落宽度', 'en-US': 'Custom paragraph width' },
+ 'desc': {
+ 'zh-CN':
+ 'rows-width
属性可以自定义段落宽度,数组中的每一项可以为 number
或 string
,当为 number
时,组件会自动增加 px
单位。
\n',
+ 'en-US':
+ 'The rows-width
attribute can customize the paragraph width. Each item in the array can be number
or string
. When it is number< /code>, the component will automatically increase the px
unit
\n'
+ },
+ 'codeFiles': ['custom-paragraph-width.vue']
+ },
+ {
+ 'demoId': 'fine-grained-mode',
+ 'name': { 'zh-CN': '细粒度模式', 'en-US': 'Fine-grained mode' },
+ 'desc': {
+ 'zh-CN':
+ '细粒度模式,variant
属性可以控制 skeleton-item
的形态,可选值:image / circle / square。size
属性可以控制 skeleton-item
的大小,可选值:medium / small / large。
\n',
+ 'en-US':
+ 'Fine-grained mode, the variant
attribute can control the shape of skeleton-item
, optional values: image / circle / square. The size
attribute can control the size of skeleton-item
. Optional values: medium / small / large.
\n'
+ },
+ 'codeFiles': ['fine-grained-mode.vue']
+ }
+ ],
+ apis: [
+ {
+ 'name': 'skeleton',
+ 'type': 'component',
+ 'props': [
+ {
+ 'name': 'loading',
+ 'type': 'boolean',
+ 'defaultValue': 'true',
+ 'desc': {
+ 'zh-CN': '是否显示骨架屏,传 false 时会展示加载完成后的内容',
+ 'en-US':
+ 'Customized interface. A Promise object is returned. This parameter is mandatory when the framework service is not used.'
+ },
+ 'demoId': 'custom-layout'
+ },
+ {
+ 'name': 'active',
+ 'type': 'boolean',
+ 'defaultValue': 'true',
+ 'desc': {
+ 'zh-CN': '是否开启动画',
+ 'en-US':
+ 'Customized interface. A Promise object is returned. This parameter is mandatory when the framework service is not used.'
+ },
+ 'demoId': 'fine-grained-mode'
+ },
+ {
+ 'name': 'avatar',
+ 'type': 'boolean',
+ 'defaultValue': 'false',
+ 'desc': {
+ 'zh-CN': '是否显示头像',
+ 'en-US':
+ 'Customized interface. A Promise object is returned. This parameter is mandatory when the framework service is not used.'
+ },
+ 'demoId': 'complex-demo'
+ },
+ {
+ 'name': 'rows',
+ 'type': 'number',
+ 'defaultValue': '3',
+ 'desc': {
+ 'zh-CN': '默认排版,可配置段落显示行数',
+ 'en-US':
+ 'Customized interface. A Promise object is returned. This parameter is mandatory when the framework service is not used.'
+ },
+ 'demoId': 'custom-rows'
+ },
+ {
+ 'name': 'rows-width',
+ 'type': 'number[] | string[]',
+ 'defaultValue': '[]',
+ 'desc': {
+ 'zh-CN': '自定义段落每一行的宽度',
+ 'en-US':
+ 'Customized interface. A Promise object is returned. This parameter is mandatory when the framework service is not used.'
+ },
+ 'demoId': 'custom-paragraph-width'
+ }
+ ],
+ 'slots': [
+ {
+ 'name': 'default',
+ 'type': '',
+ 'defaultValue': '',
+ 'desc': {
+ 'zh-CN': '加载完成后显示的内容',
+ 'en-US': 'Option default slot'
+ },
+ 'demoId': 'custom-layout'
+ },
+ {
+ 'name': 'placeholder',
+ 'type': '',
+ 'defaultValue': '',
+ 'desc': {
+ 'zh-CN': '自定义骨架屏结构',
+ 'en-US': 'Option default slot'
+ },
+ 'demoId': 'custom-layout'
+ }
+ ]
+ },
+ {
+ 'name': 'skeleton-item',
+ 'type': 'component',
+ 'props': [
+ {
+ 'name': 'variant',
+ 'type': 'IVariant',
+ 'typeAnchorName': 'IVariant',
+ 'defaultValue': 'square',
+ 'desc': {
+ 'zh-CN': '骨架屏形态',
+ 'en-US':
+ 'Customized interface. A Promise object is returned. This parameter is mandatory when the framework service is not used.'
+ },
+ 'demoId': 'fine-grained-mode'
+ },
+ {
+ 'name': 'size',
+ 'type': 'ISize',
+ 'typeAnchorName': 'ISize',
+ 'defaultValue': 'medium',
+ 'desc': {
+ 'zh-CN': '针对 image 和 circle 形态,内置三种大小',
+ 'en-US':
+ 'Customized interface. A Promise object is returned. This parameter is mandatory when the framework service is not used.'
+ },
+ 'demoId': 'fine-grained-mode'
+ }
+ ]
+ }
+ ],
+ types: [
+ {
+ name: 'IVariant',
+ type: 'type',
+ code: `type IVariant = 'image' | 'circle' | 'square'`
+ },
+ {
+ name: 'ISize',
+ type: 'type',
+ code: `type ISize = 'large' | 'medium' | 'small'`
+ }
+ ]
+}
diff --git a/examples/sites/demos/pc/menus.js b/examples/sites/demos/pc/menus.js
index bd46c5982..f3ab8ae3b 100644
--- a/examples/sites/demos/pc/menus.js
+++ b/examples/sites/demos/pc/menus.js
@@ -208,7 +208,8 @@ export const cmpMenus = [
{ 'nameCn': '进度条', 'name': 'Progress', 'key': 'progress' },
{ 'nameCn': '树形控件', 'name': 'Tree', 'key': 'tree' },
{ 'nameCn': '穿梭框', 'name': 'Transfer', 'key': 'transfer' },
- { 'nameCn': '无限滚动', 'name': 'InfiniteScroll', 'key': 'infinite-scroll' }
+ { 'nameCn': '无限滚动', 'name': 'InfiniteScroll', 'key': 'infinite-scroll' },
+ { 'nameCn': '骨架屏', 'name': 'Skeleton', 'key': 'skeleton' }
]
},
{
diff --git a/packages/modules.json b/packages/modules.json
index d1760dc4b..7bf118eff 100644
--- a/packages/modules.json
+++ b/packages/modules.json
@@ -3,9 +3,7 @@
"path": "vue/src/action-menu/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"ActionMenuPc": {
"path": "vue/src/action-menu/src/pc.vue",
@@ -16,10 +14,7 @@
"path": "vue/src/action-sheet/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile-first",
- "mobile"
- ]
+ "mode": ["mobile-first", "mobile"]
},
"ActionSheetMobile": {
"path": "vue/src/action-sheet/src/mobile.vue",
@@ -35,11 +30,7 @@
"path": "vue/src/alert/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile-first",
- "mobile",
- "pc"
- ]
+ "mode": ["mobile-first", "mobile", "pc"]
},
"AlertMobile": {
"path": "vue/src/alert/src/mobile.vue",
@@ -60,17 +51,13 @@
"path": "vue/src/amount/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"Anchor": {
"path": "vue/src/anchor/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"AnchorPc": {
"path": "vue/src/anchor/src/pc.vue",
@@ -81,17 +68,13 @@
"path": "vue/src/area/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"AsyncFlowchart": {
"path": "vue/src/async-flowchart/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile-first"
- ]
+ "mode": ["mobile-first"]
},
"AsyncFlowchartMobileFirst": {
"path": "vue/src/async-flowchart/src/mobile-first.vue",
@@ -102,9 +85,7 @@
"path": "vue/src/autocomplete/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"AutocompletePc": {
"path": "vue/src/autocomplete/src/pc.vue",
@@ -120,19 +101,13 @@
"path": "vue/src/avatar/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile"
- ]
+ "mode": ["mobile"]
},
"Badge": {
"path": "vue/src/badge/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile-first",
- "mobile",
- "pc"
- ]
+ "mode": ["mobile-first", "mobile", "pc"]
},
"BadgeMobile": {
"path": "vue/src/badge/src/mobile.vue",
@@ -158,17 +133,13 @@
"path": "vue/src/breadcrumb/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"BreadcrumbItem": {
"path": "vue/src/breadcrumb-item/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"BreadcrumbItemPc": {
"path": "vue/src/breadcrumb-item/src/pc.vue",
@@ -184,9 +155,7 @@
"path": "vue/src/bulletin-board/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"BulletinBoardPc": {
"path": "vue/src/bulletin-board/src/pc.vue",
@@ -197,19 +166,13 @@
"path": "vue/src/button/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile-first",
- "mobile",
- "pc"
- ]
+ "mode": ["mobile-first", "mobile", "pc"]
},
"ButtonGroup": {
"path": "vue/src/button-group/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"ButtonGroupPc": {
"path": "vue/src/button-group/src/pc.vue",
@@ -235,17 +198,13 @@
"path": "vue/src/calendar/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"CalendarBar": {
"path": "vue/src/calendar-bar/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile-first"
- ]
+ "mode": ["mobile-first"]
},
"CalendarBarMobileFirst": {
"path": "vue/src/calendar-bar/src/mobile-first.vue",
@@ -261,10 +220,7 @@
"path": "vue/src/calendar-view/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile-first",
- "pc"
- ]
+ "mode": ["mobile-first", "pc"]
},
"CalendarViewMobileFirst": {
"path": "vue/src/calendar-view/src/mobile-first.vue",
@@ -280,25 +236,19 @@
"path": "vue/src/card/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile-first"
- ]
+ "mode": ["mobile-first"]
},
"CardGroup": {
"path": "vue/src/card-group/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile-first"
- ]
+ "mode": ["mobile-first"]
},
"CardTemplate": {
"path": "vue/src/card-template/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"CardTemplatePc": {
"path": "vue/src/card-template/src/pc.vue",
@@ -309,19 +259,13 @@
"path": "vue/src/carousel/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile-first",
- "pc"
- ]
+ "mode": ["mobile-first", "pc"]
},
"CarouselItem": {
"path": "vue/src/carousel-item/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile-first",
- "pc"
- ]
+ "mode": ["mobile-first", "pc"]
},
"CarouselItemMobileFirst": {
"path": "vue/src/carousel-item/src/mobile-first.vue",
@@ -347,9 +291,7 @@
"path": "vue/src/cascader/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"CascaderMenu": {
"path": "vue/src/cascader-menu/index.ts",
@@ -360,25 +302,19 @@
"path": "vue/src/cascader-mobile/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile-first"
- ]
+ "mode": ["mobile-first"]
},
"CascaderNode": {
"path": "vue/src/cascader-node/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"CascaderPanel": {
"path": "vue/src/cascader-panel/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"CascaderPc": {
"path": "vue/src/cascader/src/pc.vue",
@@ -389,10 +325,7 @@
"path": "vue/src/cascader-select/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile-first",
- "mobile"
- ]
+ "mode": ["mobile-first", "mobile"]
},
"CascaderSelectMobile": {
"path": "vue/src/cascader-select/src/mobile.vue",
@@ -408,17 +341,13 @@
"path": "vue/src/cascader-view/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile-first"
- ]
+ "mode": ["mobile-first"]
},
"Cell": {
"path": "vue/src/cell/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile-first"
- ]
+ "mode": ["mobile-first"]
},
"Chart": {
"path": "vue/src/chart/index.ts",
@@ -539,19 +468,13 @@
"path": "vue/src/checkbox/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile-first",
- "mobile",
- "pc"
- ]
+ "mode": ["mobile-first", "mobile", "pc"]
},
"CheckboxButton": {
"path": "vue/src/checkbox-button/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"CheckboxButtonPc": {
"path": "vue/src/checkbox-button/src/pc.vue",
@@ -562,11 +485,7 @@
"path": "vue/src/checkbox-group/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile-first",
- "mobile",
- "pc"
- ]
+ "mode": ["mobile-first", "mobile", "pc"]
},
"CheckboxGroupMobile": {
"path": "vue/src/checkbox-group/src/mobile.vue",
@@ -602,9 +521,7 @@
"path": "vue/src/col/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"ColPc": {
"path": "vue/src/col/src/pc.vue",
@@ -615,19 +532,13 @@
"path": "vue/src/collapse/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile-first",
- "pc"
- ]
+ "mode": ["mobile-first", "pc"]
},
"CollapseItem": {
"path": "vue/src/collapse-item/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile-first",
- "pc"
- ]
+ "mode": ["mobile-first", "pc"]
},
"CollapseItemMobileFirst": {
"path": "vue/src/collapse-item/src/mobile-first.vue",
@@ -653,18 +564,13 @@
"path": "vue/src/collapse-transition/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"ColorPicker": {
"path": "vue/src/color-picker/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile",
- "pc"
- ]
+ "mode": ["mobile", "pc"]
},
"ColorPickerMobile": {
"path": "vue/src/color-picker/src/mobile.vue",
@@ -680,9 +586,7 @@
"path": "vue/src/color-select-panel/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"ColorSelectPanelPc": {
"path": "vue/src/color-select-panel/src/pc.vue",
@@ -693,17 +597,13 @@
"path": "vue/src/column-list-group/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile-first"
- ]
+ "mode": ["mobile-first"]
},
"ColumnListItem": {
"path": "vue/src/column-list-item/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile-first"
- ]
+ "mode": ["mobile-first"]
},
"Common": {
"path": "vue-common/src/index.ts",
@@ -714,9 +614,7 @@
"path": "vue/src/company/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"CompanyPc": {
"path": "vue/src/company/src/pc.vue",
@@ -732,10 +630,7 @@
"path": "vue/src/container/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile",
- "pc"
- ]
+ "mode": ["mobile", "pc"]
},
"ContainerMobile": {
"path": "vue/src/container/src/mobile.vue",
@@ -751,9 +646,7 @@
"path": "vue/src/country/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"CountryPc": {
"path": "vue/src/country/src/pc.vue",
@@ -764,17 +657,13 @@
"path": "vue/src/credit-card/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"CreditCardForm": {
"path": "vue/src/credit-card-form/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"CreditCardFormPc": {
"path": "vue/src/credit-card-form/src/pc.vue",
@@ -790,17 +679,13 @@
"path": "vue/src/crop/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"Currency": {
"path": "vue/src/currency/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"CurrencyPc": {
"path": "vue/src/currency/src/pc.vue",
@@ -811,18 +696,13 @@
"path": "vue/src/date-panel/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"DatePicker": {
"path": "vue/src/date-picker/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile",
- "pc"
- ]
+ "mode": ["mobile", "pc"]
},
"DatePickerMobile": {
"path": "vue/src/date-picker/src/mobile.vue",
@@ -843,25 +723,19 @@
"path": "vue/src/date-range/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"DateTable": {
"path": "vue/src/date-table/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"Dept": {
"path": "vue/src/dept/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"DeptPc": {
"path": "vue/src/dept/src/pc.vue",
@@ -887,9 +761,7 @@
"path": "vue/src/detail-page/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"DetailPagePc": {
"path": "vue/src/detail-page/src/pc.vue",
@@ -900,10 +772,7 @@
"path": "vue/src/dialog-box/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile",
- "pc"
- ]
+ "mode": ["mobile", "pc"]
},
"DialogBoxMobile": {
"path": "vue/src/dialog-box/src/mobile.vue",
@@ -919,9 +788,7 @@
"path": "vue/src/dialog-select/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"DialogSelectPc": {
"path": "vue/src/dialog-select/src/pc.vue",
@@ -932,9 +799,7 @@
"path": "vue/src/divider/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"DividerPc": {
"path": "vue/src/divider/src/pc.vue",
@@ -945,10 +810,7 @@
"path": "vue/src/drawer/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile-first",
- "pc"
- ]
+ "mode": ["mobile-first", "pc"]
},
"DrawerMobileFirst": {
"path": "vue/src/drawer/src/mobile-first.vue",
@@ -964,9 +826,7 @@
"path": "vue/src/drop-roles/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"DropRolesPc": {
"path": "vue/src/drop-roles/src/pc.vue",
@@ -977,9 +837,7 @@
"path": "vue/src/drop-times/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"DropTimesPc": {
"path": "vue/src/drop-times/src/pc.vue",
@@ -990,20 +848,13 @@
"path": "vue/src/dropdown/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile-first",
- "pc"
- ]
+ "mode": ["mobile-first", "pc"]
},
"DropdownItem": {
"path": "vue/src/dropdown-item/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile-first",
- "mobile",
- "pc"
- ]
+ "mode": ["mobile-first", "mobile", "pc"]
},
"DropdownItemMobile": {
"path": "vue/src/dropdown-item/src/mobile.vue",
@@ -1024,11 +875,7 @@
"path": "vue/src/dropdown-menu/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile-first",
- "mobile",
- "pc"
- ]
+ "mode": ["mobile-first", "mobile", "pc"]
},
"DropdownMenuMobile": {
"path": "vue/src/dropdown-menu/src/mobile.vue",
@@ -1059,17 +906,13 @@
"path": "vue/src/dynamic-scroller/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"DynamicScrollerItem": {
"path": "vue/src/dynamic-scroller-item/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"DynamicScrollerItemPc": {
"path": "vue/src/dynamic-scroller-item/src/pc.vue",
@@ -1085,9 +928,7 @@
"path": "vue/src/espace/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"EspacePc": {
"path": "vue/src/espace/src/pc.vue",
@@ -1098,10 +939,7 @@
"path": "vue/src/exception/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile-first",
- "mobile"
- ]
+ "mode": ["mobile-first", "mobile"]
},
"ExceptionMobile": {
"path": "vue/src/exception/src/mobile.vue",
@@ -1117,9 +955,7 @@
"path": "vue/src/fall-menu/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"FallMenuPc": {
"path": "vue/src/fall-menu/src/pc.vue",
@@ -1130,11 +966,7 @@
"path": "vue/src/file-upload/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile-first",
- "mobile",
- "pc"
- ]
+ "mode": ["mobile-first", "mobile", "pc"]
},
"FileUploadMobile": {
"path": "vue/src/file-upload/src/mobile.vue",
@@ -1155,17 +987,13 @@
"path": "vue/src/filter/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile-first"
- ]
+ "mode": ["mobile-first"]
},
"FilterBar": {
"path": "vue/src/filter-bar/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile-first"
- ]
+ "mode": ["mobile-first"]
},
"FilterBarMobileFirst": {
"path": "vue/src/filter-bar/src/mobile-first.vue",
@@ -1176,9 +1004,7 @@
"path": "vue/src/filter-box/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"FilterMobileFirst": {
"path": "vue/src/filter/src/mobile-first.vue",
@@ -1189,17 +1015,13 @@
"path": "vue/src/filter-panel/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"Floatbar": {
"path": "vue/src/floatbar/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"FloatbarPc": {
"path": "vue/src/floatbar/src/pc.vue",
@@ -1210,9 +1032,7 @@
"path": "vue/src/floating-button/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile-first"
- ]
+ "mode": ["mobile-first"]
},
"FloatingButtonMobileFirst": {
"path": "vue/src/floating-button/src/mobile-first.vue",
@@ -1223,10 +1043,7 @@
"path": "vue/src/flowchart/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile-first",
- "pc"
- ]
+ "mode": ["mobile-first", "pc"]
},
"FlowchartMobileFirst": {
"path": "vue/src/flowchart/src/mobile-first.vue",
@@ -1242,20 +1059,13 @@
"path": "vue/src/form/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile-first",
- "mobile",
- "pc"
- ]
+ "mode": ["mobile-first", "mobile", "pc"]
},
"FormItem": {
"path": "vue/src/form-item/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile-first",
- "pc"
- ]
+ "mode": ["mobile-first", "pc"]
},
"FormItemLabelWrap": {
"path": "vue/src/form-item/src/label-wrap.ts",
@@ -1291,9 +1101,7 @@
"path": "vue/src/fullscreen/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"Grid": {
"path": "vue/src/grid/index.ts",
@@ -1319,9 +1127,7 @@
"path": "vue/src/guide/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"GuidePc": {
"path": "vue/src/guide/src/pc.vue",
@@ -1332,9 +1138,7 @@
"path": "vue/src/hrapprover/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"HrapproverPc": {
"path": "vue/src/hrapprover/src/pc.vue",
@@ -1355,10 +1159,7 @@
"path": "vue/src/image/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile-first",
- "pc"
- ]
+ "mode": ["mobile-first", "pc"]
},
"ImageMobileFirst": {
"path": "vue/src/image/src/mobile-first.vue",
@@ -1374,11 +1175,7 @@
"path": "vue/src/image-viewer/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile-first",
- "mobile",
- "pc"
- ]
+ "mode": ["mobile-first", "mobile", "pc"]
},
"ImageViewerMobile": {
"path": "vue/src/image-viewer/src/mobile.vue",
@@ -1399,9 +1196,7 @@
"path": "vue/src/index-bar/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile"
- ]
+ "mode": ["mobile"]
},
"IndexBarAnchor": {
"path": "vue/src/index-bar-anchor/index.ts",
@@ -1417,11 +1212,7 @@
"path": "vue/src/input/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile-first",
- "mobile",
- "pc"
- ]
+ "mode": ["mobile-first", "mobile", "pc"]
},
"InputMobile": {
"path": "vue/src/input/src/mobile.vue",
@@ -1447,9 +1238,7 @@
"path": "vue/src/ip-address/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"IpAddressPc": {
"path": "vue/src/ip-address/src/pc.vue",
@@ -1460,9 +1249,7 @@
"path": "vue/src/label/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile"
- ]
+ "mode": ["mobile"]
},
"LabelMobile": {
"path": "vue/src/label/src/mobile.vue",
@@ -1473,9 +1260,7 @@
"path": "vue/src/layout/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"LayoutPc": {
"path": "vue/src/layout/src/pc.vue",
@@ -1486,17 +1271,13 @@
"path": "vue/src/link/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"LinkMenu": {
"path": "vue/src/link-menu/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"LinkMenuPc": {
"path": "vue/src/link-menu/src/pc.vue",
@@ -1512,19 +1293,13 @@
"path": "vue/src/list/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile"
- ]
+ "mode": ["mobile"]
},
"Loading": {
"path": "vue/src/loading/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile-first",
- "mobile",
- "pc"
- ]
+ "mode": ["mobile-first", "mobile", "pc"]
},
"LoadingMobile": {
"path": "vue/src/loading/src/mobile.vue",
@@ -1550,25 +1325,19 @@
"path": "vue/src/locales/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"LogonUser": {
"path": "vue/src/logon-user/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"Logout": {
"path": "vue/src/logout/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"LogoutPc": {
"path": "vue/src/logout/src/pc.vue",
@@ -1579,17 +1348,13 @@
"path": "vue/src/mask/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile"
- ]
+ "mode": ["mobile"]
},
"Menu": {
"path": "vue/src/menu/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile-first"
- ]
+ "mode": ["mobile-first"]
},
"Message": {
"path": "vue/src/message/index.ts",
@@ -1600,9 +1365,7 @@
"path": "vue/src/milestone/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"MilestonePc": {
"path": "vue/src/milestone/src/pc.vue",
@@ -1613,27 +1376,19 @@
"path": "vue/src/mind-map/src/pc.vue",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"MiniPicker": {
"path": "vue/src/mini-picker/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile"
- ]
+ "mode": ["mobile"]
},
"Modal": {
"path": "vue/src/modal/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile-first",
- "mobile",
- "pc"
- ]
+ "mode": ["mobile-first", "mobile", "pc"]
},
"ModalMobile": {
"path": "vue/src/modal/src/mobile.vue",
@@ -1654,25 +1409,19 @@
"path": "vue/src/month-range/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"MonthTable": {
"path": "vue/src/month-table/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"MultiSelect": {
"path": "vue/src/multi-select/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile"
- ]
+ "mode": ["mobile"]
},
"MultiSelectMobile": {
"path": "vue/src/multi-select/src/mobile.vue",
@@ -1683,17 +1432,13 @@
"path": "vue/src/nav-bar/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile"
- ]
+ "mode": ["mobile"]
},
"NavMenu": {
"path": "vue/src/nav-menu/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"NavMenuPc": {
"path": "vue/src/nav-menu/src/pc.vue",
@@ -1704,19 +1449,13 @@
"path": "vue/src/notify/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"Numeric": {
"path": "vue/src/numeric/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile-first",
- "mobile",
- "pc"
- ]
+ "mode": ["mobile-first", "mobile", "pc"]
},
"NumericMobile": {
"path": "vue/src/numeric/src/mobile.vue",
@@ -1737,35 +1476,25 @@
"path": "vue/src/option/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"OptionGroup": {
"path": "vue/src/option-group/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"Pager": {
"path": "vue/src/pager/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile-first",
- "pc"
- ]
+ "mode": ["mobile-first", "pc"]
},
"PagerItem": {
"path": "vue/src/pager-item/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile-first",
- "pc"
- ]
+ "mode": ["mobile-first", "pc"]
},
"PagerItemMobileFirst": {
"path": "vue/src/pager-item/src/mobile-first.vue",
@@ -1791,9 +1520,7 @@
"path": "vue/src/panel/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"PanelPc": {
"path": "vue/src/panel/src/pc.vue",
@@ -1804,25 +1531,19 @@
"path": "vue/src/picker/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"PickerColumn": {
"path": "vue/src/picker-column/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile"
- ]
+ "mode": ["mobile"]
},
"PopUpload": {
"path": "vue/src/pop-upload/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"PopUploadPc": {
"path": "vue/src/pop-upload/src/pc.vue",
@@ -1833,10 +1554,7 @@
"path": "vue/src/popconfirm/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile-first",
- "pc"
- ]
+ "mode": ["mobile-first", "pc"]
},
"PopconfirmMobileFirst": {
"path": "vue/src/popconfirm/src/mobile-first.vue",
@@ -1852,9 +1570,7 @@
"path": "vue/src/popeditor/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"PopeditorPc": {
"path": "vue/src/popeditor/src/pc.vue",
@@ -1865,11 +1581,7 @@
"path": "vue/src/popover/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile-first",
- "mobile",
- "pc"
- ]
+ "mode": ["mobile-first", "mobile", "pc"]
},
"PopoverMobile": {
"path": "vue/src/popover/src/mobile.vue",
@@ -1890,19 +1602,13 @@
"path": "vue/src/popup/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"Progress": {
"path": "vue/src/progress/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile-first",
- "mobile",
- "pc"
- ]
+ "mode": ["mobile-first", "mobile", "pc"]
},
"ProgressMobile": {
"path": "vue/src/progress/src/mobile.vue",
@@ -1923,10 +1629,7 @@
"path": "vue/src/pull-refresh/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile-first",
- "mobile"
- ]
+ "mode": ["mobile-first", "mobile"]
},
"PullRefreshMobile": {
"path": "vue/src/pull-refresh/src/mobile.vue",
@@ -1942,36 +1645,25 @@
"path": "vue/src/qr-code/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"QueryBuilder": {
"path": "vue/src/query-builder/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"Radio": {
"path": "vue/src/radio/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile-first",
- "mobile",
- "pc"
- ]
+ "mode": ["mobile-first", "mobile", "pc"]
},
"RadioButton": {
"path": "vue/src/radio-button/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile-first",
- "pc"
- ]
+ "mode": ["mobile-first", "pc"]
},
"RadioButtonMobileFirst": {
"path": "vue/src/radio-button/src/mobile-first.vue",
@@ -1987,10 +1679,7 @@
"path": "vue/src/radio-group/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile-first",
- "pc"
- ]
+ "mode": ["mobile-first", "pc"]
},
"RadioGroupMobileFirst": {
"path": "vue/src/radio-group/src/mobile-first.vue",
@@ -2021,10 +1710,7 @@
"path": "vue/src/rate/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile-first",
- "pc"
- ]
+ "mode": ["mobile-first", "pc"]
},
"RateMobileFirst": {
"path": "vue/src/rate/src/mobile-first.vue",
@@ -2040,9 +1726,7 @@
"path": "vue/src/record/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile-first"
- ]
+ "mode": ["mobile-first"]
},
"RecordMobileFirst": {
"path": "vue/src/record/src/mobile-first.vue",
@@ -2053,9 +1737,7 @@
"path": "vue/src/recycle-scroller/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"RecycleScrollerPc": {
"path": "vue/src/recycle-scroller/src/pc.vue",
@@ -2066,17 +1748,13 @@
"path": "vue/src/rich-text-editor/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"River": {
"path": "vue/src/river/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"RiverPc": {
"path": "vue/src/river/src/pc.vue",
@@ -2087,9 +1765,7 @@
"path": "vue/src/roles/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"RolesPc": {
"path": "vue/src/roles/src/pc.vue",
@@ -2100,9 +1776,7 @@
"path": "vue/src/row/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"RowPc": {
"path": "vue/src/row/src/pc.vue",
@@ -2113,9 +1787,7 @@
"path": "vue/src/scroll-text/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"ScrollTextPc": {
"path": "vue/src/scroll-text/src/pc.vue",
@@ -2126,19 +1798,13 @@
"path": "vue/src/scrollbar/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"Search": {
"path": "vue/src/search/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile-first",
- "mobile",
- "pc"
- ]
+ "mode": ["mobile-first", "mobile", "pc"]
},
"SearchMobile": {
"path": "vue/src/search/src/mobile.vue",
@@ -2159,17 +1825,13 @@
"path": "vue/src/select/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"SelectDropdown": {
"path": "vue/src/select-dropdown/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"SelectDropdownPc": {
"path": "vue/src/select-dropdown/src/pc.vue",
@@ -2180,9 +1842,7 @@
"path": "vue/src/select-mobile/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile-first"
- ]
+ "mode": ["mobile-first"]
},
"SelectPc": {
"path": "vue/src/select/src/pc.vue",
@@ -2193,18 +1853,13 @@
"path": "vue/src/select-view/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile-first"
- ]
+ "mode": ["mobile-first"]
},
"SelectedBox": {
"path": "vue/src/selected-box/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile-first",
- "pc"
- ]
+ "mode": ["mobile-first", "pc"]
},
"SelectedBoxMobileFirst": {
"path": "vue/src/selected-box/src/mobile-first.vue",
@@ -2216,13 +1871,33 @@
"type": "template",
"exclude": false
},
+ "Skeleton": {
+ "path": "vue/src/skeleton/index.ts",
+ "type": "component",
+ "exclude": false,
+ "mode": ["pc"]
+ },
+ "SkeletonPc": {
+ "path": "vue/src/skeleton/src/pc.vue",
+ "type": "template",
+ "exclude": false
+ },
+ "SkeletonItem": {
+ "path": "vue/src/skeleton-item/index.ts",
+ "type": "component",
+ "exclude": false,
+ "mode": ["pc"]
+ },
+ "SkeletonItemPc": {
+ "path": "vue/src/skeleton-item/src/pc.vue",
+ "type": "template",
+ "exclude": false
+ },
"SlideBar": {
"path": "vue/src/slide-bar/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"SlideBarPc": {
"path": "vue/src/slide-bar/src/pc.vue",
@@ -2233,27 +1908,19 @@
"path": "vue/src/slider/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile-first",
- "mobile",
- "pc"
- ]
+ "mode": ["mobile-first", "mobile", "pc"]
},
"SliderButton": {
"path": "vue/src/slider-button/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile-first"
- ]
+ "mode": ["mobile-first"]
},
"SliderButtonGroup": {
"path": "vue/src/slider-button-group/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile-first"
- ]
+ "mode": ["mobile-first"]
},
"SliderButtonGroupMobileFirst": {
"path": "vue/src/slider-button-group/src/mobile-first.vue",
@@ -2284,9 +1951,7 @@
"path": "vue/src/split/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"SplitPc": {
"path": "vue/src/split/src/pc.vue",
@@ -2297,18 +1962,13 @@
"path": "vue/src/standard-list-item/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile-first"
- ]
+ "mode": ["mobile-first"]
},
"Steps": {
"path": "vue/src/steps/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile-first",
- "pc"
- ]
+ "mode": ["mobile-first", "pc"]
},
"StepsMobileFirst": {
"path": "vue/src/steps/src/mobile-first.vue",
@@ -2324,19 +1984,13 @@
"path": "vue/src/svg-icon/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"Switch": {
"path": "vue/src/switch/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile-first",
- "mobile",
- "pc"
- ]
+ "mode": ["mobile-first", "mobile", "pc"]
},
"SwitchMobile": {
"path": "vue/src/switch/src/mobile.vue",
@@ -2357,10 +2011,7 @@
"path": "vue/src/tab-item/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile-first",
- "pc"
- ]
+ "mode": ["mobile-first", "pc"]
},
"TabItemMobileFirst": {
"path": "vue/src/tab-item/src/mobile-first.vue",
@@ -2376,19 +2027,13 @@
"path": "vue/src/tabbar/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile-first",
- "mobile"
- ]
+ "mode": ["mobile-first", "mobile"]
},
"TabbarItem": {
"path": "vue/src/tabbar-item/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile-first",
- "mobile"
- ]
+ "mode": ["mobile-first", "mobile"]
},
"TabbarItemMobile": {
"path": "vue/src/tabbar-item/src/mobile.vue",
@@ -2414,10 +2059,7 @@
"path": "vue/src/table/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile",
- "pc"
- ]
+ "mode": ["mobile", "pc"]
},
"TableMobile": {
"path": "vue/src/table/src/mobile.vue",
@@ -2433,11 +2075,7 @@
"path": "vue/src/tabs/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile-first",
- "mobile",
- "pc"
- ]
+ "mode": ["mobile-first", "mobile", "pc"]
},
"TabsMobile": {
"path": "vue/src/tabs/src/mobile.vue",
@@ -2458,20 +2096,13 @@
"path": "vue/src/tag/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile-first",
- "mobile",
- "pc"
- ]
+ "mode": ["mobile-first", "mobile", "pc"]
},
"TagGroup": {
"path": "vue/src/tag-group/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile-first",
- "pc"
- ]
+ "mode": ["mobile-first", "pc"]
},
"TagGroupMobileFirst": {
"path": "vue/src/tag-group/src/mobile-first.vue",
@@ -2502,9 +2133,7 @@
"path": "vue/src/text-popup/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"TextPopupPc": {
"path": "vue/src/text-popup/src/pc.vue",
@@ -2515,19 +2144,13 @@
"path": "vue/src/time/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"TimeLine": {
"path": "vue/src/time-line/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile-first",
- "mobile",
- "pc"
- ]
+ "mode": ["mobile-first", "mobile", "pc"]
},
"TimeLineMobile": {
"path": "vue/src/time-line/src/mobile.vue",
@@ -2548,57 +2171,43 @@
"path": "vue/src/time-panel/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"TimePicker": {
"path": "vue/src/time-picker/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"TimePickerMobile": {
"path": "vue/src/time-picker-mobile/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile-first"
- ]
+ "mode": ["mobile-first"]
},
"TimeRange": {
"path": "vue/src/time-range/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"TimeSelect": {
"path": "vue/src/time-select/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"TimeSpinner": {
"path": "vue/src/time-spinner/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"TimelineItem": {
"path": "vue/src/timeline-item/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"TimelineItemPc": {
"path": "vue/src/timeline-item/src/pc.vue",
@@ -2609,9 +2218,7 @@
"path": "vue/src/toast/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile"
- ]
+ "mode": ["mobile"]
},
"ToastMobile": {
"path": "vue/src/toast/src/mobile.vue",
@@ -2622,9 +2229,7 @@
"path": "vue/src/toggle-menu/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"ToggleMenuPc": {
"path": "vue/src/toggle-menu/src/pc.vue",
@@ -2635,10 +2240,7 @@
"path": "vue/src/tooltip/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile-first",
- "pc"
- ]
+ "mode": ["mobile-first", "pc"]
},
"TooltipMobileFirst": {
"path": "vue/src/tooltip/src/mobile-first.vue",
@@ -2654,9 +2256,7 @@
"path": "vue/src/top-box/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"TopBoxPc": {
"path": "vue/src/top-box/src/pc.vue",
@@ -2667,17 +2267,13 @@
"path": "vue/src/transfer/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"TransferPanel": {
"path": "vue/src/transfer-panel/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"TransferPc": {
"path": "vue/src/transfer/src/pc.vue",
@@ -2688,17 +2284,13 @@
"path": "vue/src/tree/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"TreeMenu": {
"path": "vue/src/tree-menu/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"TreePc": {
"path": "vue/src/tree/src/pc.vue",
@@ -2709,19 +2301,13 @@
"path": "vue/src/upload/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile-first",
- "pc"
- ]
+ "mode": ["mobile-first", "pc"]
},
"UploadDragger": {
"path": "vue/src/upload-dragger/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile-first",
- "pc"
- ]
+ "mode": ["mobile-first", "pc"]
},
"UploadDraggerMobileFirst": {
"path": "vue/src/upload-dragger/src/mobile-first.vue",
@@ -2737,10 +2323,7 @@
"path": "vue/src/upload-list/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile-first",
- "pc"
- ]
+ "mode": ["mobile-first", "pc"]
},
"UploadListMobileFirst": {
"path": "vue/src/upload-list/src/mobile-first.vue",
@@ -2766,17 +2349,13 @@
"path": "vue/src/user/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"UserAccount": {
"path": "vue/src/user-account/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"UserAccountPc": {
"path": "vue/src/user-account/src/pc.vue",
@@ -2787,9 +2366,7 @@
"path": "vue/src/user-contact/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"UserContactPc": {
"path": "vue/src/user-contact/src/pc.vue",
@@ -2800,19 +2377,13 @@
"path": "vue/src/user-head/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile-first",
- "mobile",
- "pc"
- ]
+ "mode": ["mobile-first", "mobile", "pc"]
},
"UserHeadGroup": {
"path": "vue/src/user-head-group/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile-first"
- ]
+ "mode": ["mobile-first"]
},
"UserHeadGroupMobileFirst": {
"path": "vue/src/user-head-group/src/mobile-first.vue",
@@ -2838,9 +2409,7 @@
"path": "vue/src/user-link/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"UserLinkPc": {
"path": "vue/src/user-link/src/pc.vue",
@@ -2856,25 +2425,19 @@
"path": "vue/src/watermark/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"Wheel": {
"path": "vue/src/wheel/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "mobile"
- ]
+ "mode": ["mobile"]
},
"Wizard": {
"path": "vue/src/wizard/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"WizardPc": {
"path": "vue/src/wizard/src/pc.vue",
@@ -2885,16 +2448,12 @@
"path": "vue/src/year-range/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
},
"YearTable": {
"path": "vue/src/year-table/index.ts",
"type": "component",
"exclude": false,
- "mode": [
- "pc"
- ]
+ "mode": ["pc"]
}
}
diff --git a/packages/renderless/src/skeleton-item/vue.ts b/packages/renderless/src/skeleton-item/vue.ts
new file mode 100644
index 000000000..9c2bbe72d
--- /dev/null
+++ b/packages/renderless/src/skeleton-item/vue.ts
@@ -0,0 +1,14 @@
+import type { ISkeletonItemProps, ISharedRenderlessParamHooks, ISkeletonItemState, ISkeletonItemApi } from '@/types'
+
+export const api = ['state']
+
+export const renderless = (props: ISkeletonItemProps, { reactive, inject }: ISharedRenderlessParamHooks) => {
+ const state: ISkeletonItemState = reactive({
+ isActive: inject('active', false)
+ })
+
+ const api: ISkeletonItemApi = {
+ state
+ }
+ return api
+}
diff --git a/packages/renderless/src/skeleton/index.ts b/packages/renderless/src/skeleton/index.ts
new file mode 100644
index 000000000..89cad526e
--- /dev/null
+++ b/packages/renderless/src/skeleton/index.ts
@@ -0,0 +1,13 @@
+import { isNumber, isNull } from '../common/type'
+
+export const toPxStyle = (value: string | number): undefined | string => {
+ if (isNull(value)) {
+ return undefined
+ }
+
+ if (isNumber(value)) {
+ return `${value}px`
+ }
+
+ return String(value)
+}
diff --git a/packages/renderless/src/skeleton/vue.ts b/packages/renderless/src/skeleton/vue.ts
new file mode 100644
index 000000000..75c964f55
--- /dev/null
+++ b/packages/renderless/src/skeleton/vue.ts
@@ -0,0 +1,14 @@
+import type { ISkeletonProps, ISkeletonApi, ISharedRenderlessParamHooks } from '@/types'
+import { toPxStyle } from './index'
+
+export const api = ['toPxStyle']
+
+export const renderless = (props: ISkeletonProps, { toRefs, provide }: ISharedRenderlessParamHooks): ISkeletonApi => {
+ const { active } = toRefs(props)
+ provide('active', active)
+
+ const api = {
+ toPxStyle
+ }
+ return api
+}
diff --git a/packages/renderless/types/index.ts b/packages/renderless/types/index.ts
index 43bbf8e1f..3a7881726 100644
--- a/packages/renderless/types/index.ts
+++ b/packages/renderless/types/index.ts
@@ -154,6 +154,8 @@ export * from './select-mobile.type'
export * from './select-view.type'
export * from './selected-box.type'
export * from './shared.type'
+export * from './skeleton.type'
+export * from './skeleton-item.type'
export * from './slide-bar.type'
export * from './slider.type'
export * from './slider-button.type'
diff --git a/packages/renderless/types/skeleton-item.type.ts b/packages/renderless/types/skeleton-item.type.ts
new file mode 100644
index 000000000..b87c9366a
--- /dev/null
+++ b/packages/renderless/types/skeleton-item.type.ts
@@ -0,0 +1,14 @@
+import type { ExtractPropTypes } from 'vue'
+import type { skeletonItemProps, $constants } from '@/skeleton-item/src'
+
+export type ISkeletonItemProps = ExtractPropTypes
+
+export type ISkeletonItemConstants = typeof $constants
+
+export interface ISkeletonItemState {
+ isActive: boolean
+}
+
+export interface ISkeletonItemApi {
+ state: ISkeletonItemState
+}
diff --git a/packages/renderless/types/skeleton.type.ts b/packages/renderless/types/skeleton.type.ts
new file mode 100644
index 000000000..2f65a542b
--- /dev/null
+++ b/packages/renderless/types/skeleton.type.ts
@@ -0,0 +1,10 @@
+import type { ExtractPropTypes } from 'vue'
+import type { skeletonProps, $constants } from '@/skeleton/src'
+
+export type ISkeletonProps = ExtractPropTypes
+
+export type ISkeletonConstants = typeof $constants
+
+export interface ISkeletonApi {
+ toPxStyle: (value: string | number) => string | undefined
+}
diff --git a/packages/theme/src/skeleton-item/index.less b/packages/theme/src/skeleton-item/index.less
new file mode 100644
index 000000000..4495bf2cd
--- /dev/null
+++ b/packages/theme/src/skeleton-item/index.less
@@ -0,0 +1,80 @@
+@import '../custom.less';
+@import './vars.less';
+
+@skeleton-item-prefix-cls: ~'@{css-prefix}skeleton-item';
+
+.@{skeleton-item-prefix-cls} {
+ .component-css-vars-skeleton-item();
+
+ &--active {
+ &.@{skeleton-item-prefix-cls} {
+ background: linear-gradient(100deg, rgba(255, 255, 255, 0) 40%, rgba(255, 255, 255, 0.5) 50%, rgba(255, 255, 255, 0) 60%) #f2f2f3;
+ background-size: 200% 100%;
+ background-position-x: 180%;
+ animation: 2s skeleton-loading ease-in-out infinite;
+ }
+ }
+
+ background-color: var(--ti-skeleton-item-bg-color);
+ border-radius: var(--ti-skeleton-item-border-radius);
+
+ &--square {
+ width: 100%;
+ height: var(--ti-skeleton-item-square-height);
+ }
+
+ &--circle {
+ border-radius: var(--ti-skeleton-item-circle-border-radius);
+ &.@{skeleton-item-prefix-cls} {
+ &--small {
+ width: var(--ti-skeleton-item-circle-small-size);
+ height: var(--ti-skeleton-item-circle-small-size);
+ }
+
+ &--medium {
+ width: var(--ti-skeleton-item-circle-medium-size);
+ height: var(--ti-skeleton-item-circle-medium-size);
+ }
+
+ &--large {
+ width: var(--ti-skeleton-item-circle-large-size);
+ height: var(--ti-skeleton-item-circle-large-size);
+ }
+ }
+ }
+
+ &--image {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+
+ svg {
+ width: 40%;
+ height: 40%;
+ fill: var(--ti-skeleton-item-image-icon-color);
+ }
+
+ &.@{skeleton-item-prefix-cls} {
+ &--small {
+ width: var(--ti-skeleton-item-image-small-size-width);
+ height: var(--ti-skeleton-item-image-small-size-height);
+ }
+
+ &--medium {
+ width: var(--ti-skeleton-item-image-medium-size-width);
+ height: var(--ti-skeleton-item-image-medium-size-height);
+ }
+
+ &--large {
+ width: var(--ti-skeleton-item-image-large-size-width);
+ height: var(--ti-skeleton-item-image-large-size-height);
+ }
+ }
+ }
+}
+
+@keyframes skeleton-loading {
+ to {
+ background-position-x: -20%;
+ }
+}
diff --git a/packages/theme/src/skeleton-item/vars.less b/packages/theme/src/skeleton-item/vars.less
new file mode 100644
index 000000000..935e91b6b
--- /dev/null
+++ b/packages/theme/src/skeleton-item/vars.less
@@ -0,0 +1,16 @@
+.component-css-vars-skeleton-item() {
+ --ti-skeleton-item-bg-color: var(--ti-base-color-bg-5, #f5f5f6);
+ --ti-skeleton-item-border-radius: var(--ti-common-border-radius-1, 4px);
+ --ti-skeleton-item-image-icon-color: var(--ti-base-color-common-2, #adb0b8);
+ --ti-skeleton-item-square-height: var(--ti-common-size-4x, 16px);
+ --ti-skeleton-item-circle-border-radius: var(--ti-common-border-radius-3, 50%);
+ --ti-skeleton-item-circle-large-size: var(--ti-common-size-15x, 60px);
+ --ti-skeleton-item-circle-medium-size: var(--ti-common-size-10x, 40px);
+ --ti-skeleton-item-circle-small-size: var(--ti-common-size-5x, 20px);
+ --ti-skeleton-item-image-small-size-height: var(--ti-common-size-15x, 60px);
+ --ti-skeleton-item-image-small-size-width: var(--ti-common-size-15x, 60px);
+ --ti-skeleton-item-image-medium-size-height: var(--ti-common-size-25x, 100px);
+ --ti-skeleton-item-image-medium-size-width: var(--ti-common-size-25x, 100px);
+ --ti-skeleton-item-image-large-size-height: var(--ti-common-size-50x, 200px);
+ --ti-skeleton-item-image-large-size-width: var(--ti-common-size-50x, 200px);
+}
diff --git a/packages/theme/src/skeleton/index.less b/packages/theme/src/skeleton/index.less
new file mode 100644
index 000000000..139296ead
--- /dev/null
+++ b/packages/theme/src/skeleton/index.less
@@ -0,0 +1,42 @@
+@import '../custom.less';
+@import './vars.less';
+
+@skeleton-item-prefix-cls: ~'@{css-prefix}skeleton';
+
+.@{skeleton-item-prefix-cls} {
+ .component-css-vars-skeleton();
+
+ width: 100%;
+
+ &__article {
+ display: flex;
+ width: 100%;
+ }
+
+ &__avatar {
+ position: relative;
+ overflow: hidden;
+ flex-shrink: 0;
+ width: var(--ti-skeleton-avatar-size);
+ height: var(--ti-skeleton-avatar-size);
+ margin-right: var(--ti-skeleton-avatar-margin-right);
+ }
+
+ &__section {
+ width: 100%;
+ }
+
+ &-item__title {
+ width: var(--ti-skeleton-title-width);
+ margin-bottom: var(--ti-skeleton-title-margin-bottom);
+ }
+
+ &-item--square {
+ margin-bottom: var(--ti-skeleton-row-margin-bottom);
+
+ &:last-child {
+ width: var(--ti-skeleton-last-row-width);
+ margin-bottom: 0;
+ }
+ }
+}
diff --git a/packages/theme/src/skeleton/vars.less b/packages/theme/src/skeleton/vars.less
new file mode 100644
index 000000000..2a3e41136
--- /dev/null
+++ b/packages/theme/src/skeleton/vars.less
@@ -0,0 +1,9 @@
+.component-css-vars-skeleton() {
+ --ti-skeleton-avatar-size: var(--ti-common-size-10x, 40px);
+ --ti-skeleton-avatar-background-color: var(--ti-common-color-bg-disabled, #f5f5f6);
+ --ti-skeleton-avatar-margin-right: var(--ti-common-space-4x, 16px);
+ --ti-skeleton-title-margin-bottom: var(--ti-common-space-4x, 16px);
+ --ti-skeleton-title-width: 40%;
+ --ti-skeleton-row-margin-bottom: var(--ti-common-space-3x, 12px);
+ --ti-skeleton-last-row-width: 60%;
+}
diff --git a/packages/vue/package.json b/packages/vue/package.json
index 305e30b4b..62b9500ca 100644
--- a/packages/vue/package.json
+++ b/packages/vue/package.json
@@ -204,6 +204,8 @@
"@opentiny/vue-select-mobile": "workspace:~",
"@opentiny/vue-select-view": "workspace:~",
"@opentiny/vue-selected-box": "workspace:~",
+ "@opentiny/vue-skeleton": "workspace:~",
+ "@opentiny/vue-skeleton-item": "workspace:~",
"@opentiny/vue-slide-bar": "workspace:~",
"@opentiny/vue-slider": "workspace:~",
"@opentiny/vue-slider-button": "workspace:~",
diff --git a/packages/vue/src/skeleton-item/__tests__/skeleton-item.test.tsx b/packages/vue/src/skeleton-item/__tests__/skeleton-item.test.tsx
new file mode 100644
index 000000000..a2dece401
--- /dev/null
+++ b/packages/vue/src/skeleton-item/__tests__/skeleton-item.test.tsx
@@ -0,0 +1,20 @@
+import { mountPcMode } from '@opentiny-internal/vue-test-utils'
+import { test, describe, expect } from 'vitest'
+import SkeletonItem from '@opentiny/vue-skeleton-item'
+import { nextTick } from 'vue'
+
+describe('PC Mode', () => {
+ const mount = mountPcMode
+
+ test('variant', async () => {
+ const wrapper = mount(() => )
+ await nextTick()
+ expect(wrapper.classes()).toContain('tiny-skeleton-item--circle')
+ })
+
+ test('size', async () => {
+ const wrapper = mount(() => )
+ await nextTick()
+ expect(wrapper.classes()).toContain('tiny-skeleton-item--small')
+ })
+})
diff --git a/packages/vue/src/skeleton-item/index.ts b/packages/vue/src/skeleton-item/index.ts
new file mode 100644
index 000000000..9c9cce6f1
--- /dev/null
+++ b/packages/vue/src/skeleton-item/index.ts
@@ -0,0 +1,24 @@
+import SkeletonItem from './src/index'
+import '@opentiny/vue-theme/skeleton-item/index.less'
+import { version } from './package.json'
+
+SkeletonItem.model = {
+ prop: 'modelValue',
+ event: 'update:modelValue'
+}
+
+/* istanbul ignore next */
+SkeletonItem.install = function (Vue) {
+ Vue.component(SkeletonItem.name, SkeletonItem)
+}
+
+SkeletonItem.version = version
+
+/* istanbul ignore next */
+if (process.env.BUILD_TARGET === 'runtime') {
+ if (typeof window !== 'undefined' && window.Vue) {
+ SkeletonItem.install(window.Vue)
+ }
+}
+
+export default SkeletonItem
diff --git a/packages/vue/src/skeleton-item/package.json b/packages/vue/src/skeleton-item/package.json
new file mode 100644
index 000000000..11e384b78
--- /dev/null
+++ b/packages/vue/src/skeleton-item/package.json
@@ -0,0 +1,19 @@
+{
+ "name": "@opentiny/vue-skeleton-item",
+ "version": "3.13.0",
+ "description": "",
+ "main": "lib/index.js",
+ "module": "index.ts",
+ "sideEffects": false,
+ "type": "module",
+ "dependencies": {
+ "@opentiny/vue-renderless": "workspace:~",
+ "@opentiny/vue-theme": "workspace:~",
+ "@opentiny/vue-common": "workspace:~"
+ },
+ "devDependencies": {
+ "@opentiny-internal/vue-test-utils": "workspace:*",
+ "vitest": "^0.31.0"
+ },
+ "license": "MIT"
+}
diff --git a/packages/vue/src/skeleton-item/src/index.ts b/packages/vue/src/skeleton-item/src/index.ts
new file mode 100644
index 000000000..4c61e424f
--- /dev/null
+++ b/packages/vue/src/skeleton-item/src/index.ts
@@ -0,0 +1,34 @@
+import { $props, $setup, $prefix, defineComponent } from '@opentiny/vue-common'
+import type { PropType } from '@opentiny/vue-common'
+
+import template from 'virtual-template?pc'
+
+export type VariantType = 'image' | 'circle' | 'square'
+export type SizeType = 'large' | 'medium' | 'small'
+
+const $constants = {}
+
+export const skeletonItemProps = {
+ ...$props,
+ _constants: {
+ type: Object,
+ default: () => $constants
+ },
+ modelValue: String,
+ variant: {
+ type: String as PropType,
+ default: 'square'
+ },
+ size: {
+ type: String as PropType,
+ default: 'medium'
+ }
+}
+
+export default defineComponent({
+ name: $prefix + 'SkeletonItem',
+ props: skeletonItemProps,
+ setup(props, context) {
+ return $setup({ props, context, template })
+ }
+})
diff --git a/packages/vue/src/skeleton-item/src/pc.vue b/packages/vue/src/skeleton-item/src/pc.vue
new file mode 100644
index 000000000..ac7639674
--- /dev/null
+++ b/packages/vue/src/skeleton-item/src/pc.vue
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
diff --git a/packages/vue/src/skeleton/__tests__/skeleton.test.tsx b/packages/vue/src/skeleton/__tests__/skeleton.test.tsx
new file mode 100644
index 000000000..c99bc02ff
--- /dev/null
+++ b/packages/vue/src/skeleton/__tests__/skeleton.test.tsx
@@ -0,0 +1,65 @@
+import { mountPcMode } from '@opentiny-internal/vue-test-utils'
+import { test, describe, expect } from 'vitest'
+import Skeleton from '@opentiny/vue-skeleton'
+import { nextTick } from 'vue'
+
+describe('PC Mode', () => {
+ const mount = mountPcMode
+
+ test('base usage', () => {
+ const wrapper = mount(() => )
+ expect(wrapper.exists()).toBe(true)
+ })
+
+ test('active', async () => {
+ const wrapper = mount(() => )
+ await nextTick()
+ expect(wrapper.find('.tiny-skeleton-item').classes()).toContain('tiny-skeleton-item--active')
+ })
+
+ test('loading & rows', async () => {
+ const wrapper = mount(() => )
+ await nextTick()
+ expect(wrapper.find('.tiny-skeleton').exists()).toBe(true)
+ expect(wrapper.findAll('.tiny-skeleton-item').length).toBe(4)
+ })
+
+ test('slot', async () => {
+ const wrapper = mount(() => (
+ 加载中
+ }}>
+ ))
+ await nextTick()
+ expect(wrapper.find('.tiny-placeholder').exists()).toBe(true)
+ })
+
+ test('avatar', async () => {
+ const wrapper = mount(() => )
+ await nextTick()
+ expect(wrapper.find('.tiny-skeleton__avatar').exists()).toBe(true)
+ })
+
+ test('rows-width', async () => {
+ const widths = ['200px', '100px', '50px']
+ const wrapper = mount(, {
+ props: {
+ 'rows-width': widths
+ }
+ })
+ await nextTick()
+ const skeletonItems = wrapper.findAll('.tiny-skeleton-item')
+
+ expect(skeletonItems).toHaveLength(4)
+
+ skeletonItems.shift()
+
+ skeletonItems.forEach((item, index) => {
+ const computedStyles = getComputedStyle(item.element)
+ const width = computedStyles.width
+
+ expect(width).toBe(widths[index])
+ })
+ })
+})
diff --git a/packages/vue/src/skeleton/index.ts b/packages/vue/src/skeleton/index.ts
new file mode 100644
index 000000000..e071e3213
--- /dev/null
+++ b/packages/vue/src/skeleton/index.ts
@@ -0,0 +1,24 @@
+import Skeleton from './src/index'
+import '@opentiny/vue-theme/skeleton/index.less'
+import { version } from './package.json'
+
+Skeleton.model = {
+ prop: 'modelValue',
+ event: 'update:modelValue'
+}
+
+/* istanbul ignore next */
+Skeleton.install = function (Vue) {
+ Vue.component(Skeleton.name, Skeleton)
+}
+
+Skeleton.version = version
+
+/* istanbul ignore next */
+if (process.env.BUILD_TARGET === 'runtime') {
+ if (typeof window !== 'undefined' && window.Vue) {
+ Skeleton.install(window.Vue)
+ }
+}
+
+export default Skeleton
diff --git a/packages/vue/src/skeleton/package.json b/packages/vue/src/skeleton/package.json
new file mode 100644
index 000000000..621e72ea3
--- /dev/null
+++ b/packages/vue/src/skeleton/package.json
@@ -0,0 +1,20 @@
+{
+ "name": "@opentiny/vue-skeleton",
+ "version": "3.13.0",
+ "description": "",
+ "main": "lib/index.js",
+ "module": "index.ts",
+ "sideEffects": false,
+ "type": "module",
+ "dependencies": {
+ "@opentiny/vue-common": "workspace:~",
+ "@opentiny/vue-renderless": "workspace:~",
+ "@opentiny/vue-theme": "workspace:~",
+ "@opentiny/vue-skeleton-item": "workspace:~"
+ },
+ "license": "MIT",
+ "devDependencies": {
+ "@opentiny-internal/vue-test-utils": "workspace:*",
+ "vitest": "0.31.0"
+ }
+}
diff --git a/packages/vue/src/skeleton/src/index.ts b/packages/vue/src/skeleton/src/index.ts
new file mode 100644
index 000000000..ed3205af4
--- /dev/null
+++ b/packages/vue/src/skeleton/src/index.ts
@@ -0,0 +1,42 @@
+import { $props, $setup, $prefix, defineComponent } from '@opentiny/vue-common'
+import type { PropType } from '@opentiny/vue-common'
+import template from 'virtual-template?pc'
+
+const $constants = {}
+
+export const skeletonProps = {
+ ...$props,
+ _constants: {
+ type: Object,
+ default: () => $constants
+ },
+ modelValue: String,
+ loading: {
+ type: Boolean,
+ default: true
+ },
+ rows: {
+ type: Number,
+ default: 3
+ },
+ avatar: {
+ type: Boolean,
+ default: false
+ },
+ rowsWidth: {
+ type: Array as PropType<(string | number)[]>,
+ default: () => []
+ },
+ active: {
+ type: Boolean,
+ default: true
+ }
+}
+
+export default defineComponent({
+ name: $prefix + 'Skeleton',
+ props: skeletonProps,
+ setup(props, context) {
+ return $setup({ props, context, template })
+ }
+})
diff --git a/packages/vue/src/skeleton/src/pc.vue b/packages/vue/src/skeleton/src/pc.vue
new file mode 100644
index 000000000..75de9ff94
--- /dev/null
+++ b/packages/vue/src/skeleton/src/pc.vue
@@ -0,0 +1,39 @@
+
+
+
+
+