@heliux-org/design-system-core 0.0.388-tree-updates → 0.0.388-tree-updates-01

Sign up to get free protection for your applications and to get access to all the features.
Files changed (56) hide show
  1. package/dist/Tree.css +1 -1
  2. package/dist/Tree.css.map +1 -1
  3. package/dist/Tree.js +1 -1
  4. package/dist/Tree.js.map +1 -1
  5. package/dist/components/Tree/Tree.js +11 -4
  6. package/dist/components/Tree/Tree.js.map +1 -1
  7. package/dist/components/Tree/TreeContext.js.map +1 -1
  8. package/dist/components/Tree/components/TreeFile/TreeFile.js +8 -1
  9. package/dist/components/Tree/components/TreeFile/TreeFile.js.map +1 -1
  10. package/dist/components/Tree/components/TreeFolder/TreeFolder.js +35 -2
  11. package/dist/components/Tree/components/TreeFolder/TreeFolder.js.map +1 -1
  12. package/dist/esm/components/Tree/Tree.d.ts +2 -1
  13. package/dist/esm/components/Tree/Tree.d.ts.map +1 -1
  14. package/dist/esm/components/Tree/TreeContext.d.ts +2 -1
  15. package/dist/esm/components/Tree/TreeContext.d.ts.map +1 -1
  16. package/dist/esm/components/Tree/components/TreeFile/TreeFile.d.ts.map +1 -1
  17. package/dist/esm/components/Tree/components/TreeFolder/TreeFolder.d.ts.map +1 -1
  18. package/dist/esm/src/components/Tree/Tree.js +1 -1
  19. package/dist/esm/src/components/Tree/Tree.js.map +1 -1
  20. package/dist/esm/src/components/Tree/TreeContext.js.map +1 -1
  21. package/dist/esm/src/components/Tree/components/TreeFile/TreeFile.js +1 -1
  22. package/dist/esm/src/components/Tree/components/TreeFile/TreeFile.js.map +1 -1
  23. package/dist/esm/src/components/Tree/components/TreeFolder/TreeFolder.js +1 -1
  24. package/dist/esm/src/components/Tree/components/TreeFolder/TreeFolder.js.map +1 -1
  25. package/dist/esm/src/components/Tree/components/TreeFolder/TreeFolder.scss.js +1 -1
  26. package/dist/main.css +1 -1
  27. package/dist/main.css.map +1 -1
  28. package/dist/main.js +1 -1
  29. package/dist/main.js.map +1 -1
  30. package/dist/mocked_classnames_esm/components/Tree/Tree.d.ts +2 -1
  31. package/dist/mocked_classnames_esm/components/Tree/Tree.d.ts.map +1 -1
  32. package/dist/mocked_classnames_esm/components/Tree/TreeContext.d.ts +2 -1
  33. package/dist/mocked_classnames_esm/components/Tree/TreeContext.d.ts.map +1 -1
  34. package/dist/mocked_classnames_esm/components/Tree/components/TreeFile/TreeFile.d.ts.map +1 -1
  35. package/dist/mocked_classnames_esm/components/Tree/components/TreeFolder/TreeFolder.d.ts.map +1 -1
  36. package/dist/mocked_classnames_esm/src/components/Tree/Tree.js +1 -1
  37. package/dist/mocked_classnames_esm/src/components/Tree/Tree.js.map +1 -1
  38. package/dist/mocked_classnames_esm/src/components/Tree/TreeContext.js.map +1 -1
  39. package/dist/mocked_classnames_esm/src/components/Tree/components/TreeFile/TreeFile.js +1 -1
  40. package/dist/mocked_classnames_esm/src/components/Tree/components/TreeFile/TreeFile.js.map +1 -1
  41. package/dist/mocked_classnames_esm/src/components/Tree/components/TreeFolder/TreeFolder.js +1 -1
  42. package/dist/mocked_classnames_esm/src/components/Tree/components/TreeFolder/TreeFolder.js.map +1 -1
  43. package/dist/mocked_classnames_esm/src/components/Tree/components/TreeFolder/TreeFolder.scss.js +1 -1
  44. package/dist/types/components/Tree/Tree.d.ts +2 -1
  45. package/dist/types/components/Tree/Tree.d.ts.map +1 -1
  46. package/dist/types/components/Tree/TreeContext.d.ts +2 -1
  47. package/dist/types/components/Tree/TreeContext.d.ts.map +1 -1
  48. package/dist/types/components/Tree/components/TreeFile/TreeFile.d.ts.map +1 -1
  49. package/dist/types/components/Tree/components/TreeFolder/TreeFolder.d.ts.map +1 -1
  50. package/package.json +2 -2
  51. package/src/components/Tree/Tree.tsx +12 -4
  52. package/src/components/Tree/TreeContext.ts +2 -1
  53. package/src/components/Tree/__stories__/Tree.stories.tsx +3 -2
  54. package/src/components/Tree/components/TreeFile/TreeFile.tsx +8 -1
  55. package/src/components/Tree/components/TreeFolder/TreeFolder.scss +1 -1
  56. package/src/components/Tree/components/TreeFolder/TreeFolder.tsx +11 -1
@@ -14,9 +14,10 @@ interface Props {
14
14
  alwaysExpanded?: boolean;
15
15
  parentIconPath?: PathName;
16
16
  childIconPath?: PathName;
17
- onClick?: (path: string) => void;
17
+ onClick?: (path: string, node: TreeFile) => void;
18
18
  className?: string;
19
19
  enableSorting?: boolean;
20
+ readOnly?: boolean;
20
21
  onMove: (draggedItemPath: string, dropTargetPath: string, parentNode: TreeFile | null, draggedNode: TreeFile) => void;
21
22
  }
22
23
  type NativeAttrs = Omit<React.HTMLAttributes<any>, keyof Props>;
