pxd 0.0.64 → 0.1.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 (545) hide show
  1. package/README.md +21 -10
  2. package/dist/components/_internal/calendar-day.d.vue.ts +33 -0
  3. package/dist/components/_internal/calendar-day.vue +85 -0
  4. package/dist/components/_internal/dismiss-container.d.vue.ts +1 -1
  5. package/dist/components/_internal/dismiss-container.vue +74 -127
  6. package/dist/components/_internal/fragment-container.vue +3 -3
  7. package/dist/components/_internal/loading-mask.d.vue.ts +8 -0
  8. package/dist/components/_internal/loading-mask.vue +33 -0
  9. package/dist/components/_internal/mention-editor.d.vue.ts +42 -0
  10. package/dist/components/_internal/mention-editor.vue +114 -0
  11. package/dist/components/_internal/popover-arrow.d.vue.ts +1 -1
  12. package/dist/components/_internal/popover-arrow.vue +9 -6
  13. package/dist/components/_internal/step-item.d.vue.ts +24 -0
  14. package/dist/components/_internal/step-item.vue +86 -0
  15. package/dist/components/_internal/tree-node.d.vue.ts +72 -0
  16. package/dist/components/_internal/tree-node.vue +268 -0
  17. package/dist/components/active-graph/index.d.vue.ts +4 -4
  18. package/dist/components/active-graph/index.vue +381 -239
  19. package/dist/components/active-graph/types.d.ts +2 -1
  20. package/dist/components/approval-card/index.d.vue.ts +28 -0
  21. package/dist/components/approval-card/index.vue +252 -0
  22. package/dist/components/approval-card/types.d.ts +37 -0
  23. package/dist/components/avatar/index.vue +43 -72
  24. package/dist/components/avatar-group/index.d.vue.ts +1 -1
  25. package/dist/components/avatar-group/index.vue +38 -25
  26. package/dist/components/backtop/index.d.vue.ts +10 -3
  27. package/dist/components/backtop/index.vue +97 -54
  28. package/dist/components/backtop/types.d.ts +10 -3
  29. package/dist/components/badge/index.d.vue.ts +6 -3
  30. package/dist/components/badge/index.vue +126 -79
  31. package/dist/components/badge/types.d.ts +3 -2
  32. package/dist/components/book/index.vue +57 -162
  33. package/dist/components/book/types.d.ts +1 -1
  34. package/dist/components/border-beam/index.d.vue.ts +18 -0
  35. package/dist/components/border-beam/index.vue +64 -0
  36. package/dist/components/border-beam/types.d.ts +8 -0
  37. package/dist/components/{resizable-panel → breadcrumb}/index.d.vue.ts +3 -4
  38. package/dist/components/breadcrumb/index.vue +32 -0
  39. package/dist/components/breadcrumb/types.d.ts +6 -0
  40. package/dist/components/breadcrumb-item/index.d.vue.ts +16 -0
  41. package/dist/components/breadcrumb-item/index.vue +50 -0
  42. package/dist/components/breadcrumb-item/types.d.ts +4 -0
  43. package/dist/components/browser/index.d.vue.ts +2 -2
  44. package/dist/components/browser/index.vue +13 -28
  45. package/dist/components/bubble/index.d.vue.ts +6 -3
  46. package/dist/components/bubble/index.vue +85 -18
  47. package/dist/components/bubble/types.d.ts +3 -1
  48. package/dist/components/bubble-group/index.d.vue.ts +19 -0
  49. package/dist/components/bubble-group/index.vue +86 -0
  50. package/dist/components/bubble-group/types.d.ts +6 -0
  51. package/dist/components/bubble-group/types.js +0 -0
  52. package/dist/components/button/index.d.vue.ts +6 -5
  53. package/dist/components/button/index.vue +121 -86
  54. package/dist/components/button/types.d.ts +1 -1
  55. package/dist/components/button-group/index.vue +20 -7
  56. package/dist/components/button-group/types.d.ts +1 -1
  57. package/dist/components/calendar/index.d.vue.ts +41 -0
  58. package/dist/components/calendar/index.vue +247 -0
  59. package/dist/components/calendar/types.d.ts +37 -0
  60. package/dist/components/card/index.d.vue.ts +21 -0
  61. package/dist/components/card/index.vue +47 -0
  62. package/dist/components/card/types.d.ts +6 -0
  63. package/dist/components/carousel/index.d.vue.ts +11 -7
  64. package/dist/components/carousel/index.vue +232 -283
  65. package/dist/components/carousel/types.d.ts +15 -1
  66. package/dist/components/checkbox/index.d.vue.ts +6 -5
  67. package/dist/components/checkbox/index.vue +107 -90
  68. package/dist/components/checkbox/types.d.ts +7 -5
  69. package/dist/components/checkbox-group/index.d.vue.ts +8 -8
  70. package/dist/components/checkbox-group/index.vue +26 -11
  71. package/dist/components/checkbox-group/types.d.ts +4 -2
  72. package/dist/components/checkerboard/index.d.vue.ts +14 -0
  73. package/dist/components/checkerboard/index.vue +37 -0
  74. package/dist/components/checkerboard/types.d.ts +5 -0
  75. package/dist/components/chip/index.d.vue.ts +3 -1
  76. package/dist/components/chip/index.vue +49 -46
  77. package/dist/components/chip/types.d.ts +1 -1
  78. package/dist/components/choicebox/index.d.vue.ts +7 -7
  79. package/dist/components/choicebox/index.vue +52 -30
  80. package/dist/components/choicebox/types.d.ts +1 -1
  81. package/dist/components/choicebox-item/index.d.vue.ts +7 -5
  82. package/dist/components/choicebox-item/index.vue +172 -53
  83. package/dist/components/choicebox-item/types.d.ts +3 -7
  84. package/dist/components/collapse/index.d.vue.ts +2 -2
  85. package/dist/components/collapse/index.vue +73 -99
  86. package/dist/components/collapse-group/index.vue +43 -32
  87. package/dist/components/collapse-group/types.d.ts +1 -1
  88. package/dist/components/color-selector/index.vue +45 -41
  89. package/dist/components/command-menu/index.d.vue.ts +10 -7
  90. package/dist/components/command-menu/index.vue +111 -46
  91. package/dist/components/command-menu/types.d.ts +3 -2
  92. package/dist/components/config-provider/index.d.vue.ts +116 -7
  93. package/dist/components/config-provider/index.vue +54 -11
  94. package/dist/components/config-provider/types.d.ts +6 -3
  95. package/dist/components/confirm-popover/index.d.vue.ts +39 -0
  96. package/dist/components/confirm-popover/index.vue +177 -0
  97. package/dist/components/confirm-popover/types.d.ts +23 -0
  98. package/dist/components/copy-button/index.d.vue.ts +20 -0
  99. package/dist/components/copy-button/index.vue +38 -0
  100. package/dist/components/copy-button/types.d.ts +7 -0
  101. package/dist/components/countdown/index.d.vue.ts +1 -1
  102. package/dist/components/countdown/index.vue +77 -29
  103. package/dist/components/dash-line/index.d.vue.ts +2 -1
  104. package/dist/components/dash-line/index.vue +78 -76
  105. package/dist/components/dash-line/types.d.ts +1 -1
  106. package/dist/components/date-picker/index.d.vue.ts +16 -0
  107. package/dist/components/date-picker/index.vue +295 -0
  108. package/dist/components/date-picker/types.d.ts +20 -0
  109. package/dist/components/description/index.vue +16 -7
  110. package/dist/components/drawer/index.d.vue.ts +11 -11
  111. package/dist/components/drawer/index.vue +156 -70
  112. package/dist/components/drawer/types.d.ts +3 -2
  113. package/dist/components/effort-slider/index.d.vue.ts +10 -0
  114. package/dist/components/effort-slider/index.vue +341 -0
  115. package/dist/components/effort-slider/types.d.ts +14 -0
  116. package/dist/components/ellipsis-text/index.d.vue.ts +1 -1
  117. package/dist/components/ellipsis-text/index.vue +209 -166
  118. package/dist/components/empty-state/index.vue +11 -4
  119. package/dist/components/error/index.d.vue.ts +3 -1
  120. package/dist/components/error/index.vue +42 -28
  121. package/dist/components/error/types.d.ts +2 -1
  122. package/dist/components/fader/index.d.vue.ts +1 -1
  123. package/dist/components/fader/index.vue +58 -114
  124. package/dist/components/fader/types.d.ts +3 -2
  125. package/dist/components/feedback-bar/index.d.vue.ts +12 -0
  126. package/dist/components/feedback-bar/index.vue +81 -0
  127. package/dist/components/feedback-bar/types.d.ts +9 -0
  128. package/dist/components/gauge/index.vue +91 -71
  129. package/dist/components/gauge/types.d.ts +1 -1
  130. package/dist/components/grid/index.vue +58 -52
  131. package/dist/components/grid/types.d.ts +1 -1
  132. package/dist/components/grid-item/index.vue +44 -39
  133. package/dist/components/grid-item/types.d.ts +1 -1
  134. package/dist/components/hint/index.d.vue.ts +32 -0
  135. package/dist/components/hint/index.vue +239 -0
  136. package/dist/components/hint/types.d.ts +17 -0
  137. package/dist/components/hold-button/index.d.vue.ts +4 -4
  138. package/dist/components/hold-button/index.vue +114 -118
  139. package/dist/components/hue-text/index.d.vue.ts +16 -0
  140. package/dist/components/hue-text/index.vue +48 -0
  141. package/dist/components/hue-text/types.d.ts +4 -0
  142. package/dist/components/index.d.ts +44 -5
  143. package/dist/components/index.js +44 -5
  144. package/dist/components/input/index.d.vue.ts +6 -5
  145. package/dist/components/input/index.vue +259 -136
  146. package/dist/components/input/types.d.ts +10 -7
  147. package/dist/components/intersection-observer/index.vue +65 -42
  148. package/dist/components/kbd/index.vue +47 -25
  149. package/dist/components/kbd/types.d.ts +1 -1
  150. package/dist/components/label/index.vue +7 -3
  151. package/dist/components/link-button/index.d.vue.ts +5 -5
  152. package/dist/components/link-button/index.vue +49 -32
  153. package/dist/components/list/index.d.vue.ts +22 -14
  154. package/dist/components/list/index.vue +318 -78
  155. package/dist/components/list/types.d.ts +39 -11
  156. package/dist/components/list-group/index.d.vue.ts +4 -0
  157. package/dist/components/list-group/index.vue +22 -0
  158. package/dist/components/list-group/types.d.ts +5 -0
  159. package/dist/components/list-item/index.d.vue.ts +7 -7
  160. package/dist/components/list-item/index.vue +95 -75
  161. package/dist/components/list-item/types.d.ts +7 -4
  162. package/dist/components/loading-bar/index.vue +148 -141
  163. package/dist/components/loading-dots/index.d.vue.ts +1 -13
  164. package/dist/components/loading-dots/index.vue +13 -15
  165. package/dist/components/marching-ants/index.d.vue.ts +25 -0
  166. package/dist/components/marching-ants/index.vue +486 -0
  167. package/dist/components/marching-ants/types.d.ts +9 -0
  168. package/dist/components/marquee/index.d.vue.ts +37 -0
  169. package/dist/components/marquee/index.vue +242 -0
  170. package/dist/components/marquee/types.d.ts +18 -0
  171. package/dist/components/material/index.d.vue.ts +3 -3
  172. package/dist/components/material/index.vue +22 -28
  173. package/dist/components/mention/index.d.vue.ts +38 -0
  174. package/dist/components/mention/index.vue +251 -0
  175. package/dist/components/mention/types.d.ts +35 -0
  176. package/dist/components/menu/index.d.vue.ts +17 -10
  177. package/dist/components/menu/index.vue +99 -28
  178. package/dist/components/menu/types.d.ts +8 -6
  179. package/dist/components/message/index.d.vue.ts +7 -7
  180. package/dist/components/message/index.vue +140 -239
  181. package/dist/components/message/types.d.ts +1 -1
  182. package/dist/components/message-item/index.vue +46 -62
  183. package/dist/components/modal/index.d.vue.ts +10 -10
  184. package/dist/components/modal/index.vue +143 -66
  185. package/dist/components/modal/types.d.ts +3 -5
  186. package/dist/components/more-button/index.vue +25 -13
  187. package/dist/components/noise-background/index.d.vue.ts +0 -16
  188. package/dist/components/noise-background/index.vue +70 -9
  189. package/dist/components/noise-background/types.d.ts +5 -1
  190. package/dist/components/note/index.d.vue.ts +1 -1
  191. package/dist/components/note/index.vue +114 -100
  192. package/dist/components/note/types.d.ts +3 -1
  193. package/dist/components/number-input/index.d.vue.ts +12 -9
  194. package/dist/components/number-input/index.vue +241 -165
  195. package/dist/components/number-input/types.d.ts +3 -3
  196. package/dist/components/overlay/index.d.vue.ts +3 -4
  197. package/dist/components/overlay/index.vue +85 -95
  198. package/dist/components/overlay/types.d.ts +0 -2
  199. package/dist/components/page-number/index.d.vue.ts +18 -0
  200. package/dist/components/page-number/index.vue +233 -0
  201. package/dist/components/page-number/types.d.ts +18 -0
  202. package/dist/components/pagination/index.vue +14 -7
  203. package/dist/components/pin-input/index.d.vue.ts +2 -2
  204. package/dist/components/pin-input/index.vue +197 -179
  205. package/dist/components/pin-input/types.d.ts +1 -1
  206. package/dist/components/placeholder/index.vue +22 -32
  207. package/dist/components/popover/index.d.vue.ts +0 -47
  208. package/dist/components/popover/index.vue +558 -347
  209. package/dist/components/popover/types.d.ts +10 -1
  210. package/dist/components/progress/index.d.vue.ts +3 -9
  211. package/dist/components/progress/index.vue +85 -63
  212. package/dist/components/progress/types.d.ts +1 -6
  213. package/dist/components/project-banner/index.d.vue.ts +3 -1
  214. package/dist/components/project-banner/index.vue +36 -34
  215. package/dist/components/project-banner/types.d.ts +2 -2
  216. package/dist/components/questionnaire/index.d.vue.ts +10 -0
  217. package/dist/components/questionnaire/index.vue +353 -0
  218. package/dist/components/questionnaire/types.d.ts +30 -0
  219. package/dist/components/radial-burst/index.d.vue.ts +14 -0
  220. package/dist/components/radial-burst/index.vue +53 -0
  221. package/dist/components/radial-burst/types.d.ts +5 -0
  222. package/dist/components/radio/index.d.vue.ts +4 -4
  223. package/dist/components/radio/index.vue +56 -74
  224. package/dist/components/radio/types.d.ts +1 -1
  225. package/dist/components/radio-group/index.d.vue.ts +6 -6
  226. package/dist/components/radio-group/index.vue +26 -12
  227. package/dist/components/radio-group/types.d.ts +1 -1
  228. package/dist/components/rating/index.d.vue.ts +17 -0
  229. package/dist/components/rating/index.vue +253 -0
  230. package/dist/components/rating/types.d.ts +18 -0
  231. package/dist/components/reasoning/index.d.vue.ts +16 -0
  232. package/dist/components/reasoning/index.vue +68 -0
  233. package/dist/components/reasoning/types.d.ts +3 -0
  234. package/dist/components/resizable/index.d.vue.ts +28 -4
  235. package/dist/components/resizable/index.vue +339 -158
  236. package/dist/components/resizable/types.d.ts +13 -14
  237. package/dist/components/reveal/index.d.vue.ts +22 -0
  238. package/dist/components/reveal/index.vue +100 -0
  239. package/dist/components/reveal/types.d.ts +15 -0
  240. package/dist/components/rolling-number/index.d.vue.ts +17 -0
  241. package/dist/components/rolling-number/index.vue +252 -0
  242. package/dist/components/rolling-number/types.d.ts +11 -0
  243. package/dist/components/scalable-text/index.vue +116 -113
  244. package/dist/components/scroll-progress/index.d.vue.ts +22 -0
  245. package/dist/components/scroll-progress/index.vue +75 -0
  246. package/dist/components/scroll-progress/types.d.ts +9 -0
  247. package/dist/components/scroll-text/index.d.vue.ts +18 -0
  248. package/dist/components/scroll-text/index.vue +123 -0
  249. package/dist/components/scroll-text/types.d.ts +7 -0
  250. package/dist/components/scrollable/index.d.vue.ts +3 -3
  251. package/dist/components/scrollable/index.vue +281 -222
  252. package/dist/components/scrollable/types.d.ts +2 -1
  253. package/dist/components/search-input/index.d.vue.ts +152 -0
  254. package/dist/components/search-input/index.vue +56 -0
  255. package/dist/components/search-input/types.d.ts +7 -0
  256. package/dist/components/select/index.d.vue.ts +36 -0
  257. package/dist/components/select/index.vue +257 -0
  258. package/dist/components/select/types.d.ts +25 -0
  259. package/dist/components/separator/index.d.vue.ts +1 -1
  260. package/dist/components/separator/index.vue +9 -6
  261. package/dist/components/separator/types.d.ts +1 -1
  262. package/dist/components/shimmer-text/index.d.vue.ts +18 -0
  263. package/dist/components/shimmer-text/index.vue +216 -0
  264. package/dist/components/shimmer-text/types.d.ts +14 -0
  265. package/dist/components/skeleton/index.d.vue.ts +1 -1
  266. package/dist/components/skeleton/index.vue +59 -51
  267. package/dist/components/skeleton/types.d.ts +1 -1
  268. package/dist/components/slider/index.d.vue.ts +2 -2
  269. package/dist/components/slider/index.vue +391 -261
  270. package/dist/components/slider/types.d.ts +4 -2
  271. package/dist/components/snippet/index.d.vue.ts +3 -2
  272. package/dist/components/snippet/index.vue +83 -70
  273. package/dist/components/snippet/types.d.ts +4 -4
  274. package/dist/components/spinner/index.vue +13 -8
  275. package/dist/components/spinner-dots/index.d.vue.ts +7 -0
  276. package/dist/components/spinner-dots/index.vue +232 -0
  277. package/dist/components/spinner-dots/types.d.ts +9 -0
  278. package/dist/components/split-button/index.d.vue.ts +31 -0
  279. package/dist/components/split-button/index.vue +93 -0
  280. package/dist/components/split-button/types.d.ts +18 -0
  281. package/dist/components/stack/index.d.vue.ts +4 -4
  282. package/dist/components/stack/index.vue +98 -85
  283. package/dist/components/stack/types.d.ts +1 -1
  284. package/dist/components/status-dot/index.d.vue.ts +1 -1
  285. package/dist/components/status-dot/index.vue +34 -20
  286. package/dist/components/status-dot/types.d.ts +1 -1
  287. package/dist/components/steps/index.d.vue.ts +28 -0
  288. package/dist/components/steps/index.vue +143 -0
  289. package/dist/components/steps/types.d.ts +25 -0
  290. package/dist/components/stick-to-bottom/index.d.vue.ts +35 -0
  291. package/dist/components/stick-to-bottom/index.vue +78 -0
  292. package/dist/components/stick-to-bottom/types.d.ts +13 -0
  293. package/dist/components/swipe-cell/index.d.vue.ts +53 -0
  294. package/dist/components/swipe-cell/index.vue +412 -0
  295. package/dist/components/swipe-cell/types.d.ts +53 -0
  296. package/dist/components/switch/index.d.vue.ts +1 -1
  297. package/dist/components/switch/index.vue +43 -22
  298. package/dist/components/switch/types.d.ts +1 -1
  299. package/dist/components/switch-item/index.vue +36 -37
  300. package/dist/components/switch-item/types.d.ts +1 -1
  301. package/dist/components/tabs/index.d.vue.ts +8 -6
  302. package/dist/components/tabs/index.vue +241 -198
  303. package/dist/components/tabs/tab-slot.d.ts +24 -0
  304. package/dist/components/tabs/tab-slot.js +13 -0
  305. package/dist/components/tabs/types.d.ts +11 -5
  306. package/dist/components/teleport/index.vue +69 -60
  307. package/dist/components/text/index.d.vue.ts +4 -4
  308. package/dist/components/text/index.vue +68 -57
  309. package/dist/components/text/types.d.ts +1 -1
  310. package/dist/components/textarea/index.d.vue.ts +7 -5
  311. package/dist/components/textarea/index.vue +148 -71
  312. package/dist/components/textarea/types.d.ts +6 -3
  313. package/dist/components/theme-switcher/index.d.vue.ts +3 -2
  314. package/dist/components/theme-switcher/index.vue +19 -15
  315. package/dist/components/theme-switcher/types.d.ts +2 -2
  316. package/dist/components/time-ago/index.d.vue.ts +6 -0
  317. package/dist/components/time-ago/index.vue +143 -0
  318. package/dist/components/time-ago/types.d.ts +4 -0
  319. package/dist/components/time-picker/index.d.vue.ts +8 -9
  320. package/dist/components/time-picker/index.vue +249 -186
  321. package/dist/components/time-picker/types.d.ts +7 -7
  322. package/dist/components/timeline/index.d.vue.ts +6 -0
  323. package/dist/components/timeline/index.vue +52 -0
  324. package/dist/components/timeline/types.d.ts +6 -0
  325. package/dist/components/timeline-item/index.d.vue.ts +22 -0
  326. package/dist/components/timeline-item/index.vue +110 -0
  327. package/dist/components/timeline-item/types.d.ts +16 -0
  328. package/dist/components/toc/index.d.vue.ts +37 -0
  329. package/dist/components/toc/index.vue +199 -0
  330. package/dist/components/toc/types.d.ts +28 -0
  331. package/dist/components/todo-list/index.d.vue.ts +64 -0
  332. package/dist/components/todo-list/index.vue +357 -0
  333. package/dist/components/todo-list/types.d.ts +53 -0
  334. package/dist/components/toggle/index.d.vue.ts +6 -6
  335. package/dist/components/toggle/index.vue +95 -44
  336. package/dist/components/toggle/types.d.ts +2 -2
  337. package/dist/components/toggle-button/index.d.vue.ts +5 -5
  338. package/dist/components/toggle-button/index.vue +125 -86
  339. package/dist/components/toggle-button/types.d.ts +8 -6
  340. package/dist/components/toggle-button-group/index.d.vue.ts +9 -8
  341. package/dist/components/toggle-button-group/index.vue +63 -43
  342. package/dist/components/toggle-button-group/types.d.ts +2 -2
  343. package/dist/components/tool-call/index.d.vue.ts +6 -0
  344. package/dist/components/tool-call/index.vue +209 -0
  345. package/dist/components/tool-call/types.d.ts +8 -0
  346. package/dist/components/tooltip/index.d.vue.ts +8 -6
  347. package/dist/components/tooltip/index.vue +65 -55
  348. package/dist/components/tooltip/types.d.ts +3 -6
  349. package/dist/components/tour/index.d.vue.ts +33 -0
  350. package/dist/components/tour/index.vue +302 -0
  351. package/dist/components/tour/types.d.ts +29 -0
  352. package/dist/components/tree/index.d.vue.ts +104 -0
  353. package/dist/components/tree/index.vue +751 -0
  354. package/dist/components/tree/types.d.ts +151 -0
  355. package/dist/components/virtual-list/index.d.vue.ts +11 -13
  356. package/dist/components/virtual-list/index.vue +120 -54
  357. package/dist/components/virtual-list/types.d.ts +0 -1
  358. package/dist/composables/_internal/use-collapse-motion.d.ts +6 -0
  359. package/dist/composables/_internal/use-collapse-motion.js +85 -0
  360. package/dist/composables/{use-focus-trap.d.ts → _internal/use-focus-trap.d.ts} +2 -2
  361. package/dist/composables/_internal/use-focus-trap.js +64 -0
  362. package/dist/composables/{use-forward-ref-expose.js → _internal/use-forward-ref-expose.js} +1 -1
  363. package/dist/composables/_internal/use-list-filter.d.ts +15 -0
  364. package/dist/composables/_internal/use-list-filter.js +48 -0
  365. package/dist/composables/_internal/use-list-keyboard-controller.d.ts +21 -0
  366. package/dist/composables/_internal/use-list-keyboard-controller.js +26 -0
  367. package/dist/composables/_internal/use-list-navigation.d.ts +25 -0
  368. package/dist/composables/_internal/use-list-navigation.js +141 -0
  369. package/dist/composables/_internal/use-list-rows.d.ts +33 -0
  370. package/dist/composables/_internal/use-list-rows.js +66 -0
  371. package/dist/composables/_internal/use-list-selection.d.ts +23 -0
  372. package/dist/composables/_internal/use-list-selection.js +41 -0
  373. package/dist/composables/_internal/use-lock-scroll.d.ts +12 -0
  374. package/dist/composables/_internal/use-lock-scroll.js +78 -0
  375. package/dist/composables/_internal/use-mention-editor.d.ts +35 -0
  376. package/dist/composables/_internal/use-mention-editor.js +508 -0
  377. package/dist/composables/_internal/use-mention-suggest.d.ts +23 -0
  378. package/dist/composables/_internal/use-mention-suggest.js +113 -0
  379. package/dist/composables/_internal/use-message-group.d.ts +22 -0
  380. package/dist/composables/_internal/use-message-group.js +143 -0
  381. package/dist/composables/{use-model-value.d.ts → _internal/use-model-value.d.ts} +1 -1
  382. package/dist/composables/_internal/use-model-value.js +13 -0
  383. package/dist/composables/_internal/use-overlay-dialog.d.ts +25 -0
  384. package/dist/composables/_internal/use-overlay-dialog.js +23 -0
  385. package/dist/composables/{use-overlay-manager.d.ts → _internal/use-overlay-manager.d.ts} +4 -1
  386. package/dist/composables/_internal/use-overlay-manager.js +139 -0
  387. package/dist/composables/{use-popover-responsive.js → _internal/use-popover-responsive.js} +1 -1
  388. package/dist/composables/_internal/use-selected-list-item.d.ts +6 -0
  389. package/dist/composables/_internal/use-selected-list-item.js +36 -0
  390. package/dist/composables/_internal/use-swipe-gesture.d.ts +88 -0
  391. package/dist/composables/_internal/use-swipe-gesture.js +345 -0
  392. package/dist/composables/_internal/use-tailwind-variant.d.ts +31 -0
  393. package/dist/composables/_internal/use-tailwind-variant.js +62 -0
  394. package/dist/composables/_internal/use-tour-target.d.ts +29 -0
  395. package/dist/composables/_internal/use-tour-target.js +201 -0
  396. package/dist/composables/_internal/use-tree.d.ts +103 -0
  397. package/dist/composables/_internal/use-tree.js +676 -0
  398. package/dist/composables/_internal/use-word-limit.d.ts +24 -0
  399. package/dist/composables/_internal/use-word-limit.js +36 -0
  400. package/dist/composables/index.d.ts +8 -10
  401. package/dist/composables/index.js +8 -10
  402. package/dist/composables/use-backoff-retry.d.ts +51 -0
  403. package/dist/composables/use-backoff-retry.js +116 -0
  404. package/dist/composables/use-color-scheme.d.ts +1 -1
  405. package/dist/composables/use-color-scheme.js +35 -31
  406. package/dist/composables/use-copy-click.d.ts +2 -1
  407. package/dist/composables/use-copy-click.js +21 -18
  408. package/dist/composables/use-countdown.d.ts +0 -9
  409. package/dist/composables/use-countdown.js +12 -4
  410. package/dist/composables/use-deferred-value.js +1 -1
  411. package/dist/composables/use-delay-change.js +6 -2
  412. package/dist/composables/use-delay-destroy.d.ts +2 -2
  413. package/dist/composables/use-delay-destroy.js +16 -9
  414. package/dist/composables/use-document-hidden.d.ts +1 -1
  415. package/dist/composables/use-intersection-observer.d.ts +6 -0
  416. package/dist/composables/use-intersection-observer.js +38 -0
  417. package/dist/composables/use-media-query.d.ts +0 -3
  418. package/dist/composables/use-media-query.js +19 -19
  419. package/dist/composables/use-motion-reduce.d.ts +6 -0
  420. package/dist/composables/use-motion-reduce.js +40 -0
  421. package/dist/composables/use-mutation-observer.d.ts +6 -0
  422. package/dist/composables/use-mutation-observer.js +42 -0
  423. package/dist/composables/use-outside-click.d.ts +6 -4
  424. package/dist/composables/use-outside-click.js +18 -10
  425. package/dist/composables/use-repeat-action.js +31 -20
  426. package/dist/composables/use-resize-observer.d.ts +6 -0
  427. package/dist/composables/use-resize-observer.js +22 -0
  428. package/dist/composables/use-scrollspy.d.ts +15 -0
  429. package/dist/composables/use-scrollspy.js +98 -0
  430. package/dist/composables/use-stick-to-bottom.d.ts +32 -0
  431. package/dist/composables/use-stick-to-bottom.js +106 -0
  432. package/dist/composables/use-view-transition.d.ts +20 -0
  433. package/dist/composables/use-view-transition.js +80 -0
  434. package/dist/composables/use-virtual-list.d.ts +9 -6
  435. package/dist/composables/use-virtual-list.js +86 -19
  436. package/dist/constants/tooltip-variants.d.ts +28 -0
  437. package/dist/constants/tooltip-variants.js +27 -0
  438. package/dist/contexts/avatar.js +1 -1
  439. package/dist/contexts/breadcrumb.d.ts +2 -0
  440. package/dist/contexts/breadcrumb.js +2 -0
  441. package/dist/contexts/button.js +1 -1
  442. package/dist/contexts/checkbox.js +1 -1
  443. package/dist/contexts/choicebox.d.ts +1 -0
  444. package/dist/contexts/choicebox.js +1 -1
  445. package/dist/contexts/collapse.js +1 -1
  446. package/dist/contexts/config-provider.d.ts +3 -2
  447. package/dist/contexts/config-provider.js +5 -4
  448. package/dist/contexts/list.d.ts +4 -25
  449. package/dist/contexts/list.js +1 -9
  450. package/dist/contexts/radio.js +1 -1
  451. package/dist/contexts/switch.js +1 -1
  452. package/dist/contexts/toggle-button.js +1 -1
  453. package/dist/index.d.ts +2 -1
  454. package/dist/locales/en-us.d.ts +90 -27
  455. package/dist/locales/en-us.js +75 -27
  456. package/dist/locales/index.d.ts +1 -0
  457. package/dist/locales/zh-cn.d.ts +89 -27
  458. package/dist/locales/zh-cn.js +88 -27
  459. package/dist/plugins/dayjs-millisecond-token.d.ts +2 -4
  460. package/dist/plugins/dayjs-millisecond-token.js +1 -2
  461. package/dist/styles/styles.css +2 -2
  462. package/dist/styles/tw.css +97 -50
  463. package/dist/types/shared/props.d.ts +5 -3
  464. package/dist/types/shared/utils.d.ts +7 -0
  465. package/dist/utils/{context.js → _internal/context.js} +2 -1
  466. package/dist/utils/_internal/mention-html.d.ts +33 -0
  467. package/dist/utils/_internal/mention-html.js +146 -0
  468. package/dist/utils/_internal/observer.d.ts +42 -0
  469. package/dist/utils/_internal/observer.js +173 -0
  470. package/dist/utils/_internal/swipe-cell-instances.d.ts +7 -0
  471. package/dist/utils/_internal/swipe-cell-instances.js +17 -0
  472. package/dist/utils/date.d.ts +1 -15
  473. package/dist/utils/date.js +2 -11
  474. package/dist/utils/dom.d.ts +19 -21
  475. package/dist/utils/dom.js +57 -28
  476. package/dist/utils/event.d.ts +15 -2
  477. package/dist/utils/event.js +68 -27
  478. package/dist/utils/format.d.ts +5 -4
  479. package/dist/utils/format.js +33 -13
  480. package/dist/utils/fuzzy-match.d.ts +2 -0
  481. package/dist/utils/fuzzy-match.js +182 -0
  482. package/dist/utils/helper.d.ts +17 -0
  483. package/dist/utils/helper.js +57 -0
  484. package/dist/utils/is.d.ts +5 -1
  485. package/dist/utils/is.js +10 -2
  486. package/dist/utils/merge.d.ts +1 -0
  487. package/dist/utils/merge.js +19 -0
  488. package/dist/utils/timing.d.ts +19 -6
  489. package/dist/utils/timing.js +74 -16
  490. package/package.json +49 -62
  491. package/volar.d.ts +44 -5
  492. package/dist/components/carousel-item/index.d.vue.ts +0 -13
  493. package/dist/components/carousel-item/index.vue +0 -54
  494. package/dist/components/command-menu-group/index.d.vue.ts +0 -14
  495. package/dist/components/command-menu-group/index.vue +0 -31
  496. package/dist/components/command-menu-group/types.d.ts +0 -5
  497. package/dist/components/message/composables/use-group-expand.d.ts +0 -13
  498. package/dist/components/message/composables/use-group-expand.js +0 -50
  499. package/dist/components/message/composables/use-message-timer.d.ts +0 -9
  500. package/dist/components/message/composables/use-message-timer.js +0 -61
  501. package/dist/components/message/composables/use-promise-message.d.ts +0 -4
  502. package/dist/components/message/composables/use-promise-message.js +0 -49
  503. package/dist/components/resizable-handle/index.d.vue.ts +0 -6
  504. package/dist/components/resizable-handle/index.vue +0 -116
  505. package/dist/components/resizable-panel/index.vue +0 -57
  506. package/dist/components/resizable-panel/types.d.ts +0 -4
  507. package/dist/components/tabs-item/index.d.vue.ts +0 -4
  508. package/dist/components/tabs-item/index.vue +0 -16
  509. package/dist/components/tabs-item/types.d.ts +0 -10
  510. package/dist/composables/use-browser-observer.d.ts +0 -12
  511. package/dist/composables/use-browser-observer.js +0 -74
  512. package/dist/composables/use-focus-trap.js +0 -54
  513. package/dist/composables/use-list-filter.d.ts +0 -11
  514. package/dist/composables/use-list-filter.js +0 -56
  515. package/dist/composables/use-list-navigation.d.ts +0 -27
  516. package/dist/composables/use-list-navigation.js +0 -159
  517. package/dist/composables/use-lock-scroll.d.ts +0 -5
  518. package/dist/composables/use-lock-scroll.js +0 -37
  519. package/dist/composables/use-model-value.js +0 -13
  520. package/dist/composables/use-overlay-manager.js +0 -80
  521. package/dist/composables/use-swipe-gesture.d.ts +0 -65
  522. package/dist/composables/use-swipe-gesture.js +0 -98
  523. package/dist/contexts/carousel.d.ts +0 -14
  524. package/dist/contexts/carousel.js +0 -2
  525. package/dist/contexts/resizable.d.ts +0 -27
  526. package/dist/contexts/resizable.js +0 -2
  527. package/dist/contexts/tabs.d.ts +0 -15
  528. package/dist/contexts/tabs.js +0 -2
  529. package/dist/plugins/any-touch.d.ts +0 -213
  530. package/dist/plugins/any-touch.js +0 -592
  531. package/dist/styles/source.css +0 -640
  532. package/dist/types/shared/index.d.ts +0 -2
  533. package/dist/utils/fuzzy-search.d.ts +0 -7
  534. package/dist/utils/fuzzy-search.js +0 -61
  535. package/dist/utils/get.d.ts +0 -9
  536. package/dist/utils/get.js +0 -55
  537. package/dist/utils/index.d.ts +0 -10
  538. package/dist/utils/index.js +0 -10
  539. package/dist/utils/ref.d.ts +0 -5
  540. package/dist/utils/ref.js +0 -8
  541. package/dist/utils/uid.d.ts +0 -1
  542. package/dist/utils/uid.js +0 -4
  543. /package/dist/composables/{use-forward-ref-expose.d.ts → _internal/use-forward-ref-expose.d.ts} +0 -0
  544. /package/dist/composables/{use-popover-responsive.d.ts → _internal/use-popover-responsive.d.ts} +0 -0
  545. /package/dist/utils/{context.d.ts → _internal/context.d.ts} +0 -0
