@vuer-ai/vuer-uikit 0.0.119 → 0.0.121

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 (494) hide show
  1. package/dist/SyncScroll/SyncScroll.cjs +11 -11
  2. package/dist/SyncScroll/SyncScroll.mjs +4 -4
  3. package/dist/SyncScroll/index.cjs +11 -11
  4. package/dist/SyncScroll/index.mjs +4 -4
  5. package/dist/auth/components/index.cjs +84 -83
  6. package/dist/auth/components/index.mjs +83 -82
  7. package/dist/auth/components/user-avatar/index.cjs +84 -83
  8. package/dist/auth/components/user-avatar/index.mjs +83 -82
  9. package/dist/auth/index.cjs +84 -83
  10. package/dist/auth/index.mjs +83 -82
  11. package/dist/{chunk-42WQWP6X.cjs → chunk-22T2AL3G.cjs} +8 -8
  12. package/dist/{chunk-H6JGIEAU.mjs → chunk-2KQXKQNU.mjs} +1 -1
  13. package/dist/{chunk-S7CCCMMU.cjs → chunk-34NDAZS6.cjs} +18 -9
  14. package/dist/{chunk-DM43KZU7.cjs → chunk-3F3LBOQJ.cjs} +2 -2
  15. package/dist/chunk-3JMUI4R2.cjs +136 -0
  16. package/dist/{chunk-MJOD2WOC.mjs → chunk-3P2OP4KO.mjs} +24 -46
  17. package/dist/{chunk-ARAMXRUE.mjs → chunk-3SUV56TH.mjs} +3 -3
  18. package/dist/{chunk-CH3BSVL4.cjs → chunk-42DBXENE.cjs} +2 -2
  19. package/dist/{chunk-JW456O5K.mjs → chunk-4FB6B2ES.mjs} +1 -1
  20. package/dist/{chunk-UUV46MDU.cjs → chunk-4G2LN6XU.cjs} +139 -108
  21. package/dist/chunk-4NABYVCK.mjs +31 -0
  22. package/dist/{chunk-MNCBTS63.cjs → chunk-4TRHQ7MJ.cjs} +5 -5
  23. package/dist/{chunk-F2LEYFWW.cjs → chunk-4WKFVKFF.cjs} +5 -5
  24. package/dist/{chunk-EEGQLTSQ.cjs → chunk-4WWGBRQV.cjs} +77 -0
  25. package/dist/chunk-4Y5IF7R5.mjs +322 -0
  26. package/dist/{chunk-24SOZV7S.mjs → chunk-4YVKJKWV.mjs} +4 -15
  27. package/dist/{chunk-X6WOCNBX.cjs → chunk-57NITJN5.cjs} +2 -2
  28. package/dist/{chunk-QWBMDS3S.cjs → chunk-5HT74RHB.cjs} +5 -5
  29. package/dist/{chunk-4ODJAEOM.mjs → chunk-5JYH7TXY.mjs} +1 -1
  30. package/dist/{chunk-OJOWMXXY.mjs → chunk-67H3OSM3.mjs} +3 -3
  31. package/dist/{chunk-2CD4D2BR.cjs → chunk-6CJWNYHL.cjs} +3 -3
  32. package/dist/{chunk-CRX2ZCM2.cjs → chunk-6LTCLQH3.cjs} +6 -1
  33. package/dist/{chunk-TQKX345P.mjs → chunk-6NSLYQ35.mjs} +2 -2
  34. package/dist/{chunk-WKK5UX2W.mjs → chunk-6U6LRS37.mjs} +2 -2
  35. package/dist/{chunk-4OUQ6NSX.cjs → chunk-6VIKDPCD.cjs} +2 -2
  36. package/dist/{chunk-LMYA5IOK.mjs → chunk-6ZLK2RYS.mjs} +3 -3
  37. package/dist/{chunk-LYGYXV7S.cjs → chunk-7ICRKPIO.cjs} +16 -16
  38. package/dist/{chunk-ZCSJGDX7.mjs → chunk-7MR3M2HW.mjs} +1 -1
  39. package/dist/{chunk-Q37KC3CL.mjs → chunk-7RRQ2HHL.mjs} +114 -17
  40. package/dist/{chunk-FMKD5JBL.mjs → chunk-7TD77VF4.mjs} +10 -6
  41. package/dist/{chunk-42ZXL3KZ.cjs → chunk-7TXGEIV3.cjs} +12 -12
  42. package/dist/{chunk-SLXM4F24.cjs → chunk-7YFUNCKT.cjs} +9 -9
  43. package/dist/{chunk-LGFWHV23.cjs → chunk-ACGXE2IO.cjs} +2 -2
  44. package/dist/{chunk-EGIIZWP3.mjs → chunk-AFR23IX6.mjs} +1 -1
  45. package/dist/{chunk-XS5IUI62.cjs → chunk-B6CIRZI4.cjs} +2 -2
  46. package/dist/{chunk-REZAPK6Z.mjs → chunk-BDFUHPX2.mjs} +1 -1
  47. package/dist/{chunk-CXPF274N.mjs → chunk-BK77KKIM.mjs} +1 -1
  48. package/dist/{chunk-ZJSL6HSL.mjs → chunk-BLG4IPRR.mjs} +1 -1
  49. package/dist/{chunk-JQYMF2FW.cjs → chunk-BSDIS4KS.cjs} +4 -4
  50. package/dist/{chunk-4DSJ62TT.mjs → chunk-BYZ7HIIK.mjs} +2 -2
  51. package/dist/{chunk-6C53NKMF.mjs → chunk-C4U5BMQH.mjs} +1 -1
  52. package/dist/{chunk-BQA24G2A.mjs → chunk-CENP2PIB.mjs} +2 -2
  53. package/dist/{chunk-NJWKR5WR.mjs → chunk-CEYNTMQP.mjs} +1 -1
  54. package/dist/{chunk-CIOLL5LX.mjs → chunk-CN6SZKJZ.mjs} +1 -1
  55. package/dist/{chunk-WDSOII5A.cjs → chunk-COJRGW3A.cjs} +2 -2
  56. package/dist/{chunk-DYLDZJQC.cjs → chunk-COL2MXGC.cjs} +4 -4
  57. package/dist/chunk-CRY23RMB.mjs +30 -0
  58. package/dist/{chunk-CKGEV2JL.cjs → chunk-CV2EDA3W.cjs} +2 -2
  59. package/dist/{chunk-7AAMQGY2.cjs → chunk-CYWVJ3HF.cjs} +7 -7
  60. package/dist/{chunk-EEYL7PDI.cjs → chunk-D5WTSBUX.cjs} +7 -7
  61. package/dist/{chunk-ASZIBFA6.cjs → chunk-DG2EVWIW.cjs} +10 -10
  62. package/dist/chunk-DGJ7E77I.mjs +23 -0
  63. package/dist/{chunk-B7PLWNPX.mjs → chunk-DSQPFXYL.mjs} +22 -24
  64. package/dist/chunk-DVUN6GQI.cjs +21 -0
  65. package/dist/chunk-E7ACJ3NX.cjs +45 -0
  66. package/dist/{chunk-T4U3BG2V.mjs → chunk-EGJLY5VZ.mjs} +1 -1
  67. package/dist/{chunk-IPMQ63BJ.cjs → chunk-EMZEL54F.cjs} +27 -49
  68. package/dist/{chunk-7AEOJFD4.cjs → chunk-EOTGD64D.cjs} +2 -2
  69. package/dist/{chunk-K2ZYSKRU.mjs → chunk-EZ536NLQ.mjs} +1 -1
  70. package/dist/chunk-FB3M2JJV.cjs +21 -0
  71. package/dist/{chunk-DDU3SPCC.mjs → chunk-FUMJBAQI.mjs} +57 -4
  72. package/dist/{chunk-4TYIH6V3.mjs → chunk-G45SP3DA.mjs} +91 -61
  73. package/dist/{chunk-HB65PF7F.cjs → chunk-GBRIW266.cjs} +2 -2
  74. package/dist/{chunk-RPTRTGC2.cjs → chunk-GEGPGQVH.cjs} +15 -15
  75. package/dist/chunk-GHQA7PER.mjs +107 -0
  76. package/dist/{chunk-XQ3MWA3D.mjs → chunk-GJKFQHUX.mjs} +3 -3
  77. package/dist/{chunk-ND3WJ63Z.cjs → chunk-GVRVRBDU.cjs} +2 -2
  78. package/dist/chunk-GZ2BG42R.mjs +34 -0
  79. package/dist/chunk-H3JRYX2U.mjs +19 -0
  80. package/dist/{chunk-T66ETI7E.mjs → chunk-HBEU2PU2.mjs} +6 -1
  81. package/dist/{chunk-EVBYVJTW.mjs → chunk-HGN7J4CP.mjs} +2 -2
  82. package/dist/{chunk-SMXN2KOV.mjs → chunk-HGTL7DFT.mjs} +1 -1
  83. package/dist/{chunk-QO2AM6MF.mjs → chunk-HIDTQ4Z2.mjs} +1 -1
  84. package/dist/{chunk-3NIMV5PH.mjs → chunk-HUPECWNG.mjs} +1 -1
  85. package/dist/{chunk-6WH6PWTJ.cjs → chunk-HVACIZB5.cjs} +7 -19
  86. package/dist/{chunk-R4HT3SYR.cjs → chunk-HZBP6QTE.cjs} +2 -2
  87. package/dist/{chunk-2GXIGEKC.mjs → chunk-IKSER6BF.mjs} +2 -2
  88. package/dist/{chunk-UQQBUPGF.mjs → chunk-IPMWGCAI.mjs} +5 -21
  89. package/dist/{chunk-Q7WCKEXG.cjs → chunk-JF43YF6J.cjs} +3 -3
  90. package/dist/{chunk-MXGPFCLN.cjs → chunk-JVZ6J2UX.cjs} +2 -2
  91. package/dist/{chunk-EY6PKK4X.cjs → chunk-KKGDRIR2.cjs} +2 -2
  92. package/dist/{chunk-SAXISARG.cjs → chunk-KWSH253U.cjs} +2 -2
  93. package/dist/{chunk-K2BQNNEX.cjs → chunk-L6W77P4B.cjs} +8 -8
  94. package/dist/{chunk-N4Y5CBOI.cjs → chunk-LGUQR5AR.cjs} +4 -4
  95. package/dist/{chunk-MYZHDWBF.mjs → chunk-LJYIEOGQ.mjs} +11 -11
  96. package/dist/{chunk-332A4MHC.mjs → chunk-LNYUFL3Q.mjs} +1 -1
  97. package/dist/{chunk-JFPIUDGT.mjs → chunk-LOMLR5AA.mjs} +1 -1
  98. package/dist/{chunk-6D7FGGSX.cjs → chunk-MMQR4IEY.cjs} +27 -27
  99. package/dist/{chunk-BUAWPPXA.cjs → chunk-MQ5DGLVE.cjs} +11 -11
  100. package/dist/{chunk-EXY6WRH4.mjs → chunk-N6KP2HIC.mjs} +2 -2
  101. package/dist/{chunk-NKGUQZTD.cjs → chunk-NC2U7QTW.cjs} +2 -2
  102. package/dist/{chunk-V75PKBIV.cjs → chunk-NEJKCSS5.cjs} +9 -9
  103. package/dist/{chunk-R5UREEMP.cjs → chunk-NHFIDL5X.cjs} +8 -8
  104. package/dist/{chunk-JNV3UBBP.cjs → chunk-NIACIZWY.cjs} +6 -22
  105. package/dist/{chunk-PC5DHSC4.mjs → chunk-NKUK73WB.mjs} +71 -1
  106. package/dist/{chunk-5OZS5UJX.cjs → chunk-NSPAT6XV.cjs} +7 -7
  107. package/dist/{chunk-4BQPIY5Z.mjs → chunk-O2NGB7YP.mjs} +1 -1
  108. package/dist/{chunk-7H7U2X45.cjs → chunk-O3DFVRON.cjs} +17 -13
  109. package/dist/{chunk-IAFCABPY.mjs → chunk-O5YP3JQ4.mjs} +1 -1
  110. package/dist/chunk-OBWKFURE.cjs +2 -0
  111. package/dist/{chunk-S37MJNNP.cjs → chunk-OCADGDGL.cjs} +2 -2
  112. package/dist/{chunk-UMGNAR3W.cjs → chunk-OON7LFBQ.cjs} +8 -8
  113. package/dist/{chunk-ZSAPBZ36.mjs → chunk-OW653F7T.mjs} +1 -1
  114. package/dist/{chunk-GQYUSBSO.mjs → chunk-P3FBRYWH.mjs} +3 -10
  115. package/dist/{chunk-P3YSHGT5.mjs → chunk-P55DAW6H.mjs} +1 -1
  116. package/dist/{chunk-JOOURIX7.cjs → chunk-P6E4WLMD.cjs} +4 -4
  117. package/dist/{chunk-SCUMWMIN.mjs → chunk-PC42NEBI.mjs} +1 -1
  118. package/dist/{chunk-F3HOBNGR.cjs → chunk-PMG3NZF5.cjs} +4 -4
  119. package/dist/{chunk-PV6CEMTT.cjs → chunk-PWZ4F3WY.cjs} +4 -4
  120. package/dist/{chunk-MK2CWAFC.mjs → chunk-PZDC5ZKG.mjs} +5 -5
  121. package/dist/{chunk-LVIZRMYN.cjs → chunk-QF3JWGWX.cjs} +2 -2
  122. package/dist/{chunk-BXZSWY4N.mjs → chunk-QYJZ5KA6.mjs} +1 -1
  123. package/dist/{chunk-AE5YDMFT.mjs → chunk-QYYMLZFE.mjs} +3 -3
  124. package/dist/{chunk-JYYAGDLZ.cjs → chunk-R22VW3EK.cjs} +2 -2
  125. package/dist/{chunk-U22YVR7M.mjs → chunk-RLY4A3IY.mjs} +15 -6
  126. package/dist/{chunk-OLYHHP67.mjs → chunk-RS4T6S3Z.mjs} +1 -1
  127. package/dist/{chunk-L2XJ5Q7T.cjs → chunk-RTZNHV43.cjs} +21 -21
  128. package/dist/{chunk-D562KO2I.mjs → chunk-RWHVZM2B.mjs} +2 -2
  129. package/dist/{chunk-PR3BCKLJ.mjs → chunk-S4BL7C3Y.mjs} +1 -1
  130. package/dist/chunk-S4C7HO32.cjs +36 -0
  131. package/dist/{chunk-DAVMLI3P.cjs → chunk-SNUQOJLK.cjs} +4 -4
  132. package/dist/{chunk-KY2PYKDZ.mjs → chunk-SO5KFX2C.mjs} +1 -1
  133. package/dist/{chunk-WDS3VL7E.mjs → chunk-SQJL67BU.mjs} +3 -3
  134. package/dist/{chunk-RW4T7UBU.cjs → chunk-STJMH4NX.cjs} +3 -3
  135. package/dist/{chunk-KIZ7WH7H.cjs → chunk-SUWJDU3Y.cjs} +59 -61
  136. package/dist/chunk-T2BDPMCF.cjs +358 -0
  137. package/dist/{chunk-U5W4ZALG.cjs → chunk-T2OAWYOU.cjs} +6 -6
  138. package/dist/{chunk-RGOZPSTI.mjs → chunk-TMBHKVKH.mjs} +1 -1
  139. package/dist/{chunk-VTW2DF63.mjs → chunk-TWDDNHRP.mjs} +1 -1
  140. package/dist/chunk-U4AANBRZ.mjs +1 -0
  141. package/dist/{chunk-DDIB73SZ.mjs → chunk-UB3ELCFR.mjs} +4 -4
  142. package/dist/chunk-UCAIVC2B.cjs +32 -0
  143. package/dist/{chunk-EK3BTKZP.cjs → chunk-UFYHIDMC.cjs} +123 -26
  144. package/dist/{chunk-KQW3YARN.cjs → chunk-UTHAZV2T.cjs} +62 -9
  145. package/dist/{chunk-G5VBLDAM.mjs → chunk-VBEVJE7Q.mjs} +1 -1
  146. package/dist/{chunk-66NKH2SV.cjs → chunk-VW2NEQHK.cjs} +6 -6
  147. package/dist/{chunk-VWVYCQWF.mjs → chunk-WBM7ATPT.mjs} +1 -1
  148. package/dist/{chunk-QBAZ6TKZ.cjs → chunk-WQT7JQN4.cjs} +2 -2
  149. package/dist/{chunk-DAA2GQAS.cjs → chunk-WRJAYU2L.cjs} +27 -27
  150. package/dist/{chunk-GTBXRWCK.cjs → chunk-WYD3KNAT.cjs} +3 -3
  151. package/dist/{chunk-EBFPZBUQ.cjs → chunk-WYUJM72T.cjs} +7 -7
  152. package/dist/{chunk-XTLGNJIO.mjs → chunk-XC25ZQ7H.mjs} +1 -1
  153. package/dist/{chunk-4PMXRQXC.cjs → chunk-XDIHVSZ5.cjs} +6 -6
  154. package/dist/{chunk-7ACZU3BT.mjs → chunk-XHNM6XE3.mjs} +1 -1
  155. package/dist/{chunk-WHV6Z7YX.mjs → chunk-XIESS6HW.mjs} +1 -1
  156. package/dist/{chunk-IU65XB2K.cjs → chunk-XMVARRN6.cjs} +2 -2
  157. package/dist/{chunk-UIJEAY6H.mjs → chunk-XTZURZIR.mjs} +1 -1
  158. package/dist/{chunk-7AZ3PLUC.mjs → chunk-XZLQHASB.mjs} +1 -1
  159. package/dist/{chunk-SRZ56OJH.mjs → chunk-XZTEU7ME.mjs} +3 -3
  160. package/dist/{chunk-RLTLA7VS.mjs → chunk-Y2IIKDRY.mjs} +1 -1
  161. package/dist/{chunk-5AKVDZMA.cjs → chunk-YAFKQ5ZV.cjs} +12 -12
  162. package/dist/{chunk-3DIFS7CO.mjs → chunk-YBUMQX6M.mjs} +1 -1
  163. package/dist/{chunk-CR6JOOO3.cjs → chunk-YGZHBIZP.cjs} +3 -10
  164. package/dist/{chunk-TWQONYWC.mjs → chunk-YMMSHGYC.mjs} +1 -1
  165. package/dist/{chunk-ZS7ESTKH.cjs → chunk-Z42BBOSG.cjs} +8 -12
  166. package/dist/{chunk-ZA7WOIIB.mjs → chunk-Z7PWETGZ.mjs} +1 -1
  167. package/dist/{chunk-3ZEQVODC.cjs → chunk-ZAK7AFVY.cjs} +2 -2
  168. package/dist/{chunk-W3IHFG4B.cjs → chunk-ZG33TW5I.cjs} +8 -8
  169. package/dist/chunk-ZQ2DPA2M.mjs +43 -0
  170. package/dist/{chunk-AHD46BFN.mjs → chunk-ZQOQB6GF.mjs} +1 -1
  171. package/dist/dial/DialPanel.cjs +89 -87
  172. package/dist/dial/DialPanel.d.cts +2 -3
  173. package/dist/dial/DialPanel.d.ts +2 -3
  174. package/dist/dial/DialPanel.mjs +88 -86
  175. package/dist/dial/DialProvider.d.cts +16 -51
  176. package/dist/dial/DialProvider.d.ts +16 -51
  177. package/dist/dial/index.cjs +105 -103
  178. package/dist/dial/index.d.cts +2 -1
  179. package/dist/dial/index.d.ts +2 -1
  180. package/dist/dial/index.mjs +88 -86
  181. package/dist/dial/types.cjs +4 -0
  182. package/dist/dial/types.d.cts +110 -0
  183. package/dist/dial/types.d.ts +110 -0
  184. package/dist/dial/types.mjs +1 -0
  185. package/dist/dial/wrapped-inputs/ControlledInputs.cjs +93 -91
  186. package/dist/dial/wrapped-inputs/ControlledInputs.d.cts +1 -2
  187. package/dist/dial/wrapped-inputs/ControlledInputs.d.ts +1 -2
  188. package/dist/dial/wrapped-inputs/ControlledInputs.mjs +88 -86
  189. package/dist/dial/wrapped-inputs/DialInputs.cjs +102 -100
  190. package/dist/dial/wrapped-inputs/DialInputs.d.cts +1 -2
  191. package/dist/dial/wrapped-inputs/DialInputs.d.ts +1 -2
  192. package/dist/dial/wrapped-inputs/DialInputs.mjs +88 -86
  193. package/dist/dial/wrapped-inputs/DialInterfaceInput.cjs +129 -0
  194. package/dist/dial/wrapped-inputs/DialInterfaceInput.d.cts +8 -0
  195. package/dist/dial/wrapped-inputs/DialInterfaceInput.d.ts +8 -0
  196. package/dist/dial/wrapped-inputs/DialInterfaceInput.mjs +120 -0
  197. package/dist/dial/wrapped-inputs/DialPresetsInput.cjs +84 -83
  198. package/dist/dial/wrapped-inputs/DialPresetsInput.d.cts +1 -2
  199. package/dist/dial/wrapped-inputs/DialPresetsInput.d.ts +1 -2
  200. package/dist/dial/wrapped-inputs/DialPresetsInput.mjs +83 -82
  201. package/dist/dial/wrapped-inputs/DialVectorInput.cjs +89 -87
  202. package/dist/dial/wrapped-inputs/DialVectorInput.mjs +88 -86
  203. package/dist/dial/wrapped-inputs/index.cjs +109 -107
  204. package/dist/dial/wrapped-inputs/index.d.cts +1 -2
  205. package/dist/dial/wrapped-inputs/index.d.ts +1 -2
  206. package/dist/dial/wrapped-inputs/index.mjs +88 -86
  207. package/dist/highlight-cursor/cursor-provider.cjs +3 -3
  208. package/dist/highlight-cursor/cursor-provider.mjs +2 -2
  209. package/dist/highlight-cursor/enhanced-components.cjs +14 -14
  210. package/dist/highlight-cursor/enhanced-components.d.cts +1 -1
  211. package/dist/highlight-cursor/enhanced-components.d.ts +1 -1
  212. package/dist/highlight-cursor/enhanced-components.mjs +9 -9
  213. package/dist/highlight-cursor/index.cjs +19 -19
  214. package/dist/highlight-cursor/index.mjs +10 -10
  215. package/dist/hooks/clientOnly.cjs +4 -12
  216. package/dist/hooks/clientOnly.d.cts +9 -15
  217. package/dist/hooks/clientOnly.d.ts +9 -15
  218. package/dist/hooks/clientOnly.mjs +1 -1
  219. package/dist/hooks/cn.cjs +2 -2
  220. package/dist/hooks/cn.mjs +1 -1
  221. package/dist/hooks/index.cjs +8 -16
  222. package/dist/hooks/index.d.cts +2 -1
  223. package/dist/hooks/index.d.ts +2 -1
  224. package/dist/hooks/index.mjs +3 -3
  225. package/dist/hooks/useIsMobile.cjs +2 -2
  226. package/dist/hooks/useIsMobile.mjs +1 -1
  227. package/dist/index.cjs +466 -384
  228. package/dist/index.css +0 -63
  229. package/dist/index.d.cts +9 -6
  230. package/dist/index.d.ts +9 -6
  231. package/dist/index.mjs +88 -86
  232. package/dist/ui/DialBadge.cjs +8 -8
  233. package/dist/ui/DialBadge.mjs +4 -4
  234. package/dist/ui/UIKitBadge.cjs +8 -8
  235. package/dist/ui/UIKitBadge.mjs +4 -4
  236. package/dist/ui/avatar.cjs +8 -8
  237. package/dist/ui/avatar.mjs +4 -4
  238. package/dist/ui/badge.cjs +6 -6
  239. package/dist/ui/badge.d.cts +2 -2
  240. package/dist/ui/badge.d.ts +2 -2
  241. package/dist/ui/badge.mjs +4 -4
  242. package/dist/ui/button.cjs +6 -6
  243. package/dist/ui/button.d.cts +1 -1
  244. package/dist/ui/button.d.ts +1 -1
  245. package/dist/ui/button.mjs +4 -4
  246. package/dist/ui/card.cjs +12 -11
  247. package/dist/ui/card.d.cts +14 -2
  248. package/dist/ui/card.d.ts +14 -2
  249. package/dist/ui/card.mjs +5 -4
  250. package/dist/ui/checkbox.cjs +5 -5
  251. package/dist/ui/checkbox.mjs +4 -4
  252. package/dist/ui/collapsible.cjs +7 -7
  253. package/dist/ui/collapsible.mjs +4 -4
  254. package/dist/ui/context-menu.cjs +76 -0
  255. package/dist/ui/context-menu.d.cts +28 -0
  256. package/dist/ui/context-menu.d.ts +28 -0
  257. package/dist/ui/context-menu.mjs +11 -0
  258. package/dist/ui/drawer.cjs +14 -14
  259. package/dist/ui/drawer.mjs +4 -4
  260. package/dist/ui/dropdown.cjs +19 -19
  261. package/dist/ui/dropdown.mjs +4 -4
  262. package/dist/ui/icons/index.cjs +9 -9
  263. package/dist/ui/icons/index.mjs +1 -1
  264. package/dist/ui/index.cjs +423 -334
  265. package/dist/ui/index.d.cts +6 -4
  266. package/dist/ui/index.d.ts +6 -4
  267. package/dist/ui/index.mjs +82 -81
  268. package/dist/ui/inputs/color-input.cjs +6 -6
  269. package/dist/ui/inputs/color-input.mjs +5 -5
  270. package/dist/ui/inputs/index.cjs +53 -53
  271. package/dist/ui/inputs/index.mjs +23 -23
  272. package/dist/ui/inputs/input-numbers.cjs +6 -6
  273. package/dist/ui/inputs/input-numbers.mjs +5 -5
  274. package/dist/ui/inputs/input.cjs +7 -7
  275. package/dist/ui/inputs/input.d.cts +1 -1
  276. package/dist/ui/inputs/input.d.ts +1 -1
  277. package/dist/ui/inputs/input.mjs +4 -4
  278. package/dist/ui/inputs/number-inputs/CmInput.cjs +7 -7
  279. package/dist/ui/inputs/number-inputs/CmInput.mjs +6 -6
  280. package/dist/ui/inputs/number-inputs/DegInput.cjs +7 -7
  281. package/dist/ui/inputs/number-inputs/DegInput.mjs +6 -6
  282. package/dist/ui/inputs/number-inputs/EulerDegInput.cjs +9 -9
  283. package/dist/ui/inputs/number-inputs/EulerDegInput.mjs +8 -8
  284. package/dist/ui/inputs/number-inputs/EulerInput.cjs +8 -8
  285. package/dist/ui/inputs/number-inputs/EulerInput.mjs +7 -7
  286. package/dist/ui/inputs/number-inputs/EulerRadInput.cjs +8 -8
  287. package/dist/ui/inputs/number-inputs/EulerRadInput.mjs +7 -7
  288. package/dist/ui/inputs/number-inputs/InchInput.cjs +7 -7
  289. package/dist/ui/inputs/number-inputs/InchInput.mjs +6 -6
  290. package/dist/ui/inputs/number-inputs/IntInput.cjs +7 -7
  291. package/dist/ui/inputs/number-inputs/IntInput.mjs +6 -6
  292. package/dist/ui/inputs/number-inputs/KVectorInput.cjs +8 -8
  293. package/dist/ui/inputs/number-inputs/KVectorInput.mjs +7 -7
  294. package/dist/ui/inputs/number-inputs/QuaternionInput.cjs +8 -8
  295. package/dist/ui/inputs/number-inputs/QuaternionInput.mjs +7 -7
  296. package/dist/ui/inputs/number-inputs/RadInput.cjs +7 -7
  297. package/dist/ui/inputs/number-inputs/RadInput.mjs +6 -6
  298. package/dist/ui/inputs/number-inputs/TimeInput.cjs +7 -7
  299. package/dist/ui/inputs/number-inputs/TimeInput.mjs +6 -6
  300. package/dist/ui/inputs/number-inputs/Vec3Input.cjs +8 -8
  301. package/dist/ui/inputs/number-inputs/Vec3Input.mjs +7 -7
  302. package/dist/ui/inputs/number-inputs/VectorInput.cjs +7 -7
  303. package/dist/ui/inputs/number-inputs/VectorInput.mjs +6 -6
  304. package/dist/ui/inputs/number-inputs/index.cjs +34 -34
  305. package/dist/ui/inputs/number-inputs/index.mjs +18 -18
  306. package/dist/ui/inputs/presets-input.cjs +8 -8
  307. package/dist/ui/inputs/presets-input.mjs +7 -7
  308. package/dist/ui/inputs/presets-rad-input.cjs +9 -9
  309. package/dist/ui/inputs/presets-rad-input.mjs +8 -8
  310. package/dist/ui/inputs/text-input.cjs +6 -6
  311. package/dist/ui/inputs/text-input.mjs +5 -5
  312. package/dist/ui/label.cjs +5 -5
  313. package/dist/ui/label.mjs +4 -4
  314. package/dist/ui/layout.cjs +5 -5
  315. package/dist/ui/layout.mjs +4 -4
  316. package/dist/ui/layouts/dock-layout/DockLayoutView.cjs +6 -6
  317. package/dist/ui/layouts/dock-layout/DockLayoutView.d.cts +2 -1
  318. package/dist/ui/layouts/dock-layout/DockLayoutView.d.ts +2 -1
  319. package/dist/ui/layouts/dock-layout/DockLayoutView.mjs +5 -5
  320. package/dist/ui/layouts/dock-layout/LayoutSlots.cjs +10 -10
  321. package/dist/ui/layouts/dock-layout/LayoutSlots.mjs +4 -4
  322. package/dist/ui/layouts/dock-layout/index.cjs +12 -12
  323. package/dist/ui/layouts/dock-layout/index.mjs +5 -5
  324. package/dist/ui/layouts/index.cjs +19 -19
  325. package/dist/ui/layouts/index.mjs +8 -8
  326. package/dist/ui/layouts/liquid-layout/LayoutSlots.cjs +10 -10
  327. package/dist/ui/layouts/liquid-layout/LayoutSlots.mjs +4 -4
  328. package/dist/ui/layouts/liquid-layout/LiquidLayoutView.cjs +6 -6
  329. package/dist/ui/layouts/liquid-layout/LiquidLayoutView.d.cts +13 -1
  330. package/dist/ui/layouts/liquid-layout/LiquidLayoutView.d.ts +13 -1
  331. package/dist/ui/layouts/liquid-layout/LiquidLayoutView.mjs +5 -5
  332. package/dist/ui/layouts/liquid-layout/index.cjs +6 -6
  333. package/dist/ui/layouts/liquid-layout/index.mjs +5 -5
  334. package/dist/ui/modal.cjs +14 -14
  335. package/dist/ui/modal.mjs +4 -4
  336. package/dist/ui/navigation.cjs +6 -6
  337. package/dist/ui/navigation.mjs +5 -5
  338. package/dist/ui/pagination.cjs +12 -12
  339. package/dist/ui/pagination.mjs +5 -5
  340. package/dist/ui/popover.cjs +8 -8
  341. package/dist/ui/popover.mjs +4 -4
  342. package/dist/ui/progress.cjs +5 -5
  343. package/dist/ui/progress.d.cts +1 -1
  344. package/dist/ui/progress.d.ts +1 -1
  345. package/dist/ui/progress.mjs +4 -4
  346. package/dist/ui/radio-group.cjs +6 -6
  347. package/dist/ui/radio-group.mjs +4 -4
  348. package/dist/ui/resizable.cjs +7 -7
  349. package/dist/ui/resizable.mjs +4 -4
  350. package/dist/ui/select.cjs +15 -15
  351. package/dist/ui/select.d.cts +1 -1
  352. package/dist/ui/select.d.ts +1 -1
  353. package/dist/ui/select.mjs +4 -4
  354. package/dist/ui/separator.cjs +5 -5
  355. package/dist/ui/separator.mjs +4 -4
  356. package/dist/ui/sheet.cjs +12 -12
  357. package/dist/ui/sheet.d.cts +26 -13
  358. package/dist/ui/sheet.d.ts +26 -13
  359. package/dist/ui/sheet.mjs +4 -4
  360. package/dist/ui/sidebar.cjs +34 -34
  361. package/dist/ui/sidebar.mjs +10 -10
  362. package/dist/ui/simple-tree-view.cjs +5 -5
  363. package/dist/ui/simple-tree-view.mjs +4 -4
  364. package/dist/ui/skeleton.cjs +5 -5
  365. package/dist/ui/skeleton.mjs +4 -4
  366. package/dist/ui/slider.cjs +5 -5
  367. package/dist/ui/slider.mjs +4 -4
  368. package/dist/ui/switch.cjs +5 -5
  369. package/dist/ui/switch.mjs +4 -4
  370. package/dist/ui/table.cjs +12 -12
  371. package/dist/ui/table.mjs +4 -4
  372. package/dist/ui/tabs.cjs +8 -8
  373. package/dist/ui/tabs.d.cts +21 -6
  374. package/dist/ui/tabs.d.ts +21 -6
  375. package/dist/ui/tabs.mjs +4 -4
  376. package/dist/ui/textarea.cjs +5 -5
  377. package/dist/ui/textarea.d.cts +1 -1
  378. package/dist/ui/textarea.d.ts +1 -1
  379. package/dist/ui/textarea.mjs +4 -4
  380. package/dist/ui/theme/ThemeProvider.d.cts +1 -1
  381. package/dist/ui/theme/ThemeProvider.d.ts +1 -1
  382. package/dist/ui/theme/ThemeToggles.cjs +8 -12
  383. package/dist/ui/theme/ThemeToggles.d.cts +1 -7
  384. package/dist/ui/theme/ThemeToggles.d.ts +1 -7
  385. package/dist/ui/theme/ThemeToggles.mjs +6 -6
  386. package/dist/ui/theme/index.cjs +8 -12
  387. package/dist/ui/theme/index.d.cts +1 -1
  388. package/dist/ui/theme/index.d.ts +1 -1
  389. package/dist/ui/theme/index.mjs +6 -6
  390. package/dist/ui/toast.cjs +19 -3
  391. package/dist/ui/toast.d.cts +1 -1
  392. package/dist/ui/toast.d.ts +1 -1
  393. package/dist/ui/toast.mjs +17 -1
  394. package/dist/ui/toggle-buttons.cjs +9 -9
  395. package/dist/ui/toggle-buttons.mjs +4 -4
  396. package/dist/ui/toggle-group.cjs +7 -7
  397. package/dist/ui/toggle-group.mjs +4 -4
  398. package/dist/ui/toggle.cjs +6 -6
  399. package/dist/ui/toggle.mjs +4 -4
  400. package/dist/ui/toolbar.cjs +7 -7
  401. package/dist/ui/toolbar.mjs +4 -4
  402. package/dist/ui/tooltip.cjs +8 -8
  403. package/dist/ui/tooltip.d.cts +2 -2
  404. package/dist/ui/tooltip.d.ts +2 -2
  405. package/dist/ui/tooltip.mjs +4 -4
  406. package/dist/ui/tree-view/TreeSearchBar.cjs +7 -7
  407. package/dist/ui/tree-view/TreeSearchBar.mjs +6 -6
  408. package/dist/ui/tree-view/TreeView.cjs +8 -6
  409. package/dist/ui/tree-view/TreeView.d.cts +12 -6
  410. package/dist/ui/tree-view/TreeView.d.ts +12 -6
  411. package/dist/ui/tree-view/TreeView.mjs +6 -4
  412. package/dist/ui/tree-view/hooks.cjs +31 -3
  413. package/dist/ui/tree-view/hooks.d.cts +33 -1
  414. package/dist/ui/tree-view/hooks.d.ts +33 -1
  415. package/dist/ui/tree-view/hooks.mjs +1 -1
  416. package/dist/ui/tree-view/index.cjs +47 -18
  417. package/dist/ui/tree-view/index.d.cts +1 -1
  418. package/dist/ui/tree-view/index.d.ts +1 -1
  419. package/dist/ui/tree-view/index.mjs +9 -8
  420. package/dist/ui/tree-view-legacy.cjs +11 -11
  421. package/dist/ui/tree-view-legacy.mjs +7 -7
  422. package/dist/ui/waterfall/CursorOverlay.cjs +5 -5
  423. package/dist/ui/waterfall/CursorOverlay.mjs +4 -4
  424. package/dist/ui/waterfall/TimelineEvent.cjs +5 -5
  425. package/dist/ui/waterfall/TimelineEvent.mjs +4 -4
  426. package/dist/ui/waterfall/TimelineProcessBar.cjs +5 -5
  427. package/dist/ui/waterfall/TimelineProcessBar.mjs +4 -4
  428. package/dist/ui/waterfall/Wedges.cjs +6 -6
  429. package/dist/ui/waterfall/Wedges.mjs +4 -4
  430. package/dist/ui/waterfall/index.cjs +17 -16
  431. package/dist/ui/waterfall/index.mjs +16 -15
  432. package/package.json +2 -1
  433. package/src/auth/components/index.ts +1 -1
  434. package/src/dial/DialPanel.tsx +53 -28
  435. package/src/dial/DialProvider.tsx +20 -68
  436. package/src/dial/index.ts +7 -5
  437. package/src/dial/types.ts +40 -0
  438. package/src/dial/wrapped-inputs/ControlledInputs.tsx +6 -5
  439. package/src/dial/wrapped-inputs/DialInputs.tsx +2 -1
  440. package/src/dial/wrapped-inputs/DialInterfaceInput.tsx +44 -0
  441. package/src/dial/wrapped-inputs/DialPresetsInput.tsx +3 -2
  442. package/src/dial/wrapped-inputs/DialVectorInput.tsx +3 -18
  443. package/src/hooks/clientOnly.tsx +20 -23
  444. package/src/hooks/cn.ts +5 -0
  445. package/src/hooks/useIsMobile.ts +14 -30
  446. package/src/index.css +0 -1
  447. package/src/ui/DialBadge.tsx +7 -5
  448. package/src/ui/card.tsx +76 -4
  449. package/src/ui/context-menu.tsx +358 -0
  450. package/src/ui/index.ts +2 -0
  451. package/src/ui/inputs/number-inputs/EulerRadInput.tsx +43 -42
  452. package/src/ui/inputs/number-inputs/VectorInput.tsx +0 -1
  453. package/src/ui/inputs/presets-rad-input.tsx +5 -2
  454. package/src/ui/inputs/text-input.tsx +1 -1
  455. package/src/ui/layouts/dock-layout/DockLayoutView.tsx +15 -4
  456. package/src/ui/layouts/dock-layout/LayoutSlots.tsx +14 -5
  457. package/src/ui/layouts/liquid-layout/LiquidLayoutView.tsx +44 -5
  458. package/src/ui/progress.tsx +7 -14
  459. package/src/ui/separator.tsx +1 -1
  460. package/src/ui/sheet.tsx +14 -116
  461. package/src/ui/sidebar.tsx +18 -19
  462. package/src/ui/tabs.tsx +27 -57
  463. package/src/ui/theme/ThemeToggles.tsx +1 -21
  464. package/src/ui/theme/index.ts +1 -1
  465. package/src/ui/toast.tsx +15 -16
  466. package/src/ui/tooltip.tsx +3 -30
  467. package/src/ui/tree-view/TreeView.tsx +147 -18
  468. package/src/ui/tree-view/hooks.tsx +148 -0
  469. package/src/ui/tree-view/types.ts +1 -1
  470. package/src/ui/waterfall/TimelineProcessBar.tsx +10 -4
  471. package/dist/chunk-4F2GSF2T.mjs +0 -29
  472. package/dist/chunk-A6EASR27.mjs +0 -193
  473. package/dist/chunk-EOSYXHEH.mjs +0 -27
  474. package/dist/chunk-EXXV3BXT.cjs +0 -23
  475. package/dist/chunk-FZAGJSW2.cjs +0 -47
  476. package/dist/chunk-IPQU5CJD.mjs +0 -21
  477. package/dist/chunk-JR4TVE43.cjs +0 -31
  478. package/dist/chunk-MFYDZKQF.mjs +0 -28
  479. package/dist/chunk-RTYZO2AC.cjs +0 -30
  480. package/dist/chunk-UK3UBVT4.cjs +0 -222
  481. package/dist/chunk-XHJDRQD7.mjs +0 -29
  482. package/dist/chunk-Y2XVZEXM.mjs +0 -45
  483. package/dist/chunk-ZF435JZL.cjs +0 -21
  484. package/dist/dial/DialProvider.example.cjs +0 -72
  485. package/dist/dial/DialProvider.example.d.cts +0 -7
  486. package/dist/dial/DialProvider.example.d.ts +0 -7
  487. package/dist/dial/DialProvider.example.mjs +0 -68
  488. package/dist/styles/toast.css +0 -64
  489. package/dist/styles/toast.d.cts +0 -2
  490. package/dist/styles/toast.d.ts +0 -2
  491. package/src/dial/DialProvider.example.tsx +0 -80
  492. package/src/styles/toast.css +0 -67
  493. /package/dist/{chunk-YYLBP356.mjs → chunk-6THKQIF7.mjs} +0 -0
  494. /package/dist/{chunk-YWECB5GR.cjs → chunk-F4NQLN5E.cjs} +0 -0
