@opentiny/vue-docs 3.26.7 → 3.27.0

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 (169) hide show
  1. package/demos/apis/base-select.js +13 -0
  2. package/demos/apis/calendar-view.js +12 -0
  3. package/demos/apis/color-picker.js +16 -0
  4. package/demos/apis/color-select-panel.js +14 -0
  5. package/demos/apis/config-provider.js +2 -1
  6. package/demos/apis/date-picker.js +52 -0
  7. package/demos/apis/dialog-box.js +16 -4
  8. package/demos/apis/drawer.js +22 -0
  9. package/demos/apis/exception.js +43 -27
  10. package/demos/apis/grid.js +38 -3
  11. package/demos/apis/guide.js +14 -0
  12. package/demos/apis/pager.js +3 -3
  13. package/demos/apis/query-builder.js +346 -1
  14. package/demos/apis/select.js +41 -0
  15. package/demos/apis/space.js +99 -0
  16. package/demos/apis/steps.js +15 -0
  17. package/demos/apis/time-picker.js +28 -0
  18. package/demos/apis/time-select.js +30 -0
  19. package/demos/apis/tree-menu.js +14 -0
  20. package/demos/mobile-first/app/calendar-view/basic-usage.vue +1 -1
  21. package/demos/mobile-first/app/exception/webdoc/exception.js +4 -4
  22. package/demos/mobile-first/app/load-list/webdoc/load-list.en.md +1 -1
  23. package/demos/mobile-first/app/space/basic-usage-composition-api.vue +41 -0
  24. package/demos/mobile-first/app/space/basic-usage.spec.ts +37 -0
  25. package/demos/mobile-first/app/space/basic-usage.vue +37 -0
  26. package/demos/mobile-first/app/space/space-align-composition-api.vue +37 -0
  27. package/demos/mobile-first/app/space/space-align.spec.ts +24 -0
  28. package/demos/mobile-first/app/space/space-align.vue +37 -0
  29. package/demos/mobile-first/app/space/space-direction-composition-api.vue +32 -0
  30. package/demos/mobile-first/app/space/space-direction.spec.ts +17 -0
  31. package/demos/mobile-first/app/space/space-direction.vue +32 -0
  32. package/demos/mobile-first/app/space/space-justify-composition-api.vue +44 -0
  33. package/demos/mobile-first/app/space/space-justify.spec.ts +18 -0
  34. package/demos/mobile-first/app/space/space-justify.vue +39 -0
  35. package/demos/mobile-first/app/space/space-order-composition-api.vue +14 -0
  36. package/demos/mobile-first/app/space/space-order.spec.ts +13 -0
  37. package/demos/mobile-first/app/space/space-order.vue +14 -0
  38. package/demos/mobile-first/app/space/space-size-composition-api.vue +39 -0
  39. package/demos/mobile-first/app/space/space-size.spec.ts +37 -0
  40. package/demos/mobile-first/app/space/space-size.vue +39 -0
  41. package/demos/mobile-first/app/space/space-wrap-composition-api.vue +31 -0
  42. package/demos/mobile-first/app/space/space-wrap.spec.ts +25 -0
  43. package/demos/mobile-first/app/space/space-wrap.vue +31 -0
  44. package/demos/mobile-first/app/space/webdoc/space.cn.md +9 -0
  45. package/demos/mobile-first/app/space/webdoc/space.en.md +9 -0
  46. package/demos/mobile-first/app/space/webdoc/space.js +98 -0
  47. package/demos/mobile-first/menus.js +3 -1
  48. package/demos/pc/app/calendar-view/basic-usage-composition-api.vue +1 -1
  49. package/demos/pc/app/calendar-view/basic-usage.vue +1 -1
  50. package/demos/pc/app/carousel/webdoc/carousel.js +2 -1
  51. package/demos/pc/app/color-picker/linear-gradient-composition-api.vue +20 -0
  52. package/demos/pc/app/color-picker/linear-gradient.spec.ts +10 -0
  53. package/demos/pc/app/color-picker/linear-gradient.vue +28 -0
  54. package/demos/pc/app/color-picker/webdoc/color-picker.js +27 -0
  55. package/demos/pc/app/color-select-panel/linear-gradient-composition-api.vue +38 -0
  56. package/demos/pc/app/color-select-panel/linear-gradient.spec.ts +71 -0
  57. package/demos/pc/app/color-select-panel/linear-gradient.vue +45 -0
  58. package/demos/pc/app/color-select-panel/webdoc/color-select-panel.js +12 -0
  59. package/demos/pc/app/config-provider/webdoc/config-provider.js +2 -1
  60. package/demos/pc/app/date-panel/basic-usage.vue +19 -8
  61. package/demos/pc/app/date-panel/custom-weeks.vue +19 -9
  62. package/demos/pc/app/date-panel/disabled-date.vue +29 -19
  63. package/demos/pc/app/date-panel/event.vue +38 -31
  64. package/demos/pc/app/date-panel/format.vue +15 -5
  65. package/demos/pc/app/date-panel/readonly.vue +19 -8
  66. package/demos/pc/app/date-panel/shortcuts.vue +182 -176
  67. package/demos/pc/app/date-panel/unlink-panels.vue +15 -5
  68. package/demos/pc/app/date-picker/now-composition-api.vue +4 -1
  69. package/demos/pc/app/date-picker/now.vue +6 -2
  70. package/demos/pc/app/date-picker/slot-composition-api.vue +112 -0
  71. package/demos/pc/app/date-picker/slot.spec.ts +41 -0
  72. package/demos/pc/app/date-picker/slot.vue +119 -0
  73. package/demos/pc/app/date-picker/webdoc/date-picker.js +12 -0
  74. package/demos/pc/app/dialog-box/before-close-composition-api.vue +65 -0
  75. package/demos/pc/app/dialog-box/before-close.spec.ts +6 -0
  76. package/demos/pc/app/dialog-box/before-close.vue +71 -0
  77. package/demos/pc/app/dialog-box/webdoc/dialog-box.js +16 -0
  78. package/demos/pc/app/dialog-select/nest-tree-single.spec.ts +4 -7
  79. package/demos/pc/app/drawer/webdoc/drawer.js +2 -1
  80. package/demos/pc/app/exception/basic-usage-composition-api.vue +15 -0
  81. package/demos/pc/app/exception/basic-usage.vue +21 -0
  82. package/demos/pc/app/exception/button-text-composition-api.vue +13 -0
  83. package/demos/pc/app/exception/button-text.vue +21 -0
  84. package/demos/pc/app/exception/component-page-composition-api.vue +44 -0
  85. package/demos/pc/app/exception/component-page.vue +55 -0
  86. package/demos/pc/app/exception/page-empty-composition-api.vue +7 -0
  87. package/demos/pc/app/exception/page-empty.vue +13 -0
  88. package/demos/pc/app/exception/slot-composition-api.vue +29 -0
  89. package/demos/pc/app/exception/slot.vue +23 -0
  90. package/demos/pc/app/exception/sub-message-composition-api.vue +7 -0
  91. package/demos/pc/app/exception/sub-message.vue +13 -0
  92. package/demos/pc/app/exception/webdoc/exception.cn.md +5 -0
  93. package/demos/pc/app/exception/webdoc/exception.en.md +5 -0
  94. package/demos/pc/app/exception/webdoc/exception.js +84 -0
  95. package/demos/pc/app/grid/custom/default-customs-composition-api.vue +66 -0
  96. package/demos/pc/app/grid/custom/default-customs.spec.ts +9 -0
  97. package/demos/pc/app/grid/custom/default-customs.vue +75 -0
  98. package/demos/pc/app/grid/mouse-keyboard/mouse-config-hover-composition-api.vue +70 -0
  99. package/demos/pc/app/grid/mouse-keyboard/mouse-config-hover.vue +79 -0
  100. package/demos/pc/app/grid/validation/highlight-error-composition-api.vue +183 -0
  101. package/demos/pc/app/grid/validation/highlight-error.vue +192 -0
  102. package/demos/pc/app/grid/webdoc/grid-custom.js +11 -0
  103. package/demos/pc/app/grid/webdoc/grid-editor.js +2 -2
  104. package/demos/pc/app/grid/webdoc/grid-mouse-keyboard.js +9 -0
  105. package/demos/pc/app/grid/webdoc/grid-validation.js +9 -0
  106. package/demos/pc/app/guide/mask-composition-api.vue +31 -0
  107. package/demos/pc/app/guide/mask.spec.ts +13 -0
  108. package/demos/pc/app/guide/mask.vue +41 -0
  109. package/demos/pc/app/guide/webdoc/guide.js +12 -0
  110. package/demos/pc/app/input/resize.spec.ts +1 -1
  111. package/demos/pc/app/notify/manual-close-composition-api.vue +9 -11
  112. package/demos/pc/app/notify/manual-close.spec.ts +1 -1
  113. package/demos/pc/app/notify/manual-close.vue +9 -11
  114. package/demos/pc/app/notify/verticalOffset.spec.ts +3 -1
  115. package/demos/pc/app/query-builder/handle.vue +558 -0
  116. package/demos/pc/app/query-builder/limit.vue +555 -0
  117. package/demos/pc/app/query-builder/webdoc/query-builder.js +29 -1
  118. package/demos/pc/app/radio/dynamic-disable.vue +1 -1
  119. package/demos/pc/app/space/basic-usage-composition-api.vue +41 -0
  120. package/demos/pc/app/space/basic-usage.spec.ts +37 -0
  121. package/demos/pc/app/space/basic-usage.vue +37 -0
  122. package/demos/pc/app/space/space-align-composition-api.vue +37 -0
  123. package/demos/pc/app/space/space-align.spec.ts +24 -0
  124. package/demos/pc/app/space/space-align.vue +37 -0
  125. package/demos/pc/app/space/space-direction-composition-api.vue +32 -0
  126. package/demos/pc/app/space/space-direction.spec.ts +17 -0
  127. package/demos/pc/app/space/space-direction.vue +32 -0
  128. package/demos/pc/app/space/space-justify-composition-api.vue +44 -0
  129. package/demos/pc/app/space/space-justify.spec.ts +18 -0
  130. package/demos/pc/app/space/space-justify.vue +39 -0
  131. package/demos/pc/app/space/space-order-composition-api.vue +14 -0
  132. package/demos/pc/app/space/space-order.spec.ts +13 -0
  133. package/demos/pc/app/space/space-order.vue +14 -0
  134. package/demos/pc/app/space/space-size-composition-api.vue +39 -0
  135. package/demos/pc/app/space/space-size.spec.ts +37 -0
  136. package/demos/pc/app/space/space-size.vue +39 -0
  137. package/demos/pc/app/space/space-wrap-composition-api.vue +31 -0
  138. package/demos/pc/app/space/space-wrap.spec.ts +25 -0
  139. package/demos/pc/app/space/space-wrap.vue +31 -0
  140. package/demos/pc/app/space/webdoc/space.cn.md +9 -0
  141. package/demos/pc/app/space/webdoc/space.en.md +9 -0
  142. package/demos/pc/app/space/webdoc/space.js +98 -0
  143. package/demos/pc/app/steps/slot-icon-composition-api.vue +46 -0
  144. package/demos/pc/app/steps/slot-icon.vue +54 -0
  145. package/demos/pc/app/steps/webdoc/steps.js +12 -0
  146. package/demos/pc/app/tree-menu/events-composition-api.vue +4 -0
  147. package/demos/pc/app/tree-menu/events.vue +4 -0
  148. package/demos/pc/app/tree-menu/webdoc/tree-menu.js +2 -2
  149. package/demos/pc/app/tree-menu/with-icon-composition-api.vue +149 -24
  150. package/demos/pc/app/tree-menu/with-icon.spec.ts +1 -1
  151. package/demos/pc/app/tree-menu/with-icon.vue +149 -24
  152. package/demos/pc/menus.js +16 -0
  153. package/demos/pc/webdoc/changelog.md +209 -177
  154. package/env/.env.saas +1 -1
  155. package/env/.env.saaspages +9 -0
  156. package/package.json +20 -19
  157. package/playground/App.vue +2 -2
  158. package/src/App.vue +2 -1
  159. package/src/components/anchor.vue +20 -74
  160. package/src/const.ts +2 -0
  161. package/src/main.js +2 -5
  162. package/src/menus.js +2 -1
  163. package/src/tools/docsearch.js +3 -2
  164. package/src/tools/useTemplateMode.js +2 -1
  165. package/src/tools/useTheme.js +2 -2
  166. package/src/views/components-doc/cmp-config.js +2 -1
  167. package/src/views/components-doc/common.vue +76 -12
  168. /package/demos/pc/app/user/{nodata-text-composition-api.vue → no-data-text-composition-api.vue} +0 -0
  169. /package/demos/pc/app/user/{nodata-text.vue → no-data-text.vue} +0 -0