@@ -1,287 +1,429 @@
1
1
  <script setup>
2
- import { computed, onBeforeUnmount, shallowRef } from "vue";
3
- import { useDelayChange } from "../../composables/use-delay-change";
4
- import { useConfigProvider } from "../../contexts/config-provider";
5
- import { getAllDatesBetween } from "../../utils/date";
6
- import { getCssUnitValue } from "../../utils/format";
7
- import { getColorByThreshold } from "../../utils/get";
2
+ import { computed, onBeforeUnmount, shallowRef, watch } from "vue";
3
+ import { useDelayChange } from "../../composables/use-delay-change.js";
4
+ import { useConfigProvider } from "../../contexts/config-provider.js";
5
+ import { getAllDatesBetween } from "../../utils/date.js";
6
+ import { scheduleByRaf } from "../../utils/event.js";
7
+ import { getCssUnitValue } from "../../utils/format.js";
8
+ import { isUndefined } from "../../utils/is.js";
8
9
  defineOptions({
9
- name: "PActiveGraph",
10
- inheritAttrs: false
10
+ name: "PActiveGraph",
11
+ inheritAttrs: false
11
12
  });
12
13
  const props = defineProps({
13
- data: { type: Array, required: false, default: () => [] },
14
- legend: { type: Boolean, required: false, default: true },
15
- colors: { type: Object, required: false },
16
- startDate: { type: [String, Date], required: false },
17
- endDate: { type: [String, Date], required: false },
18
- tooltip: { type: Boolean, required: false, default: true },
19
- graphOnly: { type: Boolean, required: false },
20
- transpose: { type: Boolean, required: false },
21
- fieldNames: { type: Object, required: false },
22
- itemRadius: { type: [String, Number], required: false },
23
- defaultSelect: { type: String, required: false }
14
+ data: {
15
+ type: Array,
16
+ required: false,
17
+ default: () => []
18
+ },
19
+ legend: {
20
+ type: Boolean,
21
+ required: false,
22
+ default: true
23
+ },
24
+ colors: {
25
+ type: Object,
26
+ required: false
27
+ },
28
+ startDate: {
29
+ type: [String, Date],
30
+ required: false
31
+ },
32
+ endDate: {
33
+ type: [String, Date],
34
+ required: false
35
+ },
36
+ tooltip: {
37
+ type: Boolean,
38
+ required: false,
39
+ default: true
40
+ },
41
+ graphOnly: {
42
+ type: Boolean,
43
+ required: false
44
+ },
45
+ transpose: {
46
+ type: Boolean,
47
+ required: false
48
+ },
49
+ fieldNames: {
50
+ type: Object,
51
+ required: false
52
+ },
53
+ itemRadius: {
54
+ type: [String, Number],
55
+ required: false
56
+ },
57
+ defaultSelect: {
58
+ type: String,
59
+ required: false
60
+ }
24
61
  });