@@ -1,8 +1,15 @@
1
1
  import { ChevronDown } from "lucide-react";
2
- import { type ReactNode } from "react";
2
+ import React, { type ReactNode, useState } from "react";
3
3
 
4
+ import {
5
+ getMultiSelectState,
6
+ getRangeIds,
7
+ cleanIndirectSelectedNodes,
8
+ getAdjacentSelectionState,
9
+ } from "./hooks";
4
10
  import { TreeDataItem, TreeDataItemWithMeta } from "./types";
5
11
  import { cn } from "../../hooks";
12
+ import { ContextMenu, ContextMenuTrigger } from "../context-menu";
6
13
 
7
14
  /**
8
15
  * Props for the view-only tree component
@@ -15,12 +22,14 @@ export type TreeViewProps<T extends TreeDataItem> = {
15
22
  onItemHover?: (id: string | null) => void;
16
23
  hoveredId?: string | null;
17
24
  isSelectable?: boolean;
18
- selectedItemId?: string | null;
19
- onSelectChange?: (id: string | null) => void;
25
+ selectedItemIds?: Set<string>;
26
+ onSelectionChange?: (ids: Set<string>) => void;
20
27
  hideExpand?: boolean;
21
28
  hasDescendants?: (id: string) => boolean;
22
29
  renderLabel?: (label: string, itemId: string) => ReactNode;
23
30
  className?: string;
31
+ renderContextMenu?: (item: T) => ReactNode;
32
+ selectionMode?: "single" | "multi";
24
33
  };
25
34
 
26
35
  /**
@@ -36,13 +45,17 @@ export function TreeView<T extends TreeDataItem>({
36
45
  onItemHover,
37
46
  hoveredId,
38
47
  isSelectable = false,
39
- selectedItemId,
40
- onSelectChange,
48
+ selectedItemIds,
49
+ onSelectionChange,
41
50
  hideExpand = false,
42
51
  hasDescendants = () => false,
43
52
  renderLabel = (label) => label,
44
53
  className,
54
+ renderContextMenu,
55
+ selectionMode = "multi",
45
56
  }: TreeViewProps<T>) {
57
+ const [lastSelectedId, setLastSelectedId] = useState<string | null>(null);
58
+
46
59
  return (
47
60
  <div className={cn("flex-1 overflow-y-auto", className)}>
48
61
  {data.map((item) => (
@@ -52,8 +65,10 @@ export function TreeView<T extends TreeDataItem>({
52
65
  hoveredId={hoveredId}
53
66
  onItemHover={onItemHover}
54
67
  isSelectable={isSelectable}
55
- selectedItemId={selectedItemId}
56
- onSelectChange={onSelectChange}
68
+ selectedItemIds={selectedItemIds}
69
+ onSelectionChange={onSelectionChange}
70
+ lastSelectedId={lastSelectedId}
71
+ setLastSelectedId={setLastSelectedId}
57
72
  expandedItems={expandedItems}
58
73
  toggleItem={onToggleItem}
59
74
  hideExpand={hideExpand}
@@ -61,6 +76,8 @@ export function TreeView<T extends TreeDataItem>({
61
76
  getIcon={getIcon}
62
77
  renderLabel={renderLabel}
63
78
  dataWithMeta={data}
79
+ renderContextMenu={renderContextMenu}
80
+ selectionMode={selectionMode}
64
81
  />
65
82
  ))}
66
83
  </div>
@@ -75,8 +92,10 @@ export function TreeEntryItem<T extends TreeDataItem>({
75
92
  hoveredId,
76
93
  onItemHover,
77
94
  isSelectable,
78
- selectedItemId,
79
- onSelectChange,
95
+ selectedItemIds,
96
+ onSelectionChange,
97
+ lastSelectedId,
98
+ setLastSelectedId,
80
99
  expandedItems,
81
100
  toggleItem = () => {},
82
101
  hideExpand = false,
@@ -84,13 +103,17 @@ export function TreeEntryItem<T extends TreeDataItem>({
84
103
  getIcon = () => null,
85
104
  renderLabel = (label) => label,
86
105
  dataWithMeta = [],
106
+ renderContextMenu,
107
+ selectionMode = "multi",
87
108
  }: {
88
109
  item: TreeDataItemWithMeta<T>;
89
110
  hoveredId?: string | null;
90
111
  onItemHover?: (id: string | null) => void;
91
112
  isSelectable?: boolean;
92
- selectedItemId?: string | null;
93
- onSelectChange?: (id: string | null) => void;
113
+ selectedItemIds?: Set<string>;
114
+ onSelectionChange?: (ids: Set<string>) => void;
115
+ lastSelectedId?: string | null;
116
+ setLastSelectedId?: (id: string | null) => void;
94
117
  expandedItems?: Set<string>;
95
118
  toggleItem?: (id: string) => void;
96
119
  hideExpand?: boolean;
@@ -98,10 +121,58 @@ export function TreeEntryItem<T extends TreeDataItem>({
98
121
  getIcon?: (item: T, expanded?: boolean) => ReactNode;
99
122
  renderLabel?: (label: string, itemId: string) => ReactNode;
100
123
  dataWithMeta?: TreeDataItemWithMeta<T>[];
124
+ renderContextMenu?: (item: T) => ReactNode;
125
+ selectionMode?: "single" | "multi";
101
126
  }) {
102
- const handleItemSelect = () => {
103
- if (!item.disable && isSelectable && onSelectChange) {
104
- onSelectChange(selectedItemId === item.id ? null : item.id);
127
+ const handleItemSelect = (event: React.MouseEvent) => {
128
+ if (!item.disable && isSelectable) {
129
+ const isMultiSelectMode = selectionMode === "multi" && (event.ctrlKey || event.metaKey);
130
+ const isRangeSelectMode = selectionMode === "multi" && event.shiftKey;
131
+
132
+ if (isMultiSelectMode) {
133
+ const selectState = getMultiSelectState(
134
+ item.id,
135
+ selectedItemIds || new Set(),
136
+ dataWithMeta,
137
+ );
138
+ // prevent selection of indirectly selected nodes in multi-select mode
139
+ if (selectState === "indirect") {
140
+ return;
141
+ }
142
+ }
143
+
144
+ let newSelectedIds: Set<string>;
145
+
146
+ if (isRangeSelectMode && lastSelectedId) {
147
+ if (selectedItemIds) {
148
+ newSelectedIds = new Set(selectedItemIds);
149
+ const rangeIds = getRangeIds(lastSelectedId, item.id, dataWithMeta);
150
+ rangeIds.forEach((id) => newSelectedIds.add(id));
151
+ } else {
152
+ newSelectedIds = new Set([item.id]);
153
+ }
154
+ } else if (isMultiSelectMode) {
155
+ if (selectedItemIds) {
156
+ newSelectedIds = new Set(selectedItemIds);
157
+ if (newSelectedIds.has(item.id)) {
158
+ newSelectedIds.delete(item.id);
159
+ } else {
160
+ newSelectedIds.add(item.id);
161
+ }
162
+ } else {
163
+ newSelectedIds = new Set([item.id]);
164
+ }
165
+ } else {
166
+ // Single select mode: clear other selections and select only current item
167
+ newSelectedIds = new Set([item.id]);
168
+ }
169
+
170
+ const cleanedSelectedIds = cleanIndirectSelectedNodes(newSelectedIds, dataWithMeta);
171
+
172
+ if (onSelectionChange) {
173
+ onSelectionChange(cleanedSelectedIds);
174
+ setLastSelectedId?.(item.id);
175
+ }
105
176
  }
106
177
  };
107
178
 
@@ -110,18 +181,65 @@ export function TreeEntryItem<T extends TreeDataItem>({
110
181
  const indent = item.indent || 0;
111
182
  const isLast = item.isLast !== undefined ? item.isLast : false;
112
183
 
113
- return (
184
+ const getSelectState = () => {
185
+ if (selectedItemIds) {
186
+ return getMultiSelectState(item.id, selectedItemIds, dataWithMeta);
187
+ }
188
+ return "unselected";
189
+ };
190
+
191
+ const selectState = getSelectState();
192
+ const isSelected = selectState === "selected";
193
+ const isIndirectlySelected = selectState === "indirect";
194
+
195
+ const { hasPrevSelected, hasNextSelected } = getAdjacentSelectionState(
196
+ item.id,
197
+ selectedItemIds || new Set(),
198
+ dataWithMeta,
199
+ );
200
+
201
+ // Calculate border radius classes based on adjacent selection
202
+ const getBorderRadiusClass = () => {
203
+ if (!isSelectable || (!isSelected && !isIndirectlySelected)) {
204
+ return "rounded-uk-md";
205
+ }
206
+
207
+ // Remove top radius if previous item is selected, remove bottom radius if next item is selected
208
+ if (hasPrevSelected && hasNextSelected) {
209
+ return "";
210
+ } else if (hasPrevSelected) {
211
+ return "rounded-b-uk-md";
212
+ } else if (hasNextSelected) {
213
+ return "rounded-t-uk-md";
214
+ }
215
+
216
+ return "rounded-uk-md";
217
+ };
218
+
219
+ const handleContextMenuOpenChange = (open: boolean) => {
220
+ // If item is not selected when opening context menu, select it first
221
+ if (open && isSelectable && !isSelected && !isIndirectlySelected && onSelectionChange) {
222
+ onSelectionChange(new Set([item.id]));
223
+ }
224
+ };
225
+
226
+ const treeItemContent = (
114
227
  <div
115
228
  className={cn(
116
229
  "group relative flex h-[32px] items-center",
117
- isSelectable && "rounded-uk-md",
118
- !item.disable && "cursor-pointer",
230
+ getBorderRadiusClass(),
119
231
  hoveredId === item.id && !item.disable && "bg-bg-secondary",
120
- isSelectable && selectedItemId === item.id && "bg-brand-primary text-text-withbg",
232
+ isSelectable && isSelected && "bg-brand-primary text-text-withbg",
233
+ isSelectable && isIndirectlySelected && "bg-shadow-secondary text-text-primary",
121
234
  )}
122
235
  onMouseEnter={() => onItemHover?.(item.id)}
123
236
  onMouseLeave={() => onItemHover?.(null)}
124
237
  onClick={handleItemSelect}
238
+ onMouseDown={(e) => {
239
+ if (e.shiftKey || e.ctrlKey || e.metaKey) {
240
+ e.preventDefault();
241
+ }
242
+ }}
125
243
  >
126
244
  {/* Guidelines */}
