@vuer-ai/vuer-uikit 0.0.120 → 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.
- package/dist/SyncScroll/SyncScroll.cjs +10 -10
- package/dist/SyncScroll/SyncScroll.mjs +3 -3
- package/dist/SyncScroll/index.cjs +10 -10
- package/dist/SyncScroll/index.mjs +3 -3
- package/dist/auth/components/index.cjs +83 -82
- package/dist/auth/components/index.mjs +82 -81
- package/dist/auth/components/user-avatar/index.cjs +83 -82
- package/dist/auth/components/user-avatar/index.mjs +82 -81
- package/dist/auth/index.cjs +83 -82
- package/dist/auth/index.mjs +82 -81
- package/dist/{chunk-42WQWP6X.cjs → chunk-22T2AL3G.cjs} +8 -8
- package/dist/{chunk-H6JGIEAU.mjs → chunk-2KQXKQNU.mjs} +1 -1
- package/dist/{chunk-S7CCCMMU.cjs → chunk-34NDAZS6.cjs} +18 -9
- package/dist/{chunk-DM43KZU7.cjs → chunk-3F3LBOQJ.cjs} +2 -2
- package/dist/chunk-3JMUI4R2.cjs +136 -0
- package/dist/{chunk-EOLUDKZ3.mjs → chunk-3P2OP4KO.mjs} +24 -46
- package/dist/{chunk-NMRFBO43.mjs → chunk-3SUV56TH.mjs} +3 -3
- package/dist/{chunk-CH3BSVL4.cjs → chunk-42DBXENE.cjs} +2 -2
- package/dist/{chunk-JW456O5K.mjs → chunk-4FB6B2ES.mjs} +1 -1
- package/dist/{chunk-TB5L3GBP.cjs → chunk-4G2LN6XU.cjs} +138 -107
- package/dist/{chunk-MNCBTS63.cjs → chunk-4TRHQ7MJ.cjs} +5 -5
- package/dist/{chunk-F2LEYFWW.cjs → chunk-4WKFVKFF.cjs} +5 -5
- package/dist/{chunk-EEGQLTSQ.cjs → chunk-4WWGBRQV.cjs} +77 -0
- package/dist/chunk-4Y5IF7R5.mjs +322 -0
- package/dist/{chunk-Q7VP2WSX.mjs → chunk-4YVKJKWV.mjs} +2 -2
- package/dist/{chunk-X6WOCNBX.cjs → chunk-57NITJN5.cjs} +2 -2
- package/dist/{chunk-QWBMDS3S.cjs → chunk-5HT74RHB.cjs} +5 -5
- package/dist/{chunk-4ODJAEOM.mjs → chunk-5JYH7TXY.mjs} +1 -1
- package/dist/{chunk-OJOWMXXY.mjs → chunk-67H3OSM3.mjs} +3 -3
- package/dist/{chunk-2CD4D2BR.cjs → chunk-6CJWNYHL.cjs} +3 -3
- package/dist/{chunk-CRX2ZCM2.cjs → chunk-6LTCLQH3.cjs} +6 -1
- package/dist/{chunk-64VVW5YR.mjs → chunk-6NSLYQ35.mjs} +1 -1
- package/dist/{chunk-WKK5UX2W.mjs → chunk-6U6LRS37.mjs} +2 -2
- package/dist/{chunk-4OUQ6NSX.cjs → chunk-6VIKDPCD.cjs} +2 -2
- package/dist/{chunk-LMYA5IOK.mjs → chunk-6ZLK2RYS.mjs} +3 -3
- package/dist/{chunk-LYGYXV7S.cjs → chunk-7ICRKPIO.cjs} +16 -16
- package/dist/{chunk-ZCSJGDX7.mjs → chunk-7MR3M2HW.mjs} +1 -1
- package/dist/{chunk-Q37KC3CL.mjs → chunk-7RRQ2HHL.mjs} +114 -17
- package/dist/{chunk-FMKD5JBL.mjs → chunk-7TD77VF4.mjs} +10 -6
- package/dist/{chunk-5ARBIWXX.cjs → chunk-7TXGEIV3.cjs} +10 -10
- package/dist/{chunk-SLXM4F24.cjs → chunk-7YFUNCKT.cjs} +9 -9
- package/dist/{chunk-LGFWHV23.cjs → chunk-ACGXE2IO.cjs} +2 -2
- package/dist/{chunk-EGIIZWP3.mjs → chunk-AFR23IX6.mjs} +1 -1
- package/dist/{chunk-XS5IUI62.cjs → chunk-B6CIRZI4.cjs} +2 -2
- package/dist/{chunk-REZAPK6Z.mjs → chunk-BDFUHPX2.mjs} +1 -1
- package/dist/{chunk-CXPF274N.mjs → chunk-BK77KKIM.mjs} +1 -1
- package/dist/{chunk-ZJSL6HSL.mjs → chunk-BLG4IPRR.mjs} +1 -1
- package/dist/{chunk-JQYMF2FW.cjs → chunk-BSDIS4KS.cjs} +4 -4
- package/dist/{chunk-35ZN6IW7.mjs → chunk-BYZ7HIIK.mjs} +1 -1
- package/dist/{chunk-6C53NKMF.mjs → chunk-C4U5BMQH.mjs} +1 -1
- package/dist/{chunk-2IS7TXTN.mjs → chunk-CENP2PIB.mjs} +1 -1
- package/dist/{chunk-NJWKR5WR.mjs → chunk-CEYNTMQP.mjs} +1 -1
- package/dist/{chunk-CIOLL5LX.mjs → chunk-CN6SZKJZ.mjs} +1 -1
- package/dist/{chunk-WDSOII5A.cjs → chunk-COJRGW3A.cjs} +2 -2
- package/dist/{chunk-GRXUYMZJ.cjs → chunk-COL2MXGC.cjs} +4 -4
- package/dist/chunk-CRY23RMB.mjs +30 -0
- package/dist/{chunk-CKGEV2JL.cjs → chunk-CV2EDA3W.cjs} +2 -2
- package/dist/{chunk-7AAMQGY2.cjs → chunk-CYWVJ3HF.cjs} +7 -7
- package/dist/{chunk-CWS5PF67.cjs → chunk-D5WTSBUX.cjs} +3 -3
- package/dist/{chunk-ASZIBFA6.cjs → chunk-DG2EVWIW.cjs} +10 -10
- package/dist/chunk-DGJ7E77I.mjs +23 -0
- package/dist/{chunk-SR3M2R3S.mjs → chunk-DSQPFXYL.mjs} +22 -24
- package/dist/chunk-DVUN6GQI.cjs +21 -0
- package/dist/chunk-E7ACJ3NX.cjs +45 -0
- package/dist/{chunk-T4U3BG2V.mjs → chunk-EGJLY5VZ.mjs} +1 -1
- package/dist/{chunk-PRNBDGOF.cjs → chunk-EMZEL54F.cjs} +27 -49
- package/dist/{chunk-7AEOJFD4.cjs → chunk-EOTGD64D.cjs} +2 -2
- package/dist/{chunk-K2ZYSKRU.mjs → chunk-EZ536NLQ.mjs} +1 -1
- package/dist/chunk-FB3M2JJV.cjs +21 -0
- package/dist/{chunk-DDU3SPCC.mjs → chunk-FUMJBAQI.mjs} +57 -4
- package/dist/{chunk-QXFFRQ7E.mjs → chunk-G45SP3DA.mjs} +90 -60
- package/dist/{chunk-HB65PF7F.cjs → chunk-GBRIW266.cjs} +2 -2
- package/dist/chunk-GHQA7PER.mjs +107 -0
- package/dist/{chunk-XQ3MWA3D.mjs → chunk-GJKFQHUX.mjs} +3 -3
- package/dist/{chunk-ND3WJ63Z.cjs → chunk-GVRVRBDU.cjs} +2 -2
- package/dist/chunk-GZ2BG42R.mjs +34 -0
- package/dist/chunk-H3JRYX2U.mjs +19 -0
- package/dist/{chunk-T66ETI7E.mjs → chunk-HBEU2PU2.mjs} +6 -1
- package/dist/{chunk-EVBYVJTW.mjs → chunk-HGN7J4CP.mjs} +2 -2
- package/dist/{chunk-SMXN2KOV.mjs → chunk-HGTL7DFT.mjs} +1 -1
- package/dist/{chunk-QO2AM6MF.mjs → chunk-HIDTQ4Z2.mjs} +1 -1
- package/dist/{chunk-3NIMV5PH.mjs → chunk-HUPECWNG.mjs} +1 -1
- package/dist/{chunk-H7RH4CZ7.cjs → chunk-HVACIZB5.cjs} +7 -7
- package/dist/{chunk-R4HT3SYR.cjs → chunk-HZBP6QTE.cjs} +2 -2
- package/dist/{chunk-2GXIGEKC.mjs → chunk-IKSER6BF.mjs} +2 -2
- package/dist/{chunk-UQQBUPGF.mjs → chunk-IPMWGCAI.mjs} +5 -21
- package/dist/{chunk-Q7WCKEXG.cjs → chunk-JF43YF6J.cjs} +3 -3
- package/dist/{chunk-MXGPFCLN.cjs → chunk-JVZ6J2UX.cjs} +2 -2
- package/dist/{chunk-EY6PKK4X.cjs → chunk-KKGDRIR2.cjs} +2 -2
- package/dist/{chunk-SAXISARG.cjs → chunk-KWSH253U.cjs} +2 -2
- package/dist/{chunk-K2BQNNEX.cjs → chunk-L6W77P4B.cjs} +8 -8
- package/dist/{chunk-N4Y5CBOI.cjs → chunk-LGUQR5AR.cjs} +4 -4
- package/dist/{chunk-MYZHDWBF.mjs → chunk-LJYIEOGQ.mjs} +11 -11
- package/dist/{chunk-332A4MHC.mjs → chunk-LNYUFL3Q.mjs} +1 -1
- package/dist/{chunk-JFPIUDGT.mjs → chunk-LOMLR5AA.mjs} +1 -1
- package/dist/{chunk-6D7FGGSX.cjs → chunk-MMQR4IEY.cjs} +27 -27
- package/dist/{chunk-BUAWPPXA.cjs → chunk-MQ5DGLVE.cjs} +11 -11
- package/dist/{chunk-EXY6WRH4.mjs → chunk-N6KP2HIC.mjs} +2 -2
- package/dist/{chunk-NKGUQZTD.cjs → chunk-NC2U7QTW.cjs} +2 -2
- package/dist/{chunk-V75PKBIV.cjs → chunk-NEJKCSS5.cjs} +9 -9
- package/dist/{chunk-KPGZOX2A.cjs → chunk-NHFIDL5X.cjs} +5 -5
- package/dist/{chunk-JNV3UBBP.cjs → chunk-NIACIZWY.cjs} +6 -22
- package/dist/{chunk-PC5DHSC4.mjs → chunk-NKUK73WB.mjs} +71 -1
- package/dist/{chunk-5OZS5UJX.cjs → chunk-NSPAT6XV.cjs} +7 -7
- package/dist/{chunk-4BQPIY5Z.mjs → chunk-O2NGB7YP.mjs} +1 -1
- package/dist/{chunk-7H7U2X45.cjs → chunk-O3DFVRON.cjs} +17 -13
- package/dist/{chunk-IAFCABPY.mjs → chunk-O5YP3JQ4.mjs} +1 -1
- package/dist/chunk-OBWKFURE.cjs +2 -0
- package/dist/{chunk-S37MJNNP.cjs → chunk-OCADGDGL.cjs} +2 -2
- package/dist/{chunk-UMGNAR3W.cjs → chunk-OON7LFBQ.cjs} +8 -8
- package/dist/{chunk-ZSAPBZ36.mjs → chunk-OW653F7T.mjs} +1 -1
- package/dist/{chunk-GQYUSBSO.mjs → chunk-P3FBRYWH.mjs} +3 -10
- package/dist/{chunk-P3YSHGT5.mjs → chunk-P55DAW6H.mjs} +1 -1
- package/dist/{chunk-JOOURIX7.cjs → chunk-P6E4WLMD.cjs} +4 -4
- package/dist/{chunk-SCUMWMIN.mjs → chunk-PC42NEBI.mjs} +1 -1
- package/dist/{chunk-F3HOBNGR.cjs → chunk-PMG3NZF5.cjs} +4 -4
- package/dist/{chunk-PV6CEMTT.cjs → chunk-PWZ4F3WY.cjs} +4 -4
- package/dist/{chunk-7A5EMDZH.mjs → chunk-PZDC5ZKG.mjs} +5 -5
- package/dist/{chunk-LVIZRMYN.cjs → chunk-QF3JWGWX.cjs} +2 -2
- package/dist/{chunk-BXZSWY4N.mjs → chunk-QYJZ5KA6.mjs} +1 -1
- package/dist/{chunk-AE5YDMFT.mjs → chunk-QYYMLZFE.mjs} +3 -3
- package/dist/{chunk-JYYAGDLZ.cjs → chunk-R22VW3EK.cjs} +2 -2
- package/dist/{chunk-U22YVR7M.mjs → chunk-RLY4A3IY.mjs} +15 -6
- package/dist/{chunk-OLYHHP67.mjs → chunk-RS4T6S3Z.mjs} +1 -1
- package/dist/{chunk-L2XJ5Q7T.cjs → chunk-RTZNHV43.cjs} +21 -21
- package/dist/{chunk-D562KO2I.mjs → chunk-RWHVZM2B.mjs} +2 -2
- package/dist/{chunk-PR3BCKLJ.mjs → chunk-S4BL7C3Y.mjs} +1 -1
- package/dist/chunk-S4C7HO32.cjs +36 -0
- package/dist/{chunk-DAVMLI3P.cjs → chunk-SNUQOJLK.cjs} +4 -4
- package/dist/{chunk-KY2PYKDZ.mjs → chunk-SO5KFX2C.mjs} +1 -1
- package/dist/{chunk-WDS3VL7E.mjs → chunk-SQJL67BU.mjs} +3 -3
- package/dist/{chunk-RW4T7UBU.cjs → chunk-STJMH4NX.cjs} +3 -3
- package/dist/{chunk-VYINXXYX.cjs → chunk-SUWJDU3Y.cjs} +59 -61
- package/dist/chunk-T2BDPMCF.cjs +358 -0
- package/dist/{chunk-U5W4ZALG.cjs → chunk-T2OAWYOU.cjs} +6 -6
- package/dist/{chunk-RGOZPSTI.mjs → chunk-TMBHKVKH.mjs} +1 -1
- package/dist/{chunk-VTW2DF63.mjs → chunk-TWDDNHRP.mjs} +1 -1
- package/dist/chunk-U4AANBRZ.mjs +1 -0
- package/dist/{chunk-DDIB73SZ.mjs → chunk-UB3ELCFR.mjs} +4 -4
- package/dist/chunk-UCAIVC2B.cjs +32 -0
- package/dist/{chunk-EK3BTKZP.cjs → chunk-UFYHIDMC.cjs} +123 -26
- package/dist/{chunk-KQW3YARN.cjs → chunk-UTHAZV2T.cjs} +62 -9
- package/dist/{chunk-G5VBLDAM.mjs → chunk-VBEVJE7Q.mjs} +1 -1
- package/dist/{chunk-66NKH2SV.cjs → chunk-VW2NEQHK.cjs} +6 -6
- package/dist/{chunk-VWVYCQWF.mjs → chunk-WBM7ATPT.mjs} +1 -1
- package/dist/{chunk-QBAZ6TKZ.cjs → chunk-WQT7JQN4.cjs} +2 -2
- package/dist/{chunk-DAA2GQAS.cjs → chunk-WRJAYU2L.cjs} +27 -27
- package/dist/{chunk-GTBXRWCK.cjs → chunk-WYD3KNAT.cjs} +3 -3
- package/dist/{chunk-EBFPZBUQ.cjs → chunk-WYUJM72T.cjs} +7 -7
- package/dist/{chunk-XTLGNJIO.mjs → chunk-XC25ZQ7H.mjs} +1 -1
- package/dist/{chunk-4PMXRQXC.cjs → chunk-XDIHVSZ5.cjs} +6 -6
- package/dist/{chunk-7ACZU3BT.mjs → chunk-XHNM6XE3.mjs} +1 -1
- package/dist/{chunk-WHV6Z7YX.mjs → chunk-XIESS6HW.mjs} +1 -1
- package/dist/{chunk-IU65XB2K.cjs → chunk-XMVARRN6.cjs} +2 -2
- package/dist/{chunk-UIJEAY6H.mjs → chunk-XTZURZIR.mjs} +1 -1
- package/dist/{chunk-7AZ3PLUC.mjs → chunk-XZLQHASB.mjs} +1 -1
- package/dist/{chunk-SRZ56OJH.mjs → chunk-XZTEU7ME.mjs} +3 -3
- package/dist/{chunk-RLTLA7VS.mjs → chunk-Y2IIKDRY.mjs} +1 -1
- package/dist/{chunk-5AKVDZMA.cjs → chunk-YAFKQ5ZV.cjs} +12 -12
- package/dist/{chunk-3DIFS7CO.mjs → chunk-YBUMQX6M.mjs} +1 -1
- package/dist/{chunk-CR6JOOO3.cjs → chunk-YGZHBIZP.cjs} +3 -10
- package/dist/{chunk-TWQONYWC.mjs → chunk-YMMSHGYC.mjs} +1 -1
- package/dist/{chunk-ZS7ESTKH.cjs → chunk-Z42BBOSG.cjs} +8 -12
- package/dist/{chunk-ZA7WOIIB.mjs → chunk-Z7PWETGZ.mjs} +1 -1
- package/dist/{chunk-3ZEQVODC.cjs → chunk-ZAK7AFVY.cjs} +2 -2
- package/dist/{chunk-W3IHFG4B.cjs → chunk-ZG33TW5I.cjs} +8 -8
- package/dist/chunk-ZQ2DPA2M.mjs +43 -0
- package/dist/{chunk-AHD46BFN.mjs → chunk-ZQOQB6GF.mjs} +1 -1
- package/dist/dial/DialPanel.cjs +88 -86
- package/dist/dial/DialPanel.d.cts +2 -3
- package/dist/dial/DialPanel.d.ts +2 -3
- package/dist/dial/DialPanel.mjs +87 -85
- package/dist/dial/DialProvider.d.cts +16 -51
- package/dist/dial/DialProvider.d.ts +16 -51
- package/dist/dial/index.cjs +104 -102
- package/dist/dial/index.d.cts +2 -1
- package/dist/dial/index.d.ts +2 -1
- package/dist/dial/index.mjs +87 -85
- package/dist/dial/types.cjs +4 -0
- package/dist/dial/types.d.cts +110 -0
- package/dist/dial/types.d.ts +110 -0
- package/dist/dial/types.mjs +1 -0
- package/dist/dial/wrapped-inputs/ControlledInputs.cjs +92 -90
- package/dist/dial/wrapped-inputs/ControlledInputs.d.cts +1 -2
- package/dist/dial/wrapped-inputs/ControlledInputs.d.ts +1 -2
- package/dist/dial/wrapped-inputs/ControlledInputs.mjs +87 -85
- package/dist/dial/wrapped-inputs/DialInputs.cjs +101 -99
- package/dist/dial/wrapped-inputs/DialInputs.d.cts +1 -2
- package/dist/dial/wrapped-inputs/DialInputs.d.ts +1 -2
- package/dist/dial/wrapped-inputs/DialInputs.mjs +87 -85
- package/dist/dial/wrapped-inputs/DialInterfaceInput.cjs +129 -0
- package/dist/dial/wrapped-inputs/DialInterfaceInput.d.cts +8 -0
- package/dist/dial/wrapped-inputs/DialInterfaceInput.d.ts +8 -0
- package/dist/dial/wrapped-inputs/DialInterfaceInput.mjs +120 -0
- package/dist/dial/wrapped-inputs/DialPresetsInput.cjs +83 -82
- package/dist/dial/wrapped-inputs/DialPresetsInput.d.cts +1 -2
- package/dist/dial/wrapped-inputs/DialPresetsInput.d.ts +1 -2
- package/dist/dial/wrapped-inputs/DialPresetsInput.mjs +82 -81
- package/dist/dial/wrapped-inputs/DialVectorInput.cjs +88 -86
- package/dist/dial/wrapped-inputs/DialVectorInput.mjs +87 -85
- package/dist/dial/wrapped-inputs/index.cjs +108 -106
- package/dist/dial/wrapped-inputs/index.d.cts +1 -2
- package/dist/dial/wrapped-inputs/index.d.ts +1 -2
- package/dist/dial/wrapped-inputs/index.mjs +87 -85
- package/dist/highlight-cursor/cursor-provider.cjs +3 -3
- package/dist/highlight-cursor/cursor-provider.mjs +2 -2
- package/dist/highlight-cursor/enhanced-components.cjs +13 -13
- package/dist/highlight-cursor/enhanced-components.d.cts +1 -1
- package/dist/highlight-cursor/enhanced-components.d.ts +1 -1
- package/dist/highlight-cursor/enhanced-components.mjs +8 -8
- package/dist/highlight-cursor/index.cjs +18 -18
- package/dist/highlight-cursor/index.mjs +9 -9
- package/dist/hooks/cn.cjs +2 -2
- package/dist/hooks/cn.mjs +1 -1
- package/dist/hooks/index.cjs +4 -4
- package/dist/hooks/index.mjs +2 -2
- package/dist/hooks/useIsMobile.cjs +2 -2
- package/dist/hooks/useIsMobile.mjs +1 -1
- package/dist/index.cjs +463 -369
- package/dist/index.css +0 -63
- package/dist/index.d.cts +7 -4
- package/dist/index.d.ts +7 -4
- package/dist/index.mjs +87 -85
- package/dist/ui/DialBadge.cjs +7 -7
- package/dist/ui/DialBadge.mjs +3 -3
- package/dist/ui/UIKitBadge.cjs +7 -7
- package/dist/ui/UIKitBadge.mjs +3 -3
- package/dist/ui/avatar.cjs +7 -7
- package/dist/ui/avatar.mjs +3 -3
- package/dist/ui/badge.cjs +5 -5
- package/dist/ui/badge.d.cts +1 -1
- package/dist/ui/badge.d.ts +1 -1
- package/dist/ui/badge.mjs +3 -3
- package/dist/ui/button.cjs +5 -5
- package/dist/ui/button.d.cts +1 -1
- package/dist/ui/button.d.ts +1 -1
- package/dist/ui/button.mjs +3 -3
- package/dist/ui/card.cjs +11 -10
- package/dist/ui/card.d.cts +14 -2
- package/dist/ui/card.d.ts +14 -2
- package/dist/ui/card.mjs +4 -3
- package/dist/ui/checkbox.cjs +4 -4
- package/dist/ui/checkbox.mjs +3 -3
- package/dist/ui/collapsible.cjs +6 -6
- package/dist/ui/collapsible.mjs +3 -3
- package/dist/ui/context-menu.cjs +76 -0
- package/dist/ui/context-menu.d.cts +28 -0
- package/dist/ui/context-menu.d.ts +28 -0
- package/dist/ui/context-menu.mjs +11 -0
- package/dist/ui/drawer.cjs +13 -13
- package/dist/ui/drawer.mjs +3 -3
- package/dist/ui/dropdown.cjs +18 -18
- package/dist/ui/dropdown.mjs +3 -3
- package/dist/ui/icons/index.cjs +9 -9
- package/dist/ui/icons/index.mjs +1 -1
- package/dist/ui/index.cjs +423 -330
- package/dist/ui/index.d.cts +5 -3
- package/dist/ui/index.d.ts +5 -3
- package/dist/ui/index.mjs +81 -80
- package/dist/ui/inputs/color-input.cjs +5 -5
- package/dist/ui/inputs/color-input.mjs +4 -4
- package/dist/ui/inputs/index.cjs +61 -61
- package/dist/ui/inputs/index.mjs +22 -22
- package/dist/ui/inputs/input-numbers.cjs +5 -5
- package/dist/ui/inputs/input-numbers.mjs +4 -4
- package/dist/ui/inputs/input.cjs +6 -6
- package/dist/ui/inputs/input.mjs +3 -3
- package/dist/ui/inputs/number-inputs/CmInput.cjs +6 -6
- package/dist/ui/inputs/number-inputs/CmInput.mjs +5 -5
- package/dist/ui/inputs/number-inputs/DegInput.cjs +6 -6
- package/dist/ui/inputs/number-inputs/DegInput.mjs +5 -5
- package/dist/ui/inputs/number-inputs/EulerDegInput.cjs +8 -8
- package/dist/ui/inputs/number-inputs/EulerDegInput.mjs +7 -7
- package/dist/ui/inputs/number-inputs/EulerInput.cjs +7 -7
- package/dist/ui/inputs/number-inputs/EulerInput.mjs +6 -6
- package/dist/ui/inputs/number-inputs/EulerRadInput.cjs +7 -7
- package/dist/ui/inputs/number-inputs/EulerRadInput.mjs +6 -6
- package/dist/ui/inputs/number-inputs/InchInput.cjs +6 -6
- package/dist/ui/inputs/number-inputs/InchInput.mjs +5 -5
- package/dist/ui/inputs/number-inputs/IntInput.cjs +6 -6
- package/dist/ui/inputs/number-inputs/IntInput.mjs +5 -5
- package/dist/ui/inputs/number-inputs/KVectorInput.cjs +7 -7
- package/dist/ui/inputs/number-inputs/KVectorInput.mjs +6 -6
- package/dist/ui/inputs/number-inputs/QuaternionInput.cjs +7 -7
- package/dist/ui/inputs/number-inputs/QuaternionInput.mjs +6 -6
- package/dist/ui/inputs/number-inputs/RadInput.cjs +6 -6
- package/dist/ui/inputs/number-inputs/RadInput.mjs +5 -5
- package/dist/ui/inputs/number-inputs/TimeInput.cjs +6 -6
- package/dist/ui/inputs/number-inputs/TimeInput.mjs +5 -5
- package/dist/ui/inputs/number-inputs/Vec3Input.cjs +7 -7
- package/dist/ui/inputs/number-inputs/Vec3Input.mjs +6 -6
- package/dist/ui/inputs/number-inputs/VectorInput.cjs +6 -6
- package/dist/ui/inputs/number-inputs/VectorInput.mjs +5 -5
- package/dist/ui/inputs/number-inputs/index.cjs +42 -42
- package/dist/ui/inputs/number-inputs/index.mjs +17 -17
- package/dist/ui/inputs/presets-input.cjs +7 -7
- package/dist/ui/inputs/presets-input.mjs +6 -6
- package/dist/ui/inputs/presets-rad-input.cjs +8 -8
- package/dist/ui/inputs/presets-rad-input.mjs +7 -7
- package/dist/ui/inputs/text-input.cjs +5 -5
- package/dist/ui/inputs/text-input.mjs +4 -4
- package/dist/ui/label.cjs +4 -4
- package/dist/ui/label.mjs +3 -3
- package/dist/ui/layout.cjs +4 -4
- package/dist/ui/layout.mjs +3 -3
- package/dist/ui/layouts/dock-layout/DockLayoutView.cjs +5 -5
- package/dist/ui/layouts/dock-layout/DockLayoutView.d.cts +2 -1
- package/dist/ui/layouts/dock-layout/DockLayoutView.d.ts +2 -1
- package/dist/ui/layouts/dock-layout/DockLayoutView.mjs +4 -4
- package/dist/ui/layouts/dock-layout/LayoutSlots.cjs +9 -9
- package/dist/ui/layouts/dock-layout/LayoutSlots.mjs +3 -3
- package/dist/ui/layouts/dock-layout/index.cjs +11 -11
- package/dist/ui/layouts/dock-layout/index.mjs +4 -4
- package/dist/ui/layouts/index.cjs +18 -18
- package/dist/ui/layouts/index.mjs +7 -7
- package/dist/ui/layouts/liquid-layout/LayoutSlots.cjs +9 -9
- package/dist/ui/layouts/liquid-layout/LayoutSlots.mjs +3 -3
- package/dist/ui/layouts/liquid-layout/LiquidLayoutView.cjs +5 -5
- package/dist/ui/layouts/liquid-layout/LiquidLayoutView.d.cts +13 -1
- package/dist/ui/layouts/liquid-layout/LiquidLayoutView.d.ts +13 -1
- package/dist/ui/layouts/liquid-layout/LiquidLayoutView.mjs +4 -4
- package/dist/ui/layouts/liquid-layout/index.cjs +5 -5
- package/dist/ui/layouts/liquid-layout/index.mjs +4 -4
- package/dist/ui/modal.cjs +13 -13
- package/dist/ui/modal.mjs +3 -3
- package/dist/ui/navigation.cjs +5 -5
- package/dist/ui/navigation.mjs +4 -4
- package/dist/ui/pagination.cjs +11 -11
- package/dist/ui/pagination.mjs +4 -4
- package/dist/ui/popover.cjs +7 -7
- package/dist/ui/popover.mjs +3 -3
- package/dist/ui/progress.cjs +4 -4
- package/dist/ui/progress.d.cts +1 -1
- package/dist/ui/progress.d.ts +1 -1
- package/dist/ui/progress.mjs +3 -3
- package/dist/ui/radio-group.cjs +5 -5
- package/dist/ui/radio-group.mjs +3 -3
- package/dist/ui/resizable.cjs +6 -6
- package/dist/ui/resizable.mjs +3 -3
- package/dist/ui/select.cjs +14 -14
- package/dist/ui/select.mjs +3 -3
- package/dist/ui/separator.cjs +4 -4
- package/dist/ui/separator.mjs +3 -3
- package/dist/ui/sheet.cjs +11 -11
- package/dist/ui/sheet.d.cts +26 -13
- package/dist/ui/sheet.d.ts +26 -13
- package/dist/ui/sheet.mjs +3 -3
- package/dist/ui/sidebar.cjs +33 -33
- package/dist/ui/sidebar.mjs +9 -9
- package/dist/ui/simple-tree-view.cjs +4 -4
- package/dist/ui/simple-tree-view.mjs +3 -3
- package/dist/ui/skeleton.cjs +4 -4
- package/dist/ui/skeleton.mjs +3 -3
- package/dist/ui/slider.cjs +4 -4
- package/dist/ui/slider.mjs +3 -3
- package/dist/ui/switch.cjs +4 -4
- package/dist/ui/switch.mjs +3 -3
- package/dist/ui/table.cjs +11 -11
- package/dist/ui/table.mjs +3 -3
- package/dist/ui/tabs.cjs +7 -7
- package/dist/ui/tabs.d.cts +21 -6
- package/dist/ui/tabs.d.ts +21 -6
- package/dist/ui/tabs.mjs +3 -3
- package/dist/ui/textarea.cjs +4 -4
- package/dist/ui/textarea.mjs +3 -3
- package/dist/ui/theme/ThemeProvider.d.cts +1 -1
- package/dist/ui/theme/ThemeProvider.d.ts +1 -1
- package/dist/ui/theme/ThemeToggles.cjs +7 -7
- package/dist/ui/theme/ThemeToggles.mjs +5 -5
- package/dist/ui/theme/index.cjs +7 -7
- package/dist/ui/theme/index.mjs +5 -5
- package/dist/ui/toast.cjs +19 -3
- package/dist/ui/toast.d.cts +1 -1
- package/dist/ui/toast.d.ts +1 -1
- package/dist/ui/toast.mjs +17 -1
- package/dist/ui/toggle-buttons.cjs +8 -8
- package/dist/ui/toggle-buttons.mjs +3 -3
- package/dist/ui/toggle-group.cjs +6 -6
- package/dist/ui/toggle-group.mjs +3 -3
- package/dist/ui/toggle.cjs +5 -5
- package/dist/ui/toggle.mjs +3 -3
- package/dist/ui/toolbar.cjs +6 -6
- package/dist/ui/toolbar.mjs +3 -3
- package/dist/ui/tooltip.cjs +7 -7
- package/dist/ui/tooltip.d.cts +2 -2
- package/dist/ui/tooltip.d.ts +2 -2
- package/dist/ui/tooltip.mjs +3 -3
- package/dist/ui/tree-view/TreeSearchBar.cjs +6 -6
- package/dist/ui/tree-view/TreeSearchBar.mjs +5 -5
- package/dist/ui/tree-view/TreeView.cjs +7 -5
- package/dist/ui/tree-view/TreeView.d.cts +12 -6
- package/dist/ui/tree-view/TreeView.d.ts +12 -6
- package/dist/ui/tree-view/TreeView.mjs +5 -3
- package/dist/ui/tree-view/hooks.cjs +31 -3
- package/dist/ui/tree-view/hooks.d.cts +33 -1
- package/dist/ui/tree-view/hooks.d.ts +33 -1
- package/dist/ui/tree-view/hooks.mjs +1 -1
- package/dist/ui/tree-view/index.cjs +46 -17
- package/dist/ui/tree-view/index.d.cts +1 -1
- package/dist/ui/tree-view/index.d.ts +1 -1
- package/dist/ui/tree-view/index.mjs +8 -7
- package/dist/ui/tree-view-legacy.cjs +10 -10
- package/dist/ui/tree-view-legacy.mjs +6 -6
- package/dist/ui/waterfall/CursorOverlay.cjs +4 -4
- package/dist/ui/waterfall/CursorOverlay.mjs +3 -3
- package/dist/ui/waterfall/TimelineEvent.cjs +4 -4
- package/dist/ui/waterfall/TimelineEvent.mjs +3 -3
- package/dist/ui/waterfall/TimelineProcessBar.cjs +4 -4
- package/dist/ui/waterfall/TimelineProcessBar.mjs +3 -3
- package/dist/ui/waterfall/Wedges.cjs +5 -5
- package/dist/ui/waterfall/Wedges.mjs +3 -3
- package/dist/ui/waterfall/index.cjs +16 -15
- package/dist/ui/waterfall/index.mjs +15 -14
- package/package.json +2 -1
- package/src/auth/components/index.ts +1 -1
- package/src/dial/DialPanel.tsx +52 -27
- package/src/dial/DialProvider.tsx +20 -68
- package/src/dial/index.ts +7 -5
- package/src/dial/types.ts +40 -0
- package/src/dial/wrapped-inputs/ControlledInputs.tsx +6 -5
- package/src/dial/wrapped-inputs/DialInputs.tsx +2 -1
- package/src/dial/wrapped-inputs/DialInterfaceInput.tsx +44 -0
- package/src/dial/wrapped-inputs/DialPresetsInput.tsx +3 -2
- package/src/dial/wrapped-inputs/DialVectorInput.tsx +3 -18
- package/src/hooks/cn.ts +5 -0
- package/src/hooks/useIsMobile.ts +14 -30
- package/src/index.css +0 -1
- package/src/ui/DialBadge.tsx +7 -5
- package/src/ui/card.tsx +76 -4
- package/src/ui/context-menu.tsx +358 -0
- package/src/ui/index.ts +2 -0
- package/src/ui/inputs/number-inputs/EulerRadInput.tsx +43 -42
- package/src/ui/inputs/number-inputs/VectorInput.tsx +0 -1
- package/src/ui/inputs/presets-rad-input.tsx +5 -2
- package/src/ui/inputs/text-input.tsx +1 -1
- package/src/ui/layouts/dock-layout/DockLayoutView.tsx +15 -4
- package/src/ui/layouts/dock-layout/LayoutSlots.tsx +14 -5
- package/src/ui/layouts/liquid-layout/LiquidLayoutView.tsx +44 -5
- package/src/ui/progress.tsx +7 -14
- package/src/ui/separator.tsx +1 -1
- package/src/ui/sheet.tsx +14 -116
- package/src/ui/sidebar.tsx +18 -19
- package/src/ui/tabs.tsx +27 -57
- package/src/ui/toast.tsx +15 -16
- package/src/ui/tooltip.tsx +3 -30
- package/src/ui/tree-view/TreeView.tsx +147 -18
- package/src/ui/tree-view/hooks.tsx +148 -0
- package/src/ui/tree-view/types.ts +1 -1
- package/src/ui/waterfall/TimelineProcessBar.tsx +10 -4
- package/dist/chunk-EOSYXHEH.mjs +0 -27
- package/dist/chunk-EXXV3BXT.cjs +0 -23
- package/dist/chunk-FZAGJSW2.cjs +0 -47
- package/dist/chunk-IPQU5CJD.mjs +0 -21
- package/dist/chunk-JR4TVE43.cjs +0 -31
- package/dist/chunk-LAPOK2L4.mjs +0 -193
- package/dist/chunk-MFYDZKQF.mjs +0 -28
- package/dist/chunk-Q3CJUGX3.cjs +0 -21
- package/dist/chunk-RTYZO2AC.cjs +0 -30
- package/dist/chunk-V5T6XOSB.cjs +0 -222
- package/dist/chunk-XHJDRQD7.mjs +0 -29
- package/dist/chunk-Y2XVZEXM.mjs +0 -45
- package/dist/dial/DialProvider.example.cjs +0 -72
- package/dist/dial/DialProvider.example.d.cts +0 -7
- package/dist/dial/DialProvider.example.d.ts +0 -7
- package/dist/dial/DialProvider.example.mjs +0 -68
- package/dist/styles/toast.css +0 -64
- package/dist/styles/toast.d.cts +0 -2
- package/dist/styles/toast.d.ts +0 -2
- package/src/dial/DialProvider.example.tsx +0 -80
- package/src/styles/toast.css +0 -67
- /package/dist/{chunk-YYLBP356.mjs → chunk-6THKQIF7.mjs} +0 -0
- /package/dist/{chunk-YWECB5GR.cjs → chunk-F4NQLN5E.cjs} +0 -0
package/src/ui/tabs.tsx
CHANGED
|
@@ -3,7 +3,7 @@ import { cva } from "class-variance-authority";
|
|
|
3
3
|
import { type ComponentProps, createContext, useContext } from "react";
|
|
4
4
|
|
|
5
5
|
import { TabsCursorProvider, useTabsCursor } from "../highlight-cursor/tabs-cursor-context";
|
|
6
|
-
import { cn
|
|
6
|
+
import { cn } from "../hooks";
|
|
7
7
|
|
|
8
8
|
interface TabsContextType {
|
|
9
9
|
size?: "sm" | "base" | "lg";
|
|
@@ -29,7 +29,7 @@ interface TabsProps extends ComponentProps<typeof TabsPrimitive.Root> {
|
|
|
29
29
|
* @param props -
|
|
30
30
|
* @param className -
|
|
31
31
|
* @param size - Control size ("sm" | "base" | "lg"), defaults to "base" */
|
|
32
|
-
function
|
|
32
|
+
function Tabs({ className, size = "base", ...props }: TabsProps) {
|
|
33
33
|
return (
|
|
34
34
|
<TabsContext.Provider value={{ size }}>
|
|
35
35
|
<TabsPrimitive.Root
|
|
@@ -41,16 +41,6 @@ function TabsRoot({ className, size = "base", ...props }: TabsProps) {
|
|
|
41
41
|
);
|
|
42
42
|
}
|
|
43
43
|
|
|
44
|
-
function TabsFallback({ className, size = "base", ...props }: TabsProps & ComponentProps<"div">) {
|
|
45
|
-
return (
|
|
46
|
-
<TabsContext.Provider value={{ size }}>
|
|
47
|
-
<div data-slot="tabs" className={cn("flex w-full flex-col", className)} {...props} />
|
|
48
|
-
</TabsContext.Provider>
|
|
49
|
-
);
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
const Tabs = createClientOnlyComponent(TabsRoot, TabsFallback);
|
|
53
|
-
|
|
54
44
|
const tabsListVariants = cva(["inline-flex", "items-center", "justify-center"], {
|
|
55
45
|
variants: {
|
|
56
46
|
size: {
|
|
@@ -69,36 +59,38 @@ type TabsListProps = ComponentProps<typeof TabsPrimitive.List>;
|
|
|
69
59
|
/**
|
|
70
60
|
* Container for tab triggers. Emits cursor interactions for visual effects.
|
|
71
61
|
*/
|
|
72
|
-
function
|
|
73
|
-
const { setCursorTarget } = useTabsCursor();
|
|
62
|
+
function TabsList({ className, onMouseLeave, ...props }: TabsListProps) {
|
|
74
63
|
const { size } = useTabsContext();
|
|
75
64
|
return (
|
|
76
65
|
<TabsCursorProvider>
|
|
77
|
-
<
|
|
78
|
-
onMouseLeave={() => setCursorTarget(null)}
|
|
79
|
-
data-slot="tabs-list"
|
|
80
|
-
className={cn(tabsListVariants({ size }), "justify-start", className)}
|
|
81
|
-
{...props}
|
|
82
|
-
/>
|
|
66
|
+
<TabsListInner className={className} size={size} onMouseLeave={onMouseLeave} {...props} />
|
|
83
67
|
</TabsCursorProvider>
|
|
84
68
|
);
|
|
85
69
|
}
|
|
86
70
|
|
|
87
|
-
function
|
|
88
|
-
|
|
71
|
+
function TabsListInner({
|
|
72
|
+
className,
|
|
73
|
+
size,
|
|
74
|
+
onMouseLeave,
|
|
75
|
+
...props
|
|
76
|
+
}: TabsListProps & { size?: "sm" | "base" | "lg" }) {
|
|
77
|
+
const { setCursorTarget } = useTabsCursor();
|
|
78
|
+
|
|
79
|
+
const handleMouseLeave = (e: React.MouseEvent<HTMLDivElement>) => {
|
|
80
|
+
setCursorTarget(null);
|
|
81
|
+
onMouseLeave?.(e);
|
|
82
|
+
};
|
|
83
|
+
|
|
89
84
|
return (
|
|
90
|
-
<
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
</TabsCursorProvider>
|
|
85
|
+
<TabsPrimitive.List
|
|
86
|
+
onMouseLeave={handleMouseLeave}
|
|
87
|
+
data-slot="tabs-list"
|
|
88
|
+
className={cn(tabsListVariants({ size }), "justify-start", className)}
|
|
89
|
+
{...props}
|
|
90
|
+
/>
|
|
97
91
|
);
|
|
98
92
|
}
|
|
99
93
|
|
|
100
|
-
const TabsList = createClientOnlyComponent(TabsListRoot, TabsListFallback);
|
|
101
|
-
|
|
102
94
|
const tabsTriggerVariants = cva(
|
|
103
95
|
[
|
|
104
96
|
"inline-flex",
|
|
@@ -114,8 +106,9 @@ const tabsTriggerVariants = cva(
|
|
|
114
106
|
"shrink-0",
|
|
115
107
|
"[&_svg]:shrink-0",
|
|
116
108
|
"outline-none",
|
|
117
|
-
"text-text-
|
|
109
|
+
"text-text-secondary",
|
|
118
110
|
"data-[state=active]:bg-bg-secondary",
|
|
111
|
+
"data-[state=active]:text-text-primary",
|
|
119
112
|
"data-[state=active]:font-medium",
|
|
120
113
|
],
|
|
121
114
|
{
|
|
@@ -137,7 +130,7 @@ type TabsTriggerProps = ComponentProps<typeof TabsPrimitive.Trigger>;
|
|
|
137
130
|
/**
|
|
138
131
|
* Single tab trigger button.
|
|
139
132
|
*/
|
|
140
|
-
function
|
|
133
|
+
function TabsTrigger({ className, ...props }: TabsTriggerProps) {
|
|
141
134
|
const { setCursorTarget } = useTabsCursor();
|
|
142
135
|
const { size } = useTabsContext();
|
|
143
136
|
return (
|
|
@@ -150,27 +143,12 @@ function TabsTriggerRoot({ className, ...props }: TabsTriggerProps) {
|
|
|
150
143
|
);
|
|
151
144
|
}
|
|
152
145
|
|
|
153
|
-
function TabsTriggerFallback({ className, ...props }: TabsTriggerProps & ComponentProps<"button">) {
|
|
154
|
-
const { setCursorTarget } = useTabsCursor();
|
|
155
|
-
const { size } = useTabsContext();
|
|
156
|
-
return (
|
|
157
|
-
<button
|
|
158
|
-
onMouseEnter={(e) => setCursorTarget(e.currentTarget)}
|
|
159
|
-
data-slot="tabs-trigger"
|
|
160
|
-
className={cn(tabsTriggerVariants({ size }), className)}
|
|
161
|
-
{...props}
|
|
162
|
-
/>
|
|
163
|
-
);
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
const TabsTrigger = createClientOnlyComponent(TabsTriggerRoot, TabsTriggerFallback);
|
|
167
|
-
|
|
168
146
|
type TabsContentProps = ComponentProps<typeof TabsPrimitive.Content>;
|
|
169
147
|
|
|
170
148
|
/**
|
|
171
149
|
* Content area for a tab panel.
|
|
172
150
|
*/
|
|
173
|
-
function
|
|
151
|
+
function TabsContent({ className, ...props }: TabsContentProps) {
|
|
174
152
|
return (
|
|
175
153
|
<TabsPrimitive.Content
|
|
176
154
|
data-slot="tabs-content"
|
|
@@ -180,13 +158,5 @@ function TabsContentRoot({ className, ...props }: TabsContentProps) {
|
|
|
180
158
|
);
|
|
181
159
|
}
|
|
182
160
|
|
|
183
|
-
function TabsContentFallback({ className, ...props }: TabsContentProps & ComponentProps<"div">) {
|
|
184
|
-
return (
|
|
185
|
-
<div data-slot="tabs-content" className={cn("flex-1 outline-none", className)} {...props} />
|
|
186
|
-
);
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
const TabsContent = createClientOnlyComponent(TabsContentRoot, TabsContentFallback);
|
|
190
|
-
|
|
191
161
|
export { Tabs, TabsList, TabsTrigger, TabsContent };
|
|
192
162
|
export type { TabsProps, TabsListProps, TabsTriggerProps, TabsContentProps };
|
package/src/ui/toast.tsx
CHANGED
|
@@ -1,27 +1,26 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { Toaster as Sonner, ToasterProps
|
|
1
|
+
import { CSSProperties } from "react";
|
|
2
|
+
import { toast, Toaster as Sonner, type ToasterProps } from "sonner";
|
|
3
|
+
|
|
4
|
+
import { useTheme } from "./theme";
|
|
3
5
|
|
|
4
6
|
/**
|
|
5
7
|
* Client-only Toaster wrapper applying default classes.
|
|
6
8
|
*/
|
|
7
|
-
const Toaster = ({ ...props }: ToasterProps) => {
|
|
8
|
-
const [isClient, setIsClient] = useState(false);
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
}, []);
|
|
13
|
-
|
|
14
|
-
// Don't render anything during SSR
|
|
15
|
-
if (!isClient) {
|
|
16
|
-
return null;
|
|
17
|
-
}
|
|
10
|
+
const Toaster = ({ ...props }: ToasterProps) => {
|
|
11
|
+
const { baseTheme = "system" } = useTheme();
|
|
18
12
|
|
|
19
13
|
return (
|
|
20
14
|
<Sonner
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
15
|
+
theme={baseTheme}
|
|
16
|
+
className="toaster group"
|
|
17
|
+
style={
|
|
18
|
+
{
|
|
19
|
+
"--normal-bg": "var(--bg-primary)",
|
|
20
|
+
"--normal-text": "var(--text-primary)",
|
|
21
|
+
"--normal-border": "var(--bg-secondary)",
|
|
22
|
+
} as CSSProperties
|
|
23
|
+
}
|
|
25
24
|
{...props}
|
|
26
25
|
/>
|
|
27
26
|
);
|
package/src/ui/tooltip.tsx
CHANGED
|
@@ -8,7 +8,6 @@ import { cn } from "../hooks";
|
|
|
8
8
|
*/
|
|
9
9
|
function TooltipProvider({
|
|
10
10
|
delayDuration = 0,
|
|
11
|
-
children,
|
|
12
11
|
...props
|
|
13
12
|
}: ComponentProps<typeof TooltipPrimitive.Provider>) {
|
|
14
13
|
return (
|
|
@@ -16,32 +15,17 @@ function TooltipProvider({
|
|
|
16
15
|
data-slot="tooltip-provider"
|
|
17
16
|
delayDuration={delayDuration}
|
|
18
17
|
{...props}
|
|
19
|
-
|
|
20
|
-
{children}
|
|
21
|
-
</TooltipPrimitive.Provider>
|
|
18
|
+
/>
|
|
22
19
|
);
|
|
23
20
|
}
|
|
24
21
|
|
|
25
22
|
/**
|
|
26
23
|
* Wrapper root for a tooltip. Skips tooltip logic during SSR.
|
|
27
24
|
*/
|
|
28
|
-
function Tooltip({
|
|
29
|
-
const [isClient, setIsClient] = useState(false);
|
|
30
|
-
|
|
31
|
-
useEffect(() => {
|
|
32
|
-
setIsClient(true);
|
|
33
|
-
}, []);
|
|
34
|
-
|
|
35
|
-
// During SSR, just render children without tooltip functionality
|
|
36
|
-
if (!isClient) {
|
|
37
|
-
return <>{children}</>;
|
|
38
|
-
}
|
|
39
|
-
|
|
25
|
+
function Tooltip({ ...props }: ComponentProps<typeof TooltipPrimitive.Root>) {
|
|
40
26
|
return (
|
|
41
27
|
<TooltipProvider>
|
|
42
|
-
<TooltipPrimitive.Root data-slot="tooltip" {...props}
|
|
43
|
-
{children}
|
|
44
|
-
</TooltipPrimitive.Root>
|
|
28
|
+
<TooltipPrimitive.Root data-slot="tooltip" {...props} />
|
|
45
29
|
</TooltipProvider>
|
|
46
30
|
);
|
|
47
31
|
}
|
|
@@ -50,17 +34,6 @@ function Tooltip({ children, ...props }: ComponentProps<typeof TooltipPrimitive.
|
|
|
50
34
|
* Element that triggers the tooltip.
|
|
51
35
|
*/
|
|
52
36
|
function TooltipTrigger({ ...props }: ComponentProps<typeof TooltipPrimitive.Trigger>) {
|
|
53
|
-
const [isClient, setIsClient] = useState(false);
|
|
54
|
-
|
|
55
|
-
useEffect(() => {
|
|
56
|
-
setIsClient(true);
|
|
57
|
-
}, []);
|
|
58
|
-
|
|
59
|
-
// During SSR, just render children without tooltip functionality
|
|
60
|
-
if (!isClient) {
|
|
61
|
-
return <>{props.children}</>;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
37
|
return <TooltipPrimitive.Trigger data-slot="tooltip-trigger" {...props} />;
|
|
65
38
|
}
|
|
66
39
|
|
|
@@ -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
|
-
|
|
19
|
-
|
|
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
|
-
|
|
40
|
-
|
|
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
|
-
|
|
56
|
-
|
|
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
|
-
|
|
79
|
-
|
|
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
|
-
|
|
93
|
-
|
|
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
|
|
104
|
-
|
|
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
|
-
|
|
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
|
-
|
|
118
|
-
!item.disable && "cursor-pointer",
|
|
230
|
+
getBorderRadiusClass(),
|
|
119
231
|
hoveredId === item.id && !item.disable && "bg-bg-secondary",
|
|
120
|
-
isSelectable &&
|
|
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
|
*/
|