25
- const emits = defineEmits(["select"]);
62
+ const emits = defineEmits(["change"]);
26
63
  const configProvider = useConfigProvider();
27
64
  const CELL_GAP = 3;
28
65
  const CELL_SIZE = 12;
66
+ const itemRadiusStyle = computed(() => {
67
+ return { "--active-graph-item-radius": getCssUnitValue(props.itemRadius) };
68
+ });
29
69
  const selectedDate = shallowRef(props.defaultSelect);
30
70
  const getDefaultStartDate = () => {
31
- const date = /* @__PURE__ */ new Date();
32
- date.setFullYear(date.getFullYear() - 1);
33
- while (date.getDay() !== 0) {
34
- date.setDate(date.getDate() - 1);
35
- }
36
- return date;
71
+ const date = new Date();
72
+ date.setFullYear(date.getFullYear() - 1);
73
+ while (date.getDay() !== 0) {
74
+ date.setDate(date.getDate() - 1);
75
+ }
76
+ return date;
37
77
  };
38
78
  const getDefaultEndDate = () => {
39
- return /* @__PURE__ */ new Date();
79
+ return new Date();
40
80
  };
81
+ function isShallowEqualObject(a, b) {
82
+ const keys = Object.keys(a);
83
+ if (keys.length !== Object.keys(b).length) {
84
+ return false;
85
+ }
86
+ return keys.every((key) => a[key] === b[key]);
87
+ }
88
+ let colorsSource;
89
+ let colorsCache;
41
90
  const computedColors = computed(() => {
42
- if (props.colors) {
43
- return props.colors;
44
- }
45
- return {
46
- 0: "",
47
- 5: "var(--color-green-300)",
48
- 10: "var(--color-green-500)",
49
- 15: "var(--color-green-700)",
50
- 20: "var(--color-green-900)"
51
- };
91
+ if (props.colors) {
92
+ if (!isUndefined(colorsCache) && !isUndefined(colorsSource) && isShallowEqualObject(props.colors, colorsSource)) {
93
+ return colorsCache;
94
+ }
95
+ colorsSource = props.colors;
96
+ colorsCache = { ...props.colors };
97
+ return colorsCache;
98
+ }
99
+ colorsSource = undefined;
100
+ colorsCache = undefined;
101
+ return {
102
+ 0: "",
103
+ 5: "var(--color-green-300)",
104
+ 10: "var(--color-green-500)",
105
+ 15: "var(--color-green-700)",
106
+ 20: "var(--color-green-900)"
107
+ };
52
108
  });