127
245
  <div className="absolute top-0 left-[-0.28rem] z-0 flex h-full items-center">
@@ -229,4 +347,15 @@ export function TreeEntryItem<T extends TreeDataItem>({
229
347
  </div>
230
348
  </div>
231
349
  );
350
+
351
+ if (renderContextMenu) {
352
+ return (
353
+ <ContextMenu onOpenChange={handleContextMenuOpenChange}>
354
+ <ContextMenuTrigger asChild>{treeItemContent}</ContextMenuTrigger>
355
+ {renderContextMenu(item)}
356
+ </ContextMenu>
357
+ );
358
+ }
359
+
360
+ return treeItemContent;
232
361
  }
@@ -2,6 +2,154 @@ import { useCallback, useMemo, useState } from "react";
2
2
 
3
3
  import { TreeDataItem, TreeDataItemWithMeta } from "./types";
4
4
 
5
+ /**
6
+ * Get all descendant node IDs of a node
7
+ */
8
+ export function getDescendantIds<T extends TreeDataItem>(
9
+ itemId: string,
10
+ data: TreeDataItemWithMeta<T>[],
11
+ childrenMap: Map<string | null, T[]>,
12
+ ): string[] {
13
+ const descendants: string[] = [];
14
+ const children = childrenMap.get(itemId) || [];
15
+
16
+ children.forEach((child) => {
17
+ descendants.push(child.id);
18
+ descendants.push(...getDescendantIds(child.id, data, childrenMap));
19
+ });
20
+
21
+ return descendants;
22
+ }
23
+
24
+ /**
25
+ * Get all ancestor node IDs of a node
26
+ */
27
+ export function getAncestorIds<T extends TreeDataItem>(
28
+ itemId: string,
29
+ data: TreeDataItemWithMeta<T>[],
30
+ ): string[] {
31
+ const ancestors: string[] = [];
32
+ const dataMap = new Map(data.map((item) => [item.id, item]));
33
+ let current = dataMap.get(itemId)?.parentId;
34
+
35
+ while (current) {
36
+ ancestors.push(current);
37
+ current = dataMap.get(current)?.parentId;
38
+ }
39
+
40
+ return ancestors;
41
+ }
42
+
43
+ /**
44
+ * Check if a node is indirectly selected (parent node is selected)
45
+ */
46
+ export function isIndirectlySelected<T extends TreeDataItem>(
47
+ itemId: string,
48
+ selectedIds: Set<string>,
49
+ data: TreeDataItemWithMeta<T>[],
50
+ ): boolean {
51
+ const ancestors = getAncestorIds(itemId, data);
52
+ return ancestors.some((ancestorId) => selectedIds.has(ancestorId));
53
+ }
54
+
55
+ /**
56
+ * Get multi-select state: selected, indirect, or unselected
57
+ */
58
+ export function getMultiSelectState<T extends TreeDataItem>(
59
+ itemId: string,
60
+ selectedIds: Set<string>,
61
+ data: TreeDataItemWithMeta<T>[],
62
+ ): "selected" | "indirect" | "unselected" {
63
+ if (isIndirectlySelected(itemId, selectedIds, data)) {
64
+ return "indirect";
65
+ }
66
+ if (selectedIds.has(itemId)) {
67
+ return "selected";
68
+ }
69
+ return "unselected";
70
+ }
71
+
72
+ /**
73
+ * Get all node IDs for range selection (from lastSelectedId to currentId)
74
+ */
75
+ export function getRangeIds<T extends TreeDataItem>(
76
+ lastSelectedId: string | null,
77
+ currentId: string,
78
+ data: TreeDataItemWithMeta<T>[],
79
+ ): string[] {
80
+ if (!lastSelectedId) {
81
+ return [currentId];
82
+ }
83
+
84
+ // Find the indices of both nodes in the data
85
+ const lastIndex = data.findIndex((item) => item.id === lastSelectedId);
86
+ const currentIndex = data.findIndex((item) => item.id === currentId);
87
+
88
+ if (lastIndex === -1 || currentIndex === -1) {
89
+ return [currentId];
90
+ }
91
+
92
+ // Get all node IDs within the range
93
+ const startIndex = Math.min(lastIndex, currentIndex);
94
+ const endIndex = Math.max(lastIndex, currentIndex);
95
+ const rangeIds: string[] = [];
96
+
97
+ for (let i = startIndex; i <= endIndex; i++) {
98
+ rangeIds.push(data[i].id);
99
+ }
100
+
101
+ return rangeIds;
102
+ }
103
+
104
+ /**
105
+ * Clean up indirectly selected child nodes, keep only directly selected nodes
106
+ */
107
+ export function cleanIndirectSelectedNodes<T extends TreeDataItem>(
108
+ selectedIds: Set<string>,
109
+ data: TreeDataItemWithMeta<T>[],
110
+ ): Set<string> {
111
+ const cleanedIds = new Set<string>();
112
+
113
+ for (const id of selectedIds) {
114
+ // Check if this node is indirectly selected (i.e., its ancestor node is selected)
115
+ const isNodeIndirectlySelected = isIndirectlySelected(id, selectedIds, data);
116
+
117
+ // If this node is not indirectly selected, keep it
118
+ if (!isNodeIndirectlySelected) {
119
+ cleanedIds.add(id);
120
+ }
121
+ }
122
+
123
+ return cleanedIds;
124
+ }
125
+
126
+ /**
127
+ * Check if adjacent items are selected (directly or indirectly)
128
+ * Returns whether previous and next items are selected
129
+ */
130
+ export function getAdjacentSelectionState<T extends TreeDataItem>(
131
+ itemId: string,
132
+ selectedIds: Set<string>,
133
+ data: TreeDataItemWithMeta<T>[],
134
+ ): { hasPrevSelected: boolean; hasNextSelected: boolean } {
135
+ const currentIndex = data.findIndex((item) => item.id === itemId);
136
+
137
+ if (currentIndex === -1) {
138
+ return { hasPrevSelected: false, hasNextSelected: false };
139
+ }
140
+
141
+ const prevIndex = currentIndex - 1;
142
+ const hasPrevSelected =
143
+ prevIndex >= 0 && getMultiSelectState(data[prevIndex].id, selectedIds, data) !== "unselected";
144
+
145
+ const nextIndex = currentIndex + 1;
146
+ const hasNextSelected =
147
+ nextIndex < data.length &&
148
+ getMultiSelectState(data[nextIndex].id, selectedIds, data) !== "unselected";
149
+
150
+ return { hasPrevSelected, hasNextSelected };
151
+ }
152
+
5
153
  /**
6
154
  * Hook for managing tree search functionality
7
155
  */
