@os-design/drag-sort 1.0.0 → 1.0.4
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/cjs/DragAndDrop.js +7 -1
- package/dist/cjs/DragAndDrop.js.map +1 -1
- package/dist/cjs/Draggable.js.map +1 -1
- package/dist/cjs/utils/useBlankNode.js.map +1 -1
- package/dist/cjs/utils/useDragEffect.js +151 -136
- package/dist/cjs/utils/useDragEffect.js.map +1 -1
- package/dist/cjs/utils/useInitRect.js.map +1 -1
- package/dist/cjs/utils/useInitScrollOffset.js.map +1 -1
- package/dist/cjs/utils/useMoveNode.js +25 -19
- package/dist/cjs/utils/useMoveNode.js.map +1 -1
- package/dist/esm/DragAndDrop.js +6 -1
- package/dist/esm/DragAndDrop.js.map +1 -1
- package/dist/esm/Draggable.js.map +1 -1
- package/dist/esm/utils/useBlankNode.js.map +1 -1
- package/dist/esm/utils/useDragEffect.js +130 -112
- package/dist/esm/utils/useDragEffect.js.map +1 -1
- package/dist/esm/utils/useInitRect.js.map +1 -1
- package/dist/esm/utils/useInitScrollOffset.js.map +1 -1
- package/dist/esm/utils/useMoveNode.js +60 -47
- package/dist/esm/utils/useMoveNode.js.map +1 -1
- package/dist/types/DragAndDrop.d.ts.map +1 -1
- package/dist/types/Draggable.d.ts +1 -1
- package/dist/types/Draggable.d.ts.map +1 -1
- package/dist/types/utils/useBlankNode.d.ts +3 -1
- package/dist/types/utils/useBlankNode.d.ts.map +1 -1
- package/dist/types/utils/useDragEffect.d.ts.map +1 -1
- package/dist/types/utils/useInitRect.d.ts.map +1 -1
- package/dist/types/utils/useInitScrollOffset.d.ts.map +1 -1
- package/dist/types/utils/useMoveNode.d.ts +12 -5
- package/dist/types/utils/useMoveNode.d.ts.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/utils/useDragEffect.ts"],"names":["HIDDEN_NODE_STYLE","opacity","pointerEvents","createEmptyNode","prev","next","current","useDragEffect","props","draggedNode","cursorPosition","listStoreRef","onDragEnd","targetRef","targetNodeRef","onDragEndRef","initDraggedNodeRect","node","initDraggedNodeListScrollOffset","list","ref","position","x","y","initWidth","initHeight","getNodeStyle","targetList","moveNode","setTargetNode","nodeIndex","id","index","clearTargetNode","getDraggedNodePos","initX","initY","initScrollLeft","initScrollTop","scrollLeft","scrollTop","getDraggedNodePosRef","draggedNodeSetStyle","removeBlankNode","updateTargetNode","prevTargetNode","startNode","type","untilTheEnd","insideAnotherList","tail","getTail","axis","horizontal","prevTargetNodeRef","draggedNodePos","isDraggingUp","head","getHead","prevTargetNodeRect","rectProp","isMoveUp","throttledUpdateTargetNode","window","draggedNodeIndex","targetNode","nodeSetStyle","targetNodeSetStyle","targetNodeIndex","update","nodeProps","setStyle","addListener","removeListener","target","dragged"],"mappings":";;;;;;;AACA;;AAQA;;AACA;;AAGA;;AACA;;AACA;;AACA;;AACA;;AAEA;;AACA;;AAEA;;;;;;;;;;;;;;;;AA8BA,IAAMA,iBAAgC,GAAG;AACvCC,EAAAA,OAAO,EAAE,CAD8B;AAEvCC,EAAAA,aAAa,EAAE;AAFwB,CAAzC;;AAKA,IAAMC,eAAe,GAAG,SAAlBA,eAAkB;AAAA,uBACtBC,IADsB;AAAA,MACtBA,IADsB,0BACf,IADe;AAAA,uBAEtBC,IAFsB;AAAA,MAEtBA,IAFsB,0BAEf,IAFe;AAAA,SAMJ,CAACD,IAAD,EAAOC,IAAP,EAAa;AAAEC,IAAAA,OAAO,EAAE;AAAX,GAAb,EAAgC,YAAM,CAAE,CAAxC,EAA0C,CAAC,CAA3C,CANI;AAAA,CAAxB;AAQA;;;AAEA,IAAMC,aAAa,GAAG,SAAhBA,aAAgB,CAACC,KAAD,EAA+B;AACnD,MAAQC,WAAR,GAAiED,KAAjE,CAAQC,WAAR;AAAA,MAAqBC,cAArB,GAAiEF,KAAjE,CAAqBE,cAArB;AAAA,MAAqCC,YAArC,GAAiEH,KAAjE,CAAqCG,YAArC;AAAA,MAAmDC,SAAnD,GAAiEJ,KAAjE,CAAmDI,SAAnD;AAEA,MAAMC,SAAS,GAAG,mBAA4B,IAA5B,CAAlB;AACA,MAAMC,aAAa,GAAG,mBAA0BL,WAA1B,CAAtB;AAEA,wBAAU,YAAM;AACdK,IAAAA,aAAa,CAACR,OAAd,GAAwBG,WAAxB;AACD,GAFD,EAEG,CAACA,WAAD,CAFH;AAIA,MAAMM,YAAY,GAAG,mBAAOH,SAAP,CAArB;AACA,wBAAU,YAAM;AACdG,IAAAA,YAAY,CAACT,OAAb,GAAuBM,SAAvB;AACD,GAFD,EAEG,CAACA,SAAD,CAFH,EAXmD,CAenD;AACA;;AACA,MAAMI,mBAAmB,GAAG,6BAAYP,WAAZ,aAAYA,WAAZ,uBAAYA,WAAW,CAAEQ,IAAb,CAAkB,CAAlB,CAAZ,CAA5B,CAjBmD,CAmBnD;AACA;AACA;;AACA,MAAMC,+BAA+B,GAAG,qCACtCT,WADsC,aACtCA,WADsC,uBACtCA,WAAW,CAAEU,IAAb,CAAkBC,GADoB,CAAxC,CAtBmD,CA0BnD;;AACA,MAAMC,QAAQ,GAAG,oBAAQ,YAAM;AAC7B,QAAI,CAACZ,WAAD,IAAgB,CAACO,mBAArB,EAA0C,OAAO,IAAP;AAC1C,QAAQM,CAAR,GAAiBZ,cAAjB,CAAQY,CAAR;AAAA,QAAWC,CAAX,GAAiBb,cAAjB,CAAWa,CAAX;AACA,QAAQC,SAAR,GAAkCR,mBAAlC,CAAQQ,SAAR;AAAA,QAAmBC,UAAnB,GAAkCT,mBAAlC,CAAmBS,UAAnB;AACA,WAAO;AACLH,MAAAA,CAAC,EAAEA,CAAC,GAAGb,WAAW,CAACY,QAAZ,CAAqBC,CAAzB,GAA6BE,SAAS,GAAG,CADvC;AAELD,MAAAA,CAAC,EAAEA,CAAC,GAAGd,WAAW,CAACY,QAAZ,CAAqBE,CAAzB,GAA6BE,UAAU,GAAG;AAFxC,KAAP;AAID,GARgB,EAQd,CAACf,cAAD,EAAiBD,WAAjB,EAA8BO,mBAA9B,CARc,CAAjB,CA3BmD,CAqCnD;;AACA,MAAMU,YAAY,GAAG,iCAAgBV,mBAAhB,CAArB,CAtCmD,CAwCnD;;AACA,MAAMW,UAAU,GAAG,+BAAcN,QAAd,EAAwBV,YAAxB,CAAnB;AAEA,MAAMiB,QAAQ,GAAG,6BAAYP,QAAZ,EAAsBZ,WAAtB,EAAmCiB,YAAnC,CAAjB;AAEA,MAAMG,aAAa,GAAG,wBAAY,UAACV,IAAD,EAAiBF,IAAjB,EAAwC;AACxE,+BAA4BA,IAA5B;AAAA,QAAea,SAAf;;AACAhB,IAAAA,aAAa,CAACR,OAAd,GAAwB;AAAEa,MAAAA,IAAI,EAAJA,IAAF;AAAQF,MAAAA,IAAI,EAAJA;AAAR,KAAxB;AACAJ,IAAAA,SAAS,CAACP,OAAV,GAAoB;AAAEyB,MAAAA,EAAE,EAAEZ,IAAI,CAACY,EAAX;AAAeC,MAAAA,KAAK,EAAEF;AAAtB,KAApB;AACD,GAJqB,EAInB,EAJmB,CAAtB;AAMA,MAAMG,eAAe,GAAG,wBAAY,YAAM;AACxCnB,IAAAA,aAAa,CAACR,OAAd,GAAwB,IAAxB;AACAO,IAAAA,SAAS,CAACP,OAAV,GAAoB,IAApB;AACD,GAHuB,EAGrB,EAHqB,CAAxB,CAnDmD,CAwDnD;;AACA,MAAM4B,iBAAiB,GAAG,wBAAY,YAAM;AAC1C,QACE,CAACP,UAAD,IACA,CAACA,UAAU,CAACP,GAAX,CAAed,OADhB,IAEA,CAACU,mBAFD,IAGA,CAACE,+BAJH,EAKE;AACA,aAAO,IAAP;AACD;;AACD,QAAQiB,KAAR,GAAgDnB,mBAAhD,CAAQmB,KAAR;AAAA,QAAeC,KAAf,GAAgDpB,mBAAhD,CAAeoB,KAAf;AAAA,QAAsBZ,SAAtB,GAAgDR,mBAAhD,CAAsBQ,SAAtB;AAAA,QAAiCC,UAAjC,GAAgDT,mBAAhD,CAAiCS,UAAjC;AACA,QAAQY,cAAR,GAA0CnB,+BAA1C,CAAQmB,cAAR;AAAA,QAAwBC,aAAxB,GAA0CpB,+BAA1C,CAAwBoB,aAAxB;;AACA,4BAAkC,mCAAiBX,UAAU,CAACP,GAAX,CAAed,OAAhC,CAAlC;AAAA,QAAQiC,UAAR,qBAAQA,UAAR;AAAA,QAAoBC,SAApB,qBAAoBA,SAApB;;AACA,WAAO;AACLlB,MAAAA,CAAC,EAAEa,KAAK,GAAGX,SAAS,GAAG,CAApB,GAAwBa,cAAxB,GAAyCE,UADvC;AAELhB,MAAAA,CAAC,EAAEa,KAAK,GAAGX,UAAU,GAAG,CAArB,GAAyBa,aAAzB,GAAyCE;AAFvC,KAAP;AAID,GAhByB,EAgBvB,CAACtB,+BAAD,EAAkCF,mBAAlC,EAAuDW,UAAvD,CAhBuB,CAA1B;AAkBA,MAAMc,oBAAoB,GAAG,mBAAOP,iBAAP,CAA7B;AACA,wBAAU,YAAM;AACdO,IAAAA,oBAAoB,CAACnC,OAArB,GAA+B4B,iBAA/B;AACD,GAFD,EAEG,CAACA,iBAAD,CAFH,EA5EmD,CAgFnD;;AACA,wBAAU,YAAM;AACd,QAAI,CAACzB,WAAL,EAAkB,OAAO,YAAM,CAAE,CAAf;;AAClB,2CAAoCA,WAAW,CAACQ,IAAhD;AAAA,QAAayB,mBAAb;;AACAA,IAAAA,mBAAmB,CAAC1C,iBAAD,CAAnB;AACA,WAAO;AAAA,aAAM0C,mBAAmB,CAAC,EAAD,CAAzB;AAAA,KAAP;AACD,GALD,EAKG,CAACjC,WAAD,CALH,EAjFmD,CAwFnD;AACA;;AACA,MAAMkC,eAAe,GAAG,8BAAa;AACnClC,IAAAA,WAAW,EAAXA,WADmC;AAEnCkB,IAAAA,UAAU,EAAVA,UAFmC;AAGnCX,IAAAA,mBAAmB,EAAnBA;AAHmC,GAAb,CAAxB;AAMA,MAAM4B,gBAAgB,GAAG,wBAAY,YAAM;AACzC,QAAI,CAACnC,WAAL,EAAkB;AAClB,QAAMoC,cAAc,GAAG/B,aAAa,CAACR,OAArC,CAFyC,CAEK;AAE9C;;AACA,QACEuC,cAAc,IACdA,cAAc,CAAC1B,IAAf,KAAwBV,WAAW,CAACU,IADpC,IAEAQ,UAAU,KAAKlB,WAAW,CAACU,IAH7B,EAIE;AACAS,MAAAA,QAAQ,CAAC;AACPT,QAAAA,IAAI,EAAE0B,cAAc,CAAC1B,IADd;AAEP2B,QAAAA,SAAS,EAAED,cAAc,CAAC5B,IAFnB;AAGP8B,QAAAA,IAAI,EAAE,MAHC;AAIPC,QAAAA,WAAW,EAAE;AAJN,OAAD,CAAR;AAMAf,MAAAA,eAAe;AAChB,KAjBwC,CAmBzC;;;AACA,QACEY,cAAc,IACdA,cAAc,CAAC1B,IAAf,KAAwBV,WAAW,CAACU,IADpC,IAEAQ,UAAU,KAAKkB,cAAc,CAAC1B,IAHhC,EAIE;AACAS,MAAAA,QAAQ,CAAC;AACPT,QAAAA,IAAI,EAAE0B,cAAc,CAAC1B,IADd;AAEP2B,QAAAA,SAAS,EAAED,cAAc,CAAC5B,IAFnB;AAGP8B,QAAAA,IAAI,EAAE,MAHC;AAIPC,QAAAA,WAAW,EAAE,IAJN;AAKPC,QAAAA,iBAAiB,EAAE;AALZ,OAAD,CAAR;AAOAN,MAAAA,eAAe;AACfV,MAAAA,eAAe;AAChB,KAlCwC,CAoCzC;;;AACA,QAAI,CAACY,cAAD,IAAmBlB,UAAU,KAAKlB,WAAW,CAACU,IAAlD,EAAwD;AACtD,UAAM+B,IAAI,GAAGvB,UAAU,CAACwB,OAAX,EAAb;AACA,UAAI,CAACD,IAAL,EAAW;AACX,UAAMjC,IAAI,GAAGW,QAAQ,CAAC;AACpBT,QAAAA,IAAI,EAAEQ,UADc;AAEpBmB,QAAAA,SAAS,EAAEI,IAFS;AAGpBH,QAAAA,IAAI,EAAE;AAHc,OAAD,CAArB;AAKAlB,MAAAA,aAAa,CAACF,UAAD,EAAaV,IAAb,CAAb;AACA;AACD,KA/CwC,CAiDzC;;;AACA,QACEU,UAAU,IACVA,UAAU,KAAKlB,WAAW,CAACU,IAD3B,IAEA,CAAA0B,cAAc,SAAd,IAAAA,cAAc,WAAd,YAAAA,cAAc,CAAE1B,IAAhB,MAAyBQ,UAH3B,EAIE;AACA,UAAMuB,KAAI,GAAGvB,UAAU,CAACwB,OAAX,EAAb;;AACA,UAAI,CAACD,KAAL,EAAW;;AACX,UAAMjC,MAAI,GAAGW,QAAQ,CAAC;AACpBT,QAAAA,IAAI,EAAEQ,UADc;AAEpBmB,QAAAA,SAAS,EAAEI,KAFS;AAGpBH,QAAAA,IAAI,EAAE,IAHc;AAIpBE,QAAAA,iBAAiB,EAAE;AAJC,OAAD,CAArB;;AAMApB,MAAAA,aAAa,CAACF,UAAD,EAAaV,MAAb,CAAb;AACA;AACD,KAjEwC,CAmEzC;;;AACA,QACE4B,cAAc,IACdA,cAAc,CAAC1B,IAAf,KAAwBV,WAAW,CAACU,IADpC,IAEAQ,UAAU,KAAKlB,WAAW,CAACU,IAH7B,EAIE;AACA,UAAMiC,IAAI,GAAGzB,UAAU,CAAC0B,UAAX,GAAwB,GAAxB,GAA8B,GAA3C;;AACA,gDAAmCR,cAAc,CAAC5B,IAAlD;AAAA,UAAWqC,iBAAX;;AACA,UAAI,CAACA,iBAAiB,CAAChD,OAAvB,EAAgC;AAC9B;AACA;AACA;AACA;AACA,YAAMiD,cAAc,GAAGd,oBAAoB,CAACnC,OAArB,EAAvB;AACA,YAAI,CAACe,QAAD,IAAa,CAACkC,cAAlB,EAAkC;AAClC,YAAMC,YAAY,GAAGnC,QAAQ,CAAC+B,IAAD,CAAR,GAAiBG,cAAc,CAACH,IAAD,CAApD;;AACA,YAAII,YAAJ,EAAkB;AAChB,cAAMN,MAAI,GAAGvB,UAAU,CAACwB,OAAX,EAAb;;AACA,cAAI,CAACD,MAAD,IAAS,CAACA,MAAI,CAAC,CAAD,CAAJ,CAAQ5C,OAAtB,EAA+B;;AAC/B,cAAMW,MAAI,GAAGW,QAAQ,CAAC;AACpBT,YAAAA,IAAI,EAAEQ,UADc;AAEpBmB,YAAAA,SAAS,EAAE3C,eAAe,CAAC;AAAEC,cAAAA,IAAI,EAAE8C;AAAR,aAAD,CAFN;AAGpBH,YAAAA,IAAI,EAAE;AAHc,WAAD,CAArB;;AAKAlB,UAAAA,aAAa,CAACF,UAAD,EAAaV,MAAb,CAAb;AACD,SATD,MASO;AACL,cAAMwC,IAAI,GAAG9B,UAAU,CAAC+B,OAAX,EAAb;AACA,cAAI,CAACD,IAAD,IAAS,CAACA,IAAI,CAAC,CAAD,CAAJ,CAAQnD,OAAtB,EAA+B;;AAC/B,cAAMW,MAAI,GAAGW,QAAQ,CAAC;AACpBT,YAAAA,IAAI,EAAEQ,UADc;AAEpBmB,YAAAA,SAAS,EAAE3C,eAAe,CAAC;AAAEE,cAAAA,IAAI,EAAEoD;AAAR,aAAD,CAFN;AAGpBV,YAAAA,IAAI,EAAE;AAHc,WAAD,CAArB;;AAKAlB,UAAAA,aAAa,CAACF,UAAD,EAAaV,MAAb,CAAb;AACD;;AACD;AACD;;AACD,UAAM0C,kBAAkB,GAAG,6BAAYd,cAAc,CAAC5B,IAAf,CAAoB,CAApB,CAAZ,CAA3B;AACA,UAAM2C,QAAQ,GAAGjC,UAAU,CAAC0B,UAAX,GAAwB,MAAxB,GAAiC,KAAlD;AACA,UAAI,CAAChC,QAAD,IAAa,CAACsC,kBAAlB,EAAsC;AACtC,UAAME,QAAQ,GAAGxC,QAAQ,CAAC+B,IAAD,CAAR,GAAiBO,kBAAkB,CAACC,QAAD,CAApD;;AACA,UAAM3C,MAAI,GAAG4C,QAAQ,GACjBjC,QAAQ,CAAC;AACPT,QAAAA,IAAI,EAAEQ,UADC;AAEPmB,QAAAA,SAAS,EAAED,cAAc,CAAC5B,IAFnB;AAGP8B,QAAAA,IAAI,EAAE;AAHC,OAAD,CADS,GAMjBnB,QAAQ,CAAC;AACPT,QAAAA,IAAI,EAAEQ,UADC;AAEPmB,QAAAA,SAAS,EAAED,cAAc,CAAC5B,IAFnB;AAGP8B,QAAAA,IAAI,EAAE;AAHC,OAAD,CANZ;;AAWAlB,MAAAA,aAAa,CAACF,UAAD,EAAaV,MAAb,CAAb;AACA;AACD,KAzHwC,CA2HzC;;;AACA,QACEU,UAAU,IACVA,UAAU,KAAKlB,WAAW,CAACU,IAD3B,IAEA,CAAA0B,cAAc,SAAd,IAAAA,cAAc,WAAd,YAAAA,cAAc,CAAE1B,IAAhB,MAAyBQ,UAH3B,EAIE;AACA,UAAMyB,KAAI,GAAGzB,UAAU,CAAC0B,UAAX,GAAwB,GAAxB,GAA8B,GAA3C;;AACA,UAAMM,mBAAkB,GAAG,6BAAYd,cAAc,CAAC5B,IAAf,CAAoB,CAApB,CAAZ,CAA3B;;AACA,UAAM2C,SAAQ,GAAGjC,UAAU,CAAC0B,UAAX,GAAwB,MAAxB,GAAiC,KAAlD;;AACA,UAAI,CAAChC,QAAD,IAAa,CAACsC,mBAAlB,EAAsC;;AACtC,UAAME,SAAQ,GAAGxC,QAAQ,CAAC+B,KAAD,CAAR,GAAiBO,mBAAkB,CAACC,SAAD,CAApD;;AACA,UAAM3C,MAAI,GAAG4C,SAAQ,GACjBjC,QAAQ,CAAC;AACPT,QAAAA,IAAI,EAAEQ,UADC;AAEPmB,QAAAA,SAAS,EAAED,cAAc,CAAC5B,IAFnB;AAGP8B,QAAAA,IAAI,EAAE,IAHC;AAIPE,QAAAA,iBAAiB,EAAE;AAJZ,OAAD,CADS,GAOjBrB,QAAQ,CAAC;AACPT,QAAAA,IAAI,EAAEQ,UADC;AAEPmB,QAAAA,SAAS,EAAED,cAAc,CAAC5B,IAFnB;AAGP8B,QAAAA,IAAI,EAAE,MAHC;AAIPE,QAAAA,iBAAiB,EAAE;AAJZ,OAAD,CAPZ;;AAaApB,MAAAA,aAAa,CAACF,UAAD,EAAaV,MAAb,CAAb;AACD;AACF,GArJwB,EAqJtB,CACDR,WADC,EAEDkB,UAFC,EAGDC,QAHC,EAIDK,eAJC,EAKDU,eALC,EAMDd,aANC,EAODR,QAPC,CArJsB,CAAzB,CAhGmD,CA+PnD;;AACA,wBAAU,YAAM;AACduB,IAAAA,gBAAgB;AACjB,GAFD,EAEG,CAACA,gBAAD,CAFH,EAhQmD,CAoQnD;;AACA,qBAAoC,8BAAYA,gBAAZ,EAA8B,GAA9B,CAApC;AAAA;AAAA,MAAOkB,yBAAP;;AACA,4BAASnC,UAAT,aAASA,UAAT,uBAASA,UAAU,CAAEP,GAArB,EAAiC,QAAjC,EAA2C0C,yBAA3C;AACA,4BAASC,MAAT,EAAiB,QAAjB,EAA2BD,yBAA3B,EAvQmD,CAyQnD;;AACA,wBAAU,YAAM;AACd,QAAI,CAACrD,WAAL,EAAkB,OAAO,YAAM,CAAE,CAAf;;AAClB,4CAAmCA,WAAW,CAACQ,IAA/C;AAAA,QAAe+C,gBAAf;;AACA,WAAO,YAAM;AACX,UAAMC,UAAU,GAAGnD,aAAa,CAACR,OAAjC,CADW,CAGX;AACA;;AACA,UAAI2D,UAAU,IAAIA,UAAU,CAAC9C,IAAX,KAAoBV,WAAW,CAACU,IAAlD,EAAwD;AACtD,YAAM+B,MAAI,GAAGe,UAAU,CAAC9C,IAAX,CAAgBgC,OAAhB,EAAb;;AACA,YAAI,CAACD,MAAL,EAAW;AACX,YAAIjC,IAAI,GAAGiC,MAAX;;AACA,eAAO,IAAP,EAAa;AACX,uBAA4CjC,IAA5C;AAAA;AAAA,cAAOb,IAAP;AAAA,cAAiB8D,YAAjB;AAAA,cAA+BpC,SAA/B;;AACAoC,UAAAA,YAAY,CAAC,EAAD,CAAZ;AACA,cAAI,CAAC9D,IAAD,IAAS0B,SAAS,IAAIkC,gBAA1B,EAA4C;AAC5C/C,UAAAA,IAAI,GAAGb,IAAP;AACD;AACF,OAfU,CAiBX;AACA;;;AACA,UAAM8C,IAAI,GAAGzC,WAAW,CAACU,IAAZ,CAAiBgC,OAAjB,EAAb;;AACA,UAAI,CAAAc,UAAU,SAAV,IAAAA,UAAU,WAAV,YAAAA,UAAU,CAAE9C,IAAZ,MAAqBV,WAAW,CAACU,IAAjC,IAAyC+B,IAA7C,EAAmD;AACjD,YAAIjC,MAAI,GAAGiC,IAAX;;AACA,eAAO,IAAP,EAAa;AACX,wBAA4CjC,MAA5C;AAAA;AAAA,cAAOb,KAAP;AAAA,cAAiB8D,aAAjB;AAAA,cAA+BpC,UAA/B;;AACAoC,UAAAA,aAAY,CAAC,EAAD,CAAZ;;AACA,cAAI,CAAC9D,KAAD,IAAS0B,UAAS,IAAIkC,gBAA1B,EAA4C;AAC5C/C,UAAAA,MAAI,GAAGb,KAAP;AACD;AACF;;AAED,UAAI,CAAC6D,UAAL,EAAiB;;AACjB,4CAAoDA,UAAU,CAAChD,IAA/D;AAAA,UAAakD,kBAAb;AAAA,UAAiCC,eAAjC;;AACA,UAAIA,eAAe,GAAGJ,gBAAtB,EAAwC;AACtC,YAAM/C,OAAN,GAAegD,UAAf,CAAMhD,IAAN;;AACA,eAAO,IAAP,EAAa;AACX,wBAA4CA,OAA5C;AAAA;AAAA,cAAOb,MAAP;AAAA,cAAiB8D,cAAjB;AAAA,cAA+BpC,WAA/B;;AACAoC,UAAAA,cAAY,CAAC,EAAD,CAAZ;;AACA,cAAI,CAAC9D,MAAD,IAAS0B,WAAS,GAAGkC,gBAAzB,EAA2C;AAC3C/C,UAAAA,OAAI,GAAGb,MAAP;AACD;AACF;;AACD,UAAIgE,eAAe,GAAGJ,gBAAtB,EAAwC;AACtC,YAAM/C,OAAN,GAAegD,UAAf,CAAMhD,IAAN;;AACA,eAAO,IAAP,EAAa;AACX,wBAA4CA,OAA5C;AAAA;AAAA,cAASZ,IAAT;AAAA,cAAiB6D,cAAjB;AAAA,cAA+BpC,WAA/B;;AACAoC,UAAAA,cAAY,CAAC,EAAD,CAAZ;;AACA,cAAI,CAAC7D,IAAD,IAASyB,WAAS,GAAGkC,gBAAzB,EAA2C;AAC3C/C,UAAAA,OAAI,GAAGZ,IAAP;AACD;AACF;;AACD,UAAI+D,eAAe,KAAKJ,gBAAxB,EAA0C;AACxCG,QAAAA,kBAAkB,CAAC,EAAD,CAAlB;AACD;AACF,KArDD;AAsDD,GAzDD,EAyDG,CAAC1D,WAAD,CAzDH,EA1QmD,CAqUnD;;AACA,wBAAU,YAAM;AACd,QAAI,CAACA,WAAL,EAAkB,OAAO,YAAM,CAAE,CAAf;;AAClB,4CAAmCA,WAAW,CAACQ,IAA/C;AAAA,QAAe+C,gBAAf;;AACA,QAAMK,MAAM,GAAG,SAATA,MAAS,CAACC,SAAD,EAA0B;AAAA;;AACvC,UAAQC,QAAR,GAA4BD,SAA5B,CAAQC,QAAR;AAAA,UAAkBvC,KAAlB,GAA4BsC,SAA5B,CAAkBtC,KAAlB;AACA,UAAMiC,UAAU,GAAGnD,aAAa,CAACR,OAAjC,CAFuC,CAIvC;;AACA,UACE,0BAAAQ,aAAa,CAACR,OAAd,gFAAuBa,IAAvB,MAAgCV,WAAW,CAACU,IAA5C,IACAa,KAAK,GAAGgC,gBAFV,EAGE;AACAO,QAAAA,QAAQ,CAAC7C,YAAY,CAAC,IAAD,EAAOjB,WAAW,CAACU,IAAZ,CAAiBkC,UAAxB,CAAb,CAAR;AACA;AACD;;AAED,UAAI,CAACY,UAAD,IAAe,CAACA,UAAU,CAAChD,IAA/B,EAAqC;;AACrC,6CAAkCgD,UAAU,CAAChD,IAA7C;AAAA,UAAemD,eAAf,wBAduC,CAevC;;;AACA,UAAIpC,KAAK,KAAKgC,gBAAd,EAAgC;AAC9BO,QAAAA,QAAQ,CAACvE,iBAAD,CAAR;AACA;AACD,OAnBsC,CAoBvC;;;AACA,UAAIgC,KAAK,GAAGgC,gBAAR,IAA4BhC,KAAK,GAAGoC,eAAxC,EAAyD;AACvDG,QAAAA,QAAQ,CAAC7C,YAAY,CAAC,IAAD,EAAOuC,UAAU,CAAC9C,IAAX,CAAgBkC,UAAvB,CAAb,CAAR;AACD,OAFD,MAEO,IAAIrB,KAAK,GAAGgC,gBAAR,IAA4BhC,KAAK,GAAGoC,eAAxC,EAAyD;AAC9DG,QAAAA,QAAQ,CAAC7C,YAAY,CAAC,MAAD,EAASuC,UAAU,CAAC9C,IAAX,CAAgBkC,UAAzB,CAAb,CAAR;AACD;AACF,KA1BD;;AA2BA5C,IAAAA,WAAW,CAACU,IAAZ,CAAiBqD,WAAjB,CAA6BH,MAA7B;AACA,WAAO;AAAA,aAAM5D,WAAW,CAACU,IAAZ,CAAiBsD,cAAjB,CAAgCJ,MAAhC,CAAN;AAAA,KAAP;AACD,GAhCD,EAgCG,CAAC5D,WAAD,EAAciB,YAAd,CAhCH;AAkCA,wBAAU,YAAM;AACd,QAAI,CAACjB,WAAD,IAAgB,CAACkB,UAAjB,IAA+BA,UAAU,KAAKlB,WAAW,CAACU,IAA9D,EAAoE;AAClE,aAAO,YAAM,CAAE,CAAf;AACD;;AACD,QAAMkD,MAAM,GAAG,SAATA,MAAS,CAACC,SAAD,EAA0B;AACvC,UAAQC,QAAR,GAA4BD,SAA5B,CAAQC,QAAR;AAAA,UAAkBvC,KAAlB,GAA4BsC,SAA5B,CAAkBtC,KAAlB;AACA,UAAMiC,UAAU,GAAGnD,aAAa,CAACR,OAAjC;AACA,UAAI,CAAC2D,UAAL,EAAiB;;AACjB,6CAAkCA,UAAU,CAAChD,IAA7C;AAAA,UAAemD,eAAf;;AACA,UAAIpC,KAAK,GAAGoC,eAAZ,EAA6B;AAC7BG,MAAAA,QAAQ,CAAC7C,YAAY,CAAC,MAAD,EAASC,UAAU,CAAC0B,UAApB,CAAb,CAAR;AACD,KAPD;;AAQA1B,IAAAA,UAAU,CAAC6C,WAAX,CAAuBH,MAAvB;AACA,WAAO;AAAA,aAAM1C,UAAU,CAAC8C,cAAX,CAA0BJ,MAA1B,CAAN;AAAA,KAAP;AACD,GAdD,EAcG,CAAC5D,WAAD,EAAciB,YAAd,EAA4BC,UAA5B,CAdH,EAxWmD,CAwXnD;;AACA,wBAAU,YAAM;AACd,QAAI,CAAClB,WAAL,EAAkB,OAAO,YAAM,CAAE,CAAf;AAClB,WAAO,YAAM;AACX;AACA,UAAMiE,MAAM,GAAG7D,SAAS,CAACP,OAAzB;AACA,UAAI,CAACoE,MAAL,EAAa;;AACb,8CAAmCjE,WAAW,CAACQ,IAA/C;AAAA,UAAe+C,gBAAf;;AACA,UAAMW,OAAO,GAAG;AAAE5C,QAAAA,EAAE,EAAEtB,WAAW,CAACU,IAAZ,CAAiBY,EAAvB;AAA2BC,QAAAA,KAAK,EAAEgC;AAAlC,OAAhB;AACA,UAAIW,OAAO,CAAC5C,EAAR,KAAe2C,MAAM,CAAC3C,EAAtB,IAA4B4C,OAAO,CAAC3C,KAAR,KAAkB0C,MAAM,CAAC1C,KAAzD,EAAgE;AAChEjB,MAAAA,YAAY,CAACT,OAAb,CAAqBqE,OAArB,EAA8BD,MAA9B;AACD,KARD;AASD,GAXD,EAWG,CAACjE,WAAD,CAXH;AAYD,CArYD;;eAuYeF,a","sourcesContent":["import { Position } from '@os-design/use-drag';\nimport {\n CSSProperties,\n RefObject,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n} from 'react';\nimport useThrottle from '@os-design/use-throttle';\nimport useEvent from '@os-design/use-event';\nimport NodeList, { ExistingNode, Node, NodeProps } from './NodeList';\nimport ListStore from './ListStore';\nimport getElementScroll from './getElementScroll';\nimport useTargetList from './useTargetList';\nimport useInitRect from './useInitRect';\nimport useInitScrollOffset from './useInitScrollOffset';\nimport useGetNodeStyle from './useGetNodeStyle';\n// eslint-disable-next-line import/no-cycle\nimport useMoveNode from './useMoveNode';\nimport getNodeRect from './getNodeRect';\n// eslint-disable-next-line import/no-cycle\nimport useBlankNode from './useBlankNode';\n\nexport interface DraggedNode {\n list: NodeList;\n node: ExistingNode;\n position: Position;\n}\n\ninterface TargetNode {\n list: NodeList;\n node: ExistingNode;\n}\n\nexport interface ItemLocation {\n id: string;\n index: number;\n}\n\nexport type DragEndHandler = (\n dragged: ItemLocation,\n target: ItemLocation\n) => void;\n\ninterface UseDragEffectProps {\n draggedNode: DraggedNode | null;\n cursorPosition: Position;\n listStoreRef: RefObject<ListStore>;\n onDragEnd: DragEndHandler;\n}\n\nconst HIDDEN_NODE_STYLE: CSSProperties = {\n opacity: 0,\n pointerEvents: 'none',\n};\n\nconst createEmptyNode = ({\n prev = null,\n next = null,\n}: {\n prev?: Node;\n next?: Node;\n}): ExistingNode => [prev, next, { current: null }, () => {}, -1];\n\n/* eslint-disable @typescript-eslint/no-explicit-any,no-constant-condition */\n\nconst useDragEffect = (props: UseDragEffectProps) => {\n const { draggedNode, cursorPosition, listStoreRef, onDragEnd } = props;\n\n const targetRef = useRef<ItemLocation | null>(null);\n const targetNodeRef = useRef<TargetNode | null>(draggedNode);\n\n useEffect(() => {\n targetNodeRef.current = draggedNode;\n }, [draggedNode]);\n\n const onDragEndRef = useRef(onDragEnd);\n useEffect(() => {\n onDragEndRef.current = onDragEnd;\n }, [onDragEnd]);\n\n // The initial bounds of the dragged node.\n // We can't read the bounds of the dragged node on the fly because the node can be unmounted in the virtual list.\n const initDraggedNodeRect = useInitRect(draggedNode?.node[2]);\n\n // The initial scroll position of the list where the dragged node is located.\n // Used to detect the actual position of the dragged node.\n // The purpose is the same as with initDraggedNodeRect.\n const initDraggedNodeListScrollOffset = useInitScrollOffset(\n draggedNode?.list.ref\n );\n\n // The central position of the dragged node\n const position = useMemo(() => {\n if (!draggedNode || !initDraggedNodeRect) return null;\n const { x, y } = cursorPosition;\n const { initWidth, initHeight } = initDraggedNodeRect;\n return {\n x: x - draggedNode.position.x + initWidth / 2,\n y: y - draggedNode.position.y + initHeight / 2,\n };\n }, [cursorPosition, draggedNode, initDraggedNodeRect]);\n\n // Returns the style for moving the node in the specified direction\n const getNodeStyle = useGetNodeStyle(initDraggedNodeRect);\n\n // The list in which the cursor is located\n const targetList = useTargetList(position, listStoreRef);\n\n const moveNode = useMoveNode(position, draggedNode, getNodeStyle);\n\n const setTargetNode = useCallback((list: NodeList, node: ExistingNode) => {\n const [, , , , nodeIndex] = node;\n targetNodeRef.current = { list, node };\n targetRef.current = { id: list.id, index: nodeIndex };\n }, []);\n\n const clearTargetNode = useCallback(() => {\n targetNodeRef.current = null;\n targetRef.current = null;\n }, []);\n\n // Returns the central position of the dragged node in the list\n const getDraggedNodePos = useCallback(() => {\n if (\n !targetList ||\n !targetList.ref.current ||\n !initDraggedNodeRect ||\n !initDraggedNodeListScrollOffset\n ) {\n return null;\n }\n const { initX, initY, initWidth, initHeight } = initDraggedNodeRect;\n const { initScrollLeft, initScrollTop } = initDraggedNodeListScrollOffset;\n const { scrollLeft, scrollTop } = getElementScroll(targetList.ref.current);\n return {\n x: initX + initWidth / 2 + initScrollLeft - scrollLeft,\n y: initY + initHeight / 2 + initScrollTop - scrollTop,\n };\n }, [initDraggedNodeListScrollOffset, initDraggedNodeRect, targetList]);\n\n const getDraggedNodePosRef = useRef(getDraggedNodePos);\n useEffect(() => {\n getDraggedNodePosRef.current = getDraggedNodePos;\n }, [getDraggedNodePos]);\n\n // Hide the dragged node\n useEffect(() => {\n if (!draggedNode) return () => {};\n const [, , , draggedNodeSetStyle] = draggedNode.node;\n draggedNodeSetStyle(HIDDEN_NODE_STYLE);\n return () => draggedNodeSetStyle({});\n }, [draggedNode]);\n\n // Append the blank node to the list to increase the height of it.\n // Used when the dragged node is located inside another list.\n const removeBlankNode = useBlankNode({\n draggedNode,\n targetList,\n initDraggedNodeRect,\n });\n\n const updateTargetNode = useCallback(() => {\n if (!draggedNode) return;\n const prevTargetNode = targetNodeRef.current; // The last updated node\n\n // Dragging outside the list\n if (\n prevTargetNode &&\n prevTargetNode.list === draggedNode.list &&\n targetList !== draggedNode.list\n ) {\n moveNode({\n list: prevTargetNode.list,\n startNode: prevTargetNode.node,\n type: 'down',\n untilTheEnd: true,\n });\n clearTargetNode();\n }\n\n // Dragging outside another list\n if (\n prevTargetNode &&\n prevTargetNode.list !== draggedNode.list &&\n targetList !== prevTargetNode.list\n ) {\n moveNode({\n list: prevTargetNode.list,\n startNode: prevTargetNode.node,\n type: 'down',\n untilTheEnd: true,\n insideAnotherList: true,\n });\n removeBlankNode();\n clearTargetNode();\n }\n\n // Dragging inside the list\n if (!prevTargetNode && targetList === draggedNode.list) {\n const tail = targetList.getTail();\n if (!tail) return;\n const node = moveNode({\n list: targetList,\n startNode: tail,\n type: 'up',\n });\n setTargetNode(targetList, node);\n return;\n }\n\n // Dragging inside another list\n if (\n targetList &&\n targetList !== draggedNode.list &&\n prevTargetNode?.list !== targetList\n ) {\n const tail = targetList.getTail();\n if (!tail) return;\n const node = moveNode({\n list: targetList,\n startNode: tail,\n type: 'up',\n insideAnotherList: true,\n });\n setTargetNode(targetList, node);\n return;\n }\n\n // Dragging in the same list\n if (\n prevTargetNode &&\n prevTargetNode.list === draggedNode.list &&\n targetList === draggedNode.list\n ) {\n const axis = targetList.horizontal ? 'x' : 'y';\n const [, , prevTargetNodeRef, ,] = prevTargetNode.node;\n if (!prevTargetNodeRef.current) {\n // The target node was unmounted. It happens when the virtual list is used.\n // If the cursor is above the dragged node, we need to move the nodes down from the tail to the node where\n // the cursor is located. Otherwise, we need to move the nodes up from the head to the node where the cursor\n // is located.\n const draggedNodePos = getDraggedNodePosRef.current();\n if (!position || !draggedNodePos) return;\n const isDraggingUp = position[axis] < draggedNodePos[axis];\n if (isDraggingUp) {\n const tail = targetList.getTail();\n if (!tail || !tail[2].current) return;\n const node = moveNode({\n list: targetList,\n startNode: createEmptyNode({ prev: tail }),\n type: 'up',\n });\n setTargetNode(targetList, node);\n } else {\n const head = targetList.getHead();\n if (!head || !head[2].current) return;\n const node = moveNode({\n list: targetList,\n startNode: createEmptyNode({ next: head }),\n type: 'down',\n });\n setTargetNode(targetList, node);\n }\n return;\n }\n const prevTargetNodeRect = getNodeRect(prevTargetNode.node[2]);\n const rectProp = targetList.horizontal ? 'left' : 'top';\n if (!position || !prevTargetNodeRect) return;\n const isMoveUp = position[axis] < prevTargetNodeRect[rectProp];\n const node = isMoveUp\n ? moveNode({\n list: targetList,\n startNode: prevTargetNode.node,\n type: 'up',\n })\n : moveNode({\n list: targetList,\n startNode: prevTargetNode.node,\n type: 'down',\n });\n setTargetNode(targetList, node);\n return;\n }\n\n // Dragging in another list\n if (\n targetList &&\n targetList !== draggedNode.list &&\n prevTargetNode?.list === targetList\n ) {\n const axis = targetList.horizontal ? 'x' : 'y';\n const prevTargetNodeRect = getNodeRect(prevTargetNode.node[2]);\n const rectProp = targetList.horizontal ? 'left' : 'top';\n if (!position || !prevTargetNodeRect) return;\n const isMoveUp = position[axis] < prevTargetNodeRect[rectProp];\n const node = isMoveUp\n ? moveNode({\n list: targetList,\n startNode: prevTargetNode.node,\n type: 'up',\n insideAnotherList: true,\n })\n : moveNode({\n list: targetList,\n startNode: prevTargetNode.node,\n type: 'down',\n insideAnotherList: true,\n });\n setTargetNode(targetList, node);\n }\n }, [\n draggedNode,\n targetList,\n moveNode,\n clearTargetNode,\n removeBlankNode,\n setTargetNode,\n position,\n ]);\n\n // Update the target node if either the position or the target list has been changed\n useEffect(() => {\n updateTargetNode();\n }, [updateTargetNode]);\n\n // Update the target node if the target list has been scrolled\n const [throttledUpdateTargetNode] = useThrottle(updateTargetNode, 100);\n useEvent(targetList?.ref as any, 'scroll', throttledUpdateTargetNode);\n useEvent(window, 'scroll', throttledUpdateTargetNode);\n\n // Reset styles of the nodes when the dragged node was dropped\n useEffect(() => {\n if (!draggedNode) return () => {};\n const [, , , , draggedNodeIndex] = draggedNode.node;\n return () => {\n const targetNode = targetNodeRef.current;\n\n // If the dragged node was inside another list, reset the styles for the nodes,\n // starting at the tail and ending with the dragged node.\n if (targetNode && targetNode.list !== draggedNode.list) {\n const tail = targetNode.list.getTail();\n if (!tail) return;\n let node = tail;\n while (true) {\n const [prev, , , nodeSetStyle, nodeIndex] = node;\n nodeSetStyle({});\n if (!prev || nodeIndex <= draggedNodeIndex) break;\n node = prev;\n }\n }\n\n // If the dragged node was outside the origin list, reset the styles for the nodes,\n // starting at the tail and ending with the dragged node.\n const tail = draggedNode.list.getTail();\n if (targetNode?.list !== draggedNode.list && tail) {\n let node = tail;\n while (true) {\n const [prev, , , nodeSetStyle, nodeIndex] = node;\n nodeSetStyle({});\n if (!prev || nodeIndex <= draggedNodeIndex) break;\n node = prev;\n }\n }\n\n if (!targetNode) return;\n const [, , , targetNodeSetStyle, targetNodeIndex] = targetNode.node;\n if (targetNodeIndex > draggedNodeIndex) {\n let { node } = targetNode;\n while (true) {\n const [prev, , , nodeSetStyle, nodeIndex] = node;\n nodeSetStyle({});\n if (!prev || nodeIndex < draggedNodeIndex) return;\n node = prev;\n }\n }\n if (targetNodeIndex < draggedNodeIndex) {\n let { node } = targetNode;\n while (true) {\n const [, next, , nodeSetStyle, nodeIndex] = node;\n nodeSetStyle({});\n if (!next || nodeIndex > draggedNodeIndex) return;\n node = next;\n }\n }\n if (targetNodeIndex === draggedNodeIndex) {\n targetNodeSetStyle({});\n }\n };\n }, [draggedNode]);\n\n // Update the position of the mounted nodes between the dragged and target nodes (used in virtual list)\n useEffect(() => {\n if (!draggedNode) return () => {};\n const [, , , , draggedNodeIndex] = draggedNode.node;\n const update = (nodeProps: NodeProps) => {\n const { setStyle, index } = nodeProps;\n const targetNode = targetNodeRef.current;\n\n // If the dragged node outside the origin list\n if (\n targetNodeRef.current?.list !== draggedNode.list &&\n index > draggedNodeIndex\n ) {\n setStyle(getNodeStyle('up', draggedNode.list.horizontal));\n return;\n }\n\n if (!targetNode || !targetNode.node) return;\n const [, , , , targetNodeIndex] = targetNode.node;\n // If the dragged node was mounted\n if (index === draggedNodeIndex) {\n setStyle(HIDDEN_NODE_STYLE);\n return;\n }\n // If the node between the dragged and target nodes was mounted\n if (index > draggedNodeIndex && index < targetNodeIndex) {\n setStyle(getNodeStyle('up', targetNode.list.horizontal));\n } else if (index < draggedNodeIndex && index > targetNodeIndex) {\n setStyle(getNodeStyle('down', targetNode.list.horizontal));\n }\n };\n draggedNode.list.addListener(update);\n return () => draggedNode.list.removeListener(update);\n }, [draggedNode, getNodeStyle]);\n\n useEffect(() => {\n if (!draggedNode || !targetList || targetList === draggedNode.list) {\n return () => {};\n }\n const update = (nodeProps: NodeProps) => {\n const { setStyle, index } = nodeProps;\n const targetNode = targetNodeRef.current;\n if (!targetNode) return;\n const [, , , , targetNodeIndex] = targetNode.node;\n if (index < targetNodeIndex) return;\n setStyle(getNodeStyle('down', targetList.horizontal));\n };\n targetList.addListener(update);\n return () => targetList.removeListener(update);\n }, [draggedNode, getNodeStyle, targetList]);\n\n // Call the onDragEnd callback if the draggedNode was changed to null\n useEffect(() => {\n if (!draggedNode) return () => {};\n return () => {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const target = targetRef.current;\n if (!target) return;\n const [, , , , draggedNodeIndex] = draggedNode.node;\n const dragged = { id: draggedNode.list.id, index: draggedNodeIndex };\n if (dragged.id === target.id && dragged.index === target.index) return;\n onDragEndRef.current(dragged, target);\n };\n }, [draggedNode]);\n};\n\nexport default useDragEffect;\n"],"file":"useDragEffect.js"}
|
|
1
|
+
{"version":3,"sources":["../../../src/utils/useDragEffect.ts"],"names":["HIDDEN_NODE_STYLE","opacity","pointerEvents","createEmptyNode","prev","next","current","useDragEffect","props","draggedNode","cursorPosition","listStoreRef","onDragEnd","targetRef","targetNodeRef","onDragEndRef","initDraggedNodeRect","node","undefined","initDraggedNodeListScrollOffset","list","ref","position","x","y","initWidth","initHeight","targetList","getNodeStyle","moveNode","setTargetNode","nodeIndex","id","index","clearTargetNode","getDraggedNodePos","initX","initY","initScrollLeft","initScrollTop","scrollLeft","scrollTop","getDraggedNodePosRef","draggedNodeSetStyle","removeBlankNode","updateTargetNode","prevTargetNode","startNode","direction","destination","isAnotherList","tail","getTail","axis","horizontal","prevTargetNodeRef","draggedNodePos","isDraggingUp","head","getHead","prevTargetNodeRect","startRectProp","isMoveUp","throttledUpdateTargetNode","window","draggedNodeIndex","targetNode","nodeSetStyle","targetNodeIndex","targetNodeSetStyle","update","nodeProps","setStyle","addListener","removeListener","target","dragged"],"mappings":"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","sourcesContent":["import { Position } from '@os-design/use-drag';\nimport {\n CSSProperties,\n RefObject,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n} from 'react';\nimport useThrottle from '@os-design/use-throttle';\nimport useEvent from '@os-design/use-event';\nimport NodeList, { ExistingNode, Node, NodeProps } from './NodeList';\nimport ListStore from './ListStore';\nimport getElementScroll from './getElementScroll';\nimport useTargetList from './useTargetList';\nimport useInitRect from './useInitRect';\nimport useInitScrollOffset from './useInitScrollOffset';\nimport useGetNodeStyle from './useGetNodeStyle';\nimport useMoveNode from './useMoveNode';\nimport getNodeRect from './getNodeRect';\nimport useBlankNode from './useBlankNode';\n\nexport interface DraggedNode {\n list: NodeList;\n node: ExistingNode;\n position: Position;\n}\n\ninterface TargetNode {\n list: NodeList;\n node: ExistingNode;\n}\n\nexport interface ItemLocation {\n id: string;\n index: number;\n}\n\nexport type DragEndHandler = (\n dragged: ItemLocation,\n target: ItemLocation\n) => void;\n\ninterface UseDragEffectProps {\n draggedNode: DraggedNode | null;\n cursorPosition: Position;\n listStoreRef: RefObject<ListStore>;\n onDragEnd: DragEndHandler;\n}\n\nconst HIDDEN_NODE_STYLE: CSSProperties = {\n opacity: 0,\n pointerEvents: 'none',\n};\n\nconst createEmptyNode = ({\n prev = null,\n next = null,\n}: {\n prev?: Node;\n next?: Node;\n}): ExistingNode => [prev, next, { current: null }, () => {}, -1];\n\n/* eslint-disable no-constant-condition */\n\nconst useDragEffect = (props: UseDragEffectProps) => {\n const { draggedNode, cursorPosition, listStoreRef, onDragEnd } = props;\n\n const targetRef = useRef<ItemLocation | null>(null);\n const targetNodeRef = useRef<TargetNode | null>(draggedNode);\n\n useEffect(() => {\n targetNodeRef.current = draggedNode;\n }, [draggedNode]);\n\n const onDragEndRef = useRef(onDragEnd);\n useEffect(() => {\n onDragEndRef.current = onDragEnd;\n }, [onDragEnd]);\n\n // The initial bounds of the dragged node.\n // We can't read the bounds of the dragged node on the fly because the node can be unmounted in the virtual list.\n const initDraggedNodeRect = useInitRect(\n draggedNode ? draggedNode.node[2] : undefined\n );\n\n // The initial scroll position of the list where the dragged node is located.\n // Used to detect the actual position of the dragged node. The purpose is the same as with initDraggedNodeRect.\n const initDraggedNodeListScrollOffset = useInitScrollOffset(\n draggedNode ? draggedNode.list.ref : undefined\n );\n\n // The central position of the dragged node\n const position = useMemo(() => {\n if (!draggedNode || !initDraggedNodeRect) return null;\n const { x, y } = cursorPosition;\n const { initWidth, initHeight } = initDraggedNodeRect;\n return {\n x: x - draggedNode.position.x + initWidth / 2,\n y: y - draggedNode.position.y + initHeight / 2,\n };\n }, [cursorPosition, draggedNode, initDraggedNodeRect]);\n\n // The list in which the cursor is located\n const targetList = useTargetList(position, listStoreRef);\n\n // Returns the style for moving the node in the specified direction\n const getNodeStyle = useGetNodeStyle(initDraggedNodeRect);\n\n // Moves the node up or down\n const moveNode = useMoveNode({ position, draggedNode, getNodeStyle });\n\n const setTargetNode = useCallback((list: NodeList, node: ExistingNode) => {\n const [, , , , nodeIndex] = node;\n targetNodeRef.current = { list, node };\n targetRef.current = { id: list.id, index: nodeIndex };\n }, []);\n\n const clearTargetNode = useCallback(() => {\n targetNodeRef.current = null;\n targetRef.current = null;\n }, []);\n\n // Returns the central position of the dragged node in the list\n const getDraggedNodePos = useCallback(() => {\n if (\n !targetList ||\n !targetList.ref.current ||\n !initDraggedNodeRect ||\n !initDraggedNodeListScrollOffset\n ) {\n return null;\n }\n const { initX, initY, initWidth, initHeight } = initDraggedNodeRect;\n const { initScrollLeft, initScrollTop } = initDraggedNodeListScrollOffset;\n const { scrollLeft, scrollTop } = getElementScroll(targetList.ref.current);\n return {\n x: initX + initWidth / 2 + initScrollLeft - scrollLeft,\n y: initY + initHeight / 2 + initScrollTop - scrollTop,\n };\n }, [initDraggedNodeListScrollOffset, initDraggedNodeRect, targetList]);\n\n const getDraggedNodePosRef = useRef(getDraggedNodePos);\n useEffect(() => {\n getDraggedNodePosRef.current = getDraggedNodePos;\n }, [getDraggedNodePos]);\n\n // Hide the dragged node\n useEffect(() => {\n if (!draggedNode) return () => {};\n const [, , , draggedNodeSetStyle] = draggedNode.node;\n draggedNodeSetStyle(HIDDEN_NODE_STYLE);\n return () => draggedNodeSetStyle({});\n }, [draggedNode]);\n\n // Append the blank node to the list to increase the height of it.\n // Used when the dragged node is located inside another list.\n const removeBlankNode = useBlankNode({\n draggedNode,\n targetList,\n initDraggedNodeRect,\n });\n\n const updateTargetNode = useCallback(() => {\n if (!draggedNode) return;\n const prevTargetNode = targetNodeRef.current; // The last updated node\n\n // Dragging outside the origin list\n if (\n prevTargetNode &&\n prevTargetNode.list === draggedNode.list &&\n targetList !== draggedNode.list\n ) {\n moveNode({\n list: prevTargetNode.list,\n startNode: prevTargetNode.node,\n direction: 'down',\n destination: 'end',\n });\n clearTargetNode();\n }\n\n // Dragging outside another list\n if (\n prevTargetNode &&\n prevTargetNode.list !== draggedNode.list &&\n targetList !== prevTargetNode.list\n ) {\n moveNode({\n list: prevTargetNode.list,\n startNode: prevTargetNode.node,\n direction: 'down',\n destination: 'end',\n isAnotherList: true,\n });\n removeBlankNode();\n clearTargetNode();\n }\n\n // Dragging inside the origin list\n if (!prevTargetNode && targetList === draggedNode.list) {\n const tail = targetList.getTail();\n if (!tail) return;\n const node = moveNode({\n list: targetList,\n startNode: tail,\n direction: 'up',\n destination: 'cursor',\n });\n setTargetNode(targetList, node);\n return;\n }\n\n // Dragging inside another list\n if (\n targetList &&\n targetList !== draggedNode.list &&\n (!prevTargetNode || prevTargetNode.list !== targetList)\n ) {\n const tail = targetList.getTail();\n if (!tail) return;\n const node = moveNode({\n list: targetList,\n startNode: tail,\n direction: 'up',\n destination: 'cursor',\n isAnotherList: true,\n });\n setTargetNode(targetList, node);\n return;\n }\n\n // Dragging in the origin list\n if (\n prevTargetNode &&\n prevTargetNode.list === draggedNode.list &&\n targetList === draggedNode.list\n ) {\n const axis = targetList.horizontal ? 'x' : 'y';\n const [, , prevTargetNodeRef, ,] = prevTargetNode.node;\n if (!prevTargetNodeRef.current) {\n // The target node was unmounted. It happens when the virtual list is used.\n // If the cursor is above the dragged node, we need to move the nodes down from the tail to the node where\n // the cursor is located. Otherwise, we need to move the nodes up from the head to the node where the cursor\n // is located.\n const draggedNodePos = getDraggedNodePosRef.current();\n if (!position || !draggedNodePos) return;\n const isDraggingUp = position[axis] < draggedNodePos[axis];\n if (isDraggingUp) {\n const tail = targetList.getTail();\n if (!tail || !tail[2].current) return;\n const node = moveNode({\n list: targetList,\n startNode: createEmptyNode({ prev: tail }),\n direction: 'up',\n destination: 'cursor',\n });\n setTargetNode(targetList, node);\n } else {\n const head = targetList.getHead();\n if (!head || !head[2].current) return;\n const node = moveNode({\n list: targetList,\n startNode: createEmptyNode({ next: head }),\n direction: 'down',\n destination: 'cursor',\n });\n setTargetNode(targetList, node);\n }\n return;\n }\n const prevTargetNodeRect = getNodeRect(prevTargetNode.node[2]);\n const startRectProp = targetList.horizontal ? 'left' : 'top';\n if (!position || !prevTargetNodeRect) return;\n const isMoveUp = position[axis] < prevTargetNodeRect[startRectProp];\n const node = isMoveUp\n ? moveNode({\n list: targetList,\n startNode: prevTargetNode.node,\n direction: 'up',\n destination: 'cursor',\n })\n : moveNode({\n list: targetList,\n startNode: prevTargetNode.node,\n direction: 'down',\n destination: 'cursor',\n });\n setTargetNode(targetList, node);\n return;\n }\n\n // Dragging in another list\n if (\n targetList &&\n targetList !== draggedNode.list &&\n prevTargetNode &&\n prevTargetNode.list === targetList\n ) {\n const axis = targetList.horizontal ? 'x' : 'y';\n const prevTargetNodeRect = getNodeRect(prevTargetNode.node[2]);\n const startRectProp = targetList.horizontal ? 'left' : 'top';\n if (!position || !prevTargetNodeRect) return;\n const isMoveUp = position[axis] < prevTargetNodeRect[startRectProp];\n const node = isMoveUp\n ? moveNode({\n list: targetList,\n startNode: prevTargetNode.node,\n direction: 'up',\n destination: 'cursor',\n isAnotherList: true,\n })\n : moveNode({\n list: targetList,\n startNode: prevTargetNode.node,\n direction: 'down',\n destination: 'cursor',\n isAnotherList: true,\n });\n setTargetNode(targetList, node);\n }\n }, [\n draggedNode,\n targetList,\n moveNode,\n clearTargetNode,\n removeBlankNode,\n setTargetNode,\n position,\n ]);\n\n // Update the target node if either the position or the target list has been changed\n useEffect(() => {\n updateTargetNode();\n }, [updateTargetNode]);\n\n // Update the target node if the target list has been scrolled\n const [throttledUpdateTargetNode] = useThrottle(updateTargetNode, 100);\n useEvent(\n (targetList ? targetList.ref : undefined) as unknown as EventTarget,\n 'scroll',\n throttledUpdateTargetNode\n );\n useEvent(window, 'scroll', throttledUpdateTargetNode);\n\n // Reset styles of the affected nodes when the dragged node was dropped\n useEffect(() => {\n if (!draggedNode) return () => {};\n const [, , , , draggedNodeIndex] = draggedNode.node;\n return () => {\n const targetNode = targetNodeRef.current;\n\n // If the dragged node was outside the origin list, reset the styles for the nodes,\n // starting at the tail and ending with the dragged node in the origin list.\n if (!targetNode || targetNode.list !== draggedNode.list) {\n const tail = draggedNode.list.getTail();\n if (tail) {\n let node = tail;\n while (true) {\n const [prev, , , nodeSetStyle, nodeIndex] = node;\n nodeSetStyle({});\n if (!prev || nodeIndex <= draggedNodeIndex) break;\n node = prev;\n }\n }\n }\n\n // If the dragged node was inside another list, reset the styles for the nodes,\n // starting at the tail and ending with the dragged node in the target list.\n if (targetNode && targetNode.list !== draggedNode.list) {\n const tail = targetNode.list.getTail();\n const [, , , , targetNodeIndex] = targetNode.node;\n if (tail) {\n let node = tail;\n while (true) {\n const [prev, , , nodeSetStyle, nodeIndex] = node;\n nodeSetStyle({});\n if (!prev || nodeIndex <= targetNodeIndex) break;\n node = prev;\n }\n }\n }\n\n // If the dragged node was moved inside the origin list, reset the styles for the nodes,\n // starting with target node and ending with the dragged node.\n if (targetNode && targetNode.list === draggedNode.list) {\n const [, , , targetNodeSetStyle, targetNodeIndex] = targetNode.node;\n if (targetNodeIndex > draggedNodeIndex) {\n let { node } = targetNode;\n while (true) {\n const [prev, , , nodeSetStyle, nodeIndex] = node;\n nodeSetStyle({});\n if (!prev || nodeIndex <= draggedNodeIndex) break;\n node = prev;\n }\n } else if (targetNodeIndex < draggedNodeIndex) {\n let { node } = targetNode;\n while (true) {\n const [, next, , nodeSetStyle, nodeIndex] = node;\n nodeSetStyle({});\n if (!next || nodeIndex >= draggedNodeIndex) break;\n node = next;\n }\n } else if (targetNodeIndex === draggedNodeIndex) {\n targetNodeSetStyle({});\n }\n }\n };\n }, [draggedNode]);\n\n // Update the position of the newly mounted nodes in the origin list (used in the virtual list)\n useEffect(() => {\n if (!draggedNode) return () => {};\n const [, , , , draggedNodeIndex] = draggedNode.node;\n\n const update = (nodeProps: NodeProps) => {\n const { setStyle, index } = nodeProps;\n const targetNode = targetNodeRef.current;\n\n // Set the hidden style, if the mounted node is the dragged node\n if (index === draggedNodeIndex) {\n setStyle(HIDDEN_NODE_STYLE);\n return;\n }\n\n // If the dragged node is inside the origin list\n if (targetNode && targetNode.list === draggedNode.list) {\n // Move the mounted node up/down, if it is located between the dragged and target node\n const [, , , , targetNodeIndex] = targetNode.node;\n if (index > draggedNodeIndex && index < targetNodeIndex) {\n setStyle(getNodeStyle('up', targetNode.list.horizontal));\n } else if (index < draggedNodeIndex && index > targetNodeIndex) {\n setStyle(getNodeStyle('down', targetNode.list.horizontal));\n }\n } else if (index > draggedNodeIndex) {\n // Otherwise, move the mounted node up, if it is located below the dragged node\n setStyle(getNodeStyle('up', draggedNode.list.horizontal));\n }\n };\n\n draggedNode.list.addListener(update);\n return () => draggedNode.list.removeListener(update);\n }, [draggedNode, getNodeStyle]);\n\n // Update the position of the newly mounted nodes in the target list (used in the virtual list)\n useEffect(() => {\n if (!draggedNode || !targetList || targetList === draggedNode.list) {\n return () => {};\n }\n\n const update = (nodeProps: NodeProps) => {\n const { setStyle, index } = nodeProps;\n const targetNode = targetNodeRef.current;\n if (!targetNode) return;\n const [, , , , targetNodeIndex] = targetNode.node;\n if (index >= targetNodeIndex) {\n // Move the mounted node down, if it is located below the target node or if it is the target node\n setStyle(getNodeStyle('down', targetList.horizontal));\n }\n };\n\n targetList.addListener(update);\n return () => targetList.removeListener(update);\n }, [draggedNode, getNodeStyle, targetList]);\n\n // Call the onDragEnd callback if the draggedNode was changed to null\n useEffect(() => {\n if (!draggedNode) return () => {};\n return () => {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const target = targetRef.current;\n if (!target) return;\n const [, , , , draggedNodeIndex] = draggedNode.node;\n const dragged = { id: draggedNode.list.id, index: draggedNodeIndex };\n if (dragged.id === target.id && dragged.index === target.index) return;\n onDragEndRef.current(dragged, target);\n };\n }, [draggedNode]);\n};\n\nexport default useDragEffect;\n"],"file":"useDragEffect.js"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/utils/useInitRect.ts"],"names":["useInitRect","ref","current","rect","getBoundingClientRect","initX","x","initY","y","initWidth","width","initHeight","height"],"mappings":";;;;;;;AAAA;;AAEA,IAAMA,WAAW,GAAG,SAAdA,WAAc,CAACC,GAAD;AAAA,SAClB,oBAAQ,YAAM;AACZ,QAAI,CAACA,GAAD,IAAQ,CAACA,GAAG,CAACC,OAAjB,EAA0B,OAAO,IAAP;
|
|
1
|
+
{"version":3,"sources":["../../../src/utils/useInitRect.ts"],"names":["useInitRect","ref","current","rect","getBoundingClientRect","initX","x","initY","y","initWidth","width","initHeight","height"],"mappings":";;;;;;;AAAA;;AAEA,IAAMA,WAAW,GAAG,SAAdA,WAAc,CAACC,GAAD;AAAA,SAClB,oBAAQ,YAAM;AACZ,QAAI,CAACA,GAAD,IAAQ,CAACA,GAAG,CAACC,OAAjB,EAA0B,OAAO,IAAP;AAE1B,QAAMC,IAAI,GAAGF,GAAG,CAACC,OAAJ,CAAYE,qBAAZ,EAAb;AAEA,WAAO;AACLC,MAAAA,KAAK,EAAEF,IAAI,CAACG,CADP;AAELC,MAAAA,KAAK,EAAEJ,IAAI,CAACK,CAFP;AAGLC,MAAAA,SAAS,EAAEN,IAAI,CAACO,KAHX;AAILC,MAAAA,UAAU,EAAER,IAAI,CAACS;AAJZ,KAAP;AAMD,GAXD,EAWG,CAACX,GAAD,CAXH,CADkB;AAAA,CAApB;;eAceD,W","sourcesContent":["import { RefObject, useMemo } from 'react';\n\nconst useInitRect = (ref?: RefObject<HTMLElement>) =>\n useMemo(() => {\n if (!ref || !ref.current) return null;\n\n const rect = ref.current.getBoundingClientRect();\n\n return {\n initX: rect.x,\n initY: rect.y,\n initWidth: rect.width,\n initHeight: rect.height,\n };\n }, [ref]);\n\nexport default useInitRect;\n"],"file":"useInitRect.js"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/utils/useInitScrollOffset.ts"],"names":["useInitScrollOffset","ref","current","scrollOffset","initScrollLeft","scrollLeft","initScrollTop","scrollTop"],"mappings":";;;;;;;AAAA;;AACA;;;;AAEA,IAAMA,mBAAmB,GAAG,SAAtBA,mBAAsB,CAACC,GAAD;AAAA,SAC1B,oBAAQ,YAAM;AACZ,QAAI,CAACA,GAAD,IAAQ,CAACA,GAAG,CAACC,OAAjB,EAA0B,OAAO,IAAP;
|
|
1
|
+
{"version":3,"sources":["../../../src/utils/useInitScrollOffset.ts"],"names":["useInitScrollOffset","ref","current","scrollOffset","initScrollLeft","scrollLeft","initScrollTop","scrollTop"],"mappings":";;;;;;;AAAA;;AACA;;;;AAEA,IAAMA,mBAAmB,GAAG,SAAtBA,mBAAsB,CAACC,GAAD;AAAA,SAC1B,oBAAQ,YAAM;AACZ,QAAI,CAACA,GAAD,IAAQ,CAACA,GAAG,CAACC,OAAjB,EAA0B,OAAO,IAAP;AAE1B,QAAMC,YAAY,GAAG,kCAAiBF,GAAG,CAACC,OAArB,CAArB;AAEA,WAAO;AACLE,MAAAA,cAAc,EAAED,YAAY,CAACE,UADxB;AAELC,MAAAA,aAAa,EAAEH,YAAY,CAACI;AAFvB,KAAP;AAID,GATD,EASG,CAACN,GAAD,CATH,CAD0B;AAAA,CAA5B;;eAYeD,mB","sourcesContent":["import { RefObject, useMemo } from 'react';\nimport getElementScroll from './getElementScroll';\n\nconst useInitScrollOffset = (ref?: RefObject<HTMLElement>) =>\n useMemo(() => {\n if (!ref || !ref.current) return null;\n\n const scrollOffset = getElementScroll(ref.current);\n\n return {\n initScrollLeft: scrollOffset.scrollLeft,\n initScrollTop: scrollOffset.scrollTop,\n };\n }, [ref]);\n\nexport default useInitScrollOffset;\n"],"file":"useInitScrollOffset.js"}
|
|
@@ -24,24 +24,28 @@ function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Sy
|
|
|
24
24
|
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
25
25
|
|
|
26
26
|
/* eslint-disable no-constant-condition */
|
|
27
|
-
var useMoveNode = function useMoveNode(
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
27
|
+
var useMoveNode = function useMoveNode(props) {
|
|
28
|
+
var position = props.position,
|
|
29
|
+
draggedNode = props.draggedNode,
|
|
30
|
+
getNodeStyle = props.getNodeStyle;
|
|
31
|
+
return (0, _react.useCallback)(function (options) {
|
|
32
|
+
var list = options.list,
|
|
33
|
+
startNode = options.startNode,
|
|
34
|
+
direction = options.direction,
|
|
35
|
+
destination = options.destination,
|
|
36
|
+
_options$isAnotherLis = options.isAnotherList,
|
|
37
|
+
isAnotherList = _options$isAnotherLis === void 0 ? false : _options$isAnotherLis;
|
|
36
38
|
if (!draggedNode || !position) return startNode;
|
|
37
39
|
|
|
38
40
|
var _draggedNode$node = _slicedToArray(draggedNode.node, 5),
|
|
39
41
|
draggedNodeIndex = _draggedNode$node[4];
|
|
40
42
|
|
|
41
43
|
var axis = list.horizontal ? 'x' : 'y';
|
|
44
|
+
var startRectProp = list.horizontal ? 'left' : 'top';
|
|
45
|
+
var endRectProp = list.horizontal ? 'right' : 'bottom';
|
|
42
46
|
var node = startNode;
|
|
43
47
|
|
|
44
|
-
if (
|
|
48
|
+
if (direction === 'up') {
|
|
45
49
|
while (true) {
|
|
46
50
|
var _node = node,
|
|
47
51
|
_node2 = _slicedToArray(_node, 5),
|
|
@@ -56,13 +60,15 @@ var useMoveNode = function useMoveNode(position, draggedNode, getNodeStyle) {
|
|
|
56
60
|
prevNodeSetStyle = _prev[3],
|
|
57
61
|
prevNodeIndex = _prev[4];
|
|
58
62
|
|
|
59
|
-
if (
|
|
63
|
+
if (destination === 'cursor') {
|
|
60
64
|
var prevNodeRect = (0, _getNodeRect["default"])(prevNodeRef);
|
|
61
|
-
|
|
62
|
-
if (prevNodeRect && position[axis] > prevNodeRect[
|
|
65
|
+
|
|
66
|
+
if (prevNodeRect && position[axis] > prevNodeRect[endRectProp]) {
|
|
67
|
+
return node;
|
|
68
|
+
}
|
|
63
69
|
}
|
|
64
70
|
|
|
65
|
-
if (
|
|
71
|
+
if (isAnotherList || prevNodeIndex < draggedNodeIndex) {
|
|
66
72
|
prevNodeSetStyle(getNodeStyle('down', list.horizontal));
|
|
67
73
|
} else if (nodeIndex > draggedNodeIndex) {
|
|
68
74
|
nodeSetStyle(getNodeStyle('init', list.horizontal));
|
|
@@ -85,15 +91,15 @@ var useMoveNode = function useMoveNode(position, draggedNode, getNodeStyle) {
|
|
|
85
91
|
nextNodeSetStyle = _next[3],
|
|
86
92
|
nextNodeIndex = _next[4];
|
|
87
93
|
|
|
88
|
-
if (
|
|
94
|
+
if (destination === 'cursor') {
|
|
89
95
|
var nextNodeRect = (0, _getNodeRect["default"])(nextNodeRef);
|
|
90
96
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
97
|
+
if (nextNodeRect && position[axis] < nextNodeRect[startRectProp]) {
|
|
98
|
+
return node;
|
|
99
|
+
}
|
|
94
100
|
}
|
|
95
101
|
|
|
96
|
-
if (
|
|
102
|
+
if (isAnotherList || _nodeIndex < draggedNodeIndex) {
|
|
97
103
|
_nodeSetStyle(getNodeStyle('init', list.horizontal));
|
|
98
104
|
} else if (nextNodeIndex > draggedNodeIndex) {
|
|
99
105
|
nextNodeSetStyle(getNodeStyle('up', list.horizontal));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/utils/useMoveNode.ts"],"names":["useMoveNode","position","draggedNode","getNodeStyle","
|
|
1
|
+
{"version":3,"sources":["../../../src/utils/useMoveNode.ts"],"names":["useMoveNode","props","position","draggedNode","getNodeStyle","options","list","startNode","direction","destination","isAnotherList","node","draggedNodeIndex","axis","horizontal","startRectProp","endRectProp","prev","nodeSetStyle","nodeIndex","prevNodeRef","prevNodeSetStyle","prevNodeIndex","prevNodeRect","next","nextNodeRef","nextNodeSetStyle","nextNodeIndex","nextNodeRect"],"mappings":"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","sourcesContent":["import { useCallback } from 'react';\nimport { Position } from '@os-design/use-drag';\nimport NodeList, { ExistingNode } from './NodeList';\nimport getNodeRect from './getNodeRect';\nimport { NodeStyleGetter } from './useGetNodeStyle';\n\ninterface DraggedNode {\n node: ExistingNode;\n}\n\ninterface UseMoveNodeProps {\n position: Position | null;\n draggedNode: DraggedNode | null;\n getNodeStyle: NodeStyleGetter;\n}\n\ninterface MoveProps {\n list: NodeList;\n startNode: ExistingNode;\n direction: 'up' | 'down';\n destination: 'cursor' | 'end';\n isAnotherList?: boolean;\n}\n\n/* eslint-disable no-constant-condition */\n\nconst useMoveNode = (props: UseMoveNodeProps) => {\n const { position, draggedNode, getNodeStyle } = props;\n\n return useCallback(\n (options: MoveProps) => {\n const {\n list,\n startNode,\n direction,\n destination,\n isAnotherList = false,\n } = options;\n\n if (!draggedNode || !position) return startNode;\n const [, , , , draggedNodeIndex] = draggedNode.node;\n const axis = list.horizontal ? 'x' : 'y';\n const startRectProp = list.horizontal ? 'left' : 'top';\n const endRectProp = list.horizontal ? 'right' : 'bottom';\n let node = startNode;\n\n if (direction === 'up') {\n while (true) {\n const [prev, , , nodeSetStyle, nodeIndex] = node;\n if (!prev) return node;\n\n const [, , prevNodeRef, prevNodeSetStyle, prevNodeIndex] = prev;\n\n if (destination === 'cursor') {\n const prevNodeRect = getNodeRect(prevNodeRef);\n if (prevNodeRect && position[axis] > prevNodeRect[endRectProp]) {\n return node;\n }\n }\n\n if (isAnotherList || prevNodeIndex < draggedNodeIndex) {\n prevNodeSetStyle(getNodeStyle('down', list.horizontal));\n } else if (nodeIndex > draggedNodeIndex) {\n nodeSetStyle(getNodeStyle('init', list.horizontal));\n }\n\n node = prev;\n }\n } else {\n while (true) {\n const [, next, , nodeSetStyle, nodeIndex] = node;\n if (!next) return node;\n\n const [, , nextNodeRef, nextNodeSetStyle, nextNodeIndex] = next;\n\n if (destination === 'cursor') {\n const nextNodeRect = getNodeRect(nextNodeRef);\n if (nextNodeRect && position[axis] < nextNodeRect[startRectProp]) {\n return node;\n }\n }\n\n if (isAnotherList || nodeIndex < draggedNodeIndex) {\n nodeSetStyle(getNodeStyle('init', list.horizontal));\n } else if (nextNodeIndex > draggedNodeIndex) {\n nextNodeSetStyle(getNodeStyle('up', list.horizontal));\n }\n\n node = next;\n }\n }\n },\n [draggedNode, getNodeStyle, position]\n );\n};\n\nexport default useMoveNode;\n"],"file":"useMoveNode.js"}
|
package/dist/esm/DragAndDrop.js
CHANGED
|
@@ -9,6 +9,7 @@ import ListStore from './utils/ListStore';
|
|
|
9
9
|
import useDragEffect from './utils/useDragEffect';
|
|
10
10
|
import useGeneratedId from './utils/useGeneratedId';
|
|
11
11
|
import useTransitionStyle from './utils/useTransitionStyle';
|
|
12
|
+
import useInitRect from './utils/useInitRect';
|
|
12
13
|
|
|
13
14
|
/**
|
|
14
15
|
* The container containing one or more lists with draggable nodes.
|
|
@@ -114,6 +115,7 @@ const DragAndDrop = ({
|
|
|
114
115
|
distPercent: autoScrollDistPercent,
|
|
115
116
|
maxSpeedPx: autoScrollMaxSpeedPx
|
|
116
117
|
});
|
|
118
|
+
const initRect = useInitRect(draggedNode ? draggedNode.node[2] : undefined);
|
|
117
119
|
const dragAndDropContext = useMemoObject({
|
|
118
120
|
registerList,
|
|
119
121
|
deregisterList,
|
|
@@ -130,7 +132,10 @@ const DragAndDrop = ({
|
|
|
130
132
|
style: {
|
|
131
133
|
position: 'fixed',
|
|
132
134
|
left: cursorPosition.x - draggedNode.position.x,
|
|
133
|
-
top: cursorPosition.y - draggedNode.position.y
|
|
135
|
+
top: cursorPosition.y - draggedNode.position.y,
|
|
136
|
+
width: initRect ? initRect.initWidth : undefined,
|
|
137
|
+
height: initRect ? initRect.initHeight : undefined,
|
|
138
|
+
zIndex: 1001
|
|
134
139
|
}
|
|
135
140
|
})));
|
|
136
141
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/DragAndDrop.tsx"],"names":["React","useCallback","useMemo","useRef","useState","usePreventDefaultEvent","useMemoObject","useDrag","Portal","useAutoScroll","DragAndDropContext","ListStore","useDragEffect","useGeneratedId","useTransitionStyle","DragAndDrop","draggedNodeContainer","minMouseDistPx","longPressMs","autoScrollDistPercent","autoScrollMaxSpeedPx","transitionDelayMs","onDragEnd","children","listStoreRef","generatedId","nodeClassName","draggedNode","setDraggedNode","startNodeRef","cursorPosition","setCursorPosition","x","y","registerList","list","current","add","deregisterList","id","remove","className","ms","enabled","onDragStart","pos","startPos","startNode","nodeRef","node","rect","getBoundingClientRect","position","onDragMove","dragEndHandler","onMouseDown","onTouchStart","mouseDownHandler","e","touchStartHandler","document","body","distPercent","maxSpeedPx","dragAndDropContext","renderDraggedNode","index","style","left","top"],"mappings":"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","sourcesContent":["import React, {\n useCallback,\n useMemo,\n useRef,\n useState,\n MouseEvent,\n TouchEvent,\n} from 'react';\nimport usePreventDefaultEvent from '@os-design/use-prevent-default-event';\nimport useMemoObject from '@os-design/use-memo-object';\nimport useDrag, {\n Position,\n OnDragEnd,\n OnDragMove,\n OnDragStart,\n} from '@os-design/use-drag';\nimport Portal, { PortalProps } from '@os-design/portal';\nimport useAutoScroll from '@os-design/use-auto-scroll';\nimport { DragAndDropContext } from './utils/useDragAndDrop';\nimport ListStore from './utils/ListStore';\nimport NodeList, { ExistingNode } from './utils/NodeList';\nimport useDragEffect, {\n DragEndHandler,\n DraggedNode,\n} from './utils/useDragEffect';\nimport useGeneratedId from './utils/useGeneratedId';\nimport useTransitionStyle from './utils/useTransitionStyle';\n\nexport interface DragAndDropProps {\n /**\n * The container in which the dragged node will be rendered.\n * @default document.body\n */\n draggedNodeContainer?: PortalProps['container'];\n /**\n * The min distance required to start dragging a node (in px).\n * @default 10\n */\n minMouseDistPx?: number;\n /**\n * The delay of the long press event required to start dragging a node on the touch device (in ms).\n * @default 500\n */\n longPressMs?: number;\n /**\n * The distance to the bound at which the list starts to scroll automatically (in percent).\n * @default 20\n */\n autoScrollDistPercent?: number;\n /**\n * The max auto scroll speed (in px).\n * @default 100\n */\n autoScrollMaxSpeedPx?: number;\n /**\n * The animation duration (in ms).\n * @default 250\n */\n transitionDelayMs?: number;\n /**\n * The callback that is called when the drag is completed.\n * @default undefined\n */\n onDragEnd?: DragEndHandler;\n}\n\ninterface StartNode {\n list: NodeList;\n node: ExistingNode;\n}\n\n/**\n * The container containing one or more lists with draggable nodes.\n */\nconst DragAndDrop: React.FC<DragAndDropProps> = ({\n draggedNodeContainer,\n minMouseDistPx = 10,\n longPressMs = 500,\n autoScrollDistPercent = 20,\n autoScrollMaxSpeedPx = 100,\n transitionDelayMs = 250,\n onDragEnd = () => {},\n children,\n}) => {\n // The user can drag a node between the lists (the Droppable components).\n // To determine which list a node should be dropped in, we need to store refs to all the lists.\n const listStoreRef = useRef<ListStore>(new ListStore());\n\n // The class name for a node used to set the transition style\n const generatedId = useGeneratedId(4);\n const nodeClassName = useMemo(() => `n${generatedId}`, [generatedId]);\n\n // The node that is currently being dragged\n const [draggedNode, setDraggedNode] = useState<DraggedNode | null>(null);\n const startNodeRef = useRef<StartNode | null>(null);\n const [cursorPosition, setCursorPosition] = useState<Position>({\n x: 0,\n y: 0,\n });\n\n // Add a new list to the store\n const registerList = useCallback((list: NodeList) => {\n listStoreRef.current.add(list);\n }, []);\n\n // Remove the existing list from the store\n const deregisterList = useCallback((id: string) => {\n listStoreRef.current.remove(id);\n }, []);\n\n // Set the style to delay transitions when the node is dragging\n useTransitionStyle({\n className: nodeClassName,\n ms: transitionDelayMs,\n enabled: !!draggedNode,\n });\n\n const onDragStart = useCallback<OnDragStart>(\n (pos: Position, startPos: Position) => {\n const startNode = startNodeRef.current;\n if (!startNode) return;\n const [, , nodeRef] = startNode.node;\n if (!nodeRef.current) return;\n const rect = nodeRef.current.getBoundingClientRect();\n setCursorPosition(pos);\n setDraggedNode({\n list: startNode.list,\n node: startNode.node,\n position: {\n x: startPos.x - rect.x,\n y: startPos.y - rect.y,\n },\n });\n startNodeRef.current = null;\n },\n []\n );\n\n const onDragMove = useCallback<OnDragMove>((pos: Position) => {\n setCursorPosition(pos);\n }, []);\n\n const dragEndHandler = useCallback<OnDragEnd>(() => {\n setDraggedNode(null);\n }, []);\n\n const { onMouseDown, onTouchStart } = useDrag({\n onDragStart,\n onDragMove,\n onDragEnd: dragEndHandler,\n minMouseDistPx,\n longPressMs,\n });\n\n // Handlers that determine whether a user clicks on the node\n const mouseDownHandler = useCallback(\n (e: MouseEvent, list: NodeList, node: ExistingNode) => {\n startNodeRef.current = { list, node };\n onMouseDown(e);\n },\n [onMouseDown]\n );\n const touchStartHandler = useCallback(\n (e: TouchEvent, list: NodeList, node: ExistingNode) => {\n startNodeRef.current = { list, node };\n onTouchStart(e);\n },\n [onTouchStart]\n );\n\n // Prevent body scrolling when the node is dragging.\n // It's important to attach the event to the body (not to the document). Otherwise, it won't work in mobile chrome.\n usePreventDefaultEvent(document.body, 'touchmove', !!draggedNode);\n\n // Implement the drag animation\n useDragEffect({\n draggedNode,\n cursorPosition,\n listStoreRef,\n onDragEnd,\n });\n\n // Auto scroll if the cursor position is located near the border\n useAutoScroll({\n enabled: !!draggedNode,\n distPercent: autoScrollDistPercent,\n maxSpeedPx: autoScrollMaxSpeedPx,\n });\n\n const dragAndDropContext = useMemoObject({\n registerList,\n deregisterList,\n onMouseDown: mouseDownHandler,\n onTouchStart: touchStartHandler,\n nodeClassName,\n });\n\n return (\n <DragAndDropContext.Provider value={dragAndDropContext}>\n {children}\n\n {draggedNode && (\n <Portal container={draggedNodeContainer}>\n {draggedNode.list.renderDraggedNode({\n index: draggedNode.node[4],\n style: {\n position: 'fixed',\n left: cursorPosition.x - draggedNode.position.x,\n top: cursorPosition.y - draggedNode.position.y,\n },\n })}\n </Portal>\n )}\n </DragAndDropContext.Provider>\n );\n};\n\nexport type { DragEndHandler } from './utils/useDragEffect';\n\nexport default DragAndDrop;\n"],"file":"DragAndDrop.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/DragAndDrop.tsx"],"names":["React","useCallback","useMemo","useRef","useState","usePreventDefaultEvent","useMemoObject","useDrag","Portal","useAutoScroll","DragAndDropContext","ListStore","useDragEffect","useGeneratedId","useTransitionStyle","useInitRect","DragAndDrop","draggedNodeContainer","minMouseDistPx","longPressMs","autoScrollDistPercent","autoScrollMaxSpeedPx","transitionDelayMs","onDragEnd","children","listStoreRef","generatedId","nodeClassName","draggedNode","setDraggedNode","startNodeRef","cursorPosition","setCursorPosition","x","y","registerList","list","current","add","deregisterList","id","remove","className","ms","enabled","onDragStart","pos","startPos","startNode","nodeRef","node","rect","getBoundingClientRect","position","onDragMove","dragEndHandler","onMouseDown","onTouchStart","mouseDownHandler","e","touchStartHandler","document","body","distPercent","maxSpeedPx","initRect","undefined","dragAndDropContext","renderDraggedNode","index","style","left","top","width","initWidth","height","initHeight","zIndex"],"mappings":"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","sourcesContent":["import React, {\n useCallback,\n useMemo,\n useRef,\n useState,\n MouseEvent,\n TouchEvent,\n} from 'react';\nimport usePreventDefaultEvent from '@os-design/use-prevent-default-event';\nimport useMemoObject from '@os-design/use-memo-object';\nimport useDrag, {\n Position,\n OnDragEnd,\n OnDragMove,\n OnDragStart,\n} from '@os-design/use-drag';\nimport Portal, { PortalProps } from '@os-design/portal';\nimport useAutoScroll from '@os-design/use-auto-scroll';\nimport { DragAndDropContext } from './utils/useDragAndDrop';\nimport ListStore from './utils/ListStore';\nimport NodeList, { ExistingNode } from './utils/NodeList';\nimport useDragEffect, {\n DragEndHandler,\n DraggedNode,\n} from './utils/useDragEffect';\nimport useGeneratedId from './utils/useGeneratedId';\nimport useTransitionStyle from './utils/useTransitionStyle';\nimport useInitRect from './utils/useInitRect';\n\nexport interface DragAndDropProps {\n /**\n * The container in which the dragged node will be rendered.\n * @default document.body\n */\n draggedNodeContainer?: PortalProps['container'];\n /**\n * The min distance required to start dragging a node (in px).\n * @default 10\n */\n minMouseDistPx?: number;\n /**\n * The delay of the long press event required to start dragging a node on the touch device (in ms).\n * @default 500\n */\n longPressMs?: number;\n /**\n * The distance to the bound at which the list starts to scroll automatically (in percent).\n * @default 20\n */\n autoScrollDistPercent?: number;\n /**\n * The max auto scroll speed (in px).\n * @default 100\n */\n autoScrollMaxSpeedPx?: number;\n /**\n * The animation duration (in ms).\n * @default 250\n */\n transitionDelayMs?: number;\n /**\n * The callback that is called when the drag is completed.\n * @default undefined\n */\n onDragEnd?: DragEndHandler;\n}\n\ninterface StartNode {\n list: NodeList;\n node: ExistingNode;\n}\n\n/**\n * The container containing one or more lists with draggable nodes.\n */\nconst DragAndDrop: React.FC<DragAndDropProps> = ({\n draggedNodeContainer,\n minMouseDistPx = 10,\n longPressMs = 500,\n autoScrollDistPercent = 20,\n autoScrollMaxSpeedPx = 100,\n transitionDelayMs = 250,\n onDragEnd = () => {},\n children,\n}) => {\n // The user can drag a node between the lists (the Droppable components).\n // To determine which list a node should be dropped in, we need to store refs to all the lists.\n const listStoreRef = useRef<ListStore>(new ListStore());\n\n // The class name for a node used to set the transition style\n const generatedId = useGeneratedId(4);\n const nodeClassName = useMemo(() => `n${generatedId}`, [generatedId]);\n\n // The node that is currently being dragged\n const [draggedNode, setDraggedNode] = useState<DraggedNode | null>(null);\n const startNodeRef = useRef<StartNode | null>(null);\n const [cursorPosition, setCursorPosition] = useState<Position>({\n x: 0,\n y: 0,\n });\n\n // Add a new list to the store\n const registerList = useCallback((list: NodeList) => {\n listStoreRef.current.add(list);\n }, []);\n\n // Remove the existing list from the store\n const deregisterList = useCallback((id: string) => {\n listStoreRef.current.remove(id);\n }, []);\n\n // Set the style to delay transitions when the node is dragging\n useTransitionStyle({\n className: nodeClassName,\n ms: transitionDelayMs,\n enabled: !!draggedNode,\n });\n\n const onDragStart = useCallback<OnDragStart>(\n (pos: Position, startPos: Position) => {\n const startNode = startNodeRef.current;\n if (!startNode) return;\n const [, , nodeRef] = startNode.node;\n if (!nodeRef.current) return;\n const rect = nodeRef.current.getBoundingClientRect();\n setCursorPosition(pos);\n setDraggedNode({\n list: startNode.list,\n node: startNode.node,\n position: {\n x: startPos.x - rect.x,\n y: startPos.y - rect.y,\n },\n });\n startNodeRef.current = null;\n },\n []\n );\n\n const onDragMove = useCallback<OnDragMove>((pos: Position) => {\n setCursorPosition(pos);\n }, []);\n\n const dragEndHandler = useCallback<OnDragEnd>(() => {\n setDraggedNode(null);\n }, []);\n\n const { onMouseDown, onTouchStart } = useDrag({\n onDragStart,\n onDragMove,\n onDragEnd: dragEndHandler,\n minMouseDistPx,\n longPressMs,\n });\n\n // Handlers that determine whether a user clicks on the node\n const mouseDownHandler = useCallback(\n (e: MouseEvent, list: NodeList, node: ExistingNode) => {\n startNodeRef.current = { list, node };\n onMouseDown(e);\n },\n [onMouseDown]\n );\n const touchStartHandler = useCallback(\n (e: TouchEvent, list: NodeList, node: ExistingNode) => {\n startNodeRef.current = { list, node };\n onTouchStart(e);\n },\n [onTouchStart]\n );\n\n // Prevent body scrolling when the node is dragging.\n // It's important to attach the event to the body (not to the document). Otherwise, it won't work in mobile chrome.\n usePreventDefaultEvent(document.body, 'touchmove', !!draggedNode);\n\n // Implement the drag animation\n useDragEffect({\n draggedNode,\n cursorPosition,\n listStoreRef,\n onDragEnd,\n });\n\n // Auto scroll if the cursor position is located near the border\n useAutoScroll({\n enabled: !!draggedNode,\n distPercent: autoScrollDistPercent,\n maxSpeedPx: autoScrollMaxSpeedPx,\n });\n\n const initRect = useInitRect(draggedNode ? draggedNode.node[2] : undefined);\n\n const dragAndDropContext = useMemoObject({\n registerList,\n deregisterList,\n onMouseDown: mouseDownHandler,\n onTouchStart: touchStartHandler,\n nodeClassName,\n });\n\n return (\n <DragAndDropContext.Provider value={dragAndDropContext}>\n {children}\n\n {draggedNode && (\n <Portal container={draggedNodeContainer}>\n {draggedNode.list.renderDraggedNode({\n index: draggedNode.node[4],\n style: {\n position: 'fixed',\n left: cursorPosition.x - draggedNode.position.x,\n top: cursorPosition.y - draggedNode.position.y,\n width: initRect ? initRect.initWidth : undefined,\n height: initRect ? initRect.initHeight : undefined,\n zIndex: 1001,\n },\n })}\n </Portal>\n )}\n </DragAndDropContext.Provider>\n );\n};\n\nexport type { DragEndHandler } from './utils/useDragEffect';\n\nexport default DragAndDrop;\n"],"file":"DragAndDrop.js"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/Draggable.tsx"],"names":["React","useCallback","useEffect","useRef","useState","useMemoObject","useDroppable","useDragAndDrop","useAppendClassName","Draggable","index","children","ref","nodeRef","style","setStyle","nodeClassName","registerNode","deregisterNode","onMouseDown","onTouchStart","current","mouseDownHandler","e","touchStartHandler","handlers"],"mappings":"AAAA,OAAOA,KAAP,IAGEC,WAHF,EAIEC,SAJF,EAKEC,MALF,EAMEC,QANF,QASO,OATP;AAUA,OAAOC,aAAP,MAA0B,4BAA1B;AAEA,OAAOC,YAAP,MAAyB,sBAAzB;AACA,OAAOC,cAAP,MAA2B,wBAA3B;AACA,OAAOC,kBAAP,MAA+B,4BAA/B;;AAuCA,MAAMC,SAAmC,GAAG,CAAC;AAAEC,EAAAA,KAAF;AAASC,EAAAA;AAAT,CAAD,KAAyB;AACnE;AACA,QAAMC,GAAG,GAAGT,MAAM,CAAwB,IAAxB,CAAlB,CAFmE,CAGnE;;AACA,QAAMU,OAAO,GAAGV,MAAM,CAAO,IAAP,CAAtB,CAJmE,CAKnE;;AACA,QAAM,CAACW,KAAD,EAAQC,QAAR,IAAoBX,QAAQ,CAAgB,EAAhB,CAAlC;AAEA,QAAM;AAAEY,IAAAA;AAAF,MAAoBT,cAAc,EAAxC;AACA,QAAM;AAAEU,IAAAA,YAAF;AAAgBC,IAAAA,cAAhB;AAAgCC,IAAAA,WAAhC;AAA6CC,IAAAA;AAA7C,MACJd,YAAY,EADd,CATmE,CAYnE;;AACAJ,EAAAA,SAAS,CAAC,MAAM;AACdW,IAAAA,OAAO,CAACQ,OAAR,GAAkBJ,YAAY,CAAC;AAAEL,MAAAA,GAAF;AAAOG,MAAAA,QAAP;AAAiBL,MAAAA;AAAjB,KAAD,CAA9B;AACA,WAAO,MAAM;AACX,UAAI,CAACG,OAAO,CAACQ,OAAb,EAAsB;AACtBH,MAAAA,cAAc,CAACL,OAAO,CAACQ,OAAT,CAAd;AACAR,MAAAA,OAAO,CAACQ,OAAR,GAAkB,IAAlB;AACD,KAJD;AAKD,GAPQ,EAON,CAACH,cAAD,EAAiBR,KAAjB,EAAwBO,YAAxB,CAPM,CAAT,CAbmE,CAsBnE;;AACAT,EAAAA,kBAAkB,CAACI,GAAD,EAAMI,aAAN,CAAlB,CAvBmE,CAyBnE;;AACA,QAAMM,gBAAgB,GAAGrB,WAAW,CACjCsB,CAAD,IAAmB;AACjB,QAAI,CAACV,OAAO,CAACQ,OAAb,EAAsB;AACtBF,IAAAA,WAAW,CAACI,CAAD,EAAIV,OAAO,CAACQ,OAAZ,CAAX;AACD,GAJiC,EAKlC,CAACF,WAAD,CALkC,CAApC;AAOA,QAAMK,iBAAiB,GAAGvB,WAAW,CAClCsB,CAAD,IAAmB;AACjB,QAAI,CAACV,OAAO,CAACQ,OAAb,EAAsB;AACtBD,IAAAA,YAAY,CAACG,CAAD,EAAIV,OAAO,CAACQ,OAAZ,CAAZ;AACD,GAJkC,EAKnC,CAACD,YAAD,CALmC,CAArC;AAQA,QAAMK,QAAQ,GAAGpB,aAAa,CAAC;AAC7Bc,IAAAA,WAAW,EAAEG,gBADgB;AAE7BF,IAAAA,YAAY,EAAEI;AAFe,GAAD,CAA9B;AAKA,sBAAO,0CAAGb,QAAQ,CAAC;AAAEC,IAAAA,GAAF;AAAOE,IAAAA,KAAP;AAAcW,IAAAA;AAAd,GAAD,CAAX,CAAP;AACD,CA/CD;;AAiDA,eAAehB,SAAf","sourcesContent":["import React, {\n CSSProperties,\n RefObject,\n useCallback,\n useEffect,\n useRef,\n useState,\n MouseEvent,\n TouchEvent,\n} from 'react';\nimport useMemoObject from '@os-design/use-memo-object';\nimport { Node } from './utils/NodeList';\nimport useDroppable from './utils/useDroppable';\nimport useDragAndDrop from './utils/useDragAndDrop';\nimport useAppendClassName from './utils/useAppendClassName';\n\nexport interface DraggableHandlers {\n /**\n * The handler that should be called when the mouse down event occurs.\n */\n onMouseDown: (e: MouseEvent) => void;\n /**\n * The handler that should be called when the touch start event occurs.\n */\n onTouchStart: (e: TouchEvent) => void;\n}\n\nexport interface DraggableChildrenProps {\n /**\n * The reference to the draggable list item.\n */\n ref: RefObject<
|
|
1
|
+
{"version":3,"sources":["../../src/Draggable.tsx"],"names":["React","useCallback","useEffect","useRef","useState","useMemoObject","useDroppable","useDragAndDrop","useAppendClassName","Draggable","index","children","ref","nodeRef","style","setStyle","nodeClassName","registerNode","deregisterNode","onMouseDown","onTouchStart","current","mouseDownHandler","e","touchStartHandler","handlers"],"mappings":"AAAA,OAAOA,KAAP,IAGEC,WAHF,EAIEC,SAJF,EAKEC,MALF,EAMEC,QANF,QASO,OATP;AAUA,OAAOC,aAAP,MAA0B,4BAA1B;AAEA,OAAOC,YAAP,MAAyB,sBAAzB;AACA,OAAOC,cAAP,MAA2B,wBAA3B;AACA,OAAOC,kBAAP,MAA+B,4BAA/B;;AAuCA,MAAMC,SAAmC,GAAG,CAAC;AAAEC,EAAAA,KAAF;AAASC,EAAAA;AAAT,CAAD,KAAyB;AACnE;AACA,QAAMC,GAAG,GAAGT,MAAM,CAAwB,IAAxB,CAAlB,CAFmE,CAGnE;;AACA,QAAMU,OAAO,GAAGV,MAAM,CAAO,IAAP,CAAtB,CAJmE,CAKnE;;AACA,QAAM,CAACW,KAAD,EAAQC,QAAR,IAAoBX,QAAQ,CAAgB,EAAhB,CAAlC;AAEA,QAAM;AAAEY,IAAAA;AAAF,MAAoBT,cAAc,EAAxC;AACA,QAAM;AAAEU,IAAAA,YAAF;AAAgBC,IAAAA,cAAhB;AAAgCC,IAAAA,WAAhC;AAA6CC,IAAAA;AAA7C,MACJd,YAAY,EADd,CATmE,CAYnE;;AACAJ,EAAAA,SAAS,CAAC,MAAM;AACdW,IAAAA,OAAO,CAACQ,OAAR,GAAkBJ,YAAY,CAAC;AAAEL,MAAAA,GAAF;AAAOG,MAAAA,QAAP;AAAiBL,MAAAA;AAAjB,KAAD,CAA9B;AACA,WAAO,MAAM;AACX,UAAI,CAACG,OAAO,CAACQ,OAAb,EAAsB;AACtBH,MAAAA,cAAc,CAACL,OAAO,CAACQ,OAAT,CAAd;AACAR,MAAAA,OAAO,CAACQ,OAAR,GAAkB,IAAlB;AACD,KAJD;AAKD,GAPQ,EAON,CAACH,cAAD,EAAiBR,KAAjB,EAAwBO,YAAxB,CAPM,CAAT,CAbmE,CAsBnE;;AACAT,EAAAA,kBAAkB,CAACI,GAAD,EAAMI,aAAN,CAAlB,CAvBmE,CAyBnE;;AACA,QAAMM,gBAAgB,GAAGrB,WAAW,CACjCsB,CAAD,IAAmB;AACjB,QAAI,CAACV,OAAO,CAACQ,OAAb,EAAsB;AACtBF,IAAAA,WAAW,CAACI,CAAD,EAAIV,OAAO,CAACQ,OAAZ,CAAX;AACD,GAJiC,EAKlC,CAACF,WAAD,CALkC,CAApC;AAOA,QAAMK,iBAAiB,GAAGvB,WAAW,CAClCsB,CAAD,IAAmB;AACjB,QAAI,CAACV,OAAO,CAACQ,OAAb,EAAsB;AACtBD,IAAAA,YAAY,CAACG,CAAD,EAAIV,OAAO,CAACQ,OAAZ,CAAZ;AACD,GAJkC,EAKnC,CAACD,YAAD,CALmC,CAArC;AAQA,QAAMK,QAAQ,GAAGpB,aAAa,CAAC;AAC7Bc,IAAAA,WAAW,EAAEG,gBADgB;AAE7BF,IAAAA,YAAY,EAAEI;AAFe,GAAD,CAA9B;AAKA,sBAAO,0CAAGb,QAAQ,CAAC;AAAEC,IAAAA,GAAF;AAAOE,IAAAA,KAAP;AAAcW,IAAAA;AAAd,GAAD,CAAX,CAAP;AACD,CA/CD;;AAiDA,eAAehB,SAAf","sourcesContent":["import React, {\n CSSProperties,\n RefObject,\n useCallback,\n useEffect,\n useRef,\n useState,\n MouseEvent,\n TouchEvent,\n} from 'react';\nimport useMemoObject from '@os-design/use-memo-object';\nimport { Node } from './utils/NodeList';\nimport useDroppable from './utils/useDroppable';\nimport useDragAndDrop from './utils/useDragAndDrop';\nimport useAppendClassName from './utils/useAppendClassName';\n\nexport interface DraggableHandlers {\n /**\n * The handler that should be called when the mouse down event occurs.\n */\n onMouseDown: (e: MouseEvent) => void;\n /**\n * The handler that should be called when the touch start event occurs.\n */\n onTouchStart: (e: TouchEvent) => void;\n}\n\nexport interface DraggableChildrenProps {\n /**\n * The reference to the draggable list item.\n */\n ref: RefObject<any>; // eslint-disable-line @typescript-eslint/no-explicit-any\n /**\n * Additional styles for moving the list item.\n */\n style: CSSProperties;\n /**\n * The handlers to catch events when the user starts dragging the list item.\n */\n handlers: DraggableHandlers;\n}\n\nexport interface DraggableProps {\n /**\n * The index of the draggable node.\n */\n index: number;\n /**\n * The function that renders the draggable node.\n */\n children: (props: DraggableChildrenProps) => React.ReactNode;\n}\n\nconst Draggable: React.FC<DraggableProps> = ({ index, children }) => {\n // The reference to the list item\n const ref = useRef<HTMLDivElement | null>(null);\n // The reference to the node containing the refs to the prev and next nodes\n const nodeRef = useRef<Node>(null);\n // Additional styles for moving the list item\n const [style, setStyle] = useState<CSSProperties>({});\n\n const { nodeClassName } = useDragAndDrop();\n const { registerNode, deregisterNode, onMouseDown, onTouchStart } =\n useDroppable();\n\n // Register the node in the list\n useEffect(() => {\n nodeRef.current = registerNode({ ref, setStyle, index });\n return () => {\n if (!nodeRef.current) return;\n deregisterNode(nodeRef.current);\n nodeRef.current = null;\n };\n }, [deregisterNode, index, registerNode]);\n\n // Set the class name for the node to apply the transition style (see the DragAndDrop container)\n useAppendClassName(ref, nodeClassName);\n\n // Handlers that determine whether a user clicks on the node\n const mouseDownHandler = useCallback(\n (e: MouseEvent) => {\n if (!nodeRef.current) return;\n onMouseDown(e, nodeRef.current);\n },\n [onMouseDown]\n );\n const touchStartHandler = useCallback(\n (e: TouchEvent) => {\n if (!nodeRef.current) return;\n onTouchStart(e, nodeRef.current);\n },\n [onTouchStart]\n );\n\n const handlers = useMemoObject({\n onMouseDown: mouseDownHandler,\n onTouchStart: touchStartHandler,\n });\n\n return <>{children({ ref, style, handlers })}</>;\n};\n\nexport default Draggable;\n"],"file":"Draggable.js"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/utils/useBlankNode.ts"],"names":["useCallback","useEffect","useRef","useBlankNode","props","draggedNode","targetList","initDraggedNodeRect","initDraggedNodeRectRef","blankNode","current","ref","list","initWidth","initHeight","div","document","createElement","style","width","height","minWidth","minHeight","parent","innerList","innerRef","getBoundingClientRect","position","left","horizontal","top","appendChild","tail","getTail","node","add","setStyle","index","removeBlankNode","blank","remove","blankNodeRef","parentElement","removeChild"],"mappings":"AAAA,SAASA,WAAT,EAAsBC,SAAtB,EAAiCC,MAAjC,QAA+C,OAA/C;;
|
|
1
|
+
{"version":3,"sources":["../../../src/utils/useBlankNode.ts"],"names":["useCallback","useEffect","useRef","useBlankNode","props","draggedNode","targetList","initDraggedNodeRect","initDraggedNodeRectRef","blankNode","current","ref","list","initWidth","initHeight","div","document","createElement","style","width","height","minWidth","minHeight","parent","innerList","innerRef","getBoundingClientRect","position","left","horizontal","top","appendChild","tail","getTail","node","add","setStyle","index","removeBlankNode","blank","remove","blankNodeRef","parentElement","removeChild"],"mappings":"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","sourcesContent":["import { useCallback, useEffect, useRef } from 'react';\nimport NodeList, { ExistingNode } from './NodeList';\n\ninterface InitSize {\n initWidth: number;\n initHeight: number;\n}\n\ninterface DraggedNode {\n list: NodeList;\n}\n\ninterface UseBlankNodeProps {\n draggedNode: DraggedNode | null;\n targetList: NodeList | null;\n initDraggedNodeRect: InitSize | null;\n}\n\ninterface BlankNode {\n list: NodeList;\n node: ExistingNode;\n}\n\n/**\n * Appends the blank node to the list to increase the height of it.\n * Used when the dragged node is located inside another list.\n */\nconst useBlankNode = (props: UseBlankNodeProps) => {\n const { draggedNode, targetList, initDraggedNodeRect } = props;\n const initDraggedNodeRectRef = useRef(initDraggedNodeRect);\n const blankNode = useRef<BlankNode | null>(null);\n\n useEffect(() => {\n initDraggedNodeRectRef.current = initDraggedNodeRect;\n }, [initDraggedNodeRect]);\n\n useEffect(() => {\n if (\n !draggedNode ||\n !targetList ||\n !targetList.ref.current ||\n draggedNode.list === targetList ||\n !initDraggedNodeRectRef.current\n ) {\n return;\n }\n\n // Create a new blank div\n const { initWidth, initHeight } = initDraggedNodeRectRef.current;\n const div = document.createElement('div');\n div.style.width = `${initWidth}px`;\n div.style.height = `${initHeight}px`;\n div.style.minWidth = `${initWidth}px`;\n div.style.minHeight = `${initHeight}px`;\n\n let parent = targetList.ref.current;\n const innerList = targetList.innerRef.current;\n\n // The inner ref used only in the virtual list\n if (innerList) {\n const { width, height } = innerList.getBoundingClientRect();\n div.style.position = 'absolute';\n div.style.left = targetList.horizontal ? `${width}px` : '0px';\n div.style.top = targetList.horizontal ? '0px' : `${height}px`;\n parent = innerList;\n }\n\n // Append the blank div to increase the height of the list\n parent.appendChild(div);\n\n // Add the blank node to the node list\n const tail = targetList.getTail();\n blankNode.current = {\n list: targetList,\n node: targetList.add({\n ref: { current: div },\n setStyle: () => {},\n index: tail ? tail[4] + 1 : 0,\n }),\n };\n }, [draggedNode, targetList]);\n\n const removeBlankNode = useCallback(() => {\n const blank = blankNode.current;\n if (!blank) return;\n blankNode.current = null;\n blank.list.remove(blank.node);\n const [, , blankNodeRef] = blank.node;\n if (!blank.list.ref.current || !blankNodeRef.current) return;\n const parent = blankNodeRef.current.parentElement;\n if (parent) parent.removeChild(blankNodeRef.current);\n }, []);\n\n // Remove the blank node if the dragged node has been dropped\n useEffect(() => {\n if (!draggedNode) return () => {};\n return () => removeBlankNode();\n }, [draggedNode, removeBlankNode]);\n\n return removeBlankNode;\n};\n\nexport default useBlankNode;\n"],"file":"useBlankNode.js"}
|