53
- const rangedDates = computed(
54
- () => getAllDatesBetween(
55
- props.startDate || getDefaultStartDate(),
56
- props.endDate || getDefaultEndDate()
57
- )
58
- );
109
+ const colorThresholds = computed(() => Object.keys(computedColors.value).map(Number).sort((a, b) => a - b));
110
+ function getColor(count) {
111
+ const colors = computedColors.value;
112
+ const thresholds = colorThresholds.value;
113
+ const length = thresholds.length;
114
+ if (length === 0) {
115
+ return "";
116
+ }
117
+ for (let i = 0; i < length; i++) {
118
+ if (count < thresholds[i]) {
119
+ return colors[thresholds[i - 1]];
120
+ }
121
+ }
122
+ return colors[thresholds[length - 1]];
123
+ }
124
+ const rangedDates = computed(() => getAllDatesBetween(props.startDate || getDefaultStartDate(), props.endDate || getDefaultEndDate()));
125
+ const dateInfoList = computed(() => rangedDates.value.dates.map((dateStr) => {
126
+ // a bare 'YYYY-MM-DD' string is parsed as UTC by `new Date()`, so the local
127
+ // getters below would return the previous day in negative-offset timezones
128
+ const date = new Date(`${dateStr}T00:00:00`);
129
+ return {
130
+ year: date.getFullYear(),
131
+ month: date.getMonth(),
132
+ day: date.getDate(),
133
+ weekday: date.getDay()
134
+ };
135
+ }));
136
+ let dateCountData;
137
+ let dateCountNames;
138
+ let dateCountMapCache;
59
139
  const dateCountMap = computed(() => {
60
- const { date, count } = props.fieldNames || { date: "date", count: "count" };
61
- return props.data.reduce(
62
- (acc, cur) => {
63
- acc[cur[date]] = (acc[cur[date]] || 0) + cur[count];
64
- return acc;
65
- },
66
- {}
67
- );
140
+ const fieldNames = props.fieldNames || {
141
+ date: "date",
142
+ count: "count"
143
+ };
144
+ const namesUnchanged = fieldNames === dateCountNames || !isUndefined(dateCountNames) && isShallowEqualObject(fieldNames, dateCountNames);
145
+ if (isUndefined(dateCountMapCache) || props.data !== dateCountData || !namesUnchanged) {
146
+ dateCountData = props.data;
147
+ dateCountNames = fieldNames;
148
+ dateCountMapCache = props.data.reduce((acc, cur) => {
149
+ acc[cur[fieldNames.date]] = (acc[cur[fieldNames.date]] || 0) + cur[fieldNames.count];
150
+ return acc;
151
+ }, {});
152
+ }
153
+ return dateCountMapCache;
68
154
  });