@@ -20,4 +20,4 @@ export type TreeDataItemWithMeta<T extends TreeDataItem> = T & {
20
20
  indent: number;
21
21
  isLast: boolean;
22
22
  ancestors: T[];
23
- };
23
+ };
@@ -4,6 +4,8 @@ import { LogItemWithMeta } from "./types";
4
4
  import { borderColorClasses, colorClasses, formatDuration } from "./utils";
5
5
  import { cn } from "../../hooks";
6
6
 
7
+ const clamp = (value: number, min: number, max: number) => Math.min(Math.max(value, min), max);
8
+
7
9
  export interface TimelineEventBarProps {
8
10
  item: LogItemWithMeta;
9
11
  isHovered: boolean;
@@ -188,17 +190,21 @@ export function TimelineProcessBar({
188
190
  const visibleDuration = visibleEnd - visibleStart;
189
191
  const visibleWidthPercent = (visibleDuration / viewWindow) * 100;
190
192
 
191
- if (visibleWidthPercent < 8) return null;
192
-
193
193
  return (
194
194
  <div
195
- className="pointer-events-none absolute top-1/2 flex -translate-y-1/2 items-center justify-center"
195
+ className="pointer-events-none absolute top-1/2 flex -translate-y-1/2 items-center justify-center overflow-hidden"
196
196
  style={{
197
197
  left: `${timeToPercent(visibleStart)}%`,
198
198
  width: `${visibleWidthPercent}%`,
199
+ zoom: clamp(visibleWidthPercent, 6, 12) / 12,
199
200
  }}
200
201
  >
201
- <span className="text-text-secondary text-xs italic">Halted</span>
202
+ {visibleWidthPercent > 7 && (
203
+ <span className="rounded-full bg-orange-500 px-2 py-0.5 text-xs text-white">
204
+ Halted
205
+ </span>
206
+ )}
207
+ {visibleWidthPercent < 7 && <span className="h-3 w-3 rounded-full bg-orange-500" />}
202
208
  </div>
203
209
  );
204
210
  })()}