@@ -0,0 +1,9 @@
1
+ ---
2
+ title: Space 间距
3
+ ---
4
+
5
+ # Space 间距
6
+
7
+ <div>
8
+ It is mainly used to control the blank area between interface elements to help improve the clarity and aesthetics of the overall layout.
9
+ </div>
@@ -0,0 +1,98 @@
1
+ export default {
2
+ column: '2',
3
+ owner: '',
4
+ demos: [
5
+ {
6
+ demoId: 'basic-space',
7
+ name: {
8
+ 'zh-CN': '基本用法',
9
+ 'en-US': 'Basic Usage'
10
+ },
11
+ desc: {
12
+ 'zh-CN': '<p>默认采用横向布局(row),自动为插槽内容添加间距。</p>',
13
+ 'en-US': '<p>Uses horizontal layout (row) by default, automatically adding spacing between slot content.</p>'
14
+ },
15
+ codeFiles: ['basic-usage.vue']
16
+ },
17
+ {
18
+ demoId: 'space-size',
19
+ name: {
20
+ 'zh-CN': '间距尺寸',
21
+ 'en-US': 'Spacing Size'
22
+ },
23
+ desc: {
24
+ 'zh-CN':
25
+ '<p>通过 <code>size</code> 属性设置间距大小,支持 small、medium、large 预定义值或自定义数值/数组。</p>',
26
+ 'en-US':
27
+ '<p>Use the <code>size</code> prop to set spacing size. Supports predefined values (small, medium, large) or custom values/arrays.</p>'
28
+ },
29
+ codeFiles: ['space-size.vue']
30
+ },
31
+ {
32
+ demoId: 'space-direction',
33
+ name: {
34
+ 'zh-CN': '排列方向',
35
+ 'en-US': 'Layout Direction'
36
+ },
37
+ desc: {
38
+ 'zh-CN': '<p>通过 <code>direction</code> 属性设置布局方向,支持 row(横向)或 column(纵向)。</p>',
39
+ 'en-US':
40
+ '<p>Use the <code>direction</code> prop to set layout direction: row (horizontal) or column (vertical).</p>'
41
+ },
42
+ codeFiles: ['space-direction.vue']
43
+ },
44
+ {
45
+ demoId: 'space-wrap',
46
+ name: {
47
+ 'zh-CN': '换行显示',
48
+ 'en-US': 'Content Wrapping'
49
+ },
50
+ desc: {
51
+ 'zh-CN': '<p>通过 <code>wrap</code> 属性控制子项内容是否换行显示。</p>',
52
+ 'en-US': '<p>Use the <code>wrap</code> prop to control whether child items wrap to multiple lines.</p>'
53
+ },
54
+ codeFiles: ['space-wrap.vue']
55
+ },
56
+ {
57
+ demoId: 'space-align',
58
+ name: {
59
+ 'zh-CN': '交叉轴对齐',
60
+ 'en-US': 'Cross Axis Alignment'
61
+ },
62
+ desc: {
63
+ 'zh-CN': '<p>通过 <code>align</code> 属性设置交叉轴对齐方式,支持 start、center、end、baseline 等值。</p>',
64
+ 'en-US':
65
+ '<p>Use the <code>align</code> prop to define alignment on the cross axis, supporting values like start, center, end, and baseline.</p>'
66
+ },
67
+ codeFiles: ['space-align.vue']
68
+ },
69
+ {
70
+ demoId: 'space-justify',
71
+ name: {
72
+ 'zh-CN': '主轴对齐',
73
+ 'en-US': 'Main Axis Justification'
74
+ },
75
+ desc: {
76
+ 'zh-CN':
77
+ '<p>通过 <code>justify</code> 属性设置主轴对齐方式,支持 start、center、end、space-between、space-around、space-evenly。</p>',
78
+ 'en-US':
79
+ '<p>Use the <code>justify</code> prop to set main axis alignment, supporting start, center, end, space-between, space-around, and space-evenly.</p>'
80
+ },
81
+ codeFiles: ['space-justify.vue']
82
+ },
83
+ {
84
+ demoId: 'space-order',
85
+ name: {
86
+ 'zh-CN': '自定义排序',
87
+ 'en-US': 'Custom Ordering'
88
+ },
89
+ desc: {
90
+ 'zh-CN':
91
+ '<p>通过 <code>order</code> 属性传入 key 数组来自定义子元素的渲染顺序,未设置 key 的子元素将自动排列在最后。</p>',
92
+ 'en-US':
93
+ '<p>Use the <code>order</code> prop with an array of keys to customize the rendering order of child elements. Children without defined keys are automatically arranged at the end.</p>'
94
+ },
95
+ codeFiles: ['space-order.vue']
96
+ }
97
+ ]
98
+ }
@@ -133,7 +133,9 @@ export const cmpMenus = [
133
133
  { name: 'Amount', nameCn: '金额', key: 'amount' },
134
134
  { name: 'currency', nameCn: '币种', key: 'currency' },
135
135
  { name: 'CalendarView', nameCn: '日历', key: 'calendar-view' },
136
- { name: 'FloatingButton', nameCn: '悬浮按钮', key: 'floating-button' }
136
+ { name: 'FloatingButton', nameCn: '悬浮按钮', key: 'floating-button' },
137
+ { name: 'Divider', nameCn: '分割线', key: 'divider' },
138
+ { name: 'Space', nameCn: '间距', key: 'space' }
137
139
  ]
138
140
  }
139
141
  ]
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <tiny-calendar-view :events="eventslist" :year="2023" :month="5"></tiny-calendar-view>
2
+ <tiny-calendar-view :events="eventslist" :year="2023" :month="5" :day="15"></tiny-calendar-view>
3
3
  </template>
4
4
 
5
5
  <script setup lang="ts">
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <tiny-calendar-view :events="eventslist" :year="2023" :month="5"> </tiny-calendar-view>
2
+ <tiny-calendar-view :events="eventslist" :year="2023" :month="5" :day="15"> </tiny-calendar-view>
3
3
  </template>
4
4
 
5
5
  <script>
@@ -97,7 +97,8 @@ export default {
97
97
  'zh-CN': '<p>通过配置 <code>type</code> 属性为<code>vertical</code>即可实现纵向轮播。</p>\n',
98
98
  'en-US': '<p>Set <code>type</code> to vertical to implement <code>vertical</code> rotation. </p>\n'
99
99
  },
100
- codeFiles: ['up-down-carousel.vue']
100
+ codeFiles: ['up-down-carousel.vue'],
101
+ hideSaas: true
101
102
  },
102
103
  {
103
104
  demoId: 'show-title',
@@ -0,0 +1,20 @@
1
+ <template>
2
+ <div>
3
+ <tiny-color-picker v-model="color" color-mode="linear-gradient" @confirm="onConfirm" />
4
+ </div>
5
+ </template>
6
+
7
+ <script setup>
8
+ import { TinyColorPicker, TinyNotify } from '@opentiny/vue'
9
+ import { ref } from 'vue'
10
+
11
+ const color = ref('linear-gradient(90deg, #66ADFF 21%,#00FEF1 100%)')
12
+ const onConfirm = () => {
13
+ TinyNotify({
14
+ type: 'success',
15
+ position: 'top-right',
16
+ title: '用户点击了选择',
17
+ message: color.value
18
+ })
19
+ }
20
+ </script>
@@ -0,0 +1,10 @@
1
+ import { test, expect } from '@playwright/test'
2
+
3
+ test('渐变', async ({ page }) => {
4
+ page.on('pageerror', (exception) => expect(exception).toBeNull())
5
+ await page.goto('color-picker#color-mode')
6
+ await page.locator('.tiny-color-picker > .tiny-color-picker__inner').click()
7
+ await page.getByRole('button', { name: '确定' }).click()
8
+ await expect(page.locator('body')).toContainText('linear-gradient(90deg, #66ADFF 21%,#00FEF1 100%)')
9
+ await page.locator('.tiny-notify__icon-close > .tiny-svg').click()
10
+ })
@@ -0,0 +1,28 @@
1
+ <template>
2
+ <div>
3
+ <tiny-color-picker v-model="color" color-mode="linear-gradient" @confirm="onConfirm" />
4
+ </div>
5
+ </template>
6
+
7
+ <script>
8
+ import { TinyColorPicker, TinyNotify } from '@opentiny/vue'
9
+ import { ref } from 'vue'
10
+
11
+ export default {
12
+ components: {
13
+ TinyColorPicker
14
+ },
15
+ setup() {
16
+ const color = ref('linear-gradient(90deg, #66ADFF 21%,#00FEF1 100%)')
17
+ const onConfirm = () => {
18
+ TinyNotify({
19
+ type: 'success',
20
+ position: 'top-right',
21
+ title: '用户点击了选择',
22
+ message: color.value
23
+ })
24
+ }
25
+ return { onConfirm, color }
26
+ }
27
+ }
28
+ </script>
@@ -121,6 +121,20 @@ export default {
121
121
  'en-US': ''
122
122
  },
123
123
  codeFiles: ['format.vue']
124
+ },
125
+ {
126
+ demoId: 'color-mode',
127
+ name: {
128
+ 'zh-CN': '颜色模式',
129
+ 'en-US': 'color mode'
130
+ },
131
+ desc: {
132
+ 'zh-CN':
133
+ '通过设置 <code>color-mode</code> 属性切换颜色模式。支持 <code>monochrome</code>(单色) 和 <code>linear-gradient</code>(线性渐变) 两种模式。',
134
+ 'en-US':
135
+ 'Set the <code>color-mode</code> attribute to switch color modes. Supports <code>monochrome</code> and <code>linear-gradient</code> modes.'
136
+ },
137
+ codeFiles: ['linear-gradient.vue']
124
138
  }
125
139
  ],
126
140
  features: [
@@ -214,6 +228,19 @@ export default {
214
228
  },
215
229
  apis: ['change'],
216
230
  demos: ['events']
231
+ },
232
+ {
233
+ id: 'color-mode',
234
+ name: '颜色模式',
235
+ support: {
236
+ value: true
237
+ },
238
+ description: '通过 color-mode 属性来定义是否启用线性渐变',
239
+ cloud: {
240
+ value: false
241
+ },
242
+ apis: ['color-mode'],
243
+ demos: ['color-mode']
217
244
  }
218
245
  ]
219
246
  }
@@ -0,0 +1,38 @@
1
+ <script lang="ts" setup>
2
+ import { TinyColorSelectPanel, TinyButton } from '@opentiny/vue'
3
+ import { ref } from 'vue'
4
+
5
+ const color = ref('linear-gradient(120deg, hsla(334, 80%, 40%, 0.32) 0%,#F48FA2FF 96%)')
6
+ const visible = ref(false)
7
+ const history = ref(['linear-gradient(120deg, hsla(201, 80%, 40%, 0.32) 0%,#8FF2F4FF 96%)'])
8
+ const predefineColor = ref(['#66ccff'])
9
+ const changeVisible = () => {
10
+ visible.value = !visible.value
11
+ }
12
+ const onConfirm = () => {
13
+ hidden()
14
+ }
15
+ const hidden = () => {
16
+ visible.value = false
17
+ }
18
+ </script>
19
+
20
+ <template>
21
+ <div>
22
+ <tiny-button @click="changeVisible">Show Color select panel</tiny-button>
23
+ <div style="position: relative">
24
+ <tiny-color-select-panel
25
+ alpha
26
+ color-mode="linear-gradient"
27
+ v-model="color"
28
+ :visible="visible"
29
+ @confirm="onConfirm"
30
+ @cancel="hidden"
31
+ enable-predefine-color
32
+ :predefine="predefineColor"
33
+ enable-history
34
+ :history="history"
35
+ />
36
+ </div>
37
+ </div>
38
+ </template>
@@ -0,0 +1,71 @@
1
+ import { expect, test } from '@playwright/test'
2
+
3
+ test('线性渐变', async ({ page }) => {
4
+ await page.goto('color-select-panel#linear-gradient')
5
+ await page.locator('#linear-gradient').getByRole('button', { name: 'Show Color select panel' }).click()
6
+ expect(await page.locator('.tiny-color-select-panel__linear-gradient__thumb').count()).toBe(2)
7
+ await page.locator('.tiny-color-select-panel__linear-gradient__thumb').first().click()
8
+ await page.locator('.tiny-color-select-panel__linear-gradient').click()
9
+ await page.locator('.tiny-color-select-panel__linear-gradient > div:nth-child(2)').click()
10
+ })
11
+
12
+ test('线性渐变 (历史记录)', async ({ page }) => {
13
+ await page.goto('color-select-panel#linear-gradient')
14
+ await page.locator('#linear-gradient').getByRole('button', { name: 'Show Color select panel' }).click()
15
+ await expect(page.locator('.tiny-color-select-panel__history__color-block')).toBeVisible()
16
+ await expect(page.getByLabel('示例', { exact: true }).getByRole('textbox')).toHaveValue(
17
+ 'linear-gradient(120deg, hsla(334, 80%, 40%, 0.32) 0%,#F48FA2FF 96%)'
18
+ )
19
+ await page.locator('.tiny-color-select-panel__history__color-block').click()
20
+ await expect(page.getByLabel('示例', { exact: true }).getByRole('textbox')).toHaveValue(
21
+ 'linear-gradient(120deg, hsla(201, 80%, 40%, 0.32) 0%,#8FF2F4FF 96%)'
22
+ )
23
+ await page.getByRole('button', { name: '取消' }).click()
24
+ await page.locator('#linear-gradient').getByRole('button', { name: 'Show Color select panel' }).click()
25
+ await expect(page.getByLabel('示例', { exact: true }).getByRole('textbox')).toHaveValue(
26
+ 'linear-gradient(120deg, hsla(334, 80%, 40%, 0.32) 0%,#F48FA2FF 96%)'
27
+ )
28
+ await page.locator('.tiny-color-select-panel__inner__hue-select').click()
29
+ await page.getByRole('button', { name: '确定' }).click()
30
+ await page.locator('#linear-gradient').getByRole('button', { name: 'Show Color select panel' }).click()
31
+ await page.locator('.tiny-color-select-panel__history__color-block').first().click()
32
+ await expect(page.getByLabel('示例', { exact: true }).getByRole('textbox')).toHaveValue(
33
+ 'linear-gradient(120deg, hsla(201, 80%, 40%, 0.32) 0%,#8FF2F4FF 96%)'
34
+ )
35
+ await page.getByRole('button', { name: '确定' }).click()
36
+ await page.locator('#linear-gradient').getByRole('button', { name: 'Show Color select panel' }).click()
37
+ await expect(page.getByLabel('示例', { exact: true }).getByRole('textbox')).toHaveValue(
38
+ 'linear-gradient(120deg, hsla(201, 80%, 40%, 0.32) 0%,#8FF2F4FF 96%)'
39
+ )
40
+ await page.getByRole('button', { name: '确定' }).click()
41
+ })
42
+
43
+ test('线性渐变 (预定义颜色)', async ({ page }) => {
44
+ await page.goto('color-select-panel#linear-gradient')
45
+
46
+ await page.locator('#linear-gradient').getByRole('button', { name: 'Show Color select panel' }).click()
47
+ await expect(page.getByLabel('示例', { exact: true }).getByRole('textbox')).toHaveValue(
48
+ 'linear-gradient(120deg, hsla(334, 80%, 40%, 0.32) 0%,#F48FA2FF 96%)'
49
+ )
50
+ await page.locator('.tiny-color-select-panel__predefine__color-block').click()
51
+ await expect(page.getByLabel('示例', { exact: true }).getByRole('textbox')).toHaveValue(
52
+ 'linear-gradient(180deg, #FFFFFFFF 0%,#66CCFFFF 100%)'
53
+ )
54
+ await page.getByRole('button', { name: '确定' }).click()
55
+ await page.locator('#linear-gradient').getByRole('button', { name: 'Show Color select panel' }).click()
56
+ await page.locator('.tiny-color-select-panel__history__color-block').first().click()
57
+ await expect(page.getByLabel('示例', { exact: true }).getByRole('textbox')).toHaveValue(
58
+ 'linear-gradient(120deg, hsla(201, 80%, 40%, 0.32) 0%,#8FF2F4FF 96%)'
59
+ )
60
+ await page.locator('.tiny-color-select-panel__history > div:nth-child(2)').click()
61
+ await expect(page.getByLabel('示例', { exact: true }).getByRole('textbox')).toHaveValue(
62
+ 'linear-gradient(180deg, #FFFFFFFF 0%,#66CCFFFF 100%)'
63
+ )
64
+ await page.locator('.tiny-color-select-panel__history__color-block').first().click()
65
+ await page.getByRole('button', { name: '确定' }).click()
66
+ await page.locator('#linear-gradient').getByRole('button', { name: 'Show Color select panel' }).click()
67
+ await expect(page.getByLabel('示例', { exact: true }).getByRole('textbox')).toHaveValue(
68
+ 'linear-gradient(120deg, hsla(201, 80%, 40%, 0.32) 0%,#8FF2F4FF 96%)'
69
+ )
70
+ await page.getByRole('button', { name: '确定' }).click()
71
+ })
@@ -0,0 +1,45 @@
1
+ <script lang="ts">
2
+ import { defineComponent } from 'vue'
3
+ import { ref } from 'vue'
4
+ import { TinyButton, TinyColorSelectPanel } from '@opentiny/vue'
5
+
6
+ export default defineComponent({
7
+ components: { TinyButton, TinyColorSelectPanel },
8
+ setup() {
9
+ const color = ref('linear-gradient(120deg, hsla(334, 80%, 40%, 0.32) 0%,#F48FA2FF 96%)')
10
+ const visible = ref(false)
11
+ const history = ref(['linear-gradient(120deg, hsla(201, 80%, 40%, 0.32) 0%,#8FF2F4FF 96%)'])
12
+ const predefineColor = ref(['#66ccff'])
13
+ const changeVisible = () => {
14
+ visible.value = !visible.value
15
+ }
16
+ const onConfirm = () => {
17
+ hidden()
18
+ }
19
+ const hidden = () => {
20
+ visible.value = false
21
+ }
22
+ return { color, visible, history, predefineColor, changeVisible, onConfirm, hidden }
23
+ }
24
+ })
25
+ </script>
26
+
27
+ <template>
28
+ <div>
29
+ <tiny-button @click="changeVisible">Show Color select panel</tiny-button>
30
+ <div style="position: relative">
31
+ <tiny-color-select-panel
32
+ alpha
33
+ color-mode="linear-gradient"
34
+ v-model="color"
35
+ :visible="visible"
36
+ @confirm="onConfirm"
37
+ @cancel="hidden"
38
+ enable-predefine-color
39
+ :predefine="predefineColor"
40
+ enable-history
41
+ :history="history"
42
+ />
43
+ </div>
44
+ </div>
45
+ </template>
@@ -16,6 +16,18 @@ export default {
16
16
  },
17
17
  codeFiles: ['base.vue']
18
18
  },
19
+ {
20
+ demoId: 'linear-gradient',
21
+ name: {
22
+ 'zh-CN': '线性渐变',
23
+ 'en-US': 'Linear Gradient'
24
+ },
25
+ desc: {
26
+ 'zh-CN': '通过<code>color-mode</code>设置显示色彩选择的色彩模式。',
27
+ 'en-US': 'Set the color mode for display color selection through<code>color mode</code>.'
28
+ },
29
+ codeFiles: ['linear-gradient.vue']
30
+ },
19
31
  {
20
32
  demoId: 'alpha',
21
33
  name: {
@@ -54,7 +54,8 @@ export default {
54
54
  'zh-CN': '可通过<code>theme</code>属性设置自定义主题色常量。',
55
55
  'en-US': 'You can use the <code>theme</code> property to set a custom theme color constant.'
56
56
  },
57
- codeFiles: ['theme.vue']
57
+ codeFiles: ['theme.vue'],
58
+ hideSaas: true // 当环境变量为tiny-vue-saas时隐藏该属性
58
59
  }
59
60
  ],
60
61
  features: [
@@ -15,16 +15,27 @@
15
15
  </div>
16
16
  </template>
17
17
 
18
- <script setup>
19
- import { ref } from 'vue'
18
+ <script>
20
19
  import { TinyDatePanel, TinyDateRange, TinyMonthRange, TinyYearRange } from '@opentiny/vue'
21
20
 
22
- const value = ref('2025-01-15')
23
- const month = ref('2025-01')
24
- const year = ref('2025')
25
- const value1 = ref(['2025-01-15', '2025-02-15'])
26
- const value2 = ref(['2024-03', '2025-02'])
27
- const value3 = ref(['2024', '2028'])
21
+ export default {
22
+ components: {
23
+ TinyDatePanel,
24
+ TinyDateRange,
25
+ TinyMonthRange,
26
+ TinyYearRange
27
+ },
28
+ data() {
29
+ return {
30
+ value: '2025-01-15',
31
+ month: '2025-01',
32
+ year: '2025',
33
+ value1: ['2025-01-15', '2025-02-15'],
34
+ value2: ['2024-03', '2025-02'],
35
+ value3: ['2024', '2028']
36
+ }
37
+ }
38
+ }
28
39
  </script>
29
40
 
30
41
  <style scoped lang="less">
@@ -18,17 +18,27 @@
18
18
  </div>
19
19
  </template>
20
20
 
21
- <script setup>
22
- import { ref } from 'vue'
21
+ <script>
23
22
  import { TinyDatePanel, TinyDateRange } from '@opentiny/vue'
24
23
 
25
- const value = ref('2025-01-15')
26
- const value1 = ref(['2025-01-15', '2025-02-15'])
27
- const eachWeekFirstDay = ref([])
28
-
29
- const formatWeeks = (customWeeks, weekFirstDays) => {
30
- eachWeekFirstDay.value = weekFirstDays
31
- return customWeeks + 'w'
24
+ export default {
25
+ components: {
26
+ TinyDatePanel,
27
+ TinyDateRange
28
+ },
29
+ data() {
30
+ return {
31
+ value: '2025-01-15',
32
+ value1: ['2025-01-15', '2025-02-15'],
33
+ eachWeekFirstDay: []
34
+ }
35
+ },
36
+ methods: {
37
+ formatWeeks(customWeeks, weekFirstDays) {
38
+ this.eachWeekFirstDay = weekFirstDays
39
+ return customWeeks + 'w'
40
+ }
41
+ }
32
42
  }
33
43
  </script>
34
44
 
@@ -15,27 +15,37 @@
15
15
  </div>
16
16
  </template>
17
17
 
18
- <script setup>
19
- import { ref } from 'vue'
18
+ <script>
20
19
  import { TinyDatePanel, TinyDateRange, TinyMonthRange, TinyYearRange } from '@opentiny/vue'
21
20
 
22
- const value = ref('2025-01-15')
23
- const month = ref('2025-06')
24
- const year = ref('2025')
25
- const value1 = ref(['2025-01-15', '2025-02-15'])
26
- const value2 = ref(['2024-03', '2025-02'])
27
- const value3 = ref(['2024', '2028'])
28
-
29
- const disabledDate = (val) => {
30
- return val.getFullYear() < 2025
31
- }
32
-
33
- const disabledDate1 = (val) => {
34
- return (val.getFullYear() < 2025 && val.getMonth() < 1) || val.getFullYear() < 2024
35
- }
36
-
37
- const disabledDate2 = (val) => {
38
- return val.getFullYear() < 2024
21
+ export default {
22
+ components: {
23
+ TinyDatePanel,
24
+ TinyDateRange,
25
+ TinyMonthRange,
26
+ TinyYearRange
27
+ },
28
+ data() {
29
+ return {
30
+ value: '2025-01-15',
31
+ month: '2025-06',
32
+ year: '2025',
33
+ value1: ['2025-01-15', '2025-02-15'],
34
+ value2: ['2024-03', '2025-02'],
35
+ value3: ['2024', '2028']
36
+ }
37
+ },
38
+ methods: {
39
+ disabledDate(val) {
40
+ return val.getFullYear() < 2025
41
+ },
42
+ disabledDate1(val) {
43
+ return (val.getFullYear() < 2025 && val.getMonth() < 1) || val.getFullYear() < 2024
44
+ },
45
+ disabledDate2(val) {
46
+ return val.getFullYear() < 2024
47
+ }
48
+ }
39
49
  }
40
50
  </script>
41
51
 
@@ -15,39 +15,46 @@
15
15
  </div>
16
16
  </template>
17
17
 
18
- <script setup>
19
- import { ref } from 'vue'
18
+ <script>
20
19
  import { TinyDatePanel, TinyDateRange, TinyMonthRange, TinyYearRange, TinyModal } from '@opentiny/vue'
21
20
 
22
- const value = ref('2025-01-15')
23
- const month = ref('2025-01')
24
- const year = ref('2025')
25
- const value1 = ref(['2025-01-15', '2025-02-15'])
26
- const value2 = ref(['2024-03', '2025-02'])
27
- const value3 = ref(['2024', '2028'])
28
-
29
- const handleSelectChange = (value) => {
30
- TinyModal.message({ message: '触发 面板选中 事件,组件绑定值为:' + value, status: 'info' })
31
- }
32
-
33
- const handleSelectChangeMonth = (value) => {
34
- TinyModal.message({ message: '触发 月份面板选中 事件,组件绑定值为:' + value, status: 'info' })
35
- }
36
-
37
- const handleSelectChangeYear = (value) => {
38
- TinyModal.message({ message: '触发 年份面板选中 事件,组件绑定值为:' + value, status: 'info' })
39
- }
40
-
41
- const handleSelectChange1 = (value) => {
42
- TinyModal.message({ message: '触发 区间面板选中 事件,组件绑定值为:' + value, status: 'info' })
43
- }
44
-
45
- const handleSelectChange2 = (value) => {
46
- TinyModal.message({ message: '触发 月份区间面板选中 事件,组件绑定值为:' + value, status: 'info' })
47
- }
48
-
49
- const handleSelectChange3 = (value) => {
50
- TinyModal.message({ message: '触发 年份区间面板选中 事件,组件绑定值为:' + value, status: 'info' })
21
+ export default {
22
+ components: {
23
+ TinyDatePanel,
24
+ TinyDateRange,
25
+ TinyMonthRange,
26
+ TinyYearRange
27
+ },
28
+ data() {
29
+ return {
30
+ value: '2025-01-15',
31
+ month: '2025-01',
32
+ year: '2025',
33
+ value1: ['2025-01-15', '2025-02-15'],
34
+ value2: ['2024-03', '2025-02'],
35
+ value3: ['2024', '2028']
36
+ }
37
+ },
38
+ methods: {
39
+ handleSelectChange(value) {
40
+ TinyModal.message({ message: '触发 面板选中 事件,组件绑定值为:' + value, status: 'info' })
41
+ },
42
+ handleSelectChangeMonth(value) {
43
+ TinyModal.message({ message: '触发 月份面板选中 事件,组件绑定值为:' + value, status: 'info' })
44
+ },
45
+ handleSelectChangeYear(value) {
46
+ TinyModal.message({ message: '触发 年份面板选中 事件,组件绑定值为:' + value, status: 'info' })
47
+ },
48
+ handleSelectChange1(value) {
49
+ TinyModal.message({ message: '触发 区间面板选中 事件,组件绑定值为:' + value, status: 'info' })
50
+ },
51
+ handleSelectChange2(value) {
52
+ TinyModal.message({ message: '触发 月份区间面板选中 事件,组件绑定值为:' + value, status: 'info' })
53
+ },
54
+ handleSelectChange3(value) {
55
+ TinyModal.message({ message: '触发 年份区间面板选中 事件,组件绑定值为:' + value, status: 'info' })
56
+ }
57
+ }
51
58
  }
52
59
  </script>
53
60