155
+ // get localized day of week
69
156
  function getLocalizedDay(dayIndex) {
70
- return configProvider.locale.date.day[dayIndex];
157
+ return configProvider.locale.date.day[dayIndex];
71
158
  }
72
159
  const tableHeadList = computed(() => {
73
- if (props.transpose) {
74
- return Array.from({ length: 7 }, (_, i) => {
75
- return [1, 3, 5].includes(i) ? getLocalizedDay(i) : "";
76
- });
77
- }
78
- return createMonthHeaders();
160
+ // transpose mode: table head is day of week
161
+ if (props.transpose) {
162
+ return Array.from({ length: 7 }, (_, i) => {
163
+ return [
164
+ 1,
165
+ 3,
166
+ 5
167
+ ].includes(i) ? getLocalizedDay(i) : "";
168
+ });
169
+ }
170
+ // non-transpose mode: table head is month
171
+ return createMonthHeaders();
79
172
  });
173
+ // check if should mark as month header
80
174
  function shouldMarkAsMonthHeader(currentMonth, newMonth, dayOfMonth) {
81
- return currentMonth !== newMonth && dayOfMonth === 1;
175
+ return currentMonth !== newMonth && dayOfMonth === 1;
82
176
  }
83
177
  function createMonthHeaders() {
84
- const dates = rangedDates.value.dates;
85
- const columnsCount = Math.ceil(dates.length / 7);
86
- const monthHeaders = Array.from({ length: columnsCount }, () => "");
87
- const firstDate = new Date(dates[0]);
88
- let trackedMonth = firstDate.getMonth();
89
- for (let col = 0; col < columnsCount; col++) {
90
- for (let dayInWeek = 0; dayInWeek < 7; dayInWeek++) {
91
- const dateIndex = col * 7 + dayInWeek;
92
- if (dateIndex < dates.length) {
93
- const currentDate = new Date(dates[dateIndex]);
94
- const currentMonth = currentDate.getMonth();
95
- const dayOfMonth = currentDate.getDate();
96
- if (shouldMarkAsMonthHeader(trackedMonth, currentMonth, dayOfMonth)) {
97
- trackedMonth = currentMonth;
98
- monthHeaders[col] = configProvider.locale.date.month[currentMonth];
99
- }
100
- }
101
- }
102
- }
103
- const isFirstTwoColumnsEmpty = monthHeaders[0] === "" && monthHeaders[1] === "";
104
- if (isFirstTwoColumnsEmpty) {
105
- monthHeaders[0] = configProvider.locale.date.month[firstDate.getMonth()];
106
- }
107
- return monthHeaders;
178
+ const dates = rangedDates.value.dates;
179
+ const columnsCount = Math.ceil(dates.length / 7);
180
+ const monthHeaders = Array.from({ length: columnsCount }, () => "");
181
+ const firstInfo = dateInfoList.value[0];
182
+ let trackedMonth = firstInfo.month;
183
+ for (let col = 0; col < columnsCount; col++) {
184
+ for (let dayInWeek = 0; dayInWeek < 7; dayInWeek++) {
185
+ const dateIndex = col * 7 + dayInWeek;
186
+ if (dateIndex < dates.length) {
187
+ const currentInfo = dateInfoList.value[dateIndex];
188
+ // check if is the first day of the new month
189
+ if (shouldMarkAsMonthHeader(trackedMonth, currentInfo.month, currentInfo.day)) {
190
+ trackedMonth = currentInfo.month;
191
+ monthHeaders[col] = configProvider.locale.date.month[currentInfo.month];
192
+ }
193
+ }
194
+ }
195
+ }
196
+ // handle edge case: ensure the first month is correctly displayed and does not overlap with other months
197
+ const isFirstTwoColumnsEmpty = monthHeaders[0] === "" && monthHeaders[1] === "";
198
+ if (isFirstTwoColumnsEmpty) {
199
+ monthHeaders[0] = configProvider.locale.date.month[firstInfo.month];
200
+ }
201
+ return monthHeaders;
108
202
  }
109
- const tableBodyList = computed(() => {
110
- return props.transpose ? createTransposedTableData() : createStandardTableData();
111
- });
203
+ const tableBodyList = shallowRef([]);
204
+ function refreshTableBodyList() {
205
+ tableBodyList.value = props.transpose ? createTransposedTableData() : createStandardTableData();
206
+ }
207
+ // create transposed table data (rows are dates, columns are days of week)
112
208
  function createTransposedTableData() {
113
- const dataMap = dateCountMap.value;
114
- const dateList = rangedDates.value.dates;
115
- const dateListLength = dateList.length;
116
- const monthRows = [];
117
- let currentMonth = -1;
118
- let currentYear = -1;
119
- let currentRow = null;
120
- for (let i = 0; i < dateListLength; i++) {
121
- const dateStr = dateList[i];
122
- const date = new Date(dateStr);
123
- const year = date.getFullYear();
124
- const month = date.getMonth();
125
- const dayOfWeek = date.getDay();
126
- const count = dataMap[dateStr] || 0;
127
- if (currentRow === null) {
128
- currentRow = [];
129
- if (i === 0) {
130
- for (let j = 0; j < dayOfWeek; j++) {
131
- currentRow.push({
132
- hidden: true,
133
- date: void 0,
134
- count: 0,
135
- color: void 0
136
- });
137
- }
138
- }
139
- }
140
- currentRow.push({
141
- hidden: false,
142
- date: dateStr,
143
- count,
144
- color: getColorByThreshold(count, computedColors.value)
145
- });
146
- if (month !== currentMonth || year !== currentYear) {
147
- currentMonth = month;
148
- currentYear = year;
149
- }
150
- const isLastItem = i === dateListLength - 1;
151
- const isRowFull = currentRow.length >= 7;
152
- if (isRowFull || isLastItem) {
153
- if (currentRow.length < 7 && isLastItem) {
154
- while (currentRow.length < 7) {
155
- currentRow.push({
156
- hidden: true,
157
- date: void 0,
158
- count: 0,
159
- color: void 0
160
- });
161
- }
162
- }
163
- monthRows.push([...currentRow]);
164
- currentRow = null;
165
- }
166
- }
167
- return markMonthRows(monthRows);
209
+ const dataMap = dateCountMap.value;
210
+ const dateList = rangedDates.value.dates;
211
+ const dateListLength = dateList.length;
212
+ const monthRows = [];
213
+ let currentRow = null;
214
+ for (let i = 0; i < dateListLength; i++) {
215
+ const dateStr = dateList[i];
216
+ const dateInfo = dateInfoList.value[i];
217
+ const count = dataMap[dateStr] || 0;
218
+ // create new row
219
+ if (currentRow === null) {
220
+ currentRow = [];
221
+ // only the first row needs to fill empty cells
222
+ if (i === 0) {
223
+ for (let j = 0; j < dateInfo.weekday; j++) {
224
+ currentRow.push({
225
+ hidden: true,
226
+ date: undefined,
227
+ count: 0,
228
+ color: undefined
229
+ });
230
+ }
231
+ }
232
+ }
233
+ // add current date cell
234
+ currentRow.push({
235
+ hidden: false,
236
+ date: dateStr,
237
+ count,
238
+ color: getColor(count)
239
+ });
240
+ const isLastItem = i === dateListLength - 1;
241
+ const isRowFull = currentRow.length >= 7;
242
+ // row is full or last item, add to result
243
+ if (isRowFull || isLastItem) {
244
+ // fill the last row
245
+ if (currentRow.length < 7 && isLastItem) {
246
+ while (currentRow.length < 7) {
247
+ currentRow.push({
248
+ hidden: true,
249
+ date: undefined,
250
+ count: 0,
251
+ color: undefined
252
+ });
253
+ }
254
+ }
255
+ const row = [...currentRow];
256
+ row.rowKey = currentRow.find((cell) => cell.date)?.date;
257
+ monthRows.push(row);
258
+ currentRow = null;
259
+ }
260
+ }
261
+ return markMonthRows(monthRows);
168
262
  }
263
+ // create standard table data (rows are days of week, columns are dates)
169
264
  function createStandardTableData() {
170
- const dataMap = dateCountMap.value;
171
- const dateList = rangedDates.value.dates;
172
- const dateListLength = dateList.length;
173
- const firstDayOfWeek = rangedDates.value.weeks[0];
174
- const result = Array.from({ length: 7 }, (_, i) => {
175
- const row = [];
176
- if (i < firstDayOfWeek) {
177
- row.push({
178
- hidden: true,
179
- date: void 0,
180
- count: 0,
181
- color: void 0
182
- });
183
- }
184
- const rowWithHeader = row;
185
- rowWithHeader.headerText = [1, 3, 5].includes(i) ? getLocalizedDay(i) : " ";
186
- return rowWithHeader;
187
- });
188
- for (let i = 0; i < dateListLength; i++) {
189
- const dateStr = dateList[i];
190
- const count = dataMap[dateStr] || 0;
191
- const dayOfWeek = new Date(dateStr).getDay();
192
- result[dayOfWeek].push({
193
- hidden: false,
194
- date: dateStr,
195
- count,
196
- color: getColorByThreshold(count, computedColors.value)
197
- });
198
- }
199
- return result;
265
+ const dataMap = dateCountMap.value;
266
+ const dateList = rangedDates.value.dates;
267
+ const dateListLength = dateList.length;
268
+ const firstDayOfWeek = rangedDates.value.weeks[0];
269
+ // initialize 7 rows (represents days of week)
270
+ const result = Array.from({ length: 7 }, (_, i) => {
271
+ const row = [];
272
+ // fill empty cells if the first week is not complete
273
+ if (i < firstDayOfWeek) {
274
+ row.push({
275
+ hidden: true,
276
+ date: undefined,
277
+ count: 0,
278
+ color: undefined
279
+ });
280
+ }
281
+ // add headerText attribute
282
+ const rowWithHeader = row;
283
+ rowWithHeader.headerText = [
284
+ 1,
285
+ 3,
286
+ 5
287
+ ].includes(i) ? getLocalizedDay(i) : " ";
288
+ return rowWithHeader;
289
+ });
290
+ // fill all date data
291
+ for (let i = 0; i < dateListLength; i++) {
292
+ const dateStr = dateList[i];
293
+ const count = dataMap[dateStr] || 0;
294
+ const dayOfWeek = dateInfoList.value[i].weekday;
295
+ result[dayOfWeek].push({
296
+ hidden: false,
297
+ date: dateStr,
298
+ count,
299
+ color: getColor(count)
300
+ });
301
+ }
302
+ return result;
200
303
  }
304
+ // mark month rows
201
305
  function markMonthRows(rows) {
202
- const monthMap = {};
203
- for (let i = 0; i < rows.length; i++) {
204
- const row = rows[i];
205
- const firstValidCell = row.find((cell) => !cell.hidden && cell.date);
206
- if (firstValidCell) {
207
- const date = new Date(firstValidCell.date);
208
- const month = date.getMonth();
209
- const year = date.getFullYear();
210
- const day = date.getDate();
211
- const key = `${year}-${month}`;
212
- if (!monthMap[key] || day === 1) {
213
- monthMap[key] = true;
214
- row.isMonthFirstRow = true;
215
- row.monthName = configProvider.locale.date.month[month];
216
- row.headerText = row.monthName;
217
- }
218
- }
219
- }
220
- return rows;
306
+ const monthMap = {};
307
+ for (let i = 0; i < rows.length; i++) {
308
+ const row = rows[i];
309
+ const firstValidCell = row.find((cell) => !cell.hidden && cell.date);
310
+ if (firstValidCell) {
311
+ const date = new Date(`${firstValidCell.date}T00:00:00`);
312
+ const month = date.getMonth();
313
+ const year = date.getFullYear();
314
+ const day = date.getDate();
315
+ const key = `${year}-${month}`;
316
+ // mark month first row
317
+ if (!monthMap[key] || day === 1) {
318
+ monthMap[key] = true;
319
+ row.isMonthFirstRow = true;
320
+ row.monthName = configProvider.locale.date.month[month];
321
+ row.headerText = row.monthName;
322
+ }
323
+ }
324
+ }
325
+ return rows;
221
326
  }
