sard-uniapp 1.19.2 → 1.19.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (216) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/components/accordion/README.md +91 -0
  3. package/components/accordion/accordion.vue +7 -0
  4. package/components/accordion-item/accordion-item.vue +9 -0
  5. package/components/action-sheet/README.md +85 -0
  6. package/components/action-sheet/action-sheet.vue +15 -0
  7. package/components/alert/README.md +74 -0
  8. package/components/alert/alert.vue +10 -0
  9. package/components/avatar/README.md +86 -0
  10. package/components/avatar/avatar.vue +8 -0
  11. package/components/back-top/README.md +134 -0
  12. package/components/back-top/back-top.vue +9 -0
  13. package/components/badge/README.md +95 -0
  14. package/components/badge/badge.vue +11 -0
  15. package/components/button/README.md +162 -0
  16. package/components/button/button.vue +46 -0
  17. package/components/calendar/README.md +94 -0
  18. package/components/calendar/calendar.vue +19 -0
  19. package/components/calendar-input/README.md +65 -0
  20. package/components/calendar-input/calendar-input.vue +31 -0
  21. package/components/calendar-popout/README.md +100 -0
  22. package/components/calendar-popout/calendar-popout.vue +25 -0
  23. package/components/card/README.md +82 -0
  24. package/components/card/card.vue +9 -0
  25. package/components/cascader/README.md +117 -0
  26. package/components/cascader/cascader.vue +13 -0
  27. package/components/cascader-input/README.md +51 -0
  28. package/components/cascader-input/cascader-input.vue +25 -0
  29. package/components/cascader-popout/README.md +53 -0
  30. package/components/cascader-popout/cascader-popout.vue +19 -0
  31. package/components/checkbox/README.md +185 -0
  32. package/components/checkbox/checkbox.vue +17 -0
  33. package/components/checkbox-group/checkbox-group.vue +15 -0
  34. package/components/checkbox-input/README.md +44 -0
  35. package/components/checkbox-input/checkbox-input.vue +22 -0
  36. package/components/checkbox-popout/README.md +52 -0
  37. package/components/checkbox-popout/checkbox-popout.vue +19 -0
  38. package/components/col/col.vue +7 -0
  39. package/components/collapse/README.md +45 -0
  40. package/components/collapse/collapse.vue +3 -0
  41. package/components/config/index.d.ts +2 -0
  42. package/components/config/index.js +1 -0
  43. package/components/count-down/README.md +97 -0
  44. package/components/count-down/count-down.vue +8 -0
  45. package/components/count-to/README.md +61 -0
  46. package/components/count-to/count-to.vue +7 -0
  47. package/components/crop-image/README.md +86 -0
  48. package/components/crop-image/crop-image.vue +15 -0
  49. package/components/datetime-picker/README.md +136 -0
  50. package/components/datetime-picker/datetime-picker.vue +14 -0
  51. package/components/datetime-picker-input/README.md +82 -0
  52. package/components/datetime-picker-input/datetime-picker-input.vue +25 -0
  53. package/components/datetime-picker-popout/README.md +77 -0
  54. package/components/datetime-picker-popout/datetime-picker-popout.vue +19 -0
  55. package/components/datetime-range-picker/README.md +49 -0
  56. package/components/datetime-range-picker/datetime-range-picker.vue +15 -0
  57. package/components/datetime-range-picker-input/README.md +58 -0
  58. package/components/datetime-range-picker-input/datetime-range-picker-input.vue +26 -0
  59. package/components/datetime-range-picker-popout/README.md +53 -0
  60. package/components/datetime-range-picker-popout/datetime-range-picker-popout.vue +20 -0
  61. package/components/dialog/README.md +192 -0
  62. package/components/dialog/dialog.vue +33 -0
  63. package/components/dialog-agent/dialog-agent.vue +21 -0
  64. package/components/divider/README.md +80 -0
  65. package/components/divider/divider.vue +8 -0
  66. package/components/dropdown/README.md +168 -0
  67. package/components/dropdown/common.d.ts +7 -0
  68. package/components/dropdown/common.js +1 -0
  69. package/components/dropdown/dropdown.vue +16 -1
  70. package/components/dropdown-item/dropdown-item.vue +51 -4
  71. package/components/empty/README.md +71 -0
  72. package/components/empty/empty.vue +8 -0
  73. package/components/fab/README.md +111 -0
  74. package/components/fab/fab.vue +18 -0
  75. package/components/floating-bubble/README.md +70 -0
  76. package/components/floating-bubble/floating-bubble.vue +11 -0
  77. package/components/floating-panel/README.md +78 -0
  78. package/components/floating-panel/floating-panel.vue +11 -0
  79. package/components/form/README.md +308 -0
  80. package/components/form/form.vue +19 -0
  81. package/components/form-item/form-item.vue +17 -0
  82. package/components/grid/README.md +140 -0
  83. package/components/grid/grid.vue +11 -0
  84. package/components/grid-item/grid-item.vue +15 -0
  85. package/components/icon/README.md +118 -0
  86. package/components/icon/common.d.ts +2 -0
  87. package/components/icon/icon.d.ts +1 -0
  88. package/components/icon/icon.vue +18 -3
  89. package/components/indexes/README.md +83 -0
  90. package/components/indexes/indexes.vue +7 -0
  91. package/components/indexes-anchor/indexes-anchor.vue +5 -0
  92. package/components/input/README.md +170 -0
  93. package/components/input/input.vue +55 -0
  94. package/components/keyboard/README.md +82 -0
  95. package/components/keyboard/keyboard.vue +7 -0
  96. package/components/layout/README.md +89 -0
  97. package/components/list/README.md +118 -0
  98. package/components/list/list.vue +8 -0
  99. package/components/list-item/list-item.vue +15 -0
  100. package/components/load-more/README.md +75 -0
  101. package/components/load-more/load-more.vue +11 -0
  102. package/components/loading/README.md +89 -0
  103. package/components/loading/loading.vue +13 -0
  104. package/components/lucky-draw/README.md +174 -0
  105. package/components/marquee/README.md +65 -0
  106. package/components/marquee/marquee.vue +7 -0
  107. package/components/menu/_README.md +61 -0
  108. package/components/navbar/README.md +123 -0
  109. package/components/navbar/navbar.vue +11 -0
  110. package/components/navbar-item/navbar-item.vue +10 -0
  111. package/components/notice-bar/README.md +135 -0
  112. package/components/notice-bar/notice-bar.vue +17 -0
  113. package/components/notify/README.md +118 -0
  114. package/components/notify/notify.vue +11 -0
  115. package/components/notify-agent/notify-agent.vue +12 -0
  116. package/components/overlay/README.md +56 -0
  117. package/components/overlay/overlay.vue +10 -0
  118. package/components/pagination/README.md +80 -0
  119. package/components/pagination/pagination.vue +15 -0
  120. package/components/password-input/README.md +87 -0
  121. package/components/password-input/password-input.vue +17 -0
  122. package/components/picker/README.md +115 -0
  123. package/components/picker/picker.vue +10 -0
  124. package/components/picker-input/README.md +51 -0
  125. package/components/picker-input/picker-input.vue +21 -0
  126. package/components/picker-popout/README.md +51 -0
  127. package/components/picker-popout/picker-popout.vue +15 -0
  128. package/components/popout/README.md +111 -0
  129. package/components/popout/popout.vue +29 -0
  130. package/components/popout-input/README.md +55 -0
  131. package/components/popout-input/popout-input.vue +15 -0
  132. package/components/popover/README.md +191 -0
  133. package/components/popover/popover.vue +15 -0
  134. package/components/popover-reference/popover-reference.vue +5 -0
  135. package/components/popup/README.md +67 -0
  136. package/components/popup/popup.vue +20 -0
  137. package/components/progress-bar/README.md +90 -0
  138. package/components/progress-bar/progress-bar.vue +13 -0
  139. package/components/progress-circle/README.md +75 -0
  140. package/components/progress-circle/progress-circle.vue +10 -0
  141. package/components/pull-down-refresh/README.md +100 -0
  142. package/components/pull-down-refresh/pull-down-refresh.vue +11 -0
  143. package/components/qrcode/README.md +103 -0
  144. package/components/qrcode/qrcode.vue +13 -0
  145. package/components/radio/README.md +172 -0
  146. package/components/radio/radio.vue +13 -0
  147. package/components/radio-group/radio-group.vue +16 -0
  148. package/components/radio-input/README.md +44 -0
  149. package/components/radio-input/radio-input.vue +23 -0
  150. package/components/radio-popout/README.md +52 -0
  151. package/components/radio-popout/radio-popout.vue +20 -0
  152. package/components/rate/README.md +106 -0
  153. package/components/rate/rate.vue +22 -0
  154. package/components/result/README.md +66 -0
  155. package/components/result/result.vue +10 -0
  156. package/components/row/row.vue +7 -0
  157. package/components/scroll-spy/README.md +70 -0
  158. package/components/scroll-spy/scroll-spy.vue +13 -0
  159. package/components/search/README.md +117 -0
  160. package/components/search/search.vue +25 -0
  161. package/components/share-sheet/README.md +94 -0
  162. package/components/share-sheet/share-sheet.vue +20 -0
  163. package/components/sidebar/README.md +118 -0
  164. package/components/sidebar/sidebar.vue +10 -0
  165. package/components/sidebar-item/sidebar-item.vue +8 -0
  166. package/components/signature/README.md +99 -0
  167. package/components/signature/signature.vue +20 -0
  168. package/components/skeleton/README.md +128 -0
  169. package/components/skeleton/skeleton.vue +12 -0
  170. package/components/skeleton-avatar/skeleton-avatar.vue +9 -0
  171. package/components/skeleton-block/skeleton-block.vue +8 -0
  172. package/components/skeleton-paragraph/skeleton-paragraph.vue +9 -0
  173. package/components/skeleton-title/skeleton-title.vue +8 -0
  174. package/components/slider/README.md +140 -0
  175. package/components/slider/slider.vue +29 -0
  176. package/components/space/README.md +82 -0
  177. package/components/space/space.vue +9 -0
  178. package/components/status-bar/README.md +72 -0
  179. package/components/status-bar/status-bar.vue +6 -0
  180. package/components/step/step.vue +9 -1
  181. package/components/stepper/README.md +94 -0
  182. package/components/stepper/stepper.vue +24 -0
  183. package/components/steps/README.md +142 -0
  184. package/components/steps/steps.vue +15 -0
  185. package/components/style/README.md +20 -0
  186. package/components/swipe-action/README.md +82 -0
  187. package/components/swipe-action/swipe-action.vue +7 -0
  188. package/components/swiper-dot/README.md +45 -0
  189. package/components/swiper-dot/swiper-dot.vue +9 -0
  190. package/components/switch/README.md +89 -0
  191. package/components/switch/switch.vue +18 -0
  192. package/components/tab/tab.vue +8 -0
  193. package/components/tabbar/README.md +111 -0
  194. package/components/tabbar/tabbar.vue +12 -0
  195. package/components/tabbar-item/tabbar-item.vue +12 -0
  196. package/components/tabbar-pit/README.md +41 -0
  197. package/components/tabbar-pit/tabbar-pit.vue +5 -0
  198. package/components/table/README.md +162 -0
  199. package/components/table/table.vue +7 -0
  200. package/components/table-cell/table-cell.vue +7 -0
  201. package/components/table-row/table-row.vue +5 -0
  202. package/components/tabs/README.md +113 -0
  203. package/components/tabs/tabs.vue +10 -0
  204. package/components/tag/README.md +96 -0
  205. package/components/tag/tag.vue +14 -0
  206. package/components/timeline/README.md +66 -0
  207. package/components/timeline/timeline.vue +4 -0
  208. package/components/timeline-item/timeline-item.vue +9 -0
  209. package/components/toast/README.md +111 -0
  210. package/components/toast/toast.vue +11 -0
  211. package/components/toast-agent/toast-agent.vue +11 -0
  212. package/components/tree/README.md +208 -0
  213. package/components/tree/tree.vue +21 -0
  214. package/components/upload/README.md +154 -0
  215. package/components/upload/upload.vue +22 -0
  216. package/package.json +74 -45
@@ -92,6 +92,39 @@ import SarIcon from "../icon/icon.vue";
92
92
  import {
93
93
  defaultDialogProps
94
94
  } from "./common";
95
+ /**
96
+ * @property {string} rootClass 对话框根元素类名,默认值:-。
97
+ * @property {StyleValue} rootStyle 对话框根元素样式,默认值:-。
98
+ * @property {string} popupClass 弹窗框根元素类名,默认值:-。
99
+ * @property {StyleValue} popupStyle 弹窗框根元素样式,默认值:-。
100
+ * @property {boolean} visible 是否可见,默认值:false。
101
+ * @property {string} title 标题,默认值:-。
102
+ * @property {string} message 文本内容,默认值:-。
103
+ * @property {boolean} headed 是否显示带头部类型,默认值:true。
104
+ * @property {'round' | 'text'} buttonType 按钮类型,默认值:'round'。
105
+ * @property {boolean} showCancel 是否显示取消按钮,默认值:true。
106
+ * @property {string} cancelText 取消按钮文案,默认值:'取消'。
107
+ * @property {boolean} showConfirm 是否显示确定按钮,默认值:true。
108
+ * @property {string} confirmText 确定按钮文案,默认值:'确定'。
109
+ * @property {boolean} overlayClosable 点击遮罩是否关闭,默认值:false。
110
+ * @property {DialogBeforeClose} beforeClose 关闭前的回调,返回 `false` 或 `rejected` 状态的 `Promise` 可阻止关闭,默认值:-。
111
+ * @property {number} duration 显隐动画时长,单位 ms,默认值:300。
112
+ * @property {ButtonProps} confirmProps 设置确定按钮 props,默认值:-。
113
+ * @property {ButtonProps} cancelProps 设置取消按钮 props,默认值:-。
114
+ * @event {(visible: boolean) => void} update 对话框显隐时触发
115
+ * @event {() => void} close 点击关闭按钮或遮罩时触发
116
+ * @event {() => void} cancel 点击取消按钮时触发
117
+ * @event {() => void} confirm 点击确定按钮时触发
118
+ * @event {(name: TransitionHookName) => void} visible-hook 入场/退场动画状态改变时触发
119
+ * @event {() => void} before-enter 入场动画开始前触发
120
+ * @event {() => void} enter 入场动画开始时触发
121
+ * @event {() => void} after-enter 入场动画结束时触发
122
+ * @event {() => void} enter-cancelled 入场动画取消时触发
123
+ * @event {() => void} before-leave 退场动画开始前触发
124
+ * @event {() => void} leave 退场动画开始时触发
125
+ * @event {() => void} after-leave 退场动画结束时触发
126
+ * @event {() => void} leave-cancelled 退场动画取消时触发
127
+ */
95
128
  export default _defineComponent({
96
129
  components: {
97
130
  SarPopup,
@@ -17,6 +17,27 @@ import {
17
17
  imperativeName
18
18
  } from "./common";
19
19
  import { useImperative } from "../../use/useImperative";
20
+ /**
21
+ * @property {string} rootClass 对话框根元素类名,默认值:-。
22
+ * @property {StyleValue} rootStyle 对话框根元素样式,默认值:-。
23
+ * @property {string} popupClass 弹窗框根元素类名,默认值:-。
24
+ * @property {StyleValue} popupStyle 弹窗框根元素样式,默认值:-。
25
+ * @property {boolean} visible 是否可见,默认值:false。
26
+ * @property {string} title 标题,默认值:-。
27
+ * @property {string} message 文本内容,默认值:-。
28
+ * @property {boolean} headed 是否显示带头部类型,默认值:true。
29
+ * @property {'round' | 'text'} buttonType 按钮类型,默认值:'round'。
30
+ * @property {boolean} showCancel 是否显示取消按钮,默认值:true。
31
+ * @property {string} cancelText 取消按钮文案,默认值:'取消'。
32
+ * @property {boolean} showConfirm 是否显示确定按钮,默认值:true。
33
+ * @property {string} confirmText 确定按钮文案,默认值:'确定'。
34
+ * @property {boolean} overlayClosable 点击遮罩是否关闭,默认值:false。
35
+ * @property {DialogBeforeClose} beforeClose 关闭前的回调,返回 `false` 或 `rejected` 状态的 `Promise` 可阻止关闭,默认值:-。
36
+ * @property {number} duration 显隐动画时长,单位 ms,默认值:300。
37
+ * @property {ButtonProps} confirmProps 设置确定按钮 props,默认值:-。
38
+ * @property {ButtonProps} cancelProps 设置取消按钮 props,默认值:-。
39
+ * @property {string} id 对话框组件的 id,默认值:'dialog'。
40
+ */
20
41
  export default _defineComponent({
21
42
  components: {
22
43
  SarDialog,
@@ -0,0 +1,80 @@
1
+ ---
2
+ nav: 组件
3
+ title: Divider
4
+ subtitle: 分割线
5
+ group: 布局
6
+ version: 1.13+
7
+ ---
8
+
9
+ ## 介绍
10
+
11
+ 用于将内容分隔为多个区域。
12
+
13
+ ## 引入
14
+
15
+ ```ts
16
+ import Divider from 'sard-uniapp/components/divider/divider.vue'
17
+ ```
18
+
19
+ ## 代码演示
20
+
21
+ ### 基础使用
22
+
23
+ 默认渲染一条水平分割线。
24
+
25
+ @code('${DEMO_PATH}/divider/demo/Basic.vue')
26
+
27
+ ### 展示文本
28
+
29
+ 通过插槽在可以分割线中间插入内容。
30
+
31
+ @code('${DEMO_PATH}/divider/demo/Text.vue')
32
+
33
+ ### 内容位置
34
+
35
+ 通过 `position` 指定内容所在位置。
36
+
37
+ @code('${DEMO_PATH}/divider/demo/Position.vue')
38
+
39
+ ### 线条类型
40
+
41
+ 通过 `type` 属性设置分割线类型。
42
+
43
+ @code('${DEMO_PATH}/divider/demo/Type.vue')
44
+
45
+ ### 自定义样式
46
+
47
+ 可以直接通过 `style` 属性设置分割线的样式。
48
+
49
+ @code('${DEMO_PATH}/divider/demo/Style.vue')
50
+
51
+ ### 垂直
52
+
53
+ 设置 `vertical` 属性可以垂直展示分割线
54
+
55
+ @code('${DEMO_PATH}/divider/demo/Vertical.vue')
56
+
57
+ ## API
58
+
59
+ ### DividerProps
60
+
61
+ | 属性 | 描述 | 类型 | 默认值 |
62
+ | ---------- | -------------------- | ------------------------------- | -------- |
63
+ | root-class | 组件根元素类名 | string | - |
64
+ | root-style | 组件根元素样式 | StyleValue | - |
65
+ | type | 分割线类型 | 'solid' \| 'dashed' \| 'dotted' | 'solid' |
66
+ | hairline | 是否显示半像素分割线 | boolean | true |
67
+ | position | 内容位置 | 'left' \| 'right' \| 'center' | 'center' |
68
+ | vertical | 是否垂直显示分割线 | boolean | false |
69
+
70
+ ### DividerSlots
71
+
72
+ | 插槽 | 描述 | 属性 |
73
+ | ------- | -------------- | ---- |
74
+ | default | 自定义默认内容 | - |
75
+
76
+ ## 主题定制
77
+
78
+ ### CSS 变量
79
+
80
+ @code('./variables.scss#variables')
@@ -11,6 +11,14 @@ import { classNames, stringifyStyle, createBem } from "../../utils";
11
11
  import {
12
12
  defaultDividerProps
13
13
  } from "./common";
14
+ /**
15
+ * @property {string} rootClass 组件根元素类名,默认值:-。
16
+ * @property {StyleValue} rootStyle 组件根元素样式,默认值:-。
17
+ * @property {'solid' | 'dashed' | 'dotted'} type 分割线类型,默认值:'solid'。
18
+ * @property {boolean} hairline 是否显示半像素分割线,默认值:true。
19
+ * @property {'left' | 'right' | 'center'} position 内容位置,默认值:'center'。
20
+ * @property {boolean} vertical 是否垂直显示分割线,默认值:false。
21
+ */
14
22
  export default _defineComponent({
15
23
  ...{
16
24
  options: {
@@ -0,0 +1,168 @@
1
+ ---
2
+ nav: 组件
3
+ title: Dropdown
4
+ subtitle: 下拉菜单
5
+ group: 导航组件
6
+ ---
7
+
8
+ ## 介绍
9
+
10
+ 可向下/向上弹出菜单列表,或自定义弹出的菜单内容。
11
+
12
+ ## 引入
13
+
14
+ ```ts
15
+ import Dropdown from 'sard-uniapp/components/dropdown/dropdown.vue'
16
+ import DropdownItem from 'sard-uniapp/components/dropdown-item/dropdown-item.vue'
17
+ ```
18
+
19
+ ## 代码演示
20
+
21
+ ### 基础使用
22
+
23
+ 使用 `options` 配置下拉菜单项,使用 `v-model` 绑定选中的值。
24
+
25
+ @code('${DEMO_PATH}/dropdown/demo/Basic.vue')
26
+
27
+ ### 占位符
28
+
29
+ 占位符会在未选中值时显示说明文字。
30
+
31
+ @code('${DEMO_PATH}/dropdown/demo/Placeholder.vue')
32
+
33
+ ### 添加 label
34
+
35
+ 相较于占位符, `label` 会一直显示。
36
+
37
+ @code('${DEMO_PATH}/dropdown/demo/Label.vue')
38
+
39
+ ### 向上展开
40
+
41
+ 底部空间不足时可以配置向上弹出菜单。
42
+
43
+ @code('${DEMO_PATH}/dropdown/demo/Direction.vue')
44
+
45
+ ### 禁用
46
+
47
+ 禁用的菜单项不可点击。
48
+
49
+ @code('${DEMO_PATH}/dropdown/demo/Disabled.vue')
50
+
51
+ ### 自定义内容
52
+
53
+ 除了显示菜单项,下拉菜单还可以显示任意内容,这时可以使用 `v-model:visible` 控制显隐。
54
+
55
+ @code('${DEMO_PATH}/dropdown/demo/Content.vue')
56
+
57
+ ### 异步开关 <sup>1.19+</sup>
58
+
59
+ 如果 `beforeOpen` 返回 false,则取消打开菜单;如果返回 `Promise` 对象,则会在 `resolve` 时才打开菜单。
60
+
61
+ 如果 `beforeClose` 返回 false,则取消关闭菜单;如果返回 `Promise` 对象,则会在 `resolve` 时才关闭菜单。
62
+
63
+ @code('${DEMO_PATH}/dropdown/demo/Async.vue')
64
+
65
+ ### 可取消选择 <sup>1.19.3+</sup>
66
+
67
+ 如果想点击时取消选中的选项,可以使用 `togglable` 属性。
68
+
69
+ @code('${DEMO_PATH}/dropdown/demo/Togglable.vue')
70
+
71
+ ## API
72
+
73
+ ### DropdownProps
74
+
75
+ | 属性 | 描述 | 类型 | 默认值 |
76
+ | --------------------------------- | ---------------------------- | -------------- | --------- |
77
+ | root-class | 组件根元素类名 | string | - |
78
+ | root-style | 组件根元素样式 | StyleValue | - |
79
+ | direction | 菜单弹出方向 | 'down' \| 'up' | 'down' |
80
+ | disabled | 是否禁用 | boolean | false |
81
+ | away-closable | 是否在点击外部区域后自动隐藏 | boolean | true |
82
+ | overlay-closable | 是否在点击遮罩后自动隐藏 | boolean | true |
83
+ | duration | 显隐动画时长,单位 ms | number | 300 |
84
+ | togglable <sup>1.19.3+</sup> | 是否可取消选中的选项 | boolean | false |
85
+ | value-on-clear <sup>1.19.3+</sup> | 取消选项时设置的值 | any | undefined |
86
+
87
+ ### DropdownSlots
88
+
89
+ | 插槽 | 描述 | 属性 |
90
+ | ------- | -------------- | ---- |
91
+ | default | 自定义默认内容 | - |
92
+
93
+ ### DropdownItemProps
94
+
95
+ | 属性 | 描述 | 类型 | 默认值 |
96
+ | --------------------------------- | -------------------------------------------------------------------- | ------------------- | --------- |
97
+ | root-class | 组件根元素类名 | string | - |
98
+ | root-style | 组件根元素样式 | StyleValue | - |
99
+ | title | 标题,用于自定义菜单内容 | string | - |
100
+ | label | 标签说明 | string | - |
101
+ | options | 菜单选项 | DropdownOption[] | [] |
102
+ | direction | 菜单弹出方向 | 'down' \| 'up' | 'down' |
103
+ | disabled | 是否禁用 | boolean | false |
104
+ | model-value (v-model) | 当前选择的菜单项的值 | any | - |
105
+ | visible (v-model) | 弹出框是否可见 | boolean | - |
106
+ | separator | 标签后面分隔符 | string | - |
107
+ | placeholder | 占位符 | string | - |
108
+ | togglable <sup>1.19.3+</sup> | 是否可取消选中的选项 | boolean | false |
109
+ | value-on-clear <sup>1.19.3+</sup> | 取消选项时设置的值 | any | undefined |
110
+ | before-open <sup>1.19.1+</sup> | 打开前的回调,返回 `false` 或 `rejected` 状态的 `Promise` 可阻止打开 | () => any | - |
111
+ | before-close <sup>1.19+</sup> | 关闭前的回调,返回 `false` 或 `rejected` 状态的 `Promise` 可阻止关闭 | DropdownBeforeClose | - |
112
+
113
+ ### DropdownBeforeClose
114
+
115
+ ```ts
116
+ type DropdownBeforeClose = (type: DropdownCloseType) => any
117
+
118
+ type DropdownCloseType =
119
+ | 'overlay'
120
+ | 'away'
121
+ | 'other-button'
122
+ | 'button'
123
+ | 'option'
124
+ ```
125
+
126
+ 关闭类型:
127
+
128
+ - `overlay` 点击遮罩
129
+ - `away` 点击除遮罩和菜单之外的区域
130
+ - `other-button` 点击其他菜单按钮
131
+ - `button` 点击当前的菜单按钮
132
+ - `option` 点击菜单项
133
+
134
+ ### DropdownItemSlots
135
+
136
+ | 插槽 | 描述 | 属性 |
137
+ | ------- | -------------- | ---- |
138
+ | default | 自定义默认内容 | - |
139
+
140
+ ### DropdownItemEmits
141
+
142
+ | 事件 | 描述 | 类型 |
143
+ | -------------------------------- | --------------------------- | ---------------------------------- |
144
+ | update:model-value | 选中菜单选项时触发 | (value: any) => void |
145
+ | change <sup>1.12.2+</sup> | 选中菜单选项时触发 | (value: any) => void |
146
+ | update:visible | 弹出框显隐时触发 | (visible: boolean) => void |
147
+ | visible-hook <sup>1.18+</sup> | 入场/退场动画状态改变时触发 | (name: TransitionHookName) => void |
148
+ | before-enter <sup>1.18+</sup> | 入场动画开始前触发 | () => void |
149
+ | enter <sup>1.18+</sup> | 入场动画开始时触发 | () => void |
150
+ | after-enter <sup>1.18+</sup> | 入场动画结束时触发 | () => void |
151
+ | enter-cancelled <sup>1.18+</sup> | 入场动画取消时触发 | () => void |
152
+ | before-leave <sup>1.18+</sup> | 退场动画开始前触发 | () => void |
153
+ | leave <sup>1.18+</sup> | 退场动画开始时触发 | () => void |
154
+ | after-leave <sup>1.18+</sup> | 退场动画结束时触发 | () => void |
155
+ | leave-cancelled <sup>1.18+</sup> | 退场动画取消时触发 | () => void |
156
+
157
+ ### DropdownOption
158
+
159
+ | 属性 | 描述 | 类型 | 默认值 |
160
+ | ----- | ------------ | ------ | ------ |
161
+ | label | 定义选项标签 | string | - |
162
+ | value | 定义选项的值 | any | - |
163
+
164
+ ## 主题定制
165
+
166
+ ### CSS 变量
167
+
168
+ @code('./variables.scss#variables')
@@ -8,6 +8,8 @@ export interface DropdownProps {
8
8
  awayClosable?: boolean;
9
9
  overlayClosable?: boolean;
10
10
  duration?: number;
11
+ togglable?: boolean;
12
+ valueOnClear?: () => any;
11
13
  }
12
14
  export declare const defaultDropdownProps: {
13
15
  direction: DropdownProps["direction"];
@@ -37,6 +39,8 @@ export interface DropdownItemProps {
37
39
  visible?: boolean;
38
40
  separator?: string;
39
41
  placeholder?: string;
42
+ togglable?: boolean;
43
+ valueOnClear?: () => any;
40
44
  beforeClose?: DropdownBeforeClose;
41
45
  beforeOpen?: DropdownBeforeOpen;
42
46
  }
@@ -57,6 +61,8 @@ export interface DropdownContext {
57
61
  awayClosable: DropdownProps['awayClosable'];
58
62
  overlayClosable: DropdownProps['overlayClosable'];
59
63
  duration: DropdownProps['duration'];
64
+ togglable: DropdownProps['togglable'];
65
+ valueOnClear: DropdownProps['valueOnClear'];
60
66
  hideOthers: (instance: any) => void;
61
67
  register: (instance: any, expose: {
62
68
  hide: () => void;
@@ -65,3 +71,4 @@ export interface DropdownContext {
65
71
  unregister: (instance: any) => void;
66
72
  }
67
73
  export declare const dropdownContextSymbol: unique symbol;
74
+ export declare const defaultValueOnClear: () => undefined;
@@ -4,3 +4,4 @@ export const defaultDropdownItemProps = {
4
4
  options: () => [],
5
5
  };
6
6
  export const dropdownContextSymbol = Symbol('dropdown-context');
7
+ export const defaultValueOnClear = () => undefined;
@@ -13,6 +13,17 @@ import {
13
13
  dropdownContextSymbol,
14
14
  defaultDropdownProps
15
15
  } from "./common";
16
+ /**
17
+ * @property {string} rootClass 组件根元素类名,默认值:-。
18
+ * @property {StyleValue} rootStyle 组件根元素样式,默认值:-。
19
+ * @property {'down' | 'up'} direction 菜单弹出方向,默认值:'down'。
20
+ * @property {boolean} disabled 是否禁用,默认值:false。
21
+ * @property {boolean} awayClosable 是否在点击外部区域后自动隐藏,默认值:true。
22
+ * @property {boolean} overlayClosable 是否在点击遮罩后自动隐藏,默认值:true。
23
+ * @property {number} duration 显隐动画时长,单位 ms,默认值:300。
24
+ * @property {boolean} togglable 是否可取消选中的选项,默认值:false。
25
+ * @property {any} valueOnClear 取消选项时设置的值,默认值:undefined。
26
+ */
16
27
  export default _defineComponent({
17
28
  ...{
18
29
  options: {
@@ -28,7 +39,9 @@ export default _defineComponent({
28
39
  disabled: { type: Boolean, required: false },
29
40
  awayClosable: { type: Boolean, required: false },
30
41
  overlayClosable: { type: Boolean, required: false },
31
- duration: { type: Number, required: false }
42
+ duration: { type: Number, required: false },
43
+ togglable: { type: Boolean, required: false },
44
+ valueOnClear: { type: Function, required: false }
32
45
  }, defaultDropdownProps),
33
46
  setup(__props, { expose: __expose }) {
34
47
  __expose();
@@ -59,6 +72,8 @@ export default _defineComponent({
59
72
  awayClosable: toRef(() => props.awayClosable),
60
73
  overlayClosable: toRef(() => props.overlayClosable),
61
74
  duration: toRef(() => props.duration),
75
+ togglable: toRef(() => props.togglable),
76
+ valueOnClear: toRef(() => props.valueOnClear),
62
77
  hideOthers,
63
78
  register,
64
79
  unregister
@@ -102,9 +102,38 @@ import SarIcon from "../icon/icon.vue";
102
102
  import SarOverlay from "../overlay/overlay.vue";
103
103
  import {
104
104
  dropdownContextSymbol,
105
- defaultDropdownItemProps
105
+ defaultDropdownItemProps,
106
+ defaultValueOnClear
106
107
  } from "../dropdown/common";
107
108
  import { useTransition, useZIndex } from "../../use";
109
+ /**
110
+ * @property {string} rootClass 组件根元素类名,默认值:-。
111
+ * @property {StyleValue} rootStyle 组件根元素样式,默认值:-。
112
+ * @property {string} title 标题,用于自定义菜单内容,默认值:-。
113
+ * @property {string} label 标签说明,默认值:-。
114
+ * @property {DropdownOption[]} options 菜单选项,默认值:[]。
115
+ * @property {'down' | 'up'} direction 菜单弹出方向,默认值:'down'。
116
+ * @property {boolean} disabled 是否禁用,默认值:false。
117
+ * @property {any} modelValue 当前选择的菜单项的值,默认值:-。
118
+ * @property {boolean} visible 弹出框是否可见,默认值:-。
119
+ * @property {string} separator 标签后面分隔符,默认值:-。
120
+ * @property {string} placeholder 占位符,默认值:-。
121
+ * @property {boolean} togglable 是否可取消选中的选项,默认值:false。
122
+ * @property {any} valueOnClear 取消选项时设置的值,默认值:undefined。
123
+ * @property {() => any} beforeOpen 打开前的回调,返回 `false` 或 `rejected` 状态的 `Promise` 可阻止打开,默认值:-。
124
+ * @property {DropdownBeforeClose} beforeClose 关闭前的回调,返回 `false` 或 `rejected` 状态的 `Promise` 可阻止关闭,默认值:-。
125
+ * @event {(visible: boolean) => void} update 弹出框显隐时触发
126
+ * @event {(value: any) => void} change 选中菜单选项时触发
127
+ * @event {(name: TransitionHookName) => void} visible-hook 入场/退场动画状态改变时触发
128
+ * @event {() => void} before-enter 入场动画开始前触发
129
+ * @event {() => void} enter 入场动画开始时触发
130
+ * @event {() => void} after-enter 入场动画结束时触发
131
+ * @event {() => void} enter-cancelled 入场动画取消时触发
132
+ * @event {() => void} before-leave 退场动画开始前触发
133
+ * @event {() => void} leave 退场动画开始时触发
134
+ * @event {() => void} after-leave 退场动画结束时触发
135
+ * @event {() => void} leave-cancelled 退场动画取消时触发
136
+ */
108
137
  export default _defineComponent({
109
138
  components: {
110
139
  SarList,
@@ -130,6 +159,8 @@ export default _defineComponent({
130
159
  visible: { type: Boolean, required: false },
131
160
  separator: { type: String, required: false },
132
161
  placeholder: { type: String, required: false },
162
+ togglable: { type: Boolean, required: false },
163
+ valueOnClear: { type: Function, required: false },
133
164
  beforeClose: { type: Function, required: false },
134
165
  beforeOpen: { type: Function, required: false }
135
166
  }, defaultDropdownItemProps),
@@ -148,6 +179,10 @@ export default _defineComponent({
148
179
  const itemId = uniqid();
149
180
  const instance = getCurrentInstance();
150
181
  const innerValue = ref(props.modelValue);
182
+ const mergedTogglable = computed(() => props.togglable || context.togglable);
183
+ const mergedValueOnClear = computed(
184
+ () => props.valueOnClear || context.valueOnClear || defaultValueOnClear
185
+ );
151
186
  watch(
152
187
  () => props.modelValue,
153
188
  () => {
@@ -257,10 +292,22 @@ export default _defineComponent({
257
292
  }
258
293
  };
259
294
  const onOptionClick = (option) => {
295
+ let changed = false;
260
296
  if (option.value !== innerValue.value) {
261
297
  innerValue.value = option.value;
262
- emit("update:model-value", option.value);
263
- emit("change", option.value);
298
+ changed = true;
299
+ } else {
300
+ if (mergedTogglable.value) {
301
+ const value = mergedValueOnClear.value();
302
+ if (value !== innerValue.value) {
303
+ innerValue.value = value;
304
+ }
305
+ changed = true;
306
+ }
307
+ }
308
+ if (changed) {
309
+ emit("update:model-value", innerValue.value);
310
+ emit("change", innerValue.value);
264
311
  }
265
312
  perhapsClose("option");
266
313
  };
@@ -346,7 +393,7 @@ export default _defineComponent({
346
393
  const dropdownItemStyle = computed(() => {
347
394
  return stringifyStyle(props.rootStyle);
348
395
  });
349
- const __returned__ = { props, emit, bem, context, itemId, instance, innerValue, innerVisible, wholeVisible, popupVisible, popupInset, awayInset, setPosition, setInnerVisible, get isClosing() {
396
+ const __returned__ = { props, emit, bem, context, itemId, instance, innerValue, mergedTogglable, mergedValueOnClear, innerVisible, wholeVisible, popupVisible, popupInset, awayInset, setPosition, setInnerVisible, get isClosing() {
350
397
  return isClosing;
351
398
  }, set isClosing(v) {
352
399
  isClosing = v;
@@ -0,0 +1,71 @@
1
+ ---
2
+ nav: 组件
3
+ title: Empty
4
+ subtitle: 空状态
5
+ group: 数据展示
6
+ ---
7
+
8
+ ## 介绍
9
+
10
+ 空状态时的占位提示。
11
+
12
+ ## 引入
13
+
14
+ ```ts
15
+ import { Empty } from 'sard'
16
+ ```
17
+
18
+ ## 代码演示
19
+
20
+ ### 基础使用
21
+
22
+ @code('${DEMO_PATH}/empty/demo/Basic.vue')
23
+
24
+ ### 自定义描述信息
25
+
26
+ @code('${DEMO_PATH}/empty/demo/Description.vue')
27
+
28
+ ### 自定义图标大小
29
+
30
+ 通过配置 `iconSize` 属性可以修改图标大小。
31
+
32
+ @code('${DEMO_PATH}/empty/demo/Size.vue')
33
+
34
+ ### 自定义图标
35
+
36
+ 通过配置 `icon` 属性可以修改图标。
37
+
38
+ @code('${DEMO_PATH}/empty/demo/Icon.vue')
39
+
40
+ ### 额外内容
41
+
42
+ 额外内容会显示在底部。
43
+
44
+ @code('${DEMO_PATH}/empty/demo/Extra.vue')
45
+
46
+ ## API
47
+
48
+ ### EmptyProps
49
+
50
+ | 属性 | 描述 | 类型 | 默认值 |
51
+ | ----------- | -------------- | ---------- | ---------- |
52
+ | root-class | 组件根元素类名 | string | - |
53
+ | root-style | 组件根元素样式 | StyleValue | - |
54
+ | description | 描述信息 | string | '暂无数据' |
55
+ | icon | 自定义图标 | string | - |
56
+ | icon-family | 图标字体 | string | - |
57
+ | icon-size | 图标大小 | string | - |
58
+
59
+ ### EmptySlots
60
+
61
+ | 插槽 | 描述 | 属性 |
62
+ | ----------- | -------------- | ---- |
63
+ | default | 自定义额外内容 | - |
64
+ | icon | 自定义图标内容 | - |
65
+ | description | 自定义描述内容 | - |
66
+
67
+ ## 主题定制
68
+
69
+ ### CSS 变量
70
+
71
+ @code('./variables.scss#variables')
@@ -23,6 +23,14 @@ import { classNames, stringifyStyle, createBem } from "../../utils";
23
23
  import SarIcon from "../icon/icon.vue";
24
24
  import { useTranslate } from "../locale";
25
25
  import { defaultEmptyProps } from "./common";
26
+ /**
27
+ * @property {string} rootClass 组件根元素类名,默认值:-。
28
+ * @property {StyleValue} rootStyle 组件根元素样式,默认值:-。
29
+ * @property {string} description 描述信息,默认值:'暂无数据'。
30
+ * @property {string} icon 自定义图标,默认值:-。
31
+ * @property {string} iconFamily 图标字体,默认值:-。
32
+ * @property {string} iconSize 图标大小,默认值:-。
33
+ */
26
34
  export default _defineComponent({
27
35
  components: {
28
36
  SarIcon,