@@ -1 +1 @@
1
- {"version":3,"file":"Tree.d.ts","sourceRoot":"","sources":["../../../../src/components/Tree/Tree.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAuC,MAAM,OAAO,CAAC;AAK5D,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAMjD,QAAA,MAAM,iBAAiB,uBAA6B,CAAC;AAGrD,MAAM,MAAM,QAAQ,GAAG;IACrB,IAAI,EAAE,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IACxB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,UAAU,KAAK;IACb,KAAK,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IACxB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,cAAc,CAAC,EAAE,QAAQ,CAAC;IAC1B,aAAa,CAAC,EAAE,QAAQ,CAAC;IACzB,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,MAAM,EAAE,CAAC,eAAe,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,GAAG,IAAI,EAAE,WAAW,EAAE,QAAQ,KAAK,IAAI,CAAC;CACvH;AAQD,KAAK,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,MAAM,KAAK,CAAC,CAAC;AAChE,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG,WAAW,CAAC;AAE5C,QAAA,MAAM,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAwPtD,CAAC;AAKF,eAAe,IAAI,CAAC"}
1
+ {"version":3,"file":"Tree.d.ts","sourceRoot":"","sources":["../../../../src/components/Tree/Tree.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAuC,MAAM,OAAO,CAAC;AAK5D,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAMjD,QAAA,MAAM,iBAAiB,uBAA6B,CAAC;AAGrD,MAAM,MAAM,QAAQ,GAAG;IACrB,IAAI,EAAE,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IACxB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,UAAU,KAAK;IACb,KAAK,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IACxB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,cAAc,CAAC,EAAE,QAAQ,CAAC;IAC1B,aAAa,CAAC,EAAE,QAAQ,CAAC;IACzB,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IACjD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,MAAM,EAAE,CAAC,eAAe,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,GAAG,IAAI,EAAE,WAAW,EAAE,QAAQ,KAAK,IAAI,CAAC;CACvH;AAQD,KAAK,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,MAAM,KAAK,CAAC,CAAC;AAChE,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG,WAAW,CAAC;AAE5C,QAAA,MAAM,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC,SAAS,CAAC,CA+PtD,CAAC;AAKF,eAAe,IAAI,CAAC"}
@@ -1,6 +1,7 @@
1
1
  import React from "react";
2
+ import { TreeFile } from "./Tree";
2
3
  export interface TreeConfig {
3
- onFileClick?: (path: string) => void;
4
+ onFileClick?: (path: string, node: TreeFile) => void;
4
5
  initialExpand: boolean;
5
6
  isImperative: boolean;
6
7
  alwaysExpanded: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"TreeContext.d.ts","sourceRoot":"","sources":["../../../../src/components/Tree/TreeContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,WAAW,UAAU;IACzB,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,aAAa,EAAE,OAAO,CAAC;IACvB,YAAY,EAAE,OAAO,CAAC;IACtB,cAAc,EAAE,OAAO,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;CACvB;AAUD,eAAO,MAAM,WAAW,2BAAkD,CAAC;AAE3E,eAAO,MAAM,cAAc,QAAO,UACS,CAAC"}
1
+ {"version":3,"file":"TreeContext.d.ts","sourceRoot":"","sources":["../../../../src/components/Tree/TreeContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAElC,MAAM,WAAW,UAAU;IACzB,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IACrD,aAAa,EAAE,OAAO,CAAC;IACvB,YAAY,EAAE,OAAO,CAAC;IACtB,cAAc,EAAE,OAAO,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;CACvB;AAUD,eAAO,MAAM,WAAW,2BAAkD,CAAC;AAE3E,eAAO,MAAM,cAAc,QAAO,UACS,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"TreeFile.d.ts","sourceRoot":"","sources":["../../../../../../src/components/Tree/components/TreeFile/TreeFile.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkB,MAAM,OAAO,CAAC;AACvC,OAAO,iBAAiB,CAAC;AAMzB,UAAU,KAAK;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,CAAC,eAAe,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,KAAK,IAAI,CAAC;CACnE;AAQD,QAAA,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CA2E7B,CAAC;AAGF,eAAe,QAAQ,CAAC"}
1
+ {"version":3,"file":"TreeFile.d.ts","sourceRoot":"","sources":["../../../../../../src/components/Tree/components/TreeFile/TreeFile.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkB,MAAM,OAAO,CAAC;AACvC,OAAO,iBAAiB,CAAC;AAMzB,UAAU,KAAK;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,CAAC,eAAe,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,KAAK,IAAI,CAAC;CACnE;AAQD,QAAA,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAkF7B,CAAC;AAGF,eAAe,QAAQ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"TreeFolder.d.ts","sourceRoot":"","sources":["../../../../../../src/components/Tree/components/TreeFolder/TreeFolder.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkD,MAAM,OAAO,CAAC;AAEvE,OAAO,mBAAmB,CAAC;AAY3B,UAAU,KAAK;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,CAAC,eAAe,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,KAAK,IAAI,CAAC;CACnE;AAQD,QAAA,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAwGxD,CAAC;AAKF,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"TreeFolder.d.ts","sourceRoot":"","sources":["../../../../../../src/components/Tree/components/TreeFolder/TreeFolder.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkD,MAAM,OAAO,CAAC;AAEvE,OAAO,mBAAmB,CAAC;AAY3B,UAAU,KAAK;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,CAAC,eAAe,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,KAAK,IAAI,CAAC;CACnE;AAQD,QAAA,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAkHxD,CAAC;AAKF,eAAe,UAAU,CAAC"}
@@ -1,2 +1,2 @@
1
- import{slicedToArray as e,toConsumableArray as n,createForOfIteratorHelper as t}from"../../../_virtual/_rollupPluginBabelHelpers.js";import{__rest as a}from"../../../_virtual/_tslib.js";import{jsx as r}from"@emotion/react/jsx-runtime";import{useState as i,useEffect as o,useMemo as l}from"react";import c from"./components/TreeFolder/TreeFolder.js";import f from"./components/TreeFile/TreeFile.js";import{TreeContext as s}from"./TreeContext.js";import{sortChildren as u}from"./utils/treeHelp.js";import{DndProvider as p}from"react-dnd";import{HTML5Backend as d}from"react-dnd-html5-backend";var v=function(){for(var e=arguments.length,n=Array(e),t=0;e>t;t++)n[t]=arguments[t];return n}("directory","file")[0],m=function(m){var h=m.children,g=m.onClick,y=m.initialExpand,j=void 0!==y&&y,b=m.alwaysExpanded,x=void 0!==b&&b,T=m.parentIconPath,O=void 0===T?"default":T,P=m.childIconPath,E=void 0===P?"default":P,I=m.value,C=m.className,F=m.enableSorting,k=void 0!==F&&F,N=m.onMove,w=a(m,["children","onClick","initialExpand","alwaysExpanded","parentIconPath","childIconPath","value","className","enableSorting","onMove"]),M=i(I),_=e(M,2),A=_[0],B=_[1];o((function(){I&&B(I)}),[I]);var H=function e(n,a){var r,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",o=t(n);try{for(o.s();!(r=o.n()).done;){var l=r.value,c=i?"".concat(i,"/").concat(l.name):l.name;if(l.name===a)return c;if(l.type===v&&l.files){var f=e(l.files,a,c);if(f)return f}}}catch(e){o.e(e)}finally{o.f()}return null},S=function(e,n){if(!A)return!1;var t,a,r,i=H(A,e.split("/").pop()||"")||e,o=H(A,n.split("/").pop()||"")||n;return t=o,a=i.split("/").filter(Boolean),(r=t.split("/").filter(Boolean)).length>a.length&&a.every((function(e,n){return e===r[n]}))},q=function e(t,a){for(var r=0;t.length>r;r++){var i=t[r],o=a.split("/").pop()||"";if(i.name===o)return{node:i,updatedTree:[].concat(n(t.slice(0,r)),n(t.slice(r+1)))};if(i.type===v&&i.files){var l=e(i.files,a),c=l.node;if(c)return t[r].files=l.updatedTree,{node:c,updatedTree:t}}}return{updatedTree:t}},z=function e(t,a,r){var i=a.split("/"),o=i.pop()||"",l=i.join("/");return t.map((function(t){var i=l?"".concat(l,"/").concat(t.name):t.name;if(t.type===v){if(i===l)return Object.assign(Object.assign({},t),{files:[].concat(n(t.files||[]),[r])});if(t.name===o)return Object.assign(Object.assign({},t),{files:[].concat(n(t.files||[]),[r])});if(t.files)return Object.assign(Object.assign({},t),{files:e(t.files,a,r)})}return t}))},D=function(e,n){var a,r=n.split("/"),i=e,o=null,l=t(r);try{var c,f=function(){var e=a.value;if(!(o=i.find((function(n){return n.name===e}))||null))return{v:null};o.files&&(i=o.files)};for(l.s();!(a=l.n()).done;)if(c=f())return c.v}catch(e){l.e(e)}finally{l.f()}return o},G=function e(n,a){var r,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",o=t(n);try{for(o.s();!(r=o.n()).done;){var l=r.value,c=i?"".concat(i,"/").concat(l.name):l.name;if(l.name===a)return c;if(l.type===v&&l.files){var f=e(l.files,a,c);if(f)return f}}}catch(e){o.e(e)}finally{o.f()}return a},J=!(!I||0>=I.length),K=function(e){g&&g(e)},L=l((function(){return{onFileClick:K,initialExpand:x||j,isImperative:J,alwaysExpanded:x,parentIconPath:O,childIconPath:E}}),[j,K,J,x,O,E]),Q=J?function e(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1?arguments[1]:void 0,a=arguments.length>2?arguments[2]:void 0,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:"";return n&&n.length?(a?n.sort((function(e,n){return e.type!==n.type?e.type!==v?1:-1:e.name.localeCompare(n.name)})):n).map((function(n,l){var s=o?"".concat(o,"/").concat(n.name):n.name;return n.type===v?r(c,Object.assign({name:n.name,extra:n.extra,onMove:t,parentPath:o,level:i,active:(null==n?void 0:n.active)||!1},{children:e(n.files||[],t,a,i+1,s)}),"folder-".concat(n.name,"-").concat(l)):r(f,{name:n.name,extra:n.extra,onMove:t,parentPath:o,level:i,active:(null==n?void 0:n.active)||!1},"file-".concat(n.name,"-").concat(l))})):null}(A||[],(function(e,n){if(A){var t=e.split("/").pop()||"",a=n.split("/").pop()||"",r=G(A,t),i=G(A,a);if(!S(r,i)){var o=q(A,e),l=o.node,c=o.updatedTree;if(l){var f=D(A,n),s=n;if(f&&f.type!==v){var u=n.split("/");u.pop(),s=u.join("/")}var p=z(c,s,l);B(p);var d=D(p,s);N(r,i,d||null,l)}}}}),k):u(h,c);return r(p,Object.assign({backend:d},{children:r(s.Provider,Object.assign({value:L},{children:r("div",Object.assign({className:C},w,{children:Q}))}))}))};m.defaultProps={initialExpand:!1,alwaysExpanded:!1,className:""},m.displayName="Tree";export{m as default};
1
+ import{slicedToArray as e,createForOfIteratorHelper as n,toConsumableArray as t}from"../../../_virtual/_rollupPluginBabelHelpers.js";import{__rest as a}from"../../../_virtual/_tslib.js";import{jsx as r}from"@emotion/react/jsx-runtime";import{useState as i,useEffect as o,useMemo as l}from"react";import c from"./components/TreeFolder/TreeFolder.js";import f from"./components/TreeFile/TreeFile.js";import{TreeContext as s}from"./TreeContext.js";import{sortChildren as d}from"./utils/treeHelp.js";import{DndProvider as u}from"react-dnd";import{HTML5Backend as p}from"react-dnd-html5-backend";var v=function(){for(var e=arguments.length,n=Array(e),t=0;e>t;t++)n[t]=arguments[t];return n}("directory","file")[0],m=function(m){var h=m.children,y=m.onClick,g=m.initialExpand,j=void 0!==g&&g,b=m.alwaysExpanded,x=void 0!==b&&b,O=m.parentIconPath,T=void 0===O?"default":O,P=m.childIconPath,E=void 0===P?"default":P,I=m.value,C=m.className,F=m.enableSorting,k=void 0!==F&&F,N=m.readOnly,w=void 0!==N&&N,M=m.onMove,_=a(m,["children","onClick","initialExpand","alwaysExpanded","parentIconPath","childIconPath","value","className","enableSorting","readOnly","onMove"]),A=i(I),B=e(A,2),H=B[0],S=B[1];o((function(){I&&S(I)}),[I]);var q=function e(t,a){var r,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",o=n(t);try{for(o.s();!(r=o.n()).done;){var l=r.value,c=i?"".concat(i,"/").concat(l.name):l.name;if(l.name===a)return c;if(l.type===v&&l.files){var f=e(l.files,a,c);if(f)return f}}}catch(e){o.e(e)}finally{o.f()}return null},z=function(e,n){if(!H)return!1;var t,a,r,i=q(H,e.split("/").pop()||"")||e,o=q(H,n.split("/").pop()||"")||n;return t=o,a=i.split("/").filter(Boolean),(r=t.split("/").filter(Boolean)).length>a.length&&a.every((function(e,n){return e===r[n]}))},D=function e(n,a){for(var r=0;n.length>r;r++){var i=n[r],o=a.split("/").pop()||"";if(i.name===o)return{node:i,updatedTree:[].concat(t(n.slice(0,r)),t(n.slice(r+1)))};if(i.type===v&&i.files){var l=e(i.files,a),c=l.node;if(c)return n[r].files=l.updatedTree,{node:c,updatedTree:n}}}return{updatedTree:n}},G=function e(n,a,r){var i=a.split("/"),o=i.pop()||"",l=i.join("/");return n.map((function(n){var i=l?"".concat(l,"/").concat(n.name):n.name;if(n.type===v){if(i===l)return Object.assign(Object.assign({},n),{files:[].concat(t(n.files||[]),[r])});if(n.name===o)return Object.assign(Object.assign({},n),{files:[].concat(t(n.files||[]),[r])});if(n.files)return Object.assign(Object.assign({},n),{files:e(n.files,a,r)})}return n}))},J=function(e,t){var a,r=t.split("/"),i=e,o=null,l=n(r);try{var c,f=function(){var e=a.value;if(!(o=i.find((function(n){return n.name===e}))||null))return{v:null};o.files&&(i=o.files)};for(l.s();!(a=l.n()).done;)if(c=f())return c.v}catch(e){l.e(e)}finally{l.f()}return o},K=function e(t,a){var r,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",o=n(t);try{for(o.s();!(r=o.n()).done;){var l=r.value,c=i?"".concat(i,"/").concat(l.name):l.name;if(l.name===a)return c;if(l.type===v&&l.files){var f=e(l.files,a,c);if(f)return f}}}catch(e){o.e(e)}finally{o.f()}return a},L=!(!I||0>=I.length),Q=function(e){if(y&&H){var n=J(H,e);n&&y(e,n)}},R=l((function(){return{onFileClick:Q,initialExpand:x||j,isImperative:L,alwaysExpanded:x,parentIconPath:T,childIconPath:E}}),[j,Q,L,x,T,E]),U=L?function e(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1?arguments[1]:void 0,a=arguments.length>2?arguments[2]:void 0,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:"";return n&&n.length?(a?n.sort((function(e,n){return e.type!==n.type?e.type!==v?1:-1:e.name.localeCompare(n.name)})):n).map((function(n,l){var s=o?"".concat(o,"/").concat(n.name):n.name;return n.type===v?r(c,Object.assign({name:n.name,extra:n.extra,onMove:w?void 0:t,parentPath:o,level:i,active:(null==n?void 0:n.active)||!1},{children:e(n.files||[],t,a,i+1,s)}),"folder-".concat(n.name,"-").concat(l)):r(f,{name:n.name,extra:n.extra,onMove:w?void 0:t,parentPath:o,level:i,active:(null==n?void 0:n.active)||!1},"file-".concat(n.name,"-").concat(l))})):null}(H||[],(function(e,n){if(H&&!w){var t=e.split("/").pop()||"",a=n.split("/").pop()||"",r=K(H,t),i=K(H,a);if(!z(r,i)){var o=D(H,e),l=o.node,c=o.updatedTree;if(l){var f=J(H,n),s=n;if(f&&f.type!==v){var d=n.split("/");d.pop(),s=d.join("/")}var u=G(c,s,l);S(u);var p=J(u,s);M(r,i,p||null,l)}}}}),k):d(h,c);return r(u,Object.assign({backend:p},{children:r(s.Provider,Object.assign({value:R},{children:r("div",Object.assign({className:C},_,{children:U}))}))}))};m.defaultProps={initialExpand:!1,alwaysExpanded:!1,className:""},m.displayName="Tree";export{m as default};
2
2
  //# sourceMappingURL=Tree.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Tree.js","sources":["../../../../../src/components/Tree/Tree.tsx"],"sourcesContent":["import React, { useEffect, useMemo, useState } from \"react\";\nimport TreeFolder from \"./components/TreeFolder/TreeFolder\";\nimport TreeFile from \"./components/TreeFile/TreeFile\";\nimport { TreeContext } from \"./TreeContext\";\nimport { makeChildPath, sortChildren } from \"./utils/treeHelp\";\nimport { PathName } from \"../Icon/SvgIcon/paths\";\nimport { DndProvider } from \"react-dnd\";\nimport { HTML5Backend } from 'react-dnd-html5-backend';\n\nconst tuple = <T extends string[]>(...args: T) => args;\n\nconst FileTreeValueType = tuple(\"directory\", \"file\");\nconst directoryType = FileTreeValueType[0];\n\nexport type TreeFile = {\n type: (typeof FileTreeValueType)[number];\n name: string;\n extra?: string;\n files?: Array<TreeFile>;\n active?: boolean;\n};\n\ninterface Props {\n value?: Array<TreeFile>;\n initialExpand?: boolean;\n alwaysExpanded?: boolean;\n parentIconPath?: PathName;\n childIconPath?: PathName;\n onClick?: (path: string) => void;\n className?: string;\n enableSorting?: boolean;\n onMove: (draggedItemPath: string, dropTargetPath: string, parentNode: TreeFile | null, draggedNode: TreeFile) => void;\n}\n\nconst defaultProps = {\n initialExpand: false,\n alwaysExpanded: false,\n className: \"\",\n};\n\ntype NativeAttrs = Omit<React.HTMLAttributes<any>, keyof Props>;\nexport type TreeProps = Props & NativeAttrs;\n\nconst Tree: React.FC<React.PropsWithChildren<TreeProps>> = ({\n children,\n onClick,\n initialExpand = false,\n alwaysExpanded = false,\n parentIconPath = \"default\",\n childIconPath = \"default\",\n value,\n className,\n enableSorting = false,\n onMove,\n ...props\n}: React.PropsWithChildren<TreeProps>) => {\n const [treeData, setTreeData] = useState(value);\n\n useEffect(() => {\n if (value) {\n setTreeData(value);\n }\n }, [value]);\n\n const findFullPath = (nodes: TreeFile[], targetName: string, currentPath: string = \"\"): string | null => {\n for (const node of nodes) {\n const nodePath = currentPath ? `${currentPath}/${node.name}` : node.name;\n if (node.name === targetName) {\n return nodePath;\n }\n if (node.type === directoryType && node.files) {\n const foundPath = findFullPath(node.files, targetName, nodePath);\n if (foundPath) return foundPath;\n }\n }\n return null;\n };\n\n const isParentPath = (parentPath: string, childPath: string): boolean => {\n const parentParts = parentPath.split('/').filter(Boolean);\n const childParts = childPath.split('/').filter(Boolean);\n\n if (parentParts.length >= childParts.length) return false;\n\n return parentParts.every((part, index) => part === childParts[index]);\n };\n\n const isChildOfSource = (sourcePath: string, targetPath: string): boolean => {\n if (!treeData) return false;\n\n const fullSourcePath = findFullPath(treeData, sourcePath.split('/').pop() || \"\") || sourcePath;\n const fullTargetPath = findFullPath(treeData, targetPath.split('/').pop() || \"\") || targetPath;\n\n return isParentPath(fullSourcePath, fullTargetPath);\n };\n\n const findAndRemoveNode = (nodes: TreeFile[], path: string): { node?: TreeFile; updatedTree: TreeFile[] } => {\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i];\n const nodeName = path.split('/').pop() || \"\";\n\n if (node.name === nodeName) {\n return { node, updatedTree: [...nodes.slice(0, i), ...nodes.slice(i + 1)] };\n } else if (node.type === directoryType && node.files) {\n const { node: foundNode, updatedTree: updatedFiles } = findAndRemoveNode(node.files, path);\n if (foundNode) {\n nodes[i].files = updatedFiles;\n return { node: foundNode, updatedTree: nodes };\n }\n }\n }\n return { updatedTree: nodes };\n };\n\n const addNodeToTarget = (nodes: TreeFile[], targetPath: string, node: TreeFile): TreeFile[] => {\n const pathParts = targetPath.split('/');\n const targetName = pathParts.pop() || \"\";\n const parentPath = pathParts.join('/');\n \n return nodes.map((item) => {\n const itemPath = parentPath ? `${parentPath}/${item.name}` : item.name;\n \n if (item.type === directoryType) {\n if (itemPath === parentPath) {\n return {\n ...item,\n files: [...(item.files || []), node]\n };\n }\n\n if (item.name === targetName) {\n return {\n ...item,\n files: [...(item.files || []), node]\n };\n }\n\n if (item.files) {\n return {\n ...item,\n files: addNodeToTarget(item.files, targetPath, node)\n };\n }\n }\n return item;\n });\n };\n\n const findNodeByPath = (nodes: TreeFile[], path: string): TreeFile | null => {\n const pathParts = path.split('/');\n let currentNodes = nodes;\n let currentNode: TreeFile | null = null;\n\n for (const part of pathParts) {\n currentNode = currentNodes.find(node => node.name === part) || null;\n if (!currentNode) return null;\n if (currentNode.files) {\n currentNodes = currentNode.files;\n }\n }\n\n return currentNode;\n };\n\n const buildFullPath = (nodes: TreeFile[], targetName: string, currentPath: string = \"\"): string => {\n for (const node of nodes) {\n const nodePath = currentPath ? `${currentPath}/${node.name}` : node.name;\n \n if (node.name === targetName) {\n return nodePath;\n }\n \n if (node.type === directoryType && node.files) {\n const foundPath = buildFullPath(node.files, targetName, nodePath);\n if (foundPath) return foundPath;\n }\n }\n return targetName;\n };\n\n const handleMove = (draggedPath: string, targetPath: string) => {\n if (!treeData) return;\n \n const draggedName = draggedPath.split('/').pop() || \"\";\n const targetName = targetPath.split('/').pop() || \"\";\n \n const fullSourcePath = buildFullPath(treeData, draggedName);\n const fullTargetPath = buildFullPath(treeData, targetName);\n \n if (isChildOfSource(fullSourcePath, fullTargetPath)) {\n return;\n }\n \n const { node: draggedNode, updatedTree } = findAndRemoveNode(treeData, draggedPath);\n \n if (draggedNode) {\n const targetNode = findNodeByPath(treeData, targetPath);\n\n let finalTargetPath = targetPath;\n\n if (targetNode && targetNode.type !== directoryType) {\n const pathParts = targetPath.split('/');\n pathParts.pop();\n finalTargetPath = pathParts.join('/');\n }\n\n const newTreeData = addNodeToTarget(updatedTree, finalTargetPath, draggedNode);\n setTreeData(newTreeData);\n const newParentNode = findNodeByPath(newTreeData, finalTargetPath);\n onMove(fullSourcePath, fullTargetPath, newParentNode || null, draggedNode);\n }\n };\n\n const isImperative = Boolean(value && value.length > 0);\n const onFileClick = (path: string) => {\n onClick && onClick(path);\n };\n\n const initialValue = useMemo(\n () => ({\n onFileClick,\n initialExpand: alwaysExpanded || initialExpand,\n isImperative,\n alwaysExpanded,\n parentIconPath,\n childIconPath,\n }),\n [initialExpand, onFileClick, isImperative, alwaysExpanded, parentIconPath, childIconPath]\n );\n\n const makeChildren = (\n value: Array<TreeFile> = [],\n onMove: (draggedPath: string, targetPath: string) => void,\n enableSorting: boolean,\n level: number = 0,\n parentPath: string = \"\",\n ) => {\n if (!value || !value.length) return null;\n \n const sortedValue = enableSorting\n ? value.sort((a, b) => {\n if (a.type !== b.type) return a.type !== directoryType ? 1 : -1;\n return a.name.localeCompare(b.name);\n })\n : value;\n \n return sortedValue.map((item, index) => {\n const currentPath = parentPath ? `${parentPath}/${item.name}` : item.name;\n \n if (item.type === directoryType) {\n return (\n <TreeFolder\n name={item.name}\n extra={item.extra}\n key={`folder-${item.name}-${index}`}\n onMove={onMove}\n parentPath={parentPath}\n level={level}\n active={item?.active || false}\n >\n {makeChildren(item.files || [], onMove, enableSorting, level + 1, currentPath)}\n </TreeFolder>\n );\n }\n return (\n <TreeFile\n name={item.name}\n extra={item.extra}\n key={`file-${item.name}-${index}`}\n onMove={onMove}\n parentPath={parentPath}\n level={level}\n active={item?.active || false}\n />\n );\n });\n };\n \n const customChildren = isImperative\n ? makeChildren(treeData || [], handleMove, enableSorting)\n : sortChildren(children, TreeFolder);\n\n return (\n <DndProvider backend={HTML5Backend}>\n <TreeContext.Provider value={initialValue}>\n <div className={className} {...props}>\n {customChildren}\n </div>\n </TreeContext.Provider>\n </DndProvider>\n );\n};\n\nTree.defaultProps = defaultProps;\nTree.displayName = \"Tree\";\n\nexport default Tree;\n"],"names":["directoryType","_len","arguments","length","args","Array","_key","tuple","Tree","_a","children","onClick","_a$initialExpand","initialExpand","_a$alwaysExpanded","alwaysExpanded","_a$parentIconPath","parentIconPath","_a$childIconPath","childIconPath","value","className","_a$enableSorting","enableSorting","onMove","props","__rest","_useState","useState","_useState2","_slicedToArray","treeData","setTreeData","useEffect","findFullPath","nodes","targetName","_step","currentPath","undefined","_iterator","_createForOfIteratorHelper","s","n","done","node","nodePath","concat","name","type","files","foundPath","err","e","f","isChildOfSource","sourcePath","targetPath","childPath","parentParts","childParts","fullSourcePath","split","pop","fullTargetPath","filter","Boolean","every","part","index","findAndRemoveNode","path","i","nodeName","updatedTree","_toConsumableArray","slice","_findAndRemoveNode","foundNode","addNodeToTarget","pathParts","parentPath","join","map","item","itemPath","Object","assign","findNodeByPath","_step2","currentNodes","currentNode","_iterator2","_ret","_loop","find","v","buildFullPath","_step3","_iterator3","isImperative","onFileClick","initialValue","useMemo","customChildren","makeChildren","level","sort","a","b","localeCompare","_jsx","TreeFolder","extra","active","TreeFile","draggedPath","draggedName","_findAndRemoveNode2","draggedNode","targetNode","finalTargetPath","newTreeData","newParentNode","sortChildren","DndProvider","backend","HTML5Backend","TreeContext","Provider","defaultProps","displayName"],"mappings":"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"}
1
+ {"version":3,"file":"Tree.js","sources":["../../../../../src/components/Tree/Tree.tsx"],"sourcesContent":["import React, { useEffect, useMemo, useState } from \"react\";\nimport TreeFolder from \"./components/TreeFolder/TreeFolder\";\nimport TreeFile from \"./components/TreeFile/TreeFile\";\nimport { TreeContext } from \"./TreeContext\";\nimport { makeChildPath, sortChildren } from \"./utils/treeHelp\";\nimport { PathName } from \"../Icon/SvgIcon/paths\";\nimport { DndProvider } from \"react-dnd\";\nimport { HTML5Backend } from 'react-dnd-html5-backend';\n\nconst tuple = <T extends string[]>(...args: T) => args;\n\nconst FileTreeValueType = tuple(\"directory\", \"file\");\nconst directoryType = FileTreeValueType[0];\n\nexport type TreeFile = {\n type: (typeof FileTreeValueType)[number];\n name: string;\n extra?: string;\n files?: Array<TreeFile>;\n active?: boolean;\n};\n\ninterface Props {\n value?: Array<TreeFile>;\n initialExpand?: boolean;\n alwaysExpanded?: boolean;\n parentIconPath?: PathName;\n childIconPath?: PathName;\n onClick?: (path: string, node: TreeFile) => void;\n className?: string;\n enableSorting?: boolean;\n readOnly?: boolean\n onMove: (draggedItemPath: string, dropTargetPath: string, parentNode: TreeFile | null, draggedNode: TreeFile) => void;\n}\n\nconst defaultProps = {\n initialExpand: false,\n alwaysExpanded: false,\n className: \"\",\n};\n\ntype NativeAttrs = Omit<React.HTMLAttributes<any>, keyof Props>;\nexport type TreeProps = Props & NativeAttrs;\n\nconst Tree: React.FC<React.PropsWithChildren<TreeProps>> = ({\n children,\n onClick,\n initialExpand = false,\n alwaysExpanded = false,\n parentIconPath = \"default\",\n childIconPath = \"default\",\n value,\n className,\n enableSorting = false,\n readOnly = false,\n onMove,\n ...props\n}: React.PropsWithChildren<TreeProps>) => {\n const [treeData, setTreeData] = useState(value);\n\n useEffect(() => {\n if (value) {\n setTreeData(value);\n }\n }, [value]);\n\n const findFullPath = (nodes: TreeFile[], targetName: string, currentPath: string = \"\"): string | null => {\n for (const node of nodes) {\n const nodePath = currentPath ? `${currentPath}/${node.name}` : node.name;\n if (node.name === targetName) {\n return nodePath;\n }\n if (node.type === directoryType && node.files) {\n const foundPath = findFullPath(node.files, targetName, nodePath);\n if (foundPath) return foundPath;\n }\n }\n return null;\n };\n\n const isParentPath = (parentPath: string, childPath: string): boolean => {\n const parentParts = parentPath.split('/').filter(Boolean);\n const childParts = childPath.split('/').filter(Boolean);\n\n if (parentParts.length >= childParts.length) return false;\n\n return parentParts.every((part, index) => part === childParts[index]);\n };\n\n const isChildOfSource = (sourcePath: string, targetPath: string): boolean => {\n if (!treeData) return false;\n\n const fullSourcePath = findFullPath(treeData, sourcePath.split('/').pop() || \"\") || sourcePath;\n const fullTargetPath = findFullPath(treeData, targetPath.split('/').pop() || \"\") || targetPath;\n\n return isParentPath(fullSourcePath, fullTargetPath);\n };\n\n const findAndRemoveNode = (nodes: TreeFile[], path: string): { node?: TreeFile; updatedTree: TreeFile[] } => {\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i];\n const nodeName = path.split('/').pop() || \"\";\n\n if (node.name === nodeName) {\n return { node, updatedTree: [...nodes.slice(0, i), ...nodes.slice(i + 1)] };\n } else if (node.type === directoryType && node.files) {\n const { node: foundNode, updatedTree: updatedFiles } = findAndRemoveNode(node.files, path);\n if (foundNode) {\n nodes[i].files = updatedFiles;\n return { node: foundNode, updatedTree: nodes };\n }\n }\n }\n return { updatedTree: nodes };\n };\n\n const addNodeToTarget = (nodes: TreeFile[], targetPath: string, node: TreeFile): TreeFile[] => {\n const pathParts = targetPath.split('/');\n const targetName = pathParts.pop() || \"\";\n const parentPath = pathParts.join('/');\n \n return nodes.map((item) => {\n const itemPath = parentPath ? `${parentPath}/${item.name}` : item.name;\n \n if (item.type === directoryType) {\n if (itemPath === parentPath) {\n return {\n ...item,\n files: [...(item.files || []), node]\n };\n }\n\n if (item.name === targetName) {\n return {\n ...item,\n files: [...(item.files || []), node]\n };\n }\n\n if (item.files) {\n return {\n ...item,\n files: addNodeToTarget(item.files, targetPath, node)\n };\n }\n }\n return item;\n });\n };\n\n const findNodeByPath = (nodes: TreeFile[], path: string): TreeFile | null => {\n const pathParts = path.split('/');\n let currentNodes = nodes;\n let currentNode: TreeFile | null = null;\n\n for (const part of pathParts) {\n currentNode = currentNodes.find(node => node.name === part) || null;\n if (!currentNode) return null;\n if (currentNode.files) {\n currentNodes = currentNode.files;\n }\n }\n\n return currentNode;\n };\n\n const buildFullPath = (nodes: TreeFile[], targetName: string, currentPath: string = \"\"): string => {\n for (const node of nodes) {\n const nodePath = currentPath ? `${currentPath}/${node.name}` : node.name;\n \n if (node.name === targetName) {\n return nodePath;\n }\n \n if (node.type === directoryType && node.files) {\n const foundPath = buildFullPath(node.files, targetName, nodePath);\n if (foundPath) return foundPath;\n }\n }\n return targetName;\n };\n\n const handleMove = (draggedPath: string, targetPath: string) => {\n if (!treeData) return;\n if (readOnly) return;\n \n const draggedName = draggedPath.split('/').pop() || \"\";\n const targetName = targetPath.split('/').pop() || \"\";\n \n const fullSourcePath = buildFullPath(treeData, draggedName);\n const fullTargetPath = buildFullPath(treeData, targetName);\n \n if (isChildOfSource(fullSourcePath, fullTargetPath)) {\n return;\n }\n \n const { node: draggedNode, updatedTree } = findAndRemoveNode(treeData, draggedPath);\n \n if (draggedNode) {\n const targetNode = findNodeByPath(treeData, targetPath);\n\n let finalTargetPath = targetPath;\n\n if (targetNode && targetNode.type !== directoryType) {\n const pathParts = targetPath.split('/');\n pathParts.pop();\n finalTargetPath = pathParts.join('/');\n }\n\n const newTreeData = addNodeToTarget(updatedTree, finalTargetPath, draggedNode);\n setTreeData(newTreeData);\n const newParentNode = findNodeByPath(newTreeData, finalTargetPath);\n onMove(fullSourcePath, fullTargetPath, newParentNode || null, draggedNode);\n }\n };\n\n const isImperative = Boolean(value && value.length > 0);\n const onFileClick = (path: string) => {\n if (onClick && treeData) {\n const node = findNodeByPath(treeData, path);\n if (node) {\n onClick(path, node);\n }\n }\n };\n\n const initialValue = useMemo(\n () => ({\n onFileClick,\n initialExpand: alwaysExpanded || initialExpand,\n isImperative,\n alwaysExpanded,\n parentIconPath,\n childIconPath,\n }),\n [initialExpand, onFileClick, isImperative, alwaysExpanded, parentIconPath, childIconPath]\n );\n\n const makeChildren = (\n value: Array<TreeFile> = [],\n onMove: (draggedPath: string, targetPath: string) => void,\n enableSorting: boolean,\n level: number = 0,\n parentPath: string = \"\",\n ) => {\n if (!value || !value.length) return null;\n \n const sortedValue = enableSorting\n ? value.sort((a, b) => {\n if (a.type !== b.type) return a.type !== directoryType ? 1 : -1;\n return a.name.localeCompare(b.name);\n })\n : value;\n \n return sortedValue.map((item, index) => {\n const currentPath = parentPath ? `${parentPath}/${item.name}` : item.name;\n \n if (item.type === directoryType) {\n return (\n <TreeFolder\n name={item.name}\n extra={item.extra}\n key={`folder-${item.name}-${index}`}\n onMove={readOnly ? undefined : onMove}\n parentPath={parentPath}\n level={level}\n active={item?.active || false}\n >\n {makeChildren(item.files || [], onMove, enableSorting, level + 1, currentPath)}\n </TreeFolder>\n );\n }\n return (\n <TreeFile\n name={item.name}\n extra={item.extra}\n key={`file-${item.name}-${index}`}\n onMove={readOnly ? undefined : onMove}\n parentPath={parentPath}\n level={level}\n active={item?.active || false}\n />\n );\n });\n };\n \n const customChildren = isImperative\n ? makeChildren(treeData || [], handleMove, enableSorting)\n : sortChildren(children, TreeFolder);\n\n return (\n <DndProvider backend={HTML5Backend}>\n <TreeContext.Provider value={initialValue}>\n <div className={className} {...props}>\n {customChildren}\n </div>\n </TreeContext.Provider>\n </DndProvider>\n );\n};\n\nTree.defaultProps = defaultProps;\nTree.displayName = \"Tree\";\n\nexport default Tree;\n"],"names":["directoryType","_len","arguments","length","args","Array","_key","tuple","Tree","_a","children","onClick","_a$initialExpand","initialExpand","_a$alwaysExpanded","alwaysExpanded","_a$parentIconPath","parentIconPath","_a$childIconPath","childIconPath","value","className","_a$enableSorting","enableSorting","_a$readOnly","readOnly","onMove","props","__rest","_useState","useState","_useState2","_slicedToArray","treeData","setTreeData","useEffect","findFullPath","nodes","targetName","_step","currentPath","undefined","_iterator","_createForOfIteratorHelper","s","n","done","node","nodePath","concat","name","type","files","foundPath","err","e","f","isChildOfSource","sourcePath","targetPath","childPath","parentParts","childParts","fullSourcePath","split","pop","fullTargetPath","filter","Boolean","every","part","index","findAndRemoveNode","path","i","nodeName","updatedTree","_toConsumableArray","slice","_findAndRemoveNode","foundNode","addNodeToTarget","pathParts","parentPath","join","map","item","itemPath","Object","assign","findNodeByPath","_step2","currentNodes","currentNode","_iterator2","_ret","_loop","find","v","buildFullPath","_step3","_iterator3","isImperative","onFileClick","initialValue","useMemo","customChildren","makeChildren","level","sort","a","b","localeCompare","_jsx","TreeFolder","extra","active","TreeFile","draggedPath","draggedName","_findAndRemoveNode2","draggedNode","targetNode","finalTargetPath","newTreeData","newParentNode","sortChildren","DndProvider","backend","HTML5Backend","TreeContext","Provider","defaultProps","displayName"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"TreeContext.js","sources":["../../../../../src/components/Tree/TreeContext.ts"],"sourcesContent":["import React from \"react\";\n\nexport interface TreeConfig {\n onFileClick?: (path: string) => void;\n initialExpand: boolean;\n isImperative: boolean;\n alwaysExpanded: boolean;\n parentIconPath: string;\n childIconPath: string;\n}\n\nconst defaultContext = {\n initialExpand: false,\n isImperative: false,\n alwaysExpanded: false,\n parentIconPath: \"default\",\n childIconPath: \"default\",\n};\n\nexport const TreeContext = React.createContext<TreeConfig>(defaultContext);\n\nexport const useTreeContext = (): TreeConfig =>\n React.useContext<TreeConfig>(TreeContext);\n"],"names":["TreeContext","React","createContext","initialExpand","isImperative","alwaysExpanded","parentIconPath","childIconPath","useTreeContext","useContext"],"mappings":"qBAWA,IAQaA,EAAcC,EAAMC,cARV,CACrBC,eAAe,EACfC,cAAc,EACdC,gBAAgB,EAChBC,eAAgB,UAChBC,cAAe,YAKJC,EAAiB,WAAH,OACzBP,EAAMQ,WAAuBT,EAAY"}
1
+ {"version":3,"file":"TreeContext.js","sources":["../../../../../src/components/Tree/TreeContext.ts"],"sourcesContent":["import React from \"react\";\nimport { TreeFile } from \"./Tree\";\n\nexport interface TreeConfig {\n onFileClick?: (path: string, node: TreeFile) => void;\n initialExpand: boolean;\n isImperative: boolean;\n alwaysExpanded: boolean;\n parentIconPath: string;\n childIconPath: string;\n}\n\nconst defaultContext = {\n initialExpand: false,\n isImperative: false,\n alwaysExpanded: false,\n parentIconPath: \"default\",\n childIconPath: \"default\",\n};\n\nexport const TreeContext = React.createContext<TreeConfig>(defaultContext);\n\nexport const useTreeContext = (): TreeConfig =>\n React.useContext<TreeConfig>(TreeContext);\n"],"names":["TreeContext","React","createContext","initialExpand","isImperative","alwaysExpanded","parentIconPath","childIconPath","useTreeContext","useContext"],"mappings":"qBAYA,IAQaA,EAAcC,EAAMC,cARV,CACrBC,eAAe,EACfC,cAAc,EACdC,gBAAgB,EAChBC,eAAgB,UAChBC,cAAe,YAKJC,EAAiB,WAAH,OACzBP,EAAMQ,WAAuBT,EAAY"}
@@ -1,2 +1,2 @@
1
- import{slicedToArray as e}from"../../../../../_virtual/_rollupPluginBabelHelpers.js";import{__rest as a}from"../../../../../_virtual/_tslib.js";import{jsx as t,jsxs as n}from"@emotion/react/jsx-runtime";import{useMemo as i}from"react";import"./TreeFile.scss.js";import{useTreeContext as r}from"../../TreeContext.js";import{makeChildPath as c,stopPropagation as o}from"../../utils/treeHelp.js";import s from"../../../Icon/Icon.js";import{useDrag as l,useDrop as m}from"react-dnd";var p=function(p){var g=p.name,f=p.parentPath,u=p.level,d=p.extra,h=p.className,v=p.onMove,j=p.active,T=void 0!==j&&j,b=a(p,["name","parentPath","level","extra","className","onMove","active"]),x=r(),y=x.onFileClick,N=x.childIconPath,P=i((function(){return c(g,f)}),[g,f]),E=l({type:"TREE_ITEM",item:{type:"file",path:P},collect:function(e){return{isDragging:e.isDragging()}}}),_=e(E,2),C=_[0].isDragging,I=_[1],O=m({accept:"TREE_ITEM",drop:function(e){e.path!==P&&v&&v(e.path,P)}}),M=e(O,2)[1],k={paddingLeft:"calc(1.875rem * ".concat(u+1,")")};return t("div",Object.assign({ref:function(e){return I(M(e))},className:"file-container ".concat(h," ").concat(C?"dragging":""," ").concat(T?"active":""),style:k,onClick:function(e){o(e),y&&y(P)}},b,{children:n("div",Object.assign({className:"names"},{children:["default"!==N&&t("span",Object.assign({className:"icon"},{children:t(s,{iconType:s.type.PATH,icon:"",iconPath:N,iconSize:16,useCurrentColor:!0,style:{display:"block",marginRight:"8px",marginTop:"0px"}})})),n("span",Object.assign({className:"name"},{children:[g,d&&t("span",Object.assign({className:"extra"},{children:d}))]}))]}))}))};p.defaultProps={level:0,className:"",parentPath:""};export{p as default};
1
+ import{slicedToArray as e}from"../../../../../_virtual/_rollupPluginBabelHelpers.js";import{__rest as a}from"../../../../../_virtual/_tslib.js";import{jsx as t,jsxs as i}from"@emotion/react/jsx-runtime";import{useMemo as n}from"react";import"./TreeFile.scss.js";import{useTreeContext as r}from"../../TreeContext.js";import{makeChildPath as c,stopPropagation as o}from"../../utils/treeHelp.js";import s from"../../../Icon/Icon.js";import{useDrag as l,useDrop as m}from"react-dnd";var p=function(p){var f=p.name,g=p.parentPath,u=p.level,d=p.extra,v=p.className,h=p.onMove,j=p.active,T=void 0!==j&&j,x=a(p,["name","parentPath","level","extra","className","onMove","active"]),y=r(),b=y.onFileClick,N=y.childIconPath,P=n((function(){return c(f,g)}),[f,g]),E=l({type:"TREE_ITEM",item:{type:"file",path:P},collect:function(e){return{isDragging:e.isDragging()}}}),_=e(E,2),C=_[0].isDragging,I=_[1],O=m({accept:"TREE_ITEM",drop:function(e){e.path!==P&&h&&h(e.path,P)}}),M=e(O,2)[1],k={paddingLeft:"calc(1.875rem * ".concat(u+1,")")};return t("div",Object.assign({ref:function(e){return I(M(e))},className:"file-container ".concat(v," ").concat(C?"dragging":""," ").concat(T?"active":""),style:k,onClick:function(e){o(e),b&&b(P,{type:"file",name:f,extra:d,active:T})}},x,{children:i("div",Object.assign({className:"names"},{children:["default"!==N&&t("span",Object.assign({className:"icon"},{children:t(s,{iconType:s.type.PATH,icon:"",iconPath:N,iconSize:16,useCurrentColor:!0,style:{display:"block",marginRight:"8px",marginTop:"0px"}})})),i("span",Object.assign({className:"name"},{children:[f,d&&t("span",Object.assign({className:"extra"},{children:d}))]}))]}))}))};p.defaultProps={level:0,className:"",parentPath:""};export{p as default};
2
2
  //# sourceMappingURL=TreeFile.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TreeFile.js","sources":["../../../../../../../src/components/Tree/components/TreeFile/TreeFile.tsx"],"sourcesContent":["import React, { useMemo } from \"react\";\nimport \"./TreeFile.scss\";\nimport { useTreeContext } from \"../../TreeContext\";\nimport { makeChildPath, stopPropagation } from \"../../utils/treeHelp\";\nimport Icon from \"../../../Icon/Icon\";\nimport { useDrag, useDrop } from \"react-dnd\";\n\ninterface Props {\n name: string;\n extra?: string;\n parentPath?: string;\n level?: number;\n className?: string;\n active?: boolean;\n onMove: (draggedItemPath: string, dropTargetPath: string) => void;\n}\n\nconst defaultProps = {\n level: 0,\n className: \"\",\n parentPath: \"\",\n};\n\nconst TreeFile: React.FC<Props> = ({\n name,\n parentPath,\n level,\n extra,\n className,\n onMove,\n active = false,\n ...props\n}) => {\n const { onFileClick, childIconPath } = useTreeContext();\n const currentPath = useMemo(() => makeChildPath(name, parentPath), [\n name,\n parentPath,\n ]);\n\n const [{ isDragging }, dragRef] = useDrag({\n type: \"TREE_ITEM\",\n item: { type: \"file\", path: currentPath },\n collect: (monitor) => ({\n isDragging: monitor.isDragging(),\n }),\n });\n\n const [, dropRef] = useDrop({\n accept: \"TREE_ITEM\",\n drop: (draggedItem: { path: string }) => {\n if (draggedItem.path !== currentPath && onMove) {\n onMove(draggedItem.path, currentPath);\n }\n },\n });\n\n const clickHandler = (event: React.MouseEvent) => {\n stopPropagation(event);\n onFileClick && onFileClick(currentPath);\n };\n\n const containerStyle = {\n paddingLeft: `calc(1.875rem * ${level + 1})`,\n };\n\n return (\n <div\n ref={(node) => dragRef(dropRef(node))}\n className={`file-container ${className} ${isDragging ? \"dragging\" : \"\"} ${active ? \"active\" : \"\"}`}\n style={containerStyle}\n onClick={clickHandler}\n {...props}\n >\n <div className=\"names\">\n {childIconPath !== \"default\" && (\n <span className=\"icon\">\n <Icon\n iconType={Icon.type.PATH}\n icon=\"\"\n //@ts-ignore\n iconPath={childIconPath}\n iconSize={16}\n useCurrentColor\n style={{\n display: \"block\",\n marginRight: \"8px\",\n marginTop: \"0px\",\n }}\n />\n </span>\n )}\n <span className=\"name\">\n {name}\n {extra && <span className=\"extra\">{extra}</span>}\n </span>\n </div>\n </div>\n );\n};\n\nTreeFile.defaultProps = defaultProps;\nexport default TreeFile;"],"names":["TreeFile","_a","name","parentPath","level","extra","className","onMove","_a$active","active","props","__rest","_useTreeContext","useTreeContext","onFileClick","childIconPath","currentPath","useMemo","makeChildPath","_useDrag","useDrag","type","item","path","collect","monitor","isDragging","_useDrag2","_slicedToArray","dragRef","_useDrop","useDrop","accept","drop","draggedItem","dropRef","containerStyle","paddingLeft","concat","_jsx","Object","assign","ref","node","style","onClick","event","stopPropagation","_jsxs","children","Icon","iconType","PATH","icon","iconPath","iconSize","useCurrentColor","display","marginRight","marginTop","defaultProps"],"mappings":"+dAiBA,IAMMA,EAA4B,SAACC,OACjCC,EAMcD,EANdC,KACAC,EAKcF,EALdE,WACAC,EAIcH,EAJdG,MACAC,EAGcJ,EAHdI,MACAC,EAEcL,EAFdK,UACAC,EACcN,EADdM,OAAMC,EACQP,EAAdQ,OAAAA,OAAS,IAAHD,GAAQA,EACXE,EAAKC,EAAAV,EARyB,qEAUjCW,EAAuCC,IAA/BC,EAAWF,EAAXE,YAAaC,EAAaH,EAAbG,cACfC,EAAcC,GAAQ,WAAA,OAAMC,EAAchB,EAAMC,EAAW,GAAE,CACjED,EACAC,IAGFgB,EAAkCC,EAAQ,CACxCC,KAAM,YACNC,KAAM,CAAED,KAAM,OAAQE,KAAMP,GAC5BQ,QAAS,SAACC,GAAO,MAAM,CACrBC,WAAYD,EAAQC,aACrB,IACDC,EAAAC,EAAAT,EAAA,GANOO,EAAUC,EAAA,GAAVD,WAAcG,EAAOF,EAAA,GAQ9BG,EAAoBC,EAAQ,CAC1BC,OAAQ,YACRC,KAAM,SAACC,GACDA,EAAYX,OAASP,GAAeT,GACtCA,EAAO2B,EAAYX,KAAMP,EAE7B,IANOmB,EAOPP,EAAAE,EAAA,GAPc,GAcVM,EAAiB,CACrBC,YAAWC,mBAAAA,OAAqBlC,EAAQ,EAAC,MAG3C,OACEmC,EACE,MAAAC,OAAAC,OAAA,CAAAC,IAAK,SAACC,GAAI,OAAKd,EAAQM,EAAQQ,GAAM,EACrCrC,UAAS,kBAAAgC,OAAoBhC,OAASgC,OAAIZ,EAAa,WAAa,GAAE,KAAAY,OAAI7B,EAAS,SAAW,IAC9FmC,MAAOR,EACPS,QAdiB,SAACC,GACpBC,EAAgBD,GAChBhC,GAAeA,EAAYE,KAarBN,YAEJsC,EAAK,MAAAR,OAAAC,OAAA,CAAAnC,UAAU,SAAO,CAAA2C,SAAA,CACD,YAAlBlC,GACCwB,wBAAMjC,UAAU,QACd,CAAA2C,SAAAV,EAACW,EACC,CAAAC,SAAUD,EAAK7B,KAAK+B,KACpBC,KAAK,GAELC,SAAUvC,EACVwC,SAAU,GACVC,iBACA,EAAAZ,MAAO,CACLa,QAAS,QACTC,YAAa,MACbC,UAAW,YAKnBX,EAAA,OAAAR,OAAAC,OAAA,CAAMnC,UAAU,QACb,CAAA2C,SAAA,CAAA/C,EACAG,GAASkC,EAAM,OAAAC,OAAAC,OAAA,CAAAnC,UAAU,SAAS,CAAA2C,SAAA5C,eAK7C,EAEAL,EAAS4D,aAnFY,CACnBxD,MAAO,EACPE,UAAW,GACXH,WAAY"}
1
+ {"version":3,"file":"TreeFile.js","sources":["../../../../../../../src/components/Tree/components/TreeFile/TreeFile.tsx"],"sourcesContent":["import React, { useMemo } from \"react\";\nimport \"./TreeFile.scss\";\nimport { useTreeContext } from \"../../TreeContext\";\nimport { makeChildPath, stopPropagation } from \"../../utils/treeHelp\";\nimport Icon from \"../../../Icon/Icon\";\nimport { useDrag, useDrop } from \"react-dnd\";\n\ninterface Props {\n name: string;\n extra?: string;\n parentPath?: string;\n level?: number;\n className?: string;\n active?: boolean;\n onMove: (draggedItemPath: string, dropTargetPath: string) => void;\n}\n\nconst defaultProps = {\n level: 0,\n className: \"\",\n parentPath: \"\",\n};\n\nconst TreeFile: React.FC<Props> = ({\n name,\n parentPath,\n level,\n extra,\n className,\n onMove,\n active = false,\n ...props\n}) => {\n const { onFileClick, childIconPath } = useTreeContext();\n const currentPath = useMemo(() => makeChildPath(name, parentPath), [\n name,\n parentPath,\n ]);\n\n const [{ isDragging }, dragRef] = useDrag({\n type: \"TREE_ITEM\",\n item: { type: \"file\", path: currentPath },\n collect: (monitor) => ({\n isDragging: monitor.isDragging(),\n }),\n });\n\n const [, dropRef] = useDrop({\n accept: \"TREE_ITEM\",\n drop: (draggedItem: { path: string }) => {\n if (draggedItem.path !== currentPath && onMove) {\n onMove(draggedItem.path, currentPath);\n }\n },\n });\n\n const clickHandler = (event: React.MouseEvent) => {\n stopPropagation(event);\n if (onFileClick) {\n onFileClick(currentPath, {\n type: \"file\",\n name,\n extra,\n active\n });\n }\n };\n\n const containerStyle = {\n paddingLeft: `calc(1.875rem * ${level + 1})`,\n };\n\n return (\n <div\n ref={(node) => dragRef(dropRef(node))}\n className={`file-container ${className} ${isDragging ? \"dragging\" : \"\"} ${active ? \"active\" : \"\"}`}\n style={containerStyle}\n onClick={clickHandler}\n {...props}\n >\n <div className=\"names\">\n {childIconPath !== \"default\" && (\n <span className=\"icon\">\n <Icon\n iconType={Icon.type.PATH}\n icon=\"\"\n //@ts-ignore\n iconPath={childIconPath}\n iconSize={16}\n useCurrentColor\n style={{\n display: \"block\",\n marginRight: \"8px\",\n marginTop: \"0px\",\n }}\n />\n </span>\n )}\n <span className=\"name\">\n {name}\n {extra && <span className=\"extra\">{extra}</span>}\n </span>\n </div>\n </div>\n );\n};\n\nTreeFile.defaultProps = defaultProps;\nexport default TreeFile;"],"names":["TreeFile","_a","name","parentPath","level","extra","className","onMove","_a$active","active","props","__rest","_useTreeContext","useTreeContext","onFileClick","childIconPath","currentPath","useMemo","makeChildPath","_useDrag","useDrag","type","item","path","collect","monitor","isDragging","_useDrag2","_slicedToArray","dragRef","_useDrop","useDrop","accept","drop","draggedItem","dropRef","containerStyle","paddingLeft","concat","_jsx","Object","assign","ref","node","style","onClick","event","stopPropagation","_jsxs","children","Icon","iconType","PATH","icon","iconPath","iconSize","useCurrentColor","display","marginRight","marginTop","defaultProps"],"mappings":"+dAiBA,IAMMA,EAA4B,SAACC,OACjCC,EAMcD,EANdC,KACAC,EAKcF,EALdE,WACAC,EAIcH,EAJdG,MACAC,EAGcJ,EAHdI,MACAC,EAEcL,EAFdK,UACAC,EACcN,EADdM,OAAMC,EACQP,EAAdQ,OAAAA,OAAS,IAAHD,GAAQA,EACXE,EAAKC,EAAAV,EARyB,qEAUjCW,EAAuCC,IAA/BC,EAAWF,EAAXE,YAAaC,EAAaH,EAAbG,cACfC,EAAcC,GAAQ,WAAA,OAAMC,EAAchB,EAAMC,EAAW,GAAE,CACjED,EACAC,IAGFgB,EAAkCC,EAAQ,CACxCC,KAAM,YACNC,KAAM,CAAED,KAAM,OAAQE,KAAMP,GAC5BQ,QAAS,SAACC,GAAO,MAAM,CACrBC,WAAYD,EAAQC,aACrB,IACDC,EAAAC,EAAAT,EAAA,GANOO,EAAUC,EAAA,GAAVD,WAAcG,EAAOF,EAAA,GAQ9BG,EAAoBC,EAAQ,CAC1BC,OAAQ,YACRC,KAAM,SAACC,GACDA,EAAYX,OAASP,GAAeT,GACtCA,EAAO2B,EAAYX,KAAMP,EAE7B,IANOmB,EAOPP,EAAAE,EAAA,GAPc,GAqBVM,EAAiB,CACrBC,YAAWC,mBAAAA,OAAqBlC,EAAQ,EAAC,MAG3C,OACEmC,EACE,MAAAC,OAAAC,OAAA,CAAAC,IAAK,SAACC,GAAI,OAAKd,EAAQM,EAAQQ,GAAM,EACrCrC,UAAS,kBAAAgC,OAAoBhC,OAASgC,OAAIZ,EAAa,WAAa,GAAE,KAAAY,OAAI7B,EAAS,SAAW,IAC9FmC,MAAOR,EACPS,QArBiB,SAACC,GACpBC,EAAgBD,GACZhC,GACFA,EAAYE,EAAa,CACvBK,KAAM,OACNnB,KAAAA,EACAG,MAAAA,EACAI,OAAAA,MAeEC,YAEJsC,EAAK,MAAAR,OAAAC,OAAA,CAAAnC,UAAU,SAAO,CAAA2C,SAAA,CACD,YAAlBlC,GACCwB,wBAAMjC,UAAU,QACd,CAAA2C,SAAAV,EAACW,EACC,CAAAC,SAAUD,EAAK7B,KAAK+B,KACpBC,KAAK,GAELC,SAAUvC,EACVwC,SAAU,GACVC,iBACA,EAAAZ,MAAO,CACLa,QAAS,QACTC,YAAa,MACbC,UAAW,YAKnBX,EAAA,OAAAR,OAAAC,OAAA,CAAMnC,UAAU,QACb,CAAA2C,SAAA,CAAA/C,EACAG,GAASkC,EAAM,OAAAC,OAAAC,OAAA,CAAAnC,UAAU,SAAS,CAAA2C,SAAA5C,eAK7C,EAEAL,EAAS4D,aA1FY,CACnBxD,MAAO,EACPE,UAAW,GACXH,WAAY"}
@@ -1,2 +1,2 @@
1
- import{slicedToArray as e}from"../../../../../_virtual/_rollupPluginBabelHelpers.js";import{__rest as a}from"../../../../../_virtual/_tslib.js";import{jsxs as t,jsx as n}from"@emotion/react/jsx-runtime";import{useState as r,useEffect as i,useMemo as c}from"react";import{useDrag as s,useDrop as o}from"react-dnd";import"./TreeFolder.scss.js";import{useTreeContext as l}from"../../TreeContext.js";import{makeChildPath as p,stopPropagation as m}from"../../utils/treeHelp.js";import d from"../TreeStatusIcon/TreeStatusIcon.js";import u from"../expand/expand.js";import g from"../../../Icon/Icon.js";var f=function(f){var v=f.name,h=f.children,j=f.parentPath,x=f.level,T=f.extra,b=f.className,N=f.active,O=void 0!==N&&N,y=f.onMove,E=a(f,["name","children","parentPath","level","extra","className","active","onMove"]),P=l(),I=P.initialExpand,_=P.alwaysExpanded,C=P.parentIconPath,M=r(_||I),k=e(M,2),D=k[0],H=k[1];i((function(){H(!!_||I)}),[I,_]);var R=c((function(){return p(v,j)}),[v,j]),S=s({type:"TREE_ITEM",item:{type:"folder",path:R},collect:function(e){return{isDragging:e.isDragging()}}}),A=e(S,2),F=A[0].isDragging,w=A[1],z=o({accept:"TREE_ITEM",drop:function(e){e.path!==R&&y&&y(e.path,R)},collect:function(e){return{isOver:e.isOver()}}}),B=e(z,2),L=B[0].isOver,q=B[1],G={paddingLeft:"calc(1.875rem * ".concat(x+1,")")};return t("div",Object.assign({className:"folder-container ".concat(b," ").concat(F?"dragging":"")},E,{children:[t("div",Object.assign({ref:function(e){return w(q(e))},className:"names ".concat(O&&"active"," ").concat(L?"drop-target":""),"data-level":x,style:G,onClick:function(){_||H(!D)}},{children:[n("span",Object.assign({className:"status"},{children:n(d,{active:D})})),"default"!==C&&n("span",Object.assign({className:"icon"},{children:n(g,{iconType:g.type.PATH,icon:"",iconPath:C,iconSize:16,useCurrentColor:!0,style:{display:"block",marginRight:"8px",marginTop:"0px"}})})),t("span",Object.assign({className:"name"},{children:[v,T&&n("span",Object.assign({className:"extra"},{children:T}))]}))]})),n(u,Object.assign({isExpanded:D},{children:n("div",Object.assign({className:"content",onClick:m},{children:h}))}))]}))};f.defaultProps={level:0,className:"",parentPath:""},f.displayName="TreeFolder";export{f as default};
1
+ import{slicedToArray as e}from"../../../../../_virtual/_rollupPluginBabelHelpers.js";import{__rest as a}from"../../../../../_virtual/_tslib.js";import{jsxs as t,jsx as r}from"@emotion/react/jsx-runtime";import n,{useState as i,useEffect as c,useMemo as s}from"react";import{useDrag as o,useDrop as l}from"react-dnd";import"./TreeFolder.scss.js";import{useTreeContext as p}from"../../TreeContext.js";import{makeChildPath as m,stopPropagation as d}from"../../utils/treeHelp.js";import u from"../TreeStatusIcon/TreeStatusIcon.js";import f from"../expand/expand.js";import g from"../../../Icon/Icon.js";var v=function(v){var h=v.name,j=v.children,x=v.parentPath,y=v.level,T=v.extra,b=v.className,N=v.active,O=void 0!==N&&N,E=v.onMove,P=a(v,["name","children","parentPath","level","extra","className","active","onMove"]),C=p(),I=C.onFileClick,_=C.initialExpand,k=C.alwaysExpanded,M=C.parentIconPath,A=i(k||_),D=e(A,2),F=D[0],H=D[1];c((function(){H(!!k||_)}),[_,k]);var R=s((function(){return m(h,x)}),[h,x]),S=o({type:"TREE_ITEM",item:{type:"folder",path:R},collect:function(e){return{isDragging:e.isDragging()}}}),w=e(S,2),z=w[0].isDragging,B=w[1],L=l({accept:"TREE_ITEM",drop:function(e){e.path!==R&&E&&E(e.path,R)},collect:function(e){return{isOver:e.isOver()}}}),q=e(L,2),G=q[0].isOver,J=q[1],K={paddingLeft:"calc(1.875rem * ".concat(y+1,")")};return t("div",Object.assign({className:"folder-container ".concat(b," ").concat(z?"dragging":"")},P,{children:[t("div",Object.assign({ref:function(e){return B(J(e))},className:"names ".concat(O&&"active"," ").concat(G?"drop-target":""),"data-level":y,style:K,onClick:function(){k||H(!F),I&&I(R,{type:"directory",name:h,extra:T,files:n.Children.toArray(j),active:O})}},{children:[r("span",Object.assign({className:"status"},{children:r(u,{active:F})})),"default"!==M&&r("span",Object.assign({className:"icon"},{children:r(g,{iconType:g.type.PATH,icon:"",iconPath:M,iconSize:16,useCurrentColor:!0,style:{display:"block",marginRight:"8px",marginTop:"0px"}})})),t("span",Object.assign({className:"name"},{children:[h,T&&r("span",Object.assign({className:"extra"},{children:T}))]}))]})),r(f,Object.assign({isExpanded:F},{children:r("div",Object.assign({className:"content",onClick:d},{children:j}))}))]}))};v.defaultProps={level:0,className:"",parentPath:""},v.displayName="TreeFolder";export{v as default};
2
2
  //# sourceMappingURL=TreeFolder.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TreeFolder.js","sources":["../../../../../../../src/components/Tree/components/TreeFolder/TreeFolder.tsx"],"sourcesContent":["import React, { ReactNode, useEffect, useMemo, useState } from \"react\";\nimport { useDrag, useDrop } from \"react-dnd\";\nimport \"./TreeFolder.scss\";\nimport { useTreeContext } from \"../../TreeContext\";\nimport {\n makeChildPath,\n sortChildren,\n stopPropagation,\n} from \"../../utils/treeHelp\";\nimport TreeFile from \"../TreeFile/TreeFile\";\nimport TreeStatusIcon from \"../TreeStatusIcon/TreeStatusIcon\";\nimport Expand from \"../expand/expand\";\nimport Icon from \"../../../Icon/Icon\";\n\ninterface Props {\n name: string;\n extra?: string;\n parentPath?: string;\n level?: number;\n className?: string;\n active?: boolean;\n onMove: (draggedItemPath: string, dropTargetPath: string) => void;\n}\n\nconst defaultProps = {\n level: 0,\n className: \"\",\n parentPath: \"\",\n};\n\nconst TreeFolder: React.FC<React.PropsWithChildren<Props>> = ({\n name,\n children,\n parentPath,\n level: parentLevel,\n extra,\n className,\n active = false,\n onMove,\n ...props\n}) => {\n const { initialExpand, isImperative, alwaysExpanded, parentIconPath } =\n useTreeContext();\n const [expanded, setExpanded] = useState<boolean>(\n alwaysExpanded || initialExpand\n );\n\n useEffect(() => {\n if (alwaysExpanded) {\n setExpanded(true);\n } else {\n setExpanded(initialExpand);\n }\n }, [initialExpand, alwaysExpanded]);\n\n const currentPath = useMemo(\n () => makeChildPath(name, parentPath),\n [name, parentPath]\n );\n\n const [{ isDragging }, dragRef] = useDrag({\n type: \"TREE_ITEM\",\n item: { type: \"folder\", path: currentPath },\n collect: (monitor) => ({\n isDragging: monitor.isDragging(),\n }),\n });\n\n const [{ isOver }, dropRef] = useDrop({\n accept: \"TREE_ITEM\",\n drop: (draggedItem: { path: string }) => {\n if (draggedItem.path !== currentPath && onMove) {\n onMove(draggedItem.path, currentPath);\n }\n },\n collect: (monitor) => ({\n isOver: monitor.isOver(),\n }),\n });\n\n const clickHandler = () => {\n if (!alwaysExpanded) {\n setExpanded(!expanded);\n }\n };\n\n const namesStyle = {\n paddingLeft: `calc(1.875rem * ${parentLevel + 1})`,\n };\n\n return (\n <div \n className={`folder-container ${className} ${isDragging ? \"dragging\" : \"\"}`}\n {...props}\n >\n <div\n ref={(node) => dragRef(dropRef(node))}\n className={`names ${active && \"active\"} ${isOver ? \"drop-target\" : \"\"}`}\n data-level={parentLevel}\n style={namesStyle}\n onClick={clickHandler}\n >\n <span className=\"status\">\n <TreeStatusIcon active={expanded} />\n </span>\n {parentIconPath !== \"default\" && (\n <span className=\"icon\">\n <Icon\n iconType={Icon.type.PATH}\n icon=\"\"\n //@ts-ignore\n iconPath={parentIconPath}\n iconSize={16}\n useCurrentColor\n style={{\n display: \"block\",\n marginRight: \"8px\",\n marginTop: \"0px\",\n }}\n />\n </span>\n )}\n <span className=\"name\">\n {name}\n {extra && <span className=\"extra\">{extra}</span>}\n </span>\n </div>\n <Expand isExpanded={expanded}>\n <div className=\"content\" onClick={stopPropagation}>\n {children}\n </div>\n </Expand>\n </div>\n );\n};\n\nTreeFolder.defaultProps = defaultProps;\nTreeFolder.displayName = \"TreeFolder\";\n\nexport default TreeFolder;\n"],"names":["TreeFolder","_a","name","children","parentPath","parentLevel","level","extra","className","_a$active","active","onMove","props","__rest","_useTreeContext","useTreeContext","initialExpand","alwaysExpanded","parentIconPath","_useState","useState","_useState2","_slicedToArray","expanded","setExpanded","useEffect","currentPath","useMemo","makeChildPath","_useDrag","useDrag","type","item","path","collect","monitor","isDragging","_useDrag2","dragRef","_useDrop","useDrop","accept","drop","draggedItem","isOver","_useDrop2","dropRef","namesStyle","paddingLeft","concat","_jsxs","Object","assign","ref","node","style","onClick","_jsx","TreeStatusIcon","Icon","iconType","PATH","icon","iconPath","iconSize","useCurrentColor","display","marginRight","marginTop","Expand","isExpanded","stopPropagation","defaultProps","displayName"],"mappings":"olBAwBA,IAMMA,EAAuD,SAACC,OAC5DC,IAAAA,KACAC,IAAAA,SACAC,IAAAA,WACOC,IAAPC,MACAC,IAAAA,MACAC,IAAAA,UAASC,IACTC,OAAAA,OAAS,IAAHD,GAAQA,EACdE,IAAAA,OACGC,EATyDC,EAAAZ,EAAA,CAAA,OAAA,WAAA,aAAA,QAAA,QAAA,YAAA,SAAA,WAW5Da,EACEC,IADMC,EAAaF,EAAbE,cAA6BC,EAAcH,EAAdG,eAAgBC,EAAcJ,EAAdI,eAErDC,EAAgCC,EAC9BH,GAAkBD,GACnBK,EAAAC,EAAAH,EAAA,GAFMI,EAAQF,EAAA,GAAEG,EAAWH,EAAA,GAI5BI,GAAU,WAEND,IADEP,GAGUD,EAEhB,GAAG,CAACA,EAAeC,IAEnB,IAAMS,EAAcC,GAClB,WAAA,OAAMC,EAAc1B,EAAME,EAAW,GACrC,CAACF,EAAME,IAGTyB,EAAkCC,EAAQ,CACxCC,KAAM,YACNC,KAAM,CAAED,KAAM,SAAUE,KAAMP,GAC9BQ,QAAS,SAACC,GAAO,MAAM,CACrBC,WAAYD,EAAQC,aACrB,IACDC,EAAAf,EAAAO,EAAA,GANOO,EAAUC,EAAA,GAAVD,WAAcE,EAAOD,EAAA,GAQ9BE,EAA8BC,EAAQ,CACpCC,OAAQ,YACRC,KAAM,SAACC,GACDA,EAAYV,OAASP,GAAef,GACtCA,EAAOgC,EAAYV,KAAMP,EAE5B,EACDQ,QAAS,SAACC,GAAO,MAAM,CACrBS,OAAQT,EAAQS,SACjB,IACDC,EAAAvB,EAAAiB,EAAA,GAVOK,EAAMC,EAAA,GAAND,OAAUE,EAAOD,EAAA,GAkBpBE,EAAa,CACjBC,YAAWC,mBAAAA,OAAqB5C,EAAc,EAAC,MAGjD,OACE6C,uBACE1C,UAAS,oBAAAyC,OAAsBzC,EAAS,KAAAyC,OAAIb,EAAa,WAAa,KAClExB,EAAK,CAAAT,SAAA,CAEX+C,EACE,MAAAC,OAAAC,OAAA,CAAAC,IAAK,SAACC,GAAI,OAAKhB,EAAQQ,EAAQQ,GAAM,EACrC9C,UAASyC,SAAAA,OAAWvC,GAAU,SAAQ,KAAAuC,OAAIL,EAAS,cAAgB,iBACvDvC,EACZkD,MAAOR,EACPS,QApBiB,WACdvC,GACHO,GAAaD,gBAoBXkC,EAAM,OAAAN,OAAAC,OAAA,CAAA5C,UAAU,UAAQ,CAAAL,SACtBsD,EAACC,EAAc,CAAChD,OAAQa,OAEN,YAAnBL,GACCuC,EAAM,OAAAN,OAAAC,OAAA,CAAA5C,UAAU,QACd,CAAAL,SAAAsD,EAACE,EACC,CAAAC,SAAUD,EAAK5B,KAAK8B,KACpBC,KAAK,GAELC,SAAU7C,EACV8C,SAAU,GACVC,iBACA,EAAAV,MAAO,CACLW,QAAS,QACTC,YAAa,MACbC,UAAW,YAKnBlB,wBAAM1C,UAAU,QACb,CAAAL,SAAA,CAAAD,EACAK,GAASkD,wBAAMjD,UAAU,SAAS,CAAAL,SAAAI,aAGvCkD,EAACY,iBAAOC,WAAY/C,GAClB,CAAApB,SAAAsD,EAAA,MAAAN,OAAAC,OAAA,CAAK5C,UAAU,UAAUgD,QAASe,GAC/B,CAAApE,SAAAA,WAKX,EAEAH,EAAWwE,aAhHU,CACnBlE,MAAO,EACPE,UAAW,GACXJ,WAAY,IA8GdJ,EAAWyE,YAAc"}
1
+ {"version":3,"file":"TreeFolder.js","sources":["../../../../../../../src/components/Tree/components/TreeFolder/TreeFolder.tsx"],"sourcesContent":["import React, { ReactNode, useEffect, useMemo, useState } from \"react\";\nimport { useDrag, useDrop } from \"react-dnd\";\nimport \"./TreeFolder.scss\";\nimport { useTreeContext } from \"../../TreeContext\";\nimport {\n makeChildPath,\n sortChildren,\n stopPropagation,\n} from \"../../utils/treeHelp\";\nimport TreeFile from \"../TreeFile/TreeFile\";\nimport TreeStatusIcon from \"../TreeStatusIcon/TreeStatusIcon\";\nimport Expand from \"../expand/expand\";\nimport Icon from \"../../../Icon/Icon\";\n\ninterface Props {\n name: string;\n extra?: string;\n parentPath?: string;\n level?: number;\n className?: string;\n active?: boolean;\n onMove: (draggedItemPath: string, dropTargetPath: string) => void;\n}\n\nconst defaultProps = {\n level: 0,\n className: \"\",\n parentPath: \"\",\n};\n\nconst TreeFolder: React.FC<React.PropsWithChildren<Props>> = ({\n name,\n children,\n parentPath,\n level: parentLevel,\n extra,\n className,\n active = false,\n onMove,\n ...props\n}) => {\n const { onFileClick, initialExpand, isImperative, alwaysExpanded, parentIconPath } =\n useTreeContext();\n const [expanded, setExpanded] = useState<boolean>(\n alwaysExpanded || initialExpand\n );\n\n useEffect(() => {\n if (alwaysExpanded) {\n setExpanded(true);\n } else {\n setExpanded(initialExpand);\n }\n }, [initialExpand, alwaysExpanded]);\n\n const currentPath = useMemo(\n () => makeChildPath(name, parentPath),\n [name, parentPath]\n );\n\n const [{ isDragging }, dragRef] = useDrag({\n type: \"TREE_ITEM\",\n item: { type: \"folder\", path: currentPath },\n collect: (monitor) => ({\n isDragging: monitor.isDragging(),\n }),\n });\n\n const [{ isOver }, dropRef] = useDrop({\n accept: \"TREE_ITEM\",\n drop: (draggedItem: { path: string }) => {\n if (draggedItem.path !== currentPath && onMove) {\n onMove(draggedItem.path, currentPath);\n }\n },\n collect: (monitor) => ({\n isOver: monitor.isOver(),\n }),\n });\n\n const clickHandler = () => {\n if (!alwaysExpanded) {\n setExpanded(!expanded);\n }\n if (onFileClick) {\n onFileClick(currentPath, {\n type: \"directory\",\n name,\n extra,\n //@ts-ignore\n files: React.Children.toArray(children),\n active\n });\n }\n };\n\n const namesStyle = {\n paddingLeft: `calc(1.875rem * ${parentLevel + 1})`,\n };\n\n return (\n <div \n className={`folder-container ${className} ${isDragging ? \"dragging\" : \"\"}`}\n {...props}\n >\n <div\n ref={(node) => dragRef(dropRef(node))}\n className={`names ${active && \"active\"} ${isOver ? \"drop-target\" : \"\"}`}\n data-level={parentLevel}\n style={namesStyle}\n onClick={clickHandler}\n >\n <span className=\"status\">\n <TreeStatusIcon active={expanded} />\n </span>\n {parentIconPath !== \"default\" && (\n <span className=\"icon\">\n <Icon\n iconType={Icon.type.PATH}\n icon=\"\"\n //@ts-ignore\n iconPath={parentIconPath}\n iconSize={16}\n useCurrentColor\n style={{\n display: \"block\",\n marginRight: \"8px\",\n marginTop: \"0px\",\n }}\n />\n </span>\n )}\n <span className=\"name\">\n {name}\n {extra && <span className=\"extra\">{extra}</span>}\n </span>\n </div>\n <Expand isExpanded={expanded}>\n <div className=\"content\" onClick={stopPropagation}>\n {children}\n </div>\n </Expand>\n </div>\n );\n};\n\nTreeFolder.defaultProps = defaultProps;\nTreeFolder.displayName = \"TreeFolder\";\n\nexport default TreeFolder;\n"],"names":["TreeFolder","_a","name","children","parentPath","parentLevel","level","extra","className","_a$active","active","onMove","props","__rest","_useTreeContext","useTreeContext","onFileClick","initialExpand","alwaysExpanded","parentIconPath","_useState","useState","_useState2","_slicedToArray","expanded","setExpanded","useEffect","currentPath","useMemo","makeChildPath","_useDrag","useDrag","type","item","path","collect","monitor","isDragging","_useDrag2","dragRef","_useDrop","useDrop","accept","drop","draggedItem","isOver","_useDrop2","dropRef","namesStyle","paddingLeft","concat","_jsxs","Object","assign","ref","node","style","onClick","files","React","Children","toArray","_jsx","TreeStatusIcon","Icon","iconType","PATH","icon","iconPath","iconSize","useCurrentColor","display","marginRight","marginTop","Expand","isExpanded","stopPropagation","defaultProps","displayName"],"mappings":"ulBAwBA,IAMMA,EAAuD,SAACC,OAC5DC,IAAAA,KACAC,IAAAA,SACAC,IAAAA,WACOC,IAAPC,MACAC,IAAAA,MACAC,IAAAA,UAASC,IACTC,OAAAA,OAAS,IAAHD,GAAQA,EACdE,IAAAA,OACGC,EATyDC,EAAAZ,EAAA,CAAA,OAAA,WAAA,aAAA,QAAA,QAAA,YAAA,SAAA,WAW5Da,EACEC,IADMC,EAAWF,EAAXE,YAAaC,EAAaH,EAAbG,cAA6BC,EAAcJ,EAAdI,eAAgBC,EAAcL,EAAdK,eAElEC,EAAgCC,EAC9BH,GAAkBD,GACnBK,EAAAC,EAAAH,EAAA,GAFMI,EAAQF,EAAA,GAAEG,EAAWH,EAAA,GAI5BI,GAAU,WAEND,IADEP,GAGUD,EAEhB,GAAG,CAACA,EAAeC,IAEnB,IAAMS,EAAcC,GAClB,WAAA,OAAMC,EAAc3B,EAAME,EAAW,GACrC,CAACF,EAAME,IAGT0B,EAAkCC,EAAQ,CACxCC,KAAM,YACNC,KAAM,CAAED,KAAM,SAAUE,KAAMP,GAC9BQ,QAAS,SAACC,GAAO,MAAM,CACrBC,WAAYD,EAAQC,aACrB,IACDC,EAAAf,EAAAO,EAAA,GANOO,EAAUC,EAAA,GAAVD,WAAcE,EAAOD,EAAA,GAQ9BE,EAA8BC,EAAQ,CACpCC,OAAQ,YACRC,KAAM,SAACC,GACDA,EAAYV,OAASP,GAAehB,GACtCA,EAAOiC,EAAYV,KAAMP,EAE5B,EACDQ,QAAS,SAACC,GAAO,MAAM,CACrBS,OAAQT,EAAQS,SACjB,IACDC,EAAAvB,EAAAiB,EAAA,GAVOK,EAAMC,EAAA,GAAND,OAAUE,EAAOD,EAAA,GA4BpBE,EAAa,CACjBC,YAAWC,mBAAAA,OAAqB7C,EAAc,EAAC,MAGjD,OACE8C,uBACE3C,UAAS,oBAAA0C,OAAsB1C,EAAS,KAAA0C,OAAIb,EAAa,WAAa,KAClEzB,EAAK,CAAAT,SAAA,CAEXgD,EACE,MAAAC,OAAAC,OAAA,CAAAC,IAAK,SAACC,GAAI,OAAKhB,EAAQQ,EAAQQ,GAAM,EACrC/C,UAAS0C,SAAAA,OAAWxC,GAAU,SAAQ,KAAAwC,OAAIL,EAAS,cAAgB,iBACvDxC,EACZmD,MAAOR,EACPS,QA9BiB,WACdvC,GACHO,GAAaD,GAEXR,GACFA,EAAYW,EAAa,CACvBK,KAAM,YACN9B,KAAAA,EACAK,MAAAA,EAEAmD,MAAOC,EAAMC,SAASC,QAAQ1D,GAC9BO,OAAAA,iBAqBAoD,EAAM,OAAAV,OAAAC,OAAA,CAAA7C,UAAU,UAAQ,CAAAL,SACtB2D,EAACC,EAAc,CAACrD,OAAQc,OAEN,YAAnBL,GACC2C,EAAM,OAAAV,OAAAC,OAAA,CAAA7C,UAAU,QACd,CAAAL,SAAA2D,EAACE,EACC,CAAAC,SAAUD,EAAKhC,KAAKkC,KACpBC,KAAK,GAELC,SAAUjD,EACVkD,SAAU,GACVC,iBACA,EAAAd,MAAO,CACLe,QAAS,QACTC,YAAa,MACbC,UAAW,YAKnBtB,wBAAM3C,UAAU,QACb,CAAAL,SAAA,CAAAD,EACAK,GAASuD,wBAAMtD,UAAU,SAAS,CAAAL,SAAAI,aAGvCuD,EAACY,iBAAOC,WAAYnD,GAClB,CAAArB,SAAA2D,EAAA,MAAAV,OAAAC,OAAA,CAAK7C,UAAU,UAAUiD,QAASmB,GAC/B,CAAAzE,SAAAA,WAKX,EAEAH,EAAW6E,aA1HU,CACnBvE,MAAO,EACPE,UAAW,GACXJ,WAAY,IAwHdJ,EAAW8E,YAAc"}
@@ -1,2 +1,2 @@
1
- var n='.folder-container {\n cursor: pointer;\n line-height: 1;\n user-select: none;\n}\n.folder-container .names {\n display: flex;\n height: 1.75rem;\n align-items: center;\n position: relative;\n border-radius: 6px;\n cursor: pointer;\n user-select: none;\n}\n.folder-container .names[data-level] {\n margin-left: calc(1.875rem * attr(data-level));\n}\n.folder-container .names:hover {\n background-color: var(--surface-level-100-hover);\n}\n.folder-container .names.active {\n background-color: var(--surface-level-100-hover);\n}\n.folder-container .names.drop-target::after {\n content: "";\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n border: 2px dashed var(--divider-primary);\n border-radius: 4px;\n pointer-events: none;\n}\n.folder-container > .names {\n margin-bottom: 4px;\n}\n.folder-container .status {\n width: 0.875rem;\n height: 0.875rem;\n z-index: 10;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n margin-right: 10px;\n}\n.folder-container .icon {\n width: 1.5rem;\n height: 100%;\n display: inline-flex;\n align-items: center;\n}\n.folder-container .name {\n transition: opacity 100ms ease 0ms;\n color: var(--text-primary);\n white-space: nowrap;\n font-size: 0.875rem;\n}\n.folder-container .name:hover {\n opacity: 0.7;\n}\n.folder-container .name .indent {\n position: absolute !important;\n top: 50% !important;\n transform: translateY(-50%) !important;\n width: 1px !important;\n height: 100% !important;\n background-color: var(--text-primary) !important;\n margin-left: -1px !important;\n}\n.folder-container .extra {\n font-size: 0.75rem;\n align-self: baseline;\n padding-left: 4px;\n color: var(--text-primary);\n}\n.folder-container .content {\n display: flex;\n flex-direction: column;\n height: auto;\n}';!function(n){if("undefined"==typeof document)return;const e=document.head||document.getElementsByTagName("head")[0],t="s_id-4cc686237963_0_0_385";if(e.querySelector("#"+t))return;const r=document.createElement("style");r.id=t,e.firstChild?e.insertBefore(r,e.firstChild):e.appendChild(r),r.appendChild(document.createTextNode(n))}(n);export{n as default};
1
+ var n='.folder-container {\n cursor: pointer;\n line-height: 1;\n user-select: none;\n}\n.folder-container .names {\n display: flex;\n height: 1.75rem;\n align-items: center;\n position: relative;\n border-radius: 6px;\n cursor: pointer;\n user-select: none;\n}\n.folder-container .names[data-level] {\n margin-left: calc(1.875rem * attr(data-level));\n}\n.folder-container .names:hover {\n background-color: var(--surface-level-100-hover);\n}\n.folder-container .names.active {\n background-color: var(--surface-level-100-hover);\n}\n.folder-container .names.drop-target::after {\n content: "";\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n border: 2px dashed var(--surface-level-400);\n border-radius: 4px;\n pointer-events: none;\n}\n.folder-container > .names {\n margin-bottom: 4px;\n}\n.folder-container .status {\n width: 0.875rem;\n height: 0.875rem;\n z-index: 10;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n margin-right: 10px;\n}\n.folder-container .icon {\n width: 1.5rem;\n height: 100%;\n display: inline-flex;\n align-items: center;\n}\n.folder-container .name {\n transition: opacity 100ms ease 0ms;\n color: var(--text-primary);\n white-space: nowrap;\n font-size: 0.875rem;\n}\n.folder-container .name:hover {\n opacity: 0.7;\n}\n.folder-container .name .indent {\n position: absolute !important;\n top: 50% !important;\n transform: translateY(-50%) !important;\n width: 1px !important;\n height: 100% !important;\n background-color: var(--text-primary) !important;\n margin-left: -1px !important;\n}\n.folder-container .extra {\n font-size: 0.75rem;\n align-self: baseline;\n padding-left: 4px;\n color: var(--text-primary);\n}\n.folder-container .content {\n display: flex;\n flex-direction: column;\n height: auto;\n}';!function(n){if("undefined"==typeof document)return;const e=document.head||document.getElementsByTagName("head")[0],t="s_id-1b49dbd3e992_0_0_385";if(e.querySelector("#"+t))return;const r=document.createElement("style");r.id=t,e.firstChild?e.insertBefore(r,e.firstChild):e.appendChild(r),r.appendChild(document.createTextNode(n))}(n);export{n as default};
2
2
  //# sourceMappingURL=TreeFolder.scss.js.map
@@ -14,9 +14,10 @@ interface Props {
14
14
  alwaysExpanded?: boolean;
15
15
  parentIconPath?: PathName;
16
16
  childIconPath?: PathName;
17
- onClick?: (path: string) => void;
17
+ onClick?: (path: string, node: TreeFile) => void;
18
18
  className?: string;
19
19
  enableSorting?: boolean;
20
+ readOnly?: boolean;
20
21
  onMove: (draggedItemPath: string, dropTargetPath: string, parentNode: TreeFile | null, draggedNode: TreeFile) => void;
21
22
  }
22
23
  type NativeAttrs = Omit<React.HTMLAttributes<any>, keyof Props>;
@@ -1 +1 @@
1
- {"version":3,"file":"Tree.d.ts","sourceRoot":"","sources":["../../../../src/components/Tree/Tree.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAuC,MAAM,OAAO,CAAC;AAK5D,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAMjD,QAAA,MAAM,iBAAiB,uBAA6B,CAAC;AAGrD,MAAM,MAAM,QAAQ,GAAG;IACrB,IAAI,EAAE,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IACxB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,UAAU,KAAK;IACb,KAAK,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IACxB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,cAAc,CAAC,EAAE,QAAQ,CAAC;IAC1B,aAAa,CAAC,EAAE,QAAQ,CAAC;IACzB,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,MAAM,EAAE,CAAC,eAAe,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,GAAG,IAAI,EAAE,WAAW,EAAE,QAAQ,KAAK,IAAI,CAAC;CACvH;AAQD,KAAK,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,MAAM,KAAK,CAAC,CAAC;AAChE,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG,WAAW,CAAC;AAE5C,QAAA,MAAM,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAwPtD,CAAC;AAKF,eAAe,IAAI,CAAC"}
1
+ {"version":3,"file":"Tree.d.ts","sourceRoot":"","sources":["../../../../src/components/Tree/Tree.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAuC,MAAM,OAAO,CAAC;AAK5D,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAMjD,QAAA,MAAM,iBAAiB,uBAA6B,CAAC;AAGrD,MAAM,MAAM,QAAQ,GAAG;IACrB,IAAI,EAAE,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IACxB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,UAAU,KAAK;IACb,KAAK,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IACxB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,cAAc,CAAC,EAAE,QAAQ,CAAC;IAC1B,aAAa,CAAC,EAAE,QAAQ,CAAC;IACzB,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IACjD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,MAAM,EAAE,CAAC,eAAe,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,GAAG,IAAI,EAAE,WAAW,EAAE,QAAQ,KAAK,IAAI,CAAC;CACvH;AAQD,KAAK,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,MAAM,KAAK,CAAC,CAAC;AAChE,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG,WAAW,CAAC;AAE5C,QAAA,MAAM,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC,SAAS,CAAC,CA+PtD,CAAC;AAKF,eAAe,IAAI,CAAC"}
@@ -1,6 +1,7 @@
1
1
  import React from "react";
2
+ import { TreeFile } from "./Tree";
2
3
  export interface TreeConfig {
3
- onFileClick?: (path: string) => void;
4
+ onFileClick?: (path: string, node: TreeFile) => void;
4
5
  initialExpand: boolean;
5
6
  isImperative: boolean;
6
7
  alwaysExpanded: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"TreeContext.d.ts","sourceRoot":"","sources":["../../../../src/components/Tree/TreeContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,WAAW,UAAU;IACzB,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,aAAa,EAAE,OAAO,CAAC;IACvB,YAAY,EAAE,OAAO,CAAC;IACtB,cAAc,EAAE,OAAO,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;CACvB;AAUD,eAAO,MAAM,WAAW,2BAAkD,CAAC;AAE3E,eAAO,MAAM,cAAc,QAAO,UACS,CAAC"}
1
+ {"version":3,"file":"TreeContext.d.ts","sourceRoot":"","sources":["../../../../src/components/Tree/TreeContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAElC,MAAM,WAAW,UAAU;IACzB,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IACrD,aAAa,EAAE,OAAO,CAAC;IACvB,YAAY,EAAE,OAAO,CAAC;IACtB,cAAc,EAAE,OAAO,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;CACvB;AAUD,eAAO,MAAM,WAAW,2BAAkD,CAAC;AAE3E,eAAO,MAAM,cAAc,QAAO,UACS,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"TreeFile.d.ts","sourceRoot":"","sources":["../../../../../../src/components/Tree/components/TreeFile/TreeFile.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkB,MAAM,OAAO,CAAC;AACvC,OAAO,iBAAiB,CAAC;AAMzB,UAAU,KAAK;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,CAAC,eAAe,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,KAAK,IAAI,CAAC;CACnE;AAQD,QAAA,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CA2E7B,CAAC;AAGF,eAAe,QAAQ,CAAC"}
1
+ {"version":3,"file":"TreeFile.d.ts","sourceRoot":"","sources":["../../../../../../src/components/Tree/components/TreeFile/TreeFile.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkB,MAAM,OAAO,CAAC;AACvC,OAAO,iBAAiB,CAAC;AAMzB,UAAU,KAAK;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,CAAC,eAAe,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,KAAK,IAAI,CAAC;CACnE;AAQD,QAAA,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAkF7B,CAAC;AAGF,eAAe,QAAQ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"TreeFolder.d.ts","sourceRoot":"","sources":["../../../../../../src/components/Tree/components/TreeFolder/TreeFolder.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkD,MAAM,OAAO,CAAC;AAEvE,OAAO,mBAAmB,CAAC;AAY3B,UAAU,KAAK;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,CAAC,eAAe,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,KAAK,IAAI,CAAC;CACnE;AAQD,QAAA,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAwGxD,CAAC;AAKF,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"TreeFolder.d.ts","sourceRoot":"","sources":["../../../../../../src/components/Tree/components/TreeFolder/TreeFolder.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkD,MAAM,OAAO,CAAC;AAEvE,OAAO,mBAAmB,CAAC;AAY3B,UAAU,KAAK;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,CAAC,eAAe,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,KAAK,IAAI,CAAC;CACnE;AAQD,QAAA,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAkHxD,CAAC;AAKF,eAAe,UAAU,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@heliux-org/design-system-core",
3
- "version": "0.0.388-tree-updates",
3
+ "version": "0.0.388-tree-updates-01",
4
4
  "description": "Official Heliux design system resources for application development in React.js",
5
5
  "main": "./dist/main.js",
6
6
  "types": "./dist/types/index.d.ts",
@@ -301,5 +301,5 @@
301
301
  "PR: Icon 💎": "New Icons"
302
302
  }
303
303
  },
304
- "gitHead": "1f6124de5bd319f38424f215a9bf95c1f73d005a"
304
+ "gitHead": "e76b6ef880243c2095de7769fd094f3b0dbce882"
305
305
  }
@@ -26,9 +26,10 @@ interface Props {
26
26
  alwaysExpanded?: boolean;
27
27
  parentIconPath?: PathName;
28
28
  childIconPath?: PathName;
29
- onClick?: (path: string) => void;
29
+ onClick?: (path: string, node: TreeFile) => void;
30
30
  className?: string;
31
31
  enableSorting?: boolean;
32
+ readOnly?: boolean
32
33
  onMove: (draggedItemPath: string, dropTargetPath: string, parentNode: TreeFile | null, draggedNode: TreeFile) => void;
33
34
  }
34
35
 
@@ -51,6 +52,7 @@ const Tree: React.FC<React.PropsWithChildren<TreeProps>> = ({
51
52
  value,
52
53
  className,
53
54
  enableSorting = false,
55
+ readOnly = false,
54
56
  onMove,
55
57
  ...props
56
58
  }: React.PropsWithChildren<TreeProps>) => {
@@ -180,6 +182,7 @@ const Tree: React.FC<React.PropsWithChildren<TreeProps>> = ({
180
182
 
181
183
  const handleMove = (draggedPath: string, targetPath: string) => {
182
184
  if (!treeData) return;
185
+ if (readOnly) return;
183
186
 
184
187
  const draggedName = draggedPath.split('/').pop() || "";
185
188
  const targetName = targetPath.split('/').pop() || "";
@@ -213,7 +216,12 @@ const Tree: React.FC<React.PropsWithChildren<TreeProps>> = ({
213
216
 
214
217
  const isImperative = Boolean(value && value.length > 0);
215
218
  const onFileClick = (path: string) => {
216
- onClick && onClick(path);
219
+ if (onClick && treeData) {
220
+ const node = findNodeByPath(treeData, path);
221
+ if (node) {
222
+ onClick(path, node);
223
+ }
224
+ }
217
225
  };
218
226
 
219
227
  const initialValue = useMemo(
@@ -253,7 +261,7 @@ const Tree: React.FC<React.PropsWithChildren<TreeProps>> = ({
253
261
  name={item.name}
254
262
  extra={item.extra}
255
263
  key={`folder-${item.name}-${index}`}
256
- onMove={onMove}
264
+ onMove={readOnly ? undefined : onMove}
257
265
  parentPath={parentPath}
258
266
  level={level}
259
267
  active={item?.active || false}
@@ -267,7 +275,7 @@ const Tree: React.FC<React.PropsWithChildren<TreeProps>> = ({
267
275
  name={item.name}
268
276
  extra={item.extra}
269
277
  key={`file-${item.name}-${index}`}
270
- onMove={onMove}
278
+ onMove={readOnly ? undefined : onMove}
271
279
  parentPath={parentPath}
272
280
  level={level}
273
281
  active={item?.active || false}
@@ -1,7 +1,8 @@
1
1
  import React from "react";
2
+ import { TreeFile } from "./Tree";
2
3
 
3
4
  export interface TreeConfig {
4
- onFileClick?: (path: string) => void;
5
+ onFileClick?: (path: string, node: TreeFile) => void;
5
6
  initialExpand: boolean;
6
7
  isImperative: boolean;
7
8
  alwaysExpanded: boolean;
@@ -69,8 +69,9 @@ const hierarchyData = [
69
69
  },
70
70
  ];
71
71
 
72
- const handleFileClick = (path: string) => {
73
- console.log('Clicked on file or folder:', path);
72
+ const handleFileClick = (path: string, node: any) => {
73
+ console.log("Clicked path:", path);
74
+ console.log("Clicked node:", node);
74
75
  };
75
76
 
76
77
  export const Basic: StoryObj = {
@@ -56,7 +56,14 @@ const TreeFile: React.FC<Props> = ({
56
56
 
57
57
  const clickHandler = (event: React.MouseEvent) => {
58
58
  stopPropagation(event);
59
- onFileClick && onFileClick(currentPath);
59
+ if (onFileClick) {
60
+ onFileClick(currentPath, {
61
+ type: "file",
62
+ name,
63
+ extra,
64
+ active
65
+ });
66
+ }
60
67
  };
61
68
 
62
69
  const containerStyle = {
@@ -30,7 +30,7 @@
30
30
  left: 0;
31
31
  right: 0;
32
32
  bottom: 0;
33
- border: 2px dashed var(--divider-primary);
33
+ border: 2px dashed var(--surface-level-400);
34
34
  border-radius: 4px;
35
35
  pointer-events: none;
36
36
  }
@@ -39,7 +39,7 @@ const TreeFolder: React.FC<React.PropsWithChildren<Props>> = ({
39
39
  onMove,
40
40
  ...props
41
41
  }) => {
42
- const { initialExpand, isImperative, alwaysExpanded, parentIconPath } =
42
+ const { onFileClick, initialExpand, isImperative, alwaysExpanded, parentIconPath } =
43
43
  useTreeContext();
44
44
  const [expanded, setExpanded] = useState<boolean>(
45
45
  alwaysExpanded || initialExpand
@@ -82,6 +82,16 @@ const TreeFolder: React.FC<React.PropsWithChildren<Props>> = ({
82
82
  if (!alwaysExpanded) {
83
83
  setExpanded(!expanded);
84
84
  }
85
+ if (onFileClick) {
86
+ onFileClick(currentPath, {
87
+ type: "directory",
88
+ name,
89
+ extra,
90
+ //@ts-ignore
91
+ files: React.Children.toArray(children),
92
+ active
93
+ });
94
+ }
85
95
  };
86
96
 
87
97
  const namesStyle = {