327
+ const scheduleRefreshTableBodyList = scheduleByRaf(refreshTableBodyList);
328
+ refreshTableBodyList();
329
+ watch(() => [
330
+ dateCountMap.value,
331
+ rangedDates.value,
332
+ props.transpose,
333
+ computedColors.value,
334
+ configProvider.locale.date.day,
335
+ configProvider.locale.date.month
336
+ ], scheduleRefreshTableBodyList, { flush: "post" });
222
337
  function onCellClick(event) {
223
- const target = event.target;
224
- const date = target.dataset.date;
225
- if (!date) {
226
- return;
227
- }
228
- selectedDate.value = selectedDate.value === date ? "" : date;
229
- emits("select", date, event);
338
+ const target = event.target;
339
+ const date = target.dataset.date;
340
+ if (!date) {
341
+ return;
342
+ }
343
+ selectedDate.value = selectedDate.value === date ? "" : date;
344
+ emits("change", date, event);
230
345
  }
231
346
  let tbodyRect;
232
347
  const tbodyRef = shallowRef();
233
348
  const tooltipInfo = shallowRef({});
234
349
  const { value: showTooltip, setValue: setShowTooltip } = useDelayChange(false, { delay: 500 });
350
+ const pendingTooltip = {
351
+ target: null,
352
+ date: ""
353
+ };
354
+ const scheduleTooltipUpdate = scheduleByRaf(() => {
355
+ const { target, date } = pendingTooltip;
356
+ if (!target || !date) {
357
+ return;
358
+ }
359
+ // on mobile, the pointerover event is triggered before the pointerenter event,
360
+ // and the position information may change after scrolling
361
+ // so getting it before using it can ensure the correct position information
362
+ if (!tbodyRect) {
363
+ tbodyRect = tbodyRef.value.getBoundingClientRect();
364
+ }
365
+ setShowTooltip(true, true);
366
+ const rect = target.getBoundingClientRect();
367
+ let top = rect.top - tbodyRect.top - CELL_SIZE;
368
+ // if only the graph is displayed, the tooltip position needs to be reduced by one cell height, because the title is hidden and the position will be above
369
+ if (props.graphOnly) {
370
+ top -= CELL_SIZE;
371
+ }
372
+ tooltipInfo.value = {
373
+ date,
374
+ count: dateCountMap.value[date] || 0,
375
+ left: rect.left - tbodyRect.left + CELL_GAP,
376
+ top
377
+ };
378
+ });
379
+ // when pointer leaves the table area, hide the tooltip
235
380
  function onPointerLeave() {
236
- setShowTooltip(false, true);
237
- tooltipInfo.value = {};
238
- tbodyRect = null;
381
+ pendingTooltip.target = null;
382
+ pendingTooltip.date = "";
383
+ scheduleTooltipUpdate.cancel();
384
+ setShowTooltip(false, true);
385
+ tooltipInfo.value = {};
386
+ tbodyRect = null;
239
387
  }
240
- async function onPointerOver(ev) {
241
- if (!props.tooltip) {
242
- return;
243
- }
244
- const targetEl = ev.target;
245
- if (targetEl.tagName !== "TD") {
246
- setShowTooltip(false);
247
- return;
248
- }
249
- const date = targetEl.dataset.date;
250
- if (!date) {
251
- setShowTooltip(false, true);
252
- return;
253
- }
254
- if (!tbodyRect) {
255
- tbodyRect = tbodyRef.value.getBoundingClientRect();
256
- }
257
- setShowTooltip(true, true);
258
- const rect = targetEl.getBoundingClientRect();
259
- let top = rect.top - tbodyRect.top - CELL_SIZE;
260
- if (props.graphOnly) {
261
- top -= CELL_SIZE;
262
- }
263
- tooltipInfo.value = {
264
- date,
265
- count: dateCountMap.value[date] || 0,
266
- left: rect.left - tbodyRect.left + CELL_GAP,
267
- top
268
- };
388
+ // when pointer hovers over a cell, show the tooltip
389
+ function onPointerOver(ev) {
390
+ if (!props.tooltip) {
391
+ return;
392
+ }
393
+ const targetEl = ev.target;
394
+ if (targetEl.tagName !== "TD") {
395
+ if (showTooltip.value) {
396
+ setShowTooltip(false);
397
+ }
398
+ return;
399
+ }
400
+ const date = targetEl.dataset.date;
401
+ // if there is no date data, hide the tooltip
402
+ if (!date) {
403
+ setShowTooltip(false, true);
404
+ return;
405
+ }
406
+ pendingTooltip.target = targetEl;
407
+ pendingTooltip.date = date;
408
+ scheduleTooltipUpdate();
269
409
  }
270
410
  onBeforeUnmount(() => {
271
- onPointerLeave();
411
+ scheduleRefreshTableBodyList.cancel();
412
+ onPointerLeave();
272
413
  });
273
414
  </script>
274
415
 
275
416
  <template>
276
417
  <div
418
+ data-active-graph
277
419
  class="pxd-active-graph relative"
278
- :class="[graphOnly ? 'py-0.75 pr-0.75' : 'pr-5']"
420
+ :class="[graphOnly ? 'py-0.75 pe-0.75' : 'pe-5']"
279
421
  v-bind="$attrs"
280
422
  >
281
423
  <table
282
424
  role="grid"
283
425
  aria-readonly="true"
284
- class="table-auto border-separate"
426
+ class="table-fixed border-separate"
285
427
  style="border-spacing: 3px"
286
428
  @pointerleave="onPointerLeave"
287
429
  >
@@ -302,11 +444,11 @@ onBeforeUnmount(() => {
302
444
  <tbody
303
445
  ref="tbodyRef"
304
446
  class="text-xs"
305
- :style="{ '--active-graph-item-radius': getCssUnitValue(itemRadius) }"
447
+ :style="itemRadiusStyle"
306
448
  @click="onCellClick"
307
449
  @pointerover.capture="onPointerOver"
308
450
  >
309
- <tr v-for="(row, i) of tableBodyList" :key="i" class="h-3">
451
+ <tr v-for="(row, i) of tableBodyList" :key="row.rowKey || i" class="h-3">
310
452
  <td
311
453
  class="pxd-active-graph--label relative overflow-hidden leading-none text-foreground-secondary"
312
454
  >
@@ -318,14 +460,14 @@ onBeforeUnmount(() => {
318
460
  <td
319
461
  v-for="col of row"
320
462
  :key="col.date"
321
- class="pxd-active-graph--item w-3 min-w-3 rounded-(--active-graph-item-radius) border border-transparent bg-gray-alpha-100 hover:border-primary motion-safe:transition-appearance"
463
+ class="pxd-active-graph--item max-w-3 min-w-3 rounded-(--active-graph-item-radius) border border-transparent bg-gray-alpha-100 hover:border-primary motion-safe:transition-colors"
322
464
  :data-date="col.date"
323
465
  :class="{
324
466
  'pointer-events-none invisible': col.hidden,
325
467
  'opacity-30': selectedDate && col.date !== selectedDate,
326
468
  'border-primary!': selectedDate && col.date === selectedDate
327
469
  }"
328
- :style="`background: ${col.color}`"
470
+ :style="{ background: col.color }"
329
471
  />
330
472
  </tr>
331
473
 
@@ -339,8 +481,8 @@ onBeforeUnmount(() => {
339
481
  </td>
340
482
 
341
483
  <td
342
- v-for="color in computedColors"
343
- :key="color"
484
+ v-for="(color, colorIndex) in computedColors"
485
+ :key="colorIndex"
344
486
  class="w-3 h-3 rounded-(--active-graph-item-radius) bg-gray-alpha-100 motion-safe:transition-colors"
345
487
  :style="`background-color: ${color}`"
346
488
  />
@@ -358,7 +500,7 @@ onBeforeUnmount(() => {
358
500
  <Transition v-if="tooltip" name="pxd-transition--fade" mode="out-in" appear>
359
501
  <div
360
502
  v-if="showTooltip"
361
- class="pxd-active-graph--tooltip left-0 top-0 px-2 py-1 pointer-events-none absolute z-1 w-max rounded-sm bg-gray-1000 text-13 text-gray-100 duration-50 will-change-transform motion-safe:transition-transform"
503
+ class="pxd-active-graph--tooltip left-0 top-0 px-2 py-1 shadow-lg pointer-events-none absolute z-1 w-max rounded-sm bg-gray-1000 text-13 text-gray-100"
362
504
  :style="`transform: translate(${tooltipInfo.left}px, ${tooltipInfo.top}px);`"
363
505
  >
364
506
  <slot name="tooltip" :data="tooltipInfo"