@@ -1,29 +0,0 @@
1
- import React from 'react';
2
-
3
- // src/hooks/clientOnly.tsx
4
- function clientOnly(fn) {
5
- if (typeof window !== "undefined") {
6
- return fn();
7
- }
8
- return void 0;
9
- }
10
- function createClientOnlyComponent(Component, fallback) {
11
- return function ClientOnlyWrapper(props) {
12
- const [isClient2, setIsClient] = React.useState(false);
13
- React.useEffect(() => {
14
- setIsClient(true);
15
- }, []);
16
- if (!isClient2) {
17
- return fallback ? React.createElement(fallback, props) : null;
18
- }
19
- return React.createElement(Component, props);
20
- };
21
- }
22
- function isClient() {
23
- return typeof window !== "undefined";
24
- }
25
- function isServer() {
26
- return typeof window === "undefined";
27
- }
28
-
29
- export { clientOnly, createClientOnlyComponent, isClient, isServer };
@@ -1,193 +0,0 @@
1
- import { createClientOnlyComponent } from './chunk-4F2GSF2T.mjs';
2
- import { cn } from './chunk-T66ETI7E.mjs';
3
- import * as SheetPrimitive from '@radix-ui/react-dialog';
4
- import { XIcon } from 'lucide-react';
5
- import { jsx, Fragment, jsxs } from 'react/jsx-runtime';
6
-
7
- function SheetRoot({ ...props }) {
8
- return /* @__PURE__ */ jsx(SheetPrimitive.Root, { "data-slot": "sheet", ...props });
9
- }
10
- function SheetFallback({ ...props }) {
11
- return /* @__PURE__ */ jsx("div", { "data-slot": "sheet", ...props });
12
- }
13
- var Sheet = createClientOnlyComponent(SheetRoot, SheetFallback);
14
- function SheetTriggerRoot({ ...props }) {
15
- return /* @__PURE__ */ jsx(SheetPrimitive.Trigger, { "data-slot": "sheet-trigger", ...props });
16
- }
17
- function SheetTriggerFallback({
18
- asChild,
19
- children,
20
- ...props
21
- }) {
22
- if (asChild) {
23
- return /* @__PURE__ */ jsx(Fragment, { children });
24
- }
25
- return /* @__PURE__ */ jsx("button", { "data-slot": "sheet-trigger", ...props, children });
26
- }
27
- var SheetTrigger = createClientOnlyComponent(SheetTriggerRoot, SheetTriggerFallback);
28
- function SheetCloseRoot({ ...props }) {
29
- return /* @__PURE__ */ jsx(
30
- SheetPrimitive.Close,
31
- {
32
- "data-slot": "sheet-close",
33
- className: cn("focus:ring-0 focus:outline-none"),
34
- ...props
35
- }
36
- );
37
- }
38
- function SheetCloseFallback({
39
- asChild,
40
- children,
41
- ...props
42
- }) {
43
- if (asChild) {
44
- return /* @__PURE__ */ jsx(Fragment, { children });
45
- }
46
- return /* @__PURE__ */ jsx("button", { "data-slot": "sheet-close", className: cn("focus:ring-0 focus:outline-none"), ...props, children });
47
- }
48
- var SheetClose = createClientOnlyComponent(SheetCloseRoot, SheetCloseFallback);
49
- function SheetPortal({ ...props }) {
50
- return /* @__PURE__ */ jsx(SheetPrimitive.Portal, { "data-slot": "sheet-portal", ...props });
51
- }
52
- function SheetOverlay({ className, ...props }) {
53
- return /* @__PURE__ */ jsx(
54
- SheetPrimitive.Overlay,
55
- {
56
- "data-slot": "sheet-overlay",
57
- className: cn(
58
- "data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 bg-bg-mask fixed inset-0 z-50",
59
- className
60
- ),
61
- ...props
62
- }
63
- );
64
- }
65
- function SheetContentRoot({
66
- className,
67
- children,
68
- side = "right",
69
- ...props
70
- }) {
71
- return /* @__PURE__ */ jsxs(SheetPortal, { children: [
72
- /* @__PURE__ */ jsx(SheetOverlay, {}),
73
- /* @__PURE__ */ jsxs(
74
- SheetPrimitive.Content,
75
- {
76
- "data-slot": "sheet-content",
77
- className: cn(
78
- "liquid-dark:liquid-dark-bg liquid-light:liquid-light-bg bg-bg-primary data-[state=open]:animate-in data-[state=closed]:animate-out p-xl fixed z-50 flex flex-col gap-4 shadow-[0_4px_16px_0_var(--color-shadow-secondary)] transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500",
79
- side === "right" && "data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right inset-y-0 right-0 h-full w-[340px]",
80
- side === "left" && "data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left inset-y-0 left-0 h-full w-[340px]",
81
- side === "top" && "data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top inset-x-0 top-0 h-auto",
82
- side === "bottom" && "data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom inset-x-0 bottom-0 h-auto",
83
- className
84
- ),
85
- ...props,
86
- children: [
87
- children,
88
- /* @__PURE__ */ jsxs(SheetPrimitive.Close, { className: "text-icon-primary hover:text-icon-highlight absolute top-4 right-4 disabled:pointer-events-none", children: [
89
- /* @__PURE__ */ jsx(XIcon, { className: "size-4" }),
90
- /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Close" })
91
- ] })
92
- ]
93
- }
94
- )
95
- ] });
96
- }
97
- function SheetContentFallback({
98
- className,
99
- children,
100
- side = "right",
101
- ...props
102
- }) {
103
- return /* @__PURE__ */ jsxs(
104
- "div",
105
- {
106
- "data-slot": "sheet-content",
107
- className: cn(
108
- "liquid-dark:liquid-dark-bg liquid-light:liquid-light-bg bg-bg-primary p-xl fixed z-50 flex flex-col gap-4 shadow-[0_4px_16px_0_var(--color-shadow-secondary)]",
109
- side === "right" && "inset-y-0 right-0 h-full w-[340px]",
110
- side === "left" && "inset-y-0 left-0 h-full w-[340px]",
111
- side === "top" && "inset-x-0 top-0 h-auto",
112
- side === "bottom" && "inset-x-0 bottom-0 h-auto",
113
- className
114
- ),
115
- ...props,
116
- children: [
117
- children,
118
- /* @__PURE__ */ jsxs("button", { className: "text-icon-primary hover:text-icon-highlight absolute top-4 right-4 disabled:pointer-events-none", children: [
119
- /* @__PURE__ */ jsx(XIcon, { className: "size-4" }),
120
- /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Close" })
121
- ] })
122
- ]
123
- }
124
- );
125
- }
126
- var SheetContent = createClientOnlyComponent(SheetContentRoot, SheetContentFallback);
127
- function SheetHeader({ className, ...props }) {
128
- return /* @__PURE__ */ jsx(
129
- "div",
130
- {
131
- "data-slot": "sheet-header",
132
- className: cn("gap-md pb-xl flex flex-col", className),
133
- ...props
134
- }
135
- );
136
- }
137
- function SheetFooter({ className, ...props }) {
138
- return /* @__PURE__ */ jsx(
139
- "div",
140
- {
141
- "data-slot": "sheet-footer",
142
- className: cn("gap-lg pt-xl mt-auto flex flex-col", className),
143
- ...props
144
- }
145
- );
146
- }
147
- function SheetTitleRoot({ className, ...props }) {
148
- return /* @__PURE__ */ jsx(
149
- SheetPrimitive.Title,
150
- {
151
- "data-slot": "sheet-title",
152
- className: cn("text-text-highlight text-uk-xl leading-uk-xl font-medium", className),
153
- ...props
154
- }
155
- );
156
- }
157
- function SheetTitleFallback({ className, ...props }) {
158
- return /* @__PURE__ */ jsx(
159
- "h2",
160
- {
161
- "data-slot": "sheet-title",
162
- className: cn("text-text-highlight text-uk-xl leading-uk-xl font-medium", className),
163
- ...props
164
- }
165
- );
166
- }
167
- var SheetTitle = createClientOnlyComponent(SheetTitleRoot, SheetTitleFallback);
168
- function SheetDescriptionRoot({
169
- className,
170
- ...props
171
- }) {
172
- return /* @__PURE__ */ jsx(
173
- SheetPrimitive.Description,
174
- {
175
- "data-slot": "sheet-description",
176
- className: cn("text-text-secondary text-uk-md leading-uk-md", className),
177
- ...props
178
- }
179
- );
180
- }
181
- function SheetDescriptionFallback({ className, ...props }) {
182
- return /* @__PURE__ */ jsx(
183
- "p",
184
- {
185
- "data-slot": "sheet-description",
186
- className: cn("text-text-secondary text-uk-md leading-uk-md", className),
187
- ...props
188
- }
189
- );
190
- }
191
- var SheetDescription = createClientOnlyComponent(SheetDescriptionRoot, SheetDescriptionFallback);
192
-
193
- export { Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger };