hy-app 0.5.9 → 0.5.11

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 (290) hide show
  1. package/components/hy-action-sheet/hy-action-sheet.vue +200 -200
  2. package/components/hy-action-sheet/props.ts +71 -71
  3. package/components/hy-action-sheet/typing.d.ts +64 -64
  4. package/components/hy-address-picker/hy-address-picker.vue +1 -1
  5. package/components/hy-address-picker/props.ts +100 -100
  6. package/components/hy-address-picker/typing.d.ts +16 -16
  7. package/components/hy-avatar/hy-avatar.vue +163 -163
  8. package/components/hy-avatar/props.ts +78 -78
  9. package/components/hy-avatar/typing.d.ts +4 -4
  10. package/components/hy-back-top/hy-back-top.vue +90 -90
  11. package/components/hy-back-top/props.ts +60 -60
  12. package/components/hy-back-top/typing.d.ts +4 -4
  13. package/components/hy-badge/hy-badge.vue +97 -97
  14. package/components/hy-badge/props.ts +82 -82
  15. package/components/hy-badge/typing.d.ts +9 -9
  16. package/components/hy-button/hy-button.vue +275 -275
  17. package/components/hy-button/props.ts +135 -135
  18. package/components/hy-button/typing.d.ts +30 -30
  19. package/components/hy-calendar/header.vue +60 -60
  20. package/components/hy-calendar/hy-calendar.vue +362 -362
  21. package/components/hy-calendar/month.vue +537 -537
  22. package/components/hy-calendar/props.ts +159 -159
  23. package/components/hy-calendar/typing.d.ts +6 -6
  24. package/components/hy-card/hy-card.vue +161 -161
  25. package/components/hy-card/props.ts +122 -122
  26. package/components/hy-card/typing.d.ts +12 -12
  27. package/components/hy-cell/hy-cell.vue +33 -33
  28. package/components/hy-cell/props.ts +54 -54
  29. package/components/hy-cell/typing.d.ts +4 -4
  30. package/components/hy-cell-item/hy-cell-item.vue +161 -161
  31. package/components/hy-cell-item/props.ts +66 -66
  32. package/components/hy-cell-item/typing.d.ts +7 -7
  33. package/components/hy-check-button/hy-check-button.vue +96 -96
  34. package/components/hy-check-button/props.ts +74 -74
  35. package/components/hy-check-button/typing.d.ts +44 -44
  36. package/components/hy-checkbox/hy-checkbox.vue +227 -227
  37. package/components/hy-checkbox/props.ts +96 -96
  38. package/components/hy-checkbox/typing.d.ts +8 -8
  39. package/components/hy-checkbox-group/hy-checkbox-group.vue +45 -45
  40. package/components/hy-checkbox-group/props.ts +80 -80
  41. package/components/hy-checkbox-group/typing.d.ts +6 -6
  42. package/components/hy-checkbox-item/hy-checkbox-item.vue +199 -199
  43. package/components/hy-checkbox-item/props.ts +24 -24
  44. package/components/hy-checkbox-item/typing.d.ts +7 -7
  45. package/components/hy-code-input/hy-code-input.vue +231 -231
  46. package/components/hy-code-input/props.ts +88 -88
  47. package/components/hy-code-input/typing.d.ts +8 -8
  48. package/components/hy-config-provider/hy-config-provider.vue +53 -53
  49. package/components/hy-config-provider/props.ts +28 -28
  50. package/components/hy-count-down/hy-count-down.vue +170 -170
  51. package/components/hy-count-down/index.ts +52 -52
  52. package/components/hy-count-down/props.ts +32 -32
  53. package/components/hy-count-down/typing.d.ts +14 -14
  54. package/components/hy-count-to/hy-count-to.vue +218 -218
  55. package/components/hy-count-to/props.ts +62 -62
  56. package/components/hy-count-to/typing.d.ts +4 -4
  57. package/components/hy-coupon/hy-coupon.vue +172 -172
  58. package/components/hy-coupon/index.scss +171 -171
  59. package/components/hy-coupon/props.ts +103 -103
  60. package/components/hy-coupon/typing.d.ts +14 -14
  61. package/components/hy-datetime-picker/hy-datetime-picker.vue +521 -521
  62. package/components/hy-datetime-picker/props.ts +142 -142
  63. package/components/hy-datetime-picker/typing.d.ts +20 -20
  64. package/components/hy-divider/hy-divider.vue +132 -132
  65. package/components/hy-divider/props.ts +80 -80
  66. package/components/hy-dropdown/hy-dropdown.vue +60 -60
  67. package/components/hy-dropdown/props.ts +40 -40
  68. package/components/hy-dropdown-item/hy-dropdown-item.vue +206 -206
  69. package/components/hy-dropdown-item/props.ts +21 -21
  70. package/components/hy-dropdown-item/typing.d.ts +17 -17
  71. package/components/hy-empty/hy-empty.vue +116 -116
  72. package/components/hy-empty/icon.ts +72 -72
  73. package/components/hy-empty/props.ts +60 -60
  74. package/components/hy-empty/typing.d.ts +38 -38
  75. package/components/hy-flex/hy-flex.vue +53 -53
  76. package/components/hy-flex/index.scss +8 -8
  77. package/components/hy-flex/props.ts +58 -58
  78. package/components/hy-flex/typing.d.ts +21 -21
  79. package/components/hy-float-button/hy-float-button.vue +378 -378
  80. package/components/hy-float-button/props.ts +111 -111
  81. package/components/hy-float-button/typing.d.ts +35 -35
  82. package/components/hy-folding-panel/hy-folding-panel.vue +109 -109
  83. package/components/hy-folding-panel/props.ts +42 -42
  84. package/components/hy-folding-panel/typing.d.ts +19 -19
  85. package/components/hy-folding-panel-item/hy-folding-panel-item.vue +183 -183
  86. package/components/hy-folding-panel-item/props.ts +81 -81
  87. package/components/hy-folding-panel-item/typing.d.ts +37 -37
  88. package/components/hy-form/hy-form.vue +220 -220
  89. package/components/hy-form/props.ts +37 -37
  90. package/components/hy-form/typing.d.ts +41 -41
  91. package/components/hy-form-group/hy-form-group.vue +333 -333
  92. package/components/hy-form-group/props.ts +105 -105
  93. package/components/hy-form-item/hy-form-item.vue +176 -176
  94. package/components/hy-form-item/index.scss +0 -1
  95. package/components/hy-form-item/props.ts +25 -25
  96. package/components/hy-form-item/typing.d.ts +30 -30
  97. package/components/hy-grid/hy-grid.vue +109 -109
  98. package/components/hy-grid/props.ts +60 -60
  99. package/components/hy-grid/typing.d.ts +35 -35
  100. package/components/hy-icon/hy-icon.vue +112 -112
  101. package/components/hy-icon/index.scss +0 -3
  102. package/components/hy-icon/props.ts +79 -79
  103. package/components/hy-icon/typing.d.ts +9 -9
  104. package/components/hy-image/hy-image.vue +192 -192
  105. package/components/hy-image/props.ts +107 -107
  106. package/components/hy-image/typing.d.ts +10 -10
  107. package/components/hy-input/hy-input.vue +333 -333
  108. package/components/hy-input/index.scss +5 -0
  109. package/components/hy-input/props.ts +186 -186
  110. package/components/hy-input/typing.d.ts +31 -31
  111. package/components/hy-line/hy-line.vue +55 -55
  112. package/components/hy-line/props.ts +43 -43
  113. package/components/hy-line-progress/hy-line-progress.vue +102 -102
  114. package/components/hy-line-progress/index.scss +1 -0
  115. package/components/hy-line-progress/props.ts +33 -33
  116. package/components/hy-list/hy-list.vue +226 -226
  117. package/components/hy-list/props.ts +69 -69
  118. package/components/hy-list/typing.d.ts +6 -6
  119. package/components/hy-loading/hy-loading.vue +107 -107
  120. package/components/hy-loading/props.ts +65 -65
  121. package/components/hy-menu/hy-menu.vue +159 -159
  122. package/components/hy-menu/props.ts +44 -44
  123. package/components/hy-menu/typing.d.ts +34 -34
  124. package/components/hy-modal/hy-modal.vue +173 -173
  125. package/components/hy-modal/props.ts +90 -90
  126. package/components/hy-modal/typing.d.ts +11 -11
  127. package/components/hy-navbar/hy-navbar.vue +144 -144
  128. package/components/hy-navbar/props.ts +78 -78
  129. package/components/hy-navbar/typing.d.ts +6 -6
  130. package/components/hy-notice-bar/hy-column-notice.vue +94 -94
  131. package/components/hy-notice-bar/hy-notice-bar.vue +96 -96
  132. package/components/hy-notice-bar/hy-row-notice.vue +121 -121
  133. package/components/hy-notice-bar/props.ts +85 -85
  134. package/components/hy-notice-bar/typing.d.ts +8 -8
  135. package/components/hy-notify/hy-notify.vue +174 -174
  136. package/components/hy-notify/props.ts +51 -51
  137. package/components/hy-number-step/hy-number-step.vue +367 -367
  138. package/components/hy-number-step/props.ts +112 -112
  139. package/components/hy-number-step/typing.d.ts +16 -16
  140. package/components/hy-overlay/hy-overlay.vue +60 -60
  141. package/components/hy-overlay/props.ts +33 -33
  142. package/components/hy-overlay/typing.d.ts +4 -4
  143. package/components/hy-pagination/hy-pagination.vue +135 -135
  144. package/components/hy-pagination/props.ts +55 -55
  145. package/components/hy-pagination/typing.d.ts +10 -10
  146. package/components/hy-picker/hy-picker.vue +7 -5
  147. package/components/hy-picker/props.ts +7 -2
  148. package/components/hy-picker/typing.d.ts +9 -5
  149. package/components/hy-popover/hy-popover.vue +251 -251
  150. package/components/hy-popover/props.ts +51 -51
  151. package/components/hy-popover/typing.d.ts +39 -39
  152. package/components/hy-popup/hy-popup.vue +197 -197
  153. package/components/hy-popup/props.ts +85 -85
  154. package/components/hy-popup/typing.d.ts +10 -10
  155. package/components/hy-price/hy-price.vue +79 -79
  156. package/components/hy-price/props.ts +54 -54
  157. package/components/hy-price/typing.d.ts +4 -4
  158. package/components/hy-qrcode/hy-qrcode.vue +216 -216
  159. package/components/hy-qrcode/props.ts +70 -70
  160. package/components/hy-qrcode/qrcode.js +1304 -1304
  161. package/components/hy-qrcode/typing.d.ts +8 -8
  162. package/components/hy-radio/hy-radio.vue +226 -226
  163. package/components/hy-radio/props.ts +1 -1
  164. package/components/hy-radio/typing.d.ts +8 -8
  165. package/components/hy-rate/hy-rate.vue +239 -239
  166. package/components/hy-rate/props.ts +77 -77
  167. package/components/hy-rate/typing.d.ts +6 -6
  168. package/components/hy-read-more/hy-read-more.vue +130 -130
  169. package/components/hy-read-more/props.ts +45 -45
  170. package/components/hy-read-more/typing.d.ts +6 -6
  171. package/components/hy-rolling-num/hy-rolling-num.vue +188 -188
  172. package/components/hy-rolling-num/props.ts +68 -68
  173. package/components/hy-scroll-list/hy-scroll-list.vue +123 -123
  174. package/components/hy-scroll-list/props.ts +22 -22
  175. package/components/hy-scroll-list/typing.d.ts +6 -6
  176. package/components/hy-search/hy-search.vue +221 -221
  177. package/components/hy-search/props.ts +131 -131
  178. package/components/hy-search/typing.d.ts +22 -22
  179. package/components/hy-signature/hy-signature.vue +640 -640
  180. package/components/hy-signature/props.ts +118 -118
  181. package/components/hy-signature/typing.d.ts +93 -93
  182. package/components/hy-slider/hy-slider.vue +444 -444
  183. package/components/hy-slider/props.ts +77 -77
  184. package/components/hy-slider/typing.d.ts +10 -10
  185. package/components/hy-status-bar/hy-status-bar.vue +41 -41
  186. package/components/hy-status-bar/props.ts +8 -8
  187. package/components/hy-status-bar/typing.d.ts +12 -12
  188. package/components/hy-steps/hy-steps.vue +267 -267
  189. package/components/hy-steps/props.ts +49 -49
  190. package/components/hy-steps/typing.d.ts +21 -21
  191. package/components/hy-sticky/hy-sticky.vue +226 -226
  192. package/components/hy-sticky/props.ts +24 -24
  193. package/components/hy-sticky/typing.d.ts +4 -4
  194. package/components/hy-submit-bar/hy-submit-bar.vue +189 -189
  195. package/components/hy-submit-bar/props.ts +91 -91
  196. package/components/hy-submit-bar/typing.d.ts +24 -24
  197. package/components/hy-subsection/hy-subsection.vue +207 -207
  198. package/components/hy-subsection/props.ts +52 -52
  199. package/components/hy-subsection/typing.d.ts +13 -13
  200. package/components/hy-swipe-action/hy-swipe-action.vue +323 -323
  201. package/components/hy-swipe-action/index.ts +25 -25
  202. package/components/hy-swipe-action/props.ts +47 -47
  203. package/components/hy-swipe-action/typing.d.ts +25 -25
  204. package/components/hy-swiper/hy-swiper-indicator.vue +75 -75
  205. package/components/hy-swiper/hy-swiper.vue +224 -224
  206. package/components/hy-swiper/props.ts +128 -128
  207. package/components/hy-swiper/typing.d.ts +26 -26
  208. package/components/hy-switch/hy-switch.vue +173 -173
  209. package/components/hy-switch/props.ts +61 -61
  210. package/components/hy-switch/typing.d.ts +8 -8
  211. package/components/hy-tabbar/hy-tabbar.vue +136 -136
  212. package/components/hy-tabbar/props.ts +59 -59
  213. package/components/hy-tabbar/typing.d.ts +21 -21
  214. package/components/hy-tabbar-group/hy-tabbar-group.vue +87 -87
  215. package/components/hy-tabbar-group/props.ts +78 -78
  216. package/components/hy-tabbar-group/typing.d.ts +16 -16
  217. package/components/hy-tabbar-item/hy-tabbar-item.vue +103 -103
  218. package/components/hy-tabbar-item/typing.d.ts +10 -10
  219. package/components/hy-table/hy-table.vue +358 -358
  220. package/components/hy-table/props.ts +47 -47
  221. package/components/hy-table/typing.d.ts +34 -34
  222. package/components/hy-tabs/hy-tabs.vue +335 -335
  223. package/components/hy-tabs/props.ts +77 -77
  224. package/components/hy-tabs/typing.d.ts +33 -33
  225. package/components/hy-tag/hy-tag.vue +174 -174
  226. package/components/hy-tag/props.ts +89 -89
  227. package/components/hy-tag/typing.d.ts +13 -13
  228. package/components/hy-text/hy-text.vue +237 -237
  229. package/components/hy-text/props.ts +115 -115
  230. package/components/hy-text/typing.d.ts +6 -6
  231. package/components/hy-textarea/hy-textarea.vue +197 -197
  232. package/components/hy-textarea/index.scss +5 -0
  233. package/components/hy-textarea/props.ts +116 -116
  234. package/components/hy-textarea/typing.d.ts +22 -22
  235. package/components/hy-toast/hy-toast.vue +190 -190
  236. package/components/hy-toast/typing.d.ts +38 -38
  237. package/components/hy-tooltip/hy-tooltip.vue +277 -277
  238. package/components/hy-tooltip/props.ts +78 -78
  239. package/components/hy-tooltip/typing.d.ts +4 -4
  240. package/components/hy-transition/hy-transition.vue +157 -157
  241. package/components/hy-transition/props.ts +32 -32
  242. package/components/hy-transition/typing.d.ts +16 -16
  243. package/components/hy-upload/hy-upload.vue +385 -385
  244. package/components/hy-upload/props.ts +132 -132
  245. package/components/hy-upload/typing.d.ts +65 -65
  246. package/components/hy-warn/hy-warn.vue +115 -115
  247. package/components/hy-warn/props.ts +49 -49
  248. package/components/hy-warn/typing.d.ts +6 -6
  249. package/components/hy-waterfall/hy-waterfall.vue +191 -191
  250. package/components/hy-waterfall/props.ts +21 -21
  251. package/components/hy-watermark/hy-watermark.vue +978 -978
  252. package/components/hy-watermark/props.ts +104 -104
  253. package/components/index.ts +183 -183
  254. package/global.d.ts +91 -91
  255. package/index.ts +1 -1
  256. package/libs/api/http.ts +140 -140
  257. package/libs/api/index.ts +1 -1
  258. package/libs/common/index.ts +2 -2
  259. package/libs/common/queue.ts +28 -28
  260. package/libs/composables/index.ts +6 -6
  261. package/libs/composables/usePopover.ts +241 -241
  262. package/libs/composables/useQueue.ts +53 -53
  263. package/libs/composables/useShakeService.ts +64 -64
  264. package/libs/composables/useShare.ts +42 -42
  265. package/libs/composables/useToast.ts +45 -45
  266. package/libs/composables/useTouch.ts +51 -51
  267. package/libs/config/color.ts +7 -7
  268. package/libs/config/icon.ts +430 -430
  269. package/libs/config/index.ts +2 -2
  270. package/libs/css/iconfont.css +443 -443
  271. package/libs/css/theme.scss +1 -1
  272. package/libs/global/index.ts +6 -6
  273. package/libs/global/register-properties.ts +37 -37
  274. package/libs/index.ts +7 -7
  275. package/libs/typing/index.ts +4 -4
  276. package/libs/typing/modules/common.d.ts +139 -139
  277. package/libs/typing/modules/enum.ts +67 -67
  278. package/libs/typing/modules/form.ts +5 -1
  279. package/libs/typing/modules/http.ts +17 -17
  280. package/libs/typing/modules/icon.d.ts +366 -366
  281. package/libs/typing/modules/rect.ts +10 -10
  282. package/libs/utils/base64.ts +119 -119
  283. package/libs/utils/calendar.js +1021 -1021
  284. package/libs/utils/colorGradient.ts +112 -112
  285. package/libs/utils/index.ts +5 -5
  286. package/libs/utils/inside.ts +350 -361
  287. package/libs/utils/inspect.ts +171 -171
  288. package/libs/utils/utils.ts +521 -521
  289. package/package.json +18 -18
  290. package/web-types.json +1 -1
@@ -1,241 +1,241 @@
1
- /**
2
- * 气泡组件hooks
3
- * */
4
-
5
- import { getCurrentInstance, ref } from "vue";
6
- import type { CSSProperties } from "vue";
7
- import { getRect, isObject } from "../../libs";
8
- import type { IOffset, IPlacementVo } from "../../components/hy-popover/typing";
9
-
10
- export function usePopover(visibleArrow = true) {
11
- const instance = getCurrentInstance();
12
- const popStyle = ref<CSSProperties>();
13
- const arrowStyle = ref<string>("");
14
- const showStyle = ref<string>("");
15
- const arrowClass = ref<string>("");
16
- const popWidth = ref<number>(0);
17
- const popHeight = ref<number>(0);
18
- const left = ref<number>(0);
19
- const bottom = ref<number>(0);
20
- const width = ref<number>(0);
21
- const height = ref<number>(0);
22
- const top = ref<number>(0);
23
-
24
- function noop() {}
25
-
26
- function init(
27
- placement: IPlacementVo,
28
- visibleArrow: boolean,
29
- selector: string,
30
- ) {
31
- // 初始化 class
32
- if (visibleArrow) {
33
- const arrowClassArr = [
34
- `hy-${selector}__arrow`,
35
- placement === "bottom" ||
36
- placement === "bottom-start" ||
37
- placement === "bottom-end"
38
- ? `hy-${selector}__arrow-up`
39
- : "",
40
- placement === "left" ||
41
- placement === "left-start" ||
42
- placement === "left-end"
43
- ? `hy-${selector}__arrow-right`
44
- : "",
45
- placement === "right" ||
46
- placement === "right-start" ||
47
- placement === "right-end"
48
- ? `hy-${selector}__arrow-left`
49
- : "",
50
- placement === "top" ||
51
- placement === "top-start" ||
52
- placement === "top-end"
53
- ? `hy-${selector}__arrow-down`
54
- : "",
55
- ];
56
- arrowClass.value = arrowClassArr.join(" ");
57
- }
58
-
59
- // 初始化数据获取
60
- getRect("#target", false, instance).then((rect) => {
61
- if (!rect) return;
62
- left.value = rect.left as number;
63
- bottom.value = rect.bottom as number;
64
- width.value = rect.width as number;
65
- height.value = rect.height as number;
66
- top.value = rect.top as number;
67
- });
68
- // 用透明度可在初始化时获取到pop尺寸
69
- getRect("#pos", false, instance).then((rect) => {
70
- if (!rect) return;
71
- popWidth.value = rect.width as number;
72
- popHeight.value = rect.height as number;
73
- });
74
- }
75
-
76
- function control(placement: IPlacementVo, offset: IOffset) {
77
- // arrow size
78
- const arrowSize = visibleArrow ? 9 : 0;
79
- // 上下位(纵轴)对应的距离左边的距离
80
- const verticalX = width.value / 2;
81
- // 上下位(纵轴)对应的距离底部的距离
82
- const verticalY = arrowSize + height.value + 5;
83
- // 左右位(横轴)对应的距离左边的距离
84
- const horizontalX = width.value + arrowSize + 5;
85
- // 左右位(横轴)对应的距离底部的距离
86
- const horizontalY = height.value / 2;
87
-
88
- let offsetX = 0;
89
- let offsetY = 0;
90
- if (Array.isArray(offset)) {
91
- offsetX = (verticalX - 17 > 0 ? 0 : verticalX - 25) + offset[0];
92
- offsetY =
93
- (horizontalY - 17 > 0 ? 0 : horizontalY - 25) +
94
- (offset[1] ? offset[1] : offset[0]);
95
- } else if (isObject(offset)) {
96
- offset = offset as Record<"x" | "y", number>;
97
- offsetX = (verticalX - 17 > 0 ? 0 : verticalX - 25) + offset.x;
98
- offsetY = (horizontalY - 17 > 0 ? 0 : horizontalY - 25) + offset.y;
99
- } else {
100
- offsetX = (verticalX - 17 > 0 ? 0 : verticalX - 25) + offset;
101
- offsetY = (horizontalY - 17 > 0 ? 0 : horizontalY - 25) + offset;
102
- }
103
- // const offsetX = (verticalX - 17 > 0 ? 0 : verticalX - 25) + offset
104
- // const offsetY = (horizontalY - 17 > 0 ? 0 : horizontalY - 25) + offset
105
-
106
- const placements = new Map([
107
- // 上
108
- [
109
- "top",
110
- [
111
- {
112
- left: `${verticalX}px`,
113
- bottom: `${verticalY}px`,
114
- transform: "translateX(-50%)",
115
- },
116
- "left: 50%;",
117
- ],
118
- ],
119
- [
120
- "top-start",
121
- [
122
- {
123
- left: `${offsetX}px`,
124
- bottom: `${verticalY}px`,
125
- },
126
- `left: ${(popWidth.value >= width.value ? width.value / 2 : popWidth.value + 25) - offsetX}px;`,
127
- ],
128
- ],
129
- [
130
- "top-end",
131
- [
132
- {
133
- right: `${offsetX}px`,
134
- bottom: `${verticalY}px`,
135
- },
136
- `right: ${(popWidth.value >= width.value ? width.value / 2 : popWidth.value + 25) - offsetX}px; transform: translateX(50%);`,
137
- ],
138
- ],
139
- // 下
140
- [
141
- "bottom",
142
- [
143
- {
144
- left: `${verticalX}px`,
145
- top: `${verticalY}px`,
146
- transform: "translateX(-50%)",
147
- },
148
- "left: 50%;",
149
- ],
150
- ],
151
- [
152
- "bottom-start",
153
- [
154
- {
155
- left: `${offsetX}px`,
156
- top: `${verticalY}px`,
157
- },
158
- `left: ${(popWidth.value >= width.value ? width.value / 2 : popWidth.value + 25) - offsetX}px;`,
159
- ],
160
- ],
161
- [
162
- "bottom-end",
163
- [
164
- {
165
- right: `${offsetX}px`,
166
- top: `${verticalY}px`,
167
- },
168
- `right: ${(popWidth.value >= width.value ? width.value / 2 : popWidth.value + 25) - offsetX}px; transform: translateX(50%);`,
169
- ],
170
- ],
171
- // 左
172
- [
173
- "left",
174
- [
175
- {
176
- right: `${horizontalX}px`,
177
- top: `${horizontalY}px`,
178
- transform: "translateY(-50%)",
179
- },
180
- "top: 50%",
181
- ],
182
- ],
183
- [
184
- "left-start",
185
- [
186
- {
187
- right: `${horizontalX}px`,
188
- top: `${offsetY}px`,
189
- },
190
- `top: ${(popHeight.value >= height.value ? height.value / 2 : popHeight.value - 20) - offsetY}px;`,
191
- ],
192
- ],
193
- [
194
- "left-end",
195
- [
196
- {
197
- right: `${horizontalX}px`,
198
- bottom: `${offsetY}px`,
199
- },
200
- `bottom: ${(popHeight.value >= height.value ? height.value / 2 : popHeight.value - 20) - offsetY}px; transform: translateY(50%);`,
201
- ],
202
- ],
203
- // 右
204
- [
205
- "right",
206
- [
207
- {
208
- left: `${horizontalX}px`,
209
- top: `${horizontalY}px`,
210
- transform: "translateY(-50%)",
211
- },
212
- "top: 50%",
213
- ],
214
- ],
215
- [
216
- "right-start",
217
- [
218
- {
219
- left: `${horizontalX}px`,
220
- top: `${offsetY}px`,
221
- },
222
- `top: ${(popHeight.value >= height.value ? height.value / 2 : popHeight.value - 20) - offsetY}px;`,
223
- ],
224
- ],
225
- [
226
- "right-end",
227
- [
228
- {
229
- left: `${horizontalX}px`,
230
- bottom: `${offsetY}px`,
231
- },
232
- `bottom: ${(popHeight.value >= height.value ? height.value / 2 : popHeight.value - 20) - offsetY}px; transform: translateY(50%);`,
233
- ],
234
- ],
235
- ]);
236
- popStyle.value = placements.get(placement)![0] as CSSProperties;
237
- arrowStyle.value = placements.get(placement)![1] as string;
238
- }
239
-
240
- return { popStyle, arrowStyle, showStyle, arrowClass, init, control, noop };
241
- }
1
+ /**
2
+ * 气泡组件hooks
3
+ * */
4
+
5
+ import { getCurrentInstance, ref } from "vue";
6
+ import type { CSSProperties } from "vue";
7
+ import { getRect, isObject } from "../../libs";
8
+ import type { IOffset, IPlacementVo } from "../../components/hy-popover/typing";
9
+
10
+ export function usePopover(visibleArrow = true) {
11
+ const instance = getCurrentInstance();
12
+ const popStyle = ref<CSSProperties>();
13
+ const arrowStyle = ref<string>("");
14
+ const showStyle = ref<string>("");
15
+ const arrowClass = ref<string>("");
16
+ const popWidth = ref<number>(0);
17
+ const popHeight = ref<number>(0);
18
+ const left = ref<number>(0);
19
+ const bottom = ref<number>(0);
20
+ const width = ref<number>(0);
21
+ const height = ref<number>(0);
22
+ const top = ref<number>(0);
23
+
24
+ function noop() {}
25
+
26
+ function init(
27
+ placement: IPlacementVo,
28
+ visibleArrow: boolean,
29
+ selector: string,
30
+ ) {
31
+ // 初始化 class
32
+ if (visibleArrow) {
33
+ const arrowClassArr = [
34
+ `hy-${selector}__arrow`,
35
+ placement === "bottom" ||
36
+ placement === "bottom-start" ||
37
+ placement === "bottom-end"
38
+ ? `hy-${selector}__arrow-up`
39
+ : "",
40
+ placement === "left" ||
41
+ placement === "left-start" ||
42
+ placement === "left-end"
43
+ ? `hy-${selector}__arrow-right`
44
+ : "",
45
+ placement === "right" ||
46
+ placement === "right-start" ||
47
+ placement === "right-end"
48
+ ? `hy-${selector}__arrow-left`
49
+ : "",
50
+ placement === "top" ||
51
+ placement === "top-start" ||
52
+ placement === "top-end"
53
+ ? `hy-${selector}__arrow-down`
54
+ : "",
55
+ ];
56
+ arrowClass.value = arrowClassArr.join(" ");
57
+ }
58
+
59
+ // 初始化数据获取
60
+ getRect("#target", false, instance).then((rect) => {
61
+ if (!rect) return;
62
+ left.value = rect.left as number;
63
+ bottom.value = rect.bottom as number;
64
+ width.value = rect.width as number;
65
+ height.value = rect.height as number;
66
+ top.value = rect.top as number;
67
+ });
68
+ // 用透明度可在初始化时获取到pop尺寸
69
+ getRect("#pos", false, instance).then((rect) => {
70
+ if (!rect) return;
71
+ popWidth.value = rect.width as number;
72
+ popHeight.value = rect.height as number;
73
+ });
74
+ }
75
+
76
+ function control(placement: IPlacementVo, offset: IOffset) {
77
+ // arrow size
78
+ const arrowSize = visibleArrow ? 9 : 0;
79
+ // 上下位(纵轴)对应的距离左边的距离
80
+ const verticalX = width.value / 2;
81
+ // 上下位(纵轴)对应的距离底部的距离
82
+ const verticalY = arrowSize + height.value + 5;
83
+ // 左右位(横轴)对应的距离左边的距离
84
+ const horizontalX = width.value + arrowSize + 5;
85
+ // 左右位(横轴)对应的距离底部的距离
86
+ const horizontalY = height.value / 2;
87
+
88
+ let offsetX = 0;
89
+ let offsetY = 0;
90
+ if (Array.isArray(offset)) {
91
+ offsetX = (verticalX - 17 > 0 ? 0 : verticalX - 25) + offset[0];
92
+ offsetY =
93
+ (horizontalY - 17 > 0 ? 0 : horizontalY - 25) +
94
+ (offset[1] ? offset[1] : offset[0]);
95
+ } else if (isObject(offset)) {
96
+ offset = offset as Record<"x" | "y", number>;
97
+ offsetX = (verticalX - 17 > 0 ? 0 : verticalX - 25) + offset.x;
98
+ offsetY = (horizontalY - 17 > 0 ? 0 : horizontalY - 25) + offset.y;
99
+ } else {
100
+ offsetX = (verticalX - 17 > 0 ? 0 : verticalX - 25) + offset;
101
+ offsetY = (horizontalY - 17 > 0 ? 0 : horizontalY - 25) + offset;
102
+ }
103
+ // const offsetX = (verticalX - 17 > 0 ? 0 : verticalX - 25) + offset
104
+ // const offsetY = (horizontalY - 17 > 0 ? 0 : horizontalY - 25) + offset
105
+
106
+ const placements = new Map([
107
+ // 上
108
+ [
109
+ "top",
110
+ [
111
+ {
112
+ left: `${verticalX}px`,
113
+ bottom: `${verticalY}px`,
114
+ transform: "translateX(-50%)",
115
+ },
116
+ "left: 50%;",
117
+ ],
118
+ ],
119
+ [
120
+ "top-start",
121
+ [
122
+ {
123
+ left: `${offsetX}px`,
124
+ bottom: `${verticalY}px`,
125
+ },
126
+ `left: ${(popWidth.value >= width.value ? width.value / 2 : popWidth.value + 25) - offsetX}px;`,
127
+ ],
128
+ ],
129
+ [
130
+ "top-end",
131
+ [
132
+ {
133
+ right: `${offsetX}px`,
134
+ bottom: `${verticalY}px`,
135
+ },
136
+ `right: ${(popWidth.value >= width.value ? width.value / 2 : popWidth.value + 25) - offsetX}px; transform: translateX(50%);`,
137
+ ],
138
+ ],
139
+ // 下
140
+ [
141
+ "bottom",
142
+ [
143
+ {
144
+ left: `${verticalX}px`,
145
+ top: `${verticalY}px`,
146
+ transform: "translateX(-50%)",
147
+ },
148
+ "left: 50%;",
149
+ ],
150
+ ],
151
+ [
152
+ "bottom-start",
153
+ [
154
+ {
155
+ left: `${offsetX}px`,
156
+ top: `${verticalY}px`,
157
+ },
158
+ `left: ${(popWidth.value >= width.value ? width.value / 2 : popWidth.value + 25) - offsetX}px;`,
159
+ ],
160
+ ],
161
+ [
162
+ "bottom-end",
163
+ [
164
+ {
165
+ right: `${offsetX}px`,
166
+ top: `${verticalY}px`,
167
+ },
168
+ `right: ${(popWidth.value >= width.value ? width.value / 2 : popWidth.value + 25) - offsetX}px; transform: translateX(50%);`,
169
+ ],
170
+ ],
171
+ // 左
172
+ [
173
+ "left",
174
+ [
175
+ {
176
+ right: `${horizontalX}px`,
177
+ top: `${horizontalY}px`,
178
+ transform: "translateY(-50%)",
179
+ },
180
+ "top: 50%",
181
+ ],
182
+ ],
183
+ [
184
+ "left-start",
185
+ [
186
+ {
187
+ right: `${horizontalX}px`,
188
+ top: `${offsetY}px`,
189
+ },
190
+ `top: ${(popHeight.value >= height.value ? height.value / 2 : popHeight.value - 20) - offsetY}px;`,
191
+ ],
192
+ ],
193
+ [
194
+ "left-end",
195
+ [
196
+ {
197
+ right: `${horizontalX}px`,
198
+ bottom: `${offsetY}px`,
199
+ },
200
+ `bottom: ${(popHeight.value >= height.value ? height.value / 2 : popHeight.value - 20) - offsetY}px; transform: translateY(50%);`,
201
+ ],
202
+ ],
203
+ // 右
204
+ [
205
+ "right",
206
+ [
207
+ {
208
+ left: `${horizontalX}px`,
209
+ top: `${horizontalY}px`,
210
+ transform: "translateY(-50%)",
211
+ },
212
+ "top: 50%",
213
+ ],
214
+ ],
215
+ [
216
+ "right-start",
217
+ [
218
+ {
219
+ left: `${horizontalX}px`,
220
+ top: `${offsetY}px`,
221
+ },
222
+ `top: ${(popHeight.value >= height.value ? height.value / 2 : popHeight.value - 20) - offsetY}px;`,
223
+ ],
224
+ ],
225
+ [
226
+ "right-end",
227
+ [
228
+ {
229
+ left: `${horizontalX}px`,
230
+ bottom: `${offsetY}px`,
231
+ },
232
+ `bottom: ${(popHeight.value >= height.value ? height.value / 2 : popHeight.value - 20) - offsetY}px; transform: translateY(50%);`,
233
+ ],
234
+ ],
235
+ ]);
236
+ popStyle.value = placements.get(placement)![0] as CSSProperties;
237
+ arrowStyle.value = placements.get(placement)![1] as string;
238
+ }
239
+
240
+ return { popStyle, arrowStyle, showStyle, arrowClass, init, control, noop };
241
+ }
@@ -1,53 +1,53 @@
1
- import { provide, ref } from "vue";
2
- import type { Ref } from "vue";
3
-
4
- export const queueKey = "__QUEUE_KEY__";
5
-
6
- export interface Queue {
7
- queue: Ref<any[]>;
8
- pushToQueue: (comp: any) => void;
9
- removeFromQueue: (comp: any) => void;
10
- closeOther: (comp: any) => void;
11
- closeOutside: () => void;
12
- }
13
-
14
- export function useQueue() {
15
- const queue = ref<any[]>([]);
16
-
17
- function pushToQueue(comp: any) {
18
- queue.value.push(comp);
19
- }
20
-
21
- function removeFromQueue(comp: any) {
22
- queue.value = queue.value.filter((item) => {
23
- return item.$.uid !== comp.$.uid;
24
- });
25
- }
26
-
27
- function closeOther(comp: any) {
28
- queue.value.forEach((item) => {
29
- if (item.$.uid !== comp.$.uid) {
30
- item.$.exposed.close();
31
- }
32
- });
33
- }
34
-
35
- function closeOutside() {
36
- queue.value.forEach((item) => {
37
- item.$.exposed.close();
38
- });
39
- }
40
-
41
- provide(queueKey, {
42
- queue,
43
- pushToQueue,
44
- removeFromQueue,
45
- closeOther,
46
- closeOutside,
47
- });
48
-
49
- return {
50
- closeOther,
51
- closeOutside,
52
- };
53
- }
1
+ import { provide, ref } from "vue";
2
+ import type { Ref } from "vue";
3
+
4
+ export const queueKey = "__QUEUE_KEY__";
5
+
6
+ export interface Queue {
7
+ queue: Ref<any[]>;
8
+ pushToQueue: (comp: any) => void;
9
+ removeFromQueue: (comp: any) => void;
10
+ closeOther: (comp: any) => void;
11
+ closeOutside: () => void;
12
+ }
13
+
14
+ export function useQueue() {
15
+ const queue = ref<any[]>([]);
16
+
17
+ function pushToQueue(comp: any) {
18
+ queue.value.push(comp);
19
+ }
20
+
21
+ function removeFromQueue(comp: any) {
22
+ queue.value = queue.value.filter((item) => {
23
+ return item.$.uid !== comp.$.uid;
24
+ });
25
+ }
26
+
27
+ function closeOther(comp: any) {
28
+ queue.value.forEach((item) => {
29
+ if (item.$.uid !== comp.$.uid) {
30
+ item.$.exposed.close();
31
+ }
32
+ });
33
+ }
34
+
35
+ function closeOutside() {
36
+ queue.value.forEach((item) => {
37
+ item.$.exposed.close();
38
+ });
39
+ }
40
+
41
+ provide(queueKey, {
42
+ queue,
43
+ pushToQueue,
44
+ removeFromQueue,
45
+ closeOther,
46
+ closeOutside,
47
+ });
48
+
49
+ return {
50
+ closeOther,
51
+ closeOutside,
52
+ };
53
+ }